This is an automated email from the ASF dual-hosted git repository.

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-site.git


The following commit(s) were added to refs/heads/main by this push:
     new 50bc21bc NIFI-13915 Updated documentation for NiFi 2.0.0
50bc21bc is described below

commit 50bc21bcdb070c4a08722735150e8c3e482db390
Author: exceptionfactory <[email protected]>
AuthorDate: Mon Nov 4 13:01:54 2024 -0600

    NIFI-13915 Updated documentation for NiFi 2.0.0
---
 .github/workflows/build.yml                 |   1 +
 .gitignore                                  |   3 +
 README.md                                   |   3 +
 config.toml                                 |  25 ++
 content/documentation/_index.md             |   2 +-
 content/documentation/v2/_index.md          |  12 -
 prebuild.sh                                 |  33 +++
 prebuild/config.toml                        |   6 +
 prebuild/layouts/index.html                 |  51 ++++
 static/.htaccess                            |   3 +
 themes/nifi/layouts/partials/component.html | 422 ++++++++++++++++++++++++++++
 themes/nifi/layouts/section/components.html | 141 ++++++++++
 themes/nifi/static/css/main.css             |  58 +++-
 13 files changed, 733 insertions(+), 27 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6bdd3992..b5ddee30 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -40,6 +40,7 @@ jobs:
           rm -rf stylesheets
       - name: Build
         run: |
+          bash prebuild.sh
           hugo
       - name: Publish
         working-directory: ${{ env.PUBLISH_DIRECTORY }}
diff --git a/.gitignore b/.gitignore
index 494176ae..e12f7329 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,8 +24,11 @@ node_modules/
 .sass-cache
 .ruby-version
 package-lock.json
+nifi-runtime-manifest.json
 
 # hugo
 /public
 /resources
 /.hugo_build.lock
