mirror of
https://github.com/WatchOutNewsAgency/wona.github.com.git
synced 2026-01-01 01:16:26 +00:00
irrisponsibly massive commit
This commit is contained in:
46
_plugins/custom_filters.rb
Normal file
46
_plugins/custom_filters.rb
Normal file
@ -0,0 +1,46 @@
|
||||
#custom filters for Octopress
|
||||
|
||||
module OctopressFilters
|
||||
def exerpt(input, url, url_text="Reade more…", permalink_text=false)
|
||||
if input.index(/<!--\s?more\s?-->/i)
|
||||
input.split(/<!--\s?more\s?-->/i)[0] + "<p><a href='#{url}'>#{url_text}</a></p>"
|
||||
elsif permalink_text
|
||||
input + "<p><a href='#{url}'>#{permalink_text}</a></p>"
|
||||
else
|
||||
input
|
||||
end
|
||||
end
|
||||
def full_urls(input, url='')
|
||||
input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/[^\"'>]+)/ do
|
||||
$1+url+$3
|
||||
end
|
||||
end
|
||||
def smart_quotes(input)
|
||||
require 'rubypants'
|
||||
RubyPants.new(input).to_html
|
||||
end
|
||||
def titlecase(input)
|
||||
require 'titlecase'
|
||||
input.titlecase
|
||||
end
|
||||
def ordinalize(date)
|
||||
if date.class == String
|
||||
date = Time.parse(date)
|
||||
end
|
||||
"#{date.strftime('%B')} #{ordinal(date.strftime('%e').to_i)}, #{date.strftime('%Y')}"
|
||||
end
|
||||
def ordinal(number)
|
||||
if (11..13).include?(number.to_i % 100)
|
||||
"#{number}<span>th</span>"
|
||||
else
|
||||
case number.to_i % 10
|
||||
when 1; "#{number}<span>st</span>"
|
||||
when 2; "#{number}<span>nd<span>"
|
||||
when 3; "#{number}<span>rd</span>"
|
||||
else "#{number}<span>th</span>"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_filter OctopressFilters
|
||||
132
_plugins/generate_sitemap.rb
Normal file
132
_plugins/generate_sitemap.rb
Normal file
@ -0,0 +1,132 @@
|
||||
# Jekyll sitemap page generator.
|
||||
# http://recursive-design.com/projects/jekyll-plugins/
|
||||
#
|
||||
# Version: 0.1.3 (201101061053)
|
||||
#
|
||||
# Copyright (c) 2010 Dave Perrett, http://recursive-design.com/
|
||||
# Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
|
||||
#
|
||||
# A generator that creates a sitemap.xml page for jekyll sites, suitable for submission to
|
||||
# google etc.
|
||||
#
|
||||
# To use it, simply drop this script into the _plugins directory of your Jekyll site.
|
||||
#
|
||||
# When you compile your jekyll site, this plugin will loop through the list of pages in your
|
||||
# site, and generate an entry in sitemap.xml for each one.
|
||||
|
||||
require 'pathname'
|
||||
|
||||
module Jekyll
|
||||
|
||||
|
||||
# Monkey-patch an accessor for a page's containing folder, since
|
||||
# we need it to generate the sitemap.
|
||||
class Page
|
||||
def subfolder
|
||||
@dir
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# Sub-class Jekyll::StaticFile to allow recovery from unimportant exception
|
||||
# when writing the sitemap file.
|
||||
class StaticSitemapFile < StaticFile
|
||||
def write(dest)
|
||||
super(dest) rescue ArgumentError
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# Generates a sitemap.xml file containing URLs of all pages and posts.
|
||||
class SitemapGenerator < Generator
|
||||
safe true
|
||||
priority :low
|
||||
|
||||
# Domain that you are generating the sitemap for - update this to match your site.
|
||||
BASE_URL = 'http://recursive-design.com'
|
||||
|
||||
# Generates the sitemap.xml file.
|
||||
#
|
||||
# +site+ is the global Site object.
|
||||
def generate(site)
|
||||
# Create the destination folder if necessary.
|
||||
site_folder = site.config['destination']
|
||||
unless File.directory?(site_folder)
|
||||
p = Pathname.new(site_folder)
|
||||
p.mkdir
|
||||
end
|
||||
|
||||
# Write the contents of sitemap.xml.
|
||||
File.open(File.join(site_folder, 'sitemap.xml'), 'w') do |f|
|
||||
f.write(generate_header())
|
||||
f.write(generate_content(site))
|
||||
f.write(generate_footer())
|
||||
f.close
|
||||
end
|
||||
|
||||
# Add a static file entry for the zip file, otherwise Site::cleanup will remove it.
|
||||
site.static_files << Jekyll::StaticSitemapFile.new(site, site.dest, '/', 'sitemap.xml')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Returns the XML header.
|
||||
def generate_header
|
||||
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">"
|
||||
end
|
||||
|
||||
# Returns a string containing the the XML entries.
|
||||
#
|
||||
# +site+ is the global Site object.
|
||||
def generate_content(site)
|
||||
result = ''
|
||||
|
||||
# First, try to find any stand-alone pages.
|
||||
site.pages.each{ |page|
|
||||
path = page.subfolder + '/' + page.name
|
||||
mod_date = File.mtime(site.source + path)
|
||||
|
||||
# Remove the trailing 'index.html' if there is one, and just output the folder name.
|
||||
if path=~/index.html$/
|
||||
path = path[0..-11]
|
||||
end
|
||||
|
||||
unless path =~/error/
|
||||
result += entry(path, mod_date)
|
||||
end
|
||||
}
|
||||
|
||||
# Next, find all the posts.
|
||||
posts = site.site_payload['site']['posts']
|
||||
for post in posts do
|
||||
result += entry(post.id, post.date)
|
||||
end
|
||||
|
||||
result
|
||||
end
|
||||
|
||||
# Returns the XML footer.
|
||||
def generate_footer
|
||||
"\n</urlset>"
|
||||
end
|
||||
|
||||
# Creates an XML entry from the given path and date.
|
||||
#
|
||||
# +path+ is the URL path to the page.
|
||||
# +date+ is the date the file was modified (in the case of regular pages), or published (for blog posts).
|
||||
def entry(path, date)
|
||||
# Force extensions to .html from markdown, textile.
|
||||
path = path.gsub(/\.(markdown|textile)$/i, '.html')
|
||||
"
|
||||
<url>
|
||||
<loc>#{BASE_URL}#{path}</loc>
|
||||
<lastmod>#{date.strftime("%Y-%m-%d")}</lastmod>
|
||||
</url>"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
83
_plugins/gist_tag.rb
Normal file
83
_plugins/gist_tag.rb
Normal file
@ -0,0 +1,83 @@
|
||||
# Nicked from Brandon Tilly
|
||||
# Gist https://gist.github.com/803483
|
||||
# Post http://brandontilley.com/2011/01/31/gist-tag-for-jekyll.html
|
||||
#
|
||||
# Example usage: {% gist 803483 gist_tag.rb %} //embeds a gist for this plugin
|
||||
|
||||
require 'digest/md5'
|
||||
require 'net/https'
|
||||
require 'uri'
|
||||
|
||||
module Jekyll
|
||||
class GistTag < Liquid::Tag
|
||||
def initialize(tag_name, text, token)
|
||||
super
|
||||
system('mkdir -p .gist_cache')
|
||||
@text = text
|
||||
@cache = true
|
||||
@cache_folder = File.expand_path "../.gist_cache", File.dirname(__FILE__)
|
||||
end
|
||||
|
||||
def render(context)
|
||||
return "" unless @text =~ /([\d]*) (.*)/
|
||||
|
||||
gist, file = $1.strip, $2.strip
|
||||
script_url = "https://gist.github.com/#{gist}.js?file=#{file}"
|
||||
|
||||
code = get_cached_gist(gist, file) || get_gist_from_web(gist, file)
|
||||
code = code.gsub "<", "<"
|
||||
string = "<script src='#{script_url}'></script>"
|
||||
string += "<noscript><pre><code>#{code}</code></pre></noscript>"
|
||||
return string
|
||||
end
|
||||
|
||||
def get_gist_url_for(gist, file)
|
||||
"https://gist.github.com/raw/#{gist}/#{file}"
|
||||
end
|
||||
|
||||
def cache_gist(gist, file, data)
|
||||
file = get_cache_file_for gist, file
|
||||
File.open(file, "w+") do |f|
|
||||
f.write(data)
|
||||
end
|
||||
end
|
||||
|
||||
def get_cached_gist(gist, file)
|
||||
return nil if @cache == false
|
||||
file = get_cache_file_for gist, file
|
||||
return nil unless File.exist?(file)
|
||||
return File.new(file).readlines.join
|
||||
end
|
||||
|
||||
def get_cache_file_for(gist, file)
|
||||
gist.gsub! /[^a-zA-Z0-9\-_\.]/, ''
|
||||
file.gsub! /[^a-zA-Z0-9\-_\.]/, ''
|
||||
md5 = Digest::MD5.hexdigest "#{gist}-#{file}"
|
||||
File.join @cache_folder, "#{gist}-#{file}-#{md5}.cache"
|
||||
end
|
||||
|
||||
def get_gist_from_web(gist, file)
|
||||
gist_url = get_gist_url_for(gist, file)
|
||||
raw_uri = URI.parse(gist_url)
|
||||
https = Net::HTTP.new(raw_uri.host, raw_uri.port)
|
||||
https.use_ssl = true
|
||||
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
||||
request = Net::HTTP::Get.new(raw_uri.request_uri)
|
||||
data = https.request(request)
|
||||
data = data.body
|
||||
cache_gist(gist, file, data) unless @cache == false
|
||||
data
|
||||
end
|
||||
end
|
||||
|
||||
class GistTagNoCache < GistTag
|
||||
def initialize(tag_name, text, token)
|
||||
super
|
||||
@cache = false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Liquid::Template.register_tag('gist', Jekyll::GistTag)
|
||||
Liquid::Template.register_tag('gistnocache', Jekyll::GistTagNoCache)
|
||||
|
||||
24
_plugins/haml.rb
Normal file
24
_plugins/haml.rb
Normal file
@ -0,0 +1,24 @@
|
||||
module Jekyll
|
||||
require 'haml'
|
||||
class HamlConverter < Converter
|
||||
safe true
|
||||
priority :low
|
||||
|
||||
def matches(ext)
|
||||
ext =~ /haml/i
|
||||
end
|
||||
|
||||
def output_ext(ext)
|
||||
".html"
|
||||
end
|
||||
|
||||
def convert(content)
|
||||
begin
|
||||
engine = Haml::Engine.new(content)
|
||||
engine.render
|
||||
rescue StandardError => e
|
||||
puts "!!! HAML Error: " + e.message
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
36
_plugins/titlecase.rb
Normal file
36
_plugins/titlecase.rb
Normal file
@ -0,0 +1,36 @@
|
||||
class String
|
||||
def titlecase
|
||||
small_words = %w(a an and as at but by en for if in of on or the to v v. via vs vs.)
|
||||
|
||||
x = split(" ").map do |word|
|
||||
# note: word could contain non-word characters!
|
||||
# downcase all small_words, capitalize the rest
|
||||
small_words.include?(word.gsub(/\W/, "").downcase) ? word.downcase! : word.smart_capitalize!
|
||||
word
|
||||
end
|
||||
# capitalize first and last words
|
||||
x.first.to_s.smart_capitalize!
|
||||
x.last.to_s.smart_capitalize!
|
||||
# small words after colons are capitalized
|
||||
x.join(" ").gsub(/:\s?(\W*#{small_words.join("|")}\W*)\s/) { ": #{$1.smart_capitalize} " }
|
||||
end
|
||||
|
||||
def titlecase!
|
||||
replace(titlecase)
|
||||
end
|
||||
|
||||
def smart_capitalize
|
||||
# ignore any leading crazy characters and capitalize the first real character
|
||||
if self =~ /^['"\(\[']*([a-z])/
|
||||
i = index($1)
|
||||
x = self[i,self.length]
|
||||
# word with capitals and periods mid-word are left alone
|
||||
self[i,1] = self[i,1].upcase unless x =~ /[A-Z]/ or x =~ /\.\w+/
|
||||
end
|
||||
self
|
||||
end
|
||||
|
||||
def smart_capitalize!
|
||||
replace(smart_capitalize)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user