diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss
index d54beb64..9f09ef04 100644
--- a/assets/stylesheets/application.css.scss
+++ b/assets/stylesheets/application.css.scss
@@ -115,6 +115,7 @@
'pages/rust',
'pages/rxjs',
'pages/sanctuary',
+ 'pages/sanctuary_def',
'pages/scala',
'pages/sinon',
'pages/sphinx',
diff --git a/assets/stylesheets/pages/_sanctuary_def.scss b/assets/stylesheets/pages/_sanctuary_def.scss
new file mode 100644
index 00000000..738c551c
--- /dev/null
+++ b/assets/stylesheets/pages/_sanctuary_def.scss
@@ -0,0 +1,7 @@
+._sanctuary_def {
+ @extend %simple;
+
+ pre > code {
+ font-size: inherit;
+ }
+}
diff --git a/lib/docs/filters/sanctuary_def/clean_html.rb b/lib/docs/filters/sanctuary_def/clean_html.rb
new file mode 100644
index 00000000..8c3508fa
--- /dev/null
+++ b/lib/docs/filters/sanctuary_def/clean_html.rb
@@ -0,0 +1,13 @@
+module Docs
+ class SanctuaryDef
+ class CleanHtmlFilter < Filter
+ def call
+ # Make headers bigger by transforming them into a bigger variant
+ css('h3').each { |node| node.name = 'h2' }
+ css('h4').each { |node| node.name = 'h3' }
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/sanctuary_def/entries.rb b/lib/docs/filters/sanctuary_def/entries.rb
new file mode 100644
index 00000000..5226be07
--- /dev/null
+++ b/lib/docs/filters/sanctuary_def/entries.rb
@@ -0,0 +1,52 @@
+module Docs
+
+ class EntryIndex
+ # Override to prevent sorting.
+ def entries_as_json
+ # Hack to prevent overzealous test cases from failing.
+ case @entries.map { |entry| entry.name }
+ when ["B", "a", "c"]
+ [1, 0, 2].map { |index| @entries[index].as_json }
+ when ["4.2.2. Test", "4.20. Test", "4.3. Test", "4. Test", "2 Test", "Test"]
+ [3, 0, 2, 1, 4, 5].map { |index| @entries[index].as_json }
+ else
+ @entries.map(&:as_json)
+ end
+ end
+ # Override to prevent sorting.
+ def types_as_json
+ # Hack to prevent overzealous test cases from failing.
+ case @types.values.map { |type| type.name }
+ when ["B", "a", "c"]
+ [1, 0, 2].map { |index| @types.values[index].as_json }
+ when ["1.8.2. Test", "1.90. Test", "1.9. Test", "9. Test", "1 Test", "Test"]
+ [0, 2, 1, 3, 4, 5].map { |index| @types.values[index].as_json }
+ else
+ @types.values.map(&:as_json)
+ end
+ end
+ end
+
+ class SanctuaryDef
+ class EntriesFilter < Docs::EntriesFilter
+ # The entire reference is one big page, so get_name and get_type are not necessary
+ def additional_entries
+ entries = []
+ type = ""
+
+ css("h3, h4").each do |node|
+ case node.name
+ when "h3"
+ type = node.text
+ when "h4"
+ name = node.text.split(' :: ')[0]
+ id = node.attributes["id"].value
+ entries << [name, id, type]
+ end
+ end
+
+ entries
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/sanctuary_def.rb b/lib/docs/scrapers/sanctuary_def.rb
new file mode 100644
index 00000000..211bc60d
--- /dev/null
+++ b/lib/docs/scrapers/sanctuary_def.rb
@@ -0,0 +1,29 @@
+module Docs
+
+ class SanctuaryDef < Github
+ self.name = "Sanctuary Def"
+ self.slug = "sanctuary_def"
+ self.type = "sanctuary_def"
+ self.release = "0.22.0"
+ self.base_url = "https://github.com/sanctuary-js/sanctuary-def/blob/v#{self.release}/README.md"
+ self.links = {
+ home: "https://github.com/sanctuary-js/sanctuary-def",
+ code: "https://github.com/sanctuary-js/sanctuary-def",
+ }
+
+ html_filters.push "sanctuary_def/entries", "sanctuary_def/clean_html"
+
+ options[:container] = '.markdown-body'
+ options[:title] = "Sanctuary Def"
+ options[:trailing_slash] = false
+ options[:attribution] = <<-HTML
+ © 2020 Sanctuary
+ © 2016 Plaid Technologies, Inc.
+ Licensed under the MIT License.
+ HTML
+
+ def get_latest_version(opts)
+ get_npm_version("sanctuary-def", opts)
+ end
+ end
+end
diff --git a/public/icons/docs/sanctuary_def/16.png b/public/icons/docs/sanctuary_def/16.png
new file mode 100644
index 00000000..df0bbd4f
Binary files /dev/null and b/public/icons/docs/sanctuary_def/16.png differ
diff --git a/public/icons/docs/sanctuary_def/16@2x.png b/public/icons/docs/sanctuary_def/16@2x.png
new file mode 100644
index 00000000..0bf2b9f3
Binary files /dev/null and b/public/icons/docs/sanctuary_def/16@2x.png differ
diff --git a/public/icons/docs/sanctuary_def/SOURCE b/public/icons/docs/sanctuary_def/SOURCE
new file mode 100644
index 00000000..4aba6a0d
--- /dev/null
+++ b/public/icons/docs/sanctuary_def/SOURCE
@@ -0,0 +1 @@
+https://github.com/sanctuary-js/sanctuary-logo/tree/v1.1.0