wax_tasks 1.0.0.pre.beta → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|