X-Git-Url: https://git.draconx.ca/gitweb/homepage.git/blobdiff_plain/1dc021529f88ca4f1ebfed76ffe6378272a23032..4f4b3ddd920c95d380a2f25dabd4b68457bb1564:/lib/helpers.rb diff --git a/lib/helpers.rb b/lib/helpers.rb index faa40c3..7425075 100644 --- a/lib/helpers.rb +++ b/lib/helpers.rb @@ -1,6 +1,6 @@ # Nick's web site: Ruby helpers for processing # -# Copyright © 2018 Nick Bowler +# Copyright © 2018-2019 Nick Bowler # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,14 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +require 'nokogiri' + +use_helper Nanoc::Helpers::Breadcrumbs + +Xmlns = { + 'xhtml' => 'http://www.w3.org/1999/xhtml' +}.freeze + def to_xhtml(subpath = "", item = @item) if item.identifier =~ '/index.*' ret = "/" + subpath + "/index.xhtml" @@ -34,3 +42,38 @@ def item_source(item = @item) return nil end + +def item_uri(item = @item, rep: :default) + return item.path(rep: rep).gsub(/\/index.[^.]*$/, "/") +end + +def find_license(license) + matches = @items.find_all("/license/" + license + ".*") + + raise("License not defined: " + license) if !matches.length + return matches.sort_by { |item| item.identifier } [0] +end + +# Return the first paragraph of the given item as a string. +def item_longdesc(item) + xml = Nokogiri::XML("" + + item.compiled_content(snapshot: :rawbody) + + "") + + p = xml.xpath('//xhtml:p', Xmlns) + if p.empty? then nil else p[0].xpath('string(.)') end +end + +def human_filesize(size) + units = ["B", "KiB", "MiB", "GiB"] + + for unit in units + if (size < 1024) + break + end + + size /= 1024.0 + end + + sprintf("%.1f %s", size + 0.05, unit) +end