+/prebuild/public
+/prebuild/.hugo_build.lock
diff --git a/README.md b/README.md
index 39624a3c..055affb2 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,9 @@ The Apache NiFi website uses [Hugo](https://gohugo.io) to 
build static HTML and
 
 ## Build
 
+- Run prebuild.sh for generated documentation
+  - `bash prebuild.sh`
+
 - Run Hugo Build
   - `hugo`
 
diff --git a/config.toml b/config.toml
index aae04226..17ffaeed 100644
--- a/config.toml
+++ b/config.toml
@@ -8,6 +8,7 @@ disableKinds = ["RSS"]
 enableGitInfo = true
 theme = "nifi"
 enableInlineShortcodes = true
+disablePathToLower = true
 
 [markup.goldmark.renderer]
 unsafe = true
@@ -28,6 +29,8 @@ assets = "assets"
 matomoSiteId = 28
 productionHost = "nifi.apache.org"
 
+staticDocsPath = "/nifi-docs"
+
 apacheFoundationGroupsUrl = 
"https://projects.apache.org/json/foundation/groups.json";
 apacheFoundationPeopleNameUrl = 
"https://projects.apache.org/json/foundation/people_name.json";
 
@@ -47,7 +50,29 @@ minifiCppCurrentProjectVersionReleased = "2024-05-17"
 minifiCppPreviousProjectVersion = "0.15.0"
 minifiCppPreviousProjectVersionReleased = "2023-09-01"
 
+[module]
+  [[module.mounts]]
+    source = "content"
+    target = "content"
+  [[module.mounts]]
+    source = "static"
+    target = "static"
+  [[module.mounts]]
+    source = "layouts"
+    target = "layouts"
+  [[module.mounts]]
+    source = "prebuild/public/components"
+    target = "content/components"
+  [[module.mounts]]
+    source = "prebuild/public/html"
+    target = "content/nifi-docs"
+
 [menu]
+  [[menu.main]]
+    name = 'NiFi Version 2 Documentation'
+    url = '/components/'
+    weight = 1
+    parent = 'Documentation'
   [[menu.main]]
     name = 'Wiki'
     url = 'https://cwiki.apache.org/confluence/display/NIFI'
diff --git a/content/documentation/_index.md b/content/documentation/_index.md
index 2156f91c..273a8691 100644
--- a/content/documentation/_index.md
+++ b/content/documentation/_index.md
@@ -11,7 +11,7 @@ menu:
 
 ## Configuration and Component Properties
 
-- [NiFi Documentation {{< param currentProjectVersion >}}]({{< relref 
"/documentation/v2" >}})
+- [NiFi Documentation {{< param currentProjectVersion >}}]({{< relref 
"/components/" >}})
 - [NiFi Documentation {{< param previousProjectVersion >}}]({{< relref 
"/documentation/v1" >}})
 
 ## Reference Information
diff --git a/content/documentation/v2/_index.md 
b/content/documentation/v2/_index.md
deleted file mode 100644
index 518e9288..00000000
--- a/content/documentation/v2/_index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: "Documentation for Version 2"
-layout: "documentation"
-iframe: true
-menu:
-  main:
-    name: NiFi Version 2 Documentation
-    parent: "Documentation"
-    weight: 1
----
-
-<iframe class="documentation-container" 
src="https://nifi.apache.org/documentation/nifi-{{< param currentProjectVersion 
>}}-M4/"></iframe>
diff --git a/prebuild.sh b/prebuild.sh
new file mode 100644
index 00000000..6fcc2549
--- /dev/null
+++ b/prebuild.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+CURRENT_VERSION=2.0.0
+
+RESOURCES_DIR=resources
+PREBUILD_DIR=prebuild
+
+MAVEN_BASE_URL=https://repo1.maven.org/maven2
+
+MANIFEST_JAR_URL="$MAVEN_BASE_URL/org/apache/nifi/nifi-runtime-manifest/$CURRENT_VERSION/nifi-runtime-manifest-$CURRENT_VERSION.jar"
+MANIFEST_JAR_PATH=$RESOURCES_DIR/nifi-runtime-manifest.jar
+MANIFEST_JSON=nifi-runtime-manifest.json
+
+NIFI_DOCS_ZIP_URL="$MAVEN_BASE_URL/org/apache/nifi/nifi-docs/$CURRENT_VERSION/nifi-docs-$CURRENT_VERSION-resources.zip"
+NIFI_DOCS_ZIP_PATH=$RESOURCES_DIR/nifi-docs-resources.zip
+
+# Create Hugo directories
+if [ ! -d $RESOURCES_DIR ];then
+  mkdir $RESOURCES_DIR
+fi
+
+# Download Runtime Manifest JAR and extract JSON to prebuild
+echo "Downloading $MANIFEST_JAR_URL"
+curl -o $MANIFEST_JAR_PATH $MANIFEST_JAR_URL
+unzip -q -o -d $PREBUILD_DIR/assets $MANIFEST_JAR_PATH $MANIFEST_JSON
+
+# Download Documentation Resources and extract to prebuild
+echo "Downloading $NIFI_DOCS_ZIP_URL"
+curl -o $NIFI_DOCS_ZIP_PATH $NIFI_DOCS_ZIP_URL
+unzip -q -o -d $PREBUILD_DIR/public $NIFI_DOCS_ZIP_PATH
+
+# Build components using prebuild directory with Hugo
+hugo -s $PREBUILD_DIR
diff --git a/prebuild/config.toml b/prebuild/config.toml
new file mode 100644
index 00000000..04ee003d
--- /dev/null
+++ b/prebuild/config.toml
@@ -0,0 +1,6 @@
+title = "Apache NiFi"
+copyright = "The Apache Software Foundation"
+disableKinds = ["RSS", "sitemap", "taxonomy", "term"]
+
+[outputs]
+home = ["html"]
diff --git a/prebuild/layouts/index.html b/prebuild/layouts/index.html
new file mode 100644
index 00000000..0059840d
--- /dev/null
+++ b/prebuild/layouts/index.html
@@ -0,0 +1,51 @@
+{{ $manifest := dict }}
+{{ with resources.Get "nifi-runtime-manifest.json" }}
+  {{ with . | transform.Unmarshal }}
+    {{ $manifest = . }}
+  {{ end }}
+{{ else }}
+  not found
+{{ end }}
+
+{{ range $manifest.bundles }}
+  {{ range .componentManifest.controllerServices }}
+    {{ $simpleClassName := replaceRE `.+?\.?([^\.]+)$` "$1" .type }}
+    {{ $metadata := merge . (dict "title" $simpleClassName "componentType" 
"controller-services") }}
+    {{ $string := jsonify $metadata }}
+    {{ $filename := printf "components/%s/_index.md" .type }}
+    {{ $resource := resources.FromString $filename $string }}
+    {{ $file := $resource.RelPermalink }}
+  {{ end }}
+  {{ range .componentManifest.processors }}
+    {{ $simpleClassName := replaceRE `.+?\.?([^\.]+)$` "$1" .type }}
+    {{ $metadata := merge . (dict "title" $simpleClassName "componentType" 
"processors") }}
+    {{ $string := jsonify $metadata }}
+    {{ $filename := printf "components/%s/_index.md" .type }}
+    {{ $resource := resources.FromString $filename $string }}
+    {{ $file := $resource.RelPermalink }}
+  {{ end }}
+  {{ range .componentManifest.reportingTasks }}
+    {{ $simpleClassName := replaceRE `.+?\.?([^\.]+)$` "$1" .type }}
+    {{ $metadata := merge . (dict "title" $simpleClassName "componentType" 
"reporting-tasks") }}
+    {{ $string := jsonify $metadata }}
+    {{ $filename := printf "components/%s/_index.md" .type }}
+    {{ $resource := resources.FromString $filename $string }}
+    {{ $file := $resource.RelPermalink }}
+  {{ end }}
+  {{ range .componentManifest.parameterProviders }}
+    {{ $simpleClassName := replaceRE `.+?\.?([^\.]+)$` "$1" .type }}
+    {{ $metadata := merge . (dict "title" $simpleClassName "componentType" 
"parameter-providers") }}
+    {{ $string := jsonify $metadata }}
+    {{ $filename := printf "components/%s/_index.md" .type }}
+    {{ $resource := resources.FromString $filename $string }}
+    {{ $file := $resource.RelPermalink }}
+  {{ end }}
+  {{ range .componentManifest.flowAnalysisRules }}
+    {{ $simpleClassName := replaceRE `.+?\.?([^\.]+)$` "$1" .type }}
+    {{ $metadata := merge . (dict "title" $simpleClassName "componentType" 
"flow-analysis-rules") }}
+    {{ $string := jsonify $metadata }}
+    {{ $filename := printf "components/%s/_index.md" .type }}
+    {{ $resource := resources.FromString $filename $string }}
+    {{ $file := $resource.RelPermalink }}
+  {{ end }}
+{{ end }}
diff --git a/static/.htaccess b/static/.htaccess
index 1947d7dc..6087b77e 100644
--- a/static/.htaccess
+++ b/static/.htaccess
@@ -10,6 +10,9 @@ RewriteRule ^documentation/nifi-latest/html/(.+?)$ 
/documentation/nifi-2.0.0-M4/
 # Redirect component documentation to specified version
 RewriteRule 
