wax_tasks 1.0.0.pre.beta → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -2
- data/lib/tasks/derivatives_iiif.rake +7 -4
- data/lib/tasks/derivatives_simple.rake +7 -4
- data/lib/tasks/pages.rake +22 -0
- data/lib/tasks/search.rake +22 -0
- data/lib/wax_tasks.rb +29 -36
- data/lib/wax_tasks/asset.rb +51 -0
- data/lib/wax_tasks/collection.rb +20 -83
- data/lib/wax_tasks/collection/images.rb +127 -0
- data/lib/wax_tasks/collection/metadata.rb +101 -0
- data/lib/wax_tasks/config.rb +75 -0
- data/lib/wax_tasks/error.rb +17 -31
- data/lib/wax_tasks/index.rb +45 -0
- data/lib/wax_tasks/item.rb +116 -0
- data/lib/wax_tasks/record.rb +65 -0
- data/lib/wax_tasks/site.rb +68 -0
- data/lib/wax_tasks/utils.rb +57 -106
- data/spec/setup.rb +1 -1
- data/spec/spec_helper.rb +14 -9
- metadata +38 -36
- data/lib/tasks/jspackage.rake +0 -17
- data/lib/tasks/lunr.rake +0 -9
- data/lib/tasks/pagemaster.rake +0 -11
- data/lib/tasks/push.rake +0 -12
- data/lib/tasks/test.rake +0 -18
- data/lib/wax_tasks/branch.rb +0 -70
- data/lib/wax_tasks/iiif/derivatives.rb +0 -86
- data/lib/wax_tasks/iiif/manifest.rb +0 -26
- data/lib/wax_tasks/image_collection.rb +0 -137
- data/lib/wax_tasks/local_branch.rb +0 -21
- data/lib/wax_tasks/lunr/index.rb +0 -82
- data/lib/wax_tasks/lunr/page_set.rb +0 -57
- data/lib/wax_tasks/pagemaster_collection.rb +0 -60
- data/lib/wax_tasks/task_runner.rb +0 -148
- data/lib/wax_tasks/travis_branch.rb +0 -28
data/lib/tasks/jspackage.rake
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'wax_tasks'
|
3
|
-
|
4
|
-
namespace :wax do
|
5
|
-
desc 'write a simple package.json for monitoring js dependencies'
|
6
|
-
task :jspackage do
|
7
|
-
task_runner = WaxTasks::TaskRunner.new
|
8
|
-
package = task_runner.js_package
|
9
|
-
unless package.empty?
|
10
|
-
src_dir = task_runner.site[:source_dir]
|
11
|
-
path = WaxTasks::Utils.root_path(src_dir, 'package.json')
|
12
|
-
|
13
|
-
puts "Writing javascript dependencies to #{path}".cyan
|
14
|
-
File.open(path, 'w') { |f| f.write(JSON.pretty_generate(package)) }
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/lib/tasks/lunr.rake
DELETED
data/lib/tasks/pagemaster.rake
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'wax_tasks'
|
2
|
-
|
3
|
-
namespace :wax do
|
4
|
-
desc 'generate collection md pages from yaml or csv data source'
|
5
|
-
task :pagemaster do
|
6
|
-
arguments = ARGV.drop(1).each { |a| task a.to_sym }
|
7
|
-
raise WaxTasks::Error::MissingArguments, 'You must specify a collection after wax:pagemaster' if arguments.empty?
|
8
|
-
task_runner = WaxTasks::TaskRunner.new
|
9
|
-
task_runner.pagemaster(arguments)
|
10
|
-
end
|
11
|
-
end
|
data/lib/tasks/push.rake
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'wax_tasks'
|
2
|
-
|
3
|
-
namespace :wax do
|
4
|
-
desc 'push compiled Jekyll site to git branch BRANCH'
|
5
|
-
task :push do
|
6
|
-
arguments = ARGV.drop(1).each { |a| task a.to_sym }
|
7
|
-
raise WaxTasks::Error::MissingArguments, 'You must specify a branch after wax:push' if arguments.empty?
|
8
|
-
|
9
|
-
task_runner = WaxTasks::TaskRunner.new
|
10
|
-
task_runner.push_branch(arguments.first)
|
11
|
-
end
|
12
|
-
end
|
data/lib/tasks/test.rake
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'html-proofer'
|
2
|
-
|
3
|
-
namespace :wax do
|
4
|
-
desc 'run htmlproofer, rspec if .rspec file exists'
|
5
|
-
task :test do
|
6
|
-
opts = {
|
7
|
-
check_external_hash: true,
|
8
|
-
allow_hash_href: true,
|
9
|
-
check_html: true,
|
10
|
-
disable_external: true,
|
11
|
-
empty_alt_ignore: true,
|
12
|
-
only_4xx: true,
|
13
|
-
verbose: true
|
14
|
-
}
|
15
|
-
HTMLProofer.check_directory('./_site', opts).run
|
16
|
-
system('bundle exec rspec') if File.exist?('.rspec')
|
17
|
-
end
|
18
|
-
end
|
data/lib/wax_tasks/branch.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'jekyll'
|
2
|
-
require 'logger'
|
3
|
-
require 'tmpdir'
|
4
|
-
|
5
|
-
module WaxTasks
|
6
|
-
# Parent class representing a Git Branch
|
7
|
-
# that cannot be created directly. Only child classes
|
8
|
-
# (LocalBranch, TravisBranch) can be initialized.
|
9
|
-
#
|
10
|
-
# @attr target [String] the name of the Git branch to deploy to
|
11
|
-
# @attr origin [String] the current repository remote
|
12
|
-
# @attr commit_msg [String] the commit message to use on push
|
13
|
-
# @attr baseurl [String] the site baseurl to build with (if on gh-pages)
|
14
|
-
# @attr success_msg [String] informative message to be output to console
|
15
|
-
class Branch
|
16
|
-
attr_reader :target, :origin, :commit_msg, :baseurl, :success
|
17
|
-
private_class_method :new
|
18
|
-
|
19
|
-
# This method ensures child classes can be instantiated eventhough
|
20
|
-
# Branch.new cannot be.
|
21
|
-
def self.inherited(*)
|
22
|
-
public_class_method :new
|
23
|
-
end
|
24
|
-
|
25
|
-
# @param site [Hash] the site config from (TaskRunner.site)
|
26
|
-
# @param target [String] the name of the Git branch to deploy to
|
27
|
-
# @param time [String] message with the time of deployment
|
28
|
-
def initialize(site, target)
|
29
|
-
@site = site
|
30
|
-
@target = target
|
31
|
-
@time = Time.now.strftime('Updated at %H:%M on %Y-%m-%d')
|
32
|
-
end
|
33
|
-
|
34
|
-
# Rebuild the Jekyll site with branch @baseurl
|
35
|
-
# @return [Nil]
|
36
|
-
def rebuild
|
37
|
-
if @baseurl.empty?
|
38
|
-
msg = 'Building the gh-pages _site without a baseurl is not recommended'
|
39
|
-
Logger.new($stdout).warn(msg.orange)
|
40
|
-
end
|
41
|
-
FileUtils.rm_r(SITE_DIR) if File.directory?(WaxTasks::SITE_DIR)
|
42
|
-
opts = {
|
43
|
-
source: @site[:source_dir] || '.',
|
44
|
-
destination: WaxTasks::SITE_DIR,
|
45
|
-
config: WaxTasks::DEFAULT_CONFIG,
|
46
|
-
baseurl: @baseurl,
|
47
|
-
verbose: true
|
48
|
-
}
|
49
|
-
Jekyll::Site.new(Jekyll.configuration(opts)).process
|
50
|
-
end
|
51
|
-
|
52
|
-
# Add, commmit, and push compiled Jekyll site to @target branch
|
53
|
-
# @return [Nil]
|
54
|
-
def push
|
55
|
-
if @site[:env] == 'prod'
|
56
|
-
rebuild if @target == 'gh-pages'
|
57
|
-
raise Error::MissingSite, "Cannot find #{WaxTasks::SITE_DIR}" unless Dir.exist? WaxTasks::SITE_DIR
|
58
|
-
Dir.chdir(SITE_DIR)
|
59
|
-
File.open('.info', 'w') { |f| f.write(@time) }
|
60
|
-
system 'git init && git add .'
|
61
|
-
system "git commit -m '#{@commit_msg}'"
|
62
|
-
system "git remote add origin #{@origin}"
|
63
|
-
puts @success_msg.cyan
|
64
|
-
system "git push origin master:refs/heads/#{@target} --force"
|
65
|
-
else
|
66
|
-
puts "Skipping build for branch '#{@target}' on env='test'".orange
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
module WaxTasks
|
2
|
-
# Module of helper functions for WaxTasks::IiiifCollection class
|
3
|
-
module Iiif
|
4
|
-
# Helpers for creating Iiif derivatives for a Collection
|
5
|
-
# via `wax:derivatives:iiif` Rake task
|
6
|
-
module Derivatives
|
7
|
-
# @return [Hash] base WaxIiif::ImageRecord opts from item
|
8
|
-
def base_opts(item)
|
9
|
-
opts = { is_primary: false }
|
10
|
-
opts[:description] = item.dig(description).to_s unless description.nil?
|
11
|
-
opts[:attribution] = item.dig(attribution).to_s unless attribution.nil?
|
12
|
-
opts[:logo] = "{{ '#{logo}' | absolute_url }}" unless logo.nil?
|
13
|
-
opts
|
14
|
-
end
|
15
|
-
|
16
|
-
# @return [Array] Set of WaxIiif::ImageRecords
|
17
|
-
def iiif_records(source_data)
|
18
|
-
records = []
|
19
|
-
source_data.each do |d|
|
20
|
-
item = @metadata.detect { |m| m['pid'] == d[:pid] } || {}
|
21
|
-
opts = base_opts(item)
|
22
|
-
if d[:images].length == 1
|
23
|
-
opts[:id] = d[:pid]
|
24
|
-
opts[:path] = d[:images].first
|
25
|
-
opts[:label] = item.fetch(label.to_s, d[:pid])
|
26
|
-
opts[:is_primary] = true
|
27
|
-
|
28
|
-
records << WaxIiif::ImageRecord.new(opts)
|
29
|
-
else
|
30
|
-
item_records = []
|
31
|
-
d[:images].each do |i|
|
32
|
-
img_id = File.basename(i, '.*').to_s
|
33
|
-
|
34
|
-
opts[:id] = "#{d[:pid]}_#{img_id}"
|
35
|
-
opts[:manifest_id] = d[:pid]
|
36
|
-
opts[:path] = i
|
37
|
-
opts[:label] = item.fetch(label.to_s, d[:pid])
|
38
|
-
opts[:section_label] = img_id
|
39
|
-
|
40
|
-
item_records << WaxIiif::ImageRecord.new(opts)
|
41
|
-
end
|
42
|
-
item_records.first.is_primary = true
|
43
|
-
records += item_records
|
44
|
-
end
|
45
|
-
records.flatten
|
46
|
-
end
|
47
|
-
records
|
48
|
-
end
|
49
|
-
|
50
|
-
# Opens IIIF JSON files and prepends yaml front matter
|
51
|
-
# So that liquid vars can be read by Jekyll
|
52
|
-
#
|
53
|
-
# @return [Nil]
|
54
|
-
def add_yaml_front_matter(dir)
|
55
|
-
Dir["#{dir}/**/*.json"].each do |file|
|
56
|
-
front_matter = "---\nlayout: none\n---\n"
|
57
|
-
filestring = File.read(file)
|
58
|
-
next if filestring.start_with?(front_matter)
|
59
|
-
begin
|
60
|
-
json = JSON.parse(filestring)
|
61
|
-
File.open(file, 'w') do |f|
|
62
|
-
f.puts(front_matter)
|
63
|
-
f.puts(JSON.pretty_generate(json))
|
64
|
-
end
|
65
|
-
rescue StandardError => e
|
66
|
-
raise Error::InvalidJSON, "IIIF JSON in #{file} is invalid.\n#{e}"
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
# @return [Nil]
|
72
|
-
def add_iiif_derivative_info_to_metadata(manifests)
|
73
|
-
manifests.map do |m|
|
74
|
-
json = JSON.parse(m.to_json)
|
75
|
-
pid = m.base_id
|
76
|
-
@metadata.find { |i| i['pid'] == pid }.tap do |hash|
|
77
|
-
hash['manifest'] = Utils.rm_liquid(json['@id'])
|
78
|
-
hash['thumbnail'] = Utils.rm_liquid(json['thumbnail'])
|
79
|
-
hash['full'] = hash['thumbnail'].sub('250,/0', '1140,/0')
|
80
|
-
end
|
81
|
-
end
|
82
|
-
overwrite_metadata
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module WaxTasks
|
2
|
-
module Iiif
|
3
|
-
# Module for handling metadata in IIIF manifests
|
4
|
-
module Manifest
|
5
|
-
# @return [String]
|
6
|
-
def label
|
7
|
-
@image_config.dig('iiif', 'label')
|
8
|
-
end
|
9
|
-
|
10
|
-
# @return [String]
|
11
|
-
def description
|
12
|
-
@image_config.dig('iiif', 'description')
|
13
|
-
end
|
14
|
-
|
15
|
-
# @return [String]
|
16
|
-
def attribution
|
17
|
-
@image_config.dig('iiif', 'attribution')
|
18
|
-
end
|
19
|
-
|
20
|
-
# @return [String]
|
21
|
-
def logo
|
22
|
-
@image_config.dig('iiif', 'logo')
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,137 +0,0 @@
|
|
1
|
-
require 'wax_iiif'
|
2
|
-
require 'mini_magick'
|
3
|
-
|
4
|
-
require_relative 'iiif/derivatives'
|
5
|
-
require_relative 'iiif/manifest'
|
6
|
-
|
7
|
-
module WaxTasks
|
8
|
-
# A Jekyll collection with image configuration + data
|
9
|
-
class ImageCollection < Collection
|
10
|
-
attr_reader :output_dir, :metadata, :data
|
11
|
-
|
12
|
-
include WaxTasks::Iiif::Derivatives
|
13
|
-
include WaxTasks::Iiif::Manifest
|
14
|
-
|
15
|
-
# Creates a new IiifCollection with name @name given site config @site
|
16
|
-
def initialize(name, site)
|
17
|
-
super(name, site)
|
18
|
-
|
19
|
-
@image_config = @config.dig('images')
|
20
|
-
|
21
|
-
raise Error::InvalidCollection, "No image configuration found for collection '#{@name}'" if @image_config.nil?
|
22
|
-
|
23
|
-
@data_source = self.image_source_directory
|
24
|
-
@output_dir = Utils.root_path(@site[:source_dir], DEFAULT_DERIVATIVE_DIR)
|
25
|
-
@data = self.image_data
|
26
|
-
@metadata = ingest_file(self.metadata_source_path)
|
27
|
-
@variants = WaxTasks::DEFAULT_IMAGE_VARIANTS
|
28
|
-
end
|
29
|
-
|
30
|
-
# Combines and described source image data including:
|
31
|
-
# single image items, items from subdirectories of images,
|
32
|
-
# and pdf documents.
|
33
|
-
#
|
34
|
-
# @return [Array] array of hashes relating item pids to image asset paths
|
35
|
-
def image_data
|
36
|
-
[single_image_items, multi_image_items, pdf_items].flatten.compact
|
37
|
-
end
|
38
|
-
|
39
|
-
# @return [String]
|
40
|
-
def image_source_directory
|
41
|
-
source = @image_config.dig('source')
|
42
|
-
raise WaxIiif::Error::InvalidImageData, 'No image source directory specified.' if source.nil?
|
43
|
-
path_to_image_source = Utils.root_path(@site[:source_dir], '_data/', source, '/')
|
44
|
-
raise Error::MissingIiifSrc, "Cannot find IIIF source directory #{path_to_image_source}" unless Dir.exist?(path_to_image_source)
|
45
|
-
raise Error::MissingIiifSrc, "No IIIF source data was found in #{path_to_image_source}" if Dir["#{path_to_image_source}/*"].empty?
|
46
|
-
path_to_image_source
|
47
|
-
end
|
48
|
-
|
49
|
-
# Gets the items with 1 image asset
|
50
|
-
#
|
51
|
-
# @return [Array] array of hashes relating pids to image paths
|
52
|
-
def single_image_items
|
53
|
-
Dir["#{@data_source}*.{jpg, jpeg, tiff, png}"].map do |d|
|
54
|
-
{ pid: File.basename(d, '.*'), images: [d] }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# Gets the items with multiple image assets
|
59
|
-
#
|
60
|
-
# @return [Array] array of hashes relating pids to image paths
|
61
|
-
def multi_image_items
|
62
|
-
Dir["#{@data_source}*/"].map do |d|
|
63
|
-
images = Dir["#{d}*.{jpg, jpeg, tiff, png}"]
|
64
|
-
{ pid: File.basename(d, '.*'), images: images.sort }
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# Gets the items from pdf documents
|
69
|
-
#
|
70
|
-
# @return [Array] array of hashes relating pids to image paths
|
71
|
-
def pdf_items
|
72
|
-
Dir["#{@data_source}*.pdf"].map do |d|
|
73
|
-
pid = File.basename(d, '.pdf')
|
74
|
-
dir = "#{@data_source}/#{pid}"
|
75
|
-
next if Dir.exist?(dir)
|
76
|
-
{ pid: pid, images: split_pdf(d) }
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
#
|
81
|
-
#
|
82
|
-
# @return [Array] array of image paths generated from pdf split
|
83
|
-
def split_pdf(pdf)
|
84
|
-
split_opts = { output_dir: @data_source, verbose: true }
|
85
|
-
WaxIiif::Utilities::PdfSplitter.split(pdf, split_opts).sort
|
86
|
-
end
|
87
|
-
|
88
|
-
def build_simple_derivatives
|
89
|
-
simple_output_dir = "#{@output_dir}/simple"
|
90
|
-
@data.each do |d|
|
91
|
-
d[:images].each_with_index do |img, index|
|
92
|
-
asset_id = img.gsub(@data_source, '').gsub('.jpg', '').tr('/', '_')
|
93
|
-
asset_path = "#{simple_output_dir}/#{asset_id}"
|
94
|
-
item_record = @metadata.find { |record| record['pid'] == d[:pid] }
|
95
|
-
|
96
|
-
FileUtils.mkdir_p(asset_path)
|
97
|
-
|
98
|
-
@variants.each do |label, width|
|
99
|
-
variant_path = "#{asset_path}/#{label}.jpg"
|
100
|
-
unless item_record.nil? || index.positive?
|
101
|
-
item_record[label.to_s] = variant_path.gsub(/^./, '')
|
102
|
-
end
|
103
|
-
next puts "skipping #{variant_path}" if File.exist?(variant_path)
|
104
|
-
|
105
|
-
image = MiniMagick::Image.open(img)
|
106
|
-
image.resize(width)
|
107
|
-
image.format('jpg')
|
108
|
-
image.write(variant_path)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
self.overwrite_metadata
|
113
|
-
end
|
114
|
-
|
115
|
-
# Creates a WaxIiif::Builder object,
|
116
|
-
# builds the IIIF derivatives and json, and
|
117
|
-
# makes them usable for Jekyll/Wax
|
118
|
-
#
|
119
|
-
# @return [Nil]
|
120
|
-
def build_iiif_derivatives
|
121
|
-
iiif_output_dir = "#{@output_dir}/iiif"
|
122
|
-
jekyll_prefix = "{{ '' | absolute_url }}/#{DEFAULT_DERIVATIVE_DIR}/iiif"
|
123
|
-
build_opts = {
|
124
|
-
base_url: jekyll_prefix,
|
125
|
-
output_dir: iiif_output_dir,
|
126
|
-
variants: DEFAULT_IMAGE_VARIANTS,
|
127
|
-
verbose: true,
|
128
|
-
collection_label: @name
|
129
|
-
}
|
130
|
-
builder = WaxIiif::Builder.new(build_opts)
|
131
|
-
builder.load(iiif_records(@data))
|
132
|
-
builder.process_data
|
133
|
-
add_iiif_derivative_info_to_metadata(builder.manifests)
|
134
|
-
add_yaml_front_matter(iiif_output_dir)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'time'
|
2
|
-
|
3
|
-
module WaxTasks
|
4
|
-
# Branch object for `$ wax:push` task when run on local machine
|
5
|
-
# using local credentials
|
6
|
-
#
|
7
|
-
# @attr origin [String] the current repository remote
|
8
|
-
# @attr commit_msg [String] the commit message to use on push
|
9
|
-
# @attr baseurl [String] the site baseurl to build with (if on gh-pages)
|
10
|
-
# @attr success_msg [String] informative message to be output to console
|
11
|
-
class LocalBranch < Branch
|
12
|
-
def initialize(site, target)
|
13
|
-
super(site, target)
|
14
|
-
|
15
|
-
@origin = `git config --get remote.origin.url`.strip
|
16
|
-
@commit_msg = "Updated via local task at #{Time.now.utc}"
|
17
|
-
@baseurl = "/#{@origin.split('/').last.gsub('.git', '')}"
|
18
|
-
@success_msg = "Deploying to #{@target} branch from local task."
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/wax_tasks/lunr/index.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require_relative 'page_set'
|
2
|
-
|
3
|
-
module WaxTasks
|
4
|
-
module Lunr
|
5
|
-
# A Lunr::Index document that combines data from all collections
|
6
|
-
# in site config that have `lunr_index` parameters.
|
7
|
-
#
|
8
|
-
# @attr collections [Array] a list of LunrCollection objects
|
9
|
-
# @attr fields [Array] shared list of fields to index among LunrCollections
|
10
|
-
class Index
|
11
|
-
attr_reader :collections, :index_path, :fields
|
12
|
-
|
13
|
-
# Creates a new LunrIndex object
|
14
|
-
def initialize(site, index_path, collections)
|
15
|
-
raise Error::NoLunrCollections, 'No collections were configured to index' if collections.nil?
|
16
|
-
raise Error::NoLunrCollections, 'No path was given for index file' if index_path.nil?
|
17
|
-
|
18
|
-
@collections = collections.keys.map! do |c|
|
19
|
-
Lunr::PageSet.new(c, collections[c], site)
|
20
|
-
end
|
21
|
-
|
22
|
-
@index_path = index_path
|
23
|
-
@fields = self.total_fields
|
24
|
-
end
|
25
|
-
|
26
|
-
# @return [Array] shared list of fields to index among indexed collections
|
27
|
-
def total_fields
|
28
|
-
@collections.map { |c| c.data.map(&:keys) }.flatten.uniq
|
29
|
-
end
|
30
|
-
|
31
|
-
# @return [String] writes index as pretty JSON with YAML front-matter
|
32
|
-
def to_s
|
33
|
-
data = @collections.map(&:data).flatten
|
34
|
-
data.each_with_index.map { |m, id| m['lunr_index'] = id }
|
35
|
-
"---\nlayout: none\n---\n#{JSON.pretty_generate(data)}"
|
36
|
-
end
|
37
|
-
|
38
|
-
# Creates a default LunrUI / JS file for displaying the Index
|
39
|
-
#
|
40
|
-
# @return [String]
|
41
|
-
def default_ui
|
42
|
-
<<~HEREDOC
|
43
|
-
---
|
44
|
-
layout: none
|
45
|
-
---
|
46
|
-
$.getJSON("{{ '#{@index_path}' | absolute_url }}", function(index_json) {
|
47
|
-
window.index = new elasticlunr.Index;
|
48
|
-
window.store = index_json;
|
49
|
-
index.saveDocument(false);
|
50
|
-
index.setRef('lunr_index');
|
51
|
-
#{@fields.map { |f| "index.addField('#{f}');" }.join("\n\t")}
|
52
|
-
// add docs
|
53
|
-
for (i in store){
|
54
|
-
index.addDoc(store[i]);
|
55
|
-
}
|
56
|
-
$('input#search').on('keyup', function() {
|
57
|
-
var results_div = $('#results');
|
58
|
-
var query = $(this).val();
|
59
|
-
var results = index.search(query, { boolean: 'AND', expand: true });
|
60
|
-
results_div.empty();
|
61
|
-
for (var r in results) {
|
62
|
-
var ref = results[r].ref;
|
63
|
-
var item = store[ref];
|
64
|
-
var pid = item.pid;
|
65
|
-
var label = item.label;
|
66
|
-
var meta = `#{@fields.except(%w[pid label]).take(3).map { |f| "${item.#{f}}" }.join(' | ')}`;
|
67
|
-
if ('thumbnail' in item) {
|
68
|
-
var thumb = `<img class='sq-thumb-sm' src='{{ "" | absolute_url }}${item.thumbnail}'/> `
|
69
|
-
}
|
70
|
-
else {
|
71
|
-
var thumb = '';
|
72
|
-
}
|
73
|
-
var result = `<div class="result"><a href="${item.link}">${thumb}<p><span class="title">${item.label}</span><br>${meta}</p></a></p></div>`;
|
74
|
-
results_div.append(result);
|
75
|
-
}
|
76
|
-
});
|
77
|
-
});
|
78
|
-
HEREDOC
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|