# frozen_string_literal: true # title: HTML Export # description: Export styled HTML view of data # author: Brett Terpstra # url: https://brettterpstra.com module Doing class WikiExport def self.settings { trigger: 'wiki', templates: [ { name: 'wiki_page', trigger: 'wiki.?page', format: 'haml', filename: 'wiki.haml' }, { name: 'wiki_index', trigger: 'wiki.?index', format: 'haml', filename: 'wiki_index.haml' }, { name: 'wiki_css', trigger: 'wiki.?css', format: 'css', filename: 'wiki.css' } ] } end def self.template(trigger) if trigger =~ /css/ IO.read(File.join(File.dirname(__FILE__), 'templates/wiki.css')) elsif trigger =~ /index/ IO.read(File.join(File.dirname(__FILE__), 'templates/wiki_index.haml')) else IO.read(File.join(File.dirname(__FILE__), 'templates/wiki.haml')) end end def self.render(wwid, items, variables: {}) return if items.nil? opt = variables[:options] items_out = [] items.each do |i| # if i.has_key?('note') # note = '<span class="note">' + i.note.map{|n| n.strip }.join('<br>') + '</span>' # else # note = '' # end if String.method_defined? :force_encoding title = i.title.force_encoding('utf-8').link_urls note = i.note.map { |line| line.force_encoding('utf-8').strip.link_urls } if i.note else title = i.title.link_urls note = i.note.map { |line| line.strip.link_urls } if i.note end interval = wwid.get_interval(i) if i.title =~ /@done\((\d{4}-\d\d-\d\d \d\d:\d\d.*?)\)/ && opt[:times] interval ||= false title.gsub!(/(@([^ (]+)(\(.*?\))?)/im, '<a class="tag" href="\2.html">\1</a>').strip items_out << { date: i.date.strftime('%a %-I:%M%p'), title: title, #+ " #{note}" note: note, time: interval, section: i.section } end template = if wwid.config['export_templates']['wiki_page'] && File.exist?(File.expand_path(wwid.config['export_templates']['wiki_haml'])) IO.read(File.expand_path(wwid.config['export_templates']['wiki_page'])) else self.template('wiki_html') end style = if wwid.config['export_templates']['wiki_css'] && File.exist?(File.expand_path(wwid.config['export_templates']['wiki_css'])) IO.read(File.expand_path(wwid.config['export_templates']['wiki_css'])) else self.template('wiki_css') end totals = opt[:totals] ? wwid.tag_times(format: :html, sort_by: opt[:sort_tags], sort_order: opt[:tag_order]) : '' engine = Haml::Engine.new(template) Doing.logger.debug('Wiki Export:', "#{items_out.count} items output to #{variables[:page_title]} wiki page") @out = engine.render(Object.new, { :@items => items_out, :@page_title => variables[:page_title], :@style => style, :@totals => totals }) end Doing::Plugins.register 'wiki', :export, self end end