summaryrefslogtreecommitdiff
path: root/_plugins
diff options
context:
space:
mode:
authorng <ng@immerda.ch>2018-04-15 13:56:40 +0200
committergeorg <georg@riseup.net>2018-04-18 20:41:41 +0200
commitce7e0fbd1c163c0a8fada026d8f8212834fd0776 (patch)
tree2d0ccbdbeed6774c6a24847bd58e7cf2cb254899 /_plugins
parent9497de3ee224258e35fff8eebdde6eb360b03056 (diff)
Split and refactor docs; add schleuder-{cli,web}
Closes #10 Closes #28
Diffstat (limited to '_plugins')
-rw-r--r--_plugins/breadcrumbs.rb82
-rw-r--r--_plugins/drops/breadcrumb_item.rb29
2 files changed, 111 insertions, 0 deletions
diff --git a/_plugins/breadcrumbs.rb b/_plugins/breadcrumbs.rb
new file mode 100644
index 0000000..ec6068b
--- /dev/null
+++ b/_plugins/breadcrumbs.rb
@@ -0,0 +1,82 @@
+require_relative 'drops/breadcrumb_item.rb'
+
+module Jekyll
+ module Breadcrumbs
+ @@config = {}
+ @@siteAddress = ""
+ @@sideAddresses = {}
+
+ def self.clearAddressCache
+ @@sideAddresses = {}
+ end
+
+ def self.loadAddressCache(site)
+ clearAddressCache
+ site.documents.each { |page| addAddressItem(page.url, page['crumbtitle'] || page['title'] || '') } # collection files including posts
+ site.pages.each { |page| addAddressItem(page.url, page['crumbtitle'] || page['title'] || '') } # pages
+ site.posts.docs.each { |page| addAddressItem(page.url, page['crumbtitle'] || page['title'] || '') } # posts
+ end
+
+ def self.addAddressItem(url, title)
+ key = createAddressCacheKey(url)
+ @@sideAddresses[key] = {:url => url, :title => title}
+ end
+
+ def self.findAddressItem(path)
+ key = createAddressCacheKey(path)
+ @@sideAddresses[key] if key
+ end
+
+ def self.createAddressCacheKey(path)
+ path.chomp("/").empty? ? "/" : path.chomp("/")
+ end
+
+ def self.buildSideBreadcrumbs(side, payload)
+ payload["breadcrumbs"] = []
+ return if side.url == @@siteAddress && root_hide === true
+
+ drop = Jekyll::Drops::BreadcrumbItem
+ position = 0
+
+ path = side.url.chomp("/").split(/(?=\/)/)
+ (-1..(path.size - 1)).each do |int|
+ joined_path = int == -1 ? "" : path[0..int].join
+ item = findAddressItem(joined_path)
+ if item
+ position += 1
+ item[:position] = position
+ item[:root_image] = root_image
+ payload["breadcrumbs"] << drop.new(item)
+ end
+ end
+ end
+
+ # Config
+ def self.loadConfig(site)
+ config = site.config["breadcrumbs"] || {"root" => {"hide" => false, "image" => false}}
+ root = config["root"]
+ @@config[:root_hide] = root["hide"] || false
+ @@config[:root_image] = root["image"] || false
+
+ @@siteAddress = site.config["baseurl"] || "/"
+ @@siteAddress = "/" if @@siteAddress.empty?
+ end
+
+ def self.root_hide
+ @@config[:root_hide]
+ end
+
+ def self.root_image
+ @@config[:root_image]
+ end
+ end
+end
+
+Jekyll::Hooks.register :site, :pre_render do |site, payload|
+ Jekyll::Breadcrumbs::loadConfig(site)
+ Jekyll::Breadcrumbs::loadAddressCache(site)
+end
+
+Jekyll::Hooks.register [:pages, :documents], :pre_render do |side, payload|
+ Jekyll::Breadcrumbs::buildSideBreadcrumbs(side, payload)
+end
diff --git a/_plugins/drops/breadcrumb_item.rb b/_plugins/drops/breadcrumb_item.rb
new file mode 100644
index 0000000..8e3b2cf
--- /dev/null
+++ b/_plugins/drops/breadcrumb_item.rb
@@ -0,0 +1,29 @@
+module Jekyll
+ module Drops
+ class BreadcrumbItem < Liquid::Drop
+ extend Forwardable
+
+ def initialize(side)
+ @side = side
+ end
+
+ def position
+ @side[:position]
+ end
+
+ def title
+ @side[:title]
+ end
+
+ def url
+ @side[:url]
+ end
+
+ def rootimage
+ @side[:root_image]
+ end
+
+ end
+ end
+ end
+ \ No newline at end of file