+
+
+
+
\ No newline at end of file
diff --git a/docs/docs_templates/templates/breadcrumbs.html b/docs/docs_templates/templates/breadcrumbs.html
new file mode 100644
index 00000000..1f3e65e9
--- /dev/null
+++ b/docs/docs_templates/templates/breadcrumbs.html
@@ -0,0 +1,17 @@
+
+{%- for node in schema.nodes_from_root -%}
+ {%- if loop.first -%}
+ root
+ {%- else -%}
+ {{ node.name_for_breadcrumbs | lowerfirst }}
+ {%- endif -%}
+ {%- if not loop.last %}
+
+ {% endif -%}
+{%- endfor -%}
+
\ No newline at end of file
diff --git a/docs/docs_templates/templates/content.html b/docs/docs_templates/templates/content.html
new file mode 100644
index 00000000..f7734128
--- /dev/null
+++ b/docs/docs_templates/templates/content.html
@@ -0,0 +1,121 @@
+{% from "macro_restriction.html" import restriction with context %}
+
+{% macro tabbed_section(operator, current_node) %}
+ {% include "tabbed_section.html" %}
+{% endmacro %}
+
+{% macro content(schema, skip_headers=False) %}
+ {% set keys = schema.keywords %}
+
+ {# Resolve type #}
+ {% set type_name = schema.type_name %}
+
+ {% if not skip_headers %}
+ {% if config.show_breadcrumbs %}
+ {% include "breadcrumbs.html" %}
+ {% endif %}
+
+ {# Display type #}
+ {% if not schema is combining %}
+
+{%- endmacro -%}
\ No newline at end of file
diff --git a/docs/docs_templates/templates/schema_base.jinja2 b/docs/docs_templates/templates/schema_base.jinja2
new file mode 100644
index 00000000..56c4a806
--- /dev/null
+++ b/docs/docs_templates/templates/schema_base.jinja2
@@ -0,0 +1,15 @@
+{% extends "base.jinja2" %}
+{% from 'content.html' import content with context %}
+
+{% block content %}
+
+
+
{{ title|title }}
+
+
+
+
+ {{ content(schema) }}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/docs/docs_templates/templates/schema_doc.min.js b/docs/docs_templates/templates/schema_doc.min.js
new file mode 100644
index 00000000..0d9c7882
--- /dev/null
+++ b/docs/docs_templates/templates/schema_doc.min.js
@@ -0,0 +1 @@
+function flashElement(t){myElement=document.getElementById(t),myElement.classList.add("jsfh-animated-property"),setTimeout(function(){myElement.classList.remove("jsfh-animated-property")},1e3)}function setAnchor(t){history.pushState({},"",t)}function anchorOnLoad(){let t=window.location.hash.split("?")[0].split("&")[0];"#"===t[0]&&(t=t.substr(1)),t.length>0&&anchorLink(t)}function anchorLink(t){$("#"+t).parents().addBack().filter(".collapse:not(.show), .tab-pane, [role='tab']").each(function(t){if($(this).hasClass("collapse"))$(this).collapse("show");else if($(this).hasClass("tab-pane")){const t=$("a[href='#"+$(this).attr("id")+"']");t&&t.tab("show")}else"tab"===$(this).attr("role")&&$(this).tab("show")}),setTimeout(function(){let e=document.getElementById(t);e&&(e.scrollIntoView({block:"center",behavior:"smooth"}),setTimeout(function(){flashElement(t)},500))},1e3)}$(document).on("click",'a[href^="#"]',function(t){t.preventDefault(),history.pushState({},"",this.href)});
\ No newline at end of file
diff --git a/docs/docs_templates/templates/section_array.html b/docs/docs_templates/templates/section_array.html
new file mode 100644
index 00000000..a676f0d9
--- /dev/null
+++ b/docs/docs_templates/templates/section_array.html
@@ -0,0 +1,36 @@
+{%- if schema.kw_min_items -%}
+ {{ restriction("Must contain a minimum of " ~ schema.kw_min_items.literal ~ " items", "min-items", schema.kw_min_items.html_id) }}
+{%- endif -%}
+{%- if schema.kw_max_items -%}
+ {{ restriction("Must contain a maximum of " ~ schema.kw_max_items.literal ~ " items", "max-items", schema.kw_max_items.html_id) }}
+{%- endif -%}
+{%- if schema.kw_unique_items and schema.kw_unique_items.literal == True -%}
+ {{ restriction("All items must be unique", "unique-items", schema.kw_unique_items.html_id) }}
+{%- endif -%}
+{%- if schema.array_items_def -%}
+
Each item of this array must be:
+
+
+ {{ content(schema.array_items_def) }}
+
+
+{%- endif -%}
+{%- if schema.tuple_validation_items -%}
+
Tuple Validation
+ {% for item in schema.tuple_validation_items %}
+
Item at {{ loop.index }} must be:
+
+
+ {{ content(item) }}
+
+
+ {% endfor %}
+{%- endif -%}
+{%- if schema.kw_contains and schema.kw_contains.literal != {} -%}
+
At least one of the items must be:
+
+
+ {{ content(schema.kw_contains) }}
+
+
+{%- endif -%}
\ No newline at end of file
diff --git a/docs/docs_templates/templates/section_conditional_subschema.html b/docs/docs_templates/templates/section_conditional_subschema.html
new file mode 100644
index 00000000..e543669d
--- /dev/null
+++ b/docs/docs_templates/templates/section_conditional_subschema.html
@@ -0,0 +1,58 @@
+
+
+
+
If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected.
+ Otherwise, the conditions in the "Else" tab should be respected.
+
+ {% if schema.kw_then %}
+ {% set tab_id = schema.kw_then.html_id %}
+
+ {{ content(schema.kw_then) }}
+
+ {%- endif -%}
+
+ {%- if schema.kw_else -%}
+ {% set tab_id = schema.kw_else.html_id %}
+
+ {{ content(schema.kw_else) }}
+
+ {%- endif -%}
+
\ No newline at end of file
diff --git a/docs/docs_templates/templates/section_description.html b/docs/docs_templates/templates/section_description.html
new file mode 100644
index 00000000..2e90dc71
--- /dev/null
+++ b/docs/docs_templates/templates/section_description.html
@@ -0,0 +1,20 @@
+{# Display description #}
+{% if description %}
+
+
+ {% if not config.collapse_long_descriptions or description is description_short %}
+ {{ description }}
+ {% else %}
+
+
+
+{%- for example in examples -%}
+ {%- set example_id = schema.html_id ~ "_ex" ~ loop.index -%}
+ {%- set example_is_long = example is not description_short -%}
+ {%- if example_is_long -%}
+
+ {%- endif -%}
+
+ {%- if not examples_as_yaml -%}
+ {{ example | highlight_json_example }}
+ {%- else -%}
+ {{ example | highlight_yaml_example }}
+ {%- endif -%}
+
\ No newline at end of file
diff --git a/docs/docs_templates/templates/section_properties.html b/docs/docs_templates/templates/section_properties.html
new file mode 100644
index 00000000..725139a3
--- /dev/null
+++ b/docs/docs_templates/templates/section_properties.html
@@ -0,0 +1,62 @@
+{% set html_id = sub_property.html_id %}
+
+
+
+
+
+
+
+
+
+ {% if sub_property.is_pattern_property %}
+
+
+
+
All property whose name matches the following regular expression must respect the
+ following
+ conditions
+ Property name regular expression: {{ sub_property.property_name | escape }}
+
+ {% endif %}
+
+ {% if sub_property.is_additional_properties %}
+ {% if sub_property.is_additional_properties_schema %}
+
Each additional property must conform to the following
+ schema
diff --git a/docs/docs_templates/templates/section_undocumented_required_properties.html b/docs/docs_templates/templates/section_undocumented_required_properties.html
new file mode 100644
index 00000000..7e7ceaeb
--- /dev/null
+++ b/docs/docs_templates/templates/section_undocumented_required_properties.html
@@ -0,0 +1,11 @@
+{%- set undocumented_required_properties = schema | get_undocumented_required_properties -%}
+{%- if undocumented_required_properties-%}
+
+
The following properties are required:
+
+ {%- for required_property in undocumented_required_properties -%}
+
{{ required_property }}
+ {%- endfor -%}
+
+
+{%- endif -%}
\ No newline at end of file
diff --git a/docs/docs_templates/templates/tabbed_section.html b/docs/docs_templates/templates/tabbed_section.html
new file mode 100644
index 00000000..9cecf4c1
--- /dev/null
+++ b/docs/docs_templates/templates/tabbed_section.html
@@ -0,0 +1,25 @@
+
+
+
+{%- set tab_label = "Option" -%}
+{%- if operator == "allOf" -%}
+ {%- set tab_label = "Requirement" -%}
+{%- endif -%}
+