^docs/nifi-docs/components/org\.apache\.nifi/([^\/]+?)/[^\/]+?/(.*)$ 
docs/nifi-docs/components/org.apache.nifi/$1/1.28.0/$2 [L]
 
+# Rewrite documentation overview pages
+RewriteRule ^documentation/v2/$ /components/ [L,R]
+
 # Rewrite historical links
 RewriteRule ^minifi/.*$ /projects/minifi/ [L,R]
 RewriteRule ^quickstart\.html$ /documentation/v2/ [L,R]
diff --git a/themes/nifi/layouts/partials/component.html 
b/themes/nifi/layouts/partials/component.html
new file mode 100644
index 00000000..b057a43b
--- /dev/null
+++ b/themes/nifi/layouts/partials/component.html
@@ -0,0 +1,422 @@
+{{ $processors := where .Site.Pages "Params.componentType" "processors" }}
+{{ $controllerServices := where .Site.Pages "Params.componentType" 
"controller-services" }}
+
+<h3>{{ .Params.title }} {{ .Params.version }}</h3>
+
+<dl class="uk-description-list">
+    <dt>Bundle</dt>
+    <dd>{{ .Params.group }} | {{ .Params.artifact }}</dd>
+    <dt>Description</dt>
+    <dd>{{ .Params.typeDescription }}</dd>
+    <dt>Tags</dt>
+    <dd>
+        {{- range $index, $tag := .Params.tags -}}
+        {{- if $index }}, {{ end }}{{ $tag }}
+        {{- end -}}
+    </dd>
+    <dt>Input Requirement</dt>
+    <dd>
+        {{ replace .Params.inputRequirement "INPUT_" "" }}
+    </dd>
+    <dt>Supports Sensitive Dynamic Properties</dt>
+    <dd>{{ .Params.supportsSensitiveDynamicProperties }}</dd>
+</dl>
+
+<div class="uk-margin uk-flex">
+    <div class="component-section-header uk-width-3-4">Properties</div>
+    <div class="uk-width-1-4 uk-text-right">
+        <button uk-icon="icon: expand" uk-tooltip="Expand Properties" 
id="expand-property-descriptors" class="uk-button uk-button-link 
uk-button-small"></button>
+        <button uk-icon="icon: shrink" uk-tooltip="Collapse Properties" 
id="shrink-property-descriptors" class="uk-button uk-button-link 
uk-button-small"></button>
+    </div>
+    <script type="text/javascript">
+        document.addEventListener('uikit:init', () => {
+            var expand = 
document.getElementById('expand-property-descriptors');
+            expand.addEventListener('click', () => {
+                var descriptors = 
document.getElementsByClassName('property-descriptor-content');
+                for (var i = 0; i < descriptors.length; i++) {
+                    var descriptor = descriptors[i];
+                    descriptor.hidden = false;
+                }
+            });
+
+            var shrink = 
document.getElementById('shrink-property-descriptors');
+            shrink.addEventListener('click', () => {
+                var descriptors = 
document.getElementsByClassName('property-descriptor-content');
+                for (var i = 0; i < descriptors.length; i++) {
+                    var descriptor = descriptors[i];
+                    descriptor.hidden = true;
+                }
+            });
+        });
+    </script>
+</div>
+<div>
+    <ul uk-accordion="multiple: true" id="property-descriptors">
+        {{ range .Params.propertyDescriptors }}
+        <li class="property-descriptor">
+            <a class="uk-accordion-title" href>
+                <span class="{{ if .required }}property-required{{ end }}">{{ 
.displayName }}</span>
+                <div class="uk-width-2-3 uk-align-right uk-margin-remove 
uk-text-truncate uk-text-lighter">{{ .description }}</div>
+            </a>
+            <div class="uk-accordion-content uk-padding-small 
property-descriptor-content">
+                <dl class="uk-description-list">
+                    <dt>Display Name</dt>
+                    <dd>{{ .displayName }}</dd>
+                    <dt>Description</dt>
+                    <dd>{{ .description }}</dd>
+                    <dt>API Name</dt>
+                    <dd>{{ .name }}</dd>
+                    {{ if .defaultValue }}
+                    <dt>Default Value</dt>
+                    <dd>{{ .defaultValue }}</dd>
+                    {{ end }}
+                    {{ if .allowableValues }}
+                    <dt>Allowable Values</dt>
+                    <dd>
+                        <ul>
+                            {{ range .allowableValues }}
+                            <li>
+                                {{ .displayName }}
+                                {{ if .description -}}
+                                <span uk-icon="info" uk-tooltip="{{ 
.description }}"></span>
+                                {{- end -}}
+                            </li>
+                            {{ end }}
+                        </ul>
+                    </dd>
+                    {{ end }}
+                    {{ if .typeProvidedByValue }}
+                    <dt>Service Interface</dt>
+                    <dd>{{ .typeProvidedByValue.type }}</dd>
+
+                    {{ $serviceInterface := .typeProvidedByValue.type }}
+
+                    <dt>Service Implementations</dt>
+                    <dd>
+                        {{ range $controllerServices }}
+                        {{ $serviceImplementation := .Params.type }}
+                        {{ range .Params.providedApiImplementations }}
+                        {{ if eq .type $serviceInterface }}
+                        <div><a href="/components/{{ $serviceImplementation 
}}/">{{ $serviceImplementation }}</a></div>
+                        {{ end }}
+                        {{ end }}
+                        {{ end }}
+                    </dd>
+
+                    {{ end }}
+                    <dt>Expression Language Scope</dt>
+                    <dd>{{ .expressionLanguageScopeDescription }}</dd>
+                    <dt>Sensitive</dt>
+                    <dd>{{ .sensitive }}</dd>
+                    <dt>Required</dt>
+                    <dd>{{ .required }}</dd>
+                    {{ if .dependencies }}
+                    <dt>Dependencies</dt>
+                    <dd>
+                        <ul>
+                            {{ range .dependencies }}
+                            <li>
+                                <span>{{ .propertyDisplayName }}</span>
+                                <span class="uk-text-light">is set to any
+                                {{ if .dependentValues }}
+                                  of
+                                {{ else }}
+                                  value specified
+                                {{ end }}
+                                </span>
+                                {{ if .dependentValues }}
+                                [{{- range $index, $dependentValue := 
.dependentValues -}}
+                                {{- if $index }}, {{ end }}{{ $dependentValue 
-}}
+                                {{ end }}]
+                                {{ end }}
+                            </li>
+                            {{ end }}
+                        </ul>
+                    </dd>
+                    {{ end }}
+                </dl>
+            </div>
+        </li>
+        {{ end }}
+    </ul>
+</div>
+
+{{ if .Params.dynamicProperties }}
+<div class="uk-margin uk-flex">
+    <div class="component-section-header uk-width-3-4">Dynamic Properties</div>
+    <div class="uk-width-1-4 uk-text-right">
+        <button uk-icon="icon: expand" uk-tooltip="Expand Properties" 
id="expand-dynamic-properties" class="uk-button uk-button-link 
uk-button-small"></button>
+        <button uk-icon="icon: shrink" uk-tooltip="Collapse Properties" 
id="shrink-dynamic-properties" class="uk-button uk-button-link 
uk-button-small"></button>
+    </div>
+    <script type="text/javascript">
+        document.addEventListener('uikit:init', () => {
+            var expand = document.getElementById('expand-dynamic-properties');
+            expand.addEventListener('click', () => {
+                var descriptors = 
document.getElementsByClassName('dynamic-property-content');
+                for (var i = 0; i < descriptors.length; i++) {
+                    var descriptor = descriptors[i];
+                    descriptor.hidden = false;
+                }
+            });
+
+            var shrink = document.getElementById('shrink-dynamic-properties');
+            shrink.addEventListener('click', () => {
+                var descriptors = 
document.getElementsByClassName('dynamic-property-content');
+                for (var i = 0; i < descriptors.length; i++) {
+                    var descriptor = descriptors[i];
+                    descriptor.hidden = true;
+                }
+            });
+        });
+    </script>
+</div>
+<div>
+    <ul uk-accordion="multiple: true" id="dynamic-properties">
+        {{ range .Params.dynamicProperties }}
+        <li class="property-descriptor">
+            <a class="uk-accordion-title" href>
+                <span>{{ .name }}</span>
+                <div class="uk-width-2-3 uk-align-right uk-margin-remove 
uk-text-truncate uk-text-lighter">{{ .description }}</div>
+            </a>
+            <div class="uk-accordion-content uk-padding-small 
dynamic-property-content">
+                <dl class="uk-description-list">
+                    <dt>Name</dt>
+                    <dd>{{ .name }}</dd>
+                    <dt>Description</dt>
+                    <dd>{{ .description }}</dd>
+                    <dt>Value</dt>
+                    <dd>{{ .value }}</dd>
+                    <dt>Expression Language Scope</dt>
+                    <dd>{{ .expressionLanguageScope }}</dd>
+                </dl>
+            </div>
+        </li>
+        {{ end }}
+    </ul>
+</div>
+{{ end }}
+
+{{ if .Params.stateful }}
+<div class="component-section-header uk-margin">State Management</div>
+<div>
+    <table class="uk-table uk-table-small uk-table-divider 
uk-box-shadow-small">
+        <thead>
+        <tr>
+            <th class="uk-width-1-4">Scopes</th>
+            <th class="uk-width-3-4">Description</th>
+        </tr>
+        </thead>
+        <tbody>
+        <tr>
+            <td>
+                {{- range $index, $scope := .Params.stateful.scopes -}}
+                {{- if $index }}, {{ end }}{{ $scope }}
+                {{- end -}}
+            </td>
+            <td class="uk-text-lighter">{{ .Params.stateful.description }}</td>
+        </tr>
+        </tbody>
+    </table>
+</div>
+{{ end }}
+
+{{ if .Params.systemResourceConsiderations }}
+<div class="component-section-header uk-margin">System Resource 
Considerations</div>
+<div>
+    <table class="uk-table uk-table-small uk-table-divider 
uk-box-shadow-small">
+        <thead>
+        <tr>
+            <th class="uk-width-1-4">Resource</th>
+            <th class="uk-width-3-4">Description</th>
+        </tr>
+        </thead>
+        <tbody>
+        {{ range .Params.systemResourceConsiderations }}
+        <tr>
+            <td>{{ .resource }}</td>
+            <td class="uk-text-lighter">{{ .description }}</td>
+        </tr>
+        {{ end }}
+        </tbody>
+    </table>
+</div>
+{{ end }}
+
+{{ if .Params.explicitRestrictions }}
+<div class="component-section-header uk-margin">Restrictions</div>
+<div>
+    <table class="uk-table uk-table-small uk-table-divider 
uk-box-shadow-small">
+        <thead>
+        <tr>
+            <th class="uk-width-1-4">Required Permission</th>
+            <th class="uk-width-3-4">Explanation</th>
+        </tr>
+        </thead>
+        <tbody>
+        {{ range .Params.explicitRestrictions }}
+        <tr>
+            <td>{{ .requiredPermission }}</td>
+            <td class="uk-text-lighter">{{ .explanation }}</td>
+        </tr>
+        {{ end }}
+        </tbody>
+    </table>
+</div>
+{{ end }}
+
+{{ if .Params.supportedRelationships }}
+<div class="component-section-header uk-margin">Relationships</div>
+<div>
+    <table class="uk-table uk-table-small uk-table-divider 
uk-box-shadow-small">
+        <thead>
+        <tr>
+            <th class="uk-width-1-4">Name</th>
+            <th class="uk-width-3-4">Description</th>
+        </tr>
+        </thead>
+        <tbody>
+        {{ range .Params.supportedRelationships }}
+        <tr>
+            <td>{{ .name }}</td>
+            <td class="uk-text-lighter">{{ .description }}</td>
+        </tr>
+        {{ end }}
+        </tbody>
+    </table>
+</div>
+{{ end }}
+
+{{ if .Params.readsAttributes }}
+<div class="component-section-header uk-margin">Reads Attributes</div>
+<div>
+    <table class="uk-table uk-table-small uk-table-divider 
uk-box-shadow-small">
+        <thead>
+        <tr>
+            <th class="uk-width-1-4">Name</th>
+            <th class="uk-width-3-4">Description</th>
+        </tr>
+        </thead>
+        <tbody>
+        {{ range .Params.readsAttributes }}
+        <tr>
+            <td>{{ .name }}</td>
+            <td class="uk-text-lighter">{{ .description }}</td>
+        </tr>
+        {{ end }}
+        </tbody>
+    </table>
+</div>
+{{ end }}
+
+{{ if .Params.writesAttributes }}
+<div class="component-section-header uk-margin">Writes Attributes</div>
+<div>
+    <table class="uk-table uk-table-small uk-table-divider 
uk-box-shadow-small">
+        <thead>
+        <tr>
+            <th class="uk-width-1-4">Name</th>
+            <th class="uk-width-3-4">Description</th>
+        </tr>
+        </thead>
+        <tbody>
+        {{ range .Params.writesAttributes }}
+        <tr>
+            <td>{{ .name }}</td>
+            <td class="uk-text-lighter">{{ .description }}</td>
+        </tr>
+        {{ end }}
+        </tbody>
+    </table>
+</div>
+{{ end }}
+
+{{ if .Params.useCases }}
+<div class="uk-margin">
+    <div class="component-section-header">Use Cases</div>
+</div>
+<div>
+    <ul uk-accordion="multiple: true" id="use-cases">
+        {{ range .Params.useCases }}
+        <li class="description">
+            <a class="uk-accordion-title" href>
+                <div class="uk-margin-remove uk-text-truncate 
uk-text-light">{{ .description }}</div>
+            </a>
+            <div class="uk-accordion-content uk-padding-small">
+                <dl class="uk-description-list">
+                    <dt>Description</dt>
+                    <dd>{{ .description }}</dd>
+                    {{ if .notes }}
+                    <dt>Notes</dt>
+                    <dd>{{ .notes }}</dd>
+                    {{ end }}
+                    {{ if .keywords }}
+                    <dt>Keywords</dt>
+                    <dd>
+                        {{- range $index, $keyword := .keywords -}}
+                        {{- if $index }}, {{ end }}{{ $keyword }}
+                        {{- end -}}
+                    </dd>
+                    {{ end }}
+                    <dt>Configuration</dt>
+                    <dd><pre class="use-case-configuration">{{ .configuration 
}}</pre></dd>
+                </dl>
+            </div>
+        </li>
+        {{ end }}
+    </ul>
+</div>
+{{ end }}
+
+{{ if .Params.multiProcessorUseCases }}
+<div class="uk-margin">
+    <div class="component-section-header">Use Cases Involving Other 
Components</div>
+</div>
+<div>
+    <ul uk-accordion="multiple: true" id="multi-processor-use-cases">
+        {{ range .Params.multiProcessorUseCases }}
+        <li class="description">
+            <a class="uk-accordion-title" href>
+                <div class="uk-margin-remove uk-text-truncate 
uk-text-light">{{ .description }}</div>
+            </a>
+            <div class="uk-accordion-content uk-padding-small">
+                <dl class="uk-description-list">
+                    <dt>Description</dt>
+                    <dd>{{ .description }}</dd>
+                    {{ if .notes }}
+                    <dt>Notes</dt>
+                    <dd>{{ .notes }}</dd>
+                    {{ end }}
+                    {{ if .keywords }}
+                    <dt>Keywords</dt>
+                    <dd>
+                        {{- range $index, $keyword := .keywords -}}
+                        {{- if $index }}, {{ end }}{{ $keyword }}
+                        {{- end -}}
+                    </dd>
+                    {{ end }}
+                    <dt>Processor Configurations</dt>
+                    <dd>
+                        {{ range .configurations }}
+                        <div class="uk-margin-top">{{ .processorClassName 
}}</div>
+                        <pre class="use-case-configuration">{{ .configuration 
}}</pre>
+                        {{ end }}
+                    </dd>
+                </dl>
+            </div>
+        </li>
+        {{ end }}
+    </ul>
+</div>
+
+{{ end }}
+
+{{ if .Params.seeAlso }}
+<div class="component-section-header uk-margin">See Also</div>
+<ul>
+    {{ range .Params.seeAlso }}
+    <li>
+        <a href="/components/{{ . }}/">{{ . }}</a>
+    </li>
+    {{ end }}
+</ul>
+{{ end }}
\ No newline at end of file
diff --git a/themes/nifi/layouts/section/components.html 
b/themes/nifi/layouts/section/components.html
new file mode 100644
index 00000000..4e355ce4
--- /dev/null
+++ b/themes/nifi/layouts/section/components.html
@@ -0,0 +1,141 @@
+{{ define "main" }}
+  {{ $pageTitle := .Title }}
+  <div uk-grid>
+
+    <div class="uk-width-1-4@m">
+      <div class="uk-padding-small uk-panel-scrollable" 
uk-height-viewport="offset-bottom: 150px">
+        <ul uk-accordion="collapsible: false">
+          <li>
+            <a class="uk-accordion-title" href>General</a>
+            <div class="uk-accordion-content">
+              <ul class="uk-list uk-list-collapse uk-text-light 
uk-text-truncate component-items">
+                <li><a href="{{ .Site.Params.staticDocsPath }}/overview.html" 
target="_blank">Overview</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/getting-started.html" target="_blank">Getting Started</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/user-guide.html" target="_blank">User Guide</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/expression-language-guide.html" target="_blank">Expression Language 
Guide</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/record-path-guide.html" target="_blank">RecordPath Guide</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/administration-guide.html" target="_blank">Admin Guide</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/toolkit-guide.html" target="_blank">Toolkit Guide</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/walkthroughs.html" target="_blank">Walkthroughs</a></li>
+              </ul>
+            </div>
+          </li>
+        </ul>
+
+        <ul uk-accordion="collapsible: false">
+          <li>
+            <a class="uk-accordion-title" href>Developer</a>
+            <div class="uk-accordion-content">
+              <ul class="uk-list uk-list-collapse uk-text-light 
uk-text-truncate component-items">
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/developer-guide.html">Developer Guide</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/python-developer-guide.html">Python Developer Guide</a></li>
+                <li><a href="{{ .Site.Params.staticDocsPath 
}}/nifi-in-depth.html">Apache NiFi In Depth</a></li>
+              </ul>
+            </div>
+          </li>
+        </ul>
+
+        <ul uk-accordion="collapsible: false">
+          <li>
+            <a class="uk-accordion-title" href>Processors</a>
+            <div class="uk-accordion-content">
+              {{ $processors := where .Site.Pages "Params.componentType" 
"processors" }}
+              <ul class="uk-list uk-list-collapse uk-text-light 
uk-text-truncate component-items">
+                {{ range $processors }}
+                <li {{ if eq .Title $pageTitle }}class="uk-text-bold" 
id="component-selected"{{ end }}>
+                  <a href="{{ .RelPermalink }}">{{ .Title }}</a>
+                </li>
+                {{ end }}
+              </ul>
+            </div>
+          </li>
+        </ul>
+
+        <ul uk-accordion="collapsible: false">
+          <li>
+            <a class="uk-accordion-title" href>Controller Services</a>
+            <div class="uk-accordion-content">
+              {{ $controllerServices := where .Site.Pages 
"Params.componentType" "controller-services" }}
+              <ul class="uk-list uk-list-collapse uk-text-light 
uk-text-truncate component-items">
+                {{ range $controllerServices }}
+                <li {{ if eq .Title $pageTitle }}class="uk-text-bold" 
id="component-selected"{{ end }}>
+                  <a href="{{ .RelPermalink }}">{{ .Title }}</a>
+                </li>
+                {{ end }}
+              </ul>
+            </div>
+          </li>
+        </ul>
+
+        <ul uk-accordion="collapsible: false">
+          <li>
+            <a class="uk-accordion-title" href>Reporting Tasks</a>
+            <div class="uk-accordion-content">
+              {{ $reportingTasks := where .Site.Pages "Params.componentType" 
"reporting-tasks" }}
+              <ul class="uk-list uk-list-collapse uk-text-light 
uk-text-truncate component-items">
+                {{ range $reportingTasks }}
+                <li {{ if eq .Title $pageTitle }}class="uk-text-bold" 
id="component-selected"{{ end }}>
+                  <a href="{{ .RelPermalink }}">{{ .Title }}</a>
+                </li>
+                {{ end }}
+              </ul>
+            </div>
+          </li>
+        </ul>
+
+        <ul uk-accordion="collapsible: false">
+          <li>
+            <a class="uk-accordion-title" href>Parameter Providers</a>
+            <div class="uk-accordion-content">
+              {{ $parameterProviders := where .Site.Pages 
"Params.componentType" "parameter-providers" }}
+              <ul class="uk-list uk-list-collapse uk-text-light 
uk-text-truncate component-items">
+                {{ range $parameterProviders }}
+                <li {{ if eq .Title $pageTitle }}class="uk-text-bold" 
id="component-selected"{{ end }}>
+                  <a href="{{ .RelPermalink }}">{{ .Title }}</a>
+                </li>
+                {{ end }}
+              </ul>
+            </div>
+          </li>
+        </ul>
+
+        <ul uk-accordion="collapsible: false">
+          <li>
+            <a class="uk-accordion-title" href>Flow Analysis Rules</a>
+            <div class="uk-accordion-content">
+              {{ $flowAnalysisRules := where .Site.Pages 
"Params.componentType" "flow-analysis-rules" }}
+              <ul class="uk-list uk-list-collapse uk-text-light 
uk-text-truncate component-items">
+                {{ range $flowAnalysisRules }}
+                <li {{ if eq .Title $pageTitle }}class="uk-text-bold" 
id="component-selected"{{ end }}>
+                  <a href="{{ .RelPermalink }}">{{ .Title }}</a>
+                </li>
+                {{ end }}
+              </ul>
+            </div>
+          </li>
+        </ul>
+      </div>
+
+      <script type="text/javascript">
+        var componentSelected = document.getElementById('component-selected');
+        componentSelected.scrollIntoView();
+      </script>
+    </div>
+
+    <div id="component-panel" class="uk-width-3-4@m">
+      <div class="uk-padding-small uk-panel-scrollable" 
uk-height-viewport="offset-bottom: 150px">
+        {{ if .Params.artifact }}
+          {{ partial "component.html" . }}
+        {{ else }}
+        <h3>Overview</h3>
+        <p>
+          Apache NiFi is a dataflow system based on the concepts of flow-based 
programming. It supports powerful and scalable directed graphs of data routing, 
transformation, and system mediation
+          logic. NiFi has a web-based user interface for design, control, 
feedback, and monitoring of dataflows. It is highly configurable along several 
dimensions of quality of service, such as
+          loss-tolerant versus guaranteed delivery, low latency versus high 
throughput, and priority-based queuing. NiFi provides fine-grained data 
provenance for all data received, forked, joined
+          cloned, modified, sent, and ultimately dropped upon reaching its 
configured end-state.
+        </p>
+        {{ end }}
+      </div>
+    </div>
+  </div>
+{{ end }}
diff --git a/themes/nifi/static/css/main.css b/themes/nifi/static/css/main.css
index 386f5a11..e2262c19 100644
--- a/themes/nifi/static/css/main.css
+++ b/themes/nifi/static/css/main.css
@@ -10,19 +10,6 @@ footer {
   padding: 60px 0px 40px 0px;
 }
 
-table tr td,
-table tr th {
-  text-align: left;
-  padding: 12px 24px;
-}
-
-table tr td:first-child,
-table tr th:first-child {
-  padding-left: 0;
-}
-
-
-
 a {
   color: #004849;
 }
@@ -355,4 +342,47 @@ footer h3 {
 
 .uk-card img {
   width: 40%;
-}
\ No newline at end of file
+}
+
+.component-items li {
+  margin-left: 10px;
+}
+
+@media (width > 960px) {
+  #component-panel {
+    padding-left: 0px;
+  }
+}
+
+.component-section-header {
+  color: #333;
+  font-size: .875rem;
+  font-weight: 400;
+  text-transform: uppercase;
+}
+
+.uk-accordion-title {
+  font-size: 16px;
+}
+
+.uk-accordion > .property-descriptor {
+  margin: 0px;
+  padding: 10px;
+  border: 1px solid #eee;
+}
+
+.property-required {
+  font-weight: bold;
+}
+
+.uk-accordion > .description {
+  margin: 0px;
+  padding: 10px;
+  border: 1px solid #eee;
+}
+
+.use-case-configuration {
+  border: none;
+  white-space: pre-wrap;
+  margin: 0px;
+}

Reply via email to