jekyll 4.0.0.pre.alpha1 → 4.1.1
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/.rubocop.yml +58 -17
- data/lib/jekyll.rb +5 -1
- data/lib/jekyll/cache.rb +71 -64
- data/lib/jekyll/cleaner.rb +5 -5
- data/lib/jekyll/collection.rb +6 -4
- data/lib/jekyll/command.rb +4 -2
- data/lib/jekyll/commands/new.rb +4 -4
- data/lib/jekyll/commands/serve.rb +9 -1
- data/lib/jekyll/commands/serve/servlet.rb +13 -14
- data/lib/jekyll/commands/serve/websockets.rb +1 -1
- data/lib/jekyll/configuration.rb +40 -129
- data/lib/jekyll/converters/identity.rb +2 -2
- data/lib/jekyll/converters/markdown/kramdown_parser.rb +70 -9
- data/lib/jekyll/convertible.rb +21 -20
- data/lib/jekyll/document.rb +56 -31
- data/lib/jekyll/drops/document_drop.rb +12 -0
- data/lib/jekyll/drops/drop.rb +14 -8
- data/lib/jekyll/drops/site_drop.rb +11 -1
- data/lib/jekyll/drops/url_drop.rb +52 -1
- data/lib/jekyll/entry_filter.rb +38 -44
- data/lib/jekyll/excerpt.rb +3 -3
- data/lib/jekyll/filters.rb +140 -22
- data/lib/jekyll/filters/url_filters.rb +41 -14
- data/lib/jekyll/frontmatter_defaults.rb +15 -20
- data/lib/jekyll/hooks.rb +2 -5
- data/lib/jekyll/inclusion.rb +32 -0
- data/lib/jekyll/liquid_renderer.rb +18 -15
- data/lib/jekyll/liquid_renderer/file.rb +10 -0
- data/lib/jekyll/liquid_renderer/table.rb +18 -61
- data/lib/jekyll/mime.types +53 -11
- data/lib/jekyll/page.rb +26 -2
- data/lib/jekyll/page_excerpt.rb +25 -0
- data/lib/jekyll/path_manager.rb +31 -0
- data/lib/jekyll/profiler.rb +58 -0
- data/lib/jekyll/reader.rb +4 -1
- data/lib/jekyll/readers/collection_reader.rb +1 -0
- data/lib/jekyll/readers/data_reader.rb +1 -0
- data/lib/jekyll/readers/layout_reader.rb +1 -0
- data/lib/jekyll/readers/page_reader.rb +5 -5
- data/lib/jekyll/readers/post_reader.rb +2 -1
- data/lib/jekyll/readers/static_file_reader.rb +3 -3
- data/lib/jekyll/readers/theme_assets_reader.rb +1 -0
- data/lib/jekyll/renderer.rb +9 -15
- data/lib/jekyll/site.rb +21 -12
- data/lib/jekyll/static_file.rb +15 -10
- data/lib/jekyll/tags/highlight.rb +2 -4
- data/lib/jekyll/tags/include.rb +67 -11
- data/lib/jekyll/tags/post_url.rb +8 -5
- data/lib/jekyll/theme.rb +19 -10
- data/lib/jekyll/url.rb +7 -3
- data/lib/jekyll/utils.rb +14 -18
- data/lib/jekyll/utils/platforms.rb +1 -1
- data/lib/jekyll/utils/win_tz.rb +1 -1
- data/lib/jekyll/version.rb +1 -1
- data/lib/theme_template/theme.gemspec.erb +1 -4
- metadata +33 -36
@@ -11,15 +11,16 @@ module Jekyll
|
|
11
11
|
def absolute_url(input)
|
12
12
|
return if input.nil?
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
cache = if input.is_a?(String)
|
15
|
+
(@context.registers[:site].filter_cache[:absolute_url] ||= {})
|
16
|
+
else
|
17
|
+
(@context.registers[:cached_absolute_url] ||= {})
|
18
|
+
end
|
19
|
+
cache[input] ||= compute_absolute_url(input)
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
# Duplicate cached string so that the cached value is never mutated by
|
22
|
+
# a subsequent filter.
|
23
|
+
cache[input].dup
|
23
24
|
end
|
24
25
|
|
25
26
|
# Produces a URL relative to the domain root based on site.baseurl
|
@@ -31,13 +32,16 @@ module Jekyll
|
|
31
32
|
def relative_url(input)
|
32
33
|
return if input.nil?
|
33
34
|
|
34
|
-
|
35
|
-
|
35
|
+
cache = if input.is_a?(String)
|
36
|
+
(@context.registers[:site].filter_cache[:relative_url] ||= {})
|
37
|
+
else
|
38
|
+
(@context.registers[:cached_relative_url] ||= {})
|
39
|
+
end
|
40
|
+
cache[input] ||= compute_relative_url(input)
|
36
41
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
).normalize.to_s
|
42
|
+
# Duplicate cached string so that the cached value is never mutated by
|
43
|
+
# a subsequent filter.
|
44
|
+
cache[input].dup
|
41
45
|
end
|
42
46
|
|
43
47
|
# Strips trailing `/index.html` from URLs to create pretty permalinks
|
@@ -53,6 +57,29 @@ module Jekyll
|
|
53
57
|
|
54
58
|
private
|
55
59
|
|
60
|
+
def compute_absolute_url(input)
|
61
|
+
input = input.url if input.respond_to?(:url)
|
62
|
+
return input if Addressable::URI.parse(input.to_s).absolute?
|
63
|
+
|
64
|
+
site = @context.registers[:site]
|
65
|
+
site_url = site.config["url"]
|
66
|
+
return relative_url(input) if site_url.nil? || site_url == ""
|
67
|
+
|
68
|
+
Addressable::URI.parse(
|
69
|
+
site_url.to_s + relative_url(input)
|
70
|
+
).normalize.to_s
|
71
|
+
end
|
72
|
+
|
73
|
+
def compute_relative_url(input)
|
74
|
+
input = input.url if input.respond_to?(:url)
|
75
|
+
return input if Addressable::URI.parse(input.to_s).absolute?
|
76
|
+
|
77
|
+
parts = [sanitized_baseurl, input]
|
78
|
+
Addressable::URI.parse(
|
79
|
+
parts.compact.map { |part| ensure_leading_slash(part.to_s) }.join
|
80
|
+
).normalize.to_s
|
81
|
+
end
|
82
|
+
|
56
83
|
def sanitized_baseurl
|
57
84
|
site = @context.registers[:site]
|
58
85
|
site.config["baseurl"].to_s.chomp("/")
|
@@ -10,11 +10,10 @@ module Jekyll
|
|
10
10
|
# Initializes a new instance.
|
11
11
|
def initialize(site)
|
12
12
|
@site = site
|
13
|
-
reset
|
14
13
|
end
|
15
14
|
|
16
15
|
def reset
|
17
|
-
@glob_cache = {}
|
16
|
+
@glob_cache = {} if @glob_cache
|
18
17
|
end
|
19
18
|
|
20
19
|
def update_deprecated_types(set)
|
@@ -104,12 +103,12 @@ module Jekyll
|
|
104
103
|
end
|
105
104
|
|
106
105
|
def applies_path?(scope, path)
|
107
|
-
|
106
|
+
rel_scope_path = scope["path"]
|
107
|
+
return true if !rel_scope_path.is_a?(String) || rel_scope_path.empty?
|
108
108
|
|
109
|
-
sanitized_path =
|
110
|
-
rel_scope_path = Pathname.new(scope["path"])
|
109
|
+
sanitized_path = sanitize_path(path)
|
111
110
|
|
112
|
-
if
|
111
|
+
if rel_scope_path.include?("*")
|
113
112
|
glob_scope(sanitized_path, rel_scope_path)
|
114
113
|
else
|
115
114
|
path_is_subpath?(sanitized_path, strip_collections_dir(rel_scope_path))
|
@@ -121,7 +120,7 @@ module Jekyll
|
|
121
120
|
abs_scope_path = site_source.join(rel_scope_path).to_s
|
122
121
|
|
123
122
|
glob_cache(abs_scope_path).each do |scope_path|
|
124
|
-
scope_path = Pathname.new(scope_path).relative_path_from(site_source)
|
123
|
+
scope_path = Pathname.new(scope_path).relative_path_from(site_source).to_s
|
125
124
|
scope_path = strip_collections_dir(scope_path)
|
126
125
|
Jekyll.logger.debug "Globbed Scope Path:", scope_path
|
127
126
|
return true if path_is_subpath?(sanitized_path, scope_path)
|
@@ -130,20 +129,17 @@ module Jekyll
|
|
130
129
|
end
|
131
130
|
|
132
131
|
def glob_cache(path)
|
132
|
+
@glob_cache ||= {}
|
133
133
|
@glob_cache[path] ||= Dir.glob(path)
|
134
134
|
end
|
135
135
|
|
136
136
|
def path_is_subpath?(path, parent_path)
|
137
|
-
path.
|
138
|
-
return true if ascended_path.to_s == parent_path.to_s
|
139
|
-
end
|
140
|
-
|
141
|
-
false
|
137
|
+
path.start_with?(parent_path)
|
142
138
|
end
|
143
139
|
|
144
140
|
def strip_collections_dir(path)
|
145
141
|
collections_dir = @site.config["collections_dir"]
|
146
|
-
slashed_coll_dir = "#{collections_dir}/"
|
142
|
+
slashed_coll_dir = collections_dir.empty? ? "/" : "#{collections_dir}/"
|
147
143
|
return path if collections_dir.empty? || !path.to_s.start_with?(slashed_coll_dir)
|
148
144
|
|
149
145
|
path.sub(slashed_coll_dir, "")
|
@@ -179,7 +175,7 @@ module Jekyll
|
|
179
175
|
# new_scope - the new scope hash
|
180
176
|
#
|
181
177
|
# Returns true if the new scope has precedence over the older
|
182
|
-
# rubocop: disable PredicateName
|
178
|
+
# rubocop: disable Naming/PredicateName
|
183
179
|
def has_precedence?(old_scope, new_scope)
|
184
180
|
return true if old_scope.nil?
|
185
181
|
|
@@ -194,7 +190,7 @@ module Jekyll
|
|
194
190
|
!old_scope.key? "type"
|
195
191
|
end
|
196
192
|
end
|
197
|
-
# rubocop: enable PredicateName
|
193
|
+
# rubocop: enable Naming/PredicateName
|
198
194
|
|
199
195
|
# Collects a list of sets that match the given path and type
|
200
196
|
#
|
@@ -230,15 +226,14 @@ module Jekyll
|
|
230
226
|
end.compact
|
231
227
|
end
|
232
228
|
|
233
|
-
# Sanitizes the given path by removing a leading
|
234
|
-
|
235
|
-
SANITIZATION_REGEX = %r!\A/|(?<=[^/])\z!.freeze
|
236
|
-
|
229
|
+
# Sanitizes the given path by removing a leading slash
|
237
230
|
def sanitize_path(path)
|
238
231
|
if path.nil? || path.empty?
|
239
232
|
""
|
233
|
+
elsif path.start_with?("/")
|
234
|
+
path.gsub(%r!\A/|(?<=[^/])\z!, "")
|
240
235
|
else
|
241
|
-
path
|
236
|
+
path
|
242
237
|
end
|
243
238
|
end
|
244
239
|
end
|
data/lib/jekyll/hooks.rb
CHANGED
@@ -91,11 +91,8 @@ module Jekyll
|
|
91
91
|
# interface for Jekyll core components to trigger hooks
|
92
92
|
def self.trigger(owner, event, *args)
|
93
93
|
# proceed only if there are hooks to call
|
94
|
-
|
95
|
-
return
|
96
|
-
|
97
|
-
# hooks to call for this owner and event
|
98
|
-
hooks = @registry[owner][event]
|
94
|
+
hooks = @registry.dig(owner, event)
|
95
|
+
return if hooks.nil? || hooks.empty?
|
99
96
|
|
100
97
|
# sort and call hooks according to priority and load order
|
101
98
|
hooks.sort_by { |h| @hook_priority[h] }.each do |hook|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
class Inclusion
|
5
|
+
attr_reader :site, :name, :path
|
6
|
+
private :site
|
7
|
+
|
8
|
+
def initialize(site, base, name)
|
9
|
+
@site = site
|
10
|
+
@name = name
|
11
|
+
@path = PathManager.join(base, name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def render(context)
|
15
|
+
@template ||= site.liquid_renderer.file(path).parse(content)
|
16
|
+
@template.render!(context)
|
17
|
+
rescue Liquid::Error => e
|
18
|
+
e.template_name = path
|
19
|
+
e.markup_context = "included " if e.markup_context.nil?
|
20
|
+
raise e
|
21
|
+
end
|
22
|
+
|
23
|
+
def content
|
24
|
+
@content ||= File.read(path, **site.file_read_opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
def inspect
|
28
|
+
"#{self.class} #{path.inspect}"
|
29
|
+
end
|
30
|
+
alias_method :to_s, :inspect
|
31
|
+
end
|
32
|
+
end
|
@@ -5,11 +5,6 @@ require_relative "liquid_renderer/table"
|
|
5
5
|
|
6
6
|
module Jekyll
|
7
7
|
class LiquidRenderer
|
8
|
-
extend Forwardable
|
9
|
-
|
10
|
-
private def_delegator :@site, :in_source_dir, :source_dir
|
11
|
-
private def_delegator :@site, :in_theme_dir, :theme_dir
|
12
|
-
|
13
8
|
def initialize(site)
|
14
9
|
@site = site
|
15
10
|
Liquid::Template.error_mode = @site.config["liquid"]["error_mode"].to_sym
|
@@ -22,13 +17,7 @@ module Jekyll
|
|
22
17
|
end
|
23
18
|
|
24
19
|
def file(filename)
|
25
|
-
filename
|
26
|
-
filename =
|
27
|
-
if Regexp.last_match(1) == theme_dir("")
|
28
|
-
::File.join(::File.basename(Regexp.last_match(1)), Regexp.last_match(2))
|
29
|
-
else
|
30
|
-
Regexp.last_match(2)
|
31
|
-
end
|
20
|
+
filename = normalize_path(filename)
|
32
21
|
LiquidRenderer::File.new(self, filename).tap do
|
33
22
|
@stats[filename] ||= new_profile_hash
|
34
23
|
end
|
@@ -64,9 +53,23 @@ module Jekyll
|
|
64
53
|
|
65
54
|
private
|
66
55
|
|
67
|
-
def
|
68
|
-
@
|
69
|
-
|
56
|
+
def normalize_path(filename)
|
57
|
+
@normalize_path ||= {}
|
58
|
+
@normalize_path[filename] ||= begin
|
59
|
+
theme_dir = @site.theme&.root
|
60
|
+
case filename
|
61
|
+
when %r!\A(#{Regexp.escape(@site.source)}/)(?<rest>.*)!io
|
62
|
+
Regexp.last_match(:rest)
|
63
|
+
when %r!(/gems/.*)*/gems/(?<dirname>[^/]+)(?<rest>.*)!,
|
64
|
+
%r!(?<dirname>[^/]+/lib)(?<rest>.*)!
|
65
|
+
"#{Regexp.last_match(:dirname)}#{Regexp.last_match(:rest)}"
|
66
|
+
when theme_dir && %r!\A#{Regexp.escape(theme_dir)}/(?<rest>.*)!io
|
67
|
+
PathManager.join(@site.theme.basename, Regexp.last_match(:rest))
|
68
|
+
when %r!\A/(.*)!
|
69
|
+
Regexp.last_match(1)
|
70
|
+
else
|
71
|
+
filename
|
72
|
+
end
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
@@ -18,6 +18,8 @@ module Jekyll
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def render(*args)
|
21
|
+
reset_template_assigns
|
22
|
+
|
21
23
|
measure_time do
|
22
24
|
measure_bytes do
|
23
25
|
measure_counts do
|
@@ -29,6 +31,8 @@ module Jekyll
|
|
29
31
|
|
30
32
|
# This method simply 'rethrows any error' before attempting to render the template.
|
31
33
|
def render!(*args)
|
34
|
+
reset_template_assigns
|
35
|
+
|
32
36
|
measure_time do
|
33
37
|
measure_bytes do
|
34
38
|
measure_counts do
|
@@ -44,6 +48,12 @@ module Jekyll
|
|
44
48
|
|
45
49
|
private
|
46
50
|
|
51
|
+
# clear assigns to `Liquid::Template` instance prior to rendering since
|
52
|
+
# `Liquid::Template` instances are cached in Jekyll 4.
|
53
|
+
def reset_template_assigns
|
54
|
+
@template.instance_assigns.clear
|
55
|
+
end
|
56
|
+
|
47
57
|
def measure_counts
|
48
58
|
@renderer.increment_count(@filename)
|
49
59
|
yield
|
@@ -3,81 +3,28 @@
|
|
3
3
|
module Jekyll
|
4
4
|
class LiquidRenderer
|
5
5
|
class Table
|
6
|
+
GAUGES = [:count, :bytes, :time].freeze
|
7
|
+
|
6
8
|
def initialize(stats)
|
7
9
|
@stats = stats
|
8
10
|
end
|
9
11
|
|
10
12
|
def to_s(num_of_rows = 50)
|
11
|
-
|
12
|
-
widths = table_widths(data)
|
13
|
-
generate_table(data, widths)
|
13
|
+
Jekyll::Profiler.tabulate(data_for_table(num_of_rows))
|
14
14
|
end
|
15
15
|
|
16
16
|
private
|
17
17
|
|
18
|
-
|
19
|
-
str = +"\n"
|
20
|
-
|
21
|
-
table_head = data.shift
|
22
|
-
str << generate_row(table_head, widths)
|
23
|
-
str << generate_table_head_border(table_head, widths)
|
24
|
-
|
25
|
-
data.each do |row_data|
|
26
|
-
str << generate_row(row_data, widths)
|
27
|
-
end
|
28
|
-
|
29
|
-
str << "\n"
|
30
|
-
str
|
31
|
-
end
|
32
|
-
|
33
|
-
def generate_table_head_border(row_data, widths)
|
34
|
-
str = +""
|
35
|
-
|
36
|
-
row_data.each_index do |cell_index|
|
37
|
-
str << "-" * widths[cell_index]
|
38
|
-
str << "-+-" unless cell_index == row_data.length - 1
|
39
|
-
end
|
40
|
-
|
41
|
-
str << "\n"
|
42
|
-
str
|
43
|
-
end
|
44
|
-
|
45
|
-
def generate_row(row_data, widths)
|
46
|
-
str = +""
|
47
|
-
|
48
|
-
row_data.each_with_index do |cell_data, cell_index|
|
49
|
-
str << if cell_index.zero?
|
50
|
-
cell_data.ljust(widths[cell_index], " ")
|
51
|
-
else
|
52
|
-
cell_data.rjust(widths[cell_index], " ")
|
53
|
-
end
|
54
|
-
|
55
|
-
str << " | " unless cell_index == row_data.length - 1
|
56
|
-
end
|
57
|
-
|
58
|
-
str << "\n"
|
59
|
-
str
|
60
|
-
end
|
61
|
-
|
62
|
-
def table_widths(data)
|
63
|
-
widths = []
|
64
|
-
|
65
|
-
data.each do |row|
|
66
|
-
row.each_with_index do |cell, index|
|
67
|
-
widths[index] = [cell.length, widths[index]].compact.max
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
widths
|
72
|
-
end
|
73
|
-
|
18
|
+
# rubocop:disable Metrics/AbcSize
|
74
19
|
def data_for_table(num_of_rows)
|
75
20
|
sorted = @stats.sort_by { |_, file_stats| -file_stats[:time] }
|
76
21
|
sorted = sorted.slice(0, num_of_rows)
|
77
22
|
|
78
|
-
table
|
23
|
+
table = [header_labels]
|
24
|
+
totals = Hash.new { |hash, key| hash[key] = 0 }
|
79
25
|
|
80
26
|
sorted.each do |filename, file_stats|
|
27
|
+
GAUGES.each { |gauge| totals[gauge] += file_stats[gauge] }
|
81
28
|
row = []
|
82
29
|
row << filename
|
83
30
|
row << file_stats[:count].to_s
|
@@ -86,7 +33,17 @@ module Jekyll
|
|
86
33
|
table << row
|
87
34
|
end
|
88
35
|
|
89
|
-
|
36
|
+
footer = []
|
37
|
+
footer << "TOTAL (for #{sorted.size} files)"
|
38
|
+
footer << totals[:count].to_s
|
39
|
+
footer << format_bytes(totals[:bytes])
|
40
|
+
footer << format("%.3f", totals[:time])
|
41
|
+
table << footer
|
42
|
+
end
|
43
|
+
# rubocop:enable Metrics/AbcSize
|
44
|
+
|
45
|
+
def header_labels
|
46
|
+
GAUGES.map { |gauge| gauge.to_s.capitalize }.unshift("Filename")
|
90
47
|
end
|
91
48
|
|
92
49
|
def format_bytes(bytes)
|
data/lib/jekyll/mime.types
CHANGED
@@ -19,18 +19,17 @@ application/davmount+xml davmou
|
|
19
19
|
application/docbook+xml dbk
|
20
20
|
application/dssc+der dssc
|
21
21
|
application/dssc+xml xdssc
|
22
|
-
application/ecmascript ecma
|
22
|
+
application/ecmascript ecma es
|
23
23
|
application/emma+xml emma
|
24
24
|
application/epub+zip epub
|
25
25
|
application/exi exi
|
26
26
|
application/font-tdpfr pfr
|
27
|
-
application/font-woff woff
|
28
|
-
application/font-woff2 woff2
|
29
27
|
application/geo+json geojson
|
30
28
|
application/gml+xml gml
|
31
29
|
application/gpx+xml gpx
|
32
30
|
application/gxf gxf
|
33
31
|
application/gzip gz
|
32
|
+
application/hjson hjson
|
34
33
|
application/hyperstudio stk
|
35
34
|
application/inkml+xml ink inkml
|
36
35
|
application/ipfix ipfix
|
@@ -61,6 +60,8 @@ application/mp21 m21 mp
|
|
61
60
|
application/mp4 mp4s m4p
|
62
61
|
application/msword doc dot
|
63
62
|
application/mxf mxf
|
63
|
+
application/n-quads nq
|
64
|
+
application/n-triples nt
|
64
65
|
application/octet-stream bin dms lrf mar so dist distz pkg bpk dump elc deploy exe dll deb dmg iso img msi msp msm buffer
|
65
66
|
application/oda oda
|
66
67
|
application/oebps-package+xml opf
|
@@ -86,7 +87,8 @@ application/pls+xml pls
|
|
86
87
|
application/postscript ai eps ps
|
87
88
|
application/prs.cww cww
|
88
89
|
application/pskc+xml pskcxml
|
89
|
-
application/
|
90
|
+
application/raml+yaml raml
|
91
|
+
application/rdf+xml rdf owl
|
90
92
|
application/reginfo+xml rif
|
91
93
|
application/relax-ng-compact-syntax rnc
|
92
94
|
application/resource-lists+xml rl
|
@@ -107,6 +109,7 @@ application/sdp sdp
|
|
107
109
|
application/set-payment-initiation setpay
|
108
110
|
application/set-registration-initiation setreg
|
109
111
|
application/shf+xml shf
|
112
|
+
application/sieve siv sieve
|
110
113
|
application/smil+xml smi smil
|
111
114
|
application/sparql-query rq
|
112
115
|
application/sparql-results+xml srx
|
@@ -143,7 +146,10 @@ application/vnd.anser-web-certificate-issue-initiation cii
|
|
143
146
|
application/vnd.anser-web-funds-transfer-initiation fti
|
144
147
|
application/vnd.antix.game-component atx
|
145
148
|
application/vnd.apple.installer+xml mpkg
|
149
|
+
application/vnd.apple.keynote keynote
|
146
150
|
application/vnd.apple.mpegurl m3u8
|
151
|
+
application/vnd.apple.numbers numbers
|
152
|
+
application/vnd.apple.pages pages
|
147
153
|
application/vnd.apple.pkpass pkpass
|
148
154
|
application/vnd.aristanetworks.swi swi
|
149
155
|
application/vnd.astraea-software.iota iota
|
@@ -154,6 +160,7 @@ application/vnd.businessobjects rep
|
|
154
160
|
application/vnd.chemdraw+xml cdxml
|
155
161
|
application/vnd.chipnuts.karaoke-mmd mmd
|
156
162
|
application/vnd.cinderella cdy
|
163
|
+
application/vnd.citationstyles.style+xml csl
|
157
164
|
application/vnd.claymore cla
|
158
165
|
application/vnd.cloanto.rp9 rp9
|
159
166
|
application/vnd.clonk.c4group c4g c4d c4f c4p c4u
|
@@ -482,6 +489,7 @@ application/vnd.yellowriver-custom-menu cmp
|
|
482
489
|
application/vnd.zul zir zirz
|
483
490
|
application/vnd.zzazz.deck+xml zaz
|
484
491
|
application/voicexml+xml vxml
|
492
|
+
application/wasm wasm
|
485
493
|
application/widget wgt
|
486
494
|
application/winhlp hlp
|
487
495
|
application/wsdl+xml wsdl
|
@@ -521,10 +529,8 @@ application/x-eva eva
|
|
521
529
|
application/x-font-bdf bdf
|
522
530
|
application/x-font-ghostscript gsf
|
523
531
|
application/x-font-linux-psf psf
|
524
|
-
application/x-font-otf otf
|
525
532
|
application/x-font-pcf pcf
|
526
533
|
application/x-font-snf snf
|
527
|
-
application/x-font-ttf ttf ttc
|
528
534
|
application/x-font-type1 pfa pfb pfm afm
|
529
535
|
application/x-freearc arc
|
530
536
|
application/x-futuresplash spl
|
@@ -661,20 +667,41 @@ chemical/x-cmdf cmdf
|
|
661
667
|
chemical/x-cml cml
|
662
668
|
chemical/x-csml csml
|
663
669
|
chemical/x-xyz xyz
|
670
|
+
font/collection ttc
|
671
|
+
font/otf otf
|
672
|
+
font/ttf ttf
|
673
|
+
font/woff woff
|
674
|
+
font/woff2 woff2
|
675
|
+
image/aces exr
|
664
676
|
image/apng apng
|
665
677
|
image/bmp bmp
|
666
678
|
image/cgm cgm
|
679
|
+
image/dicom-rle drle
|
680
|
+
image/fits fits
|
667
681
|
image/g3fax g3
|
668
682
|
image/gif gif
|
683
|
+
image/heic heic
|
684
|
+
image/heic-sequence heics
|
685
|
+
image/heif heif
|
686
|
+
image/heif-sequence heifs
|
669
687
|
image/ief ief
|
688
|
+
image/jls jls
|
689
|
+
image/jp2 jp2 jpg2
|
670
690
|
image/jpeg jpeg jpg jpe
|
691
|
+
image/jpm jpm
|
692
|
+
image/jpx jpx jpf
|
693
|
+
image/jxr jxr
|
671
694
|
image/ktx ktx
|
672
695
|
image/png png
|
673
696
|
image/prs.btif btif
|
697
|
+
image/prs.pti pti
|
674
698
|
image/sgi sgi
|
675
699
|
image/svg+xml svg svgz
|
676
|
-
image/
|
700
|
+
image/t38 t38
|
701
|
+
image/tiff tif tiff
|
702
|
+
image/tiff-fx tfx
|
677
703
|
image/vnd.adobe.photoshop psd
|
704
|
+
image/vnd.airzip.accelerator.azv azv
|
678
705
|
image/vnd.dece.graphic uvi uvvi uvg uvvg
|
679
706
|
image/vnd.djvu djvu djv
|
680
707
|
image/vnd.dvb.subtitle sub
|
@@ -685,20 +712,22 @@ image/vnd.fpx fpx
|
|
685
712
|
image/vnd.fst fst
|
686
713
|
image/vnd.fujixerox.edmics-mmr mmr
|
687
714
|
image/vnd.fujixerox.edmics-rlc rlc
|
715
|
+
image/vnd.microsoft.icon ico
|
688
716
|
image/vnd.ms-modi mdi
|
689
717
|
image/vnd.ms-photo wdp
|
690
718
|
image/vnd.net-fpx npx
|
719
|
+
image/vnd.tencent.tap tap
|
720
|
+
image/vnd.valve.source.texture vtf
|
691
721
|
image/vnd.wap.wbmp wbmp
|
692
722
|
image/vnd.xiff xif
|
723
|
+
image/vnd.zbrush.pcx pcx
|
693
724
|
image/webp webp
|
694
725
|
image/x-3ds 3ds
|
695
726
|
image/x-cmu-raster ras
|
696
727
|
image/x-cmx cmx
|
697
728
|
image/x-freehand fh fhc fh4 fh5 fh7
|
698
|
-
image/x-icon ico
|
699
729
|
image/x-jng jng
|
700
730
|
image/x-mrsid-image sid
|
701
|
-
image/x-pcx pcx
|
702
731
|
image/x-pict pic pct
|
703
732
|
image/x-portable-anymap pnm
|
704
733
|
image/x-portable-bitmap pbm
|
@@ -709,7 +738,14 @@ image/x-tga tga
|
|
709
738
|
image/x-xbitmap xbm
|
710
739
|
image/x-xpixmap xpm
|
711
740
|
image/x-xwindowdump xwd
|
741
|
+
message/disposition-notification disposition-notification
|
742
|
+
message/global u8msg
|
743
|
+
message/global-delivery-status u8dsn
|
744
|
+
message/global-disposition-notification u8mdn
|
745
|
+
message/global-headers u8hdr
|
712
746
|
message/rfc822 eml mime
|
747
|
+
message/vnd.wfa.wsc wsc
|
748
|
+
model/3mf 3mf
|
713
749
|
model/gltf+json gltf
|
714
750
|
model/gltf-binary glb
|
715
751
|
model/iges igs iges
|
@@ -719,6 +755,11 @@ model/vnd.dwf dwf
|
|
719
755
|
model/vnd.gdl gdl
|
720
756
|
model/vnd.gtw gtw
|
721
757
|
model/vnd.mts mts
|
758
|
+
model/vnd.opengex ogex
|
759
|
+
model/vnd.parasolid.transmit.binary x_b
|
760
|
+
model/vnd.parasolid.transmit.text x_t
|
761
|
+
model/vnd.usdz+zip usdz
|
762
|
+
model/vnd.valve.source.compiled-map bsp
|
722
763
|
model/vnd.vtu vtu
|
723
764
|
model/vrml wrl vrml
|
724
765
|
model/x3d+binary x3db x3dbz
|
@@ -729,18 +770,19 @@ text/calendar ics if
|
|
729
770
|
text/coffeescript coffee litcoffee
|
730
771
|
text/css css
|
731
772
|
text/csv csv
|
732
|
-
text/hjson hjson
|
733
773
|
text/html html htm shtml
|
734
774
|
text/jade jade
|
735
775
|
text/jsx jsx
|
736
776
|
text/less less
|
737
777
|
text/markdown markdown md
|
738
778
|
text/mathml mml
|
779
|
+
text/mdx mdx
|
739
780
|
text/n3 n3
|
740
781
|
text/plain txt text conf def list log in ini
|
741
782
|
text/prs.lines.tag dsc
|
742
783
|
text/richtext rtx
|
743
784
|
text/sgml sgml sgm
|
785
|
+
text/shex shex
|
744
786
|
text/slim slim slm
|
745
787
|
text/stylus stylus styl
|
746
788
|
text/tab-separated-values tsv
|
@@ -788,7 +830,7 @@ video/h261 h261
|
|
788
830
|
video/h263 h263
|
789
831
|
video/h264 h264
|
790
832
|
video/jpeg jpgv
|
791
|
-
video/jpm
|
833
|
+
video/jpm jpgm
|
792
834
|
video/mj2 mj2 mjp2
|
793
835
|
video/mp2t ts
|
794
836
|
video/mp4 mp4 mp4v mpg4
|