Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@
mkmf.log
_site
.sass-cache
.jekyll-metadata
1 change: 0 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
language: ruby
rvm:
- 2.0.0
- 1.9.3
script: bundle exec clash test
47 changes: 24 additions & 23 deletions lib/octopress-multilingual.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
require 'octopress-hooks'
require 'liquid'

require "octopress-multilingual/version"
Expand All @@ -8,6 +7,7 @@
require "octopress-multilingual/hooks"
require "octopress-multilingual/jekyll"
require "octopress-multilingual/command"
require "octopress-debugger"

module Octopress
module Multilingual
Expand Down Expand Up @@ -170,40 +170,41 @@ def tags_by_language(lang=nil)
@tags[lang] || {}
end

def page_payload(lang)
payload = {
'site' => {
def page_payload(lang, payload={})
if lang
payload['site'] ||= {}

{
'posts' => posts_by_language(lang),
'linkposts' => linkposts_by_language(lang),
'articles' => articles_by_language(lang),
'categories' => categories_by_language(lang),
'tags' => tags_by_language(lang)
},
'lang' => lang_dict[lang]
}
}.each do |key, value|
payload['site'][key] = value
end

if defined?(Octopress::Ink) && site.config['lang']
payload.merge!(Octopress::Ink.payload(lang))
payload['lang'] = lang_dict[lang]

if defined?(Octopress::Ink) && site.config['lang']
payload.merge!(Octopress::Ink.payload(lang))
end
end

payload
end

def site_payload
def site_payload(payload)
if main_language
@payload ||= {
'site' => {
'posts_by_language' => posts_by_language,
'linkposts_by_language' => linkposts_by_language,
'articles_by_language' => articles_by_language,
'categories_by_language' => categories_by_language,
'tags_by_language' => tags_by_language,
'languages' => languages
},
'lang' => lang_dict[main_language]
}
else
{}
payload['site'].merge!({
'posts_by_language' => posts_by_language,
'linkposts_by_language' => linkposts_by_language,
'articles_by_language' => articles_by_language,
'categories_by_language' => categories_by_language,
'tags_by_language' => tags_by_language,
'languages' => languages
})
payload['lang'] = lang_dict[main_language]
end
end
end
Expand Down
64 changes: 22 additions & 42 deletions lib/octopress-multilingual/hooks.rb
Original file line number Diff line number Diff line change
@@ -1,56 +1,36 @@
module Octopress
module Multilingual
class SiteHook < Hooks::Site
priority :high
# Generate site_payload so other plugins can access
def post_read(site)
Octopress::Multilingual.site = site
site.config['languages'] = Octopress::Multilingual.languages
end

def pre_render(site)
Jekyll::Hooks.register :site, :post_read, priority: :high do |site|
Octopress::Multilingual.site = site
site.config['languages'] = Octopress::Multilingual.languages
end

# Add translation page data to each page or post.
#
[site.pages, site.posts].flatten.select(&:translated).each do |item|
# Access array of translated items via (post/page).translations
item.data.merge!({
'translations' => item.translations,
'translated' => item.translated
})
end
Jekyll::Hooks.register :site, :pre_render, priority: :high do |site, payload|
[site.pages, site.posts].flatten.select(&:translated).each do |item|
# Access array of translated items via (post/page).translations
item.data.merge!({
'translations' => item.translations,
'translated' => item.translated
})
end

def merge_payload(payload, site)
Octopress::Multilingual.site_payload
end
Octopress::Multilingual.site_payload payload
end

class PagePayloadHook < Hooks::All
priority :high

def post_init(item)
if item.lang == 'default'
item.data['lang'] = item.site.config['lang']
end
Jekyll::Hooks.register [:page, :post], :post_init, priority: :high do |item|
if item.lang == 'default'
item.data['lang'] = item.site.config['lang']
end
end

# Swap out post arrays with posts of the approrpiate language
#
def merge_payload(payload, item)
if item.lang
Octopress::Multilingual.page_payload(item.lang)
end
Jekyll::Hooks.register :document, :pre_render, priority: :high do |item|
if item.lang == 'default'
item.data['lang'] = item.site.config['lang']
end
end

# Override deep_merge to prevent categories and tags from being combined when they shouldn't
#
def deep_merge_payload(page_payload, hook_payload)
%w{site page}.each do |key|
hook_payload[key] = page_payload[key].merge(hook_payload[key] || {})
end
hook_payload
end
Jekyll::Hooks.register [:page, :post, :document], :pre_render, priority: :high do |item, payload|
Octopress::Multilingual.page_payload(item.lang, payload)
end
end
end
6 changes: 2 additions & 4 deletions octopress-multilingual.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,13 @@ Gem::Specification.new do |spec|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
spec.require_paths = ["lib"]

spec.add_runtime_dependency "octopress-hooks"
spec.add_runtime_dependency "jekyll", ">= 3.0.0.a", "< 4"

spec.add_development_dependency "octopress"
spec.add_development_dependency "octopress-linkblog"
spec.add_development_dependency "clash"
spec.add_development_dependency "bundler", "~> 1.7"
spec.add_development_dependency "rake", "~> 10.0"

if RUBY_VERSION >= "2"
spec.add_development_dependency "octopress-debugger"
end
spec.add_development_dependency "octopress-debugger"
end