@kumologica/sdk 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/bin/kl.js +3 -0
- package/cli/cli.js +6 -0
- package/cli/commands/build-commands/aws.js +49 -0
- package/cli/commands/build-commands/azure.js +43 -0
- package/cli/commands/build-commands/kumohub.js +7 -0
- package/cli/commands/build.js +6 -0
- package/cli/commands/create.js +32 -0
- package/cli/commands/deploy-commands/kumohub.js +114 -0
- package/cli/commands/deploy.js +6 -0
- package/cli/commands/doc-commands/html.js +61 -0
- package/cli/commands/doc.js +6 -0
- package/cli/commands/export-commands/cloudformation.js +338 -0
- package/cli/commands/export-commands/serverless.js +164 -0
- package/cli/commands/export-commands/terraform-commands/aws.js +193 -0
- package/cli/commands/export-commands/terraform-commands/azure.js +148 -0
- package/cli/commands/export-commands/terraform.js +6 -0
- package/cli/commands/export-commands/utils/validator.js +152 -0
- package/cli/commands/export.js +6 -0
- package/cli/commands/import-commands/mulesoft.js +61 -0
- package/cli/commands/import.js +6 -0
- package/cli/commands/open.js +46 -0
- package/cli/commands/test-utils/TestSuiteController.js +359 -0
- package/cli/commands/test-utils/TestSuiteController.test.js +171 -0
- package/cli/commands/test-utils/fixtures/example3-flow.json +148 -0
- package/cli/commands/test-utils/fixtures/package.json +6 -0
- package/cli/commands/test-utils/fixtures/s3-event.js +43 -0
- package/cli/commands/test-utils/util/output.js +14 -0
- package/cli/commands/test-utils/util/updates/index.js +17 -0
- package/cli/commands/test-utils/util/updates/pkg.js +13 -0
- package/cli/commands/test-utils/util/updates/templates/default-settings.js +209 -0
- package/cli/commands/test.js +66 -0
- package/cli/commands/utils.js +14 -0
- package/package.json +158 -0
- package/src/app/lib/aws/aws-profile.js +43 -0
- package/src/app/lib/aws/ca-alexa-api.js +29 -0
- package/src/app/lib/aws/ca-apigw-api.js +216 -0
- package/src/app/lib/aws/ca-cloudwatch-api.js +78 -0
- package/src/app/lib/aws/ca-codecommit-api.js +63 -0
- package/src/app/lib/aws/ca-dynamodb-api.js +27 -0
- package/src/app/lib/aws/ca-elb-api.js +44 -0
- package/src/app/lib/aws/ca-events-api.js +27 -0
- package/src/app/lib/aws/ca-iot-api.js +105 -0
- package/src/app/lib/aws/ca-s3-api.js +115 -0
- package/src/app/lib/aws/ca-sns-api.js +38 -0
- package/src/app/lib/aws/ca-sqs-api.js +51 -0
- package/src/app/lib/aws/cf.js +439 -0
- package/src/app/lib/aws/index.js +970 -0
- package/src/app/lib/aws/kl-iam-api.js +27 -0
- package/src/app/lib/aws/kl-rekognition-api.js +66 -0
- package/src/app/lib/aws/kl-ssm-api.js +24 -0
- package/src/app/lib/azure/index.js +80 -0
- package/src/app/lib/dependencies.js +50 -0
- package/src/app/lib/kumohub/index.js +201 -0
- package/src/app/lib/runtime-loader/index.js +42 -0
- package/src/app/lib/serverless/index.js +318 -0
- package/src/app/lib/stores/aws-cloud-config-store.js +35 -0
- package/src/app/lib/stores/azure-config-store.js +24 -0
- package/src/app/lib/stores/kumohub-config-store.js +24 -0
- package/src/app/lib/stores/project-info-config-store.js +26 -0
- package/src/app/lib/stores/settings-cloud-store.js +117 -0
- package/src/app/lib/stores/settings-cloud-store.spec.js +26 -0
- package/src/app/lib/stores/settings-network-store.js +119 -0
- package/src/app/lib/stores/settings-network-store.spec.js +27 -0
- package/src/app/lib/stores/store.js +97 -0
- package/src/app/lib/stores/test-config-store.js +26 -0
- package/src/app/lib/stores/user-preference-store.js +44 -0
- package/src/app/lib/utils/editor.js +98 -0
- package/src/app/lib/utils/fix-path.js +15 -0
- package/src/app/main-process/favicon.ico +0 -0
- package/src/app/main-process/main-window.js +209 -0
- package/src/app/main-process/menu.js +219 -0
- package/src/app/main-process/modal-home.js +118 -0
- package/src/app/main-process/modal-newproject.js +119 -0
- package/src/app/main-process/modal-nodelibrary.js +90 -0
- package/src/app/main-process/modal-welcome.js +114 -0
- package/src/app/main-process/runtime-manager.js +141 -0
- package/src/app/main.js +590 -0
- package/src/app/preload.js +633 -0
- package/src/app/ui/editor-api/lib/admin/context.js +42 -0
- package/src/app/ui/editor-api/lib/admin/flow.js +55 -0
- package/src/app/ui/editor-api/lib/admin/flows.js +53 -0
- package/src/app/ui/editor-api/lib/admin/index.js +155 -0
- package/src/app/ui/editor-api/lib/admin/nodes.js +164 -0
- package/src/app/ui/editor-api/lib/auth/clients.js +17 -0
- package/src/app/ui/editor-api/lib/auth/index.js +267 -0
- package/src/app/ui/editor-api/lib/auth/permissions.js +51 -0
- package/src/app/ui/editor-api/lib/auth/strategies.js +144 -0
- package/src/app/ui/editor-api/lib/auth/tokens.js +138 -0
- package/src/app/ui/editor-api/lib/auth/users.js +122 -0
- package/src/app/ui/editor-api/lib/editor/comms.js +247 -0
- package/src/app/ui/editor-api/lib/editor/credentials.js +22 -0
- package/src/app/ui/editor-api/lib/editor/index.js +234 -0
- package/src/app/ui/editor-api/lib/editor/library.js +69 -0
- package/src/app/ui/editor-api/lib/editor/locales.js +37 -0
- package/src/app/ui/editor-api/lib/editor/projects.js +497 -0
- package/src/app/ui/editor-api/lib/editor/settings.js +118 -0
- package/src/app/ui/editor-api/lib/editor/sshkeys.js +87 -0
- package/src/app/ui/editor-api/lib/editor/theme.js +184 -0
- package/src/app/ui/editor-api/lib/editor/ui.js +149 -0
- package/src/app/ui/editor-api/lib/index.js +149 -0
- package/src/app/ui/editor-api/lib/runner/index.js +81 -0
- package/src/app/ui/editor-api/lib/util.js +51 -0
- package/src/app/ui/editor-client/README.md +10 -0
- package/src/app/ui/editor-client/constants.js +5 -0
- package/src/app/ui/editor-client/index.js +3 -0
- package/src/app/ui/editor-client/public/favicon.ico +0 -0
- package/src/app/ui/editor-client/public/red/images/bolt.png +0 -0
- package/src/app/ui/editor-client/public/red/images/debugger/continue-full.png +0 -0
- package/src/app/ui/editor-client/public/red/images/debugger/continue-outline.png +0 -0
- package/src/app/ui/editor-client/public/red/images/debugger/pause.png +0 -0
- package/src/app/ui/editor-client/public/red/images/debugger/restart.png +0 -0
- package/src/app/ui/editor-client/public/red/images/debugger/stepover.png +0 -0
- package/src/app/ui/editor-client/public/red/images/debugger/stop.png +0 -0
- package/src/app/ui/editor-client/public/red/images/deploy-flows-o.png +0 -0
- package/src/app/ui/editor-client/public/red/images/deploy-flows.png +0 -0
- package/src/app/ui/editor-client/public/red/images/deploy-full-o.png +0 -0
- package/src/app/ui/editor-client/public/red/images/deploy-full.png +0 -0
- package/src/app/ui/editor-client/public/red/images/deploy-nodes-o.png +0 -0
- package/src/app/ui/editor-client/public/red/images/deploy-nodes.png +0 -0
- package/src/app/ui/editor-client/public/red/images/deploy-reload.png +0 -0
- package/src/app/ui/editor-client/public/red/images/grip.png +0 -0
- package/src/app/ui/editor-client/public/red/images/icons/arrow-in.png +0 -0
- package/src/app/ui/editor-client/public/red/images/icons/bolt.png +0 -0
- package/src/app/ui/editor-client/public/red/images/icons/node-changed.png +0 -0
- package/src/app/ui/editor-client/public/red/images/icons/node-error.png +0 -0
- package/src/app/ui/editor-client/public/red/images/icons/node-play.png +0 -0
- package/src/app/ui/editor-client/public/red/images/kumologica-app.png +0 -0
- package/src/app/ui/editor-client/public/red/images/node-red-256.png +0 -0
- package/src/app/ui/editor-client/public/red/images/node-red-icon-black.svg +9 -0
- package/src/app/ui/editor-client/public/red/images/node-red-icon.svg +33 -0
- package/src/app/ui/editor-client/public/red/images/node-red.png +0 -0
- package/src/app/ui/editor-client/public/red/images/pw_maze_white.png +0 -0
- package/src/app/ui/editor-client/public/red/images/spin.svg +41 -0
- package/src/app/ui/editor-client/public/red/images/spinner.gif +0 -0
- package/src/app/ui/editor-client/public/red/images/subflow_tab.png +0 -0
- package/src/app/ui/editor-client/public/red/images/test-icon.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/09.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/az.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/bin.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/bool.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/env.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/expr.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/json.png +0 -0
- package/src/app/ui/editor-client/public/red/images/typedInput/re.png +0 -0
- package/src/app/ui/editor-client/public/red/keymap.json +54 -0
- package/src/app/ui/editor-client/public/red/main-modals.js +14 -0
- package/src/app/ui/editor-client/public/red/main-modals.min.js +16 -0
- package/src/app/ui/editor-client/public/red/main.js +10 -0
- package/src/app/ui/editor-client/public/red/main.min.js +16 -0
- package/src/app/ui/editor-client/public/red/red.js +44903 -0
- package/src/app/ui/editor-client/public/red/red.min.js +16 -0
- package/src/app/ui/editor-client/public/red/style.min.css +24 -0
- package/src/app/ui/editor-client/public/vendor/ace/LICENSE +24 -0
- package/src/app/ui/editor-client/public/vendor/ace/ace.js +17 -0
- package/src/app/ui/editor-client/public/vendor/ace/ext-language_tools.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/ext-searchbox.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-css.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-handlebars.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-html.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-javascript.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-json.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-jsonata.js +1 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-markdown.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-properties.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-python.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-sql.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-swift.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-text.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-xml.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/mode-yaml.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/css.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/handlebars.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/html.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/javascript.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/json.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/jsonata.js +1 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/markdown.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/properties.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/python.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/sql.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/swift.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/text.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/xml.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/snippets/yaml.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/theme-chrome.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/theme-tomorrow.js +8 -0
- package/src/app/ui/editor-client/public/vendor/ace/worker-css.js +1 -0
- package/src/app/ui/editor-client/public/vendor/ace/worker-html.js +1 -0
- package/src/app/ui/editor-client/public/vendor/ace/worker-javascript.js +1 -0
- package/src/app/ui/editor-client/public/vendor/ace/worker-json.js +1 -0
- package/src/app/ui/editor-client/public/vendor/ace/worker-jsonata.js +2140 -0
- package/src/app/ui/editor-client/public/vendor/ace/worker-xml.js +1 -0
- package/src/app/ui/editor-client/public/vendor/beautifyjs/beautify.min.js +1 -0
- package/src/app/ui/editor-client/public/vendor/bootstrap/css/bootstrap.min.css +9 -0
- package/src/app/ui/editor-client/public/vendor/bootstrap/img/glyphicons-halflings-white.png +0 -0
- package/src/app/ui/editor-client/public/vendor/bootstrap/img/glyphicons-halflings.png +0 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/active-line.js +72 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/coffeescript-lint.js +47 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/javascript-hint.js +157 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/javascript-lint.js +63 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/jshint.js +29591 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/lint.css +73 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/lint.js +252 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/show-hint.css +36 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/show-hint.js +460 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/addon/sql-hint.js +304 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/lib/codemirror.css +350 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/lib/codemirror.js +9800 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/mode/javascript.js +927 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/mode/sql.js +494 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/theme/base16-dark.css +38 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/theme/monokai.css +42 -0
- package/src/app/ui/editor-client/public/vendor/code-mirror/theme/solarized.css +168 -0
- package/src/app/ui/editor-client/public/vendor/d3-context-menu/d3-context-menu.css +43 -0
- package/src/app/ui/editor-client/public/vendor/d3-context-menu/d3-context-menu.js +87 -0
- package/src/app/ui/editor-client/public/vendor/easy-json-schema/index.js +88 -0
- package/src/app/ui/editor-client/public/vendor/font-awesome/css/font-awesome.min.css +4 -0
- package/src/app/ui/editor-client/public/vendor/font-awesome/fonts/FontAwesome.otf +0 -0
- package/src/app/ui/editor-client/public/vendor/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- package/src/app/ui/editor-client/public/vendor/font-awesome/fonts/fontawesome-webfont.svg +2671 -0
- package/src/app/ui/editor-client/public/vendor/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- package/src/app/ui/editor-client/public/vendor/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- package/src/app/ui/editor-client/public/vendor/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- package/src/app/ui/editor-client/public/vendor/icofont/fonts/icofont.eot +0 -0
- package/src/app/ui/editor-client/public/vendor/icofont/fonts/icofont.svg +2105 -0
- package/src/app/ui/editor-client/public/vendor/icofont/fonts/icofont.ttf +0 -0
- package/src/app/ui/editor-client/public/vendor/icofont/fonts/icofont.woff +0 -0
- package/src/app/ui/editor-client/public/vendor/icofont/fonts/icofont.woff2 +0 -0
- package/src/app/ui/editor-client/public/vendor/icofont/icofont.min.css +7 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/animated-overlay.gif +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- package/src/app/ui/editor-client/public/vendor/jquery/css/smoothness/jquery-ui-1.10.3.custom.min.css +5 -0
- package/src/app/ui/editor-client/public/vendor/jsonata/jsonata.min.js +183 -0
- package/src/app/ui/editor-client/public/vendor/misc/toggleswitch.css +181 -0
- package/src/app/ui/editor-client/public/vendor/misc/toggleswitch.js +48 -0
- package/src/app/ui/editor-client/public/vendor/simplemde/simplemde.min.css +7 -0
- package/src/app/ui/editor-client/public/vendor/simplemde/simplemde.min.js +15 -0
- package/src/app/ui/editor-client/public/vendor/vendor.css +0 -0
- package/src/app/ui/editor-client/public/vendor/vendor.js +125 -0
- package/src/app/ui/editor-client/public/vendor/xterm/lib/xterm.js +2 -0
- package/src/app/ui/editor-client/src/ace/README.md +50 -0
- package/src/app/ui/editor-client/src/ace/mode/nrjavascript.js +35 -0
- package/src/app/ui/editor-client/src/ace/mode/nrjavascript_worker.js +189 -0
- package/src/app/ui/editor-client/src/favicon.ico +0 -0
- package/src/app/ui/editor-client/src/images/bolt.png +0 -0
- package/src/app/ui/editor-client/src/images/debugger/continue-full.png +0 -0
- package/src/app/ui/editor-client/src/images/debugger/continue-outline.png +0 -0
- package/src/app/ui/editor-client/src/images/debugger/pause.png +0 -0
- package/src/app/ui/editor-client/src/images/debugger/restart.png +0 -0
- package/src/app/ui/editor-client/src/images/debugger/stepover.png +0 -0
- package/src/app/ui/editor-client/src/images/debugger/stop.png +0 -0
- package/src/app/ui/editor-client/src/images/deploy-flows-o.png +0 -0
- package/src/app/ui/editor-client/src/images/deploy-flows.png +0 -0
- package/src/app/ui/editor-client/src/images/deploy-full-o.png +0 -0
- package/src/app/ui/editor-client/src/images/deploy-full.png +0 -0
- package/src/app/ui/editor-client/src/images/deploy-nodes-o.png +0 -0
- package/src/app/ui/editor-client/src/images/deploy-nodes.png +0 -0
- package/src/app/ui/editor-client/src/images/deploy-reload.png +0 -0
- package/src/app/ui/editor-client/src/images/grip.png +0 -0
- package/src/app/ui/editor-client/src/images/icons/arrow-in.png +0 -0
- package/src/app/ui/editor-client/src/images/icons/bolt.png +0 -0
- package/src/app/ui/editor-client/src/images/icons/node-changed.png +0 -0
- package/src/app/ui/editor-client/src/images/icons/node-error.png +0 -0
- package/src/app/ui/editor-client/src/images/icons/node-play.png +0 -0
- package/src/app/ui/editor-client/src/images/kumologica-app.png +0 -0
- package/src/app/ui/editor-client/src/images/node-red-256.png +0 -0
- package/src/app/ui/editor-client/src/images/node-red-icon-black.svg +9 -0
- package/src/app/ui/editor-client/src/images/node-red-icon.svg +33 -0
- package/src/app/ui/editor-client/src/images/node-red.png +0 -0
- package/src/app/ui/editor-client/src/images/pw_maze_white.png +0 -0
- package/src/app/ui/editor-client/src/images/spin.svg +41 -0
- package/src/app/ui/editor-client/src/images/spinner.gif +0 -0
- package/src/app/ui/editor-client/src/images/subflow_tab.png +0 -0
- package/src/app/ui/editor-client/src/images/test-icon.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/09.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/az.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/bin.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/bool.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/env.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/expr.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/json.png +0 -0
- package/src/app/ui/editor-client/src/images/typedInput/re.png +0 -0
- package/src/app/ui/editor-client/src/js/comms.js +174 -0
- package/src/app/ui/editor-client/src/js/events.js +39 -0
- package/src/app/ui/editor-client/src/js/font-awesome.js +818 -0
- package/src/app/ui/editor-client/src/js/history.js +337 -0
- package/src/app/ui/editor-client/src/js/i18n.js +81 -0
- package/src/app/ui/editor-client/src/js/jquery-addons.js +21 -0
- package/src/app/ui/editor-client/src/js/keymap.json +54 -0
- package/src/app/ui/editor-client/src/js/main-modals.js +14 -0
- package/src/app/ui/editor-client/src/js/main.js +10 -0
- package/src/app/ui/editor-client/src/js/modals/modal-home.js +162 -0
- package/src/app/ui/editor-client/src/js/modals/modal-new-project.js +86 -0
- package/src/app/ui/editor-client/src/js/modals/modal-node-library.js +255 -0
- package/src/app/ui/editor-client/src/js/modals/modal-welcome.js +102 -0
- package/src/app/ui/editor-client/src/js/nodes.js +1736 -0
- package/src/app/ui/editor-client/src/js/red.js +704 -0
- package/src/app/ui/editor-client/src/js/settings.js +275 -0
- package/src/app/ui/editor-client/src/js/text/bidi.js +116 -0
- package/src/app/ui/editor-client/src/js/text/format.js +1316 -0
- package/src/app/ui/editor-client/src/js/ui/actions.js +39 -0
- package/src/app/ui/editor-client/src/js/ui/clipboard.js +510 -0
- package/src/app/ui/editor-client/src/js/ui/common/checkboxSet.js +117 -0
- package/src/app/ui/editor-client/src/js/ui/common/editableList.js +322 -0
- package/src/app/ui/editor-client/src/js/ui/common/menu.js +277 -0
- package/src/app/ui/editor-client/src/js/ui/common/panels.js +104 -0
- package/src/app/ui/editor-client/src/js/ui/common/popover.js +268 -0
- package/src/app/ui/editor-client/src/js/ui/common/searchBox.js +98 -0
- package/src/app/ui/editor-client/src/js/ui/common/stack.js +184 -0
- package/src/app/ui/editor-client/src/js/ui/common/tabs.js +730 -0
- package/src/app/ui/editor-client/src/js/ui/common/treeList.js +170 -0
- package/src/app/ui/editor-client/src/js/ui/common/typedInput.js +819 -0
- package/src/app/ui/editor-client/src/js/ui/common/typedInputLong.js +829 -0
- package/src/app/ui/editor-client/src/js/ui/deploy.js +422 -0
- package/src/app/ui/editor-client/src/js/ui/diff.js +2225 -0
- package/src/app/ui/editor-client/src/js/ui/editor.js +3020 -0
- package/src/app/ui/editor-client/src/js/ui/editors/buffer.js +195 -0
- package/src/app/ui/editor-client/src/js/ui/editors/expression.js +627 -0
- package/src/app/ui/editor-client/src/js/ui/editors/js.js +89 -0
- package/src/app/ui/editor-client/src/js/ui/editors/json.js +107 -0
- package/src/app/ui/editor-client/src/js/ui/editors/markdown.js +267 -0
- package/src/app/ui/editor-client/src/js/ui/editors/string.js +75 -0
- package/src/app/ui/editor-client/src/js/ui/event-log.js +107 -0
- package/src/app/ui/editor-client/src/js/ui/header.js +372 -0
- package/src/app/ui/editor-client/src/js/ui/keyboard.js +565 -0
- package/src/app/ui/editor-client/src/js/ui/library.js +570 -0
- package/src/app/ui/editor-client/src/js/ui/logviewer.js +116 -0
- package/src/app/ui/editor-client/src/js/ui/notifications.js +282 -0
- package/src/app/ui/editor-client/src/js/ui/palette-editor.js +1061 -0
- package/src/app/ui/editor-client/src/js/ui/palette.js +788 -0
- package/src/app/ui/editor-client/src/js/ui/project-info.js +232 -0
- package/src/app/ui/editor-client/src/js/ui/projects/projectSettings.js +1651 -0
- package/src/app/ui/editor-client/src/js/ui/projects/projectUserSettings.js +404 -0
- package/src/app/ui/editor-client/src/js/ui/projects/projects.js +2395 -0
- package/src/app/ui/editor-client/src/js/ui/projects/tab-versionControl.js +1383 -0
- package/src/app/ui/editor-client/src/js/ui/search.js +366 -0
- package/src/app/ui/editor-client/src/js/ui/sidebar.js +409 -0
- package/src/app/ui/editor-client/src/js/ui/state.js +14 -0
- package/src/app/ui/editor-client/src/js/ui/subflow.js +748 -0
- package/src/app/ui/editor-client/src/js/ui/tab-awsDeploy.js +1427 -0
- package/src/app/ui/editor-client/src/js/ui/tab-azure.js +852 -0
- package/src/app/ui/editor-client/src/js/ui/tab-config.js +452 -0
- package/src/app/ui/editor-client/src/js/ui/tab-context.js +406 -0
- package/src/app/ui/editor-client/src/js/ui/tab-info.js +661 -0
- package/src/app/ui/editor-client/src/js/ui/tab-kumohub.js +800 -0
- package/src/app/ui/editor-client/src/js/ui/tab-nodeInfo.js +60 -0
- package/src/app/ui/editor-client/src/js/ui/tab-test.js +915 -0
- package/src/app/ui/editor-client/src/js/ui/terminal.js +240 -0
- package/src/app/ui/editor-client/src/js/ui/touch/radialMenu.js +170 -0
- package/src/app/ui/editor-client/src/js/ui/tray.js +411 -0
- package/src/app/ui/editor-client/src/js/ui/typeSearch.js +411 -0
- package/src/app/ui/editor-client/src/js/ui/ui-settings.js +422 -0
- package/src/app/ui/editor-client/src/js/ui/update-panel.js +84 -0
- package/src/app/ui/editor-client/src/js/ui/userSettings.js +673 -0
- package/src/app/ui/editor-client/src/js/ui/utils.js +1287 -0
- package/src/app/ui/editor-client/src/js/ui/view-navigator.js +169 -0
- package/src/app/ui/editor-client/src/js/ui/view-tools.js +123 -0
- package/src/app/ui/editor-client/src/js/ui/view.js +5333 -0
- package/src/app/ui/editor-client/src/js/ui/workspaces.js +498 -0
- package/src/app/ui/editor-client/src/js/user.js +282 -0
- package/src/app/ui/editor-client/src/js/validators.js +54 -0
- package/src/app/ui/editor-client/src/kumologica-app.png +0 -0
- package/src/app/ui/editor-client/src/sass/ace.scss +29 -0
- package/src/app/ui/editor-client/src/sass/bootstrap.scss +21 -0
- package/src/app/ui/editor-client/src/sass/colors.scss +76 -0
- package/src/app/ui/editor-client/src/sass/debug.scss +383 -0
- package/src/app/ui/editor-client/src/sass/diff.scss +695 -0
- package/src/app/ui/editor-client/src/sass/dragdrop.scss +37 -0
- package/src/app/ui/editor-client/src/sass/dropdownMenu.scss +93 -0
- package/src/app/ui/editor-client/src/sass/editor.scss +683 -0
- package/src/app/ui/editor-client/src/sass/flow.scss +330 -0
- package/src/app/ui/editor-client/src/sass/forms.scss +1093 -0
- package/src/app/ui/editor-client/src/sass/header.scss +502 -0
- package/src/app/ui/editor-client/src/sass/jquery.scss +152 -0
- package/src/app/ui/editor-client/src/sass/keyboard.scss +136 -0
- package/src/app/ui/editor-client/src/sass/library.scss +54 -0
- package/src/app/ui/editor-client/src/sass/mixins.scss +283 -0
- package/src/app/ui/editor-client/src/sass/modals/modalHome.scss +138 -0
- package/src/app/ui/editor-client/src/sass/modals/modalNewProject.scss +96 -0
- package/src/app/ui/editor-client/src/sass/modals/modalNodeLibrary.scss +131 -0
- package/src/app/ui/editor-client/src/sass/modals/modalWelcome.scss +102 -0
- package/src/app/ui/editor-client/src/sass/notifications.scss +118 -0
- package/src/app/ui/editor-client/src/sass/palette-editor.scss +275 -0
- package/src/app/ui/editor-client/src/sass/palette.scss +279 -0
- package/src/app/ui/editor-client/src/sass/panels.scss +61 -0
- package/src/app/ui/editor-client/src/sass/popover.scss +166 -0
- package/src/app/ui/editor-client/src/sass/project-info.scss +74 -0
- package/src/app/ui/editor-client/src/sass/projects.scss +875 -0
- package/src/app/ui/editor-client/src/sass/search.scss +201 -0
- package/src/app/ui/editor-client/src/sass/sidebar.scss +201 -0
- package/src/app/ui/editor-client/src/sass/style.scss +170 -0
- package/src/app/ui/editor-client/src/sass/tab-azure.scss +68 -0
- package/src/app/ui/editor-client/src/sass/tab-cloud.scss +67 -0
- package/src/app/ui/editor-client/src/sass/tab-config.scss +100 -0
- package/src/app/ui/editor-client/src/sass/tab-context.scss +54 -0
- package/src/app/ui/editor-client/src/sass/tab-info.scss +307 -0
- package/src/app/ui/editor-client/src/sass/tab-kumohub.scss +68 -0
- package/src/app/ui/editor-client/src/sass/tab-test.scss +257 -0
- package/src/app/ui/editor-client/src/sass/tabs.scss +395 -0
- package/src/app/ui/editor-client/src/sass/terminal.scss +246 -0
- package/src/app/ui/editor-client/src/sass/ui/common/checkboxSet.scss +29 -0
- package/src/app/ui/editor-client/src/sass/ui/common/editableList.scss +81 -0
- package/src/app/ui/editor-client/src/sass/ui/common/nodeList.scss +65 -0
- package/src/app/ui/editor-client/src/sass/ui/common/searchBox.scss +77 -0
- package/src/app/ui/editor-client/src/sass/ui/common/stack.scss +26 -0
- package/src/app/ui/editor-client/src/sass/ui/common/treeList.scss +108 -0
- package/src/app/ui/editor-client/src/sass/ui/common/typedInput.scss +181 -0
- package/src/app/ui/editor-client/src/sass/ui/common/typedInputLong.scss +183 -0
- package/src/app/ui/editor-client/src/sass/ui-settings.scss +119 -0
- package/src/app/ui/editor-client/src/sass/update-panel.scss +18 -0
- package/src/app/ui/editor-client/src/sass/userSettings.scss +93 -0
- package/src/app/ui/editor-client/src/sass/widgetStyle.scss +23 -0
- package/src/app/ui/editor-client/src/sass/workspace.scss +123 -0
- package/src/app/ui/editor-client/src/sass/workspaceToolbar.scss +85 -0
- package/src/app/ui/editor-client/src/vendor/ace/LICENSE +24 -0
- package/src/app/ui/editor-client/src/vendor/ace/ace.js +17 -0
- package/src/app/ui/editor-client/src/vendor/ace/ext-language_tools.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/ext-searchbox.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-css.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-handlebars.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-html.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-javascript.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-json.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-markdown.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-properties.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-python.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-sql.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-swift.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-text.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-xml.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/mode-yaml.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/css.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/handlebars.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/html.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/javascript.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/json.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/markdown.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/properties.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/python.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/sql.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/swift.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/text.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/xml.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/snippets/yaml.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/theme-chrome.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/theme-tomorrow.js +8 -0
- package/src/app/ui/editor-client/src/vendor/ace/worker-css.js +1 -0
- package/src/app/ui/editor-client/src/vendor/ace/worker-html.js +1 -0
- package/src/app/ui/editor-client/src/vendor/ace/worker-javascript.js +1 -0
- package/src/app/ui/editor-client/src/vendor/ace/worker-json.js +1 -0
- package/src/app/ui/editor-client/src/vendor/ace/worker-xml.js +1 -0
- package/src/app/ui/editor-client/src/vendor/beautifyjs/beautify.min.js +1 -0
- package/src/app/ui/editor-client/src/vendor/bootstrap/css/bootstrap.css +5406 -0
- package/src/app/ui/editor-client/src/vendor/bootstrap/css/bootstrap.min.css +9 -0
- package/src/app/ui/editor-client/src/vendor/bootstrap/img/glyphicons-halflings-white.png +0 -0
- package/src/app/ui/editor-client/src/vendor/bootstrap/img/glyphicons-halflings.png +0 -0
- package/src/app/ui/editor-client/src/vendor/bootstrap/js/bootstrap.min.js +6 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/active-line.js +72 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/coffeescript-lint.js +47 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/javascript-hint.js +157 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/javascript-lint.js +63 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/jshint.js +29591 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/lint.css +73 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/lint.js +252 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/show-hint.css +36 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/show-hint.js +460 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/addon/sql-hint.js +304 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/lib/codemirror.css +350 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/lib/codemirror.js +9800 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/mode/javascript.js +927 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/mode/sql.js +494 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/theme/base16-dark.css +38 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/theme/monokai.css +42 -0
- package/src/app/ui/editor-client/src/vendor/code-mirror/theme/solarized.css +168 -0
- package/src/app/ui/editor-client/src/vendor/d3/d3.v3.min.js +4 -0
- package/src/app/ui/editor-client/src/vendor/d3/d3.v4.min.js +2 -0
- package/src/app/ui/editor-client/src/vendor/d3-context-menu/d3-context-menu.css +43 -0
- package/src/app/ui/editor-client/src/vendor/d3-context-menu/d3-context-menu.js +87 -0
- package/src/app/ui/editor-client/src/vendor/easy-json-schema/index.js +88 -0
- package/src/app/ui/editor-client/src/vendor/font-awesome/css/font-awesome.min.css +4 -0
- package/src/app/ui/editor-client/src/vendor/font-awesome/fonts/FontAwesome.otf +0 -0
- package/src/app/ui/editor-client/src/vendor/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- package/src/app/ui/editor-client/src/vendor/font-awesome/fonts/fontawesome-webfont.svg +2671 -0
- package/src/app/ui/editor-client/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- package/src/app/ui/editor-client/src/vendor/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- package/src/app/ui/editor-client/src/vendor/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- package/src/app/ui/editor-client/src/vendor/i18next/i18next.min.js +5 -0
- package/src/app/ui/editor-client/src/vendor/icofont/fonts/icofont.eot +0 -0
- package/src/app/ui/editor-client/src/vendor/icofont/fonts/icofont.svg +2105 -0
- package/src/app/ui/editor-client/src/vendor/icofont/fonts/icofont.ttf +0 -0
- package/src/app/ui/editor-client/src/vendor/icofont/fonts/icofont.woff +0 -0
- package/src/app/ui/editor-client/src/vendor/icofont/fonts/icofont.woff2 +0 -0
- package/src/app/ui/editor-client/src/vendor/icofont/icofont.min.css +7 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/animated-overlay.gif +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- package/src/app/ui/editor-client/src/vendor/jquery/css/smoothness/jquery-ui-1.10.3.custom.min.css +5 -0
- package/src/app/ui/editor-client/src/vendor/jquery/js/jquery-1.11.3.min.js +5 -0
- package/src/app/ui/editor-client/src/vendor/jquery/js/jquery-ui-1.10.3.custom.min.js +7 -0
- package/src/app/ui/editor-client/src/vendor/jquery/js/jquery.ui.touch-punch.min.js +11 -0
- package/src/app/ui/editor-client/src/vendor/jsonata/formatter.js +183 -0
- package/src/app/ui/editor-client/src/vendor/jsonata/mode-jsonata.js +134 -0
- package/src/app/ui/editor-client/src/vendor/jsonata/snippets-jsonata.js +11 -0
- package/src/app/ui/editor-client/src/vendor/jsonata/worker-jsonata.js +2140 -0
- package/src/app/ui/editor-client/src/vendor/marked/marked.min.js +6 -0
- package/src/app/ui/editor-client/src/vendor/misc/toggleswitch.css +181 -0
- package/src/app/ui/editor-client/src/vendor/misc/toggleswitch.js +48 -0
- package/src/app/ui/editor-client/templates/index.mst +314 -0
- package/src/app/ui/editor-client/templates/modals/modalHome.mst +107 -0
- package/src/app/ui/editor-client/templates/modals/modalNewProject.mst +104 -0
- package/src/app/ui/editor-client/templates/modals/modalNodeLibrary.mst +72 -0
- package/src/app/ui/editor-client/templates/modals/modalWelcome.mst +111 -0
- package/src/assets/eula.txt +170 -0
- package/src/assets/icon.icns +0 -0
- package/src/assets/kumologica-app.png +0 -0
- package/src/assets/license_en.txt +170 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright JS Foundation and other contributors, http://js.foundation
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
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.
|
|
15
|
+
**/
|
|
16
|
+
jQuery.propHooks.disabled={set:function(e,t){e.disabled!==t&&(e.disabled=t,t?$(e).trigger("disabled"):$(e).trigger("enabled"))}};var RED=function(){let e=!1;function t(e,t){t=t||function(){};var n,o=/<!-- --- \[red-module:(\S+)\] --- -->/.exec(e.trim());n=o?o[1]:"unknown";try{var i=!1,a=$("<div>"+e+"</div>"),s=a.find("script"),r=s.length;s.each(function(e,o){var s=$(o).attr("src");if(s&&!/^\s*(https?:|\/|\.)/.test(s)){$(o).remove();var l=document.createElement("script");l.onload=function(){0===--r&&($("body").append(a),t())},$("body").append(l),l.src=RED.settings.apiRootUrl+s,i=!0}else(/\/ace.js$/.test(s)||/\/ext-language_tools.js$/.test(s))&&(console.warn("Blocked attempt to load",s,"by",n),$(o).remove()),r--}),i||($("body").append(a),t())}catch(e){RED.notify(`<p>Failed to load '${n}'</p><p>${e.toString()}</p>`,{type:"error",timeout:1e4}),console.log("["+n+"] "+e.toString()),t()}}function n(e){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"__icons",success:function(t){RED.nodes.setIconSets(t),e&&e()}})}function o(){$.ajax({headers:{Accept:"text/html"},cache:!1,url:"nodes",success:function(e){var n=e.trim().split(/(?=<!-- --- \[red-module:\S+\] --- -->)/),o=function(){0===n.length?($("body").i18n(),$("#palette > .palette-spinner").hide(),$(".palette-scroll").removeClass("hide"),$("#palette-search").removeClass("hide"),i(function(){RED.settings.theme("projects.enabled",!1)?RED.projects.refresh(function(e){RED.sidebar.info.refresh(),e||(RED.menu.setDisabled("menu-item-projects-open",!0),RED.menu.setDisabled("menu-item-projects-settings",!0),!1===e||RED.projects.showStartup()),a()}):(RED.sidebar.info.refresh(),a())})):t(n.shift(),o)};o()}})}function i(e){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"flows",success:function(t){if(t){var n=window.location.hash;RED.nodes.version(t.rev),RED.nodes.import(t.flows),RED.nodes.dirty(!1),RED.view.redraw(!0),/^#flow\/.+$/.test(n)&&RED.workspaces.show(n.substring(6))}e()}})}function a(){var e={};RED.comms.subscribe("notification/#",function(t,n){var o=t.split("/")[1];if("runtime-deploy"!==o&&"node"!==o){if("project-update"===o)return RED.nodes.clear(),RED.history.clear(),RED.view.redraw(!0),void RED.projects.refresh(function(){i(function(){RED.sidebar.info.refresh()})});if(n.text){n.default=n.text;var a=n.text,s={type:n.type,fixed:void 0===n.timeout,timeout:n.timeout,id:o};"runtime-state"===o&&("safe-mode"===n.error?s.buttons=[{text:"Close",click:function(){e[o].hideNotification()}}]:"missing-types"===n.error?(a+="<ul><li>"+n.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.projects.getActiveProject()?s.buttons=[{text:"Manage project dependencies",click:function(){e[o].hideNotification(),RED.projects.settings.show("deps")}}]:s.buttons=[{text:"Close",click:function(){e[o].hideNotification()}}]):"credentials_load_failed"===n.error?RED.settings.theme("projects.enabled",!1)?RED.user.hasPermission("projects.write")&&(s.buttons=[{text:"Setup credentials",click:function(){e[o].hideNotification(),RED.projects.showCredentialsPrompt()}}]):s.buttons=[{text:"Close",click:function(){e[o].hideNotification()}}]:"missing_flow_file"===n.error?RED.user.hasPermission("projects.write")&&(s.buttons=[{text:"Setup credentials",click:function(){e[o].hideNotification(),RED.projects.showFilesPrompt()}}]):"missing_package_file"===n.error?RED.user.hasPermission("projects.write")&&(s.buttons=[{text:"Setup credentials",click:function(){e[o].hideNotification(),RED.projects.showFilesPrompt()}}]):"project_empty"===n.error?RED.user.hasPermission("projects.write")&&(s.buttons=[{text:"No thanks",click:function(){e[o].hideNotification()}},{text:"Create default project files",click:function(){e[o].hideNotification(),RED.projects.createDefaultFileSet()}}]):"git_merge_conflict"===n.error&&(RED.nodes.clear(),RED.sidebar.versionControl.refresh(!0),RED.user.hasPermission("projects.write")&&(s.buttons=[{text:"Show merge conflicts",click:function(){e[o].hideNotification(),RED.sidebar.versionControl.showLocalChanges()}}]))),e.hasOwnProperty(o)?e[o].update(a,s):e[o]=RED.notify(a,s)}else e.hasOwnProperty(o)&&(e[o].close(),delete e[o])}}),RED.comms.subscribe("status/#",function(e,t){var n=e.split("/"),o=RED.nodes.node(n[1]);o&&(t.hasOwnProperty("text")&&/^[a-zA-Z]/.test(t.text)&&(t.text=o._(t.text.toString(),{defaultValue:t.text.toString()})),o.status=t,o.dirty=!0,RED.view.redraw())}),RED.comms.subscribe("notification/node/#",function(e,o){var i,a,s;if("notification/node/added"==e){var r=[];o.forEach(function(e){var n=e.id;RED.nodes.addNodeSet(e),r=r.concat(e.types),RED.i18n.loadNodeCatalog(n,function(){$.get("nodes/"+n,function(e){t(e)})})}),r.length&&(s="<ul><li>"+r.join("</li><li>")+"</li></ul>",RED.notify(`Node added to palette: ${r.length} `+s,"success")),n()}else if("notification/node/removed"==e){for(i=0;i<o.length;i++)a=o[i],RED.nodes.removeNodeSet(a.id).added&&(s="<ul><li>"+a.types.join("</li><li>")+"</li></ul>",RED.notify(`Node removed from palette: ${a.types.length}`+s,"success"));n()}else"notification/node/enabled"==e?o.types&&(RED.nodes.getNodeSet(o.id).added?(RED.nodes.enableNodeSet(o.id),s="<ul><li>"+o.types.join("</li><li>")+"</li></ul>"):$.get("nodes/"+o.id,function(e){t(e),s="<ul><li>"+o.types.join("</li><li>")+"</li></ul>",RED.notify(`Node added to palette: ${o.types.length} `+s,"success")})):"notification/node/disabled"==e?o.types&&(RED.nodes.disableNodeSet(o.id),s="<ul><li>"+o.types.join("</li><li>")+"</li></ul>"):"notification/node/upgraded"==e&&RED.nodes.registry.setModulePendingUpdated(o.module,o.version)}),RED.comms.subscribe("event-log/#",function(e,t){var n=e.substring(9);RED.eventLog.log(n,t)})}function s(){$.get("red/about",function(e){RED.sidebar.info.set('<div style="text-align:center;"><img width="50px" src="red/images/kumologica-core-icon.svg" /></div>'+marked(e)),RED.sidebar.info.show()})}function r(){var t=[];RED.settings.theme("projects.enabled",!1)&&t.push({id:"menu-item-projects-menu",label:"Projects",options:[{id:"menu-item-projects-new",label:"New",disabled:!1,onselect:"core:new-project"},{id:"menu-item-projects-open",label:"Open",disabled:!1,onselect:"core:open-project"},{id:"menu-item-projects-settings",label:"Project Settings",disabled:!1,onselect:"core:show-project-settings"}]}),t.push({id:"menu-item-view-menu",label:"View",options:[{id:"menu-item-palette",label:"Show palette",toggle:!0,onselect:"core:toggle-palette",selected:!0},{id:"menu-item-sidebar",label:"Show sidebar",toggle:!0,onselect:"core:toggle-sidebar",selected:!1},{id:"menu-item-event-log",label:"Event log",onselect:"core:show-event-log"},null]}),t.push(null),t.push({id:"menu-item-import",label:"Import",options:[{id:"menu-item-import-clipboard",label:"Clipboard",onselect:"core:show-import-dialog"},{id:"menu-item-import-library",label:"Library",options:[]}]}),t.push({id:"menu-item-export",label:"Export",options:[{id:"menu-item-export-clipboard",label:"Clipboard",onselect:"core:show-export-dialog"},{id:"menu-item-export-library",label:"Library",disabled:!0,onselect:"core:library-export"}]}),t.push(null),t.push({id:"menu-item-search",label:"Search",onselect:"core:search"}),t.push(null),t.push({id:"menu-item-config-nodes",label:"Configuration nodes",onselect:"core:show-config-tab"}),t.push({id:"menu-item-workspace",label:"Flows",options:[{id:"menu-item-workspace-add",label:"Add",onselect:"core:add-flow"},{id:"menu-item-workspace-edit",label:"Rename",onselect:"core:edit-flow"},{id:"menu-item-workspace-delete",label:"Delete",onselect:"core:remove-flow"}]}),t.push({id:"menu-item-subflow",label:"Subflows",options:[{id:"menu-item-subflow-create",label:"Create Subflow",onselect:"core:create-subflow"},{id:"menu-item-subflow-convert",label:"Selection to Subflow",disabled:!0,onselect:"core:convert-to-subflow"}]}),t.push(null),!1!==RED.settings.theme("palette.editable")&&(t.push({id:"menu-item-edit-palette",label:"Manage palette",onselect:"core:manage-palette"}),t.push(null)),t.push({id:"menu-item-user-settings",label:"Settings",onselect:"core:show-user-settings"}),t.push(null),t.push({id:"menu-item-keyboard-shortcuts",label:"Keyboard shortcuts",onselect:"core:show-help"}),t.push({id:"menu-item-help",label:RED.settings.theme("menu.menu-item-help.label","Kumologica website"),href:RED.settings.theme("menu.menu-item-help.url","http://kumologica.com/docs")}),t.push({id:"menu-item-kumologica-core-version",label:"v"+RED.settings.version,onselect:"core:show-about"}),RED.view.init(),RED.userSettings.init(),RED.user.init(),RED.library.init(),RED.keyboard.init(),RED.palette.init(),RED.eventLog.init(),!1!==RED.settings.theme("palette.editable")&&RED.palette.editor.init(),RED.sidebar.init(),RED.settings.theme("projects.enabled",!1)&&RED.projects.init(),RED.subflow.init(),RED.workspaces.init(),RED.clipboard.init(),RED.search.init(),RED.projectInfo.init(),RED.uiSettings.init(),RED.editor.init(),RED.menu.init({id:"btn-sidemenu",options:t}),RED.deploy.init(RED.settings.theme("deployButton",null)),RED.notifications.init(),RED.actions.add("core:show-about",s),RED.nodes.init(),e||RED.comms.connect(),RED.modalNewProject.init(),RED.modalHome.init(),RED.modalWelcome.init(),RED.updatePanel.init(),RED.modalNodeLibrary.init(),$("#main-container").show(),$(".header-toolbar").show(),RED.logviewer.init(),RED.header.init(),$.ajax({headers:{Accept:"application/json"},cache:!1,url:"nodes",success:function(e){RED.nodes.setNodeList(e),n(o)}})}var l=!1;return{init:function(t){if(l)throw new Error("RED already initialised");e=t.disableComms||!1,l=!0,ace.require("ace/ext/language_tools"),(t=t||{}).apiRootUrl=t.apiRootUrl||"",t.apiRootUrl&&!/\/$/.test(t.apiRootUrl)&&(t.apiRootUrl=t.apiRootUrl+"/"),RED.i18n.init(t,function(){RED.settings.init(t,r)})}}}(),App=RED;RED.events=function(){var e={};return{on:function(t,n){e[t]=e[t]||[],e[t].push(n)},off:function(t,n){var o=e[t];if(o)for(var i=0;i<o.length;i++)if(o[i]===n)return void o.splice(i,1)},emit:function(t,n){if(e[t])for(var o=0;o<e[t].length;o++)try{e[t][o](n)}catch(e){console.log("RED.events.emit error: ["+t+"] "+e.toString()),console.log(e)}}}}(),RED.i18n=function(){var e;return{init:function(t,n){e=t.apiRootUrl||"",i18n.init({resGetPath:e+"__locales__/__ns__?lng=__lng__",dynamicLoad:!1,load:"current",ns:{namespaces:["editor"],defaultNs:"editor"},fallbackLng:["en-US"],useCookie:!1,returnObjectTrees:!0},function(){n()}),RED._=function(){var e=i18n.t.apply(null,arguments);return"string"==typeof e?e:arguments[0]}},loadNodeCatalog:function(t,n){var o=i18n.functions.toLanguages(i18n.detectLanguage()),i=o.length;o.forEach(function(o){$.ajax({headers:{Accept:"application/json"},cache:!1,url:e+"nodes/"+t+"/messages?lng="+o,success:function(e){i18n.addResourceBundle(o,t,e),0===--i&&n()}})})},loadNodeCatalogs:function(t){var n=i18n.functions.toLanguages(i18n.detectLanguage()),o=n.length;n.forEach(function(n){$.ajax({headers:{Accept:"application/json"},cache:!1,url:e+"nodes/messages?lng="+n,success:function(e){Object.keys(e).forEach(function(t){i18n.addResourceBundle(n,t,e[t])}),0===--o&&t()}})})}}}(),RED.settings=function(){var e,t={},n={},o=function(){try{return"localStorage"in window&&null!==window.localStorage}catch(e){return!1}},i=function(e){n=e},a=function(e){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"__settings",success:function(n){!function(e){for(var n in t)t.hasOwnProperty(n)&&RED.settings.hasOwnProperty(n)&&delete RED.settings[n];for(n in e)e.hasOwnProperty(n)&&(RED.settings[n]=e[n]);t=e}(n),RED.settings.user&&!RED.settings.user.anonymous||RED.settings.remove("auth-tokens"),console.log("Kumologica: "+n.version),s(e)},error:function(t,n,o){401===t.status?(/[?&]access_token=(.*?)(?:$|&)/.test(window.location.search)&&(window.location.search=""),RED.user.login(function(){a(e)})):console.log("Unexpected error loading settings:",t.status,n)}})};function s(e){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"__settings/user",success:function(t){i(t),e()},error:function(e,t,n){console.log("Unexpected error loading user settings:",e.status,t)}})}var r=function(e){awsEnvProfiles=e};function l(){RED.user.hasPermission("settings.write")&&(e&&clearTimeout(e),e=setTimeout(function(){e=null,$.ajax({method:"POST",contentType:"application/json",url:"__settings/user",data:JSON.stringify(n),success:function(e){},error:function(e,t,n){console.log("Unexpected error saving user settings:",e.status,t)}})},300))}return{init:function(e,t){var n=/[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search);if(n){var o=n[1];RED.settings.set("auth-tokens",{access_token:o}),window.location.search=""}RED.settings.apiRootUrl=e.apiRootUrl,$.ajaxSetup({beforeSend:function(t,n){if(!/^\s*(https?:|\/|\.)/.test(n.url)){e.apiRootUrl&&(n.url=e.apiRootUrl+n.url);var o=RED.settings.get("auth-tokens");o&&t.setRequestHeader("Authorization","Bearer "+o.access_token),t.setRequestHeader("kumologica-core-API-Version","v2")}}}),a(t)},load:a,loadUserSettings:s,set:function(e,t){o()&&("auth-tokens"===e?localStorage.setItem(e,JSON.stringify(t)):(n[e]=t,l()))},get:function(e){if(o())return"auth-tokens"===e?JSON.parse(localStorage.getItem(e)):n[e]},remove:function(e){o()&&("auth-tokens"===e?localStorage.removeItem(e):(delete n[e],l()))},theme:function(e,t){if(!RED.settings.editorTheme)return t;var n=e.split("."),o=RED.settings.editorTheme;try{for(var i=0;i<n.length;i++)o=o[n[i]];return void 0===o?t:o}catch(e){return t}},getAWSEnvprofiles:function(e){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings/aws/creds",success:function(t){r(t),e()},error:function(e,t,n){console.log("Unexpected error loading user settings:",e.status,t)}})},setAWSEnvprofiles:function(){RED.user.hasPermission("settings.write")&&(e&&clearTimeout(e),e=setTimeout(function(){e=null,$.ajax({method:"POST",contentType:"application/json",url:"__settings/aws/creds",data:JSON.stringify(awsEnvProfileInput),success:function(e){},error:function(e,t,n){console.log("Unexpected error saving user settings:",e.status,t)}})},300))}}}(),RED.user=function(){function e(){$("#btn-usermenu-submenu li").remove(),RED.settings.user.anonymous?RED.menu.addItem("btn-usermenu",{id:"usermenu-item-login",label:RED._("menu.label.login"),onselect:function(){RED.user.login({cancelable:!0},function(){RED.settings.load(function(){RED.notify(RED._("user.loggedInAs",{name:RED.settings.user.username}),"success"),e(),RED.events.emit("login",RED.settings.user.username)})})}}):(RED.menu.addItem("btn-usermenu",{id:"usermenu-item-username",label:"<b>"+RED.settings.user.username+"</b>"}),RED.menu.addItem("btn-usermenu",{id:"usermenu-item-logout",label:RED._("menu.label.logout"),onselect:function(){RED.user.logout()}}))}var t=/^((.+)\.)?read$/,n=/^((.+)\.)?write$/;return{init:function(){if(RED.settings.user&&(!RED.settings.editorTheme||!RED.settings.editorTheme.hasOwnProperty("userMenu"))){var t=$('<li><a id="btn-usermenu" class="button hide" data-toggle="dropdown" href="#"></a></li>').prependTo(".header-toolbar");RED.settings.user.image?$('<span class="user-profile"></span>').css({backgroundImage:"url("+RED.settings.user.image+")"}).appendTo(t.find("a")):$('<i class="fa fa-user"></i>').appendTo(t.find("a")),RED.menu.init({id:"btn-usermenu",options:[]}),e()}},login:function(t,n){"function"==typeof t&&(n=t,t={});var o=$('<div id="node-dialog-login" class="hide"><div style="display: inline-block;width: 250px; vertical-align: top; margin-right: 10px; margin-bottom: 20px;"><img id="node-dialog-login-image" src=""/></div><div style="display: inline-block; width: 250px; vertical-align: bottom; margin-left: 10px; margin-bottom: 20px;"><form id="node-dialog-login-fields" class="form-horizontal" style="margin-bottom: 0px;"></form></div></div>');o.dialog({autoOpen:!1,dialogClass:"ui-dialog-no-close",modal:!0,closeOnEscape:!!t.cancelable,width:600,resizable:!1,draggable:!1}),$("#node-dialog-login-fields").empty(),$.ajax({dataType:"json",url:"auth/login",success:function(i){var a=0;if("credentials"==i.type){for(;a<i.prompts.length;a++){var s=i.prompts[a],r=$("<div/>",{class:"form-row"});$('<label for="node-dialog-login-'+s.id+'">'+s.label+":</label><br/>").appendTo(r);var l=$('<input style="width: 100%" id="node-dialog-login-'+s.id+'" type="'+s.type+'" tabIndex="'+(a+1)+'"/>').appendTo(r);a<i.prompts.length-1&&l.keypress(function(){var e=r;return function(t){13==t.keyCode&&(e.next("div").find("input").focus(),t.preventDefault())}}()),r.appendTo("#node-dialog-login-fields")}$('<div class="form-row" style="text-align: right; margin-top: 10px;"><span id="node-dialog-login-failed" style="line-height: 2em;float:left;" class="hide">'+RED._("user.loginFailed")+'</span><img src="red/images/spin.svg" style="height: 30px; margin-right: 10px; " class="login-spinner hide"/>'+(t.cancelable?'<a href="#" id="node-dialog-login-cancel" style="margin-right: 20px;" tabIndex="'+(a+1)+'">'+RED._("common.label.cancel")+"</a>":"")+'<input type="submit" id="node-dialog-login-submit" style="width: auto;" tabIndex="'+(a+2)+'" value="'+RED._("user.login")+'"></div>').appendTo("#node-dialog-login-fields"),$("#node-dialog-login-submit").button(),$("#node-dialog-login-fields").submit(function(o){$("#node-dialog-login-submit").button("option","disabled",!0),$("#node-dialog-login-failed").hide(),$(".login-spinner").show();for(var a={client_id:"kumologica-core-editor",grant_type:"password",scope:""},s=0;s<i.prompts.length;s++){var r=i.prompts[s];a[r.id]=$("#node-dialog-login-"+r.id).val()}$.ajax({url:"auth/token",type:"POST",data:a}).done(function(o,i,a){RED.settings.set("auth-tokens",o),$("#node-dialog-login").dialog("destroy").remove(),t.updateMenu&&e(),n()}).fail(function(e,t,n){RED.settings.remove("auth-tokens"),$("#node-dialog-login-failed").show()}).always(function(){$("#node-dialog-login-submit").button("option","disabled",!1),$(".login-spinner").hide()}),o.preventDefault()})}else if("strategy"==i.type)for(a=0;a<i.prompts.length;a++){s=i.prompts[a],r=$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields");var d=$('<a href="#"></a>',{style:"padding: 10px"}).appendTo(r).click(function(){document.location=s.url});if(s.image)$("<img>",{src:s.image}).appendTo(d);else if(s.label){var c=$("<span></span>").text(s.label);s.icon&&($("<i></i>",{class:"fa fa-2x "+s.icon,style:"vertical-align: middle"}).appendTo(d),c.css({verticalAlign:"middle",marginLeft:"8px"})),c.appendTo(d)}d.button()}t.cancelable&&$("#node-dialog-login-cancel").button().click(function(e){$("#node-dialog-login").dialog("destroy").remove()});var p=i.image||"red/images/kumologica-core-256.png";$("#node-dialog-login-image").load(function(){o.dialog("open")}).attr("src",p)}})},logout:function(){var e=RED.settings.get("auth-tokens"),t=e?e.access_token:"";$.ajax({url:"auth/revoke",type:"POST",data:{token:t}}).done(function(e,t,n){RED.settings.remove("auth-tokens"),e&&e.redirect?document.location.href=e.redirect:document.location.reload(!0)}).fail(function(e,t,n){401===e.status?document.location.reload(!0):console.log(t)})},hasPermission:function(e){return""===e||!RED.settings.user||function e(o,i){if(""===i)return!0;var a;if(Array.isArray(i)){for(a=0;a<i.length;a++)if(!e(o,i[a]))return!1;return!0}if(Array.isArray(o)){if(0===o.length)return!1;for(a=0;a<o.length;a++)if(e(o[a],i))return!0;return!1}return"*"===o||o===i||("read"===o||"*.read"===o?t.test(i):("write"===o||"*.write"===o)&&n.test(i))}(RED.settings.user.permissions||"",e)}}}(),RED.comms=function(){var e,t=null,n=null,o=null,i=10,a={},s=!1,r=0,l=!1;return{connect:function d(){var c;if(l=!0,RED.settings.apiRootUrl){var p=/^(https?):\/\/(.*)$/.exec(RED.settings.apiRootUrl);p&&(console.log(p),c="ws"+("https"===p[1]?"s":"")+"://"+p[2]+"comms")}else{var u=location.hostname,f=location.port;0!==f.length&&(u=u+":"+f),u=(u+=document.location.pathname)+("/"==u.slice(-1)?"":"/")+"comms",c="ws"+("https:"==document.location.protocol?"s":"")+"://"+u}var h=RED.settings.get("auth-tokens");function g(){for(var t in a)a.hasOwnProperty(t)&&e.send(JSON.stringify({subscribe:t}))}s=null!=h,(e=new WebSocket(c)).onopen=function(){r=0,t&&(n=setTimeout(function(){t.close(),t=null},1e3)),s?e.send(JSON.stringify({auth:h.access_token})):g()},e.onmessage=function(e){var t=JSON.parse(e.data);if(t.auth)s&&"ok"===t.auth?(s=!1,g()):"fail"===t.auth&&(l=!1,RED.user.login({updateMenu:!0},function(){d()}));else for(var n=0;n<t.length;n++){var o=t[n];if(o.topic)for(var i in a)if(a.hasOwnProperty(i)&&new RegExp("^"+i.replace(/([\[\]\?\(\)\\\\$\^\*\.|])/g,"\\$1").replace(/\+/g,"[^/]+").replace(/\/#$/,"(/.*)?")+"$").test(o.topic)){var r=a[i];if(r)for(var c=0;c<r.length;c++)r[c](o.topic,o.data)}}},e.onclose=function(){l&&(n&&(clearTimeout(n),n=null),++r<10?(setTimeout(d,1e3),r>5&&null==t&&(t=RED.notify("Lost connection to server, reconnecting...","error",!0))):r<20?setTimeout(d,2e3):(i=60,o=setInterval(function(){if(0==--i)t.update("Lost connection to server, reconnecting..."),clearInterval(o),d();else{var e=`Lost connection to server, reconnecting in ${i}s.`+'<a href="#">Try now</a>';t.update(e,{silent:!0}),$(t).find("a").click(function(e){e.preventDefault(),t.update("Lost connection to server, reconnecting...",{silent:!0}),clearInterval(o),d()})}},1e3)))}},subscribe:function(t,n){null==a[t]&&(a[t]=[]),a[t].push(n),e&&1==e.readyState&&e.send(JSON.stringify({subscribe:t}))},unsubscribe:function(e,t){if(a[e]){for(var n=0;n<a[e].length;n++)if(a[e][n]===t){a[e].splice(n,1);break}0===a[e].length&&delete a[e]}}}}(),RED.text={},RED.text.bidi=function(){var e="",t="",n="",o="";function i(e){return e>64&&e<91||e>96&&e<123}function a(t){return"auto"==e?function(e){for(var t,n=e.length,o=0;o<n;o++){if((t=e.charCodeAt(o))>=1488&&t<=1535||t>=1536&&t<=1631||t>=1642&&t<=1775||t>=1786&&t<=2047||t>=64285&&t<=65023||t>=65136&&t<=65276)return!0;if(i(e.charCodeAt(o)))return!1}return!1}(t)?"rtl":"ltr":e}function s(){$(this).attr("dir",a($(this).val()))}return{setTextDirection:function(t){e=t,RED.nodes.eachNode(function(e){e.dirty=!0}),RED.view.redraw(),RED.palette.refresh(),$("#workspace").find("span.bidiAware").each(function(){$(this).attr("dir",a($(this).html()))}),$("#sidebar").find("span.bidiAware").each(function(){$(this).attr("dir",a($(this).text()))})},enforceTextDirectionWithUCC:function(e){if(e){var i=a(e);if("ltr"==i)return t+e+o;if("rtl"==i)return n+e+o}return e},resolveBaseTextDir:a,prepareInput:function(e){e.on("keyup",s).on("paste",s).on("cut",s),s.call(e)}}}(),RED.text.format=function(){var e=function(e){this.content="",this.actual="",this.textDirection="",this.localGui="",this.isVisible=!0,this.isSeparator=!1,this.isParsed=!1,this.keep=!1,this.inBounds=!1,this.inPoints=!1;var t="";for(t in e)e.hasOwnProperty(t)&&(this[t]=e[t])},t=function(){function t(e){if(!e)return!1;void 0===e.start&&(e.start=""),void 0===e.end&&(e.end=""),void 0!==e.startAfter?(e.start=e.startAfter,e.after=!0):e.after=!1,void 0!==e.endBefore?(e.end=e.endBefore,e.before=!0):e.before=!1;var t=parseInt(e.startPos,10);isNaN(t)?e.usePos=!1:e.usePos=!0;var n=parseInt(e.length,10);return isNaN(n)?e.useLength=!1:e.useLength=!0,e.loops=void 0===e.loops||!!e.loops,!0}function n(e,t){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);var i=e.content,a=n.usePos&&n.startPos<i.length;a&&(n.start="",n.loops=!1),n.bStart=a?n.startPos:n.start.length>0?i.indexOf(n.start):0;var s=n.useLength&&n.length>0&&n.bStart+n.length<i.length;return s&&(n.end=""),n.bEnd=s?n.bStart+n.length:n.end.length>0?i.indexOf(n.end,n.bStart+n.start.length)+1:i.length,n.after||(n.start=""),n.before||(n.end=""),n}return{handleSubcontents:function(t,n,o,i,a){if(!o.content||"string"!=typeof o.content||0===o.content.length)return t;var s=!0;void 0!==o.loops&&(s=!!o.loops);for(var r=0;!(r>=t.length);r++)if(!(t[r].isParsed||t.keep||t[r].isSeparator)){var l=t[r].content,d=l.indexOf(o.content);if(!(d<0)){var c,p=0;if(o.continued)do{p++,c=l.indexOf(o.content,d+p*o.content.length)}while(0===c);else p=1;if(c=d+p*o.content.length,t.splice(r,1),d>0&&(t.splice(r,0,new e({content:l.substring(0,d),localGui:n.dir,keep:!0})),r++),t.splice(r,0,new e({content:l.substring(d,c),textDirection:o.subDir,localGui:n.dir})),c<l.length&&t.splice(r+1,0,new e({content:l.substring(c,l.length),localGui:n.dir,keep:!0})),!s)break}}},handleBounds:function(o,i,a,s,r){for(var l=0;l<a.length;l++)if(t(a[l]))for(var d=0;!(d>=o.length);d++)if(!(o[d].isParsed||o[d].inBounds||o.keep||o[d].isSeparator)){var c=n(o[d],a[l]),p=c.bStart,u=c.bEnd;if(!(p<0||u<0)){var f=o[d].content;if(o.splice(d,1),p>0&&(o.splice(d,0,new e({content:f.substring(0,p),localGui:i.dir,keep:!0})),d++),c.start&&(o.splice(d,0,new e({content:c.start,localGui:i.dir,isSeparator:!0})),d++),o.splice(d,0,new e({content:f.substring(p+c.start.length,u-c.end.length),textDirection:c.subDir,localGui:i.dir,inBounds:!0})),c.end&&(d++,o.splice(d,0,new e({content:c.end,localGui:i.dir,isSeparator:!0}))),u+c.end.length<f.length&&o.splice(d+1,0,new e({content:f.substring(u+c.end.length,f.length),localGui:i.dir,keep:!0})),!c.loops)break}}for(l=0;l<o.length;l++)o[l].inBounds=!1;return o},handleCases:function(e,t,n,o,i){if(0===n.length)return e;var a={};for(var s in t)t.hasOwnProperty(s)&&(a[s]=t[s]);for(var r=0;r<n.length;r++)n[r].handler&&"function"==typeof n[r].handler.handle||(n[r].handler=t.commonHandler),n[r].args?(a.cases=n[r].args.cases,a.points=n[r].args.points,a.bounds=n[r].args.bounds,a.subs=n[r].args.subs):(a.cases=[],a.points=[],a.bounds=[],a.subs={}),n[r].handler.handle(o,e,a,i);return e},handlePoints:function(t,n,o,i,a){for(var s=0;s<o.length;s++)for(var r=0;!(r>=t.length);r++)if(!(t[r].isParsed||t[r].keep||t[r].isSeparator)){var l=t[r].content,d=l.indexOf(o[s]);d>=0&&(t.splice(r,1),d>0&&(t.splice(r,0,new e({content:l.substring(0,d),textDirection:n.subDir,localGui:n.dir,inPoints:!0})),r++),t.splice(r,0,new e({content:o[s],localGui:n.dir,isSeparator:!0})),d+o[s].length+1<=l.length&&t.splice(r+1,0,new e({content:l.substring(d+o[s].length),textDirection:n.subDir,localGui:n.dir,inPoints:!0})))}for(s=0;s<t.length;s++)t[s].keep?t[s].keep=!1:t[s].inPoints&&(t[s].isParsed=!0,t[s].inPoints=!1);return t}}}(),n={handle:function(e,n,o,i){var a=[];Array.isArray(o.cases)&&(a=o.cases);var s=[];void 0!==o.points&&(Array.isArray(o.points)?s=o.points:"string"==typeof o.points&&(s=o.points.split("")));var r={};"object"==typeof o.subs&&(r=o.subs);var l=[];return Array.isArray(o.bounds)&&(l=o.bounds),t.handleBounds(n,o,l,e,i),t.handleSubcontents(n,o,r,e,i),t.handleCases(n,o,a,e,i),t.handlePoints(n,o,s,e,i),n}},o={LRE:"",RLE:"",PDF:"",LRM:"",RLM:"",LRO:"",RLO:"",getLocaleDetails:function(e){if(e||(e="undefined"==typeof navigator?"":navigator.language||navigator.userLanguage||""),function(e){var t=e?e.split("-")[0]:"";return!(!t||t.length<2)&&["iw","he","ar","fa","ur"].some(function(e){return e===t})}(e=e.toLowerCase())){var t=e.split("-");return{lang:t[0],country:t[1]?t[1]:""}}return{lang:"not-bidi"}},removeUcc:function(e){return e?e.replace(/[\u200E\u200F\u202A-\u202E]/g,""):e},removeTags:function(e){return e?e.replace(/<[^<]*>/g,""):e},getDirection:function(e,t,n,o){if("auto"!==t&&/^(rtl|ltr)$/i.test(t))return t;n=/^(rtl|ltr)$/i.test(n)?n:"ltr";var i=o?e.split("").reverse().join(""):e,a=/[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(i);return a?a[0]<="z"?"ltr":"rtl":n},hasArabicChar:function(e){return!!/[\u0600-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(e)},showMarks:function(e,t){for(var n="",o=0;o<e.length;o++){var i=""+e.charAt(o);switch(i){case"":n+="<LRM>";break;case"":n+="<RLM>";break;case"":n+="<LRE>";break;case"":n+="<RLE>";break;case"":n+="<LRO>";break;case"":n+="<RLO>";break;case"":n+="<PDF>";break;default:n+=i}}var a=void 0!==t&&/^(rtl|ltr)$/i.test(t)?"rtl"===t?"":"":"";return a+n+(""===a?"":"")},hideMarks:function(e){return e.replace(/<LRM>/g,this.LRM).replace(/<RLM>/g,this.RLM).replace(/<LRE>/g,this.LRE).replace(/<RLE>/g,this.RLE).replace(/<LRO>/g,this.LRO).replace(/<RLO>/g,this.RLO).replace(/<PDF>/g,this.PDF)},showTags:function(e){return"<xmp>"+e+"</xmp>"},hideTags:function(e){return e.replace(/<xmp>/g,"").replace(/<\/xmp>/g,"")}},i=function(){var t={};function i(e,t){var o=Array.isArray(e)?e[0]:e;return o.guiDir||(o.guiDir="ltr"),o.dir||(o.dir=o.guiDir),t?(void 0===o.points&&(o.points=[]),o.cases||(o.cases=[]),o.bounds||(o.bounds=[]),o.commonHandler=n,o):o}function a(t,o,a){if(!t||!o)return new e({content:""});var s=i(o,!0),r=[new e({content:t,actual:t,localGui:s.dir})],l=n.handle;return s.handler&&"function"==typeof s.handler&&(l=s.handler.handle),l(t,r,s,a),r}function s(e,t,n){var a=i(t,!1);return n?function(e,t,n){for(var i="",a="",s=0;s<e.length;s++)if(e[s].isVisible){var r=e[s].textDirection,l=e[s].localGui;if(""!==l&&""===a?i+="<bdi dir='"+("rtl"===l?"rtl":"ltr")+"'>":""===a||""!==l&&l===a&&!stop||(i+="</bdi>"+(s==e.length-1&&""!==l?"":"<span style='unicode-bidi: embed; direction: "+("rtl"===t.dir?"rtl":"ltr")+";'></span>"),""!==l&&(i+="<bdi dir='"+("rtl"===l?"rtl":"ltr")+"'>")),"auto"===r&&(r=o.getDirection(e[s].content,r,t.guiDir)),/^(rtl|ltr)$/i.test(r)?(i+="<bdi dir='"+("rtl"===r?"rtl":"ltr")+"'>"+e[s].content+"</bdi>",r):(i+=e[s].content,o.getDirection(e[s].content,r,t.guiDir,!0)),s<e.length-1){var d=l&&e[s+1].localGui?l:t.dir;i+="<span style='unicode-bidi: embed; direction: "+("rtl"===d?"rtl":"ltr")+";'></span>"}else""!==a&&(i+="</bdi>");a=l,stop=!1}else stop=!0;var c="auto"===t.dir?o.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;c!==t.guiDir&&(i="<bdi dir='"+("rtl"===c?"rtl":"ltr")+"'>"+i+"</bdi>");return i}(e,a):function(e,t,n){for(var i="",a="",s=!1,r=0;r<e.length;r++)if(e[r].isVisible){var l=e[r].textDirection,d=e[r].localGui;if(""!==d&&""===a?i+="rtl"===d?o.RLE:o.LRE:""===a||""!==d&&d===a&&!s||(i+=o.PDF+(r==e.length-1&&""!==d?"":"rtl"===t.dir?o.RLM:o.LRM),""!==d&&(i+="rtl"===d?o.RLE:o.LRE)),"auto"===l&&(l=o.getDirection(e[r].content,l,t.guiDir)),/^(rtl|ltr)$/i.test(l)?(i+=("rtl"===l?o.RLE:o.LRE)+e[r].content+o.PDF,l):(i+=e[r].content,o.getDirection(e[r].content,l,t.guiDir,!0)),r<e.length-1){var c=d&&e[r+1].localGui?d:t.dir;i+="rtl"===c?o.RLM:o.LRM}else""!==a&&(i+=o.PDF);a=d,s=!1}else s=!0;var p="auto"===t.dir?o.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;p!==t.guiDir&&(i=("rtl"===p?o.RLE:o.LRE)+i+o.PDF);return i}(e,a)}return t.parseAndDisplayStructure=function(e,t,n,o){return e&&t?s(a(e,t,o),t,n):e},t.parseStructure=a,t.displayStructure=s,t.restore=function(e,t){return e},t}(),a={format:function(e,t,n,o,a,s){var r={guiDir:n?"rtl":"ltr",dir:t.dir?t.dir:n?"rtl":"ltr",subs:{content:">",continued:!0,subDir:n?"rtl":"ltr"},cases:[{args:{subs:{content:"<",continued:!0,subDir:n?"ltr":"rtl"}}}]};return s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},s={format:function(e,t,n,o,a,s){var r={guiDir:n?"rtl":"ltr",dir:"ltr",points:","};return s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},r=function(){return{format:function(e,t,a,s,r,l){var d={guiDir:a?"rtl":"ltr",dir:function(e,t){if("ar"!==o.getLocaleDetails(t).lang)return"ltr";var n=e.indexOf("@");return n>0&&n<e.length-1&&o.hasArabicChar(e.substring(n+1))?"rtl":"ltr"}(e,r),points:"<>.:,;@",cases:[{handler:n,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"(",endBefore:")"}],points:""}}]};return l?i.parseStructure(e,d,!!s,r):i.parseAndDisplayStructure(e,d,!!s,r)}}}(),l={format:function(e,t,n,o,a,s){var r={guiDir:n?"rtl":"ltr",dir:"ltr",points:"/\\:."};return s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},d={format:function(e,t,n,o,a,s){var r={guiDir:n?"rtl":"ltr",dir:"ltr",points:" /%^&[]<>=!?~:.,|()+-*{}"};return s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},c={format:function(e,t,o,a,s,r){var l={guiDir:o?"rtl":"ltr",dir:"ltr",points:"\t!#%&()*+,-./:;<=>?|[]{}",cases:[{handler:n,args:{bounds:[{startAfter:"/*",endBefore:"*/"},{startAfter:"--",end:"\n"},{startAfter:"--"}]}},{handler:n,args:{subs:{content:" ",continued:!0}}},{handler:n,args:{bounds:[{startAfter:"'",endBefore:"'"},{startAfter:'"',endBefore:'"'}]}}]};return r?i.parseStructure(e,l,!!a,s):i.parseAndDisplayStructure(e,l,!!a,s)}},p={format:function(e,t,n,o,a,s){var r={guiDir:n?"rtl":"ltr",dir:"ltr",points:"_"};return s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},u={format:function(e,t,n,o,a,s){var r={guiDir:n?"rtl":"ltr",dir:"ltr",points:":?#/@.[]="};return s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},f={format:function(e,t,n,o,a,s){var r={guiDir:n?"rtl":"ltr",dir:t.dir?t.dir:n?"rtl":"ltr",points:" ,.!?;:"};return s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},h={format:function(e,t,o,a,s,r){var l={guiDir:o?"rtl":"ltr",dir:"ltr",points:" /[]<>=!:@.|()+-*",cases:[{handler:n,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"'",endBefore:"'"}],points:""}}]};return r?i.parseStructure(e,l,!!a,s):i.parseAndDisplayStructure(e,l,!!a,s)}},g={format:function(e,t,n,o,a,s){var r={},l="",d=Array.isArray(t)?t[0]:t;for(l in d)d.hasOwnProperty(l)&&(r[l]=d[l]);return r.guiDir=n?"rtl":"ltr",r.dir=r.dir?r.dir:r.guiDir,s?i.parseStructure(e,r,!!o,a):i.parseAndDisplayStructure(e,r,!!o,a)}},v=(function(){var e={msgLang:"en",msgDir:"",phLang:"",phDir:"",phPacking:["{","}"],phStt:{type:"none",args:{}},guiDir:""},t=!1;function n(e){return"he"===e||"iw"===e||"ar"===e?"rtl":"ltr"}function o(e){0===e.msgDir.length&&(e.msgDir=n(e.msgLang)),e.msgDir="ltr"!==e.msgDir&&"rtl"!==e.msgDir&&"auto"!=e.msgDir?"ltr":e.msgDir,0===e.guiDir.length&&(e.guiDir=e.msgDir),e.guiDir="rtl"!==e.guiDir?"ltr":"rtl",0===e.phDir.length&&(e.phDir=0===e.phLang.length?e.msgDir:n(e.phLang)),e.phDir="ltr"!==e.phDir&&"rtl"!==e.phDir&&"auto"!=e.phDir?"ltr":e.phDir,"string"==typeof e.phPacking&&(e.phPacking=e.phPacking.split("")),e.phPacking.length<2&&(e.phPacking=["{","}"])}}(),null);function b(e){switch(e){case"breadcrumb":return a;case"comma":return s;case"email":return r;case"filepath":return l;case"formula":return d;case"sql":return c;case"underscore":return p;case"url":return u;case"word":return f;case"xpath":return h;default:return g}}function m(e,t,n,i,a){if(!e||1!=e.nodeType)return!1;v||(v=document.createEvent("Event")).initEvent("TF",!0,!0),e.setAttribute("data-tf-type",t);var s="undefined"===n?"{}":JSON.stringify(Array.isArray(n)?n[0]:n);e.setAttribute("data-tf-args",s);var r="ltr";if("undefined"===i&&(e.dir?r=e.dir:e.style&&e.style.direction&&(r=e.style.direction),i="rtl"===r.toLowerCase()),e.setAttribute("data-tf-dir",i),e.setAttribute("data-tf-locale",o.getLocaleDetails(a).lang),function(e){var t=window.navigator.userAgent;if(t.indexOf("MSIE")>=0||t.indexOf("Trident")>=0||t.indexOf("Edge")>=0)return!1;var n=document.createElement(e.tagName);n.contentEditable=!0;var o="oninput"in n;return o||(n.setAttribute("oninput","return;"),o="function"==typeof n.oninput),n=null,o}(e)){e.oninput;e.oninput=function(e){y(e.target)}}else e.onkeyup=function(t){y(t.target),e.dispatchEvent(v)},e.onmouseup=function(t){y(t.target),e.dispatchEvent(v)};return y(e),!0}function y(e){var t=e.textContent||"",n=document.getSelection();if(0===t.length||!n||n.rangeCount<=0)e.dispatchEvent(v);else{var o,i,a=n.getRangeAt(0),s=a.cloneRange();o=a.startContainer,i=a.startOffset;var r=0;3===o.nodeType&&(r+=i),s.setStart(e,0),s.setEndBefore(o);var l=document.createElement("div");l.appendChild(s.cloneContents()),r+=l.textContent.length,e.innerHTML=b(e.getAttribute("data-tf-type")).format(t,JSON.parse(e.getAttribute("data-tf-args")),"true"===e.getAttribute("data-tf-dir"),!0,e.getAttribute("data-tf-locale"));var d=e,c=e,p=0,u=!1;for(n.removeAllRanges(),a.setStart(e,0),a.setEnd(e,0);c;){if(3===c.nodeType){if(p+c.nodeValue.length>=r){a.setStart(c,r-p);break}p+=c.nodeValue.length,c=c.nextSibling}else{if(c.hasChildNodes()){c=(d=c).firstChild;continue}c=c.nextSibling}for(;!c;){if(d===e){u=!0;break}c=d.nextSibling,d=d.parentNode}if(u)break}n.addRange(a),e.dispatchEvent(v)}}return{getHtml:function(e,t,n,o,i){return b(t).format(e,n,o,!0,i)},attach:function(e,t,n,o,i){return m(e,t,n,o,i)}}}(),RED.state={DEFAULT:0,MOVING:1,JOINING:2,MOVING_ACTIVE:3,ADDING:4,EDITING:5,EXPORT:6,IMPORT:7,IMPORT_DRAGGING:8,QUICK_JOINING:9,PANNING:10},RED.nodes=function(){var e,t,o=[],a={},s=[],r={},l=[],d={},c=null,p=!1;var u=function(){var e={},t=[],n={},o={},i={},a={};i.tab={defaults:{label:{value:""},disabled:{value:!1},info:{value:""}}};var s={setModulePendingUpdated:function(t,n){e[t].pending_version=n,RED.events.emit("registry:module-updated",{module:t,version:n})},getModule:function(t){return e[t]},getNodeSetForType:function(e){return s.getNodeSet(o[e])},getModuleList:function(){return e},getNodeList:function(){return t},getNodeTypes:function(){return Object.keys(i)},setNodeList:function(e){t=[];for(var n=0;n<e.length;n++){var o=e[n];s.addNodeSet(o)}},addNodeSet:function(i){i.added=!1,n[i.id]=i;for(var a=0;a<i.types.length;a++)o[i.types[a]]=i.id;t.push(i),e[i.module]=e[i.module]||{name:i.module,version:i.version,local:i.local,sets:{}},i.pending_version&&(e[i.module].pending_version=i.pending_version),e[i.module].sets[i.name]=i,RED.events.emit("registry:node-set-added",i)},removeNodeSet:function(i){for(var a=n[i],s=0;s<a.types.length;s++)delete o[a.types[s]];delete n[i];for(var r=0;r<t.length;r++)if(t[r].id===i){t.splice(r,1);break}return delete e[a.module].sets[a.name],0===Object.keys(e[a.module].sets).length&&delete e[a.module],RED.events.emit("registry:node-set-removed",a),a},getNodeSet:function(e){return n[e]},enableNodeSet:function(e){var t=n[e];t.enabled=!0,RED.events.emit("registry:node-set-enabled",t)},disableNodeSet:function(e){var t=n[e];t.enabled=!1,RED.events.emit("registry:node-set-disabled",t)},registerNodeType:function(e,t){var a;(i[e]=t,t.type=e,"subflow:"!=e.substring(0,8))&&(t.set=n[o[e]],n[o[e]].added=!0,n[o[e]].enabled=!0,a="kumologica-core"===t.set.module?"kumologica-core":t.set.id,t._=function(){var e=Array.prototype.slice.call(arguments,0),t=e[0];-1===e[0].indexOf(":")&&(e[0]=a+":"+e[0]);var n=RED._.apply(null,e);return n===e[0]&&(n=t),n});RED.events.emit("registry:node-type-added",e)},removeNodeType:function(e){if("subflow:"!=e.substring(0,8))throw new Error("this api is subflow only. called with:",e);delete i[e],RED.events.emit("registry:node-type-removed",e)},getNodeType:function(e){return i[e]},setIconSets:function(e){(a=e)["font-awesome"]=RED.nodes.fontAwesome.getIconList()},getIconSets:function(){return a}};return s}();function f(){return(1+4294967295*Math.random()).toString(16)}function h(e){if(0!==e.type.indexOf("subflow")?e._=e._def._:e._=RED._,"config"==e._def.category)a[e.id]=e;else{if(e.ports=[],e.wires&&e.wires.length>e.outputs&&(e.outputs=e.wires.length),e.outputs)for(var t=0;t<e.outputs;t++)e.ports.push(t);if(e.dirty=!0,S(e),"subflows"==e._def.category&&void 0===e.i){var n=0;RED.nodes.eachNode(function(e){n=Math.max(n,e.i||0)}),e.i=n+1}o.push(e)}RED.events.emit("nodes:add",e)}function g(e){s.push(e)}function v(e){if(e in a)return a[e];for(var t in o)if(o[t].id==e)return o[t];return null}function b(e){var t,i=[],r=[];if(e in a)t=a[e],delete a[e],RED.events.emit("nodes:remove",t),RED.workspaces.refresh();else if(t=v(e)){o.splice(o.indexOf(t),1),(i=s.filter(function(e){return e.source===t||e.target===t})).forEach(function(e){s.splice(s.indexOf(e),1)});var l=!1;for(var d in t._def.defaults)if(t._def.defaults.hasOwnProperty(d)){var c=t._def.defaults[d];if(c.type){var p=u.getNodeType(c.type);if(p&&"config"==p.category){var f=a[t[d]];if(f)if(l=!0,f._def.exclusive)b(t[d]),r.push(f);else{var h=f.users;h.splice(h.indexOf(t),1)}}}}l&&RED.workspaces.refresh();try{t._def.oneditdelete&&t._def.oneditdelete.call(t)}catch(e){console.log("oneditdelete",t.id,t.type,e.toString())}RED.events.emit("nodes:remove",t)}return t&&t._def.onremove&&(console.log("Deprecated API warning: node type ",t.type," has an onremove function - should be oneditremove - please report"),t._def.onremove.call(n)),{links:i,nodes:r}}function m(e){var t=s.indexOf(e);-1!=t&&s.splice(t,1)}function y(e,t){r[e.id]=e,e._def=RED.nodes.getType("tab"),void 0===t?l.push(e.id):l.splice(t,0,e.id)}function w(e,t){if(t){var n=Object.keys(d).map(function(e){return d[e].name});n.sort();var o=1,i=e.name;n.forEach(function(t){i==t&&(o++,i=e.name+" ("+o+")")}),e.name=i}d[e.id]=e,RED.nodes.registerType("subflow:"+e.id,{defaults:{name:{value:""},env:{value:[]}},icon:function(){return e.icon||"subflow.png"},category:e.category||"subflows",inputs:e.in.length,outputs:e.out.length,color:"#da9",label:function(){return this.name||RED.nodes.subflow(e.id).name},labelStyle:function(){return this.name?"node_label_italic":""},paletteLabel:function(){return RED.nodes.subflow(e.id).name},inputLabels:function(t){return e.inputLabels?e.inputLabels[t]:null},outputLabels:function(t){return e.outputLabels?e.outputLabels[t]:null},oneditresize:function(e){for(var t=$("#dialog-form>div:not(.node-input-env-container-row)"),n=e.height,o=0;o<t.size();o++)n-=$(t[o]).outerHeight(!0);var i=$("#dialog-form>div.node-input-env-container-row");n-=parseInt(i.css("marginTop"))+parseInt(i.css("marginBottom")),$("#node-input-env-container").editableList("height",n-80)},set:{module:"kumologica-core"}}),e._def=RED.nodes.getType("subflow:"+e.id)}function x(e){return d[e]}function D(e,t){for(var n=0;n<o.length;n++){var i=o[n];if(i.z===e){var a=/^subflow:(.+)$/.exec(i.type);if(a){if(a[1]===t)return!0;if(D(a[1],t))return!0}}}return!1}function E(e){var t={};for(var n in t.id=e.id,t.type=e.type,e._def.defaults)e._def.defaults.hasOwnProperty(n)&&(t[n]=e[n]);return t}function k(e,t){if("tab"===e.type)return E(e);t=t||!1;var n={};if(n.id=e.id,n.type=e.type,n.z=e.z,"unknown"==n.type)for(var o in e._orig)e._orig.hasOwnProperty(o)&&(n[o]=e._orig[o]);else{for(var i in e._def.defaults)e._def.defaults.hasOwnProperty(i)&&(n[i]=e[i]);if(t&&e.credentials){var a={};for(var r in n.credentials={},e._def.credentials)e._def.credentials.hasOwnProperty(r)&&("password"==e._def.credentials[r].type?(!e.credentials._||e.credentials["has_"+r]!=e.credentials._["has_"+r]||e.credentials["has_"+r]&&e.credentials[r])&&(a[r]=e.credentials[r]):null==e.credentials[r]||e.credentials._&&e.credentials[r]==e.credentials._[r]||(a[r]=e.credentials[r]));Object.keys(a).length>0&&(n.credentials=a)}}if("config"!=e._def.category){n.x=e.x,n.y=e.y,n.wires=[];for(var l=0;l<e.outputs;l++)n.wires.push([]);for(var d=s.filter(function(t){return t.source===e}),c=0;c<d.length;c++){var p=d[c];"subflow"!=p.target.type&&p.sourcePort<n.wires.length&&n.wires[p.sourcePort].push(p.target.id)}if(e.inputs>0&&e.inputLabels&&!/^\s*$/.test(e.inputLabels.join(""))&&(n.inputLabels=e.inputLabels.slice()),e.outputs>0&&e.outputLabels&&!/^\s*$/.test(e.outputLabels.join(""))&&(n.outputLabels=e.outputLabels.slice()),(!e._def.defaults||!e._def.defaults.hasOwnProperty("icon"))&&e.icon){var u=RED.utils.getDefaultNodeIcon(e._def,e);e.icon!==u.module+"/"+u.file&&(n.icon=e.icon)}(!e._def.defaults||!e._def.defaults.hasOwnProperty("l"))&&e.hasOwnProperty("l")}return e.info&&(n.info=e.info),e._def.set?(e._def.set.name&&(n.caname=e._def.set.name),e._def.category&&(n.category=e._def.category)):(n.caname="_error_unknown",n.category="_error_unknown"),n}function R(e){var t={};return t.id=e.id,t.type=e.type,t.name=e.name,t.info=e.info,t.category=e.category,t.in=[],t.out=[],t.env=e.env,e.in.forEach(function(e){for(var n={x:e.x,y:e.y,wires:[]},o=s.filter(function(t){return t.source===e}),i=0;i<o.length;i++){var a=o[i];"subflow"!=a.target.type&&n.wires.push({id:a.target.id})}t.in.push(n)}),e.out.forEach(function(n,o){var a={x:n.x,y:n.y,wires:[]},r=s.filter(function(e){return e.target===n});for(i=0;i<r.length;i++)"subflow"!=r[i].source.type?a.wires.push({id:r[i].source.id,port:r[i].sourcePort}):a.wires.push({id:e.id,port:0});t.out.push(a)}),t.in.length>0&&e.inputLabels&&!/^\s*$/.test(e.inputLabels.join(""))&&(t.inputLabels=e.inputLabels.slice()),t.out.length>0&&e.outputLabels&&!/^\s*$/.test(e.outputLabels.join(""))&&(t.outputLabels=e.outputLabels.slice()),e.icon&&"kumologica-core/subflow.png"!==e.icon&&(t.icon=e.icon),e.status&&(t.status={x:e.status.x,y:e.status.y,wires:[]},s.forEach(function(n){n.target===e.status&&("subflow"!=n.source.type?t.status.wires.push({id:n.source.id,port:n.sourcePort}):t.status.wires.push({id:e.id,port:0}))})),t}function T(e,t,n){var o=[];n=n||{},t=t||{};for(var i=0;i<e.length;i++){var s=e[i];if("subflow:"==s.type.substring(0,8)){var r=s.type.substring(8);if(!t[r]){t[r]=!0;var l=[x(r)];RED.nodes.eachNode(function(e){e.z==r&&l.push(e)}),o=T(l,t,n).concat(o)}}if("subflow"!=s.type){var d=RED.nodes.convertNode(s);for(var c in s._def.defaults)if(s._def.defaults[c].type&&s[c]in a){var p=a[s[c]],f=u.getNodeType(s._def.defaults[c].type).exportable;null==f||f?s[c]in n||(n[s[c]]=!0,e.push(p)):d[c]=""}o.push(d)}else{var h=R(s);o.push(h)}}return o}function _(e,t){var n;t=t||[];var o=null;return RED.nodes.eachSubflow(function(i){if(i.name==e.name&&i.info==e.info&&i.in.length==e.in.length&&i.out.length==e.out.length){var a=RED.nodes.filterNodes({z:i.id});if(a.length==t.length){var s=[e].concat(t),r=[i].concat(a),l=JSON.stringify(s),d=JSON.stringify(T(r));for(n=0;n<a.length;n++)l=l.replace(new RegExp('"'+t[n].id+'"',"g"),'"'+a[n].id+'"');if((l=l.replace(new RegExp('"'+e.id+'"',"g"),'"'+i.id+'"'))===d)return o=i,!1}}}),o}function j(e,t,n){if(n&&e.id!=t.id)return!1;if(e.type!=t.type)return!1;var o=e._def;for(var i in o.defaults)if(o.defaults.hasOwnProperty(i)){var a=e[i],s=t[i];if(typeof a!=typeof s)return!1;if(null===a||"string"==typeof a||"number"==typeof a){if(a!==s)return!1}else if(JSON.stringify(a)!==JSON.stringify(s))return!1}return!0}function C(n,o,i){var s,l,d,c={};if("string"==typeof n){if(""===n)return;try{d=JSON.parse(n)}catch(C){var p=new Error(`Invalid flow: ${C.message}`);throw p.code="NODE_RED",p}}else d=n;$.isArray(d)||(d=[d]);var v={};d=d.filter(function(e){return!v[e.id]&&(v[e.id]=!0,!0)});var b=!1;t||(b=!0,t=JSON.parse(JSON.stringify(d)));var m=[];for(s=0;s<d.length;s++)"workspace"==(l=d[s]).type||"tab"==l.type||"subflow"==l.type||u.getNodeType(l.type)||"subflow:"==l.type.substring(0,8)||-1!=m.indexOf(l.type)||m.push(l.type),l.z&&(c[l.z]=c[l.z]||[],c[l.z].push(l));if(!b&&m.length>0){var E="<ul><li>"+m.join("</li><li>")+"</li></ul>";RED.notify("<p>Imported unrecognised type:</p>"+E,"error",!1,1e4)}var k=RED.workspaces.active(),R=x(k);for(s=0;s<d.length;s++){var T=/^subflow:(.+)$/.exec(d[s].type);if(T){var C,S=T[1],O=x(d[s].z||k);if(O)if(S===O.id&&(C=new Error("Cannot add subflow to itself")),D(S,O.id)&&(C=new Error("Cannot add subflow - circular reference detected")),C)throw C.code="NODE_RED",C}}var I,N,P,L,z=[],A={},M=[],B={},U={},q={},F=[],J=[],W=null;for(s=0;s<d.length;s++)if("workspace"===(l=d[s]).type||"tab"===l.type)"workspace"===l.type&&(l.type="tab"),null==e&&(e=l),o&&(I=f(),A[l.id]=I,l.id=I),y(l),RED.workspaces.add(l),z.push(l);else if("subflow"===l.type){var V=_(l,c[l.id]);V?U[l.id]=V:(B[l.id]=l,o&&(I=f(),l.id=I),l.in.forEach(function(e,t){e.type="subflow",e.direction="in",e.z=l.id,e.i=t,e.id=f()}),l.out.forEach(function(e,t){e.type="subflow",e.direction="out",e.z=l.id,e.i=t,e.id=f()}),l.status&&(l.status.type="subflow",l.status.direction="status",l.status.z=l.id,l.status.id=f()),M.push(l),w(l,o))}for(null==e&&(y(e={type:"tab",id:f(),disabled:!1,info:"",label:`Flow ${number}`}),RED.workspaces.add(e),z.push(e),k=RED.workspaces.active()),s=0;s<d.length;s++)if(l=d[s],(N=u.getNodeType(l.type))&&"config"==N.category){var G=null;if(o){if(l.z){if(U[l.z])continue;B[l.z]?l.z=B[l.z].id:(l.z=A[l.z],r[l.z]||(i?(null===W&&(W=RED.workspaces.add(null,!0),z.push(W)),l.z=W.id):l.z=k))}if((G=RED.nodes.node(l.id))&&l.z&&G.z!==l.z)for(var K in G=null,a)if(a.hasOwnProperty(K)&&a[K].z===l.z&&j(a[K],l,!1)){G=a[K],q[l.id]=a[K];break}}if(!G||G._def.exclusive){for(L in P={id:l.id,z:l.z,type:l.type,info:l.info,users:[],_config:{}},N.defaults)N.defaults.hasOwnProperty(L)&&(P[L]=l[L],P._config[L]=JSON.stringify(l[L]));if(N.hasOwnProperty("credentials")&&l.hasOwnProperty("credentials"))for(L in P.credentials={},N.credentials)N.credentials.hasOwnProperty(L)&&l.credentials.hasOwnProperty(L)&&(P.credentials[L]=l.credentials[L]);P.label=N.label,P._def=N,o&&(P.id=f()),q[l.id]=P,F.push(P),RED.nodes.add(P)}}for(s=0;s<d.length;s++)if("workspace"!==(l=d[s]).type&&"tab"!==l.type&&"subflow"!==l.type&&(!(N=u.getNodeType(l.type))||"config"!=N.category)){var H={x:parseFloat(l.x||0),y:parseFloat(l.y||0),z:l.z,type:0,wires:l.wires||[],inputLabels:l.inputLabels,outputLabels:l.outputLabels,icon:l.icon,info:l.info,changed:!1,_config:{}};if(o){if(U[l.z])continue;B[H.z]?H.z=B[H.z].id:(H.z=A[H.z],r[H.z]||(i?(null===W&&(W=RED.workspaces.add(null,!0),z.push(W)),H.z=W.id):H.z=k)),H.id=f()}else H.id=l.id,null!=H.z&&(r[H.z]||B[H.z])||(i?(null===W&&(W=RED.workspaces.add(null,!0),z.push(W)),H.z=W.id):H.z=k);if(H.type=l.type,H._def=N,"subflow"===l.type.substring(0,7)){var X=l.type.split(":")[1],Y=U[X]||B[X]||x(X);o&&(X=Y.id,H.type="subflow:"+X,H._def=u.getNodeType(H.type),delete H.i),H.name=l.name,H.outputs=Y.out.length,H.inputs=Y.in.length,H.env=l.env}else{if(!H._def){H.x&&H.y?H._def={color:"#fee",defaults:{},label:"unknown: "+l.type,labelStyle:"node_label_italic",outputs:l.outputs||l.wires.length,set:u.getNodeSet("kumologica-core/unknown")}:(H._def={category:"config",set:u.getNodeSet("kumologica-core/unknown")},H.users=[],delete H.x,delete H.y,delete H.wires,delete H.inputLabels,delete H.outputLabels);var Q={};for(var Z in l)l.hasOwnProperty(Z)&&"x"!=Z&&"y"!=Z&&"z"!=Z&&"id"!=Z&&"wires"!=Z&&(Q[Z]=l[Z]);H._orig=Q,H.name=l.type,H.type="unknown"}if("config"!=H._def.category){for(L in l.hasOwnProperty("inputs")?(H.inputs=l.inputs,H._config.inputs=JSON.stringify(l.inputs)):H.inputs=H._def.inputs,l.hasOwnProperty("outputs")?(H.outputs=l.outputs,H._config.outputs=JSON.stringify(l.outputs)):H.outputs=H._def.outputs,H.hasOwnProperty("wires")&&H.wires.length>H.outputs&&(H._def.defaults.hasOwnProperty("outputs")&&isNaN(parseInt(l.outputs))?H.outputs=H.wires.length:(console.log("Warning: node.wires longer than node.outputs - trimming wires:",H.id," wires:",H.wires.length," outputs:",H.outputs),H.wires=H.wires.slice(0,H.outputs))),H._def.defaults)H._def.defaults.hasOwnProperty(L)&&"inputs"!==L&&"outputs"!==L&&(H[L]=l[L],H._config[L]=JSON.stringify(l[L]));if(H._config.x=H.x,H._config.y=H.y,H._def.hasOwnProperty("credentials")&&l.hasOwnProperty("credentials"))for(L in H.credentials={},H._def.credentials)H._def.credentials.hasOwnProperty(L)&&l.credentials.hasOwnProperty(L)&&(H.credentials[L]=l.credentials[L])}}h(H),RED.editor.validateNode(H),q[l.id]=H,"unknown"!==H.type&&"config"===H._def.category||F.push(H)}var ee={catch:"scope",status:"scope","link in":"links","link out":"links"};for(s=0;s<F.length;s++){if((l=F[s]).wires){for(var te=0;te<l.wires.length;te++)for(var ne=l.wires[te]instanceof Array?l.wires[te]:[l.wires[te]],oe=0;oe<ne.length;oe++)if(q.hasOwnProperty(ne[oe]))if(l.z===q[ne[oe]].z){var ie={source:l,sourcePort:te,target:q[ne[oe]]};g(ie),J.push(ie)}else console.log("Warning: dropping link that crosses tabs:",l.id,"->",q[ne[oe]].id);delete l.wires}for(var ae in l._def.defaults)if(l._def.defaults.hasOwnProperty(ae))if(l._def.defaults[ae].type&&q[l[ae]])l[ae]=q[l[ae]].id,(P=RED.nodes.node(l[ae]))&&-1===P.users.indexOf(l)&&P.users.push(l);else if(ee.hasOwnProperty(l.type)&&ee[l.type]===ae&&void 0!==l[ae]&&null!==l[ae])for(var se=0;se<l[ae].length;se++)q[l[ae][se]]&&(l[ae][se]=q[l[ae][se]].id);R&&/^link /.test(l.type)&&l.links&&(l.links=l.links.filter(function(e){var t=RED.nodes.node(e);return t&&t.z===k})),RED.editor.validateNode(l)}for(s=0;s<M.length;s++)(l=M[s]).in.forEach(function(e){e.wires.forEach(function(t){var n={source:e,sourcePort:0,target:q[t.id]};g(n),J.push(n)}),delete e.wires}),l.out.forEach(function(e){e.wires.forEach(function(t){var n;g(n=B[t.id]&&B[t.id].id==l.id?{source:l.in[t.port],sourcePort:t.port,target:e}:{source:q[t.id]||B[t.id],sourcePort:t.port,target:e}),J.push(n)}),delete e.wires}),l.status&&(l.status.wires.forEach(function(e){var t;g(t=B[e.id]&&B[e.id].id==l.id?{source:l.in[e.port],sourcePort:e.port,target:l.status}:{source:q[e.id]||B[e.id],sourcePort:e.port,target:l.status}),J.push(t)}),delete l.status.wires);return RED.workspaces.refresh(),[F,J,z,M,W]}function S(e){for(var t in e._def.defaults)if(e._def.defaults.hasOwnProperty(t)){var n=e._def.defaults[t];if(n.type){var o=u.getNodeType(n.type);if(o&&"config"==o.category){var i=a[e[t]];i&&-1===i.users.indexOf(e)&&i.users.push(e)}}}}return{init:function(){RED.events.on("registry:node-type-added",function(e){u.getNodeType(e);var t={};RED.nodes.eachNode(function(n){"unknown"===n.type&&n.name===e&&(t[n.id]=n)}),RED.nodes.eachConfig(function(n){"unknown"===n.type&&n.name===e&&(t[n.id]=n)});var n=Object.keys(t);if(n.length>0){var i=[];n.forEach(function(e){var n=t[e];a.hasOwnProperty(n.id)?delete a[n.id]:o.splice(o.indexOf(n),1),i.push(k(n))});var s=[];RED.nodes.eachLink(function(e){t.hasOwnProperty(e.source.id)&&t.hasOwnProperty(e.target.id)&&s.push(e)}),s.forEach(m),RED.view.redraw(!0);var r={};C(i,!1)[0].forEach(function(e){r[e.id]=e}),RED.nodes.eachLink(function(e){r.hasOwnProperty(e.source.id)&&(e.source=r[e.source.id]),r.hasOwnProperty(e.target.id)&&(e.target=r[e.target.id])}),RED.view.redraw(!0)}})},registry:u,setNodeList:u.setNodeList,getNodeSet:u.getNodeSet,addNodeSet:u.addNodeSet,removeNodeSet:u.removeNodeSet,enableNodeSet:u.enableNodeSet,disableNodeSet:u.disableNodeSet,setIconSets:u.setIconSets,getIconSets:u.getIconSets,registerType:u.registerNodeType,getType:u.getNodeType,convertNode:k,add:h,remove:b,clear:function(){o=[],s=[],a={},l=[],Object.keys(d).forEach(function(e){RED.subflow.removeSubflow(e)}),Object.keys(r).forEach(function(e){RED.workspaces.remove(r[e])}),e=null,t=null,RED.nodes.dirty(!1),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.sidebar.config.refresh(),RED.sidebar.info.refresh()},addLink:g,removeLink:m,addWorkspace:y,removeWorkspace:function(e){delete r[e],l.splice(l.indexOf(e),1);var t,n,i=[],s=[];for(t=0;t<o.length;t++)(n=o[t]).z==e&&i.push(n);for(t in a)a.hasOwnProperty(t)&&(n=a[t]).z==e&&i.push(n);for(t=0;t<i.length;t++){var d=b(i[t].id);s=s.concat(d.links)}return{nodes:i,links:s}},getWorkspaceOrder:function(){return l},setWorkspaceOrder:function(e){l=e},workspace:function(e){return r[e]},addSubflow:w,removeSubflow:function(e){delete d[e.id],u.removeNodeType("subflow:"+e.id)},subflow:x,subflowContains:D,eachNode:function(e){for(var t=0;t<o.length&&!1!==e(o[t]);t++);},eachLink:function(e){for(var t=0;t<s.length&&!1!==e(s[t]);t++);},eachConfig:function(e){for(var t in a)if(a.hasOwnProperty(t)&&!1===e(a[t]))break},eachSubflow:function(e){for(var t in d)if(d.hasOwnProperty(t)&&!1===e(d[t]))break},eachWorkspace:function(e){for(var t=0;t<l.length&&!1!==e(r[l[t]]);t++);},node:v,version:function(e){if(void 0===e)return c;c=e},originalFlow:function(e){if(void 0===e)return t;t=e},filterNodes:function(e){for(var t=[],n=0;n<o.length;n++){var i=o[n];e.hasOwnProperty("z")&&i.z!==e.z||e.hasOwnProperty("type")&&i.type!==e.type||e.hasOwnProperty("selected")&&i.selected!==e.selected||e.hasOwnProperty("id")&&!e.id.includes(i.id)||t.push(i)}return t},filterLinks:function(e){for(var t=[],n=0;n<s.length;n++){var o=s[n];if(e.source){if(e.source.hasOwnProperty("id")&&o.source.id!==e.source.id)continue;if(e.source.hasOwnProperty("z")&&o.source.z!==e.source.z)continue}if(e.target){if(e.target.hasOwnProperty("id")&&o.target.id!==e.target.id)continue;if(e.target.hasOwnProperty("z")&&o.target.z!==e.target.z)continue}e.hasOwnProperty("sourcePort")&&o.sourcePort!==e.sourcePort||t.push(o)}return t},import:C,getAllFlowNodes:function(e){var t={};t[e.id]=!0;for(var n=[e],o=[e];0!==o.length;)for(var i=o.shift(),a=s.filter(function(e){return e.source===i||e.target===i}),r=0;r<a.length;r++){var l=a[r].source===i?a[r].target:a[r].source,d=l.id;d||(d=l.direction+":"+l.i),t[d]||(t[d]=!0,n.push(l),o.push(l))}return n},createExportableNodeSet:T,createCompleteNodeSet:function(e){void 0===e&&(e=!0);var t,n=[];for(t=0;t<l.length;t++)"tab"==r[l[t]].type&&n.push(E(r[l[t]]));for(t in d)d.hasOwnProperty(t)&&n.push(R(d[t]));for(t in a)a.hasOwnProperty(t)&&n.push(k(a[t],e));for(t=0;t<o.length;t++){let i=k(o[t],e);"_error_unknown"===i.caname&&"_error_unknown"===i.category&&RED.notify(`<strong>Error</strong>: Invalid flow due to node type unknown [${i.type}]`,"error"),n.push(i)}return n},updateConfigNodeUsers:S,id:f,dirty:function(e){if(null==e)return p;!function(e){p=e,RED.events.emit("nodes:change",{dirty:p})}(e)}}}(),RED.nodes.fontAwesome=function(){var e={"fa-address-book-o":"","fa-address-book":"","fa-address-card-o":"","fa-address-card":"","fa-adjust":"","fa-align-center":"","fa-align-justify":"","fa-align-left":"","fa-align-right":"","fa-ambulance":"","fa-american-sign-language-interpreting":"","fa-anchor":"","fa-angle-double-down":"","fa-angle-double-left":"","fa-angle-double-right":"","fa-angle-double-up":"","fa-angle-down":"","fa-angle-left":"","fa-angle-right":"","fa-angle-up":"","fa-archive":"","fa-area-chart":"","fa-arrow-circle-down":"","fa-arrow-circle-left":"","fa-arrow-circle-o-down":"","fa-arrow-circle-o-left":"","fa-arrow-circle-o-right":"","fa-arrow-circle-o-up":"","fa-arrow-circle-right":"","fa-arrow-circle-up":"","fa-arrow-down":"","fa-arrow-left":"","fa-arrow-right":"","fa-arrow-up":"","fa-arrows-alt":"","fa-arrows-h":"","fa-arrows-v":"","fa-arrows":"","fa-asl-interpreting":"","fa-assistive-listening-systems":"","fa-asterisk":"","fa-at":"","fa-audio-description":"","fa-automobile":"","fa-backward":"","fa-balance-scale":"","fa-ban":"","fa-bank":"","fa-bar-chart-o":"","fa-bar-chart":"","fa-barcode":"","fa-bars":"","fa-bath":"","fa-bathtub":"","fa-battery-0":"","fa-battery-1":"","fa-battery-2":"","fa-battery-3":"","fa-battery-4":"","fa-battery-empty":"","fa-battery-full":"","fa-battery-half":"","fa-battery-quarter":"","fa-battery-three-quarters":"","fa-battery":"","fa-bed":"","fa-beer":"","fa-bell-o":"","fa-bell-slash-o":"","fa-bell-slash":"","fa-bell":"","fa-bicycle":"","fa-binoculars":"","fa-birthday-cake":"","fa-blind":"","fa-bold":"","fa-bolt":"","fa-bomb":"","fa-book":"","fa-bookmark-o":"","fa-bookmark":"","fa-braille":"","fa-briefcase":"","fa-bug":"","fa-building-o":"","fa-building":"","fa-bullhorn":"","fa-bullseye":"","fa-bus":"","fa-cab":"","fa-calculator":"","fa-calendar-check-o":"","fa-calendar-minus-o":"","fa-calendar-o":"","fa-calendar-plus-o":"","fa-calendar-times-o":"","fa-calendar":"","fa-camera-retro":"","fa-camera":"","fa-car":"","fa-caret-down":"","fa-caret-left":"","fa-caret-right":"","fa-caret-square-o-down":"","fa-caret-square-o-left":"","fa-caret-square-o-right":"","fa-caret-square-o-up":"","fa-caret-up":"","fa-cart-arrow-down":"","fa-cart-plus":"","fa-cc":"","fa-certificate":"","fa-chain-broken":"","fa-chain":"","fa-check-circle-o":"","fa-check-circle":"","fa-check-square-o":"","fa-check-square":"","fa-check":"","fa-chevron-circle-down":"","fa-chevron-circle-left":"","fa-chevron-circle-right":"","fa-chevron-circle-up":"","fa-chevron-down":"","fa-chevron-left":"","fa-chevron-right":"","fa-chevron-up":"","fa-child":"","fa-circle-o-notch":"","fa-circle-o":"","fa-circle-thin":"","fa-circle":"","fa-clipboard":"","fa-clock-o":"","fa-clone":"","fa-close":"","fa-cloud-download":"","fa-cloud-upload":"","fa-cloud":"","fa-cny":"","fa-code-fork":"","fa-code":"","fa-coffee":"","fa-cog":"","fa-cogs":"","fa-columns":"","fa-comment-o":"","fa-comment":"","fa-commenting-o":"","fa-commenting":"","fa-comments-o":"","fa-comments":"","fa-compass":"","fa-compress":"","fa-copy":"","fa-copyright":"","fa-creative-commons":"","fa-credit-card-alt":"","fa-credit-card":"","fa-crop":"","fa-crosshairs":"","fa-cube":"","fa-cubes":"","fa-cut":"","fa-cutlery":"","fa-dashboard":"","fa-database":"","fa-deaf":"","fa-deafness":"","fa-dedent":"","fa-desktop":"","fa-diamond":"","fa-dollar":"","fa-dot-circle-o":"","fa-download":"","fa-drivers-license-o":"","fa-drivers-license":"","fa-edit":"","fa-eject":"","fa-ellipsis-h":"","fa-ellipsis-v":"","fa-envelope-o":"","fa-envelope-open-o":"","fa-envelope-open":"","fa-envelope-square":"","fa-envelope":"","fa-eraser":"","fa-eur":"","fa-euro":"","fa-exchange":"","fa-exclamation-circle":"","fa-exclamation-triangle":"","fa-exclamation":"","fa-expand":"","fa-external-link-square":"","fa-external-link":"","fa-eye-slash":"","fa-eye":"","fa-eyedropper":"","fa-fast-backward":"","fa-fast-forward":"","fa-fax":"","fa-feed":"","fa-female":"","fa-fighter-jet":"","fa-file-archive-o":"","fa-file-audio-o":"","fa-file-code-o":"","fa-file-excel-o":"","fa-file-image-o":"","fa-file-movie-o":"","fa-file-o":"","fa-file-pdf-o":"","fa-file-photo-o":"","fa-file-picture-o":"","fa-file-powerpoint-o":"","fa-file-sound-o":"","fa-file-text-o":"","fa-file-text":"","fa-file-video-o":"","fa-file-word-o":"","fa-file-zip-o":"","fa-file":"","fa-files-o":"","fa-film":"","fa-filter":"","fa-fire-extinguisher":"","fa-fire":"","fa-flag-checkered":"","fa-flag-o":"","fa-flag":"","fa-flash":"","fa-flask":"","fa-floppy-o":"","fa-folder-o":"","fa-folder-open-o":"","fa-folder-open":"","fa-folder":"","fa-font":"","fa-forward":"","fa-frown-o":"","fa-futbol-o":"","fa-gamepad":"","fa-gavel":"","fa-gbp":"","fa-gear":"","fa-gears":"","fa-genderless":"","fa-gift":"","fa-glass":"","fa-globe":"","fa-graduation-cap":"","fa-group":"","fa-h-square":"","fa-hand-grab-o":"","fa-hand-lizard-o":"","fa-hand-o-down":"","fa-hand-o-left":"","fa-hand-o-right":"","fa-hand-o-up":"","fa-hand-paper-o":"","fa-hand-peace-o":"","fa-hand-pointer-o":"","fa-hand-rock-o":"","fa-hand-scissors-o":"","fa-hand-spock-o":"","fa-hand-stop-o":"","fa-handshake-o":"","fa-hard-of-hearing":"","fa-hashtag":"","fa-hdd-o":"","fa-header":"","fa-headphones":"","fa-heart-o":"","fa-heart":"","fa-heartbeat":"","fa-history":"","fa-home":"","fa-hospital-o":"","fa-hotel":"","fa-hourglass-1":"","fa-hourglass-2":"","fa-hourglass-3":"","fa-hourglass-end":"","fa-hourglass-half":"","fa-hourglass-o":"","fa-hourglass-start":"","fa-hourglass":"","fa-i-cursor":"","fa-id-badge":"","fa-id-card-o":"","fa-id-card":"","fa-ils":"","fa-image":"","fa-inbox":"","fa-indent":"","fa-industry":"","fa-info-circle":"","fa-info":"","fa-inr":"","fa-institution":"","fa-intersex":"","fa-italic":"","fa-jpy":"","fa-key":"","fa-keyboard-o":"","fa-krw":"","fa-language":"","fa-laptop":"","fa-leaf":"","fa-legal":"","fa-lemon-o":"","fa-level-down":"","fa-level-up":"","fa-life-bouy":"","fa-life-buoy":"","fa-life-ring":"","fa-life-saver":"","fa-lightbulb-o":"","fa-line-chart":"","fa-link":"","fa-list-alt":"","fa-list-ol":"","fa-list-ul":"","fa-list":"","fa-location-arrow":"","fa-lock":"","fa-long-arrow-down":"","fa-long-arrow-left":"","fa-long-arrow-right":"","fa-long-arrow-up":"","fa-low-vision":"","fa-magic":"","fa-magnet":"","fa-mail-forward":"","fa-mail-reply-all":"","fa-mail-reply":"","fa-male":"","fa-map-marker":"","fa-map-o":"","fa-map-pin":"","fa-map-signs":"","fa-map":"","fa-mars-double":"","fa-mars-stroke-h":"","fa-mars-stroke-v":"","fa-mars-stroke":"","fa-mars":"","fa-medkit":"","fa-meh-o":"","fa-mercury":"","fa-microchip":"","fa-microphone-slash":"","fa-microphone":"","fa-minus-circle":"","fa-minus-square-o":"","fa-minus-square":"","fa-minus":"","fa-mobile-phone":"","fa-mobile":"","fa-money":"","fa-moon-o":"","fa-mortar-board":"","fa-motorcycle":"","fa-mouse-pointer":"","fa-music":"","fa-navicon":"","fa-neuter":"","fa-newspaper-o":"","fa-object-group":"","fa-object-ungroup":"","fa-outdent":"","fa-paint-brush":"","fa-paper-plane-o":"","fa-paper-plane":"","fa-paperclip":"","fa-paragraph":"","fa-paste":"","fa-pause-circle-o":"","fa-pause-circle":"","fa-pause":"","fa-paw":"","fa-pencil-square-o":"","fa-pencil-square":"","fa-pencil":"","fa-percent":"","fa-phone-square":"","fa-phone":"","fa-photo":"","fa-picture-o":"","fa-pie-chart":"","fa-plane":"","fa-play-circle-o":"","fa-play-circle":"","fa-play":"","fa-plug":"","fa-plus-circle":"","fa-plus-square-o":"","fa-plus-square":"","fa-plus":"","fa-podcast":"","fa-power-off":"","fa-print":"","fa-puzzle-piece":"","fa-qrcode":"","fa-question-circle-o":"","fa-question-circle":"","fa-question":"","fa-quote-left":"","fa-quote-right":"","fa-random":"","fa-recycle":"","fa-refresh":"","fa-registered":"","fa-remove":"","fa-reorder":"","fa-repeat":"","fa-reply-all":"","fa-reply":"","fa-retweet":"","fa-rmb":"","fa-road":"","fa-rocket":"","fa-rotate-left":"","fa-rotate-right":"","fa-rouble":"","fa-rss-square":"","fa-rss":"","fa-rub":"","fa-ruble":"","fa-rupee":"","fa-s15":"","fa-save":"","fa-scissors":"","fa-search-minus":"","fa-search-plus":"","fa-search":"","fa-send-o":"","fa-send":"","fa-server":"","fa-share-square-o":"","fa-share-square":"","fa-share":"","fa-shekel":"","fa-sheqel":"","fa-shield":"","fa-ship":"","fa-shopping-bag":"","fa-shopping-basket":"","fa-shopping-cart":"","fa-shower":"","fa-sign-in":"","fa-sign-language":"","fa-sign-out":"","fa-signal":"","fa-signing":"","fa-sitemap":"","fa-sliders":"","fa-smile-o":"","fa-snowflake-o":"","fa-soccer-ball-o":"","fa-sort-alpha-asc":"","fa-sort-alpha-desc":"","fa-sort-amount-asc":"","fa-sort-amount-desc":"","fa-sort-asc":"","fa-sort-desc":"","fa-sort-down":"","fa-sort-numeric-asc":"","fa-sort-numeric-desc":"","fa-sort-up":"","fa-sort":"","fa-space-shuttle":"","fa-spinner":"","fa-spoon":"","fa-square-o":"","fa-square":"","fa-star-half-empty":"","fa-star-half-full":"","fa-star-half-o":"","fa-star-half":"","fa-star-o":"","fa-star":"","fa-step-backward":"","fa-step-forward":"","fa-stethoscope":"","fa-sticky-note-o":"","fa-sticky-note":"","fa-stop-circle-o":"","fa-stop-circle":"","fa-stop":"","fa-street-view":"","fa-strikethrough":"","fa-subscript":"","fa-subway":"","fa-suitcase":"","fa-sun-o":"","fa-superscript":"","fa-support":"","fa-table":"","fa-tablet":"","fa-tachometer":"","fa-tag":"","fa-tags":"","fa-tasks":"","fa-taxi":"","fa-television":"","fa-terminal":"","fa-text-height":"","fa-text-width":"","fa-th-large":"","fa-th-list":"","fa-th":"","fa-thermometer-0":"","fa-thermometer-1":"","fa-thermometer-2":"","fa-thermometer-3":"","fa-thermometer-4":"","fa-thermometer-empty":"","fa-thermometer-full":"","fa-thermometer-half":"","fa-thermometer-quarter":"","fa-thermometer-three-quarters":"","fa-thermometer":"","fa-thumb-tack":"","fa-thumbs-down":"","fa-thumbs-o-down":"","fa-thumbs-o-up":"","fa-thumbs-up":"","fa-ticket":"","fa-times-circle-o":"","fa-times-circle":"","fa-times-rectangle-o":"","fa-times-rectangle":"","fa-times":"","fa-tint":"","fa-toggle-down":"","fa-toggle-left":"","fa-toggle-off":"","fa-toggle-on":"","fa-toggle-right":"","fa-toggle-up":"","fa-trademark":"","fa-train":"","fa-transgender-alt":"","fa-transgender":"","fa-trash-o":"","fa-trash":"","fa-tree":"","fa-trophy":"","fa-truck":"","fa-try":"","fa-tty":"","fa-turkish-lira":"","fa-tv":"","fa-umbrella":"","fa-underline":"","fa-undo":"","fa-universal-access":"","fa-university":"","fa-unlink":"","fa-unlock-alt":"","fa-unlock":"","fa-unsorted":"","fa-upload":"","fa-usd":"","fa-user-circle-o":"","fa-user-circle":"","fa-user-md":"","fa-user-o":"","fa-user-plus":"","fa-user-secret":"","fa-user-times":"","fa-user":"","fa-users":"","fa-vcard-o":"","fa-vcard":"","fa-venus-double":"","fa-venus-mars":"","fa-venus":"","fa-video-camera":"","fa-volume-control-phone":"","fa-volume-down":"","fa-volume-off":"","fa-volume-up":"","fa-warning":"","fa-wheelchair-alt":"","fa-wheelchair":"","fa-wifi":"","fa-window-close-o":"","fa-window-close":"","fa-window-maximize":"","fa-window-minimize":"","fa-window-restore":"","fa-won":"","fa-wrench":"","fa-yen":""},t={"fa-500px":"","fa-adn":"","fa-amazon":"","fa-android":"","fa-angellist":"","fa-apple":"","fa-bandcamp":"","fa-behance-square":"","fa-behance":"","fa-bitbucket-square":"","fa-bitbucket":"","fa-bitcoin":"","fa-black-tie":"","fa-bluetooth-b":"","fa-bluetooth":"","fa-btc":"","fa-buysellads":"","fa-cc-amex":"","fa-cc-diners-club":"","fa-cc-discover":"","fa-cc-jcb":"","fa-cc-mastercard":"","fa-cc-paypal":"","fa-cc-stripe":"","fa-cc-visa":"","fa-chrome":"","fa-codepen":"","fa-codiepie":"","fa-connectdevelop":"","fa-contao":"","fa-css3":"","fa-dashcube":"","fa-delicious":"","fa-deviantart":"","fa-digg":"","fa-dribbble":"","fa-dropbox":"","fa-drupal":"","fa-edge":"","fa-eercast":"","fa-empire":"","fa-envira":"","fa-etsy":"","fa-expeditedssl":"","fa-fa":"","fa-facebook-f":"","fa-facebook-official":"","fa-facebook-square":"","fa-facebook":"","fa-firefox":"","fa-first-order":"","fa-flickr":"","fa-font-awesome":"","fa-fonticons":"","fa-fort-awesome":"","fa-forumbee":"","fa-foursquare":"","fa-free-code-camp":"","fa-ge":"","fa-get-pocket":"","fa-gg-circle":"","fa-gg":"","fa-git-square":"","fa-git":"","fa-github-alt":"","fa-github-square":"","fa-github":"","fa-gitlab":"","fa-gittip":"","fa-glide-g":"","fa-glide":"","fa-google-plus-circle":"","fa-google-plus-official":"","fa-google-plus-square":"","fa-google-plus":"","fa-google-wallet":"","fa-google":"","fa-gratipay":"","fa-grav":"","fa-hacker-news":"","fa-houzz":"","fa-html5":"","fa-imdb":"","fa-instagram":"","fa-internet-explorer":"","fa-ioxhost":"","fa-joomla":"","fa-jsfiddle":"","fa-lastfm-square":"","fa-lastfm":"","fa-leanpub":"","fa-linkedin-square":"","fa-linkedin":"","fa-linode":"","fa-linux":"","fa-maxcdn":"","fa-meanpath":"","fa-medium":"","fa-meetup":"","fa-mixcloud":"","fa-modx":"","fa-odnoklassniki-square":"","fa-odnoklassniki":"","fa-opencart":"","fa-openid":"","fa-opera":"","fa-optin-monster":"","fa-pagelines":"","fa-paypal":"","fa-pied-piper-alt":"","fa-pied-piper-pp":"","fa-pied-piper":"","fa-pinterest-p":"","fa-pinterest-square":"","fa-pinterest":"","fa-product-hunt":"","fa-qq":"","fa-quora":"","fa-ra":"","fa-ravelry":"","fa-rebel":"","fa-reddit-alien":"","fa-reddit-square":"","fa-reddit":"","fa-renren":"","fa-resistance":"","fa-safari":"","fa-scribd":"","fa-sellsy":"","fa-share-alt-square":"","fa-share-alt":"","fa-shirtsinbulk":"","fa-simplybuilt":"","fa-skyatlas":"","fa-skype":"","fa-slack":"","fa-slideshare":"","fa-snapchat-ghost":"","fa-snapchat-square":"","fa-snapchat":"","fa-soundcloud":"","fa-spotify":"","fa-stack-exchange":"","fa-stack-overflow":"","fa-steam-square":"","fa-steam":"","fa-stumbleupon-circle":"","fa-stumbleupon":"","fa-superpowers":"","fa-telegram":"","fa-tencent-weibo":"","fa-themeisle":"","fa-trello":"","fa-tripadvisor":"","fa-tumblr-square":"","fa-tumblr":"","fa-twitch":"","fa-twitter-square":"","fa-twitter":"","fa-usb":"","fa-viacoin":"","fa-viadeo-square":"","fa-viadeo":"","fa-vimeo-square":"","fa-vimeo":"","fa-vine":"","fa-vk":"","fa-wechat":"","fa-weibo":"","fa-weixin":"","fa-whatsapp":"","fa-wikipedia-w":"","fa-windows":"","fa-wordpress":"","fa-wpbeginner":"","fa-wpexplorer":"","fa-wpforms":"","fa-xing-square":"","fa-xing":"","fa-y-combinator-square":"","fa-y-combinator":"","fa-yahoo":"","fa-yc-square":"","fa-yc":"","fa-yelp":"","fa-yoast":"","fa-youtube-play":"","fa-youtube-square":"","fa-youtube":"","fa-buffer":""},n=[],o={};return Object.keys(e).forEach(function(t){var i=e[t];!0!==o[i]&&(n.push(t),o[i]=!0)}),o=void 0,{getIconUnicode:function(n){return e[n]||t[n]},getIconList:function(){return n}}}(),RED.history=function(){var e=[];return{markAllDirty:function(){for(var t=0;t<e.length;t++)e[t].dirty=!0},list:function(){return e},depth:function(){return e.length},push:function(t){e.push(t)},pop:function(){!function e(t){var n,o,i,a={};if(t){if("multi"==t.t)for(n=t.events.length-1;n>=0;n--)e(t.events[n]);else if("replace"==t.t)RED.nodes.clear(),RED.nodes.import(t.config)[0].forEach(function(e){t.changed[e.id]&&(e.changed=!0)}),RED.nodes.version(t.rev);else if("add"==t.t){if(t.nodes)for(n=0;n<t.nodes.length;n++)(o=RED.nodes.node(t.nodes[n])).z&&(a[o.z]=!0),RED.nodes.remove(t.nodes[n]);if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.removeLink(t.links[n]);if(t.workspaces)for(n=0;n<t.workspaces.length;n++)RED.nodes.removeWorkspace(t.workspaces[n].id),RED.workspaces.remove(t.workspaces[n]);if(t.subflows)for(n=0;n<t.subflows.length;n++)RED.nodes.removeSubflow(t.subflows[n]),RED.workspaces.remove(t.subflows[n]);if(t.subflow&&(t.subflow.instances&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),t.subflow.hasOwnProperty("changed")&&(i=RED.nodes.subflow(t.subflow.id))&&(i.changed=t.subflow.changed)),t.removedLinks)for(n=0;n<t.removedLinks.length;n++)RED.nodes.addLink(t.removedLinks[n])}else if("delete"==t.t){if(t.workspaces)for(n=0;n<t.workspaces.length;n++)RED.nodes.addWorkspace(t.workspaces[n],t.workspaces[n]._index),RED.workspaces.add(t.workspaces[n],void 0,t.workspaces[n]._index),delete t.workspaces[n]._index;if(t.subflows)for(n=0;n<t.subflows.length;n++)RED.nodes.addSubflow(t.subflows[n]);if(t.subflowInputs&&t.subflowInputs.length>0&&((i=RED.nodes.subflow(t.subflowInputs[0].z)).in.push(t.subflowInputs[0]),i.in[0].dirty=!0),t.subflowOutputs&&t.subflowOutputs.length>0)for(i=RED.nodes.subflow(t.subflowOutputs[0].z),t.subflowOutputs.sort(function(e,t){return e.i-t.i}),n=0;n<t.subflowOutputs.length;n++){var s=t.subflowOutputs[n];i.out.splice(s.i,0,s);for(var r=s.i+1;r<i.out.length;r++)i.out[r].i++,i.out[r].dirty=!0;RED.nodes.eachLink(function(e){e.source.type=="subflow:"+i.id&&e.sourcePort>=s.i&&e.sourcePort++})}if(t.subflow&&(t.subflow.hasOwnProperty("instances")&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),t.subflow.hasOwnProperty("status")&&((i=RED.nodes.subflow(t.subflow.id)).status=t.subflow.status)),i&&RED.nodes.filterNodes({type:"subflow:"+i.id}).forEach(function(e){for(e.inputs=i.in.length,e.outputs=i.out.length;e.outputs>e.ports.length;)e.ports.push(e.ports.length);e.resize=!0,e.dirty=!0}),t.nodes)for(n=0;n<t.nodes.length;n++)RED.nodes.add(t.nodes[n]),a[t.nodes[n].z]=!0;if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.addLink(t.links[n]);if(t.changes)for(n in t.changes)if(t.changes.hasOwnProperty(n)&&(o=RED.nodes.node(n))){for(var l in t.changes[n])t.changes[n].hasOwnProperty(l)&&(o[l]=t.changes[n][l]);o.dirty=!0}}else if("move"==t.t){for(n=0;n<t.nodes.length;n++){var d=t.nodes[n];d.n.x=d.ox,d.n.y=d.oy,d.n.dirty=!0,d.n.moved=d.moved}if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.removeLink(t.links[n]);if(t.removedLinks)for(n=0;n<t.removedLinks.length;n++)RED.nodes.addLink(t.removedLinks[n])}else if("edit"==t.t){for(n in t.changes)if(t.changes.hasOwnProperty(n)){if(t.node._def.defaults&&t.node._def.defaults[n]&&t.node._def.defaults[n].type){var c=RED.nodes.node(t.node[n]);c&&c.users.splice(c.users.indexOf(t.node),1);var p=RED.nodes.node(t.changes[n]);p&&p.users.push(t.node)}t.node[n]=t.changes[n]}if(t.subflow)t.subflow.hasOwnProperty("inputCount")&&(t.node.in.length>t.subflow.inputCount?t.node.in.splice(t.subflow.inputCount):t.subflow.inputs.length>0&&(t.node.in=t.node.in.concat(t.subflow.inputs))),t.subflow.hasOwnProperty("outputCount")&&(t.node.out.length>t.subflow.outputCount?t.node.out.splice(t.subflow.outputCount):t.subflow.outputs.length>0&&(t.node.out=t.node.out.concat(t.subflow.outputs))),t.subflow.hasOwnProperty("instances")&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),t.subflow.hasOwnProperty("status")&&t.subflow.status&&delete t.node.status,RED.editor.validateNode(t.node),RED.nodes.filterNodes({type:"subflow:"+t.node.id}).forEach(function(e){e.inputs=t.node.in.length,e.outputs=t.node.out.length,RED.editor.updateNodeProperties(e),RED.editor.validateNode(e)});else{var u;if(t.outputMap)for(var f in u={},t.outputMap)t.outputMap.hasOwnProperty(f)&&"-1"!==t.outputMap[f]&&(u[t.outputMap[f]]=f);RED.editor.updateNodeProperties(t.node,u),RED.editor.validateNode(t.node)}if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.addLink(t.links[n]);t.node.dirty=!0,t.node.changed=t.changed}else if("createSubflow"==t.t){if(t.nodes)for(RED.nodes.filterNodes({z:t.subflow.subflow.id}).forEach(function(e){e.x+=t.subflow.offsetX,e.y+=t.subflow.offsetY,e.z=t.activeWorkspace,e.dirty=!0}),n=0;n<t.nodes.length;n++)RED.nodes.remove(t.nodes[n]);if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.removeLink(t.links[n]);if(RED.nodes.removeSubflow(t.subflow.subflow),RED.workspaces.remove(t.subflow.subflow),t.removedLinks)for(n=0;n<t.removedLinks.length;n++)RED.nodes.addLink(t.removedLinks[n])}else"reorder"==t.t&&t.order&&RED.workspaces.order(t.order);Object.keys(a).forEach(function(e){var t=RED.nodes.subflow(e);t&&RED.editor.validateNode(t)}),RED.nodes.dirty(t.dirty),RED.view.select(null),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.sidebar.config.refresh(),RED.subflow.refresh()}}(e.pop())},peek:function(){return e[e.length-1]},clear:function(){e=[]}}}(),RED.validators={number:function(e){return function(t){return e&&(""===t||void 0===t)||""!==t&&!isNaN(t)}},regex:function(e){return function(t){return e.test(t)}},typedInput:function(e,t){return function(n){var o=$("#node-"+(t?"config-":"")+"input-"+e).val()||this[e];if("json"===o)try{return JSON.parse(n),!0}catch(e){return!1}else{if("msg"===o||"flow"===o||"global"===o)return RED.utils.validatePropertyExpression(n);if("num"===o)return console.log("[validators] pType=num. v=",n),/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/.test(n)}return!0}},typedInputRules:function(e){return function(e){console.log("[validators] TypedInput. v=",e);let t=!0;return Array.isArray(e)&&e.forEach(e=>{if(rtype=e.tot,"num"===rtype){!1===/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/.test(e.to)&&(t=!1)}else if("msg"===rtype||"flow"===rtype||"global"===rtype){!1===RED.utils.validatePropertyExpression(e.to)&&(t=!1)}else if("json"===rtype)try{JSON.parse(e.to)}catch(e){t=!1}else rtype}),t}}},RED.updatePanel=function(){let e=window.__kumologica.electron.ipcRenderer;return e.on("core:show-import-dialog",()=>{RED.actions.invoke("core:show-import-dialog")}),e.on("core:show-export-dialog",()=>{RED.actions.invoke("core:show-export-dialog")}),e.on("core:toggle-terminal",()=>{RED.actions.invoke("core:toggle-terminal")}),e.on("core:toggle-palette",()=>{RED.actions.invoke("core:toggle-palette")}),e.on("core:view-main-flow",()=>{RED.actions.invoke("core:view-main-flow")}),e.on("core:view-test-flow",()=>{RED.actions.invoke("core:view-test-flow")}),e.on("core:toggle-settings",()=>{RED.actions.invoke("core:toggle-settings")}),e.on("core:search",()=>{RED.actions.invoke("core:search")}),e.on("ui-update-available",()=>{e.removeAllListeners("ui-update-available"),$("#update-panel").show(),$("#update-panel-message").html('A new update is available, do you wish to download? <br/>To update manually, you can get it from <a href="https://www.kumologica.com/download.html" target="_blank">here</a>'),$("#btn-update-panel-close").html("Ignore"),$("#btn-update-panel-restart").html("Download")}),e.on("ui-update-downloaded",()=>{e.removeAllListeners("ui-update-downloaded"),$("#update-panel-message").text("Update ready to install, it will be installed on restart. Restart now?"),$("#btn-update-panel-close").html("Close"),$("#btn-update-panel-restart").html("Restart"),$("#update-panel").show()}),{init:function(){$("#btn-update-panel-close").click(e=>{$("#update-panel").hide()}),$("#btn-update-panel-restart").click(t=>{$("#update-panel").hide(),"Download"==$("#btn-update-panel-restart").html()?e.send("download-app"):e.send("restart-app")})}}}(),RED.utils=function(){function e(e){return e.replace(/\r?\n/g,"↵").replace(/\t/g,"→")}function t(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function n(n){var o;if(Array.isArray(n))o=$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("array["+n.length+"]");else if(null===n)o=$('<span class="debug-message-object-value debug-message-type-null">null</span>');else if("object"==typeof n)o=n.hasOwnProperty("type")&&"Buffer"===n.type&&n.hasOwnProperty("data")?$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("buffer["+n.length+"]"):n.hasOwnProperty("type")&&"array"===n.type&&n.hasOwnProperty("data")?$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("array["+n.length+"]"):n.hasOwnProperty("type")&&"function"===n.type?$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("function"):n.hasOwnProperty("type")&&"number"===n.type?$('<span class="debug-message-object-value debug-message-type-number"></span>').text(n.data):$('<span class="debug-message-object-value debug-message-type-meta">object</span>');else if("string"==typeof n){var i;i=n.length>30?t(n.substring(0,30))+"…":t(n),o=$('<span class="debug-message-object-value debug-message-type-string"></span>').html('"'+e(i)+'"')}else o="number"==typeof n?$('<span class="debug-message-object-value debug-message-type-number"></span>').text(""+n):$('<span class="debug-message-object-value debug-message-type-other"></span>').text(""+n);return o}function o(e,t,n,o){e.addClass("debug-message-expandable"),e.prop("toggle",function(){return function(n){var o=e.parent();if(o.hasClass("collapsed")){if(n)return t&&!o.hasClass("built")&&(t(),o.addClass("built")),o.removeClass("collapsed"),!0}else if(!n)return o.addClass("collapsed"),!0;return!1}}),e.click(function(e){var t=!$(this).parent().hasClass("collapsed");$(this).prop("toggle")(!t)&&n&&n(!t),e.preventDefault()}),o&&e.click()}var i={},a={};function s(e,t,n,o){if(t&&t.length>0){if(""===e&&void 0===n)return!0;for(var i=0;i<t.length;i++){var a=t[i];if(0===a.indexOf(e)&&("."===a[e.length]||"["===a[e.length])){if(void 0===n||"["!==a[e.length])return!0;var s=a.substring(e.length),r=/\[(\d+)\]/.exec(s);if(r){var l=parseInt(r[1]);return n<=l&&l<=o}}}}return!1}function r(e,t,n,o,i,s){var r=a[n]&&a[n][o]&&a[n][o].number||s||"dec";if(i?(r="dec"===r?13===t.toString().length&&t<=2147483647e3?"dateMS":10===t.toString().length&&t<=2147483647?"dateS":"hex":"dateMS"===r||"dateS"==r?13===t.toString().length&&t<=2147483647e3?"dateML":10===t.toString().length&&t<=2147483647?"dateL":"hex":"dateML"===r||"dateL"==r?"hex":"dec",a[n]=a[n]||{},a[n][o]=a[n][o]||{},a[n][o].number=r):void 0!==s&&(a[n]=a[n]||{},a[n][o]=a[n][o]||{},a[n][o].number=r),"dec"===r)e.text(""+t);else if("dateMS"===r)e.text(new Date(t).toISOString());else if("dateS"===r)e.text(new Date(1e3*t).toISOString());else if("dateML"===r){var l=new Date(t);e.text(l.toLocaleString()+" [UTC"+(l.getTimezoneOffset()/-60<=0?"":"+")+l.getTimezoneOffset()/-60+"]")}else if("dateL"===r){var d=new Date(1e3*t);e.text(d.toLocaleString()+" [UTC"+(d.getTimezoneOffset()/-60<=0?"":"+")+d.getTimezoneOffset()/-60+"]")}else"hex"===r&&e.text("0x"+t.toString(16))}function l(e,t,n,o,i){var s=a[n]&&a[n][o]&&a[n][o].buffer||"raw";i&&(s="raw"===s?"string":"raw",a[n]=a[n]||{},a[n][o]=a[n][o]||{},a[n][o].buffer=s),"raw"===s?(t.text("raw"),e.removeClass("debug-message-buffer-string").addClass("debug-message-buffer-raw")):"string"===s&&(t.text("string"),e.addClass("debug-message-buffer-string").removeClass("debug-message-buffer-raw"))}function d(e){var t=e.length;if(0===t)throw new Error("Invalid property expression: zero-length");for(var n,o,i=[],a=0,s=!1,r=!1,l=0;l<t;l++){var d=e[l];if(s){if(d===n){if(l-a==0)throw new Error("Invalid property expression: zero-length string at position "+a);if(i.push(e.substring(a,l)),r&&!/\]/.test(e[l+1]))throw new Error("Invalid property expression: unexpected array expression at position "+a);if(!r&&l+1!==t&&!/[\[\.]/.test(e[l+1]))throw new Error("Invalid property expression: unexpected "+e[l+1]+" expression at position "+(l+1));a=l+1,s=!1}}else if("'"===d||'"'===d){if(l!=a)throw new Error("Invalid property expression: unexpected "+d+" at position "+l);s=!0,n=d,a=l+1}else if("."===d){if(0===l)throw new Error("Invalid property expression: unexpected . at position 0");if(a!=l&&(o=e.substring(a,l),/^\d+$/.test(o)?i.push(parseInt(o)):i.push(o)),l===t-1)throw new Error("Invalid property expression: unterminated expression");if(!/[a-z0-9\$\_]/i.test(e[l+1]))throw new Error("Invalid property expression: unexpected "+e[l+1]+" at position "+(l+1));a=l+1}else if("["===d){if(0===l)throw new Error("Invalid property expression: unexpected "+d+" at position "+l);if(a!=l&&i.push(e.substring(a,l)),l===t-1)throw new Error("Invalid property expression: unterminated expression");if(!/["'\d]/.test(e[l+1]))throw new Error("Invalid property expression: unexpected "+e[l+1]+" at position "+(l+1));a=l+1,r=!0}else if("]"===d){if(!r)throw new Error("Invalid property expression: unexpected "+d+" at position "+l);if(a!=l){if(o=e.substring(a,l),!/^\d+$/.test(o))throw new Error("Invalid property expression: unexpected array expression at position "+a);i.push(parseInt(o))}a=l+1,r=!1}else if(" "===d)throw new Error("Invalid property expression: unexpected ' ' at position "+l)}if(r||s)throw new Error("Invalid property expression: unterminated expression");return a<t&&i.push(e.substring(a)),i}function c(e,t){var n,o=null;return"string"==typeof t?(0===t.indexOf("msg.")&&(t=t.substring(4)),n=d(t)):n=t,n.reduce(function(e,t){return void 0===(o=void 0!==e[t]?e[t]:void 0)&&e.hasOwnProperty("type")&&e.hasOwnProperty("data")&&e.hasOwnProperty("length")&&(o=void 0!==e.data[t]?e.data[t]:void 0),o},e),o}function p(e){var t={module:"",file:""};if(e){var n=e.indexOf("icons/");-1!==n&&(e=e.substring(n+6)),-1!==(n=e.indexOf("/"))?(t.module=e.slice(0,n),t.file=e.slice(n+1)):t.file=e}return t}function u(e,t){var n;if(t&&"subflow"===t.type)n="kumologica-core/subflow.png";else if("function"==typeof e.icon)try{n=e.icon.call(t)}catch(t){console.log("Definition error: "+e.type+".icon",t),n="arrow-in.png"}else n=e.icon;var o=p(n);return o.module||(e.set?o.module=e.set.module:o.module="kumologica-core"),o}function f(e){var t=RED.nodes.getIconSets()[e.module];return!(!t||-1===t.indexOf(e.file))}var h={};return{createObjectElement:function a(p,u){var f,h,g,v,b,m,y=(u=u||{}).key,w=u.typeHint,x=u.hideKey,D=u.path,E=u.sourceId,k=u.rootPath,R=u.expandPaths,T=u.ontoggle,_=u.exposeApi,j=u.tools,C={};void 0!==D&&void 0!==k&&(m=D.substring(k.length+("."===D[k.length]?1:0)));var S=$('<span class="debug-message-element"></span>');if(S.collapse=function(){S.find(".debug-message-expandable").parent().addClass("collapsed")},v=$('<span class="debug-message-row"></span>').appendTo(S),E&&function(e,t,n,o,a,s,r){i.hasOwnProperty(t)||(i[t]={});var l=$('<span class="debug-message-tools"></span>').appendTo(e),c=$('<span class="debug-message-tools-copy button-group"></span>').appendTo(l);if(n)var p=$('<button class="editor-button editor-button-small"><i class="fa fa-terminal"></i></button>').appendTo(c).click(function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(n,p,"Path copied to clipboard")});var u=$('<button class="editor-button editor-button-small"><i class="fa fa-clipboard"></i></button>').appendTo(c).click(function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(o,u,"Message copied to clipboard")});if(void 0!==s&&""!==s){var f=i[t].hasOwnProperty(s);$('<button class="editor-button editor-button-small debug-message-tools-pin"><i class="fa fa-map-pin"></i></button>').appendTo(l).click(function(n){if(n.preventDefault(),n.stopPropagation(),i[t].hasOwnProperty(s))delete i[t][s],$(this).removeClass("selected"),e.removeClass("debug-message-row-pinned");else{var o="$"+("["===s[0]?"":".")+s;i[t][s]=d(o),$(this).addClass("selected"),e.addClass("debug-message-row-pinned")}}).toggleClass("selected",f),e.toggleClass("debug-message-row-pinned",f)}r&&(r.addClass("debug-message-tools-other"),r.appendTo(l))}(v,E,D,p,0,m,j),y)x||($('<span class="debug-message-object-key"></span>').text(y).appendTo(v),$("<span>: </span>").appendTo(v));else if(S.addClass("debug-message-top-level"),E){var O=i[E];if(R=[],O){for(var I in O)if(O.hasOwnProperty(I))try{void 0!==c({$:p},O[I])&&R.push(I)}catch(e){}R.sort()}S.clearPinned=function(){S.find(".debug-message-row-pinned").removeClass("debug-message-row-pinned"),i[E]={}}}g=$('<span class="debug-message-object-value"></span>').appendTo(v);var N=Array.isArray(p),P=!1;if(p&&"object"==typeof p&&p.hasOwnProperty("type")&&p.hasOwnProperty("data")&&(p.__enc__&&"array"===p.type||"Buffer"===p.type)&&(N=!0,P=!0),null===p||void 0===p)$('<span class="debug-message-type-null">'+p+"</span>").appendTo(g);else if(p.__enc__&&"number"===p.type)h=$('<span class="debug-message-type-number debug-message-object-header"></span>').text(p.data).appendTo(g);else if("function"===w||p.__enc__&&"function"===p.type)h=$('<span class="debug-message-type-meta debug-message-object-header"></span>').text("function").appendTo(g);else if("internal"===w||p.__enc__&&"internal"===p.type)h=$('<span class="debug-message-type-meta debug-message-object-header"></span>').text("[internal]").appendTo(g);else if("string"==typeof p)/[\t\n\r]/.test(p)&&(S.addClass("collapsed"),$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(v),o(v,function(){$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').text(w||"string").appendTo(v);var e=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(S);$('<pre class="debug-message-type-string"></pre>').text(p).appendTo(e)},function(e){T&&T(D,e)},s(m,R))),h=$('<span class="debug-message-type-string debug-message-object-header"></span>').html('"'+e(t(p))+'"').appendTo(g),/^#[0-9a-f]{6}$/i.test(p)&&$('<span class="debug-message-type-string-swatch"></span>').css("backgroundColor",p).appendTo(h);else if("number"==typeof p)h=$('<span class="debug-message-type-number"></span>').appendTo(g),Number.isInteger(p)&&p>=0&&(h.addClass("debug-message-type-number-toggle"),h.click(function(e){e.preventDefault(),r($(this),p,E,D,!0)})),r(h,p,E,D,!1,"hex"===w?"hex":void 0);else if(N){S.addClass("collapsed");var L=p.length;if(w){var z=/\[(\d+)\]/.exec(w);z&&(L=parseInt(z[1]))}var A=p,M="array";P?(A=p.data,void 0===L&&(L=A.length),A.__enc__&&(A=A.data),M=p.type.toLowerCase()):/buffer/.test(w)&&(M="buffer");var B=A.length;if(L>0){$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(v);var U=$('<div class="debug-message-array-rows"></div>').appendTo(S);S.addClass("debug-message-buffer-raw")}if(y)b=$('<span class="debug-message-type-meta"></span>').text(w||M+"["+L+"]").appendTo(g);else{b=$('<span class="debug-message-object-header"></span>').appendTo(g),$("<span>[ </span>").appendTo(b);var q=Math.min(L,10);for(f=0;f<q;f++)n(A[f]).appendTo(b),f<q-1&&$("<span>, </span>").appendTo(b);L>q&&$("<span> …</span>").appendTo(b),0===q&&$('<span class="debug-message-type-meta">empty</span>').appendTo(b),$("<span> ]</span>").appendTo(b)}L>0&&o(v,function(){if(y||(b=$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').text(w||M+"["+L+"]").appendTo(v)),"buffer"===M){var e=$('<div class="debug-message-string-rows"></div>').appendTo(S),t=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(e),n="";try{n=String.fromCharCode.apply(null,new Uint16Array(A))}catch(e){console.log(e)}$('<pre class="debug-message-type-string"></pre>').text(n).appendTo(t);var i=$('<span class="debug-message-buffer-opts"></span>').appendTo(b),r=$('<a href="#"></a>').addClass("selected").text("raw").appendTo(i).click(function(e){e.preventDefault(),e.stopPropagation(),l(S,$(this),E,D,!0)});l(S,r,E,D,!1)}var d;if(B<=10)for(f=0;f<B;f++)d=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(U),C[D+"["+f+"]"]=a(A[f],{key:""+f,typeHint:"buffer"===M&&"hex",hideKey:!1,path:D+"["+f+"]",sourceId:E,rootPath:k,expandPaths:R,ontoggle:T,exposeApi:_}).appendTo(d);else{for(f=0;f<B;f+=10){var c=f;d=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(U),v=$("<span></span>").appendTo(d),$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').appendTo(v),o(v,function(){var e=c,t=Math.min(B-1,c+9),n=d;return function(){for(var o=e;o<=t;o++){var i=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(n);C[D+"["+o+"]"]=a(A[o],{key:""+o,typeHint:"buffer"===M&&"hex",hideKey:!1,path:D+"["+o+"]",sourceId:E,rootPath:k,expandPaths:R,ontoggle:T,exposeApi:_}).appendTo(i)}}}(),function(){var e=e+"["+f+"]";return function(t){T&&T(e,t)}}(),s(m,R,c,Math.min(B-1,c+9))),$('<span class="debug-message-object-key"></span>').html("["+c+" … "+Math.min(B-1,c+9)+"]").appendTo(v)}B<L&&$('<div class="debug-message-object-entry collapsed"><span class="debug-message-object-key">['+B+" … "+L+"]</span></div>").appendTo(U)}},function(e){T&&T(D,e)},s(m,R))}else if("object"==typeof p){S.addClass("collapsed");var F=Object.keys(p);if((y||F.length>0)&&($('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(v),o(v,function(){for(y||$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').text("object").appendTo(v),f=0;f<F.length;f++){var e=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(S),t=D;void 0!==t&&(/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(F[f])?t+=(t.length>0?".":"")+F[f]:t+='["'+F[f].replace(/"/,'\\"')+'"]'),C[t]=a(p[F[f]],{key:F[f],typeHint:!1,hideKey:!1,path:t,sourceId:E,rootPath:k,expandPaths:R,ontoggle:T,exposeApi:_}).appendTo(e)}0===F.length&&$('<div class="debug-message-object-entry debug-message-type-meta collapsed"></div>').text("empty").appendTo(S)},function(e){T&&T(D,e)},s(m,R))),y)$('<span class="debug-message-type-meta"></span>').text("object").appendTo(g);else{b=$('<span class="debug-message-object-header"></span>').appendTo(g),$("<span>{ </span>").appendTo(b);var J=Math.min(F.length,5);for(f=0;f<J;f++)$('<span class="debug-message-object-key"></span>').text(F[f]).appendTo(b),$("<span>: </span>").appendTo(b),n(p[F[f]]).appendTo(b),f<J-1&&$("<span>, </span>").appendTo(b);F.length>J&&$("<span> …</span>").appendTo(b),0===J&&$('<span class="debug-message-type-meta">empty</span>').appendTo(b),$("<span> }</span>").appendTo(b)}}else $('<span class="debug-message-type-other"></span>').text(""+p).appendTo(g);return _&&S.prop("expand",function(){return function(e,t){if(D===e)v.prop("toggle")&&v.prop("toggle")(t);else if(C[e]&&C[e].prop("expand"))C[e].prop("expand")(e,t);else for(var n in C)if(C.hasOwnProperty(n)&&0===e.indexOf(n)){C[n].prop("expand")&&C[n].prop("expand")(e,t);break}}}),S},getMessageProperty:c,normalisePropertyExpression:d,validatePropertyExpression:function(e){try{return d(e),!0}catch(e){return!1}},separateIconPath:p,getDefaultNodeIcon:u,getNodeIcon:function(e,t){return"config"===e.category?RED.settings.apiRootUrl+"icons/kumologica-core/cog.png":t&&"tab"===t.type?RED.settings.apiRootUrl+"icons/kumologica-core/subflow.png":t&&"unknown"===t.type?RED.settings.apiRootUrl+"icons/kumologica-core/alert.png":t&&t.icon&&f(n=p(t.icon))?"font-awesome"===n.module?t.icon:RED.settings.apiRootUrl+"icons/"+t.icon:f(n=u(e,t))?"font-awesome"===n.module?n.module+"/"+n.file:RED.settings.apiRootUrl+"icons/"+n.module+"/"+n.file:(n.module="kumologica-core",f(n)?RED.settings.apiRootUrl+"icons/"+n.module+"/"+n.file:"subflows"===e.category?RED.settings.apiRootUrl+"icons/kumologica-core/subflow.png":RED.settings.apiRootUrl+"icons/kumologica-core/arrow-in.png");var n},getNodeLabel:function(e,t){var n;if(t=t||"","tab"===e.type)n=e.label||t;else{n=e._def.label;try{n=("function"==typeof n?n.call(e):n)||t}catch(o){console.log("Definition error: "+e.type+".label",o),n=t}}return RED.text.bidi.enforceTextDirectionWithUCC(n)},getNodeColor:function(e,t){var n=t.color,o=RED.settings.theme("palette.theme")||[];if(o.length>0){if(!h.hasOwnProperty(e)){h[e]=t.color;for(var i=o.length,a=0;a<i;a++){var s=o[a];if((!s.hasOwnProperty("category")||(s.hasOwnProperty("_category")||(s._category=new RegExp(s.category)),s._category.test(t.category)))&&(!s.hasOwnProperty("type")||(s.hasOwnProperty("_type")||(s._type=new RegExp(s.type)),s._type.test(e)))){h[e]=s.color||t.color;break}}}n=h[e]}return n||"#ddd"},addSpinnerOverlay:function(e,t){var n=$('<div class="projects-dialog-spinner "><img src="red/images/spin.svg"/></div>').appendTo(e);return t&&n.addClass("projects-dialog-spinner-contain"),n},decodeObject:function(e,t){if("number"===t&&"NaN"===e)e=Number.NaN;else if("number"===t&&"Infinity"===e)e=1/0;else if("number"===t&&"-Infinity"===e)e=-1/0;else if("Object"===t||/^array/.test(t)||"boolean"===t||"number"===t)e=JSON.parse(e);else if(/error/i.test(t))e=((e=JSON.parse(e)).name?e.name+": ":"")+e.message;else if("null"===t)e=null;else if("undefined"===t)e=void 0;else if(/^buffer/.test(t)){var n=e;e=[];for(var o=0;o<n.length;o+=2)e.push(parseInt(n.substr(o,2),16))}return e},parseContextKey:function(e){var t={},n=/^#:\((\S+?)\)::(.*)$/.exec(e);return n?(t.store=n[1],t.key=n[2]):(t.key=e,RED.settings.context&&(t.store=RED.settings.context.default)),t},createIconElement:function(e,t,n){var o=t.find(".palette_icon");0!==o.length&&o.remove(),0!==(a=t.find("i")).length&&a.remove();var i=p(e);if("font-awesome"===i.module){if(RED.nodes.fontAwesome.getIconUnicode(i.file)){var a=$("<i/>").appendTo(t),s=n?"fa-lg ":"";return void a.addClass("palette_icon_fa fa fa-fw "+s+i.file)}e=RED.settings.apiRootUrl+"icons/kumologica-core/arrow-in.png"}$("<div/>",{class:"palette_icon"}).appendTo(t).css("backgroundImage","url("+e+")")},sanitize:t}}(),function(e){e.widget("nodered.editableList",{_create:function(){var t,n=this;(this.element.addClass("red-ui-editableList-list"),this.uiWidth=this.element.width(),this.uiContainer=this.element.wrap("<div>").parent(),this.options.header?(this.options.header.addClass("red-ui-editableList-header"),this.borderContainer=this.uiContainer.wrap("<div>").parent(),this.borderContainer.prepend(this.options.header),this.topContainer=this.borderContainer.wrap("<div>").parent()):this.topContainer=this.uiContainer.wrap("<div>").parent(),this.topContainer.addClass("red-ui-editableList"),this.options.class&&this.topContainer.addClass(this.options.class),!1!==this.options.addButton)&&(t="string"==typeof this.options.addButton?this.options.addButton:"add",e('<a href="#" class="editor-button editor-button-small red-ui-editableList-addButton" style="margin-top: 4px;"><i class="fa fa-plus"></i> '+t+"</a>").appendTo(this.topContainer).click(function(e){e.preventDefault(),n.addItem({})}));"absolute"===this.element.css("position")&&(["top","left","bottom","right"].forEach(function(e){var t=n.element.css(e);"auto"!==t&&""!==t&&(n.topContainer.css(e,t),n.uiContainer.css(e,"0"),n.element.css(e,"auto"))}),this.element.css("position","static"),this.topContainer.css("position","absolute"),this.uiContainer.css("position","absolute")),this.options.header?this.borderContainer.addClass("red-ui-editableList-border"):this.uiContainer.addClass("red-ui-editableList-border"),this.uiContainer.addClass("red-ui-editableList-container"),this.uiHeight=this.element.height(),this.activeFilter=this.options.filter||null,this.activeSort=this.options.sort||null,this.scrollOnAdd=this.options.scrollOnAdd,void 0===this.scrollOnAdd&&(this.scrollOnAdd=!0);var o=this.element.css("minHeight");"0px"!==o&&(this.uiContainer.css("minHeight",o),this.element.css("minHeight",0));var i=this.element.css("maxHeight");"0px"!==i&&(this.uiContainer.css("maxHeight",i),this.element.css("maxHeight",null)),"auto"!==this.options.height&&(this.uiContainer.css("overflow-y","scroll"),isNaN(this.options.height)||(this.uiHeight=this.options.height)),this.element.height("auto");var a,s=this.element.attr("style");if(null!==(a=/width\s*:\s*(\d+%)/i.exec(s))&&(this.element.width("100%"),this.uiContainer.width(a[1])),this.options.sortable){var r={axis:"y",update:function(e,t){n.options.sortItems&&n.options.sortItems(n.items())},handle:"string"==typeof this.options.sortable?this.options.sortable:".red-ui-editableList-item-handle",cursor:"move",tolerance:"pointer",forcePlaceholderSize:!0,placeholder:"red-ui-editabelList-item-placeholder",start:function(e,t){t.placeholder.height(t.item.height()-4)}};this.options.connectWith&&(r.connectWith=this.options.connectWith),this.element.sortable(r)}this._resize()},_resize:function(){var t=this.topContainer.height()-this.uiContainer.height();if(0!==this.uiHeight&&this.uiContainer.height(this.uiHeight-t),this.options.resize&&this.options.resize(),this.options.resizeItem){var n=this;this.element.children().each(function(t){n.options.resizeItem(e(this).find(".red-ui-editableList-item-content"),t)})}},_destroy:function(){},_refreshFilter:function(){var e=this,t=0;return this.activeFilter?(this.items().each(function(n,o){var i=o.data("data");try{e.activeFilter(i)?(o.parent().show(),t++):o.parent().hide()}catch(e){console.log(e),o.parent().show(),t++}}),t):this.element.children().show()},_refreshSort:function(){if(this.activeSort){var t=this.element.children(),n=this;t.sort(function(t,o){return n.activeSort(e(t).find(".red-ui-editableList-item-content").data("data"),e(o).find(".red-ui-editableList-item-content").data("data"))}),e.each(t,function(e,t){n.element.append(t)})}},width:function(e){this.uiWidth=e,this._resize()},height:function(e){this.uiHeight=e,this._resize()},addItem:function(t){var n=this;t=t||{};var o=e("<li>"),i=!1;if(this.activeSort){this.items().each(function(e,a){if(!i){var s=a.data("data");n.activeSort(t,s)<0&&(o.insertBefore(a.closest("li")),i=!0)}})}i||o.appendTo(this.element);var a=e("<div/>").addClass("red-ui-editableList-item-content").appendTo(o);if(a.data("data",t),!0===this.options.sortable&&(e('<i class="red-ui-editableList-item-handle fa fa-bars"></i>').appendTo(o),o.addClass("red-ui-editableList-item-sortable")),this.options.removable){var s=e("<a/>",{href:"#",class:"red-ui-editableList-item-remove editor-button editor-button-small"}).appendTo(o);e("<i/>",{class:"fa fa-remove"}).appendTo(s),o.addClass("red-ui-editableList-item-removable"),s.click(function(t){t.preventDefault();var i=a.data("data");o.addClass("red-ui-editableList-item-deleting"),o.fadeOut(300,function(){e(this).remove(),n.options.removeItem&&n.options.removeItem(i)})})}if(this.options.addItem){var r=n.element.children().length-1;setTimeout(function(){if(n.options.addItem(a,r,t),n.activeFilter)try{n.activeFilter(t)||o.hide()}catch(e){}!n.activeSort&&n.scrollOnAdd&&setTimeout(function(){n.uiContainer.scrollTop(n.element.height())},0)},0)}},addItems:function(e){for(var t=0;t<e.length;t++)this.addItem(e[t])},removeItem:function(t){this.element.children().filter(function(n){return t===e(this).find(".red-ui-editableList-item-content").data("data")}).remove(),this.options.removeItem&&this.options.removeItem(t)},items:function(){return this.element.children().map(function(t){return e(this).find(".red-ui-editableList-item-content")})},empty:function(){this.element.empty()},filter:function(e){return void 0!==e&&(this.activeFilter=e),this._refreshFilter()},sort:function(e){return void 0!==e&&(this.activeSort=e),this._refreshSort()},length:function(){return this.element.children().length},show:function(t){var n=this.element.children().filter(function(n){return t===e(this).find(".red-ui-editableList-item-content").data("data")});n.length>0&&this.uiContainer.scrollTop(this.uiContainer.scrollTop()+n.position().top)}})}(jQuery),function(e){e.widget("nodered.treeList",{_create:function(){var t=this;this.element.addClass("red-ui-treeList");var n=e("<div>",{class:"red-ui-treeList-container"}).appendTo(this.element);this._data=[],this._topList=e("<ol>").css({position:"absolute",top:0,left:0,right:0,bottom:0}).appendTo(n).editableList({addButton:!1,scrollOnAdd:!1,height:"100%",addItem:function(e,n,o){t._addSubtree(e,o,0)}}),this.options.data&&this.data(this.options.data)},_addChildren:function(t,n,o){for(var i=this,a=e("<ol>").appendTo(t).editableList({addButton:!1,scrollOnAdd:!1,height:"auto",addItem:function(e,t,n){i._addSubtree(e,n,o+1)}}),s=0;s<n.length;s++)a.editableList("addItem",n[s])},_addSubtree:function(t,n,o){var i=this,a="<label>";n.children&&n.hasOwnProperty("selected")&&(a="<div>");var s=e(a,{tabindex:"0",class:"red-ui-treeList-label"}).appendTo(t);if(n.class&&s.addClass(n.class),s.css({paddingLeft:15*o+"px"}),s.on("mouseover",function(e){i._trigger("itemmouseover",e,n)}),s.on("mouseout",function(e){i._trigger("itemmouseout",e,n)}),n.children?(e('<span class="red-ui-treeList-icon"><i class="fa fa-angle-right" /></span>').appendTo(s),s.click(function(a){if(!t.hasClass("built")&&"function"==typeof n.children){t.addClass("built");var s,r=!1;n.children(function(e){r=!0,i._addChildren(t,e,o),s&&s.remove()}),r||(s=e('<div class="red-ui-treeList-spinner">').css({"background-position":35+15*o+"px 50%"}).appendTo(t))}t.toggleClass("expanded")})):e('<span class="red-ui-treeList-icon"></span>').appendTo(s),n.hasOwnProperty("selected")){var r=e('<span class="red-ui-treeList-icon"></span>').appendTo(s),l=e('<input type="checkbox">').prop("checked",n.selected).appendTo(r);l.on("click",function(e){e.stopPropagation()}),l.on("change",function(e){n.selected=this.checked,i._trigger("select",e,n)})}else n.children||s.click(function(e){i._trigger("select",e,n)});n.icon&&e('<span class="red-ui-treeList-icon"><i class="'+n.icon+'" /></span>').appendTo(s),e('<span class="red-ui-treeList-label-text"></span>').text(n.label).appendTo(s),n.children&&(Array.isArray(n.children)&&i._addChildren(t,n.children,o),n.expanded&&s.click())},empty:function(){this._topList.editableList("empty")},data:function(e){if(void 0===e)return this._data;this._data=e,this._topList.editableList("empty");for(var t=0;t<e.length;t++)this._topList.editableList("addItem",e[t])},show:function(e){for(var t=0;t<this._data.length;t++)this._data[t].id===e&&this._topList.editableList("show",this._data[t])}})}(jQuery),function(e){e.widget("nodered.checkboxSet",{_create:function(){var t=this;this.uiElement=this.element.wrap("<span>").parent(),this.uiElement.addClass("red-ui-checkboxSet"),this.options.parent&&(this.parent=this.options.parent,this.parent.checkboxSet("addChild",this.element)),this.children=[],this.partialFlag=!1,this.stateValue=0;var n=this.element.prop("checked");this.options=[e('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-square-o"></i></span>').appendTo(this.uiElement),e('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-check-square-o"></i></span>').appendTo(this.uiElement),e('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-minus-square-o"></i></span>').appendTo(this.uiElement)],n?this.options[1].show():this.options[0].show(),this.element.change(function(){this.checked?(t.options[0].hide(),t.options[1].show(),t.options[2].hide()):(t.options[1].hide(),t.options[0].show(),t.options[2].hide());var e=this.checked;t.children.forEach(function(t){t.checkboxSet("state",e,!1,!0)})}),this.uiElement.click(function(e){e.stopPropagation(),t.state(!1===t.state())}),this.parent&&this.parent.checkboxSet("updateChild",this)},_destroy:function(){this.parent&&this.parent.checkboxSet("removeChild",this.element)},addChild:function(e){this.children.push(e)},removeChild:function(e){var t=this.children.indexOf(e);t>-1&&this.children.splice(t,1)},updateChild:function(e){var t=0;this.children.forEach(function(e,n){!0===e.checkboxSet("state")&&t++}),0===t?this.state(!1,!0):t===this.children.length?this.state(!0,!0):this.state(null,!0)},disable:function(){this.uiElement.addClass("disabled")},state:function(e,t,n){if(0===arguments.length)return this.partialFlag?null:this.element.is(":checked");this.partialFlag=null===e;var o=this.partialFlag||e;this.element.prop("checked",o),!0===e?(this.options[0].hide(),this.options[1].show(),this.options[2].hide()):!1===e?(this.options[2].hide(),this.options[1].hide(),this.options[0].show()):null===e&&(this.options[0].hide(),this.options[1].hide(),this.options[2].show()),t||this.element.trigger("change",null),!n&&this.parent&&this.parent.checkboxSet("updateChild",this)}})}(jQuery),RED.menu=function(){var e={};function t(a){var s,r;if(null!==a&&a.id&&!1===RED.settings.theme("menu."+a.id))return null;if(null===a)s=$('<li class="divider"></li>');else{s=$("<li></li>"),a.group&&s.addClass("menu-group-"+a.group);var l="<a "+(a.id?'id="'+a.id+'" ':"")+'tabindex="-1" href="#">';a.toggle&&(l+='<i class="fa fa-square pull-left"></i>',l+='<i class="fa fa-check-square pull-left"></i>'),void 0!==a.icon&&(/\.png/.test(a.icon)?l+='<img src="'+a.icon+'"/> ':l+='<i class="'+(a.icon?a.icon:'" style="display: inline-block;"')+'"></i> '),a.sublabel?l+='<span class="menu-label-container"><span class="menu-label">'+a.label+'</span><span class="menu-sublabel">'+a.sublabel+"</span></span>":l+='<span class="menu-label">'+a.label+"</span>",l+="</a>";var d=$(l).appendTo(s);if(e[a.id]=a,a.onselect?(d.click(function(t){if(t.preventDefault(),!$(this).parent().hasClass("disabled"))if(a.toggle){var s=o(a.id);if("string"==typeof a.toggle){if(!s){for(var r in e)if(e.hasOwnProperty(r)){var l=e[r];l.id!=a.id&&a.toggle==l.toggle&&i(l.id,!1)}i(a.id,!0)}}else i(a.id,!s)}else n(a.id)}),a.toggle&&(r=RED.settings.get("menu-"+a.id),a.setting&&(null!==r?(RED.settings.set(a.setting,r),RED.settings.remove("menu-"+a.id)):r=RED.settings.get(a.setting)),r?(d.addClass("active"),n(a.id,!0)):!1===r?(d.removeClass("active"),n(a.id,!1)):a.hasOwnProperty("selected")&&(a.selected?d.addClass("active"):d.removeClass("active"),n(a.id,a.selected)))):a.href?d.attr("target","_blank").attr("href",a.href):a.options||(s.addClass("disabled"),d.click(function(e){e.preventDefault()})),a.options){s.addClass("dropdown-submenu pull-left");for(var c=$('<ul id="'+a.id+'-submenu" class="dropdown-menu"></ul>').appendTo(s),p=0;p<a.options.length;p++){var u=t(a.options[p]);u&&u.appendTo(c)}}a.disabled&&s.addClass("disabled")}return s}function n(t,n){var o=e[t],i=o.onselect;"string"==typeof o.onselect&&(i=RED.actions.get(o.onselect)),i&&i.call(o,n)}function o(e){return $("#"+e).hasClass("active")}function i(t,i){if(o(t)!=i){var a=e[t];i?$("#"+t).addClass("active"):$("#"+t).removeClass("active"),a&&a.onselect&&n(a.id,i),RED.settings.set(a.setting||"menu-"+a.id,i)}}return{init:function(e){var n=$("<ul/>",{class:"dropdown-menu pull-right"});if(e.id){n.attr({id:e.id+"-submenu"});var o=$("#"+e.id);1===o.length&&n.insertAfter(o)}for(var i=!1,a=0;a<e.options.length;a++){var s=e.options[a];if(null!==s||!i){var r=t(s);r&&(r.appendTo(n),i=null===s)}}return n},setSelected:i,isSelected:o,toggleSelected:function(e){i(e,!o(e))},setDisabled:function(e,t){t?$("#"+e).parent().addClass("disabled"):$("#"+e).parent().removeClass("disabled")},addItem:function(e,n){var o=t(n);if(n.group){var i=$("#"+e+"-submenu").children(".menu-group-"+n.group);if(0===i.length)o.appendTo("#"+e+"-submenu");else{for(var a=0;a<i.length;a++){var s=i[a],r=$(s).find(".menu-label").html();if(n.label<r){$(s).before(o);break}}a===i.length&&o.appendTo("#"+e+"-submenu")}}else o.appendTo("#"+e+"-submenu")},removeItem:function(e){$("#"+e).parent().remove()},setAction:function(t,n){var o=e[t];o&&(o.onselect=n)}}}(),RED.panels=function(){return{create:function(e){var t=e.container||$("#"+e.id),n=t.children();if(2!==n.length)throw new Error("Container must have exactly two children");var o=!e.dir||"vertical"===e.dir;t.addClass("red-ui-panels"),o||t.addClass("red-ui-panels-horizontal");var i,a=$('<div class="red-ui-panels-separator"></div>').insertAfter(n[0]),s=[],r=!1,l=.5;a.draggable({axis:o?"y":"x",containment:t,scroll:!1,start:function(e,t){i=o?t.position.top:t.position.left,s=[o?$(n[0]).height():$(n[0]).width(),o?$(n[1]).height():$(n[1]).width()]},drag:function(a,r){var d=o?t.height():t.width(),c=(o?r.position.top:r.position.left)-i,p=[s[0]+c,s[1]-c];o?($(n[0]).height(p[0]),$(n[1]).height(p[1]),r.position.top-=c):($(n[0]).width(p[0]),$(n[1]).width(p[1]),r.position.left-=c),e.resize&&e.resize(p[0],p[1]),l=p[0]/(d-8)},stop:function(e,t){r=!0}});var d={ratio:function(e){l=e,r=!0,0===e||1===e?a.hide():a.show(),o?d.resize(t.height()):d.resize(t.width())},resize:function(i){var a;if(o?(a=[$(n[0]).height(),$(n[1]).height()],t.height(i)):(a=[$(n[0]).width(),$(n[1]).width()],t.width(i)),r){var s=l*(i-8);a=[s,i-s-8],o?($(n[0]).outerHeight(a[0]),$(n[1]).outerHeight(a[1])):($(n[0]).outerWidth(a[0]),$(n[1]).outerWidth(a[1]))}e.resize&&e.resize(a[0],a[1])}};return d}}}(),RED.popover=function(){var e={default:{top:10,topTop:30,leftRight:17,leftLeft:25,leftBottom:8,leftTop:11},small:{top:6,topTop:20,leftRight:8,leftLeft:26,leftBottom:8,leftTop:9}};return{create:function(t){var n=t.target,o=t.direction||"right",i=t.trigger,a=t.content,s=t.delay||{show:750,hide:50},r=t.autoClose,l=t.width||"auto",d=t.size||"default";if(!e[d])throw new Error("Invalid RED.popover size value:",d);var c,p,u=null,f=function(t){if(c){if(p=$('<div class="red-ui-popover"></div>'),"default"!==d&&p.addClass("red-ui-popover-size-"+d),"function"==typeof a){var i=a.call(g);if(null===i)return;"string"==typeof i?p.text(i):p.append(i)}else p.html(a);"auto"!==l&&p.width(l),p.appendTo("body");var s=n.offset(),r=n.outerWidth(),u=n.outerHeight(),f=p.height(),h=p.width(),v=$(window).scrollTop(),b=$(window).scrollLeft(),m=v+$(window).height(),y=b+$(window).width(),w=0,x=0,D=o;"right"===D?(w=s.top+u/2-f/2-e[d].top,x=s.left+r+e[d].leftRight):"left"===D?(w=s.top+u/2-f/2-e[d].top,x=s.left-e[d].leftLeft-h):"bottom"===D?(w=s.top+u+e[d].top,(x=s.left+r/2-h/2-e[d].leftBottom)<0?(D="right",w=s.top+u/2-f/2-e[d].top,x=s.left+r+e[d].leftRight):x+h>y?(D="left",w=s.top+u/2-f/2-e[d].top,x=s.left-e[d].leftLeft-h,w+f+u/2+5>m&&(w-=w+f+u/2-m+5)):w+f>m&&(D="top",w=s.top-e[d].topTop-f,x=s.left+r/2-h/2-e[d].leftTop)):"top"===D&&(w=s.top-e[d].topTop-f,x=s.left+r/2-h/2-e[d].leftTop,w<0&&(D="bottom",w=s.top+u+e[d].top,x=s.left+r/2-h/2-e[d].leftBottom)),p.addClass("red-ui-popover-"+D).css({top:w,left:x}),t?p.show():p.fadeIn("fast")}},h=function(e){$(document).off("mousedown.modal-popover-close"),c||p&&(e?p.remove():p.fadeOut("fast",function(){$(this).remove()}),p=null)};"hover"===i?(n.on("mouseenter",function(e){clearTimeout(u),c=!0,u=setTimeout(f,s.show)}),n.on("mouseleave disabled",function(e){u&&clearTimeout(u),c&&(c=!1,setTimeout(h,s.hide))})):"click"===i?(n.click(function(e){e.preventDefault(),e.stopPropagation(),(c=!c)?f():h()}),r&&n.on("mouseleave disabled",function(e){u&&clearTimeout(u),c&&(c=!1,setTimeout(h,r))})):"modal"===i?$(document).on("mousedown.modal-popover-close",function(e){for(var t=e.target;"BODY"!==t.nodeName&&t!==p[0];)t=t.parentElement;"BODY"===t.nodeName&&(c=!1,h())}):r&&setTimeout(function(){c=!1,h()},r);var g={setContent:function(e){return a=e,g},open:function(e){return c=!0,f(e),g},close:function(e){return c=!1,h(e),g}};return g},tooltip:function(e,t,n){var o=t;return n&&(o=function(){var e=t,o=RED.keyboard.getShortcut(n);return o&&o.key&&(e=$("<span>"+t+' <span class="red-ui-popover-key">'+RED.keyboard.formatKey(o.key,!0)+"</span></span>")),e}),RED.popover.create({target:e,trigger:"hover",size:"small",direction:"bottom",content:o,delay:{show:750,hide:50}})}}}(),function(e){e.widget("nodered.searchBox",{_create:function(){var t=this;this.currentTimeout=null,this.lastSent="",this.element.val(""),this.uiContainer=this.element.wrap("<div>").parent(),this.uiContainer.addClass("red-ui-searchBox-container"),e('<i class="fa fa-search"></i>').prependTo(this.uiContainer),this.clearButton=e('<a href="#"><i class="fa fa-times"></i></a>').appendTo(this.uiContainer),this.clearButton.on("click",function(e){e.preventDefault(),t.element.val(""),t._change("",!0),t.element.focus()}),this.resultCount=e("<span>",{class:"red-ui-searchBox-resultCount hide"}).appendTo(this.uiContainer),this.element.val(""),this.element.on("keydown",function(e){27===e.keyCode&&t.element.val("")}),this.element.on("keyup",function(n){t._change(e(this).val())}),this.element.on("focus",function(){e("body").one("mousedown",function(){t.element.blur()})})},_change:function(e,t){var n=!1;""===e?(this.clearButton.hide(),n=!0):(this.clearButton.show(),n=e.length>=(this.options.minimumLength||0));var o=this.element.val();if(n=n&&o!==this.lastSent)if(!t&&this.options.delay>0){clearTimeout(this.currentTimeout);var i=this;this.currentTimeout=setTimeout(function(){i.lastSent=i.element.val(),i._trigger("change")},this.options.delay)}else this._trigger("change")},value:function(e){if(void 0===e)return this.element.val();this.element.val(e),this._change(e)},count:function(e){void 0===e||null===e||""===e?this.resultCount.text("").hide():this.resultCount.text(e).show()},change:function(){this._trigger("change")}})}(jQuery),RED.tabs=function(){var e="fa fa-lemon-o";return{create:function(t){var n,o,i,a={},s=0,r=0,l=t.element||$("#"+t.id),d=l.wrap("<div>").parent(),c=l.wrap("<div>").parent();if(d.addClass("red-ui-tabs"),t.vertical&&d.addClass("red-ui-tabs-vertical"),t.scrollable&&(d.addClass("red-ui-tabs-scrollable"),c.addClass("red-ui-tabs-scroll-container"),c.scroll(v),(o=$('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-left"><a href="#" style="display:none;"><i class="fa fa-caret-left"></i></a></div>').appendTo(d).find("a")).on("mousedown",function(e){u(e,"-=150")}).on("click",function(e){e.preventDefault()}),(i=$('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-right"><a href="#" style="display:none;"><i class="fa fa-caret-right"></i></a></div>').appendTo(d).find("a")).on("mousedown",function(e){u(e,"+=150")}).on("click",function(e){e.preventDefault()})),t.collapsible){d.addClass("red-ui-tabs-collapsible"),d.addClass("palette-background");var p=$('<div class="red-ui-tab-link-buttons sidebar-shortcuts-icons"></div>').appendTo(d)}function u(e,t){if(e.preventDefault(),!$(this).hasClass("disabled")){var n=c.scrollLeft();c.animate({scrollLeft:t},100);var o=setInterval(function(){var e=c.scrollLeft();e!==n?(n=e,c.animate({scrollLeft:t},100)):clearInterval(o)},100);$(this).one("mouseup",function(){clearInterval(o)})}}function f(){var e=[];return l.find("li.red-ui-tab.selected").each(function(){e.push(a[$(this).find("a").attr("href").slice(1)])}),e}function h(){t.onselect(f())}function g(e){e.preventDefault();var n=l.find("li.red-ui-tab.active"),o=$(this).parent(),i=!1;if(t.onselect)if(e.metaKey){if(o.hasClass("selected")){if(o.removeClass("selected"),o[0]!==n[0])return void h();if(0===(d=l.find("li.red-ui-tab.selected")).length)return void h();o=d.first()}else n.hasClass("selected")||(a[n.find("a").attr("href").slice(1)],n.addClass("selected")),o.addClass("selected");i=!0}else if(e.shiftKey){var s,r;n[0]!==o[0]&&(n.index()<o.index()?(s=n,r=o):(s=o,r=n),l.find("li.red-ui-tab").removeClass("selected"),s.addClass("selected"),r.addClass("selected"),s.nextUntil(r).addClass("selected")),i=!0}else{var d;(d=l.find("li.red-ui-tab.selected")).length>0&&(d.removeClass("selected"),i=!0)}var c=o.find("a");return t.onclick&&t.onclick(a[c.attr("href").slice(1)]),m(c),i&&h(),!1}function v(){if(0!==l.children().length){var e=c.scrollLeft(),t=c.width(),n=l.width();0===e?o.hide():o.show(),e===n-t?i.hide():i.show()}}function b(e){if(e.preventDefault(),e.stopPropagation(),!e.metaKey&&!e.shiftKey)return t.ondblclick&&t.ondblclick(a[$(this).attr("href").slice(1)]),!1}function m(e){if("test"===e&&$("#view-test-flow").click(),"string"==typeof e&&(e=l.find("a[href='#"+e+"']")),0!==e.length)if(e.parent().hasClass("active"))t.onsame&&t.onsame(a[e.attr("href").slice(1)]),e.parent().removeClass("active"),d.find(".red-ui-tab-link-button").removeClass("active selected");else{l.children().removeClass("active"),l.children().css({transition:"width 100ms"}),e.parent().addClass("active");var n=e.parent().attr("id");if(d.find(".red-ui-tab-link-button").removeClass("active selected"),$("#"+n+"-link-button").addClass("active selected"),t.scrollable){var o=e.parent().position().left;o-21<0?c.animate({scrollLeft:"+="+(o-50)},300):o+120>c.width()&&c.animate({scrollLeft:"+="+(o+140-c.width())},300)}t.onchange&&t.onchange(a[e.attr("href").slice(1)]),y(),setTimeout(function(){l.children().css({transition:""})},100)}}function y(){if(!t.vertical){var e=l.find("li.red-ui-tab"),o=d.width(),i=e.size();if(t.collapsible){if((s=o-p.width()-10)<198){for(var a=p.find("a:last").prev();a.is(":not(:visible)");)a=a.prev();a.hasClass("red-ui-tab-link-button-pinned")||a.hide(),s=o-p.width()-10}else o-198-p.width()>40&&(p.find("a:not(:visible):first").show(),s=o-p.width()-10);e.css({width:s})}else{var s;if(r=(n=100*(s=(o-12-6*i)/i)/o+"%")+"%",t.scrollable){s=Math.max(s,60),n=s+"px",r=0;var c=Math.max(d.width(),12+(s+6)*i);l.width(c),v()}else t.hasOwnProperty("minimumActiveTabWidth")&&(s<t.minimumActiveTabWidth?(i-=1,s=(o-12-t.minimumActiveTabWidth-6*i)/i,n=100*s/o+"%",r=t.minimumActiveTabWidth+"px"):r=0);e.css({width:n}),s<50?(l.find(".red-ui-tab-icon").hide(),l.find(".red-ui-tab-label").css({paddingLeft:Math.min(12,Math.max(0,s-38))+"px"})):(l.find(".red-ui-tab-icon").show(),l.find(".red-ui-tab-label").css({paddingLeft:""})),0!==r&&(l.find("li.red-ui-tab.active").css({width:t.minimumActiveTabWidth}),l.find("li.red-ui-tab.active .red-ui-tab-icon").show(),l.find("li.red-ui-tab.active .red-ui-tab-label").css({paddingLeft:""}))}}}function w(e){if(t.onselect){var n=l.find("li.red-ui-tab.selected");n.length>0&&(n.removeClass("selected"),h())}var o=l.find("a[href='#"+e+"']").parent();if(o.hasClass("active")){var i=o.prev();0===i.size()&&(i=o.next()),m(i.find("a"))}o.remove(),a[e].pinned&&s--,t.onremove&&t.onremove(a[e]),delete a[e],y()}return l.children().first().addClass("active"),l.children().addClass("red-ui-tab"),l.find("li.red-ui-tab a").on("click",g).on("dblclick",b),setTimeout(function(){y()},0),{addTab:function(n,o){if(t.onselect){var i=l.find("li.red-ui-tab.selected");i.length>0&&(i.removeClass("selected"),h())}a[n.id]=n;var r=$("<li/>",{class:"red-ui-tab"});0===l.children().length&&(o=void 0),0===o?r.prependTo(l):o>0?r.insertAfter(l.find("li:nth-child("+o+")")):r.appendTo(l),r.attr("id","red-ui-tab-"+n.id.replace(".","-")),r.data("tabId",n.id),t.maximumTabWidth&&r.css("maxWidth",t.maximumTabWidth+"px");var d=$("<a/>",{href:"#"+n.id,class:"red-ui-tab-label"}).appendTo(r);if(n.icon?$('<img src="'+n.icon+'" class="red-ui-tab-icon"/>').appendTo(d):n.iconClass&&$("<i>",{class:"red-ui-tab-icon "+n.iconClass}).appendTo(d),$("<span/>",{class:"bidiAware"}).text(n.label).appendTo(d).attr("dir",RED.text.bidi.resolveBaseTextDir(n.label)),t.collapsible){r.addClass("red-ui-tab-pinned");var u=$(`<a href="#${n.id}" class="red-ui-tab-link-button sidebar-shortcut-icon"></a>`);n.pinned?0===s?u.prependTo(p):u.insertAfter(p.find("a.red-ui-tab-link-button-pinned:last")):!1!==t.menu?u.insertBefore(p.find("a:last")):u.appendTo(p),u.attr("id",r.attr("id")+"-link-button"),n.iconClass?$(`<span class="tab-label ${n.iconClass}"> </span>`).appendTo(u):$("<i>",{class:e}).appendTo(u),u.click(function(e){e.preventDefault(),m(n.id)}),n.pinned&&(u.addClass("red-ui-tab-link-button-pinned"),s++),RED.popover.tooltip($(u),n.name,n.action)}if(d.on("click",g),d.on("dblclick",b),n.closeable){r.addClass("red-ui-tabs-closeable");var f=$("<a/>",{href:"#",class:"red-ui-tab-close"}).appendTo(r);f.append('<i class="fa fa-times" />'),f.on("click",function(e){e.preventDefault(),w(n.id)})}var v=$('<span class="red-ui-tabs-badges"></span>').appendTo(r);if(t.onselect&&($('<i class="red-ui-tabs-badge-changed fa fa-circle"></i>').appendTo(v),$('<i class="red-ui-tabs-badge-selected fa fa-check-circle"></i>').appendTo(v)),t.onadd&&t.onadd(n),d.attr("title",n.label),"Node Info"!==d[0].text&&1==l.find("li.red-ui-tab").size()&&m(d),t.onreorder){var x,D,E,k=[];r.draggable({axis:"x",distance:20,start:function(e,t){x=[],k=[],l.children().each(function(e){k[e]={el:$(this),text:$(this).text(),left:$(this).position().left,width:$(this).width()},$(this).is(r)&&(D=e,E=e),x.push($(this).data("tabId"))}),l.children().each(function(e){e!==D&&$(this).css({position:"absolute",left:k[e].left+"px",width:k[e].width+2,transition:"left 0.3s"})}),r.hasClass("active")||r.css({zIndex:1})},drag:function(e,t){t.position.left+=k[D].left+c.scrollLeft();for(var n=t.position.left+k[D].width/2-c.scrollLeft(),o=0;o<k.length;o++)if(o!==D&&n>k[o].left&&n<k[o].left+k[o].width){o<D?(k[o].left+=k[D].width+8,k[D].el.detach().insertBefore(k[o].el)):(k[o].left-=k[D].width+8,k[D].el.detach().insertAfter(k[o].el)),k[o].el.css({left:k[o].left+"px"}),k.splice(o,0,k.splice(D,1)[0]),D=o;break}},stop:function(e,n){l.children().css({position:"relative",left:"",transition:""}),r.hasClass("active")||r.css({zIndex:""}),y(),E!==D&&t.onreorder(x,$.makeArray(l.children().map(function(){return $(this).data("tabId")}))),m(k[D].el.data("tabId"))}})}setTimeout(function(){y()},10)},removeTab:w,activateTab:m,nextTab:function(){var e=l.find("li.active").next();e.length>0&&m(e.find("a"))},previousTab:function(){var e=l.find("li.active").prev();e.length>0&&m(e.find("a"))},resize:y,count:function(){return l.find("li.red-ui-tab").size()},contains:function(e){return l.find("a[href='#"+e+"']").length>0},renameTab:function(e,t){a[e].label=t;var n=l.find("a[href='#"+e+"']");n.attr("title",t),n.find("span.bidiAware").text(t).attr("dir",RED.text.bidi.resolveBaseTextDir(t)),y()},selection:f,order:function(e){var t=$.makeArray(l.children().map(function(){return $(this).data("tabId")}));if(t.length===e.length){var n,o=!0;for(n=0;n<e.length;n++)if(e[n]!==t[n]){o=!1;break}if(!o){var i={};for(l.children().detach().each(function(){i[$(this).data("tabId")]=$(this)}),n=0;n<e.length;n++)i[e[n]].appendTo(l)}}}}}}}(),RED.stack=function(){return{create:function(e){var t=e.container;t.addClass("red-ui-stack");var n=0,o=[],i=!0,a=function(){if(o.length>0){var e=0;o.forEach(function(t){e+=t.header.outerHeight()});var i=t.innerHeight();n=i-e-(o.length-1),o.forEach(function(e){e.contentWrap.height(n)})}};return e.fill&&e.singleExpanded&&($(window).resize(a),$(window).focus(a)),{remove:function(e){o.remove(e)},removeAll:function(){o=[]},add:function(s){o.push(s),s.container=$('<div class="palette-category">').appendTo(t),i||s.container.hide();var r=$('<div class="palette-header"></div>').appendTo(s.container);if(s.header=r,s.contentWrap=$("<div></div>",{style:"position:relative"}).appendTo(s.container),e.fill&&s.contentWrap.css("height",n),s.content=$("<div></div>").appendTo(s.contentWrap),!1!==s.collapsible){r.click(function(){if(e.singleExpanded)if(s.isExpanded())2===o.length&&(o[0]===s?(o[0].collapse(),o[1].expand()):(o[1].collapse(),o[0].expand()));else{for(var t=0;t<o.length;t++)o[t].isExpanded()&&o[t].collapse();s.expand()}else s.toggle()});var l=$('<i class="fa fa-angle-down"></i>').appendTo(r);s.expanded?(s.container.addClass("palette-category-expanded"),l.addClass("expanded")):s.contentWrap.hide()}else $('<i style="opacity: 0.5;" class="fa fa-angle-down expanded"></i>').appendTo(r),r.css("cursor","default");return s.title=$(`<span id="${s.titleId}"></span>`).html(s.title).appendTo(r),s.toggle=function(){return s.isExpanded()?(s.collapse(),!1):(s.expand(),!0)},s.expand=function(){if(!s.isExpanded())return s.onexpand&&s.onexpand.call(s),e.singleExpanded&&o.forEach(function(e){e!==s&&e.collapse()}),l.addClass("expanded"),s.container.addClass("palette-category-expanded"),s.contentWrap.slideDown(200),!0},s.collapse=function(){if(s.isExpanded())return l.removeClass("expanded"),s.container.removeClass("palette-category-expanded"),s.contentWrap.slideUp(200),!0},s.isExpanded=function(){return s.container.hasClass("palette-category-expanded")},e.fill&&e.singleExpanded&&a(),s},hide:function(){return i=!1,o.forEach(function(e){e.container.hide()}),this},expandLastEntry:function(){console.log("[stack] entries=",o);let e=o.length;if(0!==e)if(1===e)o[0].expand();else{for(let t=0;t<e-1;t++)o[t].collapse();o[e-1].expand()}},show:function(){return i=!0,o.forEach(function(e){e.container.show()}),this},resize:function(){a&&a()}}}}}(),function(e){var t=function(e){var t=RED.utils.parseContextKey(e);return{option:t.store,value:t.key}},n=function(e,t){if(!t)return e;var n="string"==typeof t?t:t.value;return n!==RED.settings.context.default?"#:("+n+")::"+e:e},o={msg:{value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression},flow:{value:"flow",label:"flow.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:t,export:n},global:{value:"global",label:"global.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:t,export:n},str:{value:"str",label:"string",icon:"red/images/typedInput/az.png"},num:{value:"num",label:"number",icon:"red/images/typedInput/09.png",validate:/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/},bool:{value:"bool",label:"boolean",icon:"red/images/typedInput/bool.png",options:["true","false"]},json:{value:"json",label:"JSON",icon:"red/images/typedInput/json.png",validate:function(e){try{return JSON.parse(e),!0}catch(e){return!1}},expand:function(){var e=this,t=this.value();try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){}RED.editor.editJSON({value:t,complete:function(t){var n=t;try{n=JSON.stringify(JSON.parse(t))}catch(e){}e.value(n)}})}},re:{value:"re",label:"regular expression",icon:"red/images/typedInput/re.png"},date:{value:"date",label:"timestamp",hasValue:!1},jsonata:{value:"jsonata",label:"expression",icon:"red/images/typedInput/expr.png",validate:function(e){try{return jsonata(e),!0}catch(e){return!1}},expand:function(){var e=this;RED.editor.editExpression({value:this.value().replace(/\t/g,"\n"),complete:function(t){e.value(t.replace(/\n/g,"\t"))}})}},bin:{value:"bin",label:"buffer",icon:"red/images/typedInput/bin.png",expand:function(){var e=this;RED.editor.editBuffer({value:this.value(),complete:function(t){e.value(t)}})}},env:{value:"env",label:"env",icon:"red/images/typedInput/env.png"},camsg:{value:"camsg",label:"$msg."},caflow:{value:"caflow",label:"$flow."},caglobal:{value:"caglobal",label:"$global."},caprops:{value:"caprops",label:"$props."},caenv:{value:"caenv",label:"$env."},cavars:{value:"cavars",label:"$vars."}},i=!1;e.widget("nodered.typedInput",{_create:function(){try{if(!i&&RED){for(var t in o)if(o.hasOwnProperty(t))switch(t){case"str":o[t].label="string";break;case"num":o[t].label="number";break;case"re":o[t].label="regular expression";break;case"bool":o[t].label="boolean";break;case"json":o[t].label="JSON";break;case"bin":o[t].label="buffer";break;case"date":o[t].label="timestamp";break;case"jsonata":o[t].label="expression";break;case"msg":o[t].label="msg.";break;case"flow":o[t].label="flow.";break;case"global":o[t].label="global.";break;case"camsg":o[t].label="msg.";break;case"caflow":o[t].label="flow.";break;case"caglobal":o[t].label="global.";break;case"caprops":o[t].label="props.";break;case"caenv":o[t].label="env.";break;case"cavars":o[t].label="vars.";break;default:o[t].label=t}var n=RED.settings.context.stores.map(function(e){return{value:e,label:e,icon:'<i class="red-ui-typedInput-icon fa fa-database" style="color: #'+("memory"===e?"ddd":"777")+'"></i>'}});n.length<2?(o.flow.options=[],o.global.options=[]):(o.flow.options=n,o.global.options=n)}i=!0;var a=this;this.disarmClick=!1,this.input=e('<input type="text"></input>'),this.input.insertAfter(this.element),this.input.val(this.element.val()),this.element.addClass("red-ui-typedInput"),this.uiWidth=this.element.outerWidth(),this.elementDiv=this.input.wrap("<div>").parent().addClass("red-ui-typedInput-input"),this.uiSelect=this.elementDiv.wrap("<div>").parent();var s,r=this.element.attr("style");if(null!==(s=/width\s*:\s*(calc\s*\(.*\)|\d+(%|px))/i.exec(r))?(this.input.css("width","100%"),this.uiSelect.width(s[1]),this.uiWidth=null):this.uiSelect.width(this.uiWidth),["Right","Left"].forEach(function(e){var t=a.element.css("margin"+e);a.uiSelect.css("margin"+e,t),a.input.css("margin"+e,0)}),["type","placeholder","data-i18n"].forEach(function(e){var t=a.element.attr(e);a.input.attr(e,t)}),this.uiSelect.addClass("red-ui-typedInput-container"),this.element.attr("type","hidden"),this.options.types=this.options.types||Object.keys(o),this.selectTrigger=e('<button tabindex="0"></button>').prependTo(this.uiSelect),e('<i class="red-ui-typedInput-icon fa fa-sort-desc"></i>').toggle(this.options.types.length>1).appendTo(this.selectTrigger),this.selectLabel=e('<span class="red-ui-typedInput-type-label"></span>').appendTo(this.selectTrigger),this.types(this.options.types),this.options.typeField){this.typeField=e(this.options.typeField).hide();var l=this.typeField.val();l&&this.typeMap[l]&&(this.options.default=l)}else this.typeField=e("<input>",{type:"hidden"}).appendTo(this.uiSelect);this.input.on("focus",function(){a.uiSelect.addClass("red-ui-typedInput-focus")}),this.input.on("blur",function(){a.uiSelect.removeClass("red-ui-typedInput-focus")}),this.input.on("change",function(){a.validate(),a.element.val(a.value()),a.element.trigger("change",a.propertyType,a.value())}),this.selectTrigger.click(function(e){e.preventDefault(),a._showTypeMenu()}),this.selectTrigger.on("keydown",function(e){40===e.keyCode&&a._showTypeMenu()}).on("focus",function(){a.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionSelectTrigger=e('<button tabindex="0" class="red-ui-typedInput-option-trigger" style="display:inline-block"><span class="red-ui-typedInput-option-caret"><i class="red-ui-typedInput-icon fa fa-sort-desc"></i></span></button>').appendTo(this.uiSelect),this.optionSelectLabel=e('<span class="red-ui-typedInput-option-label"></span>').prependTo(this.optionSelectTrigger),RED.popover.tooltip(this.optionSelectLabel,function(){return a.optionValue}),this.optionSelectTrigger.click(function(e){e.preventDefault(),a._showOptionSelectMenu()}).on("keydown",function(e){40===e.keyCode&&a._showOptionSelectMenu()}).on("blur",function(){a.uiSelect.removeClass("red-ui-typedInput-focus")}).on("focus",function(){a.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionExpandButton=e('<button tabindex="0" class="red-ui-typedInput-option-expand" style="display:inline-block"><i class="red-ui-typedInput-icon fa fa-ellipsis-h"></i></button>').appendTo(this.uiSelect),this.type(this.options.default||this.typeList[0].value)}catch(e){console.log(e.stack)}},_showTypeMenu:function(){this.typeList.length>1?(this._showMenu(this.menu,this.selectTrigger),this.menu.find("[value='"+this.propertyType+"']").focus()):this.input.focus()},_showOptionSelectMenu:function(){if(this.optionMenu){this.optionMenu.css({minWidth:this.optionSelectLabel.width()}),this._showMenu(this.optionMenu,this.optionSelectTrigger);var e=this.optionMenu.find("[value='"+this.optionValue+"']");0===e.length&&(e=this.optionMenu.children(":first")),e.focus()}},_hideMenu:function(t){e(document).off("mousedown.close-property-select"),t.hide(),this.elementDiv.is(":visible")?this.input.focus():this.optionSelectTrigger.is(":visible")?this.optionSelectTrigger.focus():this.selectTrigger.focus()},_createMenu:function(t,n){var o=this,i=e("<div>").addClass("red-ui-typedInput-options");return t.forEach(function(t){"string"==typeof t&&(t={value:t,label:t});var a=e('<a href="#"></a>').attr("value",t.value).appendTo(i);t.label&&a.text(t.label),t.icon?0===t.icon.indexOf("<")?e(t.icon).prependTo(a):-1!==t.icon.indexOf("/")?e("<img>",{src:t.icon,style:"margin-right: 4px; height: 18px;"}).prependTo(a):e("<i>",{class:"red-ui-typedInput-icon "+t.icon}).prependTo(a):a.css({paddingLeft:"18px"}),t.icon||t.label||a.text(t.value),a.click(function(e){e.preventDefault(),n(t.value),o._hideMenu(i)})}),i.css({display:"none"}),i.appendTo(document.body),i.on("keydown",function(t){40===t.keyCode?e(this).children(":focus").next().focus():38===t.keyCode?e(this).children(":focus").prev().focus():27===t.keyCode&&o._hideMenu(i)}),i},_showMenu:function(t,n){if(this.disarmClick)this.disarmClick=!1;else{var o=this,i=n.offset(),a=n.height(),s=t.height(),r=a+i.top-3;r+s>e(window).height()&&(r-=r+s-e(window).height()+5),t.css({top:r+"px",left:2+i.left+"px"}),t.slideDown(100),this._delay(function(){o.uiSelect.addClass("red-ui-typedInput-focus"),e(document).on("mousedown.close-property-select",function(i){e(i.target).closest(t).length||o._hideMenu(t),e(i.target).closest(n).length&&(o.disarmClick=!0,i.preventDefault())})})}},_getLabelWidth:function(t){var n=t.outerWidth();if(0===n){var o=e('<div class="red-ui-typedInput-container"></div>').css({position:"absolute",top:0,left:-1e3}).appendTo(document.body);n=t.clone().appendTo(o).outerWidth(),o.remove()}return n},_resize:function(){null!==this.uiWidth&&this.uiSelect.width(this.uiWidth);var e=this.typeMap[this.propertyType];if(e&&!1===e.hasValue)this.selectTrigger.addClass("red-ui-typedInput-full-width");else{this.selectTrigger.removeClass("red-ui-typedInput-full-width");var t=this._getLabelWidth(this.selectTrigger);if(this.elementDiv.css("left",t+"px"),this.optionExpandButton.is(":visible")?this.elementDiv.css("right","22px"):(this.elementDiv.css("right","0"),this.input.css({"border-top-right-radius":"4px","border-bottom-right-radius":"4px"})),this.optionSelectTrigger)if(e&&e.options&&!0===e.hasValue){this.optionSelectLabel.css({left:"auto"});var n=this._getLabelWidth(this.optionSelectLabel);this.optionSelectTrigger.css({width:23+n+"px"}),this.elementDiv.css("right",23+n+"px"),this.input.css({"border-top-right-radius":0,"border-bottom-right-radius":0})}else this.optionSelectLabel.css({left:"0"}),this.optionSelectTrigger.css({width:"calc( 100% - "+t+"px )"}),this.optionExpandButton.is(":visible")||(this.elementDiv.css({right:0}),this.input.css({"border-top-right-radius":"4px","border-bottom-right-radius":"4px"}))}},_updateOptionSelectLabel:function(t){var n=this.typeMap[this.propertyType];this.optionSelectLabel.empty(),t.icon?0===t.icon.indexOf("<")?e(t.icon).prependTo(this.optionSelectLabel):-1!==t.icon.indexOf("/")?e("<img>",{src:t.icon,style:"height: 18px;"}).prependTo(this.optionSelectLabel):e("<i>",{class:"red-ui-typedInput-icon "+t.icon}).prependTo(this.optionSelectLabel):t.label?this.optionSelectLabel.text(t.label):this.optionSelectLabel.text(t.value),n.hasValue&&(this.optionValue=t.value,this._resize(),this.input.trigger("change",this.propertyType,this.value()))},_destroy:function(){this.optionMenu&&this.optionMenu.remove(),this.menu.remove()},types:function(e){var t=this,n=this.type();this.typeMap={},this.typeList=e.map(function(e){var n;return n="string"==typeof e?o[e]:e,t.typeMap[n.value]=n,n}),this.selectTrigger.toggleClass("disabled",1===this.typeList.length),this.selectTrigger.find(".fa-sort-desc").toggle(this.typeList.length>1),this.menu&&this.menu.remove(),this.menu=this._createMenu(this.typeList,function(e){t.type(e)}),n&&!this.typeMap.hasOwnProperty(n)?this.type(this.typeList[0].value):(this.propertyType=null,this.type(n)),setTimeout(function(){t._resize()},0)},width:function(e){this.uiWidth=e+20,this._resize()},value:function(e){if(!arguments.length){var t=this.input.val();return this.typeMap[this.propertyType].export&&(t=this.typeMap[this.propertyType].export(t,this.optionValue)),t}var n;if(this.typeMap[this.propertyType].options){for(var o=0;o<this.typeMap[this.propertyType].options.length;o++){var i=this.typeMap[this.propertyType].options[o];if("string"==typeof i){if(i===e){n=this.activeOptions[i];break}}else if(i.value===e){n=i;break}}n||(n={value:""}),this._updateOptionSelectLabel(n)}this.input.val(e),this.input.trigger("change",this.type(),e)},type:function(t){if(!arguments.length)return this.propertyType;var n=this,o=this.typeMap[t];if(o&&this.propertyType!==t){var i;if(this.propertyType=t,this.typeField&&this.typeField.val(t),this.selectLabel.empty(),o.icon?0===o.icon.indexOf("<")?e(o.icon).prependTo(this.selectLabel):-1!==o.icon.indexOf("/")?((i=new Image).name=o.icon,i.src=o.icon,e("<img>",{src:o.icon,style:"margin-right: 4px;height: 18px;"}).prependTo(this.selectLabel)):e("<i>",{class:"red-ui-typedInput-icon "+o.icon}).prependTo(this.selectLabel):this.selectLabel.text(o.label),this.optionMenu&&(this.optionMenu.remove(),this.optionMenu=null),o.options){var a;if(this.optionExpandButton&&this.optionExpandButton.hide(),this.optionSelectTrigger)if(this.optionSelectTrigger.show(),o.hasValue?this.elementDiv.show():this.elementDiv.hide(),this.activeOptions={},o.options.forEach(function(e){"string"==typeof e?n.activeOptions[e]={label:e,value:e}:n.activeOptions[e.value]=e}),n.activeOptions.hasOwnProperty(n.optionValue)||(n.optionValue=null),this.optionMenu=this._createMenu(o.options,function(e){n._updateOptionSelectLabel(n.activeOptions[e]),o.hasValue||n.value(n.activeOptions[e].value)}),o.hasValue){var s=this.optionValue||o.options[0];if(o.parse){var r=o.parse(this.input.val());r.option&&(s=r.option,this.activeOptions.hasOwnProperty(s)||(r.option=Object.keys(this.activeOptions)[0],s=r.option)),this.input.val(r.value),o.export&&this.element.val(o.export(r.value,r.option||s))}"string"==typeof s?(this.optionValue=s,this.activeOptions.hasOwnProperty(s)||(s=Object.keys(this.activeOptions)[0]),s?this._updateOptionSelectLabel(this.activeOptions[s]):this.optionSelectTrigger.hide()):s?(this.optionValue=s.value,this._updateOptionSelectLabel(s)):this.optionSelectTrigger.hide()}else{for(var l=this.input.val(),d=!1,c=0;c<o.options.length;c++){if("string"==typeof(a=o.options[c])&&a===l){n._updateOptionSelectLabel({value:l}),d=!0;break}if(a.value===l){n._updateOptionSelectLabel(a),d=!0;break}}d||("string"==typeof(a=o.options[0])?(this.value(a),n._updateOptionSelectLabel({value:a})):(this.value(a.value),n._updateOptionSelectLabel(a)))}this.input.trigger("change",this.propertyType,this.value())}else this.optionSelectTrigger&&this.optionSelectTrigger.hide(),!1===o.hasValue?(this.oldValue=this.input.val(),this.input.val(""),this.elementDiv.hide()):(void 0!==this.oldValue&&(this.input.val(this.oldValue),delete this.oldValue),this.elementDiv.show()),this.optionExpandButton&&(o.expand&&"function"==typeof o.expand?(this.optionExpandButton.show(),this.optionExpandButton.off("click"),this.optionExpandButton.on("click",function(e){e.preventDefault(),o.expand.call(n)})):this.optionExpandButton.hide()),this.input.trigger("change",this.propertyType,this.value());i?(i.onload=function(){n._resize()},i.onerror=function(){n._resize()}):this._resize()}},validate:function(){var e,t=this.value(),n=this.type();if(this.typeMap[n]&&this.typeMap[n].validate){var o=this.typeMap[n].validate;e="function"==typeof o?o(t):o.test(t)}else e=!0;return e?this.uiSelect.removeClass("input-error"):this.uiSelect.addClass("input-error"),e},show:function(){this.uiSelect.show(),this._resize()},hide:function(){this.uiSelect.hide()}})}(jQuery),function(e){var t=function(e){var t=RED.utils.parseContextKey(e);return{option:t.store,value:t.key}},n=function(e,t){if(!t)return e;var n="string"==typeof t?t:t.value;return n!==RED.settings.context.default?"#:("+n+")::"+e:e},o={msg:{value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression},flow:{value:"flow",label:"flow.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:t,export:n},global:{value:"global",label:"global.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:t,export:n},str:{value:"str",label:"string",icon:"red/images/typedInput/az.png"},num:{value:"num",label:"number",icon:"red/images/typedInput/09.png",validate:/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/},bool:{value:"bool",label:"boolean",icon:"red/images/typedInput/bool.png",options:["true","false"]},json:{value:"json",label:"JSON",icon:"red/images/typedInput/json.png",validate:function(e){try{return JSON.parse(e),!0}catch(e){return!1}},expand:function(){var e=this,t=this.value();try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){}RED.editor.editJSON({value:t,complete:function(t){var n=t;try{n=JSON.stringify(JSON.parse(t))}catch(e){}e.value(n)}})}},re:{value:"re",label:"regular expression",icon:"red/images/typedInput/re.png"},date:{value:"date",label:"timestamp",hasValue:!1},jsonata:{value:"jsonata",label:"expression",icon:"red/images/typedInput/expr.png",validate:function(e){try{return jsonata(e),!0}catch(e){return!1}},expand:function(){var e=this;RED.editor.editExpression({value:this.value().replace(/\t/g,"\n"),complete:function(t){e.value(t.replace(/\n/g,"\t"))}})}},bin:{value:"bin",label:"buffer",icon:"red/images/typedInput/bin.png",expand:function(){var e=this;RED.editor.editBuffer({value:this.value(),complete:function(t){e.value(t)}})}},env:{value:"env",label:"env",icon:"red/images/typedInput/env.png"},camsg:{value:"camsg",label:"$msg."},caflow:{value:"caflow",label:"$flow."},caglobal:{value:"caglobal",label:"$global."},caprops:{value:"caprops",label:"$props."},caenv:{value:"caenv",label:"$env."},cavars:{value:"cavars",label:"$vars."}},i=!1;e.widget("nodered.typedInputLong",{_create:function(){try{if(!i&&RED){for(var t in o)if(o.hasOwnProperty(t))switch(t){case"str":o[t].label="string";break;case"num":o[t].label="number";break;case"re":o[t].label="regular expression";break;case"bool":o[t].label="boolean";break;case"json":o[t].label="JSON";break;case"bin":o[t].label="buffer";break;case"date":o[t].label="timestamp";break;case"jsonata":o[t].label="expression";break;case"msg":o[t].label="msg.";break;case"flow":o[t].label="flow.";break;case"global":o[t].label="global.";break;case"camsg":o[t].label="msg.";break;case"caflow":o[t].label="flow.";break;case"caglobal":o[t].label="global.";break;case"caprops":o[t].label="props.";break;case"caenv":o[t].label="env.";break;case"cavars":o[t].label="vars.";break;default:o[t].label=t}var n=RED.settings.context.stores.map(function(e){return{value:e,label:e,icon:'<i class="red-ui-typedInput-icon fa fa-database" style="color: #'+("memory"===e?"ddd":"777")+'"></i>'}});n.length<2?(o.flow.options=[],o.global.options=[]):(o.flow.options=n,o.global.options=n)}i=!0;var a=this;this.disarmClick=!1,this.input=e('<input type="text"></input>'),this.input.insertAfter(this.element),this.input.val(this.element.val()),this.element.addClass("red-ui-typedInput"),this.uiWidth=this.element.outerWidth(),this.elementDiv=this.input.wrap("<div>").parent().addClass("red-ui-typedInput-input"),this.uiSelect=this.elementDiv.wrap("<div>").parent();var s,r=this.element.attr("style");if(null!==(s=/width\s*:\s*(calc\s*\(.*\)|\d+(%|px))/i.exec(r))?(this.input.css("width","100%"),this.uiSelect.width(s[1]),this.uiWidth=null):this.uiSelect.width(this.uiWidth),["Right","Left"].forEach(function(e){var t=a.element.css("margin"+e);a.uiSelect.css("margin"+e,t),a.input.css("margin"+e,0)}),["type","placeholder","data-i18n"].forEach(function(e){var t=a.element.attr(e);a.input.attr(e,t)}),this.uiSelect.addClass("red-ui-typedInput-container-long"),this.element.attr("type","hidden"),this.options.types=this.options.types||Object.keys(o),this.selectTrigger=e('<button tabindex="0"></button>').prependTo(this.uiSelect),e('<i class="red-ui-typedInput-icon fa fa-sort-desc"></i>').toggle(this.options.types.length>1).appendTo(this.selectTrigger),this.selectLabel=e('<span class="red-ui-typedInput-type-label"></span>').appendTo(this.selectTrigger),this.types(this.options.types),this.options.typeField){this.typeField=e(this.options.typeField).hide();var l=this.typeField.val();l&&this.typeMap[l]&&(this.options.default=l)}else this.typeField=e("<input>",{type:"hidden"}).appendTo(this.uiSelect);this.input.on("focus",function(){a.uiSelect.addClass("red-ui-typedInput-focus")}),this.input.on("blur",function(){a.uiSelect.removeClass("red-ui-typedInput-focus")}),this.input.on("change",function(){a.validate(),a.element.val(a.value()),a.element.trigger("change",a.propertyType,a.value())}),this.selectTrigger.click(function(e){e.preventDefault(),a._showTypeMenu()}),this.selectTrigger.on("keydown",function(e){40===e.keyCode&&a._showTypeMenu()}).on("focus",function(){a.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionSelectTrigger=e('<button tabindex="0" class="red-ui-typedInput-option-trigger" style="display:inline-block"><span class="red-ui-typedInput-option-caret"><i class="red-ui-typedInput-icon fa fa-sort-desc"></i></span></button>').appendTo(this.uiSelect),this.optionSelectLabel=e('<span class="red-ui-typedInput-option-label"></span>').prependTo(this.optionSelectTrigger),RED.popover.tooltip(this.optionSelectLabel,function(){return a.optionValue}),this.optionSelectTrigger.click(function(e){e.preventDefault(),a._showOptionSelectMenu()}).on("keydown",function(e){40===e.keyCode&&a._showOptionSelectMenu()}).on("blur",function(){a.uiSelect.removeClass("red-ui-typedInput-focus")}).on("focus",function(){a.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionExpandButton=e('<button tabindex="0" class="red-ui-typedInput-option-expand" style="display:inline-block"><i class="red-ui-typedInput-icon fa fa-ellipsis-h"></i></button>').appendTo(this.uiSelect),this.type(this.options.default||this.typeList[0].value)}catch(e){console.log(e.stack)}},_showTypeMenu:function(){this.typeList.length>1?(this._showMenu(this.menu,this.selectTrigger),this.menu.find("[value='"+this.propertyType+"']").focus()):this.input.focus()},_showOptionSelectMenu:function(){if(this.optionMenu){this.optionMenu.css({minWidth:this.optionSelectLabel.width()}),this._showMenu(this.optionMenu,this.optionSelectTrigger);var e=this.optionMenu.find("[value='"+this.optionValue+"']");0===e.length&&(e=this.optionMenu.children(":first")),e.focus()}},_hideMenu:function(t){e(document).off("mousedown.close-property-select"),t.hide(),this.elementDiv.is(":visible")?this.input.focus():this.optionSelectTrigger.is(":visible")?this.optionSelectTrigger.focus():this.selectTrigger.focus()},_createMenu:function(t,n){var o=this,i=e("<div>").addClass("red-ui-typedInput-options");return t.forEach(function(t){"string"==typeof t&&(t={value:t,label:t});var a=e('<a href="#"></a>').attr("value",t.value).appendTo(i);t.label&&a.text(t.label),t.icon?0===t.icon.indexOf("<")?e(t.icon).prependTo(a):-1!==t.icon.indexOf("/")?e("<img>",{src:t.icon,style:"margin-right: 4px; height: 18px;"}).prependTo(a):e("<i>",{class:"red-ui-typedInput-icon "+t.icon}).prependTo(a):a.css({paddingLeft:"18px"}),t.icon||t.label||a.text(t.value),a.click(function(e){e.preventDefault(),n(t.value),o._hideMenu(i)})}),i.css({display:"none"}),i.appendTo(document.body),i.on("keydown",function(t){40===t.keyCode?e(this).children(":focus").next().focus():38===t.keyCode?e(this).children(":focus").prev().focus():27===t.keyCode&&o._hideMenu(i)}),i},_showMenu:function(t,n){if(this.disarmClick)this.disarmClick=!1;else{var o=this,i=n.offset(),a=n.height(),s=t.height(),r=a+i.top-3;r+s>e(window).height()&&(r-=r+s-e(window).height()+5),t.css({top:r+"px",left:2+i.left+"px"}),t.slideDown(100),this._delay(function(){o.uiSelect.addClass("red-ui-typedInput-focus"),e(document).on("mousedown.close-property-select",function(i){e(i.target).closest(t).length||o._hideMenu(t),e(i.target).closest(n).length&&(o.disarmClick=!0,i.preventDefault())})})}},_getLabelWidth:function(t){var n=t.outerWidth();if(0===n){var o=e('<div class="red-ui-typedInput-container-long"></div>').css({position:"absolute",top:0,left:-1e3}).appendTo(document.body);n=t.clone().appendTo(o).outerWidth(),o.remove()}return n},_resize:function(){null!==this.uiWidth&&this.uiSelect.width(this.uiWidth);var e=this.typeMap[this.propertyType];if(e&&!1===e.hasValue)this.selectTrigger.addClass("red-ui-typedInput-full-width");else{this.selectTrigger.removeClass("red-ui-typedInput-full-width");var t=this._getLabelWidth(this.selectTrigger);if(this.elementDiv.css("left",t+"px"),this.optionExpandButton.is(":visible")?this.elementDiv.css("right","22px"):(this.elementDiv.css("right","0"),this.input.css({"border-top-right-radius":"4px","border-bottom-right-radius":"4px"})),this.optionSelectTrigger)if(e&&e.options&&!0===e.hasValue){this.optionSelectLabel.css({left:"auto"});var n=this._getLabelWidth(this.optionSelectLabel);this.optionSelectTrigger.css({width:23+n+"px"}),this.elementDiv.css("right",23+n+"px"),this.input.css({"border-top-right-radius":0,"border-bottom-right-radius":0})}else this.optionSelectLabel.css({left:"0"}),this.optionSelectTrigger.css({width:"calc( 100% - "+t+"px )"}),this.optionExpandButton.is(":visible")||(this.elementDiv.css({right:0}),this.input.css({"border-top-right-radius":"4px","border-bottom-right-radius":"4px"}))}},_updateOptionSelectLabel:function(t){var n=this.typeMap[this.propertyType];this.optionSelectLabel.empty(),t.icon?0===t.icon.indexOf("<")?e(t.icon).prependTo(this.optionSelectLabel):-1!==t.icon.indexOf("/")?e("<img>",{src:t.icon,style:"height: 18px;"}).prependTo(this.optionSelectLabel):e("<i>",{class:"red-ui-typedInput-icon "+t.icon}).prependTo(this.optionSelectLabel):t.label?this.optionSelectLabel.text(t.label):this.optionSelectLabel.text(t.value),n.hasValue&&(this.optionValue=t.value,this._resize(),this.input.trigger("change",this.propertyType,this.value()))},_destroy:function(){this.optionMenu&&this.optionMenu.remove(),this.menu.remove()},types:function(e){var t=this,n=this.type();this.typeMap={},this.typeList=e.map(function(e){var n;return n="string"==typeof e?o[e]:e,t.typeMap[n.value]=n,n}),this.selectTrigger.toggleClass("disabled",1===this.typeList.length),this.selectTrigger.find(".fa-sort-desc").toggle(this.typeList.length>1),this.menu&&this.menu.remove(),this.menu=this._createMenu(this.typeList,function(e){t.type(e)}),n&&!this.typeMap.hasOwnProperty(n)?this.type(this.typeList[0].value):(this.propertyType=null,this.type(n)),setTimeout(function(){t._resize()},0)},width:function(e){this.uiWidth=e,this._resize()},value:function(e){if(!arguments.length){var t=this.input.val();return this.typeMap[this.propertyType].export&&(t=this.typeMap[this.propertyType].export(t,this.optionValue)),t}var n;if(this.typeMap[this.propertyType].options){for(var o=0;o<this.typeMap[this.propertyType].options.length;o++){var i=this.typeMap[this.propertyType].options[o];if("string"==typeof i){if(i===e){n=this.activeOptions[i];break}}else if(i.value===e){n=i;break}}n||(n={value:""}),this._updateOptionSelectLabel(n)}this.input.val(e),this.input.trigger("change",this.type(),e)},type:function(t){if(!arguments.length)return this.propertyType;var n=this,o=this.typeMap[t];if(o&&this.propertyType!==t){var i;if(this.propertyType=t,this.typeField&&this.typeField.val(t),this.selectLabel.empty(),o.icon?0===o.icon.indexOf("<")?e(o.icon).prependTo(this.selectLabel):-1!==o.icon.indexOf("/")?((i=new Image).name=o.icon,i.src=o.icon,e("<img>",{src:o.icon,style:"margin-right: 4px;height: 18px;"}).prependTo(this.selectLabel)):e("<i>",{class:"red-ui-typedInput-icon "+o.icon}).prependTo(this.selectLabel):this.selectLabel.text(o.label),this.optionMenu&&(this.optionMenu.remove(),this.optionMenu=null),o.options){var a;if(this.optionExpandButton&&this.optionExpandButton.hide(),this.optionSelectTrigger)if(this.optionSelectTrigger.show(),o.hasValue?this.elementDiv.show():this.elementDiv.hide(),this.activeOptions={},o.options.forEach(function(e){"string"==typeof e?n.activeOptions[e]={label:e,value:e}:n.activeOptions[e.value]=e}),n.activeOptions.hasOwnProperty(n.optionValue)||(n.optionValue=null),this.optionMenu=this._createMenu(o.options,function(e){n._updateOptionSelectLabel(n.activeOptions[e]),o.hasValue||n.value(n.activeOptions[e].value)}),o.hasValue){var s=this.optionValue||o.options[0];if(o.parse){var r=o.parse(this.input.val());r.option&&(s=r.option,this.activeOptions.hasOwnProperty(s)||(r.option=Object.keys(this.activeOptions)[0],s=r.option)),this.input.val(r.value),o.export&&this.element.val(o.export(r.value,r.option||s))}"string"==typeof s?(this.optionValue=s,this.activeOptions.hasOwnProperty(s)||(s=Object.keys(this.activeOptions)[0]),s?this._updateOptionSelectLabel(this.activeOptions[s]):this.optionSelectTrigger.hide()):s?(this.optionValue=s.value,this._updateOptionSelectLabel(s)):this.optionSelectTrigger.hide()}else{for(var l=this.input.val(),d=!1,c=0;c<o.options.length;c++){if("string"==typeof(a=o.options[c])&&a===l){n._updateOptionSelectLabel({value:l}),d=!0;break}if(a.value===l){n._updateOptionSelectLabel(a),d=!0;break}}d||("string"==typeof(a=o.options[0])?(this.value(a),n._updateOptionSelectLabel({value:a})):(this.value(a.value),n._updateOptionSelectLabel(a)))}this.input.trigger("change",this.propertyType,this.value())}else this.optionSelectTrigger&&this.optionSelectTrigger.hide(),!1===o.hasValue?(this.oldValue=this.input.val(),this.input.val(""),this.elementDiv.hide()):(void 0!==this.oldValue&&(this.input.val(this.oldValue),delete this.oldValue),this.elementDiv.show()),this.optionExpandButton&&(o.expand&&"function"==typeof o.expand?(this.optionExpandButton.show(),this.optionExpandButton.off("click"),this.optionExpandButton.on("click",function(e){e.preventDefault(),o.expand.call(n)})):this.optionExpandButton.hide()),this.input.trigger("change",this.propertyType,this.value());i?(i.onload=function(){n._resize()},i.onerror=function(){n._resize()}):this._resize()}},validate:function(){var e,t=this.value(),n=this.type();if(this.typeMap[n]&&this.typeMap[n].validate){var o=this.typeMap[n].validate;e="function"==typeof o?o(t):o.test(t)}else e=!0;return e?this.uiSelect.removeClass("input-error"):this.uiSelect.addClass("input-error"),e},show:function(){this.uiSelect.show(),this._resize()},hide:function(){this.uiSelect.hide()}})}(jQuery),RED.actions=function(){var e={};return{add:function(t,n){e[t]=n},remove:function(t){delete e[t]},get:function(t){return e[t]},invoke:function(t,n){e.hasOwnProperty(t)&&e[t](n)},list:function(){var t=[];return Object.keys(e).forEach(function(e){var n=RED.keyboard.getShortcut(e);t.push({id:e,scope:n?n.scope:void 0,key:n?n.key:void 0,user:n?n.user:void 0})}),t}}}(),RED.deploy=function(){var e="full",t=!1,n=null;let o=null,i=!1,a=!1;function s(e,t){var o=$("<div>");$('<p data-i18n="deploy.confirm.conflict"></p>').appendTo(o);var i=$('<div id="node-dialog-confirm-deploy-conflict-checking" class="node-dialog-confirm-conflict-row"><img src="red/images/spin.svg"/><div data-i18n="deploy.confirm.conflictChecking"></div></div>').appendTo(o),a=$('<div class="node-dialog-confirm-conflict-row"><i style="color: #3a3;" class="fa fa-check"></i><div data-i18n="deploy.confirm.conflictAutoMerge"></div></div>').hide().appendTo(o),s=$('<div id="node-dialog-confirm-deploy-conflict-manual-merge" class="node-dialog-confirm-conflict-row"><i style="color: #999;" class="fa fa-exclamation"></i><div data-i18n="deploy.confirm.conflictManualMerge"></div></div>').hide().appendTo(o);o.i18n(),n=null;var r=[{text:"Cancel",click:function(){d.close()}},{id:"node-dialog-confirm-deploy-review",text:"Review changes",class:"primary disabled",click:function(){$("#node-dialog-confirm-deploy-review").hasClass("disabled")||(RED.diff.showRemoteDiff(),d.close())}},{id:"node-dialog-confirm-deploy-merge",text:"Merge",class:"primary disabled",click:function(){$("#node-dialog-confirm-deploy-merge").hasClass("disabled")||(RED.diff.mergeDiff(n),d.close())}}];t&&r.push({id:"node-dialog-confirm-deploy-overwrite",text:"Ignore & deploy",class:"primary",click:function(){l(!0,t),d.close()}});var d=RED.notify(o,{modal:!0,fixed:!0,width:600,buttons:r}),c=Date.now();RED.diff.getRemoteDiff(function(e){var t=Math.max(1e3-(Date.now()-c),0);n=e,setTimeout(function(){i.hide(),0===Object.keys(e.conflicts).length?(a.show(),$("#node-dialog-confirm-deploy-merge").removeClass("disabled")):s.show(),$("#node-dialog-confirm-deploy-review").removeClass("disabled")},t)})}function r(){var e=Date.now();$(".deploy-button-content").css("opacity",0),$(".save-button-spinner").show();var n=!$("#btn-save").hasClass("disabled");$("#btn-save").addClass("disabled"),t=!0,$.ajax({url:"flows",type:"POST",headers:{"kumologica-core-Deployment-Type":"reload"}}).done(function(e,t,o){n&&$("#btn-save").removeClass("disabled"),RED.notify("<p>Flow restarted</p>","success")}).fail(function(e,t,o){n&&$("#btn-save").removeClass("disabled"),401===e.status?RED.notify("Deployed failed: User not authorized"):409===e.status?RED.notify("Deploy failed: Server running a most recent version of the flow"):e.responseText?RED.notify(`Deploy failed: ${e.responseText}`):RED.notify("Deploy failed: No response from server")}).always(function(){t=!1;var n=Math.max(0,300-(Date.now()-e));setTimeout(function(){$(".deploy-button-content").css("opacity",1),$(".save-button-spinner").hide()},n)})}function l(n,o,i){if(console.log("[deploy] save method invoked!. dirty=? force=?",a,o),RED.sidebar.test.refreshTab(!0),a){RED.header.changeProjectStatus("Deploying...");var r=RED.nodes.createCompleteNodeSet(),l={flows:r};o||(l.rev=RED.nodes.version()),t=!0,console.log("[deploy] Deploying..."),$.ajax({url:"flows",type:"POST",data:JSON.stringify(l),contentType:"application/json; charset=utf-8",headers:{"kumologica-core-Deployment-Type":e}}).done(function(e,t,n){RED.nodes.dirty(!1),RED.nodes.version(e.rev),RED.nodes.originalFlow(r),RED.nodes.eachNode(function(e){e.changed&&(e.dirty=!0,e.changed=!1),e.moved&&(e.dirty=!0,e.moved=!1),e.credentials&&delete e.credentials}),RED.nodes.eachConfig(function(e){e.changed=!1,e.credentials&&delete e.credentials}),RED.nodes.eachSubflow(function(e){e.changed=!1}),RED.nodes.eachWorkspace(function(e){e.changed=!1}),RED.history.markAllDirty(),RED.view.redraw(),RED.events.emit("deploy")}).fail(function(e,t,n){console.log("[deploy] Deployment failed due to: ",n),RED.nodes.dirty(!0),401===e.status?RED.notify("Deploy failed: user not authorized","error"):409===e.status?s(0,!0):e.responseText?RED.notify(`Deploy failed: ${e.responseText}`,"error"):RED.notify("Deploy failed: no response from server","error")}).always(function(){window.__kumologica.debugger.redrawBreakpoints(),t=!1,setTimeout(function(){$(".deploy-button-content").css("opacity",1),$(".save-button-spinner").hide(),RED.header.changeProjectStatus("running")},600)})}else console.log("[deploy] Nothing to deploy!!"),RED.events.emit("deploy:finished")}return{init:function(){var e;o=window.__kumologica.libs.debounce(l,2e3),RED.actions.add("core:deploy-flows",l),RED.actions.add("core:restart-flows",r),RED.events.on("nodes:change:save-immediate",function(){l(0,!0)}),RED.events.on("editor:autosave:on",e=>{i=!0,l(0,!0)}),RED.events.on("editor:autosave:off",e=>{i=!1}),RED.events.on("nodes:change",function(e){a=e.dirty,e.dirty&&i?o(!0,!0,!0):e.dirty&&!i?RED.events.emit("editor:unsynced"):RED.events.emit("editor:synced"),RED.events.emit("deploy:finished")}),RED.comms.subscribe("notification/runtime-deploy",function(n,o){if(!e){RED.nodes.version(o.revision);let n=RED.nodes.version();if(null===n||t||n===o.revision)return;var i=$("<p>").text("The flows on the server have been updated.");e=RED.notify(i,{modal:!0,fixed:!0,buttons:[{text:"Ignore",click:function(){e.close(),e=null}},{text:"Review changes",class:"primary",click:function(){e.close(),s(RED.nodes.createCompleteNodeSet(),!1),e=null}}]})}})},setDeployInflight:function(e){t=e},save:l}}(),RED.keyboard=function(){var e,t=/Mac/i.test(window.navigator.platform),n={};RED.h=n;var o={left:37,up:38,right:39,down:40,escape:27,enter:13,backspace:8,delete:46,space:32,";":186,"=":187,",":188,"-":189,".":190,"/":191,"\\":220,"'":222,"?":191},a={16:!0,17:!0,18:!0,91:!0,93:!0},s={},r={},l={59:186,61:187,173:189};function d(e){for(var t,n=e.toLowerCase().split("-"),i={},a=0;a<n.length;a++)switch(n[a]){case"ctrl":case"cmd":i.ctrl=!0,i.meta=!0;break;case"alt":i.alt=!0;break;case"shift":i.shift=!0;break;case"":0,t=o["-"];break;default:if(o.hasOwnProperty(n[a]))t=o[n[a]];else{if(n[a].length>1)return null;t=n[a].toUpperCase().charCodeAt(0)}}return[t,i]}function c(e,t){for(var n=e.target,o=0;"BODY"!==n.nodeName&&n.id!==t.scope;)n=n.parentElement,o++;return"BODY"===n.nodeName&&"*"!==t.scope&&(o=-1),o}function p(e,t,o,i){var a=o,r=i;"function"!=typeof o&&"string"!=typeof o||(a={},r=o);var l=[],c=0;if("string"==typeof t){"string"==typeof r&&(s[r]={scope:e,key:t},"boolean"==typeof i&&(s[r].user=i));var p=t.split(" ");for(c=0;c<p.length;c++){var u=d(p[c]);if(!u)return;l.push(u)}}else l.push([t,a]);var f=n;for(c=0;c<l.length;c++)t=l[c][0],(a=l[c][1]).ctrl&&(f.ctrl=f.ctrl||{},f=f.ctrl),a.shift&&(f.shift=f.shift||{},f=f.shift),a.alt&&(f.alt=f.alt||{},f=f.alt),f[t]=f[t]||{},f=f[t];f.handlers=f.handlers||[],f.handlers.push({scope:e,ondown:r}),f.scope=e,f.ondown=r}function u(e,t){var o=t||{},i=[],a=0;if("string"==typeof e){var r=e.split(" ");for(a=0;a<r.length;a++){var l=d(r[a]);if(!l)return void console.log("Unrecognised key specifier:",e);i.push(l)}}else i.push([e,o]);var c=n;for(a=0;a<i.length;a++){if(e=i[a][0],(o=i[a][1]).ctrl&&(c=c.ctrl),c&&o.shift&&(c=c.shift),c&&o.alt&&(c=c.alt),!c[e])return;c=c[e]}"string"==typeof c.ondown&&("boolean"==typeof t&&t?s[c.ondown]={user:t}:delete s[c.ondown]),delete c.scope,delete c.ondown,delete c.handlers}d3.select(window).on("keydown",function(){if(!a[d3.event.keyCode]){var t=function t(o){var i=e||n;(o.ctrlKey||o.metaKey)&&(i=i.ctrl),i&&o.shiftKey&&(i=i.shift),i&&o.altKey&&(i=i.alt);var a=l[o.keyCode]||o.keyCode;if(i&&i[a]){var s=i[a];if(!s.handlers)return e?(e=null,t(o)):Object.keys(s).length>0?(e=s,o.preventDefault(),null):null;var r,d=1/0,p=0,u=s.handlers.length;for(p=0;p<u;p++){var f=c(o,s.handlers[p]);f>-1&&f<d&&(d=f,r=s.handlers[p])}return e=null,s=r}if(e)return e=null,t(o)}(d3.event);t&&t.ondown&&("string"==typeof t.ondown?RED.actions.invoke(t.ondown):t.ondown(),d3.event.preventDefault())}});function f(e){e.preventDefault();var t=$(this),n=t.data("data");if(!t.hasClass("keyboard-shortcut-entry-expanded")){h();var o=t.find(".keyboard-shortcut-entry-key"),i=t.find(".keyboard-shortcut-entry-scope");t.addClass("keyboard-shortcut-entry-expanded");var a=$('<input type="text">').attr("placeholder","Unassigned").val(n.key||"").appendTo(o);a.on("keyup",function(e){if(13===e.keyCode)return h();var t=$(this).val(),n=""===(t=t.trim())||RED.keyboard.validateKey(t);$(this).toggleClass("input-error",!n)});var s=$('<select><option value="*" data-i18n="keyboard.global"></option><option value="workspace" data-i18n="keyboard.workspace"></option></select>').appendTo(i);s.i18n(),s.val(n.scope||"*");var r=$('<div class="keyboard-shortcut-edit button-group-vertical"></div>').appendTo(i),l=$('<button class="editor-button editor-button-small"><i class="fa fa-check"></i></button>').appendTo(r),d=$('<button class="editor-button editor-button-small"><i class="fa fa-reply"></i></button>').appendTo(r);l.click(function(e){e.stopPropagation(),h()}),d.click(function(e){e.stopPropagation(),RED.keyboard.revertToDefault(n.id),t.empty(),t.removeClass("keyboard-shortcut-entry-expanded");var o=RED.keyboard.getShortcut(n.id),i=RED.settings.get("keymap")||{},a=RED.settings.get("editor")||{};(i=a.keymap||{})[n.id]=null,a.keymap=i,RED.settings.set("editor",a);var s={id:n.id,scope:o?o.scope:void 0,key:o?o.key:void 0,user:o?o.user:void 0};g(t,s)}),a.focus()}}function h(e){var t=$(".keyboard-shortcut-entry-expanded");if(1===t.length){var n=t.data("data"),o=t.find(".keyboard-shortcut-entry-key input"),i=t.find(".keyboard-shortcut-entry-scope select");if(!e){var a=o.val().trim(),s=i.val();if(""===a||RED.keyboard.validateKey(a)){var r=RED.keyboard.getShortcut(n.id);if(!r&&a||r&&(r.scope!==s||r.key!==a)){var l=t.find(".keyboard-shortcut-entry-key"),d=t.find(".keyboard-shortcut-entry-scope");l.empty(),d.empty(),n.key&&RED.keyboard.remove(n.key,!0),t.find(".keyboard-shortcut-entry-text i").css("opacity",1),""===a?(l.parent().addClass("keyboard-shortcut-entry-unassigned"),l.append($("<span>").text("Unassigned")),delete n.key,delete n.scope):(l.parent().removeClass("keyboard-shortcut-entry-unassigned"),l.append(RED.keyboard.formatKey(a)),$("<span>").text(s).appendTo(d),n.key=a,n.scope=s,RED.keyboard.add(n.scope,n.key,n.id,!0));var c=RED.settings.get("editor")||{},p=c.keymap||{};p[n.id]=RED.keyboard.getShortcut(n.id),c.keymap=p,RED.settings.set("editor",c)}}}o.remove(),i.remove(),$(".keyboard-shortcut-edit").remove(),t.removeClass("keyboard-shortcut-entry-expanded")}}function g(e,t){var n=$('<div class="keyboard-shortcut-entry">').appendTo(e);e.data("data",t);var o=t.id.replace(/(^.+:([a-z]))|(-([a-z]))/g,function(){return 0===arguments[5]?arguments[2].toUpperCase():" "+arguments[4].toUpperCase()}),i=$("<div>").addClass("keyboard-shortcut-entry-text").text(o).appendTo(n),a=$('<i class="fa fa-user"></i>').prependTo(i);t.user||a.css("opacity",0);var s=$('<div class="keyboard-shortcut-entry-key">').appendTo(n);t.key?s.append(RED.keyboard.formatKey(t.key)):(n.addClass("keyboard-shortcut-entry-unassigned"),s.append($("<span>").text("Unassigned")));var r=$('<div class="keyboard-shortcut-entry-scope">').appendTo(n);$("<span>").text("*"===t.scope?"global":t.scope||"").appendTo(r),e.click(f)}function v(){var e=$('<div id="user-settings-tab-keyboard"></div>');$('<div class="keyboard-shortcut-entry keyboard-shortcut-list-header"><div class="keyboard-shortcut-entry-key keyboard-shortcut-entry-text"><input id="user-settings-tab-keyboard-filter" type="text" data-i18n="[placeholder]keyboard.filterActions"></div><div class="keyboard-shortcut-entry-key" data-i18n="keyboard.shortcut"></div><div class="keyboard-shortcut-entry-scope" data-i18n="keyboard.scope"></div></div>').appendTo(e),e.find("input").searchBox({delay:100,change:function(){var e=$(this).val().trim();""===e?t.editableList("filter",null):(e=e.replace(/\s/g,""),t.editableList("filter",function(t){return t.id.toLowerCase().replace(/^.*:/,"").replace("-","").indexOf(e)>-1}))}});var t=$('<ol class="keyboard-shortcut-list"></ol>').css({position:"absolute",top:"32px",bottom:"0",left:"0",right:"0"}).appendTo(e).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){g(e,n)}}),n=RED.actions.list();return n.sort(function(e,t){var n=e.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase(),o=t.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase();return n.localeCompare(o)}),n.forEach(function(e){t.editableList("addItem",e)}),e}return{init:function(){!function(){if("localStorage"in window&&null!==window.localStorage){var e=localStorage.getItem("keymap");if(null!==e){localStorage.removeItem("keymap");var t=RED.settings.get("editor")||{};t.keymap=JSON.parse(e),RED.settings.set("editor",t)}}}();var e=(RED.settings.get("editor")||{}).keymap||{};$.getJSON("red/keymap.json",function(t){for(var n in t)if(t.hasOwnProperty(n)){var o=t[n];for(var i in o)o.hasOwnProperty(i)&&(e.hasOwnProperty(o[i])||p(n,i,o[i],!1),r[o[i]]={scope:n,key:i,user:!1})}for(var a in e)if(e.hasOwnProperty(a)){var s=e[a];s.hasOwnProperty("key")&&p(s.scope,s.key,a,!0)}}),RED.userSettings.add({id:"keyboard",title:"keyboard",get:v,focus:function(){setTimeout(function(){$("#user-settings-tab-keyboard-filter").focus()},200)}})},add:p,remove:u,getShortcut:function(e){return s[e]},revertToDefault:function(e){var t=s[e];if(t&&u(t.key),r.hasOwnProperty(e)){var n=r[e];p(n.scope,n.key,e,!1)}},formatKey:function(e,n){var o=t?e.replace(/ctrl-?/,"⌘"):e;return o=(o=(o=(o=(o=(o=t?o.replace(/alt-?/,"⌥"):e).replace(/shift-?/,"⇧")).replace(/left/,"←")).replace(/up/,"↑")).replace(/right/,"→")).replace(/down/,"↓"),n?o:'<span class="help-key-block"><span class="help-key">'+o.split(" ").join('</span> <span class="help-key">')+"</span></span>"},validateKey:function(e){console.log("[keyboard] validateKey:",e);var t=(e=e.trim()).split(" ");for(i=0;i<t.length;i++)if(!d(t[i]))return!1;return!0}}}(),RED.workspaces=function(){var e,t=0,n=0;function o(t,o,i){if(t)e.addTab(t,i),e.resize();else{var a=RED.nodes.id();do{n+=1}while(0!==$("#workspace-tabs a[title='"+RED._("workspace.defaultName",{number:n})+"']").size());t={type:"tab",id:a,disabled:!1,info:"",label:RED._("workspace.defaultName",{number:n})},RED.nodes.addWorkspace(t,i),e.addTab(t,i),e.activateTab(a),o||(RED.history.push({t:"add",workspaces:[t],dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0))}return RED.view.focus(),t}function i(e){if(1!==s){var t=RED.nodes.getWorkspaceOrder();e._index=t.indexOf(e.id),c(e);var n=RED.nodes.removeWorkspace(e.id);n.t="delete",n.dirty=RED.nodes.dirty(),n.workspaces=[e],RED.history.push(n),RED.nodes.dirty(!0),RED.sidebar.config.refresh()}}function a(t){var n,o=RED.nodes.workspace(t);RED.view.state(RED.state.EDITING);var i={title:RED._("workspace.editFlow",{name:o.label}),buttons:[{id:"node-dialog-cancel",text:"Close",click:function(){RED.tray.close()}},{id:"node-dialog-ok",class:"primary",text:"Save",click:function(){var t=$("#node-input-name").val(),i=!1,a={};o.label!=t&&(a.label=o.label,i=!0,o.label=t,e.renameTab(o.id,t));var s=$("#node-input-disabled").prop("checked");o.disabled!==s&&(a.disabled=o.disabled,i=!0,o.disabled=s);var r=n.getValue();if(o.info!==r&&(a.info=o.info,i=!0,o.info=r),$("#red-ui-tab-"+o.id.replace(".","-")).toggleClass("workspace-disabled",!!o.disabled),$("#workspace").toggleClass("workspace-disabled",!!o.disabled),i){var l={t:"edit",changes:a,node:o,dirty:RED.nodes.dirty()};o.changed=!0,RED.history.push(l),RED.nodes.dirty(!0),RED.sidebar.config.refresh();var d=RED.view.selection();d.nodes||d.links||RED.sidebar.info.refresh(o),a.hasOwnProperty("disabled")&&(RED.nodes.eachNode(function(e){e.z===o.id&&(e.dirty=!0)}),RED.view.redraw())}RED.tray.close()}}],resize:function(e){for(var t=$("#dialog-form>div:not(.node-text-editor-row)"),o=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),i=0;i<t.size();i++)o-=$(t[i]).outerHeight(!0);o-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",o+"px"),n.resize()},open:function(e){var t=e.find(".editor-tray-body"),i=$('<form id="dialog-form" class="form-horizontal"></form>').appendTo(t);$('<div class="form-row"><label for="node-input-name" data-i18n="[append]editor:common.label.name"><i class="fa fa-tag"></i> </label><input type="text" id="node-input-name"></div>').appendTo(i),$('<div class="form-row"><label for="node-input-disabled-btn" data-i18n="editor:workspace.status"></label><button type="button" id="node-input-disabled-btn" class="editor-button"><i class="fa fa-toggle-on"></i> <span id="node-input-disabled-label"></span></button> <input type="checkbox" id="node-input-disabled" style="display: none;"/></div>').appendTo(i);$('<div class="form-row node-text-editor-row"><label for="node-input-info" data-i18n="editor:workspace.info" style="width:300px;"></label><div style="min-height:250px;" class="node-text-editor" id="node-input-info"></div></div>').appendTo(i);n=RED.editor.createEditor({id:"node-input-info",mode:"ace/mode/markdown",value:""}),$("#node-info-input-info-expand").click(function(e){e.preventDefault();var t=n.getValue();RED.editor.editMarkdown({value:t,width:"Infinity",cursor:n.getCursorPosition(),complete:function(e,t){n.setValue(e,-1),n.gotoLine(t.row+1,t.column,!1),setTimeout(function(){n.focus()},300)}})}),i.find("#node-input-disabled-btn").on("click",function(e){var t=$(this).find("i");t.hasClass("fa-toggle-off")?(t.addClass("fa-toggle-on"),t.removeClass("fa-toggle-off"),$("#node-input-disabled").prop("checked",!1),$("#node-input-disabled-label").text(RED._("editor:workspace.enabled"))):(t.addClass("fa-toggle-off"),t.removeClass("fa-toggle-on"),$("#node-input-disabled").prop("checked",!0),$("#node-input-disabled-label").text(RED._("editor:workspace.disabled")))}),o.hasOwnProperty("disabled")?($("#node-input-disabled").prop("checked",o.disabled),o.disabled?(i.find("#node-input-disabled-btn i").removeClass("fa-toggle-on").addClass("fa-toggle-off"),$("#node-input-disabled-label").text(RED._("editor:workspace.disabled"))):$("#node-input-disabled-label").text(RED._("editor:workspace.enabled"))):(o.disabled=!1,$("#node-input-disabled-label").text(RED._("editor:workspace.enabled"))),$('<input type="text" style="display: none;" />').prependTo(i),i.submit(function(e){e.preventDefault()}),$("#node-input-name").val(o.label),RED.text.bidi.prepareInput($("#node-input-name")),n.getSession().setValue(o.info||"",-1),i.i18n()},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(o),n.destroy()}};RED.tray.show(i)}var s=0;function r(){e=RED.tabs.create({id:"workspace-tabs",onchange:function(e){var n={old:t};t=e.id,n.workspace=t,RED.events.emit("workspace:change",n),window.location.hash="flow/"+e.id,$("#workspace").toggleClass("workspace-disabled",!!e.disabled),RED.sidebar.config.refresh(),RED.view.focus()},onclick:function(e){RED.view.focus()},ondblclick:function(e){"subflow"!=e.type?a(e.id):RED.editor.editSubflow(RED.nodes.subflow(e.id))},onadd:function(e){"tab"===e.type&&s++,$('<span class="workspace-disabled-icon"><i class="fa fa-ban"></i> </span>').prependTo("#red-ui-tab-"+e.id.replace(".","-")+" .red-ui-tab-label"),e.disabled&&$("#red-ui-tab-"+e.id.replace(".","-")).addClass("workspace-disabled"),RED.menu.setDisabled("menu-item-workspace-delete",s<=1),1===s&&($("#workspace .red-ui-tabs").show(),$("#chart").show(),$("#workspace-footer").children().show())},onremove:function(e){"tab"===e.type&&s--,RED.menu.setDisabled("menu-item-workspace-delete",s<=1),0===s&&l()},onreorder:function(e,t){RED.history.push({t:"reorder",order:e,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),p(t)},onselect:function(e){RED.view.select(!1),0===e.length?($("#chart svg").css({"pointer-events":"auto",filter:"none"}),$("#workspace-toolbar").css({"pointer-events":"auto",filter:"none"}),$("#palette-container").css({"pointer-events":"auto",filter:"none"}),$(".sidebar-shade").hide()):(RED.view.select(!1),$("#chart svg").css({"pointer-events":"none",filter:"opacity(60%)"}),$("#workspace-toolbar").css({"pointer-events":"none",filter:"opacity(60%)"}),$("#palette-container").css({"pointer-events":"none",filter:"opacity(60%)"}),$(".sidebar-shade").show())},minimumActiveTabWidth:150,scrollable:!0,addButton:"core:add-flow",addButtonCaption:RED._("workspace.addFlow"),searchButton:"core:list-flows",searchButtonCaption:RED._("workspace.listFlows")}),s=0}function l(){$("#workspace .red-ui-tabs").hide(),$("#chart").hide(),$("#workspace-footer").children().hide()}function d(e){a(e||t)}function c(n){n?(e.contains(n.id)&&e.removeTab(n.id),n.id===t&&(t=0)):i(RED.nodes.workspace(t))}function p(t){RED.nodes.setWorkspaceOrder(t.filter(function(e){return void 0!==RED.nodes.workspace(e)})),e.order(t)}return{init:function(){r(),RED.events.on("sidebar:resize",e.resize),RED.actions.add("core:show-next-tab",e.nextTab),RED.actions.add("core:show-previous-tab",e.previousTab),RED.menu.setAction("menu-item-workspace-delete",function(){i(RED.nodes.workspace(t))}),$(window).resize(function(){e.resize()}),RED.actions.add("core:add-flow",function(e){o(void 0,void 0,e?e.index:void 0)}),RED.actions.add("core:edit-flow",d),RED.actions.add("core:remove-flow",c),RED.actions.add("core:list-flows",function(){RED.actions.invoke("core:search","type:tab ")}),l()},add:o,remove:c,order:p,edit:d,contains:function(t){return e.contains(t)},count:function(){return s},active:function(){return t},selection:function(){return e.selection()},show:function(t){if(!e.contains(t)){var n=RED.nodes.subflow(t);if(!n)return;o({type:"subflow",id:t,icon:"red/images/subflow_tab.png",label:n.name,closeable:!0})}e.activateTab(t)},refresh:function(){RED.nodes.eachWorkspace(function(t){e.renameTab(t.id,t.label)}),RED.nodes.eachSubflow(function(t){e.contains(t.id)&&e.renameTab(t.id,t.name)}),RED.sidebar.config.refresh()},resize:function(){e.resize()}}}(),RED.view=function(){var e,t,n=5e3,o=5e3,i=.75,a=1,s=45,r=45,d=1e3,c=0,p=[],u=0,f={},h=20,g=!1,v=!1,b=null,m=[],y=[],w=[],x={},D=null,E=null,k=null,R=null,T=0,_=null,j=[0,0],C=null,S=0,O=[],I=null,N=null,P=!1,L=null,z=null,A=0,M=0,B=[],U=null,q=-1,F="",J={red:"red",green:"#5a8",yellow:"#F9DF31",blue:"#53A3F3",grey:"#d3d3d3"},W=1,V=0,G=$("#chart"),K=d3.select("#chart").append("svg:svg").attr("width",n).attr("height",o).attr("pointer-events","all").style("cursor","crosshair").on("mousedown",function(){Be()}).on("contextmenu",function(){d3.event.preventDefault()});let H=[{title:"Paste",shortcut:"Ctrl+V",action:async function(e,t,n){RED.actions.invoke("core:paste-from-internal-clipboard")}},{title:"Search Node...",shortcut:"Ctrl+F",action:async function(e,t,n){$("#btn-search").click(),d3.event.stopPropagation()}},{separator:!0},{title:"Clear All Breakpoints",action:async function(e,t,n){await window.__kumologica.debugger.removeAllBreakpoints(),await async function(){let e=(await window.__kumologica.debugger.listBreakpoints()).body;m.filter(e=>"main.flow"===e.z).forEach(t=>{t.dirty=!0,e.includes(t.id)?t.status={fill:"red",shape:"dot"}:t.status={}})}(),Me()}},{separator:!0},{title:"Run TestCase",shortcut:"",action:async function(e,t,n){$("#red-ui-tab-test-link-button").click(),$("#test-sidebar-run-btn").click()}},{title:"Debug TestCase",shortcut:"",action:async function(e,t,n){$("#red-ui-tab-test-link-button").click(),$("#test-sidebar-debug-btn").click()}},{separator:!0},{title:"Toggle Navigator",shortcut:"",action:async function(e,t,n){RED.view.navigator.toggle()}},{title:"Automatic Layout",shortcut:"",action:async function(e,t,n){We()}},{separator:!0},{title:"Open Node Library",shortcut:"",action:async function(e,t,n){$("#launch-node-library").click()}},{title:"Add Node...",shortcut:"Ctrl+Click",action:async function(e,t,n){d3.event.stopPropagation();let o={ctrlKey:!0,metaKey:!0,screenX:d3.event.screenX,screenY:d3.event.screenY,clientX:d3.event.clientX,clientY:d3.event.clientY,offsetX:d3.event.offsetX,offsetY:d3.event.offsetY};S=RED.state.DEFAULT;var i=new MouseEvent("mousedown",o);d3.select("g.innerCanvas").node().dispatchEvent(i)}}],X=K.append("svg:g").on("dblclick.zoom",null).append("svg:g").attr("class","innerCanvas").on("mousemove",de).on("mousedown",function(){var e;if(1===d3.event.button)return S=RED.state.PANNING,C=[d3.event.pageX,d3.event.pageY],void(B=[G.scrollLeft(),G.scrollTop()]);k||E||(D=null,me());0===S&&I&&(I.remove(),I=null);if((0===S||S===RED.state.QUICK_JOINING)&&(d3.event.metaKey||d3.event.ctrlKey)){var t=(e=d3.mouse(this))[0],n=e[1];RED.settings.get("editor").view["view-snap-grid"]&&(e[0]=Math.round(e[0]/h)*h,e[1]=Math.round(e[1]/h)*h),d3.event.stopPropagation();var o=$("#main-container").position();S!==RED.state.QUICK_JOINING&&d3.event.isTrusted&&(S=RED.state.QUICK_JOINING,$(window).on("keyup",Ee)),!0,N&&N.remove(),(N=X.append("g").attr("transform","translate("+(e[0]-s/2)+","+(e[1]-r/2)+")")).append("rect").attr("class","node_placeholder").attr("rx",5).attr("ry",5).attr("width",s).attr("height",r).attr("fill","none");var i=void 0;oe.length>0&&(i=oe[0].virtualLink?{type:"link in"===oe[0].node.type?"link out":"link in"}:oe[0].portType===V?{input:!0}:{output:!0},U={node:oe[0].node,port:oe[0].port,portType:oe[0].portType},oe[0].virtualLink&&(U.virtualLink=!0),ae());var a,l,d=function(){if(U){U.el||(U.el=ee.append("svg:path").attr("class","drag_line"));var t=U.portType===V&&U.node.outputs||1,n=U.port,o=-(t-1)/2*13+13*n,i=U.portType===V?1:-1;U.el.attr("d",re(U.node.x+i*U.node.w/2,U.node.y+o,e[0]-i*s/2,e[1],i))}};U&&d(),RED.typeSearch.show({x:d3.event.clientX-o.left-s/2-(t-e[0]),y:d3.event.clientY-o.top+r/2+5-(n-e[1]),filter:i,cancel:function(){U&&(U.el&&U.el.remove(),U=null),!1,N&&N.remove(),De(),me(),ae(),Me()},add:function(t,n){var o=le(t);if(o){n&&(S=RED.state.QUICK_JOINING);var i=o.node,c=o.historyEvent;i.x=e[0],i.y=e[1];var p=RED.utils.getMessageProperty(RED.settings.get("editor"),"view.view-node-show-label");if(void 0===p||/^link (in|out)$/.test(i._def.type)||i._def.defaults.hasOwnProperty("l")||(i.l=p),U){var u,f,g=U,v=null;if(g.portType===V&&(i.inputs>0||g.virtualLink)?(v=g.node,f=g.port,u=i):g.portType===W&&(i.outputs>0||g.virtualLink)&&(v=i,u=g.node,f=0),null!==v){if(g.virtualLink){c={t:"multi",events:[c]};var b=$.extend(!0,{},{v:v.links}).v,m=$.extend(!0,{},{v:u.links}).v;v.links.push(u.id),u.links.push(v.id),v.dirty=!0,u.dirty=!0,c.events.push({t:"edit",node:v,dirty:RED.nodes.dirty(),changed:v.changed,changes:{links:b}}),c.events.push({t:"edit",node:u,dirty:RED.nodes.dirty(),changed:u.changed,changes:{links:m}}),v.changed=!0,u.changed=!0}else{var y={source:v,sourcePort:f,target:u};RED.nodes.addLink(y),c.links=[y]}n?(U.node=i,U.port=0):(U.el.remove(),U=null,S===RED.state.QUICK_JOINING&&(g.portType===V&&i.outputs>0?ie([{node:i,port:0,portType:V}]):!U&&g.portType===W&&i.inputs>0?ie([{node:i,port:0,portType:W}]):De()))}else ae(),De()}else n?i.outputs>0?U={node:i,port:0,portType:V}:i.inputs>0?U={node:i,port:0,portType:W}:De():S===RED.state.QUICK_JOINING&&(i.outputs>0?ie([{node:i,port:0,portType:V}]):i.inputs>0?ie([{node:i,port:0,portType:W}]):De());if(RED.history.push(c),RED.nodes.add(i),RED.editor.validateNode(i),RED.nodes.dirty(!0),ve(),i.selected=!0,O.push({n:i}),se(),me(),Me(),void 0!==a){var w=a+l/2,x=i.x-i.w/2,D=x-w;D!=2*h&&(i.x=i.x+2*h-D,i.dirty=!0,i.x=Math.ceil(i.x/h)*h,Me())}n?(void 0===a&&setTimeout(function(){RED.typeSearch.refresh({filter:{input:!0}})},100),a=i.x,l=i.w,e[0]=i.x+i.w/2+s/2+2*h,N.attr("transform","translate("+(e[0]-s/2)+","+(e[1]-r/2)+")"),d()):(!1,N.remove())}}}),se(),me(),Me()}0!==S||d3.event.metaKey||d3.event.ctrlKey||u||(e=d3.mouse(this),I=X.append("rect").attr("ox",e[0]).attr("oy",e[1]).attr("rx",1).attr("ry",1).attr("x",e[0]).attr("y",e[1]).attr("width",0).attr("height",0).attr("class","lasso"),d3.event.preventDefault())}).on("mouseup",ce).on("mouseenter",function(){I?1!==d3.event.buttons&&(I.remove(),I=null):S===RED.state.PANNING&&4!==d3.event.buttons&&De()}).on("touchend",function(){clearTimeout(u),u=null,RED.touch.radialMenu.active()||(I&&Y.attr("fill","#fff"),ce.call(this))}).on("touchcancel",ce).on("touchstart",function(){var e;if(d3.event.touches.length>1){clearTimeout(u),u=null,d3.event.preventDefault(),e=d3.event.touches.item(0);var t=d3.event.touches.item(1),n=e.pageY-t.pageY,o=e.pageX-t.pageX,i=$("#chart").offset(),s=[$("#chart").scrollLeft(),$("#chart").scrollTop()];p=[(t.pageX+o/2-i.left+s[0])/a,(t.pageY+n/2-i.top+s[1])/a],[t.pageX+o/2,t.pageY+n/2],c=Math.sqrt(n*n+o*o)}else{var r=d3.select(document.body),l=[(e=d3.event.touches.item(0)).pageX,e.pageY];p=[e.pageX,e.pageY],c=0;d3.touches(this)[0];u=setTimeout(function(){u=null,ze(r,l)},d)}}).on("touchmove",function(){var e;if(RED.touch.radialMenu.active())d3.event.preventDefault();else if(d3.event.touches.length<2){if(u){var t=(e=d3.event.touches.item(0)).pageX-p[0],n=e.pageY-p[1];Math.abs(t*t+n*n)>64&&(clearTimeout(u),u=null)}else I&&d3.event.preventDefault();de.call(this)}else{e=d3.event.touches.item(0);var o=d3.event.touches.item(1),i=e.pageY-o.pageY,s=e.pageX-o.pageX,r=($("#chart").offset(),[$("#chart").scrollLeft(),$("#chart").scrollTop()]),l=Math.sqrt(i*i+s*s),d=[o.pageX+s/2,o.pageY+i/2];if(!isNaN(l)){oldScaleFactor=a,a=Math.min(2,Math.max(.3,a+Math.floor(100*l-100*c)/1e4));var f=[p[0]*(a-oldScaleFactor),p[1]*(a-oldScaleFactor)];c=l,d,$("#chart").scrollLeft(r[0]+f[0]),$("#chart").scrollTop(r[1]+f[1]),Me()}}});X.on("contextmenu",d3.contextMenu("canvas",H,()=>{fe()}));var Y=X.append("svg:rect").attr("width",n).attr("height",o).attr("fill","#f3f3f3"),Q=X.append("g");var Z=X.append("g"),ee=X.append("g"),te=X.append("g"),ne=X.append("g");ne.append("foreignObject").attr("id","d3-context-menu-canvas").attr("class","d3-context-menu-canvas d3-context-menu").attr("width",350).attr("height",100).attr("x",100).attr("y",100);var oe=[];function ie(e){q=-1;for(var t=0;t<e.length;t++){var n=e[t];n.el=ee.append("svg:path").attr("class","drag_line"),("link out"===n.node.type&&n.portType===V||"link in"===n.node.type&&n.portType===W)&&(n.el.attr("class","link_link drag_line"),n.virtualLink=!0,q=n.portType===V?W:V),oe.push(n)}-1!==q&&m.forEach(function(e){"link in"!==e.type&&"link out"!==e.type||(e.dirty=!0)})}function ae(){for(-1!==q&&m.forEach(function(e){"link in"!==e.type&&"link out"!==e.type||(e.dirty=!0)}),q=-1;oe.length;){var e=oe.pop();e.el&&e.el.remove()}}function se(){var e=RED.workspaces.active();m=RED.nodes.filterNodes({z:e}),y=RED.nodes.filterLinks({source:{z:e},target:{z:e}})}function re(e,t,n,o,a){var l=o-t,d=n-e,c=Math.sqrt(l*l+d*d),p=i;if(d*a>0?c<s&&(p=.75-(s-c)/s*.75):p=.4-.2*Math.max(0,(s-Math.min(Math.abs(d),Math.abs(l)))/s),d*a>0)return"M "+e+" "+t+" C "+(e+a*(s*p))+" "+(t+0*r)+" "+(n-a*p*s)+" "+(o-0*r)+" "+n+" "+o;var u=Math.floor(n-d/2),f=Math.floor(o-l/2);0===l&&(f=o+r);var h=r/2,g=(o+f)/2,v=e+a*s*p,b=l>0?Math.min(g-l/2,t+h):Math.max(g-l/2,t-h),m=n-a*s*p,y=l>0?Math.max(g,o-h):Math.min(g,o+h),w=(e+v)/2,$=l>0?1:-1,x=[[w,t],[v,l>0?Math.max(t,b-h):Math.min(t,b+h)],[w,l>0?Math.min(f,b+h):Math.max(f,b-h)],[m,l>0?Math.max(f,y-h):Math.min(f,y+h)],[(n+m)/2,o]];return x[2][1]===b+$*h&&(Math.abs(l)<10*h&&(x[1][1]=b-$*h/2,x[3][1]=y-$*h/2),x[2][0]=v),"M "+e+" "+t+" C "+x[0][0]+" "+x[0][1]+" "+x[1][0]+" "+x[1][1]+" "+v+" "+b+" S "+x[2][0]+" "+x[2][1]+" "+u+" "+f+" S "+x[3][0]+" "+x[3][1]+" "+m+" "+y+" S "+x[4][0]+" "+x[4][1]+" "+n+" "+o}function le(e,t,n){var o=/^subflow:(.+)$/.exec(e);if(b&&o){if(o[1]===b.id)return void RED.notify("<strong>Error:</strong>Cannot add subflow to itself","error");if(RED.nodes.subflowContains(o[1],b.id))return void RED.notify("<strong>Error:</strong>Cannot add subflow - circular reference detected","error")}var i={id:RED.nodes.id(),z:RED.workspaces.active()};if(i.type=e,i._def=RED.nodes.getType(i.type),o){var a=RED.nodes.subflow(o[1]);i.name="",i.inputs=a.in.length,i.outputs=a.out.length}else{for(var l in i.inputs=i._def.inputs||0,i.outputs=i._def.outputs,i._def.defaults)i._def.defaults.hasOwnProperty(l)&&void 0!==i._def.defaults[l].value&&(i[l]=JSON.parse(JSON.stringify(i._def.defaults[l].value)));if(i._def.onadd)try{i._def.onadd.call(i)}catch(e){console.log("Definition error: "+i.type+".onadd:",e)}}i.changed=!0,i.moved=!0,i.w=s,i.h=Math.max(r,15*(i.outputs||0));var d={t:"add",nodes:[i.id],dirty:RED.nodes.dirty()};if(b){var c=RED.subflow.refresh(!0);c&&(d.subflow={id:b.id,changed:b.changed,instances:c.instances})}return{node:i,historyEvent:d}}function de(){var i,a;if(S===RED.state.PANNING){var s=[d3.event.pageX,d3.event.pageY],r=[C[0]-s[0],C[1]-s[1]];return G.scrollLeft(B[0]+r[0]),void G.scrollTop(B[1]+r[1])}if(C=d3.touches(this)[0]||d3.mouse(this),I){var l,d,c=parseInt(I.attr("ox")),p=parseInt(I.attr("oy")),u=parseInt(I.attr("x")),f=parseInt(I.attr("y"));return l=C[0]<c?c-(u=C[0]):C[0]-u,d=C[1]<p?p-(f=C[1]):C[1]-f,void I.attr("x",u).attr("y",f).attr("width",l).attr("height",d)}if(S==RED.state.QUICK_JOINING||S==RED.state.IMPORT_DRAGGING||k||null!=D){var b;if(S==RED.state.JOINING||S===RED.state.QUICK_JOINING){if(0===oe.length&&null!==R){if(d3.event.shiftKey){var m,y=[],w=[];if(D&&(R===V&&D.source===k&&D.sourcePort===T||R===W&&D.target===k))w=[D];else m=R===V?{source:k,sourcePort:T}:{target:k},w=RED.nodes.filterLinks(m);for(i=0;i<w.length;i++){var $=w[i];RED.nodes.removeLink($),y.push({link:$,node:R===V?$.target:$.source,port:R===V?0:$.sourcePort,portType:R===V?W:V})}0===y.length?(De(),Me()):(ie(y),S=0,se(),Me(),S=RED.state.JOINING)}else k&&!U&&ie([{node:k,port:T,portType:R}]);D=null}for(b=C,i=0;i<oe.length;i++){var x=oe[i],E=-((x.portType===V&&x.node.outputs||1)-1)/2*13+13*x.port,_=x.portType===V?1:-1;x.el.attr("d",re(x.node.x+_*x.node.w/2,x.node.y+E,b[0],b[1],_))}d3.event.preventDefault()}else if(S==RED.state.MOVING){b=d3.mouse(document.body),isNaN(b[0])&&(b=d3.touches(document.body)[0]),(j[0]-b[0])*(j[0]-b[0])+(j[1]-b[1])*(j[1]-b[1])>3&&(S=RED.state.MOVING_ACTIVE,M=0,v=!1,1===O.length&&(a=O[0],v=a.n.hasOwnProperty("_def")&&a.n._def.inputs>0&&a.n._def.outputs>0&&0===RED.nodes.filterLinks({source:a.n}).length&&0===RED.nodes.filterLinks({target:a.n}).length))}else if(S==RED.state.MOVING_ACTIVE||S==RED.state.IMPORT_DRAGGING){b=C;for(var N=0,P=0,L=n,z=o,A=0;A<O.length;A++)a=O[A],d3.event.shiftKey&&(a.n.ox=a.n.x,a.n.oy=a.n.y),a.n.x=b[0]+a.dx,a.n.y=b[1]+a.dy,a.n.dirty=!0,N=Math.min(a.n.x-a.n.w/2-5,N),P=Math.min(a.n.y-a.n.h/2-5,P),L=Math.max(a.n.x+a.n.w/2+5,L),z=Math.max(a.n.y+a.n.h/2+5,z);if(0!==N||0!==P)for(i=0;i<O.length;i++)(a=O[i]).n.x-=N,a.n.y-=P;if(L!==n||z!==o)for(i=0;i<O.length;i++)(a=O[i]).n.x-=L-n,a.n.y-=z-o;if(g!=d3.event.shiftKey&&O.length>0){var q=[0,0];if(a=O[0],q[0]=a.n.x-(h*Math.floor((a.n.x-a.n.w/2)/h)+a.n.w/2),q[1]=a.n.y-h*Math.floor(a.n.y/h),0!==q[0]||0!==q[1])for(i=0;i<O.length;i++)(a=O[i]).n.x-=q[0],a.n.y-=q[1],a.n.x==a.n.ox&&a.n.y==a.n.oy&&(a.dirty=!1)}S!=RED.state.MOVING_ACTIVE&&S!=RED.state.IMPORT_DRAGGING||1!==O.length||(a=O[0],v&&(t||(t=setTimeout(function(){var n=[],o=1/0,i=null,s=a.n.x,r=a.n.y;if(K[0][0].getIntersectionList){var l=K[0][0].createSVGRect();l.x=s,l.y=r,l.width=1,l.height=1,n=K[0][0].getIntersectionList(l,K[0][0])}else n=RED.view.getLinksAtPoint(s,r);for(var d=0;d<n.length;d++)if(d3.select(n[d]).classed("link_background"))for(var c=n[d].getTotalLength(),p=0;p<c;p+=10){var u=n[d].getPointAtLength(p),f=(u.x-s)*(u.x-s)+(u.y-r)*(u.y-r);f<200&&f<o&&(o=f,i=n[d])}e&&e!==i&&d3.select(e.parentNode).classed("link_splice",!1),i?d3.select(i.parentNode).classed("link_splice",!0):d3.select(".link_splice").classed("link_splice",!1),e=i,t=null},100))))}0!==S&&Me()}}function ce(){var t,n;if(S!==RED.state.PANNING){if(S!==RED.state.QUICK_JOINING){if(k&&S==RED.state.JOINING){var o=[];for(t=0;t<oe.length;t++)oe[t].link&&o.push(oe[t].link);n={t:"delete",links:o,dirty:RED.nodes.dirty()},RED.history.push(n),ae()}if(I){var i=parseInt(I.attr("x")),a=parseInt(I.attr("y")),s=i+parseInt(I.attr("width")),r=a+parseInt(I.attr("height"));d3.event.ctrlKey||ve(),RED.nodes.eachNode(function(e){e.z!=RED.workspaces.active()||e.selected||(e.selected=e.x>i&&e.x<s&&e.y>a&&e.y<r,e.selected&&(e.dirty=!0,O.push({n:e})))}),b&&(b.in.forEach(function(e){e.selected=e.x>i&&e.x<s&&e.y>a&&e.y<r,e.selected&&(e.dirty=!0,O.push({n:e}))}),b.out.forEach(function(e){e.selected=e.x>i&&e.x<s&&e.y>a&&e.y<r,e.selected&&(e.dirty=!0,O.push({n:e}))}),b.status&&(b.status.selected=b.status.x>i&&b.status.x<s&&b.status.y>a&&b.status.y<r,b.status.selected&&(b.status.dirty=!0,O.push({n:b.status})))),me(),I.remove(),I=null}else S!=RED.state.DEFAULT||null!=E||d3.event.ctrlKey||d3.event.metaKey||(ve(),me());if(S==RED.state.MOVING_ACTIVE&&O.length>0){for(var l=[],d=0;d<O.length;d++){var c=O[d];c.ox===c.n.x&&c.oy===c.n.y||(l.push({n:c.n,ox:c.ox,oy:c.oy,moved:c.n.moved}),c.n.dirty=!0,c.n.moved=!0)}if(l.length>0){if(n={t:"move",nodes:l,dirty:RED.nodes.dirty()},e){var p=d3.select(e).data()[0];RED.nodes.removeLink(p);var u={source:p.source,sourcePort:p.sourcePort,target:O[0].n},f={source:O[0].n,sourcePort:0,target:p.target};RED.nodes.addLink(u),RED.nodes.addLink(f),n.links=[u,f],n.removedLinks=[p],se()}RED.nodes.dirty(!0),RED.history.push(n)}}if(S==RED.state.MOVING||S==RED.state.MOVING_ACTIVE)for(t=0;t<O.length;t++)delete O[t].ox,delete O[t].oy;S==RED.state.IMPORT_DRAGGING&&(RED.keyboard.remove("escape"),se(),RED.nodes.dirty(!0)),De(),Me()}}else De()}function pe(){a<2&&he(a+.1)}function ue(){a>.3&&he(a-.1)}function fe(){he(1)}function he(e){var t=[G.width(),G.height()],n=[G.scrollLeft(),G.scrollTop()],o=[(n[0]+t[0]/2)/a,(n[1]+t[1]/2)/a],i=[(n[0]+t[0]/2)/(a=e),(n[1]+t[1]/2)/a],s=[(i[0]-o[0])*a,(i[1]-o[1])*a];G.scrollLeft(n[0]-s[0]),G.scrollTop(n[1]-s[1]),RED.view.navigator.resize(),function(){let e=$("#btn-minimize-restore").children("i");1===a?(e.removeClass("fa-expand"),e.addClass("fa-compress")):(e.removeClass("fa-compress"),e.addClass("fa-expand"))}(),Me()}function ge(){RED.nodes.eachNode(function(e){e.z==RED.workspaces.active()&&(e.selected||(e.selected=!0,e.dirty=!0,O.push({n:e})))}),b&&(b.in.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,O.push({n:e}))}),b.out.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,O.push({n:e}))}),b.status&&(b.status.selected||(b.status.selected=!0,b.status.dirty=!0,O.push({n:b.status})))),D=null,me(),Me()}function ve(){for(var e=0;e<O.length;e++){var t=O[e];t.n.dirty=!0,t.n.selected=!1}O=[],D=null}var be=null;function me(e){var t={},n=RED.workspaces.selection();if(0===n.length){O.length>0&&(t.nodes=O.map(function(e){return e.n})),null!=D&&(t.link=D);var o=RED.workspaces.active();y=RED.nodes.filterLinks({source:{z:o},target:{z:o}});RED.nodes.getWorkspaceOrder();var i={};w=[],Object.keys(x).forEach(function(e){x[e].dirty=!0}),x={};for(var a=0;a<O.length;a++)if("link out"===O[a].n.type||"link in"===O[a].n.type){var s=O[a].n;x[s.id]=s;var r={};s.links.forEach(function(e){var t=RED.nodes.node(e);t&&("link out"===s.type?t.z===s.z?i[s.id+":"+t.id]||(y.push({source:s,sourcePort:0,target:t,link:!0}),i[s.id+":"+t.id]=!0,x[t.id]=t,t.dirty=!0):(r[t.z]=r[t.z]||[],r[t.z].push(t)):t.z===s.z?i[t.id+":"+s.id]||(y.push({source:t,sourcePort:0,target:s,link:!0}),i[t.id+":"+s.id]=!0,x[t.id]=t,t.dirty=!0):(r[t.z]=r[t.z]||[],r[t.z].push(t)))}),Object.keys(r).length>0&&w.push({refresh:Math.floor(1e4*Math.random()),node:s,links:r})}0===w.length&&null!==D&&D.link&&(y.push(D),x[D.source.id]=D.source,D.source.dirty=!0,x[D.target.id]=D.target,D.target.dirty=!0)}else t.flows=n;var l=o+":"+JSON.stringify(t,function(e,t){return"nodes"===e||"flows"===e?t.map(function(e){return e.id}):"link"===e?t.source.id+":"+t.sourcePort+":"+t.target.id:t});e?be=l:l!==be?(be=l,RED.editor.edit(t)):RED.editor.resetEditor()}function ye(){if(console.log("[view] editSelection invoked"),O.length>0){var e=O[0].n;"subflow"===e.type?RED.editor.editSubflow(b):RED.editor.edit(e)}}function we(){_e&&(_e.remove(),_e=null);var e=RED.workspaces.selection();if(e.length>0){var t=0;if(e.forEach(function(e){"tab"===e.type&&t++}),t===RED.workspaces.count())return;for(var n={t:"delete",dirty:RED.nodes.dirty(),nodes:[],links:[],workspaces:[],subflows:[]},o=RED.nodes.getWorkspaceOrder().slice(0),i=0;i<e.length;i++){var a,s=e[i];s._index=o.indexOf(s.id),RED.workspaces.remove(s),"tab"===s.type?(n.workspaces.push(s),a=RED.nodes.removeWorkspace(s.id)):(a=RED.subflow.removeSubflow(s.id),n.subflows=n.subflows.concat(a.subflows)),n.nodes=n.nodes.concat(a.nodes),n.links=n.links.concat(a.links)}RED.history.push(n),RED.nodes.dirty(!0),se(),me(),Me()}else if(O.length>0||null!=D){var r,l=[],d=[],c=[],p=[],u=void 0,f=[],h=RED.nodes.dirty();if(O.length>0){for(i=0;i<O.length;i++){var g=O[i].n;if(g.selected=!1,"subflow"!=g.type){g.x<0&&(g.x=25);var v=RED.nodes.remove(g.id);l.push(g),l=l.concat(v.nodes),d=d.concat(v.links)}else"out"===g.direction?c.push(g):"in"===g.direction?p.push(g):"status"===g.direction&&(u=g),g.dirty=!0}c.length>0&&(r=RED.subflow.removeOutput(c))&&(d=d.concat(r.links)),1==p.length&&(r=RED.subflow.removeInput())&&(d=d.concat(r.links)),u&&(r=RED.subflow.removeStatus())&&(d=d.concat(r.links));var m=RED.subflow.refresh(!0);m&&(f=m.instances),O=[],(l.length>0||c.length>0||p.length>0||u)&&RED.nodes.dirty(!0)}if(D&&D.link){var y=D.source.id,w=D.target.id,x=D.target.links.indexOf(y),E=D.source.links.indexOf(w);n={t:"multi",events:[{t:"edit",node:D.source,changed:D.source.changed,changes:{links:$.extend(!0,{},{v:D.source.links}).v}},{t:"edit",node:D.target,changed:D.target.changed,changes:{links:$.extend(!0,{},{v:D.target.links}).v}}],dirty:RED.nodes.dirty()},D.source.changed=!0,D.target.changed=!0,D.target.links.splice(x,1),D.source.links.splice(E,1),D.source.dirty=!0,D.target.dirty=!0}else D&&(RED.nodes.removeLink(D),d.push(D)),RED.nodes.dirty(!0),n={t:"delete",nodes:l,links:d,subflowOutputs:c,subflowInputs:p,subflow:{id:b?b.id:void 0,instances:f},dirty:h},u&&(n.subflow.status=u);RED.history.push(n),D=null,se(),me(),Me()}}function $e(){var e=[],t=RED.workspaces.selection();if(t.length>0?(e=[],t.forEach(function(t){"tab"===t.type&&(e.push(t),e=e.concat(RED.nodes.filterNodes({z:t.id})))})):O.length>0&&(e=O.map(function(e){return e.n})),e.length>0){for(var n=[],o=0;o<e.length;o++){var i=e[o];if("subflow"!=i.type){for(var a in i._def.defaults)if(i._def.defaults.hasOwnProperty(a)&&i._def.defaults[a].type){var s=RED.nodes.node(i[a]);s&&s._def.exclusive&&n.push(RED.nodes.convertNode(s))}n.push(RED.nodes.convertNode(i))}}F=JSON.stringify(n),RED.notify(`${n.length} node copied`)}}function xe(e,t,n,o){var i=document.createElement("span");i.className=t,i.style.position="absolute",i.style.top="-1000px",i.textContent=e||"",document.body.appendChild(i);var a=i.offsetWidth,s=i.offsetHeight;return document.body.removeChild(i),[n+a,o+s]}function De(){k=null,_=null,E=null,S=0,R=null,e=null,v=!1,d3.select(".link_splice").classed("link_splice",!1),t&&(clearTimeout(t),t=null)}function Ee(e){17!==e.keyCode&&"Meta"!==e.key&&91!==e.keyCode||(De(),ae(),Me(),$(window).off("keyup",Ee))}function ke(e,t,n){console.log("[view] portMouseDown - ",e,t,n),1!==d3.event.button&&(k=e,R=t,T=n||0,S!==RED.state.QUICK_JOINING&&(S=RED.state.JOINING,document.body.style.cursor="crosshair",(d3.event.ctrlKey||d3.event.metaKey)&&(S=RED.state.QUICK_JOINING,ie([{node:k,port:T,portType:R}]),$(window).on("keyup",Ee))),d3.event.stopPropagation(),d3.event.preventDefault())}function Re(e,t,n){var o;if(console.log("[view] portMouseUp invoked"),S===RED.state.QUICK_JOINING&&oe.length>0){if(oe[0].node===e)return;if(oe[0].virtualLink&&("link in"===oe[0].node.type&&"link out"!==e.type||"link out"===oe[0].node.type&&"link in"!==e.type))return}if(document.body.style.cursor="",S==RED.state.JOINING||S==RED.state.QUICK_JOINING){"undefined"!=typeof TouchEvent&&d3.event instanceof TouchEvent?RED.nodes.eachNode(function(e){if(e.z==RED.workspaces.active()){var o=e.w/2,i=e.h/2;e.x-o<C[0]&&e.x+o>C[0]&&e.y-i<C[1]&&e.y+i>C[1]&&(t=(_=e).inputs>0?W:V,n=0)}}):_=e;var i=[],a=[],s=[],r=null;for(o=0;o<oe.length;o++)oe[o].link&&a.push(oe[o].link);var l=[];for(o=0;o<oe.length;o++)if(t!=oe[o].portType&&_!==oe[o].node){var d,c,p,u=oe[o];u.portType===V?(d=u.node,p=u.port,c=_):u.portType===W&&(d=_,c=u.node,p=n);var f={source:d,sourcePort:p,target:c};if(u.virtualLink){if(/^link (in|out)$/.test(d.type)&&/^link (in|out)$/.test(c.type)&&d.type!==c.type&&-1===d.links.indexOf(c.id)&&-1===c.links.indexOf(d.id)){var h=$.extend(!0,{},{v:d.links}).v,g=$.extend(!0,{},{v:c.links}).v;d.links.push(c.id),c.links.push(d.id),d.dirty=!0,c.dirty=!0,s.push(d),s.push(c),f.link=!0,y.push(f),x[d.id]=d,x[c.id]=c,r=f,l.push({t:"edit",node:d,dirty:RED.nodes.dirty(),changed:d.changed,changes:{links:h}}),l.push({t:"edit",node:c,dirty:RED.nodes.dirty(),changed:c.changed,changes:{links:g}}),d.changed=!0,c.changed=!0}}else if(!("link out"===e.type&&t===V||"link in"===e.type&&t===W))0!==RED.nodes.filterLinks({source:d,target:c,sourcePort:p}).length||(RED.nodes.addLink(f),i.push(f))}if(i.length>0||a.length>0||s.length>0){var v;if(v=s.length>0?{t:"multi",events:l,dirty:RED.nodes.dirty()}:{t:"add",links:i,removedLinks:a,dirty:RED.nodes.dirty()},b){var m=RED.subflow.refresh(!0);m&&(v.subflow={id:b.id,changed:b.changed,instances:m.instances})}RED.history.push(v),se(),RED.nodes.dirty(!0)}if(S===RED.state.QUICK_JOINING)return(i.length>0||s.length>0)&&(ae(),t===W&&e.outputs>0?ie([{node:e,port:0,portType:V}]):t===V&&e.inputs>0?ie([{node:e,port:0,portType:W}]):De(),D=r,E=r,r&&me()),void Me();De(),ae(),D=r,E=r,r&&me(),Me()}}var Te=null,_e=null;function je(e){var t=d3.select(e);if("innerCanvas"===t.attr("class"))return[0,0];var n=[0,0];if("g"===e.nodeName.toLowerCase()){var o=t.attr("transform");o&&(n=d3.transform(o).translate)}else n=[t.attr("x")||0,t.attr("y")||0];var i=je(e.parentNode);return[n[0]+i[0],n[1]+i[1]]}function Ce(e,t,n,o){if(n){var i=X.append("g").attr("transform","translate("+e+","+t+")").attr("class","port_tooltip"),a=n.split("\n"),s=0,r=4,l=[];a.forEach(function(e){var t=xe(e,"port_tooltip_label",8,0);s=Math.max(s,t[0]),l.push(.8*t[1]),r+=.8*t[1]});var d,c,p,u=s/2-5-2,f=r/2-5-2,h=r-4,g=-r/2-2;return"left"===o?(d="M0 0 l -5 -5 v -"+f+" q 0 -2 -2 -2 h -"+s+" q -2 0 -2 2 v "+h+" q 0 2 2 2 h "+s+" q 2 0 2 -2 v -"+f+" l 5 -5",c=-10,p="end"):"right"===o?(d="M0 0 l 5 -5 v -"+f+" q 0 -2 2 -2 h "+s+" q 2 0 2 2 v "+h+" q 0 2 -2 2 h -"+s+" q -2 0 -2 -2 v -"+f+" l -5 -5",c=10,p="start"):"top"===o&&(d="M0 0 l 5 -5 h "+u+" q 2 0 2 -2 v -"+r+" q 0 -2 -2 -2 h -"+(s-4)+" q -2 0 -2 2 v "+r+" q 0 2 2 2 h "+u+" l 5 5",c=s/2-4,g=-r-r/2+2,p="end"),i.append("path").attr("d",d),a.forEach(function(e,t){g+=l[t],i.append("svg:text").attr("class","port_tooltip_label").attr("x",c).attr("y",g).attr("text-anchor",p).text(e)}),i}}function Se(e,t,n,o){console.log("[view] portMouseOver invoked"),clearTimeout(Te);var i=S!=RED.state.JOINING&&S!=RED.state.QUICK_JOINING||oe.length>0&&oe[0].portType!==n&&(!oe[0].virtualLink||"link in"===oe[0].node.type&&"link out"===t.type||"link out"===oe[0].node.type&&"link in"===t.type);i&&(n===W&&(t._def&&t._def.inputLabels||t.inputLabels)||n===V&&(t._def&&t._def.outputLabels||t.outputLabels))&&(Te=setTimeout(function(){var i=function(e,t,n){var o,i=t===W?e.inputLabels:e.outputLabels;if(i&&i[n])return i[n];var a=t===W?e._def.inputLabels:e._def.outputLabels;if("string"==typeof a)o=a;else if("function"==typeof a)try{o=a.call(e,n)}catch(n){console.log("Definition error: "+e.type+"."+(t===W?"inputLabels":"outputLabels"),n),o=null}else $.isArray(a)&&(o=a[n]);return o}(t,n,o);if(i){var a=je(e.node());Te=null,_e=Ce(a[0]+(n===W?-2:12),a[1]+5,i,n===W?"left":"right")}},500)),e.classed("port_hovered",i)}function Oe(e,t,n,o){clearTimeout(Te),_e&&(_e.remove(),_e=null),e.classed("port_hovered",!1)}function Ie(e){if(z&&k==e&&M>0&&M<750)return S=RED.state.DEFAULT,"subflow"!=e.type?RED.editor.edit(e):RED.editor.editSubflow(b),M=0,void d3.event.stopPropagation();var t=e._def?e.inputs>0?1:0:"in"==e.direction?0:1,n=!1;S!==RED.state.JOINING&&S!==RED.state.QUICK_JOINING||(n=!0,oe.length>0&&oe[0].virtualLink&&("link in"===e.type?t=1:"link out"===e.type&&(t=0))),Re(e,t,0),n&&d3.selectAll(".port_hovered").classed("port_hovered",!1)}function Ne(t){if(Be(),1!==d3.event.button){if(S==RED.state.IMPORT_DRAGGING){if(RED.keyboard.remove("escape"),e){var n=d3.select(e).data()[0];RED.nodes.removeLink(n);var o={source:n.source,sourcePort:n.sourcePort,target:O[0].n},i={source:O[0].n,sourcePort:0,target:n.target};RED.nodes.addLink(o),RED.nodes.addLink(i);var a=RED.history.peek();a.links=[o,i],a.removedLinks=[n],se()}return me(),RED.nodes.dirty(!0),Me(),De(),void d3.event.stopPropagation()}if(S!=RED.state.QUICK_JOINING){k=t;var s,r=Date.now();if(M=r-A,A=r,z=!(L!=k||0!==d3.event.button||d3.event.shiftKey||d3.event.metaKey||d3.event.altKey||d3.event.ctrlKey),L=k,t.selected&&(d3.event.ctrlKey||d3.event.metaKey)){for(k.selected=!1,s=0;s<O.length;s+=1)if(O[s].n===k){O.splice(s,1);break}}else{if(d3.event.shiftKey){ve();for(var l=RED.nodes.getAllFlowNodes(k),d=0;d<l.length;d++)l[d].selected=!0,l[d].dirty=!0,O.push({n:l[d]})}else t.selected||(d3.event.ctrlKey||d3.event.metaKey||ve(),k.selected=!0,O.push({n:k}));if(D=null,2!=d3.event.button){S=RED.state.MOVING;var c=d3.touches(this)[0]||d3.mouse(this);for(c[0]+=t.x-t.w/2,c[1]+=t.y-t.h/2,s=0;s<O.length;s++)O[s].ox=O[s].n.x,O[s].oy=O[s].n.y,O[s].dx=O[s].n.x-c[0],O[s].dy=O[s].n.y-c[1];j=d3.mouse(document.body),isNaN(j[0])&&(j=d3.touches(document.body)[0])}}t.dirty=!0,me(),Me(),d3.event.stopPropagation()}else d3.event.stopPropagation()}}function Pe(e){var t=!0,n=RED.nodes.workspace(RED.workspaces.active());return n&&!n.disabled?e._def.button.hasOwnProperty("enabled")&&(t="function"==typeof e._def.button.enabled?e._def.button.enabled.call(e):e._def.button.enabled):t=!1,t}function Le(e){var t=RED.workspaces.active(),n=RED.nodes.workspace(t);if(n&&!n.disabled){if(e._def.button.toggle&&(e[e._def.button.toggle]=!e[e._def.button.toggle],e.dirty=!0),e._def.button.onclick)try{e._def.button.onclick.call(e)}catch(t){console.log("Definition error: "+e.type+".onclick",t)}e.dirty&&Me()}else b?RED.notify("<strong>Warning</strong>: node actions disabled within subflow",warning):RED.notify("<strong>Warning</strong>: node actions disabled",warning);d3.event.preventDefault()}function ze(e,t){var n=k,o=[];o.push({name:"delete",disabled:0===O.length&&null===D,onselect:function(){we()}}),o.push({name:"cut",disabled:0===O.length,onselect:function(){$e(),we()}}),o.push({name:"copy",disabled:0===O.length,onselect:function(){$e()}}),o.push({name:"paste",disabled:0===F.length,onselect:function(){Ue(F,!1,!0)}}),o.push({name:"edit",disabled:1!=O.length,onselect:function(){RED.editor.edit(n)}}),o.push({name:"select",onselect:function(){ge()}}),o.push({name:"undo",disabled:0===RED.history.depth(),onselect:function(){RED.history.pop()}}),RED.touch.radialMenu.show(e,t,o),De()}function Ae(e,t,n){var o=null;if(0===e.indexOf("font-awesome/")){var i=e.substr(13);if(!(o=RED.nodes.fontAwesome.getIconUnicode(i))){var a=RED.utils.getDefaultNodeIcon(n._def,n);e=RED.settings.apiRootUrl+"icons/"+a.module+"/"+a.file}}if(o)t.append("text").attr("xlink:href",e).attr("class","fa-lg").attr("x",15).attr("stroke","none").attr("fill","#ffffff").attr("text-anchor","middle").attr("font-family","FontAwesome").text(o);else{var s=t.append("image").attr("xlink:href",e).attr("class","node_icon").attr("x",0).attr("width","30").attr("height","35"),r=new Image;r.src=e,r.onload=function(){s.attr("width",24),s.attr("height",24),s.attr("x",11),s.attr("y",function(e){return e.h/2-12}),s.attr("xlink:href",e),s.style("display",null)}}}function Me(e){if(e&&function(){let e=RED.nodes.filterNodes({selected:!0});if(e.length>0){let t=e.map(e=>e.id);te.selectAll(".nodegroup").classed("node_unfocus",function(e){return!t.includes(e.id)}),e[0].strokeStyle="red",e[0].shadowColor="red",e[0].shadowBlur="3",Z.selectAll(".link").classed("node_unfocus",!0)}else{te.selectAll(".nodegroup").classed("node_unfocus",!1),Z.selectAll(".link").classed("node_unfocus",!1);let e=$(".debug-message");e.removeClass("debug-message-hover"),e.removeClass("node_unfocus")}}(),X.attr("transform","scale("+a+")"),K.attr("width",n*a).attr("height",o*a),-1!==q||S!=RED.state.JOINING){var t={};if(b){var i=te.selectAll(".subflowoutput").data(b.out,function(e,t){return e.id});i.exit().remove();var f=i.enter().insert("svg:g").attr("class","node subflowoutput").attr("transform",function(e){return"translate("+(e.x-20)+","+(e.y-20)+")"});f.each(function(e,t){e.w=40,e.h=40}),f.append("rect").attr("class","subflowport").attr("rx",8).attr("ry",8).attr("width",40).attr("height",40).on("mouseup",Ie).on("mousedown",Ne).on("touchstart",function(e){var t=d3.select(this),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];p=[n.pageX,n.pageY],c=0,u=setTimeout(function(){ze(t,o)},d),Ne.call(this,e)}).on("touchend",function(e){clearTimeout(u),u=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():Ie.call(this,e)}),f.append("g").attr("transform","translate(-5,15)").append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e,t){ke(e,W,0)}).on("touchstart",function(e,t){ke(e,W,0)}).on("mouseup",function(e,t){Re(e,W,0)}).on("touchend",function(e,t){Re(e,W,0)}).on("mouseover",function(e){Se(d3.select(this),e,W,0)}).on("mouseout",function(e){Oe(d3.select(this))}),f.append("svg:text").attr("class","port_label").attr("x",20).attr("y",8).style("font-size","10px").text("output"),f.append("svg:text").attr("class","port_label port_index").attr("x",20).attr("y",24).text(function(e,t){return t+1});var h=te.selectAll(".subflowinput").data(b.in,function(e,t){return e.id});h.exit().remove();var g=h.enter().insert("svg:g").attr("class","node subflowinput").attr("transform",function(e){return"translate("+(e.x-20)+","+(e.y-20)+")"});g.each(function(e,t){e.w=40,e.h=40}),g.append("rect").attr("class","subflowport").attr("rx",8).attr("ry",8).attr("width",400).attr("height",40).on("mouseup",Ie).on("mousedown",Ne).on("touchstart",function(e){var t=d3.select(this),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];p=[n.pageX,n.pageY],c=0,u=setTimeout(function(){ze(t,o)},d),Ne.call(this,e)}).on("touchend",function(e){clearTimeout(u),u=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():Ie.call(this,e)}),g.append("g").attr("transform","translate(35,15)").append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e,t){ke(e,V,t)}).on("touchstart",function(e,t){ke(e,V,t)}).on("mouseup",function(e,t){Re(e,V,t)}).on("touchend",function(e,t){Re(e,V,t)}).on("mouseover",function(e){Se(d3.select(this),e,V,0)}).on("mouseout",function(e){Oe(d3.select(this))}),g.append("svg:text").attr("class","port_label").attr("x",18).attr("y",20).style("font-size","10px").text("input");var v=te.selectAll(".subflowstatus").data(b.status?[b.status]:[],function(e,t){return e.id});v.exit().remove();var k=v.enter().insert("svg:g").attr("class","node subflowstatus").attr("transform",function(e){return"translate("+(e.x-20)+","+(e.y-20)+")"});k.each(function(e,t){e.w=40,e.h=40}),k.append("rect").attr("class","subflowport").attr("rx",8).attr("ry",8).attr("width",40).attr("height",40).on("mouseup",Ie).on("mousedown",Ne).on("touchstart",function(e){var t=d3.select(this),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];p=[n.pageX,n.pageY],c=0,u=setTimeout(function(){ze(t,o)},d),Ne.call(this,e)}).on("touchend",function(e){clearTimeout(u),u=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():Ie.call(this,e)}),k.append("g").attr("transform","translate(-5,15)").append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e,t){ke(e,W,0)}).on("touchstart",function(e,t){ke(e,W,0)}).on("mouseup",function(e,t){Re(e,W,0)}).on("touchend",function(e,t){Re(e,W,0)}).on("mouseover",function(e){Se(d3.select(this),e,W,0)}).on("mouseout",function(e){Oe(d3.select(this))}),k.append("svg:text").attr("class","port_label").attr("x",22).attr("y",20).style("font-size","10px").text("status"),i.each(function(e,n){if(e.dirty){var o=d3.select(this);o.selectAll(".subflowport").classed("node_selected",function(e){return e.selected}),o.selectAll(".port_index").text(function(e){return e.i+1}),o.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),t[e.id]=e,e.dirty=!1}}),h.each(function(e,n){if(e.dirty){var o=d3.select(this);o.selectAll(".subflowport").classed("node_selected",function(e){return e.selected}),o.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),t[e.id]=e,e.dirty=!1}}),v.each(function(e,n){if(e.dirty){var o=d3.select(this);o.selectAll(".subflowport").classed("node_selected",function(e){return e.selected}),o.selectAll(".port_index").text(function(e){return e.i+1}),o.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),t[e.id]=e,e.dirty=!1}})}else te.selectAll(".subflowoutput").remove(),te.selectAll(".subflowinput").remove(),te.selectAll(".subflowstatus").remove();var R=te.selectAll(".nodegroup").data(m,function(e){return e.id});R.exit().remove(),R.enter().insert("svg:g").attr("class","node nodegroup").classed("node_subflow",function(e){return null!=b}).classed("node_link",function(e){return"link in"===e.type||"link out"===e.type}).each(function(e,t){var n=d3.select(this),o="link in"===e.type||"link out"===e.type,i=e.hasOwnProperty("l")?!e.l:o;n.attr("id",e.id);RED.utils.getNodeLabel(e);if(e.h=r,e.w=r,e._def.badge){var a=n.append("svg:g").attr("class","node_badge_group"),s=a.append("rect").attr("class","node_badge").attr("rx",5).attr("ry",5).attr("width",40).attr("height",15);a.append("svg:text").attr("class","node_badge_label").attr("x",35).attr("y",11).attr("text-anchor","end").text(e._def.badge()),e._def.onbadgeclick&&s.attr("cursor","pointer").on("click",function(e){e._def.onbadgeclick.call(e),d3.event.preventDefault()})}if(e._def.button){var l=n.append("svg:g").attr("transform",function(e){return"translate("+("right"==e._def.align?94:-25)+",2)"}).attr("class",function(e){return"node_button "+("right"==e._def.align?"node_right_button":"node_left_button")});l.append("rect").attr("rx",5).attr("ry",5).attr("width",r-4).attr("height",r-4).attr("fill","#eee"),l.append("rect").attr("class","node_button_button").attr("x",-7).attr("y",4).attr("rx",4).attr("ry",4).attr("width",r-12).attr("height",r-12).attr("fill",function(e){return RED.utils.getNodeColor(e.type,e._def)}).attr("cursor","pointer").on("mousedown",function(e){!I&&Pe(e)&&(Be(),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseup",function(e){!I&&Pe(e)&&(d3.select(this).attr("fill-opacity",.4),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseout",function(e){}).on("click",Le).on("touchstart",Le),l.append("svg:g").attr("class","play_button").append("svg:image").attr("x",0).attr("y",10).attr("width",20).attr("height",20).attr("xlink:href","red/images/icons/node-play.png").attr("cursor","pointer").on("mouseover",function(e){!I&&Pe(e)&&d3.select(this).attr("width",30).attr("height",30).attr("x",-5).attr("y",5)}).on("mouseout",function(e){!I&&Pe(e)&&d3.select(this).attr("width",20).attr("height",20).attr("x",0).attr("y",10)}).on("click",Le).on("touchstart",Le)}let f,h;n.on("mouseover",function(e){f=setTimeout(()=>{var t=je(n.node());h=Ce(t[0]+46,t[1]+10,e.info,"right")},200)}).on("mouseout",function(e){clearTimeout(f),h&&(h.remove(),h=null),d3.select(this).classed("port_hovered",!1)});n.append("rect").attr("class","selectionRect").attr("width",90).attr("height",100).attr("height",100).attr("stroke","#1890ff").attr("fill","#e6f7ff").attr("stroke-width",2).attr("opacity",.4).attr("rx",2).attr("ry",2).attr("x",-23).attr("y",-15).attr("display","none"),n.append("rect").attr("class","node").classed("node_unknown",function(e){return"unknown"==e.type}).attr("fill","none").attr("stroke",function(e){return RED.utils.getNodeColor(e.type,e._def)}).attr("stroke-width",4).on("mouseup",Ie).on("mousedown",Ne).on("touchstart",function(e){var t=d3.select(this),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];p=[n.pageX,n.pageY],c=0,u=setTimeout(function(){ze(t,o)},d),Ne.call(this,e)}).on("touchend",function(e){clearTimeout(u),u=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():Ie.call(this,e)}).on("mouseover",function(e){if(0===S)d3.select(this).classed("node_hovered",!0),clearTimeout(Te),(e.hasOwnProperty("l")?e.l:"link in"!==e.type&&"link out"!==e.type)||(Te=setTimeout(function(){var t;if(e._def.label){t=e._def.label;try{t=("function"==typeof t?t.call(e):t)||""}catch(n){console.log("Definition error: "+e.type+".label",n),t=e.type}}if(""!==t){var o=je(n.node());Te=null,_e=Ce(o[0]+e.w/2,o[1]-1,t,"top")}},500));else if(S===RED.state.JOINING||S===RED.state.QUICK_JOINING){var t,o;if(oe.length>0)oe[0].virtualLink&&oe[0].portType===W||oe[0].portType===V?(t=".port_input .port",o=W):(t=".port_output .port",o=V),Se(d3.select(this.parentNode).selectAll(t),e,o,0)}}).on("mouseout",function(e){var t;(d3.select(this).classed("node_hovered",!1),clearTimeout(Te),_e&&(_e.remove(),_e=null),S===RED.state.JOINING||S===RED.state.QUICK_JOINING)&&(oe.length>0&&(oe[0].virtualLink&&oe[0].portType===W||oe[0].portType===V?t=".port_input .port":t=".port_output .port",Oe(d3.select(this.parentNode).selectAll(t))))});if(e._def.icon){var g=RED.utils.getNodeIcon(e._def,e),v=n.append("g").attr("class","node_icon_group").attr("x",0).attr("y",0);Ae(g,v,e),"right"==e._def.align&&v.attr("class","node_icon_group node_icon_group_"+e._def.align),v.style("pointer-events","none")}e.h=Math.max(r,15*(e.outputs||0));n.append("svg:text").attr("class","node_label").attr("x","0em").attr("y",function(e){return e.h}).attr("text-anchor","middle").classed("hidden",i);let b=[{title:"Toggle Breakpoint",disabled:e._def.hasOwnProperty("disableToggleBreakpoint"),action:async function(e,t,n){let o=t._def.hasOwnProperty("disableToggleBreakpoint");(!o||o&&!1===t._def.disableToggleBreakpoint)&&(await window.__kumologica.debugger.toggleBreakpoint(t.id),await async function(e){let t=(await window.__kumologica.debugger.isBreakpointFound(e.id)).body;e.status=t?{fill:"red",shape:"dot"}:{},e.dirty=!0}(t),Me())}},{separator:!0},{title:"Cut",shortcut:"Ctrl+X",action:async function(e,t,n){RED.view.select(t.id),$e(),we()}},{title:"Copy",shortcut:"Ctrl+C",action:async function(e,t,n){RED.view.select(t.id),$e()}},{title:"Delete",shortcut:"Del",action:async function(e,t,n){RED.view.select(t.id),we(),Me()}},{separator:!0},{title:"Copy Node ID",action:async function(e,t,n){RED.clipboard.copyText(t.id),RED.notify(`Node ID [ <b>${t.id}</b> ] copied to clipboard`)}},{title:"Settings...",action:async function(e,t,n){RED.editor.edit(t)}}];if(e._def.hasOwnProperty("oncontextmenu")){b=[...e._def.oncontextmenu.call(this,window)||[],{separator:!0},...b]}let m=e.id.replace(".","_");n.on("contextmenu",d3.contextMenu(m,b,()=>{fe()})),ne.append("foreignObject").attr("id",`d3-context-menu-${m}`).attr("class",`d3-context-menu-${m} d3-context-menu`).attr("width",350).attr("height",100).attr("x",e.x).attr("y",e.y);var y=n.append("svg:g").attr("class","node_status_group").style("display","none");y.append("rect").attr("class","node_status").attr("x",14).attr("y",-65).attr("width",8).attr("height",8).attr("rx",8).attr("ry",8).attr("stroke-width","2"),statusLabel=y.append("svg:text").attr("class","node_status_label").attr("x",16).attr("y",-57),n.append("image").attr("class","node_error hidden").attr("xlink:href","red/images/icons/node-error.png").attr("x",38).attr("y",-7).attr("width",13).attr("height",14)}),R.each(function(e,n){if(e.dirty){var o,i="link in"===e.type||"link out"===e.type,a=e.hasOwnProperty("l")?!e.l:i;if(t[e.id]=e,e.resize)e.h=Math.max(r,15*(e.outputs||0)),(o=d3.select(this)).selectAll(".node_label").attr("y",function(e){return e.h}),e.resize=!1;if((o=d3.select(this)).classed("node_subflow",function(e){return null!=b}),o.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),S!=RED.state.MOVING_ACTIVE){console.log("[view] mouse_mode=",S);let t,n=o.selectAll(".node_label").selectAll("tspan")[0].length;t=n<=1?90:2===n?100:110,o.selectAll(".selectionRect").classed("selection_shown",function(e){return e.selected}).attr("height",t),o.selectAll(".node").attr("width",function(e){return e.w}).attr("height",function(e){return e.h}).classed("node_selected",function(e){if(e.selected){$("div.debug-content-list").children().removeClass("debug-message-hover");let t=e.id.replace(".","_");$(`.debug-message-node-${t}`).addClass("debug-message-hover"),$(".debug-message-hover").length>0?$(".debug-message").not(".debug-message-hover").addClass("node_unfocus"):$(".debug-message").removeClass("node_unfocus")}else{let t=`.debug-message-node-${e.id.replace(".","_")}`;if($(t).removeClass("debug-message-hover"),$(".debug-message-hover").length>0){$(".debug-message").not(".debug-message-hover").addClass("node_unfocus"),$(".debug-message-hover").removeClass("node_unfocus")}else $(".debug-message").removeClass("node_unfocus")}return e.selected}).classed("node_highlighted",function(e){return e.highlighted}),o.selectAll(".node_icon_group").classed("node_icon_group_right",!1),o.selectAll(".node_label").classed("node_label_right",!1).attr("text-anchor","middle"),o.selectAll(".node_label").attr("x",function(e){return 22}),o.selectAll(".node_icon_group_right").attr("transform",function(e){return"translate("+(e.w-30)+",0)"}),o.selectAll(".node_label_right").attr("x",function(e){return e.w-38});var s=o.selectAll(".port_input");if(!i||-1!==q||x[e.id]||0!==e.inputs||s.empty()){if((i&&(q===W||x[e.id])||1===e.inputs)&&s.empty()){var d=o.append("g").attr("class","port_input");("link in"===e.type?d.append("circle").attr("cx",-1).attr("cy",5).attr("r",5).attr("class","port link_port"):d.append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10)).on("mousedown",function(e){ke(e,W,0)}).on("touchstart",function(e){ke(e,W,0)}).on("mouseup",function(e){Re(e,W,0)}).on("touchend",function(e){Re(e,W,0)}).on("mouseover",function(e){Se(d3.select(this),e,W,0)}).on("mouseout",function(e){Oe(d3.select(this))})}}else s.remove();var c=e.outputs;i&&"link out"===e.type&&(q===V||x[e.id]?(e.ports=[0],c=1):(e.ports=[],c=0));var p=e.h/2-(c-1)/2*13;e.ports=e.ports||d3.range(c),e._ports=o.selectAll(".port_output").data(e.ports);var u=e._ports.enter().append("g").attr("class","port_output");if(("link out"===e.type?u.append("circle").attr("cx",11).attr("cy",5).attr("r",5).attr("class","port link_port"):u.append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10)).on("mousedown",(D=e,function(e,t){ke(D,V,t)})).on("touchstart",function(){var t=e;return function(e,n){ke(t,V,n)}}()).on("mouseup",function(){var t=e;return function(e,n){Re(t,V,n)}}()).on("touchend",function(){var t=e;return function(e,n){Re(t,V,n)}}()).on("mouseover",function(){var t=e;return function(e,n){Se(d3.select(this),t,V,n)}}()).on("mouseout",function(e,t){Oe(d3.select(this))}),e._ports.exit().remove(),e._ports){c=e.outputs||1,p=e.h/2-(c-1)/2*13;var f=e.w-5;e._ports.each(function(e,t){d3.select(this).attr("transform",function(e){return"translate("+f+","+(p+13*t-5)+")"})})}l=e._def.label,l=("function"==typeof l?l.call(e):l)||"",l=RED.text.bidi.enforceTextDirectionWithUCC(l);let r=function(e,t,n,o){if(!e)return[];if(e.length<=n)return[e];let i=[];const a=e.split(" ");let s,r=0;for(let e=0;e<a.length;e++){if((s=a[e]).length>n)return i[r]=Je(i[r],s),i[r]=Fe(i[r],n,o),i;if(qe(i[r],s,n))i[r]=Je(i[r],s);else{if(!(r<t-1))return i[r]=Fe(i[r],n,o),i;i[++r]=s}}return i}(l,3,12,"..."),b=o.selectAll("text.node_label").classed("hidden",a);if(b.selectAll("*").remove(),b.selectAll("tspan.text").data(r).enter().append("tspan").text(e=>e).attr("x","21.5").attr("dy","1.1em").attr("text-anchor","middle"),e._def.icon){var h,g=o.select(".node_icon"),v=o.select(".fa-lg");h=g.empty()?v.attr("xlink:href"):g.attr("xlink:href");var m=RED.utils.getNodeIcon(e._def,e);if(m!==h)g.empty()?v.remove():g.remove(),Ae(m,o.select(".node_icon_group"),e)}o.selectAll(".node_tools").attr("x",function(e){return e.w-35}).attr("y",function(e){return e.h-20}),o.selectAll(".node_changed").attr("x",function(e){return e.w-10}).classed("hidden",function(e){return!(e.changed||e.moved)}),o.selectAll(".node_error").classed("hidden",function(e){return e.valid}),o.selectAll(".port_input").each(function(e,t){d3.select(this).attr("transform",function(e){return"translate(-5,"+(e.h/2-5)+")"})}),o.selectAll(".node_icon").attr("y",function(e){return(e.h-d3.select(this).attr("height"))/2}),o.selectAll(".node_icon_shade").attr("height",function(e){return e.h}),o.selectAll(".node_icon_shade_border").attr("d",function(e){return"M "+(!e._def.align&&0!==e.inputs&&0===e.outputs||"right"===e._def.align?0:30)+" 1 l 0 "+(e.h-2)}),o.selectAll(".fa-lg").attr("y",function(e){return(e.h+13)/2}),o.selectAll(".node_button").attr("opacity",function(e){return Pe(e)?1:.4}),o.selectAll(".node_button_button").attr("cursor",function(e){return Pe(e)?"pointer":""}),o.selectAll(".node_button").attr("transform",function(e){var t="right"==e._def.align?e.w-6:-25;return e._def.button.toggle&&!e[e._def.button.toggle]&&(t-="right"==e._def.align?8:-8),"translate("+t+",2)"}),o.selectAll(".node_button rect").attr("fill-opacity",function(e){return e._def.button.toggle?e[e._def.button.toggle]?1:.2:1}),e._def.button&&"function"==typeof e._def.button.visible&&(!1===e._def.button.visible.call(e)?o.selectAll(".node_button").style("display","none"):o.selectAll(".node_button").style("display","inherit")),o.selectAll(".node_badge_group").attr("transform",function(e){return"translate("+(e.w-40)+","+(e.h+3)+")"}),o.selectAll("text.node_badge_label").text(function(e,t){if(e._def.badge){if("function"!=typeof e._def.badge)return e._def.badge;try{return e._def.badge.call(e)}catch(t){return console.log("Definition error: "+e.type+".badge",t),""}}return""})}if(P&&e.status){var y,w=J[e.status.fill];if(null==e.status.shape&&null==w)o.selectAll(".node_status").style("display","none"),o.selectAll(".node_status_group").style("display","inline").attr("transform","translate(-14,"+(e.h+3)+")");else o.selectAll(".node_status_group").style("display","inline").attr("transform","translate(3,"+(e.h+3)+")"),null==e.status.shape||"dot"==e.status.shape?y={display:"inline",fill:w,stroke:w}:"ring"==e.status.shape&&(y={display:"inline",fill:"#fff",stroke:w}),o.selectAll(".node_status").style(y);let t="";if(e&&e.status&&e.status.text)if("object"==typeof e.status.text){const n=e.status.text;t=n.message||n.error||n.errorMessage||JSON.stringify(e.status.text)}else t=e.status.text;o.selectAll(".node_status_label").text(t)}else o.selectAll(".node_status_group").style("display","none");e.dirty=!1}var D});var T=Z.selectAll(".link").data(y,function(e){return e.source.id+":"+e.sourcePort+":"+e.target.id+":"+e.target.i});T.enter().insert("g",".node").attr("class","link").each(function(e,t){var n=d3.select(this);e.added=!0,n.append("svg:path").attr("class","link_background link_path").classed("link_link",function(e){return e.link}).on("mousedown",function(e){E=e,ve(),D=E,me(),Me(),Be(),d3.event.stopPropagation()}).on("touchstart",function(e){E=e,ve(),D=E,me(),Me(),Be(),d3.event.stopPropagation();var t=d3.select(document.body),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];u=setTimeout(function(){u=null,ze(t,o)},d)}),n.append("svg:path").attr("class","link_outline link_path"),n.append("svg:path").attr("class","link_line link_path").classed("link_link",function(e){return e.link}).classed("link_subflow",function(e){return!e.link&&b})}),T.exit().remove(),Z.selectAll(".link_path").each(function(e){var n=d3.select(this);(e.added||e===D||e.selected||t[e.source.id]||t[e.target.id])&&(/link_line/.test(n.attr("class"))&&n.classed("link_subflow",function(e){return!e.link&&b}),n.attr("d",function(e){var t=-((e.source.outputs||1)-1)/2*13+13*(e.sourcePort||0);e.x1=e.source.x+e.source.w/2,e.y1=e.source.y+t,e.x2=e.target.x-e.target.w/2,e.y2=e.target.y;var n=re(e.x1,e.y1,e.x2,e.y2,1);return/NaN/.test(n)?"":n}))}),T.classed("link_selected",function(e){return e===D||e.selected}),T.classed("link_unknown",function(e){return delete e.added,"unknown"==e.target.type||"unknown"==e.source.type});var _=Z.selectAll(".link_flow_link_g").data(w,function(e){return e.node.id+":"+e.refresh});_.enter().insert("g",".node").attr("class","link_flow_link_g").each(function(e,t){var n=d3.select(this),o=1,i="start";"link in"===e.node.type&&(o=-1,i="end");var a=30*o,l=20*o,d=(n.append("svg:path").attr("class","link_flow_link").attr("class","link_link").attr("d","M 0 0 h "+a),e.links),c=Object.keys(d),p=RED.nodes.getWorkspaceOrder();c.sort(function(e,t){return p.indexOf(e)-p.indexOf(t)});var u=r,f=-(c.length-1)*u/2,h=n.selectAll(".link_group").data(c);h.enter().append("g").attr("class","link_group").on("mouseover",function(){0===S&&d3.select(this).classed("link_group_active",!0)}).on("mouseout",function(){0===S&&d3.select(this).classed("link_group_active",!1)}).on("mousedown",function(){d3.event.preventDefault(),d3.event.stopPropagation()}).on("mouseup",function(t){if(0===S){d3.event.stopPropagation();var n=e.links[t];RED.workspaces.show(t),n.forEach(function(e){e.selected=!0,e.dirty=!0,O.push({n:e})}),me(),Me()}}).each(function(e){var t=d3.select(this);t.append("svg:path").attr("class","link_flow_link").attr("class","link_link").attr("d","M "+a+" 0 C "+(a+1.7*l)+" 0 "+(a+.1*l)+" "+f+" "+(a+1.5*l)+" "+f+" "),t.append("svg:path").attr("class","link_port").attr("d","M "+(a+1.5*l+17*o)+" "+(f-12)+" h "+10*-o+" a 3 3 45 0 "+(1===o?"0":"1")+" "+-3*o+" 3 v 18 a 3 3 45 0 "+(1===o?"0":"1")+" "+3*o+" 3 h "+10*o),t.append("svg:path").attr("class","link_port").attr("d","M "+(a+1.5*l+20*o)+" "+(f-12)+" h "+30*o+" M "+(a+1.5*l+20*o)+" "+(f+12)+" h "+30*o).style("stroke-dasharray","12 3 8 4 3"),t.append("rect").attr("class","port link_port").attr("x",a+1.5*l-4+4*o).attr("y",f-4).attr("rx",2).attr("ry",2).attr("width",8).attr("height",8),t.append("rect").attr("x",a+1.5*l-(-1===o?s:0)).attr("y",f-12).attr("width",s).attr("height",24).style("stroke","none").style("fill","transparent");var n,r=RED.nodes.workspace(e);r&&(n=r.label||r.id),t.append("svg:text").attr("class","port_label").attr("x",a+1.5*l+15*o).attr("y",f+1).style("font-size","10px").style("text-anchor",i).text(n),f+=u}),h.exit().remove()}),_.exit().remove(),(_=Z.selectAll(".link_flow_link_g")).each(function(e){var t=1;"link in"===e.node.type&&(t=-1),d3.select(this).attr("transform",function(e){return"translate("+(e.node.x+t*e.node.w/2)+","+e.node.y+")"})})}else Z.selectAll(".link_selected").data(y,function(e){return e.source.id+":"+e.sourcePort+":"+e.target.id+":"+e.target.i}).classed("link_selected",!1);RED.view.navigator.refresh(),d3.event&&d3.event.preventDefault()}function Be(){try{var e=window.parent.window.scrollX,t=window.parent.window.scrollY;$("#chart").focus(),window.parent.window.scrollTo(e,t)}catch(e){$("#chart").focus()}}function Ue(e,t,n){try{let t=function(e){try{let n=JSON.parse(e);return n&&Array.isArray(n)?n.filter(e=>e.hasOwnProperty("type")&&"tab"!==e.type):n}catch(e){var t=new Error(`Invalid flow: ${e.message}`);throw t.code="NODE_RED",t}}(e);var o;b&&(o=b.changed);var i=RED.nodes.import(t,!0,!1);if(i){var a=i[0],l=i[1],d=i[2],c=i[3];i[4];0;var p=a.filter(function(e){return e.hasOwnProperty("x")&&e.hasOwnProperty("y")&&e.z==RED.workspaces.active()}).map(function(e){return{n:e}}),u=a.map(function(e){return e.changed=!0,e.id});if(p.length>0){var f=p[0].n,h=f.x,g=f.y;null==C&&(C=[0,0]);var m,y,w=0,$=0;for(m=0;m<p.length;m++)(y=p[m]).n.selected=!0,y.n.changed=!0,y.n.moved=!0,y.n.x-=h-C[0],y.n.y-=g-C[1],y.dx=y.n.x-C[0],y.dy=y.n.y-C[1],w=Math.min(y.n.x-s/2-5,w),$=Math.min(y.n.y-r/2-5,$);for(m=0;m<p.length;m++)if((y=p[m]).n.x-=w,y.n.y-=$,y.dx-=w,y.dy-=$,y.n._def.onadd)try{y.n._def.onadd.call(y.n)}catch(e){console.log("Definition error: "+y.n.type+".onadd:",e)}n||(S=RED.state.IMPORT_DRAGGING,v=!1,1===p.length&&(y=p[0],v=y.n.hasOwnProperty("_def")&&y.n._def.inputs>0&&y.n._def.outputs>0)),RED.keyboard.add("*","escape",function(){RED.keyboard.remove("escape"),ve(),RED.history.pop(),S=0}),ve(),O=p}var x={t:"add",nodes:u,links:l,workspaces:d,subflows:c,dirty:RED.nodes.dirty()};if(0===p.length&&RED.nodes.dirty(!0),b){var D=RED.subflow.refresh(!0);D&&(x.subflow={id:b.id,changed:o,instances:D.instances})}RED.history.push(x),se(),Me();var E=[],k=0,R=0;if(a.forEach(function(e){e.hasOwnProperty("x")&&e.hasOwnProperty("y")?k++:R++}),d.length>0&&E.push(`${d.length} flow`),k>0&&E.push(`${k} node`),R>0&&E.push(`${k} configuration node`),c.length>0&&E.push(`${c.length} subflow`),E.length>0){var T="<ul><li>"+E.join("</li><li>")+"</li></ul>";RED.notify(`<p>Imported:</p> ${T}`)}}}catch(e){"NODE_RED"!=e.code?(console.log(e.stack),RED.notify(`<strong>Error</strong>: ${e.toString()}`,"error")):RED.notify(`<strong>Error</strong>: ${e.message}`,"error")}}function qe(e,t,n){return`${e||""} ${t}`.length<=n}function Fe(e,t,n){const o=n.length;if(e.length<=t-o)return`${e}${n}`;{let i=t-o;return`${e.substring(0,i)}${n}`}}function Je(e,t){return e?`${e} ${t}`:t}function We(){let e=[];const t=window.__kumologica.libs.dagre;let n=RED.view.getActiveNodes(),o=new t.graphlib.Graph;o.setGraph({rankdir:"LR",nodesep:50,marginx:50,marginy:50}),o.setDefaultEdgeLabel(function(){return{}}),n.forEach(e=>{o.setNode(e.id,{label:e.name,width:45,height:45})}),RED.view.getActiveLinks().forEach(e=>{o.setEdge(e.source.id,e.target.id)}),t.layout(o),o.nodes().forEach(t=>{if(t){let i=n.find(e=>e.id===t);i&&(e.push({n:i,ox:i.x,oy:i.y,moved:i.moved}),i.dirty=!0,i.moved=!0,i.x=o.node(t).x,i.y=o.node(t).y)}});let i={t:"move",nodes:e,dirty:RED.nodes.dirty()};RED.view.redraw(!0),RED.nodes.dirty(!0),RED.history.push(i)}return{init:function(){RED.events.on("workspace:change",function(e){0!==e.old&&(f[e.old]={left:G.scrollLeft(),top:G.scrollTop()});var t=G.scrollLeft(),n=G.scrollTop();b=RED.nodes.subflow(e.workspace),RED.menu.setDisabled("menu-item-workspace-edit",b),RED.menu.setDisabled("menu-item-workspace-delete",1==RED.workspaces.count()||b),f[e.workspace]?(G.scrollLeft(f[e.workspace].left),G.scrollTop(f[e.workspace].top)):(G.scrollLeft(0),G.scrollTop(0));var o=G.scrollLeft()-t,i=G.scrollTop()-n;null!=C&&(C[0]+=o,C[1]+=i),0===RED.workspaces.selection().length&&ve(),RED.nodes.eachNode(function(e){e.dirty=!0}),me(!0),se(),Me()}),RED.view.navigator.init(),$("#btn-zoom-out").click(function(){ue()}),RED.popover.tooltip($("#btn-zoom-out"),"Zoom out","core:zoom-out"),$("#btn-zoom-zero").click(function(){fe()}),RED.popover.tooltip($("#btn-zoom-zero"),"Reset zoom","core:zoom-reset"),$("#btn-zoom-in").click(function(){pe()}),$("#btn-minimize-restore").click(()=>{he(a=1===a?.6:1)}),$("#btn-layouter").click(function(){We()}),RED.popover.tooltip($("#btn-layouter"),"Apply automatic layout"),RED.popover.tooltip($("#btn-zoom-in"),"Zoom in","core:zoom-in"),$("#chart").on("DOMMouseScroll mousewheel",function(e){e.altKey&&(e.preventDefault(),e.stopPropagation(),(-e.originalEvent.detail||e.originalEvent.wheelDelta)<=0?ue():pe())}),$("#chart").droppable({accept:".palette_node",drop:function(e,t){d3.event=e;var n=le(t.draggable[0].type);if(n){var o=n.historyEvent,i=n.node,s=RED.utils.getMessageProperty(RED.settings.get("editor"),"view.view-node-show-label");void 0===s||/^link (in|out)$/.test(i._def.type)||i._def.defaults.hasOwnProperty("l")||(i.l=s);var r=d3.touches(t.helper.get(0))[0]||d3.mouse(t.helper.get(0)),l=d3.touches(this)[0]||d3.mouse(this);l[1]+=this.scrollTop+(i.h/2-r[1]),l[0]+=this.scrollLeft+(i.w/2-r[0]),l[1]/=a,l[0]/=a,g&&(l[0]=h*Math.ceil(l[0]/h),l[1]=h*Math.ceil(l[1]/h)),i.x=l[0],i.y=l[1];var d=$(t.helper).data("splice");if(d){RED.nodes.removeLink(d);var c={source:d.source,sourcePort:d.sourcePort,target:i},p={source:i,sourcePort:0,target:d.target};RED.nodes.addLink(c),RED.nodes.addLink(p),o.links=[c,p],o.removedLinks=[d]}RED.history.push(o),RED.nodes.add(i),RED.editor.validateNode(i),RED.nodes.dirty(!0),ve(),i.selected=!0,O.push({n:i}),se(),me(),Me(),i._def.autoedit&&RED.editor.edit(i)}}}),$("#chart").focus(function(){$("#workspace-tabs").addClass("workspace-focussed")}),$("#chart").blur(function(){$("#workspace-tabs").removeClass("workspace-focussed")}),RED.actions.add("core:copy-selection-to-internal-clipboard",$e),RED.actions.add("core:cut-selection-to-internal-clipboard",function(){$e(),we()}),RED.actions.add("core:paste-from-internal-clipboard",function(){Ue(F)}),RED.actions.add("core:delete-selection",we),RED.actions.add("core:edit-selected-node",ye),RED.actions.add("core:undo",RED.history.pop),RED.actions.add("core:select-all-nodes",ge),RED.actions.add("core:zoom-in",pe),RED.actions.add("core:zoom-out",ue),RED.actions.add("core:zoom-reset",fe),RED.actions.add("core:toggle-show-grid",function(e){void 0===e?RED.userSettings.toggle("view-show-grid"):Q.style("visibility","hidden")}),RED.actions.add("core:toggle-snap-grid",function(e){void 0===e?RED.userSettings.toggle("view-snap-grid"):function(e){g=e,Me()}(e)}),RED.actions.add("core:toggle-status",function(e){void 0===e?RED.userSettings.toggle("view-node-status"):(P=e,RED.nodes.eachNode(function(e){e.dirty=!0}),Me())}),RED.view.tools.init()},state:function(e){if(null==e)return S;S=e},redraw:function(e){e&&(se(),me()),Me()},focus:Be,importNodes:Ue,calculateTextWidth:function(e,t,n){return xe(e,t,n,0)[0]},select:function(e,t,n,o){if(void 0!==e){if(ve(),"string"==typeof e){var i=RED.nodes.node(e);if(o){let e=i;if("config"!==e._def.category&&e.z){e.dirty=!0,RED.workspaces.show(e.z);var s=[G.width()/a,G.height()/a],r=[G.scrollLeft()/a,G.scrollTop()/a];if(e.x<r[0]||e.y<r[1]||e.x>s[0]+r[0]||e.y>s[1]+r[1]){var l="-="+(r[0]-e.x+s[0]/2)*a,d="-="+(r[1]-e.y+s[1]/2)*a;G.animate({scrollLeft:l,scrollTop:d},200)}}}i&&(i.selected=!0,i.dirty=!0,O=[{n:i}])}if(Array.isArray(e)){let t=0===e.length?RED.nodes.filterNodes({z:"main.flow"}):RED.nodes.filterNodes({id:e});t&&Array.isArray(t)&&(O=[],t.forEach(e=>{e.selected=!0,e.dirty=!0,O.push({n:e})}))}}else ve();me(n),Me(t)},selection:function(){var e={};return O.length>0&&(e.nodes=O.map(function(e){return e.n})),null!=D&&(e.link=D),e},scale:function(){return a},getLinksAtPoint:function(e,t){for(var n=[],o=K.selectAll(".link_background")[0],i=0;i<o.length;i++){var a=o[i].getBBox();e>=a.x&&t>=a.y&&e<=a.x+a.width&&t<=a.y+a.height&&n.push(o[i])}return n},reveal:function(e){if(RED.nodes.workspace(e)||RED.nodes.subflow(e))RED.workspaces.show(e);else{var t=RED.nodes.node(e);if("config"!==t._def.category&&t.z){t.highlighted=!0,t.dirty=!0,RED.workspaces.show(t.z);var n=[G.width()/a,G.height()/a],o=[G.scrollLeft()/a,G.scrollTop()/a];if(t.x<o[0]||t.y<o[1]||t.x>n[0]+o[0]||t.y>n[1]+o[1]){var i="-="+(o[0]-t.x+n[0]/2)*a,s="-="+(o[1]-t.y+n[1]/2)*a;G.animate({scrollLeft:i,scrollTop:s},200)}if(!t._flashing){t._flashing=!0;var r=22,l=function(){r--,t.dirty=!0,r>=0?(t.highlighted=!t.highlighted,setTimeout(l,100)):(t.highlighted=!1,delete t._flashing),RED.view.redraw()};l()}}else"config"===t._def.category&&RED.sidebar.config.show(e)}},gridSize:function(e){if(void 0===e)return h;h=Math.max(5,e),function(){for(var e=[],t=0;t<n;t+=+h)e.push(t);Q.selectAll("line.horizontal").remove(),Q.selectAll("line.horizontal").data(e).enter().append("line").attr({class:"horizontal",x1:0,x2:n,y1:function(e){return e},y2:function(e){return e},fill:"none","shape-rendering":"crispEdges",stroke:"#eee","stroke-width":"1px"}),Q.selectAll("line.vertical").remove(),Q.selectAll("line.vertical").data(e).enter().append("line").attr({class:"vertical",y1:0,y2:n,x1:function(e){return e},x2:function(e){return e},fill:"none","shape-rendering":"crispEdges",stroke:"#eee","stroke-width":"1px"})}()},getActiveNodes:function(){return m},getActiveLinks:function(){return y},showTooltip:Ce,applyLayout:We}}(),RED.view.navigator=function(){var e,t,n,o,i,a,s,r,l,d=25,c=5e3/d,p=5e3/d,u=!1;function f(){if(u){var e=o.selectAll(".navnode").data(RED.view.getActiveNodes(),function(e){return e.id});e.exit().remove(),e.enter().insert("rect").attr("class","navnode").attr("pointer-events","none"),e.each(function(e){d3.select(this).attr("x",function(e){return(e.x-e.w/2)/d}).attr("y",function(e){return(e.y-e.h/2)/d}).attr("width",function(e){return Math.max(9,e.w/d)}).attr("height",function(e){return Math.max(3,e.h/d)}).attr("fill",function(e){return RED.utils.getNodeColor(e.type,e._def)})})}}function h(){l||g()}function g(){n&&(a=RED.view.scale(),s=[$("#chart").width(),$("#chart").height()],i=[$("#chart").scrollLeft(),$("#chart").scrollTop()],n.attr("x",i[0]/d).attr("y",i[1]/d).attr("width",s[0]/d/a).attr("height",s[1]/d/a))}function v(){u?(u=!1,e.fadeOut(100),$("#chart").off("scroll",h),$("#btn-navigate").removeClass("selected")):(u=!0,$("#btn-navigate").addClass("selected"),g(),f(),$("#chart").on("scroll",h),e.fadeIn(200))}return{init:function(){$(window).resize(g),RED.events.on("sidebar:resize",g),RED.actions.add("core:toggle-navigator",v),e=$("<div>").css({position:"absolute",bottom:$("#workspace-footer").height(),right:0,zIndex:1}).appendTo("#workspace").hide(),(t=d3.select(e[0]).append("svg:svg").attr("width",c).attr("height",p).attr("pointer-events","all").style({position:"absolute",bottom:0,right:0,zIndex:101,"border-left":"1px solid #ccc","border-top":"1px solid #ccc",background:"rgba(245,245,245,0.8)","box-shadow":"-1px 0 3px rgba(0,0,0,0.1)"})).append("rect").attr("x",0).attr("y",0).attr("width",c).attr("height",p).style({fill:"none",stroke:"none",pointerEvents:"all"}).on("mousedown",function(){a=RED.view.scale(),s=[$("#chart").width(),$("#chart").height()],r=[s[0]/d/a,s[1]/d/a];var e=Math.max(0,Math.min(d3.event.offsetX+r[0]/2,c)-r[0]),t=Math.max(0,Math.min(d3.event.offsetY+r[1]/2,p)-r[1]);n.attr("x",e).attr("y",t),l=!0,$("#chart").scrollLeft(e*d*a),$("#chart").scrollTop(t*d*a)}).on("mousemove",function(){if(l)if(0!==d3.event.buttons){var e=Math.max(0,Math.min(d3.event.offsetX+r[0]/2,c)-r[0]),t=Math.max(0,Math.min(d3.event.offsetY+r[1]/2,p)-r[1]);n.attr("x",e).attr("y",t),$("#chart").scrollLeft(e*d*a),$("#chart").scrollTop(t*d*a)}else l=!1}).on("mouseup",function(){l=!1}),n=t.append("rect").attr("stroke-dasharray","5,5").attr("pointer-events","none").style({stroke:"#999",strokeWidth:1,fill:"white"}),o=t.append("svg:g"),$("#btn-navigate").click(function(e){e.preventDefault(),v()}),RED.popover.tooltip($("#btn-navigate"),"Toggle navigator","core:toggle-navigator")},refresh:f,resize:g,toggle:v}}(),RED.view.tools=function(){function e(){var e=RED.view.selection();if(e.nodes){var t=[];e.nodes.forEach(function(e){var n=e.w/2+Math.round((e.x-e.w/2)/RED.view.gridSize())*RED.view.gridSize(),o=Math.round(e.y/RED.view.gridSize())*RED.view.gridSize();e.x===n&&e.y===o||(t.push({n:e,ox:e.x,oy:e.y,moved:e.moved}),e.x=n,e.y=o,e.dirty=!0,e.moved=!0)}),t.length>0&&(RED.history.push({t:"move",nodes:t,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}}var t=null,n=!1;function o(){if(n=!1,t.length>0){for(var e=[],o=0;o<t.length;o++)e.push({n:t[o].n,ox:t[o].ox,oy:t[o].oy,moved:t[o].moved}),t[o].n.moved=!0,t[o].n.dirty=!0,delete t[o].ox,delete t[o].oy;RED.view.redraw(),RED.history.push({t:"move",nodes:e,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),t=null}}function i(e,i){if(null===t){var a=RED.view.selection();a.nodes&&(t=a.nodes.map(function(e){return{n:e}}))}if(t&&t.length>0){n||($(document).one("keyup",o),n=!0);for(var s,r=0,l=0,d=0;d<t.length;d++)null==(s=t[d]).ox&&null==s.oy&&(s.ox=s.n.x,s.oy=s.n.y,s.moved=s.n.moved),s.n.moved=!0,s.n.dirty=!0,s.n.x+=e,s.n.y+=i,s.n.dirty=!0,r=Math.min(s.n.x-s.n.w/2-5,r),l=Math.min(s.n.y-s.n.h/2-5,l);if(0!==r||0!==l)for(var c=0;c<t.length;c++)(s=t[c]).n.x-=r,s.n.y-=l;RED.view.redraw()}}return{init:function(){RED.actions.add("core:align-selection-to-grid",e),RED.actions.add("core:move-selection-up",function(){i(0,-1)}),RED.actions.add("core:move-selection-right",function(){i(1,0)}),RED.actions.add("core:move-selection-down",function(){i(0,1)}),RED.actions.add("core:move-selection-left",function(){i(-1,0)}),RED.actions.add("core:step-selection-up",function(){i(0,-RED.view.gridSize())}),RED.actions.add("core:step-selection-right",function(){i(RED.view.gridSize(),0)}),RED.actions.add("core:step-selection-down",function(){i(0,RED.view.gridSize())}),RED.actions.add("core:step-selection-left",function(){i(-RED.view.gridSize(),0)})},alignSelectionToGrid:e,moveSelection:i}}(),RED.sidebar=function(){var e=RED.tabs.create({id:"sidebar-tabs",onchange:function(e){$("#editor-stack").hide(),$("#sidebar-content").children().hide(),$("#sidebar-footer").children().hide(),e.onchange&&e.onchange.call(e),"nodeinfo"!==e.id&&($(e.wrapper).show(),e.toolbar&&$(e.toolbar).show())},onsame:function(e){e.onsame&&e.onsame.call(e)},onremove:function(e){$(e.wrapper).hide(),e.onremove&&e.onremove.call(e)},collapsible:!0});let t=null;var n={};var o={dragging:!1};$("#sidebar-separator").draggable({axis:"x",start:function(e,n){t||(t=n.position.left),o.closing=!1,o.opening=!1;$(window).width();if(o.start=n.position.left,o.workspaceWidth=$("#workspace").width(),o.workspaceRight=parseInt($("#workspace").css("right")),o.dragging=!0,!RED.menu.isSelected("menu-item-sidebar")){o.opening=!0;$("#sidebar").addClass("closing"),$("#workspace").css("right",7),$("#editor-stack").css("right",8),$("#sidebar").width(0),RED.menu.setSelected("menu-item-sidebar",!0),RED.events.emit("sidebar:resize")}o.width=$("#sidebar").width()},drag:function(e,n){let i=n.position.left-o.start;let a=o.width-i,s=o.workspaceRight-i;if(a>435)$("#sidebar").width(a),$("#workspace").css("right",s);else{$("#sidebar").width(433);$("#sidebar").width();$("#workspace").css("right",491),n.position.left=t,$("#sidebar").removeAttr("width")}RED.events.emit("sidebar:resize")},stop:function(e,t){o.dragging=!1,o.closing&&($("#sidebar").removeClass("closing"),RED.menu.setSelected("menu-item-sidebar",!1),$("#sidebar").width()<435&&($("#sidebar").width(435),$("#workspace").css("right",491))),RED.events.emit("sidebar:resize")}});var i=$('<div class="sidebar-control-right"><i class="fa fa-chevron-right"</div>').appendTo($("#sidebar-separator"));function a(t){let n=!1;if(t?($("#shelve-right").hasClass("shelf-selected")||(n=!0),$("#main-container").removeClass("sidebar-closed"),$("#shelve-right").addClass("shelf-selected"),e.resize()):($("#main-container").addClass("sidebar-closed"),$("#shelve-right").removeClass("shelf-selected")),RED.events.emit("sidebar:resize"),n&&RED.editor.getLatestNodeSelected()){const e=300;let t=RED.editor.getLatestNodeSelected().x,n=$("#chart").scrollLeft(),o=$("#sidebar").position().left;if(t-n+e>o){let n=t-o+e;$("#chart").animate({scrollLeft:n})}}}function s(t){t&&(r(t)||e.addTab(n[t]),e.activateTab(t))}function r(t){return e.contains(t)}function l(){$(".sidebar-shortcuts-icons").find("a.active").each(function(){$(this).removeClass("active selected")}),$("#sidebar-tabs").find("li.active").each(function(){$(this).removeClass("active")}),$("#sidebar-separator").hide()}function d(e){let t=$("#sidebar-shortcuts").find(".sidebar-shortcuts-icons").children()[e];$(t).hasClass("selected")||$(t).click()}return i.click(function(){i.hide(),RED.menu.toggleSelected("menu-item-sidebar")}),$("#sidebar-separator").on("mouseenter",function(){o.dragging||(RED.menu.isSelected("menu-item-sidebar")?i.find("i").addClass("fa-chevron-right").removeClass("fa-chevron-left"):i.find("i").removeClass("fa-chevron-right").addClass("fa-chevron-left"),i.toggle("slide",{direction:"right"},200))}),$("#sidebar-separator").on("mouseleave",function(){o.dragging||i.hide()}),{init:function(){RED.actions.add("core:toggle-sidebar",function(e){void 0===e?RED.menu.toggleSelected("menu-item-sidebar"):a(e)}),RED.actions.add("core:show-sidebar",function(e){a(!0);let t=$("#sidebar-separator");t.show();let n=t.position().left,o=$("#main-container").width()-n-1;$("#workspace").css("right",o),e&&e.hasOwnProperty("selectIndex")&&d(e.selectIndex)}),RED.actions.add("core:hide-sidebar",function(){a(!1),l()}),RED.sidebar.nodeinfo.init(),RED.sidebar.info.init(),RED.sidebar.test.init(),RED.sidebar.kumohub.init(),RED.sidebar.azure.init(),RED.sidebar.awsDeploy.init(),$(".palette-textinput").click(function(e){e.preventDefault(),$(this).select()})},addTab:function(t,o,i,a){var r;"string"==typeof t?r={id:o.id,label:t,name:t,content:o,closeable:i,visible:a}:"object"==typeof t&&(r=t),"config"!==r.label&&"context"!==r.label&&(delete r.closeable,r.wrapper=$("<div>",{style:"height:100%"}).appendTo("#sidebar-content"),r.wrapper.append(r.content),r.wrapper.hide(),r.enableOnEdit||(r.shade=$("<div>",{class:"sidebar-shade hide"}).appendTo(r.wrapper)),r.toolbar&&($("#sidebar-footer").append(r.toolbar),$(r.toolbar).hide()),r.id,RED.menu.addItem("menu-item-view-menu",{id:"menu-item-view-menu-"+r.id,label:r.name,onselect:function(){s(r.id)},group:"sidebar-tabs"}),r.iconClass=r.iconClass||"fa fa-square-o",n[r.id]=r,!1!==r.visible&&e.addTab(n[r.id]))},removeTab:function(t){e.removeTab(t),$(n[t].wrapper).remove(),n[t].footer&&n[t].footer.remove(),delete n[t],RED.menu.removeItem("menu-item-view-menu-"+t)},show:s,containsTab:r,toggleSidebar:a,maximize:function(){const e=$("#main-container").width(),t=$("#palette").width(),n=e-50-t-$("#sidebar-separator").width();$("#sidebar").width(n),$("#sidebar-separator").css("left",t),$("#workspace").css("right",491),RED.events.emit("sidebar:resize")},restore:function(){$("#sidebar").width(435),$("#sidebar-separator").css("left",""),RED.events.emit("sidebar:resize")},deselectAll:l,selectTab:d,isSidebarVisible:function(){return!$("#main-container").hasClass("sidebar-closed")}}}(),RED.palette=function(){var e,t=["config","unknown","deprecated"],n=["general","transformation","routing","security","web","validation","testing","logging","exception","kumohub","aws","queue","storage","file","social"],o={};function i(e,t,n,o){0===$("#palette-base-category-"+t).length&&a(e,t,o+":palette.label."+t),$("#palette-container-"+t).show(),0===$("#palette-"+n).length&&$("#palette-base-category-"+t).append('<div id="palette-'+n+'"></div>')}function a(e,t,n){var i=RED._(n,{defaultValue:t});i=(i||t).replace(/_/g," ");var a=$('<div id="palette-container-'+t+'" class="palette-category palette-close hide"><div id="palette-header-'+t+'" class="palette-header"><i class="expanded fa fa-angle-down"></i><span>'+i+'</span></div><div class="palette-content" id="palette-base-category-'+t+'"><div id="palette-'+t+'-input"></div><div id="palette-'+t+'-output"></div><div id="palette-'+t+'-function"></div></div></div>').appendTo("#palette-container");a.data("category",e),a.data("label",i),o[t]={container:a,close:function(){a.removeClass("palette-open"),a.addClass("palette-closed"),$("#palette-base-category-"+t).slideUp(),$("#palette-header-"+t+" i").removeClass("expanded")},open:function(){a.addClass("palette-open"),a.removeClass("palette-closed"),$("#palette-base-category-"+t).slideDown(),$("#palette-header-"+t+" i").addClass("expanded")},toggle:function(){a.hasClass("palette-open")?o[t].close():o[t].open()}},$("#palette-header-"+t).on("click",function(e){o[t].toggle()})}function s(e,t,n,o){for(var i=(n=RED.utils.sanitize(n)).split(/[ -]/),a=[],s=i[0],r=(RED.view.calculateTextWidth(s,"palette_label",0),1);r<i.length;r++){var l=RED.view.calculateTextWidth(s+" "+i[r],"palette_label",0);l<120?(s+=" "+i[r],l):(a.push(s),s=i[r],RED.view.calculateTextWidth(s,"palette_label",0))}a.push(s);var d,c=a.join("<br/>"),p=8+20*a.length;t.css({height:p+"px"}),t.find(".palette_label").html(c).attr("dir",RED.text.bidi.resolveBaseTextDir(c)),t.find(".palette_port").css({top:"11px"});try{var u="<p><b>"+RED.text.bidi.enforceTextDirectionWithUCC(n)+"</b></p>";(d=$("<div></div>").append($(u+(o||($("script[data-help-name='"+e+"']").html()||"<p>"+RED._("palette.noInfo")+"</p>")).trim()).filter(function(e){return 1==this.nodeType&&"P"==this.nodeName||3==this.nodeType&&this.textContent.trim().length>0}).slice(0,2))).find("a").each(function(){var e=$(this).text();$(this).before(e),$(this).remove()});var f=RED.nodes.getType(e);if(f){var h="";f&&!/^subflow:/.test(e)&&(h=f.set.module+" : "),h+=e,$("<p>",{style:"font-size: 0.8em"}).text(h).appendTo(d)}}catch(t){console.log("Error generating pop-over label for ",e),console.log(t.toString()),d="<p><b>"+n+"</b></p><p>"+RED._("palette.noInfo")+"</p>"}t.data("popover").setContent(d)}function r(e){return e.replace(/[ .:]/g,"_")}function l(e,a){var l=r(e);if(!a.defaults._hidden&&!$("#palette_node_"+l).length&&-1===t.indexOf(a.category)){var d=a.category.toLowerCase().replace(/ /g,"_"),c=d.split("-")[0],p=document.createElement("div");p.id="palette_node_"+l,p.type=e;var u=/^(.*?)([ -]in|[ -]out)?$/.exec(e)[1];if(void 0!==a.paletteLabel)try{u=("function"==typeof a.paletteLabel?a.paletteLabel.call(a):a.paletteLabel)||""}catch(t){console.log("Definition error: "+e+".paletteLabel",t)}if($("<div/>",{class:"palette_label"}).appendTo(p),p.className="palette_node",a.icon){var f=RED.utils.getNodeIcon(a),h=$("<div/>",{class:"palette_icon_container"}).appendTo(p);RED.utils.createIconElement(f,h,!0)}if(a.outputs>0){var g=document.createElement("div");g.className="palette_port palette_port_output",p.appendChild(g)}if(a.inputs>0){var v=document.createElement("div");v.className="palette_port palette_port_input",p.appendChild(v)}i(a.category,c,d,-1!==n.indexOf(c)?"kumologica-core":a.set.id),$("#palette-"+d).append(p),$(p).data("category",c),p.onmousedown=function(e){e.preventDefault()};var b=RED.popover.create({target:$(p),trigger:"hover",width:"300px",content:"hi",delay:{show:750,hide:50}});$(p).data("popover",b),$(p).click(function(){var t;RED.view.focus(),t=0===e.indexOf("subflow:")?marked(RED.nodes.subflow(e.substring(8)).info||"")||'<span class="node-info-none">'+RED._("sidebar.info.none")+"</span>":$("script[data-help-name='"+p.type+"']").html()||'<span class="node-info-none">'+RED._("sidebar.info.none")+"</span>",RED.sidebar.info.set(t,RED._("sidebar.info.nodeHelp"))});var m,y,w,x,D,E,k=$("#chart"),R=$("#chart>svg").get(0);$(p).draggable({helper:"clone",appendTo:"body",revert:"invalid",revertDuration:300,containment:"#main-container",start:function(){D=$("#palette").width(),E=$("#palette").parent().position().top+$("#palette-container").position().top,RED.view.focus()},stop:function(){d3.select(".link_splice").classed("link_splice",!1),x&&(clearTimeout(x),x=null)},drag:function(e,t){t.originalPosition.left=$("#"+e.target.id).offset().left,a.inputs>0&&a.outputs>0&&(y=t.position.left-D+t.helper.width()/2+k.scrollLeft(),w=t.position.top-E+t.helper.height()/2+k.scrollTop(),x||(x=setTimeout(function(){var e=[],n=1/0,o=null;if(R.getIntersectionList){var i=R.createSVGRect();i.x=y,i.y=w,i.width=1,i.height=1,e=R.getIntersectionList(i,R),y/=RED.view.scale(),w/=RED.view.scale()}else y/=RED.view.scale(),w/=RED.view.scale(),e=RED.view.getLinksAtPoint(y,w);for(var a=0;a<e.length;a++){var s=d3.select(e[a]);if(s.classed("link_background")&&!s.classed("link_link"))for(var r=e[a].getTotalLength(),l=0;l<r;l+=10){var d=e[a].getPointAtLength(l),c=(d.x-y)*(d.x-y)+(d.y-w)*(d.y-w);c<200&&c<n&&(n=c,o=e[a])}}m&&m!==o&&d3.select(m.parentNode).classed("link_splice",!1),o?d3.select(o.parentNode).classed("link_splice",!0):d3.select(".link_splice").classed("link_splice",!1),m!==o&&(o?$(t.helper).data("splice",d3.select(o).data()[0]):$(t.helper).removeData("splice")),m=o,x=null},200)))}});var T=null;0===e.indexOf("subflow:")&&($(p).dblclick(function(t){RED.workspaces.show(e.substring(8)),t.preventDefault()}),T=marked(a.info||"")),s(e,$(p),u,T),1===$("#palette-container-"+c).find(".palette_node").length&&o[c].close()}}function d(e){var t=r(e),n=$("#palette_node_"+t),o=n.closest(".palette-category");n.remove(),0===o.find(".palette_node").length&&o.find("i").hasClass("expanded")&&(o.find(".palette-content").slideToggle(),o.find("i").toggleClass("expanded"))}function c(e){var t=r(e),n=$("#palette_node_"+t);n.hide();for(var o=n.closest(".palette-category"),i=o.find(".palette_node"),a=0,s=0;s<i.length;s++)"none"===$(i[s]).css("display")&&(a+=1);a===i.length&&o.hide()}function p(e){var t=r(e),n=$("#palette_node_"+t);n.closest(".palette-category").show(),n.show()}function u(e){let t=!1;""===e&&(!function(){for(var e in o)o.hasOwnProperty(e)&&o[e].close()}(),t=!0);var n=new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"i");for(var i in $("#palette-container .palette_node").each(function(t,o){var i=$(o).find(".palette_label").text();""===e||n.test(o.id)||n.test(i)?$(this).show():$(this).hide()}),o)o.hasOwnProperty(i)&&(0===o[i].container.find(".palette_node").filter(function(){return"none"!==$(this).css("display")}).length?o[i].close():t||o[i].open())}return{init:function(){RED.events.on("registry:node-type-added",function(e){var t=RED.nodes.getType(e);l(e,t),t.onpaletteadd&&"function"==typeof t.onpaletteadd&&t.onpaletteadd.call(t)}),RED.events.on("registry:node-type-removed",function(e){d(e)}),RED.events.on("registry:node-set-enabled",function(e){for(var t=0;t<e.types.length;t++){p(e.types[t]);var n=RED.nodes.getType(e.types[t]);n&&n.onpaletteadd&&"function"==typeof n.onpaletteadd&&n.onpaletteadd.call(n)}}),RED.events.on("registry:node-set-disabled",function(e){for(var t=0;t<e.types.length;t++){c(e.types[t]);var n=RED.nodes.getType(e.types[t]);n&&n.onpaletteremove&&"function"==typeof n.onpaletteremove&&n.onpaletteremove.call(n)}}),RED.events.on("registry:node-set-removed",function(e){if(e.added)for(var t=0;t<e.types.length;t++){d(e.types[t]);var n=RED.nodes.getType(e.types[t]);n&&n.onpaletteremove&&"function"==typeof n.onpaletteremove&&n.onpaletteremove.call(n)}}),$("#palette > .palette-spinner").show(),$("#palette-search input").searchBox({delay:100,change:function(){u($(this).val())}}),e=$('<div class="sidebar-control-left"><i class="fa fa-chevron-left"</div>').appendTo($("#palette")),RED.popover.tooltip(e,RED._("keyboard.togglePalette"),"core:toggle-palette"),e.click(function(){RED.menu.toggleSelected("menu-item-palette")}),$("#palette").on("mouseenter",function(){e.toggle("slide",{direction:"left"},200)}),$("#palette").on("mouseleave",function(){e.hide()});var t=n;RED.settings.paletteCategories?t=RED.settings.paletteCategories:RED.settings.theme("palette.categories")&&(t=RED.settings.theme("palette.categories")),Array.isArray(t)||(t=n),t.forEach(function(e){a(e,e,"palette.label."+e)}),$("#palette-collapse-all").on("click",function(e){for(var t in e.preventDefault(),o)o.hasOwnProperty(t)&&o[t].close()}),RED.popover.tooltip($("#palette-collapse-all"),RED._("palette.actions.collapse-all")),$("#palette-expand-all").on("click",function(e){for(var t in e.preventDefault(),o)o.hasOwnProperty(t)&&o[t].open()}),RED.popover.tooltip($("#palette-expand-all"),RED._("palette.actions.expand-all")),RED.actions.add("core:palette-collapse-all",function(e){for(var t in o)o.hasOwnProperty(t)&&o[t].close()}),RED.actions.add("core:toggle-palette",function(t){void 0===t?RED.menu.toggleSelected("menu-item-palette"):function(t){t?($("#main-container").removeClass("palette-closed"),e.find("i").removeClass("fa-chevron-right").addClass("fa-chevron-left")):($("#main-container").addClass("palette-closed"),e.hide(),e.find("i").addClass("fa-chevron-right").removeClass("fa-chevron-left")),setTimeout(function(){$(window).resize()},200)}(t)})},add:l,remove:d,hide:c,show:p,refresh:function(){RED.nodes.eachSubflow(function(e){var t=$("#palette_node_subflow_"+e.id.replace(".","_")),n=t.find(".palette_port_input"),a=t.find(".palette_port_output");if(t.find(".palette_label").attr("class","palette_label"),t.find(".palette_icon_container").attr("class","palette_icon_container"),0===n.length&&e.in.length>0){var r=document.createElement("div");r.className="palette_port palette_port_input",t.append(r)}else 0!==n.length&&0===e.in.length&&n.remove();if(0===a.length&&e.out.length>0){var l=document.createElement("div");l.className="palette_port palette_port_output",t.append(l)}else 0!==a.length&&0===e.out.length&&a.remove();s(e.type+":"+e.id,t,e.name,marked(e.info||"")),function(e,t){var n=RED.utils.getNodeIcon(t._def),o=e.find(".palette_icon_container");RED.utils.createIconElement(n,o,!0)}(t,e);var d=t.data("category"),c=e.category||"subflows";if(d!==c){var p=c.replace(/ /g,"_");i(c,p,p,"kumologica-core");var u=t.closest(".palette-category"),f=$("#palette-"+p);f.append(t),1===f.find(".palette_node").length&&o[p].open(),t.data("category",c),0===u.find(".palette_node").length&&u.find("i").hasClass("expanded")&&(u.find(".palette-content").slideToggle(),u.find("i").toggleClass("expanded"))}})},getCategories:function(){var e=[];return $("#palette-container .palette-category").each(function(t,n){e.push({id:$(n).data("category"),label:$(n).data("label")})}),e}}}(),RED.sidebar.info=function(){var e,t,n,o;marked.setOptions({renderer:new marked.Renderer,gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1});var i={property:!0};function a(){RED.sidebar.show("info")}function s(e){if(void 0!==e){var a;t.show(),$(n.content).empty(),$(o.content).empty();var s,l,d=$('<table class="node-info"></table>').appendTo(n.content),c=$("<tbody>").appendTo(d);RED.projects.getActiveProject();if(n.container.show(),o.container.show(),null!==e)if(Array.isArray(e)){var p={nodes:0,flows:0,subflows:0};e.forEach(function(e){"tab"===e.type?(p.flows++,p.nodes+=RED.nodes.filterNodes({z:e.id}).length):"subflow"===e.type?p.subflows++:p.nodes++}),o.container.hide(),a=$('<tr class="node-info-node-row"><td>Selection</td><td></td></tr>').appendTo(c);var u=$("<div>").appendTo($(a.children()[1]));p.flows>0&&$("<div>").text("Flows").appendTo(u),p.subflows>0&&$("<div>").text("Subflows").appendTo(u),p.nodes>0&&$("<div>").text("Node").appendTo(u)}else{var f=/^subflow(:(.+))?$/.exec(e.type);if(f){s=f[2]?RED.nodes.subflow(f[2]):e,l=0;var h="subflow:"+s.id;RED.nodes.eachNode(function(e){e.type===h&&l++})}if("tab"===e.type||"subflow"===e.type){a=$('<tr class="node-info-node-row">\n <td>Id</td>\n <td></td>\n </tr>').appendTo(c),$(a.children()[1]).text(e.id);let t="tab"===e.type?"Flow":"Subflow";a=$(`<tr class="node-info-node-row">\n <td>Type</td>\n <td>${t}</td>\n </tr>`).appendTo(c),a=$('<tr class="node-info-node-row"><td>Workspace</td><td></td></tr>').appendTo(c),$(a.children()[1]).text(e.label||e.name||""),"tab"===e.type&&(a=$('<tr class="node-info-node-row"><td>Status</td><td></td></tr>').appendTo(c),$(a.children()[1]).text(e.disabled?"Disabled":"Enabled"))}else{a=$('<tr class="node-info-node-row">\n <td>Id</td>\n <td></td>\n </tr>').appendTo(c),$(a.children()[1]).text(e.id),f||(a=$('<tr class="node-info-node-row"><td>Type</td><td></td></tr>').appendTo(c),$(a.children()[1]).text("unknown"===e.type?e._orig.type:e.type),"unknown"===e.type&&$('<span style="float: right; font-size: 0.8em"><i class="fa fa-warning"></i></span>').prependTo($(a.children()[1]))),"subflow"!==e.type&&"unknown"!==e.type&&e.name&&(a=$('<tr class="node-info-node-row"><td>Name</td><td></td></tr>').appendTo(c),$('<span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(e.name)+'"></span>').text(e.name).appendTo(a.children()[1]));var g=0;if(!f&&"subflow"!=e.type){var v;if("unknown"===e.type?(v={},Object.keys(e._orig).forEach(function(e){"type"!==e&&(v[e]={})})):e._def&&(v=e._def.defaults,a=$('<tr class="node-info-property-row'+(i.property?"":" hide")+'"><td>Module</td><td></td></tr>').appendTo(c),$(a.children()[1]).text("core"),g++),v)for(var b in v)if("name"!=b&&"info"!=b&&v.hasOwnProperty(b)){var m=e[b];if(g++,a=$('<tr class="node-info-property-row'+(i.property?"":" hide")+'"><td>'+b+"</td><td></td></tr>").appendTo(c),v[b].type){var y=RED.nodes.node(m);if(y){var w=RED.utils.getNodeLabel(y,m),x=a.children()[1],D=$("<span>",{class:""}).appendTo(x),E=$("<div>",{class:"palette_node palette_node_small"}).appendTo(D),k=RED.utils.getNodeColor(y.type,y._def),R=RED.utils.getNodeIcon(y._def);E.css({backgroundColor:k,cursor:"pointer"});var T=$("<div/>",{class:"palette_icon_container"}).appendTo(E);$("<div/>",{class:"palette_icon",style:"background-image: url("+R+")"}).appendTo(T);$("<span></span>").css({verticalAlign:"top",marginLeft:"6px"}).text(w).appendTo(x);E.on("dblclick",function(){RED.editor.editConfig("",y.type,y.id)})}else RED.utils.createObjectElement(void 0).appendTo(a.children()[1])}else RED.utils.createObjectElement(m).appendTo(a.children()[1])}g>0&&$('<tr class="node-info-property-expand blank"><td colspan="2"><a href="#" class=" node-info-property-header'+(i.property?" expanded":"")+'"><span class="node-info-property-show-more">Show more</span><span class="node-info-property-show-less">Show less</span> <i class="fa fa-caret-down"></i></a></td></tr>').appendTo(c)}"tab"!==e.type&&f&&($('<tr class="blank"><th colspan="2">Subflow</th></tr>').appendTo(c),$('<tr class="node-info-subflow-row"><td>Name</td><td><span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(s.name)+'">'+RED.utils.sanitize(s.name)+"</span></td></tr>").appendTo(c))}if(f){a=$('<tr class="node-info-node-row"><td>Category</td><td></td></tr>').appendTo(c);s.category;$(a.children()[1]).text("Category"),$('<tr class="node-info-subflow-row"><td>Instances</td><td>'+l+"</td></tr>").appendTo(c)}var _="";"tab"===e.type||"subflow"===e.type?$(o.container).hide():($(o.container).show(),s&&"subflow"!==e.type?_=marked(s.info||"")||'<span class="node-info-none">None</span>':(_=$("script[data-help-name='"+e.type+"']").html()||'<span class="node-info-none">None</span>')&&_.trim().startsWith("#")&&(_=marked(_)),function(e,t){var n=(o=$('<div class="node-help"><span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(e)+'">'+e+"</span></div>"),$(o).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")}),o).appendTo(t);var o;n.find(".bidiAware").contents().filter(function(){return 3===this.nodeType&&""!==this.textContent.trim()}).wrap("<span></span>");n.find("H3").wrapInner('<a class="node-info-header expanded" href="#"></a>').find("a").prepend('<i class="fa fa-angle-right">').click(function(e){e.preventDefault();for(var t=$(this).hasClass("expanded"),n=$(this).parent().next();1===n.length&&"H3"!==n[0].nodeName;)n.toggle(!t),n=n.next();$(this).toggleClass("expanded",!t)})}(_,o.content));if(e._def&&e._def.info){var j=e._def.info,C="function"==typeof j?j.call(e):j;marked(C)}e.info&&$("body").on("click",".editor-preview a",e=>{e.stopImmediatePropagation(),e.preventDefault();let t=e.target.href;window.__kumologica.electron.shell.openExternal(t)}),$(".sidebar-node-info-stack").scrollTop(0),$(".node-info-property-header").click(function(e){e.preventDefault(),i.property=!i.property,$(this).toggleClass("expanded",i.property),$(".node-info-property-row").toggle(i.property)})}}else r()}function r(e){if(console.log("[tab-info] RefreshSelection: ",e),void 0===e&&(e=RED.view.selection()),e.nodes)if(1==e.nodes.length){var t=e.nodes[0];"subflow"===t.type&&t.direction?s(RED.nodes.subflow(t.z)):s(t)}else s(e.nodes);else if(e.flows||e.subflows)s(e.flows);else{var n=RED.workspaces.active(),o=RED.nodes.workspace(n)||RED.nodes.subflow(n);if(o)s(o);else{var i=RED.nodes.workspace(RED.workspaces.active());i&&i.info?s(i):s(null)}}}return RED.events.on("view:selection-changed",r),{init:function(){(e=document.createElement("div")).className="sidebar-node-info",RED.actions.add("core:show-info-tab",a);var i=$("<div>",{class:"sidebar-node-info-stack"}).appendTo(e);t=RED.stack.create({container:i}).hide(),(n=t.add({title:"Properties",collapsible:!0})).expand(),(o=t.add({title:"Help",collapsible:!0})).expand(),o.content.css("padding","6px")},show:a,refresh:s,clear:function(){s(null)},set:function(e,t){s(null),n.container.hide(),o.container.hide(),$(".sidebar-node-info-stack").scrollTop(0)}}}(),RED.sidebar.awsDeploy=function(){var e,t,n,o,i;marked.setOptions({renderer:new marked.Renderer,gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1});var a,s="Select AWS profile...",r="Define AWS profile",l=!1;const d="CONNECTED",c="DISCONNECTED",p="CONNECTING",u="DEPLOYING",f="NOTDEPLOYING";let h=f;var g=c;function v(){$("<style>").text("\n select {\n outline: 1.5px solid #ccc;\n }\n select:focus {\n outline: 1.5px solid #ccc; \n outline-offset: 0px;\n }\n\n .invalid {\n border: 1px solid red;\n }\n \n .valid {\n border: 1px solid green;\n }\n\n datalist {\n max-height: 300px;\n overflow-y: auto !important;\n }\n .editor-button-xsmall {\n height: 16px;\n min-width: 16px;\n line-height: 14px;\n font-size: 10px;\n border-radius: 2px;\n padding: 0 2px;\n }\n ").appendTo(document.head),(e=document.createElement("div")).className="sidebar-cloud",RED.actions.add("core:show-cloud-tab",L);var a=$("<div>",{class:"sidebar-node-info-stack"}).appendTo(e);$('\n <div class="sidebar-title-wrapper">\n <span>Deploy: AWS</span>\n </div>\n <div id="cloud-sidebar-header" class="sidebar-header">\n <div id="cloud-instrumentation" class="node-info">\n \n <div id="profiles-wrapper">\n <span style="padding-left: 3px">Profiles</span>\n <select id="cloud-sidebar-profiles" class="palette-textinput" style="padding: 0px;">\n <option value="Select AWS profile..." style="color:#3988CB !important">Click to select one...</option>\n </select>\n </div> \n \n <div id="cloudops-wrapper">\n \x3c!-- connect btn --\x3e\n <div>\n <a id="cloud-sidebar-connect-btn" class="sidebar-header-button" href="#">\n <i id="cloud-sidebar-connect-icon" class="fa fa-circle" style="color: red"></i> \n Connect\n </a>\n </div>\n\n \x3c!-- deploy btn --\x3e\n <div style="margin-right: 4px;">\n <a id="cloud-sidebar-deploy-btn" class="sidebar-header-button" href="#">\n <i id="cloud-sidebar-deploy-icon" class="fa fa-cloud-upload"></i> \n Deploy\n </a>\n </div>\n\n \x3c!-- export btn --\x3e\n <div id="cloud-options-dropdown">\n <a id="cloud-sidebar-export-btn" class="sidebar-header-button" href="#">\n <i class="fa fa-ellipsis-h"></i> \n </a>\n </div>\n <div id="cloud-options-dropdown-content">\n <span class="option-disabled">Generate script...</span>\n <span id="exportCloudFormationBtn" class="option">AWS CloudFormation</span>\n <span id="exportServerlessBtn" class="option">Serverless</span>\n </div> \n </div>\n </div>\n\n <table hidden id="cloud-sidebar-error" class="node-info" style="margin: 0px;">\n <tr>\n <td style="border: 0px solid white; padding: 3px; width: 100%;">\n <p style="font-size: 12px; margin: 0px; text-align: center; color:red;"><span>AWS profile has not been configured</span></p>\n </td>\n\n <td style="border: 0px solid white; padding: 3px;">\n <a id="cloud-sidebar-error-help-btn" class="editor-button editor-button-xsmall" href="https://docs.kumologica.com/docs/guide/GettingStarted.html#installation" target="_blank">\n <i class="fa fa-question"></i> \n </a>\n </td>\n \n <td style="border: 0px solid white; padding: 3px 6px 3px 3px;">\n <a id="cloud-sidebar-error-close-btn" class="editor-button editor-button-xsmall" href="#">\n <i class="fa fa-times"></i></a>\n </td>\n </tr>\n </table> \n </div>\n ').appendTo(a);let s=$('<div id="cloud-sidebar-body" style="display:none"></div>');s.appendTo(a),t=RED.stack.create({container:s}).hide(),(n=t.add({title:"function",collapsible:!0})).expand(),functionParametersSection=t.add({title:"more parameters",collapsible:!0}),o=t.add({title:"environment",collapsible:!0}),tagsSection=t.add({title:"tags",collapsible:!0}),(i=t.add({title:"Triggers",collapsible:!0})).expand(),RED.sidebar.addTab({id:"cloud",label:"Cloud",name:"AWS Deployer",iconClass:"fa fa-amazon",action:"core:show-cloud-tab",content:e,pinned:!0,enableOnEdit:!0,onchange:b,onsame:m});$('\n <table class="node-info">\n <tr class="node-info-node-row">\n <td>Name</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="cloud-fn-name" class="palette-textinput" pattern="[a-zA-Z0-9-_]{1,64}" type="text"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Description</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="cloud-fn-description" class="palette-textinput" type="text"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Memory (MB)</td>\n <td colspan="2" style="background: white"><input id="cloud-fn-memory" class="palette-textinput" type="number" min="128" max="1536"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Timeout (s)</td>\n <td colspan="2" style="background: white"><input id="cloud-fn-timeout" class="palette-textinput" type="number" min="5" max="900"></td>\n </tr>\n </table>\n ').appendTo(n.content),n.container.show();$('\n <table class="node-info">\n <tr class="node-info-node-row">\n <td>Res. Concurrency</td>\n <td colspan="2" style="background: white"><input id="cloud-fn-reservedConcurrency" class="palette-textinput" placeHolder="default" type="number"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Activate X-Ray</td>\n <td colspan="2" align="left" style="background: white; padding: 0px 6px 6px 12px; margin: 3px;"><input id="cloud-fn-x-ray" type="checkbox"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Custom Role</td>\n <td colspan="2" style="background: white; overflow-x:hidden"><input id="cloud-fn-role" list="iamroles-cloud-fn-role-dataList" style="width:100%" class="palette-textinput" placeHolder="optional" type="string"><datalist id="iamroles-cloud-fn-role-dataList"></datalist></td>\n </tr>\n </table>\n ').appendTo(functionParametersSection.content),functionParametersSection.container.show();$('\n <div style="display:flex; flex-direction: column; justify-content: flex-start;">\n <div style="display:flex; justify-content: flex-end; padding:6px">\n <a id="add-environment-variable" href="#" class="editor-button editor-button-small red-ui-editableList-addButton">\n <i class="fa fa-plus"></i> Add\n </a>\n </div>\n <div id="cloud-fn-env" style="display:flex; flex-direction: column">\n <table id="cloud-fn-env-table" class="node-info" style="table-layout: fixed">\n \n </table>\n </div>\n </div>\n ').appendTo(o.content),o.container.show();$('\n <div style="display:flex; flex-direction: column; justify-content: flex-start;">\n <div style="display:flex; justify-content: flex-end; padding:6px">\n <a id="add-tag" href="#" class="editor-button editor-button-small red-ui-editableList-addButton">\n <i class="fa fa-plus"></i> Add\n </a>\n </div>\n <div id="cloud-fn-tags" style="display:flex; flex-direction: column">\n <table id="cloud-fn-tags-table" class="node-info" style="table-layout: fixed">\n \n </table>\n </div>\n </div>\n ').appendTo(tagsSection.content),tagsSection.container.show(),$('\n <div style="display:flex; flex-direction: column; justify-content: flex-start;">\n <div style="display:flex; justify-content: flex-start; padding:6px; margin-right: 6px;">\n <select type="text" class="palette-textinput" id="eventSource" style="float: left; padding: 0px; height: 20px !important;">\n <option value="dynamodb">Amazon DynamoDB</option>\n <option value="kinesis">Amazon Kinesis</option>\n <option value="sqs">Amazon SQS</option>\n <option disabled>────────────────────</option>\n <option value="alb">Application Load Balancer</option>\n \x3c!--option value="cognito">Amazon Cognito Sync Trigger</option--\x3e\n \x3c!--option value="lex">Amazon Lex</option--\x3e\n <option value="alexa">Amazon Alexa</option>\n <option selected value="api">Amazon API Gateway</option>\n \x3c!--option value="cf">Amazon CloudFront (Lambda@Edge)</option--\x3e\n \x3c!--option value="firehose">Amazon Kinesis Data Firehose</option--\x3e\n <option disabled>────────────────────</option>\n <option value="s3">Amazon S3</option>\n <option value="sns">Amazon SNS</option>\n \x3c!--option value="ses">Amazon SES</option--\x3e\n \x3c!--option value="cloudformation">Amazon CloudFormation</option--\x3e\n \x3c!--option value="cwlogs">Amazon CloudWatch Logs</option--\x3e\n <option value="cwevents">Amazon CloudWatch Events</option>\n \x3c!--option value="codecommit">Amazon CodeCommit</option--\x3e\n \x3c!--option value="config">Amazon Config</option--\x3e\n <option value="iot">Amazon IoT Events</option>\n </select>\n\n <a id="add-event" href="#" style="float: right; margin: 0px 0px 0px 5px !important; height: 21px !important;" class="editor-button editor-button-small">\n <i class="fa fa-plus"></i> Event\n </a>\n </div>\n\n <div id="cloud-fn-event" style="display:flex; flex-direction: column">\n </div>\n </div>\n ').appendTo(i.content),i.container.show(),RED.popover.tooltip($("#cloud-sidebar-deploy-btn"),"Deploy to AWS"),RED.popover.tooltip($("#cloud-sidebar-connect-btn"),"Connect to AWS Account"),RED.popover.tooltip($("#cloud-options-dropdown"),"Other Cloud Operations"),RED.popover.tooltip($("#cloud-sidebar-profiles"),"Select AWS Profiles")}function b(){RED.actions.invoke("core:show-sidebar")}function m(){RED.actions.invoke("core:hide-sidebar")}function y(e){return e.replace(".json","").trim().replace(/^@/,"").replace(/[^a-zA-Z0-9-_]/g,"_").substr(0,140)}function w(e){$("#cloud-fn-name").val(y(e))}function x(e){if(l){if(e.name||e.functionName?w(e.name||e.functionName):window.__kumologica.settings.projectFlowName&&w(window.__kumologica.settings.projectFlowName),e.description&&$("#cloud-fn-description").val(e.description),e.memory&&$("#cloud-fn-memory").val(e.memory),e.timeout&&$("#cloud-fn-timeout").val(e.timeout),e.reservedConcurrency&&$("#cloud-fn-reservedConcurrency").val(e.reservedConcurrency),e.xRay&&$("#cloud-fn-x-ray").prop("checked",e.xRay),e.role&&$("#cloud-fn-role").val(e.role),e.profile?N(e.profile):console.log("params have no profile set"),e.environment&&e.environment.length>0){let t=$("#cloud-fn-env-table");e.environment.forEach(function(e,n){$(`\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="cloud-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%" value="${e.key}"></td>\n <td style="background: white; width:46%"><input id="cloud-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%" value="${e.value}"></td>\n <td id="cloud-fn-env-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>`).appendTo(t)})}e.tags&&e.tags.length>0&&e.tags.forEach(function(e,t){$(`\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="cloud-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%" value="${e.key}"></td>\n <td style="background: white; width:46%"><input id="cloud-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%" value="${e.value}"></td>\n <td id="cloud-fn-tag-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>`).appendTo($("#cloud-fn-tags-table"))}),e.events&&e.events.length>0&&e.events.forEach(function(e){R(e.source,e)})}else a=e}function D(){let e=$("#cloud-fn-name").val(),t=$("#cloud-fn-description").val(),n=$("#cloud-fn-memory").val(),o=$("#cloud-fn-timeout").val(),i=$("#cloud-fn-reservedConcurrency").val(),a=$("#cloud-fn-x-ray").prop("checked"),s=I(),r=$("#cloud-fn-role").val(),l=[];$("#cloud-fn-env-table tr").map((e,t)=>{let n=$(t).find("td").find("input"),o=$(n[0]).val(),i=$(n[1]).val();l.push({key:o,value:i})});let d=[];$("#cloud-fn-tags-table tr").map((e,t)=>{let n=$(t).find("td").find("input"),o=$(n[0]).val(),i=$(n[1]).val();d.push({key:o,value:i})});let c=[];return $("#cloud-fn-event #cloud-fn-event-table").each(function(){let e={};e.source=$(this).find("thead").find("tr").find("th:first").find("span").html(),$(this).find("tbody tr").each(function(){let t=$(this).find("td:eq(1)").html();e[t]=$(this).find("td:eq(2) input").val(),e[t]||(e[t]=$(this).find("td:eq(2) select").children("option:selected").val())}),c.push(e)}),{functionName:e,description:t,memory:n,timeout:o,reservedConcurrency:i,xRay:a,role:r,profile:s,environment:l,tags:d,events:c}}async function E(e,t,n){let o=I();if(o&&o!=s&&g==d){$(`#${n}`).empty();try{let o=await window.__kumologica.cloud.listServices(e);"api"==e&&$(`#${n}`).append($("<option>").attr("value","Create new API").text("Create new API")),o&&($.each(o,function(e,t){$(`#${n}`).append($("<option>").attr("value",t.id).text(t.name))}),$(`#${t}`).attr("list",n),$(t).change(function(){P()}))}catch(t){let n=`<li> getting <b>${e}</b> details: ${t.message?t.message:t}</li>`;RED.notify(`<strong>Permission Issues:</strong><ul>${n}</ul>`,"warn")}}}function k(e){let t=e.message?e.message:e.toString();return"InvalidClientTokenId"==e.code?t=`Unable to communicate with AWS account using profile: ${I()}`:"UnrecognizedClientException"==e.code&&(t=`AWS identity defined by profile ${I()} has insufficient permissions. Consider use of kumologica-designer-policy.`),console.error(t),t}function R(e,t){let n=e+"-"+Date.now().toString(),o="itemId"+Date.now().toString(),i=$("#cloud-fn-event");$(function(e,t,n,o){return html=` \n <table id="cloud-fn-event-table" class="node-info" style="table-layout: fixed; padding: 0px; margin: 0px;">\n <thead class="toggleHeader"> \n <tr> \n <th style="width:46%" class="palette-header"><i class="fa fa-angle-down expanded"></i><span>${e}</span></th>\n <th style="display: none"></th>\n <th style="width:44%; text-align:right; padding: 6px;" id="cloud-fn-event-remove"><i class="fa fa-minus removeRow"></i></th>\n </tr>\n </thead>\n <tbody>`,z[e].forEach(function(e,i){let a="optional",s="";e.required&&(a="required",s="required"),html+=`\n <tr class="node-info-node-row">\n <td style="width:46%">${e.label}</td>\n <td style="display: none">${e.key}</td>\n `,e.list?(html+=`\n <td style="background: white; width:46%">\n <select type="text" class="palette-textinput" id="${n}-${i}" style="float: left; width: 100%; padding: 0px; outline: 0px solid #ccc; ">\n `,$.each(e.list,function(){t&&this.v==t[e.key]?html+=`<option value="${this.v}" selected>${this.k}</option>`:html+=`<option value="${this.v}">${this.k}</option>`}),html+="</select>\n </td>\n "):e.function?html+=`\n <td style="background: white; width:46%">\n <input id="${n}-${i}" \n class="palette-textinput" type="text" \n list="${o}"\n placeholder="required" style="width:100%" \n value="${void 0==t||void 0==t[e.key]?"":t[e.key]}" ${s}>\n <datalist id="${o}"></datalist>\n </td>\n `:html+=`\n <td style="background: white; width:46%">\n <input id="${n}-${i}" class="palette-textinput" type="text" placeholder="${a}" style="width:100%" value="${void 0==t||void 0==t[e.key]?"":t[e.key]}" ${s}>\n </td>\n `,html+="\n </tr>"}),html+=" \n </tbody> \n </table>",html}(e,t,o,n)).appendTo(i),$(i).on("click",".removeRow",function(){$(this).parent().parent().parent().parent().remove(),P()});for(var a=0;a<z[e].length;a++)$(`${o}-${a}`).change(function(){P()});$(".toggleHeader").on("click",function(){$(this).next("tbody").toggle()}),E(e,o,n)}function T(){if(!I())return;let e=[],t=[];$("#cloud-fn-event :input").each(function(n,o){let i=$(this).attr("list");if(i){let n=i.split("-")[0];t.push({item:o,serviceType:n}),e.push(window.__kumologica.cloud.listServices(n).catch(e=>e))}}),t.push({item:$("#cloud-fn-role"),serviceType:"iamroles"}),e.push(window.__kumologica.cloud.listServices("iamroles").catch(e=>e)),Promise.all(e).then(e=>{let n="";e.forEach((o,i)=>{o.statusCode?n+=`<li> getting <b>${t[i].serviceType}</b> details: ${o.message}</li>`:function(e,t,n){let o=$(n).attr("list");$(`#${o}`).empty(),"api"==e&&$(`#${o}`).append($("<option>").attr("value","Create new API").text("Create new API")),t&&($.each(t,function(e,t){$(`#${o}`).append($("<option>").attr("value",t.id).text(t.name))}),$(n).change(function(){P()}))}(t[i].serviceType,e[i],t[i].item)}),n.length>0&&RED.notify(`<strong>Permission Issues:</strong><ul>${n}</ul>`,"warn"),$("#cloud-sidebar-connect-btn").hide(),$("#cloud-sidebar-deploy-btn").show(),$("#cloud-sidebar-export-btn").show(),$("#cloud-sidebar-body").show()})}function _(){S(),window.__kumologica.settings.projectFlowName&&w(window.__kumologica.settings.projectFlowName),$("#cloud-fn-description").val("kumologica flow"),$("#cloud-fn-memory").val("512"),$("#cloud-fn-timeout").val("20"),$("#cloud-fn-timeout, #cloud-fn-memory, #cloud-fn-description, #cloud-fn-name, #cloud-fn-reservedConcurrency, #cloud-fn-x-ray, #cloud-fn-role").change(function(){P()}),$("#cloud-fn-name").change(function(){this.value=y(this.value)}),$("#cloud-sidebar-profiles").click(function(){return $(this).data("lastSelected",$(this).find("option:selected")),!1}),$("#cloud-sidebar-profiles").change(function(e){return e.preventDefault(),h==u?(RED.notify("<strong>Information</strong>: Please wait until deployment to AWS finishes.","info"),$(this).data("lastSelected").prop("selected",!0),!1):this.value==r?($(this).data("lastSelected").prop("selected",!0),RED.actions.invoke("core:settings:open"),!1):(console.log("[tab-cloud] profile changed to:",this.value),this.value&&$("#cloud-sidebar-body").show(),P(),void(this.value!=s&&this.value!=r&&($(`#cloud-sidebar-profiles option[value='${s}']`).remove(),$(`#cloud-sidebar-profiles option[value='${r}']`).remove(),window.__kumologica.cloud.profile=this.value,C(),function(){$("#cloud-fn-event :input").each(function(e,t){let n=$(this).attr("list");n&&$(`#${n}`).empty()});let e=$("#cloud-fn-role").attr("list");$(`#${e}`).empty()}(),g=c)))}),$("#add-environment-variable").click(e=>{let t=$("#cloud-fn-env-table");$('\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="cloud-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%"></td>\n <td style="background: white; width:46%"><input id="cloud-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%"></td>\n <td id="cloud-fn-env-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>').appendTo(t),$("#cloud-fn-env-table").find("input").each(function(){$(this).change(function(){P()})})}),$("#cloud-fn-env-table").find("input").each(function(){$(this).change(function(){P()})}),$("#cloud-fn-env-table").on("click",".removeRow",function(){$(this).parent().remove(),P()}),$("#add-tag").click(e=>{let t=$("#cloud-fn-tags-table");$('\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="cloud-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%"></td>\n <td style="background: white; width:46%"><input id="cloud-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%"></td>\n <td id="cloud-fn-tags-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>').appendTo(t),$("#cloud-fn-tags-table").find("input").each(function(){$(this).change(function(){P()})})}),$("#cloud-fn-tags-table").find("input").each(function(){$(this).change(function(){P()})}),$("#cloud-fn-tags-table").on("click",".removeRow",function(){$(this).parent().remove(),P()}),$("#add-event").click(e=>{selectedEventSource=$("#eventSource").find(":selected").attr("value"),R(selectedEventSource,null)}),$("#cloud-fn-useReservedConcurrency").click(e=>{$("#cloud-fn-reservedConcurrency").prop("disabled",!$("#cloud-fn-useReservedConcurrency").is(":checked")),$("#cloud-fn-useReservedConcurrency").is(":checked")||$("#cloud-fn-reservedConcurrency").val("")}),$(".sidebar-cloud").click(function(e){$("#cloud-options-dropdown-content").hide()}),$("#cloud-sidebar-deploy-btn").click(e=>{e.preventDefault(),function(){let e="";return $("#cloud-fn-event").find("input").each(function(){if($(this).prop("required")&&!$(this).val()){let t=$(this).closest("table").find("th").eq(0).text(),n=$(this).parent().siblings(":first").text();e+=`<li>${t.toUpperCase()}: ${n} is required.</li>`}}),""==e||(RED.notify(`Missing trigger details: \n <ul>${e}</ul>`,"error"),!1)}()&&async function(){let e=I();if(!e||e==s)return void RED.notify("Please select AWS profile before deploying flow.","error");if(h==u)return void RED.notify("<strong>Information</strong>: Already deploying to AWS.","info");$("#cloud-sidebar-deploy-icon").attr({class:"fa fa-spinner fa-spin"}),h=u;let t=$("#cloud-fn-event-table :input").filter(function(){return"Create new API"==this.value});$("#workspace-terminal").show(),RED.deploy.save(!0,!0,!0);try{const e=await window.__kumologica.cloud.deploy(RED.header.getCurrentProjectInfo(),D());e&&e.apiId&&await async function(e,t,n){if(e.length){let o=e.attr("id"),i=e.attr("list");e.val(n),i&&await E(t,o,i)}}(t,"api",e.apiId)}catch(e){k(e)}h=f,$("#cloud-sidebar-deploy-icon").attr({class:"fa fa-cloud-upload"})}()}),$("#cloud-sidebar-connect-btn").click(e=>{e.preventDefault(),async function(){if(profile=I(),!profile||profile==s)return void RED.notify("<strong>Error</strong>: Please select AWS profile before connecting to AWS account.","error");if(g!=c)return void RED.notify(`<strong>Information</strong>: Already connected to ${profile} AWS account.`,"info");if(h==u)return void RED.notify("<strong>Information</strong>: Please wait until deployment to AWS finishes.","info");g=p,$("#cloud-sidebar-connect-icon").attr({class:"fa fa-spinner fa-spin"}),$("#cloud-sidebar-connect-icon").css({color:"black"});try{await window.__kumologica.cloud.getRegion(profile)}catch(e){return C(),g=c,void RED.notify(`<strong>Error</strong>: ${e.stderr?e.stderr:e}`,"error")}T(),g=d}()}),$("#exportCloudFormationBtn").click(e=>{e.preventDefault(),j(),O(window.__kumologica.cloud.provider.aws)}),$("#exportServerlessBtn").click(e=>{e.preventDefault(),j(),O(window.__kumologica.cloud.provider.serverless)}),$("#cloud-options-dropdown").click(e=>{e.stopPropagation(),$("#cloud-sidebar-export-btn").toggleClass("dropdown-selected"),$("#cloud-options-dropdown-content").toggle()}),$("#cloud-sidebar-error-close-btn").click(e=>{e.preventDefault(),$("#cloud-sidebar-error").hide()}),l=!0,a&&x(a),C()}function j(){$("#cloud-sidebar-export-btn").removeClass("dropdown-selected"),$("#cloud-options-dropdown-content").hide()}function C(){$("#cloud-sidebar-connect-btn").show(),$("#cloud-sidebar-connect-icon").attr({class:"fa fa-circle"}),$("#cloud-sidebar-connect-icon").css({color:"red"}),$("#cloud-sidebar-connect-btn")&&$("#cloud-sidebar-connect-btn").html()&&$("#cloud-sidebar-connect-btn").html($("#cloud-sidebar-connect-btn").html().replace("Connecting","Connect")),$("#cloud-sidebar-deploy-btn").hide(),$("#cloud-sidebar-export-btn").hide(),$("#cloud-sidebar-body").hide()}function S(){try{const e=window.__kumologica.cloud.listProfiles();let t=$("#cloud-sidebar-profiles");t.empty(),t.append($(`<option value="${s}">${s}</option>`)),0==e.length&&t.append($(`<option value="${r}">${r}</option>`)),e.forEach(function(e){t.append($("<option></option>").val(e).text(e))}),$("#cloud-sidebar-profiles").find("option[value="+window.__kumologica.cloud.profile+"]").length||(window.__kumologica.cloud.profile=null,$("#cloud-sidebar-profiles").val(s),C()),window.__kumologica.cloud.profile&&N(window.__kumologica.cloud.profile)}catch(e){$("#cloud-sidebar-error").show()}}async function O(e){if(profile=I(),profile&&profile!=s){$("#workspace-terminal").show(),RED.deploy.save(!0,!0,!0);try{await window.__kumologica.cloud.generateScript(e,RED.header.getCurrentProjectInfo(),D())}catch(e){k(e)}}else RED.notify("<strong>Error</strong>: Please select AWS profile before generating cloudformation script.","error")}function I(){return $("#cloud-sidebar-profiles").find(":selected").val()}function N(e){window.__kumologica.cloud.profile=e,e!=s&&e!=r&&$("#cloud-sidebar-profiles").find("option[value="+e+"]").length?($(`#cloud-sidebar-profiles option[value='${r}']`).remove(),$(`#cloud-sidebar-profiles option[value='${s}']`).remove(),$("#cloud-sidebar-profiles").val(e)):(console.log(`set profile: non-genuine: ${e}, back to select profile`),$("#cloud-sidebar-profiles").val(s))}function P(){window.__kumologica.settings.cloudConfig.setCloudConfig(D())}function L(){RED.sidebar.show("cloud")}RED.events.on("settings:cloud-config-changed",function(){S()}),RED.events.on("cloud-config",function(){if(!$("#cloud-fn-name").val()&&window.__kumologica.settings.projectFlowName&&w(window.__kumologica.settings.projectFlowName),window.__kumologica.settings.cloudConfig){x(window.__kumologica.settings.cloudConfig.getCloudConfig())}else console.log("kumologica.settings.cloudConfig not present")});var z=[];return z.dynamodb=[{label:"Stream ARN",key:"stream",value:"",required:!0,function:"attachDataList"},{label:"Batch Size",key:"batchSize",value:"",min:1,max:1e3},{label:"Batch Window",key:"batchWindow",value:"",min:0,max:300},{label:"Starting Position",key:"startingPosition",value:"",list:[{k:"LATEST",v:"LATEST"},{k:"TRIM_HORIZON",v:"TRIM_HORIZON"}]}],z.s3=[{label:"Bucket Name",key:"bucket",value:"",required:!0,function:"attachDataList"},{label:"Bucket Account",key:"sourceAccount",value:""},{label:"Event Type",key:"eventType",value:"",list:[{k:"ObjectCreated:*",v:"s3:ObjectCreated:*"},{k:" ObjectCreated:Put",v:"s3:ObjectCreated:Put"},{k:" ObjectCreated:Post",v:"s3:ObjectCreated:Post"},{k:" ObjectCreated:Copy",v:"s3:ObjectCreated:Copy"},{k:" ObjectCreated:CompleteMultipartUpload",v:"s3:ObjectCreated:CompleteMultipartUpload"},{k:"ObjectRemoved:*",v:"s3:ObjectRemoved:*"},{k:" ObjectRemoved:Delete",v:"s3:ObjectRemoved:Delete"},{k:" ObjectRemoved:DeleteMarkerCreated",v:"s3:ObjectRemoved:DeleteMarkerCreated"},{k:"ObjectRestore:Post",v:"s3:ObjectRestore:Post"},{k:"ObjectRestore:Completed",v:"s3:ObjectRestore:Completed"},{k:"ReducedRedundancyLostObject",v:"s3:ReducedRedundancyLostObject"},{k:"Replication:OperationFailedReplication",v:"s3:Replication:OperationFailedReplication"},{k:"Replication:OperationMissedThreshold",v:"s3:Replication:OperationMissedThreshold"},{k:"Replication:OperationReplicatedAfterThreshold",v:"s3:Replication:OperationReplicatedAfterThreshold"},{k:"Replication:OperationNotTracked",v:"s3:Replication:OperationNotTracked"}]},{label:"Prefix",key:"prefix",value:""},{label:"Suffix",key:"suffix",value:""}],z.sns=[{label:"Topic ARN",key:"topic",value:"",required:!0,function:"attachDataList"}],z.cognito=[{label:"Identity Pool ARN",key:"identityPool",value:""}],z.iot=[{label:"Rule Name",key:"rule",value:"",required:!0,function:"attachDataList"},{label:"Query",key:"query",value:"",required:!0}],z.api=[{label:"API",key:"api",value:"",required:!0,function:"attachDataList"},{label:"Deployment Stage",key:"stage",value:"",required:!0}],z.alb=[{label:"App Load Balancer",key:"alb",value:"",required:!0,function:"attachDataList"},{label:"Listener ARN",key:"listener",value:"",required:!0},{label:"Host",key:"host",value:""},{label:"Path",key:"path",value:""}],z.sqs=[{label:"Queue URL",key:"stream",value:"",required:!0,function:"attachDataList"},{label:"Batch Size",key:"batchSize",value:"",min:1,max:10}],z.alexa=[{label:"Skill ID",key:"skillID",value:"",required:!0,function:"attachDataList"}],z.kinesis=[{label:"Stream ARN",key:"stream",value:"",required:!0},{label:"Batch Size",key:"batchSize",value:"",min:1,max:1e4},{label:"Batch Window",key:"batchWindow",value:"",min:0,max:300},{label:"Starting Position",key:"startingPosition",value:"",list:[{k:"LATEST",v:"LATEST"},{k:"AT_TIMESTAMP",v:"AT_TIMESTAMP"},{k:"TRIM_HORIZON",v:"TRIM_HORIZON"}]}],z.cwevents=[{label:"Rule ARN",key:"rule",value:"",required:!0,function:"attachDataList"}],z.cwlogs=[{label:"Log Group",key:"logGroup",value:"",required:!0,function:"attachDataList"},{label:"Filter Name",key:"filterName",value:""},{label:"Filter Pattern",key:"filterPattern",value:""}],z.codecommit=[{label:"Repository Name",key:"repository",value:"",required:!0,function:"attachDataList"},{label:"Trigger Name",key:"trigger",value:"",required:!0},{label:"Events",key:"events",value:"",list:[{k:"all",v:"all"},{k:"updateReference",v:"updateReference"},{k:"createReference",v:"createReference"},{k:"deleteReference",v:"deleteReference"}]},{label:"Branch Names",key:"branchNames",value:""},{label:"Custom Data",key:"customData",value:""}],{init:function(){v(),_()},show:L}}(),RED.sidebar.config=function(){var e=document.createElement("div");e.className="sidebar-node-config",e.id="sidebar-node-config",e.tabIndex=0,$('<div class="sidebar-header"><span class="button-group"><a class="sidebar-header-button-toggle selected" id="workspace-config-node-filter-all" href="#"><span data-i18n="sidebar.config.filterAll"></span></a><a class="sidebar-header-button-toggle" id="workspace-config-node-filter-unused" href="#"><span data-i18n="sidebar.config.filterUnused"></span></a> </span></div>').appendTo(e);var t=$('<div><a class="sidebar-footer-button" id="workspace-config-node-collapse-all" href="#"><i class="fa fa-angle-double-up"></i></a> <a class="sidebar-footer-button" id="workspace-config-node-expand-all" href="#"><i class="fa fa-angle-double-down"></i></a></div>'),n=$("<div>").appendTo(e),o=$("<div>").appendTo(e),i=$("<div>").appendTo(e),a=!1,s={};function r(e,t,n){if(e=e.replace(/\./i,"-"),s[e])s[e].label!==n&&(s[e].list.parent().find(".config-node-label").text(n),s[e].label=n);else{var o=$('<div class="palette-category workspace-config-node-category" id="workspace-config-node-category-'+e+'"></div>').appendTo(t),i=$('<div class="workspace-config-node-tray-header palette-header"><i class="fa fa-angle-down expanded"></i></div>').appendTo(o);n?$('<span class="config-node-label"/>').text(n).appendTo(i):$('<span class="config-node-label" data-i18n="sidebar.config.'+e+'">').appendTo(i),$('<span class="config-node-filter-info"></span>').appendTo(i),category=$('<ul class="palette-content config-node-list"></ul>').appendTo(o),o.i18n();var a=i.find("i"),r={label:n,list:category,size:function(){return r.list.find("li:not(.config_node_none)").length},open:function(e){a.hasClass("expanded")||(a.addClass("expanded"),e?r.list.show():r.list.slideDown())},close:function(e){a.hasClass("expanded")&&(a.removeClass("expanded"),e?r.list.hide():r.list.slideUp())},isOpen:function(){return a.hasClass("expanded")}};i.on("click",function(e){r.isOpen()?r.close():r.open()}),s[e]=r}return s[e]}function l(t,n){var o=r(t.replace(/\./i,"-")),i=o.list;if(n.sort(function(e,t){return e.type<t.type?-1:e.type>t.type?1:0}),a){var s=n.length;(s-=(n=n.filter(function(e){return!1!==e._def.hasUsers&&0===e.users.length})).length)>0?i.parent().find(".config-node-filter-info").text(RED._("sidebar.config.filtered",{count:s})).show():i.parent().find(".config-node-filter-info").hide()}else i.parent().find(".config-node-filter-info").hide();if(i.empty(),0===n.length)$('<li class="config_node_none" data-i18n="sidebar.config.none">NONE</li>').i18n().appendTo(i),o.close(!0);else{var l="";n.forEach(function(t){var n=RED.utils.getNodeLabel(t,t.id);t.type!=l&&($('<li class="config_node_type">'+t.type+"</li>").appendTo(i),l=t.type);var o=$('<li class="palette_node config_node palette_node_id_'+t.id.replace(/\./g,"-")+'"></li>').appendTo(i);if(o.data("node",t.id),$('<div class="palette_label"></div>').text(n).appendTo(o),!1!==t._def.hasUsers){var a=$("<div/>",{class:"palette_icon_container palette_icon_container_right"}).appendTo(o);0===t.users.length?a.text(0):$('<a href="#"/>').click(function(e){e.stopPropagation(),e.preventDefault(),RED.search.show(t.id)}).text(t.users.length).appendTo(a),RED.popover.tooltip(a,RED._("editor.nodesUse",{count:t.users.length})),0===t.users.length&&o.addClass("config_node_unused")}o.on("click",function(n){RED.view.select(!1),n.metaKey?$(this).toggleClass("selected"):($(e).find(".palette_node").removeClass("selected"),$(this).addClass("selected")),RED.sidebar.info.refresh(t)}),o.on("dblclick",function(e){RED.editor.editConfig("",t.type,t.id)});var s=t.users.map(function(e){return e.id});o.on("mouseover",function(e){RED.nodes.eachNode(function(e){-1!=s.indexOf(e.id)&&(e.highlighted=!0,e.dirty=!0)}),RED.view.redraw()}),o.on("mouseout",function(e){RED.nodes.eachNode(function(e){e.highlighted&&(e.highlighted=!1,e.dirty=!0)}),RED.view.redraw()})}),o.open(!0)}}function d(){var e={global:!0};r("global",n),RED.nodes.eachWorkspace(function(t){e[t.id.replace(/\./g,"-")]=!0,r(t.id,o,t.label)}),RED.nodes.eachSubflow(function(t){e[t.id.replace(/\./g,"-")]=!0,r(t.id,i,t.name)}),$(".workspace-config-node-category").each(function(){var t=$(this).attr("id").substring("workspace-config-node-category-".length);e[t]||($(this).remove(),delete s[t])});var t=[],a={};for(var d in RED.nodes.eachConfig(function(e){e.z?(a[e.z.replace(/\./g,"-")]=a[e.z.replace(/\./g,"-")]||[],a[e.z.replace(/\./g,"-")].push(e)):e.z||t.push(e)}),e)e.hasOwnProperty(d)&&l(d,a[d]||[]);l("global",t)}return{init:function(){console.log("tab-config - init()"),RED.sidebar.addTab({id:"config",label:RED._("sidebar.config.label"),name:RED._("sidebar.config.name"),content:e,toolbar:t,iconClass:"fa fa-cog",action:"core:show-config-tab",onchange:function(){d()}}),RED.actions.add("core:show-config-tab",function(){RED.sidebar.show("config")}),RED.actions.add("core:select-all-config-nodes",function(){$(e).find(".palette_node").addClass("selected")}),RED.actions.add("core:delete-config-selection",function(){var t=[];if($(e).find(".palette_node.selected").each(function(){t.push($(this).data("node"))}),t.length>0){var n={t:"delete",nodes:[],changes:{},dirty:RED.nodes.dirty()};t.forEach(function(e){var t=RED.nodes.node(e);try{t._def.oneditdelete&&t._def.oneditdelete.call(t)}catch(e){console.log("oneditdelete",t.id,t.type,e.toString())}n.nodes.push(t);for(var o=0;o<t.users.length;o++){var i=t.users[o];for(var a in n.changes[i.id]={changed:i.changed,valid:i.valid},i._def.defaults)i._def.defaults.hasOwnProperty(a)&&i[a]==e&&(n.changes[i.id][a]=e,i[a]="",i.changed=!0,i.dirty=!0);RED.editor.validateNode(i)}RED.nodes.remove(e)}),RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(n)}}),RED.events.on("view:selection-changed",function(){$(e).find(".palette_node").removeClass("selected")}),$("#workspace-config-node-collapse-all").on("click",function(e){for(var t in e.preventDefault(),s)s.hasOwnProperty(t)&&s[t].close()}),$("#workspace-config-node-expand-all").on("click",function(e){for(var t in e.preventDefault(),s)s.hasOwnProperty(t)&&s[t].size()>0&&s[t].open()}),$("#workspace-config-node-filter-all").on("click",function(e){e.preventDefault(),a&&($(this).addClass("selected"),$("#workspace-config-node-filter-unused").removeClass("selected"),a=!a,d())}),$("#workspace-config-node-filter-unused").on("click",function(e){e.preventDefault(),a||($(this).addClass("selected"),$("#workspace-config-node-filter-all").removeClass("selected"),a=!a,d())}),RED.popover.tooltip($("#workspace-config-node-filter-all"),"Show all config nodes"),RED.popover.tooltip($("#workspace-config-node-filter-unused"),"Show all unused config nodes")},show:function(e){console.log("[tab-config] show(id)",e),"boolean"==typeof e&&(e?$("#workspace-config-node-filter-unused").click():$("#workspace-config-node-filter-all").click()),d(),"string"==typeof e&&($("#workspace-config-node-filter-all").click(),e=e.replace(/\./g,"-"),setTimeout(function(){var t=$(".palette_node_id_"+e),n=t.position().top,o=t.height(),i=$(".sidebar-node-config"),a=i.height();n+o>a?i.animate({scrollTop:"-="+(a-(n+o)-30)},150):n<0&&i.animate({scrollTop:"+="+(n-10)},150);var s=21,r=function(){s%2==0?t.removeClass("node_highlighted"):t.addClass("node_highlighted"),--s>=0&&setTimeout(r,100)};r()},100)),RED.sidebar.show("config")},refresh:d}}(),RED.sidebar.context=function(){var e,t,n,o,i,a,s;function r(e,t){a=e,t?e?d(n,"context/node/"+e.id,e.id):d(n):($(n.table).empty(),e?$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.refresh"></td></tr>').appendTo(n.table).i18n():$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.none"></td></tr>').appendTo(n.table).i18n(),n.timestamp.html(" "))}function l(e){s=e,e?d(o,"context/flow/"+e.id,e.id):d(o)}function d(e,t,n){var o=e.table;n?function(e,t,n){var o=RED.settings.context.stores,i=e.table;$.getJSON(t,function(a){$(i).empty();var s={};for(var r in a)if(a.hasOwnProperty(r))for(var l in a[r])a[r].hasOwnProperty(l)&&(s.hasOwnProperty(l)||(s[l]=[]),a[r][l].store=r,s[l].push(a[r][l]));var d=Object.keys(s);d.sort();for(var c=d.length,p=0;p<c;p++)s[d[p]].forEach(function(e){var a=d[p],r=(s[a].length,$('<tr class="node-info-node-row"><td class="sidebar-context-property"></td><td></td></tr>').appendTo(i));$(r.children()[0]).text(a);var l=$('<span class="button-group"></span>'),c=($('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(l).click(function(o){o.preventDefault(),o.stopPropagation(),$.getJSON(t+"/"+a+"?store="+e.store,function(e){e.msg===c&&e.format===u||(c=e.msg,u=e.format,l.detach(),$(r.children()[1]).empty(),RED.utils.createObjectElement(RED.utils.decodeObject(c,u),{typeHint:e.format,sourceId:n+"."+a,tools:l}).appendTo(r.children()[1]))})}),$('<button class="editor-button editor-button-small"><i class="fa fa-trash"></i></button>').appendTo(l).click(function(o){o.preventDefault(),o.stopPropagation();var s=RED.popover.create({trigger:"modal",target:r,direction:"left",content:function(){var o=$("<div>");$('<p data-i18n="sidebar.context.deleteConfirm"></p>').appendTo(o);var d=$("<p>").appendTo(o),p=$('<span class="button-group"></span>').appendTo(d);return $('<button class="editor-button" data-i18n="common.label.cancel"></button>').appendTo(p).click(function(e){e.preventDefault(),s.close()}),p=$('<span class="button-group"></span>').appendTo(d),$('<button class="editor-button primary" data-i18n="common.label.delete"></button>').appendTo(p).click(function(o){o.preventDefault(),s.close(),$.ajax({url:t+"/"+a+"?store="+e.store,type:"DELETE"}).done(function(o,s,d){$.getJSON(t+"/"+a+"?store="+e.store,function(e){"undefined"===e.format?(r.remove(),0===i.children().length&&$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.empty"></td></tr>').appendTo(i).i18n()):(c=e.msg,u=e.format,l.detach(),$(r.children()[1]).empty(),RED.utils.createObjectElement(RED.utils.decodeObject(c,u),{typeHint:e.format,sourceId:n+"."+a,tools:l}).appendTo(r.children()[1]))})}).fail(function(e,t,n){})}),o.i18n()}});s.open()}),e.msg),u=e.format;RED.utils.createObjectElement(RED.utils.decodeObject(c,u),{typeHint:e.format,sourceId:n+"."+a,tools:l}).appendTo(r.children()[1]),o.length>1&&$("<span>",{class:"sidebar-context-property-storename"}).text(e.store).appendTo($(r.children()[0]))});0===c&&$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.empty"></td></tr>').appendTo(i).i18n(),$(e.timestamp).text((new Date).toLocaleString())})}(e,t,n):($(o).empty(),$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.none"></td></tr>').appendTo(o).i18n())}function c(){RED.sidebar.show("context")}return{init:function(){(e=$("<div>").css({position:"relative",height:"100%"})).className="sidebar-context";var p=$("<div></div>"),u=$("<div>",{class:"sidebar-context-stack"}).appendTo(e);console.log("tab-context.js - stackContainer=",u),t=RED.stack.create({container:u}),(n=t.add({title:RED._("sidebar.context.node"),collapsible:!0})).expand(),n.content.css({height:"100%"}),n.timestamp=$('<div class="sidebar-context-updated"> </div>').appendTo(n.content);var f=$('<table class="node-info"></table>').appendTo(n.content);n.table=$("<tbody>").appendTo(f);var h=$('<div style="float: right"></div>').appendTo(n.header);$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(h).click(function(e){e.stopPropagation(),e.preventDefault(),r(a,!0)}),(o=t.add({title:RED._("sidebar.context.flow"),collapsible:!0})).expand(),o.content.css({height:"100%"}),o.timestamp=$('<div class="sidebar-context-updated"> </div>').appendTo(o.content),f=$('<table class="node-info"></table>').appendTo(o.content),o.table=$("<tbody>").appendTo(f),h=$('<div style="float: right"></div>').appendTo(o.header),$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(h).click(function(e){e.stopPropagation(),e.preventDefault(),l(s)}),(i=t.add({title:RED._("sidebar.context.global"),collapsible:!0})).expand(),i.content.css({height:"100%"}),i.timestamp=$('<div class="sidebar-context-updated"> </div>').appendTo(i.content),f=$('<table class="node-info"></table>').appendTo(i.content),i.table=$("<tbody>").appendTo(f),h=$('<div style="float: right"></div>').appendTo(i.header),$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(h).click(function(e){e.stopPropagation(),e.preventDefault(),d(i,"context/global","global")}),RED.actions.add("core:show-context-tab",c),RED.sidebar.addTab({id:"context",label:RED._("sidebar.context.label"),name:RED._("sidebar.context.name"),iconClass:"fa fa-database",content:e,toolbar:p,enableOnEdit:!0,action:"core:show-context-tab"}),RED.events.on("view:selection-changed",function(e){r(e.nodes&&1===e.nodes.length&&e.nodes[0])}),RED.events.on("workspace:change",function(e){l(RED.nodes.workspace(e.workspace))}),d(i,"context/global","global")}}}(),RED.sidebar.nodeinfo=function(){function e(){$("#editor-stack").empty();$('\n <div style="display:flex; flex-direction: column; align-items: center; margin-top: 150px">\n <div><i class="icofont-question-square" style="font-size: 56px; color: lightgrey;"></i></div>\n <div style="font-weight: bold; font-size: 22px; margin-top: 15px;color: grey;">No node selected</div>\n <div style="margin-top: 5px; color: grey;">Please click on any node available in your workspace</div>\n </div>\n ').appendTo($("#editor-stack"))}function t(){RED.actions.invoke("core:show-sidebar"),$("#editor-stack").show(),e()}function n(){RED.actions.invoke("core:hide-sidebar")}return{init:function(){let e=document.createElement("div");e.className="sidebar-nodeinfo",RED.sidebar.addTab({id:"nodeinfo",label:"Node Info",name:"Node Properties",iconClass:"fa fa-align-justify",action:"core:show-nodeinfo",content:e,pinned:!0,enableOnEdit:!0,onchange:t,onsame:n})},emptyTab:function(){e()}}}(),RED.sidebar.test=function(){let e,t,n,o,i,a,s,r={};const l="__runAll";let d=!1,c=window.__kumologica.electron.ipcRenderer;function p(e,o){let{testCaseID:i,testCaseDescription:a}=o.payload.testCase,s=i.replace(/\./g,"_");n=t.add({title:a,collapsible:!0,titleId:`section-${s}`});let l=$('<div style="margin-top: 6px"></div>');l.appendTo(n.content);let d=$('<div class="testcase-info-selector button-group"></div>');d.appendTo(l),$(`<button id=testcase-tab-response-${s} href="#" class="editor-button-small testcase-tab selected">Response</button>`).click(e=>{e.preventDefault(),g("response",s)}).appendTo(d),$(`<button id=testcase-tab-assertion-${s} href="#" class="editor-button-small testcase-tab" style="margin-right: -2px">Assertions</button>`).click(e=>{e.preventDefault(),g("assertion",s)}).appendTo(d),$(`<button id=testcase-tab-traces-${s} href="#" class="editor-button-small testcase-tab">Traces</button>`).click(e=>{e.preventDefault(),g("traces",s)}).appendTo(d),$(`<div class="testcase-info-container">\n <div id="testcase-info-response-${s}" class="testcase-info selected">\n <div style="display: flex; justify-content: flex-end; margin-right: 10px"><span class="testcase-resp-status">Status: </span><span id="testcase-status-${s}" style="font-size: 12px; color:#2979ff; margin-right: 4px"></span></div>\n <div id="testcase-info-response-header">\n <div id="testcase-info-response-bodyheaders">\n <span id="tab-body-selected-${s}" class="tab-label-bh tab-separation selected">Body</span>\n <span id="tab-headers-selected-${s}" class="tab-label-bh tab-separation">Headers</span>\n </div>\n <div id="testcase-info-response-bodyformat-container-${s}" class="testcase-info-response-bodyformat-container">\n <select id="testcase-info-response-bodyformat-${s}" class="testcase-info-response-bodyformat">\n <option value="text" selected="selected">Text</option>\n <option value="json">JSON</option>\n <option value="xml">XML</option>\n <option value="html">HTML</option>\n </select>\n </div>\n <div id="testcase-info-wrap-container-${s}" class="testcase-info-wrap-container">\n <a id="testcase-wrap-btn-${s}" class="testcase-wrap-btn-clazz" href="#">\n <i class="fa fa-paragraph"></i> \n </a>\n </div>\n\n <div id="testcase-info-copypaste-container-${s}" class="testcase-info-copypaste-container">\n <a id="testcase-copypaste-btn-${s}" class="testcase-wrap-btn-clazz" href="#">\n <i class="fa fa-copy"></i> \n </a>\n </div>\n </div>\n\n <div id="testcase-resp-body-${s}" class="tab-content-bh selected selectable" style="height: 45vh"></div>\n <div id="testcase-resp-headers-${s}" class="tab-content-bh selectable"></div>\n </div>\n <div id="testcase-info-assertion-${s}" class="testcase-info"></div>\n <div id="testcase-info-traces-${s}" class="testcase-info testcase-info-traces"></div>\n </div>`).appendTo(l),$(`#test-debug-message-cache-${s}`).appendTo($(`#testcase-info-traces-${s}`)),$(`#tab-body-selected-${s}`).click(e=>{e.preventDefault(),h("body",s)}),$(`#tab-headers-selected-${s}`).click(e=>{e.preventDefault(),h("headers",s)}),r[s]=RED.editor.createEditor({id:`testcase-resp-body-${s}`,lineNumbers:!0,showFoldWidgets:!0,mode:"ace/mode/text",options:{wrap:!0}}),$(`#testcase-info-response-bodyformat-${s}`).on("change",function(e){switch(this.value){case"json":r[s].getSession().setMode("ace/mode/json");break;case"xml":r[s].getSession().setMode("ace/mode/xml");let e=r[s].getSession().getValue();r[s].getSession().setValue(u(e));break;case"html":r[s].getSession().setMode("ace/mode/html");let t=r[s].getSession().getValue();r[s].getSession().setValue(u(t));break;default:r[s].getSession().setMode("ace/mode/text")}}),$(`#testcase-wrap-btn-${s}`).click(e=>{r[s].getSession().setOptions({wrap:!r[s].getSession().getUseWrapMode()})}),$(`#testcase-info-copypaste-container-${s}`).click(e=>{RED.clipboard.copyText(r[s].getSession().getValue(),$(`#testcase-info-copypaste-container-${s}`),"Response Copied to Clipboard")}),RED.popover.tooltip($(`#testcase-info-wrap-container-${s}`),"Wrap Line")}function u(e,t){var n="",o="";return t=t||"\t",e.split(/>\s*</).forEach(function(e){e.match(/^\/\w/)&&(o=o.substring(t.length)),n+=o+"<"+e+">\r\n",e.match(/^<?\w[^>]*[^\/]$/)&&(o+=t)}),n.substring(1,n.length-3)}function f(e,t){let{testCaseID:n,targetOutput:o}=t.payload.testCaseResults,i=n.replace(/\./g,"_"),a=o.response;$(`#testcase-status-${i}`).text(`${a.statusCode} ${a.statusMessage}`),r[i].getSession().setValue(function(e){let t=typeof e;return"object"===t?JSON.stringify(e,null,2):"string"===t?e:""}(a.body)),r[i].resize(),function(e,t){let n=$(`#testcase-resp-headers-${t}`);for(let t in e)$(`\n <div>\n <span class="testcase-resp-header" style="color: #757575; font-weight: 500">\n ${t} <i class="fa fa-long-arrow-right" style="color: #757575;"></i>\n </span>\n <span style="color: #757575;">\n ${e[t]}\n </span>\n </div>`).appendTo(n)}(a.headers,i)}function h(e,t){"headers"===e?($(`#testcase-info-response-bodyformat-container-${t}`).hide(),$(`#testcase-info-wrap-container-${t}`).hide(),$(`#testcase-info-copypaste-container-${t}`).hide()):($(`#testcase-info-response-bodyformat-container-${t}`).show(),$(`#testcase-info-wrap-container-${t}`).show(),$(`#testcase-info-copypaste-container-${t}`).show()),$(`#tab-body-selected-${t}`).removeClass("selected"),$(`#tab-headers-selected-${t}`).removeClass("selected"),$(`#testcase-resp-body-${t}`).removeClass("selected"),$(`#testcase-resp-headers-${t}`).removeClass("selected"),$(`#tab-${e}-selected-${t}`).addClass("selected"),$(`#testcase-resp-${e}-${t}`).addClass("selected")}function g(e,t){$(`#testcase-tab-assertion-${t}`).removeClass("selected"),$(`#testcase-tab-response-${t}`).removeClass("selected"),$(`#testcase-tab-traces-${t}`).removeClass("selected"),$(`#testcase-info-assertion-${t}`).removeClass("selected"),$(`#testcase-info-response-${t}`).removeClass("selected"),$(`#testcase-info-traces-${t}`).removeClass("selected"),$(`#testcase-tab-${e}-${t}`).addClass("selected"),$(`#testcase-info-${e}-${t}`).addClass("selected")}function v(e,t){!async function(){$("#test-info-wrapper").show(),$("#properties-wrapper").show(),$("#debugger-wrapper").hide()}();let{testCaseID:n,assertionResults:o}=t.payload.testCaseResults,i=n.replace(/\./g,"_"),a="passed";for(let e=0;e<o.length;e++)if("failed"===o[e].status){a="failed";break}"failed"===a?$(`#section-${i}`).parent().parent().addClass("failed"):$(`#section-${i}`).parent().parent().addClass("passed")}function b(e,t){const{testCaseID:o,description:i,status:a,diffReported:s}=t.payload;let r,l=o.replace(/\./g,"_");r="failed"===a?`\n <div class="assertion assertion-failed" style="display: flex; flex-direction: column;">\n <div style="display:flex; align-items: center;">\n <i class="fa fa-times" style="color:red"></i> \n <span style="padding-left: 5px">${i}</span><br/>\n </div>\n <div style="font-size: 10px; padding-left: 17px; margin-top:-3px">${s}</div>\n </div>\n `:`\n <div class="assertion assertion-passed">\n <i class="fa fa-check" style="color:green"></i> \n <span>${i}</span>\n </div>\n `;let d=$(`#testcase-info-assertion-${l}`);$(r).appendTo(d),n.container.show()}function m(){RED.actions.invoke("core:hide-sidebar")}function y(e){e||RED.actions.invoke("core:show-sidebar");let t=$("#test-sidebar-testcases"),n=App.nodes.filterNodes({z:"test.flow",type:"TestCase"}),o=App.nodes.filterNodes({z:"test.flow",type:"HTTPTestCase"});(i=n.concat(o))&&Array.isArray(i)&&i.length>0?($("#test-sidebar-notestfound-explainer").hide(),t.empty(),i.forEach(e=>{t.append(`<option value=${e.id}>${e.name} (${e.id})</option>`)}),t.append("<option disabled>────────────────────</option>"),t.append(`<option value="${l}"> Run all TestCases</option>`),void 0===s||null===s?$("#test-sidebar-testcases").val(""):$(`#test-sidebar-testcases option[value="${s}"]`).attr("selected",!0)):(t.empty(),t.append("<option disabled>No testcases found</option>"),$("#test-sidebar-notestfound-explainer").show())}function w(){RED.sidebar.show("test")}function x(){$("#test-results-wrapper").empty()}async function D(e){t&&t.removeAll(),e&&e.debug?await window.__kumologica.debugger.enable():await window.__kumologica.debugger.disable(),a=!0,RED.deploy.save()}function E(e){let t=e.replace(/\./g,"_");$(`<div id="test-debug-message-cache-${t}" style="margin-right: 2px"></div>`).appendTo($("#test-debug-messages-caches"))}function k(){if(window.__kumologica.settings.testConfig)return window.__kumologica.settings.testConfig.getTestConfig()}function R(e){if(e){e.test&&(s=e.test,$(`#test-sidebar-testcases option[value="${s}"]`).attr("selected",!0));let n=Object.keys(e.properties||{});for(var t=n.length-1;t>=0;t--)T(n[t],e.properties[n[t]])}}function T(e,t){const n=e.replace(/[^a-zA-Z0-9-]/g,"_");let o=`\n <div class="table-row" id="row-${n}">\n <div class="table-cell"><input id="key-${n}" class="palette-textinput" type="text" style="width:100%; font-size:12px"></input></div>\n <div class="table-cell"><input id="value-${n}" class="palette-textinput" type="text" style="width:100%; font-size:12px"></input></div>\n <div class="table-cell-btn" id="remove-property-${n}"><i class="fa fa-minus"></i></div>\n </div>\n `;$(o).prependTo($("#table-test-properties")),$(`#key-${n}`).val(e),$(`#value-${n}`).val(t),$(`#key-${n}, #value-${n}`).change(function(){j()}),$(`#remove-property-${n}`).click(e=>{!function(e){$(`#row-${e}`).remove(),j()}(n)})}function _(){let e=s||"",t={};return $("#table-test-properties .table-row").map((e,n)=>{let o=$(n).find(".table-cell").find("input"),i=$(o[0]).val(),a=$(o[1]).val();t[i]=a}),{test:e,properties:t}}function j(){window.__kumologica.settings.testConfig.setTestConfig(_())}function C(){if($("#table-row-append").length)return;$('\n <div id="table-row-append">\n <div class="table-cell">\n <input id="new-prop-key" class="palette-textinput" type="text" style="width:100%; font-size:12px" placeholder="key"></input>\n </div>\n <div class="table-cell">\n <input id="new-prop-value" class="palette-textinput" type="text" style="width:100%; font-size:12px" placeholder="value"></input>\n </div>\n <div id="addSaveProperty" class="table-cell-btn"><i class="icofont-save"></i></div>\n </div>\n ').appendTo($("#table-test-properties")),$("#addSaveProperty").click(e=>{!function(e,t){$("#new-prop-key").removeClass("wrong-value"),$("#new-prop-value").removeClass("wrong-value");let n=!1;e||(n=!0,$("#new-prop-key").addClass("wrong-value")),t||(n=!0,$("#new-prop-value").addClass("wrong-value")),n||($("#table-row-append").remove(),T(e=e.trim(),t),C(),j())}($("#new-prop-key").val(),$("#new-prop-value").val())}),$("#new-prop-key").on("input",()=>{let e=$("#new-prop-key").val();$("#new-prop-key").val(e.replace(/\s+/g,"-"))})}async function S(){let{body:e}=await window.__kumologica.debugger.listBreakpoints();0===e.length?(await D({debug:!1}),RED.notifications.notify("No breakpoints found in the flow","warning",void 0,2e3)):($("#test-info-wrapper").hide(),$("#properties-wrapper").hide(),$("#debugger-wrapper").show(),await D({debug:!0}))}function O(e,n){$("#test-info-wrapper").hide(),$("#properties-wrapper").hide(),$("#debugger-wrapper").show();let o=n.payload.nodeId.split("::")[0];testCaseId=o.replace(/\./g,"_"),t.expandLastEntry(),g("traces",testCaseId)}return RED.events.on("test-config",function(){R(k()),C()}),{init:function(){c.removeAllListeners("test:testcase-init"),c.removeAllListeners("test:testcase-start"),c.removeAllListeners("test:testcase-end"),c.removeAllListeners("test:testcase-start"),c.removeAllListeners("debugger:stopped"),c.on("test:testcase-init",p),c.on("test:testcase-start",f),c.on("test:testcase-end",v),c.on("test:assertion-report",b),c.on("debugger:stopped",O),function(){(e=document.createElement("div")).className="sidebar-test",RED.actions.add("core:show-test-tab",w),o=$("<div>",{class:"sidebar-node-info-stack"}).appendTo(e),$('\n <div class="sidebar-title-wrapper">\n <span>Tests</span>\n </div>\n <div id="test-sidebar-header" class="sidebar-header">\n <div id="test-info-wrapper" style="display:flex">\n <div id="test-sidebar-header-wrapper-left">\n <select id="test-sidebar-testcases" style="width: 100%; padding: 0px; height: 23px !important;" class="palette-textinput">\n <option disabled>No Testcases Found</option>\n </select>\n </div>\n <div id="test-sidebar-header-wrapper-right">\n \x3c!-- run btn --\x3e\n <a id="test-sidebar-run-btn" class="sidebar-header-button" href="#">\n <i class="fa fa-play"></i> \n Run\n </a>\n\n \x3c!-- debug btn --\x3e\n <a id="test-sidebar-debug-btn" class="sidebar-header-button" href="#">\n <i class="fa fa-bug"></i> \n </a>\n\n \x3c!-- Environment properties btn --\x3e\n <a id="switchPropertiesBtn" class="sidebar-header-button" href="#">\n <i class="icofont-eye-alt"></i>\n </a>\n\n \x3c!-- clear btn --\x3e\n <a id="test-sidebar-clear" class="sidebar-header-button" href="#">\n <i class="fa fa-trash"></i></a>\n </div>\n </div>\n <div id="debugger-wrapper" style="display:none">\n <div id="test-sidebar-debug-continue" class="sidebar-header-button debugger-button" href="#">\n <img src="red/images/debugger/continue-full.png" width="20" height="20" style="filter: invert(55%)"> \n <span class="debug-button-label" style="margin-left:2px" >Continue</span>\n </div>\n <div id="test-sidebar-debug-next" class="sidebar-header-button debugger-button" href="#">\n <img src="red/images/debugger/stepover.png" width="20" height="20" style="filter: invert(55%)"> \n <span class="debug-button-label">Next</span> \n </div>\n <div id="test-sidebar-debug-restart" class="sidebar-header-button debugger-button" href="#">\n <img src="red/images/debugger/restart.png" width="20" height="20" style="filter: invert(55%)"> \n <span class="debug-button-label">Restart</span> \n </div>\n <div id="test-sidebar-debug-terminate" class="sidebar-header-button debugger-button" href="#">\n <img src="red/images/debugger/stop.png" width="20" height="20" style="filter: invert(55%)">\n <span class="debug-button-label">Stop</span> \n </div>\n </div>\n <div id="properties-wrapper">\n <div id="propertiesWrapperHeader" style="display: flex; padding-bottom: 10px;">\n <div id="enableTraceabilityWrapper" style="width: 50%; padding: 5px 0px 5px 5px;">\n \x3c!--\n <input type="checkbox" id="isTraceabilitySelected" style="margin-top:0px"> Enable traceability\n </input>\n --\x3e\n </div>\n </div>\n <div id="propertiesSection" style="display:none">\n <div id="propertiesLabel">Environment Variables</div>\n <div id="table-test-properties">\n </div>\n </div>\n </div>\n <div id="test-debug-messages-caches" style="display:none">\n </div>\n <div id="test-debug-messages-caches" style="display:none">\n </div>\n </div>\n ').appendTo(o);let n=$('\n\n <div id="test-results-wrapper">\n <div id="test-sidebar-notestfound-explainer" style="display:none">\n <div style="display:flex; flex-direction: column; align-items: center; margin-top: 150px">\n <img style="width: 80px" src="red/images/test-icon.png" />\n <div style="font-weight: bold; font-size: 22px; margin-top: 15px;color: grey;">No test found</div>\n <div style="margin-top: 5px; color: grey;">Add a new <b>TestCase</b> node into the <b>Test</b> tab.</div>\n </div>\n </div>\n </div>').appendTo(o);t=RED.stack.create({container:n}),RED.sidebar.addTab({id:"test",label:" Test",name:"Test Case Runner",iconClass:"fa fa-flask",action:"core:show-test-tab",content:e,pinned:!0,enableOnEdit:!0,onchange:y,onsame:m}),$("#switchPropertiesBtn").click(e=>{d?$("#propertiesSection").hide():$("#propertiesSection").show(),d=!d}),R(k()),C(),RED.popover.tooltip($("#test-sidebar-header-wrapper-left"),"Select Test Case to Run"),RED.popover.tooltip($("#test-sidebar-run-btn"),"Run Test Case"),RED.popover.tooltip($("#test-sidebar-debug-btn"),"Debug Test Case"),RED.popover.tooltip($("#test-sidebar-clear"),"Clear Test Case Results"),RED.popover.tooltip($("#switchPropertiesBtn"),"Environment Configuration")}(),$("#test-sidebar-run-btn").click(D),$("#test-sidebar-debug-btn").click(S),$("#test-sidebar-clear").click(x),$("#test-sidebar-testcases").change(e=>{s=e.target.value,j()}),$("#test-sidebar-debug-continue").click(async e=>{await window.__kumologica.debugger.continue()}),$("#test-sidebar-debug-terminate").click(async e=>{await window.__kumologica.debugger.terminate()}),$("#test-sidebar-debug-next").click(async e=>{await window.__kumologica.debugger.next()}),$("#test-sidebar-debug-restart").click(async e=>{await window.__kumologica.debugger.terminate(),setTimeout(async()=>{await S()},500)}),RED.events.on("deploy:finished",async()=>{a&&(await async function(){r={},s=$("#test-sidebar-testcases").children("option:selected").val(),$("#test-results-wrapper").empty(),$("#workspace-terminal").is(":visible")||$("#shelve-middle").click(),$("#test-debug-messages-caches").empty();let e=$("#isTraceabilitySelected").is(":checked");if(s){const t=_().properties;if(l===s)for(let n=0;n<i.length;n++){E(i[n].id);try{await window.__kumologica.libs.testFlow("{}",i[n].id,t,e)}catch(e){console.log("[tab-test] error found: ",e)}}else try{E(s),await window.__kumologica.libs.testFlow("{}",s,t,e)}catch(e){console.log("[tab-test] error found: ",e)}}else RED.notify("No selected Testcase",{type:"warning"})}(),a=!1)})},refreshTab:y}}(),RED.sidebar.kumohub=function(){var e,t,n,o;marked.setOptions({renderer:new marked.Renderer,gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1});var i,a=!1,s="Select Kumohub profile...";let r,l,d,c;const p="DEPLOYING",u="NOTDEPLOYING";let f=u;function h(){$("<style>").text("\n select {\n outline: 1.5px solid #ccc;\n }\n select:focus {\n outline: 1.5px solid #ccc; \n outline-offset: 0px;\n }\n .invalid {\n border: 1px solid red;\n }\n \n .valid {\n border: 1px solid green;\n }\n datalist {\n max-height: 300px;\n overflow-y: auto !important;\n }\n .editor-button-xsmall {\n height: 16px;\n min-width: 16px;\n line-height: 14px;\n font-size: 10px;\n border-radius: 2px;\n padding: 0 2px;\n }\n ").appendTo(document.head),(e=document.createElement("div")).className="sidebar-kumohub",RED.actions.add("core:show-kumohub-tab",I);var i=$("<div>",{class:"sidebar-node-info-stack"}).appendTo(e);$('\n <div class="sidebar-title-wrapper">\n <span>Deploy: Kumohub</span>\n </div>\n <div id="kumohub-sidebar-header" class="sidebar-header">\n <div id="kumohub-instrumentation" class="node-info">\n <div id="kumohub-profiles-wrapper">\n <span style="padding-left: 3px">Profiles</span>\n <select id="kumohub-sidebar-profiles" class="palette-textinput" style="padding: 0px;">\n <option value="Select Kumohub profile..." style="color:#3988CB !important">Click to select one...</option>\n </select>\n </div> \n\n <div id="kumohub-wrapper">\n \x3c!-- connect btn --\x3e\n <div>\n <a id="kumohub-sidebar-connect-btn" class="sidebar-header-button" href="#">\n <i id="kumohub-sidebar-connect-icon" class="fa fa-circle" style="color: red"></i> \n Connect\n </a>\n </div>\n \n \x3c!-- deploy btn --\x3e\n <div style="margin-right: 4px;">\n <a id="kumohub-sidebar-deploy-btn" class="sidebar-header-button" href="#">\n <i id="kumohub-sidebar-deploy-icon" class="fa fa-cloud-upload"></i> \n Deploy\n </a>\n </div>\n \x3c!-- export btn --\x3e\n <div id="kumohub-options-dropdown">\n <a id="kumohub-sidebar-export-btn" class="sidebar-header-button" href="#">\n <i class="fa fa-ellipsis-h"></i> \n </a>\n </div>\n <div id="kumohub-options-dropdown-content">\n <span class="option-disabled">Generate script...</span>\n <span id="kumohub-exportCloudFormationBtn" class="option">AWS CloudFormation</span>\n <span id="kumohub-exportServerlessBtn" class="option">Serverless</span>\n </div> \n </div>\n </div>\n <table hidden id="kumohub-sidebar-error" class="node-info" style="margin: 0px;">\n <tr>\n <td style="border: 0px solid white; padding: 3px; width: 100%;">\n <p style="font-size: 12px; margin: 0px; text-align: center; color:red;"><span>Kumohub profile has not been configured</span></p>\n </td>\n\n <td style="border: 0px solid white; padding: 3px;">\n <a id="kumohub-sidebar-error-help-btn" class="editor-button editor-button-xsmall" href="https://docs.kumologica.com/docs/guide/GettingStarted.html#installation" target="_blank">\n <i class="fa fa-question"></i> \n </a>\n </td>\n \n <td style="border: 0px solid white; padding: 3px 6px 3px 3px;">\n <a id="kumohub-sidebar-error-close-btn" class="editor-button editor-button-xsmall" href="#">\n <i class="fa fa-times"></i></a>\n </td>\n </tr>\n </table> \n </div>\n ').appendTo(i);let a=$('<div id="kumohub-sidebar-body" style="display:none"></div>');a.appendTo(i),t=RED.stack.create({container:a}).hide(),(n=t.add({title:"function",collapsible:!0})).expand(),o=t.add({title:"environment",collapsible:!0}),RED.sidebar.addTab({id:"kumohub",label:"Kumohub",name:"Kumohub Deployer",iconClass:"fa fa-cloud",action:"core:show-kumohub-tab",content:e,pinned:!0,enableOnEdit:!0,onchange:g,onsame:v});$('\n <table class="node-info">\n <tr class="node-info-node-row">\n <td>Service Name</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="kumohub-fn-name" class="palette-textinput" pattern="[a-zA-Z0-9-_]{1,64}" type="text"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Description</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="kumohub-fn-description" class="palette-textinput" type="text"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Memory (MB)</td>\n <td colspan="2" style="background: white"><input id="kumohub-fn-memory" class="palette-textinput" type="number" min="128" max="1536"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Timeout (s)</td>\n <td colspan="2" style="background: white"><input id="kumohub-fn-timeout" class="palette-textinput" type="number" min="5" max="900"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Workspace</td>\n <td colspan="2" style="background: white">\n <select type="text" class="palette-textinput" id="kumohub-fn-workspace" style="float: left; width: 100%; padding: 0px; outline: 0px solid #ccc; ">\n <option value="UNDEFINED" selected="true">Undefined</option>\n </select>\n </td>\n </tr>\n\n <tr class="node-info-node-row">\n <td>Stage</td>\n <td colspan="2" style="background: white">\n <select type="text" class="palette-textinput" id="kumohub-fn-stage" style="float: left; width: 100%; padding: 0px; outline: 0px solid #ccc; ">\n <option value="UNDEFINED" selected="true">Undefined</option>\n </select>\n </td>\n </tr>\n\n <tr class="node-info-node-row">\n <td>Policy</td>\n <td colspan="2" style="background: white">\n <select type="text" class="palette-textinput" id="kumohub-fn-policy" style="float: left; width: 100%; padding: 0px; outline: 0px solid #ccc; ">\n <option value="Public" selected="true">Public</option>\n </select>\n </td>\n </tr>\n </table>\n ').appendTo(n.content),n.container.show();$('\n <div style="display:flex; flex-direction: column; justify-content: flex-start;">\n <div style="display:flex; justify-content: flex-end; padding:6px">\n <a id="kumohub-add-environment-variable" href="#" class="editor-button editor-button-small red-ui-editableList-addButton">\n <i class="fa fa-plus"></i> Add\n </a>\n </div>\n <div id="kumohub-fn-env" style="display:flex; flex-direction: column">\n <table id="kumohub-fn-env-table" class="node-info" style="table-layout: fixed">\n \n </table>\n </div>\n </div>\n ').appendTo(o.content),o.container.show(),RED.popover.tooltip($("#kumohub-sidebar-deploy-btn"),"Deploy to Kumohub"),RED.popover.tooltip($("#kumohub-options-dropdown"),"Other Kumohub Operations"),RED.popover.tooltip($("#kumohub-sidebar-connect-btn"),"Connect to Kumohub")}function g(){RED.actions.invoke("core:show-sidebar")}function v(){RED.actions.invoke("core:hide-sidebar")}function b(e){return e.replace(".json","").trim().replace(/^@/,"").replace(/[^a-zA-Z0-9-_]/g,"_").substr(0,140)}function m(e){$("#kumohub-fn-name").val(b(e))}function y(e){if(console.log("set values"),l=e.workspace||e.account,d=e.stage,c=e.policy,console.log(`profile stored: ${l} - ${d} - ${c}`),a){if(e&&(e.name||e.functionName)?m(e.name||e.functionName||e["service-name"]):window.__kumologica.settings.projectFlowName&&m(window.__kumologica.settings.projectFlowName),e&&(e.profile&&R(e.profile),e.description&&$("#kumohub-fn-description").val(e.description),e.memory&&$("#kumohub-fn-memory").val(e.memory),e.timeout&&$("#kumohub-fn-timeout").val(e.timeout),e.account&&($("#kumohub-fn-workspace").val(e.workspace||e.account),x("#kumohub-fn-workspace").val()),e.workspace&&($("#kumohub-fn-workspace").val(e.workspace),x("#kumohub-fn-workspace").val()),e.stage&&$("#kumohub-fn-stage").val(e.stage),e.policy&&$("#kumohub-fn-policy").val(e.policy),e.environment&&e.environment.length>0)){let t=$("#kumohub-fn-env-table");e.environment.forEach(function(e,n){$(`\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="kumohub-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%" value="${e.key}"></td>\n <td style="background: white; width:46%"><input id="kumohub-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%" value="${e.value}"></td>\n <td id="kumohub-fn-env-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>`).appendTo(t)})}}else i=e}function w(){let e=k(),t=$("#kumohub-fn-name").val(),n=$("#kumohub-fn-description").val(),o=$("#kumohub-fn-memory").val(),i=$("#kumohub-fn-timeout").val(),a=$("#kumohub-fn-stage").val(),s=$("#kumohub-fn-account").val(),r=$("#kumohub-fn-workspace").val(),l=$("#kumohub-fn-policy").val(),d=[];return $("#kumohub-fn-env-table tr").map((e,t)=>{let n=$(t).find("td").find("input"),o=$(n[0]).val(),i=$(n[1]).val();d.push({key:o,value:i})}),{profile:e,"service-name":t,description:n,memory:o,timeout:i,workspace:r||s,stage:a,environment:d,policy:l}}function x(e){let t=$("#kumohub-fn-stage");if("UNDEFINED"==e)return;let n=r.find(t=>t.name===e);n&&(t.empty(),n.stages&&n.stages.length>0?(n.stages.forEach(function(e){t.append($("<option></option>").val(e.name).text(e.name))}),d&&($("#kumohub-fn-stage").val(d),D(e,d))):t.append($("<option></option>").val("UNDEFINED").text("Undefined")))}function D(e,t){let n=$("#kumohub-fn-policy");if("UNDEFINED"==e)return;let o=r.find(t=>t.name===e);if(o){let e=o.stages.find(e=>e.name===t);e&&e.policies&&(n.empty(),e.policies&&e.policies.length>0?(e.policies.forEach(function(e){n.append($("<option></option>").val(e.name).text(e.name))}),c&&$("#kumohub-fn-policy").val(c)):n.append($("<option></option>").val("Public").text("Public")))}}function E(){try{const e=window.__kumologica.kumohub.listProfiles();let t=$("#kumohub-sidebar-profiles");e.length>0&&(t.empty(),t.append($("<option disabled>Available Kumohub Profiles</option>"))),e.forEach(function(e){t.append($("<option></option>").val(e).text(e))}),window.__kumologica.kumohub.profile&&R(window.__kumologica.kumohub.profile)}catch(e){console.log(`error: ${e}`),$("#kumohub-sidebar-error").show()}}function k(){return $("#kumohub-sidebar-profiles").find(":selected").val()}function R(e){window.__kumologica.kumohub.profile=e,e!=s&&$("#kumohub-sidebar-profiles").find("option[value="+e+"]").length?($(`#kumohub-sidebar-profiles option[value='${s}']`).remove(),$("#kumohub-sidebar-profiles").val(e)):$("#kumohub-sidebar-profiles").val(s)}function T(){E(),window.__kumologica.settings.projectFlowName&&m(window.__kumologica.settings.projectFlowName),$("#kumohub-fn-description").val("kumologica flow"),$("#kumohub-fn-memory").val("512"),$("#kumohub-fn-timeout").val("20"),$("#kumohub-fn-timeout, #kumohub-fn-workspace, #kumohub-fn-stage, #kumohub-fn-policy, #kumohub-fn-memory, #kumohub-fn-description, #kumohub-fn-name").change(function(){O()}),$("#kumohub-fn-name").change(function(){this.value=b(this.value)}),$("#kumohub-fn-workspace").on("change",function(){x(this.value)}),$("#kumohub-fn-stage").on("change",function(){D($("#kumohub-fn-workspace").val(),this.value)}),$("#kumohub-sidebar-profiles").change(function(){this.value&&$("#kumohub-sidebar-body").show(),O(),this.value!=s&&($(`#kumohub-sidebar-profiles option[value='${s}']`).remove(),window.__kumologica.kumohub.profile=this.value,window.__kumologica.kumohub.logout(),C())}),$("#kumohub-add-environment-variable").click(e=>{let t=$("#kumohub-fn-env-table");$('\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="kumohub-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%"></td>\n <td style="background: white; width:46%"><input id="kumohub-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%"></td>\n <td id="kumohub-fn-env-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>').appendTo(t),$("#kumohub-fn-env-table").find("input").each(function(){$(this).change(function(){O()})})}),$("#kumohub-fn-env-table").find("input").each(function(){$(this).change(function(){O()})}),$("#kumohub-fn-env-table").on("click",".removeRow",function(){$(this).parent().remove(),O()}),$(".sidebar-kumohub").click(function(e){$("#kumohub-options-dropdown-content").hide()}),$("#kumohub-sidebar-connect-btn").click(e=>{e.preventDefault(),async function(){if(profile=k(),!profile||profile==s)return void RED.notify("<strong>Error</strong>: Please select Kumohub profile before connecting to Kumohub account.","error");if(window.__kumologica.kumohub.isLoggedIn(profile))return void RED.notify(`<strong>Information</strong>: Already connected to ${profile} Kumohub account.`,"info");$("#kumohub-sidebar-connect-icon").attr({class:"fa fa-spinner fa-spin"}),$("#kumohub-sidebar-connect-icon").css({color:"black"});try{await window.__kumologica.kumohub.login(profile),r=await window.__kumologica.kumohub.getWorkspaces(profile),function(){let e=$("#kumohub-fn-workspace");r.length>0&&e.empty(),r.forEach(function(t){e.append($("<option></option>").val(t.name).text(t.name))}),l&&($("#kumohub-fn-workspace").val(l),x(l))}()}catch(e){return C(),void RED.notify(`<strong>Error</strong>: ${e.stderr?e.stderr:e}`,"error")}$("#kumohub-sidebar-connect-btn").hide(),$("#kumohub-sidebar-deploy-btn").show(),$("#kumohub-sidebar-body").show()}()}),$("#kumohub-sidebar-deploy-btn").click(e=>{e.preventDefault(),async function(){const e=k();if(!e||e==s)return void RED.notify("Please select kumohub profile before deploying flows.","error");if(f==p)return void RED.notify("<strong>Information</strong>: Already deploying to Kumohub.","info");RED.deploy.save(),$("#kumohub-sidebar-deploy-icon").attr({class:"fa fa-spinner fa-spin"}),f=p,$("#workspace-terminal").show();let t=w(),n=t.environment;if(n){let e={Variables:{}};n.forEach(function(t){e.Variables[t.key]=t.value}),t.environment={},t.environment=JSON.stringify(e)}try{await window.__kumologica.kumohub.deploy(RED.header.getCurrentProjectInfo(),t)}catch(e){S(e)}f=u,$("#kumohub-sidebar-deploy-icon").attr({class:"fa fa-cloud-upload"})}()}),$("#kumohub-exportCloudFormationBtn").click(e=>{e.preventDefault(),_(),j(window.__kumologica.cloud.provider.aws)}),$("#kumohub-exportServerlessBtn").click(e=>{e.preventDefault(),_(),j(window.__kumologica.cloud.provider.serverless)}),$("#kumohub-options-dropdown").click(e=>{e.stopPropagation(),$("#kumohub-sidebar-export-btn").toggleClass("dropdown-selected"),$("#kumohub-options-dropdown-content").toggle()}),a=!0,i&&y(i),C()}function _(){$("#kumohub-sidebar-export-btn").removeClass("dropdown-selected"),$("#kumohub-options-dropdown-content").hide()}async function j(e){$("#workspace-terminal").show();try{await window.__kumologica.cloud.generateScript(e,RED.header.getCurrentProjectInfo(),w())}catch(e){S(e)}}function C(){$("#kumohub-sidebar-connect-btn").show(),$("#kumohub-sidebar-connect-btn")&&$("#kumohub-sidebar-connect-btn").html()&&$("#kumohub-sidebar-connect-btn").html($("#kumohub-sidebar-connect-btn").html().replace("Connecting","Connect")),$("#kumohub-sidebar-connect-icon").attr({class:"fa fa-circle"}),$("#kumohub-sidebar-connect-icon").css({color:"red"}),$("#kumohub-sidebar-deploy-btn").hide(),$("#kumohub-sidebar-export-btn").hide(),$("#kumohub-sidebar-body").hide()}function S(e){let t=e.toString();RED.notify(t,"error")}function O(){window.__kumologica.settings.kumohubConfig.setKumohubConfig(w())}function I(){RED.sidebar.show("kumohub")}return RED.events.on("settings:cloud-config-changed",function(){E()}),RED.events.on("kumohub-config",function(){if(!$("#kumohub-fn-name").val()&&window.__kumologica.settings.projectFlowName&&m(window.__kumologica.settings.projectFlowName),window.__kumologica.settings.kumohubConfig){y(window.__kumologica.settings.kumohubConfig.getKumohubConfig())}else console.log("kumologica.settings.kumohubConfig not present")}),{init:function(){h(),T()},show:I}}(),RED.sidebar.azure=function(){var e,t,n,o;marked.setOptions({renderer:new marked.Renderer,gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1});var i,a=!1,s="Select azure profile...";const r="DEPLOYING",l="NOTDEPLOYING";let d=l;function c(){$("<style>").text("\n select {\n outline: 1.5px solid #ccc;\n }\n select:focus {\n outline: 1.5px solid #ccc; \n outline-offset: 0px;\n }\n .invalid {\n border: 1px solid red;\n }\n \n .valid {\n border: 1px solid green;\n }\n datalist {\n max-height: 300px;\n overflow-y: auto !important;\n }\n .editor-button-xsmall {\n height: 16px;\n min-width: 16px;\n line-height: 14px;\n font-size: 10px;\n border-radius: 2px;\n padding: 0 2px;\n }\n ").appendTo(document.head),(e=document.createElement("div")).className="sidebar-azure",RED.actions.add("core:show-azure-tab",T);var i=$("<div>",{class:"sidebar-node-info-stack"}).appendTo(e);$('\n <div class="sidebar-title-wrapper">\n <span>Deploy: Azure</span>\n </div>\n <div id="azure-sidebar-header" class="sidebar-header">\n <div id="azure-instrumentation" class="node-info">\n <div id="azure-profiles-wrapper">\n <span style="padding-left: 3px">Profiles</span>\n <select id="azure-sidebar-profiles" class="palette-textinput" style="padding: 0px;">\n <option value="Select azure profile..." style="color:#3988CB !important">Click to select one...</option>\n </select>\n </div> \n \n <div id="azure-wrapper">\n \x3c!-- connect btn --\x3e\n <div>\n <a id="azure-sidebar-connect-btn" class="sidebar-header-button" href="#">\n <i id="azure-sidebar-connect-icon" class="fa fa-circle" style="color: red"></i> \n Connect\n </a>\n </div>\n \n \x3c!-- deploy btn --\x3e\n <div style="margin-right: 4px;">\n <a id="azure-sidebar-deploy-btn" class="sidebar-header-button" href="#">\n <i id="azure-sidebar-deploy-icon" class="fa fa-cloud-upload"></i> \n Deploy\n </a>\n </div>\n \x3c!-- export btn --\x3e\n <div id="azure-options-dropdown">\n <a id="azure-sidebar-export-btn" class="sidebar-header-button" href="#">\n <i class="fa fa-ellipsis-h"></i> \n </a>\n </div>\n <div id="azure-options-dropdown-content">\n <span class="option-disabled">Generate script...</span>\n <span id="azure-exportCloudFormationBtn" class="option">AWS CloudFormation</span>\n <span id="azure-exportServerlessBtn" class="option">Serverless</span>\n </div> \n </div>\n </div>\n <table hidden id="azure-sidebar-error" class="node-info" style="margin: 0px;">\n <tr>\n <td style="border: 0px solid white; padding: 3px; width: 100%;">\n <p style="font-size: 12px; margin: 0px; text-align: center; color:red;"><span>azure profile has not been configured</span></p>\n </td>\n \n <td style="border: 0px solid white; padding: 3px;">\n <a id="azure-sidebar-error-help-btn" class="editor-button editor-button-xsmall" href="https://docs.kumologica.com/docs/guide/GettingStarted.html#installation" target="_blank">\n <i class="fa fa-question"></i> \n </a>\n </td>\n \n <td style="border: 0px solid white; padding: 3px 6px 3px 3px;">\n <a id="azure-sidebar-error-close-btn" class="editor-button editor-button-xsmall" href="#">\n <i class="fa fa-times"></i></a>\n </td>\n </tr>\n </table> \n </div>\n ').appendTo(i);let a=$('<div id="azure-sidebar-body" style="display:none"></div>');a.appendTo(i),t=RED.stack.create({container:a}).hide(),(n=t.add({title:"function",collapsible:!0})).expand(),o=t.add({title:"environment",collapsible:!0}),tagsSection=t.add({title:"tags",collapsible:!0}),RED.sidebar.addTab({id:"azure",label:"azure",name:"Azure Deployer",iconClass:"fa fa-windows",action:"core:show-azure-tab",content:e,pinned:!0,enableOnEdit:!0,onchange:p,onsame:u});$('\n <table class="node-info">\n <tr class="node-info-node-row">\n <td>Application Name</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="azure-fn-application-name" class="palette-textinput" pattern="[a-zA-Z0-9-_]{1,64}" type="text"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Funcion Name</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="azure-fn-name" class="palette-textinput" pattern="[a-zA-Z0-9-_]{1,64}" type="text"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Description</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="azure-fn-description" class="palette-textinput" type="text"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Resource Group Name</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="azure-fn-resource-group-name" class="palette-textinput" type="text" placeholder=" optional"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Service Plan Id</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="azure-fn-service-plan-id" class="palette-textinput" type="text" placeholder=" optional"></td>\n </tr>\n <tr class="node-info-node-row">\n <td>Location</td>\n <td colspan="2" style="background: white"><input style="width:100%" id="azure-fn-location" list="azure-locations-dataList" class="palette-textinput" type="text" />\n <datalist id="azure-locations-dataList">\n <option value="Asia">\n <option value="Asia Pacific">\n <option value="Australia">\n <option value="Australia Central">\n <option value="Australia Central 2">\n <option value="Australia East">\n <option value="Australia Southeast">\n <option value="Brazil">\n <option value="Brazil South">\n <option value="Brazil Southeast">\n <option value="Canada">\n <option value="Canada Central">\n <option value="Canada East">\n <option value="Central India">\n <option value="Central US">\n <option value="Central US (Stage)">\n <option value="Central US EUAP">\n <option value="East Asia">\n <option value="East Asia (Stage)">\n <option value="East US">\n <option value="East US (Stage)">\n <option value="East US 2">\n <option value="East US 2 (Stage)">\n <option value="East US 2 EUAP">\n <option value="Europe">\n <option value="France Central">\n <option value="France South">\n <option value="Germany North">\n <option value="Germany West Central">\n <option value="Global">\n <option value="India">\n <option value="Japan">\n <option value="Japan East">\n <option value="Japan West">\n <option value="Jio India West">\n <option value="Korea Central">\n <option value="Korea South">\n <option value="North Central US">\n <option value="North Central US (Stage)">\n <option value="North Europe">\n <option value="Norway East">\n <option value="Norway West">\n <option value="South Africa North">\n <option value="South Africa West">\n <option value="South Central US">\n <option value="South Central US (Stage)">\n <option value="South India">\n <option value="Southeast Asia">\n <option value="Southeast Asia (Stage)">\n <option value="Switzerland North">\n <option value="Switzerland West">\n <option value="UAE Central">\n <option value="UAE North">\n <option value="UK South">\n <option value="UK West">\n <option value="United Kingdom">\n <option value="United States">\n <option value="West Central US">\n <option value="West Europe">\n <option value="West India">\n <option value="West US">\n <option value="West US (Stage)">\n <option value="West US 2">\n <option value="West US 2 (Stage)">\n <option value="West US 3">\n </datalist>\n </td>\n </tr>\n <tr class="node-info-node-row">\n <td>OS Type</td>\n <td colspan="2" style="background: white">\n <select type="text" id="azure-fn-os-type" class="palette-textinput" style="float: left; width: 100%; padding: 0px; outline: 0px solid #ccc; ">\n <option value="windows">Windows</option>\n <option value="linux">Linux</option>\n </select>\n </td>\n </tr>\n <tr class="node-info-node-row">\n <td>Hosting Plan</td>\n <td colspan="2" style="background: white">\n <select type="text" id="azure-fn-hosting-plan" class="palette-textinput" style="float: left; width: 100%; padding: 0px; outline: 0px solid #ccc; ">\n <option value="consumtion">Consumption</option>\n <option value="premium">Premium</option>\n </select>\n </td>\n </tr>\n </table>\n ').appendTo(n.content),n.container.show();$('\n <div style="display:flex; flex-direction: column; justify-content: flex-start;">\n <div style="display:flex; justify-content: flex-end; padding:6px">\n <a id="azure-add-environment-variable" href="#" class="editor-button editor-button-small red-ui-editableList-addButton">\n <i class="fa fa-plus"></i> Add\n </a>\n </div>\n <div id="azure-fn-env" style="display:flex; flex-direction: column">\n <table id="azure-fn-env-table" class="node-info" style="table-layout: fixed">\n \n </table>\n </div>\n </div>\n ').appendTo(o.content),o.container.show();$('\n <div style="display:flex; flex-direction: column; justify-content: flex-start;">\n <div style="display:flex; justify-content: flex-end; padding:6px">\n <a id="azure-add-tag" href="#" class="editor-button editor-button-small red-ui-editableList-addButton">\n <i class="fa fa-plus"></i> Add\n </a>\n </div>\n <div id="azure-fn-tags" style="display:flex; flex-direction: column">\n <table id="azure-fn-tags-table" class="node-info" style="table-layout: fixed">\n \n </table>\n </div>\n </div>\n ').appendTo(tagsSection.content),tagsSection.container.show(),RED.popover.tooltip($("#azure-sidebar-deploy-btn"),"Deploy to azure"),RED.popover.tooltip($("#azure-options-dropdown"),"Other azure Operations"),RED.popover.tooltip($("#azure-sidebar-connect-btn"),"Connect to azure")}function p(){RED.actions.invoke("core:show-sidebar")}function u(){RED.actions.invoke("core:hide-sidebar")}function f(e){return e.replace(".json","").trim().replace(/^@/,"").replace(/[^a-zA-Z0-9-_]/g,"_").substr(0,140)}function h(e){$("#azure-fn-name").val(f(e))}function g(e){if(a){if(e&&(e.name||e.functionName)?h(e.name||e.functionName):window.__kumologica.settings.projectFlowName&&h(window.__kumologica.settings.projectFlowName),e&&e["azure-application-name"]&&0!=e["azure-application-name"].length||(console.log(`setting app name: gen ###${f(window.__kumologica.settings.projectFlowName.replace("flow","app"))}###`),$("#azure-fn-application-name").val(f(window.__kumologica.settings.projectFlowName.replace("flow","app")))),e){if(e.profile&&y(e.profile),e["azure-application-name"]&&e["azure-application-name"].length>0&&(console.log(`setting app: ###${e["azure-application-name"]}###`),$("#azure-fn-application-name").val(e["azure-application-name"])),e["hosting-plan"]&&$("#azure-fn-hosting-plan").val(e["hosting-plan"]),e["resource-group-name"]&&$("#azure-fn-resource-group-name").val(e["resource-group-name"]),e["service-plan-id"]&&$("#azure-fn-service-plan-id").val(e["service-plan-id"]),e["os-type"]&&$("#azure-fn-os-type").val(e["os-type"]),e.location&&$("#azure-fn-location").val(e.location),e.description&&$("#azure-fn-description").val(e.description),e.environment&&e.environment.length>0){let t=$("#azure-fn-env-table"),n=JSON.parse(e.environment);for(let e in n)$(`\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="azure-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%" value="${e}"></td>\n <td style="background: white; width:46%"><input id="azure-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%" value="${n[e]}"></td>\n <td id="azure-fn-env-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>`).appendTo(t)}if(e.tags&&e.tags.length>0){let t=JSON.parse(e.tags);for(let e in t)$(`\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="azure-fn-tag-key" class="palette-textinput" type="text" placeholder="key" style="width:100%" value="${e}"></td>\n <td style="background: white; width:46%"><input id="azure-fn-tag-val" class="palette-textinput" type="text" placeholder="value" style="width:100%" value="${t[e]}"></td>\n <td id="azure-fn-tag-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>`).appendTo($("#azure-fn-tags-table"))}}}else i=e}function v(){let e=m(),t=$("#azure-fn-name").val(),n=$("#azure-fn-application-name").val(),o=$("#azure-fn-description").val(),i=$("#azure-fn-os-type").val(),a=$("#azure-fn-location").val(),s=$("#azure-fn-hosting-plan").val(),r=$("#azure-fn-resource-group-name").val(),l=$("#azure-fn-service-plan-id").val(),d={};$("#azure-fn-env-table tr").map((e,t)=>{let n=$(t).find("td").find("input"),o=$(n[0]).val(),i=$(n[1]).val();d[o]=i}),console.log(`tab environment: ${JSON.stringify(d)}`);let c={};return $("#azure-fn-tags-table tr").map((e,t)=>{let n=$(t).find("td").find("input"),o=$(n[0]).val(),i=$(n[1]).val();c[o]=i}),{profile:e,"azure-application-name":n,functionName:t,description:o,"os-type":i,"hosting-plan":s,location:a,"resource-group-name":r,"service-plan-id":l,environment:JSON.stringify(d),tags:JSON.stringify(c)}}function b(){try{const e=window.__kumologica.azure.listProfiles();let t=$("#azure-sidebar-profiles");e.length>0&&(t.empty(),t.append($("<option disabled>Available azure Profiles</option>"))),e.forEach(function(e){t.append($("<option></option>").val(e).text(e))}),window.__kumologica.azure.profile&&y(window.__kumologica.azure.profile)}catch(e){console.log(`error: ${e}`),$("#azure-sidebar-error").show()}}function m(){return $("#azure-sidebar-profiles").find(":selected").val()}function y(e){window.__kumologica.azure.profile=e,e!=s&&$("#azure-sidebar-profiles").find("option[value="+e+"]").length?($(`#azure-sidebar-profiles option[value='${s}']`).remove(),$("#azure-sidebar-profiles").val(e)):$("#azure-sidebar-profiles").val(s)}function w(){b(),window.__kumologica.settings.projectFlowName&&(h(window.__kumologica.settings.projectFlowName),$("#azure-fn-application-name").val()||(console.log(`setting app name: gen ***${f(window.__kumologica.settings.projectFlowName.replace("flow","app"))}###`),$("#azure-fn-application-name").val(f(window.__kumologica.settings.projectFlowName.replace("flow","app"))))),$("#azure-fn-description").val("kumologica flow"),$("#azure-fn-service-plan-id, #azure-fn-resource-group-name, #azure-fn-hosting-plan, #azure-fn-location, #azure-fn-os-type, #azure-fn-application-name, #azure-fn-description, #azure-fn-name").change(function(){R()}),$("#azure-fn-name").change(function(){this.value=f(this.value)}),$("#azure-sidebar-profiles").change(function(){this.value&&$("#azure-sidebar-body").show(),R(),this.value!=s&&($(`#azure-sidebar-profiles option[value='${s}']`).remove(),window.__kumologica.azure.profile=this.value,window.__kumologica.azure.logout(),E())}),$("#azure-add-environment-variable").click(e=>{let t=$("#azure-fn-env-table");$('\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="azure-fn-env-key" class="palette-textinput" type="text" placeholder="key" style="width:100%"></td>\n <td style="background: white; width:46%"><input id="azure-fn-env-val" class="palette-textinput" type="text" placeholder="value" style="width:100%"></td>\n <td id="azure-fn-env-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>').appendTo(t),$("#azure-fn-env-table").find("input").each(function(){$(this).change(function(){R()})})}),$("#azure-fn-env-table").find("input").each(function(){$(this).change(function(){R()})}),$("#azure-fn-env-table").on("click",".removeRow",function(){$(this).parent().remove(),R()}),$("#azure-add-tag").click(e=>{let t=$("#azure-fn-tags-table");$('\n <tr class="node-info-node-row">\n <td style="background: white; width:46%"><input id="azure-fn-tag-key" class="palette-textinput" type="text" placeholder="key" style="width:100%"></td>\n <td style="background: white; width:46%"><input id="azure-fn-tag-val" class="palette-textinput" type="text" placeholder="value" style="width:100%"></td>\n <td id="azure-fn-tags-row" style="text-align:center; width:8%" class="removeRow"><i class="fa fa-minus"></i></td>\n </tr>').appendTo(t),$("#azure-fn-tags-table").find("input").each(function(){$(this).change(function(){R()})})}),$("#azure-fn-tags-table").on("click",".removeRow",function(){$(this).parent().remove(),R()}),$(".sidebar-azure").click(function(e){$("#azure-options-dropdown-content").hide()}),$("#azure-sidebar-connect-btn").click(e=>{e.preventDefault(),async function(){if(profile=m(),!profile||profile==s)return void RED.notify("<strong>Error</strong>: Please select azure profile before connecting to azure account.","error");$("#azure-sidebar-connect-icon").attr({class:"fa fa-spinner fa-spin"}),$("#azure-sidebar-connect-icon").css({color:"black"});try{await window.__kumologica.azure.login(profile)}catch(e){return E(),void RED.notify(`<strong>Error</strong>: ${e.stderr?e.stderr:e}`,"error")}$("#azure-sidebar-connect-btn").hide(),$("#azure-sidebar-deploy-btn").show(),$("#azure-sidebar-body").show()}()}),$("#azure-sidebar-deploy-btn").click(e=>{e.preventDefault(),async function(){const e=m();if(!e||e==s)return void RED.notify("Please select azure profile before deploying flows.","error");if(d==r)return void RED.notify("<strong>Information</strong>: Already deploying to azure.","info");RED.deploy.save(),$("#azure-sidebar-deploy-icon").attr({class:"fa fa-spinner fa-spin"}),d=r,$("#workspace-terminal").show();let t=v();try{await window.__kumologica.azure.deploy(RED.header.getCurrentProjectInfo(),t)}catch(e){k(e)}d=l,$("#azure-sidebar-deploy-icon").attr({class:"fa fa-cloud-upload"})}()}),$("#azure-exportCloudFormationBtn").click(e=>{e.preventDefault(),x(),D(window.__kumologica.cloud.provider.aws)}),$("#azure-exportServerlessBtn").click(e=>{e.preventDefault(),x(),D(window.__kumologica.cloud.provider.serverless)}),$("#azure-options-dropdown").click(e=>{e.stopPropagation(),$("#azure-sidebar-export-btn").toggleClass("dropdown-selected"),$("#azure-options-dropdown-content").toggle()}),a=!0,i&&g(i),E()}function x(){$("#azure-sidebar-export-btn").removeClass("dropdown-selected"),$("#azure-options-dropdown-content").hide()}async function D(e){$("#workspace-terminal").show();try{await window.__kumologica.cloud.generateScript(e,RED.header.getCurrentProjectInfo(),v())}catch(e){k(e)}}function E(){$("#azure-sidebar-connect-btn").show(),$("#azure-sidebar-connect-btn")&&$("#azure-sidebar-connect-btn").html()&&$("#azure-sidebar-connect-btn").html($("#azure-sidebar-connect-btn").html().replace("Connecting","Connect")),$("#azure-sidebar-connect-icon").attr({class:"fa fa-circle"}),$("#azure-sidebar-connect-icon").css({color:"red"}),$("#azure-sidebar-deploy-btn").hide(),$("#azure-sidebar-export-btn").hide(),$("#azure-sidebar-body").hide()}function k(e){let t=e.toString();RED.notify(t,"error")}function R(){window.__kumologica.settings.azureConfig.setAzureConfig(v())}function T(){RED.sidebar.show("azure")}return RED.events.on("settings:azure-config-changed",function(){b()}),RED.events.on("azure-config",function(){if(!$("#azure-fn-name").val()&&window.__kumologica.settings.projectFlowName&&h(window.__kumologica.settings.projectFlowName),window.__kumologica.settings.azureConfig){g(window.__kumologica.settings.azureConfig.getAzureConfig())}else console.log("kumologica.settings.azureConfig not present")}),{init:function(){c(),w()},show:T}}(),RED.palette.editor=function(){var e,t,n,o,i,a=[],s=[],r={},l={},d={},c={},p="";function u(e,t){var n=Date.now()-e;n=n<300?300:0,setTimeout(function(){t()},n)}function f(e,t,n,o){n.show();var i=Date.now();$.ajax({url:"nodes/"+e,type:"PUT",data:JSON.stringify({enabled:t}),contentType:"application/json; charset=utf-8"}).done(function(e,t,a){u(i,function(){n.hide(),o()})}).fail(function(e,t,a){u(i,function(){n.hide(),o(e)})})}function h(e,t,n){var o={module:e};t&&(o.version=t),$.ajax({url:"nodes",type:"POST",data:JSON.stringify(o),contentType:"application/json; charset=utf-8"}).done(function(e,t,o){n()}).fail(function(e,t,o){n(e)})}function g(e){c.hasOwnProperty(e)||(c[e]=setTimeout(function(){delete c[e],b(e)},100))}function v(e){var t=/^rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)[,)]/.exec(e);if(t){var n=parseInt(t[1]),o=parseInt(t[2]),i=parseInt(t[3]);if((299*n+587*o+114*i)/1e3>160)return"rgb("+(n=Math.floor(.8*n))+","+(o=Math.floor(.8*o))+","+(i=Math.floor(.8*i))+")"}return e}function b(e){if(d.hasOwnProperty(e)){var t=d[e].info,n=d[e].elements;if(n){var i=0,a=0,s=0;for(var c in n.errorList.empty(),d[e].totalUseCount=0,d[e].setUseCount={},t.sets)if(t.sets.hasOwnProperty(c)){var p=0,u=t.sets[c],f=n.sets[c];u.err&&(s++,$("<li>").text(u.err).appendTo(n.errorList)),u.enabled&&(i+=u.types.length),a+=u.types.length;for(var h=0;h<t.sets[c].types.length;h++){var g=t.sets[c].types[h];p+=l[g]||0;var b=f.swatches[g];if(u.enabled){var m=RED.nodes.getType(g);m&&m.color?(b.css({background:RED.utils.getNodeColor(g,m)}),b.css({border:"1px solid "+v(b.css("backgroundColor"))})):b.css({background:"#eee",border:"1px dashed #999"})}else b.css({background:"#eee",border:"1px dashed #999"})}d[e].setUseCount[c]=p,d[e].totalUseCount+=p,p>0?(f.enableButton.text("in use"),f.enableButton.addClass("disabled")):(f.enableButton.removeClass("disabled"),u.enabled?f.enableButton.text("disable"):f.enableButton.text("enable")),f.setRow.toggleClass("palette-module-set-disabled",!u.enabled)}0===s?n.errorRow.hide():n.errorRow.show();var y=i===a?a:i+" / "+a;n.setCount.text(`${y} node`),d[e].totalUseCount>0?(n.enableButton.text("in use"),n.enableButton.addClass("disabled"),n.removeButton.hide()):(n.enableButton.removeClass("disabled"),t.local&&n.removeButton.css("display","inline-block"),0===i?n.enableButton.text("enable all"):n.enableButton.text("disable all"),n.container.toggleClass("disabled",0===i))}t.pending_version?(n.versionSpan.html(t.version+' <i class="fa fa-long-arrow-right"></i> '+t.pending_version).appendTo(n.metaRow),n.updateButton.text("updated").addClass("disabled").css("display","inline-block")):r.hasOwnProperty(e)&&1===function(e,t){for(var n=e.split(".").map(function(e){return parseInt(e)}),o=t.split(".").map(function(e){return parseInt(e)}),i=0;i<3;i++){var a=n[i]-o[i];if(a<0)return-1;if(a>0)return 1}return 0}(r[e].version,t.version)?(n.updateButton.show(),n.updateButton.text(`Updated version: ${r[e].version}`)):n.updateButton.hide()}else{d[e]={info:RED.nodes.registry.getModule(e)};var w=[e];for(var x in d[e].info.sets)d[e].info.sets.hasOwnProperty(x)&&(w.push(x),w=w.concat(d[e].info.sets[x].types));d[e].index=w.join(",").toLowerCase(),o.editableList("addItem",d[e])}}var m,y=x;function w(){if(i.editableList("empty"),""!==n.searchBox("value").trim()){s.sort(y);for(var e=0;e<Math.min(10,s.length);e++)i.editableList("addItem",s[e]);0===s.length&&i.editableList("addItem",{}),s.length>10&&i.editableList("addItem",{start:10,more:s.length-10})}else i.editableList("addItem",{count:a.length})}function x(e,t){var o=n.searchBox("value").trim();if(""===o)return D(e,t);var i=e.info.index.indexOf(o)-t.info.index.indexOf(o);return 0===i?D(e,t):i}function D(e,t){return e.info.id.localeCompare(t.info.id)}function E(e,t){return-1*(e.info.timestamp-t.info.timestamp)}function k(){return e.activateTab("nodes"),m}function R(e,t,n){if(!1!==RED.settings.theme("palette.editable")){var o=[{text:"Cancel",click:function(){i.close()}}];e.url&&o.push({text:"Review",class:"primary palette-module-install-confirm-button-install",click:function(){var t=e.url||"";window.open(t)}}),o.push({text:"Install",class:"primary palette-module-install-confirm-button-install",click:function(){var o=RED.utils.addSpinnerOverlay(t,!0),a=$('<div style="position: relative;bottom: calc(50% + 17px); padding-right: 10px;text-align: right;"></div>').appendTo(o);$('<button class="editor-button"></button>').text("View log").appendTo(a).click(function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.eventLog.startEvent("Install : "+e.id+" "+e.version),h(e.id,e.version,function(t){if(o.remove(),t&&t.responseJSON)var i=RED.notify(`<p>Failed to install: ${e.id}</p><p>${t.responseJSON.message}</p><p>Check the log for more information</p>`,{type:"error",modal:!0,fixed:!0,buttons:[{text:"Close",click:function(){i.close()}},{text:"View log",click:function(){i.close(),RED.actions.invoke("core:show-event-log")}}]});n(t)}),i.close()}});var i=RED.notify(`<p>Installing '${e.id}'</p><p>Before installing, please read the node's documentation. Some nodes have dependencies that cannot be automatically resolved and can require a restart of kumologica.</p>`,{modal:!0,fixed:!0,buttons:o})}else n(new Error("Palette not editable"))}return{init:function(){!1!==RED.settings.theme("palette.editable")&&(function(){m=$('<div id="user-settings-tab-palette"></div>');var l=$('<div id="palette-editor"><ul id="palette-editor-tabs"></ul></div>').appendTo(m);e=RED.tabs.create({element:m.find("#palette-editor-tabs"),onchange:function(e){l.find(".palette-editor-tab").hide(),e.content.show(),t&&t.searchBox("value",""),n&&n.searchBox("value",""),"install"===e.id?n&&n.focus():t&&t.focus()},minimumActiveTabWidth:110});var c=$("<div>",{class:"palette-editor-tab"}).appendTo(l);e.addTab({id:"nodes",label:"Nodes",content:c});var u=$("<div>",{class:"palette-search"}).appendTo(c);t=$('<input type="text" placeholder="Filter nodes"></input>').appendTo(u).searchBox({delay:200,change:function(){!function(e){p=e.toLowerCase();var n=o.editableList("filter"),i=o.editableList("length");""===e?t.searchBox("count"):t.searchBox("count",n+" / "+i)}($(this).val())}}),o=$("<ol>",{id:"palette-module-list",style:"position: absolute;top: 35px;bottom: 0;left: 0;right: 0px;"}).appendTo(c).editableList({addButton:!1,scrollOnAdd:!1,sort:function(e,t){return e.info.name.localeCompare(t.info.name)},filter:function(e){return""===p||""===p||e.index.indexOf(p)>-1},addItem:function(e,t,n){var o=n.info;if(o){var i=$("<div>",{class:"palette-module-header"}).appendTo(e),a=$('<div class="palette-module-meta palette-module-name"><i class="fa fa-cube"></i></div>').appendTo(i);$("<span>").text(o.name).appendTo(a);var s=$('<div class="palette-module-meta palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(i),l=$("<span>").text(o.version).appendTo(s),d=$('<div class="palette-module-meta palette-module-errors"><i class="fa fa-warning"></i></div>').hide().appendTo(i),c=$('<ul class="palette-module-error-list"></ul>').appendTo(d),p=$("<div>",{class:"palette-module-meta"}).appendTo(i),u=$('<a href="#" class="editor-button editor-button-small palette-module-set-button"><i class="fa fa-angle-right palette-module-node-chevron"></i> </a>').appendTo(p),v=$("<span>").appendTo(u),b=$("<div>",{class:"palette-module-button-group"}).appendTo(p),m=$('<a href="#" class="editor-button editor-button-small"></a>').text("Update").appendTo(b);m.attr("id","up_"+Math.floor(1e9*Math.random())),m.click(function(t){t.preventDefault(),$(this).hasClass("disabled")||function(e,t,n,o){if(!1!==RED.settings.theme("palette.editable"))var i=RED.notify(`<p>Updating '${e.name}'</p><p>Updating the node will require a restart of kumologica to complete the update. This must be done manually.</p>"`,{modal:!0,fixed:!0,buttons:[{text:"Cancel",click:function(){i.close()}},{text:"Update",class:"primary palette-module-install-confirm-button-update",click:function(){var a=RED.utils.addSpinnerOverlay(n,!0),s=$('<div style="position: relative;bottom: calc(50% + 17px); padding-right: 10px;text-align: right;"></div>').appendTo(a);$('<button class="editor-button"></button>').text("View log").appendTo(s).click(function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.eventLog.startEvent("Install : "+e.name+" "+t),h(e.name,t,function(t){if(a.remove(),t&&t.responseJSON)var n=RED.notify(`<p>Failed to update: ${e.name}</p><p>${t.responseJSON.message}</p><p>Check the log for more information</p>`,{type:"error",modal:!0,fixed:!0,buttons:[{text:"Close",click:function(){n.close()}},{text:"View log",click:function(){n.close(),RED.actions.invoke("core:show-event-log")}}]});o(t)}),i.close()}}]});else o(new Error("Palette not editable"))}(o,r[o.name].version,e,function(e){})});var y=$('<a href="#" class="editor-button editor-button-small"></a>').text("Remove").appendTo(b);y.attr("id","up_"+Math.floor(1e9*Math.random())),y.click(function(t){t.preventDefault(),function(e,t,n){if(!1!==RED.settings.theme("palette.editable"))var o=RED.notify(`<p>Removing '${e.name}'</p><p>Removing the node will uninstall it from kumologica. The node may continue to use resources until kumologica is restarted.</p>`,{modal:!0,fixed:!0,buttons:[{text:"Cancel",click:function(){o.close()}},{text:"Remove",class:"primary palette-module-install-confirm-button-remove",click:function(){var n,i,a=RED.utils.addSpinnerOverlay(t,!0),s=$('<div style="position: relative;bottom: calc(50% + 17px); padding-right: 10px;text-align: right;"></div>').appendTo(a);$('<button class="editor-button"></button>').text("View log").appendTo(s).click(function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.eventLog.startEvent("Remove : "+e.name),n=e.name,i=function(t){if(a.remove(),t&&t.responseJSON)var n=RED.notify(`<p>Failed to remove: ${e.name} </p><p>${t.responseJSON.message}</p><p>Check the log for more information</p>`,{type:"error",modal:!0,fixed:!0,buttons:[{text:"Close",click:function(){n.close()}},{text:"View log",click:function(){n.close(),RED.actions.invoke("core:show-event-log")}}]})},$.ajax({url:"nodes/"+n,type:"DELETE"}).done(function(e,t,n){i()}).fail(function(e,t,n){i(e)}),o.close()}}]});else n(new Error("Palette not editable"))}(o,e,function(e){})}),o.local||y.hide();var w=$('<a href="#" class="editor-button editor-button-small"></a>').text("disable all").appendTo(b),x=$("<div>",{class:"palette-module-content"}).appendTo(e),D=$('<div class="palette-module-shade hide"><img src="red/images/spin.svg" class="palette-spinner"/></div>').appendTo(e);n.elements={updateButton:m,removeButton:y,enableButton:w,errorRow:d,errorList:c,setCount:v,container:e,shade:D,versionSpan:l,sets:{}},u.click(function(t){t.preventDefault(),e.hasClass("expanded")?(e.removeClass("expanded"),x.slideUp()):(e.addClass("expanded"),x.slideDown())});var E=Object.keys(o.sets);E.sort(function(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}),E.forEach(function(e){var t=o.sets[e],i=$("<div>",{class:"palette-module-set"}).appendTo(x),a=$("<div>",{class:"palette-module-set-button-group"}).appendTo(i),s={};t.types.forEach(function(e){var t=$("<div>",{class:"palette-module-type"}).appendTo(i);s[e]=$("<span>",{class:"palette-module-type-swatch"}).appendTo(t),$("<span>",{class:"palette-module-type-node"}).text(e).appendTo(t)});var r=$('<a href="#" class="editor-button editor-button-small"></a>').appendTo(a);r.click(function(o){if(o.preventDefault(),0===n.setUseCount[e]){var i=RED.nodes.registry.getNodeSet(t.id);D.show();var a=!i.enabled;f(t.id,a,D,function(e){e&&e.responseJSON&&RED.notify(`Error found when enabling/disabling node: ${e.responseJSON.message}`)})}}),n.elements.sets[t.name]={setRow:i,enableButton:r,swatches:s}}),w.click(function(t){t.preventDefault(),0===n.totalUseCount&&f(o.name,e.hasClass("disabled"),D,function(e){e&&e.responseJSON&&RED.notify(`Installation '${id}' failed: ${e.responseJSON.message}`)})}),g(o.name)}else $("<div>",{class:"red-ui-search-empty"}).text("No matches found").appendTo(e)}});var v=$("<div>",{class:"palette-editor-tab hide"}).appendTo(l);e.addTab({id:"install",label:"Install",content:v});var b=$("<div>",{class:"palette-editor-toolbar"}).appendTo(v),k=$("<div>",{class:"palette-search"}).appendTo(v);n=$('<input type="text" data-i18n="[placeholder]palette.search"></input>').appendTo(k).searchBox({delay:300,change:function(){var e=$(this).val().trim().toLowerCase();e.length>0?(s=a.filter(function(t){return t.index.indexOf(e)>-1}).map(function(e){return{info:e}}),w(),n.searchBox("count",s.length+" / "+a.length)):(n.searchBox("count",a.length),i.editableList("empty"),i.editableList("addItem",{count:a.length}))}}),$("<span>").text("sort ").appendTo(b);var T=$('<span class="button-group"></span>').appendTo(b),_=$('<a href="#" class="palette-editor-install-sort-option sidebar-header-button-toggle selected"><i class="fa fa-sort-amount-desc"></i></a>').appendTo(T),j=$('<a href="#" class="palette-editor-install-sort-option sidebar-header-button-toggle" data-i18n="palette.editor.sortAZ"></a>').appendTo(T),C=$('<a href="#" class="palette-editor-install-sort-option sidebar-header-button-toggle" data-i18n="palette.editor.sortRecent"></a>').appendTo(T);[{button:_,func:x},{button:j,func:D},{button:C,func:E}].forEach(function(e){e.button.click(function(t){t.preventDefault(),$(this).hasClass("selected")||($(".palette-editor-install-sort-option").removeClass("selected"),$(this).addClass("selected"),y=e.func,w())})});var S=$("<span>").appendTo(b);$('<a href="#" class="sidebar-header-button"><i class="fa fa-refresh"></i></a>').appendTo(S).click(function(e){e.preventDefault(),a=[],r={}}),i=$("<ol>",{style:"position: absolute;top: 78px;bottom: 0;left: 0;right: 0px;"}).appendTo(v).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){if(n.count)$("<div>",{class:"red-ui-search-empty"}).text(`${n.count} module available`).appendTo(e);else if(n.more){e.addClass("palette-module-more");var o=$("<div>",{class:"palette-module-header palette-module"}).appendTo(e),a=$('<a href="#"></a>').text(`+ ${n.more} more`).appendTo(o);a.click(function(e){e.preventDefault(),i.editableList("removeItem",n);for(var t=n.start;t<Math.min(n.start+10,n.start+n.more);t++)i.editableList("addItem",s[t]);n.more>10&&i.editableList("addItem",{start:n.start+10,more:n.more-10})})}else if(n.info){var r=n.info,l=$("<div>",{class:"palette-module-header"}).appendTo(e),c=$('<div class="palette-module-meta"><i class="fa fa-cube"></i></div>').appendTo(l);$("<span>",{class:"palette-module-name"}).text(r.name||r.id).appendTo(c),$('<a target="_blank" class="palette-module-link"><i class="fa fa-external-link"></i></a>').attr("href",r.url).appendTo(c);var p=$('<div class="palette-module-meta"></div>').appendTo(l);$("<div>",{class:"palette-module-description"}).text(r.description).appendTo(p);var u=$('<div class="palette-module-meta"></div>').appendTo(l);$('<span class="palette-module-version"><i class="fa fa-tag"></i> '+r.version+"</span>").appendTo(u),$('<span class="palette-module-updated"><i class="fa fa-calendar"></i> '+function(e){new Date,new Date(e);var t=(Date.now()-new Date(e).getTime())/1e3;if(t<60)return"seconds ago";if((t=Math.floor(t/60))<10)return"minutes ago";if(t<60)return`${t} minutes ago`;if((t=Math.floor(t/60))<24)return`${t} hour ago`;if((t=Math.floor(t/24))<7)return`${t} day ago`;var n=Math.floor(t/7);if(n<4)return`${n} week ago`;var o=Math.floor(n/4);if(n%=4,o<12)return`${o} months ago`;var i=Math.floor(o/12);return 0==(o%=12)?`${i} year(s) ago`:`${i} year(s) ${o} month(s) ago`}(r.updated_at)+"</span>").appendTo(u);var f=!1;if(r.types&&r.types.length>0)for(var t=0;t<r.types.length;t++){var h=RED.nodes.registry.getNodeSetForType(r.types[t]);if(h){f=h.module;break}}var g=$("<div>",{class:"palette-module-meta"}).appendTo(l),v=$("<div>",{class:"palette-module-button-group"}).appendTo(g),b=$('<a href="#" class="editor-button editor-button-small"></a>').text("Install").appendTo(v);b.click(function(t){t.preventDefault(),$(this).hasClass("disabled")||R(r,e,function(e){})}),d.hasOwnProperty(r.id)?(b.addClass("disabled"),b.text("Installed")):f&&(b.addClass("disabled"),b.text("Conflict"),RED.popover.create({target:b,content:`<p>This module cannot be installed as it includes a<br/>node type that has already been installed</p><p>Conflicts with <code>${f}</code></p>"`,trigger:"hover",direction:"bottom",delay:{show:750,hide:50}})),n.elements={installButton:b}}else $("<div>",{class:"red-ui-search-empty"}).text("No matches found").appendTo(e)}}),$('<div id="palette-module-install-shade" class="palette-module-shade hide"><div class="palette-module-shade-status"></div><img src="red/images/spin.svg" class="palette-spinner"/></div>').appendTo(v)}(),RED.userSettings.add({id:"palette",title:"Palette",get:k,close:function(){m.detach()},focus:function(){e.resize(),setTimeout(function(){t.focus()},200)}}),RED.actions.add("core:manage-palette",function(){RED.userSettings.show("palette")}),RED.events.on("registry:module-updated",function(e){g(e.module)}),RED.events.on("registry:node-set-enabled",function(e){g(e.module)}),RED.events.on("registry:node-set-disabled",function(e){g(e.module)}),RED.events.on("registry:node-type-added",function(e){/^subflow:/.test(e)||g(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-type-removed",function(e){/^subflow:/.test(e)||g(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-set-added",function(e){g(e.module);for(var t=0;t<s.length;t++)if(s[t].info.id===e.module){var n=s[t].elements.installButton;n.addClass("disabled"),n.text("Installed");break}}),RED.events.on("registry:node-set-removed",function(e){if(!RED.nodes.registry.getModule(e.module)){var t=d[e.module];if(t){o.editableList("removeItem",t),delete d[e.module];for(var n=0;n<s.length;n++)if(s[n].info.id===e.module){var i=s[n].elements.installButton;i.removeClass("disabled"),i.text("Install");break}}}}),RED.events.on("nodes:add",function(e){/^subflow:/.test(e.type)||(l[e.type]=(l[e.type]||0)+1,1===l[e.type]&&g(RED.nodes.registry.getNodeSetForType(e.type).module))}),RED.events.on("nodes:remove",function(e){l.hasOwnProperty(e.type)&&(l[e.type]--,0===l[e.type]&&(delete l[e.type],g(RED.nodes.registry.getNodeSetForType(e.type).module)))}))},install:R}}(),RED.editor=function(){var e=[];let t=null,n=null;var o={},i={};function a(){return n}function s(e){n=e}function r(e){var t,n,o,i=e.valid,a=e.changed;if(e.valid=!0,0===e.type.indexOf("subflow:"))n=(t=RED.nodes.subflow(e.type.substring(8))).valid,o=t.changed,void 0===n&&(n=r(t),o=t.changed),e.valid=n&&l(e,e._def.defaults,e),e.changed=e.changed||o;else if(e._def)e.valid=l(e,e._def.defaults,e),e._def._creds&&(e.valid=e.valid&&l(e,e._def.credentials,e._def._creds));else if("subflow"==e.type){for(var s=RED.nodes.filterNodes({z:e.id}),d=0;d<s.length;d++)n=s[d].valid,o=s[d].changed,void 0===n&&(n=r(s[d]),o=s[d].changed),e.valid=e.valid&&n,e.changed=e.changed||o;var c=RED.nodes.filterNodes({type:"subflow:"+e.id}),p={};for(d=0;d<c.length;d++)c[d].valid=e.valid,c[d].changed=c[d].changed||e.changed,c[d].dirty=!0,p[c[d].z]=!0;Object.keys(p).forEach(function(e){var t=RED.nodes.subflow(e);t&&r(t)})}return i===e.valid&&a===e.changed||(e.dirty=!0,(t=RED.nodes.subflow(e.z))&&r(t)),e.valid}function l(e,t,n){var o=!0;for(var i in t)t.hasOwnProperty(i)&&(d(e,t,i,n[i])||(o=!1));return o}function d(e,t,n,o){var i=!0;if(/^\$\([a-zA-Z_][a-zA-Z0-9_]*\)$/.test(o))return!0;if(/^\$\{[a-zA-Z_][a-zA-Z0-9_]*\}$/.test(o))return!0;if("required"in t[n]&&t[n].required&&(i=""!==o),i&&"validate"in t[n])try{i=t[n].validate.call(e,o)}catch(t){console.log("Validation error:",e.type,e.id,"property: "+n,"value:",o,t)}if(i&&t[n].type&&RED.nodes.getType(t[n].type)&&!("validate"in t[n]))if(o&&"_ADD_"!=o){var a=RED.nodes.node(o);i=null!==a&&(null==a.valid||a.valid)}else i=t[n].hasOwnProperty("required")&&!t[n].required;return i}function c(e,t){for(var n in e._def.defaults)e._def.defaults.hasOwnProperty(n)&&p(e,e._def.defaults,n,t);if(e._def.credentials)for(n in e._def.credentials)e._def.credentials.hasOwnProperty(n)&&p(e,e._def.credentials,n,t)}function p(e,t,n,o){var i=$("#"+o+"-"+n);if(i.length>0){var a=i.val();t[n].hasOwnProperty("format")&&""!==t[n].format&&"DIV"===i[0].nodeName&&(a=i.text()),d(e,t,n,a)?i.removeClass("input-error"):i.addClass("input-error")}}function u(e,t){e.resize=!0,e.dirty=!0;var n=[];if(e.ports)if(t&&RED.nodes.eachLink(function(o){o.source===e&&t.hasOwnProperty(o.sourcePort)&&("-1"===t[o.sourcePort]?n.push(o):o.sourcePort=t[o.sourcePort])}),e.outputs<e.ports.length){for(;e.outputs<e.ports.length;)e.ports.pop();RED.nodes.eachLink(function(t){t.source===e&&t.sourcePort>=e.outputs&&-1===n.indexOf(t)&&n.push(t)})}else if(e.outputs>e.ports.length)for(;e.outputs>e.ports.length;)e.ports.push(e.ports.length);0===e.inputs&&n.concat(RED.nodes.filterLinks({target:e}));for(var o=0;o<n.length;o++)RED.nodes.removeLink(n[o]);return n}function f(e,t,n,o){var i=$("#"+o+"-"+t);if(0!==i.length){var a,s=i.width(),r=i.attr("style");s=null!==(a=/width\s*:\s*(\d+(%|[a-z]+))/i.exec(r))?a[1]:"70%";var l=$("<div></div>").css({display:"inline-block",position:"relative"}),d=$("<div></div>").css({position:"absolute",left:0,right:"40px"}).appendTo(l),c=$('<select id="'+o+"-"+t+'"></select>').appendTo(d);l.width(s).height(i.height()),0===l.width()&&l.width("70%"),i.replaceWith(l),c.attr("style","width:100%"),L(t,n,e[t],o),$('<a id="'+o+"-lookup-"+t+'" class="editor-button"><i class="fa fa-pencil"></i></a>').css({position:"absolute",right:0,top:0}).appendTo(l),$("#"+o+"-lookup-"+t).click(function(e){N(t,n,c.find(":selected").val(),o),e.preventDefault()});var p="",u=RED.nodes.node(e[t]);RED.nodes.getType(n);u&&(p=RED.utils.getNodeLabel(u,u.id)),i.val(p)}}function h(e,t,n,o){var i=$("#"+o+"-"+t);i.val(e[t]),i.attr("type","hidden");var a=$("<a>",{id:o+"-edit-"+t,class:"editor-button"});i.after(a),e[t]?a.text("Edit"):a.text("Add"),a.click(function(e){N(t,n,i.val()||"_ADD_",o),e.preventDefault()})}function g(e,t,n,o){var i=$("#"+n+"-"+t);if(0!==i.length)if("checkbox"===i.attr("type"))i.prop("checked",e[t]);else{var a=e[t];null==a&&(a=""),void 0!==o&&o[t].hasOwnProperty("format")&&""!==o[t].format&&"DIV"===i[0].nodeName?(i.html(RED.text.format.getHtml(a,o[t].format,{},!1,"en")),RED.text.format.attach(i[0],o[t].format,{},!1,"en")):(i.val(a),"INPUT"!==i[0].nodeName&&"TEXTAREA"!==i[0].nodeName||RED.text.bidi.prepareInput(i))}}function v(e,t,n,o){var i=$("#"+o+"-"+n);t[n].hasOwnProperty("templateable")&&t[n].templateable&&(i.addClass("templateable"),RED.popover.tooltip(i.parent().find($("span.icon-templatable")),"Dynamic Expression Enabled"),i.focusin(()=>{i.parent().find($("span.icon-templatable")).show()}),i.focusout(()=>{i.parent().find($("span.icon-templatable")).hide()})),void 0!==t&&"format"in t[n]&&""!==t[n].format&&"DIV"===i[0].nodeName?$("#"+o+"-"+n).on("change keyup",function(t,n){n||c(e,o)}):$("#"+o+"-"+n).change(function(t,n){n||c(e,o)})}function b(e,t,n,o){var i;for(i in t)t.hasOwnProperty(i)&&("password"==t[i].type?n[i]?$("#"+o+"-"+i).val(n[i]):n["has_"+i]?$("#"+o+"-"+i).val("__PWRD__"):$("#"+o+"-"+i).val(""):g(n,i,o,t),v(e,t,i,o))}function m(e,t,n){var o=!1;for(var i in e.credentials||(e.credentials={_:{}}),t)if(t.hasOwnProperty(i)){var a=$("#"+n+"-"+i).val();if("password"==t[i].type){if(e.credentials["has_"+i]=""!==a,"__PWRD__"==a)continue;o=!0}e.credentials[i]=a,a!=e.credentials._[i]&&(o=!0)}return o}function y(e,t,n,o){for(var i in t.defaults)if(t.defaults.hasOwnProperty(i)){if(t.defaults[i].type){var a=RED.nodes.getType(t.defaults[i].type);a?a.exclusive?h(e,i,t.defaults[i].type,n):f(e,i,t.defaults[i].type,n):(console.log("Unknown type:",t.defaults[i].type),g(e,i,n,t.defaults))}else g(e,i,n,t.defaults);v(e,t.defaults,i,n)}var s,r,l=function(){if(t.oneditprepare)try{t.oneditprepare.call(e)}catch(t){console.log("oneditprepare",e.id,e.type,t.toString())}for(var i in t.defaults)t.defaults.hasOwnProperty(i)&&$("#"+n+"-"+i).trigger("change",[!0]);if(t.credentials)for(i in t.credentials)t.credentials.hasOwnProperty(i)&&$("#"+n+"-"+i).trigger("change",[!0]);c(e,n),o&&o()};t.credentials?e.credentials?(b(e,t.credentials,e.credentials,n),l()):$.getJSON((s=e.type,r=e.id,"credentials/"+s.replace(/\s+/g,"-")+"/"+r),function(o){e.credentials=o,e.credentials._=$.extend(!0,{},o),b(e,t.credentials,e.credentials,n),l()}):l()}function w(){for(var t,n=e.length-1;n<e.length;n++){var o=e[n],i=RED.utils.getDefaultNodeIcon(o._def,o);defaultIcon=i.module+"/"+i.file,"kumologica-core"===i.module&&(t=`icons/${i.module}/${i.file}`)}return t}function x(){for(var t,n=e.length-1;n<e.length;n++){t=e[n].type}return t}function D(e,t,n,o,i){var a=$('<form id="'+t+'" class="form-horizontal" autocomplete="off"></form>').appendTo(e);return a.html($("script[data-template-name='"+n+"']").html()),o=o||"kumologica-core",a.find("[data-i18n]").each(function(){for(var e=$(this).attr("data-i18n").split(";"),t=0;t<e.length;t++){var n=e[t];if(-1===n.indexOf(":")){var i="";if(0===n.indexOf("[")){var a=n.split("]");i=a[0]+"]",n=a[1]}e[t]=i+o+":"+n}}$(this).attr("data-i18n",e.join(";"))}),"subflow"!==n&&"subflow-template"!==n||function(e,t){var n=$("#node-input-env-container");n.css({"min-height":"150px","min-width":"450px"}).editableList({addItem:function(e,t,o){var i=$("<div/>").appendTo(e);o.parent?$("<div/>",{class:"uneditable-input",style:"margin-left: 5px; width: calc(40% - 8px)"}).appendTo(i).text(o.name):$("<input/>",{class:"node-input-env-name",type:"text",style:"margin-left: 5px; width: calc(40% - 8px)",placeholder:"Name"}).appendTo(i).val(o.name);var a=$("<input/>",{class:"node-input-env-value",type:"text",style:"margin-left: 5px; width: calc(60% - 8px)"}).appendTo(i);a.typedInput({default:"str",types:["str","num","bool","json","bin","env"]}),a.typedInput("type",o.parent?o.type||o.parent.type:o.type),a.typedInput("value",o.parent?void 0!==o.value?o.value:o.parent.value:o.value);var s=$("<a/>",{href:"#",class:"red-ui-editableList-item-remove editor-button editor-button-small"}).appendTo(e);if($("<i/>",{class:"fa "+(o.parent?"fa-reply":"fa-remove")}).appendTo(s),e.parent().addClass("red-ui-editableList-item-removable"),o.parent){void 0===o.value||o.value===o.parent.value&&o.type===o.parent.type?s.hide():s.show();var r=RED.popover.tooltip(s,"Restore to subflow default");a.change(function(e){var t=a.typedInput("type"),n=a.typedInput("value");t===o.parent.type&&n===o.parent.value?s.hide():s.show()}),s.click(function(e){e.preventDefault(),r.close(),a.typedInput("type",o.parent.type),a.typedInput("value",o.parent.value)})}else{var l=RED.popover.tooltip(s,"Remove environment variable");s.click(function(t){t.preventDefault(),l.close(),e.parent().addClass("red-ui-editableList-item-deleting"),e.fadeOut(300,function(){n.editableList("removeItem",o)})})}},sortable:!1,removable:!1});var o={},i=[];if(/^subflow:/.test(t.type)){var a=RED.nodes.subflow(t.type.substring(8));a.env&&a.env.forEach(function(e){var t={name:e.name,parent:{type:e.type,value:e.value}};i.push(t),o[e.name]=t})}if(t.env)for(var s=0;s<t.env.length;s++){var r=t.env[s];o.hasOwnProperty(r.name)?(o[r.name].type=r.type,o[r.name].value=r.value):i.push({name:r.name,type:r.type,value:r.value})}i.forEach(function(e){n.editableList("addItem",e)})}(0,i),$('<input type="password" style="display: none;" />').prependTo(a),$('<input type="text" style="display: none;" />').prependTo(a),a.submit(function(e){e.preventDefault()}),a}function E(e,t){var n,o=t._def.inputLabels?"use default label":"none",i=t._def.outputLabels?"use default label":"none",a=$("#node-label-form-inputs"),s=$("#node-label-form-outputs");n="subflow"===t.type?t.in.length:t.inputs||t._def.inputs||0;var r,l,d=a.children(),c=d.length;if(1===c&&$(d[0]).hasClass("node-label-form-none")&&c--,c<n)for(0===c&&$(d[0]).remove(),l=c;l<n;l++)k("input",l,"",o).appendTo(a);else if(c>n){for(l=n;l<c;l++)$(d[l]).remove();0===n&&k().appendTo(a)}var p=$("#node-input-outputs").val();if(void 0===p)"subflow"===t.type?r=t.out.length:n=t.outputs||t._def.outputs||0;else if(isNaN(p)){var u=JSON.parse(p),f=Object.keys(u);d=s.children(),1===(c=d.length)&&$(d[0]).hasClass("node-label-form-none")&&c--,r=0;var h=[];f.forEach(function(e){var t=$("#node-label-form-output-"+e).parent();0===t.length&&-1!==u[e]?(0===c&&($(d[0]).remove(),c=-1),t=k("output",e,"",i)):t.detach(),-1!==u[e]&&(r++,h.push({i:parseInt(u[e]),r:t}))}),h.sort(function(e,t){return e.i-t.i}),h.forEach(function(e,t){e.r.find("label").text(t+1+"."),e.r.appendTo(s)}),0===h.length&&k("output",l,"").appendTo(s)}else r=Math.max(0,parseInt(p));if(d=s.children(),1===(c=d.length)&&$(d[0]).hasClass("node-label-form-none")&&c--,c<r)for(0===c&&$(d[0]).remove(),l=c;l<r;l++)k("output",l,"").appendTo(s);else if(c>r){for(l=r;l<c;l++)$(d[l]).remove();0===r&&k().appendTo(s)}}function k(e,t,n,o){var i=$("<div>",{class:"node-label-form-row"});if(void 0===e)$("<span>").text("none").appendTo(i),i.addClass("node-label-form-none");else{i.addClass("");var a="node-label-form-"+e+"-"+t;$("<label>",{for:a}).text(t+1+".").appendTo(i);var s=$("<input>",{type:"text",id:a,placeholder:o}).val(n).appendTo(i);$('<button type="button" class="editor-button editor-button-small"><i class="fa fa-times"></i></button>').appendTo(i).click(function(e){e.preventDefault(),s.val("")})}return i}function R(e,t){var n,o=$('<form class="dialog-form form-horizontal" autocomplete="off"></form>').appendTo(e);$('<div class="form-row"><label for="node-input-show-label-btn" data-i18n="editor.label"></label><button type="button" id="node-input-show-label-btn" class="editor-button" style="min-width: 80px; text-align: left;" type="button"><i id="node-input-show-label-btn-i" class="fa fa-toggle-on"></i> <span id="node-input-show-label-label"></span></button> <input type="checkbox" id="node-input-show-label" style="display: none;"/></div>').appendTo(o);if(o.find("#node-input-show-label-btn").on("click",function(e){e.preventDefault(),function(e){var t=$("#node-input-show-label-btn-i");e?(t.addClass("fa-toggle-on"),t.removeClass("fa-toggle-off"),$("#node-input-show-label").prop("checked",!0),$("#node-input-show-label-label").text("Show")):(t.addClass("fa-toggle-off"),t.removeClass("fa-toggle-on"),$("#node-input-show-label").prop("checked",!1),$("#node-input-show-label-label").text("Hide"))}($("#node-input-show-label-btn-i").hasClass("fa-toggle-off"))}),!t._def.defaults||!t._def.defaults.hasOwnProperty("icon")){var i=$('<div class="form-row"></div>').appendTo(o);$('<label data-i18n="editor.settingIcon">').appendTo(i);var a=$('<button type="button" class="editor-button" id="node-settings-icon-button">').appendTo(i),s=$("<div>",{class:"red-ui-search-result-node"}).appendTo(a),r=RED.utils.getNodeColor(t.type,t._def),l=RED.utils.getNodeIcon(t._def,t);s.css("backgroundColor",r);var d=$("<div/>",{class:"palette_icon_container"}).appendTo(s);RED.utils.createIconElement(l,d,!0),a.click(function(e){var n;e.preventDefault();var o=$("#node-settings-icon").text()||"";n=o?RED.utils.separateIconPath(o):RED.utils.getDefaultNodeIcon(t._def,t),function(e,t,n,o){var i=e.offset(),a=$("<div>").css({position:"absolute",top:0,bottom:0,left:0,right:0,zIndex:20}).appendTo("body"),s=i.top-30;s+280>$(window).height()&&(s=$(window).height()-280);var r=$('<div class="red-ui-icon-picker">').css({top:s+"px",left:i.left+"px"}).appendTo("body"),l=function(){a.remove(),r.remove(),RED.keyboard.remove("escape")};RED.keyboard.add("*","escape",function(){l()}),a.on("mousedown",l);var d=$("<div>",{class:"red-ui-search-container"}).appendTo(r);searchInput=$('<input type="text">').attr("placeholder","Search icons").appendTo(d).searchBox({delay:50,change:function(){var e=$(this).val().trim();""===e?(c.find(".red-ui-icon-list-module").show(),c.find(".red-ui-icon-list-icon").show()):(c.find(".red-ui-icon-list-module").hide(),c.find(".red-ui-icon-list-icon").each(function(t,n){-1===$(n).data("icon").indexOf(e)?$(n).hide():$(n).show()}))}}),$("<div>").appendTo(r);var c=$('<div class="red-ui-icon-list">').appendTo(r),p=$('<div class="red-ui-icon-meta"></div>').appendTo(r),u=$("<span>").appendTo(p),f=($('<button type="button" class="editor-button editor-button-small">use default</button>').appendTo(p).click(function(e){e.preventDefault(),l(),o(null)}),RED.nodes.getIconSets());Object.keys(f).forEach(function(e){var i=f[e];if(i.length>0){var a=$('<div class="red-ui-icon-list-module"></div>').text(e).appendTo(c);$('<i class="fa fa-cube"></i>').prependTo(a),i.forEach(function(i){var a=$("<div>",{class:"red-ui-icon-list-icon"}).appendTo(c),s=$("<div>",{class:"red-ui-search-result-node"}).appendTo(a),r=RED.utils.getNodeColor(t.type,t._def),d=RED.settings.apiRootUrl+"icons/"+e+"/"+i;a.data("icon",d),s.css("backgroundColor",r);var p=$("<div/>",{class:"palette_icon_container"}).appendTo(s);RED.utils.createIconElement(d,p,!0),n.module===e&&n.file===i&&a.addClass("selected"),a.on("mouseover",function(){u.text(i)}),a.on("mouseout",function(){u.html(" ")}),a.click(function(){l(),o(e+"/"+i)})})}}),r.slideDown(100),searchInput.focus()}(i,t,n,function(e){$("#node-settings-icon").text(e||"");var n=RED.utils.getNodeIcon(t._def,{type:t.type,icon:e});RED.utils.createIconElement(n,d,!0)})}),$('<div id="node-settings-icon">').text(t.icon).appendTo(a)}$('<div class="form-row"><span data-i18n="editor.portLabels"></span></div>').appendTo(o);var c=t.inputs||t._def.inputs||0,p=t.outputs||t._def.outputs||0;"subflow"===t.type&&(c=t.in.length,p=t.out.length);var u=t.inputLabels||[],f=t.outputLabels||[],h=t._def.inputLabels?"use default label":"none",g=t._def.outputLabels?"use default label":"none";$('<div class="form-row"><span style="margin-left: 50px;" data-i18n="editor.labelInputs"></span><div id="node-label-form-inputs"></div></div>').appendTo(o);var v=$("#node-label-form-inputs");if(c>0)for(n=0;n<c;n++)k("input",n,u[n],h).appendTo(v);else k().appendTo(v);$('<div class="form-row"><span style="margin-left: 50px;" data-i18n="editor.labelOutputs"></span><div id="node-label-form-outputs"></div></div>').appendTo(o);var b=$("#node-label-form-outputs");if(p>0)for(n=0;n<p;n++)k("output",n,f[n],g).appendTo(b);else k().appendTo(b)}function T(e,t,n){var o=$("#node-label-form-inputs").children().find("input"),i=$("#node-label-form-outputs").children().find("input"),a=!1,s=!1,r=o.map(function(){var e=$(this).val();return a=a||""!==e,e}).toArray().slice(0,e.inputs);return(void 0===e.inputLabels&&a||void 0!==e.inputLabels&&JSON.stringify(r)!==JSON.stringify(e.inputLabels))&&(t.inputLabels=e.inputLabels,e.inputLabels=r,s=!0),a=!1,r=new Array(e.outputs),i.each(function(){var e=$(this).attr("id").substring(23);if(!n||!n.hasOwnProperty(e)||-1!==(e=parseInt(n[e]))){var t=$(this).val();a=a||""!==t,r[e]=t}}),(void 0===e.outputLabels&&a||void 0!==e.outputLabels&&JSON.stringify(r)!==JSON.stringify(e.outputLabels))&&(t.outputLabels=e.outputLabels,e.outputLabels=r,s=!0),s}function _(e,n){var o=$('<form class="dialog-form form-horizontal" style="padding: 5px 10px;" autocomplete="off"></form>').appendTo(e),i=($("<div></div>").appendTo(o),$('<div class="form-row node-text-editor-row" style="position:relative; padding-top: 4px; height: 100%"></div>\n <div class="form-row node-text-editor-preview" style="display: none; padding: 0px 20px;"></div>\n ').appendTo(o));return $('<div style="height: 100%" class="node-text-editor" id="node-info-input-info-editor" ></div>').appendTo(i),t=RED.editor.createEditor({id:"node-info-input-info-editor",mode:"ace/mode/markdown",value:n.info||"",lineNumbers:!1,toolbar:!1,onChange:function(e){C(a())}})}function j(){e.pop(),RED.sidebar.nodeinfo.emptyTab(),RED.actions.invoke("core:hide-sidebar")}function C(e){console.log("[editor] notifyChanges with nodeSelected: ",e);let n=e,o=e;var i,a,l,d={},c=!1,p=RED.nodes.dirty();if(n._def.oneditsave){var f={};for(i in n._def.defaults)n._def.defaults.hasOwnProperty(i)&&("string"==typeof n[i]||"number"==typeof n[i]?f[i]=n[i]:f[i]=$.extend(!0,{},{v:n[i]}).v);try{!0===n._def.oneditsave.call(n)&&(c=!0)}catch(e){console.log("oneditsave",n.id,n.type,e.toString())}for(i in n._def.defaults)n._def.defaults.hasOwnProperty(i)&&(null===f[i]||"string"==typeof f[i]||"number"==typeof f[i]?f[i]!==n[i]&&(d[i]=f[i],c=!0):JSON.stringify(f[i])!==JSON.stringify(n[i])&&(d[i]=f[i],c=!0))}if(n._def.defaults)for(i in n._def.defaults)if(n._def.defaults.hasOwnProperty(i)){var h=$("#node-input-"+i);if("checkbox"===h.attr("type")?l=h.prop("checked"):"select"===h.prop("nodeName")&&"multiple"===h.attr("multiple")?null==(l=h.val())&&(l=[]):l="format"in n._def.defaults[i]&&""!==n._def.defaults[i].format&&"DIV"===h[0].nodeName?h.text():h.val(),null!=l){if("outputs"===i){if(""===l.trim())continue;if(isNaN(l)){a=JSON.parse(l);var g=0,v=!1;Object.keys(a).forEach(function(e){isNaN(e)?(g++,delete a[e]):(a[e]=a[e]+"","-1"!==a[e]?(g++,a[e]!==e?v=!0:delete a[e]):v=!0)}),l=g,v&&(c=!0)}else l=parseInt(l)}if(n[i]!=l){if(n._def.defaults[i].type){"_ADD_"==l&&(l="");var b=RED.nodes.node(n[i]);if(b){var y=b.users;y.splice(y.indexOf(n),1)}(b=RED.nodes.node(l))&&b.users.push(n)}d[i]=n[i],n[i]=l,c=!0}}}if(n._def.credentials){var w=m(n,n._def.credentials,"node-input");c=c||w}n.hasOwnProperty("_outputs")&&(a=n._outputs,delete n._outputs,Object.keys(a).length>0&&(c=!0));var x=u(n,a);T(n,d,a)&&(c=!0),o.resize=!0;var D=o.info;if(t){var E=t.getValue();D?""===E.trim()?(c=!0,d.info=D,delete o.info):E!==D&&(c=!0,d.info=D,o.info=E):""!==E.trim()&&(c=!0,d.info=void 0,o.info=E)}if(c){var k=n.changed;n.changed=!0,RED.nodes.dirty(!0);var R=null;RED.nodes.subflow(RED.workspaces.active())&&(R=[],RED.nodes.eachNode(function(e){e.type=="subflow:"+RED.workspaces.active()&&(R.push({id:e.id,changed:e.changed}),e.changed=!0,e.dirty=!0,u(e))}));var _={t:"edit",node:n,changes:d,links:x,dirty:p,changed:k};a&&(_.outputMap=a),R&&(_.subflow={instances:R}),RED.history.push(_),n.dirty=!0,r(n),s(n),RED.events.emit("editor:save",n)}}function S(){C(a()),setTimeout(()=>{I()},300)}function O(){setTimeout(()=>{C(a()),I()},300)}function I(){$("#editor-stack :input").off("keyup change",S),$("#editor-stack :input").on("keyup change",S),$("#editor-stack a").off("click",O),$("#editor-stack a").on("click",O)}function N(t,n,o,i){var a,s,l="_ADD_"==o,d=RED.nodes.getType(n),c=RED.nodes.node(o),p=!1;s="kumologica-core"===d.set.module?"kumologica-core":d.set.id;var u="",f=RED.nodes.subflow(RED.workspaces.active());if(f&&(u=f.id),null==c){for(var h in c={id:RED.nodes.id(),_def:d,type:n,z:u,users:[]},d.defaults)d.defaults[h].value&&(c[h]=JSON.parse(JSON.stringify(d.defaults[h].value)));c._=d._}e.push(c),RED.view.state(RED.state.EDITING);var g={title:x(),nodeIconPath:w(),resize:function(e){if($(".editor-tray-content").height(e.height-50),c&&c._def.oneditresize){var t=$("#node-config-dialog-edit-form");try{c._def.oneditresize.call(c,{width:t.width(),height:t.height()})}catch(e){console.log("oneditresize",c.id,c.type,e.toString())}}},open:function(e,t){e.find(".editor-tray-header");var o=e.find(".editor-tray-body"),i=e.find(".editor-tray-footer");!1!==d.hasUsers&&i.prepend('<div id="node-config-dialog-user-count"><i class="fa fa-info-circle"></i> <span></span></div>'),i.append('<span id="node-config-dialog-scope-container"><span id="node-config-dialog-scope-warning" data-i18n="[title]editor.errors.scopeChange"><i class="fa fa-warning"></i></span><select id="node-config-dialog-scope"></select></span>');var r=$('<div id="editorContent"></div>').appendTo(o),l=RED.tabs.create({element:editorTabEl,onchange:function(e){r.children().hide(),e.onchange&&e.onchange.call(e),e.content.show(),p&&RED.tray.resize()},collapsible:!0}),u={id:"editor-tab-cproperties",label:"Properties",name:"Properties",content:$("<div>",{class:"editor-tray-content"}).appendTo(r).hide(),iconClass:"fa fa-cog"};if(l.addTab(u),D(u.content,"node-config-dialog-edit-form",n,s),!d.defaults||!d.defaults.hasOwnProperty("info")){var f={id:"editor-tab-description",label:"Description",name:"Description",content:$("<div>",{class:"editor-tray-content"}).appendTo(r).hide(),iconClass:"fa fa-file-text-o",onchange:function(){a.focus()}};l.addTab(f),a=_(f.content,c)}y(c,d,"node-config-input",function(){c._def.exclusive?$("#node-config-dialog-scope").hide():$("#node-config-dialog-scope").show(),$("#node-config-dialog-scope-warning").hide();var e={};c.users.forEach(function(t){e[t.z]=!0});var n=Object.keys(e).length,a=$("#node-config-dialog-scope").empty();a.off("change"),a.append('<option value=""'+(c.z?"":" selected")+' data-i18n="sidebar.config.global"></option>'),a.append('<option disabled data-i18n="sidebar.config.flows"></option>'),RED.nodes.eachWorkspace(function(t){var n=t.label;e[t.id]&&(n="* "+n),$('<option value="'+t.id+'"'+(t.id==c.z?" selected":"")+"></option>").text(n).appendTo(a)}),a.append('<option disabled data-i18n="sidebar.config.subflows"></option>'),RED.nodes.eachSubflow(function(t){var n=t.name;e[t.id]&&(n="* "+n),$('<option value="'+t.id+'"'+(t.id==c.z?" selected":"")+"></option>").text(n).appendTo(a)}),n>0&&a.on("change",function(){var t=$(this).val();""===t?$("#node-config-dialog-scope-warning").hide():!e[t]||n>1?$("#node-config-dialog-scope-warning").show():$("#node-config-dialog-scope-warning").hide()}),!1!==d.hasUsers&&$("#node-config-dialog-user-count").find("span").text(`${c.users.length} nodes use this config`).parent().show(),o.i18n(),i.i18n(),p=!0,t()})},close:function(){RED.workspaces.refresh(),a&&(a.destroy(),a=null),e.pop()},show:function(){c&&RED.sidebar.info.refresh(c)}};g.buttons=[{id:"node-config-dialog-cancel",text:"Cancel",click:function(){var e=n,t=c.id,o=RED.nodes.getType(e);if(o.oneditcancel&&o.oneditcancel){var i=RED.nodes.node(t);if(i)try{o.oneditcancel.call(i,!1)}catch(e){console.log("oneditcancel",i.id,i.type,e.toString())}else try{o.oneditcancel.call({id:t},!0)}catch(n){console.log("oneditcancel",t,e,n.toString())}}RED.tray.close()}},{id:"node-config-dialog-ok",text:l?"Add":"Update",class:"primary",click:function(){var e,o,s=t,d=(c.id,n),p=l,u=RED.nodes.getType(d),f=$("#node-config-dialog-scope").val();if(u.oneditsave)try{u.oneditsave.call(c)}catch(e){console.log("oneditsave",c.id,c.type,e.toString())}for(e in u.defaults){var h;if(u.defaults.hasOwnProperty(e))if(null!=(h="checkbox"===(o=$("#node-config-input-"+e)).attr("type")?o.prop("checked"):"format"in u.defaults[e]&&""!==u.defaults[e].format&&"DIV"===o[0].nodeName?o.text():o.val())&&h!==c[e]){if(c._def.defaults[e].type){"_ADD_"==h&&(h="");var g=RED.nodes.node(c[e]);if(g){var v=g.users;v.splice(v.indexOf(c),1)}(g=RED.nodes.node(h))&&g.users.push(c)}c[e]=h}}if(a){c.info=a.getValue();var b=c.info;if(a){var y=a.getValue();b?""===y.trim()?delete c.info:y!==b&&(c.info=y):""!==y.trim()&&(c.info=y)}}c.label=u.label,c.z=f,f&&(c.users=c.users.filter(function(e){var t=!0;for(var n in e._def.defaults)e._def.defaults.hasOwnProperty(n)&&e._def.defaults[n].type===c.type&&e[n]===c.id&&e.z!==f&&(t=!1,e[n]=null,e.dirty=!0,e.changed=!0,r(e));return t})),p&&RED.nodes.add(c),u.credentials&&m(c,u.credentials,"node-config-input"),r(c);var w={};w[c.id]=!0;for(var x=c.users.slice();x.length>0;){var D=x.pop();w[D.id]||(w[D.id]=!0,D.users&&(x=x.concat(D.users)),r(D))}RED.nodes.dirty(!0),RED.view.redraw(!0),p||RED.events.emit("editor:save",c),RED.tray.close(function(){L(s,d,c.id,i)})}}],l||g.buttons.unshift({class:"leftButton",text:"Delete",click:function(){var e=t,o=c.id,a=n,s=RED.nodes.getType(a);try{s.ondelete&&(console.log("Deprecated API warning: config node type ",a," has an ondelete function - should be oneditdelete"),s.ondelete.call(c)),s.oneditdelete&&s.oneditdelete.call(c)}catch(e){console.log("oneditdelete",c.id,c.type,e.toString())}for(var l={t:"delete",nodes:[c],changes:{},dirty:RED.nodes.dirty()},d=0;d<c.users.length;d++){var p=c.users[d];for(var u in l.changes[p.id]={changed:p.changed,valid:p.valid},p._def.defaults)p._def.defaults.hasOwnProperty(u)&&p[u]==o&&(l.changes[p.id][u]=o,p[u]="",p.changed=!0,p.dirty=!0);r(p)}RED.nodes.remove(o),RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(l),RED.tray.close(function(){L(e,a,"",i)})}}),RED.tray.show(g)}function P(e,t){return e.__label__<t.__label__?-1:e.__label__>t.__label__?1:0}function L(e,t,n,o){if(o){var i=$("#"+o+"-edit-"+e);if(i.length)n?i.text("Edit"):i.text("Add"),$("#"+o+"-"+e).val(n);else{var a=$("#"+o+"-"+e),s=RED.nodes.getType(t);a.children().remove();var r=RED.nodes.workspace(RED.workspaces.active());r||(r=RED.nodes.subflow(RED.workspaces.active()));var l=[];RED.nodes.eachConfig(function(e){if(e.type==t&&(!e.z||e.z===r.id)){var n=RED.utils.getNodeLabel(e,e.id);e.__label__=n,l.push(e)}});var d=P;"function"==typeof s.sort&&(d=s.sort);try{l.sort(d)}catch(e){console.log("Definition error: "+s.type+".sort",e)}l.forEach(function(e){$('<option value="'+e.id+'"'+(n==e.id?" selected":"")+"></option>").text(RED.text.bidi.enforceTextDirectionWithUCC(e.__label__)).appendTo(a),delete e.__label__}),a.append('<option value="_ADD_"'+(""===n?" selected":"")+">"+`Add new ${t}...`+"</option>"),window.setTimeout(function(){a.change()},50)}}}function z(t,n){o.hasOwnProperty(t)?(e.length>0&&(n.parent=e[e.length-1].id),e.push({type:t}),n.title=n.title||x(),n.onclose=function(){e.pop()},o[t].show(n)):console.log("Unknown type editor:",t)}return{init:function(){RED.tray.init(),RED.actions.add("core:confirm-edit-tray",function(){$("#node-dialog-ok").click(),$("#node-config-dialog-ok").click()}),RED.actions.add("core:cancel-edit-tray",function(){$("#node-dialog-cancel").click(),$("#node-config-dialog-cancel").click()})},edit:function(n){let o;if(0!==Object.keys(n).length||n.constructor!==Object){if(!n||!n.hasOwnProperty("link")){if(n&&n.hasOwnProperty("nodes")&&1===n.nodes.length){if(!RED.sidebar.isSidebarVisible())return void s(n.nodes[0]);o=n.nodes[0]}else{if(n&&n.hasOwnProperty("nodes")&&Array.isArray(n.nodes))return;o=n}s(n=o);var a=!1;e.pop(),e.push(n);var r=n.type;"subflow:"==n.type.substring(0,8)&&(r="subflow");var l={nodeId:n.id,title:x(),nodeIconPath:w(),buttons:[],resize:function(e){i[r]=e.width,$(".editor-tray-content").height(e.height-50);var t=$(".editor-tray-content form").height(e.height-50-40);if(o&&o._def.oneditresize)try{o._def.oneditresize.call(o,{width:t.width(),height:t.height()})}catch(e){console.log("oneditresize",o.id,o.type,e.toString())}},open:function(e,i){e.find(".editor-tray-footer");var s=e.find(".editor-tray-body");s.parent().css("overflow","hidden");var l,d=$("<ul></ul>").appendTo(s),c=$('<div id="editorContent"></div>').appendTo(s),p=RED.tabs.create({element:d,onchange:function(e){c.children().hide(),e.onchange&&e.onchange.call(e),e.content.show(),a&&RED.tray.resize()},collapsible:!0,menu:!1});o&&RED.sidebar.info.refresh(o),l="kumologica-core"===n._def.set.module?"kumologica-core":n._def.set.id;var u=RED.utils.getDefaultNodeIcon(n._def,n);defaultIcon=u.module+"/"+u.file,"kumologica-core"===u.module?(nodeIconPath=`icons/${u.module}/${u.file}`,isDefaultIcon=!0):isDefaultIcon=!1;var f={id:"editor-tab-properties",label:"Properties",name:"Properties",content:$("<div>",{class:"editor-tray-content",id:"properties-tab"}).appendTo(c).hide(),iconClass:"fa fa-cog"};D(f.content,"dialog-form",r,l,n),p.addTab(f);let h={id:"editor-tab-help",label:"Help",name:"Help",content:$("<div>",{class:"editor-tray-content",id:"help-tab"}).appendTo(c).hide(),iconClass:"fa fa-cog"};p.addTab(h);let g=$("#help-tab"),v=$("script[data-help-name='"+n.type+"']").html()||'<span class="node-info-none">None</span>';if($(`<div class="node-help">${v}</div>`).appendTo(g),!n._def.defaults||!n._def.defaults.hasOwnProperty("info")){var b={id:"editor-tab-description",label:"Description",name:"Description",content:$("<div>",{class:"editor-tray-content",id:"documentation-tab"}).appendTo(c).hide(),iconClass:"fa fa-file-text-o",onchange:function(){t?t.focus():console.log("WARN - nodeInfoEditor is undefined")}};p.addTab(b),t=_(b.content,n)}R($("<div>",{class:"editor-tray-content"}).appendTo(c).hide(),n),y(n,n._def,"node-input",function(){s.i18n(),a=!0,i()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),o&&RED.sidebar.info.refresh(o),RED.workspaces.refresh(),t&&(t.destroy(),t=null),RED.view.redraw(!0),e.pop()},show:function(){o&&(RED.sidebar.info.refresh(o),setTimeout(()=>{I()},300))}};RED.actions.invoke("core:show-sidebar",{selectIndex:0}),RED.tray.show(l)}}else j()},editConfig:N,editSubflow:function(t){var n,o=t;e.push(t),RED.view.state(RED.state.EDITING);var i=!1,a={title:x(),buttons:[{id:"node-dialog-cancel",text:"Close",click:function(){RED.tray.close()}},{id:"node-dialog-ok",class:"primary",text:"Save",click:function(){var e={},t=!1,i=RED.nodes.dirty(),a=$("#subflow-input-name").val();a!=o.name&&(e.name=o.name,o.name=a,t=!0);var s=n.getValue();s!=o.info&&(e.info=o.info,o.info=s,t=!0),T(o,e,null)&&(t=!0);var l=$("#node-settings-icon").text()||"";(void 0===o.icon&&"kumologica-core/subflow.png"!==l||void 0!==o.icon&&o.icon!==l)&&(e.icon=o.icon,o.icon=l,t=!0);var d=$("#subflow-input-category").val().trim();"_custom_"===d&&""===(d=$("#subflow-input-custom-category").val().trim())&&(d=o.category),"subflows"===d&&(d=""),d!=o.category&&(e.category=o.category,o.category=d,t=!0);var c,p,f=o.env,h=function(e){if(e){var t=[];return e.each(function(e){var n=$(this),o=((r=n.data("data")).parent?r.name:n.find(".node-input-env-name").val()).trim();if(""!==o){var i=n.find(".node-input-env-value"),a=i.typedInput("value"),s=i.typedInput("type");if(!r.parent||r.parent.value!==a||r.parent.type!==s){var r={name:o,type:s,value:a};t.push(r)}}}),t}return null}($("#node-input-env-container").editableList("items"));if(c=f,p=h,JSON.stringify(c)!==JSON.stringify(p)&&(o.env=h,e.env=o.env,t=!0),RED.palette.refresh(),t){var g=o.changed;o.changed=!0,r(o);var v=[];RED.nodes.eachNode(function(e){e.type=="subflow:"+o.id&&(v.push({id:e.id,changed:e.changed}),e.changed=!0,e.dirty=!0,u(e),r(e))}),RED.nodes.dirty(!0);var b={t:"edit",node:o,changes:e,dirty:i,changed:g,subflow:{instances:v}};RED.history.push(b)}o.dirty=!0,RED.tray.close()}}],resize:function(e){$(".editor-tray-content").height(e.height-50);for(var t=$("#dialog-form>div:not(.node-input-env-container-row)"),n=e.height,o=0;o<t.size();o++)n-=$(t[o]).outerHeight(!0);var i=$("#dialog-form>div.node-input-env-container-row");n-=parseInt(i.css("marginTop"))+parseInt(i.css("marginBottom")),$("#node-input-env-container").editableList("height",n-80)},open:function(e){e.find(".editor-tray-footer");var a=e.find(".editor-tray-body");a.parent().css("overflow","hidden"),o&&RED.sidebar.info.refresh(o);var s=$("<ul></ul>").appendTo(a),r=$("<div></div>").appendTo(a),l=RED.tabs.create({element:s,onchange:function(e){r.children().hide(),e.onchange&&e.onchange.call(e),e.content.show(),i&&RED.tray.resize()},collapsible:!0}),d={id:"editor-tab-properties",label:"Properties",name:"Properties",content:$("<div>",{class:"editor-tray-content"}).appendTo(r).hide(),iconClass:"fa fa-cog"};D(d.content,"dialog-form","subflow-template",void 0,o),l.addTab(d);var c={id:"editor-tab-description",label:"Description",name:"Description",content:$("<div>",{class:"editor-tray-content"}).appendTo(r).hide(),iconClass:"fa fa-file-text-o",onchange:function(){n.focus()}};l.addTab(c),n=_(c.content,o);var p={id:"editor-tab-appearance",label:"Apperance",name:"Apperance",content:$("<div>",{class:"editor-tray-content"}).appendTo(r).hide(),iconClass:"fa fa-object-group",onchange:function(){E(this.content,o)}};R(p.content,o),l.addTab(p),$("#subflow-input-name").val(t.name),RED.text.bidi.prepareInput($("#subflow-input-name")),$("#subflow-input-category").empty();var u=RED.palette.getCategories();u.sort(function(e,t){return e.label.localeCompare(t.label)}),u.forEach(function(e){$("#subflow-input-category").append($("<option></option>").val(e.id).text(e.label))}),$("#subflow-input-category").append($("<option></option>").attr("disabled",!0).text("---")),$("#subflow-input-category").append($("<option></option>").val("_custom_").text("Add new...")),$("#subflow-input-category").change(function(){"_custom_"===$(this).val()?($("#subflow-input-category").width(120),$("#subflow-input-custom-category").show()):($("#subflow-input-category").width(250),$("#subflow-input-custom-category").hide())}),$("#subflow-input-category").val(t.category||"subflows");var f=0,h="subflow:"+o.id;RED.nodes.eachNode(function(e){e.type===h&&f++}),$("#subflow-dialog-user-count").text(`There is ${f} instance of this subflow template`).show(),i=!0},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(o),RED.workspaces.refresh(),n.destroy(),n=null,e.pop(),o=null},show:function(){}};RED.tray.show(a)},editJavaScript:function(e){z("_js",e)},editExpression:function(e){z("_expression",e)},editJSON:function(e){z("_json",e)},editMarkdown:function(e){z("_markdown",e)},editBuffer:function(e){z("_buffer",e)},editText:function(e){z("_string",e)},buildEditForm:D,validateNode:r,updateNodeProperties:u,showTypeEditor:z,registerTypeEditor:function(e,t){o[e]=t},createEditor:function(e){var t=e.element||$("#"+e.id)[0],n=$("<div>").appendTo(t);t=$("<div>").appendTo(t).addClass("node-text-editor-container")[0];var i=ace.edit(t);i.setTheme("ace/theme/tomorrow");var a=i.getSession();return a.on("changeAnnotation",function(){for(var e=a.getAnnotations()||[],t=e.length,n=e.length;t--;)/doctype first\. Expected/.test(e[t].text)?e.splice(t,1):/Unexpected End of file\. Expected/.test(e[t].text)&&e.splice(t,1);n>e.length&&a.setAnnotations(e)}),e.mode&&a.setMode(e.mode),e.foldStyle?a.setFoldStyle(e.foldStyle):a.setFoldStyle("markbeginend"),e.options?i.setOptions(e.options):i.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,tooltipFollowsMouse:!1}),e.readOnly&&(i.setOption("readOnly",e.readOnly),i.container.classList.add("ace_read-only")),e.hasOwnProperty("lineNumbers")&&i.renderer.setOption("showGutter",e.lineNumbers),i.$blockScrolling=1/0,e.value&&a.setValue(e.value,-1),e.globals&&setTimeout(function(){a.$worker&&a.$worker.send("setOptions",[{globals:e.globals,esversion:6,sub:!0,asi:!0,maxerr:1e3}])},100),"ace/mode/markdown"===e.mode&&($(t).addClass("node-text-editor-container-toolbar"),console.log("[editor] options",e),!1===e.toolbar||(i.toolbar=o._markdown.buildToolbar(n,i)),e.expandable),e.onChange&&a.on("change",function(t){e.onChange(t)}),i},getLatestNodeSelected:a,notifyChanges:C,resetEditor:j,forceNotifyChanges:function(){C(a())}}}(),function(){var e={show:function(e){var t=e.value,n=e.complete;RED.view.state(RED.state.EDITING);var o,i,a=[],s={title:e.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:"Cancel",click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:"Done",class:"primary",click:function(){RED.tray.close(void 0,()=>{n(JSON.stringify(o))})}}],resize:function(e){var t=$("#dialog-form").height();i&&i.resize(t)},open:function(e){e.find(".editor-tray-body");var n,s=RED.editor.buildEditForm(e.find(".editor-tray-body"),"dialog-form","_buffer","editor");(a=RED.editor.createEditor({id:"node-input-buffer-str",value:"",mode:"ace/mode/text"})).getSession().setValue(t||"",-1),bufferBinEditor=RED.editor.createEditor({id:"node-input-buffer-bin",value:"",mode:"ace/mode/text",readOnly:!0});var r=function(e){var t=!0,n="string"==typeof e,i=[];o=n?function(e){var t=[],n=0,o=e.length;for(n=0;n<o;n++){var i=e.charCodeAt(n);i<128?t.push(i):i<2048?(t.push(192|i>>6),t.push(128|63&i)):i<55296||i>=57344?(t.push(224|i>>12),t.push(128|i>>6&63),t.push(128|63&i)):(n++,i=65536+((1023&i)<<10|1023&e.charAt(n)),t.push(240|i>>18),t.push(128|i>>12&63),t.push(128|i>>6&63),t.push(128|63&i))}return t}(e):e;var a=0,s=o.length;for(a=0;a<s;a++){var r=parseInt(o[a]);if(!n&&(isNaN(r)||r<0||r>255)){t=!1;break}a>0&&(a%8==0?a%16==0?i.push("\n"):i.push(" "):i.push(" ")),i.push((r<16?"0":"")+r.toString(16).toUpperCase())}return t&&($("#node-input-buffer-type-string").toggle(n),$("#node-input-buffer-type-array").toggle(!n),bufferBinEditor.setValue(i.join(""),1)),t},l=function(){var e=a.getValue(),t=!1;if(/^[\s]*\[[\s\S]*\][\s]*$/.test(e)){t=!0;try{var n=JSON.parse(e);t=r(n)}catch(e){t=!1}}t||r(e)};a.getSession().on("change",function(){clearTimeout(n),n=setTimeout(l,200)}),l(),s.i18n(),i=RED.panels.create({id:"node-input-buffer-panels",resize:function(e,t){var n=$("#node-input-buffer-panel-str");e-=$(n.children()[0]).outerHeight(!0);var o=$(n.children()[1]);e-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#node-input-buffer-str").css("height",e-5+"px"),a.resize();var i=$("#node-input-buffer-panel-bin");o=$(i.children()[0]),t-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#node-input-buffer-bin").css("height",t-5+"px"),bufferBinEditor.resize()}}),$(".node-input-buffer-type").click(function(e){e.preventDefault(),RED.sidebar.info.set("<h3>Buffer editor</h3><p>The Buffer type is stored as a JSON array of byte values. The editor will attempt to parse the entered value as a JSON array. If it is not valid JSON, it will be treated as a UTF-8 String and converted to an array of the individual character code points.</p><p>For example, a value of <code>Hello World</code> will be converted to the JSON array:<pre>[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]</pre></p>"),RED.sidebar.info.show()})},close:function(){e.onclose&&e.onclose(),a.destroy(),bufferBinEditor.destroy()},show:function(){}};RED.tray.show(s)}};$('<script type="text/x-kumologica" data-template-name="_buffer"><div id="node-input-buffer-panels"><div id="node-input-buffer-panel-str" class="red-ui-panel"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><span class="node-input-buffer-type"><i class="fa fa-exclamation-circle"></i> <span id="node-input-buffer-type-string" data-i18n="bufferEditor.modeString"></span><span id="node-input-buffer-type-array" data-i18n="bufferEditor.modeArray"></span></span></div><div class="form-row node-text-editor-row"><div class="node-text-editor" id="node-input-buffer-str"></div></div></div><div id="node-input-buffer-panel-bin" class="red-ui-panel"><div class="form-row node-text-editor-row" style="margin-top: 10px"><div class="node-text-editor" id="node-input-buffer-bin"></div></div></div></div><\/script>').appendTo(document.body),RED.editor.registerTypeEditor("_buffer",e)}(),function(){var e={},t={show:function(t){var n,o,i,a,s=t.parent||"_",r=t.value,l=t.complete;RED.view.state(RED.state.EDITING);var d={title:t.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:"Cancel",click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:"Done",class:"primary",click:function(){$("#node-input-expression-help").text(""),RED.tray.close(void 0,()=>{l(n.getValue())})}}],resize:function(e){var t=$("#dialog-form").height();a&&a.resize(t)},open:function(t){t.find(".editor-tray-body").addClass("node-input-expression-editor");var l=RED.editor.buildEditForm(t.find(".editor-tray-body"),"dialog-form","_expression","editor"),c=$("#node-input-expression-func");Object.keys(jsonata.functions).forEach(function(e){c.append($("<option></option>").val(e).text(e))}),c.change(function(e){var t=$(this).val(),n="<h5>"+t+"("+RED._("jsonata:"+t+".args",{defaultValue:""})+")</h5>";let o=jsonataFns[t].desc||"";var i=marked(o);$("#node-input-expression-help").html(n+"<p>"+i+"</p>")});var p=null,u=-1;(n=RED.editor.createEditor({id:"node-input-expression",value:"",mode:"ace/mode/jsonata",options:{enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0}})).getSession().setValue(r||"",-1),n.on("changeSelection",function(){var e=n.getCursorPosition(),t=n.getSession().getTokenAt(e.row,e.column);if(t!==p||t&&/paren/.test(t.type)&&e.column!==u){var o,i;p=t;var a=null;if(t&&"keyword"===t.type)o=e.row,a=t;else{var s=0,r=!1;for(t?("paren.rparen"===t.type&&(u=e.column,s=e.column-(t.start+t.value.length)),o=e.row,i=t.index):(o=e.row-1,i=-1);null===a&&o>-1;){var l=n.getSession().getTokens(o);for(-1===i&&(i=l.length-1);i>-1;){var d=l[i].type;if(r){if("keyword"===d){a=l[i];break}r=!1}"paren.lparen"===d?s-=l[i].value.length:"paren.rparen"===d&&(s+=l[i].value.length),s<0&&(r=!0,s=0),i--}a||o--}}n.session.removeMarker(null),a&&c.val(a.value).change()}}),l.i18n(),$("#node-input-expression-func-insert").click(function(e){e.preventDefault();n.getCursorPosition();var t=c.val(),o=jsonata.getFunctionSnippet(t);n.insertSnippet(o),n.focus()}),$("#node-input-expression-reformat").click(function(e){e.preventDefault();var t=n.getValue()||"";try{t=jsonata.format(t)}catch(e){}n.getSession().setValue(t||"",-1)});var f,h=RED.tabs.create({element:$("#node-input-expression-tabs"),onchange:function(e){$(".node-input-expression-tab-content").hide(),e.content.show(),d.resize()}});h.addTab({id:"expression-help",label:RED._("expressionEditor.functionReference"),content:$("#node-input-expression-tab-help")}),h.addTab({id:"expression-tests",label:RED._("expressionEditor.test"),content:$("#node-input-expression-tab-test")}),o=RED.editor.createEditor({id:"node-input-expression-test-data",value:e[s]||'{\n "payload": "hello world"\n}',mode:"ace/mode/json",lineNumbers:!1}),$(".node-input-expression-legacy").click(function(e){e.preventDefault(),RED.sidebar.info.set(RED._("expressionEditor.compatModeDesc")),RED.sidebar.info.show()});var g=function(){var e,t,a=o.getValue(),s=n.getValue(),r=!1,l=/(^|[^a-zA-Z0-9_'"])msg([^a-zA-Z0-9_'"]|$)/.test(s);$(".node-input-expression-legacy").toggle(l);try{(t=jsonata(s)).assign("flowContext",function(e){return r=!0,null}),t.assign("globalContext",function(e){return r=!0,null})}catch(e){return void i.setValue(RED._("expressionEditor.errors.invalid-expr",{message:e.message}),-1)}try{e=JSON.parse(a)}catch(e){return void i.setValue(RED._("expressionEditor.errors.invalid-msg",{message:e.toString()}))}try{var d,c=t.evaluate(l?{msg:e}:e);if(r)return void i.setValue(RED._("expressionEditor.errors.context-unsupported"),-1);d=void 0!==c?JSON.stringify(c,null,4):RED._("expressionEditor.noMatch"),i.setValue(d,-1)}catch(e){i.setValue(RED._("expressionEditor.errors.eval",{message:e.message}),-1)}};o.getSession().on("change",function(){clearTimeout(f),f=setTimeout(g,200),e[s]=o.getValue()}),n.getSession().on("change",function(){clearTimeout(f),f=setTimeout(g,200)}),i=RED.editor.createEditor({id:"node-input-expression-test-result",value:"",mode:"ace/mode/json",lineNumbers:!1,readOnly:!0}),a=RED.panels.create({id:"node-input-expression-panels",resize:function(e,t){var a=$("#node-input-expression-panel-expr");e-=$(a.children()[0]).outerHeight(!0);var s=$(a.children()[1]);e-=parseInt(s.css("marginTop"))+parseInt(s.css("marginBottom")),$("#node-input-expression").css("height",e-5+"px"),n.resize(),t-=$("#node-input-expression-panel-info > .form-row > div:first-child").outerHeight(!0)+20,$(".node-input-expression-tab-content").height(t),$("#node-input-expression-test-data").css("height",t-5+"px"),o.resize(),$("#node-input-expression-test-result").css("height",t-5+"px"),i.resize()}}),$("#node-input-example-reformat").click(function(e){e.preventDefault();var t=o.getValue()||"";try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){}o.getSession().setValue(t||"",-1)}),g()},close:function(){t.onclose&&t.onclose(),n.destroy(),o.destroy()},show:function(){}};RED.tray.show(d)}};$('<script type="text/x-kumologica" data-template-name="_expression"><div id="node-input-expression-panels"><div id="node-input-expression-panel-expr" class="red-ui-panel"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><span class="node-input-expression-legacy"><i class="fa fa-exclamation-circle"></i> <span data-i18n="expressionEditor.compatMode"></span></span><button id="node-input-expression-reformat" class="editor-button editor-button-small"><span>Prettify</span></button></div><div class="form-row node-text-editor-row"><div class="node-text-editor" id="node-input-expression"></div></div></div><div id="node-input-expression-panel-info" class="red-ui-panel"><div class="form-row"><ul id="node-input-expression-tabs"></ul><div id="node-input-expression-tab-help" class="node-input-expression-tab-content hide" style="margin-top: 15px;"><div><select id="node-input-expression-func" style="margin-left: 5px; outline: none;"></select><button id="node-input-expression-func-insert" class="editor-button" style="margin-left: 5px;" data-i18n="expressionEditor.insert">Insert</button></div><div id="node-input-expression-help"></div></div><div id="node-input-expression-tab-test" class="node-input-expression-tab-content hide"><div><span style="display: inline-block; width: calc(50% - 5px);"><span data-i18n="expressionEditor.data">Example message</span><button style="float: right; margin-right: 5px;" id="node-input-example-reformat" class="editor-button editor-button-small"><span>Beautify</span></button></span><span style="display: inline-block; width: calc(50% - 5px);" data-i18n="expressionEditor.result">Result</span></div><div style="display: inline-block; width: calc(50% - 5px);" class="node-text-editor" id="node-input-expression-test-data"></div><div style="display: inline-block; width: calc(50% - 5px);" class="node-text-editor" id="node-input-expression-test-result"></div></div></div></div></div><\/script>').appendTo(document.body),RED.editor.registerTypeEditor("_expression",t)}();const jsonataFns={$string:{args:"arg",desc:"Casts the *arg* parameter to a string using the following casting rules:\n\n - Strings are unchanged\n - Functions are converted to an empty string\n - Numeric infinity and NaN throw an error because they cannot be represented as a JSON number\n - All other values are converted to a JSON string using the `JSON.stringify` function"},$length:{args:"str",desc:"Returns the number of characters in the string `str`. An error is thrown if `str` is not a string."},$substring:{args:"str, start[, length]",desc:"Returns a string containing the characters in the first parameter `str` starting at position `start` (zero-offset). If `length` is specified, then the substring will contain maximum `length` characters. If `start` is negative then it indicates the number of characters from the end of `str`."},$substringBefore:{args:"str, chars",desc:"Returns the substring before the first occurrence of the character sequence `chars` in `str`. If `str` does not contain `chars`, then it returns `str`."},$substringAfter:{args:"str, chars",desc:"Returns the substring after the first occurrence of the character sequence `chars` in `str`. If `str` does not contain `chars`, then it returns `str`."},$uppercase:{args:"str",desc:"Returns a string with all the characters of `str` converted to uppercase."},$lowercase:{args:"str",desc:"Returns a string with all the characters of `str` converted to lowercase."},$trim:{args:"str",desc:"Normalizes and trims all whitespace characters in `str` by applying the following steps:\n\n - All tabs, carriage returns, and line feeds are replaced with spaces.\n- Contiguous sequences of spaces are reduced to a single space.\n- Trailing and leading spaces are removed.\n\n If `str` is not specified (i.e. this function is invoked with no arguments), then the context value is used as the value of `str`. An error is thrown if `str` is not a string."},$contains:{args:"str, pattern",desc:"Returns `true` if `str` is matched by `pattern`, otherwise it returns `false`. If `str` is not specified (i.e. this function is invoked with one argument), then the context value is used as the value of `str`. The `pattern` parameter can either be a string or a regular expression."},$split:{args:"str[, separator][, limit]",desc:"Splits the `str` parameter into an array of substrings. It is an error if `str` is not a string. The optional `separator` parameter specifies the characters within the `str` about which it should be split as either a string or regular expression. If `separator` is not specified, then the empty string is assumed, and `str` will be split into an array of single characters. It is an error if `separator` is not a string. The optional `limit` parameter is a number that specifies the maximum number of substrings to include in the resultant array. Any additional substrings are discarded. If `limit` is not specified, then `str` is fully split with no limit to the size of the resultant array. It is an error if `limit` is not a non-negative number."},$join:{args:"array[, separator]",desc:"Joins an array of component strings into a single concatenated string with each component string separated by the optional `separator` parameter. It is an error if the input `array` contains an item which isn't a string. If `separator` is not specified, then it is assumed to be the empty string, i.e. no `separator` between the component strings. It is an error if `separator` is not a string."},$match:{args:"str, pattern [, limit]",desc:"Applies the `str` string to the `pattern` regular expression and returns an array of objects, with each object containing information about each occurrence of a match within `str`."},$replace:{args:"str, pattern, replacement [, limit]",desc:"Finds occurrences of `pattern` within `str` and replaces them with `replacement`.\n\nThe optional `limit` parameter is the maximum number of replacements."},$now:{args:"",desc:"Generates a timestamp in ISO 8601 compatible format and returns it as a string."},$base64encode:{args:"string",desc:"Converts an ASCII string to a base 64 representation. Each character in the string is treated as a byte of binary data. This requires that all characters in the string are in the 0x00 to 0xFF range, which includes all characters in URI encoded strings. Unicode characters outside of that range are not supported."},$base64decode:{args:"string",desc:"Converts base 64 encoded bytes to a string, using a UTF-8 Unicode codepage."},$number:{args:"arg",desc:"Casts the `arg` parameter to a number using the following casting rules:\n\n - Numbers are unchanged\n - Strings that contain a sequence of characters that represent a legal JSON number are converted to that number\n - All other values cause an error to be thrown."},$abs:{args:"number",desc:"Returns the absolute value of the `number` parameter."},$floor:{args:"number",desc:"Returns the value of `number` rounded down to the nearest integer that is smaller or equal to `number`."},$ceil:{args:"number",desc:"Returns the value of `number` rounded up to the nearest integer that is greater than or equal to `number`."},$round:{args:"number [, precision]",desc:"Returns the value of the `number` parameter rounded to the number of decimal places specified by the optional `precision` parameter."},$power:{args:"base, exponent",desc:"Returns the value of `base` raised to the power of `exponent`."},$sqrt:{args:"number",desc:"Returns the square root of the value of the `number` parameter."},$random:{args:"",desc:"Returns a pseudo random number greater than or equal to zero and less than one."},$millis:{args:"",desc:"Returns the number of milliseconds since the Unix Epoch (1 January, 1970 UTC) as a number. All invocations of `$millis()` within an evaluation of an expression will all return the same value."},$sum:{args:"array",desc:"Returns the arithmetic sum of an `array` of numbers. It is an error if the input `array` contains an item which isn't a number."},$max:{args:"array",desc:"Returns the maximum number in an `array` of numbers. It is an error if the input `array` contains an item which isn't a number."},$min:{args:"array",desc:"Returns the minimum number in an `array` of numbers. It is an error if the input `array` contains an item which isn't a number."},$average:{args:"array",desc:"Returns the mean value of an `array` of numbers. It is an error if the input `array` contains an item which isn't a number."},$boolean:{args:"arg",desc:"Casts the argument to a Boolean using the following rules:\n\n - `Boolean` : unchanged\n - `string`: empty : `false`\n - `string`: non-empty : `true`\n - `number`: `0` : `false`\n - `number`: non-zero : `true`\n - `null` : `false`\n - `array`: empty : `false`\n - `array`: contains a member that casts to `true` : `true`\n - `array`: all members cast to `false` : `false`\n - `object`: empty : `false`\n - `object`: non-empty : `true`\n - `function` : `false`"},$not:{args:"arg",desc:"Returns Boolean NOT on the argument. `arg` is first cast to a boolean"},$exists:{args:"arg",desc:"Returns Boolean `true` if the `arg` expression evaluates to a value, or `false` if the expression does not match anything (e.g. a path to a non-existent field reference)."},$count:{args:"array",desc:"Returns the number of items in the array"},$append:{args:"array, array",desc:"Appends two arrays"},$sort:{args:"array [, function]",desc:"Returns an array containing all the values in the `array` parameter, but sorted into order.\n\nIf a comparator `function` is supplied, then it must be a function that takes two parameters:\n\n`function(left, right)`\n\nThis function gets invoked by the sorting algorithm to compare two values left and right. If the value of left should be placed after the value of right in the desired sort order, then the function must return Boolean `true` to indicate a swap. Otherwise it must return `false`."},$reverse:{args:"array",desc:"Returns an array containing all the values from the `array` parameter, but in reverse order."},$shuffle:{args:"array",desc:"Returns an array containing all the values from the `array` parameter, but shuffled into random order."},$zip:{args:"array, ...",desc:"Returns a convolved (zipped) array containing grouped arrays of values from the `array1` … `arrayN` arguments from index 0, 1, 2...."},$keys:{args:"object",desc:"Returns an array containing the keys in the object. If the argument is an array of objects, then the array returned contains a de-duplicated list of all the keys in all of the objects."},$lookup:{args:"object, key",desc:"Returns the value associated with key in object. If the first argument is an array of objects, then all of the objects in the array are searched, and the values associated with all occurrences of key are returned."},$spread:{args:"object",desc:"Splits an object containing key/value pairs into an array of objects, each of which has a single key/value pair from the input object. If the parameter is an array of objects, then the resultant array contains an object for every key/value pair in every object in the supplied array."},$merge:{args:"array<object>",desc:"Merges an array of `objects` into a single `object` containing all the key/value pairs from each of the objects in the input array. If any of the input objects contain the same key, then the returned `object` will contain the value of the last one in the array. It is an error if the input array contains an item that is not an object."},$sift:{args:"object, function",desc:"Returns an object that contains only the key/value pairs from the `object` parameter that satisfy the predicate `function` passed in as the second parameter.\n\nThe `function` that is supplied as the second parameter must have the following signature:\n\n`function(value [, key [, object]])`"},$each:{args:"object, function",desc:"Returns an array containing the values return by the `function` when applied to each key/value pair in the `object`."},$map:{args:"array, function",desc:"Returns an array containing the results of applying the `function` parameter to each value in the `array` parameter.\n\nThe `function` that is supplied as the second parameter must have the following signature:\n\n`function(value [, index [, array]])`"},$filter:{args:"array, function",desc:"Returns an array containing only the values in the `array` parameter that satisfy the `function` predicate.\n\nThe `function` that is supplied as the second parameter must have the following signature:\n\n`function(value [, index [, array]])`"},$reduce:{args:"array, function [, init]",desc:"Returns an aggregated value derived from applying the `function` parameter successively to each value in `array` in combination with the result of the previous application of the function.\n\nThe function must accept two arguments, and behaves like an infix operator between each value within the `array`.\n\nThe optional `init` parameter is used as the initial value in the aggregation."},$flowContext:{args:"string[, string]",desc:"Retrieves a flow context property.\n\nThis is a kumologica-core defined function."},$globalContext:{args:"string[, string]",desc:"Retrieves a global context property.\n\nThis is a kumologica-core defined function."},$pad:{args:"string, width [, char]",desc:"Returns a copy of the `string` with extra padding, if necessary, so that its total number of characters is at least the absolute value of the `width` parameter.\n\nIf `width` is a positive number, then the string is padded to the right; if negative, it is padded to the left.\n\nThe optional `char` argument specifies the padding character(s) to use. If not specified, it defaults to the space character."},$fromMillis:{args:"number",desc:"Convert a number representing milliseconds since the Unix Epoch (1 January, 1970 UTC) to a timestamp string in the ISO 8601 format."},$formatNumber:{args:"number, picture [, options]",desc:"Casts the `number` to a string and formats it to a decimal representation as specified by the `picture` string.\n\n The behaviour of this function is consistent with the XPath/XQuery function fn:format-number as defined in the XPath F&O 3.1 specification. The picture string parameter defines how the number is formatted and has the same syntax as fn:format-number.\n\nThe optional third argument `options` is used to override the default locale specific formatting characters such as the decimal separator. If supplied, this argument must be an object containing name/value pairs specified in the decimal format section of the XPath F&O 3.1 specification."},$formatBase:{args:"number [, radix]",desc:"Casts the `number` to a string and formats it to an integer represented in the number base specified by the `radix` argument. If `radix` is not specified, then it defaults to base 10. `radix` can be between 2 and 36, otherwise an error is thrown."},$toMillis:{args:"timestamp",desc:"Convert a `timestamp` string in the ISO 8601 format to the number of milliseconds since the Unix Epoch (1 January, 1970 UTC) as a number. An error is thrown if the string is not in the correct format."},$env:{args:"arg",desc:"Returns the value of an environment variable.\n\nThis is a kumologica-core defined function."},$eval:{args:"expr [, context]",desc:"Parses and evaluates the string `expr` which contains literal JSON or a JSONata expression using the current context as the context for evaluation."},$formatInteger:{args:"number, picture",desc:"Casts the `number` to a string and formats it to an integer representation as specified by the `picture` string. The picture string parameter defines how the number is formatted and has the same syntax as `fn:format-integer` from the XPath F&O 3.1 specification."},$parseInteger:{args:"string, picture",desc:"Parses the contents of the `string` parameter to an integer (as a JSON number) using the format specified by the `picture` string. The `picture` string parameter has the same format as `$formatInteger`."},$single:{args:"array, function",desc:"Returns the one and only one value in the array parameter that satisfy the function predicate"}};!function(){var e={show:function(e){var t,n=e.value,o=e.complete;RED.view.state(RED.state.EDITING);var i={title:e.title,width:e.width||"inherit",buttons:[{id:"node-dialog-cancel",text:"Cancel",click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:"Done",class:"primary",click:function(){RED.tray.close(void 0,()=>{o(t.getValue(),t.getCursorPosition())})}}],resize:function(e){for(var n=$("#dialog-form>div:not(.node-text-editor-row)"),o=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),i=0;i<n.size();i++)o-=$(n[i]).outerHeight(!0);$(".node-text-editor").css("height",o+"px"),t.resize()},open:function(o){o.find(".editor-tray-body");var i=RED.editor.buildEditForm(o.find(".editor-tray-body"),"dialog-form","_js","editor");t=RED.editor.createEditor({id:"node-input-js",mode:e.mode||"ace/mode/javascript",value:n,globals:{msg:!0,context:!0,RED:!0,util:!0,flow:!0,global:!0,console:!0,Buffer:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0}}),e.cursor&&t.gotoLine(e.cursor.row+1,e.cursor.column,!1),i.i18n()},close:function(){t.destroy(),e.onclose&&e.onclose()},show:function(){}};RED.tray.show(i)}};$('<script type="text/x-kumologica" data-template-name="_js"><div class="form-row node-text-editor-row"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-js"></div></div><\/script>').appendTo(document.body),RED.editor.registerTypeEditor("_js",e)}(),function(){var e={show:function(e){var t,n,o=e.value,i=e.complete;RED.view.state(RED.state.EDITING);var a=function(){var e=t.getValue();try{return JSON.parse(e),$("#node-dialog-ok").removeClass("disabled"),!0}catch(e){return $("#node-dialog-ok").addClass("disabled"),!1}},s={title:e.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:"Cancel",click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:"Done",class:"primary",click:function(){e.requireValid&&!a()||RED.tray.close(void 0,()=>{console.log("[json] onComplete invoked"),i(t.getValue())})}}],resize:function(e){for(var n=$("#dialog-form>div:not(.node-text-editor-row)"),o=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),i=0;i<n.size();i++)o-=$(n[i]).outerHeight(!0);o-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",o+"px"),t.resize()},open:function(i){i.find(".editor-tray-body");var s=RED.editor.buildEditForm(i.find(".editor-tray-body"),"dialog-form","_json","editor");(t=RED.editor.createEditor({id:"node-input-json",value:"",mode:"ace/mode/json"})).getSession().setValue(o||"",-1),e.requireValid&&(t.getSession().on("change",function(){clearTimeout(n),n=setTimeout(a,200)}),a()),$("#node-input-json-reformat").click(function(e){e.preventDefault();var n=t.getValue()||"";try{n=JSON.stringify(JSON.parse(n),null,4)}catch(e){}t.getSession().setValue(n||"",-1)}),s.i18n()},close:function(){t.destroy(),e.onclose&&e.onclose()},show:function(){}};RED.tray.show(s)}};$('<script type="text/x-kumologica" data-template-name="_json"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><button id="node-input-json-reformat" class="editor-button editor-button-small"><span>Prettify</span></button></div><div class="form-row node-text-editor-row"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-json"></div></div><\/script>').appendTo(document.body),RED.editor.registerTypeEditor("_json",e)}(),function(){var e,t={show:function(t){var n,o=t.value,i=t.complete;RED.view.state(RED.state.EDITING);var a={title:t.title,width:t.width||1/0,buttons:[{id:"node-dialog-cancel",text:"Cancel",click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:"Done",class:"primary",click:function(){RED.tray.close(void 0,()=>{i(n.getValue(),n.getCursorPosition())})}}],resize:function(t){var n=$("#dialog-form").width();e&&e.resize(n)},open:function(i){i.find(".editor-tray-body").addClass("node-input-markdown-editor");var a,s=RED.editor.buildEditForm(i.find(".editor-tray-body"),"dialog-form","_markdown","editor");(n=RED.editor.createEditor({id:"node-input-markdown",value:o,mode:"ace/mode/markdown",expandable:!1})).getSession().on("change",function(){clearTimeout(a),a=setTimeout(function(){var e=$(".node-input-markdown-panel-preview").scrollTop();$(".node-input-markdown-panel-preview").html(marked(n.getValue())),$(".node-input-markdown-panel-preview").scrollTop(e)},200)}),t.header&&t.header.appendTo(i.find("#node-input-markdown-title")),o&&$(".node-input-markdown-panel-preview").html(marked(n.getValue())),(e=RED.panels.create({id:"node-input-markdown-panels",dir:"horizontal",resize:function(e,t){n.resize()}})).ratio(1),$('<span class="button-group" style="float:right"><button type="button" id="node-btn-markdown-preview" class="editor-button toggle single"><i class="fa fa-eye"></i></button></span>').appendTo(n.toolbar),$("#node-btn-markdown-preview").click(function(t){t.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),e.ratio(1)):($(this).addClass("selected"),e.ratio(.5))}),RED.popover.tooltip($("#node-btn-markdown-preview"),"Toggle preview"),t.cursor&&n.gotoLine(t.cursor.row+1,t.cursor.column,!1),s.i18n()},close:function(){n.destroy(),t.onclose&&t.onclose()},show:function(){}};RED.tray.show(a)},buildToolbar:function(e,t){var n={h1:{newline:!0,before:"# ",tooltip:"Heading1"},h2:{newline:!0,before:"## ",tooltip:"Heading2"},h3:{newline:!0,before:"### ",tooltip:"Heading3"},b:{before:"**",after:"**",tooltip:"Bold"},i:{before:"_",after:"_",tooltip:"Italic"},code:{before:"`",after:"`",tooltip:"Code"},ol:{before:" * ",newline:!0,tooltip:"Ordered List"},ul:{before:" - ",newline:!0,tooltip:"Unordered List"},bq:{before:"> ",newline:!0,tooltip:"Quote"},link:{before:"[",after:"]()",tooltip:"Link"},hr:{before:"\n---\n\n",tooltip:"Horizontal Rule"}},o=$('<div style="margin-bottom: 5px"><span class="button-group"><button type="button" class="editor-button md-option" data-style="h1" style="font-size:1.1em; font-weight: bold">h1</button><button type="button" class="editor-button md-option" data-style="h2" style="font-size:1.0em; font-weight: bold">h2</button><button type="button" class="editor-button md-option" data-style="h3" style="font-size:0.9em; font-weight: bold">h3</button></span><span class="button-group"><button type="button" class="editor-button md-option" data-style="b"><i class="fa fa-bold"></i></button><button type="button" class="editor-button md-option" data-style="i"><i class="fa fa-italic"></i></button><button type="button" class="editor-button md-option" data-style="code"><i class="fa fa-code"></i></button></span><span class="button-group"><button type="button" class="editor-button md-option" data-style="ol"><i class="fa fa-list-ol"></i></button><button type="button" class="editor-button md-option" data-style="ul"><i class="fa fa-list-ul"></i></button><button type="button" class="editor-button md-option" data-style="bq"><i class="fa fa-quote-left"></i></button><button type="button" class="editor-button md-option" data-style="hr"><i class="fa fa-minus"></i></button><button type="button" class="editor-button md-option" data-style="link"><i class="fa fa-link"></i></button></span>').appendTo(e);return o.find("button[data-style]").each(function(e){var o=n[$(this).data("style")];$(this).click(function(e){e.preventDefault();var n=t.getSelectedText(),i=t.selection.getRange();if(o.newline)for(var a=0,s=((o.before||"").match(/\n/g)||[]).length,r=((o.after||"").match(/\n/g)||[]).length,l=i.start.row;l<=i.end.row+a;l++)o.before&&(t.session.insert({row:l,column:0},o.before),a+=s,l+=s),o.after&&(t.session.insert({row:l,column:1/0},o.after),a+=r,l+=r);else t.session.replace(t.selection.getRange(),(o.before||"")+n+(o.after||"")),""===n&&t.gotoLine(i.start.row+1,i.start.column+(o.before||"").length,!1);t.focus()}),o.tooltip&&RED.popover.tooltip($(this),o.tooltip)}),o}};$('<script type="text/x-kumologica" data-template-name="_markdown"><div id="node-input-markdown-panels"><div id="node-input-markdown-panel-editor" class="red-ui-panel"><div style="height: 100%; margin: auto; max-width: 1000px;"><div id="node-input-markdown-toolbar"></div><div class="node-text-editor" style="height: 100%" id="node-input-markdown"></div></div></div><div class="red-ui-panel"><div class="node-input-markdown-panel-preview node-help"></div></div><\/script>').appendTo(document.body),RED.editor.registerTypeEditor("_markdown",t)}(),function(){var e={show:function(e){var t,n=e.value,o=e.complete;RED.view.state(RED.state.EDITING);var i={title:e.title,width:e.width||"inherit",buttons:[{id:"node-dialog-cancel",text:"Cancel",click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:"Done",class:"primary",click:function(){RED.tray.close(void 0,()=>{o(t.getValue(),t.getCursorPosition())})}}],resize:function(e){for(var n=$("#dialog-form>div:not(.node-text-editor-row)"),o=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),i=0;i<n.size();i++)o-=$(n[i]).outerHeight(!0);$(".node-text-editor").css("height",o+"px"),t.resize()},open:function(o){o.find(".editor-tray-body");var i=RED.editor.buildEditForm(o.find(".editor-tray-body"),"dialog-form","_string","editor");t=RED.editor.createEditor({id:"node-input-string",mode:e.mode||"ace/mode/text",value:n}),e.cursor&&t.gotoLine(e.cursor.row+1,e.cursor.column,!1),i.i18n()},close:function(){t.destroy(),e.onclose&&e.onclose()},show:function(){}};RED.tray.show(i)}};$('<script type="text/x-kumologica" data-template-name="_string"><div class="form-row node-text-editor-row"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-string"></div></div><\/script>').appendTo(document.body),RED.editor.registerTypeEditor("_string",e)}(),RED.eventLog=function(){var e,t=[],n=!1;return{init:function(){$('<script type="text/x-kumologica" data-template-name="_eventLog"><div class="form-row node-text-editor-row"><div style="height: 100%;min-height: 150px;" class="node-text-editor" id="event-log-editor"></div></div><\/script>').appendTo(document.body),RED.actions.add("core:show-event-log",RED.eventLog.show)},show:function(){if(!n){n=!0;var o={title:"Event log",width:1/0,buttons:[{id:"node-dialog-close",text:"Close",click:function(){RED.tray.close()}}],resize:function(t){for(var n=$("#dialog-form>div:not(.node-text-editor-row)"),o=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),i=0;i<n.size();i++)o-=$(n[i]).outerHeight(!0);o-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",o+"px"),e.resize()},open:function(n){n.find(".editor-tray-body");var o=RED.editor.buildEditForm(n.find(".editor-tray-body"),"dialog-form","_eventLog","editor");e=RED.editor.createEditor({id:"event-log-editor",value:t.join("\n"),lineNumbers:!1,readOnly:!0,options:{showPrintMargin:!1}}),setTimeout(function(){e.scrollToLine(e.getSession().getLength())},200),o.i18n()},close:function(){e.destroy(),e=null,n=!1},show:function(){}};RED.tray.show(o)}},log:function(n,o){var i=new Date(o.ts).toISOString()+" ";if(o.type&&(i+="["+o.type+"] "),o.data){var a=o.data;a.endsWith("\n")&&(a=a.substring(0,a.length-1)),a.split(/\n/).forEach(function(n){!function(n){t.push(n),t.length>500&&(t=t.slice(-500)),e&&(e.getSession().insert({row:e.getSession().getLength(),column:0},"\n"+n),e.scrollToLine(e.getSession().getLength()))}(i+n)})}},startEvent:function(e){t.push(""),t.push("-----------------------------------------------------------"),t.push((new Date).toISOString()+" "+e),t.push("")}}}(),RED.tray=function(){var e=[],t=$("#editor-stack"),n=!1;function o(e,t){switch($("#optionSettings").removeClass("node-property-selected"),$("#optionHelp").removeClass("node-property-selected"),$("#optionDocumentation").removeClass("node-property-selected"),$("#properties-tab").hide(),$("#help-tab").hide(),$("#documentation-tab").hide(),e.addClass("node-property-selected"),t){case"settings":$("#properties-tab").show();break;case"help":$("#help-tab").show();break;case"notes":$("#documentation-tab").show()}}function i(i){console.log("[tray] showTray. options=",i),$("#editor-stack").empty();var r=$('<div class="editor-tray"></div>');let l=$('<div class="editor-tray-header">\n </div>').appendTo(r);i.title.startsWith("_")||$('\n <div id="editor-tray-options">\n <div id="optionSettings" class="node-property-option node-property-selected">Settings</div>\n <div id="optionHelp" class="node-property-option">Help</div>\n <div id="optionDocumentation" class="node-property-option">Notes</div>\n </div>\n ').appendTo(r);var d=$('<div class="editor-tray-body-wrapper"></div>').appendTo(r),c=$('<div class="editor-tray-body"></div>').appendTo(d),p=$('<div class="editor-tray-footer"></div>').appendTo(r),u=$('<div class="editor-tray-resize-handle"></div>').appendTo(r);if(i.title){var f=e.map(function(e){return e.options.title});f.push(i.title);var h='<ul class="editor-tray-breadcrumbs"><li>'+f.join("</li><li>")+"</li></ul>";$(`<div class="editor-tray-titlebar">${h} <div class="editor-tray-nodeid"> <span id="nodeId" style="margin-right: 6px">${i.nodeId?i.nodeId:""}</span> </div></div>`).appendTo(l)}$('<div class="editor-tray-wincontrols">\n <button id="winPropsRestore" class="editor-button editor-button-small hidden"><i class="fa fa-compress"></i></button>\n <button id="winPropsMaximize" class="editor-button editor-button-small"><i class="fa fa-expand"></i></button>\n </div>').appendTo(l),i.width===1/0&&(i.maximized=!0,u.addClass("editor-tray-resize-maximised"));var g,v=$('<div class="editor-tray-toolbar"></div>').appendTo(p);if(i.buttons)for(var b=0;b<i.buttons.length;b++){var m=i.buttons[b];if("Delete"!==m.text){var y=$("<button>").button().appendTo(v);m.id&&y.attr("id",m.id),m.text&&y.text(m.text),m.click&&y.click(function(e){return function(t){$(this).hasClass("disabled")||e(t)}}(m.click)),m.class?(y.addClass(m.class),"primary"===m.class&&(g=m)):y.addClass("secondary")}}r.appendTo(t);var w={tray:r,header:l,body:c,footer:p,options:i,primaryButton:g};function x(){w.preferredWidth=Math.max(r.width(),650),i.maximized||c.css({width:"100%"}),w.width="100%",$("#main-container").scrollLeft(0),r.css({right:"0 px"}),a(),n=!0,setTimeout(function(){setTimeout(function(){i.width||r.width(Math.min(w.preferredWidth,$("#editor-stack").position().left-8)),i.resize&&i.resize({width:r.width()}),i.show&&i.show(),setTimeout(function(){n=!1},200),c.find(":focusable:first").focus()},150),r.css({right:0})},0)}e.push(w),i.maximized||r.draggable({handle:u,axis:"x",start:function(e,t){r.width("auto")},drag:function(e,n){var o=t.position().left+n.position.left;o<7?n.position.left+=7-o:n.position.left>-w.preferredWidth-1&&(n.position.left=-Math.min(t.position().left-7,w.preferredWidth-1)),w.options.resize&&setTimeout(function(){w.options.resize({width:-n.position.left})},0),w.width=-n.position.left},stop:function(e,t){r.width(-t.position.left),r.css({left:""}),w.options.resize&&w.options.resize({width:-t.position.left}),w.width=-t.position.left}}),i.open?1===i.open.length?(i.open(r),x()):i.open(r,x):x(),$("#optionSettings").click(e=>{o($(e.currentTarget),"settings")}),$("#optionHelp").click(e=>{o($(e.currentTarget),"help")}),$("#optionDocumentation").click(e=>{o($(e.currentTarget),"notes")}),$("#copyNodeId").click(function(e){RED.clipboard.copyText(i.nodeId,$("#copyNodeId"),"Message copied to clipboard")}),$("#nodeId").click(function(e){RED.clipboard.copyText(i.nodeId,$("#nodeId"),`${i.nodeId} - Copied to clipboard`)}),$("#winPropsRestore").click(function(e){RED.sidebar.restore(),s()}),$("#winPropsMaximize").click(function(e){RED.sidebar.maximize(),s()})}function a(){if(e.length>0){var t=e[e.length-1],n=t.tray.height()-t.header.outerHeight()-t.footer.outerHeight();t.body.height(n),t.options.maximized||t.width>$("#editor-stack").position().left-8?(t.width=$("#editor-stack").position().left-8,t.tray.width(t.width)):t.width<t.preferredWidth&&(t.width=Math.min($("#editor-stack").position().left-8,t.preferredWidth),t.tray.width(t.width)),t.options.resize&&t.options.resize({width:t.width,height:n})}}function s(){$("#winPropsRestore").toggleClass("hidden"),$("#winPropsMaximize").toggleClass("hidden")}return{init:function(){$(window).resize(a),RED.events.on("sidebar:resize",a),$("#editor-shade").click(function(){if(!n){var t=e[e.length-1];t&&t.primaryButton&&t.primaryButton.click()}})},show:function(t){if(t.title.startsWith("_")||(e=[]),0===e.length)console.log("[tray] Emiting event: (editor:open) ..."),RED.events.emit("editor:open"),i(t);else if(e.length>0&&t.title.startsWith("_")){var n=e[e.length-1];"inherit"===t.width&&(t.width=n.tray.width()),n.tray.css({right:-(n.tray.width()+10)+"px"}),setTimeout(function(){n.tray.detach(),i(t)},250)}},resize:a,close:function(t,n){if(e.length>0){var o=e.pop();o.tray.css({right:-(o.tray.width()+10)+"px"}),setTimeout(function(){if(o.options.close&&o.options.close(),o.tray.remove(),e.length>0){var i=e[e.length-1];i.options.overlay?(a(),i.options.show&&i.options.show()):(i.tray.appendTo("#editor-stack"),setTimeout(function(){a(),i.tray.css({right:0}),i.options.show&&(i.options.show(),n&&n())},0))}t&&t(),0===e.length&&($("#header-shade").hide(),$("#editor-shade").hide(),$("#palette-shade").hide(),$(".sidebar-shade").hide(),RED.events.emit("editor:close"),RED.view.focus())},250)}}}}(),RED.clipboard=function(){var e,t,n,o,i,a,s,r=!1;function l(){s&&clearTimeout(s),s=setTimeout(function(){var e=$("#clipboard-import"),t=e.val().trim();if(""===t)return i.close(!0),a=null,e.removeClass("input-error"),void $("#clipboard-dialog-ok").button("disable");try{if(!/^\[[\s\S]*\]$/m.test(t))throw new Error("Input not a JSON Array");for(var n=JSON.parse(t),o=0;o<n.length;o++){if("object"!=typeof n[o])throw new Error("Input not a valid flow");if(!n[o].hasOwnProperty("id"))throw new Error("Input not a valid flow");if(!n[o].hasOwnProperty("type"))throw new Error("Input not a valid flow")}a=null,i.close(!0),e.removeClass("input-error"),e.val(t),$("#clipboard-dialog-ok").button("enable")}catch(n){if(""!==t){e.addClass("input-error");var s=n.toString();if(s!==a){var r,l=$('<div class="clipboard-import-error"></div>').text(s),d=/at position (\d+)/i.exec(s);if(d)r=parseInt(d[1]);else if(d=/at line (\d+) column (\d+)/i.exec(s)){var c=parseInt(d[1])-1,p=parseInt(d[2])-1,u=t.split("\n");r=0;for(o=0;o<c;o++)r+=u[o].length+1;r+=p}if(void 0!==r){t=t.replace(/\n/g,"↵");parseInt(d[1]);var f=$("<div>").appendTo(l),h=$("<pre>").appendTo(f);$("<span>").text(t.substring(r-12,r)).appendTo(h),$('<span class="error">').text(t.charAt(r)).appendTo(h),$("<span>").text(t.substring(r+1,r+12)).appendTo(h)}i.close(!0).setContent(l).open(),a=s}}else a=null;$("#clipboard-dialog-ok").button("disable")}},100)}function d(){r||(t.empty(),t.append($(o)),t.i18n(),$("#clipboard-dialog-ok").show(),$("#clipboard-dialog-cancel").show(),$("#clipboard-dialog-close").hide(),$("#clipboard-dialog-copy").hide(),$("#clipboard-dialog-download").hide(),$("#clipboard-dialog-ok").button("disable"),$("#clipboard-import").keyup(l),$("#clipboard-import").on("paste",function(){setTimeout(l,10)}),$("#import-tab > a").click(function(e){e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected")||($(this).parent().children().removeClass("selected"),$(this).addClass("selected"))}),$("#import-file-upload").change(function(){var e=new FileReader;e.onload=function(){$("#clipboard-import").val(e.result),l()},e.readAsText($(this).prop("files")[0])}),$("#import-file-upload-btn").click(function(e){e.preventDefault(),$("#import-file-upload").click()}),$("#import-from-clipboard").click(function(e){e.preventDefault(),$("#clipboard-import").select(),document.execCommand("paste"),l()}),e.dialog("option","title","Import nodes").dialog("open"),i=RED.popover.create({target:$("#clipboard-import"),trigger:"manual",direction:"bottom",content:""}))}function c(){if(r)console.log("[clipboard] disable dialog");else{t.empty(),t.append($(n)),t.i18n();var o=RED.settings.flowFilePretty?"export-format-full":"export-format-mini";$("#export-format-group > a").click(function(e){if(e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected"))$("#clipboard-export").focus();else{$(this).parent().children().removeClass("selected"),$(this).addClass("selected");var t=$("#clipboard-export").val();if(t.length>0){var n=JSON.parse(t);t="export-format-full"===(o=$(this).attr("id"))?JSON.stringify(n,null,4):JSON.stringify(n),$("#clipboard-export").val(t),$("#clipboard-export").focus()}}}),$("#export-range-group > a").click(function(e){if(e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected"))$("#clipboard-export").focus();else{$(this).parent().children().removeClass("selected"),$(this).addClass("selected");var t=$(this).attr("id"),n="",i=null;if("export-range-selected"===t){var a=RED.workspaces.selection();a.length>0?(i=[],a.forEach(function(e){i.push(e),i=i.concat(RED.nodes.filterNodes({z:e.id}))})):i=RED.view.selection().nodes||[],i=RED.nodes.createExportableNodeSet(i.filter(function(e){return"subflow"!==e.type}))}else if("export-range-flow"===t){var s=RED.workspaces.active();i=RED.nodes.filterNodes({z:s});var r=RED.nodes.workspace(s)||RED.nodes.subflow(s);i.unshift(r),i=RED.nodes.createExportableNodeSet(i)}else"export-range-full"===t&&(i=RED.nodes.createCompleteNodeSet(!1));null!==i&&(n="export-format-full"===o?JSON.stringify(i,null,4):JSON.stringify(i)),n.length>0?$("#export-copy").removeClass("disabled"):$("#export-copy").addClass("disabled"),$("#clipboard-export").val(n),$("#clipboard-export").focus()}}),$("#clipboard-dialog-ok").hide(),$("#clipboard-dialog-cancel").hide(),$("#clipboard-dialog-copy").hide(),$("#clipboard-dialog-close").hide();var i=RED.workspaces.selection();i.length>0?$("#export-range-selected").click():(i=RED.view.selection()).nodes?$("#export-range-selected").click():($("#export-range-selected").addClass("disabled").removeClass("selected"),$("#export-range-flow").click()),"export-format-full"===o?$("#export-format-full").click():$("#export-format-mini").click(),$("#clipboard-export").focus(function(){var e=$(this);e.select(),e.mouseup(function(){return e.unbind("mouseup"),!1})}),e.dialog("option","title","Export nodes").dialog("open"),$("#clipboard-export").focus(),document.queryCommandSupported("copy")?($("#clipboard-dialog-cancel").show(),$("#clipboard-dialog-copy").show()):($("#clipboard-dialog-cancel").hide(),$("#clipboard-dialog-close").show()),$("#clipboard-dialog-download").show()}}function p(){$("#dropTarget").hide(),RED.keyboard.remove("escape")}return{init:function(){e=$('<div id="clipboard-dialog" class="hide kumologica-core-dialog"><form class="dialog-form form-horizontal"></form></div>').appendTo("body").dialog({modal:!0,autoOpen:!1,width:500,resizable:!1,buttons:[{id:"clipboard-dialog-cancel",text:"Cancel",click:function(){$(this).dialog("close")}},{id:"clipboard-dialog-close",class:"primary",text:"Close",click:function(){$(this).dialog("close")}},{id:"clipboard-dialog-download",class:"primary",text:"Download",click:function(){var e=document.createElement("a");e.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent($("#clipboard-export").val())),e.setAttribute("download","flows.json"),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e),$(this).dialog("close")}},{id:"clipboard-dialog-copy",class:"primary",text:"Copy",click:function(){$("#clipboard-export").select(),document.execCommand("copy"),document.getSelection().removeAllRanges(),RED.notify("Nodes exported to clipboard",{id:"clipboard"}),$(this).dialog("close")}},{id:"clipboard-dialog-ok",class:"primary",text:"Import",click:function(){RED.view.importNodes($("#clipboard-import").val(),"import-tab-new"===$("#import-tab > a.selected").attr("id")),$(this).dialog("close")}}],open:function(e){$(this).parent().find(".ui-dialog-titlebar-close").hide()},close:function(e){i&&(i.close(!0),a=null)}}),t=e.children(".dialog-form"),n='<div class="form-row" style="margin-bottom:10px; text-align:center"><label style="width:auto;margin-right: 10px;"></label><span id="export-range-group" class="button-group"><a id="export-range-selected" class="editor-button toggle" href="#">Selected Nodes...</a><a id="export-range-flow" class="editor-button toggle" href="#">Current Workspace</a></span></div><div class="form-row"><textarea readonly style="resize: none; width: 100%; border-radius: 4px;font-family: monospace; font-size: 12px; background:#f3f3f3; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-export" rows="8"></textarea></div><div class="form-row" style="text-align: right;"><span id="export-format-group" class="button-group"><a id="export-format-mini" class="editor-button editor-button-small toggle" href="#">Plain</a><a id="export-format-full" class="editor-button editor-button-small toggle" href="#">Prettify</a></span></div>',o='<div style="margin-bottom: 10px" class="form-row"><span>Load nodes from </span><a class="editor-button" id="import-file-upload-btn"><i class="fa fa-upload"></i> <span>File...</span></a><span> or </span><a class="editor-button" id="import-from-clipboard"><i class="fa fa-clipboard"></i> <span>Clipboard</span></a><input type="file" id="import-file-upload" accept=".json" style="display:none"></div><div class="form-row"><textarea style="resize: none; width: 100%; border-radius: 0px;font-family: monospace; font-size: 12px; background:#eee; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-import" rows="8"></textarea></div><div class="form-row"></div>',$('<input type="text" id="clipboard-hidden">').appendTo("body"),RED.actions.add("core:show-export-dialog",c),RED.actions.add("core:show-import-dialog",d),$("#chart").on("dragenter",function(e){-1==$.inArray("text/plain",e.originalEvent.dataTransfer.types)&&-1==$.inArray("Files",e.originalEvent.dataTransfer.types)||($("#dropTarget").css({display:"table"}),RED.keyboard.add("*","escape",p))}),$("#dropTarget").on("dragover",function(e){-1==$.inArray("text/plain",e.originalEvent.dataTransfer.types)&&-1==$.inArray("Files",e.originalEvent.dataTransfer.types)||e.preventDefault()}).on("dragleave",function(e){p()}).on("drop",function(e){if(-1!=$.inArray("text/plain",e.originalEvent.dataTransfer.types)){var t=e.originalEvent.dataTransfer.getData("text/plain");t=t.substring(t.indexOf("["),t.lastIndexOf("]")+1),RED.view.importNodes(t)}else if(-1!=$.inArray("Files",e.originalEvent.dataTransfer.types)){var n=e.originalEvent.dataTransfer.files;if(1===n.length){var o=n[0],i=new FileReader;i.onload=function(e){RED.view.importNodes(e.target.result)},i.readAsText(o)}}p(),e.preventDefault()})},import:d,export:c,copyText:function(e,t,n){var o=!1;"string"!=typeof e&&(e=JSON.stringify(e,function(e,t){if(null!==t&&"object"==typeof t&&t.__enc__){if(t.hasOwnProperty("data")&&t.hasOwnProperty("length"))return o=t.data.length!==t.length,t.data;if("function"===t.type||"internal"===t.type)return;if("number"===t.type)return null}return t})),o&&(n+="_truncated"),$("#clipboard-hidden").val(e).select();var i=document.execCommand("copy");if(i&&t){var a=RED.popover.create({target:t,direction:"left",size:"small",content:n});setTimeout(function(){a.close()},1e3),a.open()}return i}}}(),RED.library=function(){var e,t="node-input-";function n(){}function o(){var t=RED.nodes.createExportableNodeSet(RED.view.selection().nodes);$("#node-input-library-filename").attr("nodes",JSON.stringify(t)),e.dialog("open")}return{init:function(){$('<div id="node-dialog-library-save" class="hide"><form class="form-horizontal"><div class="form-row"><label for="node-dialog-library-save-folder" data-i18n="[append]library.folder"><i class="fa fa-folder-open"></i> </label><input type="text" id="node-dialog-library-save-folder" data-i18n="[placeholder]library.folderPlaceholder"></div><div class="form-row"><label for="node-dialog-library-save-filename" data-i18n="[append]library.filename"><i class="fa fa-file"></i> </label><input type="text" id="node-dialog-library-save-filename" data-i18n="[placeholder]library.filenamePlaceholder"></div></form></div>').appendTo(document.body),$('<div id="node-dialog-library-save-confirm" class="hide"><form class="form-horizontal"><div style="text-align: center; padding-top: 30px;" id="node-dialog-library-save-content"></div></form></div>').appendTo(document.body),$('<div id="node-dialog-library-lookup" class="hide"><form class="form-horizontal"><div class="form-row"><ul id="node-dialog-library-breadcrumbs" class="breadcrumb"><li class="active"><a href="#" data-i18n="[append]library.breadcrumb"></a></li></ul></div><div class="form-row"><div style="vertical-align: top; display: inline-block; height: 100%; width: 30%; padding-right: 20px;"><div id="node-select-library" style="border: 1px solid #999; width: 100%; height: 100%; overflow:scroll;"><ul></ul></div></div><div style="vertical-align: top; display: inline-block;width: 65%; height: 100%;"><div style="height: 100%; width: 95%;" class="node-text-editor" id="node-select-library-text" ></div></div></div></form></div>').appendTo(document.body),RED.actions.add("core:library-export",o),RED.events.on("view:selection-changed",function(e){e.nodes?RED.menu.setDisabled("menu-item-export-library",!1):RED.menu.setDisabled("menu-item-export-library",!0)}),RED.settings.theme("menu.menu-item-import-library"),(e=$('<div id="library-dialog" class="hide"><form class="dialog-form form-horizontal"></form></div>').appendTo("body").dialog({modal:!0,autoOpen:!1,width:500,resizable:!1,title:"Export nodes to library",buttons:[{id:"library-dialog-cancel",text:"Cancel",click:function(){$(this).dialog("close")}},{id:"library-dialog-ok",class:"primary",text:"Export",click:function(){var e=$("#node-input-library-filename").val();""===(e=e.trim())||e.endsWith("/")?RED.notify("Invalid file name","warning"):$.ajax({url:"library/flows/"+e,type:"POST",data:$("#node-input-library-filename").attr("nodes"),contentType:"application/json; charset=utf-8"}).done(function(){}).fail(function(e,t,n){401===e.status?RED.notify("Save failed: user not authorized","error"):RED.notify(`Save failed ${e.responseText}`,"error")}),$(this).dialog("close")}}],open:function(e){$(this).parent().find(".ui-dialog-titlebar-close").hide()},close:function(e){}})).children(".dialog-form").append($('<div class="form-row"><label for="node-input-library-filename" data-i18n="[append]editor:library.filename"><i class="fa fa-file"></i> </label><input type="text" id="node-input-library-filename" data-i18n="[placeholder]editor:library.fullFilenamePlaceholder"><input type="text" style="display: none;" /></div>'))},create:function(e){var n=null,o=null;function i(e){var t=document.createElement("li");return t.onmouseover=function(e){$(this).addClass("list-hover")},t.onmouseout=function(e){$(this).removeClass("list-hover")},t}function a(t,s){for(var r,l=document.createElement("ul"),d=0;d<s.length;d++){var c=s[d];"string"==typeof c?((r=i()).onclick=function(){var n=c;return function(o){var i=$('<li class="active"><span class="divider">/</span> </li>');$('<a href="#"></a>').text(n).appendTo(i).click(function(o){$(this).parent().nextAll().remove(),$.getJSON("library/"+e.url+t+n,function(e){$("#node-select-library").children().first().replaceWith(a(t+n+"/",e))}),o.stopPropagation()});var s=$("#node-dialog-library-breadcrumbs");$(".active",s).removeClass("active"),s.append(i),$.getJSON("library/"+e.url+t+n,function(e){$("#node-select-library").children().first().replaceWith(a(t+n+"/",e))})}}(),$('<i class="fa fa-folder"></i>').appendTo(r),$("<span>").text(" "+c).appendTo(r),l.appendChild(r)):((r=i()).innerText=c.name,r.onclick=function(){var i=c;return function(a){$(".list-selected",l).removeClass("list-selected"),$(this).addClass("list-selected"),$.get("library/"+e.url+t+i.fn,function(e){n=i,o.setValue(e,-1)})}}(),l.appendChild(r))}return l}function s(n){var o=$("#"+t+"name").val().replace(/(^\s*)|(\s*$)/g,"");""===o&&(o=`Unnamed ${e.type}`);var i=$("#node-dialog-library-save-filename").val().replace(/(^\s*)|(\s*$)/g,""),a=$("#node-dialog-library-save-folder").val().replace(/(^\s*)|(\s*$)/g,"");if(""!==i&&/.+\.js$/.test(i)){for(var s=a+(""===a?"":"/")+i,r={},l=0;l<e.fields.length;l++){var d=e.fields[l];"name"==d?r.name=o:r[d]=$("#"+t+d).val()}r.text=e.editor.getValue(),$.ajax({url:"library/"+e.url+"/"+s,type:"POST",data:JSON.stringify(r),contentType:"application/json; charset=utf-8"}).done(function(t,n,o){RED.notify(`Saved ${e.type}`,"success")}).fail(function(e,t,n){401===e.status?RED.notify("Save failed: user not authorized","error"):RED.notify(`Save failed: ${xht.responseText}`,"error")})}else RED.notify("Invalid filename","warning")}t=e.elementPrefix||"node-input-",e.editor.setText&&(e.editor.setValue=function(t,n){e.editor.setText.call(e.editor,t)}),e.editor.getText&&(e.editor.getValue=e.editor.getText),$("#"+t+"name").css("width","calc(100% - 52px)").after('<div class="btn-group" style="margin-left:5px;"><a id="node-input-'+e.type+'-lookup" class="editor-button" data-toggle="dropdown"><i class="fa fa-book"></i> <i class="fa fa-caret-down"></i></a><ul class="dropdown-menu pull-right" role="menu"><li><a id="node-input-'+e.type+'-menu-open-library" tabindex="-1" href="#">Open Library</a></li><li><a id="node-input-'+e.type+'-menu-save-library" tabindex="-1" href="#">Save to Library...</a></li></ul></div>'),$("#node-input-"+e.type+"-menu-open-library").click(function(t){$("#node-select-library").children().remove(),$("#node-dialog-library-breadcrumbs").children().first().nextAll().remove(),o.setValue("",-1),$.getJSON("library/"+e.url,function(e){$("#node-select-library").append(a("/",e)),$("#node-dialog-library-breadcrumbs a").click(function(t){$(this).parent().nextAll().remove(),$("#node-select-library").children().first().replaceWith(a("/",e)),t.stopPropagation()}),$("#node-dialog-library-lookup").dialog("open")}),t.preventDefault()}),$("#node-input-"+e.type+"-menu-save-library").click(function(n){var o=$("#"+t+"name").val().replace(/(^\s*)|(\s*$)/g,"");$("#node-dialog-library-save-folder").attr("value","");var i=o.replace(/[^\w-]/g,"-");""===i&&(i="unnamed-"+e.type),$("#node-dialog-library-save-filename").attr("value",i+".js"),$("#node-dialog-library-save").dialog("open"),n.preventDefault()}),(o=ace.edit("node-select-library-text")).setTheme("ace/theme/tomorrow"),e.mode&&o.getSession().setMode(e.mode),o.setOptions({readOnly:!0,highlightActiveLine:!1,highlightGutterLine:!1}),o.renderer.$cursorLayer.element.style.opacity=0,o.$blockScrolling=1/0,$("#node-dialog-library-lookup").dialog({title:`${e.type} library`,modal:!0,autoOpen:!1,width:800,height:450,buttons:[{text:"Cancel",click:function(){$(this).dialog("close")}},{text:"Load",class:"primary",click:function(){if(n){for(var i=0;i<e.fields.length;i++){var a=e.fields[i];$("#"+t+a).val(n[a])}e.editor.setValue(o.getValue(),-1)}$(this).dialog("close")}}],open:function(e){var t=$("form",this);t.height(t.parent().height()-30),$("#node-select-library-text").height("100%"),$(".form-row:last-child",t).children().height(t.height()-60)},resize:function(e){var t=$("form",this);t.height(t.parent().height()-30),$(".form-row:last-child",t).children().height(t.height()-60)}}),$("#node-dialog-library-save-confirm").dialog({title:"Save to Library...",modal:!0,autoOpen:!1,width:530,height:230,buttons:[{text:"Cancel",click:function(){$(this).dialog("close")}},{text:"Save",class:"primary",click:function(){s(),$(this).dialog("close")}}]}),$("#node-dialog-library-save").dialog({title:"Save to Library...",modal:!0,autoOpen:!1,width:530,height:230,buttons:[{text:"Cancel",click:function(){$(this).dialog("close")}},{text:"Save",class:"primary",click:function(){s(),$(this).dialog("close")}}]})},loadFlowLibrary:n,export:o}}(),RED.notifications=function(){var e,t={},n=[],o=0;function i(i,a,s,r){var l={};if(null!==a&&"object"==typeof a&&(s=(l=a).fixed,r=l.timeout,a=l.type),l.id&&t.hasOwnProperty(l.id))return t[l.id].update(i,l),t[l.id];if(l.modal&&$("#full-shade").show(),n.length>4)for(var d=n.length,c=0;d>4&&c<n.length;c+=1){var p=n[c];p.fixed||(window.clearTimeout(p.timeoutid),p.close(),d-=1)}var u,f=document.createElement("div");if(f.id="red-notification-"+o,f.className="notification",f.fixed=s,a&&(f.className="notification notification-"+a),l.width){var h=$("#notifications").width();if(l.width>h){var g=-(l.width-h)/2;$(f).css({width:l.width+"px",marginLeft:g+"px"})}}if(f.style.display="none","string"==typeof i?(/<p>/i.test(i)||(i="<p>"+i+"</p>"),f.innerHTML=i):$(f).append(i),l.buttons){var v=$('<div style="margin-top: 20px;" class="ui-dialog-buttonset"></div>').appendTo(f);l.buttons.forEach(function(e){var t=$("<button>").html(e.text).click(e.click).appendTo(v);e.id&&t.attr("id",e.id),e.class&&t.addClass(e.class)})}return $("#notifications").append(f),RED.notifications.hide||$(f).slideDown(300),f.close=(u=f,function(){u.closed||(u.closed=!0,n.splice(n.indexOf(u),1),l.id&&(delete t[l.id],0===Object.keys(t).length&&e.hide()),RED.notifications.hide?u.parentNode.removeChild(u):$(u).slideUp(300,function(){u.parentNode.removeChild(u)}),l.modal&&$("#full-shade").hide())}),f.hideNotification=function(){var e=f;return function(){e.closed||(e.hidden=!0,RED.notifications.hide||$(e).slideUp(300))}}(),f.showNotification=function(){var e=f;return function(){!e.closed&&e.hidden&&(e.hidden=!1,RED.notifications.hide||$(e).slideDown(300))}}(),f.update=function(){var e=f;return function(t,n){var o;if("string"==typeof t?(/<p>/i.test(t)||(t="<p>"+t+"</p>"),e.innerHTML=t):$(e).empty().append(t),"number"==typeof n)o=n;else if(void 0!==n&&(n.fixed||(o=n.timeout||5e3),n.buttons)){var i=$('<div style="margin-top: 20px;" class="ui-dialog-buttonset"></div>').appendTo(e);n.buttons.forEach(function(e){var t=$("<button>").text(e.text).click(e.click).appendTo(i);e.id&&t.attr("id",e.id),e.class&&t.addClass(e.class)})}void 0!==o&&o>0?(window.clearTimeout(e.timeoutid),e.timeoutid=window.setTimeout(e.close,o)):window.clearTimeout(e.timeoutid),e.hidden?e.showNotification():n&&n.silent||($(e).addClass("notification-shake-horizontal"),setTimeout(function(){$(e).removeClass("notification-shake-horizontal")},300))}}(),s||($(f).click(function(){var e=f;return function(){e.close(),window.clearTimeout(e.timeoutid)}}()),f.timeoutid=window.setTimeout(f.close,r||5e3)),n.push(f),l.id&&(t[l.id]=f,l.fixed&&e.show()),o+=1,f}return RED.notify=i,{init:function(){e=$('<li><a id="btn-notifications" class="button" href="#"><i class="fa fa-warning"></i></a></li>').prependTo(".header-toolbar").hide(),$("#btn-notifications").click(function(){!function(){for(var e in t)t.hasOwnProperty(e)&&t[e].showNotification()}()})},notify:i}}(),RED.search=function(){var e,t,n=!1,o=null,i=-1,a=!1,s={},r=[],l=[];function d(e,t,n){if("string"==typeof n||"number"==typeof n)n=(""+n).toLowerCase(),s[n]=s[n]||{},s[n][e.id]={node:e,label:t};else if(Array.isArray(n))n.forEach(function(n){d(e,t,n)});else if("object"==typeof n)for(var o in n)n.hasOwnProperty(o)&&d(e,t,n[o])}function c(e){var t=RED.utils.getNodeLabel(e);t&&(t=(""+t).toLowerCase(),s[t]=s[t]||{},s[t][e.id]={node:e,label:t}),t=t||e.label||e.name||e.id||"";var n=["id","type","name","label","info"];e._def&&e._def.defaults&&(n=n.concat(Object.keys(e._def.defaults)));for(var o=0;o<n.length;o++)e.hasOwnProperty(n[o])&&d(e,t,e[n[o]])}function p(){var e=t.find("li.selected");if(1===e.length){var n=t.parent(),o=n.height(),i=(n.scrollTop(),e.position().top),a=e.height();i+a>o?n.animate({scrollTop:"-="+(o-(i+a)-10)},50):i<0&&n.animate({scrollTop:"+="+(i-10)},50)}}function u(){o=$("<div>",{id:"red-ui-search",class:"red-ui-search"}).appendTo("#main-container");var n=$("<div>",{class:"red-ui-search-container"}).appendTo(o);(e=$('<input type="text" placeholder="Search nodes">').appendTo(n).searchBox({delay:200,change:function(){!function(e){var n;t.editableList("empty");var o=/(?:^| )type:([^ ]+)/.exec(e);if(o&&(e=e.replace(/(?:^| )type:[^ ]+/,""),n=o[1]),e=e.trim(),i=-1,l=[],e.length>0||n){var a,d;e=e.toLowerCase();var c=[],p={};for(a=0;a<r.length;a++){var u=r[a],f=r[a].indexOf(e);if(f>-1)for(d=0;d<s[u].length;d++){var h=s[u][d];n&&h.node.type!==n||(p[h.node.id]=p[h.node.id]=h,p[h.node.id].index=Math.min(p[h.node.id].index||1/0,f))}}for((c=Object.keys(p)).sort(function(e,t){return p[e].index-p[t].index}),a=0;a<c.length;a++)l.push(p[c[a]]);if(l.length>0)for(l=l.filter(e=>"tab"!==e.node.type),a=0;a<Math.min(l.length,25);a++)t.editableList("addItem",l[a]);else t.editableList("addItem",{})}}($(this).val())}})).on("keydown",function(e){var n;l.length>0&&(40===e.keyCode?(n=t.children(),i<n.length-1&&(i>-1&&$(n[i]).removeClass("selected"),i++),$(n[i]).addClass("selected"),p(),e.preventDefault()):38===e.keyCode?(n=t.children(),i>0&&(i<n.length&&$(n[i]).removeClass("selected"),i--),$(n[i]).addClass("selected"),p(),e.preventDefault()):13===e.keyCode&&l.length>0&&f(l[Math.max(0,i)].node))}),e.i18n();var a=$("<div>",{class:"red-ui-search-results-container"}).appendTo(o);t=$("<ol>",{id:"search-result-list",style:"position: absolute;top: 5px;bottom: 5px;left: 5px;right: 5px;"}).appendTo(a).editableList({addButton:!1,addItem:function(e,t,n){var o=n.node;if(void 0===o)$("<div>",{class:"red-ui-search-empty"}).text("No matches found").appendTo(e);else{if("tab"===o.type)return;var i=o._def,a=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),s=$("<div>",{class:"red-ui-search-result-node"}).appendTo(a),r=(RED.utils.getNodeColor(o.type,i),RED.utils.getNodeIcon(i,o));"tab"===o.type&&"#C0DEED";var l=$("<div/>",{class:"palette_icon_container"}).appendTo(s);RED.utils.createIconElement(r,l,!0);var d=$("<div>",{class:"red-ui-search-result-description"}).appendTo(a);if(o.z){var c=RED.nodes.workspace(o.z);c=c?"flow:"+c.label:"subflow:"+(c=RED.nodes.subflow(o.z)).name,$("<div>",{class:"red-ui-search-result-node-flow"}).text(c).appendTo(d)}$("<div>",{class:"red-ui-search-result-node-label"}).text(n.label||o.id).appendTo(d),$("<div>",{class:"red-ui-search-result-node-type"}).text(o.type).appendTo(d),$("<div>",{class:"red-ui-search-result-node-id"}).text(o.id).appendTo(d),a.click(function(e){e.preventDefault(),f(o)})}},scrollOnAdd:!1}),$('\n <div style="text-align:center; padding: 3px 0 5px 0">Press <span class="escape-key">Esc</span> to close</div>\n ').appendTo(o)}function f(e){g(),RED.header.changeSelectedFlow(e.z),RED.view.reveal(e.id)}function h(t){RED.actions.invoke("core:project-info:close"),RED.actions.invoke("core:settings:close"),console.log("[search] disabled=",n),n||(console.log("[search] visible=",a),a||(RED.keyboard.add("*","escape",function(){g()}),$("#main-container").click(()=>{g()}),$("#sidebar-separator").hide(),s={},RED.nodes.eachWorkspace(c),RED.nodes.eachSubflow(c),RED.nodes.eachConfig(c),RED.nodes.eachNode(c),(r=Object.keys(s)).sort(),r.forEach(function(e){s[e]=Object.keys(s[e]).map(function(t){return s[e][t]})}),null===o&&u(),o.slideDown(300),e.searchBox("value",t),RED.events.emit("search:open"),a=!0),e.focus())}function g(){a&&($("#main-container").off("click"),RED.keyboard.remove("escape"),a=!1,null!==o&&o.slideUp(200,function(){e.searchBox("value","")}),RED.events.emit("search:close"))}return{init:function(){RED.actions.add("core:search",h),RED.actions.add("core:search:close",g),RED.events.on("type-search:open",function(){n=!0}),RED.events.on("type-search:close",function(){n=!1}),$("#header-shade").on("mousedown",g),$("#editor-shade").on("mousedown",g),$("#palette-shade").on("mousedown",g),$("#sidebar-shade").on("mousedown",g)},show:h,hide:g,reveal:f,revealByNodeId:function(e){f(RED.nodes.node(e))}}}(),RED.projectInfo=function(){let e="",t="",n="";var o=!1,i=null,a=!1;let s=null;function r(){i=$("<div>",{id:"red-ui-project-info",class:"red-ui-project-info"}).appendTo("#main-container");let o=$("<div>",{class:"red-ui-project-body"}).appendTo(i),a=$("<div>",{class:"project-info-section"}).appendTo(o);$(`\n <div>\n <label class="projectInfoSectionLabel">Project</label>\n <div class="projectInfoSectionBody">\n <div class="projectInfoSectionRow">\n <label class="projectInfoLabel">Name:</label>\n <label class="projectInfoValue">${t}</label>\n </div>\n <div class="projectInfoSectionRow">\n <label class="projectInfoLabel">Location:</label>\n <label class="projectInfoValue">${e}</label>\n </div>\n <div class="projectInfoSectionRow jcfe pt-10">\n <a id="project-info-open-project" class="sidebar-header-button" href="#">\n <i class="icofont-search-folder" style="font-weight: bold"></i> \n Open Location...\n </a>\n <a id="project-info-export-flow" class="sidebar-header-button" href="#">\n <i class="icofont-search-document" style="font-weight: bold"></i> \n View Flow\n </a>\n </div>\n </div>\n </div>\n `).appendTo(a);let r=$("<div>",{class:"project-info-section"}).appendTo(o);$(`\n <div>\n <label class="projectInfoSectionLabel">Server</label>\n <div class="projectInfoSectionBody">\n <div class="projectInfoSectionRow">\n <label class="projectInfoLabel">Address:</label>\n <label class="projectInfoValue">localhost:1880</label>\n </div>\n <div class="projectInfoSectionRow">\n <label class="projectInfoLabel">Status:</label>\n <label class="projectInfoValue">Running</label>\n </div>\n <div class="projectInfoSectionRow">\n <label class="projectInfoLabel">Version:</label>\n <label class="projectInfoValue">${window.__kumologica.runtime.version}</label>\n </div>\n <div class="projectInfoSectionRow" style="justify-content: space-between;">\n <div style="display: flex; padding-top: 3px">\n \x3c!-- <input id="auto-deployment-cb" type="checkbox" style="margin-right: 5px">Auto Deployment --\x3e\n </div>\n <div>\n <a id="project-info-restart" class="sidebar-header-button" href="#">\n <i class="fa fa-refresh"></i> \n Reload\n </a>\n </div>\n </div>\n </div>\n </div>\n `).appendTo(r),$("#auto-deployment-cb").change(function(){this.checked?RED.events.emit("editor:autosave:on"):RED.events.emit("editor:autosave:off"),window.__kumologica.settings.projectInfoConfig.setProjectInfoConfig({autoDeploy:$("#auto-deployment-cb").prop("checked")})}),$("#project-info-restart").click(e=>{e.preventDefault(),window.__kumologica.main.dispatch("restart-requested"),c()}),RED.popover.tooltip($("#project-info-export-flow"),n),$("#project-info-export-flow").click(e=>{e.preventDefault(),console.log(`Opening file: ${n} ...`),window.__kumologica.libs.openFileOnEditor(n),c()}),$("#project-info-open-project").click(t=>{t.preventDefault(),console.log(`Opening folder: ${e} ...`),window.__kumologica.libs.openFolder(e),c()}),$('\n <div style="text-align:center; padding: 11px 0 11px 0">Press <span class="escape-key">Esc</span> to close</div>\n ').appendTo(i),s&&l(s)}function l(e){$("#auto-deployment-cb").prop("checked",e.autoDeploy)}function d(e){RED.actions.invoke("core:search:close"),RED.actions.invoke("core:settings:close"),o||a||(RED.keyboard.add("*","escape",function(){c()}),$("#main-container").click(()=>{c()}),$("#sidebar-separator").hide(),null===i&&r(),i.slideDown(300),a=!0)}function c(){a&&($("#main-container").off("click"),RED.keyboard.remove("escape"),a=!1,$("#sidebar-separator").hide(),null!==i&&i.slideUp(200,function(){}))}return window.__kumologica.electron.ipcRenderer.on("setProjectInfo",(o,i)=>{e=i.payload.projectDir,t=i.payload.projectName,n=i.payload.fullPathFlowFile}),RED.events.on("project-info-config",function(){(s=window.__kumologica.settings.projectInfoConfig.getProjectInfoConfig())&&(l(s),RED.events.emit(s.autoDeploy?"editor:autosave:on":"editor:autosave:off"))}),{init:function(){RED.actions.add("core:project-info",d),RED.actions.add("core:project-info:close",c)},show:d,hide:c}}(),RED.uiSettings=function(){window.__kumologica.electron.ipcRenderer;let e,t=window.__kumologica.settings.cloudConfigStore,n=window.__kumologica.settings.networkConfigStore,o=window.__kumologica.electron.shell,i=null,a=!1,s=null;function r(){$("#ui-settings").remove();let o=t.readCloudConfigFile(),a=n.getProxyDetails();i=$("<div>",{id:"ui-settings",class:"ui-settings"}).appendTo("#main-container"),e=$("#main-container").height();$("#ui-settings").height(e-74);let r=$("<div>",{class:"ui-settings-body"}).appendTo(i),f=($('\n <div id="ui-settings-options">\n <div id="ui-settings-creds" class="ui-settings-option ui-settings-option-selected">\n <span class="settingsOptionLabel">\n <i class="icofont-key" style="position:relative;top: -1px;margin-right: 6px"></i>\n Cloud Profiles\n </span>\n </div>\n <div id="ui-settings-network" class="ui-settings-option">\n <span class="settingsOptionLabel">\n <i class="icofont-web" style="position:relative;top: -1px;margin-right: 6px"></i>\n Network\n </span>\n </div>\n </div>\n ').appendTo(r),$('\n <div id="ui-settings-optionsbody">\n </div>\n ').appendTo(r));$(`\n <div id="settings-creds-body">\n <div>\n <div class="settingsTitle">Cloud Profiles</div>\n <div class="settingsSubtitle">\n Configure all of your cloud profile settings that can be used by this designer to support testing or deploying.\n\n <a href="http://as.com" target="_blank">Learn more</a>\n </div>\n <div id="fileLocationPath">\n <span id="settingFilePath">${t.getCloudConfigFileFullPath()}</span>\n </div>\n <textarea id="settings-editor" rows="20">\n </textarea>\n </div>\n <div class="editor-tray-toolbar" style="top: 16px !important">\n <button class="ui-button ui-widget ui-state-default ui-corner-all ui-buton-text-only secondary" role="button" aria-disabled="false" id="save-creds-cancel">Cancel</button>\n <button class="ui-button ui-widget ui-state-default ui-corner-all ui-buton-text-only primary" role="button" aria-disabled="false" id="save-creds-ok">Save</button>\n </div>\n </div>\n `).appendTo(f),$('\n <div id="settings-network-body" style="display:none">\n <div>\n <div class="settingsTitle">Proxy Server Settings</div>\n <div class="settingsSubtitle">\n Configure the proxy settings used by the designer. Flows will use the proxy specified on the nodes instead.\n </div>\n <form id="proxy-options-div">\n <input type="radio" id="proxy-option-default" name="proxy-option" style="margin:0"> Use default operating system settings<br>\n <input type="radio" id="proxy-option-custom" name="proxy-option" style="margin:0"> Use custom proxy settings<br>\n </form>\n <div id="proxy-custom-details">\n <div class="option"><label>Server</label><input type="text" id="proxy-server" style="width:93%" /></div>\n <div class="option"><label>Port</label><input type="text" id="proxy-port" /></div>\n </div>\n <div id="proxy-auth">\n <div id="proxyCredsRequiredBox" style="display: flex">\n <input type="checkbox" id="proxyAuthRequired" style="margin-right: 3px">\n <label>Proxy server requires username and password</label>\n </div>\n <div id="proxyCredsBox" style="padding-left: 40px">\n <div class="option"><label>Username</label><input type="text" id="proxy-auth-username" style="width:50%" /></div>\n <div class="option"><label>Password</label><input type="password" id="proxy-auth-password" style="width:50%"/></div>\n </div>\n </div>\n </div>\n <div class="editor-tray-toolbar" style="top: 4px !important">\n <button class="ui-button ui-widget ui-state-default ui-corner-all ui-buton-text-only secondary" role="button" aria-disabled="false" id="save-network-cancel">Cancel</button>\n <button class="ui-button ui-widget ui-state-default ui-corner-all ui-buton-text-only primary" role="button" aria-disabled="false" id="save-network-ok">Save</button>\n </div>\n </div>\n ').appendTo(f);!function(t){CodeMirror.defineMode("properties",function(){return{token:function(e,t){var n=e.sol()||t.afterSection,o=e.eol();if(t.afterSection=!1,n&&(t.nextMultiline?(t.inMultiline=!0,t.nextMultiline=!1):t.position="def"),o&&!t.nextMultiline&&(t.inMultiline=!1,t.position="def"),n)for(;e.eatSpace(););var i=e.next();return!n||"#"!==i&&"!"!==i&&";"!==i?n&&"["===i?(t.afterSection=!0,e.skipTo("]"),e.eat("]"),"header"):"="===i?(t.position="quote",null):("\\"===i&&"quote"===t.position&&e.eol()&&(t.nextMultiline=!0),t.position):(t.position="comment",e.skipToEnd(),"comment")},startState:function(){return{position:"def",nextMultiline:!1,inMultiline:!1,afterSection:!1}}}}),(s=CodeMirror.fromTextArea(document.getElementById("settings-editor"),{theme:"monokai",lineWrapping:!0,mode:"properties"})).off("change"),s.getDoc().setValue(t),s.focus(),s.setCursor(s.lineCount(),0);let n=e-300;s.setSize(null,n),setTimeout(function(){s.refresh()},100),s.on("change",function(e,t){$("#save-creds-ok").removeClass("disabled")})}(o),$("#settings-editor").click(),function(e){e.custom?($("#proxy-option-custom").prop("checked",!0),$("#proxy-option-default").prop("checked",!1),$("#proxy-server").val(e.host),$("#proxy-port").val(e.port||"8080")):($("#proxy-option-default").prop("checked",!0),$("#proxy-option-custom").prop("checked",!1),$("#proxy-server").prop("readonly",!0),$("#proxy-port").prop("readonly",!0));e.authentication?($("#proxyAuthRequired").prop("checked",!0),$("#proxy-auth-username").val(e.username),$("#proxy-auth-password").val(e.password)):($("#proxyAuthRequired").prop("checked",!1),$("#proxy-auth-username").prop("readonly",!0),$("#proxy-auth-password").prop("readonly",!0));RED.events.on("settings:select-proxy-custom",c),RED.events.on("settings:select-proxy-default",p),RED.events.on("settings:select-proxy-auth",u)}(a),$("#proxy-option-default").click(()=>(RED.events.emit("settings:select-proxy-default"),!1)),$("#proxy-option-custom").click(()=>(RED.events.emit("settings:select-proxy-custom"),!1)),$("#proxyAuthRequired").click(function(e){return RED.events.emit("settings:select-proxy-auth"),!1}),$("#save-creds-ok").click(e=>{l()}),$("#save-creds-cancel").click(e=>{d()}),$("#save-network-ok").click(e=>{l()}),$("#save-network-cancel").click(e=>{d()})}function l(){t.writeCloudConfigFile(s.getValue()),RED.events.emit("settings:cloud-config-changed"),n.saveProxyDetails($("#proxy-option-custom").is(":checked"),$("#proxy-server").val(),$("#proxy-port").val(),$("#proxyAuthRequired").is(":checked"),$("#proxy-auth-username").val(),$("#proxy-auth-password").val()),h()}function d(){h()}function c(){setTimeout(()=>{$("#proxy-option-custom").prop("checked",!0),$("#proxy-option-default").prop("checked",!1)},50),$("#proxy-server").prop("readonly",!1),$("#proxy-port").prop("readonly",!1)}function p(){setTimeout(()=>{$("#proxy-option-custom").prop("checked",!1),$("#proxy-option-default").prop("checked",!0)},50),$("#proxy-server").prop("readonly",!0),$("#proxy-port").prop("readonly",!0)}function u(){setTimeout(()=>{$("#proxyAuthRequired").is(":checked")?($("#proxyAuthRequired").prop("checked",!1),$("#proxy-auth-username").prop("readonly",!0),$("#proxy-auth-password").prop("readonly",!0)):($("#proxyAuthRequired").prop("checked",!0),$("#proxy-auth-username").prop("readonly",!1),$("#proxy-auth-password").prop("readonly",!1))},50)}function f(){RED.actions.invoke("core:search:close"),RED.actions.invoke("core:project-info:close"),a||(RED.keyboard.add("*","escape",()=>h()),r(),i.slideDown(300),a=!0,$("#ui-settings").click(e=>{e.preventDefault(),$(e.target).is("a")&&o.openExternal(e.target.href),e.stopImmediatePropagation()}),$("#main-container").click(e=>{h()}),$("#ui-settings-creds").click(e=>{g(),$("#ui-settings-creds").addClass("ui-settings-option-selected"),$("#settings-creds-body").show()}),$("#ui-settings-network").click(e=>{g(),$("#ui-settings-network").addClass("ui-settings-option-selected"),$("#settings-network-body").show()}))}function h(){a&&($("#main-container").off("click"),RED.keyboard.remove("escape"),a=!1,null!==i&&i.slideUp(200,function(){}))}function g(){$("#settings-creds-body").hide(),$("#settings-network-body").hide(),$("#ui-settings-creds").removeClass("ui-settings-option-selected"),$("#ui-settings-network").removeClass("ui-settings-option-selected")}return{init:function(){RED.actions.add("core:settings:open",f),RED.actions.add("core:settings:close",h)},show:f,hide:h,getProxyHeader:function(){let e=void 0,t=n.getProxyDetails(),{custom:o,host:i,port:a,authentication:s,username:r,password:l}=t;return o&&(e=`${i}:${a}`,t.authentication&&(e=`${r}:${l}@${e}`),e=`http://${e}`),e}}}(),RED.typeSearch=function(){var e,t,n,o,i,a=null,s=-1,r=!1,l="",d={};function c(){var e=t.find("li.selected");if(1===e.length){var n=t.parent(),o=n.height(),i=(n.scrollTop(),e.position().top),a=e.height();i+a>o?n.animate({scrollTop:"-="+(o-(i+a)-10)},50):i<0&&n.animate({scrollTop:"+="+(i-10)},50)}}function p(){a=$("<div>",{id:"red-ui-type-search",class:"red-ui-search red-ui-type-search"}).appendTo("#main-container");var i=$("<div>",{class:"red-ui-search-container"}).appendTo(a);(e=$('<input type="text" id="red-ui-type-search-input">').attr("placeholder","NodeSearch").appendTo(i).searchBox({delay:50,change:function(){var e;e=$(this).val(),l=e.toLowerCase(),t.editableList("filter"),t.editableList("sort"),setTimeout(function(){s=0,t.children().removeClass("selected"),t.children(":visible:first").addClass("selected")},100)}})).on("keydown",function(e){var n=t.children(":visible");if(n.length>0)if(40===e.keyCode)s<n.length-1&&(s>-1&&$(n[s]).removeClass("selected"),s++),$(n[s]).addClass("selected"),c(),e.preventDefault();else if(38===e.keyCode)s>0&&(s<n.length&&$(n[s]).removeClass("selected"),s--),$(n[s]).addClass("selected"),c(),e.preventDefault();else if((e.metaKey||e.ctrlKey)&&13===e.keyCode){if((a=Math.max(0,s))<n.length){var i=$(n[a]).find(".red-ui-editableList-item-content").data("data");d[i.type]=Date.now(),0===i.def.outputs?u(i):o(i.type,!0),$("#red-ui-type-search-input").val("").keyup()}}else if(13===e.keyCode){var a;(a=Math.max(0,s))<n.length&&u($(n[a]).find(".red-ui-editableList-item-content").data("data"))}}),n=$("<div>",{class:"red-ui-search-results-container"}).appendTo(a),t=$("<ol>",{id:"search-result-list",style:"position: absolute;top: 0;bottom: 0;left: 0;right: 0;"}).appendTo(n).editableList({addButton:!1,filter:function(e){return""===l||!e.recent&&!e.common&&(""===l||e.index.indexOf(l)>-1)},sort:function(e,t){if(""===l)return e.i-t.i;var n=e.index.indexOf(l),o=t.index.indexOf(l);return-1===n?1:-1===o?-1:n===o?v(e,t):n-o},addItem:function(e,t,n){var o=n.def;n.index=n.type.toLowerCase(),n.separator&&e.addClass("red-ui-search-result-separator");var i=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),a=$("<div>",{class:"red-ui-search-result-node"}).appendTo(i),s=(RED.utils.getNodeColor(n.type,o),RED.utils.getNodeIcon(o)),r=$("<div/>",{class:"palette_icon_container"}).appendTo(a);RED.utils.createIconElement(s,r,!1),o.inputs>0&&$("<div/>",{class:"red-ui-search-result-node-port"}).appendTo(a),o.outputs>0&&$("<div/>",{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(a);var l=$("<div>",{class:"red-ui-search-result-description"}).appendTo(i),d=n.label;n.index+="|"+d.toLowerCase(),$("<div>",{class:"red-ui-search-result-node-label"}).text(d).appendTo(l),i.click(function(e){e.preventDefault(),u(n)})},scrollOnAdd:!1})}function u(e){h(),d[e.type]=Date.now(),o(e.type)}function f(e){if(r){for(var t=$(e.target);"body"!==t.prop("nodeName").toLowerCase();){if("red-ui-type-search"===t.attr("id"))return;t=t.parent()}h(!0),i&&i()}}function h(t){r&&(RED.keyboard.remove("escape"),r=!1,null!==a&&n.slideUp(t?50:200,function(){a.hide(),e.searchBox("value","")}),RED.events.emit("type-search:close"),RED.view.focus(),$(document).off("mousedown.type-search"),$(document).off("mouseup.type-search"),$(document).off("click.type-search"))}function g(e,t){var n=e;if(void 0!==t.paletteLabel)try{n=("function"==typeof t.paletteLabel?t.paletteLabel.call(t):t.paletteLabel)||"",n+=" ("+e+")"}catch(t){console.log("Definition error: "+e+".paletteLabel",t)}return n}function v(e,t){var n=e.label.toLowerCase(),o=t.label.toLowerCase();return n<o?-1:n===o?0:1}function b(e,t,n){return!e||(!e.type||t===e.type)&&(!e.input||n.inputs>0)&&(!e.output||n.outputs>0)}function m(n){var o;t.editableList("empty"),e.searchBox("value",""),s=-1;var i=["inject","function","change","switch"].filter(function(e){return b(n.filter,e,RED.nodes.getType(e))}),a=Object.keys(d);a.sort(function(e,t){return d[t]-d[e]}),a=a.filter(function(e){return b(n.filter,e,RED.nodes.getType(e))&&-1===i.indexOf(e)});var r=[];RED.nodes.registry.getNodeTypes().forEach(function(e){var t=RED.nodes.getType(e);"config"!==t.category&&"unknown"!==e&&"tab"!==e&&"debug"!==e&&r.push({type:e,def:t,label:g(e,t)})}),r.sort(v);var l,c=0;for(o=0;o<i.length;o++){var p=RED.nodes.getType(i[o]);p&&((l={type:i[o],common:!0,def:p,i:c++}).label=g(l.type,l.def),o===i.length-1&&(l.separator=!0),t.editableList("addItem",l))}for(o=0;o<Math.min(5,a.length);o++)(l={type:a[o],def:RED.nodes.getType(a[o]),recent:!0,i:c++}).label=g(l.type,l.def),o===a.length-1&&(l.separator=!0),t.editableList("addItem",l);for(o=0;o<r.length;o++)b(n.filter,r[o].type,r[o].def)&&(r[o].i=c++,t.editableList("addItem",r[o]));setTimeout(function(){s=0,t.children(":first").addClass("selected")},100)}return{show:function(t){r?(a.hide(),n.hide()):(RED.keyboard.add("*","escape",function(){h(),i&&i()}),null===a&&p(),r=!0),$(document).off("mousedown.type-search"),$(document).off("mouseup.type-search"),$(document).off("click.type-search"),setTimeout(function(){$(document).on("mousedown.type-search",f),$(document).on("mouseup.type-search",f),$(document).on("click.type-search",f)},200),m(t),o=t.add,i=t.cancel,RED.events.emit("type-search:open"),$("#main-container").height()-t.y-150<0&&(t.y=t.y-235),a.css({left:t.x+"px",top:t.y+"px"}).show(),n.slideDown(300),setTimeout(function(){n.find(".red-ui-editableList-container").scrollTop(0),e.focus()},100)},refresh:m,hide:h}}(),RED.subflow=function(){var e='<script type="text/x-kumologica" data-template-name="subflow"><div class="form-row"><label for="node-input-name" data-i18n="[append]editor:common.label.name"><i class="fa fa-tag"></i> </label><input type="text" id="node-input-name"></div><div class="form-row" style="margin-bottom: 0px;"><label style="width: auto;" data-i18n="[append]editor:editor-tab.env"><i class="fa fa-th-list"></i> </label></div><div class="form-row node-input-env-container-row"><ol id="node-input-env-container"></ol></div><\/script>',t='<script type="text/x-kumologica" data-template-name="subflow-template"><div class="form-row"><i class="fa fa-tag"></i> <label for="subflow-input-name" data-i18n="common.label.name"></label><input type="text" id="subflow-input-name"></div><div class="form-row"><i class="fa fa-folder-o"></i> <label for="subflow-input-category" data-i18n="editor:subflow.category"></label><select style="width: 250px;" id="subflow-input-category"></select><input style="display:none; margin-left: 10px; width:calc(100% - 250px)" type="text" id="subflow-input-custom-category"></div><div class="form-row" style="margin-bottom: 0px;"><label style="width: auto;" data-i18n="[append]editor:editor-tab.env"><i class="fa fa-th-list"></i> </label></div><div class="form-row node-input-env-container-row"><ol id="node-input-env-container"></ol></div><div class="form-row form-tips" id="subflow-dialog-user-count"></div><\/script>';function n(e,t){var n={x:50,y:30};t||(n.x+=110);var o=[].concat(e.out).concat(e.in);e.status&&o.push(e.status),o.sort(function(e,t){return e.x-t.x});for(var i=0;i<o.length;i++){var a=o[i];a.x==n.x&&a.y==n.y&&(n.x+=55)}return n}function o(){var e=RED.nodes.subflow(RED.workspaces.active());if(0!==e.in.length){var t=e.in[0],n=[];return RED.nodes.eachLink(function(o){"subflow"==o.source.type&&o.source.z==e.id&&o.source.i==t.i?n.push(o):o.target.type=="subflow:"+e.id&&n.push(o)}),n.forEach(function(e){RED.nodes.removeLink(e)}),e.in=[],$("#workspace-subflow-input-add").removeClass("active"),$("#workspace-subflow-input-remove").addClass("active"),e.changed=!0,RED.palette.refresh(),{subflowInputs:[t],links:n}}}function a(e){var t=RED.nodes.subflow(RED.workspaces.active());if(0!==t.out.length){void 0===e&&(e=[t.out[t.out.length-1]]);var n=[];for(e.sort(function(e,t){return t.i-e.i}),i=0;i<e.length;i++){var o=e[i];t.out.splice(o.i,1);var a=[],s=[];RED.nodes.eachLink(function(e){"subflow"==e.target.type&&e.target.z==t.id&&e.target.i==o.i&&a.push(e),e.source.type=="subflow:"+t.id&&(e.sourcePort==o.i?a.push(e):e.sourcePort>o.i&&s.push(e))}),a.forEach(function(e){RED.nodes.removeLink(e)}),s.forEach(function(e){e.sourcePort--}),n=n.concat(a);for(var r=o.i;r<t.out.length;r++)t.out[r].i--,t.out[r].dirty=!0}return t.changed=!0,RED.palette.refresh(),{subflowOutputs:e,links:n}}}function s(){var e=RED.nodes.subflow(RED.workspaces.active());if(e.status){var t=[];return RED.nodes.eachLink(function(n){"subflow"==n.target.type&&n.target.z==e.id&&"status"==n.target.direction&&t.push(n)}),t.forEach(function(e){RED.nodes.removeLink(e)}),delete e.status,$("#workspace-subflow-status").prop("checked",!!e.status),$("#workspace-subflow-status").parent().parent().toggleClass("active",!!e.status),{links:t}}}function r(e){var t=RED.nodes.subflow(RED.workspaces.active());l(t);var n=[];if(t)return RED.nodes.filterNodes({type:"subflow:"+t.id}).forEach(function(o){for(n.push({id:o.id,changed:o.changed}),e&&(o.changed=!0),o.inputs=t.in.length,o.outputs=t.out.length;o.outputs<o.ports.length;)o.ports.pop();o.resize=!0,o.dirty=!0,RED.editor.updateNodeProperties(o)}),RED.editor.validateNode(t),{instances:n}}function l(e){e&&($("#workspace-subflow-input-add").toggleClass("active",0!==e.in.length),$("#workspace-subflow-input-remove").toggleClass("active",0===e.in.length),$("#workspace-subflow-output .spinner-value").text(e.out.length),$("#workspace-subflow-status").prop("checked",!!e.status),$("#workspace-subflow-status").parent().parent().toggleClass("active",!!e.status))}function d(e){var t=$("#workspace-toolbar");t.empty(),$('<a class="button" id="workspace-subflow-edit" href="#" data-i18n="[append]subflow.editSubflowProperties"><i class="fa fa-pencil"></i> </a>').appendTo(t),$('<span style="margin-left: 5px;" data-i18n="subflow.input"></span> <div style="display: inline-block;" class="button-group"><a id="workspace-subflow-input-remove" class="button active" href="#">0</a><a id="workspace-subflow-input-add" class="button" href="#">1</a></div>').appendTo(t),$('<span style="margin-left: 5px;" data-i18n="subflow.output"></span> <div id="workspace-subflow-output" style="display: inline-block;" class="button-group spinner-group"><a id="workspace-subflow-output-remove" class="button" href="#"><i class="fa fa-minus"></i></a><div class="spinner-value">3</div><a id="workspace-subflow-output-add" class="button" href="#"><i class="fa fa-plus"></i></a></div>').appendTo(t),$('<span class="button-group"><span class="button" style="padding:0"><label for="workspace-subflow-status"><input id="workspace-subflow-status" type="checkbox"> <span data-i18n="subflow.status"></span></label></span></span>').appendTo(t),$('<a class="button" id="workspace-subflow-delete" href="#" data-i18n="[append]subflow.deleteSubflow"><i class="fa fa-trash"></i> </a>').appendTo(t),t.i18n(),$("#workspace-subflow-output-remove").click(function(t){t.preventDefault();var n=RED.nodes.dirty(),o=e.changed,i=a();if(i){var s=r(!0);RED.history.push({t:"delete",links:i.links,subflowOutputs:i.subflowOutputs,changed:o,dirty:n,subflow:{instances:s.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0)}}),$("#workspace-subflow-output-add").click(function(e){e.preventDefault(),function(e){var t=RED.nodes.subflow(RED.workspaces.active()),o=n(t,!1),i={type:"subflow",direction:"out",z:t.id,i:t.out.length,x:o.x,y:o.y,id:RED.nodes.id()},a=t.out.length;t.out.push(i),t.dirty=!0;var s=RED.nodes.dirty(),l=t.changed;t.changed=!0;var d={t:"edit",node:t,dirty:s,changed:l,subflow:{outputCount:a,instances:r(!0).instances}};RED.history.push(d),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#workspace-subflow-output .spinner-value").text(t.out.length),RED.palette.refresh()}()}),$("#workspace-subflow-input-add").click(function(e){e.preventDefault(),function(){var e=RED.nodes.subflow(RED.workspaces.active());if(1!==e.in.length){var t=n(e,!0),o={type:"subflow",direction:"in",z:e.id,i:e.in.length,x:t.x,y:t.y,id:RED.nodes.id()},i=e.in.length;e.in.push(o),e.dirty=!0;var a=RED.nodes.dirty(),s=e.changed;e.changed=!0;var l={t:"edit",node:e,dirty:a,changed:s,subflow:{inputCount:i,instances:r(!0).instances}};RED.history.push(l),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#workspace-subflow-input-add").addClass("active"),$("#workspace-subflow-input-remove").removeClass("active"),RED.palette.refresh()}}()}),$("#workspace-subflow-input-remove").click(function(t){t.preventDefault();var n=RED.nodes.dirty(),i=e.changed;e.changed=!0;var a=o();if(a){var s=r(!0);RED.history.push({t:"delete",links:a.links,changed:i,subflowInputs:a.subflowInputs,dirty:n,subflow:{instances:s.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0)}}),$("#workspace-subflow-status").change(function(t){if(this.checked)!function(){var e=RED.nodes.subflow(RED.workspaces.active());if(!e.status){var t=n(e,!1),o={type:"subflow",direction:"status",z:e.id,x:t.x,y:t.y,id:RED.nodes.id()};e.status=o,e.dirty=!0;var i=RED.nodes.dirty(),a=e.changed;e.changed=!0,r(!0);var s={t:"edit",node:e,dirty:i,changed:a,subflow:{status:!0}};RED.history.push(s),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#workspace-subflow-status").prop("checked",!!e.status),$("#workspace-subflow-status").parent().parent().toggleClass("active",!!e.status)}}();else{var o=e.status,i=e.changed,a=s();if(a){e.changed=!0;var l=RED.nodes.dirty();RED.history.push({t:"delete",links:a.links,changed:i,dirty:l,subflow:{id:e.id,status:o}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw()}}}),$("#workspace-subflow-edit").click(function(e){RED.editor.editSubflow(RED.nodes.subflow(RED.workspaces.active())),e.preventDefault()}),$("#workspace-subflow-delete").click(function(e){e.preventDefault();var t=RED.nodes.dirty(),n=c(RED.workspaces.active());n.t="delete",n.dirty=t,RED.history.push(n)}),l(e),$("#chart").css({"margin-top":"40px"}),$("#workspace-toolbar").show()}function c(e){var t=[],n=[],o=RED.nodes.subflow(e);RED.nodes.eachNode(function(e){e.type=="subflow:"+o.id&&t.push(e),e.z==o.id&&t.push(e)}),RED.nodes.eachConfig(function(e){e.z==o.id&&t.push(e)});for(var i=[],a=0;a<t.length;a++){var s=RED.nodes.remove(t[a].id);n=n.concat(s.links),i=i.concat(s.nodes)}return t=t.concat(i),RED.nodes.removeSubflow(o),RED.workspaces.remove(o),RED.nodes.dirty(!0),RED.view.redraw(),{nodes:t,links:n,subflows:[o]}}function p(){var e=0;RED.nodes.eachSubflow(function(t){var n=new RegExp("^Subflow (\\d+)$").exec(t.name);n&&(e=Math.max(e,n[1]))});var t="Subflow "+(e+1),n=RED.nodes.id(),o={type:"subflow",id:n,name:t,info:"",in:[],out:[]};RED.nodes.addSubflow(o),RED.history.push({t:"createSubflow",subflow:{subflow:o},dirty:RED.nodes.dirty()}),RED.workspaces.show(n),RED.nodes.dirty(!0)}function u(e){return RED.settings.get("editor").view["view-snap-grid"]&&(e=Math.round(e/RED.view.gridSize())*RED.view.gridSize()),e}function f(){var e=RED.view.selection();if(e.nodes){var t,n,o={},i=[],a=[],s=[],r=[],l={},d=[e.nodes[0].x,e.nodes[0].y,e.nodes[0].x,e.nodes[0].y];for(t=0;t<e.nodes.length;t++)n=e.nodes[t],o[n.id]={n:n,outputs:{}},d=[Math.min(d[0],n.x),Math.min(d[1],n.y),Math.max(d[2],n.x),Math.max(d[3],n.y)];var c=u(d[0]-200),p=u(d[1]-80),f=[u((d[2]+d[0])/2),u((d[3]+d[1])/2)];RED.nodes.eachLink(function(e){o[e.source.id]&&o[e.target.id],o[e.source.id]&&!o[e.target.id]&&(r.push(e),a.push(e)),!o[e.source.id]&&o[e.target.id]&&(s.push(e),l[e.target.id]=e.target,a.push(e))});var h={};if((r=r.filter(function(e){return h[e.source.id+":"+e.sourcePort]?(h[e.source.id+":"+e.sourcePort].targets.push(e.target),!1):(e.targets=[],e.targets.push(e.target),h[e.source.id+":"+e.sourcePort]=e,!0)})).sort(function(e,t){return e.source.y-t.source.y}),Object.keys(l).length>1)RED.notify(RED._("subflow.errors.multipleInputsToSelection"),"error");else{var g=0;RED.nodes.eachSubflow(function(e){var t=new RegExp("^Subflow (\\d+)$").exec(e.name);t&&(g=Math.max(g,t[1]))});var v="Subflow "+(g+1),b=RED.nodes.id(),m={type:"subflow",id:b,name:v,info:"",in:Object.keys(l).map(function(e,t){var n=t;return{type:"subflow",direction:"in",x:u(l[e].x-l[e].w/2-80-c),y:u(l[e].y-p),z:b,i:n,id:RED.nodes.id(),wires:[{id:l[e].id}]}}),out:r.map(function(e,t){var n=t;return{type:"subflow",direction:"out",x:u(e.source.x+e.source.w/2+80-c),y:u(e.source.y-p),z:b,i:n,id:RED.nodes.id(),wires:[{id:e.source.id,port:e.sourcePort}]}})};RED.nodes.addSubflow(m);var y={id:RED.nodes.id(),type:"subflow:"+m.id,x:f[0],y:f[1],z:RED.workspaces.active(),inputs:m.in.length,outputs:m.out.length,h:Math.max(30,15*(m.out.length||0)),changed:!0};for(y._def=RED.nodes.getType(y.type),RED.editor.validateNode(y),RED.nodes.add(y),s.forEach(function(e){var t={source:e.source,sourcePort:e.sourcePort,target:y};i.push(t),RED.nodes.addLink(t)}),r.forEach(function(e,t){e.targets.forEach(function(e){var n={source:y,sourcePort:t,target:e};i.push(n),RED.nodes.addLink(n)})}),m.in.forEach(function(e){e.wires.forEach(function(t){var n={source:e,sourcePort:0,target:RED.nodes.node(t.id)};i.push(n),RED.nodes.addLink(n)})}),m.out.forEach(function(e,t){e.wires.forEach(function(t){var n={source:RED.nodes.node(t.id),sourcePort:t.port,target:e};i.push(n),RED.nodes.addLink(n)})}),t=0;t<a.length;t++)RED.nodes.removeLink(a[t]);for(t=0;t<e.nodes.length;t++)n=e.nodes[t],/^link /.test(n.type)&&(n.links=n.links.filter(function(e){var t=o.hasOwnProperty(e);if(!t){var i=RED.nodes.node(e);if(i&&i.links){var a=i.links.indexOf(n.id);a>-1&&i.links.splice(a,1)}}return t})),n.x-=c,n.y-=p,n.z=m.id;RED.history.push({t:"createSubflow",nodes:[y.id],links:i,subflow:{subflow:m,offsetX:c,offsetY:p},activeWorkspace:RED.workspaces.active(),removedLinks:a,dirty:RED.nodes.dirty()}),RED.view.select(null),RED.editor.validateNode(m),RED.nodes.dirty(!0),RED.view.redraw(!0)}}else RED.notify(RED._("subflow.errors.noNodesSelected"),"error")}return{init:function(){RED.events.on("workspace:change",function(e){var t=RED.nodes.subflow(e.workspace);t?d(t):($("#workspace-toolbar").hide().empty(),$("#chart").css({"margin-top":"0"}))}),RED.events.on("view:selection-changed",function(e){e.nodes?RED.menu.setDisabled("menu-item-subflow-convert",!1):RED.menu.setDisabled("menu-item-subflow-convert",!0)}),RED.actions.add("core:create-subflow",p),RED.actions.add("core:convert-to-subflow",f),$(e).appendTo(document.body),$(t).appendTo(document.body)},createSubflow:p,convertToSubflow:f,removeSubflow:c,refresh:r,removeInput:o,removeOutput:a,removeStatus:s}}();var cloudredobject={};function createEnvironment(){var e=document.getElementById("myTable"),t=document.getElementById("environment").value,n=document.getElementById("selectNumber").value;if("local"==t)window.alert("Environment local cannot be created");else{var o=e.insertRow(-1),i=o.insertCell(0),a=o.insertCell(1),s=o.insertCell(2),r=o.insertCell(3);i.innerHTML='<td style="margin:auto; display:block;"><input type="radio" id="'+t+'" name="myradio" value="current" onclick="setCurrentEnvironment(this)"></td>',a.innerHTML='<td style="margin:auto; display:block;">'+t+"</td>",s.innerHTML='<td style="margin:auto; display:block;">'+n+"</td>",r.innerHTML='<td style="margin:auto; display:block;"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><style>.btn {background-color: DodgerBlue; border: none; color: black; padding: 4px 10px; font-size: 11px; cursor: pointer; } </style><button class="btn" id="'+t+'" onclick="deleteEnvironment(this)"><i class="fa fa-close"></i></button></td>';var l=RED.settings.get("cloudred")||{};if(0!=l.length){var d=l.environment,c=JSON.stringify({envname:t,profile:n,status:""}),p=JSON.parse(c);d.push(p);var u=JSON.stringify(d);l.environment=JSON.parse(u),RED.settings.set("cloudred",l)}else{d=[],c=JSON.stringify({envname:t,profile:n,status:""}),p=JSON.parse(c);d.push(p);u=JSON.stringify(d);l.environment=JSON.parse(u),RED.settings.set("cloudred",l)}}}function loadEnvironmentList(){var e=document.getElementById("myTable"),t=RED.settings.get("cloudred")||{};env_array=t.environment;for(var n=0;n<env_array.length;n++){var o=e.insertRow(-1),i=o.insertCell(0),a=o.insertCell(1),s=o.insertCell(2),r=o.insertCell(3);"current"==env_array[n].status?i.innerHTML='<td style="margin:auto; display:block;"><input type="radio" id="'+env_array[n].envname+'" name="myradio" value="current" onclick="setCurrentEnvironment(this)" checked="checked"></td>':i.innerHTML='<td style="margin:auto; display:block;"><input type="radio" id="'+env_array[n].envname+'" name="myradio" value="current" onclick="setCurrentEnvironment(this)"></td>',a.innerHTML='<td style="margin:auto; display:block;">'+env_array[n].envname+"</td>",s.innerHTML='<td style="margin:auto; display:block;">'+env_array[n].profile+"</td>","localhost"==env_array[n].envname?r.innerHTML='<td style="margin:auto; display:block;"></td>':r.innerHTML='<td style="margin:auto; display:block;"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"><style>.btn {background-color: DodgerBlue; border: none; color: black; padding: 4px 10px; font-size: 11px; cursor: pointer; }</style><button class="btn" id="'+env_array[n].envname+'" onclick="deleteEnvironment(this)"><i class="fa fa-close"></i></button></td>'}}function setCurrentEnvironment(e){for(var t=RED.settings.get("cloudred")||{},n=t.environment,o=(document.getElementsByName("myradio"),0);o<n.length;o++)n[o].status="";var i=n.findIndex(function(t){return t.envname===e.id});void 0!==i&&(n[i].status="current");var a=JSON.stringify(n);t.environment=JSON.parse(a),RED.settings.set("cloudred",t)}function deleteEnvironment(e){for(var t=RED.settings.get("cloudred")||{},n=document.getElementsByTagName("tr"),o=n.length;o--;)-1!==n[o].innerHTML.indexOf(e.id)&&n[o].parentNode.removeChild(n[o]);var i=t.environment.findIndex(function(t){return t.envname===e.id});void 0!==i&&t.environment.splice(i,1);var a=t.environment,s=JSON.stringify(a);t.environment=JSON.parse(s),RED.settings.set("cloudred",t)}function loadAwsProfiles(){RED.settings.getAWSEnvprofiles(function(){for(var e=document.getElementById("selectNumber"),t=0;t<awsEnvProfiles.envprofile.length;t++){var n=awsEnvProfiles.envprofile[t],o=document.createElement("option");o.textContent=n,o.value=n,e.appendChild(o)}})}function loadMemoryList(){for(var e=document.getElementById("memory"),t=["128","256","512","1024"],n=0;n<t.length;n++){var o=t[n],i=document.createElement("option");i.textContent=o,i.value=o,e.appendChild(i)}}function savefunctiondetails(){var e=document.getElementById("funcname").value,t=document.getElementById("memory").value,n=document.getElementById("timeout").value,o=RED.settings.get("cloudred")||{},i=JSON.stringify({name:e,memory:t,timeout:n}),a=JSON.parse(i);o.function=a,RED.settings.set("cloudred",o),document.getElementById("statusdialog").innerHTML='<font color="green">Function updated</font>'}RED.userSettings=function(){var e=700,t=!1,n=[];function o(e){n.push(e)}function i(o){if(!t)if(RED.user.hasPermission("settings.write")){t=!0;var i={title:RED._("menu.label.userSettings"),buttons:[{id:"node-dialog-ok",text:RED._("common.label.close"),class:"primary",click:function(){RED.tray.close()}}],resize:function(t){e=t.width},open:function(e){var t=e.find(".editor-tray-body"),i=$("<div></div>").appendTo(t),a=$("<div></div>",{id:"user-settings-tabs-container"}).appendTo(i);$("<ul></ul>",{id:"user-settings-tabs"}).appendTo(a);var s=RED.tabs.create({id:"user-settings-tabs",vertical:!0,onchange:function(e){setTimeout(function(){$("#user-settings-tabs-content").children().hide(),$("#"+e.id).show(),e.pane.focus&&e.pane.focus()},50)}}),r=$("<div></div>",{id:"user-settings-tabs-content"}).appendTo(i);n.forEach(function(e){s.addTab({id:"user-settings-tab-"+e.id,label:e.title,pane:e}),e.get().hide().appendTo(r)}),i.i18n(),s.activateTab("user-settings-tab-"+(o||"view")),$("#sidebar-shade").show()},close:function(){t=!1,n.forEach(function(e){e.close&&e.close()}),$("#sidebar-shade").hide()},show:function(){}};null!==e&&(i.width=e),RED.tray.show(i)}else RED.notify(RED._("user.errors.settings"),"error")}var a=[{title:"menu.label.view.grid",options:[{setting:"view-show-grid",oldSetting:"menu-menu-item-view-show-grid",label:"menu.label.view.showGrid",toggle:!0,onchange:"core:toggle-show-grid"},{setting:"view-snap-grid",oldSetting:"menu-menu-item-view-snap-grid",label:"menu.label.view.snapGrid",toggle:!0,onchange:"core:toggle-snap-grid"},{setting:"view-grid-size",label:"menu.label.view.gridSize",type:"number",default:20,onchange:RED.view.gridSize}]},{title:"menu.label.nodes",options:[{setting:"view-node-status",oldSetting:"menu-menu-item-status",label:"menu.label.displayStatus",default:!0,toggle:!0,onchange:"core:toggle-status"},{setting:"view-node-show-label",label:"menu.label.showNodeLabelDefault",default:!0,toggle:!0}]},{title:"menu.label.other",options:[{setting:"view-show-tips",oldSettings:"menu-menu-item-show-tips",label:"menu.label.showTips",toggle:!0,default:!0,onchange:"core:toggle-show-tips"}]}],s={};function r(){var e=$('<div id="user-settings-tab-awsconfig" class="node-help"></div>'),t=$('<div class="user-settings-row"></div>').appendTo(e);return $('<script type="text/javascript">window.onload = loadAwsProfiles(); window.onload = loadEnvironmentList() <\/script><br><input type="text" name="environment" id="environment" placeholder="Environment" value=""> <select id="selectNumber"><option>Choose a profile</option></select><br><input type="submit" value="Create" onclick="createEnvironment()"><br><br><table id="myTable" style="border: 1px solid black; width:80%"><th bgcolor="#f3f3f3" align="left">Current</th><th bgcolor="#f3f3f3" align="left">Environment</th><th bgcolor="#f3f3f3" align="left">Profile</th><th bgcolor="#f3f3f3" align="left">Remove</th></table>').appendTo(t),e}function l(){var e=$('<div id="user-settings-tab-configurations" class="node-help"></div>'),t=$("<h3>Active Configurations</h3>").appendTo(e);$('<table class="table table-sm" style="margin-top: 25px;">\n <thead>\n <tr> \n <th scope="col">Name</th>\n <th scope="col"></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><span style="font-size:14px; font-weight:normal">Deploy on AWS</span></td>\n <td>\n <div class="btn-group pull-right">\n <button id="bEdit" type="button" class="btn btn-default" onclick="alert(this);" style="display:block;float:left;">\n <span class="fa fa-edit"></span>\n </button>\n <button id="bRemove" type="button" class="btn btn-default" onclick="alert(this);" style="display:block;float:left;">\n <span class="fa fa-trash"></span>\n </button>\n </div>\n </td>\n </tr>\n <tr>\n <td><span style="font-size:14px; font-weight:normal">Terraform apply</span></td>\n <td>\n <div class="btn-group pull-right">\n <button id="bEdit" type="button" class="btn btn-default" onclick="alert(this);" style="display:block;float:left;">\n <span class="fa fa-edit"></span>\n </button>\n <button id="bRemove" type="button" class="btn btn-default" onclick="alert(this);" style="display:block;float:left;">\n <span class="fa fa-trash"></span>\n </button>\n </div>\n </td>\n </tr>\n <tr>\n <td><span style="font-size:14px; font-weight:normal">Terraform destroy</span></td>\n <td>\n <div class="btn-group pull-right">\n <button id="bEdit" type="button" class="btn btn-default" onclick="alert(this);" style="display:block;float:left;">\n <span class="fa fa-edit"></span>\n </button>\n <button id="bRemove" type="button" class="btn btn-default" onclick="alert(this);" style="display:block;float:left;">\n <span class="fa fa-trash"></span>\n </button>\n </div>\n </td>\n </tr>\n </tbody>\n </table>').appendTo(t);return e}function d(){var e=$('<div id="user-settings-tab-view" class="node-help"></div>'),t=RED.settings.get("editor")||{};return t.view=t.view||{},a.forEach(function(n){$("<h3></h3>").text(RED._(n.title)).appendTo(e),n.options.forEach(function(n){var o=t.view[n.setting],i=$('<div class="user-settings-row"></div>').appendTo(e);n.toggle?$('<label for="user-settings-'+n.setting+'"><input id="user-settings-'+n.setting+'" type="checkbox"> '+RED._(n.label)+"</label>").appendTo(i).find("input").prop("checked",o):($('<label for="user-settings-'+n.setting+'">'+RED._(n.label)+"</label>").appendTo(i),$('<input id="user-settings-'+n.setting+'" type="'+(n.type||"text")+'">').appendTo(i).val(o))})}),e}function c(e,t){var n=s[e],o=RED.settings.get("editor")||{};o.view=o.view||{},o.view[n.setting]=t,RED.settings.set("editor",o);var i=n.onchange;"string"==typeof i&&(i=RED.actions.get(i)),i&&i.call(n,t)}return{init:function(){RED.actions.add("core:show-user-settings",i),RED.actions.add("core:show-help",function(){i("keyboard")}),o({id:"configurations",title:"Configurations",get:l,close:function(){}}),o({id:"awsconfig",title:RED._("menu.label.cloudred.aws.panename"),get:r,close:function(){}}),o({id:"view",title:RED._("menu.label.view.view"),get:d,close:function(){a.forEach(function(e){e.options.forEach(function(e){var t=$("#user-settings-"+e.setting);e.toggle?c(e.setting,t.prop("checked")):c(e.setting,t.val())})})}});var e=RED.settings.get("editor")||{};e.view=e.view||{};var t=!1;a.forEach(function(n){n.options.forEach(function(n){if(n.oldSetting){var o=RED.settings.get(n.oldSetting);void 0!==o&&null!==o&&(e.view[n.setting]=o,t=!0,RED.settings.remove(n.oldSetting))}s[n.setting]=n;var i=e.view[n.setting];if(null!==i&&void 0!==i||!n.hasOwnProperty("default")||(i=n.default,e.view[n.setting]=i,t=!0),n.onchange){var a=n.onchange;"string"==typeof a&&(a=RED.actions.get(a)),a&&a.call(n,i)}})}),t&&RED.settings.set("editor",e),void 0===(cloudredobject=RED.settings.get("cloudred"))&&RED.settings.set("cloudred",JSON.parse(JSON.stringify({function:{name:"",memory:"",timeout:""},profile:{profilename:"",awskey:"",awssecret:"",region:""},environment:[{envname:"localhost",profile:"--",status:"current"}]})))},toggle:function(e){var t=s[e],n=RED.settings.get("editor")||{};n.view=n.view||{},c(e,!n.view[t.setting])},show:i,add:o}}(),RED.projects=function(){var e,t,n;function o(e){var t;"git_missing_user"===e.code?t=RED.notify("<p>"+RED._("projects.errors.no-username-email")+"</p>",{fixed:!0,type:"error",buttons:[{text:RED._("common.label.cancel"),click:function(){t.close()}},{text:RED._("projects.config-git"),click:function(){RED.userSettings.show("gitconfig"),t.close()}}]}):(console.log(e),t=RED.notify("<p>"+RED._("projects.errors.unexpected")+":</p><p>"+e.message+"</p><small>"+RED._("projects.errors.code")+": "+e.code+"</small>",{fixed:!0,modal:!0,type:"error",buttons:[{text:RED._("common.label.close"),click:function(){t.close()}}]}))}var i={};function a(){var t=$('<div class="projects-dialog-screen-start-hero"></div>');$('<span><i class="fa fa-files-o fa-2x"></i> <i class="fa fa-long-arrow-right fa-2x"></i> <i class="fa fa-archive fa-2x"></i></span>').appendTo(t),$("<hr>").appendTo(t);var a,r,d,c,p,u,f,h={};i={welcome:{content:function(e){var n=$('<div class="projects-dialog-screen-start"></div>');t.appendTo(n);var o=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(n);$("<p>").text(RED._("projects.welcome.hello")).appendTo(o),$("<p>").text(RED._("projects.welcome.desc0")).appendTo(o),$("<p>").text(RED._("projects.welcome.desc1")).appendTo(o),$("<p>").text(RED._("projects.welcome.desc2")).appendTo(o);var i=$('<div style="text-align: center"></div>').appendTo(o),a=$('<button data-type="empty" class="editor-button projects-dialog-screen-create-type"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-asterisk"></i><br/>'+RED._("projects.welcome.create")+"</button>").appendTo(i),r=$('<button data-type="clone" class="editor-button projects-dialog-screen-create-type"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-git"></i><br/>'+RED._("projects.welcome.clone")+"</button>").appendTo(i);return a.click(function(e){e.preventDefault(),h={action:"create"},s("git-config")}),r.click(function(e){e.preventDefault(),h={action:"clone"},s("git-config")}),n},buttons:[{text:RED._("projects.welcome.openExistingProject"),class:"secondary",click:function(){h={action:"open"},s("git-config")}},{text:RED._("projects.welcome.not-right-now"),click:function(){h={},$(this).dialog("close")}}]},"git-config":{content:function(e){var n=!1,o=RED.settings.get("git");o&&o.user?o=o.user:RED.settings.git&&RED.settings.git.globalUser&&(n=!0,o=RED.settings.git.globalUser);var i=function(){var e=u.val().trim(),t=f.val().trim(),n=e.length>0&&t.length>0;$("#projects-dialog-git-config").prop("disabled",!n).toggleClass("disabled ui-button-disabled ui-state-disabled",!n)},a=$('<div class="projects-dialog-screen-start"></div>');t.appendTo(a);var s=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(a);$("<p>").text(RED._("projects.git-config.setup")).appendTo(s),$("<p>").text(RED._("projects.git-config.desc0")).appendTo(s),$("<p>").text(RED._("projects.git-config.desc1")).appendTo(s),n&&$("<p>").text(RED._("projects.git-config.desc2")).appendTo(s),$("<p>").text(RED._("projects.git-config.desc3")).appendTo(s);var r=$('<div class="form-row"></div>').appendTo(s);return $('<label for="">'+RED._("projects.git-config.username")+"</label>").appendTo(r),(u=$('<input type="text">').val(o&&o.name||"").appendTo(r)).on("change keyup paste",i),r=$('<div class="form-row"></div>').appendTo(s),$('<label for="">'+RED._("projects.git-config.email")+"</label>").appendTo(r),(f=$('<input type="text">').val(o&&o.email||"").appendTo(r)).on("change keyup paste",i),setTimeout(function(){u.focus(),i()},50),a},buttons:[{text:RED._("common.label.back"),click:function(){s("welcome")}},{id:"projects-dialog-git-config",text:RED._("common.label.next"),class:"primary",click:function(){var e=RED.settings.get("git")||{};e.user=e.user||{},e.user.name=u.val(),e.user.email=f.val(),RED.settings.set("git",e),"create"===h.action?s("project-details"):"clone"===h.action?s("clone-project"):"open"===h.action&&s("create",{screen:"open"})}}]},"project-details":{content:function(e){var n=null,o=!1;$.getJSON("projects",function(e){n={},e.projects.forEach(function(e){n[e]=!0,o&&(o=!1,s())})});var i=$('<div class="projects-dialog-screen-start"></div>');t.appendTo(i);var a=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(i);$("<p>").text(RED._("projects.project-details.create")).appendTo(a),$("<p>").text(RED._("projects.project-details.desc0")).appendTo(a),$("<p>").text(RED._("projects.project-details.desc1")).appendTo(a),$("<p>").text(RED._("projects.project-details.desc2")).appendTo(a);var s=function(){var e=c.val(),t=!0;if(g){if(null===n)return void(o=!0);f.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||n[e]?(c.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(f),d=!1,t=!1,n[e]?projectNameSublabel.text(RED._("projects.project-details.already-exists")):projectNameSublabel.text(RED._("projects.project-details.must-contain"))):(c.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(f),projectNameSublabel.text(RED._("projects.project-details.must-contain")),d=!0),v=e}t=d,$("#projects-dialog-create-name").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)},r=$('<div class="form-row"></div>').appendTo(a);$('<label for="projects-dialog-screen-create-project-name">'+RED._("projects.project-details.project-name")+"</label>").appendTo(r);var l=$('<div style="position:relative;"></div>').appendTo(r);c=$('<input id="projects-dialog-screen-create-project-name" type="text"></input>').val(h.name||"").appendTo(l);var d,u,f=$('<div class="projects-dialog-screen-input-status"></div>').appendTo(l),g=!1,v="";return c.on("change keyup paste",function(){if(g=c.val()!==v,u)clearTimeout(u);else if(g&&(f.empty(),$('<img src="red/images/spin.svg"/>').appendTo(f),""===c.val()))return void s();u=setTimeout(function(){s(),u=null},300)}),projectNameSublabel=$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.project-details.must-contain")+"</small></label>").appendTo(r).find("small"),r=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(a),$('<label for="projects-dialog-screen-create-project-desc">'+RED._("projects.project-details.desc")+"</label>").appendTo(r),p=$('<input id="projects-dialog-screen-create-project-desc" type="text">').val(h.summary||"").appendTo(r),$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.project-details.opt")+"</small></label>").appendTo(r),setTimeout(function(){c.focus(),c.change()},50),i},buttons:function(e){return[{text:RED._("common.label.back"),click:function(){s("git-config")}},{id:"projects-dialog-create-name",disabled:!0,text:RED._("common.label.next"),class:"primary disabled",click:function(){h.name=c.val(),h.summary=p.val(),s("default-files",e)}}]}},"clone-project":function(){var n,i,a,r,d,c,p,u;return{content:function(o){var s=$('<div class="projects-dialog-screen-start"></div>');t.appendTo(s);var l=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(s);$("<p>").text(RED._("projects.clone-project.clone")).appendTo(l),$("<p>").text(RED._("projects.clone-project.desc0")).appendTo(l);var f=null,h=!1;$.getJSON("projects",function(e){f={},e.projects.forEach(function(e){f[e]=!0,h&&(h=!1,v())})});var g,v=function(){var e=n.val(),t=!0;if(x){if(null===f)return void(h=!0);w.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||f[e]?(n.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(w),m=!1,t=!1,f[e]?c.text(RED._("projects.clone-project.already-exists")):c.text(RED._("projects.clone-project.must-contain"))):(n.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(w),c.text(RED._("projects.clone-project.must-contain")),m=!0),D=e}t=m;var o=a.val(),i=o.length>0&&!/\s/.test(o);/^https?:\/\/[^/]+@/i.test(o)&&($("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.no-info-in-url")),i=!1),i?a.removeClass("input-error"):(k&&a.addClass("input-error"),t=!1),/^https?:\/\//.test(o)?($(".projects-dialog-screen-create-row-creds").show(),$(".projects-dialog-screen-create-row-sshkey").hide()):/^(?:ssh|[\S]+?@[\S]+?):(?:\/\/)?/.test(o)?($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").show()):($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").hide()),$("#projects-dialog-clone-project").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)};g=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty projects-dialog-screen-create-row-clone"></div>').appendTo(l),$('<label for="projects-dialog-screen-create-project-name">'+RED._("projects.clone-project.project-name")+"</label>").appendTo(g);var b=$('<div style="position:relative;"></div>').appendTo(g);n=$('<input id="projects-dialog-screen-create-project-name" type="text"></input>').appendTo(b);var m,y,w=$('<div class="projects-dialog-screen-input-status"></div>').appendTo(b),x=!1,D="",E="";n.on("change keyup paste",function(){if(x=n.val()!==D,y)clearTimeout(y);else if(x&&(w.empty(),$('<img src="red/images/spin.svg"/>').appendTo(w),""===n.val()))return void v();y=setTimeout(function(){v(),y=null},300)}),c=$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.clone-project.must-contain")+"</small></label>").appendTo(g).find("small"),g=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(l),$('<label for="projects-dialog-screen-create-project-repo">'+RED._("projects.clone-project.git-url")+"</label>").appendTo(g),a=$('<input id="projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(g),$('<label id="projects-dialog-screen-create-project-repo-label" class="projects-edit-form-sublabel"><small>'+RED._("projects.clone-project.protocols")+"</small></label>").appendTo(g);var k=!1,R="";a.on("change keyup paste",function(){k=!0;var e=$(this).val();R!==e&&$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.protocols")),R=e;var t=/\/([^/]+?)(?:\.git)?$/.exec(e);if(t){var o=n.val();""!==o&&o!==E||(E=t[1],n.val(E),n.change())}v()});var T=$('<div class="projects-dialog-screen-create-row"></div>').appendTo(l);g=$('<div class="form-row projects-dialog-screen-create-row-auth-error"></div>').hide().appendTo(T),$('<div><i class="fa fa-warning"></i> '+RED._("projects.clone-project.auth-failed")+"</div>").appendTo(g),g=$('<div class="hide form-row projects-dialog-screen-create-row-creds"></div>').hide().appendTo(T);b=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(g);$('<label for="projects-dialog-screen-create-project-repo-user">'+RED._("projects.clone-project.username")+"</label>").appendTo(b),r=$('<input id="projects-dialog-screen-create-project-repo-user" type="text"></input>').appendTo(b),b=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(g),$('<label for="projects-dialog-screen-create-project-repo-pass">'+RED._("projects.clone-project.passwd")+"</label>").appendTo(b),d=$('<input id="projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(b),g=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').hide().appendTo(T),b=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(g),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.ssh-key")+"</label>").appendTo(b),p=$("<select>",{style:"width: 100%"}).appendTo(b),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){p.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(p.addClass("input-error"),p.attr("disabled",!0),_.show()):(p.removeClass("input-error"),p.attr("disabled",!1),_.hide())}),b=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(g),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.passphrase")+"</label>").appendTo(b),u=$('<input id="projects-dialog-screen-create-project-repo-passphrase" type="password"></input>').appendTo(b),b=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').appendTo(T);var _=$('<div class="projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(b);return $('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.clone-project.ssh-key-desc")+"</div>").appendTo(_),b=$('<div style="text-align: center">').appendTo(_),$('<button class="editor-button">'+RED._("projects.clone-project.ssh-key-add")+"</button>").appendTo(b).click(function(t){t.preventDefault(),e.dialog("close"),RED.userSettings.show("gitconfig"),setTimeout(function(){$("#user-settings-gitconfig-add-key").click()},500)}),g=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(l),$("<label>"+RED._("projects.clone-project.credential-key")+"</label>").appendTo(g),i=$('<input type="password"></input>').appendTo(g),s},buttons:function(t){return[{text:RED._("common.label.back"),click:function(){s("git-config")}},{id:"projects-dialog-clone-project",disabled:!0,text:RED._("common.label.clone"),class:"primary disabled",click:function(){$(".projects-dialog-screen-create-type.selected").data("type");var t={name:n.val()};t.credentialSecret=i.val();var s=a.val();if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(s)){var c=p.val();if(!c)return void console.log(RED._("projects.clone-project.cant-get-ssh-key"));t.git={remotes:{origin:{url:s,keyFile:c,passphrase:u.val()}}}}else t.git={remotes:{origin:{url:s,username:r.val(),password:d.val()}}};$(".projects-dialog-screen-create-row-auth-error").hide(),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.protocols")),r.removeClass("input-error"),d.removeClass("input-error"),p.removeClass("input-error"),u.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(t.name),l({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(t){e.dialog("close")},400:{project_exists:function(e){console.log(RED._("projects.clone-project.already-exists2"))},git_error:function(e){console.log(RED._("projects.clone-project.git-error"),e)},git_connection_failed:function(e){a.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.connection-failed"))},git_not_a_repository:function(e){a.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.not-git-repo"))},git_repository_not_found:function(e){a.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.repo-not-found"))},git_auth_failed:function(e){$(".projects-dialog-screen-create-row-auth-error").show(),r.addClass("input-error"),d.addClass("input-error"),p.addClass("input-error"),u.addClass("input-error")},missing_flow_file:function(t){e.dialog("close")},missing_package_file:function(t){e.dialog("close")},project_empty:function(t){e.dialog("close")},credentials_load_failed:function(t){e.dialog("close")},"*":function(t){o(t),$(e).dialog("close")}}}},t).then(function(){RED.events.emit("project:change",{name:name})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}}}(),"default-files":{content:function(e){var n=$('<div class="projects-dialog-screen-start"></div>');t.appendTo(n);var o=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(n);$("<p>").text(RED._("projects.default-files.create")).appendTo(o),$("<p>").text(RED._("projects.default-files.desc0")).appendTo(o),$("<p>").text(RED._("projects.default-files.desc1")).appendTo(o),!e.existingProject&&RED.settings.files&&$("<p>").text(RED._("projects.default-files.desc2")).appendTo(o);var i=function(){var e=!0,t=r.val();""!==t&&/\.json$/.test(t)?(r.hasClass("input-error")&&(r.removeClass("input-error"),r.next().empty()),d.hasClass("input-error")&&(d.removeClass("input-error"),d.next().empty()),d.text(t.substring(0,t.length-5)+"_cred.json")):(e=!1,r.hasClass("input-error")||(r.addClass("input-error"),r.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>')),d.text(""),d.hasClass("input-error")||(d.addClass("input-error"),d.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>'))),$("#projects-dialog-create-default-files").prop("disabled",!e).toggleClass("disabled ui-button-disabled ui-state-disabled",!e)},a=$('<div class="form-row"></div>').appendTo(o);$('<label for="projects-dialog-screen-create-project-file">'+RED._("projects.default-files.flow-file")+"</label>").appendTo(a);var s=$('<div style="position:relative;"></div>').appendTo(a),l=h.files&&h.files.flow||RED.settings.files&&RED.settings.files.flow||"flow.json";r=$('<input id="projects-dialog-screen-create-project-file" type="text">').val(l).on("change keyup paste",i).appendTo(s),$('<div class="projects-dialog-screen-input-status"></div>').appendTo(s),$('<label class="projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(a);var c=h.files&&h.files.credentials||RED.settings.files&&RED.settings.files.credentials||"flow_cred.json";return a=$('<div class="form-row"></div>').appendTo(o),$('<label for="projects-dialog-screen-create-project-credfile">'+RED._("projects.default-files.credentials-file")+"</label>").appendTo(a),s=$('<div style="position:relative;"></div>').appendTo(a),d=$('<div style="width: 100%" class="uneditable-input" id="projects-dialog-screen-create-project-credentials">').text(c).appendTo(s),$('<div class="projects-dialog-screen-input-status"></div>').appendTo(s),setTimeout(function(){r.focus(),i()},50),n},buttons:function(e){return[{text:RED._(e.existingProject?"common.label.cancel":"common.label.back"),click:function(){e.existingProject?$(this).dialog("close"):s("project-details",e)}},{id:"projects-dialog-create-default-files",text:RED._("common.label.next"),class:"primary",click:function(){h.files={flow:r.val(),credentials:d.text()},e.existingProject||(h.migrateFiles=!0),s("encryption-config",e)}}]}},"encryption-config":{content:function(e){var n=$('<div class="projects-dialog-screen-start"></div>');t.appendTo(n);var o=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(n);$("<p>").text(RED._("projects.encryption-config.setup")).appendTo(o),e.existingProject?($("<p>").text(RED._("projects.encryption-config.desc0")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc1")).appendTo(o)):"disabled"===RED.settings.flowEncryptionType?($("<p>").text(RED._("projects.encryption-config.desc2")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc3")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc4")).appendTo(o)):("user"===RED.settings.flowEncryptionType?$("<p>").text(RED._("projects.encryption-config.desc5")).appendTo(o):"system"===RED.settings.flowEncryptionType&&$("<p>").text(RED._("projects.encryption-config.desc6")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc7")).appendTo(o));var i=function(){var e=!0;"enabled"===$("input[name=projects-encryption-type]:checked").val()&&"custom"===$("input[name=projects-encryption-key]:checked").val()&&(e=e&&""!==a.val()),$("#projects-dialog-create-encryption").prop("disabled",!e).toggleClass("disabled ui-button-disabled ui-state-disabled",!e)},s=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(o);$("<label>"+RED._("projects.encryption-config.credentials")+"</label>").appendTo(s);var r=$('<div style="width: 550px">').appendTo(s),l=$('<div style="min-height:150px; box-sizing: border-box; float: right; vertical-align: top; width: 331px; margin-left: -1px; padding: 15px; margin-top: -15px; border: 1px solid #ccc; border-radius: 3px; display: inline-block">').appendTo(r),d=$('<div style="vertical-align: top; width: 220px; display: inline-block">').appendTo(r),c=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid #ccc;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: white;"></div>').appendTo(d);$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="enabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-lock"></i> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.enable")+"</span></label>").appendTo(c);var p=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid white;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: #ccc; "></div>').appendTo(d);return $('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="disabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-unlock"></i> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.disable")+"</span></label>").appendTo(p),d.find("input[name=projects-encryption-type]").click(function(e){var t,n;"enabled"===$(this).val()?(t=c,n=p,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&a.focus()):(n=c,t=p,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.css({borderColor:"#ccc",borderRightColor:"white"}),n.css({borderColor:"white",borderRightColor:"#ccc"}),i()}),s=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(l),$('<label class="projects-edit-form-inline-label '+("user"!==RED.settings.flowEncryptionType?"disabled":"")+'" style="margin-left: 5px"><input '+("user"!==RED.settings.flowEncryptionType?RED._("projects.encryption-config.disabled"):"")+' type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" value="default" name="projects-encryption-key"> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.copy")+"</span></label>").appendTo(s),s=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(l),$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" value="custom" name="projects-encryption-key"> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.use-custom")+"</span></label>").appendTo(s),s=$('<div class="projects-encryption-enabled-row"></div>').appendTo(l),(a=$('<input disabled type="password" style="margin-left: 25px; width: calc(100% - 30px);"></input>').appendTo(s)).on("change keyup paste",i),s=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(l),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.encryption-config.desc8")+"</div>").appendTo(s),l.find("input[name=projects-encryption-key]").click(function(){var e=$(this).val();a.attr("disabled","default"===e),"custom"===e&&a.focus(),i()}),setTimeout(function(){d.find("input[name=projects-encryption-type][value=enabled]").click(),"user"!==RED.settings.flowEncryptionType?l.find("input[name=projects-encryption-key][value=custom]").click():l.find("input[name=projects-encryption-key][value=default]").click(),i()},100),n},buttons:function(t){return[{text:RED._("common.label.back"),click:function(){s("default-files",t)}},{id:"projects-dialog-create-encryption",text:RED._(t.existingProject?"projects.encryption-config.create-project-files":"projects.encryption-config.create-project"),class:"primary disabled",disabled:!0,click:function(){"enabled"===$("input[name=projects-encryption-type]:checked").val()?"custom"===$("input[name=projects-encryption-key]:checked").val()&&(h.credentialSecret=a.val()):h.credentialSecret=!1,RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(h.name);var i="POST",r="projects";t.existingProject&&(h.initialise=!0,i="PUT",r="projects/"+n.name);var d=this;l({url:r,type:i,requireCleanWorkspace:!0,handleAuthFail:!1,responses:{200:function(e){h={},t.existingProject?$(d).dialog("close"):(s("create-success"),RED.menu.setDisabled("menu-item-projects-open",!1),RED.menu.setDisabled("menu-item-projects-settings",!1))},400:{project_exists:function(e){console.log(RED._("projects.encryption-config.already-exists"))},git_error:function(e){console.log(RED._("projects.encryption-config.git-error"),e)},git_connection_failed:function(e){projectRepoInput.addClass("input-error")},git_auth_failed:function(e){projectRepoUserInput.addClass("input-error"),projectRepoPasswordInput.addClass("input-error"),console.log(RED._("projects.encryption-config.git-auth-error"),e)},"*":function(t){o(t),$(e).dialog("close")}}}},h).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}},"create-success":{content:function(e){var n=$('<div class="projects-dialog-screen-start"></div>');t.appendTo(n);var o=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(n);return $("<p>").text(RED._("projects.create-success.success")).appendTo(o),$("<p>").text(RED._("projects.create-success.desc0")).appendTo(o),$("<p>").text(RED._("projects.create-success.desc1")).appendTo(o),$("<p>").text(RED._("projects.create-success.desc2")).appendTo(o),n},buttons:[{text:RED._("common.label.done"),click:function(){$(this).dialog("close")}}]},create:function(){var t,i,a,s,r,d,c,p,u,f,h,g;return{title:RED._("projects.create.projects"),content:function(e){var o=null;g=null;var v=!1;$.getJSON("projects",function(e){o={},e.projects.forEach(function(e){o[e]=!0,v&&(v=!1,y())})});var b,m=$('<div class="projects-dialog-screen-create"></div>'),y=function(){var e=t.val(),n=!0;if(_){if(null===o)return void(v=!0);T.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||o[e]?(t.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(T),k=!1,n=!1,o[e]?u.text(RED._("projects.create.already-exists")):u.text(RED._("projects.create.must-contain"))):(t.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(T),u.text(RED._("projects.create.must-contain")),k=!0),j=e}n=k;var i=$(".projects-dialog-screen-create-type.selected").data("type");if("copy"===i)n=!1;else if("clone"===i){var s=r.val(),l=s.length>0&&!/\s/.test(s);/^https?:\/\/[^/]+@/i.test(s)&&($("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.no-info-in-url")),l=!1),l?r.removeClass("input-error"):(L&&r.addClass("input-error"),n=!1),/^https?:\/\//.test(s)?($(".projects-dialog-screen-create-row-creds").show(),$(".projects-dialog-screen-create-row-sshkey").hide()):/^(?:ssh|[\S]+?@[\S]+?):(?:\/\/)?/.test(s)?($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").show()):($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").hide())}else if("empty"===i){var c=a.val();if(""!==c&&/\.json$/.test(c)?a.hasClass("input-error")&&(a.removeClass("input-error"),a.next().empty()):(n=!1,a.hasClass("input-error")||(a.addClass("input-error"),a.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>'))),"enabled"===$("input[name=projects-encryption-type]:checked").val())"custom"===$("input[name=projects-encryption-key]:checked").val()&&(n=n&&""!==d.val())}else"open"===i&&(n=!!g);$("#projects-dialog-create").prop("disabled",!n).toggleClass("disabled ui-button-disabled ui-state-disabled",!n)};b=$('<div class="form-row button-group"></div>').appendTo(m);var w=$('<button data-type="open" class="editor-button projects-dialog-screen-create-type toggle"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-folder-open"></i><br/>'+RED._("projects.create.open")+"</button>").appendTo(b),x=$('<button data-type="empty" class="editor-button projects-dialog-screen-create-type toggle"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-asterisk"></i><br/>'+RED._("projects.create.create")+"</button>").appendTo(b),D=$('<button data-type="clone" class="editor-button projects-dialog-screen-create-type toggle"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-git"></i><br/>'+RED._("projects.create.clone")+"</button>").appendTo(b);b.find(".projects-dialog-screen-create-type").click(function(e){switch(e.preventDefault(),m.find(".projects-dialog-screen-create-type").removeClass("selected"),$(this).addClass("selected"),m.find(".projects-dialog-screen-create-row").hide(),m.find(".projects-dialog-screen-create-row-"+$(this).data("type")).show(),y(),t.focus(),$(this).data("type")){case"open":$("#projects-dialog-create").text(RED._("projects.create.open"));break;case"empty":$("#projects-dialog-create").text(RED._("projects.create.create"));break;case"clone":$("#projects-dialog-create").text(RED._("projects.create.clone"))}}),b=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-open"></div>').hide().appendTo(m),function(e){(e=e||{}).height;var t,o=$("<div></div>",{class:"projects-dialog-project-list-container"}),i="",a=$("<div>",{class:"red-ui-search-container"}).appendTo(o),s=$('<input id="projects-dialog-project-list-search" type="text" placeholder="'+RED._("projects.create-project-list.search")+'">').appendTo(a).searchBox({delay:200,change:function(){i=$(this).val().toLowerCase(),c.editableList("filter"),t&&!t.is(":visible")?(t.children().children().removeClass("selected"),(t=c.children(":visible").first()).children().children().addClass("selected"),e.select&&e.select(t.children().data("data"))):((t=c.children(":visible").first()).children().children().addClass("selected"),e.select&&e.select(t.children().data("data"))),r()}});s.on("keydown",function(n){if(40===n.keyCode){n.preventDefault();var o=t;if(t){do{o=o.next()}while(0!==o.length&&!o.is(":visible"));if(0===o.length)return;t.children().children().removeClass("selected")}else o=c.children(":visible").first();(t=o).children().children().addClass("selected"),e.select&&e.select(t.children().data("data")),r()}else if(38===n.keyCode){n.preventDefault();var i=t;if(t){do{i=i.prev()}while(0!==i.length&&!i.is(":visible"));if(0===i.length)return;t.children().children().removeClass("selected")}else i=c.children(":visible").first();(t=i).children().children().addClass("selected"),e.select&&e.select(t.children().data("data")),r()}else 13===n.keyCode&&(n.preventDefault(),t&&e.dblclick&&e.dblclick(t.children().data("data")))}),s.i18n();var r=function(){var e=c.find(".projects-dialog-project-list-entry.selected").parent().parent();if(1===e.length){var t=d,n=t.height(),o=(t.scrollTop(),e.position().top),i=e.height();o+i>n?t.animate({scrollTop:"-="+(n-o-i)},50):o<0&&t.animate({scrollTop:"+="+o},50)}},d=$("<div></div>",{class:"projects-dialog-project-list-inner-container"}).appendTo(o),c=$("<ol>",{class:"projects-dialog-project-list"}).appendTo(d).editableList({addButton:!1,height:"auto",scrollOnAdd:!1,addItem:function(o,i,a){var d=$("<div></div>",{class:"projects-dialog-project-list-entry"}).appendTo(o);if($('<span class="projects-dialog-project-list-entry-icon"><i class="fa fa-archive"></i></span>').appendTo(d),$('<span class="projects-dialog-project-list-entry-name" style=""></span>').text(a.name).appendTo(d),!n||n.name!==a.name||(d.addClass("projects-list-entry-current"),$('<span class="projects-dialog-project-list-entry-current">'+RED._("projects.create-project-list.current")+"</span>").appendTo(d),!1!==e.canSelectActive)){d.addClass("selectable");var p=$('<div class="projects-dialog-project-list-entry-tools"></div>').appendTo(d);$('<button class="editor-button editor-button-small" style="float: right;"><i class="fa fa-trash"></i></button>').appendTo(p).click(function(t){t.stopPropagation(),t.preventDefault(),function(e,t,n){var o=$("<div>").css({background:"white",position:"absolute",top:0,right:0,bottom:0,left:"100%",overflow:"hidden",padding:"5px 20px",transition:"left 0.4s",whitespace:"nowrap",width:"1000px"}).click(function(e){e.stopPropagation()}).appendTo(e);$("<span>").css({lineHeight:"40px"}).text(RED._("projects.delete.confirm")).appendTo(o),$('<button style="margin-left:20px" class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(o).click(function(e){e.stopPropagation(),o.remove(),n(!0)}),$('<button style="margin-left:20px" class="editor-button primary">'+RED._("common.label.delete")+"</button>").appendTo(o).click(function(e){e.stopPropagation(),o.remove(),l({url:"projects/"+t,type:"DELETE",responses:{200:function(e){n(!1)},400:{unexpected_error:function(e){o.remove(),n(!0)}}}})}),setTimeout(function(){o.css("left",0)},50)}(o,a.name,function(t){t||o.fadeOut(300,function(){c.editableList("removeItem",a),e.delete&&e.delete(a)})})}),o.click(function(n){$(".projects-dialog-project-list-entry").removeClass("selected"),d.addClass("selected"),t=o.parent(),e.select&&e.select(a),r(),s.focus()}),e.dblclick&&o.dblclick(function(t){t.preventDefault(),e.dblclick(a)})}},filter:function(e){return""===i||-1!==e.name.toLowerCase().indexOf(i)}});return $.getJSON("projects",function(e){e.projects.forEach(function(e){c.editableList("addItem",{name:e})})}),o}({canSelectActive:!1,dblclick:function(e){g=e,$("#projects-dialog-create").click()},select:function(e){g=e,y()},delete:function(e){o&&delete o[e.name],g=null,y()}}).appendTo(b),b=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty projects-dialog-screen-create-row-clone"></div>').appendTo(m),$('<label for="projects-dialog-screen-create-project-name">'+RED._("projects.create.project-name")+"</label>").appendTo(b);var E=$('<div style="position:relative;"></div>').appendTo(b);t=$('<input id="projects-dialog-screen-create-project-name" type="text"></input>').appendTo(E);var k,R,T=$('<div class="projects-dialog-screen-input-status"></div>').appendTo(E),_=!1,j="",C="";t.on("change keyup paste",function(){if(_=t.val()!==j,R)clearTimeout(R);else if(_&&(T.empty(),$('<img src="red/images/spin.svg"/>').appendTo(T),""===t.val()))return void y();R=setTimeout(function(){y(),R=null},300)}),u=$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.create.must-contain")+"</small></label>").appendTo(b).find("small"),b=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(m),$('<label for="projects-dialog-screen-create-project-desc">'+RED._("projects.create.desc")+"</label>").appendTo(b),i=$('<input id="projects-dialog-screen-create-project-desc" type="text">').appendTo(b),$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.create.opt")+"</small></label>").appendTo(b),b=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(m),$('<label for="projects-dialog-screen-create-project-file">'+RED._("projects.create.flow-file")+"</label>").appendTo(b),E=$('<div style="position:relative;"></div>').appendTo(b),a=$('<input id="projects-dialog-screen-create-project-file" type="text">').val("flow.json").on("change keyup paste",y).appendTo(E),$('<div class="projects-dialog-screen-input-status"></div>').appendTo(E),$('<label class="projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(b),b=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(m),$("<label>"+RED._("projects.create.credentials")+"</label>").appendTo(b);var S=$('<div style="width: 550px">').appendTo(b),O=$('<div style="min-height:150px; box-sizing: border-box; float: right; vertical-align: top; width: 331px; margin-left: -1px; padding: 15px; margin-top: -15px; border: 1px solid #ccc; border-radius: 3px; display: inline-block">').appendTo(S),I=$('<div style="vertical-align: top; width: 220px; display: inline-block">').appendTo(S),N=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid #ccc;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: white;"></div>').appendTo(I);$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" checked style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="enabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-lock"></i> <span style="vertical-align: middle;">'+RED._("projects.create.enable-encryption")+"</span></label>").appendTo(N);var P=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid white;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: #ccc; "></div>').appendTo(I);$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="disabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-unlock"></i> <span style="vertical-align: middle;">'+RED._("projects.create.disable-encryption")+"</span></label>").appendTo(P),I.find("input[name=projects-encryption-type]").click(function(e){var t,n;"enabled"===$(this).val()?(t=N,n=P,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&d.focus()):(n=N,t=P,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.css({borderColor:"#ccc",borderRightColor:"white"}),n.css({borderColor:"white",borderRightColor:"#ccc"}),y()}),b=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(O),$('<label class="projects-edit-form-inline-label">'+RED._("projects.create.encryption-key")+"</label>").appendTo(b),(d=$('<input type="password"></input>').appendTo(b)).on("change keyup paste",y),$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.create.desc0")+"</small></label>").appendTo(b),b=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(O),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.create.desc1")+"</div>").appendTo(b),O.find("input[name=projects-encryption-key]").click(function(){var e=$(this).val();d.attr("disabled","default"===e),"custom"===e&&d.focus(),y()}),b=$('<div class="hide form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(m),$('<label for="projects-dialog-screen-create-project-repo">'+RED._("projects.create.git-url")+"</label>").appendTo(b),r=$('<input id="projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(b),$('<label id="projects-dialog-screen-create-project-repo-label" class="projects-edit-form-sublabel"><small>'+RED._("projects.create.protocols")+"</small></label>").appendTo(b);var L=!1,z="";r.on("change keyup paste",function(){L=!0;var e=$(this).val();z!==e&&$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.protocols")),z=e;var n=/\/([^/]+?)(?:\.git)?$/.exec(e);if(n){var o=t.val();""!==o&&o!==C||(C=n[1],t.val(C),t.change())}y()});var A=$('<div class="hide projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').hide().appendTo(m);b=$('<div class="form-row projects-dialog-screen-create-row-auth-error"></div>').hide().appendTo(A),$('<div><i class="fa fa-warning"></i> '+RED._("projects.create.auth-failed")+"</div>").appendTo(b),b=$('<div class="hide form-row projects-dialog-screen-create-row-creds"></div>').hide().appendTo(A);E=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(b);$('<label for="projects-dialog-screen-create-project-repo-user">'+RED._("projects.create.username")+"</label>").appendTo(E),c=$('<input id="projects-dialog-screen-create-project-repo-user" type="text"></input>').appendTo(E),E=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(b),$('<label for="projects-dialog-screen-create-project-repo-pass">'+RED._("projects.create.password")+"</label>").appendTo(E),p=$('<input id="projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(E),b=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').hide().appendTo(A),E=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(b),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.ssh-key")+"</label>").appendTo(E),f=$("<select>",{style:"width: 100%"}).appendTo(E),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){f.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(f.addClass("input-error"),f.attr("disabled",!0),M.show()):(f.removeClass("input-error"),f.attr("disabled",!1),M.hide())}),E=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(b),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.passphrase")+"</label>").appendTo(E),h=$('<input id="projects-dialog-screen-create-project-repo-passphrase" type="password"></input>').appendTo(E),E=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').appendTo(A);var M=$('<div class="projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(E);switch($('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.create.desc2")+"</div>").appendTo(M),E=$('<div style="text-align: center">').appendTo(M),$('<button class="editor-button">'+RED._("projects.create.add-ssh-key")+"</button>").appendTo(E).click(function(e){e.preventDefault(),$("#projects-dialog-cancel").click(),RED.userSettings.show("gitconfig"),setTimeout(function(){$("#user-settings-gitconfig-add-key").click()},500)}),b=$('<div class="hide form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(m),$("<label>"+RED._("projects.create.credentials-encryption-key")+"</label>").appendTo(b),s=$('<input type="password"></input>').appendTo(b),e.screen||"empty"){case"empty":x.click();break;case"open":w.click();break;case"clone":D.click()}return setTimeout(function(){"open"!==(e.screen||"empty")?t.focus():$("#projects-dialog-project-list-search").focus()},50),m},buttons:function(n){var u;switch(n.screen||"empty"){case"open":u=RED._("projects.create.open");break;case"empty":u=RED._("projects.create.create");break;case"clone":u=RED._("projects.create.clone")}return[{id:"projects-dialog-cancel",text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{id:"projects-dialog-create",text:u,class:"primary disabled",disabled:!0,click:function(){var n=$(".projects-dialog-screen-create-type.selected").data("type"),u={name:t.val()};if("empty"===n){u.summary=i.val(),u.files={flow:a.val()};var v=$("input[name=projects-encryption-type]:checked").val();u.credentialSecret="enabled"===v&&d.val()}else if("copy"===n)u.copy=(void 0).name;else if("clone"===n){u.credentialSecret=s.val();var b=r.val();if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(b)){var m=f.val();if(!m)return void console.log(RED._("projects.create.cant-get-ssh-key-path"));u.git={remotes:{origin:{url:b,keyFile:m,passphrase:h.val()}}}}else u.git={remotes:{origin:{url:b,username:c.val(),password:p.val()}}}}else if("open"===n)return function(e,t){RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(e),l({url:"projects/"+e,type:"PUT",responses:{200:function(e){t(null,e)},400:{"*":t}}},{active:!0}).then(function(){RED.events.emit("project:change",{name:e})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}(g.name,function(t,n){e.dialog("close"),t&&"credentials_load_failed"!==t.code&&console.log(RED._("projects.create.unexpected_error"),t)});$(".projects-dialog-screen-create-row-auth-error").hide(),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.protocols")),c.removeClass("input-error"),p.removeClass("input-error"),f.removeClass("input-error"),h.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(u.name),l({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(t){e.dialog("close")},400:{project_exists:function(e){console.log(RED._("projects.create.already-exists-2"))},git_error:function(e){console.log(RED._("projects.create.git-error"),e)},git_connection_failed:function(e){r.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.con-failed"))},git_not_a_repository:function(e){r.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.not-git"))},git_repository_not_found:function(e){r.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.no-resource"))},git_auth_failed:function(e){$(".projects-dialog-screen-create-row-auth-error").show(),c.addClass("input-error"),p.addClass("input-error"),f.addClass("input-error"),h.addClass("input-error")},missing_flow_file:function(t){e.dialog("close")},missing_package_file:function(t){e.dialog("close")},project_empty:function(t){e.dialog("close")},credentials_load_failed:function(t){e.dialog("close")},"*":function(t){o(t),$(e).dialog("close")}}}},u).then(function(){RED.events.emit("project:change",{name:name})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}}}()}}function s(n,o){e||RED.projects.init();var a=i[n],s=a.content(o||{});t.empty();var r=a.buttons;"function"==typeof r&&(r=r(o||{})),e.dialog("option","buttons",r),t.append(s),e.dialog("option","title",a.title||""),e.dialog("open"),e.dialog({position:{my:"center top",at:"center top+10%",of:window}})}function r(e){if(RED.nodes.dirty())var t=RED._("projects.require-clean.confirm"),n=RED.notify(t,{type:"info",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){n.close(),e(!0)}},{text:RED._("common.label.cont"),click:function(){n.close(),e(!1)}}]})}function l(e,t){var o,i;if(e.requireCleanWorkspace&&RED.nodes.dirty())return r(function(n){n?e.cancel&&(e.cancel(),i&&i()):(delete e.requireCleanWorkspace,l(e,t).then(function(){o&&o()}).always(function(){i&&i()}))}),{then:function(e){return o=e,{always:function(e){i=e}}},always:function(e){i=e}};var a,s,d=Date.now();return $(".projects-dialog-spinner").show(),$("#projects-dialog").parent().find(".ui-dialog-buttonset").children().css("visibility","hidden"),t&&(e.data=JSON.stringify(t),e.contentType="application/json; charset=utf-8"),$.ajax(e).done(function(t,n,o){e.responses&&e.responses[200]&&(a=e.responses[200],s=t)}).fail(function(o,i,r){if(e.responses&&e.responses[o.status]){var d=e.responses[o.status];if("function"==typeof d)return a=d,void(s={error:d.statusText});if(!1!==e.handleAuthFail&&"git_auth_failed"===o.responseJSON.code){var c=n.git.remotes[o.responseJSON.remote||e.remote||"origin"].fetch,p=$('<div><div class="form-row">'+RED._("projects.send-req.auth-req")+':</div><div class="form-row"><div style="margin-left: 20px;">'+c+"</div></div></div>"),u=!1;if(/^https?:\/\//.test(c))$('<div class="form-row"><label for="projects-user-auth-username">'+RED._("projects.send-req.username")+'</label><input id="projects-user-auth-username" type="text"></input></div><div class="form-row"><label for=projects-user-auth-password">'+RED._("projects.send-req.password")+'</label><input id="projects-user-auth-password" type="password"></input></div>').appendTo(p);else if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(c)){u=!0;var f=$('<div class="form-row"></div>').appendTo(p);$('<label for="projects-user-auth-key">SSH Key</label>').appendTo(f);var h=$('<select id="projects-user-auth-key">').width("70%").appendTo(f);$.getJSON("settings/user/keys",function(e){e.keys.forEach(function(e){h.append($("<option></option>").val(e.name).text(e.name)),0})}),f=$('<div class="form-row"></div>').appendTo(p),$('<label for="projects-user-auth-passphrase">'+RED._("projects.send-req.passphrase")+"</label>").appendTo(f),$('<input id="projects-user-auth-passphrase" type="password"></input>').appendTo(f)}var g=RED.notify(p,{type:"error",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){g.close()}},{text:'<span><i class="fa fa-refresh"></i> '+RED._("projects.send-req.retry")+"</span>",click:function(){t=t||{};var i={};u?(i.keyFile=$("#projects-user-auth-key").val(),i.passphrase=$("#projects-user-auth-passphrase").val()):(i.username=$("#projects-user-auth-username").val(),i.password=$("#projects-user-auth-password").val());var a=function(n){n?(console.log(RED._("projects.send-req.update-failed")),console.log(n)):(l(e,t),g.close())};l({url:"projects/"+n.name+"/remotes/"+(o.responseJSON.remote||e.remote||"origin"),type:"PUT",responses:{0:function(e){a(e)},200:function(e){a(null)},400:{unexpected_error:function(e){a(e)}}}},{auth:i})}}]});return}if(d[o.responseJSON.code])return a=d[o.responseJSON.code],void(s=o.responseJSON);if(d["*"])return a=d["*"],void(s=o.responseJSON)}console.log(d),console.log(RED._("projects.send-req.unhandled")+":"),console.log(o),console.log(i),console.log(r)}).always(function(){var e=Date.now()-d;e=Math.max(0,500-e),setTimeout(function(){$(".projects-dialog-spinner").hide(),$("#projects-dialog").parent().find(".ui-dialog-buttonset").children().css("visibility",""),a&&a(s)},e)})}function d(e){var t,n="",i=[],a="",s=$('<div class="projects-branch-list">').appendTo(e.container),r=$('<input type="text">').attr("placeholder",e.placeholder).appendTo(s).searchBox({delay:200,change:function(){n=$(this).val(),/(\.\.|\/\.|[?*[~^: \\]|\/\/|\/.$|\/$)/.test(n)?(t.hasClass("input-error")||(t.addClass("input-error"),t.find("i").addClass("fa-warning").removeClass("fa-code-fork")),t.find("span").text(RED._("projects.create-branch-list.invalid")+": "+a+n)):(t.hasClass("input-error")&&(t.removeClass("input-error"),t.find("i").removeClass("fa-warning").addClass("fa-code-fork")),t.find(".sidebar-version-control-branch-list-entry-create-name").text(a+n)),d.editableList("filter")}}),d=$("<ol>",{style:"height: 130px;"}).appendTo(s);return d.editableList({addButton:!1,scrollOnAdd:!1,addItem:function(n,o,i){var a=$('<div class="sidebar-version-control-branch-list-entry">').appendTo(n);i.hasOwnProperty("commit")?($('<i class="fa fa-code-fork"></i>').appendTo(a),$("<span>").text(i.name).appendTo(a),i.current&&(a.addClass("selected"),$('<span class="current"></span>').text(e.currentLabel||RED._("projects.create-branch-list.current")).appendTo(a))):(t=a,$('<i class="fa fa-code-fork"></i>').appendTo(a),$("<span>").text(RED._("projects.create-branch-list.create")+":").appendTo(a),$('<div class="sidebar-version-control-branch-list-entry-create-name" style="margin-left: 10px;">').text(i.name).appendTo(a)),a.click(function(t){if(t.preventDefault(),!$(this).hasClass("input-error")){var n={};i.hasOwnProperty("commit")?($(this).hasClass("selected")&&(n.current=!0),n.name=i.name):(n.name=r.val(),n.create=!0,e.remote&&(n.name=e.remote()+"/"+n.name)),e.onselect&&e.onselect(n)}})},filter:function(e){var t=!e.hasOwnProperty("commit");return t&&""!==n&&-1===i.indexOf(a+n)||!t&&-1!==e.name.indexOf(n)}}),{refresh:function(t){r.searchBox("value",""),d.editableList("empty");var n=Date.now(),p=c(s).addClass("projects-dialog-spinner-contain");a=e.remote?e.remote()+"/":"",l({url:t,type:"GET",responses:{0:function(e){console.log(e)},200:function(e){i=e.branches,e.branches.forEach(function(e){d.editableList("addItem",e)}),d.editableList("addItem",{}),setTimeout(function(){p.remove()},Math.max(300-(Date.now()-n),0))},400:{git_connection_failed:function(e){RED.notify(e.message,"error")},git_not_a_repository:function(e){RED.notify(e.message,"error")},git_repository_not_found:function(e){RED.notify(e.message,"error")},unexpected_error:function(e){o(e)}}}})},filter:function(){d.editableList("filter")},focus:function(){r.focus()}}}function c(e){return $('<div class="projects-dialog-spinner"><img src="red/images/spin.svg"/></div>').appendTo(e)}function p(){createProjectOptions={},n?s("create",{screen:"empty"}):s("welcome")}return{init:function(){e=$('<div id="projects-dialog" class="hide kumologica-core-dialog projects-edit-form"><form class="form-horizontal"></form><div class="projects-dialog-spinner hide"><img src="red/images/spin.svg"/></div></div>').appendTo("body").dialog({modal:!0,autoOpen:!1,width:600,resizable:!1,open:function(e){$(this).parent().find(".ui-dialog-titlebar-close").hide()},close:function(e){}}),t=e.find("form"),RED.actions.add("core:new-project",RED.projects.newProject),RED.actions.add("core:open-project",RED.projects.selectProject),RED.actions.add("core:show-project-settings",RED.projects.settings.show);var n={sendRequest:l,createBranchList:d,addSpinnerOverlay:c,reportUnexpectedError:o};RED.projects.settings.init(n),RED.projects.userSettings.init(n),RED.sidebar.versionControl.init(n),a()},showStartup:function(){RED.user.hasPermission("projects.write")?s("welcome"):RED.notify(RED._("user.errors.notAuthorized"),"error")},newProject:function(){if(RED.user.hasPermission("projects.write"))return RED.nodes.dirty()?r(function(e){e||p()}):void p();RED.notify(RED._("user.errors.notAuthorized"),"error")},selectProject:function(){if(RED.user.hasPermission("projects.write"))return RED.nodes.dirty()?r(function(e){e||s("create",{screen:"open"})}):void s("create",{screen:"open"});RED.notify(RED._("user.errors.notAuthorized"),"error")},showCredentialsPrompt:function(){RED.user.hasPermission("projects.write")?RED.projects.settings.show("settings"):RED.notify(RED._("user.errors.notAuthorized"),"error")},showFilesPrompt:function(){RED.user.hasPermission("projects.write")?(RED.projects.settings.show("settings"),setTimeout(function(){$("#project-settings-tab-settings-file-edit").click()},200)):RED.notify(RED._("user.errors.notAuthorized"),"error")},showProjectDependencies:function(){RED.projects.settings.show("deps")},createDefaultFileSet:function(){if(!n)throw new Error(RED._("projects.create-default-file-set.no-active"));if(!n.empty)throw new Error(RED._("projects.create-default-file-set.no-empty"));RED.user.hasPermission("projects.write")?(createProjectOptions={},s("default-files",{existingProject:!0})):RED.notify(RED._("user.errors.notAuthorized"),"error")},createDefaultPackageFile:function(){RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(n.name),l({url:"projects/"+n.name,type:"PUT",requireCleanWorkspace:!0,handleAuthFail:!1,responses:{200:function(e){},400:{git_error:function(e){console.log(RED._("projects.create-default-file-set.git-error"),e)},missing_flow_file:function(t){$(e).dialog("close")},"*":function(t){o(t),$(e).dialog("close")}}}},{initialise:!0}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})},refresh:function(e){$.getJSON("projects",function(t){t.active?$.getJSON("projects/"+t.active,function(t){n=t,RED.sidebar.versionControl.refresh(!0),e&&e(n)}):e&&e(null)})},editProject:function(){RED.projects.settings.show()},getActiveProject:function(){return n}}}(),RED.projects.settings=function(){var e,t,n=700,o=!1,i=[];function a(e){i.push(e)}function s(e,t){var n,o;t.empty(),n=e.description?marked(e.description):'<span class="node-info-none">No description available</span>',(o=$('<span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(n)+'">'+n+"</span>"),$(o).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")}),o).appendTo(t).find(".bidiAware").contents().filter(function(){return 3===this.nodeType&&""!==this.textContent.trim()}).wrap("<span></span>")}function r(e,t){t.empty(),e?t.text(e).removeClass("node-info-node"):t.text(RED._("sidebar.project.projectSettings.noSummaryAvailable")).addClass("node-info-none")}function l(e){var n=$('<div id="project-settings-tab-main" class="project-settings-tab-pane node-help"></div>');$("<h1>").text(e.name).appendTo(n);var o=$('<div style="position: relative">').appendTo(n),i=$("<div></div>",{style:"color: #999"}).appendTo(o);r(e.summary,i),RED.user.hasPermission("projects.write")&&$('<button class="editor-button editor-button-small" style="float: right;">'+RED._("sidebar.project.editDescription")+"</button>").prependTo(o).click(function(n){n.preventDefault(),function e(n,o,i){var a=i.prev();a.hide(),i.empty();var s=$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').appendTo(i),l=$('<input type="text" style="width: calc(100% - 150px); margin-right: 10px;">').val(o||"").appendTo(i);$('<button class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(s).click(function(e){e.preventDefault(),r(n.summary,i),a.show()}),$('<button class="editor-button">'+RED._("common.label.save")+"</button>").appendTo(s).click(function(s){s.preventDefault();var d=l.val();r(d,i);var c=t.addSpinnerOverlay(i),p=function(t,s){if(t)return c.remove(),e(n,o,i);n.summary=d,c.remove(),r(n.summary,i),a.show()};t.sendRequest({url:"projects/"+n.name,type:"PUT",responses:{0:function(e){p(e)},200:function(e){RED.sidebar.versionControl.refresh(!0),p(null)},400:{"*":function(e){t.reportUnexpectedError(e),p(e)}}}},{summary:d})})}(e,e.summary,i)}),$("<hr>").appendTo(n);var a=$('<div class="node-help" style="position: relative"></div>').appendTo(n),l=$("<div>",{style:"min-height: 200px"}).appendTo(a);return s(e,l),RED.user.hasPermission("projects.write")&&$('<button class="editor-button editor-button-small" style="float: right;">'+RED._("sidebar.project.editReadme")+"</button>").prependTo(a).click(function(n){n.preventDefault(),function e(n,o){RED.editor.editMarkdown({title:RED._("sidebar.project.editDescription"),header:$('<span><i class="fa fa-book"></i> README.md</span>'),value:n.description,complete:function(i){o.empty();var a=t.addSpinnerOverlay(o),r=function(t,a){if(t)return e(n,o);n.description=i,s(n,o)};t.sendRequest({url:"projects/"+n.name,type:"PUT",responses:{0:function(e){r(e)},200:function(e){r(null),RED.sidebar.versionControl.refresh(!0)},400:{"*":function(e){t.reportUnexpectedError(e),r(e)}}}},{description:i}).always(function(){a.remove()})}})}(e,l)}),n}function d(e,t){t.editableList("empty");var n=0;for(var o in v)v.hasOwnProperty(o)&&(t.editableList("addItem",{id:v[o].module,version:v[o].version,count:v[o].count,known:e.dependencies.hasOwnProperty(o),installed:!0}),n++,0===v[o].count&&0,e.dependencies.hasOwnProperty(o)||0);if(e.dependencies)for(var o in e.dependencies)if(e.dependencies.hasOwnProperty(o)&&!v.hasOwnProperty(o)){var i=!!RED.nodes.registry.getModule(o);t.editableList("addItem",{id:o,version:e.dependencies[o],count:0,known:!0,installed:i}),n++,i?0:0}0===n&&t.editableList("addItem",{index:0,label:RED._("sidebar.project.projectSettings.none")})}function c(e,n,o,i){var a=RED.projects.getActiveProject(),s=t.addSpinnerOverlay(n).addClass("projects-dialog-spinner-contain"),r=function(e,t){if(s.remove(),e)return i(e);a.dependencies=o,RED.sidebar.versionControl.refresh(!0),i()};t.sendRequest({url:"projects/"+a.name,type:"PUT",responses:{0:function(e){r(e)},200:function(e){RED.sidebar.versionControl.refresh(!0),r(null)},400:{"*":function(e){r(e)}}}},{dependencies:o})}function p(e){var t=$('<div id="project-settings-tab-deps" class="project-settings-tab-pane node-help"></div>');RED.user.hasPermission("projects.write")&&$('<button class="editor-button editor-button-small" style="margin-top:10px;float: right;">'+RED._("sidebar.project.projectSettings.edit")+"</button>").appendTo(t).click(function(o){o.preventDefault(),function e(t,n,o,i){var a=n||JSON.stringify(t.dependencies||{},"",4);"{}"===a&&(a="{\n\n}"),RED.editor.editJSON({title:RED._("sidebar.project.editDependencies"),value:a,requireValid:!0,complete:function(n){try{var a=JSON.parse(n);c(0,o,a,function(s){if(s)return e(t,n,o,i);t.dependencies=a,d(t,i)})}catch(a){e(t,n,o,i)}}})}(e,null,t,n)});var n=$("<ol>",{style:"position: absolute;top: 60px;bottom: 20px;left: 20px;right: 20px;"}).appendTo(t);return n.editableList({addButton:!1,addItem:function(t,o,i){var a=$("<div>",{class:"palette-module-header"}).appendTo(t);if(i.label)0===i.index?a.addClass("red-ui-search-empty"):t.parent().addClass("palette-module-section"),a.text(i.label);else{a.addClass("palette-module-header"),i.installed?0===i.count?a.addClass("palette-module-unused"):i.known||a.addClass("palette-module-unknown"):a.addClass("palette-module-not-installed"),i.element=a;var s=$('<div class="palette-module-meta palette-module-name"></div>').appendTo(a),r="fa-cube";i.installed||(r="fa-warning");var l=$('<i class="fa '+r+'"></i>').appendTo(s);i.icon=l,$("<span>").text(i.id).appendTo(s);var d=$('<div class="palette-module-meta palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(a);$("<span>").text(i.version).appendTo(d);d=$('<div class="palette-module-meta"></div>').appendTo(a);var p=$('<div class="palette-module-button-group"></div>').appendTo(d);RED.user.hasPermission("projects.write")&&(i.installed||!1===RED.settings.theme("palette.editable")?i.known&&0===i.count?$('<a href="#" class="editor-button editor-button-small">'+RED._("sidebar.project.projectSettings.removeFromProject")+"</a>").appendTo(p).click(function(o){o.preventDefault();var a=$.extend(!0,{},e.dependencies);delete a[i.id],c(0,t,a,function(e){e?console.log(e):t.fadeOut(200,function(){n.editableList("removeItem",i)})})}):i.known||$('<a href="#" class="editor-button editor-button-small">'+RED._("sidebar.project.projectSettings.addToProject")+"</a>").appendTo(p).click(function(n){n.preventDefault();var o=$.extend(!0,{},e.dependencies);o[i.id]=v[i.id].version,c(0,t,o,function(e){e?console.log(e):(p.remove(),a.removeClass("palette-module-unknown"))})}):$('<a href="#" class="editor-button editor-button-small">'+RED._("sidebar.project.projectSettings.install")+"</a>").appendTo(p).click(function(e){e.preventDefault(),RED.palette.editor.install(i,t,function(e){if(!e){i.installed=!0;RED.utils.addSpinnerOverlay(t,!0);setTimeout(function(){n.editableList("removeItem",i),v={},RED.nodes.eachNode(g),RED.nodes.eachConfig(g),v.hasOwnProperty(i.id)?i.count=v[i.id].count:i.count=0,n.editableList("addItem",i)},500)}})}))}},sort:function(e,t){return e.id.localeCompare(t.id)}}),d(e,n),t}function u(e,n,o,i,a){var s=$('<div class="project-file-listing-container"></div>',{style:"position: relative; min-height: 175px; height: 175px;"}).hide().appendTo(e),r=t.addSpinnerOverlay(s);return $.getJSON("projects/"+n.name+"/files",function(e){var t=Object.keys(e),n={};(t=t.filter(function(t){return!e[t].status||!/D/.test(e[t].status)})).sort(),t.forEach(function(e){e.split("/").reduce(function(e,t,n,o){if(t)return n<o.length-1?e[t]=e[t]||{}:e[t]=!0,e[t]},n)});var l=function(e,t,n){var o={name:e||"/",path:n+(n?"/":"")+e};return!0===t?(o.type="f",o):(o.type="d",o.children=[],o.path=o.path,Object.keys(t).forEach(function(e){o.children.push(l(e,t[e],o.path))}),o.children.sort(function(e,t){return e.hasOwnProperty("children")&&!t.hasOwnProperty("children")?-1:!e.hasOwnProperty("children")&&t.hasOwnProperty("children")?1:e.name.localeCompare(t.name)}),o)};n=l("",n,"");!function e(t,n,o,i,a,s){s=s||"";var r=$("<ol>",{class:"projects-dialog-file-list",style:s}).appendTo(t).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(t,n,s){var r=$("<div></div>",{class:"projects-dialog-file-list-entry"}).appendTo(t);if(s.children){if($('<span class="projects-dialog-file-list-entry-folder"><i class="fa fa-angle-right"></i> <i class="fa fa-folder-o"></i></span>').appendTo(r),s.children.length>0){var l=$("<div></div>",{style:"padding-left: 20px;"}).appendTo(t);0===o.indexOf(s.path+"/")?r.addClass("expanded"):l.hide(),e(l,s.children,o,i,a),r.addClass("selectable"),r.click(function(e){$(this).hasClass("expanded")?($(this).removeClass("expanded"),l.slideUp(200)):($(this).addClass("expanded"),l.slideDown(200))})}}else{var d="fa-file-o";/\.json$/i.test(s.name)?d="fa-file-code-o":/\.md$/i.test(s.name)?d="fa-book":/^\.git/i.test(s.name)&&(d="fa-code-fork",r.addClass("projects-dialog-file-list-entry-file-type-git")),$('<span class="projects-dialog-file-list-entry-file"> <i class="fa '+d+'"></i></span>').appendTo(r),i(s)?(r.addClass("selectable"),s.path===o&&r.addClass("selected"),r.click(function(e){$(".projects-dialog-file-list-entry.selected").removeClass("selected"),$(this).addClass("selected"),a(s.path,!0)}),r.dblclick(function(e){e.preventDefault(),a(s.path,!0)})):r.addClass("unselectable")}$('<span class="projects-dialog-file-list-entry-name" style=""></span>').text(s.name).appendTo(r)}});s||r.parent().css("overflow-y","");n.forEach(function(e){r.editableList("addItem",e)})}(s,n.children,o,i,a,"height: 175px"),r.remove()}),s}function f(e,n){$("<h3></h3>").text(RED._("sidebar.project.projectSettings.versionControl")).appendTo(n),function(e,n){var o=$('<div class="user-settings-section"></div>').appendTo(n);$("<h4></h4>").text(RED._("sidebar.project.projectSettings.branches")).appendTo(o);var i=$('<div class="user-settings-row projects-dialog-list"></div>').appendTo(o),a=$("<ol>").appendTo(i).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(n,o,i){var s=$('<div class="projects-dialog-list-entry">').appendTo(n);if(i.empty)return s.addClass("red-ui-search-empty"),void s.text(RED._("sidebar.project.projectSettings.noBranches"));i.current&&s.addClass("current"),$('<span class="entry-icon"><i class="fa fa-code-fork"></i></span>').appendTo(s);var r=$("<span>").appendTo(s),l=$("<div>").appendTo(r);if($('<span class="entry-name">').text(i.name).appendTo(l),i.commit&&$('<span class="entry-detail">').text(i.commit.sha).appendTo(l),i.remote){var d=$("<div>").appendTo(r);$('<span class="entry-detail entry-remote-name">').text(i.remote||"").appendTo(d),i.status.ahead+i.status.behind>0&&$('<span class="entry-detail"><i class="fa fa-long-arrow-up"></i> <span>'+i.status.ahead+'</span> <i class="fa fa-long-arrow-down"></i> <span>'+i.status.behind+"</span></span>").appendTo(d)}if(!i.current){var c=$('<span class="entry-tools">').appendTo(s);$('<button class="editor-button editor-button-small"><i class="fa fa-trash"></i></button>').appendTo(c).click(function(o){o.preventDefault();var s=t.addSpinnerOverlay(n).addClass("projects-dialog-spinner-contain"),r=RED.notify(RED._("sidebar.project.projectSettings.deleteConfirm",{name:i.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){s.remove(),r.close()}},{text:"Delete branch",click:function(){r.close();var o={url:"projects/"+e.name+"/branches/"+i.name,type:"DELETE",responses:{200:function(e){n.fadeOut(200,function(){a.editableList("removeItem",i),s.remove()})},400:{git_delete_branch_unmerged:function(e){r=RED.notify(RED._("sidebar.project.projectSettings.unmergedConfirm",{name:i.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){s.remove(),r.close()}},{text:RED._("sidebar.project.projectSettings.deleteUnmergedBranch"),click:function(){o.url+="?force=true",r.close(),t.sendRequest(o)}}]})},"*":function(e){t.reportUnexpectedError(e),s.remove()}}}};t.sendRequest(o)}}]})})}}});$.getJSON("projects/"+e.name+"/branches",function(e){e.branches&&(e.branches.length>0?(e.branches.sort(function(e,t){return e.current?-1:t.current?1:e.name.localeCompare(t.name)}),e.branches.forEach(function(e){a.editableList("addItem",e)})):a.editableList("addItem",{empty:!0}))})}(e,n);var o=$('<div class="user-settings-section"></div>').appendTo(n),i=$("<h4></h4>").text(RED._("sidebar.project.projectSettings.gitRemotes")).appendTo(o),a=$('<button class="editor-button editor-button-small" style="float: right; margin-right: 10px;">'+RED._("sidebar.project.projectSettings.addRemote")+"</button>").appendTo(i).click(function(e){a.attr("disabled",!0),d.slideDown(200,function(){d[0].scrollIntoView(),r?(g.val("origin"),v.focus()):g.focus(),u()})}),s={empty:!0},r=!0,l=$('<div class="user-settings-row"></div>').appendTo(o),d=$('<div class="projects-dialog-list-dialog"></div>').hide().appendTo(l);l=$('<div class="user-settings-row projects-dialog-list"></div>').appendTo(o);var c=$("<ol>").appendTo(l);c.editableList({addButton:!1,height:"auto",addItem:function(n,o,i){var a=$('<div class="projects-dialog-list-entry">').appendTo(n);if(i.empty)return a.addClass("red-ui-search-empty"),void a.text(RED._("sidebar.project.projectSettings.noRemotes"));$('<span class="entry-icon"><i class="fa fa-globe"></i></span>').appendTo(a);var l=$("<span>").appendTo(a);$('<div class="entry-name">').text(i.name).appendTo(l),i.urls.fetch===i.urls.push?$('<div class="entry-detail">').text(i.urls.fetch).appendTo(l):($('<div class="entry-detail">').text("fetch: "+i.urls.fetch).appendTo(l),$('<div class="entry-detail">').text("push: "+i.urls.push).appendTo(l));var d=$('<span class="entry-tools">').appendTo(a);$('<button class="editor-button editor-button-small"><i class="fa fa-trash"></i></button>').appendTo(d).click(function(o){o.preventDefault();var a=t.addSpinnerOverlay(n).addClass("projects-dialog-spinner-contain"),l=RED.notify(RED._("sidebar.project.projectSettings.deleteRemoteConfrim",{name:i.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){a.remove(),l.close()}},{text:RED._("sidebar.project.projectSettings.deleteRemote"),click:function(){l.close(),e.git.branches.remote&&0===e.git.branches.remote.indexOf(i.name+"/")&&delete e.git.branches.remote,e.git.branches.remoteAlt&&0===e.git.branches.remoteAlt.indexOf(i.name+"/")&&delete e.git.branches.remoteAlt;var o={url:"projects/"+e.name+"/remotes/"+i.name,type:"DELETE",responses:{200:function(t){n.fadeOut(200,function(){c.editableList("removeItem",i),setTimeout(a.remove,100),0===t.remotes.length?(delete e.git.remotes,r=!0,c.editableList("addItem",s)):(e.git.remotes={},t.remotes.forEach(function(t){var n=t.name;delete t.name,e.git.remotes[n]=t})),delete e.git.branches.remoteAlt,RED.sidebar.versionControl.refresh()})},400:{"*":function(e){t.reportUnexpectedError(e),a.remove()}}}};t.sendRequest(o)}}]})})}});var p,u=function(){var e=/^[a-zA-Z0-9\-_]+$/.test(g.val()),t=v.val(),n=t.length>0&&!/\s/.test(t);/^https?:\/\/[^/]+@/i.test(t)?(b.text(RED._("sidebar.project.projectSettings.urlRule2")),n=!1):b.text(RED._("sidebar.project.projectSettings.urlRule")),w.attr("disabled",!e||!n),g.toggleClass("input-error",f&&!e),v.toggleClass("input-error",h&&!n),p&&(p.close(),p=null)},f=!1,h=!1;$('<div class="projects-dialog-list-dialog-header">').text(RED._("sidebar.project.projectSettings.addRemote2")).appendTo(d),l=$('<div class="user-settings-row"></div>').appendTo(d),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.remoteName")).appendTo(l);var g=$('<input type="text">').appendTo(l).on("change keyup paste",function(){f=!0,u()});$('<label class="projects-edit-form-sublabel"><small>'+RED._("sidebar.project.projectSettings.nameRule")+"</small></label>").appendTo(l).find("small"),l=$('<div class="user-settings-row"></div>').appendTo(d),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.url")).appendTo(l);var v=$('<input type="text">').appendTo(l).on("change keyup paste",function(){h=!0,u()}),b=$('<label class="projects-edit-form-sublabel"><small>'+RED._("sidebar.project.projectSettings.urlRule")+"</small></label>").appendTo(l).find("small"),m=function(){a.attr("disabled",!1),d.hide(),g.val(""),v.val(""),p&&(p.close(),p=null)},y=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(d);$('<button class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(y).click(function(e){e.preventDefault(),m()});var w=$('<button class="editor-button">'+RED._("sidebar.project.projectSettings.addRemote2")+"</button>").appendTo(y).click(function(n){n.preventDefault();var o=t.addSpinnerOverlay(d).addClass("projects-dialog-spinner-contain"),i={name:g.val(),url:v.val()},a=function(e){o.remove(),e||m()};RED.deploy.setDeployInflight(!0),t.sendRequest({url:"projects/"+e.name+"/remotes",type:"POST",responses:{0:function(e){a(e)},200:function(t){e.git.remotes={},t.remotes.forEach(function(t){var n=t.name;delete t.name,e.git.remotes[n]=t}),x(),RED.sidebar.versionControl.refresh(),a()},400:{git_remote_already_exists:function(e){p=RED.popover.create({target:g,direction:"right",size:"small",content:"Remote already exists",autoClose:6e3}).open(),g.addClass("input-error"),a(e)},"*":function(e){t.reportUnexpectedError(e),a(e)}}}},i)}),x=function(){c.editableList("empty");var t=0;if(e.git.hasOwnProperty("remotes"))for(var n in e.git.remotes)e.git.remotes.hasOwnProperty(n)&&(t++,c.editableList("addItem",{name:n,urls:e.git.remotes[n]}));(r=0===t)&&c.editableList("addItem",s)};x()}function h(n){var o=$('<div id="project-settings-tab-settings" class="project-settings-tab-pane node-help"></div>');return function(n,o){var i,a=$("<h3></h3>").text(RED._("sidebar.project.projectSettings.files")).appendTo(o),s=$('<div class="user-settings-section"></div>').appendTo(o);if(RED.user.hasPermission("projects.write"))var r=$('<button type="button" id="project-settings-tab-settings-file-edit" class="editor-button editor-button-small" style="float: right;">'+RED._("sidebar.project.projectSettings.edit")+"</button>").appendTo(a).click(function(e){e.preventDefault(),J.show(),r.hide(),n.files.package||(f.find(".projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.packageCreate")),f.show()),p.show(),y.hide(),x.show(),D.show(),w(),C.addClass("uneditable-input"),$(".user-settings-row-credentials").show(),C.css("height","auto"),N.hide(),S.show()});i=$('<div class="user-settings-row"></div>').appendTo(s),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.package")).appendTo(i);var l=$('<div class="uneditable-input" style="padding:0">').appendTo(i),d=$('<span style="display:inline-block; padding: 6px">').text(n.files.package||"package.json").appendTo(l),c=$('<input type="hidden">').val(n.files.package||"package.json").appendTo(l),p=$('<button type="button" class="editor-button toggle single" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 36px; height: 34px; position: absolute; top: -1px; right: -1px;"><i class="fa fa-folder-open-o"></i></button>').hide().appendTo(l).click(function(e){if($(this).hasClass("selected"))$(this).removeClass("selected"),l.find(".project-file-listing-container").slideUp(200,function(){$(this).remove(),l.css("height","")}),l.css("color","");else{$(this).addClass("selected"),l.css("color","inherit");var t=u(l,n,c.val(),function(e){return e.children||/package\.json$/.test(e.path)},function(e,t){if(e){c.val(e),d.text(e);var n=e.substring(0,e.length-12);b.text(n),R.text(n),w(),f.hide()}t&&$(p).click(),j()});l.css("height","auto"),setTimeout(function(){t.slideDown(200)},50)}});RED.popover.tooltip(p,RED._("sidebar.project.projectSettings.selectFile"));var f=$('<label style="margin-left: 110px" class="projects-edit-form-sublabel"><small><span class="form-warning"><i class="fa fa-warning"></i> <span class="projects-edit-form-sublabel-text"></span></small></label>').appendTo(i).hide();n.files.package||(f.find(".projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.fileNotExist")),f.show());var h=n.files.package||"package.json",g=h.substring(0,h.length-12);i=$('<div class="user-settings-row"></div>').appendTo(s),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.flow")).appendTo(i);var v=$('<div class="uneditable-input" style="padding:0">').appendTo(i),b=$('<span style="display:inline-block; padding: 6px 0 6px 6px">').text(g).appendTo(v),m="flows.json";n.files.flow&&(m=0===n.files.flow.indexOf(g)?n.files.flow.substring(g.length):n.files.flow);var y=$('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(m).appendTo(v),w=function(){x.css({width:"calc(100% - "+(D.width()+b.width())+"px)"})},x=$('<input type="text" style="padding-left:1px; margin-top: -2px; margin-bottom: 0;border: none;">').val(m).hide().appendTo(v),D=$('<button type="button" class="editor-button toggle single" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 36px; height: 34px; position: absolute; top: -1px; right: -1px;"><i class="fa fa-folder-open-o"></i></button>').hide().appendTo(v).click(function(e){if($(this).hasClass("selected"))$(this).removeClass("selected"),v.find(".project-file-listing-container").slideUp(200,function(){$(this).remove(),v.css("height","")}),v.css("color","");else{$(this).addClass("selected"),v.css("color","inherit");var t=c.val(),o=t.substring(0,t.length-12),i=new RegExp("^"+o+".*.json$"),a=u(v,n,x.val(),function(e){return!/package.json$/.test(e.path)&&i.test(e.path)&&!/_cred\.json$/.test(e.path)},function(e,t){e&&x.val(e.substring(o.length)),t&&$(D).click(),j()});v.css("height","auto"),setTimeout(function(){a.slideDown(200)},50)}});RED.popover.tooltip(D,RED._("sidebar.project.projectSettings.selectFile")),i=$('<div class="user-settings-row"></div>').appendTo(s),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.credentials")).appendTo(i);var E="flows_cred.json";n.files.credentials&&(E=0===n.files.flow.indexOf(g)?n.files.credentials.substring(g.length):n.files.credentials);var k=$('<div class="uneditable-input" style="padding:0">').appendTo(i),R=$('<span style="display:inline-block;padding: 6px 0 6px 6px">').text(g).appendTo(k),T=$('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(E).appendTo(k),_=$('<input type="hidden">').val(E).insertAfter(k),j=function(){var e,t=x.val(),n=/^(.+?)(\.[^.]*)?$/.exec(t);n?T.text(n[1]+"_cred"+(n[2]||".json")):""===t&&T.text(""),_.val(T.text());var o=""===t||/\.\./.test(t)||/\/$/.test(t);e=o||""===T.text(),M.is(":visible")&&(M.toggleClass("input-error",""===M.val()),e=e||""===M.val()),U.is(":visible")&&(U.toggleClass("input-error",""===U.val()),e=e||""===U.val()),x.toggleClass("input-error",o),W.toggleClass("disabled",e),W.prop("disabled",e)};x.on("change keyup paste",j),i=$('<div class="user-settings-row"></div>').appendTo(s),$("<label></label>").appendTo(i);var C=$('<span><i class="user-settings-credentials-state-icon fa"></i> <span class="user-settings-credentials-state"></span></span>').appendTo(i),S=$('<span class="button-group" style="margin-left: -72px;">').hide().appendTo(i);C.css("color","#666"),S.css("vertical-align","top");var O=$('<button type="button" class="editor-button" style="vertical-align: top; width: 36px; margin-bottom: 10px"><i class="fa fa-trash-o"></i></button>').appendTo(S).click(function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),N.hide()):(U.val(""),A.hide(),B.show(),$(this).addClass("selected"),I.removeClass("selected"),z.show(),q.show(),P.hide(),L.hide(),N.show()),j()});RED.popover.tooltip(O,RED._("sidebar.project.projectSettings.resetTheEncryptionKey"));var I=$('<button type="button" class="editor-button" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; vertical-align: top; width: 36px; margin-bottom: 10px"><i class="fa fa-pencil"></i></button>').appendTo(S).click(function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),N.hide()):(M.val(""),U.val(""),n.settings.credentialSecretInvalid||!n.settings.credentialsEncrypted?(P.show(),L.hide(),A.hide()):(A.show(),P.hide(),L.show()),B.show(),I.addClass("selected"),O.removeClass("selected"),z.hide(),q.hide(),N.show()),j()});RED.popover.tooltip(I,RED._("sidebar.project.projectSettings.changeTheEncryptionKey")),i=$('<div class="user-settings-row user-settings-row-credentials"></div>').hide().appendTo(s);var N=$("<div>",{style:"margin-top:10px"}).hide().appendTo(C),P=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.setTheEncryptionKey")+"</div>").hide().appendTo(N),L=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.changeTheEncryptionKey")+"</div>").hide().appendTo(N),z=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.resetTheEncryptionKey")+"</div>").hide().appendTo(N),A=$('<div class="user-settings-row user-settings-row-credentials"></div>').appendTo(N);$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.currentKey")).appendTo(A);var M=$('<input type="password">').appendTo(A).on("change keyup paste",function(){e&&(e.close(),e=null),j()}),B=$('<div class="user-settings-row user-settings-row-credentials"></div>').appendTo(N);$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.newKey")).appendTo(B);var U=$('<input type="password">').appendTo(B).on("change keyup paste",j),q=$('<div class="form-tips form-warning" style="margin: 10px;"><i class="fa fa-warning"></i>'+RED._("sidebar.project.projectSettings.credentialsAlert")+"</div>").hide().appendTo(N),F=function(){r.show(),J.hide(),p.hide(),y.show(),x.hide(),D.hide(),C.removeClass("uneditable-input"),C.css("height",""),D.removeClass("selected"),v.find(".project-file-listing-container").remove(),v.css("height",""),v.css("color",""),$(".user-settings-row-credentials").hide(),N.hide(),S.hide(),O.removeClass("selected"),I.removeClass("selected")},J=$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').hide().appendTo(s);$('<button type="button" class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(J).click(function(e){e.preventDefault();var t=n.files.package||"package.json",o=t.substring(0,t.length-12);b.text(o),R.text(o),d.text(n.files.package||"package.json"),n.files.package?f.hide():(f.find(".projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.fileNotExist")),f.show()),x.val(y.text()),T.text(E),F()});var W=$('<button type="button" class="editor-button">'+RED._("common.label.save")+"</button>").appendTo(J).click(function(o){o.preventDefault();var i=t.addSpinnerOverlay(s),a=function(e){i.remove(),e?t.reportUnexpectedError(e):(y.text(x.val()),T.text(_.val()),f.hide(),F())},r=c.val();r=r.substring(0,r.length-12);var l={files:{package:c.val(),flow:r+x.val(),credentials:r+_.val()}};O.hasClass("selected")&&(l.resetCredentialSecret=!0),(O.hasClass("selected")||I.hasClass("selected"))&&(l.credentialSecret=U.val(),M.is(":visible")&&(l.currentCredentialSecret=M.val())),RED.deploy.setDeployInflight(!0),t.sendRequest({url:"projects/"+n.name,type:"PUT",responses:{0:function(e){a(e)},200:function(e){n=e,RED.sidebar.versionControl.refresh(!0),V(),a()},400:{credentials_load_failed:function(e){a(e)},missing_current_credential_key:function(t){M.addClass("input-error"),e=RED.popover.create({target:M,direction:"right",size:"small",content:"Incorrect key",autoClose:3e3}).open(),a(t)},"*":function(e){a(e)}}}},l).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}),V=function(){n.settings.credentialSecretInvalid?(C.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-warning"),C.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.invalidEncryptionKey"))):n.settings.credentialsEncrypted?(C.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-lock"),C.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionEnabled"))):(C.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-unlock"),C.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionDisabled"))),O.toggleClass("disabled",!n.settings.credentialSecretInvalid&&!n.settings.credentialsEncrypted),O.prop("disabled",!n.settings.credentialSecretInvalid&&!n.settings.credentialsEncrypted)};j(),V()}(n,o),f(n,o),o}function g(e){if(!/^subflow:/.test(e.type)){var t=RED.nodes.registry.getNodeSetForType(e.type).module;"kumologica-core"!==t&&(v.hasOwnProperty(t)||(v[t]={module:t,version:RED.nodes.registry.getModule(t).version,count:0,known:!1}),v[t].count++)}}var v={};return{init:function(n){t=n,a({id:"main",title:RED._("sidebar.project.name"),get:l,close:function(){}}),a({id:"deps",title:RED._("sidebar.project.dependencies"),get:p,close:function(){}}),a({id:"settings",title:RED._("sidebar.project.settings"),get:h,close:function(){e&&(e.close(),e=null)}}),RED.events.on("nodes:add",g),RED.events.on("nodes:remove",function(e){if(!/^subflow:/.test(e.type)){var t=RED.nodes.registry.getNodeSetForType(e.type).module;"kumologica-core"!==t&&v.hasOwnProperty(t)&&(v[t].count--,0===v[t].count&&(v[t].known||delete v[t]))}})},show:function(e){if(!o)if(RED.user.hasPermission("projects.write")){o=!0;var t={title:RED._("sidebar.project.projectSettings.title"),buttons:[{id:"node-dialog-ok",text:RED._("common.label.close"),class:"primary",click:function(){RED.tray.close()}}],resize:function(e){n=e.width},open:function(t){var n=RED.projects.getActiveProject(),o=t.find(".editor-tray-body"),a=$("<div></div>").appendTo(o),s=$("<div></div>",{id:"user-settings-tabs-container"}).appendTo(a);$("<ul></ul>",{id:"user-settings-tabs"}).appendTo(s);var r=RED.tabs.create({id:"user-settings-tabs",vertical:!0,onchange:function(e){setTimeout(function(){$("#user-settings-tabs-content").children().hide(),$("#"+e.id).show(),e.pane.focus&&e.pane.focus()},50)}}),l=$("<div></div>",{id:"user-settings-tabs-content"}).appendTo(a);i.forEach(function(e){r.addTab({id:"project-settings-tab-"+e.id,label:e.title,pane:e}),e.get(n).hide().appendTo(l)}),a.i18n(),r.activateTab("project-settings-tab-"+(e||"main")),$("#sidebar-shade").show()},close:function(){o=!1,i.forEach(function(e){e.close&&e.close()}),$("#sidebar-shade").hide()},show:function(){}};null!==n&&(t.width=n),RED.tray.show(t)}else RED.notify(RED._("user.errors.notAuthorized"),"error")},switchProject:function(e){v={}}}}(),RED.projects.userSettings=function(){var e,t,n;function o(o){var i=$('<div id="user-settings-tab-gitconfig" class="project-settings-tab-pane node-help"></div>');return function(n){var o=RED.settings.get("git")||{};o.user=o.user||{},$("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.committerDetail")).appendTo(n);var i=$('<div class="user-settings-section"></div>').appendTo(n);$('<div style="color:#aaa;"></div>').appendTo(i).text(RED._("editor:sidebar.project.userSettings.committerTip"));var a=$('<div class="user-settings-row"></div>').appendTo(i);$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.userName")).appendTo(a),(e=$('<input type="text">').appendTo(a)).val(o.user.name||""),a=$('<div class="user-settings-row"></div>').appendTo(i),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.email")).appendTo(a),(t=$('<input type="text">').appendTo(a)).val(o.user.email||"")}(i),function(e){var o,i=$('<div class="user-settings-section"></div>').appendTo(e),a=($("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.sshKeys")).appendTo(i),$('<div style="color:#aaa;"></div>').appendTo(i).text(RED._("editor:sidebar.project.userSettings.sshKeysTip"))),s=$('<button id="user-settings-gitconfig-add-key" class="editor-button editor-button-small" style="float: right; margin-right: 10px;">'+RED._("editor:sidebar.project.userSettings.add")+"</button>").appendTo(a).click(function(e){s.attr("disabled",!0),m.attr("disabled",!0),d.slideDown(200),u.focus()}),r=function(){var e=/^[a-zA-Z0-9\-_]+$/.test(u.val());u.toggleClass("input-error",p&&!e);var t=h.val(),n=0===t.length||t.length>=8;h.toggleClass("input-error",!n),n?0===t.length?g.text(RED._("editor:sidebar.project.userSettings.optional")):g.text(""):g.text(RED._("editor:sidebar.project.userSettings.passphraseShort")),e=e&&n,m.attr("disabled",!e),o&&(o.close(),o=null)},l=$('<div class="user-settings-row"></div>').appendTo(i),d=$('<div class="projects-dialog-list-dialog"></div>').hide().appendTo(l);$('<div class="projects-dialog-list-dialog-header">').text(RED._("editor:sidebar.project.userSettings.addSshKey")).appendTo(d);var c=$("<div>").appendTo(d);l=$('<div class="user-settings-row"></div>').appendTo(c),$('<div style="color:#aaa;"></div>').appendTo(l).text(RED._("editor:sidebar.project.userSettings.addSshKeyTip")),l=$('<div class="user-settings-row"></div>').appendTo(c),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.name")).appendTo(l);var p=!1,u=$('<input type="text">').appendTo(l).on("change keyup paste",function(){p=!0,r()});$('<label class="projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.nameRule")+"</small></label>").appendTo(l).find("small");var f=$("<div>").appendTo(c);l=$('<div class="user-settings-row"></div>').appendTo(f),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.passphrase")).appendTo(l);var h=$('<input type="password">').appendTo(l).on("change keyup paste",r),g=$('<label class="projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.optional")+"</small></label>").appendTo(l).find("small"),v=function(){s.attr("disabled",!1),d.hide(),u.val(""),p=!1,h.val(""),o&&(o.close(),o=null)},b=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(d);$('<button class="editor-button">'+RED._("editor:sidebar.project.userSettings.cancel")+"</button>").appendTo(b).click(function(e){e.preventDefault(),v()});var m=$('<button class="editor-button">'+RED._("editor:sidebar.project.userSettings.generate")+"</button>").appendTo(b).click(function(e){e.preventDefault();var o=n.addSpinnerOverlay(d).addClass("projects-dialog-spinner-contain"),i={name:u.val(),type:"generate"};i.comment=t.val(),i.password=h.val(),i.size=4096;var a=function(e){o.remove(),e||v()};RED.deploy.setDeployInflight(!0),n.sendRequest({url:"settings/user/keys",type:"POST",responses:{0:function(e){a(e)},200:function(e){D(i.name),a()},400:{unexpected_error:function(e){console.log(e),a(e)}}}},i)});l=$('<div class="user-settings-row projects-dialog-list"></div>').appendTo(i);var y={empty:!0},w=function(e,t){var o=$('<div class="projects-dialog-ssh-public-key">',{style:"position:relative"}).appendTo(e),i=$("<pre>",{style:"min-height: 80px"}).appendTo(o),a=n.addSpinnerOverlay(i).addClass("projects-dialog-spinner-contain"),s={url:"settings/user/keys/"+t.name,type:"GET",responses:{200:function(e){i.text(e.publickey),a.remove()},400:{unexpected_error:function(e){console.log(e),a.remove()}}}};n.sendRequest(s);var r=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(o);return $('<button class="editor-button editor-button-small">'+RED._("editor:sidebar.project.userSettings.copyPublicKey")+"</button>").appendTo(r).click(function(e){try{e.stopPropagation(),e.preventDefault(),document.getSelection().selectAllChildren(i[0]),document.execCommand("copy"),document.getSelection().empty()}catch(e){}}),o},x=$('<ol class="projects-dialog-ssh-key-list">').appendTo(l).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(e,t,o){var i=$('<div class="projects-dialog-list-entry">').appendTo(e);if(o.empty)return i.addClass("red-ui-search-empty"),void i.text(RED._("editor:sidebar.project.userSettings.noSshKeys"));var a=$('<div class="projects-dialog-ssh-key-header">').appendTo(i);$('<span class="entry-icon"><i class="fa fa-key"></i></span>').appendTo(a),$('<span class="entry-name">').text(o.name).appendTo(a);var s,r=$('<span class="button-row entry-tools">').appendTo(a);a.click(function(e){s?s.slideUp(200,function(){s.remove(),s=null}):s=w(i,o)}),o.system||$('<button class="editor-button editor-button-small"><i class="fa fa-trash"></i></button>').appendTo(r).click(function(t){t.stopPropagation();var i=n.addSpinnerOverlay(e).addClass("projects-dialog-spinner-contain"),a=RED.notify(RED._("editor:sidebar.project.userSettings.deleteConfirm",{name:o.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){i.remove(),a.close()}},{text:RED._("editor:sidebar.project.userSettings.delete"),click:function(){a.close();var t={url:"settings/user/keys/"+o.name,type:"DELETE",responses:{200:function(t){e.fadeOut(200,function(){x.editableList("removeItem",o),setTimeout(i.remove,100),0===x.editableList("length")&&x.editableList("addItem",y)})},400:{unexpected_error:function(e){console.log(e),i.remove()}}}};n.sendRequest(t)}}]})}),o.expand&&(s=w(i,o))}}),D=function(e){$.getJSON("settings/user/keys",function(t){t.keys&&(t.keys.sort(function(e,t){return e.name.localeCompare(t.name)}),x.editableList("empty"),t.keys.forEach(function(t){t.name===e&&(t.expand=!0),x.editableList("addItem",t)}),0===x.editableList("length")&&x.editableList("addItem",y))})};D()}(i),i}return{init:function(i){n=i,RED.userSettings.add({id:"gitconfig",title:RED._("editor:sidebar.project.userSettings.gitConfig"),get:o,close:function(){var n=RED.settings.get("git")||{};n.user=n.user||{},n.user.name=e.val(),n.user.email=t.val(),RED.settings.set("git",n)}})}}}(),RED.sidebar.versionControl=function(){var e,t,n,o,i,a,s,r,l,d,c,p,u,f,h,g,v,b={};function m(e,t,n,o){e.addClass("sidebar-version-control-change-entry");var i=$("<div>").appendTo(e);if(t.label){if(e.addClass("node-info-none"),i.text(t.label),t.button){i.css({display:"inline-block",maxWidth:"300px",textAlign:"left"});var a=$('<div style="float: right; margin: 5px; height: 50px;"></div>').appendTo(i);$('<button class="editor-button editor-button-small"></button>').text(t.button.label).appendTo(a).click(t.button.click)}}else{var s,r,l=$('<i class=""></i>').appendTo(i),d=$('<a href="#">').appendTo(i).click(function(e){e.preventDefault(),function(e,t){var n=RED.projects.getActiveProject(),o="staged"===t?"index":"tree";h.sendRequest({url:"projects/"+n.name+"/diff/"+o+"/"+encodeURIComponent(e.file),type:"GET",responses:{0:function(e){console.log(e)},200:function(o){var i;i="unstaged"===t?RED._("sidebar.project.versionControl.unstagedChanges")+" : "+e.file:"staged"===t?RED._("sidebar.project.versionControl.stagedChanges")+" : "+e.file:RED._("sidebar.project.versionControl.resolveConflicts")+" : "+e.file;var a={diff:o.diff,title:i,unmerged:"unmerged"===t,project:n};"unstaged"==t?(a.oldRevTitle=" "===e.indexStatus?RED._("sidebar.project.versionControl.head"):RED._("sidebar.project.versionControl.staged"),a.newRevTitle=RED._("sidebar.project.versionControl.unstaged"),a.oldRev=" "===e.indexStatus?"@":":0",a.newRev="_"):"staged"===t?(a.oldRevTitle=RED._("sidebar.project.versionControl.head"),a.newRevTitle=RED._("sidebar.project.versionControl.staged"),a.oldRev="@",a.newRev=":0"):(a.oldRevTitle=RED._("sidebar.project.versionControl.local"),a.newRevTitle=RED._("sidebar.project.versionControl.remote"),a.commonRev=":1",a.oldRev=":2",a.newRev=":3",a.onresolve=function(t){h.sendRequest({url:"projects/"+n.name+"/resolve/"+encodeURIComponent(e.file),type:"POST",responses:{0:function(e){console.log(e)},200:function(e){k(!0)},400:{unexpected_error:function(e){console.log(e)}}}},{resolutions:t.resolutions[e.file]})}),RED.diff.showUnifiedDiff(a)},400:{unexpected_error:function(e){console.log(e)}}}})}(t,o)}),c=$("<span>").appendTo(d),p=$('<div class="sidebar-version-control-change-entry-tools">').appendTo(e);if("unstaged"===o&&(s=$('<span class="button-group" style="margin-right: 5px;"></span>').appendTo(p),r=$('<button class="editor-button editor-button-small"><i class="fa fa-reply"></i></button>').appendTo(s).click(function(e){e.preventDefault();var n=h.addSpinnerOverlay(i).addClass("projects-dialog-spinner-contain"),o=RED.notify(RED._("sidebar.project.versionControl.revert",{file:t.file}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){n.remove(),o.close()}},{text:RED._("sidebar.project.versionControl.revertChanges"),click:function(){o.close();var e={url:"projects/"+RED.projects.getActiveProject().name+"/files/_/"+t.file,type:"DELETE",responses:{200:function(e){n.remove()},400:{unexpected_error:function(e){n.remove(),console.log(e)}}}};RED.deploy.setDeployInflight(!0),h.sendRequest(e).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]})}),RED.popover.tooltip(r,RED._("sidebar.project.versionControl.revertChanges"))),s=$('<span class="button-group"></span>').appendTo(p),"unmerged"!==o){var u=$('<button class="editor-button editor-button-small"><i class="fa fa-'+("unstaged"===o?"plus":"minus")+'"></i></button>').appendTo(s).click(function(n){n.preventDefault();var i=RED.projects.getActiveProject();t.spinner=h.addSpinnerOverlay(e).addClass("projects-version-control-spinner-sidebar"),h.sendRequest({url:"projects/"+i.name+"/stage/"+encodeURIComponent(t.file),type:"unstaged"===o?"POST":"DELETE",responses:{0:function(e){console.log(e)},200:function(e){E(e)},400:{unexpected_error:function(e){console.log(e)}}}},{})});RED.popover.tooltip(u,RED._("sidebar.project.versionControl."+("unstaged"===o?"stage":"unstage")+"Change"))}t["update"+("unstaged"===o?"Unstaged":"Staged")]=function(e,t){i.removeClass();var n="";"A"===t?(i.addClass("node-diff-added"),n="fa-plus-square"):"?"===t?(i.addClass("node-diff-unchanged"),n="fa-question-circle-o"):"D"===t?(i.addClass("node-diff-deleted"),n="fa-minus-square"):"M"===t?(i.addClass("node-diff-changed"),n="fa-square"):"R"===t?(i.addClass("node-diff-changed"),n="fa-toggle-right"):"U"===t?(i.addClass("node-diff-conflicted"),n="fa-exclamation-triangle"):n="fa-exclamation-triangle",c.empty(),$("<span>").text(e.file.replace(/\\(.)/g,"$1")).appendTo(c),e.oldName&&($('<i class="fa fa-long-arrow-right"></i>').prependTo(c),$("<span>").text(e.oldName.replace(/\\(.)/g,"$1")).prependTo(c)),l.removeClass(),l.addClass("fa "+n),e.spinner&&(e.spinner.remove(),delete e.spinner),r&&r.toggle("?"!==t),d.toggleClass("disabled","D"===t||"?"===t)},t["update"+("unstaged"===o?"Unstaged":"Staged")](t,n)}}function y(e){var t=Date.now()/1e3-e,n=Math.floor(t/86400);if(n>30)return new Date(1e3*e).toLocaleDateString();if(n>0)return RED._("sidebar.project.versionControl.daysAgo",{count:n});var o=Math.floor(t/3600);if(o>0)return RED._("sidebar.project.versionControl.hoursAgo",{count:o});var i=Math.floor(t/60);return i>0?RED._("sidebar.project.versionControl.minsAgo",{count:i}):RED._("sidebar.project.versionControl.secondsAgo")}function w(e,t){var o=RED.projects.getActiveProject();(s=t?h.addSpinnerOverlay(n.parent()):h.addSpinnerOverlay(i.parent())).addClass("projects-dialog-spinner-sidebar");var a=t?{files:e}:void 0;h.sendRequest({url:"projects/"+o.name+"/stage",type:t?"POST":"DELETE",responses:{0:function(e){console.log(e)},200:function(e){E(e)},400:{unexpected_error:function(e){console.log(e)}}}},a)}var x=!1;function D(e,t,n,o,i){var a=h.addSpinnerOverlay(n),s=e+"?limit="+(o||20);i&&(s+="&before="+i),h.sendRequest({url:s,type:"GET",responses:{0:function(e){console.log(e)},200:function(n){var i;n.commits.forEach(function(e){t.editableList("addItem",e),i=e.sha}),t.loadMoreItem&&(t.editableList("removeItem",t.loadMoreItem),delete t.loadMoreItem);var s=t.editableList("length");s<n.total&&(t.loadMoreItem={totalKnown:s,total:n.total,url:e,before:i+"~1",limit:o},t.editableList("addItem",t.loadMoreItem)),a.remove()},400:{unexpected_error:function(e){console.log(e)}}}})}function E(t){var c=t.files;s&&(s.remove(),s=null),(f=!!t.merging)?(e.addClass("sidebar-version-control-merging"),r.show()):(e.removeClass("sidebar-version-control-merging"),r.hide()),n.editableList("removeItem",g),i.editableList("removeItem",g),l.editableList("removeItem",v);var p=Object.keys(c).filter(function(e){return"f"===c[e].type});p.sort();var u=Date.now()+Math.floor(100*Math.random());p.forEach(function(e){var t=c[e],o=!1;t.status&&(t.file=e,t.indexStatus=t.status[0],t.treeStatus=t.status[1],("A"===t.indexStatus&&/[AU]/.test(t.treeStatus)||"U"===t.indexStatus&&/[DAU]/.test(t.treeStatus)||"D"===t.indexStatus&&/[DU]/.test(t.treeStatus))&&(t.unmerged=!0),b[e]?(b[e].unmerged&&!t.unmerged?(l.editableList("removeItem",b[e]),o=!0):!b[e].unmerged&&t.unmerged&&(n.editableList("removeItem",b[e]),i.editableList("removeItem",b[e])),b[e].status!==t.status&&(" "!==b[e].treeStatus?" "===t.treeStatus?n.editableList("removeItem",b[e]):t.treeStatus!==b[e].treeStatus&&b[e].updateUnstaged(t,t.treeStatus):o=!0," "!==b[e].indexStatus&&"?"!==b[e].indexStatus?" "===t.indexStatus||"?"===t.indexStatus?i.editableList("removeItem",b[e]):t.indexStatus!==b[e].indexStatus&&b[e].updateStaged(t,t.indexStatus):o=!0),b[e].status=t.status,b[e].indexStatus=t.indexStatus,b[e].treeStatus=t.treeStatus,b[e].oldName=t.oldName,b[e].unmerged=t.unmerged):(o=!0,b[e]=t),b[e].updateIndex=u,o&&(t.unmerged?l.editableList("addItem",b[e]):(" "!==t.treeStatus&&n.editableList("addItem",b[e])," "!==t.indexStatus&&"?"!==t.indexStatus&&i.editableList("addItem",b[e]))))}),Object.keys(b).forEach(function(e){b[e].updateIndex!==u&&(n.editableList("removeItem",b[e]),i.editableList("removeItem",b[e]),delete b[e])});var h=i.editableList("length"),m=n.editableList("length"),y=l.editableList("length");d.prop("disabled",f&&y>0||!f&&0===h),o.prop("disabled",0===m),a.prop("disabled",0===h),0===h&&i.editableList("addItem",g),0===m&&n.editableList("addItem",g),0===y&&l.editableList("addItem",v)}function k(e,t){if(!x&&(e&&(b={},n.editableList("empty"),i.editableList("empty"),l.editableList("empty")),RED.user.hasPermission("projects.write"))){x=!0,function(){p.editableList("empty");var e=RED.projects.getActiveProject();e&&D("projects/"+e.name+"/commits",p,p.parent())}();var o=RED.projects.getActiveProject();if(o){var a="projects/"+o.name+"/status";t&&(a+="?remote=true"),$.getJSON(a,function(e){E(e),$("#sidebar-version-control-local-branch").text(e.branches.local),$("#sidebar-version-control-remote-branch").text(e.branches.remote||RED._("sidebar.project.versionControl.none"));var t=e.commits.ahead||0,n=e.commits.behind||0;o.git.hasOwnProperty("remotes")?e.branches.hasOwnProperty("remoteError")&&"git_remote_gone"!==e.branches.remoteError.code?($("#sidebar-version-control-repo-status-auth-issue").show(),$("#sidebar-version-control-repo-status-stats").hide(),$("#sidebar-version-control-repo-branch").prop("disabled",!0),$("#sidebar-version-control-repo-pull").prop("disabled",!0),$("#sidebar-version-control-repo-push").prop("disabled",!0),$("#sidebar-version-control-repo-toolbar-message").hide(),$("#sidebar-version-control-repo-toolbar-error-message").show()):($("#sidebar-version-control-repo-toolbar-message").show(),$("#sidebar-version-control-repo-toolbar-error-message").hide(),$("#sidebar-version-control-repo-status-auth-issue").hide(),$("#sidebar-version-control-repo-status-stats").show(),$("#sidebar-version-control-repo-branch").prop("disabled",!1),$("#sidebar-version-control-repo-status-button").show(),e.branches.hasOwnProperty("remote")?R(t,n):($("#sidebar-version-control-commits-ahead").text(""),$("#sidebar-version-control-commits-behind").text(""),$("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.notTracking")),$("#sidebar-version-control-repo-pull").prop("disabled",!0),$("#sidebar-version-control-repo-push").prop("disabled",!0))):$("#sidebar-version-control-repo-status-button").hide(),x=!1,$(".sidebar-version-control-shade").hide()}).fail(function(){x=!1})}else $(".sidebar-version-control-shade").show(),n.editableList("empty"),i.editableList("empty"),l.editableList("empty")}}function R(e,t){$("#sidebar-version-control-commits-ahead").text(e),$("#sidebar-version-control-commits-behind").text(t),f?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.statusUnmergedChanged")),$("#sidebar-version-control-repo-pull").prop("disabled",!0),$("#sidebar-version-control-repo-push").prop("disabled",!0)):e>0&&0===t?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsAhead",{count:e})),$("#sidebar-version-control-repo-pull").prop("disabled",!0),$("#sidebar-version-control-repo-push").prop("disabled",!1)):0===e&&t>0?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsBehind",{count:t})),$("#sidebar-version-control-repo-pull").prop("disabled",!1),$("#sidebar-version-control-repo-push").prop("disabled",!0)):e>0&&t>0?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsAheadAndBehind1",{count:t})+RED._("sidebar.project.versionControl.commitsAheadAndBehind2",{count:e})+RED._("sidebar.project.versionControl.commitsAheadAndBehind3",{count:t})),$("#sidebar-version-control-repo-pull").prop("disabled",!1),$("#sidebar-version-control-repo-push").prop("disabled",!0)):0===e&&0===t&&($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.repositoryUpToDate")),$("#sidebar-version-control-repo-pull").prop("disabled",!0),$("#sidebar-version-control-repo-push").prop("disabled",!0))}function T(){k(),RED.sidebar.show("version-control")}return{init:function(s){h=s,RED.actions.add("core:show-version-control-tab",T),RED.events.on("deploy",function(){var e=RED.projects.getActiveProject();e&&(b={},n.editableList("empty"),i.editableList("empty"),l.editableList("empty"),$.getJSON("projects/"+e.name+"/status",function(e){E(e)}))}),RED.events.on("login",function(){k(!0)}),e=$("<div>",{class:"sidebar-version-control"});var f=$("<div>",{class:"sidebar-version-control-stack"}).appendTo(e);t=RED.stack.create({container:f,fill:!0,singleExpanded:!0}),(c=t.add({title:RED._("sidebar.project.versionControl.localChanges"),collapsible:!0})).expand(),c.content.css({height:"100%"});var x=$('<div style="float: right"></div>').appendTo(c.header),_=$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(x).click(function(e){e.preventDefault(),e.stopPropagation(),k(!0)});RED.popover.tooltip(_,RED._("sidebar.project.versionControl.refreshChanges")),g={label:RED._("sidebar.project.versionControl.none")},v={label:RED._("sidebar.project.versionControl.conflictResolve")};var j=$('<div class="sidebar-version-control-change-container"></div>').appendTo(c.content),C=$('<div class="sidebar-version-control-change-header">'+RED._("sidebar.project.versionControl.localFiles")+"</div>").appendTo(j);o=$('<button class="editor-button editor-button-small" style="float: right"><i class="fa fa-plus"></i> '+RED._("sidebar.project.versionControl.all")+"</button>").appendTo(C).click(function(e){e.preventDefault(),e.stopPropagation(),w(Object.keys(b).filter(function(e){return" "!==b[e].treeStatus}),!0)}),RED.popover.tooltip(o,RED._("sidebar.project.versionControl.stageAllChange")),(n=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(j)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){m(e,n,n.treeStatus,"unstaged")},sort:function(e,t){return"?"===e.treeStatus&&"?"!==t.treeStatus?1:"?"!==e.treeStatus&&"?"===t.treeStatus?-1:e.file.localeCompare(t.file)}}),r=$('<div class="sidebar-version-control-change-container"></div>').appendTo(c.content),C=$('<div class="sidebar-version-control-change-header">'+RED._("sidebar.project.versionControl.unmergedChanges")+"</div>").appendTo(r),x=$('<div style="float: right"></div>').appendTo(C);var S=$('<button class="editor-button editor-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.abortMerge")+"</button>").appendTo(x).click(function(e){e.preventDefault(),e.stopPropagation();var t=h.addSpinnerOverlay(r),n=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),h.sendRequest({url:"projects/"+n.name+"/merge",type:"DELETE",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),k(!0)},400:{unexpected_error:function(e){console.log(e)}}}}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})});(l=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(r)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){n===v&&(n.button={label:RED._("sidebar.project.versionControl.commit"),click:function(e){e.preventDefault(),e.stopPropagation(),I()}}),m(e,n,n.treeStatus,"unmerged")},sort:function(e,t){return"?"===e.treeStatus&&"?"!==t.treeStatus?1:"?"!==e.treeStatus&&"?"===t.treeStatus?-1:e.file.localeCompare(t.file)}});var O=$('<div class="sidebar-version-control-change-container"></div>').appendTo(c.content);C=$('<div class="sidebar-version-control-change-header">'+RED._("sidebar.project.versionControl.changeToCommit")+"</div>").appendTo(O),x=$('<div style="float: right"></div>').appendTo(C);var I=function(){N.val(""),z.prop("disabled",!0),j.css("height","30px"),r.is(":visible")?(r.css("height","30px"),O.css("height","calc(100% - 60px - 175px)")):O.css("height","calc(100% - 30px - 175px)"),commitBox.show(),setTimeout(function(){commitBox.css("height","175px")},10),o.prop("disabled",!0),a.prop("disabled",!0),d.prop("disabled",!0),S.prop("disabled",!0),N.focus()};d=$('<button class="editor-button editor-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.commit")+"</button>").appendTo(x).click(function(e){e.preventDefault(),e.stopPropagation(),I()}),RED.popover.tooltip(d,RED._("sidebar.project.versionControl.commitChanges")),a=$('<button class="editor-button editor-button-small"><i class="fa fa-minus"></i> '+RED._("sidebar.project.versionControl.all")+"</button>").appendTo(x).click(function(e){e.preventDefault(),e.stopPropagation(),w(Object.keys(b).filter(function(e){return" "!==b[e].indexStatus&&"?"!==b[e].indexStatus}),!1)}),RED.popover.tooltip(a,RED._("sidebar.project.versionControl.unstageAllChange")),(i=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(O)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){m(e,n,n.indexStatus,"staged")},sort:function(e,t){return e.file.localeCompare(t.file)}}),commitBox=$('<div class="sidebar-version-control-slide-box sidebar-version-control-slide-box-bottom"></div>').hide().appendTo(c.content);var N=$("<textarea placeholder="+RED._("sidebar.project.versionControl.commitPlaceholder")+"></textarea>").appendTo(commitBox).on("change keyup paste",function(){z.prop("disabled",""===$(this).val().trim())}),P=$('<div class="sidebar-version-control-slide-box-toolbar button-group">').appendTo(commitBox),L=$('<button class="editor-button">'+RED._("sidebar.project.versionControl.cancelCapital")+"</button>").appendTo(P).click(function(e){e.preventDefault(),N.val(""),j.css("height",""),r.css("height",""),O.css("height",""),commitBox.css("height",0),setTimeout(function(){commitBox.hide()},200),o.prop("disabled",!1),a.prop("disabled",!1),d.prop("disabled",!1),S.prop("disabled",!1)}),z=$('<button class="editor-button">'+RED._("sidebar.project.versionControl.commitCapital")+"</button>").appendTo(P).click(function(e){e.preventDefault();var t=h.addSpinnerOverlay(z).addClass("projects-dialog-spinner-sidebar"),n=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),h.sendRequest({url:"projects/"+n.name+"/commit",type:"POST",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),L.click(),k(!0)},400:{"*":function(e){h.reportUnexpectedError(e)}}}},{message:N.val()}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}),A=t.add({title:RED._("sidebar.project.versionControl.commitHistory"),collapsible:!0});x=$('<div style="float: right"></div>').appendTo(A.header),_=$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(x).click(function(e){e.preventDefault(),e.stopPropagation(),k(!0,!0)}),RED.popover.tooltip(_,RED._("sidebar.project.versionControl.refreshCommitHistory"));var M=$('<div class="sidebar-version-control-change-header" style="text-align: right;"></div>').appendTo(A.content),B=$('<button class="editor-button editor-button-small"><i class="fa fa-code-fork"></i> '+RED._("sidebar.project.versionControl.branch")+' <span id="sidebar-version-control-local-branch"></span></button>').appendTo(M).click(function(e){if(e.preventDefault(),$(this).hasClass("selected"))q();else{V(),u.show(),$(this).addClass("selected");var t=RED.projects.getActiveProject();J.refresh("projects/"+t.name+"/branches"),F.show(),setTimeout(function(){F.css("height","215px"),J.focus()},100)}});RED.popover.tooltip(B,RED._("sidebar.project.versionControl.changeLocalBranch"));var U=$('<button class="editor-button editor-button-small" style="margin-left: 10px;" id="sidebar-version-control-repo-status-button"><span id="sidebar-version-control-repo-status-stats"><i class="fa fa-long-arrow-up"></i> <span id="sidebar-version-control-commits-ahead"></span> <i class="fa fa-long-arrow-down"></i> <span id="sidebar-version-control-commits-behind"></span></span><span id="sidebar-version-control-repo-status-auth-issue"><i class="fa fa-warning"></i></span></button>').appendTo(M).click(function(e){if(e.preventDefault(),$(this).hasClass("selected"))V();else{q(),u.show(),$(this).addClass("selected");var t=RED.projects.getActiveProject();$("#sidebar-version-control-repo-toolbar-set-upstream-row").toggle(!!t.git.branches.remoteAlt),W.show(),setTimeout(function(){W.css("height","265px")},100)}});RED.popover.tooltip(U,RED._("sidebar.project.versionControl.manageRemoteBranch")),p=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0px; right:0; left:0;"}).appendTo(A.content),u=$('<div class="component-shade" style="z-Index: 3"></div>').css("top","30px").hide().appendTo(A.content),p.editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){if(e.addClass("sidebar-version-control-commit-entry"),n.url)e.addClass("sidebar-version-control-commit-more"),e.text("+ "+(n.total-n.totalKnown)+RED._("sidebar.project.versionControl.moreCommits")),e.click(function(t){t.preventDefault(),D(n.url,p,e,n.limit,n.before)});else{e.click(function(e){var t=RED.projects.getActiveProject();t&&$.getJSON("projects/"+t.name+"/commits/"+n.sha,function(e){e.project=t,e.parents=n.parents,e.oldRev=n.sha+"~1",e.newRev=n.sha,e.oldRevTitle=RED._("sidebar.project.versionControl.commitCapital")+" "+n.sha.substring(0,7)+"~1",e.newRevTitle=RED._("sidebar.project.versionControl.commitCapital")+" "+n.sha.substring(0,7),e.date=y(parseInt(n.date)),RED.diff.showCommitDiff(e)})});var o=$("<div>").appendTo(e);if($('<div class="sidebar-version-control-commit-subject">').text(n.subject).appendTo(o),n.refs){var i=$('<div class="sidebar-version-control-commit-refs">').appendTo(o);n.refs.forEach(function(e){var t=e;/HEAD -> /.test(e)&&(t=e.substring(8)),$('<span class="sidebar-version-control-commit-ref">').text(t).appendTo(i)}),e.addClass("sidebar-version-control-commit-head")}$('<div class="sidebar-version-control-commit-sha">').text(n.sha.substring(0,7)).appendTo(o),$('<div class="sidebar-version-control-commit-date">').text(y(parseInt(n.date))).appendTo(o)}}});var q=function(e){B.removeClass("selected"),F.css("height","0"),u.hide(),setTimeout(function(){F.hide(),e&&e()},200)},F=$('<div class="sidebar-version-control-slide-box sidebar-version-control-slide-box-top" style="top:30px;"></div>').hide().appendTo(A.content);$('<div class="sidebar-version-control-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.changeLocalBranch")).appendTo(F);var J=h.createBranchList({placeholder:RED._("sidebar.project.versionControl.createBranchPlaceholder"),container:F,onselect:function(e){if(e.current)return q();var t=h.addSpinnerOverlay(F),n=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),h.sendRequest({url:"projects/"+n.name+"/branches",type:"POST",requireCleanWorkspace:!0,cancel:function(){t.remove()},responses:{0:function(e){t.remove(),console.log(e)},200:function(e){q(function(){t.remove()})},400:{git_local_overwrite:function(e){t.remove(),RED.notify(RED._("sidebar.project.versionControl.localOverwrite"),{type:"error",timeout:8e3})},unexpected_error:function(e){t.remove(),console.log(e)}}}},e).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}),W=$('<div class="sidebar-version-control-slide-box sidebar-version-control-slide-box-top" style="top:30px"></div>').hide().appendTo(A.content),V=function(){$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked",!1),U.removeClass("selected"),W.css("height","0"),u.hide(),setTimeout(function(){W.hide(),G()},200)},G=function(e){H.hasClass("selected")&&(H.removeClass("selected"),Q.height(0),W.css("height","265px"),setTimeout(function(){Q.hide(),e&&e()},200))};$('<div class="sidebar-version-control-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.manageRemoteBranch")).appendTo(W);var K=$('<div style="margin-bottom: 5px;"></div>').appendTo(W),H=$('<button id="sidebar-version-control-repo-branch" class="sidebar-version-control-repo-action editor-button"><i class="fa fa-code-fork"></i> '+RED._("sidebar.project.versionControl.remote")+': <span id="sidebar-version-control-remote-branch"></span></button>').appendTo(K).click(function(e){if(e.preventDefault(),$(this).hasClass("selected"))G();else{$(this).addClass("selected");var t=RED.projects.getActiveProject();Z.refresh("projects/"+t.name+"/branches/remote"),Q.show(),setTimeout(function(){Q.height(180),W.css("height","445px"),Z.focus()},100)}});$('<div id="sidebar-version-control-repo-toolbar-message" class="sidebar-version-control-slide-box-header" style="min-height: 100px;"></div>').appendTo(W);var X=$('<div id="sidebar-version-control-repo-toolbar-error-message" class="sidebar-version-control-slide-box-header" style="min-height: 100px;"></div>').hide().appendTo(W);$('<div style="margin-top: 10px;"><i class="fa fa-warning"></i> '+RED._("sidebar.project.versionControl.unableToAccess")+"</div>").appendTo(X);var Y=$('<div style="margin: 10px 30px; text-align: center"></div>').appendTo(X);$('<button class="editor-button" style="width: 80%;"><i class="fa fa-refresh"></i> '+RED._("sidebar.project.versionControl.retry")+"</button>").appendTo(Y).click(function(e){e.preventDefault();var t=RED.projects.getActiveProject(),n=h.addSpinnerOverlay(W).addClass("projects-dialog-spinner-contain");h.sendRequest({url:"projects/"+t.name+"/branches/remote",type:"GET",responses:{0:function(e){console.log(e)},200:function(e){k(!0)},400:{git_connection_failed:function(e){RED.notify(e.message,"error")},git_not_a_repository:function(e){RED.notify(e.message,"error")},git_repository_not_found:function(e){RED.notify(e.message,"error")},unexpected_error:function(e){console.log(e)}}}}).always(function(){n.remove()})}),$('<div class="sidebar-version-control-slide-box-header" style="height: 20px;"><label id="sidebar-version-control-repo-toolbar-set-upstream-row" for="sidebar-version-control-repo-toolbar-set-upstream" class="hide"><input type="checkbox" id="sidebar-version-control-repo-toolbar-set-upstream"> '+RED._("sidebar.project.versionControl.setUpstreamBranch")+"</label></div>").appendTo(W);var Q=$('<div style="height: 0;overflow:hidden; transition: height 0.2s ease-in-out;"></div>').hide().appendTo(K),Z=h.createBranchList({placeholder:RED._("sidebar.project.versionControl.createRemoteBranchPlaceholder"),currentLabel:RED._("sidebar.project.versionControl.upstream"),remote:function(){var e=RED.projects.getActiveProject();return Object.keys(e.git.remotes)[0]},container:Q,onselect:function(e){$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked",!1),$("#sidebar-version-control-repo-toolbar-set-upstream").prop("disabled",!1),$("#sidebar-version-control-remote-branch").text(e.name+(e.create?" *":""));var t=RED.projects.getActiveProject();t.git.branches.remote===e.name?delete t.git.branches.remoteAlt:t.git.branches.remoteAlt=e.name,$("#sidebar-version-control-repo-toolbar-set-upstream-row").toggle(!!t.git.branches.remoteAlt),G(function(){if(e.create)t.git.branches.remote?$("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.selectUpstreamBranch")):($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.trackedUpstreamBranch")),$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked",!0),$("#sidebar-version-control-repo-toolbar-set-upstream").prop("disabled",!0)),$("#sidebar-version-control-repo-pull").prop("disabled",!0),$("#sidebar-version-control-repo-push").prop("disabled",!1);else{var n=Date.now(),o=h.addSpinnerOverlay($("#sidebar-version-control-repo-toolbar-message")).addClass("projects-dialog-spinner-contain");$.getJSON("projects/"+t.name+"/branches/remote/"+e.name+"/status",function(e){setTimeout(function(){R(e.commits.ahead,e.commits.behind),o.remove()},Math.max(400-(Date.now()-n),0))})}})}}),ee=$('<div style="margin-bottom: 5px;"></div>').appendTo(W);$('<button id="sidebar-version-control-repo-push" class="sidebar-version-control-repo-sub-action editor-button"><i class="fa fa-long-arrow-up"></i> <span data-i18n="sidebar.project.versionControl.push"></span></button>').appendTo(ee).click(function(e){e.preventDefault();var t=h.addSpinnerOverlay(W).addClass("projects-dialog-spinner-contain"),n=$('<div style="position: relative; bottom: 60px;"></div>').appendTo(t);$('<button class="editor-button"></button>').text(RED._("eventLog.view")).appendTo(n).click(function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")});var o=RED.projects.getActiveProject();RED.eventLog.startEvent("Push changes"+(o.git.branches.remoteAlt?" : "+o.git.branches.remoteAlt:""));var i="projects/"+o.name+"/push";o.git.branches.remoteAlt&&(i+="/"+o.git.branches.remoteAlt);var a=$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked");a&&(i+="?u=true"),h.sendRequest({url:i,type:"POST",responses:{0:function(e){console.log(e)},200:function(e){a&&o.git.branches.remoteAlt&&(o.git.branches.remote=o.git.branches.remoteAlt,delete o.git.branches.remoteAlt),k(!0),V()},400:{git_push_failed:function(e){RED.notify(RED._("sidebar.project.versionControl.pushFailed"),"error")},unexpected_error:function(e){console.log(e)}}}},{}).always(function(){t.remove()})});var te=function(e){e=e||{};var t=h.addSpinnerOverlay(W).addClass("projects-dialog-spinner-contain"),n=$('<div style="position: relative; bottom: 60px;"></div>').appendTo(t);$('<button class="editor-button"></button>').text(RED._("eventLog.view")).appendTo(n).click(function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")});var o=RED.projects.getActiveProject();RED.eventLog.startEvent("Pull changes"+(o.git.branches.remoteAlt?" : "+o.git.branches.remoteAlt:""));var i="projects/"+o.name+"/pull";o.git.branches.remoteAlt&&(i+="/"+o.git.branches.remoteAlt),(e.setUpstream||e.allowUnrelatedHistories)&&(i+="?"),e.setUpstream&&(i+="setUpstream=true",e.allowUnrelatedHistories&&(i+="&")),e.allowUnrelatedHistories&&(i+="allowUnrelatedHistories=true"),h.sendRequest({url:i,type:"POST",responses:{0:function(e){console.log(e)},200:function(t){e.setUpstream&&o.git.branches.remoteAlt&&(o.git.branches.remote=o.git.branches.remoteAlt,delete o.git.branches.remoteAlt),k(!0),V()},400:{git_local_overwrite:function(e){RED.notify(RED._("sidebar.project.versionControl.unablePull")+'<p><a href="#" onclick="RED.sidebar.versionControl.showLocalChanges(); return false;">'+RED._("sidebar.project.versionControl.showUnstagedChanges")+"</a></p>","error",!1,1e7)},git_pull_merge_conflict:function(e){k(!0),V()},git_connection_failed:function(e){RED.notify(RED._("sidebar.project.versionControl.connectionFailed")+e.toString(),"warning")},git_pull_unrelated_history:function(t){var n=RED.notify(RED._("sidebar.project.versionControl.pullUnrelatedHistory"),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){n.close()}},{text:RED._("sidebar.project.versionControl.pullChanges"),click:function(){n.close(),e.allowUnrelatedHistories=!0,te(e)}}]})},"*":function(e){h.reportUnexpectedError(e)}}}},{}).always(function(){t.remove()})};$('<button id="sidebar-version-control-repo-pull" class="sidebar-version-control-repo-sub-action editor-button"><i class="fa fa-long-arrow-down"></i> <span data-i18n="sidebar.project.versionControl.pull"></span></button>').appendTo(ee).click(function(e){e.preventDefault(),te({setUpstream:$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked")})}),$('<div class="component-shade sidebar-version-control-shade">').appendTo(e),RED.sidebar.addTab({id:"version-control",label:RED._("sidebar.project.versionControl.history"),name:RED._("sidebar.project.versionControl.projectHistory"),content:e,enableOnEdit:!1,pinned:!0,iconClass:"fa fa-code-fork",action:"core:show-version-control-tab",onchange:function(){setTimeout(function(){t.resize()},10)}})},show:T,refresh:k,showLocalChanges:function(){RED.sidebar.show("version-control"),c.expand()}}}(),RED.touch=RED.touch||{},RED.touch.radialMenu=function(){var e=null,t=!1,n=!1,o=null;return{show:function(i,a,s){t=!0;try{$("body").width(),$("body").height();for(var r=(e=d3.select("body").append("div").style({position:"absolute",top:0,left:0,bottom:0,right:0,"z-index":1e3}).on("touchstart",function(){v(),d3.event.preventDefault()})).append("div").style({position:"absolute",top:a[1]-80+"px",left:a[0]-80+"px","border-radius":"80px",width:"160px",height:"160px",background:"rgba(255,255,255,0.6)",border:"1px solid #666"}),l=[],d=function(e,t,n){n.el=r.append("div").style({position:"absolute",top:t+80-25+"px",left:e+80-25+"px","border-radius":"20px",width:"50px",height:"50px",background:"#fff",border:"2px solid #666","text-align":"center","line-height":"50px"}),n.el.html(n.name),n.disabled&&n.el.style({"border-color":"#ccc",color:"#ccc"}),n.x=e,n.y=t,l.push(n),n.el.on("touchstart",function(){n.el.style("background","#999"),d3.event.preventDefault(),d3.event.stopPropagation()}),n.el.on("touchend",function(){v(),n.onselect(),d3.event.preventDefault(),d3.event.stopPropagation()})},c=s.length,p=Math.max(Math.PI/(c-1),Math.PI/4),u=Math.PI,f=0;f<c;f++){var h=Math.floor(80*Math.cos(u)),g=Math.floor(80*Math.sin(u));s[f].name&&d(h,g,s[f]),u+=p}var v=function(){t=!1,o=null,e.remove(),e=null};i.on("touchend.radial",function(){if(i.on("touchend.radial",null),i.on("touchmenu.radial",null),o){try{o.onselect()}catch(e){RED._debug(e)}v()}else n&&v()}),i.on("touchmove.radial",function(){try{for(var e=d3.event.touches.item(0),t=[e.pageX-a[0],e.pageY-a[1]],i=0;i<l.length;i++){var s=l[i];s.disabled||(t[0]>s.x-30&&t[0]<s.x+30&&t[1]>s.y-30&&t[1]<s.y+30?s!==o&&(s.el.style("background","#999"),o=s):s===o?(s.el.style("background","#fff"),o=null):s.el.style("background","#fff"))}if(!o){var r=Math.abs(t[0]*t[0]+t[1]*t[1]);n=r>6400}}catch(e){RED._debug(e)}})}catch(e){RED._debug(e)}},active:function(){return t}}}(),RED.header=function(){let e,t=window.__kumologica.electron.ipcRenderer,n=null,o=null,i=null;function a(e){o=e}function s(e){(n=e).length>30&&(n=`${n.substring(0,30)}...`),$("#project-title").text(n)}function r(e){$("#project-status-color").show(),"Deploying..."===e?($("#projectIndicator").addClass("deploying"),$(".progressbar").addClass("deploying")):($("#projectIndicator").removeClass("deploying"),$(".progressbar").removeClass("deploying"),$("#project-status-color").css("color","#87d068")),$(".project-status").text(e)}function l(){$("#btn-deploy").attr("disabled",!0)}function d(){$("#btn-deploy").attr("disabled",!1)}function c(){RED.deploy.save(!0,!0,!0)}function p(){$("#red-ui-tab-main-flow").find("a").click(),$("#view-main-flow").addClass("flow-selected"),$("#view-test-flow").removeClass("flow-selected")}function u(){$("#red-ui-tab-test-flow").find("a").click(),$("#view-test-flow").addClass("flow-selected"),$("#view-main-flow").removeClass("flow-selected")}function f(){$("#ui-settings").is(":visible")?RED.actions.invoke("core:settings:close"):RED.actions.invoke("core:settings:open")}function h(){console.log("[header] Toggling the terminal"),$("#shelve-middle").click()}return t.on("terminal-output",(e,t)=>{window.__kumologica.editor.terminal.eventEmitter.emit("terminal-output",t.payload)}),t.on("setProjectInfo",(e,t)=>{let{projectDir:n,projectName:o,projectStatus:l,flowFile:d}=t.payload;a(n),i=d,s(o),r(l),window.__kumologica.settings.projectName=o,window.__kumologica.settings.projectDir=n,window.__kumologica.settings.projectFlowName=i,window.__kumologica.settings.loadConfigs(),RED.events.emit("cloud-config"),RED.events.emit("kumohub-config"),RED.events.emit("azure-config"),RED.events.emit("test-config"),RED.events.emit("project-info-config"),RED.events.emit("ui:changeProject")}),t.on("ui-runtime-startup-error",(e,t)=>{RED.notify(`<strong>Error</strong>: ${t.message}`,"error")}),{init:function(){RED.events.on("editor:synced",l),RED.events.on("editor:unsynced",d),RED.actions.add("core:toggle-terminal",h),RED.actions.add("core:view-main-flow",p),RED.actions.add("core:view-test-flow",u),RED.actions.add("core:toggle-settings",f),RED.events.on("editor:autosave:on",e=>{$("#btn-deploy").hide()}),RED.events.on("editor:autosave:off",e=>{$("#btn-deploy").show()}),$("#btn-new").focus(function(){this.blur()}),$("#btn-new").click(function(e){e.preventDefault(),window.__kumologica.main.dispatch("show-newProject-modal",null)}),$("#btn-open").focus(function(){this.blur()}),$("#btn-open").click(function(e){e.preventDefault(),window.__kumologica.main.dispatch("show-openProject-dialog",null)}),$("#btn-welcome").focus(function(){this.blur()}),$("#btn-welcome").click(e=>{e.preventDefault(),window.__kumologica.main.dispatch("main-header:show-modal-home",null)}),$("#view-main-flow").click(e=>{p()}),$("#view-test-flow").click(e=>{u()}),$("#import-btn").click(e=>{e.preventDefault(),RED.actions.invoke("core:search:close"),RED.clipboard.import()}),$("#export-btn").click(e=>{e.preventDefault(),RED.actions.invoke("core:search:close"),RED.clipboard.export()}),$("#shelve-left").focus(function(){this.blur()}),$("#shelve-middle").focus(function(){this.blur()}),$("#shelve-right").focus(function(){this.blur()}),RED.menu.isSelected("menu-item-palette")&&$("#shelve-left").addClass("shelf-selected"),RED.menu.isSelected("menu-item-sidebar")&&$("#shelve-right").addClass("shelf-selected"),$("#shelve-middle").hasClass("shelf-selected")?$("#workspace-terminal").show():$("#workspace-terminal").hide(),$("#shelve-left").click(function(e){e.preventDefault(),RED.menu.toggleSelected("menu-item-palette"),$(this).hasClass("shelf-selected")?$(this).removeClass("shelf-selected"):$(this).addClass("shelf-selected")}),$("#shelve-middle").click(function(e){e.preventDefault(),$(this).hasClass("shelf-selected")?($(this).removeClass("shelf-selected"),$("#workspace-terminal").hide()):($(this).addClass("shelf-selected"),$("#workspace-terminal").show())}),$("#shelve-right").click(function(e){e.preventDefault(),$(this).hasClass("shelf-selected")?($(this).removeClass("shelf-selected"),RED.actions.invoke("core:hide-sidebar")):($(this).addClass("shelf-selected"),RED.actions.invoke("core:show-sidebar",{selectIndex:0}))}),$("#btn-settings").click(function(e){e.preventDefault(),f()}),$("#btn-search").click(e=>{e.preventDefault(),$("#red-ui-search").is(":visible")?(console.log("[header] closing search panel"),RED.actions.invoke("core:search:close")):(console.log("[header] opening search panel"),RED.actions.invoke("core:search"))}),RED.actions.add("core:deploy",c),$("#btn-deploy").click(e=>{RED.actions.invoke("core:deploy")}),$("#projectIndicator").click(e=>{e.preventDefault(),$("#red-ui-project-info").is(":visible")?RED.actions.invoke("core:project-info:close"):RED.actions.invoke("core:project-info")}),$("#projectInfoExpand").click(e=>{e.preventDefault(),$("#red-ui-project-info").is(":visible")?RED.actions.invoke("core:project-info:close"):RED.actions.invoke("core:project-info")}),$("#projectIndicator").hover(()=>{$("#projectInfoExpand").css("color","#999")},()=>{$("#projectInfoExpand").css("color","#ecebeb")}),$("#projectInfoExpand").hover(()=>{$("#projectInfoExpand").css("color","#999")},()=>{$("#projectInfoExpand").css("color","#ecebeb")})},changeProjectStatus:r,getNewProjectModalWin:function(){return e},getCurrentProjectInfo:function(){return{projectName:n,projectDir:o,projectFlowName:i}},changeSelectedFlow:function(e){"test.flow"===e?$("#view-test-flow").click():$("#view-main-flow").click()}}}(),RED.terminal=function(){const e=180,t=900;let n,o="terminal-output",i=[];class a{constructor(e){const{opts:t,Terminal:n,FitAddon:o,eventEmitter:i}=window.__kumologica.editor.terminal;this.id=e,this.eventEmitter=i,this.fitAddon=new o,this.term=new n(t),this.term.loadAddon(this.fitAddon),this.term.open(this.getElement()[0]),this.term.attachCustomKeyEventHandler(function(e){if(e.ctrlKey&&e.shiftKey&&3==e.keyCode)return document.execCommand("copy"),!1}),this.hide(),this.subscribeEvents()}subscribeEvents(){this.eventEmitter.on(`${this.id}`,e=>{const t=e.split("\n");for(var n=0;n<t.length;n++)t[n]&&this.term.writeln(t[n])})}getElement(){return $(`#${this.id}`)}isVisible(){return this.getElement().is(":visible")}show(){this.getElement().show(),this.fitAddon.fit()}hide(){this.getElement().hide()}clear(){this.term.clear()}fit(){this.fitAddon.fit()}}function s(e){$(`#${e}`).removeClass("terminal-tab-unselected"),$(`#${e}`).removeClass("terminal-tab-selected")}function r(e){for(let t=0;t<i.length;t++)if(i[t].id===e)return i[t].terminal}function l(t){let i=t||"terminal-output";if(!r(i))throw new Error(`Terminal not defined: ${t}`);if(i===o)r(o).show();else{let e=o;o=i,r(e).hide(),r(o).show()}console.log("[terminal] activeTerminalID=",o),console.log("[terminal] activeTerminalHeight=",n),n||(n=e),$(`#${o}`).height(`${n}`)}return{init:function(){$("#terminal-tab-output").addClass("terminal-tab-selected"),$("#terminal-tab-cloud").addClass("terminal-tab-unselected"),$("#terminal-tab-output").click(e=>{e.preventDefault(),s("terminal-tab-output"),s("terminal-tab-cloud"),$("#terminal-tab-output").addClass("terminal-tab-selected"),$("#terminal-tab-cloud").addClass("terminal-tab-unselected"),l("terminal-output")}),$("#terminal-tab-cloud").click(e=>{e.preventDefault(),s("terminal-tab-output"),s("terminal-tab-cloud"),$("#terminal-tab-cloud").addClass("terminal-tab-selected"),$("#terminal-tab-output").addClass("terminal-tab-unselected"),l("terminal-cloud")}),$("#btn-terminal-max").click(e=>{var i=$("#chart").height(),a=$("#terminal-header").height(),s=i-a+50,l=$(`#${o}`).height();$(`#${o}`).height(l+s),n=t,r(`${o}`).fit(),$("#btn-terminal-max").hide(),$("#btn-terminal-min").show()}),$("#btn-terminal-min").click(t=>{$(`#${o}`).height(e),n=e,r(`${o}`).fit(),$("#btn-terminal-min").hide(),$("#btn-terminal-max").show()}),$("#btn-terminal-close").click(e=>{$("#shelve-middle").click()}),$("#btn-clear-logs").click(e=>{e.preventDefault();let t=r(o);t.clear()}),function(){!function(){let e;$("#terminal-separator").draggable({axis:"y",start:function(e,t){n=$(`#${o}`).height()},drag:function(t,i){e=n-i.position.top,$(`#${o}`).height(e),r(`${o}`).fit(),i.position.top=0},stop:function(t,o){n=e}})}();let e=new a("terminal-output");i.push({id:"terminal-output",terminal:e}),l()}()}}}(),RED.logviewer=function(){const e=180,t=900,{eventEmitter:n}=window.__kumologica.editor.terminal;let o;$("#workspace-terminal");const i="terminal-output";let a=$(`#${i}`),s=0;return{init:function(){$("#terminal-tab-output").addClass("terminal-tab-selected"),a.height(e),function(){let e;$("#terminal-separator").draggable({axis:"y",start:function(e,t){o=a.height()},drag:function(t,n){e=o-n.position.top,a.height(e),n.position.top=0},stop:function(t,n){o=e}})}(),n.on("terminal-output",e=>{const t=e.split("\n");for(var n=0;n<t.length;n++)t[n]&&($(`<span class="log-line"> ${t[n]}</span></br>`).appendTo(a),console.log("[logviewer] Adjusting scroll..."),s+=100,a.scrollTop(s))}),$("#btn-terminal-max").click(e=>{var n=$("#chart").height()-$("#terminal-header").height()+50,a=$(`#${i}`).height();$(`#${i}`).height(a+n),o=t,$("#btn-terminal-max").hide(),$("#btn-terminal-min").show()}),$("#btn-terminal-min").click(t=>{a.height(e),o=e,$("#btn-terminal-min").hide(),$("#btn-terminal-max").show()}),$("#btn-terminal-close").click(e=>{$("#shelve-middle").click()}),$("#btn-clear-logs").click(e=>{e.preventDefault(),a.empty(),s=0})}}}(),RED.modalNewProject=function(){function e(){""!==$("#projectNameSelected").val()&&""!==$("#projectPathSelected").val()?$("#btn-new-project-create").removeClass("disabled"):$("#btn-new-project-create").addClass("disabled")}return{init:function(){$("#projectNameSelected").focus(),$("#projectNameSelected").on("input",()=>{e(),function(){let e=$("#projectNameSelected").val();$("#projectNameSelected").val(e.replace(/\s+/g,"-"))}()}),$("#projectPathSelected").on("input",()=>{e()}),$("#btn-new-project-cancel").click(e=>{window.__kumologica.main.dispatch("modal-projects:close",null)}),$("#btn-new-project-create").click(e=>{e.preventDefault(),$(e.currentTarget).hasClass("secondary")||window.__kumologica.main.dispatch("modal-projects:create-project",{projectBaseDir:$("#projectPathSelected").val(),projectName:$("#projectNameSelected").val(),flow:$("#flowtoimport").val()})}),$("input[name=projectSources]","#newProjectSources").change(function(){let e=window.__kumologica.electron.remote.getCurrentWindow(),t=e.getSize(),n=$(this).val();"fromExistingFlow"===n?(e.setSize(t[0],t[1]+280),$("#flowtoimportSection").show()):"emptyProject"===n?(e.setSize(t[0],t[1]-280),$("#flowtoimportSection").hide()):console.log(`option unknown: ${n}`)}),$("#yourComputer").click(t=>{let n=window.__kumologica.electron.remote.getCurrentWindow();window.__kumologica.electron.remote.dialog.showOpenDialog(n,{title:"Select directory",properties:["openDirectory"]}).then(t=>{t.canceled||($("#projectPathSelectedDiv").show(),$("#projectPathSelected").val(`${t.filePaths[0]}`)),e()})})}}}(),RED.modalHome=function(){let e=[],t=window.__kumologica.electron.ipcRenderer;function n(e){return`modal-home:${e}`}return t.on("dependencies",(e,t)=>{$("#dependenciesNpm i").removeClass("fa-question"),$("#dependenciesNpm").addClass(()=>t.npm.status?"dep-ok":"dep-failed"),$("#dependenciesNpm i").addClass(t.npm.status?"fa-check":"fa-times"),RED.popover.tooltip($("#dependenciesNpm"),t.npm.info),$("#dependenciesAws i").removeClass("fa-question"),$("#dependenciesAws").addClass(()=>t.npm.status?"dep-ok":"dep-failed"),$("#dependenciesAws i").addClass(t.aws.status?"fa-check":"fa-times"),RED.popover.tooltip($("#dependenciesAws"),t.aws.info),$("#dependenciesProfile i").removeClass("fa-question"),$("#dependenciesProfile").addClass(()=>t.npm.status?"dep-ok":"dep-failed"),$("#dependenciesProfile i").addClass(t.awsProfile.status?"fa-check":"fa-times"),RED.popover.tooltip($("#dependenciesProfile"),t.awsProfile.info)}),t.on("receiveProps",(t,o)=>{!function(e){e&&e.length>0&&e.map(e=>{!function(e){let t=window.__kumologica.libs.path.basename(e);t=t.replace(/^@/,"").replace(/[^a-zA-Z0-9-]/g,"-");let o=$("#listRecentProjects"),i=`\n <div id="recent-${t}" class="recentProject">\n <span class="recentProjectName">${t}</span>\n </div>\n `;$(i).appendTo(o),$(`#recent-${t}`).click(t=>{t.preventDefault(),window.__kumologica.main.dispatch(n("open-project-in-editor"),{payload:{projectLocation:e}})}),$(`#recent-${t}`).mouseenter(function(){$(this).addClass("actionSelected")}),$(`#recent-${t}`).mouseleave(function(){$(this).removeClass("actionSelected")}),RED.popover.tooltip($(`#recent-${t}`),e)}(e)})}(e=o.payload.recentProjects)}),t.send("app_version"),t.on("app_version",(e,n)=>{t.removeAllListeners("app_version"),$("#ideversion").text(`Version ${n.version}`)}),{init:function(){$("#openProjectBtn").click(e=>(e.preventDefault(),console.log("firing event open project"),window.__kumologica.main.dispatch(n("show-dialog-openproject"),null),!1)),$("#actionNewProject").click(function(e){e.preventDefault(),window.__kumologica.main.dispatch(n("show-dialog-newproject"),null)}),$("#actionNewProject").mouseenter(()=>{$("#action-new-title").addClass("actionSelected"),$("#action-new-logo").addClass("fa-file"),$("#action-new-logo").removeClass("fa-file-o"),$("#action-new-logo").addClass("actionSelected")}),$("#actionNewProject").mouseleave(()=>{$("#action-new-title").removeClass("actionSelected"),$("#action-new-logo").removeClass("actionSelected"),$("#action-new-logo").removeClass("fa-file"),$("#action-new-logo").addClass("fa-file-o")}),$("#actionOpenProject").click(function(e){e.preventDefault(),window.__kumologica.main.dispatch(n("show-dialog-openproject"),null)}),$("#actionOpenProject").mouseenter(()=>{$("#action-open-title").addClass("actionSelected"),$("#action-open-logo").addClass("actionSelected"),$("#action-open-logo").addClass("fa-folder-open"),$("#action-open-logo").removeClass("fa-folder-open-o")}),$("#actionOpenProject").mouseleave(()=>{$("#action-open-title").removeClass("actionSelected"),$("#action-open-logo").removeClass("actionSelected"),$("#action-open-logo").removeClass("fa-folder-open"),$("#action-open-logo").addClass("fa-folder-open-o")})}}}(),RED.modalWelcome=function(){let e=window.__kumologica.electron.ipcRenderer;function t(e){return console.log(`modal-welcome:${e}`),`modal-welcome:${e}`}return e.on("dependencies",(e,t)=>{$("#dependenciesNpm i").removeClass("fa-question"),$("#dependenciesNpm").css("color",t.npm.status?"green":"red"),$("#dependenciesNpm i").addClass(t.npm.status?"fa-check":"fa-times"),RED.popover.tooltip($("#dependenciesNpm"),t.npm.info),$("#dependenciesAws i").removeClass("fa-question"),$("#dependenciesAws").css("color",t.aws.status?"green":"red"),$("#dependenciesAws i").addClass(t.aws.status?"fa-check":"fa-times"),RED.popover.tooltip($("#dependenciesAws"),t.aws.info),$("#dependenciesProfile i").removeClass("fa-question"),$("#dependenciesProfile").css("color",t.awsProfile.status?"green":"red"),$("#dependenciesProfile i").addClass(t.awsProfile.status?"fa-check":"fa-times"),RED.popover.tooltip($("#dependenciesProfile"),t.awsProfile.info)}),e.send("app_version"),e.on("app_version",(t,n)=>{e.removeAllListeners("app_version"),$("#ideversion").text(`Version: ${n.version}`)}),{init:function(){$("#openProjectWelcomeBtn").click(e=>(e.preventDefault(),window.__kumologica.main.dispatch(t("show-dialog-openproject"),null),!1)),$("#actionNewProjectWelcome").click(function(e){e.preventDefault(),window.__kumologica.main.dispatch(t("show-dialog-newproject"),null)}),$("#actionNewProjectWelcome").mouseenter(()=>{$("#action-new-title").addClass("actionSelected"),$("#action-new-logo").addClass("fa-file"),$("#action-new-logo").removeClass("fa-file-o"),$("#action-new-logo").addClass("actionSelected")}),$("#actionNewProjectWelcome").mouseleave(()=>{$("#action-new-title").removeClass("actionSelected"),$("#action-new-logo").removeClass("actionSelected"),$("#action-new-logo").removeClass("fa-file"),$("#action-new-logo").addClass("fa-file-o")}),$("#actionOpenProjectWelcome").click(function(e){e.preventDefault(),window.__kumologica.main.dispatch(t("show-dialog-openproject"),null)}),$("#actionOpenProjectWelcome").mouseenter(()=>{$("#action-open-title").addClass("actionSelected"),$("#action-open-logo").addClass("actionSelected"),$("#action-open-logo").addClass("fa-folder-open"),$("#action-open-logo").removeClass("fa-folder-open-o")}),$("#actionOpenProjectWelcome").mouseleave(()=>{$("#action-open-title").removeClass("actionSelected"),$("#action-open-logo").removeClass("actionSelected"),$("#action-open-logo").removeClass("fa-folder-open"),$("#action-open-logo").addClass("fa-folder-open-o")})}}}(),RED.modalNodeLibrary=function(){let e=window.__kumologica.electron.ipcRenderer;function t(){e.on("modal-node-library:fetch-installed-nodes-response",async(e,t)=>{await async function(e){o();try{const t=await window.__kumologica.nodeLibrary.available();t.forEach(t=>{let o=function(e,t){return t.includes(e.package)}(t,e),i=o?"installed":"available";(t=t).label&&t.description&&t.icon&&t.author&&(!0===t.premium||0==t.premium&&t.package)&&function(e,t,o){$(t).appendTo($("#library-grid")),n(o,e)}(t,function(e){let t,n=`${window.__kumologica.nodeLibrary.baseURL}${e.icon}`;t=e.premium?`\n <div id="card-${e.label}" class="library-node-card library-node-card-premium">\n <div class="nodecard-cover">\n <div style="position: relative; top: 21px; left: 14px; width:92px; background: white;">\n <img src=${n}>\n </div>\n <div style="display: flex; width: 100%; justify-content: flex-end;margin-right: 13px">\n <span style="padding: 2px 10px; background: #9c27b0; text-transform: uppercase; font-size: 10px; letter-spacing: 0.1em;border-radius: 2px;color: white;">\n Premium\n </span>\n </div>\n </div>\n \n <div class="nodecard-info">\n <span class="node-author">${e.author}</span>\n <span>${e.label}</span>\n </div>\n \n <div class="nodecard-details">\n <span>${e.description}</span>\n </div>\n <div class="nodecard-actions" style="color: black; font-weight: 500; padding-top: 15px">\n <span class="contact-sales" style="font-size:13px; text-transform: uppercase; font-weight: 500; letter-spacing: -0.01em; color:#9c27b0;">\n Contact Sales\n </span>\n </div>\n </div>\n `:`\n <div id="card-${e.label}" class="library-node-card">\n <div class="nodecard-cover">\n <div style="position: relative; top: 21px; left: 14px; width:92px; background: white;">\n <img src=${n} />\n </div>\n <div style="display: flex; width: 100%; justify-content: flex-end;margin-right: 13px">\n <span style="padding: 2px 10px; background: #56B373; text-transform: uppercase; font-size: 10px; letter-spacing: 0.1em;border-radius: 2px;color: white;">\n Free\n </span>\n </div>\n </div>\n \n <div class="nodecard-info">\n <span class="node-author">${e.author}</span>\n <span>${e.label}</span>\n </div>\n \n <div class="nodecard-details">\n <span>${e.description}</span>\n </div>\n <div class="nodecard-actions">\n <button id="btn-${e.label}" type="button" class="card-button ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only secondary">\n Install\n </button>\n </div>\n </div>\n `;return t}(t),i)})}catch(e){console.log("[modal-node-library] Error found while fetching available nodes...",e),$("#loading-library").hide(),$("#library-not-reachable").addClass("flex"),$("#library-not-reachable").show()}var t}(t.installedNodes),$("#loading-library").hide(),$("#library-grid").show()}),e.on("modal-node-library:install-package-initiated",(e,t)=>{n("installing",t.source)}),e.on("modal-node-library:install-package-finished",(e,t)=>{n("restart-required",t.source)}),e.on("modal-node-library:uninstall-package-finished",(e,t)=>{n("restart-required",t.source)})}function n(e,t){switch($(`#btn-${t.label}`).removeClass("node-installing"),$(`#btn-${t.label}`).removeClass("node-required-restart"),$(`#btn-${t.label}`).removeClass("node-installed"),$(`#btn-${t.label}`).off("click"),e){case"installing":$(`#btn-${t.label}`).html("Installing..."),$(`#btn-${t.label}`).addClass("node-installing");break;case"restart-required":$(`#card-${t.label}`).addClass("node-required-restart"),$(`#btn-${t.label}`).html("Restart required"),$(`#btn-${t.label}`).addClass("node-required-restart"),$(`#btn-${t.label}`).click(e=>{window.__kumologica.main.dispatch("modal-node-library:restart-requested",{source:t})});break;case"installed":$(`#card-${t.label}`).addClass("node-installed"),$(`#btn-${t.label}`).addClass("node-installed"),$(`#btn-${t.label}`).html("Uninstall"),$(`#btn-${t.label}`).click(e=>{$(`#btn-${t.label}`).html("Uninstalling..."),window.__kumologica.main.dispatch("modal-node-library:uninstall-package",{source:t})});break;case"available":$(`#btn-${t.label}`).click(e=>{window.__kumologica.main.dispatch("modal-node-library:install-package",{source:t})});break;default:console.log(`modal-node-library received an unknown event:${e}`)}}function o(){$("#library-not-reachable").removeClass("flex"),$("#library-not-reachable").hide()}function i(){o(),$("#loading-library").show(),$("#library-grid").hide(),window.__kumologica.main.dispatch("modal-node-library:fetch-installed-nodes",null)}return{init:async function(){t(),i(),$("#launch-node-library").click(e=>{e.preventDefault(),window.__kumologica.main.dispatch("show-node-library-modal",null)})}}}();
|