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;
+}