NIFI-13710: Rebuilding Update Attribute Custom UI. (#9561)
* NIFI-13710: Rebuilding Update Attribute Custom UI. * NIFI-13710: Removing unnecessary codemirror import. * NIFI-13710: Addressing review feedback. - Adding editor hint so users know how to use EL. - Fixing issue with rule payload when managing conditions and actions. - Accounting for user permissions when setting the editable flag. - Preventing editors from displaying offscreen. - Showing snackbars following successfully saving. - Adding validators to the condition and actions table. * NIFI-13710: Addressing review feedback. - Ensuring that the revision is saved after all actions. - Ensuring that the evaluation criteria is reloaded when rules are added/removed. - Updating additional details to reflect the new UI. * NIFI-13710: Fixing text overflow issues. * NIFI-13710: Applying text-base to the body. * NIFI-13710: Addressing review feeback. - Fixing imports. - Disabling menu in tables when not editable. - Fixing background color in dark mode. * NIFI-13710: Requiring rules to be saved or discard once edited. * NIFI-13710: Fixing import style which could result in circular imports. - Fixing bug when evaluating open/closed rule when deciding if reordering should be allowed. * NIFI-13710: Unpacking UI in prepare-package phase.
|
@ -10,6 +10,7 @@ nb-configuration.xml
|
|||
|
||||
# Intellij
|
||||
.idea/
|
||||
.run/
|
||||
*.iml
|
||||
*.iws
|
||||
*.ipr
|
||||
|
|
|
@ -440,163 +440,6 @@ For details see http://qtip2.com
|
|||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
This product bundles 'json2.js' which is available in the 'public domain'.
|
||||
For details see https://github.com/douglascrockford/JSON-js
|
||||
|
||||
This product bundles 'reset.css' which is available in the 'public domain'.
|
||||
For details see http://meyerweb.com/eric/tools/css/reset/
|
||||
|
||||
This product bundles 'Angular' which is available under an MIT license.
|
||||
|
||||
Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'Angular Material' which is available under an MIT license.
|
||||
|
||||
Copyright (c) 2014-2016 Google, Inc. http://angularjs.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'Angular Aria' which is available under an MIT license.
|
||||
|
||||
Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
|
||||
This product bundles 'Angular Animate' which is available under an MIT license.
|
||||
|
||||
Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
|
||||
This product bundles 'Angular Messages' which is available under an MIT license.
|
||||
|
||||
Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
|
||||
This product bundles 'AngularUI Codemirror' which is available under an MIT license.
|
||||
|
||||
Copyright (c) 2012 the AngularUI Team, http://angular-ui.github.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'AngularUI Router' which is available under an MIT license.
|
||||
|
||||
Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'Fontello' which is available under an MIT license.
|
||||
|
||||
Copyright (C) 2011 by Vitaly Puzrin
|
||||
|
@ -619,29 +462,6 @@ This product bundles 'Fontello' which is available under an MIT license.
|
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles HexViewJS available under an MIT License
|
||||
|
||||
Copyright (c) 2010 Nick McVeity <nmcveity@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
The binary distribution of this product includes modules from Groovy which bundles ANTLR
|
||||
SOFTWARE RIGHTS
|
||||
|
||||
|
@ -2872,4 +2692,7 @@ For the binary distribution of nifi-jolt-transform-json-ui see its 3rdpartylicen
|
|||
for additional license and notice information.
|
||||
|
||||
For the binary distribution of nifi-standard-content-viewer see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
||||
|
||||
For the binary distribution of nifi-update-attribute-ui see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
|
@ -2581,4 +2581,7 @@ For the binary distribution of nifi-jolt-transform-json-ui see its 3rdpartylicen
|
|||
for additional license and notice information.
|
||||
|
||||
For the binary distribution of nifi-standard-content-viewer see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
||||
|
||||
For the binary distribution of nifi-update-attribute-ui see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
|
@ -35,7 +35,7 @@
|
|||
<url-pattern>/api/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- login filter -->
|
||||
<!-- fragment filter -->
|
||||
<filter>
|
||||
<filter-name>FragmentFilter</filter-name>
|
||||
<filter-class>org.apache.nifi.web.servlet.filter.QueryStringToFragmentFilter</filter-class>
|
||||
|
|
|
@ -206,47 +206,7 @@ APACHE NIFI SUBCOMPONENTS:
|
|||
The Apache NiFi project contains subcomponents with separate copyright
|
||||
notices and license terms. Your use of the source code for the these
|
||||
subcomponents is subject to the terms and conditions of the following
|
||||
licenses.
|
||||
licenses.
|
||||
|
||||
This product bundles 'CodeMirror' which is available under an MIT style license.
|
||||
|
||||
Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'JQuery' which is available under and MIT style license.
|
||||
(c) 2005, 2014 jQuery Foundation, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
For the binary distribution of nifi-standard-content-viewer see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
|
@ -4,6 +4,9 @@ Copyright 2014-2024 The Apache Software Foundation
|
|||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
||||
For the binary distribution of nifi-standard-content-viewer see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
||||
|
||||
===========================================
|
||||
Apache Software License v2
|
||||
===========================================
|
||||
|
|
|
@ -79,20 +79,18 @@ The preceding examples illustrate how to make changes to every FlowFile that goe
|
|||
UpdateAttribute processor may also be used to make conditional changes.
|
||||
|
||||
To change attributes based on some condition, use the Advanced User Interface (UI) in the processor by clicking the *
|
||||
*Advanced** button in the lower right corner.
|
||||
*Advanced** menu item in the Canvas context menu.
|
||||
|
||||
Clicking the Advanced button displays the Advanced UI. In the Advanced UI, Conditions and their associated Actions are
|
||||
Clicking the Advanced menu item displays the Advanced UI. In the Advanced UI, Conditions and their associated Actions are
|
||||
entered as "Rules". Each rule basically says, "If these conditions are met, then do this action." One or more conditions
|
||||
may be used in a given rule, and they all must be met in order for the designated action(s) to be taken.
|
||||
|
||||
**Adding Rules**
|
||||
|
||||
To add rules and their associated conditions and actions, click on the buttons with the plus symbol located to the right
|
||||
of the "Rules", "Conditions", and "Actions" labels.
|
||||
|
||||
Upon adding a rule with its condition(s) and action(s), it is important to save it by clicking the **Save** button in
|
||||
the lower right corner. If you do not do so and attempt to add or navigate to another rule, an error message will
|
||||
appear, asking you if you want to save your changes.
|
||||
To add the first rule, click on the "Create Rule" button in center of the screen. The Edit Rule form will display where
|
||||
the name, comments, conditions, and actions for the rule can be entered. Once the rule is defined, click the **Add**
|
||||
button. Additional rules can be added by clicking the button with the plus symbol located to the top right of the
|
||||
Rule listing.
|
||||
|
||||
**Example Rules**
|
||||
|
||||
|
@ -116,9 +114,9 @@ Taken together, this rule says:
|
|||
**Adding another Rule**
|
||||
|
||||
Continuing with this example, we can add another rule to check for files that are larger than one gigabyte. When we add
|
||||
this second rule, we can use the previous rule as a template, so to speak, by taking advantage of the "Copy from
|
||||
existing rule" option in the New Rule window. Simply start typing the name of an existing rule, and it will show up in a
|
||||
dropdown menu below the entry field.
|
||||
this second rule, we can use the previous rule as a template, so to speak, by taking advantage of the "Clone Rule" option
|
||||
in the menu for the Rule that you wan to clone. This will open with new Rule form with the exisitng Rules criteria
|
||||
pre-populated.
|
||||
|
||||
In this example, the CheckForGiantFiles rule has these conditions:
|
||||
|
||||
|
@ -159,8 +157,8 @@ The delete attributes function does not produce a Provenance Event if the **alte
|
|||
**FlowFile Policy**
|
||||
|
||||
Another setting in the Advanced UI is the FlowFile Policy. It is located in the upper-left corner of the UI, and it
|
||||
defines the processor's behavior when multiple rules match. It may be changed using the dropdown menu. By default, the
|
||||
FlowFile Policy is set to "use clone".
|
||||
defines the processor's behavior when multiple rules match. It may be changed using the slide toggle. By default, the
|
||||
FlowFile Policy is set to use a clone of the original FlowFile for each matching rule.
|
||||
|
||||
If the FlowFile policy is set to "use clone", and multiple rules match, then a copy of the incoming FlowFile is created,
|
||||
such that the number of outgoing FlowFiles is equal to the number of rules that match. In other words, if two rules (A
|
||||
|
@ -172,7 +170,8 @@ If the FlowFile policy is set to "use original", then all matching rules are app
|
|||
there is only one outgoing FlowFile with all the attribute changes applied. In this case, the order of the rules matters
|
||||
and the action for each rule that matches will be applied in that order. If multiple rules contain actions that update
|
||||
the same attribute, the action from the last matching rule will take precedence. Notably, you can drag and drop the
|
||||
rules into a certain order within the Rules list.
|
||||
rules into a certain order within the Rules list once the FlowFile Policy is set to "use original" and the user has
|
||||
toggled the "Reorder rules" control. While in this reordering mode, other Rule modifications are not allowed.
|
||||
|
||||
**Filtering Rules**
|
||||
|
||||
|
@ -182,7 +181,7 @@ in the name, condition, or action.
|
|||
|
||||
**Closing the Advanced UI**
|
||||
|
||||
Once all changes have been saved in the Advanced UI, the UI can be closed using the X in the top right corner.
|
||||
Once all changes have been saved in the Advanced UI, you can navigate back to the Canvas using the navigation at the top.
|
||||
|
||||
**Stateful Usage**
|
||||
|
||||
|
|
|
@ -23,128 +23,45 @@
|
|||
<artifactId>nifi-update-attribute-ui</artifactId>
|
||||
<packaging>war</packaging>
|
||||
<properties>
|
||||
<frontend.dependency.configs>${basedir}/src/main/frontend</frontend.dependency.configs>
|
||||
<frontend.working.dir>${project.build.directory}/frontend-working-directory</frontend.working.dir>
|
||||
<frontend.assets>${project.build.directory}/${project.build.finalName}/assets</frontend.assets>
|
||||
<update-attribute.ui.working.dir>${project.build.directory}/update-attribute-ui-working-directory</update-attribute.ui.working.dir>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<!--
|
||||
Unpack the built update attribute front end application
|
||||
-->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-client-side-deps</id>
|
||||
<id>unpack-update-attribute-ui</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
<goal>unpack-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${frontend.assets}</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>${frontend.working.dir}/node_modules</directory>
|
||||
<filtering>false</filtering>
|
||||
<includes>
|
||||
<!-- font awesome -->
|
||||
<include>font-awesome/css/**/*</include>
|
||||
<include>font-awesome/fonts/**/*</include>
|
||||
<include>font-awesome/README.md</include>
|
||||
<!-- jquery -->
|
||||
<include>jquery/dist/jquery.min*</include>
|
||||
<include>jquery/LICENSE.txt</include>
|
||||
<!-- jquery ui -->
|
||||
<include>jquery-ui-dist/jquery-ui.min.js</include>
|
||||
<include>jquery-ui-dist/jquery-ui.min.css</include>
|
||||
<include>jquery-ui-dist/images/**/*</include>
|
||||
<include>jquery-ui-dist/LICENSE.txt</include>
|
||||
<!-- reset.css -->
|
||||
<include>reset.css/reset.css</include>
|
||||
<include>reset.css/README.md</include>
|
||||
<!-- qtip2 -->
|
||||
<include>qtip2/dist/*.css</include>
|
||||
<include>qtip2/dist/jquery.qtip.min*</include>
|
||||
<include>qtip2/LICENSE</include>
|
||||
<!-- JSON2 -->
|
||||
<include>JSON2/json2.js</include>
|
||||
<!-- slickgrid -->
|
||||
<include>slickgrid/slick.core.js</include>
|
||||
<include>slickgrid/slick.dataview.js</include>
|
||||
<include>slickgrid/slick.editors.js</include>
|
||||
<include>slickgrid/slick.formatters.js</include>
|
||||
<include>slickgrid/slick.grid.js</include>
|
||||
<include>slickgrid/plugins/slick.autotooltips.js</include>
|
||||
<include>slickgrid/plugins/slick.cellrangedecorator.js</include>
|
||||
<include>slickgrid/plugins/slick.cellrangeselector.js</include>
|
||||
<include>slickgrid/plugins/slick.cellselectionmodel.js</include>
|
||||
<include>slickgrid/plugins/slick.rowselectionmodel.js</include>
|
||||
<include>slickgrid/lib/jquery.event.drag-2.3.0.js</include>
|
||||
<include>slickgrid/slick.grid.css</include>
|
||||
<include>slickgrid/images/collapse.gif</include>
|
||||
<include>slickgrid/images/expand.gif</include>
|
||||
<include>slickgrid/MIT-LICENSE.txt</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-package-json</id>
|
||||
<phase>generate-sources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${frontend.working.dir}</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>${frontend.dependency.configs}</directory>
|
||||
<filtering>false</filtering>
|
||||
<includes>
|
||||
<include>package.json</include>
|
||||
<include>package-lock.json</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<includeGroupIds>org.apache.nifi</includeGroupIds>
|
||||
<includeArtifactIds>nifi-frontend</includeArtifactIds>
|
||||
<excludeTransitive>true</excludeTransitive>
|
||||
<silent>false</silent>
|
||||
<outputDirectory>${update-attribute.ui.working.dir}</outputDirectory>
|
||||
<includes>update-attribute/**/*</includes>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!--
|
||||
Include the Update Attribute UI and exclude the JAR dependency
|
||||
-->
|
||||
<plugin>
|
||||
<groupId>com.github.eirslett</groupId>
|
||||
<artifactId>frontend-maven-plugin</artifactId>
|
||||
<version>${frontend.mvn.plugin.version}</version>
|
||||
<configuration>
|
||||
<installDirectory>${frontend.working.dir}</installDirectory>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>install-node-and-npm</id>
|
||||
<goals>
|
||||
<goal>install-node-and-npm</goal>
|
||||
</goals>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<nodeVersion>${node.version}</nodeVersion>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<arguments>run ci</arguments>
|
||||
<workingDirectory>${frontend.working.dir}</workingDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<configuration>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>${update-attribute.ui.working.dir}/update-attribute</directory>
|
||||
<includes>**/*</includes>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/webapp/META-INF</directory>
|
||||
<targetPath>META-INF</targetPath>
|
||||
|
@ -154,18 +71,7 @@
|
|||
<filtering>true</filtering>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.rat</groupId>
|
||||
<artifactId>apache-rat-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes combine.children="append">
|
||||
<exclude>src/main/frontend/package.json</exclude>
|
||||
<exclude>src/main/frontend/package-lock.json</exclude>
|
||||
<exclude>src/main/webapp/js/codemirror/</exclude>
|
||||
<exclude>src/main/webapp/fonts/**/*</exclude>
|
||||
</excludes>
|
||||
<packagingExcludes>WEB-INF/lib/nifi-frontend*.jar</packagingExcludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
@ -177,7 +83,6 @@
|
|||
<version>2.1.0-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-framework-api</artifactId>
|
||||
|
@ -233,5 +138,15 @@
|
|||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-web-servlet-shared</artifactId>
|
||||
<version>2.1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-frontend</artifactId>
|
||||
<version>2.1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
|
@ -1,96 +0,0 @@
|
|||
{
|
||||
"name": "apache-nifi-update-attribute-ui",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "apache-nifi-update-attribute-ui",
|
||||
"dependencies": {
|
||||
"font-awesome": "4.7.0",
|
||||
"jquery": "3.6.4",
|
||||
"jquery-ui-dist": "1.13.2",
|
||||
"JSON2": "0.1.0",
|
||||
"qtip2": "3.0.3",
|
||||
"reset.css": "2.0.2",
|
||||
"slickgrid": "2.4.45"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.13.2",
|
||||
"npm": ">=8.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/ev-emitter": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-2.1.2.tgz",
|
||||
"integrity": "sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q=="
|
||||
},
|
||||
"node_modules/font-awesome": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
|
||||
"integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==",
|
||||
"engines": {
|
||||
"node": ">=0.10.3"
|
||||
}
|
||||
},
|
||||
"node_modules/imagesloaded": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/imagesloaded/-/imagesloaded-5.0.0.tgz",
|
||||
"integrity": "sha512-/0JGSubc1MTCoDKVmonLHgbifBWHdyLkun+R/151E1c5n79hiSxcd7cB7mPXFgojYu8xnRZv7GYxzKoxW8BetQ==",
|
||||
"dependencies": {
|
||||
"ev-emitter": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/jquery": {
|
||||
"version": "3.6.4",
|
||||
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz",
|
||||
"integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ=="
|
||||
},
|
||||
"node_modules/jquery-ui": {
|
||||
"version": "1.13.3",
|
||||
"resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.13.3.tgz",
|
||||
"integrity": "sha512-D2YJfswSJRh/B8M/zCowDpNFfwsDmtfnMPwjJTyvl+CBqzpYwQ+gFYIbUUlzijy/Qvoy30H1YhoSui4MNYpRwA==",
|
||||
"dependencies": {
|
||||
"jquery": ">=1.8.0 <4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/jquery-ui-dist": {
|
||||
"version": "1.13.2",
|
||||
"resolved": "https://registry.npmjs.org/jquery-ui-dist/-/jquery-ui-dist-1.13.2.tgz",
|
||||
"integrity": "sha512-oVDRd1NLtTbBwpRKAYdIRgpWVDzeBhfy7Gu0RmY6JEaZtmBq6kDn1pm5SgDiAotrnDS+RoTRXO6xvcNTxA9tOA==",
|
||||
"dependencies": {
|
||||
"jquery": ">=1.8.0 <4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/JSON2": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/JSON2/-/JSON2-0.1.0.tgz",
|
||||
"integrity": "sha512-MRguCg79vy8Kx15/CXzoO5pEPi0tQq7T70mL/t1Hv3G+hVfJVO2BZqX3sl2kbWW08GAmzQYSRfWRtQhmK/eaYA==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/qtip2": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/qtip2/-/qtip2-3.0.3.tgz",
|
||||
"integrity": "sha512-vfSEVYg1teA4g3RhT9fnBXzEQrkgyU5CrQE8j6WzZs5LBupG+Nq97mFq4BmDKcA6mGSMFiIqm70+ydvWW1KnGg==",
|
||||
"dependencies": {
|
||||
"imagesloaded": ">=3.0.0",
|
||||
"jquery": ">=1.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/reset.css": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/reset.css/-/reset.css-2.0.2.tgz",
|
||||
"integrity": "sha512-HG5RQLYcAxou3yw+Gnzwan1jJCbOcIBZjwoD/YLWuAd8kkuDI/ZqC0uRhY4ReKOOJaM1Y1kvwebHOwK4P8Sevg=="
|
||||
},
|
||||
"node_modules/slickgrid": {
|
||||
"version": "2.4.45",
|
||||
"resolved": "https://registry.npmjs.org/slickgrid/-/slickgrid-2.4.45.tgz",
|
||||
"integrity": "sha512-WvygGTaLU9LnMWZSxqW1agwq8IcDGeCZ289vP1E07eh3ffyLm5TGQsYHXvTwWCHtriZBw+L9RFK/h7TsIMcoLQ==",
|
||||
"dependencies": {
|
||||
"jquery": ">=1.8.0",
|
||||
"jquery-ui": ">=1.8.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
{
|
||||
"//-01": "Licensed to the Apache Software Foundation (ASF) under one or more",
|
||||
"//-02": "contributor license agreements. See the NOTICE file distributed with",
|
||||
"//-03": "this work for additional information regarding copyright ownership.",
|
||||
"//-04": "The ASF licenses this file to You under the Apache License, Version 2.0",
|
||||
"//-05": "(the \"License\"); you may not use this file except in compliance with",
|
||||
"//-06": "the License. You may obtain a copy of the License at",
|
||||
"//-07": "",
|
||||
"//-08": "http://www.apache.org/licenses/LICENSE-2.0",
|
||||
"//-09": "",
|
||||
"//-10": "Unless required by applicable law or agreed to in writing, software",
|
||||
"//-11": "distributed under the License is distributed on an \"AS IS\" BASIS,",
|
||||
"//-12": "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",
|
||||
"//-13": "See the License for the specific language governing permissions and",
|
||||
"//-14": "limitations under the License.",
|
||||
"name": "apache-nifi-update-attribute-ui",
|
||||
"description": "Apache NiFi 3rd party client side resources.",
|
||||
"scripts": {
|
||||
"ci": "npm ci --ignore-scripts"
|
||||
},
|
||||
"dependencies": {
|
||||
"font-awesome": "4.7.0",
|
||||
"jquery": "3.6.4",
|
||||
"jquery-ui-dist": "1.13.2",
|
||||
"reset.css": "2.0.2",
|
||||
"slickgrid": "2.4.45",
|
||||
"qtip2": "3.0.3",
|
||||
"JSON2": "0.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.13.2",
|
||||
"npm": ">=8.1.2"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/apache/nifi.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/apache/nifi/issues"
|
||||
},
|
||||
"homepage": "https://github.com/apache/nifi#readme"
|
||||
}
|
|
@ -157,12 +157,12 @@ public class RuleResource {
|
|||
}
|
||||
|
||||
// save the criteria
|
||||
saveCriteria(requestContext, criteria);
|
||||
final ComponentDetails componentDetails = saveCriteria(requestContext, criteria);
|
||||
|
||||
// create the response entity
|
||||
final EvaluationContextEntity responseEntity = new EvaluationContextEntity();
|
||||
responseEntity.setClientId(requestEntity.getClientId());
|
||||
responseEntity.setRevision(requestEntity.getRevision());
|
||||
responseEntity.setClientId(componentDetails.getRevision().getClientId());
|
||||
responseEntity.setRevision(componentDetails.getRevision().getVersion());
|
||||
responseEntity.setProcessorId(requestEntity.getProcessorId());
|
||||
responseEntity.setFlowFilePolicy(criteria.getFlowFilePolicy().name());
|
||||
responseEntity.setRuleOrder(criteria.getRuleOrder());
|
||||
|
@ -229,12 +229,12 @@ public class RuleResource {
|
|||
criteria.addRule(rule);
|
||||
|
||||
// save the criteria
|
||||
saveCriteria(requestContext, criteria);
|
||||
final ComponentDetails componentDetails = saveCriteria(requestContext, criteria);
|
||||
|
||||
// create the response entity
|
||||
final RuleEntity responseEntity = new RuleEntity();
|
||||
responseEntity.setClientId(requestEntity.getClientId());
|
||||
responseEntity.setRevision(requestEntity.getRevision());
|
||||
responseEntity.setClientId(componentDetails.getRevision().getClientId());
|
||||
responseEntity.setRevision(componentDetails.getRevision().getVersion());
|
||||
responseEntity.setProcessorId(requestEntity.getProcessorId());
|
||||
responseEntity.setRule(DtoFactory.createRuleDTO(rule));
|
||||
|
||||
|
@ -522,12 +522,12 @@ public class RuleResource {
|
|||
}
|
||||
|
||||
// save the criteria
|
||||
saveCriteria(requestContext, criteria);
|
||||
final ComponentDetails componentDetails = saveCriteria(requestContext, criteria);
|
||||
|
||||
// create the response entity
|
||||
final RuleEntity responseEntity = new RuleEntity();
|
||||
responseEntity.setClientId(requestEntity.getClientId());
|
||||
responseEntity.setRevision(requestEntity.getRevision());
|
||||
responseEntity.setClientId(componentDetails.getRevision().getClientId());
|
||||
responseEntity.setRevision(componentDetails.getRevision().getVersion());
|
||||
responseEntity.setProcessorId(requestEntity.getProcessorId());
|
||||
responseEntity.setRule(DtoFactory.createRuleDTO(rule));
|
||||
|
||||
|
@ -570,12 +570,12 @@ public class RuleResource {
|
|||
criteria.deleteRule(rule);
|
||||
|
||||
// save the criteria
|
||||
saveCriteria(requestContext, criteria);
|
||||
final ComponentDetails componentDetails = saveCriteria(requestContext, criteria);
|
||||
|
||||
// create the response entity
|
||||
final RulesEntity responseEntity = new RulesEntity();
|
||||
responseEntity.setClientId(clientId);
|
||||
responseEntity.setRevision(revision);
|
||||
responseEntity.setClientId(componentDetails.getRevision().getClientId());
|
||||
responseEntity.setRevision(componentDetails.getRevision().getVersion());
|
||||
responseEntity.setProcessorId(processorId);
|
||||
|
||||
// generate the response
|
||||
|
@ -615,7 +615,7 @@ public class RuleResource {
|
|||
return criteria;
|
||||
}
|
||||
|
||||
private void saveCriteria(final NiFiWebConfigurationRequestContext requestContext, final Criteria criteria) {
|
||||
private ComponentDetails saveCriteria(final NiFiWebConfigurationRequestContext requestContext, final Criteria criteria) {
|
||||
// serialize the criteria
|
||||
final String annotationData = CriteriaSerDe.serialize(criteria);
|
||||
|
||||
|
@ -624,7 +624,7 @@ public class RuleResource {
|
|||
|
||||
try {
|
||||
// save the annotation data
|
||||
configurationContext.updateComponent(requestContext, annotationData, null);
|
||||
return configurationContext.updateComponent(requestContext, annotationData, null);
|
||||
} catch (final InvalidRevisionException ire) {
|
||||
throw new WebApplicationException(ire, invalidRevision(ire.getMessage()));
|
||||
} catch (final IllegalArgumentException iae) {
|
||||
|
|
|
@ -206,7 +206,10 @@ APACHE NIFI SUBCOMPONENTS:
|
|||
The Apache NiFi project contains subcomponents with separate copyright
|
||||
notices and license terms. Your use of the source code for the these
|
||||
subcomponents is subject to the terms and conditions of the following
|
||||
licenses.
|
||||
licenses.
|
||||
|
||||
For the binary distribution of nifi-update-attribute-ui see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
||||
|
||||
The binary distribution of this product bundles 'Antlr 3' which is available
|
||||
under a "3-clause BSD" license. For details see http://www.antlr3.org/license.html
|
||||
|
@ -237,168 +240,3 @@ licenses.
|
|||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
This product bundles 'Fontello' which is available under an MIT license.
|
||||
|
||||
Copyright (C) 2011 by Vitaly Puzrin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'CodeMirror' which is available under an MIT style license.
|
||||
|
||||
Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'JQuery' which is available under and MIT style license.
|
||||
(c) 2005, 2014 jQuery Foundation, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'jQuery UI' which is available under an MIT style license.
|
||||
For details see http://jqueryui.com
|
||||
|
||||
Copyright 2014 jQuery Foundation and other contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
This product bundles 'JQuery Event Drag' which is available under an MIT style
|
||||
license.
|
||||
Copyright (c) 2008-2015 ThreeDubMedia
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
This product bundles 'json2.js' which is available in the 'public domain'.
|
||||
For details see https://github.com/douglascrockford/JSON-js
|
||||
|
||||
This product bundles 'reset.css' which is available in the 'public domain'.
|
||||
For details see http://meyerweb.com/eric/tools/css/reset/
|
||||
|
||||
This product bundles 'SlickGrid v2.4' which is available under an MIT style license.
|
||||
|
||||
Copyright (c) 2009-present Michael Leibman and Ben McIntyre, http://github.com/6pac/slickgrid
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
This product bundles 'qTip2' which is available under an MIT style license.
|
||||
For details see http://qtip2.com
|
||||
|
||||
Copyright (c) 2012 Craig Michael Thompson
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -4,6 +4,9 @@ Copyright 2014-2024 The Apache Software Foundation
|
|||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
||||
For the binary distribution of nifi-update-attribute-ui see its 3rdpartylicenses.txt
|
||||
for additional license and notice information.
|
||||
|
||||
******************
|
||||
Apache Software License v2
|
||||
******************
|
||||
|
|
|
@ -1,199 +0,0 @@
|
|||
<%--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
--%>
|
||||
<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<link rel="stylesheet" href="assets/jquery-ui-dist/jquery-ui.min.css" type="text/css" />
|
||||
<link rel="stylesheet" href="assets/slickgrid/slick.grid.css" type="text/css" />
|
||||
<link rel="stylesheet" href="css/slick-nifi-theme.css" type="text/css" />
|
||||
<link rel="stylesheet" href="js/jquery/modal/jquery.modal.css" type="text/css" />
|
||||
<link rel="stylesheet" href="js/jquery/combo/jquery.combo.css" type="text/css" />
|
||||
<link rel="stylesheet" href="assets/qtip2/dist/jquery.qtip.min.css" type="text/css" />
|
||||
<link rel="stylesheet" href="js/codemirror/lib/codemirror.css" type="text/css" />
|
||||
<link rel="stylesheet" href="js/codemirror/addon/hint/show-hint.css" type="text/css" />
|
||||
<link rel="stylesheet" href="js/jquery/nfeditor/jquery.nfeditor.css" type="text/css" />
|
||||
<link rel="stylesheet" href="js/jquery/nfeditor/languages/nfeditor.css" type="text/css" />
|
||||
<link rel="stylesheet" href="fonts/flowfont/flowfont.css" type="text/css" />
|
||||
<link rel="stylesheet" href="assets/font-awesome/css/font-awesome.min.css" type="text/css" />
|
||||
<link rel="stylesheet" href="assets/reset.css/reset.css" type="text/css" />
|
||||
<link rel="stylesheet" href="css/main.css" type="text/css" />
|
||||
<link rel="stylesheet" href="css/common-ui.css" type="text/css" />
|
||||
<script type="text/javascript" src="assets/jquery/dist/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.center.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.each.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.tab.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/modal/jquery.modal.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/combo/jquery.combo.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/jquery.ellipsis.js"></script>
|
||||
<script type="text/javascript" src="assets/jquery-ui-dist/jquery-ui.min.js"></script>
|
||||
<script type="text/javascript" src="assets/qtip2/dist/jquery.qtip.min.js"></script>
|
||||
<script type="text/javascript" src="assets/JSON2/json2.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/lib/jquery.event.drag-2.3.0.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/plugins/slick.cellrangedecorator.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/plugins/slick.cellrangeselector.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/plugins/slick.cellselectionmodel.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/plugins/slick.rowselectionmodel.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/slick.formatters.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/slick.editors.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/slick.dataview.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/slick.core.js"></script>
|
||||
<script type="text/javascript" src="assets/slickgrid/slick.grid.js"></script>
|
||||
<script type="text/javascript" src="js/codemirror/lib/codemirror-compressed.js"></script>
|
||||
<script type="text/javascript" src="js/nf/nf-namespace.js"></script>
|
||||
<script type="text/javascript" src="js/nf/nf-authorization-storage.js"></script>
|
||||
<script type="text/javascript" src="js/nf/nf-storage.js"></script>
|
||||
<script type="text/javascript" src="js/nf/nf-ajax-setup.js"></script>
|
||||
<script type="text/javascript" src="js/nf/nf-universal-capture.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/nfeditor/languages/nfel.js"></script>
|
||||
<script type="text/javascript" src="js/jquery/nfeditor/jquery.nfeditor.js"></script>
|
||||
<script type="text/javascript" src="js/application.js"></script>
|
||||
<title>Update Attribute</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="attribute-updater-processor-id" class="hidden"><%= request.getParameter("id") == null ? "" : org.apache.nifi.util.EscapeUtils.escapeHtml(request.getParameter("id")) %></div>
|
||||
<div id="attribute-updater-client-id" class="hidden"><%= request.getParameter("clientId") == null ? "" : org.apache.nifi.util.EscapeUtils.escapeHtml(request.getParameter("clientId")) %></div>
|
||||
<div id="attribute-updater-revision" class="hidden"><%= request.getParameter("revision") == null ? "" : org.apache.nifi.util.EscapeUtils.escapeHtml(request.getParameter("revision")) %></div>
|
||||
<div id="attribute-updater-editable" class="hidden"><%= request.getParameter("editable") == null ? "" : org.apache.nifi.util.EscapeUtils.escapeHtml(request.getParameter("editable")) %></div>
|
||||
<div id="attribute-updater-disconnected-node-acknowledged" class="hidden"><%= request.getParameter("disconnectedNodeAcknowledged") == null ? "false" : org.apache.nifi.util.EscapeUtils.escapeHtml(request.getParameter("disconnectedNodeAcknowledged")) %></div>
|
||||
<div id="update-attributes-content">
|
||||
<div id="rule-list-panel">
|
||||
<div id="flowfile-policy-container">
|
||||
<span id="selected-flowfile-policy" class="hidden"></span>
|
||||
<div id="flowfile-policy-label" class="large-label">FlowFile Policy</div>
|
||||
<div class="info fa fa-question-circle" title="Defines the behavior when multiple rules match. Use clone will ensure that each matching rule is executed with a copy of the original flowfile. Use original will execute all matching rules with the original flowfile in the order specified below."></div>
|
||||
<div id="flowfile-policy"></div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div id="rule-label-container">
|
||||
<div id="rules-label" class="large-label">Rules</div>
|
||||
<div class="info fa fa-question-circle" title="Click and drag to change the order that rules are evaluated."></div>
|
||||
<button id="new-rule" class="new-rule hidden fa fa-plus"></button>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div id="rule-list-container">
|
||||
<ul id="rule-list"></ul>
|
||||
</div>
|
||||
<div id="no-rules" class="unset">No rules found.</div>
|
||||
<div id="rule-filter-controls" class="hidden">
|
||||
<div id="rule-filter-container">
|
||||
<input type="text" placeholder="Filter" id="rule-filter"/>
|
||||
<div id="rule-filter-type"></div>
|
||||
</div>
|
||||
<div id="rule-filter-stats" class="filter-status">
|
||||
Displaying <span id="displayed-rules"></span> of <span id="total-rules"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="rule-details-panel">
|
||||
<div id="selected-rule-name-container" class="selected-rule-detail">
|
||||
<div class="large-label">Rule Name</div>
|
||||
<div id="selected-rule-id" class="hidden"></div>
|
||||
<div id="no-rule-selected-label" class="unset">No rule selected.</div>
|
||||
<input type="text" id="selected-rule-name" class="hidden"></input>
|
||||
</div>
|
||||
<div id="selected-rule-comments-container" class="selected-rule-detail">
|
||||
<div class="large-label">Rule Comments</div>
|
||||
<textarea id="selected-rule-comments" rows="4" cols="60"></textarea>
|
||||
</div>
|
||||
<div id="selected-rule-conditions-container" class="selected-rule-detail">
|
||||
<div class="large-label-container">
|
||||
<div id="conditions-label" class="large-label">Conditions</div>
|
||||
<div class="info fa fa-question-circle" title="All conditions must be met for this rule to match."></div>
|
||||
<button id="new-condition" title="New Condition" class="new-condition hidden fa fa-plus"></button>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div id="selected-rule-conditions"></div>
|
||||
</div>
|
||||
<div id="selected-rule-actions-container" class="selected-rule-detail">
|
||||
<div class="large-label-container">
|
||||
<div id="actions-label" class="large-label">Actions</div>
|
||||
<button id="new-action" title="New Action" class="new-action hidden fa fa-plus"></button>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div id="selected-rule-actions"></div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div id="message-and-save-container">
|
||||
<div id="message"></div>
|
||||
<div id="selected-rule-save" class="button hidden">Save</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div id="glass-pane"></div>
|
||||
<div id="ok-dialog" class="small-dialog">
|
||||
<div id="ok-dialog-content" class="dialog-content"></div>
|
||||
</div>
|
||||
<div id="yes-no-dialog" class="small-dialog">
|
||||
<div id="yes-no-dialog-content" class="dialog-content"></div>
|
||||
</div>
|
||||
<div id="new-rule-dialog" class="small-dialog">
|
||||
<div class="dialog-content">
|
||||
<div class="rule-setting">
|
||||
<div class="setting-name">Rule name</div>
|
||||
<div>
|
||||
<input id="new-rule-name" type="text" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="rule-setting">
|
||||
<div class="setting-name">Copy from existing rule (optional)</div>
|
||||
<div>
|
||||
<input id="copy-from-rule-name" placeholder="Search rule name" type="text" class="search" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="new-condition-dialog" class="dialog">
|
||||
<div>
|
||||
<div class="rule-setting">
|
||||
<div class="setting-name">Expression</div>
|
||||
<div>
|
||||
<div id="new-condition-expression"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="new-condition-button-container">
|
||||
<div id="new-condition-add" class="button button-normal">Add</div>
|
||||
<div id="new-condition-cancel" class="secondary-button button-normal">Cancel</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="new-action-dialog" class="dialog">
|
||||
<div style="margin-bottom: 32px;">
|
||||
<div class="rule-setting">
|
||||
<div class="setting-name">Attribute</div>
|
||||
<div id="new-action-attribute-container">
|
||||
<input id="new-action-attribute" type="text"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rule-setting">
|
||||
<div class="setting-name">Value</div>
|
||||
<div>
|
||||
<div id="new-action-value"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="new-action-button-container">
|
||||
<div id="new-action-add" class="button button-normal">Add</div>
|
||||
<div id="new-action-cancel" class="secondary-button button-normal">Cancel</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -33,13 +33,19 @@
|
|||
<servlet-name>api</servlet-name>
|
||||
<url-pattern>/api/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>worksheet</servlet-name>
|
||||
<jsp-file>/WEB-INF/jsp/worksheet.jsp</jsp-file>
|
||||
</servlet>
|
||||
|
||||
<!-- fragment filter -->
|
||||
<filter>
|
||||
<filter-name>FragmentFilter</filter-name>
|
||||
<filter-class>org.apache.nifi.web.servlet.filter.QueryStringToFragmentFilter</filter-class>
|
||||
</filter>
|
||||
<filter-mapping>
|
||||
<filter-name>FragmentFilter</filter-name>
|
||||
<url-pattern></url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>worksheet</servlet-name>
|
||||
<servlet-name>default</servlet-name>
|
||||
<url-pattern></url-pattern>
|
||||
</servlet-mapping>
|
||||
</web-app>
|
||||
|
|
|
@ -1,734 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Roboto Light'),
|
||||
local('Roboto-Light'),
|
||||
url('../fonts/Roboto/Roboto-Light.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: 300;
|
||||
src: local('Roboto LightItalic'),
|
||||
local('Roboto-LightItalic'),
|
||||
url('../fonts/Roboto/Roboto-LightItalic.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
src: local('Roboto Regular'),
|
||||
local('Roboto-Regular'),
|
||||
url('../fonts/Roboto/Roboto-Regular.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
src: local('Roboto Medium'),
|
||||
local('Roboto-Medium'),
|
||||
url('../fonts/Roboto/Roboto-Medium.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
src: local('Roboto Bold'),
|
||||
local('Roboto-Bold'),
|
||||
url('../fonts/Roboto/Roboto-Bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style: italic;
|
||||
font-weight: normal;
|
||||
src: local('Roboto Italic'),
|
||||
local('Roboto-Italic'),
|
||||
url('../fonts/Roboto/Roboto-Italic.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
src: local('RobotoSlab Regular'),
|
||||
local('RobotoSlab-Regular'),
|
||||
url('../fonts/Roboto_Slab/RobotoSlab-Regular.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
src: local('RobotoSlab Bold'),
|
||||
local('RobotoSlab-Bold'),
|
||||
url('../fonts/Roboto_Slab/RobotoSlab-Bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
/*remove margin from font awesome*/
|
||||
i[class^="fa-"]:before, i[class*=" fa-"]:before {
|
||||
margin: -1px;
|
||||
}
|
||||
|
||||
/*remove margin from flowfont*/
|
||||
i[class^="icon-"]:before, i[class*=" icon-"]:before {
|
||||
margin: -2px;
|
||||
}
|
||||
|
||||
/*shift rotated font awesome icons*/
|
||||
.fa-rotate-90 {
|
||||
left: -2px !important;
|
||||
}
|
||||
|
||||
body {
|
||||
display: block;
|
||||
font-family: Roboto, sans-serif;
|
||||
overflow: hidden;
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
body.md-default-theme, body, html.md-default-theme, html {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.value-color {
|
||||
color: #775351;
|
||||
}
|
||||
|
||||
ul.links li {
|
||||
float: left;
|
||||
display: block;
|
||||
margin-left: 10px;
|
||||
padding: 4px;
|
||||
text-align: center;
|
||||
font-size: 11px;
|
||||
font-weight: normal;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ul.links span.header-link-over {
|
||||
color: #264c58;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/*
|
||||
General Styles
|
||||
*/
|
||||
|
||||
.unselectable {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.pointer {
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.blank, .unset, .sensitive {
|
||||
font-weight: normal !important;
|
||||
color: #a8a8a8 !important;
|
||||
}
|
||||
|
||||
.required {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
.ellipsis {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.ellipsis.multiline {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.table-cell {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
line-height: normal;
|
||||
float: left;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
label {
|
||||
font-family: 'Roboto Slab', serif;
|
||||
font-size: 12px;
|
||||
color: #262626; /*base-font-color*/
|
||||
letter-spacing: 0.05rem;
|
||||
display: block;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
/* placeholder styles */
|
||||
|
||||
*::placeholder {
|
||||
color: #728e9b;
|
||||
}
|
||||
*::-webkit-input-placeholder {
|
||||
color: #728e9b;
|
||||
}
|
||||
*:-moz-placeholder {
|
||||
color: #728e9b;
|
||||
}
|
||||
*::-moz-placeholder {
|
||||
color: #728e9b;
|
||||
}
|
||||
*:-ms-input-placeholder {
|
||||
color: #728e9b;
|
||||
}
|
||||
|
||||
input[type=text], input[type=password] {
|
||||
background-color: #eaeef0;
|
||||
border: 1px solid #eaeef0;
|
||||
font-family: Roboto, sans-serif;
|
||||
font-size: 13px;
|
||||
padding: 0px 10px 0px 10px;
|
||||
resize: none;
|
||||
height: 32px;
|
||||
width: 100%;
|
||||
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
||||
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
||||
box-sizing: border-box;
|
||||
color: #262626;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
input:focus, textarea:focus {
|
||||
background-color: #fff;
|
||||
border: 1px solid #004849; /*link-color*/
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
textarea {
|
||||
background-color: #eaeef0;
|
||||
border: 1px solid #eaeef0;
|
||||
font-family: Roboto, sans-serif;
|
||||
font-size: 13px !important;
|
||||
padding: 10px 10px;
|
||||
resize: vertical;
|
||||
height: 32px;
|
||||
width: 100%;
|
||||
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
||||
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
||||
box-sizing: border-box;
|
||||
color: #262626;
|
||||
white-space: pre-wrap;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
textarea[disabled] {
|
||||
background: #b2b8c1;
|
||||
color: #dbdee2;
|
||||
border: 1px solid #b2b8c1;
|
||||
}
|
||||
|
||||
ul.property-info {
|
||||
list-style-type: disc;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
ul.property-info li {
|
||||
padding: 0px 0px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
div.nf-checkbox {
|
||||
cursor: pointer;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
float: left;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.nf-checkbox-label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.nf-checkbox.disabled {
|
||||
opacity: .5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
div.checkbox-unchecked {
|
||||
background: transparent url(../images/inputCheckbox.png) no-repeat scroll top left;
|
||||
}
|
||||
|
||||
div.checkbox-checked {
|
||||
background: transparent url(../images/inputCheckbox.png) no-repeat scroll top right;
|
||||
}
|
||||
|
||||
div.ajax-loading {
|
||||
background-image: url(../images/iconLoading.gif);
|
||||
}
|
||||
|
||||
div.ajax-complete:before {
|
||||
font-family: FontAwesome;
|
||||
content: "\f00c";
|
||||
font-size: 16px;
|
||||
color: #70B59A;
|
||||
}
|
||||
|
||||
div.ajax-error:before {
|
||||
font-family: FontAwesome;
|
||||
content: "\f00d";
|
||||
font-size: 16px;
|
||||
color: #D18686;
|
||||
}
|
||||
|
||||
.refresh-button {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ui-draggable .dialog-header {
|
||||
cursor: move;
|
||||
}
|
||||
|
||||
span.link:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
span.link {
|
||||
cursor: pointer;
|
||||
color: #004849; /*link-color*/
|
||||
font-weight: normal;
|
||||
display: inline-block;
|
||||
border-bottom: 1px solid #CCDADB;
|
||||
font-size: 13px;
|
||||
font-family: Roboto;
|
||||
}
|
||||
|
||||
span.link-over {
|
||||
border-bottom: 1px solid #004849;
|
||||
}
|
||||
|
||||
span.link-bold {
|
||||
font-weight: bold;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
button {
|
||||
height: 28px;
|
||||
width: 28px;
|
||||
border: 1px solid #CCDADB; /*tint link-color 80%*/
|
||||
background-color: rgba(249, 250, 251, 0.97);
|
||||
color: #004849;
|
||||
}
|
||||
|
||||
button.refresh-button {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
border: 1px solid #004849; /*link-color*/
|
||||
}
|
||||
|
||||
button:disabled {
|
||||
color: #CCDADB !important; /*tint link-color 80%*/
|
||||
cursor: not-allowed;
|
||||
border: 1px solid #CCDADB; /*tint link-color 80%*/
|
||||
}
|
||||
|
||||
/* angular material override */
|
||||
|
||||
button:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
div:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
input:focus {
|
||||
background-color: #fff;
|
||||
border: 1px solid #004849; /*link-color*/
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* filter controls */
|
||||
|
||||
.filter-controls {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
}
|
||||
|
||||
.filter-container {
|
||||
height: 32px;
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.filter {
|
||||
margin-right: 3px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
input.filter {
|
||||
width: 173px;
|
||||
}
|
||||
|
||||
.filter-type,
|
||||
.filter-status-dropdown {
|
||||
float: left;
|
||||
width: 148px;
|
||||
}
|
||||
|
||||
.filter-status {
|
||||
margin-top: 10px;
|
||||
color: #775351;
|
||||
font-family: Roboto;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.setting-field.summary-filter-primary-node-container {
|
||||
display: inline-block;
|
||||
margin-left: 10px;
|
||||
margin-top: 8px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* overlay icon styles */
|
||||
|
||||
.stop-configure-icon.fa-stop {
|
||||
display : inline-block;
|
||||
font-size: 15px;
|
||||
position : relative;
|
||||
top : -1px;
|
||||
}
|
||||
|
||||
.stop-configure-icon::after {
|
||||
content : "\f013";
|
||||
font-size: 14px;
|
||||
position : relative;
|
||||
top : 0px;
|
||||
left : -8px;
|
||||
color : #ffffff;
|
||||
-webkit-text-stroke-width : 1px;
|
||||
-webkit-text-stroke-color : #004849;
|
||||
|
||||
}
|
||||
|
||||
*.stop-configure-icon + span {
|
||||
display : inline-block;
|
||||
padding : 0px 0px 0px 0px;
|
||||
margin-left : -10px;
|
||||
}
|
||||
|
||||
/* buttons */
|
||||
|
||||
button.fa {
|
||||
color: #004849;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
line-height: 25px;
|
||||
}
|
||||
|
||||
button.icon {
|
||||
color: #004849;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
div.button-icon span {
|
||||
padding-left: 5px;
|
||||
vertical-align: middle;
|
||||
font-style: normal;
|
||||
font-family: Roboto;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
div.button-icon {
|
||||
float: left !important;
|
||||
margin-left: 0;
|
||||
font-size: 18px !important;
|
||||
}
|
||||
|
||||
div.button.auto-width,
|
||||
div.button-icon.auto-width {
|
||||
width : auto !important;
|
||||
}
|
||||
|
||||
div.button {
|
||||
height: 32px;
|
||||
width: 90px;
|
||||
padding: 0 8px;
|
||||
text-transform: uppercase;
|
||||
font-weight: 500;
|
||||
font-size: 11px;
|
||||
line-height: 33px;
|
||||
text-align: center;
|
||||
border: 0px;
|
||||
float: right;
|
||||
position: relative;
|
||||
background: #728E9B;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
div.button.disabled-button {
|
||||
color: #a8a8a8 !important;
|
||||
cursor: not-allowed;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
div.button:hover:not(.disabled-button) {
|
||||
background-color: #004849;
|
||||
}
|
||||
|
||||
div.secondary-button {
|
||||
height: 32px;
|
||||
width: 90px;
|
||||
padding: 0 8px;
|
||||
text-transform: uppercase;
|
||||
font-weight: 500;
|
||||
font-size: 11px;
|
||||
line-height: 33px;
|
||||
text-align: center;
|
||||
border: 0px;
|
||||
float: right;
|
||||
position: relative;
|
||||
background: #E3E8EB;
|
||||
color: #004849;
|
||||
cursor:pointer
|
||||
}
|
||||
|
||||
div.secondary-button:hover {
|
||||
background-color: #C7D2D7;
|
||||
}
|
||||
|
||||
/* tooltips */
|
||||
|
||||
.qtip-nifi {
|
||||
border: 0px !important;
|
||||
border-radius: 2px;
|
||||
background-color: rgba(0, 0, 0, 0.54) !important;
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
|
||||
font-family: Roboto;
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
div.nifi-tooltip {
|
||||
border: 0px !important;
|
||||
border-radius: 2px;
|
||||
background-color: rgba(0, 0, 0, 0.80) !important;
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
|
||||
font-family: Roboto;
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
color: #fff !important;
|
||||
max-width: 500px;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.scrollable {
|
||||
border-bottom: 1px solid #d0dbe0;
|
||||
}
|
||||
|
||||
/*context menu */
|
||||
|
||||
.context-menu {
|
||||
display: none;
|
||||
position: absolute;
|
||||
z-index: 10006;
|
||||
font-size: 13px;
|
||||
padding:3px 0;
|
||||
background-color:rgba(249,250,251,0.97); /*tint base-color 96%*/
|
||||
border:1px solid #004849; /*link-color*/
|
||||
box-shadow: 0 3px 6px rgba(0,0,0,0.3);
|
||||
width: 215px;
|
||||
max-height: inherit;
|
||||
color:#004849
|
||||
}
|
||||
|
||||
div.context-menu-item {
|
||||
cursor: pointer;
|
||||
height: 20px;
|
||||
padding-top: 4px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
div.context-menu-item.hover {
|
||||
background-color:#C7D2D7; /*tint base-color 60%*/
|
||||
box-shadow:0 1px 1px rgba(0,0,0,0.15);
|
||||
}
|
||||
|
||||
.context-menu-item-img {
|
||||
float: left;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.context-menu-item-img.fa {
|
||||
position: relative;
|
||||
top: 2px;
|
||||
left: 2px;
|
||||
}
|
||||
|
||||
.context-menu-item-img.icon {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
left: 3px;
|
||||
}
|
||||
|
||||
div.context-menu-item-text {
|
||||
margin-left: 4px;
|
||||
line-height: 16px;
|
||||
float: left;
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
div.context-menu-group-item-img {
|
||||
float: right;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-size: cover;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
div.context-menu-item-separator {
|
||||
height: 1px;
|
||||
background-color: #C7D2D7;
|
||||
margin-top: 3px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
/* search */
|
||||
|
||||
li.search-no-matches {
|
||||
padding: 4px;
|
||||
font-weight: bold;
|
||||
color: #aaa;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* progress bars */
|
||||
|
||||
md-progress-linear > div {
|
||||
background-color: #eaeef0 !important;
|
||||
}
|
||||
|
||||
.setting {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.setting-name {
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
font-family: Roboto Slab;
|
||||
text-transform: capitalize;
|
||||
padding-bottom: 4px;
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
.setting-name .fa {
|
||||
color: #004849;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.setting-field .fa {
|
||||
color: #004849;
|
||||
margin-left: 5px;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.setting-field {
|
||||
line-height: normal;
|
||||
width: 100%;
|
||||
color: #775351;
|
||||
font-size: 13px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.setting-header {
|
||||
color: #728e9b;
|
||||
font-size: 12pt;
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
padding-bottom: 20px;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.CodeMirror {
|
||||
border: 1px solid #aaa;
|
||||
font-family: monospace;
|
||||
background-color: #fff;
|
||||
cursor: default;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/* jquery ui autocomplete override */
|
||||
|
||||
.ui-autocomplete {
|
||||
overflow: auto !important;
|
||||
border: 1px solid #aaaaaa !important;
|
||||
font-size: 12px !important;
|
||||
font-family: Roboto !important;
|
||||
}
|
||||
|
||||
.ui-menu .ui-menu-item a {
|
||||
display: block;
|
||||
border: 1px solid transparent;
|
||||
line-height: 1.5;
|
||||
margin: 0 !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.ui-menu .ui-menu-item a.ui-state-active {
|
||||
background: #D4E0E5 !important;
|
||||
border: 1px solid #999999;
|
||||
}
|
||||
|
||||
/* jquery ui slider override */
|
||||
|
||||
.ui-slider-handle.ui-state-active {
|
||||
background: #fff !important;
|
||||
}
|
|
@ -1,380 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
document styles
|
||||
*/
|
||||
|
||||
body {
|
||||
display: block;
|
||||
font-family: Roboto, sans-serif;
|
||||
font-size: 62.5%;
|
||||
overflow: hidden;
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
#update-attributes-content {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
/* new rule */
|
||||
|
||||
div.new-rule {
|
||||
float: right;
|
||||
background: url("../images/buttonNew.png") no-repeat scroll left top transparent;
|
||||
cursor: pointer;
|
||||
height: 19px;
|
||||
width: 19px;
|
||||
}
|
||||
|
||||
#new-rule-dialog {
|
||||
display: none;
|
||||
z-index: 1301;
|
||||
}
|
||||
|
||||
#update-attributes-content .ui-autocomplete {
|
||||
max-height: 400px;
|
||||
overflow: auto;
|
||||
border: 1px solid #aaaaaa;
|
||||
z-index: 1351;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
#update-attributes-content .ui-menu .ui-menu-item a.ui-state-focus {
|
||||
background: #D4E0E5 !important;
|
||||
border: 1px solid #999999;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
/* rule list panel */
|
||||
|
||||
#rule-label-container {
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
div.large-label {
|
||||
color: #728e9b;
|
||||
font-size: 12pt;
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
padding-bottom: 10px;
|
||||
text-overflow: ellipsis;
|
||||
float: left;
|
||||
}
|
||||
|
||||
div.label {
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
font-family: Roboto Slab;
|
||||
padding-bottom: 4px;
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
#rule-list-panel {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
bottom: 5px;
|
||||
left: 20px;
|
||||
right: 65%;
|
||||
}
|
||||
|
||||
#rule-list-container {
|
||||
overflow-y: auto;
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 116px;
|
||||
bottom: 175px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
min-height: 45px;
|
||||
}
|
||||
|
||||
#flowfile-policy-container {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
#rule-list {
|
||||
list-style-type: none;
|
||||
background: #eaeef0;
|
||||
padding: 4px 3px 1px 3px;
|
||||
}
|
||||
|
||||
#rule-list li {
|
||||
background: #fff;
|
||||
border-top: 1px solid #CCDADB;
|
||||
border-right: 1px solid #CCDADB;
|
||||
border-bottom: 1px solid #CCDADB;
|
||||
border-left: 1px solid #CCDADB;
|
||||
color: #004849;
|
||||
font-weight: 500;
|
||||
cursor: grab;
|
||||
cursor: -moz-grab;
|
||||
cursor: -webkit-grab;
|
||||
line-height: 32px;
|
||||
height: 32px;
|
||||
padding: 0px 10px;
|
||||
box-shadow: 0 1px 1px rgba(0,0,0,0.4);
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#rule-list li.selected {
|
||||
background: #355B6A;
|
||||
border-top: 1px solid #AAC1CE;
|
||||
border-right: 1px solid #85A6B8;
|
||||
border-bottom: 1px solid #618BA3;
|
||||
border-left: 1px solid #85A6B8;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
line-height: 32px;
|
||||
height: 32px;
|
||||
padding: 0px 10px;
|
||||
}
|
||||
|
||||
#rule-list li.unsaved {
|
||||
font-weight: bold;
|
||||
font-size: 13px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
div.rule-label {
|
||||
float: left;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
div.remove-rule {
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
line-height: 32px;
|
||||
}
|
||||
|
||||
#rule-filter-controls {
|
||||
position: absolute;
|
||||
bottom: 63px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
#rule-filter-type {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* rule details panel */
|
||||
|
||||
#rule-details-panel {
|
||||
overflow: auto;
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
bottom: 42px;
|
||||
left: 37%;
|
||||
right: 20px;
|
||||
}
|
||||
|
||||
#no-rule-selected-label {
|
||||
line-height: 32px;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 26px;
|
||||
}
|
||||
|
||||
div.large-label-container {
|
||||
margin-top: 10px;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
#flowfile-policy {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
#new-condition {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
#actions-label {
|
||||
float: left;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
#selected-rule-conditions {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
#selected-rule-comments-container {
|
||||
margin-top: 75px;
|
||||
}
|
||||
|
||||
#selected-rule-comments {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
#selected-rule-actions-container {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
#selected-rule-actions-container div.slick-viewport {
|
||||
overflow-x: hidden !important;
|
||||
}
|
||||
|
||||
#selected-rule-conditions-container {
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
#selected-rule-conditions-container div.slick-viewport {
|
||||
overflow-x: hidden !important;
|
||||
}
|
||||
|
||||
#selected-rule-name {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
top: 26px;
|
||||
}
|
||||
|
||||
#new-action {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
#new-rule {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#selected-rule-actions {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
#message {
|
||||
color: #f0ad4e;
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
line-height: 32px;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
flex-grow: 1;
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
height: 41px;
|
||||
}
|
||||
|
||||
#message-and-save-container {
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
left: 0px;
|
||||
bottom: 0px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#selected-rule-save {
|
||||
margin-right: 20px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
input.editor-text {
|
||||
background: none repeat scroll 0 0 transparent;
|
||||
border: 0 none;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
outline: 0 none;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* general styles */
|
||||
|
||||
#ok-dialog {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#yes-no-dialog {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#new-condition-dialog {
|
||||
display: none;
|
||||
z-index: 1299;
|
||||
cursor: move;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#new-condition-dialog .nf-editor {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
#new-condition-attribute {
|
||||
width: 374px;
|
||||
}
|
||||
|
||||
#new-action-button-container, #new-condition-button-container {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#new-action-dialog {
|
||||
display: none;
|
||||
z-index: 1299;
|
||||
cursor: move;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#new-action-dialog .nf-editor {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
div.slickgrid-nf-editor .nf-editor {
|
||||
margin-bottom: 37px;
|
||||
}
|
||||
|
||||
div.property-detail .nf-editor {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
div.rule-setting {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.unset {
|
||||
font-style: italic;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
.pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.info {
|
||||
color: #004849;
|
||||
margin-left: 5px;
|
||||
font-size: 12px;
|
||||
}
|
|
@ -1,153 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* nifi specific slick grid theme based on the supplied slick-default-theme.css */
|
||||
|
||||
.slick-header-columns {
|
||||
color: #fff;
|
||||
background-color: #728E9B;
|
||||
}
|
||||
|
||||
.slick-header-column {
|
||||
background: #728E9B;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.slick-header-column:hover, .slick-header-column-active {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.slick-row {
|
||||
position: absolute;
|
||||
background: white;
|
||||
border: 0;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.slick-row:hover {
|
||||
background-color: #dce3e6 !important;
|
||||
}
|
||||
|
||||
.slick-cell {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.slick-cell.selected {
|
||||
background-color: #ffef85;
|
||||
border-top: 1px solid #000000;
|
||||
border-bottom: 1px solid #000000;
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
.slick-row.odd {
|
||||
background: #f4f6f7;
|
||||
}
|
||||
|
||||
.slick-cell.invalid {
|
||||
border-color: #ba554a;
|
||||
}
|
||||
|
||||
.slickgrid-editor > textarea {
|
||||
resize: both;
|
||||
}
|
||||
|
||||
.grid-canvas .slick-cell:first-child{
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
.slick-viewport .fa {
|
||||
color: #004849;
|
||||
line-height: 22px;
|
||||
margin-top: 0;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.slick-viewport .icon {
|
||||
color: #004849;
|
||||
line-height: 24px;
|
||||
margin-top: 0;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.slick-header.ui-state-default {
|
||||
background-color: #728E9B;
|
||||
}
|
||||
|
||||
.slick-header.ui-state-default, .slick-headerrow.ui-state-default {
|
||||
font-family: Roboto;
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
font-style: normal;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.slick-header-column.ui-state-default {
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
border-right: 1px solid #728E9B;
|
||||
}
|
||||
|
||||
.slick-sortable-placeholder {
|
||||
background: #728E9B;
|
||||
}
|
||||
|
||||
.slick-row.ui-widget-content, .slick-row.ui-state-active {
|
||||
font-family: Roboto;
|
||||
font-size: 12px;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
color: #262626;
|
||||
}
|
||||
|
||||
.slick-cell, .slick-headerrow-column {
|
||||
border-right: 0;
|
||||
border-top: 0;
|
||||
border-left: 1px solid #c7d2d7;
|
||||
border-bottom: 1px solid #c7d2d7;
|
||||
padding: 1px 2px 5px 10px;
|
||||
}
|
||||
|
||||
div.status-text {
|
||||
padding-left: 4px;
|
||||
line-height: 22px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.slick-sort-indicator {
|
||||
float: none !important;
|
||||
}
|
||||
|
||||
.slick-sort-indicator-desc {
|
||||
background: url(../images/sort-desc.gif) !important;
|
||||
}
|
||||
|
||||
.slick-sort-indicator-asc {
|
||||
background: url(../images/sort-asc.gif) !important;
|
||||
}
|
|
@ -1,202 +0,0 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -1,202 +0,0 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -1,87 +0,0 @@
|
|||
@font-face {
|
||||
font-family: 'flowfont';
|
||||
src: url('./flowfont.eot?8516181');
|
||||
src: url('./flowfont.eot?8516181#iefix') format('embedded-opentype'),
|
||||
url('./flowfont.woff2?8516181') format('woff2'),
|
||||
url('./flowfont.woff?8516181') format('woff'),
|
||||
url('./flowfont.ttf?8516181') format('truetype'),
|
||||
url('./flowfont.svg?8516181#flowfont') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
|
||||
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
|
||||
/*
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
@font-face {
|
||||
font-family: 'flowfont';
|
||||
src: url('../font/flowfont.svg?8516181#flowfont') format('svg');
|
||||
}
|
||||
}
|
||||
*/
|
||||
[class^="icon-"]:before, [class*=" icon-"]:before {
|
||||
font-family: "flowfont";
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
speak: never;
|
||||
|
||||
display: inline-block;
|
||||
text-decoration: inherit;
|
||||
width: 1em;
|
||||
margin-right: .2em;
|
||||
text-align: center;
|
||||
/* opacity: .8; */
|
||||
|
||||
/* For safety - reset parent styles, that can break glyph codes*/
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
|
||||
/* fix buttons height, for twitter bootstrap */
|
||||
line-height: 1em;
|
||||
|
||||
/* Animation center compensation - margins should be symmetric */
|
||||
/* remove if not needed */
|
||||
margin-left: .2em;
|
||||
|
||||
/* you can be more comfortable with increased icons size */
|
||||
/* font-size: 120%; */
|
||||
|
||||
/* Font smoothing. That was taken from TWBS */
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
/* Uncomment for 3D effect */
|
||||
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
|
||||
}
|
||||
|
||||
.icon-funnel-add:before { content: '\e800'; } /* '' */
|
||||
.icon-counter:before { content: '\e801'; } /* '' */
|
||||
.icon-enable-false:before { content: '\e802'; } /* '' */
|
||||
.icon-funnel:before { content: '\e803'; } /* '' */
|
||||
.icon-group:before { content: '\e804'; } /* '' */
|
||||
.icon-group-remote:before { content: '\e805'; } /* '' */
|
||||
.icon-label:before { content: '\e806'; } /* '' */
|
||||
.icon-processor:before { content: '\e807'; } /* '' */
|
||||
.icon-provenance:before { content: '\e808'; } /* '' */
|
||||
.icon-template:before { content: '\e809'; } /* '' */
|
||||
.icon-transmit-false:before { content: '\e80a'; } /* '' */
|
||||
.icon-zoom-actual:before { content: '\e80b'; } /* '' */
|
||||
.icon-zoom-fit:before { content: '\e80c'; } /* '' */
|
||||
.icon-label-add:before { content: '\e80d'; } /* '' */
|
||||
.icon-template-add:before { content: '\e80e'; } /* '' */
|
||||
.icon-group-add:before { content: '\e80f'; } /* '' */
|
||||
.icon-template-import:before { content: '\e810'; } /* '' */
|
||||
.icon-template-save:before { content: '\e811'; } /* '' */
|
||||
.icon-group-remote-add:before { content: '\e812'; } /* '' */
|
||||
.icon-port-out-add:before { content: '\e813'; } /* '' */
|
||||
.icon-port-in-add:before { content: '\e814'; } /* '' */
|
||||
.icon-processor-add:before { content: '\e815'; } /* '' */
|
||||
.icon-lineage:before { content: '\e816'; } /* '' */
|
||||
.icon-import-from-registry-add:before { content: '\e81d'; } /* '' */
|
||||
.icon-import-from-registry:before { content: '\e81e'; } /* '' */
|
||||
.icon-port-in:before { content: '\e832'; } /* '' */
|
||||
.icon-port-out:before { content: '\e833'; } /* '' */
|
||||
.icon-connect:before { content: '\e834'; } /* '' */
|
||||
.icon-connect-add:before { content: '\e835'; } /* '' */
|
||||
.icon-threads:before { content: '\e83f'; } /* '' */
|
||||
.icon-drop:before { content: '\e888'; } /* '' */
|
|
@ -1,72 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Copyright (C) 2023 by original authors @ fontello.com</metadata>
|
||||
<defs>
|
||||
<font id="flowfont" horiz-adv-x="1000" >
|
||||
<font-face font-family="flowfont" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
||||
<missing-glyph horiz-adv-x="1000" />
|
||||
<glyph glyph-name="funnel-add" unicode="" d="M948 786h-114a52 52 0 0 1-53-52v-147l-183-77a305 305 0 0 1-35 11l78 110h51a52 52 0 0 1 52 52v115a52 52 0 0 1-52 52h-114a52 52 0 0 1-52-52v-114a52 52 0 0 1 52-53h29l-74-108c-9 0-18-2-28-2s-19 4-28 3l-73 107h18a52 52 0 0 1 52 52v115a52 52 0 0 1-52 52h-114a52 52 0 0 1-51-52v-114a52 52 0 0 1 51-53h61l75-111a379 379 0 0 1-38-8l-187 75v147a52 52 0 0 1-53 52h-114a52 52 0 0 1-52-52v-114a52 52 0 0 1 52-51h156l159-68a39 39 0 0 1-28-29c0-28 74-51 166-51s167 22 167 50a40 40 0 0 1-29 31l159 67h146a52 52 0 0 1 52 51v114a52 52 0 0 1-52 52z m-365-128a31 31 0 0 0-32 31v104a31 31 0 0 0 32 31h105a31 31 0 0 0 31-31v-104a31 31 0 0 0-31-31h-105z m-270 0a31 31 0 0 0-32 31v104a31 31 0 0 0 32 31h104a31 31 0 0 0 31-31v-104a31 31 0 0 0-31-31h-104z m-121-33a31 31 0 0 0-31-32h-104a31 31 0 0 0-31 32v104a31 31 0 0 0 31 31h104a31 31 0 0 0 31-31v-104z m781 0a31 31 0 0 0-31-32h-103a31 31 0 0 0-31 32v104a31 31 0 0 0 31 31h104a31 31 0 0 0 31-31v-104z m-689-257a234 234 0 1 1 234-234 234 234 0 0 1-234 234z m140-268a9 9 0 0 0-9-9h-81a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-66a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-80a9 9 0 0 0-9 9v66a9 9 0 0 0 9 9h81a9 9 0 0 1 10 9v82a9 9 0 0 0 7 8h65a9 9 0 0 0 9-9v-81a9 9 0 0 1 9-9h81a9 9 0 0 0 9-9v-66z m153 252v-164a18 18 0 0 1 19-19h60c12 0 14-7 7-15l-115-122a281 281 0 0 1-164 366 514 514 0 0 1 121-14c20 0 194 2 202 80h12v-2a31 31 0 0 0 0-5c0-69-78-95-142-104z m51-301v-150a52 52 0 0 0-52-51h-138a52 52 0 0 0-43 22 281 281 0 0 1 43 23 31 31 0 0 1 18-6h104a31 31 0 0 1 31 31v96z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="counter" unicode="" d="M878-17h-756c-67 0-122 54-122 121v492c0 67 55 121 122 121h756c68 0 122-54 122-121v-492c0-67-54-121-122-121z m-756 670c-32 0-58-26-58-57v-492c0-31 26-57 58-57h756c32 0 58 26 58 57v492c0 31-26 57-58 57h-756z m358-535h-314v62l148 158c20 22 35 42 45 58 10 17 15 33 15 47 0 21-5 37-15 48-11 12-25 18-45 18-20 0-36-7-48-21-12-15-18-33-18-56h-91c0 28 7 53 20 76 13 23 32 41 56 54 25 13 52 20 83 20 47 0 84-11 110-34s39-55 39-96c0-22-6-45-18-69-11-23-31-51-60-82l-104-110h197v-73z m344 457c8-17 12-36 12-57 0-21-7-41-19-58-13-18-30-31-51-41 26-9 45-23 58-41 13-19 19-40 19-66 0-40-15-73-44-97s-69-37-118-37c-46 0-83 12-112 36-29 24-44 56-44 96h91c0-18 7-32 20-42 12-11 28-17 47-17 22 0 39 6 51 17 12 12 18 27 18 46 0 45-25 68-75 68h-48v71h48c23 0 40 6 51 17 12 12 17 27 17 46 0 19-5 33-16 43-11 11-26 16-45 16l140 0z m-141 0c-18 0-32-5-44-15-11-9-17-21-17-37h-91c0 19 4 36 12 52h140z m0-457l25 39h92v-39h-117z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="enable-false" unicode="" d="M912-123l-297 296-144-308c-5-9-14-15-25-15-3 0-6 1-9 1-13 4-21 17-18 30l96 392-71 70-150-37c-3-1-5-1-7-1-7 0-14 2-19 7-7 5-10 14-8 23l38 154-251 250 41 42 865-862-41-42z m-117 683c5 9 3 20-4 27-5 5-12 9-20 9-3 0-5-1-7-1l-238-59 102 278c2 4 3 7 3 11 0 14-12 25-27 25h-197c-12 0-23-8-26-19l-42-172 343-342 113 243z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="funnel" unicode="" d="M782 734v-147l-183-77c-11 2-21 9-35 11l77 111h51c28 0 52 23 52 52v114c0 29-24 52-52 52h-114c-29 0-52-23-52-52v-114c0-29 23-52 52-52h29l-74-108c-9 0-18-2-28-2-9 0-19 3-28 3l-73 107h18c29 0 52 23 52 52v114c0 29-23 52-52 52h-113c-29 0-53-23-53-52v-114c0-29 24-52 53-52h60l75-111c-13-2-27-6-38-9l-188 75v147c0 29-23 52-52 52h-114c-29 0-52-23-52-52v-114c0-29 23-52 52-52h157l158-68c-18-8-28-19-28-29 0-27 74-50 166-50 92 0 166 22 166 49 0 10-10 22-28 30l159 68h146c29 0 52 23 52 52v114c0 29-23 52-52 52h-114c-29 0-52-23-52-52z m-231-45v104c0 17 14 31 32 31h104c17 0 31-14 31-31v-104c0-17-14-31-31-31h-104c-18 0-32 14-32 31z m-269 0v104c0 17 14 31 31 31h105c17 0 31-14 31-31v-104c0-17-14-31-31-31h-105c-17 0-31 14-31 31z m-121-95h-104c-17 0-31 14-31 31v104c0 17 14 31 31 31h104c17 0 31-14 31-31v-104c0-17-14-31-31-31z m782 0h-104c-17 0-31 14-31 31v104c0 17 14 31 31 31h104c17 0 31-14 31-31v-104c0-17-14-31-31-31z m-452-592c8-9 20-9 28 0l144 153c8 8 5 16-6 16h-61c-11 0-19 7-19 18v164c64 9 142 35 142 104 0 2-1 3-1 5l-1 2-10 0c-8-78-182-80-202-80-20 0-194 2-202 80l-10 0 0-2c0-2 0-3 0-5 0-69 79-95 143-104v-164c0-11-11-18-22-18h-60c-11 0-14-8-7-16l144-153z m137 50v-150c0-29-23-52-52-52h-139c-29 0-52 23-52 52v150l38-36v-96c0-18 14-32 31-32h105c17 0 31 14 31 32v96l38 36z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="group" unicode="" d="M82 842c-45 0-82-36-82-82v-110h192v192h-110z m53-134h-77v36c0 22 18 41 41 41h36v-77z m783 134h-110v-192h192v110c0 46-37 82-82 82z m24-134h-77v77h36c23 0 41-19 41-41v-36z m-942-658v-110c0-46 37-82 82-82h110v192h-192z m135-135h-36c-23 0-41 19-41 41v36h77v-77z m673 135v-192h110c45 0 82 36 82 82v110h-192z m134-94c0-22-18-41-41-41h-36v77h77v-36z m-883 126v536h75v-536h-75z m807 0v536h75v-536h-75z m-634 627v75h536v-75h-536z m0-793v75h536v-75h-536z m454 530h-92v71c0 46-37 82-82 82h-179c-45 0-82-36-82-82v-178c0-46 37-82 82-82h92v-72c0-45 37-82 82-82h179c45 0 82 37 82 82v179c0 45-37 82-82 82z m-261-82v-67h-84c-27 0-49 22-49 49v164c0 27 22 49 49 49h163c27 0 49-22 49-49v-64h-46c-45 0-82-37-82-82z m302-172c0-27-22-49-49-49h-164c-27 0-49 22-49 49v164c0 27 22 49 49 49h164c27 0 49-22 49-49v-163z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="group-remote" unicode="" d="M82 842c-45 0-82-36-82-82v-110h192v192h-110z m53-134h-77v36c0 22 18 41 41 41h36v-77z m783 134h-110v-192h192v110c0 46-37 82-82 82z m24-134h-77v77h36c23 0 41-19 41-41v-36z m-942-658v-110c0-46 37-82 82-82h110v192h-192z m135-135h-36c-23 0-41 19-41 41v36h77v-77z m673 135v-192h110c45 0 82 36 82 82v110h-192z m134-94c0-22-18-41-41-41h-36v77h77v-36z m-211 433c-5 78-69 138-147 138-42 0-82-18-110-49-16 17-38 26-61 26-48 0-87-39-87-86l0-2c-4 1-7 1-11 1-67 0-122-55-122-122 0-67 55-122 122-122h384c60 0 110 50 110 111 0 49-32 91-78 105z m-32-158h-384c-86 0-75 143 11 127l68-13-10 68c-4 28 34 43 51 22l39-50 40 50c49 62 157 27 159-54l1-38 37-9c57-13 46-103-12-103z m-640-149v536h75v-536h-75z m882 0h-75v536h75v-536z m-709 627v75h536v-75h-536z m0-793v75h536v-75h-536z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="label" unicode="" d="M670 157c2 4 5 7 8 11l322 321v-43l-303-303c-3-3-7-6-11-8l-36-18 20 40z m-225-271l315 93c7 2 13 6 18 11l222 222v83l-207-207c-3-3-5-5-6-8l-40-65c-5-8-12-14-21-17l-167-61-5 10c-15 33-41 59-74 75l-10 5 60 166c3 9 10 17 18 21l62 38c3 2 6 4 8 6l382 382v83l-475-473c-5-5-8-11-10-18l-96-320c-5-16 10-31 26-26z m160 712c40 0 70 18 70 41s-30 40-70 40h-535c-40 0-70-17-70-40s30-41 70-41h535z m-59-136c40 0 70 18 70 41s-30 41-70 41h-476c-40 0-70-18-70-41s30-41 70-41h476z m-228-135c40 0 70 17 70 40 0 24-30 41-70 41h-248c-40 0-70-17-70-40 0-24 30-41 70-41h248z m178 407c40 0 70 17 70 40s-30 41-70 41h-426c-40 0-70-17-70-41s30-40 70-40h426z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="processor" unicode="" d="M101 832l-50-50-39-88 39 39v-120l-39-88 39 39v-120l-39-87 39 39v-121l-39-87 39 39v-121l-39-87 39 39v-121l-39-87 63 63h121l-15-63 63 63h121l-15-63 63 63h120l-14-63 63 63h120l-14-63 63 63h120l-15-63 114 113c11 12 18 28 18 44v760c0 46-37 83-83 83h-760c-16 0-32-7-44-18z m798-850h-738c-23 0-41 18-41 41v738c0 23 18 42 41 42h738c23 0 42-19 42-42v-738c0-23-19-41-42-41z m-119 564c-2 9-4 19-11 27-57 75-144 119-239 119-65 0-128-21-180-60-127-96-156-278-66-409 1-3 2-6 4-8 57-76 144-120 239-120 66 0 128 21 180 61 68 51 111 123 122 202 9 66-8 133-49 188z m-54-322c-39-30-87-45-137-45-80 0-157 40-208 106-11 15-28 24-46 24-13 0-25-4-36-12-12-10-20-23-23-39 0-4 1-7 1-11-60 110-39 246 55 317 39 29 86 45 136 45 80 0 158-40 208-107 11-15 28-23 47-23 13 0 25 4 35 11 16 13 23 32 22 51 63-110 42-245-54-317z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="provenance" unicode="" d="M827 160v-258c0-29-23-52-51-52h-724c-29 0-52 23-52 52v724c0 28 23 51 52 51h258v-465c0-29 23-52 52-52h465z m-193 293c-17 0-31 14-31 31v271h-150c-17 0-31-13-31-30v-422c0-17 14-30 31-30h422c17 0 30 13 30 30v150h-271z m366 145v193c0 33-26 59-59 59h-193c-32 0-58-26-58-59v-193c0-32 26-58 58-58h193c33 0 59 26 59 58z m-241 183h172v-172h-172v172z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="template" unicode="" d="M995 413v-157a31 31 0 0 0-31-31h-231l-195-156h153a31 31 0 0 0 32-31v-157a31 31 0 0 0-32-31h-434a31 31 0 0 0-31 31v157a31 31 0 0 0 31 31h231l196 156h-153a31 31 0 0 0-31 31v157a31 31 0 0 0 31 31h122l-373 187h-244a31 31 0 0 0-31 32v156a31 31 0 0 0 31 31h433a31 31 0 0 0 31-31v-156a31 31 0 0 0-31-32h-122l373-187h244a31 31 0 0 0 31-31z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="transmit-false" unicode="" d="M44 835l-44-44 163-163c-52-74-83-165-83-262 0-255 206-461 460-461 98 0 189 32 264 85l125-125 44 44-929 926z m287-374l60-60c-2-11-4-23-4-36 0-84 68-153 153-153 12 0 24 2 36 5l60-60c-29-14-62-22-96-22-127 0-230 103-230 230 0 35 8 67 21 96z m209-479c-212 0-383 172-383 383 0 77 23 148 62 208l55-55c-26-45-41-97-41-153 0-169 138-306 307-306 56 0 108 15 153 41l56-55c-60-40-132-63-209-63z m0 767c212 0 383-172 383-383 0-75-21-145-58-204l55-55v0c50 73 80 163 80 258 0 255-206 460-460 460-96 0-186-29-260-80l56-55c59 37 129 59 204 59z m269-531c24 44 38 94 38 148 0 169-138 306-307 306-54 0-104-14-148-38l57-57c28 12 59 18 91 18 127 0 230-102 230-230 0-32-7-62-18-90l57-57z m-299 298l180-180c2 10 3 19 3 30 0 84-68 153-153 153-10 0-20-1-30-3z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="zoom-actual" unicode="" d="M42-150c-23 0-42 19-42 42v916c0 23 19 42 42 42h83c23 0 42-19 42-42v-916c0-23-19-42-42-42h-83z m416 233c-22 0-41 19-41 42v108c0 23 19 42 41 42h84c23 0 41-19 41-42v-108c0-23-18-42-41-42h-84z m0 343c-22 0-41 18-41 41v108c0 23 19 42 41 42h84c23 0 41-19 41-42v-108c0-23-18-41-41-41h-84z m417-576c-23 0-42 19-42 42v916c0 23 19 42 42 42h83c23 0 42-19 42-42v-916c0-23-19-42-42-42h-83z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="zoom-fit" unicode="" d="M637 779c-12 12-15 30-9 45 7 16 22 26 39 26h291c23 0 42-19 42-42v-291c0-17-10-32-25-39-6-2-11-3-17-3-11 0-21 5-29 12l-292 292z m-566-292c-8-7-18-12-29-12-6 0-11 1-16 3-16 7-26 22-26 39v291c0 23 19 42 42 42h291c17 0 32-10 39-26 6-15 3-33-9-45l-292-292z m292-566c12-12 15-30 9-45-7-16-22-26-39-26h-291c-23 0-42 19-42 42v291c0 17 10 32 26 39 15 6 33 3 45-9l292-292z m566 292c12 12 30 15 46 9 15-7 25-22 25-39v-291c0-23-19-42-42-42h-291c-17 0-32 10-39 26-6 15-3 33 9 45l292 292z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="label-add" unicode="" d="M670 157a42 42 0 0 0 8 11l322 321v-43l-303-303a42 42 0 0 0-11-8l-36-17z m-65 441c40 0 70 18 70 41s-31 40-70 40h-535c-39 0-70-16-70-40s31-41 70-41h535z m-58-135c40 0 70 17 70 40s-32 41-70 41h-477c-39 0-70-18-70-41s31-40 70-40h477z m-51 271c40 0 70 17 70 40s-31 41-70 41h-426c-39 0-70-17-70-41s31-40 70-40h426z m-426-406h6a283 283 0 0 0 137 81h-143c-39-1-70-18-70-41s31-41 70-41z m214 40a234 234 0 1 1 234-234 234 234 0 0 1-234 234z m140-268a9 9 0 0 0-9-9h-81a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-66a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-80a9 9 0 0 0-9 9v66a9 9 0 0 0 9 9h81a9 9 0 0 1 10 9v82a9 9 0 0 0 7 8h65a9 9 0 0 0 9-9v-81a9 9 0 0 1 9-9h81a9 9 0 0 0 9-9v-66z m363-22l-40-64a42 42 0 0 0-21-18l-167-60-4 10a156 156 0 0 1-28 40 285 285 0 0 0-100-99 20 20 0 0 1 18-3l315 94a42 42 0 0 1 18 11l222 223v82l-207-206a42 42 0 0 1-6-8z m-250 182a281 281 0 0 0 17-43l56 34a42 42 0 0 1 8 6l382 383v83z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="template-add" unicode="" d="M723 38v-157a31 31 0 0 0-32-31h-406a283 283 0 0 1 276 219h132a31 31 0 0 0 30-31z m241 406h-244l-372 187h121a31 31 0 0 1 31 32v156a31 31 0 0 1-31 31h-433a31 31 0 0 1-31-31v-156a31 31 0 0 1 31-32h244l372-187h-121a31 31 0 0 1-31-31v-94a283 283 0 0 0 53-94h132l-117-94a284 284 0 0 0-5-43l170 137h231a31 31 0 0 1 31 31v157a31 31 0 0 1-31 31z m-446-310a234 234 0 1 0-234 234 234 234 0 0 0 234-234z m-94 32a9 9 0 0 1-9 9h-81a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-66a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-80a9 9 0 0 1-9-9v-66a9 9 0 0 1 9-9h81a9 9 0 0 0 10-9v-81a9 9 0 0 1 9-9h65a9 9 0 0 1 9 9v81a9 9 0 0 0 9 9h81a9 9 0 0 1 8 9v66z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="group-add" unicode="" d="M82 842a82 82 0 0 1-82-82v-110h192v192h-110z m53-134h-77v35a41 41 0 0 0 41 41h36v-76z m783 134h-110v-192h192v110a82 82 0 0 1-82 82z m24-134h-77v76h36a41 41 0 0 0 41-41v-35z m-134-657v-192h110a82 82 0 0 1 82 81v110h-192z m134-94a41 41 0 0 0-41-40h-36v76h77v-36z m-76 126v535h75v-536h-75z m-634 626v74h536v-75h-536z m536-719v-75h-302a285 285 0 0 1 62 75h240z m-485 375a234 234 0 1 1 235-234 234 234 0 0 1-234 237z m141-265a9 9 0 0 0-9-9h-81a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-66a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-80a9 9 0 0 0-9 9v66a9 9 0 0 0 9 9h81a9 9 0 0 1 10 9v82a9 9 0 0 0 7 8h65a9 9 0 0 0 9-9v-81a9 9 0 0 1 9-9h81a9 9 0 0 0 9-9v-66z m-365 206v312h75v-243a285 285 0 0 1-75-69z m709 58v-179a82 82 0 0 0-82-82h-120a286 286 0 0 1 1 31v10h111a49 49 0 0 1 49 50v162a49 49 0 0 1-49 49h-164a49 49 0 0 1-49-49v-6a284 284 0 0 1-38 27 82 82 0 0 0 80 67h46v66a49 49 0 0 1-49 49h-163a49 49 0 0 1-49-49v-94h-8a286 286 0 0 1-31-2v103a82 82 0 0 0 80 83h179a82 82 0 0 0 82-83v-72h92a82 82 0 0 0 82-81z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="template-import" unicode="" d="M990 432v-153a31 31 0 0 0-31-31h-430a31 31 0 0 0-31 31v153a31 31 0 0 0 31 31h116l-361 172h-243a31 31 0 0 0-31 31v153a31 31 0 0 0 31 31h430a31 31 0 0 0 31-31v-153a31 31 0 0 0-31-32h-115l360-171h243a31 31 0 0 0 31-31z m-656-558h-113a63 63 0 0 0-57 38h-154v-31a31 31 0 0 1 31-31h474a31 31 0 0 1 31 31v31h-154a63 63 0 0 0-57-39z m-115 31h115a31 31 0 0 1 31 31v151a13 13 0 0 0 14 13h159c8 0 10 4 5 9l-256 259a13 13 0 0 1-19 0l-255-258c-5-5-3-10 4-10h159a13 13 0 0 0 14-13v-152a31 31 0 0 1 31-31z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="template-save" unicode="" d="M990 432v-153a31 31 0 0 0-31-31h-430a31 31 0 0 0-31 31v153a31 31 0 0 0 31 31h116l-361 172h-243a31 31 0 0 0-31 31v153a31 31 0 0 0 31 31h430a31 31 0 0 0 31-31v-153a31 31 0 0 0-31-32h-115l360-171h243a31 31 0 0 0 31-31z m-508-560a22 22 0 0 0-22-22h-438a22 22 0 0 0-22 22v437a22 22 0 0 0 22 22h312a47 47 0 0 0 29-12l106-106a47 47 0 0 0 12-28v-313z m-40 18v286a25 25 0 0 1-7 15l-91 92a44 44 0 0 1-23 9v-139a22 22 0 0 0-22-22h-197a22 22 0 0 0-22 22v139h-40v-402h40v139a22 22 0 0 0 22 22h278a22 22 0 0 0 22-22v-139h40z m-81 0v121h-240v-121h241z m-80 402h-93v-121h71a22 22 0 0 1 22 23v98z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="group-remote-add" unicode="" d="M82 842a82 82 0 0 1-82-82v-110h192v192h-110z m53-134h-77v35a41 41 0 0 0 41 41h36v-76z m783 134h-110v-192h192v110a82 82 0 0 1-82 82z m24-134h-77v76h36a41 41 0 0 0 41-41v-35z m-134-657v-192h110a82 82 0 0 1 82 81v110h-192z m134-94a41 41 0 0 0-41-40h-36v76h77v-36z m0 126h-75v535h75v-536z m-710 626v74h536v-75h-536z m536-719v-75h-302a285 285 0 0 1 62 75h240z m-485 375a234 234 0 1 1 235-234 234 234 0 0 1-234 237z m141-265a9 9 0 0 0-9-9h-81a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-66a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-80a9 9 0 0 0-9 9v66a9 9 0 0 0 9 9h81a9 9 0 0 1 10 9v82a9 9 0 0 0 7 8h65a9 9 0 0 0 9-9v-81a9 9 0 0 1 9-9h81a9 9 0 0 0 9-9v-66z m-365 206v312h75v-243a285 285 0 0 1-75-69z m750-22a111 111 0 0 0-111-111h-134a281 281 0 0 1-14 59h148a53 53 0 0 1 13 103l-37 9v38a91 91 0 0 1-160 53l-39-50-39 50a29 29 0 0 1-52-22l3-16a281 281 0 0 1-61 16v3a87 87 0 0 0 148 61 148 148 0 0 0 257-89 110 110 0 0 0 78-104z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="port-out-add" unicode="" d="M284 368a234 234 0 1 1 234-234 234 234 0 0 1-234 234z m140-268a9 9 0 0 0-9-9h-81a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-66a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-80a9 9 0 0 0-9 9v66a9 9 0 0 0 9 9h81a9 9 0 0 1 10 9v82a9 9 0 0 0 7 8h65a9 9 0 0 0 9-9v-81a9 9 0 0 1 9-9h81a9 9 0 0 0 9-9v-66z m365 594v-102l-39 39v63a38 38 0 0 1-39 37h-615a38 38 0 0 1-38-37v-390a281 281 0 0 1-58-170v579l41 41a58 58 0 0 0 41 17h630a77 77 0 0 0 77-77z m205-421l-341-339c-9-8-16-6-16 7v192a22 22 0 0 1-22 22h-49a281 281 0 0 1-11 63h133a11 11 0 0 0 10-11v-132c0-6 4-7 8-3l212 209a11 11 0 0 1 0 15l-212 210c-4 5-8 3-8-3v-130a11 11 0 0 0-10-11h-208a11 11 0 0 1-11-12 283 283 0 0 1-63 40v10a22 22 0 0 0 22 22h188a22 22 0 0 1 22 21v194c0 11 6 15 15 6l341-339a22 22 0 0 0 0-31z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="port-in-add" unicode="" d="M786 148h-54v276h54v-276z m-179 154l-353 351c-9 10-16 6-16-6v-200a23 23 0 0 0-22-23h-193a23 23 0 0 1-23-22v-231a22 22 0 0 1 2-8 281 281 0 0 0 62 149v38a11 11 0 0 0 11 11h39a281 281 0 0 0 170 57h18v88c0 7 3 8 8 4l218-217a11 11 0 0 0 0-15 281 281 0 0 0 27-60l53 52a23 23 0 0 1-1 32z m-323 66a234 234 0 1 1 234-234 234 234 0 0 1-234 234z m140-268a9 9 0 0 0-9-9h-81a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-66a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-80a9 9 0 0 0-9 9v66a9 9 0 0 0 9 9h81a9 9 0 0 1 10 9v82a9 9 0 0 0 7 8h65a9 9 0 0 0 9-9v-81a9 9 0 0 1 9-9h81a9 9 0 0 0 9-9v-66z m534 668a60 60 0 0 1-42 18h-671a63 63 0 0 1-62-63l41-40v22a40 40 0 0 0 40 40h637a40 40 0 0 0 39-40v-636a40 40 0 0 0-39-40h-354a281 281 0 0 0-31-60h463l21 21v735z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="processor-add" unicode="" d="M988 767v-761a63 63 0 0 0-19-43l-113-113 15 62h-121l-62-62 14 62h-120l-63-62 15 62h-73a285 285 0 0 1 62 69h375a42 42 0 0 1 42 42v738a42 42 0 0 1-42 42h-737a42 42 0 0 1-42-42v-396a285 285 0 0 1-68-69v99l-39-38 39 87v120l-39-39 39 88v120l-39-39 39 88 50 50a63 63 0 0 0 44 18h760a83 83 0 0 0 83-83z m-469-634a234 234 0 1 0-234 235 234 234 0 0 0 233-234z m-94 32a9 9 0 0 1-9 9h-81a9 9 0 0 0-9 9v81a9 9 0 0 1-9 9h-67a9 9 0 0 1-9-9v-81a9 9 0 0 0-9-9h-80a9 9 0 0 1-9-9v-65a9 9 0 0 1 9-9h81a9 9 0 0 0 10-9v-81a9 9 0 0 1 9-9h65a9 9 0 0 1 9 9v81a9 9 0 0 0 9 9h81a9 9 0 0 1 8 9v66z m356 381a57 57 0 0 1-10 27 299 299 0 0 1-539-160l14 2a221 221 0 0 0 223 194 263 263 0 0 0 208-107 58 58 0 0 1 104 39 242 242 0 0 0-55-316 225 225 0 0 0-137-45 242 242 0 0 0-26 0 256 256 0 0 0 0-82 297 297 0 0 1 142 58 304 304 0 0 1 122 202 256 256 0 0 1-46 188z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="lineage" unicode="" d="M785 405a214 214 0 0 1-83-17l-58 87a215 215 0 1 1-266-18l-82-184a215 215 0 1 1 72-31l82 185a210 210 0 0 1 127 8l59-90a215 215 0 1 1 149 60z m-539-438a98 98 0 1 0 98 98 98 98 0 0 0-98-98z m157 668a98 98 0 1 0 97-97 98 98 0 0 0-97 97z m382-543a98 98 0 1 0 98 98 98 98 0 0 0-98-98z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="import-from-registry-add" unicode="" d="M890 579c7 37 2 91-47 125-52 37-106 21-135 7-24 43-92 131-251 125-84-3-149-29-190-78-45-51-53-114-54-145-48-8-161-42-160-195 0-58 29-99 65-127 9 12 17 22 27 32-28 20-50 50-50 95-1 151 134 155 140 155h23l-3 22c0 0-7 77 43 134 34 39 88 61 160 64 177 7 219-115 220-120l10-27 23 17c0 0 57 40 108 5 49-35 27-98 25-100l-9-25 27-3c6 0 146-17 136-157-7-109-143-107-148-108h-121v-42h124c63 0 180 30 187 147 8 129-84 183-150 198v1z m-40-375h-179c-5 0-10 2-14 6-4 4-7 8-7 14v173c0 5-2 10-6 14-4 4-8 7-14 7h-207c-5 0-10-2-15-6-2-3-3-7-4-10 34-8 67-22 95-41h84c0 0 5-1 8-3 2-1 2-4 2-7v-101c15-32 25-67 27-103h103c6 0 8-3 4-8l-141-142c-23-41-56-76-96-101l23-23c4-3 9-5 14-5 5 0 10 2 14 5l314 316c0 0 6 8 4 10-1 3-4 4-10 4l1 1z m-506 164c-42 0-81-10-117-31-36-21-64-49-85-85-21-36-32-75-32-118 0-42 11-81 32-117 21-36 49-65 85-85 36-21 75-32 117-32 43 0 82 11 118 32 36 20 64 49 85 85 21 36 31 75 31 117 0 43-10 82-31 118-21 36-49 64-85 85-36 21-75 31-118 31z m140-268c0 0 0-5-2-7-2-1-4-2-7-2h-81c0 0-5-1-6-3-2-1-3-4-3-6v-81c0 0-1-5-2-7-2-2-5-2-7-2h-66c0 0-5 0-7 2-1 2-2 4-2 7v81c0 0 0 5-3 6-1 2-4 3-6 3h-80c0 0-5 1-7 2-2 2-2 5-2 7v66c0 0 0 5 2 7 2 1 4 2 7 2h81c0 0 5 0 6 3 2 1 4 4 4 6v82c0 5 3 7 6 8h65c0 0 5-1 7-2 2-2 2-4 2-7v-81c0 0 0-5 3-6 2-2 4-3 7-3h80c0 0 5-1 7-2 2-2 3-5 3-7v-66h1z" horiz-adv-x="1083" />
|
||||
|
||||
<glyph glyph-name="import-from-registry" unicode="" d="M913 579c6 37 1 91-47 125-53 37-107 21-136 7-23 43-92 131-251 125-84-3-148-29-190-78-45-51-52-114-53-145-48-8-162-42-160-195 1-142 159-182 242-184h28v42h-28c-10 0-200 7-201 143-1 151 134 154 140 154h22l-2 23c0 0-7 77 42 134 34 39 89 61 161 63 177 8 218-114 220-119l9-27 24 16c0 0 57 41 108 5 49-34 27-97 25-100l-9-25 26-2c6 0 146-16 137-158-7-108-143-106-148-107h-121v-42h123c64 0 180 30 188 147 8 129-84 183-150 198h1z m-246-168c0 0 6-9 6-14v-173c0-5 1-10 6-14 4-4 9-6 14-6h180c5 0 8-1 10-4 0-2 0-6-5-10l-314-316c-4-3-9-5-14-5-5 0-10 2-14 5l-314 316c0 0-5 8-4 10 0 3 4 4 10 4h179c5 0 10 3 14 7 4 4 6 9 6 14v172c0 6 1 11 6 15 4 4 9 6 15 6h206c5 0 10-3 14-7h-1z m-174-50c0 0-5-1-8-3-2-3-2-5-2-8v-192c0 0-1-6-4-8-2-2-5-3-7-3h-121c-6 0-8-3-3-8l194-195c0 0 4-2 6-2 3 0 5 0 7 2l194 195c4 5 3 8-3 8h-119c0 0-6 1-8 3-2 3-3 5-3 8v193c0 0-1 5-3 7-1 3-4 3-7 3h-113z" horiz-adv-x="1083" />
|
||||
|
||||
<glyph glyph-name="port-in" unicode="" d="M1000-10v735l-42 43a60 60 0 0 1-42 18h-671a63 63 0 0 1-62-63l41-40v22a40 40 0 0 0 40 40h637a40 40 0 0 0 39-40v-636a40 40 0 0 0-39-40h-449l-60-60h587z m-1000 412v-231a23 23 0 0 1 23-23h192a23 23 0 0 0 23-22v-200c0-13 7-15 16-7l353 351a23 23 0 0 1 0 32l-353 351c-9 10-16 6-16-6v-200a23 23 0 0 0-22-23h-193a23 23 0 0 1-23-22z m63-52a11 11 0 0 0 11 11h216a11 11 0 0 1 12 12v133c0 7 3 8 8 4l218-217a11 11 0 0 0 0-15l-218-217c-5-4-8-3-8 4v135a11 11 0 0 1-12 12h-215a11 11 0 0 0-12 11v127z m722-201h-53v275h54v-276z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="port-out" unicode="" d="M0 3v710l41 41a58 58 0 0 0 41 17h630a77 77 0 0 0 77-77v-102l-39 39v63a38 38 0 0 1-39 37h-615a38 38 0 0 1-38-37v-616a38 38 0 0 1 38-38h482v-58h-558z m653-69l341 339a22 22 0 0 1 0 31l-341 339c-9 9-16 6-16-6v-193a22 22 0 0 0-22-22h-187a22 22 0 0 1-22-22v-222a22 22 0 0 1 22-22h187a22 22 0 0 0 22-22v-193c0-13 7-16 16-7z m45 141v131a11 11 0 0 1-10 11h-208a11 11 0 0 0-11 11v122a11 11 0 0 0 11 11h208a11 11 0 0 1 10 11v130c0 6 4 7 8 3l212-209a11 11 0 0 0 0-15l-212-209c-4-3-8-3-8 3z m-467 347a127 127 0 0 1-118-134 127 127 0 0 1 118-133 127 127 0 0 1 119 133 127 127 0 0 1-119 134z m0-223a84 84 0 0 0-79 89 84 84 0 0 0 79 89 84 84 0 0 0 79-89 84 84 0 0 0-79-89z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="connect" unicode="" d="M853 703a500 500 0 1 0-753-53 31 31 0 0 0 46 2l279-279a16 16 0 0 0 0-22l-93-94a8 8 0 0 1 3-13l332-74a8 8 0 0 1 9 9l-72 334a8 8 0 0 1-13 3l-94-93a16 16 0 0 0-22 0l-278 280a31 31 0 0 0 4 47 500 500 0 0 0 652-47z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="connect-add" unicode="" d="M853 703a500 500 0 1 0-752-53 31 31 0 0 0 46 2l154-154a16 16 0 0 0 0-22l-94-94a8 8 0 0 1 4-13l333-73a8 8 0 0 1 9 10l-74 331a8 8 0 0 1-13 4l-94-94a16 16 0 0 0-22 0l-152 156a31 31 0 0 0 3 47 500 500 0 0 0 652-47z m-55-523a8 8 0 0 1 8 8v70a8 8 0 0 0 7 8h70a8 8 0 0 1 8 8v56a8 8 0 0 1-8 8h-70a8 8 0 0 0-8 8v70a8 8 0 0 1-8 8h-56a8 8 0 0 1-8-8v-70a8 8 0 0 0-8-8h-69a8 8 0 0 1-8-8v-56a8 8 0 0 1 8-8h71a8 8 0 0 0 7-8v-70a8 8 0 0 1 8-8h56z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="threads" unicode="" d="M308 350a149 149 0 1 0-149 149 149 149 0 0 0 149-149z m10 341a159 159 0 1 1-159-158 159 159 0 0 1 159 158z m-66 0a94 94 0 1 0-94 94 94 94 0 0 0 94-94z m248 149a149 149 0 1 1 149-149 149 149 0 0 1-149 149z m-182-831a159 159 0 1 1-159-159 159 159 0 0 1 159 159z m-66 0a94 94 0 1 0-94 94 94 94 0 0 0 94-94z m248 149a149 149 0 1 1 149-149 149 149 0 0 1-149 149z m341 0a149 149 0 1 1 149-149 149 149 0 0 1-149 149z m159 192a159 159 0 1 1-159-159 159 159 0 0 1 159 159z m-66 0a94 94 0 1 0-94 94 94 94 0 0 0 94-94z m66 341a159 159 0 1 1-159-158 159 159 0 0 1 159 158z m-66 0a94 94 0 1 0-94 94 94 94 0 0 0 94-94z m-434-192a149 149 0 1 1 149-149 149 149 0 0 1-149 149z" horiz-adv-x="1000" />
|
||||
|
||||
<glyph glyph-name="drop" unicode="" d="M507-38v104a8 8 0 0 0 8 8h104v-112h-112z m0-111a333 333 0 0 1 112 21v56h-104a8 8 0 0 1-8-8v-70z m237 236v112h-103a8 8 0 0 1-8-8v-103h111z m14-139a23 23 0 0 1 6 17v89h-111v-112h88a23 23 0 0 1 17 7z m-98-98a334 334 0 0 1 83 51h-83v-51z m174 238a332 332 0 0 1 22 111h-78v-111h56z m-28-126a333 333 0 0 1 50 83h-50v-83z m0 0a333 333 0 0 1 50 83h-50v-83z m21 258h-209a8 8 0 0 1-8-8v-117h-117a8 8 0 0 1-8-8v-209a342 342 0 0 0-341 343c0 162 127 318 214 432a1279 1279 0 0 1 125 195 4 4 0 0 0 7 0 1279 1279 0 0 1 125-195c85-114 212-270 212-432z m-489 326l-28 5a1143 1143 0 0 1-80-123 406 406 0 0 1-59-255 320 320 0 0 1 107-192 314 314 0 0 1 39-29 4 4 0 0 1 5 7 344 344 0 0 0-94 156 435 435 0 0 0 31 279 1210 1210 0 0 0 68 136z m72 138l-19-26c-20-28-41-55-62-82l24-3c18 29 36 58 53 86l14 25c3 7-6 6-10 0z" horiz-adv-x="1000" />
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 139 B |
Before Width: | Height: | Size: 573 B |
Before Width: | Height: | Size: 555 B |
Before Width: | Height: | Size: 414 B |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 117 B |
Before Width: | Height: | Size: 224 B |
Before Width: | Height: | Size: 59 B |
Before Width: | Height: | Size: 59 B |
|
@ -1,19 +0,0 @@
|
|||
Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
|
@ -1,38 +0,0 @@
|
|||
.CodeMirror-hints {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
|
||||
margin: 0;
|
||||
padding: 2px;
|
||||
|
||||
-webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
|
||||
-moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);
|
||||
box-shadow: 2px 3px 5px rgba(0,0,0,.2);
|
||||
border-radius: 3px;
|
||||
border: 1px solid silver;
|
||||
|
||||
background: white;
|
||||
font-size: 90%;
|
||||
font-family: monospace;
|
||||
|
||||
max-height: 20em;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.CodeMirror-hint {
|
||||
margin: 0;
|
||||
padding: 0 4px;
|
||||
border-radius: 2px;
|
||||
max-width: 19em;
|
||||
overflow: hidden;
|
||||
white-space: pre;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
li.CodeMirror-hint-active {
|
||||
background: #08f;
|
||||
color: white;
|
||||
}
|
|
@ -1,318 +0,0 @@
|
|||
/* BASICS */
|
||||
|
||||
.CodeMirror {
|
||||
/* Set height, width, borders, and global font properties here */
|
||||
font-family: monospace;
|
||||
height: 300px;
|
||||
}
|
||||
.CodeMirror-scroll {
|
||||
/* Set scrolling behaviour here */
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* PADDING */
|
||||
|
||||
.CodeMirror-lines {
|
||||
padding: 4px 0; /* Vertical padding around content */
|
||||
}
|
||||
.CodeMirror pre {
|
||||
padding: 0 4px; /* Horizontal padding of content */
|
||||
}
|
||||
|
||||
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||||
background-color: white; /* The little square between H and V scrollbars */
|
||||
}
|
||||
|
||||
/* GUTTER */
|
||||
|
||||
.CodeMirror-gutters {
|
||||
border-right: 1px solid #ddd;
|
||||
background-color: #f7f7f7;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.CodeMirror-linenumbers {}
|
||||
.CodeMirror-linenumber {
|
||||
padding: 0 3px 0 5px;
|
||||
min-width: 20px;
|
||||
text-align: right;
|
||||
color: #999;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.CodeMirror-guttermarker { color: black; }
|
||||
.CodeMirror-guttermarker-subtle { color: #999; }
|
||||
|
||||
/* CURSOR */
|
||||
|
||||
.CodeMirror div.CodeMirror-cursor {
|
||||
border-left: 1px solid black;
|
||||
}
|
||||
/* Shown when moving in bi-directional text */
|
||||
.CodeMirror div.CodeMirror-secondarycursor {
|
||||
border-left: 1px solid silver;
|
||||
}
|
||||
.CodeMirror.cm-fat-cursor div.CodeMirror-cursor {
|
||||
width: auto;
|
||||
border: 0;
|
||||
background: #7e7;
|
||||
}
|
||||
.CodeMirror.cm-fat-cursor div.CodeMirror-cursors {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.cm-animate-fat-cursor {
|
||||
width: auto;
|
||||
border: 0;
|
||||
-webkit-animation: blink 1.06s steps(1) infinite;
|
||||
-moz-animation: blink 1.06s steps(1) infinite;
|
||||
animation: blink 1.06s steps(1) infinite;
|
||||
}
|
||||
@-moz-keyframes blink {
|
||||
0% { background: #7e7; }
|
||||
50% { background: none; }
|
||||
100% { background: #7e7; }
|
||||
}
|
||||
@-webkit-keyframes blink {
|
||||
0% { background: #7e7; }
|
||||
50% { background: none; }
|
||||
100% { background: #7e7; }
|
||||
}
|
||||
@keyframes blink {
|
||||
0% { background: #7e7; }
|
||||
50% { background: none; }
|
||||
100% { background: #7e7; }
|
||||
}
|
||||
|
||||
/* Can style cursor different in overwrite (non-insert) mode */
|
||||
div.CodeMirror-overwrite div.CodeMirror-cursor {}
|
||||
|
||||
.cm-tab { display: inline-block; text-decoration: inherit; }
|
||||
|
||||
.CodeMirror-ruler {
|
||||
border-left: 1px solid #ccc;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
/* DEFAULT THEME */
|
||||
|
||||
.cm-s-default .cm-keyword {color: #708;}
|
||||
.cm-s-default .cm-atom {color: #219;}
|
||||
.cm-s-default .cm-number {color: #164;}
|
||||
.cm-s-default .cm-def {color: #00f;}
|
||||
.cm-s-default .cm-variable,
|
||||
.cm-s-default .cm-punctuation,
|
||||
.cm-s-default .cm-property,
|
||||
.cm-s-default .cm-operator {}
|
||||
.cm-s-default .cm-variable-2 {color: #05a;}
|
||||
.cm-s-default .cm-variable-3 {color: #085;}
|
||||
.cm-s-default .cm-comment {color: #a50;}
|
||||
.cm-s-default .cm-string {color: #a11;}
|
||||
.cm-s-default .cm-string-2 {color: #f50;}
|
||||
.cm-s-default .cm-meta {color: #555;}
|
||||
.cm-s-default .cm-qualifier {color: #555;}
|
||||
.cm-s-default .cm-builtin {color: #30a;}
|
||||
.cm-s-default .cm-bracket {color: #997;}
|
||||
.cm-s-default .cm-tag {color: #170;}
|
||||
.cm-s-default .cm-attribute {color: #00c;}
|
||||
.cm-s-default .cm-header {color: blue;}
|
||||
.cm-s-default .cm-quote {color: #090;}
|
||||
.cm-s-default .cm-hr {color: #999;}
|
||||
.cm-s-default .cm-link {color: #00c;}
|
||||
|
||||
.cm-negative {color: #d44;}
|
||||
.cm-positive {color: #292;}
|
||||
.cm-header, .cm-strong {font-weight: bold;}
|
||||
.cm-em {font-style: italic;}
|
||||
.cm-link {text-decoration: underline;}
|
||||
.cm-strikethrough {text-decoration: line-through;}
|
||||
|
||||
.cm-s-default .cm-error {color: #f00;}
|
||||
.cm-invalidchar {color: #f00;}
|
||||
|
||||
/* Default styles for common addons */
|
||||
|
||||
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
|
||||
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
|
||||
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
|
||||
.CodeMirror-activeline-background {background: #e8f2ff;}
|
||||
|
||||
/* STOP */
|
||||
|
||||
/* The rest of this file contains styles related to the mechanics of
|
||||
the editor. You probably shouldn't touch them. */
|
||||
|
||||
.CodeMirror {
|
||||
line-height: 1;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
background: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.CodeMirror-scroll {
|
||||
/* 30px is the magic margin used to hide the element's real scrollbars */
|
||||
/* See overflow: hidden in .CodeMirror */
|
||||
margin-bottom: -30px; margin-right: -30px;
|
||||
padding-bottom: 30px;
|
||||
height: 100%;
|
||||
outline: none; /* Prevent dragging from highlighting the element */
|
||||
position: relative;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.CodeMirror-sizer {
|
||||
position: relative;
|
||||
border-right: 30px solid transparent;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/* The fake, visible scrollbars. Used to force redraw during scrolling
|
||||
before actuall scrolling happens, thus preventing shaking and
|
||||
flickering artifacts. */
|
||||
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
||||
position: absolute;
|
||||
z-index: 6;
|
||||
display: none;
|
||||
}
|
||||
.CodeMirror-vscrollbar {
|
||||
right: 0; top: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
.CodeMirror-hscrollbar {
|
||||
bottom: 0; left: 0;
|
||||
overflow-y: hidden;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
.CodeMirror-scrollbar-filler {
|
||||
right: 0; bottom: 0;
|
||||
}
|
||||
.CodeMirror-gutter-filler {
|
||||
left: 0; bottom: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-gutters {
|
||||
position: absolute; left: 0; top: 0;
|
||||
padding-bottom: 30px;
|
||||
z-index: 3;
|
||||
}
|
||||
.CodeMirror-gutter {
|
||||
white-space: normal;
|
||||
height: 100%;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
padding-bottom: 30px;
|
||||
margin-bottom: -32px;
|
||||
display: inline-block;
|
||||
/* Hack to make IE7 behave */
|
||||
*zoom:1;
|
||||
*display:inline;
|
||||
}
|
||||
.CodeMirror-gutter-wrapper {
|
||||
position: absolute;
|
||||
z-index: 4;
|
||||
height: 100%;
|
||||
}
|
||||
.CodeMirror-gutter-elt {
|
||||
position: absolute;
|
||||
cursor: default;
|
||||
z-index: 4;
|
||||
}
|
||||
|
||||
.CodeMirror-lines {
|
||||
cursor: text;
|
||||
min-height: 1px; /* prevents collapsing before first draw */
|
||||
}
|
||||
.CodeMirror pre {
|
||||
/* Reset some styles that the rest of the page might have set */
|
||||
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
|
||||
border-width: 0;
|
||||
background: transparent;
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
margin: 0;
|
||||
white-space: pre;
|
||||
word-wrap: normal;
|
||||
line-height: inherit;
|
||||
color: inherit;
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
}
|
||||
.CodeMirror-wrap pre {
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
word-break: normal;
|
||||
}
|
||||
|
||||
.CodeMirror-linebackground {
|
||||
position: absolute;
|
||||
left: 0; right: 0; top: 0; bottom: 0;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
.CodeMirror-linewidget {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.CodeMirror-widget {}
|
||||
|
||||
.CodeMirror-wrap .CodeMirror-scroll {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.CodeMirror-measure {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
}
|
||||
.CodeMirror-measure pre { position: static; }
|
||||
|
||||
.CodeMirror div.CodeMirror-cursor {
|
||||
position: absolute;
|
||||
border-right: none;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
div.CodeMirror-cursors {
|
||||
visibility: hidden;
|
||||
position: relative;
|
||||
z-index: 3;
|
||||
}
|
||||
.CodeMirror-focused div.CodeMirror-cursors {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.CodeMirror-selected { background: #d9d9d9; }
|
||||
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
|
||||
.CodeMirror-crosshair { cursor: crosshair; }
|
||||
|
||||
.cm-searching {
|
||||
background: #ffa;
|
||||
background: rgba(255, 255, 0, .4);
|
||||
}
|
||||
|
||||
/* IE7 hack to prevent it from returning funny offsetTops on the spans */
|
||||
.CodeMirror span { *vertical-align: text-bottom; }
|
||||
|
||||
/* Used to force a border model for a node */
|
||||
.cm-force-border { padding-right: .1px; }
|
||||
|
||||
@media print {
|
||||
/* Hide the cursor when printing */
|
||||
.CodeMirror div.CodeMirror-cursors {
|
||||
visibility: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
/* See issue #2901 */
|
||||
.cm-tab-wrap-hack:after { content: ''; }
|
||||
|
||||
/* Help users use markselection to safely style text background */
|
||||
span.CodeMirror-selectedtext { background: none; }
|
|
@ -1,118 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
Styles for the Nifi combo box.
|
||||
*/
|
||||
|
||||
.combo {
|
||||
color: #262626;
|
||||
font-family: Roboto, sans-serif;
|
||||
font-size: 13px;
|
||||
padding:0 10px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
border: 1px solid #eaeef0;
|
||||
}
|
||||
|
||||
.combo-options {
|
||||
background: #fefefe;
|
||||
color: #262626;
|
||||
list-style: none;
|
||||
border: 1px solid #004849;
|
||||
box-shadow:0 3px 6px rgba(0,0,0,0.3);
|
||||
z-index: 2000;
|
||||
border-top: none;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.combo-options .fa {
|
||||
color: #004849;
|
||||
}
|
||||
|
||||
.combo-open {
|
||||
background: #fff !important;
|
||||
border: 1px solid #004849 !important;
|
||||
border-bottom: 1px solid #fff !important;
|
||||
font-weight: bold;
|
||||
color: #262626;
|
||||
box-shadow:0 3px 6px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.combo .combo-arrow {
|
||||
float: right;
|
||||
width: 10px;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.combo .combo-text {
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
width: calc(100% - 15px);
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
div.selected-disabled-option {
|
||||
font-style: italic;
|
||||
color: #828282;
|
||||
}
|
||||
|
||||
.combo-options ul > li {
|
||||
height: 32px;
|
||||
padding: 0px 10px;
|
||||
}
|
||||
|
||||
.combo-options ul > li.disabled-option {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.combo-option-text {
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
float: left;
|
||||
height: 32px;
|
||||
font-weight: normal;
|
||||
line-height: 32px;
|
||||
width: calc(100% - 15px);
|
||||
}
|
||||
|
||||
.combo-option-special {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.combo-glass-pane {
|
||||
position: absolute;
|
||||
background: #E3E8EB;
|
||||
opacity: 0.0;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
z-index: 1999;
|
||||
}
|
||||
|
||||
div.combo-nifi-tooltip {
|
||||
border: 1px solid #454545;
|
||||
background-color: #FFFFA3;
|
||||
color: #454545;
|
||||
}
|
||||
|
||||
div.combo-button-normal {
|
||||
background-color: #eaeef0;
|
||||
}
|
|
@ -1,369 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* requires qtip plugin to be loaded first*/
|
||||
|
||||
/**
|
||||
* Create a new combo box. The options are specified in the following
|
||||
* format:
|
||||
*
|
||||
* {
|
||||
* selectedOption: {
|
||||
* value: 'option 2'
|
||||
* },
|
||||
* options: [{
|
||||
* text: 'option 1',
|
||||
* value: 'option 1',
|
||||
* disabled: true,
|
||||
* description: 'Option description...'
|
||||
* }, {
|
||||
* text: 'option 2',
|
||||
* value: 'option 2',
|
||||
* optionClass: 'my-style'
|
||||
* }],
|
||||
* maxHeight: 300,
|
||||
* select: selectHandler
|
||||
* }
|
||||
*
|
||||
* Options have a label (specified as the text property that is rendered
|
||||
* to users) and a value which is not. Additionally, options can be marked
|
||||
* as disabled. A disabled option cannot be selected by a user but may be
|
||||
* programmatically selected (supporting the restoration of options that have
|
||||
* become invalid). It is up to the developer to ensure that the selected
|
||||
* option is not disabled.
|
||||
*
|
||||
* The optionClass option supports specifying a class to apply to the
|
||||
* option element.
|
||||
*/
|
||||
|
||||
/**
|
||||
* jQuery plugin for a NiFi style combo box.
|
||||
*
|
||||
* @param {type} $
|
||||
* @returns {undefined}
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
var isUndefined = function (obj) {
|
||||
return typeof obj === 'undefined';
|
||||
};
|
||||
|
||||
var isNull = function (obj) {
|
||||
return obj === null;
|
||||
};
|
||||
|
||||
var isDefinedAndNotNull = function (obj) {
|
||||
return !isUndefined(obj) && !isNull(obj);
|
||||
};
|
||||
|
||||
var isBlank = function (str) {
|
||||
return isUndefined(str) || isNull(str) || str === '';
|
||||
};
|
||||
|
||||
var selectOption = function (combo, text, value) {
|
||||
var config = combo.data('options');
|
||||
var comboText = combo.children('div.combo-text');
|
||||
var selectedOption;
|
||||
|
||||
// attempt to match on value first
|
||||
$.each(config.options, function (i, option) {
|
||||
if (value === option.value) {
|
||||
selectedOption = option;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// if no option values matched, try the text
|
||||
if (isUndefined(selectedOption)) {
|
||||
$.each(config.options, function (i, option) {
|
||||
if (isUndefined(selectedOption)) {
|
||||
selectedOption = option;
|
||||
}
|
||||
|
||||
if (text === option.text) {
|
||||
selectedOption = option;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ensure we found the selected option
|
||||
if (isDefinedAndNotNull(selectedOption)) {
|
||||
comboText.removeClass('selected-disabled-option').attr('title', selectedOption.text).text(selectedOption.text).data('text', selectedOption.text);
|
||||
|
||||
// if the selected option is disabled show it
|
||||
if (selectedOption.disabled === true) {
|
||||
comboText.addClass('selected-disabled-option');
|
||||
}
|
||||
|
||||
// store the selected option
|
||||
combo.data('selected-option', selectedOption);
|
||||
|
||||
// fire a select event if applicable
|
||||
if (isDefinedAndNotNull(config.select)) {
|
||||
config.select.call(combo, selectedOption);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var methods = {
|
||||
|
||||
/**
|
||||
* Initializes the combo box.
|
||||
*
|
||||
* @argument {object} options The options for the combo box
|
||||
*/
|
||||
init: function (options) {
|
||||
return this.each(function () {
|
||||
// ensure the options have been properly specified
|
||||
if (isDefinedAndNotNull(options) &&
|
||||
isDefinedAndNotNull(options.options)) {
|
||||
|
||||
// get the combo
|
||||
var combo = $(this);
|
||||
|
||||
// clear any current contents, remote events, and store options
|
||||
combo.empty().unbind().data('options', options);
|
||||
|
||||
// add a div to hold the text
|
||||
$('<div class="combo-text"></div>').appendTo(combo);
|
||||
|
||||
// add hover effect and handle a combo click
|
||||
combo.addClass('combo-button-normal pointer combo').hover(function () {
|
||||
combo.removeClass('button-normal').addClass('combo-button-over');
|
||||
}, function () {
|
||||
combo.removeClass('button-over').addClass('combo-button-normal');
|
||||
}).click(function (event) {
|
||||
var comboConfigOptions = combo.data('options');
|
||||
|
||||
//add active styles
|
||||
$(this).addClass('combo-open');
|
||||
|
||||
// determine the position of the element in question
|
||||
var position = combo.offset();
|
||||
|
||||
// create the combo box options beneath it
|
||||
var comboOptions = $('<div></div>').addClass('combo-options').css({
|
||||
'position': 'absolute',
|
||||
'left': position.left + 'px',
|
||||
'top': (position.top + Math.round(combo.outerHeight()) - 1) + 'px',
|
||||
'width': (Math.round(combo.outerWidth()) - 2) + 'px',
|
||||
'overflow-y': 'auto'
|
||||
});
|
||||
|
||||
// keep track of the overall height
|
||||
var actualHeight = 0;
|
||||
|
||||
// set the max height if necessary
|
||||
var maxHeight = -1;
|
||||
if (isDefinedAndNotNull(comboConfigOptions.maxHeight)) {
|
||||
maxHeight = parseInt(comboConfigOptions.maxHeight);
|
||||
if (maxHeight > 0) {
|
||||
comboOptions.css('max-height', maxHeight + 'px');
|
||||
}
|
||||
} else {
|
||||
var windowHeight = $(window).height();
|
||||
maxHeight = windowHeight - (position.top + Math.round(combo.outerHeight())) - 32;
|
||||
comboOptions.css('max-height', maxHeight + 'px');
|
||||
}
|
||||
|
||||
// create the list that will contain the options
|
||||
var optionList = $('<ul></ul>').appendTo(comboOptions);
|
||||
|
||||
// process the options
|
||||
$.each(comboConfigOptions.options, function (i, option) {
|
||||
var optionText = $('<span class="combo-option-text"></span>').attr('title', option.text).text(option.text);
|
||||
var optionValue = $('<span class="hidden"></span>').text(option.value);
|
||||
|
||||
// create each option
|
||||
var optionElement = $('<li></li>').addClass(option.optionClass).append(optionText).append(optionValue).appendTo(optionList);
|
||||
|
||||
// this is option is enabled register appropriate listeners
|
||||
if (option.disabled === true) {
|
||||
optionElement.addClass('unset disabled-option');
|
||||
} else {
|
||||
optionElement.click(function () {
|
||||
//remove active styles
|
||||
$('.combo').removeClass('combo-open');
|
||||
|
||||
// select the option
|
||||
selectOption(combo, option.text, option.value);
|
||||
|
||||
// click the glass pane which will hide the options
|
||||
$('.combo-glass-pane').click();
|
||||
}).hover(function () {
|
||||
$(this).addClass('pointer').css('background', '#eaeef0');
|
||||
}, function () {
|
||||
$(this).removeClass('pointer').css('background', '#ffffff');
|
||||
});
|
||||
}
|
||||
|
||||
if (!isBlank(option.description)) {
|
||||
$('<div style="float: right; line-height: 32px;" class="fa fa-question-circle"></div>').appendTo(optionElement).qtip({
|
||||
content: option.description,
|
||||
position: {
|
||||
at: 'top center',
|
||||
my: 'bottom center',
|
||||
adjust: {
|
||||
y: 5
|
||||
}
|
||||
},
|
||||
style: {
|
||||
classes: 'nifi-tooltip'
|
||||
},
|
||||
show: {
|
||||
solo: true,
|
||||
effect: function(offset) {
|
||||
$(this).slideDown(100);
|
||||
}
|
||||
},
|
||||
hide: {
|
||||
effect: function(offset) {
|
||||
$(this).slideUp(100);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
} else {
|
||||
optionText.css('width', '100%');
|
||||
}
|
||||
|
||||
actualHeight += 16;
|
||||
});
|
||||
|
||||
// show the glass pane to catch the click events
|
||||
var comboGlassPane = $('<div class="combo-glass-pane"></div>').one('click', function () {
|
||||
if (comboOptions.length !== 0) {
|
||||
// clean up tooltips
|
||||
comboOptions.find('.fa').each(function () {
|
||||
var tip = $(this);
|
||||
if (tip.data('qtip')) {
|
||||
var api = tip.qtip('api');
|
||||
api.destroy(true);
|
||||
}
|
||||
});
|
||||
// remove the options
|
||||
comboOptions.remove();
|
||||
|
||||
//remove active styles
|
||||
$('.combo').removeClass('combo-open');
|
||||
}
|
||||
|
||||
// remove the glass pane
|
||||
$(this).remove();
|
||||
});
|
||||
|
||||
// add the combo to the dom
|
||||
$('body').append(comboOptions).append(comboGlassPane);
|
||||
|
||||
// stop the event propagation so the body click event isn't fired
|
||||
event.stopPropagation();
|
||||
});
|
||||
|
||||
// add the drop down arrow
|
||||
$('<div class="combo-arrow fa fa-chevron-down"></div>').appendTo(combo);
|
||||
|
||||
// get the first option
|
||||
var firstOption = null;
|
||||
if (options.options.length > 0) {
|
||||
firstOption = options.options[0];
|
||||
}
|
||||
|
||||
// set the selection
|
||||
if (isDefinedAndNotNull(options.selectedOption)) {
|
||||
selectOption(combo, options.selectedOption.text, options.selectedOption.value);
|
||||
} else if (isNull(firstOption)) {
|
||||
selectOption(combo);
|
||||
} else {
|
||||
selectOption(combo, firstOption.text, firstOption.value);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the selected option of the first matching element.
|
||||
*/
|
||||
getSelectedOption: function () {
|
||||
var value;
|
||||
|
||||
this.each(function () {
|
||||
value = $(this).data('selected-option');
|
||||
return false;
|
||||
});
|
||||
|
||||
return value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the selected option.
|
||||
*
|
||||
* @argument {object} option The option to select
|
||||
*/
|
||||
setSelectedOption: function (option) {
|
||||
return this.each(function () {
|
||||
selectOption($(this), option.text, option.value);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets whether the specified option is enabled or disabled.
|
||||
*
|
||||
* @param option
|
||||
* @param enabled
|
||||
*/
|
||||
setOptionEnabled: function (option, enabled) {
|
||||
return this.each(function () {
|
||||
var combo = $(this);
|
||||
var comboConfigOptions = combo.data('options');
|
||||
|
||||
$.each(comboConfigOptions.options, function (i, configOption) {
|
||||
if (configOption.value === option.value) {
|
||||
configOption.disabled = !enabled;
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Destroys the combo.
|
||||
*/
|
||||
destroy: function () {
|
||||
return this.each(function () {
|
||||
$(this).empty().unbind().removeData();
|
||||
|
||||
// remove the options if open
|
||||
$('div.combo-glass-pane').click();
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Closes the combo.
|
||||
*/
|
||||
close: function () {
|
||||
$('div.combo-glass-pane').click();
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.combo = function (method) {
|
||||
if (methods[method]) {
|
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
} else {
|
||||
return methods.init.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
Before Width: | Height: | Size: 251 B |
Before Width: | Height: | Size: 233 B |
|
@ -1,165 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Plugin to provide support for generating ellipsis. This plugin comprises
|
||||
* a number of suggested techniques found on StackOverflow.
|
||||
*
|
||||
* @param {type} $
|
||||
* @returns {undefined}
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
var entityMap = {
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'"': '"',
|
||||
"'": ''',
|
||||
'/': '/'
|
||||
};
|
||||
|
||||
var escapeHtml = function (string) {
|
||||
return String(string).replace(/[&<>"'\/]/g, function (s) {
|
||||
return entityMap[s];
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Inserts ellipsis in elements where the contents exceed the width. The
|
||||
* original text is preserved in the title attribute of the element. The
|
||||
* element should have the following css properties:
|
||||
*
|
||||
* overflow: hidden;
|
||||
* white-space: nowrap;
|
||||
* width: 50px (value must be set in 'px')
|
||||
*
|
||||
* If multiline is desired, add a 'multiline' class to the element.
|
||||
*
|
||||
* @param {type} addTooltip
|
||||
*/
|
||||
$.fn.ellipsis = function (addTooltip) {
|
||||
addTooltip = (typeof addTooltip === 'undefined' || addTooltip === null) ? true : addTooltip;
|
||||
|
||||
// function for determining if the browser supports ellipsis via css
|
||||
function supportsOverflowProperty() {
|
||||
var s = document.documentElement.style;
|
||||
return ('textOverflow' in s || 'OTextOverflow' in s);
|
||||
}
|
||||
|
||||
function binarySearch(length, funct) {
|
||||
var low = 0;
|
||||
var high = length - 1;
|
||||
var best = -1;
|
||||
var mid;
|
||||
|
||||
while (low <= high) {
|
||||
mid = ~~((low + high) / 2);
|
||||
var result = funct(mid);
|
||||
if (result < 0) {
|
||||
high = mid - 1;
|
||||
} else if (result > 0) {
|
||||
low = mid + 1;
|
||||
} else {
|
||||
best = mid;
|
||||
low = mid + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return best;
|
||||
}
|
||||
|
||||
// chain and process each matched element
|
||||
return this.each(function () {
|
||||
var element = $(this);
|
||||
|
||||
// preserve the original text in the title attribute
|
||||
var text = element.text();
|
||||
if (addTooltip) {
|
||||
element.attr('title', text);
|
||||
}
|
||||
|
||||
// determine if this is a multiline element
|
||||
var multiline = element.hasClass('multiline');
|
||||
|
||||
// if its not multiline and the browser supports ellipsis via css, use it
|
||||
if (!multiline && supportsOverflowProperty()) {
|
||||
element.css({
|
||||
'text-overflow': 'ellipsis',
|
||||
'o-text-overflow': 'ellipsis'
|
||||
});
|
||||
} else {
|
||||
// clone the element and add to the body - this addresses issues where
|
||||
// the element may not have been added to the dom (causing its size and
|
||||
// styles to be incorrect)
|
||||
var cloneElement = $(this.cloneNode(true)).hide().appendTo('body');
|
||||
|
||||
// make a scratch element to adjusting the text size
|
||||
var scratchElement = $(this.cloneNode(true)).hide().css({
|
||||
'position': 'absolute',
|
||||
'overflow': 'visible'
|
||||
}).width(multiline ? cloneElement.width() : 'auto').height(multiline ? 'auto' : cloneElement.height()).appendTo('body');
|
||||
|
||||
// function for determining if the scratch element is too tall
|
||||
var isTooTall = function () {
|
||||
return scratchElement.height() >= cloneElement.height();
|
||||
};
|
||||
|
||||
// function for determining if the scratch element is too wide
|
||||
var isTooWide = function () {
|
||||
return scratchElement.width() >= cloneElement.width();
|
||||
};
|
||||
|
||||
// determine the appropriate function to use
|
||||
var isTooBig = multiline ? isTooTall : isTooWide;
|
||||
|
||||
// if the text is too big, adjust it accordingly
|
||||
if (isTooBig()) {
|
||||
var originalText = escapeHtml(text);
|
||||
|
||||
// function for creating the text within the scratch element
|
||||
var createContent = function (i) {
|
||||
var t = originalText.substr(0, i);
|
||||
scratchElement.html(t + '…');
|
||||
};
|
||||
|
||||
// function for performing the search
|
||||
var search = function (i) {
|
||||
createContent(i);
|
||||
if (isTooBig()) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
// determine the appropriate length
|
||||
var length = binarySearch(originalText.length - 1, search);
|
||||
|
||||
// create the content at the appropriate length
|
||||
createContent(length);
|
||||
}
|
||||
|
||||
// update the actual elements value
|
||||
element.html(scratchElement.html());
|
||||
|
||||
// remove the cloned and scratch elements
|
||||
cloneElement.remove();
|
||||
scratchElement.remove();
|
||||
}
|
||||
});
|
||||
};
|
||||
})(jQuery);
|
|
@ -1,69 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/**
|
||||
* Plugin to support entering tab characters into textarea's or textfield's.
|
||||
* Code heavily borrowed from stackoverflow post by user tim-down
|
||||
* (http://stackoverflow.com/questions/4379535/tab-within-a-text-area-without-changing-focus-jquery/4380032#4380032)
|
||||
*/
|
||||
(function ($) {
|
||||
/**
|
||||
* Adds key listeners for capturing tab keys.
|
||||
*/
|
||||
function allowTabChar(element) {
|
||||
$(element).keydown(function (e) {
|
||||
if (e.which == 9) {
|
||||
if (e.shiftKey == false && e.ctrlKey == false) {
|
||||
insertText(this, '\t');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}).keypress(function (e) {
|
||||
if (e.which == 9) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts the specified text into the specified element.
|
||||
*/
|
||||
function insertText(element, text) {
|
||||
element.focus();
|
||||
if (typeof element.selectionStart == 'number') {
|
||||
var value = element.value;
|
||||
var selectionStart = element.selectionStart;
|
||||
element.value = value.slice(0, selectionStart) + text + value.slice(element.selectionEnd);
|
||||
element.selectionEnd = element.selectionStart = selectionStart + text.length;
|
||||
} else if (typeof document.selection != 'undefined') {
|
||||
var textRange = document.selection.createRange();
|
||||
textRange.text = text;
|
||||
textRange.collapse(false);
|
||||
textRange.select();
|
||||
}
|
||||
}
|
||||
|
||||
$.fn.tab = function () {
|
||||
return this.each(function () {
|
||||
if (this.nodeType == 1) {
|
||||
var nodeName = this.nodeName.toLowerCase();
|
||||
if (nodeName == 'textarea' || (nodeName == 'input' && this.type == 'text')) {
|
||||
allowTabChar(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
})(jQuery);
|
|
@ -1,111 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
Styles for the Nifi dialog.
|
||||
*/
|
||||
|
||||
.dialog {
|
||||
background-color: #ffffff;
|
||||
box-shadow: 0 5px 8px rgba(0,0,0,0.30);
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
.small-dialog {
|
||||
max-height: 32%;
|
||||
max-width: 23%;
|
||||
min-height: 250px;
|
||||
min-width: 320px;
|
||||
font-size: 13px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.medium-dialog {
|
||||
max-height: 55%;
|
||||
max-width: 34%;
|
||||
min-height: 420px;
|
||||
min-width: 470px;
|
||||
}
|
||||
|
||||
.medium-short-dialog {
|
||||
max-height: 32%;
|
||||
max-width: 34%;
|
||||
min-height: 250px;
|
||||
min-width: 440px;
|
||||
font-size: 13px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.large-dialog {
|
||||
max-height: 72%;
|
||||
max-width: 55%;
|
||||
min-height: 560px;
|
||||
min-width: 760px;
|
||||
}
|
||||
|
||||
.modal-glass {
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
opacity: 0.65;
|
||||
}
|
||||
|
||||
.dialog-header {
|
||||
height: 56px;
|
||||
background-color: #728E9B;
|
||||
overflow: hidden;
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
font-family: 'Roboto Slab';
|
||||
font-style: normal;
|
||||
font-weight: bold;
|
||||
text-overflow: ellipsis;
|
||||
line-height: 56px;
|
||||
padding: 0 20px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dialog-header-subtitle {
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
padding-left: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.dialog-header-subtitle:not(:empty) {
|
||||
border-left: 1px solid white;
|
||||
}
|
||||
|
||||
.dialog-content {
|
||||
position: absolute;
|
||||
top: 76px;
|
||||
bottom: 52px;
|
||||
left: 20px;
|
||||
right: 20px;
|
||||
overflow-y: auto;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.dialog-buttons {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 32px;
|
||||
}
|
|
@ -1,588 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create a new dialog.
|
||||
*
|
||||
* If the height, width, and fullscreen breakpoints options are not set this plugin will look for (and use)
|
||||
* any CSS defined styles for height, min/max-height, width, min/max-width. If no CSS styles are defined then the
|
||||
* plugin will attempt to calculate these values when the dialog is first opened (based on screen size).
|
||||
*
|
||||
* The options are specified in the following format:
|
||||
*
|
||||
* {
|
||||
* header: true,
|
||||
* footer: true,
|
||||
* headerText: 'Dialog Header',
|
||||
* subtitleText: 'Dialog subtitle',
|
||||
* scrollableContentStyle: 'scrollable',
|
||||
* buttons: [{
|
||||
* buttonText: 'Cancel',
|
||||
* color: {
|
||||
* base: '#728E9B',
|
||||
* hover: '#004849',
|
||||
* text: '#ffffff'
|
||||
* },
|
||||
* disabled: isDisabledFunction,
|
||||
* handler: {
|
||||
* click: cancelHandler
|
||||
* }
|
||||
* }, {
|
||||
* buttonText: 'Apply',
|
||||
* color: {
|
||||
* base: '#E3E8EB',
|
||||
* hover: '#C7D2D7',
|
||||
* text: '#004849'
|
||||
* },
|
||||
* disabled: isDisabledFunction,
|
||||
* handler: {
|
||||
* click: applyHandler
|
||||
* }
|
||||
* }],
|
||||
* handler: {
|
||||
* close: closeHandler,
|
||||
* open: openHandler,
|
||||
* resize: resizeHandler
|
||||
* },
|
||||
* height: "55%", //optional. Property can also be set with css (accepts 'px' or '%' values)
|
||||
* width: "34%", //optional. Property can also be set with css (accepts 'px' or '%' values)
|
||||
* min-height: "420px", //optional, defaults to 'height'. Property can also be set with css (accepts 'px' values)
|
||||
* min-width: "470px" //optional, defaults to 'width'. Property can also be set with css (accepts 'px' values)
|
||||
* responsive: {
|
||||
* x: "true", //optional, default true
|
||||
* y: "true", //optional, default true
|
||||
* fullscreen-height: "420px", //optional, default is original dialog height (accepts 'px' values)
|
||||
* fullscreen-width: "470px", //optional, default is original dialog width (accepts 'px' values)
|
||||
* },
|
||||
* glasspane: "#728E9B" //optional, sets the color of modal glasspane...default if unset is the dialog header color
|
||||
* }
|
||||
*
|
||||
* The content of the dialog MUST be contained in an element with the class `dialog-content`
|
||||
* directly under the dialog element.
|
||||
*
|
||||
* <div id="dialogId">
|
||||
* <div class="dialog-content">
|
||||
* //Dialog Content....
|
||||
* </div>
|
||||
* </div>
|
||||
*
|
||||
* @argument {jQuery} $
|
||||
*/
|
||||
(function ($) {
|
||||
|
||||
var isUndefined = function (obj) {
|
||||
return typeof obj === 'undefined';
|
||||
};
|
||||
|
||||
var isNull = function (obj) {
|
||||
return obj === null;
|
||||
};
|
||||
|
||||
var isDefinedAndNotNull = function (obj) {
|
||||
return !isUndefined(obj) && !isNull(obj);
|
||||
};
|
||||
|
||||
var isBlank = function (str) {
|
||||
return isUndefined(str) || isNull(str) || str === '';
|
||||
};
|
||||
|
||||
// private function for adding buttons
|
||||
var addButtons = function (dialog, buttonModel) {
|
||||
if (isDefinedAndNotNull(buttonModel)) {
|
||||
var buttonWrapper = $('<div class="dialog-buttons"></div>');
|
||||
$.each(buttonModel, function (i, buttonConfig) {
|
||||
var isDisabled = function () {
|
||||
return typeof buttonConfig.disabled === 'function' && buttonConfig.disabled.call() === true;
|
||||
};
|
||||
|
||||
// create the button
|
||||
var button = $('<div class="button"></div>').append($('<span></span>').text(buttonConfig.buttonText));
|
||||
|
||||
// add the class if specified
|
||||
if (isDefinedAndNotNull(buttonConfig.clazz)) {
|
||||
button.addClass(buttonConfig.clazz);
|
||||
}
|
||||
|
||||
// set the color if specified
|
||||
if (isDefinedAndNotNull(buttonConfig.color)) {
|
||||
button.css({
|
||||
'background': buttonConfig.color.base,
|
||||
'color': buttonConfig.color.text
|
||||
});
|
||||
}
|
||||
|
||||
// check if the button should be disabled
|
||||
if (isDisabled()) {
|
||||
button.addClass('disabled-button');
|
||||
} else {
|
||||
// enable custom hover if specified
|
||||
if (isDefinedAndNotNull(buttonConfig.color)) {
|
||||
button.hover(function () {
|
||||
$(this).css("background-color", buttonConfig.color.hover);
|
||||
}, function () {
|
||||
$(this).css("background-color", buttonConfig.color.base);
|
||||
});
|
||||
}
|
||||
|
||||
button.click(function () {
|
||||
var handler = $(this).data('handler');
|
||||
if (isDefinedAndNotNull(handler) && typeof handler.click === 'function') {
|
||||
handler.click.call(dialog);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// add the button to the wrapper
|
||||
button.data('handler', buttonConfig.handler).appendTo(buttonWrapper);
|
||||
});
|
||||
|
||||
// store the button model to refresh later
|
||||
dialog.append(buttonWrapper).data('buttonModel', buttonModel);
|
||||
}
|
||||
};
|
||||
|
||||
var methods = {
|
||||
|
||||
/**
|
||||
* Initializes the dialog.
|
||||
*
|
||||
* @argument {object} options The options for the plugin
|
||||
*/
|
||||
init: function (options) {
|
||||
return this.each(function () {
|
||||
// get the combo
|
||||
var dialog = $(this).addClass('dialog cancellable modal');
|
||||
dialog.css('display', 'none');
|
||||
|
||||
var nfDialogData = {};
|
||||
if (isDefinedAndNotNull(dialog.data('nf-dialog'))) {
|
||||
nfDialogData = dialog.data('nf-dialog');
|
||||
}
|
||||
|
||||
// ensure the options have been properly specified
|
||||
if (isDefinedAndNotNull(options)) {
|
||||
|
||||
$.extend(nfDialogData, options);
|
||||
|
||||
//persist data attribute
|
||||
dialog.data('nfDialog', nfDialogData);
|
||||
}
|
||||
|
||||
// determine if dialog needs a header
|
||||
if (!isDefinedAndNotNull(nfDialogData.header) || nfDialogData.header) {
|
||||
var dialogHeaderText = $('<span class="dialog-header-text"></span>');
|
||||
var dialogHeader = $('<div class="dialog-header"></div>').prepend(dialogHeaderText);
|
||||
|
||||
// determine if the specified header text is null
|
||||
if (!isBlank(nfDialogData.headerText)) {
|
||||
dialogHeaderText.text(nfDialogData.headerText);
|
||||
}
|
||||
|
||||
$('<span></span>').addClass("dialog-header-subtitle").text(nfDialogData.subtitleText).appendTo(dialogHeader);
|
||||
|
||||
|
||||
dialog.prepend(dialogHeader);
|
||||
}
|
||||
|
||||
// determine if dialog needs footer/buttons
|
||||
if (!isDefinedAndNotNull(nfDialogData.footer) || nfDialogData.footer) {
|
||||
// add the buttons
|
||||
addButtons(dialog, nfDialogData.buttons);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the handler that is used when the dialog is closed.
|
||||
*
|
||||
* @argument {function} handler The function to call when hiding the dialog
|
||||
*/
|
||||
setCloseHandler: function (handler) {
|
||||
return this.each(function (index, dialog) {
|
||||
|
||||
var nfDialogData = {};
|
||||
if (isDefinedAndNotNull($(this).data('nf-dialog'))) {
|
||||
nfDialogData = $(dialog).data('nf-dialog');
|
||||
}
|
||||
if (!isDefinedAndNotNull(nfDialogData.handler)){
|
||||
nfDialogData.handler = {};
|
||||
}
|
||||
nfDialogData.handler.close = handler;
|
||||
|
||||
//persist data attribute
|
||||
$(dialog).data('nfDialog', nfDialogData);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the handler that is used when the dialog is opened.
|
||||
*
|
||||
* @argument {function} handler The function to call when showing the dialog
|
||||
*/
|
||||
setOpenHandler: function (handler) {
|
||||
return this.each(function (index, dialog) {
|
||||
|
||||
var nfDialogData = {};
|
||||
if (isDefinedAndNotNull($(this).data('nf-dialog'))) {
|
||||
nfDialogData = $(dialog).data('nf-dialog');
|
||||
}
|
||||
if (!isDefinedAndNotNull(nfDialogData.handler)){
|
||||
nfDialogData.handler = {};
|
||||
}
|
||||
nfDialogData.handler.open = handler;
|
||||
|
||||
//persist data attribute
|
||||
$(dialog).data('nfDialog', nfDialogData);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the handler that is used when the dialog is resized.
|
||||
*
|
||||
* @argument {function} handler The function to call when resizing the dialog
|
||||
*/
|
||||
setResizeHandler: function (handler) {
|
||||
return this.each(function (index, dialog) {
|
||||
|
||||
var nfDialogData = {};
|
||||
if (isDefinedAndNotNull($(this).data('nf-dialog'))) {
|
||||
nfDialogData = $(dialog).data('nf-dialog');
|
||||
}
|
||||
if (!isDefinedAndNotNull(nfDialogData.handler)){
|
||||
nfDialogData.handler = {};
|
||||
}
|
||||
nfDialogData.handler.resize = handler;
|
||||
|
||||
//persist data attribute
|
||||
$(dialog).data('nfDialog', nfDialogData);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Updates the button model for the selected dialog.
|
||||
*
|
||||
* @argument {array} buttons The new button model
|
||||
*/
|
||||
setButtonModel: function (buttons) {
|
||||
return this.each(function () {
|
||||
if (isDefinedAndNotNull(buttons)) {
|
||||
var dialog = $(this);
|
||||
|
||||
// remove the current buttons
|
||||
dialog.children('.dialog-buttons').remove();
|
||||
|
||||
// add the new buttons
|
||||
addButtons(dialog, buttons);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Refreshes the buttons with the existing model.
|
||||
*/
|
||||
refreshButtons: function () {
|
||||
return this.each(function () {
|
||||
var dialog = $(this);
|
||||
var buttons = dialog.data('buttonModel');
|
||||
|
||||
// remove the current buttons
|
||||
dialog.children('.dialog-buttons').remove();
|
||||
|
||||
// add the new buttons
|
||||
addButtons(dialog, buttons);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the header text of the dialog.
|
||||
*
|
||||
* @argument {string} text Text to use a as a header
|
||||
*/
|
||||
setHeaderText: function (text) {
|
||||
return this.each(function () {
|
||||
$(this).find('span.dialog-header-text').text(text);
|
||||
});
|
||||
},
|
||||
|
||||
setSubtitle: function (text) {
|
||||
return this.each(function () {
|
||||
$(this).find('span.dialog-header-subtitle').text(text);
|
||||
});
|
||||
},
|
||||
|
||||
resize: function () {
|
||||
var dialog = $(this);
|
||||
var dialogContent = dialog.find('.dialog-content');
|
||||
|
||||
var nfDialogData = {};
|
||||
if (isDefinedAndNotNull(dialog.data('nf-dialog'))) {
|
||||
nfDialogData = dialog.data('nf-dialog');
|
||||
}
|
||||
|
||||
//initialize responsive properties
|
||||
if (!isDefinedAndNotNull(nfDialogData.responsive)) {
|
||||
nfDialogData.responsive = {};
|
||||
|
||||
if (!isDefinedAndNotNull(nfDialogData.responsive.x)) {
|
||||
nfDialogData.responsive.x = true;
|
||||
}
|
||||
|
||||
if (!isDefinedAndNotNull(nfDialogData.responsive.y)) {
|
||||
nfDialogData.responsive.y = true;
|
||||
}
|
||||
} else {
|
||||
if (!isDefinedAndNotNull(nfDialogData.responsive.x)) {
|
||||
nfDialogData.responsive.x = true;
|
||||
} else {
|
||||
nfDialogData.responsive.x = (nfDialogData.responsive.x == "true" || nfDialogData.responsive.x == true) ? true : false;
|
||||
}
|
||||
|
||||
if (!isDefinedAndNotNull(nfDialogData.responsive.y)) {
|
||||
nfDialogData.responsive.y = true;
|
||||
} else {
|
||||
nfDialogData.responsive.y = (nfDialogData.responsive.y == "true" || nfDialogData.responsive.y == true) ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
if (nfDialogData.responsive.y || nfDialogData.responsive.x) {
|
||||
|
||||
var fullscreenHeight;
|
||||
var fullscreenWidth;
|
||||
|
||||
if (isDefinedAndNotNull(nfDialogData.responsive['fullscreen-height'])) {
|
||||
fullscreenHeight = parseInt(nfDialogData.responsive['fullscreen-height'], 10);
|
||||
} else {
|
||||
nfDialogData.responsive['fullscreen-height'] = dialog.height() + 'px';
|
||||
|
||||
fullscreenHeight = parseInt(nfDialogData.responsive['fullscreen-height'], 10);
|
||||
}
|
||||
|
||||
if (isDefinedAndNotNull(nfDialogData.responsive['fullscreen-width'])) {
|
||||
fullscreenWidth = parseInt(nfDialogData.responsive['fullscreen-width'], 10);
|
||||
} else {
|
||||
nfDialogData.responsive['fullscreen-width'] = dialog.width() + 'px';
|
||||
|
||||
fullscreenWidth = parseInt(nfDialogData.responsive['fullscreen-width'], 10);
|
||||
}
|
||||
|
||||
if (!isDefinedAndNotNull(nfDialogData.width)) {
|
||||
nfDialogData.width = dialog.css('width');
|
||||
}
|
||||
|
||||
if (!isDefinedAndNotNull(nfDialogData['min-width'])) {
|
||||
if (parseInt(dialog.css('min-width'), 10) > 0) {
|
||||
nfDialogData['min-width'] = dialog.css('min-width');
|
||||
} else {
|
||||
nfDialogData['min-width'] = nfDialogData.width;
|
||||
}
|
||||
}
|
||||
|
||||
//min-width should always be set in terms of px
|
||||
if (nfDialogData['min-width'].indexOf("%") > 0) {
|
||||
nfDialogData['min-width'] = ($(window).width() * (parseInt(nfDialogData['min-width'], 10) / 100)) + 'px';
|
||||
}
|
||||
|
||||
if (!isDefinedAndNotNull(nfDialogData.height)) {
|
||||
nfDialogData.height = dialog.css('height');
|
||||
}
|
||||
|
||||
if (!isDefinedAndNotNull(nfDialogData['min-height'])) {
|
||||
if (parseInt(dialog.css('min-height'), 10) > 0) {
|
||||
nfDialogData['min-height'] = dialog.css('min-height');
|
||||
} else {
|
||||
nfDialogData['min-height'] = nfDialogData.height;
|
||||
}
|
||||
}
|
||||
|
||||
//min-height should always be set in terms of px
|
||||
if (nfDialogData['min-height'].indexOf("%") > 0) {
|
||||
nfDialogData['min-height'] = ($(window).height() * (parseInt(nfDialogData['min-height'], 10) / 100)) + 'px';
|
||||
}
|
||||
|
||||
//resize dialog
|
||||
if ($(window).height() < fullscreenHeight) {
|
||||
if (nfDialogData.responsive.y) {
|
||||
dialog.css('height', '100%');
|
||||
dialog.css('min-height', '100%');
|
||||
}
|
||||
} else {
|
||||
//set the dialog min-height
|
||||
dialog.css('min-height', nfDialogData['min-height']);
|
||||
if (nfDialogData.responsive.y) {
|
||||
//make sure nfDialogData.height is in terms of %
|
||||
if (nfDialogData.height.indexOf("px") > 0) {
|
||||
nfDialogData.height = (parseInt(nfDialogData.height, 10) / $(window).height() * 100) + '%';
|
||||
}
|
||||
dialog.css('height', nfDialogData.height);
|
||||
}
|
||||
}
|
||||
|
||||
if ($(window).width() < fullscreenWidth) {
|
||||
if (nfDialogData.responsive.x) {
|
||||
dialog.css('width', '100%');
|
||||
dialog.css('min-width', '100%');
|
||||
}
|
||||
} else {
|
||||
//set the dialog width
|
||||
dialog.css('min-width', nfDialogData['min-width']);
|
||||
if (nfDialogData.responsive.x) {
|
||||
//make sure nfDialogData.width is in terms of %
|
||||
if (nfDialogData.width.indexOf("px") > 0) {
|
||||
nfDialogData.width = (parseInt(nfDialogData.width, 10) / $(window).width() * 100) + '%';
|
||||
}
|
||||
dialog.css('width', nfDialogData.width);
|
||||
}
|
||||
}
|
||||
|
||||
dialog.center();
|
||||
|
||||
//persist data attribute
|
||||
dialog.data('nfDialog', nfDialogData);
|
||||
}
|
||||
|
||||
//apply scrollable style if applicable
|
||||
if (dialogContent[0].offsetHeight < dialogContent[0].scrollHeight) {
|
||||
// your element has overflow
|
||||
if (isDefinedAndNotNull(nfDialogData.scrollableContentStyle)) {
|
||||
dialogContent.addClass(nfDialogData.scrollableContentStyle);
|
||||
}
|
||||
} else {
|
||||
// your element doesn't have overflow
|
||||
if (isDefinedAndNotNull(nfDialogData.scrollableContentStyle)) {
|
||||
dialogContent.removeClass(nfDialogData.scrollableContentStyle);
|
||||
}
|
||||
}
|
||||
|
||||
if (isDefinedAndNotNull(nfDialogData.handler)) {
|
||||
var handler = nfDialogData.handler.resize;
|
||||
if (isDefinedAndNotNull(handler) && typeof handler === 'function') {
|
||||
// invoke the handler
|
||||
handler.call(dialog);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Shows the dialog.
|
||||
*/
|
||||
show: function () {
|
||||
var dialog = $(this);
|
||||
|
||||
var zIndex = dialog.css('z-index');
|
||||
if (zIndex === 'auto') {
|
||||
if (isDefinedAndNotNull(dialog.data('nf-dialog'))) {
|
||||
zIndex = (isDefinedAndNotNull(dialog.data('nf-dialog')['z-index'])) ?
|
||||
dialog.data('nf-dialog')['z-index'] : 1301;
|
||||
} else {
|
||||
zIndex = 1301;
|
||||
}
|
||||
}
|
||||
var openDialogs = $.makeArray($('.dialog:visible'));
|
||||
if (openDialogs.length >= 1){
|
||||
var zVals = openDialogs.map(function(openDialog){
|
||||
var index;
|
||||
return isNaN(index = parseInt($(openDialog).css("z-index"), 10)) ? 0 : index;
|
||||
});
|
||||
//Add 2 so that we have room for the glass pane overlay of the new dialog
|
||||
zIndex = Math.max.apply(null, zVals) + 2;
|
||||
}
|
||||
dialog.css('z-index', zIndex);
|
||||
|
||||
var nfDialogData = {};
|
||||
if (isDefinedAndNotNull(dialog.data('nf-dialog'))) {
|
||||
nfDialogData = dialog.data('nf-dialog');
|
||||
}
|
||||
|
||||
var glasspane;
|
||||
if (isDefinedAndNotNull(nfDialogData.glasspane)) {
|
||||
glasspane = nfDialogData.glasspane;
|
||||
} else {
|
||||
nfDialogData.glasspane = glasspane = dialog.find('.dialog-header').css('background-color'); //default to header color
|
||||
}
|
||||
|
||||
if(top !== window || !isDefinedAndNotNull(nfDialogData.glasspane)) {
|
||||
nfDialogData.glasspane = glasspane = 'transparent';
|
||||
}
|
||||
|
||||
if (!$('body').find("[data-nf-dialog-parent='" + dialog.attr('id') + "']").is(':visible')) {
|
||||
//create glass pane overlay
|
||||
$('<div></div>').attr('data-nf-dialog-parent', dialog.attr('id')).addClass("modal-glass").css({
|
||||
"background-color": glasspane,
|
||||
"z-index": zIndex - 1
|
||||
}).appendTo($('body'));
|
||||
}
|
||||
|
||||
//persist data attribute
|
||||
dialog.data('nfDialog', nfDialogData);
|
||||
|
||||
return this.each(function () {
|
||||
// show the dialog
|
||||
if (!dialog.is(':visible')) {
|
||||
dialog.show();
|
||||
dialog.modal('resize');
|
||||
dialog.center();
|
||||
|
||||
if (isDefinedAndNotNull(nfDialogData.handler)) {
|
||||
var handler = nfDialogData.handler.open;
|
||||
if (isDefinedAndNotNull(handler) && typeof handler === 'function') {
|
||||
// invoke the handler
|
||||
handler.call(dialog);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Hides the dialog.
|
||||
*/
|
||||
hide: function () {
|
||||
return this.each(function () {
|
||||
var dialog = $(this);
|
||||
|
||||
var nfDialogData = {};
|
||||
if (isDefinedAndNotNull(dialog.data('nf-dialog'))) {
|
||||
nfDialogData = dialog.data('nf-dialog');
|
||||
}
|
||||
|
||||
if (isDefinedAndNotNull(nfDialogData.handler)) {
|
||||
var handler = nfDialogData.handler.close;
|
||||
if (isDefinedAndNotNull(handler) && typeof handler === 'function') {
|
||||
// invoke the handler
|
||||
handler.call(dialog);
|
||||
}
|
||||
}
|
||||
|
||||
// remove the modal glass pane overlay
|
||||
$('body').find("[data-nf-dialog-parent='" + dialog.attr('id') + "']").remove();
|
||||
|
||||
if (dialog.is(':visible')) {
|
||||
// hide the dialog
|
||||
dialog.hide();
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.modal = function (method) {
|
||||
if (methods[method]) {
|
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
} else {
|
||||
return methods.init.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
|
@ -1,80 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/*
|
||||
CodeMirror styles
|
||||
*/
|
||||
|
||||
.nf-editor .CodeMirror {
|
||||
height: 100px;
|
||||
border: 1px solid #aaa;
|
||||
font-family: monospace;
|
||||
background-color: #fff;
|
||||
cursor: default;
|
||||
line-height: normal;
|
||||
min-width: 210px;
|
||||
}
|
||||
|
||||
.nf-editor .CodeMirror.blank {
|
||||
background: #b2b8c1;
|
||||
color: #dbdee2;
|
||||
border: 1px solid #b2b8c1;
|
||||
}
|
||||
|
||||
.nf-editor .CodeMirror-scroll {
|
||||
overflow-x: auto;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.nf-editor .ui-resizable-se {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-image: url(../../../images/iconResize.png);
|
||||
z-index: 6;
|
||||
}
|
||||
|
||||
/*
|
||||
Override some defaults...
|
||||
*/
|
||||
|
||||
.CodeMirror-hints {
|
||||
font-size: 13px !important;
|
||||
z-index: 100001 !important;
|
||||
}
|
||||
|
||||
.cm-s-default {
|
||||
font-size: 13px;
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.cm-s-default .CodeMirror-matchingbracket {
|
||||
color: #000 !important;
|
||||
background-color: #aaa;
|
||||
opacity: 0.5;
|
||||
filter: alpha(opacity=50);
|
||||
}
|
||||
|
||||
/*
|
||||
Override some defaults for this instance...
|
||||
*/
|
||||
|
||||
.nf-editor .CodeMirror-vscrollbar {
|
||||
bottom: 18px !important;
|
||||
}
|
||||
|
||||
.nf-editor .CodeMirror-hscrollbar {
|
||||
right: 18px !important;
|
||||
}
|
|
@ -1,355 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* global define, module, require, exports */
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery',
|
||||
'CodeMirror',
|
||||
'nf'],
|
||||
function ($, CodeMirror, nf) {
|
||||
factory($, CodeMirror, nf);
|
||||
});
|
||||
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||||
factory(require('jquery'),
|
||||
require('CodeMirror'),
|
||||
require('nf'));
|
||||
} else {
|
||||
factory(root.$,
|
||||
root.CodeMirror,
|
||||
root.nf);
|
||||
}
|
||||
}(this, function ($, CodeMirror, nf) {
|
||||
|
||||
var isUndefined = function (obj) {
|
||||
return typeof obj === 'undefined';
|
||||
};
|
||||
|
||||
var isNull = function (obj) {
|
||||
return obj === null;
|
||||
};
|
||||
|
||||
var isDefinedAndNotNull = function (obj) {
|
||||
return !isUndefined(obj) && !isNull(obj);
|
||||
};
|
||||
|
||||
var isBlank = function (str) {
|
||||
return isUndefined(str) || isNull(str) || str === '';
|
||||
};
|
||||
|
||||
var isFunction = function (funct) {
|
||||
return typeof funct === 'function';
|
||||
};
|
||||
|
||||
var methods = {
|
||||
|
||||
/**
|
||||
* Create a new nf editor. The options are specified in the following
|
||||
* format:
|
||||
*
|
||||
* {
|
||||
* languageMode: nf.nfel,
|
||||
* resizable: true,
|
||||
* sensitive: false,
|
||||
* readOnly: false,
|
||||
* content: '${attribute}',
|
||||
* width: 200,
|
||||
* height: 200,
|
||||
* minWidth: 150,
|
||||
* minHeight: 150
|
||||
* }
|
||||
*
|
||||
* @param {object} options The options for this editor.
|
||||
*/
|
||||
init: function (options) {
|
||||
return this.each(function () {
|
||||
if (isUndefined(options) || isNull(options)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var languageMode = options.languageMode;
|
||||
if (isUndefined(languageMode) || isNull(languageMode)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// should support resizing
|
||||
var resizable = options.resizable === true;
|
||||
|
||||
// is the property sensitive
|
||||
var sensitive = options.sensitive === true;
|
||||
|
||||
var content = isDefinedAndNotNull(options.content) ? options.content : '';
|
||||
var field = $('<textarea></textarea>').text(content).appendTo($(this));
|
||||
|
||||
// define a mode for NiFi expression language
|
||||
if (isFunction(languageMode.color)) {
|
||||
CodeMirror.commands.autocomplete = function (cm) {
|
||||
if (isFunction(languageMode.suggest)) {
|
||||
CodeMirror.showHint(cm, languageMode.suggest);
|
||||
}
|
||||
};
|
||||
|
||||
CodeMirror.defineMode(languageMode.getLanguageId(), languageMode.color);
|
||||
|
||||
// is the editor read only
|
||||
var readOnly = options.readOnly === true;
|
||||
|
||||
var editor = CodeMirror.fromTextArea(field.get(0), {
|
||||
mode: languageMode.getLanguageId(),
|
||||
lineNumbers: true,
|
||||
matchBrackets: true,
|
||||
readOnly: readOnly,
|
||||
extraKeys: {
|
||||
'Ctrl-Space': 'autocomplete',
|
||||
'Esc': function (cm) {
|
||||
if (isFunction(options.escape)) {
|
||||
options.escape();
|
||||
}
|
||||
},
|
||||
'Enter': function (cm) {
|
||||
if (isFunction(options.enter)) {
|
||||
options.enter();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// set the size
|
||||
var width = null;
|
||||
if (isDefinedAndNotNull(options.width)) {
|
||||
width = options.width;
|
||||
}
|
||||
var height = null;
|
||||
if (isDefinedAndNotNull(options.height)) {
|
||||
height = options.height;
|
||||
}
|
||||
editor.setSize(width, height);
|
||||
|
||||
// store the editor instance for later
|
||||
$(this).data('editorInstance', editor);
|
||||
|
||||
// get a reference to the codemirror
|
||||
var codeMirror = $(this).find('.CodeMirror');
|
||||
|
||||
// reference the code portion
|
||||
var code = codeMirror.find('.CodeMirror-code');
|
||||
|
||||
// make this resizable if specified
|
||||
if (resizable) {
|
||||
codeMirror.append('<div class="ui-resizable-handle ui-resizable-se"></div>').resizable({
|
||||
handles: {
|
||||
'se': '.ui-resizable-se'
|
||||
},
|
||||
resize: function () {
|
||||
editor.setSize($(this).width(), $(this).height());
|
||||
editor.refresh();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// handle keydown to signify the content has changed
|
||||
editor.on('change', function (cm, event) {
|
||||
codeMirror.addClass('modified');
|
||||
});
|
||||
|
||||
// handle keyHandled to stop event propagation/default as necessary
|
||||
editor.on('keyHandled', function (cm, name, evt) {
|
||||
if (name === 'Esc') {
|
||||
// stop propagation of the escape event
|
||||
evt.stopImmediatePropagation();
|
||||
evt.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// handle sensitive values differently
|
||||
if (sensitive) {
|
||||
code.addClass('sensitive');
|
||||
|
||||
var handleSensitive = function (cm, event) {
|
||||
if (code.hasClass('sensitive')) {
|
||||
code.removeClass('sensitive');
|
||||
editor.setValue('');
|
||||
}
|
||||
};
|
||||
|
||||
// remove the sensitive style if necessary
|
||||
editor.on('mousedown', handleSensitive);
|
||||
editor.on('keydown', handleSensitive);
|
||||
}
|
||||
|
||||
// set the min width/height
|
||||
if (isDefinedAndNotNull(options.minWidth)) {
|
||||
codeMirror.resizable('option', 'minWidth', options.minWidth);
|
||||
}
|
||||
if (isDefinedAndNotNull(options.minHeight)) {
|
||||
codeMirror.resizable('option', 'minHeight', options.minHeight);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Refreshes the editor.
|
||||
*/
|
||||
refresh: function () {
|
||||
return this.each(function () {
|
||||
var editor = $(this).data('editorInstance');
|
||||
|
||||
// ensure the editor was initialized
|
||||
if (isDefinedAndNotNull(editor)) {
|
||||
editor.refresh();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the size of the editor.
|
||||
*
|
||||
* @param {integer} width
|
||||
* @param {integer} height
|
||||
*/
|
||||
setSize: function (width, height) {
|
||||
return this.each(function () {
|
||||
var editor = $(this).data('editorInstance');
|
||||
|
||||
// ensure the editor was initialized
|
||||
if (isDefinedAndNotNull(editor)) {
|
||||
editor.setSize(width, height);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets whether the editor is read only.
|
||||
*
|
||||
* @param {boolean|string} readOnly
|
||||
*/
|
||||
setReadOnly: function (readOnly) {
|
||||
return this.each(function () {
|
||||
var editor = $(this).data('editorInstance');
|
||||
|
||||
// ensure the editor was initialized
|
||||
if (isDefinedAndNotNull(editor)) {
|
||||
editor.setOption('readOnly', readOnly);
|
||||
|
||||
if (readOnly === false) {
|
||||
$(this).find('.CodeMirror').removeClass('blank');
|
||||
} else {
|
||||
$(this).find('.CodeMirror').addClass('blank');
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Gets the value of the editor in the first matching selector.
|
||||
*/
|
||||
getValue: function () {
|
||||
var value;
|
||||
|
||||
this.each(function () {
|
||||
var editor = $(this).data('editorInstance');
|
||||
|
||||
// ensure the editor was initialized
|
||||
if (isDefinedAndNotNull(editor)) {
|
||||
value = editor.getValue();
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
return value;
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the value of the editor.
|
||||
*
|
||||
* @param {string} value
|
||||
*/
|
||||
setValue: function (value) {
|
||||
return this.each(function () {
|
||||
var editor = $(this).data('editorInstance');
|
||||
|
||||
// ensure the editor was initialized
|
||||
if (isDefinedAndNotNull(editor)) {
|
||||
editor.setValue(value);
|
||||
|
||||
// remove the modified marking since the value was reset
|
||||
$(this).find('.CodeMirror').removeClass('modified');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the focus.
|
||||
*/
|
||||
focus: function () {
|
||||
return this.each(function () {
|
||||
var editor = $(this).data('editorInstance');
|
||||
|
||||
// ensure the editor was initialized
|
||||
if (isDefinedAndNotNull(editor)) {
|
||||
editor.focus();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the focus.
|
||||
*/
|
||||
selectAll: function () {
|
||||
return this.each(function () {
|
||||
var editor = $(this).data('editorInstance');
|
||||
|
||||
// ensure the editor was initialized
|
||||
if (isDefinedAndNotNull(editor)) {
|
||||
editor.execCommand('selectAll');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Gets whether the value of the editor in the first matching selector has been modified.
|
||||
*/
|
||||
isModified: function () {
|
||||
var modified;
|
||||
|
||||
this.each(function () {
|
||||
modified = $(this).find('.CodeMirror').hasClass('modified');
|
||||
return false;
|
||||
});
|
||||
|
||||
return modified;
|
||||
},
|
||||
|
||||
/**
|
||||
* Destroys the editor.
|
||||
*/
|
||||
destroy: function () {
|
||||
return this.removeData('editorInstance').find('.CodeMirror').removeClass('modified');
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.nfeditor = function (method) {
|
||||
if (methods[method]) {
|
||||
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
|
||||
} else {
|
||||
return methods.init.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
}));
|
|
@ -1,131 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
ul.CodeMirror-hints {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
div.el-section {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
div.el-name {
|
||||
font-weight: bold;
|
||||
font-family: monospace;
|
||||
font-size: 16px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
div.el-header {
|
||||
float: left;
|
||||
width: 75px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.el-arguments {
|
||||
margin-top: 5px;
|
||||
list-style-type: disc;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
span.el-argument-name {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
div.nf-tooltip {
|
||||
max-width: 350px;
|
||||
}
|
||||
|
||||
div.mode-hint-tip {
|
||||
z-index: 14000;
|
||||
width: 455px;
|
||||
padding: 10px;
|
||||
position: absolute;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 2px;
|
||||
background-color: #fff;
|
||||
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.16);
|
||||
font-size: 13px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.mode-hint-tip > :first-child {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
div.mode-hint-tip-title-container {
|
||||
display: flex;
|
||||
font-weight: bold;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.mode-hint-tip-title-container > :first-child {
|
||||
width: 10px;
|
||||
margin-right: 10px;
|
||||
color: #898989;
|
||||
}
|
||||
|
||||
div.mode-hint-tip-title-container > .mode-supported {
|
||||
color: #151515;
|
||||
}
|
||||
|
||||
div.mode-hint-tip-title-container > .mode-unsupported {
|
||||
color: #676767;
|
||||
}
|
||||
|
||||
div.mode-hint-tip-description-container {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
div.mode-hint-tip-description-container .hint-pattern {
|
||||
padding: 0 2px;
|
||||
letter-spacing: 1px;
|
||||
font-weight: 400;
|
||||
background-color: rgba(20, 145, 193, 0.12);
|
||||
}
|
||||
|
||||
div.mode-hint-tip-description-container .hint-keystroke {
|
||||
font-weight: 300;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.mode-hint-container {
|
||||
margin-top: 5px;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
height: 13px;
|
||||
font-size: 11px;
|
||||
color: #898989;
|
||||
}
|
||||
|
||||
div.mode-hint-element {
|
||||
cursor: default;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 96px;
|
||||
}
|
||||
|
||||
div.mode-hint {
|
||||
display: flex;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
div.mode-hint-value {
|
||||
margin-left: 5px;
|
||||
color: #898989;
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* global define, module, require, exports */
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery',
|
||||
'nf.AuthorizationStorage'],
|
||||
function ($, nfAuthorizationStorage) {
|
||||
return (nf.AjaxSetup = factory($, nfAuthorizationStorage));
|
||||
});
|
||||
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||||
module.exports = (nf.AjaxSetup = factory(require('jquery'),
|
||||
require('nf.AuthorizationStorage')));
|
||||
} else {
|
||||
nf.AjaxSetup = factory(root.$,
|
||||
root.nf.AuthorizationStorage);
|
||||
}
|
||||
}(this, function ($, nfAuthorizationStorage) {
|
||||
/**
|
||||
* Performs ajax setup for use within NiFi.
|
||||
*/
|
||||
$(document).ready(function ($) {
|
||||
$.ajaxSetup({
|
||||
'beforeSend': function (xhr) {
|
||||
// Get the Request Token for CSRF mitigation on and send on all requests
|
||||
var requestToken = nfAuthorizationStorage.getRequestToken();
|
||||
if (requestToken !== null) {
|
||||
xhr.setRequestHeader('Request-Token', requestToken);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}));
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* global define, module, require, exports */
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define([], function () {
|
||||
return (nf.AuthorizationStorage = factory());
|
||||
});
|
||||
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||||
module.exports = (nf.AuthorizationStorage = factory());
|
||||
} else {
|
||||
nf.AuthorizationStorage = factory();
|
||||
}
|
||||
}(this, function () {
|
||||
var TOKEN_ITEM_KEY = 'Access-Token-Expiration';
|
||||
|
||||
var REQUEST_TOKEN_PATTERN = new RegExp('Request-Token=([^;]+)');
|
||||
|
||||
return {
|
||||
/**
|
||||
* Get Request Token from document cookies
|
||||
*
|
||||
* @return Request Token string or null when not found
|
||||
*/
|
||||
getRequestToken: function () {
|
||||
var requestToken = null;
|
||||
var requestTokenMatcher = REQUEST_TOKEN_PATTERN.exec(document.cookie);
|
||||
if (requestTokenMatcher) {
|
||||
requestToken = requestTokenMatcher[1];
|
||||
}
|
||||
return requestToken;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get Token from Session Storage
|
||||
*
|
||||
* @return Bearer Token string
|
||||
*/
|
||||
getToken: function () {
|
||||
return sessionStorage.getItem(TOKEN_ITEM_KEY);
|
||||
},
|
||||
|
||||
/**
|
||||
* Has Token returns the status of whether Session Storage contains the Token
|
||||
*
|
||||
* @return Boolean status of whether Session Storage contains the Token
|
||||
*/
|
||||
hasToken: function () {
|
||||
var token = this.getToken();
|
||||
return typeof token === 'string';
|
||||
},
|
||||
|
||||
/**
|
||||
* Remove Token from Session Storage
|
||||
*
|
||||
*/
|
||||
removeToken: function () {
|
||||
sessionStorage.removeItem(TOKEN_ITEM_KEY);
|
||||
},
|
||||
|
||||
/**
|
||||
* Set Token in Session Storage
|
||||
*
|
||||
* @param token Token String
|
||||
*/
|
||||
setToken: function (token) {
|
||||
sessionStorage.setItem(TOKEN_ITEM_KEY, token);
|
||||
}
|
||||
};
|
||||
}));
|
|
@ -1,209 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* global define, module, require, exports */
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define([], function () {
|
||||
return (nf.Storage = factory());
|
||||
});
|
||||
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||||
module.exports = (nf.Storage = factory());
|
||||
} else {
|
||||
nf.Storage = factory();
|
||||
}
|
||||
}(this, function () {
|
||||
|
||||
var disconnectionAcknowledged = false;
|
||||
|
||||
// Store items for two days before being eligible for removal.
|
||||
var MILLIS_PER_DAY = 86400000;
|
||||
var TWO_DAYS = MILLIS_PER_DAY * 2;
|
||||
|
||||
var isUndefined = function (obj) {
|
||||
return typeof obj === 'undefined';
|
||||
};
|
||||
|
||||
var isNull = function (obj) {
|
||||
return obj === null;
|
||||
};
|
||||
|
||||
var isDefinedAndNotNull = function (obj) {
|
||||
return !isUndefined(obj) && !isNull(obj);
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks the expiration for the specified entry.
|
||||
*
|
||||
* @param {object} entry
|
||||
* @returns {boolean}
|
||||
*/
|
||||
var checkExpiration = function (entry) {
|
||||
if (isDefinedAndNotNull(entry.expires)) {
|
||||
// get the expiration
|
||||
var expires = new Date(entry.expires);
|
||||
var now = new Date();
|
||||
|
||||
// return whether the expiration date has passed
|
||||
return expires.valueOf() < now.valueOf();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets an enty for the key. The entry expiration is not checked.
|
||||
*
|
||||
* @param {string} key
|
||||
*/
|
||||
var getEntry = function (key) {
|
||||
try {
|
||||
// parse the entry
|
||||
var entry = JSON.parse(localStorage.getItem(key));
|
||||
|
||||
// ensure the entry and item are present
|
||||
if (isDefinedAndNotNull(entry)) {
|
||||
return entry;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
/**
|
||||
* Initializes the storage. Items will be persisted for two days. Once the scripts runs
|
||||
* thereafter, all eligible items will be removed. This strategy does not support persistence.
|
||||
*/
|
||||
init: function () {
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
try {
|
||||
// get the next item
|
||||
var key = localStorage.key(i);
|
||||
|
||||
// attempt to get the item which will expire if necessary
|
||||
this.getItem(key);
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
acknowledgeDisconnection: function () {
|
||||
disconnectionAcknowledged = true;
|
||||
},
|
||||
|
||||
resetDisconnectionAcknowledgement: function () {
|
||||
disconnectionAcknowledged = false;
|
||||
},
|
||||
|
||||
isDisconnectionAcknowledged: function () {
|
||||
return disconnectionAcknowledged;
|
||||
},
|
||||
|
||||
/**
|
||||
* Stores the specified item.
|
||||
*
|
||||
* @param {string} key
|
||||
* @param {object} item
|
||||
* @param {integer} expires
|
||||
*/
|
||||
setItem: function (key, item, expires) {
|
||||
// calculate the expiration
|
||||
expires = isDefinedAndNotNull(expires) ? expires : new Date().valueOf() + TWO_DAYS;
|
||||
|
||||
// create the entry
|
||||
var entry = {
|
||||
expires: expires,
|
||||
item: item
|
||||
};
|
||||
|
||||
// store the item
|
||||
localStorage.setItem(key, JSON.stringify(entry));
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns whether there is an entry for this key. This will not check the expiration. If
|
||||
* the entry is expired, it will return null on a subsequent getItem invocation.
|
||||
*
|
||||
* @param {string} key
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasItem: function (key) {
|
||||
return getEntry(key) !== null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Gets the item with the specified key. If an item with this key does
|
||||
* not exist, null is returned. If an item exists but cannot be parsed
|
||||
* or is malformed/unrecognized, null is returned.
|
||||
*
|
||||
* @param {type} key
|
||||
*/
|
||||
getItem: function (key) {
|
||||
var entry = getEntry(key);
|
||||
if (entry === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// if the entry is expired, drop it and return null
|
||||
if (checkExpiration(entry)) {
|
||||
this.removeItem(key);
|
||||
return null;
|
||||
}
|
||||
|
||||
// if the entry has the specified field return its value
|
||||
if (isDefinedAndNotNull(entry['item'])) {
|
||||
return entry['item'];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Gets the expiration for the specified item. This will not check the expiration. If
|
||||
* the entry is expired, it will return null on a subsequent getItem invocation.
|
||||
*
|
||||
* @param {string} key
|
||||
* @returns {integer}
|
||||
*/
|
||||
getItemExpiration: function (key) {
|
||||
var entry = getEntry(key);
|
||||
if (entry === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// if the entry has the specified field return its value
|
||||
if (isDefinedAndNotNull(entry['expires'])) {
|
||||
return entry['expires'];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes the item with the specified key.
|
||||
*
|
||||
* @param {type} key
|
||||
*/
|
||||
removeItem: function (key) {
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
};
|
||||
}));
|
|
@ -1,146 +0,0 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* global define, module, require, exports */
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery'], function ($) {
|
||||
return (nf.UniversalCapture = factory($));
|
||||
});
|
||||
} else if (typeof exports === 'object' && typeof module === 'object') {
|
||||
module.exports = (nf.UniversalCapture = factory(require('jquery')));
|
||||
} else {
|
||||
nf.UniversalCapture = factory(root.$);
|
||||
}
|
||||
}(this, function ($) {
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Captures keydown on the window to ensure certain keystrokes are handled in a consistent manner, particularly those
|
||||
* that can lead to browser navigation/reload.
|
||||
*/
|
||||
$(document).ready(function ($) {
|
||||
// setup a listener to ensure keystrokes are being overridden in a consistent manner
|
||||
$(window).on('keydown', function (evt) {
|
||||
// consider escape, before checking dialogs
|
||||
var isCtrl = evt.ctrlKey || evt.metaKey;
|
||||
if (!isCtrl && evt.keyCode === 27) {
|
||||
// esc
|
||||
|
||||
// prevent escape when editing a property with allowable values - that component does not handle key
|
||||
// events so it can bubble up to here. once here we are unable to cancel the current edit so we simply
|
||||
// return. this is not an issue for viewing in read only mode as the table is not in an edit mode. this
|
||||
// is not an issue for other fields as they can handle key events locally and cancel the edit appropriately
|
||||
var visibleCombo = $('div.value-combo');
|
||||
if (visibleCombo.is(':visible') && visibleCombo.parent().hasClass('combo-editor')) {
|
||||
return;
|
||||
}
|
||||
|
||||
// consider property detail dialogs
|
||||
if ($('div.property-detail').is(':visible')) {
|
||||
nfUniversalDialog.removeAllPropertyDetailDialogs();
|
||||
|
||||
// prevent further bubbling as we're already handled it
|
||||
evt.stopImmediatePropagation();
|
||||
evt.preventDefault();
|
||||
} else {
|
||||
var target = $(evt.target);
|
||||
if (target.length) {
|
||||
// special handling for body as the target
|
||||
var cancellables = $('.cancellable');
|
||||
if (cancellables.length) {
|
||||
var zIndexMax = null;
|
||||
var dialogMax = null;
|
||||
|
||||
// identify the top most cancellable
|
||||
$.each(cancellables, function (_, cancellable) {
|
||||
var dialog = $(cancellable);
|
||||
var zIndex = dialog.css('zIndex');
|
||||
|
||||
// if the dialog has a zIndex consider it
|
||||
if (dialog.is(':visible') && (zIndex !== null && typeof zIndex !== 'undefined')) {
|
||||
zIndex = parseInt(zIndex, 10);
|
||||
if (zIndexMax === null || zIndex > zIndexMax) {
|
||||
zIndexMax = zIndex;
|
||||
dialogMax = dialog;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// if we've identified a dialog to close do so and stop propagation
|
||||
if (dialogMax !== null) {
|
||||
// hide the cancellable
|
||||
if (dialogMax.hasClass('modal')) {
|
||||
dialogMax.modal('hide');
|
||||
} else {
|
||||
dialogMax.hide();
|
||||
}
|
||||
|
||||
// prevent further bubbling as we're already handled it
|
||||
evt.stopImmediatePropagation();
|
||||
evt.preventDefault();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// now see if we're in a frame
|
||||
if (top !== window) {
|
||||
// and our parent has shell defined
|
||||
if (typeof parent.nf !== 'undefined' && typeof parent.nf.Shell !== 'undefined') {
|
||||
parent.$('#shell-close-button').click();
|
||||
|
||||
// prevent further bubbling as we're already handled it
|
||||
evt.stopImmediatePropagation();
|
||||
evt.preventDefault();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isCtrl) {
|
||||
if (evt.keyCode === 82) {
|
||||
// ctrl-r
|
||||
evt.preventDefault();
|
||||
}
|
||||
} else {
|
||||
if (!$('input, textarea').is(':focus') && (evt.keyCode == 8 || evt.keyCode === 46)) {
|
||||
// backspace or delete
|
||||
evt.preventDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var nfUniversalDialog = {
|
||||
/**
|
||||
* Removes all read only property detail dialogs.
|
||||
*/
|
||||
removeAllPropertyDetailDialogs: function () {
|
||||
var propertyDetails = $('body').find('div.property-detail');
|
||||
propertyDetails.find('div.nf-editor').nfeditor('destroy'); // look for any nfel editors
|
||||
propertyDetails.find('div.value-combo').combo('destroy'); // look for any combos
|
||||
propertyDetails.hide().remove();
|
||||
}
|
||||
};
|
||||
|
||||
return nfUniversalDialog;
|
||||
}));
|
|
@ -26,6 +26,7 @@ import java.util.Map;
|
|||
public class ComponentDetails {
|
||||
|
||||
private final String id;
|
||||
private final Revision revision;
|
||||
private final String name;
|
||||
private final String type;
|
||||
private final String state;
|
||||
|
@ -37,6 +38,7 @@ public class ComponentDetails {
|
|||
|
||||
private ComponentDetails(final Builder builder) {
|
||||
this.id = builder.id;
|
||||
this.revision = builder.revision;
|
||||
this.name = builder.name;
|
||||
this.type = builder.type;
|
||||
this.state = builder.state;
|
||||
|
@ -44,7 +46,6 @@ public class ComponentDetails {
|
|||
this.properties = builder.properties;
|
||||
this.descriptors = builder.descriptors;
|
||||
this.validationErrors = builder.validationErrors;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -54,6 +55,13 @@ public class ComponentDetails {
|
|||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return component revision
|
||||
*/
|
||||
public Revision getRevision() {
|
||||
return revision;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return component name
|
||||
*/
|
||||
|
@ -107,6 +115,7 @@ public class ComponentDetails {
|
|||
public static final class Builder {
|
||||
|
||||
private String id;
|
||||
private Revision revision;
|
||||
private String name;
|
||||
private String type;
|
||||
private String state;
|
||||
|
@ -121,6 +130,11 @@ public class ComponentDetails {
|
|||
return this;
|
||||
}
|
||||
|
||||
public Builder revision(final Revision revision) {
|
||||
this.revision = revision;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder name(final String name) {
|
||||
this.name = name;
|
||||
return this;
|
||||
|
|
|
@ -62,6 +62,26 @@ public class AuthorizeParameterReference {
|
|||
}
|
||||
}
|
||||
|
||||
public static void authorizeParameterReferences(final String annotationData, final Authorizer authorizer, final Authorizable parameterContextAuthorizable, final NiFiUser user) {
|
||||
if (annotationData == null || parameterContextAuthorizable == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final ParameterParser parameterParser = new ExpressionLanguageAgnosticParameterParser();
|
||||
|
||||
boolean referencesParameter = false;
|
||||
|
||||
// Check if any Parameter is referenced. If so, user must have READ policy on the Parameter Context
|
||||
ParameterTokenList tokenList = parameterParser.parseTokens(annotationData);
|
||||
if (!tokenList.toReferenceList().isEmpty()) {
|
||||
referencesParameter = true;
|
||||
}
|
||||
|
||||
if (referencesParameter) {
|
||||
parameterContextAuthorizable.authorize(authorizer, RequestAction.READ, user);
|
||||
}
|
||||
}
|
||||
|
||||
public static void authorizeParameterReferences(final ComponentAuthorizable authorizable, final Authorizer authorizer, final Authorizable parameterContextAuthorizable, final NiFiUser user) {
|
||||
if (parameterContextAuthorizable == null) {
|
||||
return;
|
||||
|
|
|
@ -25,6 +25,7 @@ import org.apache.nifi.action.component.details.FlowChangeExtensionDetails;
|
|||
import org.apache.nifi.action.details.FlowChangeConfigureDetails;
|
||||
import org.apache.nifi.admin.service.AuditService;
|
||||
import org.apache.nifi.authorization.AuthorizeControllerServiceReference;
|
||||
import org.apache.nifi.authorization.AuthorizeParameterReference;
|
||||
import org.apache.nifi.authorization.Authorizer;
|
||||
import org.apache.nifi.authorization.ComponentAuthorizable;
|
||||
import org.apache.nifi.authorization.RequestAction;
|
||||
|
@ -102,6 +103,10 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
});
|
||||
}
|
||||
|
||||
private Revision getRevision(final RevisionDTO revision, final String id) {
|
||||
return new Revision(revision.getVersion(), revision.getClientId(), id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ControllerService getControllerService(final String serviceIdentifier, final String componentId) {
|
||||
final NiFiUser user = NiFiUserUtils.getNiFiUser();
|
||||
|
@ -354,7 +359,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
authorizable.authorize(authorizer, RequestAction.READ, NiFiUserUtils.getNiFiUser());
|
||||
});
|
||||
|
||||
final ProcessorDTO processor;
|
||||
ProcessorEntity entity;
|
||||
if (properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -380,17 +385,16 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return processor
|
||||
ProcessorEntity entity = (ProcessorEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ProcessorEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ProcessorEntity.class);
|
||||
}
|
||||
processor = entity.getComponent();
|
||||
} else {
|
||||
processor = serviceFacade.getProcessor(id).getComponent();
|
||||
entity = serviceFacade.getProcessor(id);
|
||||
}
|
||||
|
||||
// return the processor info
|
||||
return getComponentConfiguration(processor);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -407,9 +411,13 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
|
||||
// authorize any referenced service
|
||||
AuthorizeControllerServiceReference.authorizeControllerServiceReferences(properties, authorizable, authorizer, lookup);
|
||||
|
||||
// authorize any parameter references
|
||||
AuthorizeParameterReference.authorizeParameterReferences(properties, authorizer, authorizable.getParameterContext(), user);
|
||||
AuthorizeParameterReference.authorizeParameterReferences(annotationData, authorizer, authorizable.getParameterContext(), user);
|
||||
});
|
||||
|
||||
final ProcessorDTO processor;
|
||||
ProcessorEntity entity;
|
||||
if (StandardNiFiWebConfigurationContext.this.properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -449,20 +457,18 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return processor
|
||||
ProcessorEntity entity = (ProcessorEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ProcessorEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ProcessorEntity.class);
|
||||
}
|
||||
processor = entity.getComponent();
|
||||
} else {
|
||||
// update processor within write lock
|
||||
ProcessorDTO processorDTO = buildProcessorDto(id, annotationData, properties);
|
||||
final ProcessorEntity entity = serviceFacade.updateProcessor(revision, processorDTO);
|
||||
processor = entity.getComponent();
|
||||
entity = serviceFacade.updateProcessor(revision, processorDTO);
|
||||
}
|
||||
|
||||
// return the processor info
|
||||
return getComponentConfiguration(processor);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
private ProcessorDTO buildProcessorDto(String id, final String annotationData, Map<String, String> properties) {
|
||||
|
@ -473,13 +479,14 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
configDto.setAnnotationData(annotationData);
|
||||
configDto.setProperties(properties);
|
||||
return processorDto;
|
||||
|
||||
}
|
||||
|
||||
private ComponentDetails getComponentConfiguration(final ProcessorDTO processor) {
|
||||
private ComponentDetails getComponentConfiguration(final ProcessorEntity entity) {
|
||||
final ProcessorDTO processor = entity.getComponent();
|
||||
final ProcessorConfigDTO processorConfig = processor.getConfig();
|
||||
return new ComponentDetails.Builder()
|
||||
.id(processor.getId())
|
||||
.revision(getRevision(entity.getRevision(), entity.getId()))
|
||||
.name(processor.getName())
|
||||
.type(processor.getType())
|
||||
.state(processor.getState())
|
||||
|
@ -530,7 +537,6 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
@Override
|
||||
public ComponentDetails getComponentDetails(final NiFiWebRequestContext requestContext) {
|
||||
final String id = requestContext.getId();
|
||||
final ControllerServiceDTO controllerService;
|
||||
|
||||
// authorize access
|
||||
serviceFacade.authorizeAccess(lookup -> {
|
||||
|
@ -538,6 +544,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
authorizable.authorize(authorizer, RequestAction.READ, NiFiUserUtils.getNiFiUser());
|
||||
});
|
||||
|
||||
ControllerServiceEntity entity;
|
||||
if (properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -563,17 +570,16 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return controller service
|
||||
ControllerServiceEntity entity = (ControllerServiceEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ControllerServiceEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ControllerServiceEntity.class);
|
||||
}
|
||||
controllerService = entity.getComponent();
|
||||
} else {
|
||||
controllerService = serviceFacade.getControllerService(id, true).getComponent();
|
||||
entity = serviceFacade.getControllerService(id, true);
|
||||
}
|
||||
|
||||
// return the controller service info
|
||||
return getComponentConfiguration(controllerService);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -590,9 +596,13 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
|
||||
// authorize any referenced service
|
||||
AuthorizeControllerServiceReference.authorizeControllerServiceReferences(properties, authorizable, authorizer, lookup);
|
||||
|
||||
// authorize any parameter references
|
||||
AuthorizeParameterReference.authorizeParameterReferences(properties, authorizer, authorizable.getParameterContext(), user);
|
||||
AuthorizeParameterReference.authorizeParameterReferences(annotationData, authorizer, authorizable.getParameterContext(), user);
|
||||
});
|
||||
|
||||
final ControllerServiceDTO controllerService;
|
||||
ControllerServiceEntity entity;
|
||||
if (StandardNiFiWebConfigurationContext.this.properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -635,11 +645,10 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return controller service
|
||||
ControllerServiceEntity entity = (ControllerServiceEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ControllerServiceEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ControllerServiceEntity.class);
|
||||
}
|
||||
controllerService = entity.getComponent();
|
||||
} else {
|
||||
final ControllerServiceDTO controllerServiceDto = new ControllerServiceDTO();
|
||||
controllerServiceDto.setId(id);
|
||||
|
@ -647,17 +656,18 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
controllerServiceDto.setProperties(properties);
|
||||
|
||||
// update controller service
|
||||
final ControllerServiceEntity entity = serviceFacade.updateControllerService(revision, controllerServiceDto);
|
||||
controllerService = entity.getComponent();
|
||||
entity = serviceFacade.updateControllerService(revision, controllerServiceDto);
|
||||
}
|
||||
|
||||
// return the controller service info
|
||||
return getComponentConfiguration(controllerService);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
private ComponentDetails getComponentConfiguration(final ControllerServiceDTO controllerService) {
|
||||
private ComponentDetails getComponentConfiguration(final ControllerServiceEntity entity) {
|
||||
final ControllerServiceDTO controllerService = entity.getComponent();
|
||||
return new ComponentDetails.Builder()
|
||||
.id(controllerService.getId())
|
||||
.revision(getRevision(entity.getRevision(), entity.getId()))
|
||||
.name(controllerService.getName())
|
||||
.type(controllerService.getType())
|
||||
.state(controllerService.getState())
|
||||
|
@ -675,7 +685,6 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
@Override
|
||||
public ComponentDetails getComponentDetails(final NiFiWebRequestContext requestContext) {
|
||||
final String id = requestContext.getId();
|
||||
final ReportingTaskDTO reportingTask;
|
||||
|
||||
// authorize access
|
||||
serviceFacade.authorizeAccess(lookup -> {
|
||||
|
@ -683,6 +692,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
authorizable.authorize(authorizer, RequestAction.READ, NiFiUserUtils.getNiFiUser());
|
||||
});
|
||||
|
||||
ReportingTaskEntity entity;
|
||||
if (properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -708,17 +718,16 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return reporting task
|
||||
ReportingTaskEntity entity = (ReportingTaskEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ReportingTaskEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ReportingTaskEntity.class);
|
||||
}
|
||||
reportingTask = entity.getComponent();
|
||||
} else {
|
||||
reportingTask = serviceFacade.getReportingTask(id).getComponent();
|
||||
entity = serviceFacade.getReportingTask(id);
|
||||
}
|
||||
|
||||
// return the reporting task info
|
||||
return getComponentConfiguration(reportingTask);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -737,7 +746,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
AuthorizeControllerServiceReference.authorizeControllerServiceReferences(properties, authorizable, authorizer, lookup);
|
||||
});
|
||||
|
||||
final ReportingTaskDTO reportingTask;
|
||||
ReportingTaskEntity entity;
|
||||
if (StandardNiFiWebConfigurationContext.this.properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -780,11 +789,10 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return reporting task
|
||||
ReportingTaskEntity entity = (ReportingTaskEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ReportingTaskEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ReportingTaskEntity.class);
|
||||
}
|
||||
reportingTask = entity.getComponent();
|
||||
} else {
|
||||
final ReportingTaskDTO reportingTaskDto = new ReportingTaskDTO();
|
||||
reportingTaskDto.setId(id);
|
||||
|
@ -793,17 +801,18 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
|
||||
// obtain write lock
|
||||
serviceFacade.verifyRevision(revision, user);
|
||||
final ReportingTaskEntity entity = serviceFacade.updateReportingTask(revision, reportingTaskDto);
|
||||
reportingTask = entity.getComponent();
|
||||
entity = serviceFacade.updateReportingTask(revision, reportingTaskDto);
|
||||
}
|
||||
|
||||
// return the processor info
|
||||
return getComponentConfiguration(reportingTask);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
private ComponentDetails getComponentConfiguration(final ReportingTaskDTO reportingTask) {
|
||||
private ComponentDetails getComponentConfiguration(final ReportingTaskEntity entity) {
|
||||
final ReportingTaskDTO reportingTask = entity.getComponent();
|
||||
return new ComponentDetails.Builder()
|
||||
.id(reportingTask.getId())
|
||||
.revision(getRevision(entity.getRevision(), entity.getId()))
|
||||
.name(reportingTask.getName())
|
||||
.type(reportingTask.getType())
|
||||
.state(reportingTask.getState())
|
||||
|
@ -821,7 +830,6 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
@Override
|
||||
public ComponentDetails getComponentDetails(final NiFiWebRequestContext requestContext) {
|
||||
final String id = requestContext.getId();
|
||||
final ParameterProviderDTO parameterProvider;
|
||||
|
||||
// authorize access
|
||||
serviceFacade.authorizeAccess(lookup -> {
|
||||
|
@ -829,6 +837,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
authorizable.authorize(authorizer, RequestAction.READ, NiFiUserUtils.getNiFiUser());
|
||||
});
|
||||
|
||||
ParameterProviderEntity entity;
|
||||
if (properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -854,17 +863,16 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return parameter provider
|
||||
ParameterProviderEntity entity = (ParameterProviderEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ParameterProviderEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ParameterProviderEntity.class);
|
||||
}
|
||||
parameterProvider = entity.getComponent();
|
||||
} else {
|
||||
parameterProvider = serviceFacade.getParameterProvider(id).getComponent();
|
||||
entity = serviceFacade.getParameterProvider(id);
|
||||
}
|
||||
|
||||
// return the parameter provider info
|
||||
return getComponentConfiguration(parameterProvider);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -883,7 +891,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
AuthorizeControllerServiceReference.authorizeControllerServiceReferences(properties, authorizable, authorizer, lookup);
|
||||
});
|
||||
|
||||
final ParameterProviderDTO parameterProvider;
|
||||
ParameterProviderEntity entity;
|
||||
if (StandardNiFiWebConfigurationContext.this.properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -926,11 +934,10 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return parameter provider
|
||||
ParameterProviderEntity entity = (ParameterProviderEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (ParameterProviderEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(ParameterProviderEntity.class);
|
||||
}
|
||||
parameterProvider = entity.getComponent();
|
||||
} else {
|
||||
final ParameterProviderDTO parameterProviderDto = new ParameterProviderDTO();
|
||||
parameterProviderDto.setId(id);
|
||||
|
@ -939,17 +946,18 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
|
||||
// obtain write lock
|
||||
serviceFacade.verifyRevision(revision, user);
|
||||
final ParameterProviderEntity entity = serviceFacade.updateParameterProvider(revision, parameterProviderDto);
|
||||
parameterProvider = entity.getComponent();
|
||||
entity = serviceFacade.updateParameterProvider(revision, parameterProviderDto);
|
||||
}
|
||||
|
||||
// return the processor info
|
||||
return getComponentConfiguration(parameterProvider);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
private ComponentDetails getComponentConfiguration(final ParameterProviderDTO parameterProvider) {
|
||||
private ComponentDetails getComponentConfiguration(final ParameterProviderEntity entity) {
|
||||
final ParameterProviderDTO parameterProvider = entity.getComponent();
|
||||
return new ComponentDetails.Builder()
|
||||
.id(parameterProvider.getId())
|
||||
.revision(getRevision(entity.getRevision(), entity.getId()))
|
||||
.name(parameterProvider.getName())
|
||||
.type(parameterProvider.getType())
|
||||
.annotationData(parameterProvider.getAnnotationData())
|
||||
|
@ -966,7 +974,6 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
@Override
|
||||
public ComponentDetails getComponentDetails(final NiFiWebRequestContext requestContext) {
|
||||
final String id = requestContext.getId();
|
||||
final FlowRegistryClientDTO flowRegistryClient;
|
||||
|
||||
// authorize access
|
||||
serviceFacade.authorizeAccess(lookup -> {
|
||||
|
@ -974,6 +981,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
authorizable.authorize(authorizer, RequestAction.READ, NiFiUserUtils.getNiFiUser());
|
||||
});
|
||||
|
||||
FlowRegistryClientEntity entity;
|
||||
if (properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -999,17 +1007,16 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return flow registry client
|
||||
FlowRegistryClientEntity entity = (FlowRegistryClientEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (FlowRegistryClientEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(FlowRegistryClientEntity.class);
|
||||
}
|
||||
flowRegistryClient = entity.getComponent();
|
||||
} else {
|
||||
flowRegistryClient = serviceFacade.getRegistryClient(id).getComponent();
|
||||
entity = serviceFacade.getRegistryClient(id);
|
||||
}
|
||||
|
||||
// return the flow registry client info
|
||||
return getComponentConfiguration(flowRegistryClient);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1028,7 +1035,7 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
AuthorizeControllerServiceReference.authorizeControllerServiceReferences(properties, authorizable, authorizer, lookup);
|
||||
});
|
||||
|
||||
final FlowRegistryClientDTO flowRegistryClient;
|
||||
FlowRegistryClientEntity entity;
|
||||
if (StandardNiFiWebConfigurationContext.this.properties.isClustered() && clusterCoordinator != null && clusterCoordinator.isConnected()) {
|
||||
// create the request URL
|
||||
URI requestUrl;
|
||||
|
@ -1071,11 +1078,10 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
checkResponse(nodeResponse, id);
|
||||
|
||||
// return flow registry client
|
||||
FlowRegistryClientEntity entity = (FlowRegistryClientEntity) nodeResponse.getUpdatedEntity();
|
||||
entity = (FlowRegistryClientEntity) nodeResponse.getUpdatedEntity();
|
||||
if (entity == null) {
|
||||
entity = nodeResponse.getClientResponse().readEntity(FlowRegistryClientEntity.class);
|
||||
}
|
||||
flowRegistryClient = entity.getComponent();
|
||||
} else {
|
||||
final FlowRegistryClientDTO flowRegistryClientDTO = new FlowRegistryClientDTO();
|
||||
flowRegistryClientDTO.setId(id);
|
||||
|
@ -1084,17 +1090,18 @@ public class StandardNiFiWebConfigurationContext implements NiFiWebConfiguration
|
|||
|
||||
// obtain write lock
|
||||
serviceFacade.verifyRevision(revision, user);
|
||||
final FlowRegistryClientEntity entity = serviceFacade.updateRegistryClient(revision, flowRegistryClientDTO);
|
||||
flowRegistryClient = entity.getComponent();
|
||||
entity = serviceFacade.updateRegistryClient(revision, flowRegistryClientDTO);
|
||||
}
|
||||
|
||||
// return the processor info
|
||||
return getComponentConfiguration(flowRegistryClient);
|
||||
return getComponentConfiguration(entity);
|
||||
}
|
||||
|
||||
private ComponentDetails getComponentConfiguration(final FlowRegistryClientDTO parameterProvider) {
|
||||
private ComponentDetails getComponentConfiguration(final FlowRegistryClientEntity entity) {
|
||||
final FlowRegistryClientDTO parameterProvider = entity.getComponent();
|
||||
return new ComponentDetails.Builder()
|
||||
.id(parameterProvider.getId())
|
||||
.revision(getRevision(entity.getRevision(), entity.getId()))
|
||||
.name(parameterProvider.getName())
|
||||
.type(parameterProvider.getType())
|
||||
.annotationData(parameterProvider.getAnnotationData())
|
||||
|
|
|
@ -156,6 +156,32 @@
|
|||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-built-update-attribute-app</id>
|
||||
<phase>process-resources</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/${project.build.finalName}/update-attribute</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>${frontend.working.dir}/dist/update-attribute/browser</directory>
|
||||
<filtering>false</filtering>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>${frontend.working.dir}/dist/update-attribute</directory>
|
||||
<filtering>false</filtering>
|
||||
<includes>
|
||||
<include>3rdpartylicenses.txt</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!--
|
||||
Copy the staged applications into the bundle. Each application requires its own configuration.
|
||||
-->
|
||||
|
@ -216,6 +242,25 @@
|
|||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>bundle-built-update-attribute-app</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.outputDirectory}/update-attribute</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>${project.build.directory}/${project.build.finalName}/update-attribute</directory>
|
||||
<filtering>false</filtering>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
|
|
|
@ -89,7 +89,7 @@
|
|||
},
|
||||
"development": {
|
||||
"buildTarget": "nifi-jolt-transform-ui:build:development",
|
||||
"servePath": "/nifi-jolt-transform-json-ui-2.0.0-SNAPSHOT/"
|
||||
"servePath": "/nifi-jolt-transform-json-ui-2.1.0-SNAPSHOT/"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "development"
|
||||
|
|
|
@ -19,7 +19,7 @@ import { JoltTransformJsonUi } from './jolt-transform-json-ui.component';
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { provideMockStore } from '@ngrx/store/testing';
|
||||
import { initialState } from '../state/jolt-transform-json-processor-details/jolt-transform-json-processor-details.reducer';
|
||||
import { joltTransformJsonUiFeatureKey } from '../state';
|
||||
import { joltTransformJsonProcessorDetailsFeatureKey, joltTransformJsonUiFeatureKey } from '../state';
|
||||
|
||||
describe('jolt-transform-json-ui', () => {
|
||||
let component: JoltTransformJsonUi;
|
||||
|
@ -32,7 +32,7 @@ describe('jolt-transform-json-ui', () => {
|
|||
provideMockStore({
|
||||
initialState: {
|
||||
[joltTransformJsonUiFeatureKey]: {
|
||||
[joltTransformJsonUiFeatureKey]: initialState
|
||||
[joltTransformJsonProcessorDetailsFeatureKey]: initialState
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -28,8 +28,7 @@ import { MatDialog } from '@angular/material/dialog';
|
|||
import { AccessPolicyService } from '../../service/access-policy.service';
|
||||
import { AccessPolicyEntity, ComponentResourceAction, PolicyStatus, ResourceAction } from '../shared';
|
||||
import { selectAccessPolicy, selectResourceAction, selectSaving } from './access-policy.selectors';
|
||||
import { YesNoDialog } from '../../../../ui/common/yes-no-dialog/yes-no-dialog.component';
|
||||
import { isDefinedAndNotNull, MEDIUM_DIALOG, SMALL_DIALOG } from 'libs/shared/src';
|
||||
import { isDefinedAndNotNull, MEDIUM_DIALOG, SMALL_DIALOG, YesNoDialog } from '@nifi/shared';
|
||||
import { TenantEntity } from '../../../../state/shared';
|
||||
import { AddTenantToPolicyDialog } from '../../ui/common/add-tenant-to-policy-dialog/add-tenant-to-policy-dialog.component';
|
||||
import { AddTenantsToPolicyRequest } from './index';
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { AccessPolicySummary, Permissions, Revision, TenantEntity } from '../../../../state/shared';
|
||||
import { AccessPolicySummary, TenantEntity } from '../../../../state/shared';
|
||||
import { Revision, Permissions } from '@nifi/shared';
|
||||
|
||||
export enum PolicyStatus {
|
||||
Found = 'Found',
|
||||
|
|
|
@ -39,8 +39,7 @@ import {
|
|||
import { distinctUntilChanged } from 'rxjs';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
|
||||
import { NiFiCommon, TextTip } from '@nifi/shared';
|
||||
import { ComponentType, isDefinedAndNotNull, SelectOption } from 'libs/shared/src';
|
||||
import { ComponentType, isDefinedAndNotNull, NiFiCommon, SelectOption, TextTip } from '@nifi/shared';
|
||||
import { AccessPolicyEntity, Action, PolicyStatus, ResourceAction } from '../../state/shared';
|
||||
import { selectFlowConfiguration } from '../../../../state/flow-configuration/flow-configuration.selectors';
|
||||
import { loadTenants, resetTenantsState } from '../../state/tenants/tenants.actions';
|
||||
|
|
|
@ -38,8 +38,7 @@ import {
|
|||
import { distinctUntilChanged } from 'rxjs';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
|
||||
import { NiFiCommon, TextTip } from '@nifi/shared';
|
||||
import { ComponentType, isDefinedAndNotNull, SelectOption } from 'libs/shared/src';
|
||||
import { ComponentType, isDefinedAndNotNull, NiFiCommon, SelectOption, TextTip } from '@nifi/shared';
|
||||
import { RequiredPermission } from '../../../../state/shared';
|
||||
import { AccessPolicyEntity, Action, PolicyStatus } from '../../state/shared';
|
||||
import { loadExtensionTypesForPolicies } from '../../../../state/extension-types/extension-types.actions';
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { BulletinEntity } from '../../../../state/shared';
|
||||
import { BulletinEntity } from '@nifi/shared';
|
||||
|
||||
export const bulletinBoardFeatureKey = 'bulletin-board';
|
||||
|
||||
|
|
|
@ -27,16 +27,13 @@ import {
|
|||
Output,
|
||||
ViewChild
|
||||
} from '@angular/core';
|
||||
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatOptionModule } from '@angular/material/core';
|
||||
import { MatSelectModule } from '@angular/material/select';
|
||||
import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
||||
import { NiFiCommon } from '@nifi/shared';
|
||||
import { BulletinEntity, ComponentType, NiFiCommon } from '@nifi/shared';
|
||||
import { BulletinBoardEvent, BulletinBoardFilterArgs, BulletinBoardItem } from '../../../state/bulletin-board';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { BulletinEntity } from '../../../../../state/shared';
|
||||
import { debounceTime, delay, Subject } from 'rxjs';
|
||||
import { RouterLink } from '@angular/router';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
|
|
|
@ -28,8 +28,7 @@ import { selectClusterListingStatus } from './cluster-listing.selectors';
|
|||
import { reloadSystemDiagnostics } from '../../../../state/system-diagnostics/system-diagnostics.actions';
|
||||
import { ClusterService } from '../../service/cluster.service';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { YesNoDialog } from '../../../../ui/common/yes-no-dialog/yes-no-dialog.component';
|
||||
import { LARGE_DIALOG, MEDIUM_DIALOG, SMALL_DIALOG } from 'libs/shared/src';
|
||||
import { LARGE_DIALOG, MEDIUM_DIALOG, SMALL_DIALOG, YesNoDialog } from '@nifi/shared';
|
||||
import { ClusterNodeDetailDialog } from '../../ui/cluster-node-listing/cluster-node-detail-dialog/cluster-node-detail-dialog.component';
|
||||
import * as ErrorActions from '../../../../state/error/error.actions';
|
||||
import { SelectClusterNodeRequest } from './index';
|
||||
|
|
|
@ -26,7 +26,7 @@ import {
|
|||
selectClusterStorageRepositoryIdFromRoute
|
||||
} from '../../state/cluster-listing/cluster-listing.selectors';
|
||||
import { selectSystemNodeSnapshots } from '../../../../state/system-diagnostics/system-diagnostics.selectors';
|
||||
import { isDefinedAndNotNull } from 'libs/shared/src';
|
||||
import { isDefinedAndNotNull } from '@nifi/shared';
|
||||
import { map } from 'rxjs';
|
||||
import { ClusterNodeRepositoryStorageUsage } from '../../../../state/system-diagnostics';
|
||||
import { Store } from '@ngrx/store';
|
||||
|
|
|
@ -29,7 +29,7 @@ import { NiFiState } from '../../../../state';
|
|||
import { initialClusterState } from '../../state/cluster-listing/cluster-listing.reducer';
|
||||
import { ClusterNodeRepositoryStorageUsage } from '../../../../state/system-diagnostics';
|
||||
import { map } from 'rxjs';
|
||||
import { isDefinedAndNotNull } from 'libs/shared/src';
|
||||
import { isDefinedAndNotNull } from '@nifi/shared';
|
||||
import { AsyncPipe } from '@angular/common';
|
||||
import {
|
||||
clearFlowFileStorageNodeSelection,
|
||||
|
|
|
@ -23,7 +23,7 @@ import {
|
|||
selectClusterStorageRepositoryIdFromRoute
|
||||
} from '../../state/cluster-listing/cluster-listing.selectors';
|
||||
import { selectSystemNodeSnapshots } from '../../../../state/system-diagnostics/system-diagnostics.selectors';
|
||||
import { isDefinedAndNotNull } from 'libs/shared/src';
|
||||
import { isDefinedAndNotNull } from '@nifi/shared';
|
||||
import { map } from 'rxjs';
|
||||
import { ClusterNodeRepositoryStorageUsage } from '../../../../state/system-diagnostics';
|
||||
import { Store } from '@ngrx/store';
|
||||
|
|
|
@ -24,12 +24,11 @@ import * as CounterListingActions from './counter-listing.actions';
|
|||
import { catchError, from, map, of, switchMap, take, tap } from 'rxjs';
|
||||
import { CountersService } from '../../service/counters.service';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { YesNoDialog } from '../../../../ui/common/yes-no-dialog/yes-no-dialog.component';
|
||||
import { SMALL_DIALOG, YesNoDialog } from '@nifi/shared';
|
||||
import * as ErrorActions from '../../../../state/error/error.actions';
|
||||
import { ErrorHelper } from '../../../../service/error-helper.service';
|
||||
import { HttpErrorResponse } from '@angular/common/http';
|
||||
import { selectStatus } from './counter-listing.selectors';
|
||||
import { SMALL_DIALOG } from 'libs/shared/src';
|
||||
|
||||
@Injectable()
|
||||
export class CounterListingEffects {
|
||||
|
|
|
@ -31,11 +31,9 @@ import { HttpErrorResponse } from '@angular/common/http';
|
|||
import { Router } from '@angular/router';
|
||||
import { ActionDetails } from '../../ui/flow-configuration-history-listing/action-details/action-details.component';
|
||||
import { PurgeHistory } from '../../ui/flow-configuration-history-listing/purge-history/purge-history.component';
|
||||
import { YesNoDialog } from '../../../../ui/common/yes-no-dialog/yes-no-dialog.component';
|
||||
import { isDefinedAndNotNull } from 'libs/shared/src';
|
||||
import { isDefinedAndNotNull, MEDIUM_DIALOG, SMALL_DIALOG, YesNoDialog } from '@nifi/shared';
|
||||
import * as ErrorActions from '../../../../state/error/error.actions';
|
||||
import { selectAbout } from '../../../../state/about/about.selectors';
|
||||
import { MEDIUM_DIALOG, SMALL_DIALOG } from 'libs/shared/src';
|
||||
|
||||
@Injectable()
|
||||
export class FlowConfigurationHistoryListingEffects {
|
||||
|
|
|
@ -36,7 +36,6 @@ import { MatPaginatorModule, PageEvent } from '@angular/material/paginator';
|
|||
import { FlowConfigurationHistoryTable } from './flow-configuration-history-table/flow-configuration-history-table.component';
|
||||
import { Sort } from '@angular/material/sort';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { isDefinedAndNotNull } from 'libs/shared/src';
|
||||
import { FormBuilder, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
|
@ -45,7 +44,7 @@ import { MatSelectModule } from '@angular/material/select';
|
|||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { selectAbout } from '../../../../state/about/about.selectors';
|
||||
import { debounceTime } from 'rxjs';
|
||||
import { NiFiCommon } from '@nifi/shared';
|
||||
import { isDefinedAndNotNull, NiFiCommon } from '@nifi/shared';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { selectCurrentUser } from '../../../../state/current-user/current-user.selectors';
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ import { Client } from '../../../../service/client.service';
|
|||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { MoveComponentRequest, UpdateComponentRequest } from '../../state/flow';
|
||||
import { Position } from '../../state/shared';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { ComponentType } from '@nifi/shared';
|
||||
import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
|
||||
|
||||
@Injectable({
|
||||
|
|
|
@ -52,7 +52,7 @@ import { CanvasState } from '../state';
|
|||
import * as d3 from 'd3';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
import { CanvasView } from './canvas-view.service';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { ComponentType } from '@nifi/shared';
|
||||
import { Client } from '../../../service/client.service';
|
||||
import { CopyRequestContext, CopyRequestEntity, CopyResponseEntity } from '../../../state/copy';
|
||||
import { CopyPasteService } from './copy-paste.service';
|
||||
|
|
|
@ -51,7 +51,7 @@ import {
|
|||
terminateThreads,
|
||||
updatePositions
|
||||
} from '../state/flow/flow.actions';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { ComponentType } from '@nifi/shared';
|
||||
import {
|
||||
ConfirmStopVersionControlRequest,
|
||||
MoveComponentRequest,
|
||||
|
|
|
@ -32,9 +32,7 @@ import { initialState as initialFlowState } from '../state/flow/flow.reducer';
|
|||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
import { BulletinsTip } from '../../../ui/common/tooltips/bulletins-tip/bulletins-tip.component';
|
||||
import { BreadcrumbEntity, Position } from '../state/shared';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { BulletinEntity, ParameterContextReferenceEntity, Permissions } from '../../../state/shared';
|
||||
import { NiFiCommon } from '@nifi/shared';
|
||||
import { BulletinEntity, ComponentType, NiFiCommon, ParameterContextReferenceEntity, Permissions } from '@nifi/shared';
|
||||
import { CurrentUser } from '../../../state/current-user';
|
||||
import { initialState as initialUserState } from '../../../state/current-user/current-user.reducer';
|
||||
import { selectCurrentUser } from '../../../state/current-user/current-user.selectors';
|
||||
|
|
|
@ -50,9 +50,8 @@ import {
|
|||
UploadProcessGroupRequest,
|
||||
VersionControlInformationEntity
|
||||
} from '../state/flow';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { Client } from '../../../service/client.service';
|
||||
import { NiFiCommon } from '@nifi/shared';
|
||||
import { ComponentType, NiFiCommon } from '@nifi/shared';
|
||||
import { ClusterConnectionService } from '../../../service/cluster-connection.service';
|
||||
import { PropertyDescriptorRetriever } from '../../../state/shared';
|
||||
|
||||
|
|
|
@ -18,10 +18,9 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { NiFiCommon } from '@nifi/shared';
|
||||
import { ComponentType, NiFiCommon } from '@nifi/shared';
|
||||
import { ConfigureRemotePortRequest, ToggleRemotePortTransmissionRequest } from '../state/manage-remote-ports';
|
||||
import { Client } from '../../../service/client.service';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class ManageRemotePortService {
|
||||
|
|
|
@ -40,11 +40,10 @@ import {
|
|||
updateConnection
|
||||
} from '../../state/flow/flow.actions';
|
||||
import { UnorderedListTip } from '../../../../ui/common/tooltips/unordered-list-tip/unordered-list-tip.component';
|
||||
import { ComponentType, SelectOption } from 'libs/shared/src';
|
||||
import { Dimension, Position } from '../../state/shared';
|
||||
import { loadBalanceStrategies, UpdateComponentRequest } from '../../state/flow';
|
||||
import { filter, Subject, switchMap, takeUntil } from 'rxjs';
|
||||
import { NiFiCommon } from '@nifi/shared';
|
||||
import { ComponentType, NiFiCommon, SelectOption } from '@nifi/shared';
|
||||
import { QuickSelectBehavior } from '../behavior/quick-select-behavior.service';
|
||||
import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ import {
|
|||
selectTransitionRequired
|
||||
} from '../../state/flow/flow.selectors';
|
||||
import { Dimension } from '../../state/shared';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { ComponentType } from '@nifi/shared';
|
||||
import { filter, Subject, switchMap, takeUntil } from 'rxjs';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
|
|
|
@ -32,10 +32,9 @@ import {
|
|||
import { Client } from '../../../../service/client.service';
|
||||
import { updateComponent } from '../../state/flow/flow.actions';
|
||||
import { QuickSelectBehavior } from '../behavior/quick-select-behavior.service';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { UpdateComponentRequest } from '../../state/flow';
|
||||
import { filter, Subject, switchMap, takeUntil } from 'rxjs';
|
||||
import { NiFiCommon } from '@nifi/shared';
|
||||
import { ComponentType, NiFiCommon } from '@nifi/shared';
|
||||
import { ClusterConnectionService } from '../../../../service/cluster-connection.service';
|
||||
|
||||
@Injectable({
|
||||
|
|
|
@ -30,10 +30,9 @@ import {
|
|||
selectTransitionRequired
|
||||
} from '../../state/flow/flow.selectors';
|
||||
import { QuickSelectBehavior } from '../behavior/quick-select-behavior.service';
|
||||
import { TextTip, NiFiCommon } from '@nifi/shared';
|
||||
import { ComponentType, TextTip, NiFiCommon } from '@nifi/shared';
|
||||
import { ValidationErrorsTip } from '../../../../ui/common/tooltips/validation-errors-tip/validation-errors-tip.component';
|
||||
import { Dimension } from '../../state/shared';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { filter, Subject, switchMap, takeUntil } from 'rxjs';
|
||||
import { renderConnectionsForComponent } from '../../state/flow/flow.actions';
|
||||
|
||||
|
|
|
@ -32,9 +32,8 @@ import { CanvasUtils } from '../canvas-utils.service';
|
|||
import { enterProcessGroup } from '../../state/flow/flow.actions';
|
||||
import { VersionControlTip } from '../../ui/common/tooltips/version-control-tip/version-control-tip.component';
|
||||
import { Dimension } from '../../state/shared';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { filter, Subject, switchMap, takeUntil } from 'rxjs';
|
||||
import { NiFiCommon, TextTip } from '@nifi/shared';
|
||||
import { ComponentType, NiFiCommon, TextTip } from '@nifi/shared';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
|
|
|
@ -31,9 +31,8 @@ import {
|
|||
} from '../../state/flow/flow.selectors';
|
||||
import { QuickSelectBehavior } from '../behavior/quick-select-behavior.service';
|
||||
import { ValidationErrorsTip } from '../../../../ui/common/tooltips/validation-errors-tip/validation-errors-tip.component';
|
||||
import { TextTip, NiFiCommon } from '@nifi/shared';
|
||||
import { ComponentType, TextTip, NiFiCommon } from '@nifi/shared';
|
||||
import { Dimension } from '../../state/shared';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { filter, Subject, switchMap, takeUntil } from 'rxjs';
|
||||
|
||||
@Injectable({
|
||||
|
|
|
@ -32,9 +32,8 @@ import {
|
|||
import { QuickSelectBehavior } from '../behavior/quick-select-behavior.service';
|
||||
import { ValidationErrorsTip } from '../../../../ui/common/tooltips/validation-errors-tip/validation-errors-tip.component';
|
||||
import { Dimension } from '../../state/shared';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { filter, Subject, switchMap, takeUntil } from 'rxjs';
|
||||
import { NiFiCommon, TextTip } from '@nifi/shared';
|
||||
import { ComponentType, NiFiCommon, TextTip } from '@nifi/shared';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
|
|
|
@ -29,7 +29,7 @@ import { selectParameterSaving, selectParameterState } from '../state/parameter/
|
|||
import { ParameterState } from '../state/parameter';
|
||||
import * as ErrorActions from '../../../state/error/error.actions';
|
||||
import * as ParameterActions from '../state/parameter/parameter.actions';
|
||||
import { MEDIUM_DIALOG } from 'libs/shared/src';
|
||||
import { MEDIUM_DIALOG } from '@nifi/shared';
|
||||
import { ClusterConnectionService } from '../../../service/cluster-connection.service';
|
||||
import { ErrorHelper } from '../../../service/error-helper.service';
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ export const controllerServiceAdvancedUiParamsResolver: ResolveFn<AdvancedUiPara
|
|||
map((entity) => {
|
||||
const revision = client.getRevision(entity);
|
||||
|
||||
const editable = entity.status.runStatus === 'DISABLED';
|
||||
const editable = entity.status.runStatus === 'DISABLED' && entity.permissions.canWrite;
|
||||
|
||||
return {
|
||||
url: entity.component.customUiUrl,
|
||||
|
|
|
@ -66,10 +66,11 @@ export const processorAdvancedUiParamsResolver: ResolveFn<AdvancedUiParams> = (r
|
|||
map((entity) => {
|
||||
const revision = client.getRevision(entity);
|
||||
|
||||
const editable = !(
|
||||
entity.status.aggregateSnapshot.runStatus === 'Running' ||
|
||||
entity.status.aggregateSnapshot.activeThreadCount > 0
|
||||
);
|
||||
const editable =
|
||||
!(
|
||||
entity.status.aggregateSnapshot.runStatus === 'Running' ||
|
||||
entity.status.aggregateSnapshot.activeThreadCount > 0
|
||||
) && entity.permissions.canWrite;
|
||||
|
||||
return {
|
||||
url: entity.component.config.customUiUrl,
|
||||
|
|
|
@ -20,7 +20,7 @@ import { Observable } from 'rxjs';
|
|||
import { HttpClient, HttpParams } from '@angular/common/http';
|
||||
import { Snippet, SnippetComponentRequest } from '../state/flow';
|
||||
import { ClusterConnectionService } from '../../../service/cluster-connection.service';
|
||||
import { ComponentType } from 'libs/shared/src';
|
||||
import { ComponentType } from '@nifi/shared';
|
||||
import { Client } from '../../../service/client.service';
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
|
|