webservices/node_modules/@node-red/editor-client/public/red/red.min.js

19 lines
No EOL
941 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Copyright OpenJS Foundation and other contributors, https://openjsf.org/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
!function(){var o;!window.MSInputMethodContext||!document.documentMode||(window.DOMTokenList.prototype.toggle=function(e,t){1===arguments.length&&(t=!this.contains(e)),this[t?"add":"remove"](e)},"classList"in SVGElement.prototype||Object.defineProperty(SVGElement.prototype,"classList",Object.getOwnPropertyDescriptor(HTMLElement.prototype,"classList")),"children"in SVGElement.prototype||Object.defineProperty(SVGElement.prototype,"children",Object.getOwnPropertyDescriptor(HTMLElement.prototype,"children")),Array.from=function(){if(1<arguments.length)throw new Error("Node-RED's IE11 Array.from polyfill doesn't support multiple arguments");var e=arguments[0],t=[];if(e.forEach)e.forEach(function(e){t.push(e)});else for(var o=0;o<e.length;o++)t.push(arrayList[o]);return t},0!==new Set([0]).size)||(o=Set,(Set=function(e){var t=new o;return e&&e.forEach(t.add,t),t}).prototype=o.prototype,Set.prototype.constructor=Set)}(),jQuery.propHooks.disabled={set:function(e,t){e.disabled!==t&&((e.disabled=t)?$(e).trigger("disabled"):$(e).trigger("enabled"))}};var RED=function(){function i(){f.reportProgress(RED._("event.loadPlugins"),10),$.ajax({headers:{Accept:"application/json"},cache:!1,url:"plugins",success:function(e){RED.plugins.setPluginList(e),f.reportProgress(RED._("event.loadPlugins"),13),RED.i18n.loadPluginCatalogs(function(){var n,e;n=function(){f.reportProgress(RED._("event.loadPalette"),20),$.ajax({headers:{Accept:"application/json"},cache:!1,url:"nodes",success:function(e){RED.nodes.setNodeList(e),f.reportProgress(RED._("event.loadNodeCatalogs"),25),RED.i18n.loadNodeCatalogs(function(){l(t)})}})},f.reportProgress(RED._("event.loadPlugins",{count:""}),17),e=localStorage.getItem("editor-language")||RED.i18n.detectLanguage(),$.ajax({headers:{Accept:"text/html","Accept-Language":e},cache:!1,url:"plugins",success:function(e){var t=e.trim().split(/(?=<!-- --- \[red-plugin:\S+\] --- -->)/),o=(t.length,function(){0===t.length?n():r(t.shift(),o)});o()}})})}})}function o(e,t,i,a){var s;a=a||function(){},t?(s=t[1],RED._loadingModule=s):s="unknown";try{var r=!1,d=$("<div>"+e+"</div>"),o=d.find("script"),l=o.length;o.each(function(e,t){var o,n=$(t).attr("src");n&&!/^\s*(https?:|\/|\.)/.test(n)?($(t).remove(),(o=document.createElement("script")).onload=function(){0===--l&&($(i).append(d),delete RED._loadingModule,a())},"module"===$(t).attr("type")&&(o.type="module"),$(i).append(o),o.src=RED.settings.apiRootUrl+n,r=!0):((/\/ace.js$/.test(n)||/\/ext-language_tools.js$/.test(n))&&(console.warn("Blocked attempt to load",n,"by",s),$(t).remove()),l--)}),r||($(i).append(d),delete RED._loadingModule,a())}catch(e){RED.notify(RED._("notification.errors.failedToAppendNode",{module:s,error:e.toString()}),{type:"error",timeout:1e4}),console.log("["+s+"] "+e.toString()),delete RED._loadingModule,a()}}function r(e,t){o(e,/<!-- --- \[red-plugin:(\S+)\] --- -->/.exec(e.trim()),"#red-ui-editor-plugin-configs",t)}function d(e,t){o(e,/<!-- --- \[red-module:(\S+)\] --- -->/.exec(e.trim()),"#red-ui-editor-node-configs",t)}function l(t){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"icons",success:function(e){RED.nodes.setIconSets(e),t&&t()}})}function t(){f.reportProgress(RED._("event.loadNodes",{count:""}),30);var e=localStorage.getItem("editor-language")||RED.i18n.detectLanguage();$.ajax({headers:{Accept:"text/html","Accept-Language":e},cache:!1,url:"nodes",success:function(e){var t=e.trim().split(/(?=<!-- --- \[red-module:\S+\] --- -->)/),o=t.length,n=function(){f.reportProgress(RED._("event.loadNodes",{count:o-t.length+"/"+o}),30+(o-t.length)/o*40),0===t.length?($("#red-ui-editor").i18n(),$("#red-ui-palette > .red-ui-palette-spinner").hide(),$(".red-ui-palette-scroll").removeClass("hide"),$("#red-ui-palette-search").removeClass("hide"),RED.settings.theme("projects.enabled",!1)?RED.projects.refresh(function(t){c(function(){RED.sidebar.info.refresh();var e=!1;t||(RED.menu.setDisabled("menu-item-projects-open",!0),RED.menu.setDisabled("menu-item-projects-settings",!0),!1!==t&&(e=!0)),a(e)})}):c(function(){RED.sidebar.info.refresh(),a()})):d(t.shift(),n)};n()}})}function c(l){f.reportProgress(RED._("event.loadFlows"),80),$.ajax({headers:{Accept:"application/json"},cache:!1,url:"flows",success:function(e){if(e){var t=window.location.hash;RED.nodes.version(e.rev),f.reportProgress(RED._("event.importFlows"),90);try{if(RED.nodes.import(e.flows),RED.nodes.dirty(!1),RED.view.redraw(!0),/^#(flow|node|group)\/.+$/.test(t)){var o,n=t.split("/");const r=2<n.length&&"edit"===n[2];if("#flow"===n[0])RED.workspaces.show(n[1],!0),r&&RED.workspaces.edit();else if("#node"===n[0]){const d=RED.nodes.node(n[1]);d&&setTimeout(()=>{RED.view.reveal(d.id),window.location.hash=t,RED.view.select(d.id),r&&RED.editor.edit(d)},50)}else"#group"===n[0]&&(o=RED.nodes.group(n[1]))&&(RED.view.reveal(o.id),window.location.hash=t,RED.view.select(o.id),r)&&RED.editor.editGroup(o)}if(0<RED.workspaces.count()){var i=JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}"),a=RED.nodes.getWorkspaceOrder();if(0===RED.workspaces.active())for(let e=0;e<a.length;e++){var s=a[e];if(!i[s]){RED.workspaces.show(s);break}}0===RED.workspaces.active()&&RED.workspaces.show(a[0])}RED.events.emit("flows:loaded")}catch(e){console.warn(e),RED.notify(RED._("event.importError",{message:e.message}),{fixed:!0,type:"error"})}}l()}})}function a(t){var i={};RED.comms.subscribe("notification/#",function(e,t){var o,n=e.split("/")[1];"runtime-deploy"!==n&&"node"!==n&&"flows-run-state"!==n&&("project-update"===n?(f.start(RED._("event.loadingProject"),0),RED.nodes.clear(),RED.history.clear(),RED.view.redraw(!0),RED.projects.refresh(function(){c(function(){var e=RED.projects.getActiveProject(),e={"change-branch":RED._("notification.project.change-branch",{project:e.git.branches.local}),"merge-abort":RED._("notification.project.merge-abort"),loaded:RED._("notification.project.loaded",{project:t.project}),updated:RED._("notification.project.updated",{project:t.project}),pull:RED._("notification.project.pull",{project:t.project}),revert:RED._("notification.project.revert",{project:t.project}),"merge-complete":RED._("notification.project.merge-complete")}[t.action];f.end(),RED.notify($("<p>").text(e)),RED.sidebar.info.refresh(),RED.menu.setDisabled("menu-item-projects-open",!1),RED.menu.setDisabled("menu-item-projects-settings",!1)})})):(t.text?(t.default=t.text,e=RED._(t.text,t),o={type:t.type,fixed:void 0===t.timeout,timeout:t.timeout,id:n},"runtime-state"===n?"safe-mode"===t.error?o.buttons=[{text:RED._("common.label.close"),click:function(){i[n].hideNotification()}}]:"missing-types"===t.error?(e+="<ul><li>"+t.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.projects.getActiveProject()?o.buttons=[{text:RED._("notification.label.manage-project-dep"),click:function(){i[n].hideNotification(),RED.projects.settings.show("deps")}}]:o.buttons=[{text:RED._("notification.label.unknownNodesButton"),class:"pull-left",click:function(){RED.actions.invoke("core:search","type:unknown ")}},{class:"primary",text:RED._("common.label.close"),click:function(){i[n].hideNotification()}}]):"missing-modules"===t.error?(e+="<ul><li>"+t.modules.map(function(e){return RED.utils.sanitize(e.module)+(e.error?" - <small>"+RED.utils.sanitize(""+e.error)+"</small>":"")}).join("</li><li>")+"</li></ul>",o.buttons=[{text:RED._("common.label.close"),click:function(){i[n].hideNotification()}}]):"credentials_load_failed"===t.error?RED.settings.theme("projects.enabled",!1)?RED.user.hasPermission("projects.write")&&(o.buttons=[{text:RED._("notification.project.setupCredentials"),click:function(){i[n].hideNotification(),RED.projects.showCredentialsPrompt()}}]):o.buttons=[{text:RED._("common.label.close"),click:function(){i[n].hideNotification()}}]:"missing_flow_file"===t.error||"missing_package_file"===t.error?RED.user.hasPermission("projects.write")&&(o.buttons=[{text:RED._("notification.project.setupProjectFiles"),click:function(){i[n].hideNotification(),RED.projects.showFilesPrompt()}}]):"project_empty"===t.error?RED.user.hasPermission("projects.write")&&(o.buttons=[{text:RED._("notification.project.no"),click:function(){i[n].hideNotification()}},{text:RED._("notification.project.createDefault"),click:function(){i[n].hideNotification(),RED.projects.createDefaultFileSet()}}]):"git_merge_conflict"===t.error&&(RED.nodes.clear(),RED.sidebar.versionControl.refresh(!0),RED.user.hasPermission("projects.write"))&&(o.buttons=[{text:RED._("notification.project.mergeConflict"),click:function(){i[n].hideNotification(),RED.sidebar.versionControl.showLocalChanges()}}]):"restart-required"===n&&(o.buttons=[{text:RED._("common.label.close"),click:function(){i[n].hideNotification()}}]),i.hasOwnProperty(n)?i[n].update(e,o):i[n]=RED.notify(e,o)):i.hasOwnProperty(n)&&(i[n].close(),delete i[n]),"runtime-state"===n&&RED.events.emit("runtime-state",t)))}),RED.comms.subscribe("status/#",function(e,t){e=e.split("/"),e=RED.nodes.node(e[1]);e&&(t.hasOwnProperty("text")&&null!==t.text&&/^[@a-zA-Z]/.test(t.text)&&(t.text=e._(t.text.toString(),{defaultValue:t.text.toString()})),e.status=t,e.dirtyStatus=!0,e.dirty=!0,RED.view.redrawStatus(e))}),RED.comms.subscribe("notification/plugin/#",function(e,i){"notification/plugin/added"==e&&RED.settings.refreshSettings(function(e,t){let o=[];var n;i.forEach(function(e){let t=e.id;RED.plugins.addPlugin(e),e.plugins.forEach(e=>{o.push(e.id)}),RED.i18n.loadNodeCatalog(t,function(){var e=localStorage.getItem("editor-language")||RED.i18n.detectLanguage();$.ajax({headers:{Accept:"text/html","Accept-Language":e},cache:!1,url:"plugins/"+t,success:function(e){r(e)}})})}),o.length&&(n="<ul><li>"+o.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:o.length})+n,"success"))})});let a=[],s;RED.comms.subscribe("notification/node/#",function(e,n){var t,o,i;if("notification/node/added"==e)RED.settings.refreshSettings(function(e,t){var o=[];n.forEach(function(e){var t=e.id;RED.nodes.addNodeSet(e),o=o.concat(e.types),RED.i18n.loadNodeCatalog(t,function(){var e=localStorage.getItem("editor-language")||RED.i18n.detectLanguage();$.ajax({headers:{Accept:"text/html","Accept-Language":e},cache:!1,url:"nodes/"+t,success:function(e){d(e)}})})}),o.length&&(i="<ul><li>"+o.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:o.length})+i,"success")),l()});else if("notification/node/removed"==e){for(t=0;t<n.length;t++)o=n[t],RED.nodes.removeNodeSet(o.id).added&&(a=a.concat(o.types.map(RED.utils.sanitize)),s&&clearTimeout(s),s=setTimeout(function(){i="<ul><li>"+a.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeRemoved",{count:a.length})+i,"success"),a=[]},200));l()}else"notification/node/enabled"==e?n.types&&RED.settings.refreshSettings(function(e,t){var o;RED.nodes.getNodeSet(n.id).added?(RED.nodes.enableNodeSet(n.id),i="<ul><li>"+n.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeEnabled",{count:n.types.length})+i,"success")):(o=localStorage.getItem("editor-language")||RED.i18n.detectLanguage(),$.ajax({headers:{Accept:"text/html","Accept-Language":o},cache:!1,url:"nodes/"+n.id,success:function(e){d(e),i="<ul><li>"+n.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:n.types.length})+i,"success")}}))}):"notification/node/disabled"==e?n.types&&(RED.nodes.disableNodeSet(n.id),i="<ul><li>"+n.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeDisabled",{count:n.types.length})+i,"success")):"notification/node/upgraded"==e&&(RED.notify(RED._("palette.event.nodeUpgraded",{module:n.module,version:n.version}),"success"),RED.nodes.registry.setModulePendingUpdated(n.module,n.version))}),RED.comms.subscribe("event-log/#",function(e,t){e=e.substring(9);RED.eventLog.log(e,t)}),$(".red-ui-header-toolbar").show(),RED.sidebar.show(":first",!0),setTimeout(function(){var e;f.end(),!(e=function(){t&&RED.projects.showStartup()})!==RED.settings.theme("tours")&&RED.settings.get("editor.view.view-show-welcome-tours",!0)?RED.actions.invoke("core:show-welcome-tour",RED.settings.get("editor.tours.welcome"),e):e()},100)}function s(){var e=[];RED.settings.theme("projects.enabled",!1)&&e.push({id:"menu-item-projects-menu",label:RED._("menu.label.projects"),options:[{id:"menu-item-projects-new",label:RED._("menu.label.projects-new"),disabled:!1,onselect:"core:new-project"},{id:"menu-item-projects-open",label:RED._("menu.label.projects-open"),disabled:!1,onselect:"core:open-project"},{id:"menu-item-projects-settings",label:RED._("menu.label.projects-settings"),disabled:!1,onselect:"core:show-project-settings"}]}),e.push({id:"menu-item-edit-menu",label:RED._("menu.label.edit"),options:[{id:"menu-item-edit-undo",label:RED._("keyboard.undoChange"),disabled:!0,onselect:"core:undo"},{id:"menu-item-edit-redo",label:RED._("keyboard.redoChange"),disabled:!0,onselect:"core:redo"},null,{id:"menu-item-edit-cut",label:RED._("keyboard.cutNode"),onselect:"core:cut-selection-to-internal-clipboard"},{id:"menu-item-edit-copy",label:RED._("keyboard.copyNode"),onselect:"core:copy-selection-to-internal-clipboard"},{id:"menu-item-edit-paste",label:RED._("keyboard.pasteNode"),disabled:!0,onselect:"core:paste-from-internal-clipboard"},null,{id:"menu-item-edit-copy-group-style",label:RED._("keyboard.copyGroupStyle"),onselect:"core:copy-group-style"},{id:"menu-item-edit-paste-group-style",label:RED._("keyboard.pasteGroupStyle"),disabled:!0,onselect:"core:paste-group-style"},null,{id:"menu-item-edit-select-all",label:RED._("keyboard.selectAll"),onselect:"core:select-all-nodes"},{id:"menu-item-edit-select-connected",label:RED._("keyboard.selectAllConnected"),onselect:"core:select-connected-nodes"},{id:"menu-item-edit-select-none",label:RED._("keyboard.selectNone"),onselect:"core:select-none"},null,{id:"menu-item-edit-split-wire-with-links",label:RED._("keyboard.splitWireWithLinks"),onselect:"core:split-wire-with-link-nodes"}]}),e.push({id:"menu-item-view-menu",label:RED._("menu.label.view.view"),options:[{id:"menu-item-palette",label:RED._("menu.label.palette.show"),toggle:!0,onselect:"core:toggle-palette",selected:!0},{id:"menu-item-sidebar",label:RED._("menu.label.sidebar.show"),toggle:!0,onselect:"core:toggle-sidebar",selected:!0},{id:"menu-item-event-log",label:RED._("eventLog.title"),onselect:"core:show-event-log"},{id:"menu-item-action-list",label:RED._("keyboard.actionList"),onselect:"core:show-action-list"},null]}),e.push({id:"menu-item-arrange-menu",label:RED._("menu.label.arrange"),options:[{id:"menu-item-view-tools-align-left",label:RED._("menu.label.alignLeft"),disabled:!0,onselect:"core:align-selection-to-left"},{id:"menu-item-view-tools-align-center",label:RED._("menu.label.alignCenter"),disabled:!0,onselect:"core:align-selection-to-center"},{id:"menu-item-view-tools-align-right",label:RED._("menu.label.alignRight"),disabled:!0,onselect:"core:align-selection-to-right"},null,{id:"menu-item-view-tools-align-top",label:RED._("menu.label.alignTop"),disabled:!0,onselect:"core:align-selection-to-top"},{id:"menu-item-view-tools-align-middle",label:RED._("menu.label.alignMiddle"),disabled:!0,onselect:"core:align-selection-to-middle"},{id:"menu-item-view-tools-align-bottom",label:RED._("menu.label.alignBottom"),disabled:!0,onselect:"core:align-selection-to-bottom"},null,{id:"menu-item-view-tools-distribute-horizontally",label:RED._("menu.label.distributeHorizontally"),disabled:!0,onselect:"core:distribute-selection-horizontally"},{id:"menu-item-view-tools-distribute-veritcally",label:RED._("menu.label.distributeVertically"),disabled:!0,onselect:"core:distribute-selection-vertically"},null,{id:"menu-item-view-tools-move-to-back",label:RED._("menu.label.moveToBack"),disabled:!0,onselect:"core:move-selection-to-back"},{id:"menu-item-view-tools-move-to-front",label:RED._("menu.label.moveToFront"),disabled:!0,onselect:"core:move-selection-to-front"},{id:"menu-item-view-tools-move-backwards",label:RED._("menu.label.moveBackwards"),disabled:!0,onselect:"core:move-selection-backwards"},{id:"menu-item-view-tools-move-forwards",label:RED._("menu.label.moveForwards"),disabled:!0,onselect:"core:move-selection-forwards"}]}),e.push(null),RED.settings.theme("menu.menu-item-import-library",!0)&&e.push({id:"menu-item-import",label:RED._("menu.label.import"),onselect:"core:show-import-dialog"}),RED.settings.theme("menu.menu-item-export-library",!0)&&e.push({id:"menu-item-export",label:RED._("menu.label.export"),onselect:"core:show-export-dialog"}),e.push(null),e.push({id:"menu-item-search",label:RED._("menu.label.search"),onselect:"core:search"}),e.push(null),e.push({id:"menu-item-config-nodes",label:RED._("menu.label.displayConfig"),onselect:"core:show-config-tab"}),e.push({id:"menu-item-workspace",label:RED._("menu.label.flows"),options:[{id:"menu-item-workspace-add",label:RED._("menu.label.add"),onselect:"core:add-flow"},{id:"menu-item-workspace-edit",label:RED._("menu.label.edit"),onselect:"core:edit-flow"},{id:"menu-item-workspace-delete",label:RED._("menu.label.delete"),onselect:"core:remove-flow"}]}),e.push({id:"menu-item-subflow",label:RED._("menu.label.subflows"),options:[{id:"menu-item-subflow-create",label:RED._("menu.label.createSubflow"),onselect:"core:create-subflow"},{id:"menu-item-subflow-convert",label:RED._("menu.label.selectionToSubflow"),disabled:!0,onselect:"core:convert-to-subflow"}]}),e.push({id:"menu-item-group",label:RED._("menu.label.groups"),options:[{id:"menu-item-group-group",label:RED._("menu.label.groupSelection"),disabled:!0,onselect:"core:group-selection"},{id:"menu-item-group-ungroup",label:RED._("menu.label.ungroupSelection"),disabled:!0,onselect:"core:ungroup-selection"},null,{id:"menu-item-group-merge",label:RED._("menu.label.groupMergeSelection"),disabled:!0,onselect:"core:merge-selection-to-group"},{id:"menu-item-group-remove",label:RED._("menu.label.groupRemoveSelection"),disabled:!0,onselect:"core:remove-selection-from-group"}]}),e.push(null),!1!==RED.settings.get("externalModules.palette.allowInstall",!0)&&(e.push({id:"menu-item-edit-palette",label:RED._("menu.label.editPalette"),onselect:"core:manage-palette"}),e.push(null)),e.push({id:"menu-item-user-settings",label:RED._("menu.label.settings"),onselect:"core:show-user-settings"}),e.push(null),RED.settings.theme("menu.menu-item-keyboard-shortcuts",!0)&&e.push({id:"menu-item-keyboard-shortcuts",label:RED._("menu.label.keyboardShortcuts"),onselect:"core:show-help"}),e.push({id:"menu-item-help",label:RED.settings.theme("menu.menu-item-help.label",RED._("menu.label.help")),href:RED.settings.theme("menu.menu-item-help.url","https://nodered.org/docs")}),e.push({id:"menu-item-node-red-version",label:"v"+RED.settings.version,onselect:"core:show-about"}),$('<li><a id="red-ui-header-button-sidemenu" class="button" href="#"><i class="fa fa-bars"></i></a></li>').appendTo(".red-ui-header-toolbar"),RED.menu.init({id:"red-ui-header-button-sidemenu",options:e})}var u=null,p=!1;var f={init:function(){var e=$('<div id="red-ui-loading-progress"></div>').hide(),t=$("<div>").appendTo(e),t=($("<div>",{class:"red-ui-loading-bar-label"}).appendTo(t),$("<div>",{class:"red-ui-loading-bar"}).appendTo(t));$("<span>").appendTo(t);return e},start:function(e,t){e&&f.reportProgress(e,t),$("#red-ui-loading-progress").show()},reportProgress:function(e,t){$(".red-ui-loading-bar-label").text(e),$(".red-ui-loading-bar span").width(t+"%")},end:function(){$("#red-ui-loading-progress").hide(),f.reportProgress("",0)}};return{init:function(e){if(p)throw new Error("RED already initialised");var t,o,n;p=!0,window.ace&&window.ace.require("ace/ext/language_tools"),(e=e||{}).apiRootUrl=e.apiRootUrl||"",e.apiRootUrl&&!/\/$/.test(e.apiRootUrl)&&(e.apiRootUrl=e.apiRootUrl+"/"),e.target=$("#red-ui-editor"),e.target.addClass("red-ui-editor"),t=e,o=$('<div id="red-ui-header"></div>').appendTo(t.target),n=$('<span class="red-ui-header-logo"></span>').appendTo(o),$('<ul class="red-ui-header-toolbar hide"></ul>').appendTo(o),$('<div id="red-ui-header-shade" class="hide"></div>').appendTo(o),$('<div id="red-ui-main-container" class="red-ui-sidebar-closed hide"><div id="red-ui-workspace"></div><div id="red-ui-editor-stack" tabindex="-1"></div><div id="red-ui-palette"></div><div id="red-ui-sidebar"></div><div id="red-ui-sidebar-separator"></div></div>').appendTo(t.target),$('<div id="red-ui-editor-plugin-configs"></div>').appendTo(t.target),$('<div id="red-ui-editor-node-configs"></div>').appendTo(t.target),$('<div id="red-ui-full-shade" class="hide"></div>').appendTo(t.target),f.init().appendTo("#red-ui-main-container"),f.start("...",0),$.getJSON(t.apiRootUrl+"theme",function(e){e.header&&(e.header.url&&(n=$("<a>",{href:e.header.url}).appendTo(n)),e.header.image&&$("<img>",{src:e.header.image}).appendTo(n),e.header.title)&&$("<span>").html(e.header.title).appendTo(n),e.themes&&(u=e.themes)}),RED.i18n.init(e,function(){RED.settings.init(e,function(){u&&(RED.settings.editorTheme=RED.settings.editorTheme||{},RED.settings.editorTheme.themes=u),RED.workspaces.init(),RED.statusBar.init(),RED.view.init(),RED.userSettings.init(),RED.user.init(),RED.notifications.init(),RED.library.init(),RED.palette.init(),RED.eventLog.init(),!1!==RED.settings.get("externalModules.palette.allowInstall",!0)?RED.palette.editor.init():console.log("Palette editor disabled"),RED.sidebar.init(),RED.settings.theme("projects.enabled",!1)?RED.projects.init():console.log("Projects disabled"),RED.subflow.init(),RED.group.init(),RED.clipboard.init(),RED.search.init(),RED.actionList.init(),RED.editor.init(),RED.diagnostics.init(),RED.diff.init(),RED.deploy.init(RED.settings.theme("deployButton",null)),RED.keyboard.init(s),RED.envVar.init(),RED.nodes.init(),RED.runtime.init(),RED.settings.theme("multiplayer.enabled",!1)&&RED.multiplayer.init(),RED.comms.connect(),$("#red-ui-main-container").show(),i()})})},loader:f}}();RED.events=function(){var i={};return{on:function(e,t){i[e]=i[e]||[],i[e].push(t)},off:function(e,t){var o=i[e];if(o)for(var n=0;n<o.length;n++)if(o[n]===t)return void o.splice(n,1)},emit:function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);if(RED.events.DEBUG&&console.warn(t,e),i[t])for(var o=[...i[t]],n=0;n<o.length;n++)try{o[n].apply(null,e)}catch(e){console.warn("RED.events.emit error: ["+t+"] "+e.toString()),console.warn(e)}}}}(),RED.hooks=function(){var s={},r={};function d(e,t){var o=t.previousHook,n=t.nextHook;o?o.nextHook=n:s[e]=n,n&&(n.previousHook=o),t.removed=!0,o||n||delete s[e]}return{has:function(e){var t=(e=e.split("."))[0];return(e=e[1])?!(!r[e]||!r[e][t]):!!s[t]},clear:function(){s={},r={}},add:function(e,t){var o=e.split("."),n=o[0];if((o=o[1])&&r[o]&&r[o][n])throw new Error("Hook "+e+" already registered");var e={cb:t,previousHook:null,nextHook:null},i=s[n];if(void 0===i)s[n]=e;else{for(;null!==i.nextHook;)i=i.nextHook;(i.nextHook=e).previousHook=i}o&&(r[o]=r[o]||{},r[o][n]=e)},remove:function(e){var t=e.split("."),o=t[0],n=t[1];if(!n)throw new Error("Cannot remove hook without label: "+e);if(r[n])if("*"===o){for(var i=Object.keys(r[n]),a=0;a<i.length;a++)d(i[a],r[n][i[a]]);delete r[n]}else r[n][o]&&(d(o,r[n][o]),delete r[n][o],0===Object.keys(r[n]).length)&&delete r[n]},trigger:function(e,n,i){var a=s[e];if(a)return function t(e){if(!a||e)return i&&i(e),e;if(a.removed)return a=a.nextHook,t();e=a.cb;if(1===e.length)try{var o=e(n);return!1===o?(i&&i(!1),o):(a=a.nextHook,t())}catch(e){return console.warn(e),i&&i(e),e}else try{e(n,function(e){void 0===e?(a=a.nextHook,t()):i&&i(e)})}catch(e){return console.warn(e),i&&i(e),e}}();i&&i()}}}(),RED.i18n=function(){var a;function s(){return navigator.language}return{init:function(e,t){a=e.apiRootUrl||"";var e=localStorage.getItem("editor-language")||s(),o={compatibilityJSON:"v3",backend:{loadPath:a+"locales/__ns__?lng=__lng__"},lng:"en-US",preload:["en-US"],ns:["editor","node-red","jsonata","infotips"],defaultNS:"editor",fallbackLng:["en-US"],returnObjects:!0,keySeparator:".",nsSeparator:":",interpolation:{unescapeSuffix:"HTML",escapeValue:!1,prefix:"__",suffix:"__"}};e&&(o.lng=e),i18next.use(i18nextHttpBackend).init(o,function(){t()}),jqueryI18next.init(i18next,$,{handleName:"i18n"}),RED._=function(){var e=i18next.t.apply(i18next,arguments);return"string"==typeof e?e:arguments[0]}},lang:function(){for(var e=[localStorage.getItem("editor-language")||s()].concat(i18next.languages),t=RED.settings.theme("languages")||["en-US"],o=0;o<e.length;o++)if(-1<t.indexOf(e[o]))return e[o];return"en-US"},loadNodeCatalog:function(o,n){var e=[localStorage.getItem("editor-language")||s()].concat(i18next.languages),i=e.length;e.forEach(function(t){$.ajax({headers:{Accept:"application/json"},cache:!1,url:a+"nodes/"+o+"/messages?lng="+t,success:function(e){i18next.addResourceBundle(t,o,e),0===--i&&n()}})})},loadNodeCatalogs:function(e){var t=[localStorage.getItem("editor-language")||s()].concat(i18next.languages),n=t.length;t.forEach(function(o){$.ajax({headers:{Accept:"application/json"},cache:!1,url:a+"nodes/messages?lng="+o,success:function(t){Object.keys(t).forEach(function(e){i18next.addResourceBundle(o,e,t[e])}),0===--n&&e()}})})},loadPluginCatalogs:function(e){var t=[localStorage.getItem("editor-language")||s()].concat(i18next.languages),n=t.length;t.forEach(function(o){$.ajax({headers:{Accept:"application/json"},cache:!1,url:a+"plugins/messages?lng="+o,success:function(t){Object.keys(t).forEach(function(e){i18next.addResourceBundle(o,e,t[e])}),0===--n&&e()}})})},detectLanguage:s}}(),RED.settings=function(){function n(){try{return"localStorage"in window&&null!==window.localStorage}catch(e){return}}function o(e){s=e}function i(o){r(function(e,t){e||(RED.settings.user&&!RED.settings.user.anonymous||RED.settings.remove("auth-tokens"),console.log("Node-RED: "+t.version),console.groupCollapsed("Versions"),console.log("jQuery",$().jquery),console.log("jQuery UI",$.ui.version),window.ace&&console.log("ACE",ace.version),window.monaco&&console.log("MONACO",monaco.version||"unknown"),console.log("D3",d3.version),console.groupEnd(),d(o))})}var e,a={},s={},r=function(n){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings",success:function(e){var t,o=e;for(t in a)a.hasOwnProperty(t)&&RED.settings.hasOwnProperty(t)&&delete RED.settings[t];for(t in o)o.hasOwnProperty(t)&&(RED.settings[t]=o[t]);a=o,n(null,e)},error:function(e,t,o){401===e.status?(/[?&]access_token=(.*?)(?:$|&)/.test(window.location.search)&&(window.location.search=""),RED.user.login(function(){r(n)})):console.log("Unexpected error loading settings:",e.status,t)}})};function d(t){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings/user",success:function(e){o(e),t()},error:function(e,t,o){console.log("Unexpected error loading user settings:",e.status,t)}})}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(s),success:function(e){},error:function(e,t,o){console.log("Unexpected error saving user settings:",e.status,t)}})},300))}return{init:function(o,e){var t=/[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search),n=window.location.pathname.slice(0,-1);RED.settings.authTokensSuffix=n.replace(/\//g,"-"),t&&(n=t[1],RED.settings.set("auth-tokens",{access_token:n}),window.location.search=""),RED.settings.apiRootUrl=o.apiRootUrl,$.ajaxSetup({beforeSend:function(e,t){/^\s*(https?:|\/|\.)/.test(t.url)||(o.apiRootUrl&&(t.url=o.apiRootUrl+t.url),(t=RED.settings.get("auth-tokens"))&&e.setRequestHeader("Authorization","Bearer "+t.access_token),e.setRequestHeader("Node-RED-API-Version","v2"))}}),i(e)},load:i,loadUserSettings:d,refreshSettings:r,set:function(e,t){n()&&(e.startsWith("auth-tokens")?localStorage.setItem(e+this.authTokensSuffix,JSON.stringify(t)):(RED.utils.setMessageProperty(s,e,t),l()))},get:function(e,t){if(n()){if(e.startsWith("auth-tokens"))return JSON.parse(localStorage.getItem(e+this.authTokensSuffix));var o;try{o=RED.utils.getMessageProperty(s,e)}catch(e){}if(void 0===o)try{o=RED.utils.getMessageProperty(RED.settings,e)}catch(e){}return o=void 0===o?t:o}},remove:function(e){n()&&(e.startsWith("auth-tokens")?localStorage.removeItem(e+this.authTokensSuffix):(delete s[e],l()))},theme:function(e,t){if(!RED.settings.editorTheme)return t;var o=e.split("."),n=RED.settings.editorTheme;try{for(var i=0;i<o.length;i++)n=n[o[i]];return void 0===n?t:n}catch(e){return t}},setLocal:function(e,t){localStorage.setItem(e,t)},getLocal:function(e){return localStorage.getItem(e)},removeLocal:function(e){localStorage.removeItem(e)}}}(),RED.user=function(){function p(){$("#red-ui-header-button-user-submenu li").remove();var e=$("#red-ui-header-button-user");e.empty(),RED.settings.user.anonymous?RED.menu.addItem("red-ui-header-button-user",{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"),p(),RED.events.emit("login",RED.settings.user.username)})})}}):(RED.menu.addItem("red-ui-header-button-user",{id:"usermenu-item-username",label:"<b>"+RED.settings.user.username+"</b>"}),RED.menu.addItem("red-ui-header-button-user",{id:"usermenu-item-logout",label:RED._("menu.label.logout"),onselect:function(){RED.user.logout()}})),t(RED.settings.user).appendTo(e)}var i=/^((.+)\.)?read$/,a=/^((.+)\.)?write$/;function t(e){var t=$('<span class="red-ui-user-profile"></span>');return e.image?(t.addClass("has_profile_image"),t.css({backgroundImage:"url("+e.image+")"})):(e.anonymous||!e.username&&!e.email?$('<i class="fa fa-user"></i>'):$("<span>").text((e.username||e.email).substring(0,2))).appendTo(t),void 0!==e.profileColor&&t.addClass("red-ui-user-profile-color-"+e.profileColor),t}return{init:function(){!RED.settings.user||RED.settings.editorTheme&&RED.settings.editorTheme.hasOwnProperty("userMenu")&&!RED.settings.editorTheme.userMenu||($('<li><a id="red-ui-header-button-user" class="button hide" href="#"></a></li>').prependTo(".red-ui-header-toolbar"),RED.menu.init({id:"red-ui-header-button-user",options:[]}),p())},login:function(l,c){"function"==typeof l&&(c=l,l={});var u=$('<div id="node-dialog-login" class="hide" style="display: flex; align-items: flex-end;"><div style="width: 250px; flex-grow: 0;"><img id="node-dialog-login-image" src=""/></div><div style="flex-grow: 1;"><form id="node-dialog-login-fields" class="form-horizontal" style="margin-bottom: 0px; margin-left:20px;"></form></div></div>');u.dialog({autoOpen:!1,classes:{"ui-dialog":"red-ui-editor-dialog","ui-dialog-titlebar-close":"hide","ui-widget-overlay":"red-ui-editor-dialog"},modal:!0,closeOnEscape:!!l.cancelable,width:600,resizable:!1,draggable:!1,close:function(e,t){$("#node-dialog-login").dialog("destroy").remove(),RED.keyboard.enable()}}),$("#node-dialog-login-fields").empty(),$.ajax({dataType:"json",url:"auth/login",success:function(i){var e=0;if("credentials"==i.type){for(;e<i.prompts.length;e++){var t=i.prompts[e],o=$("<div/>",{class:"form-row"}),n=($('<label for="node-dialog-login-'+t.id+'">'+RED._(t.label)+":</label><br/>").appendTo(o),$('<input style="width: 100%" id="node-dialog-login-'+t.id+'" type="'+t.type+'" tabIndex="'+(e+1)+'"/>').appendTo(o));e<i.prompts.length-1&&n.keypress(function(){var t=o;return function(e){13==e.keyCode&&(t.next("div").find("input").trigger("focus"),e.preventDefault())}}()),o.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;color:var(--red-ui-text-color-error);" class="hide">'+RED._("user.loginFailed")+'</span><img src="red/images/spin.svg" style="height: 30px; margin-right: 10px; " class="login-spinner hide"/>'+(l.cancelable?'<a href="#" id="node-dialog-login-cancel" class="red-ui-button" style="margin-right: 20px;" tabIndex="'+(e+1)+'">'+RED._("common.label.cancel")+"</a>":"")+'<input type="submit" id="node-dialog-login-submit" class="red-ui-button" style="width: auto;" tabIndex="'+(e+2)+'" value="'+RED._("user.login")+'"></div>').appendTo("#node-dialog-login-fields"),$("#node-dialog-login-submit").button(),$("#node-dialog-login-fields").on("submit",function(e){$("#node-dialog-login-submit").button("option","disabled",!0),$("#node-dialog-login-failed").hide(),$(".login-spinner").show();for(var t={client_id:"node-red-editor",grant_type:"password",scope:""},o=0;o<i.prompts.length;o++){var n=i.prompts[o];t[n.id]=$("#node-dialog-login-"+n.id).val()}$.ajax({url:"auth/token",type:"POST",data:t}).done(function(e,t,o){RED.settings.set("auth-tokens",e),l.updateMenu&&p(),$("#node-dialog-login").dialog("close"),c()}).fail(function(e,t,o){RED.settings.remove("auth-tokens"),$("#node-dialog-login-failed").show()}).always(function(){$("#node-dialog-login-submit").button("option","disabled",!1),$(".login-spinner").hide()}),e.preventDefault()})}else if("strategy"==i.type){var a=/[?&]session_message=(.*?)(?:$|&)/.exec(window.location.search);if(RED.sessionMessages=RED.sessionMessages||[],a&&(RED.sessionMessages.push(decodeURIComponent(a[1])),history.pushState?(a=window.location.protocol+"//"+window.location.host+window.location.pathname,window.history.replaceState({path:a},"",a)):window.location.search=""),0===RED.sessionMessages.length&&i.autoLogin)return void(document.location=i.loginRedirect);for(e=0;e<i.prompts.length;e++){var s,t=i.prompts[e],o=(RED.sessionMessages&&(s=$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields"),RED.sessionMessages.forEach(function(e){$("<div>").css("color","var(--red-ui-text-color-error)").text(e).appendTo(s)}),delete RED.sessionMessages),$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields")),r=$('<a href="#" class="red-ui-button"></a>',{style:"padding: 10px"}).appendTo(o).on("click",function(){document.location=t.url});t.image?$("<img>",{src:t.image}).appendTo(r):t.label&&(d=$("<span></span>").text(t.label),t.icon&&($("<i></i>",{class:"fa fa-2x "+t.icon,style:"vertical-align: middle"}).appendTo(r),d.css({verticalAlign:"middle",marginLeft:"8px"})),d.appendTo(r)),r.button()}}else if(i.prompts){if(i.loginMessage){const s=$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields");$("<div>").text(i.loginMessage).appendTo(s)}for(e=0;e<i.prompts.length;e++){var d,t=i.prompts[e],o=$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields"),r=$('<a href="#" class="red-ui-button"></a>',{style:"padding: 10px"}).appendTo(o).on("click",function(){document.location=t.url});t.image?$("<img>",{src:t.image}).appendTo(r):t.label&&(d=$("<span></span>").text(t.label),t.icon&&($("<i></i>",{class:"fa fa-2x "+t.icon,style:"vertical-align: middle"}).appendTo(r),d.css({verticalAlign:"middle",marginLeft:"8px"})),d.appendTo(r)),r.button()}}l.cancelable&&$("#node-dialog-login-cancel").button().on("click",function(e){$("#node-dialog-login").dialog("close")});a=i.image||"red/images/node-red-256.svg";$("#node-dialog-login-image").load(function(){u.dialog("open")}).attr("src",a),RED.keyboard.disable()}})},logout:function(){RED.events.emit("logout");var e=(e=RED.settings.get("auth-tokens"))?e.access_token:"";$.ajax({url:"auth/revoke",type:"POST",data:{token:e}}).done(function(e,t,o){RED.settings.remove("auth-tokens"),e&&e.redirect?document.location.href=e.redirect:document.location.reload(!0)}).fail(function(e,t,o){401===e.status?document.location.reload(!0):console.log(t)})},hasPermission:function(e){return""===e||!RED.settings.user||function e(t,o){if(""===o)return!0;var n;if(Array.isArray(o)){for(n=0;n<o.length;n++)if(!e(t,o[n]))return!1;return!0}if(Array.isArray(t)){if(0!==t.length)for(n=0;n<t.length;n++)if(e(t[n],o))return!0;return!1}if("*"===t||t===o)return!0;{if("read"===t||"*.read"===t)return i.test(o);if("write"===t||"*.write"===t)return a.test(o)}return!1}(RED.settings.user.permissions||"",e)},generateUserIcon:t}}(),RED.comms=function(){var i,a=null,s=null,l=null,c=10,u={},p=!1,f=0,h=!1;RED.events.on("login",function(e){var t;i&&1==i.readyState&&(t=RED.settings.get("auth-tokens"),i.send(JSON.stringify({auth:t.access_token})))});const g={};return{connect:function r(){h=!0,RED.settings.apiRootUrl?(t=/^(https?):\/\/(.*)$/.exec(RED.settings.apiRootUrl))&&(console.log(t),e="ws"+("https"===t[1]?"s":"")+"://"+t[2]+"comms"):(t=location.hostname,0!==(o=location.port).length&&(t=t+":"+o),t=(t+=document.location.pathname)+("/"==t.slice(-1)?"":"/")+"comms",e="ws"+("https:"==document.location.protocol?"s":"")+"://"+t);var e,t,o,n=RED.settings.get("auth-tokens");function d(){for(var e in u)u.hasOwnProperty(e)&&i.send(JSON.stringify({subscribe:e}));!function(){var t=arguments[0],o=Array.prototype.slice.call(arguments,1);if(g[t]){var n=[...g[t]];for(let e=0;e<n.length;e++)try{n[e].apply(null,o)}catch(e){console.warn("RED.comms.emit error: ["+t+"] "+e.toString()),console.warn(e)}}}("connect")}p=null!=n,(i=new WebSocket(e)).onopen=function(){f=0,a&&(s=setTimeout(function(){a.close(),a=null},1e3)),p?i.send(JSON.stringify({auth:n.access_token})):d()},i.onmessage=function(e){var t=JSON.parse(e.data);if(t.auth)p&&"ok"===t.auth?(p=!1,d()):"fail"===t.auth&&(h=!1,RED.user.login({updateMenu:!0},function(){r()}));else for(var o=0;o<t.length;o++){var n=t[o];if(n.topic)for(var i in u)if(u.hasOwnProperty(i)&&new RegExp("^"+i.replace(/([\[\]\?\(\)\\\\$\^\*\.|])/g,"\\$1").replace(/\+/g,"[^/]+").replace(/\/#$/,"(/.*)?")+"$").test(n.topic)){var a=u[i];if(a)for(var s=0;s<a.length;s++)a[s](n.topic,n.data)}}},i.onclose=function(){h&&(s&&(clearTimeout(s),s=null),++f<10?(setTimeout(r,1e3),5<f&&null==a&&(a=RED.notify(RED._("notification.errors.lostConnection"),"error",!0))):f<20?setTimeout(r,2e3):(c=60,l=setInterval(function(){var e;0==--c?(a.update(RED._("notification.errors.lostConnection")),clearInterval(l),r()):(e=RED._("notification.errors.lostConnectionReconnect",{time:c})+' <a href="#">'+RED._("notification.errors.lostConnectionTry")+"</a>",a.update(e,{silent:!0}),$(a).find("a").on("click",function(e){e.preventDefault(),a.update(RED._("notification.errors.lostConnection"),{silent:!0}),clearInterval(l),r()}))},1e3)))}},subscribe:function(e,t){null==u[e]&&(u[e]=[]),u[e].push(t),i&&1==i.readyState&&i.send(JSON.stringify({subscribe:e}))},unsubscribe:function(e,t){if(u[e]){for(var o=0;o<u[e].length;o++)if(u[e][o]===t){u[e].splice(o,1);break}0===u[e].length&&delete u[e]}},on:function(e,t){g[e]=g[e]||[],g[e].push(t)},off:function(e,t){var o=g[e];if(o)for(let e=0;e<o.length;e++)if(o[e]===t)return void o.splice(e,1)},send:function(e,t){i&&1==i.readyState&&i.send(JSON.stringify({topic:e,data:t}))}}}(),RED.runtime=function(){let o="",n={ui:!1,enabled:!1};const i="start";return{init:function(){n=Object.assign({},n,RED.settings.runtimeState),RED.events.on("runtime-state",function(e){var t;e.state&&(t=o,o=e.state,$(".red-ui-flow-node-button").toggleClass("red-ui-flow-node-button-stopped",o!==i),!0===n.enabled&&!0===n.ui&&(RED.menu.setVisible("deploymenu-item-runtime-stop",o===i),RED.menu.setVisible("deploymenu-item-runtime-start",o!==i)),""===t||o===t||e.deploy||"safe"===o||RED.notify(RED._("notification.state.flows"+("stop"===o?"Stopped":"Started"),e),"success"))})},get started(){return o===i}}}(),RED.multiplayer=function(){let i,t,c={},a={};function o(e){c[e.session]&&(n=c[e.session]).user.username!==e.user.username&&s(a[n.user.username]),c[e.session]=e;var t,o,n=a[e.user.username]=a[e.user.username]||{user:e.user,sessions:[]};void 0===e.user.profileColor&&(e.user.profileColor=1+Math.floor(5*Math.random())),e.location=e.location||{},n.sessions.push(e),e.session!==i&&(1===n.sessions.length&&(n.button?(clearTimeout(n.inactiveTimeout),clearTimeout(n.removeTimeout),n.button.removeClass("inactive")):((t=n).button=$('<li class="red-ui-multiplayer-user"><button type="button" class="red-ui-multiplayer-user-icon"></button></li>').attr("data-username",t.user.username).prependTo("#red-ui-multiplayer-user-list"),o=t.button.find("button"),RED.popover.tooltip(o,t.user.username),o.on("click",function(){f(t.sessions[0].location)}),RED.user.generateUserIcon(t.user).appendTo(o))),c[e.session].location=e.location,b(e.session))}function n(e,t){b(o=e,{}),v(o);var o=c[e];delete c[e];const n=a[o.user.username];e=n.sessions.indexOf(o);n.sessions.splice(e,1),t?s(n):0===n.sessions.length&&(n.inactiveTimeout=setTimeout(()=>{n.button.addClass("inactive"),n.removeTimeout=setTimeout(()=>{s(n)},2e4)},5e3))}function s(e){e.button.remove(),delete e.button}function r(){var e,t,o,n={workspace:RED.workspaces.active()},i=RED.editor.getEditStack();for(let e=i.length-1;0<=e;e--)if(i[e].id){n.node=i[e].id;break}return u&&(t=(e=$("#red-ui-workspace-chart")).offset(),o=RED.view.scale(),n.cursor={x:(l[0]-t.left+e.scrollLeft())/o,y:(l[1]-t.top+e.scrollTop())/o}),n}let d,l=[0,0],u=!1;function p(){d=d||setTimeout(()=>{var e=r();0!==e.workspace&&(w("send","multiplayer/location",e),RED.comms.send("multiplayer/location",e)),d=null},100)}function f(e,t){e.node&&RED.nodes.node(e.node)?RED.view.reveal(e.node):!t&&e.workspace&&RED.view.reveal(e.workspace)}const h={};function g(e){if(!h[e]){const n=$('<div class="red-ui-multiplayer-users-tray"></div>'),i=[],a={},s=$('<div class="red-ui-multiplayer-user-location"><span class="red-ui-user-profile red-ui-multiplayer-user-count"><span></span></span></div>'),r=s.find("span span"),d=(s.hide(),r.text(""),s.appendTo(n),RED.popover.tooltip(s,function(){const e=$("<div>");return i.forEach(t=>{$("<div>").append($('<a href="#">').text(c[t].user.username).on("click",function(e){e.preventDefault(),f(c[t].location,!0),d.close()})).appendTo(e)}),e},null,!0)),l=function(){n.children().each(function(e,t){e=i.length-e;2<e?$(this).hide():0<=e&&$(this).show()}),i.length<3?s.hide():(r.text("+"+(i.length-2)),s.show())};h[e]={attached:!1,tray:n,users:i,userIcons:a,addUser:function(e){var t;-1===i.indexOf(e)&&(i.push(e),t=$(`<div class="red-ui-multiplayer-user-location" id="${"red-ui-multiplayer-user-location-"+e}"></div>`),RED.user.generateUserIcon(c[e].user).appendTo(t),t.prependTo(n),RED.popover.tooltip(t,c[e].user.username),a[e]=t,l())},removeUser:function(e){var t=i.indexOf(e);-1<t&&(i.splice(t,1),a[e].remove(),delete a[e]),l()},updateUserCount:l}}const o=h[e];var t;return o.attached||0<(t=$("#red-ui-tab-"+e)).length&&(o.attached=!0,o.tray.appendTo(t),o.users.forEach(t=>{o.userIcons[t].on("click",function(e){f(c[t].location,!0)})})),h[e]}function m(e,t){t=RED.nodes.node(t);t&&(t._multiplayer?-1===t._multiplayer.users.indexOf(e)&&(t._multiplayer.users.push(e),t._multiplayer_refresh=!0):(t._multiplayer={users:[e]},t._multiplayer_refresh=!0))}function v(e){c[e]?.cursor&&(c[e].cursor.parentNode.removeChild(c[e].cursor),delete c[e].cursor)}function b(e,t){let o=!1;var n,i,a=c[e].location;t?(a.workspace!==t.workspace&&h[a.workspace]?.removeUser(e),a.node!==t.node&&(n=e,a=a.node,(a=RED.nodes.node(a))&&a._multiplayer&&(-1<(n=a._multiplayer.users.indexOf(n))&&a._multiplayer.users.splice(n,1),0===a._multiplayer.users.length?delete a._multiplayer:a._multiplayer_refresh=!0),o=!0),c[e].location=t):t=c[e].location,t.workspace&&(g(t.workspace).addUser(e),t.cursor&&t.workspace===RED.workspaces.active()?c[e].cursor?(n=c[e].cursor,$(n).css({transform:`translate( ${t.cursor.x}px, ${t.cursor.y}px)`})):(a=c[e].user,(i=document.createElementNS("http://www.w3.org/2000/svg","g")).setAttribute("class","red-ui-multiplayer-annotation"),i.appendChild(y(a,!0)),$(i).css({transform:`translate( ${t.cursor.x}px, ${t.cursor.y}px)`,transition:"transform 0.1s linear"}),$("#red-ui-workspace-chart svg").append(i),c[e].cursor=i):c[e].cursor&&v(e)),t.node&&(m(e,t.node),o=!0),o&&RED.view.redraw()}function y(e,t=!1){var o=document.createElementNS("http://www.w3.org/2000/svg","g"),n=document.createElementNS("http://www.w3.org/2000/svg","path");let i;i=t?"M 0 0 h 10 a 10 10 0 1 1 -10 10 z":"M 0 10 a 10 10 0 1 1 20 0 a 10 10 0 1 1 -20 0 z",n.setAttribute("d",i),n.setAttribute("class","red-ui-multiplayer-annotation-background"),o.appendChild(n),e&&void 0!==e.profileColor&&n.setAttribute("class","red-ui-multiplayer-annotation-background red-ui-user-profile-color-"+e.profileColor),e&&e.image?((t=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("width",20),t.setAttribute("height",20),t.setAttribute("href",e.image),t.setAttribute("clip-path","circle("+Math.floor(10)+")"),o.appendChild(t)):e&&e.anonymous?((n=document.createElementNS("http://www.w3.org/2000/svg","circle")).setAttribute("cx",10),n.setAttribute("cy",8),n.setAttribute("r",2.4),n.setAttribute("class","red-ui-multiplayer-annotation-anon-label"),o.appendChild(n),(t=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("class","red-ui-multiplayer-annotation-anon-label"),t.setAttribute("d","M 10 15 h -2.5 c -2 1 -2 -5 0.5 -4.5 c 2 1 2 1 4 0 c 2.5 -0.5 2.5 5.5 0 4.5 z"),o.appendChild(t)):(n=document.createElementNS("http://www.w3.org/2000/svg","text"),e.username||e.email?(n.setAttribute("class","red-ui-multiplayer-annotation-label"),n.textContent=(e.username||e.email).substring(0,2)):(n.setAttribute("class","red-ui-multiplayer-annotation-label red-ui-multiplayer-user-count"),n.textContent="nr"),n.setAttribute("text-anchor","middle"),n.setAttribute("x",10),n.setAttribute("y",13),o.appendChild(n));t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("d",i),t.setAttribute("class","red-ui-multiplayer-annotation-border"),o.appendChild(t),o}return{init:function(){RED.view.annotations.register("red-ui-multiplayer",{type:"badge",align:"left",class:"red-ui-multiplayer-annotation",show:"_multiplayer",refresh:"_multiplayer_refresh",element:function(o){var e,n=document.createElementNS("http://www.w3.org/2000/svg","g");if(n.setAttribute("transform","translate(0,-4)"),o._multiplayer){let t=0;for(let e=Math.min(1,o._multiplayer.users.length-1);0<=e;e--){var i=y(c[o._multiplayer.users[e]].user);i.setAttribute("transform","translate("+t+",0)"),t+=15,n.appendChild(i)}2<o._multiplayer.users.length&&((e=y("+"+(o._multiplayer.users.length-2))).setAttribute("transform","translate("+t+",0)"),t+=12,n.appendChild(e))}return n},tooltip:e=>e._multiplayer.users.map(e=>c[e].user.username).join("\n")}),w("Session ID",i=RED.nodes.id()),t=$('<li><ul id="red-ui-multiplayer-user-list"></ul></li>').prependTo(".red-ui-header-toolbar"),RED.comms.on("connect",()=>{var e=r(),t={session:i};0!==e.workspace&&(t.location=e),RED.comms.send("multiplayer/connect",t)}),RED.comms.subscribe("multiplayer/#",(e,t)=>{w("recv",e,t),"multiplayer/init"===e?(c={},a={},$("#red-ui-multiplayer-user-list").empty(),t.sessions.forEach(e=>{o(e)})):"multiplayer/connection-added"===e?o(t):"multiplayer/connection-removed"===e?n(t.session,t.disconnected):"multiplayer/location"===e&&(e=t.session,delete t.session,b(e,t))}),RED.events.on("workspace:change",e=>{g(e.workspace),p()}),RED.events.on("editor:open",()=>{p()}),RED.events.on("editor:close",()=>{p()}),RED.events.on("editor:change",()=>{p()}),RED.events.on("login",()=>{p()}),RED.events.on("flows:loaded",()=>{{let e=!1;for(var t of Object.keys(c)){var o=c[t].location;o&&(o.workspace&&g(o.workspace).updateUserCount(),o.node)&&(m(t,o.node),e=!0)}e&&RED.view.redraw()}}),RED.events.on("workspace:close",e=>{h[e.workspace]&&(h[e.workspace].attached=!1)}),RED.events.on("logout",()=>{var e={session:i};RED.comms.send("multiplayer/disconnect",e),RED.settings.removeLocal("multiplayer:sessionId")});var e=$("#red-ui-workspace-chart");e.on("mousemove",function(e){l[0]=e.clientX,l[1]=e.clientY,p()}),e.on("scroll",function(e){p()}),e.on("mouseenter",function(){u=!0,p()}),e.on("mouseleave",function(){u=!1,p()})}};function w(){RED.multiplayer.DEBUG&&console.log("[multiplayer]",...arguments)}}(),RED.text={},RED.text.bidi=function(){var t="";function o(e){return"auto"==t?function(e){for(var t,o=e.length,n=0;n<o;n++){if(1488<=(t=e.charCodeAt(n))&&t<=1535||1536<=t&&t<=1631||1642<=t&&t<=1775||1786<=t&&t<=2047||64285<=t&&t<=65023||65136<=t&&t<=65276)return 1;if(64<(t=e.charCodeAt(n))&&t<91||96<t&&t<123)return}}(e)?"rtl":"ltr":t}function n(){$(this).attr("dir",o($(this).val()))}return{setTextDirection:function(e){t=e,RED.nodes.eachNode(function(e){e.dirty=!0}),RED.view.redraw(),RED.palette.refresh(),$("#red-ui-workspace").find("span.red-ui-text-bidi-aware").each(function(){$(this).attr("dir",o($(this).html()))}),$("#red-ui-sidebar").find("span.red-ui-text-bidi-aware").each(function(){$(this).attr("dir",o($(this).text()))})},enforceTextDirectionWithUCC:function(e){if(e){var t=o(e);if("ltr"==t)return""+e+"";if("rtl"==t)return""+e+""}return e},resolveBaseTextDir:o,prepareInput:function(e){e.on("keyup",n).on("paste",n).on("cut",n),n.call(e)}}}(),RED.text.format=function(){var e,u=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])},d={handleSubcontents:function(e,t,o,n,i){if(!o.content||"string"!=typeof o.content||0===o.content.length)return e;var a=!0;void 0!==o.loops&&(a=!!o.loops);for(var s=0;;s++){1;{if(s>=e.length)break;if(!(e[s].isParsed||e.keep||e[s].isSeparator)){var r=e[s].content,d=r.indexOf(o.content);if(!(d<0)){var l,c=0;if(o.continued)for(;c++,0===(l=r.indexOf(o.content,d+c*o.content.length)););else c=1;if(l=d+c*o.content.length,e.splice(s,1),0<d&&(e.splice(s,0,new u({content:r.substring(0,d),localGui:t.dir,keep:!0})),s++),e.splice(s,0,new u({content:r.substring(d,l),textDirection:o.subDir,localGui:t.dir})),l<r.length&&e.splice(s+1,0,new u({content:r.substring(l,r.length),localGui:t.dir,keep:!0})),!a)break}}}}},handleBounds:function(e,t,o,n,i){for(var a=0;a<o.length;a++)if(function(e){var t;if(e)return 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,t=parseInt(e.startPos,10),isNaN(t)?e.usePos=!1:e.usePos=!0,t=parseInt(e.length,10),isNaN(t)?e.useLength=!1:e.useLength=!0,e.loops=void 0===e.loops||!!e.loops,1}(o[a]))for(var s=0;;s++){1;{if(s>=e.length)break;if(!(e[s].isParsed||e[s].inBounds||e.keep||e[s].isSeparator)){var r=function(e,t){var o,n={};for(o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);var e=e.content,i=n.usePos&&n.startPos<e.length;return i&&(n.start="",n.loops=!1),n.bStart=i?n.startPos:0<n.start.length?e.indexOf(n.start):0,(i=n.useLength&&0<n.length&&n.bStart+n.length<e.length)&&(n.end=""),n.bEnd=i?n.bStart+n.length:0<n.end.length?e.indexOf(n.end,n.bStart+n.start.length)+1:e.length,n.after||(n.start=""),n.before||(n.end=""),n}(e[s],o[a]),d=r.bStart,l=r.bEnd;if(!(d<0||l<0)){var c=e[s].content;if(e.splice(s,1),0<d&&(e.splice(s,0,new u({content:c.substring(0,d),localGui:t.dir,keep:!0})),s++),r.start&&(e.splice(s,0,new u({content:r.start,localGui:t.dir,isSeparator:!0})),s++),e.splice(s,0,new u({content:c.substring(d+r.start.length,l-r.end.length),textDirection:r.subDir,localGui:t.dir,inBounds:!0})),r.end&&(s++,e.splice(s,0,new u({content:r.end,localGui:t.dir,isSeparator:!0}))),l+r.end.length<c.length&&e.splice(s+1,0,new u({content:c.substring(l+r.end.length,c.length),localGui:t.dir,keep:!0})),!r.loops)break}}}}for(a=0;a<e.length;a++)e[a].inBounds=!1;return e},handleCases:function(e,t,o,n,i){if(0!==o.length){var a,s={};for(a in t)t.hasOwnProperty(a)&&(s[a]=t[a]);for(var r=0;r<o.length;r++)o[r].handler&&"function"==typeof o[r].handler.handle||(o[r].handler=t.commonHandler),o[r].args?(s.cases=o[r].args.cases,s.points=o[r].args.points,s.bounds=o[r].args.bounds,s.subs=o[r].args.subs):(s.cases=[],s.points=[],s.bounds=[],s.subs={}),o[r].handler.handle(n,e,s,i)}return e},handlePoints:function(e,t,o,n,i){for(var a=0;a<o.length;a++)for(var s,r,d=0;;d++){1;{if(d>=e.length)break;e[d].isParsed||e[d].keep||e[d].isSeparator||0<=(r=(s=e[d].content).indexOf(o[a]))&&(e.splice(d,1),0<r&&(e.splice(d,0,new u({content:s.substring(0,r),textDirection:t.subDir,localGui:t.dir,inPoints:!0})),d++),e.splice(d,0,new u({content:o[a],localGui:t.dir,isSeparator:!0})),r+o[a].length+1<=s.length)&&e.splice(d+1,0,new u({content:s.substring(r+o[a].length),textDirection:t.subDir,localGui:t.dir,inPoints:!0}))}}for(a=0;a<e.length;a++)e[a].keep?e[a].keep=!1:e[a].inPoints&&(e[a].isParsed=!0,e[a].inPoints=!1);return e}},r={handle:function(e,t,o,n){var i=[],a=(Array.isArray(o.cases)&&(i=o.cases),[]),s=(void 0!==o.points&&(Array.isArray(o.points)?a=o.points:"string"==typeof o.points&&(a=o.points.split(""))),{}),r=("object"==typeof o.subs&&(s=o.subs),[]);return Array.isArray(o.bounds)&&(r=o.bounds),d.handleBounds(t,o,r,e,n),d.handleSubcontents(t,o,s,e,n),d.handleCases(t,o,i,e,n),d.handlePoints(t,o,a,e,n),t}},b={LRE:"",RLE:"",PDF:"",LRM:"",RLM:"",LRO:"",RLO:"",getLocaleDetails:function(e){var t,o;return e=(e=e||"undefined"!=typeof navigator&&(navigator.language||navigator.userLanguage)||"").toLowerCase(),!(o=(t=e)?t.split("-")[0]:"")||o.length<2||!["iw","he","ar","fa","ur"].some(function(e){return e===o})?{lang:"not-bidi"}:{lang:(t=e.split("-"))[0],country:t[1]||""}},removeUcc:function(e){return e&&e.replace(/[\u200E\u200F\u202A-\u202E]/g,"")},removeTags:function(e){return e&&e.replace(/<[^<]*>/g,"")},getDirection:function(e,t,o,n){if("auto"!==t&&/^(rtl|ltr)$/i.test(t))return t;o=/^(rtl|ltr)$/i.test(o)?o:"ltr";t=n?e.split("").reverse().join(""):e,n=/[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(t);return n?n[0]<="z"?"ltr":"rtl":o},hasArabicChar:function(e){return!!/[\u0600-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(e)},showMarks:function(e,t){for(var o="",n=0;n<e.length;n++){var i=""+e.charAt(n);switch(i){case"":o+="<LRM>";break;case"":o+="<RLM>";break;case"":o+="<LRE>";break;case"":o+="<RLE>";break;case"":o+="<LRO>";break;case"":o+="<RLO>";break;case"":o+="<PDF>";break;default:o+=i}}t=void 0!==t&&/^(rtl|ltr)$/i.test(t)?"rtl"===t?"":"":"";return t+o+(t?"":"")},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,"")}},l=((e={}).parseAndDisplayStructure=function(e,t,o,n){return e&&t?a(i(e,t,n),t,o):e},e.parseStructure=i,e.displayStructure=a,e.restore=function(e,t){return e},e);function y(e,t){e=Array.isArray(e)?e[0]:e;return e.guiDir||(e.guiDir="ltr"),e.dir||(e.dir=e.guiDir),t&&(void 0===e.points&&(e.points=[]),e.cases||(e.cases=[]),e.bounds||(e.bounds=[]),e.commonHandler=r),e}function i(e,t,o){var n,i;return e&&t?(t=y(t,!0),n=[new u({content:e,actual:e,localGui:t.dir})],i=r.handle,(i=t.handler&&"function"==typeof t.handler?t.handler.handle:i)(e,n,t,o),n):new u({content:""})}function a(e,t,o){t=y(t,!1);if(o){for(var n,i,a=e,s=t,r="",d="",l=0;l<a.length;l++)stop=!a[l].isVisible||(i=a[l].textDirection,""!==(n=a[l].localGui)&&""===d?r+="<bdi dir='"+("rtl"===n?"rtl":"ltr")+"'>":""===d||""!==n&&n===d&&!stop||(r+="</bdi>"+(l==a.length-1&&""!==n?"":"<span style='unicode-bidi: embed; direction: "+("rtl"===s.dir?"rtl":"ltr")+";'></span>"),""!==n&&(r+="<bdi dir='"+("rtl"===n?"rtl":"ltr")+"'>")),"auto"===i&&(i=b.getDirection(a[l].content,i,s.guiDir)),/^(rtl|ltr)$/i.test(i)?r+="<bdi dir='"+("rtl"===i?"rtl":"ltr")+"'>"+a[l].content+"</bdi>":(r+=a[l].content,b.getDirection(a[l].content,i,s.guiDir,!0)),l<a.length-1?(i=n&&a[l+1].localGui?n:s.dir,r+="<span style='unicode-bidi: embed; direction: "+("rtl"===i?"rtl":"ltr")+";'></span>"):""!==d&&(r+="</bdi>"),d=n,!1);o="auto"===s.dir?b.getDirection(a[0].actual,s.dir,s.guiDir):s.dir;return r=o!==s.guiDir?"<bdi dir='"+("rtl"===o?"rtl":"ltr")+"'>"+r+"</bdi>":r}for(var c,u,p=e,f=t,h="",g="",m=!1,v=0;v<p.length;v++)m=!p[v].isVisible||(u=p[v].textDirection,""!==(c=p[v].localGui)&&""===g?h+="rtl"===c?b.RLE:b.LRE:""===g||""!==c&&c===g&&!m||(h+=b.PDF+(v==p.length-1&&""!==c?"":"rtl"===f.dir?b.RLM:b.LRM),""!==c&&(h+="rtl"===c?b.RLE:b.LRE)),"auto"===u&&(u=b.getDirection(p[v].content,u,f.guiDir)),/^(rtl|ltr)$/i.test(u)?h+=("rtl"===u?b.RLE:b.LRE)+p[v].content+b.PDF:(h+=p[v].content,b.getDirection(p[v].content,u,f.guiDir,!0)),v<p.length-1?(u=c&&p[v+1].localGui?c:f.dir,h+="rtl"===u?b.RLM:b.LRM):""!==g&&(h+=b.PDF),g=c,!1);o="auto"===f.dir?b.getDirection(p[0].actual,f.dir,f.guiDir):f.dir;return h=o!==f.guiDir?("rtl"===o?b.RLE:b.LRE)+h+b.PDF:h}var t,o,n={format:function(e,t,o,n,i,a){t={guiDir:o?"rtl":"ltr",dir:t.dir||(o?"rtl":"ltr"),subs:{content:">",continued:!0,subDir:o?"rtl":"ltr"},cases:[{args:{subs:{content:"<",continued:!0,subDir:o?"ltr":"rtl"}}}]};return a?l.parseStructure(e,t,!!n,i):l.parseAndDisplayStructure(e,t,!!n,i)}},s={format:function(e,t,o,n,i,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:","};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},c={format:function(e,t,o,n,i,a){var s,o={guiDir:o?"rtl":"ltr",dir:(o=e,s=i,"ar"===b.getLocaleDetails(s).lang&&0<(s=o.indexOf("@"))&&s<o.length-1&&b.hasArabicChar(o.substring(s+1))?"rtl":"ltr"),points:"<>.:,;@",cases:[{handler:r,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"(",endBefore:")"}],points:""}}]};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},p={format:function(e,t,o,n,i,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:"/\\:."};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},f={format:function(e,t,o,n,i,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:" /%^&[]<>=!?~:.,|()+-*{}"};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},h={format:function(e,t,o,n,i,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:"\t!#%&()*+,-./:;<=>?|[]{}",cases:[{handler:r,args:{bounds:[{startAfter:"/*",endBefore:"*/"},{startAfter:"--",end:"\n"},{startAfter:"--"}]}},{handler:r,args:{subs:{content:" ",continued:!0}}},{handler:r,args:{bounds:[{startAfter:"'",endBefore:"'"},{startAfter:'"',endBefore:'"'}]}}]};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},g={format:function(e,t,o,n,i,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:"_"};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},m={format:function(e,t,o,n,i,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:":?#/@.[]="};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},v={format:function(e,t,o,n,i,a){t={guiDir:o?"rtl":"ltr",dir:t.dir||(o?"rtl":"ltr"),points:" ,.!?;:"};return a?l.parseStructure(e,t,!!n,i):l.parseAndDisplayStructure(e,t,!!n,i)}},w={format:function(e,t,o,n,i,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:" /[]<>=!:@.|()+-*",cases:[{handler:r,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"'",endBefore:"'"}],points:""}}]};return a?l.parseStructure(e,o,!!n,i):l.parseAndDisplayStructure(e,o,!!n,i)}},E={format:function(e,t,o,n,i,a){var s={},r="",d=Array.isArray(t)?t[0]:t;for(r in d)d.hasOwnProperty(r)&&(s[r]=d[r]);return s.guiDir=o?"rtl":"ltr",s.dir=s.dir||s.guiDir,a?l.parseStructure(e,s,!!n,i):l.parseAndDisplayStructure(e,s,!!n,i)}};o=!(t={msgLang:"en",msgDir:"",phLang:"",phDir:"",phPacking:["{","}"],phStt:{type:"none",args:{}},guiDir:""});function D(e){return"he"===e||"iw"===e||"ar"===e?"rtl":"ltr"}function R(e){0===e.msgDir.length&&(e.msgDir=D(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:D(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=["{","}"])}var x=null;function _(e){switch(e){case"breadcrumb":return n;case"comma":return s;case"email":return c;case"filepath":return p;case"formula":return f;case"sql":return h;case"underscore":return g;case"url":return m;case"word":return v;case"xpath":return w;default:return E}}function k(t,e,o,n,i){if(!t||1!=t.nodeType)return!1;x||(x=document.createEvent("Event")).initEvent("TF",!0,!0),t.setAttribute("data-tf-type",e);e="undefined"===o?"{}":JSON.stringify(Array.isArray(o)?o[0]:o),t.setAttribute("data-tf-args",e),o="ltr";return"undefined"===n&&(t.dir?o=t.dir:t.style&&t.style.direction&&(o=t.style.direction),n="rtl"===o.toLowerCase()),t.setAttribute("data-tf-dir",n),t.setAttribute("data-tf-locale",b.getLocaleDetails(i).lang),!function(e){var t=window.navigator.userAgent;if(!(0<=t.indexOf("MSIE")||0<=t.indexOf("Trident")||0<=t.indexOf("Edge")))return(t=document.createElement(e.tagName)).contentEditable=!0,(e="oninput"in t)||(t.setAttribute("oninput","return;"),e="function"==typeof t.oninput),t=null,e}(t)?(t.onkeyup=function(e){$(e.target),t.dispatchEvent(x)},t.onmouseup=function(e){$(e.target),t.dispatchEvent(x)}):(t.oninput,t.oninput=function(e){$(e.target)}),$(t),!0}function $(e){var t=e.textContent||"",o=document.getSelection();if(0!==t.length&&o&&!(o.rangeCount<=0)){var n=o.getRangeAt(0),i=n.cloneRange(),a=n.startContainer,s=n.startOffset,r=0;3===a.nodeType&&(r+=s),i.setStart(e,0),i.setEndBefore(a);var s,d=((s=document.createElement("div")).appendChild(i.cloneContents()),r+=s.textContent.length,e.innerHTML=_(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")),e),l=e,c=0,u=!1;for(o.removeAllRanges(),n.setStart(e,0),n.setEnd(e,0);l;){if(3===l.nodeType){if(c+l.nodeValue.length>=r){n.setStart(l,r-c);break}c+=l.nodeValue.length}else if(l.hasChildNodes()){l=(d=l).firstChild;continue}for(l=l.nextSibling;!l;){if(d===e){u=!0;break}l=d.nextSibling,d=d.parentNode}if(u)break}o.addRange(n)}e.dispatchEvent(x)}return{getHtml:function(e,t,o,n,i){return _(t).format(e,o,n,!0,i)},attach:k}}(),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,SELECTING_NODE:11,GROUP_DRAGGING:12,GROUP_RESIZE:13,DETACHED_DRAGGING:14,SLICING:15,SLICING_JUNCTION:16},RED.plugins=function(){var t={},o={},n={};function i(e){n[e.module]=n[e.module]||{name:e.module,version:e.version,local:e.local,sets:{},plugin:!0,id:e.id},e.pending_version&&(n[e.module].pending_version=e.pending_version),n[e.module].sets[e.name]=e,RED.events.emit("registry:plugin-module-added",e.module)}return{registerPlugin:function(e,n){(t[e]=n).type&&(o[n.type]=o[n.type]||[],o[n.type].push(n)),RED._loadingModule?(n.module=RED._loadingModule,n._=function(){var e=Array.prototype.slice.call(arguments),t=e[0],o=(/:/.test(e[0])||(e[0]=n.module+":"+e[0]),RED._.apply(null,e));return o===e[0]?t:o}):n._=RED._,n.onadd&&"function"==typeof n.onadd&&n.onadd(),RED.events.emit("registry:plugin-added",e)},getPlugin:function(e){return t[e]},getPluginsByType:function(e){return o[e]||[]},setPluginList:function(t){for(let e=0;e<t.length;e++)i(t[e])},addPlugin:i,getModule:function(e){return n[e]}}}(),RED.nodes=function(){var ce,ue,l={},pe={},h=[],c={},fe={},u=[],he={},t=null,ge={},p={},me={},d={},o=!1;a={},s=[],r={},f={},n={},(g={}).tab={defaults:{label:{value:""},disabled:{value:!1},locked:{value:!1},info:{value:""},env:{value:[]}}};var a,s,r,f,g,n,T,m,v,b,y,w,E,ve=T={setModulePendingUpdated:function(e,t){RED.plugins.getModule(e)?RED.plugins.getModule(e).pending_version=t:a[e].pending_version=t,RED.events.emit("registry:module-updated",{module:e,version:t})},getModule:function(e){return a[e]},getNodeSetForType:function(e){return T.getNodeSet(f[e])},getModuleList:function(){return a},getNodeList:function(){return s},getNodeTypes:function(){return Object.keys(g)},getNodeDefinitions:function(e){var t=[],o=e&&e.configOnly,n=e&&e.filter;for(const a of Object.keys(g)){var i=g[a];!i||o&&"config"!==i.category||n&&!n(g[a])||t.push(g[a])}return t},setNodeList:function(e){s=[];for(var t=0;t<e.length;t++){var o=e[t];T.addNodeSet(o)}},addNodeSet:function(e){if(e.types){e.added=!1,r[e.id]=e;for(var t=0;t<e.types.length;t++)f[e.types[t]]=e.id;s.push(e),a[e.module]=a[e.module]||{name:e.module,version:e.version,local:e.local,sets:{}},e.pending_version&&(a[e.module].pending_version=e.pending_version),a[e.module].sets[e.name]=e,RED.events.emit("registry:node-set-added",e)}},removeNodeSet:function(e){var t=r[e];if(!t)return{};for(var o=0;o<t.types.length;o++)delete f[t.types[o]];delete r[e];for(var n=0;n<s.length;n++)if(s[n].id===e){s.splice(n,1);break}return delete a[t.module].sets[t.name],0===Object.keys(a[t.module].sets).length&&delete a[t.module],RED.events.emit("registry:node-set-removed",t),t},getNodeSet:function(e){return r[e]},enableNodeSet:function(e){e=r[e];e.enabled=!0,RED.events.emit("registry:node-set-enabled",e)},disableNodeSet:function(e){e=r[e];e.enabled=!1,RED.events.emit("registry:node-set-disabled",e)},registerNodeType:function(e,t){if("subflow:"!=e.substring(0,8)){var o,n,i;if(!r[f[e]])return o="",n=e,RED._loadingModule&&(n="["+RED._loadingModule+"] "+e,o=r[RED._loadingModule]?r[RED._loadingModule].err||"":"Unknown error"),void RED.notify(RED._("palette.event.unknownNodeRegistered",{type:n,error:o}),"error");t.set=r[f[e]],r[f[e]].added=!0,r[f[e]].enabled=!0,i="node-red"===t.set.module?"node-red":t.set.id,t._=function(){var e=Array.prototype.slice.call(arguments,0),t=e[0],o=(-1===e[0].indexOf(":")&&(e[0]=i+":"+e[0]),RED._.apply(null,e));return o=o===e[0]?t:o}}if(t.type=e,(g[e]=t).defaults)for(var a in t.defaults)if(t.defaults.hasOwnProperty(a)&&t.defaults[a].type)try{t.defaults[a]._type=function(e){e=e.trim();var t,o=0,n=/\[\]$/.test(e);n&&(e=e.substring(0,e.length-2));var i=e.length,a=!1,s=!1,r="",d=[];for(;o<i;){if(t=e[o],s)"|"===t?(d.push(r.trim()),r="",s=!1):")"===t?(d.push(r.trim()),r="",s=a=!1):r+=t;else if("("===t){if(a)throw new Error("Invalid character '"+t+"' at position "+o);a=!0}else" "!==t&&(s=!0,r=t);o++}0<(r=r.trim()).length&&d.push(r);return{types:d,array:n}}(t.defaults[a].type)}catch(e){console.warn(e)}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 g[e],RED.events.emit("registry:node-type-removed",e)},getNodeType:function(e){return g[e]},setIconSets:function(e){(n=e)["font-awesome"]=RED.nodes.fontAwesome.getIconList()},getIconSets:function(){return n}},be=(m={},v={},b={},y={},w=new Set,E={addTab:function(e){v[e]=[],b[e]=new Set,y[e]=new Set},hasTab:function(e){return v.hasOwnProperty(e)},removeTab:function(e){delete v[e],delete b[e],delete y[e]},addNode:function(e){m[e.id]=e,v.hasOwnProperty(e.z)?(v[e.z].push(e),E.addObjectToWorkspace(e.z,e.id,e.changed||e.moved)):(console.warn("Node added to unknown tab/subflow:",e),v._=v._||[],v._.push(e))},removeNode:function(e){var t;delete m[e.id],v.hasOwnProperty(e.z)&&(-1<(t=v[e.z].indexOf(e))&&v[e.z].splice(t,1),E.removeObjectFromWorkspace(e.z,e.id))},addObjectToWorkspace:function(e,t,o){o&&w.add(t),y[e].has(t)&&y[e].delete(t),E.markNodeDirty(e,t,o)},removeObjectFromWorkspace:function(e,t){w.has(t)?w.delete(t):y[e].add(t),E.markNodeDirty(e,t,!1)},hasNode:function(e){return m.hasOwnProperty(e)},getNode:function(e){return m[e]},moveNode:function(e,t){E.removeNode(e),e.z=t,E.addNode(e)},changeDepth:function(e,t,o){Array.isArray(e)||(e=[e]);let n=[];var i=v[e[0].z],a=new Set(e.filter(function(e){return"group"!==e.type&&"subflow"!==e.type})),i=(0<a.size&&0<(n=n.concat(C(i,a,t,o))).length&&RED.events.emit("nodes:reorder",{z:e[0].z,nodes:n}),p[e[0].z]||[]),a=new Set(e.filter(function(e){return"group"===e.type}));return 0<a.size&&0<(i=C(i,a,t,o)).length&&(n=n.concat(i),RED.events.emit("groups:reorder",{z:e[0].z,nodes:i})),RED.view.redraw(!0),n},moveNodesForwards:function(e){return E.changeDepth(e,!0,!0)},moveNodesBackwards:function(e){return E.changeDepth(e,!1,!0)},moveNodesToFront:function(e){return E.changeDepth(e,!0,!1)},moveNodesToBack:function(e){return E.changeDepth(e,!1,!1)},getNodes:function(e){return v[e]},clear:function(){m={},v={},b={},y={},w=new Set},clearState:function(){w=new Set;var e,t,o,n,i=new Set;for([e,t]of Object.entries(y))0<t.size&&(t.clear(),i.add(e));for([o,n]of Object.entries(b))0<n.size&&(n.clear(),i.add(o));for(const a of i)E.checkTabState(a)},eachNode:function(e){var t,o,n;for(o in he)if(he.hasOwnProperty(o))for(t=v[o],n=0;n<t.length;n++)if(!1===e(t[n]))return;for(o=0;o<u.length;o++)for(t=v[u[o]],n=0;n<t.length;n++)if(!1===e(t[n]))return;if(v._)for(t=v._,n=0;n<t.length;n++)if(!1===e(t[n]))return},filterNodes:function(e){var t=[],o=null,n=!1,i=(e.hasOwnProperty("z")&&(v.hasOwnProperty(e.z)?o=v[e.z]:n=!0),!1);null===o&&(o=Object.keys(m),i=!0);for(var a=0;a<o.length;a++){var s=o[a];i&&(s=m[s]),e.hasOwnProperty("type")&&s.type!==e.type||n&&s.z!==e.z||t.push(s)}return t},getNodeOrder:function(e){return(p[e]||[]).concat(v[e]).map(e=>e.id)},setNodeOrder:function(e,t){var o={};t.forEach(function(e,t){o[e]=t}),v[e].sort(function(e,t){return e._reordered=!0,t._reordered=!0,o[e.id]-o[t.id]}),p[e]&&p[e].sort(function(e,t){return o[e.id]-o[t.id]})},markNodeDirty:function(e,t,o){b[e]&&(o?b[e].add(t):b[e].delete(t),E.checkTabState(e))},checkTabState:function(e){var t=fe[e]||he[e];t&&(e=0<b[e].size||0<y[e].size,Boolean(t.contentsChanged)!==e)&&(t.contentsChanged=e,"tab"===t.type?RED.events.emit("flows:change",t):RED.events.emit("subflows:change",t))}});function C(t,o,e,n){var i=[],a=new Set,s=e?t.length-1:0,r=e?-1:t.length,d=e?-1:1;let l=s;for(let e=s;e!=r&&0!==o.size;e+=d){var c=t[e];o.has(c)&&(n?e===s||a.has(t[e-d])||(t.splice(e,1),t.splice(e-d,0,c),c._reordered=!0,i.push(c)):(e!==l&&(t.splice(e,1),t.splice(l,0,c),c._reordered=!0,i.push(c)),l+=d),o.delete(c),a.add(c))}return i}function ye(){for(var e=[],t=0;t<8;t++)e.push(Math.round(255*Math.random()).toString(16).padStart(2,"0"));return e.join("")}const j={get(e,t){return"__isProxy__"===t||("__node__"==t?e:e[t])},set(e,t,o){if(e.z&&(RED.nodes.workspace(e.z)?.locked||RED.nodes.subflow(e.z)?.locked)&&(e._def.defaults[t]||"z"===t||"l"===t||"d"===t||"changed"===t&&!!e.changed!=!!o||("x"===t||"y"===t)&&!e.resize&&"group"!==e.type))throw new Error(`Cannot modified property '${t}' of locked object '${e.type}:${e.id}'`);return!e.z||"changed"!==t&&"moved"!==t||setTimeout(()=>{be.markNodeDirty(e.z,e.id,e.changed||e.moved)},0),e[t]=o,!0}};function xe(e){let t;var o,n;return t=e.__isProxy__?e:new Proxy(e,j),0!==e.type.indexOf("subflow")?e._=e._def._:(o=e.type.substring(8),(o=RED.nodes.subflow(o))&&o.instances.push(t),e._=RED._),N(t,{action:"add"}),"config"==e._def.category?pe[e.id]=t:(e.wires&&e.wires.length>e.outputs&&(e.outputs=e.wires.length),e.dirty=!0,"subflows"==e._def.category&&void 0===e.i&&(n=0,RED.nodes.eachNode(function(e){n=Math.max(n,e.i||0)}),e.i=n+1),be.addNode(t),c[e.id]||(c[e.id]={in:[],out:[]})),RED.events.emit("nodes:add",t),t}function we(t){if(c[t.source.id]&&!c[t.source.id].out.every(function(e){return e.sourcePort!==t.sourcePort||e.target.id!==t.target.id}))return;h.push(t),t.source&&(c[t.source.id]||(c[t.source.id]={in:[],out:[]}),c[t.source.id].out.push(t)),t.target&&(c[t.target.id]||(c[t.target.id]={in:[],out:[]}),c[t.target.id].in.push(t)),t.source.z===t.target.z&&l[t.source.z]&&(l[t.source.z].push(t),be.addObjectToWorkspace(t.source.z,L(t),!0)),RED.events.emit("links:add",t)}function L(e){return e.source.id+":"+e.sourcePort+":"+e.target.id}function D(e){return e in pe?pe[e]:be.getNode(e)}function R(e){var t,o=[],n=[];if(e in pe)t=pe[e],delete pe[e],N(t,{action:"remove"}),RED.events.emit("nodes:remove",t),RED.workspaces.refresh();else if(be.hasNode(e)){t=be.getNode(e),be.removeNode(t),delete c[e],(o=h.filter(function(e){return e.source===t||e.target===t})).forEach(x),N(t,{action:"remove"});var i,a,s=!1;for(i in t._def.defaults)t._def.defaults.hasOwnProperty(i)&&(a=t._def.defaults[i]).type&&(a=ve.getNodeType(a.type))&&"config"==a.category&&(a=pe[t[i]])&&(s=!0,a._def.exclusive)&&(R(t[i]),n.push(a));0===t.type.indexOf("subflow:")&&(e=t.type.substring(8),e=RED.nodes.subflow(e))&&e.instances.splice(e.instances.indexOf(t),1),s&&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 oneditdelete - please report"),t._def.onremove.call(t)),{links:o,nodes:n}}function x(e){var t,o=h.indexOf(e);-1!=o&&(h.splice(o,1),e.source&&c[e.source.id]&&-1!==(t=c[e.source.id].out.indexOf(e))&&c[e.source.id].out.splice(t,1),e.target&&c[e.target.id]&&-1!==(t=c[e.target.id].in.indexOf(e))&&c[e.target.id].in.splice(t,1),e.source.z===e.target.z)&&l[e.source.z]&&(-1!==(o=l[e.source.z].indexOf(e))&&l[e.source.z].splice(o,1),be.removeObjectFromWorkspace(e.source.z,L(e))),RED.events.emit("links:remove",e)}function Ee(e,t){fe[e.id]=e,be.addTab(e.id),l[e.id]=[],e._def=RED.nodes.getType("tab"),void 0===t?u.push(e.id):u.splice(t,0,e.id),RED.events.emit("flows:add",e),void 0!==t&&RED.events.emit("flows:reorder",u)}function _e(n,e){if(e){e=Object.keys(he).map(function(e){return he[e].name||""});e.sort();let t=1,o=n.name;e.forEach(function(e){o==e&&(o=n.name+" ("+t+")",t++)}),n.name=o}n.instances=[],he[n.id]=n,be.addTab(n.id),l[n.id]=[],RED.nodes.registerType("subflow:"+n.id,{defaults:{name:{value:""},env:{value:[],validate:function(e){const o=[];return e&&e.forEach(e=>{var t=RED.utils.validateTypedProperty(e.value,e.type);!0!==t&&o.push(e.name+": "+t)}),0===o.length||o}}},icon:function(){return n.icon||"subflow.svg"},category:n.category||"subflows",inputs:n.in.length,outputs:n.out.length,color:n.color||"#DDAA99",label:function(){return this.name||RED.nodes.subflow(n.id).name},labelStyle:function(){return this.name?"red-ui-flow-node-label-italic":""},paletteLabel:function(){return RED.nodes.subflow(n.id).name},inputLabels:function(e){return n.inputLabels?n.inputLabels[e]:null},outputLabels:function(e){return n.outputLabels?n.outputLabels[e]:null},oneditprepare:function(){"subflow"!==this.type?RED.subflow.buildEditForm("subflow",this):RED.subflow.buildEditForm("subflow-template",this)},oneditresize:function(e){"subflow"===this.type&&$("#node-input-env-container").editableList("height",e.height-80)},set:{module:"node-red"}}),n._def=RED.nodes.getType("subflow:"+n.id),RED.events.emit("subflows:add",n)}function De(e){return he[e]}function ke(e,t){for(var o=be.getNodes(e),n=0;n<o.length;n++){var i=o[n],i=/^subflow:(.+)$/.exec(i.type);if(i){if(i[1]===t)return!0;if(ke(i[1],t))return!0}}return!1}function e(e,t){RED.view.selection();for(var o=new Set,n=[e],i=!0;0<n.length;){var a=n.shift(),s=(o.add(a),[]);i&&t&&(!i||"up"!==t)||(s=s.concat(c[a.id].in)),i&&t&&(!i||"down"!==t)||(s=s.concat(c[a.id].out)),i=!1,s.forEach(function(e){o.has(e.source)||n.push(e.source),o.has(e.target)||n.push(e.target)})}return Array.from(o)}function S(e,t){var o,n=!0,i=(t&&t.hasOwnProperty("credentials")&&(n=t.credentials),{});for(o in i.id=e.id,i.type=e.type,e._def.defaults)!e._def.defaults.hasOwnProperty(o)||"locked"===o&&!e.locked||(i[o]=e[o]);if(n){var a={};if(e.credentials){for(var s in e.credentials)e.credentials.hasOwnProperty(s)&&(!e.credentials._||e.credentials["has_"+s]!=e.credentials._["has_"+s]||e.credentials["has_"+s]&&e.credentials[s])&&(a[s]=e.credentials[s]);0<Object.keys(a).length&&(i.credentials=a)}}return i}function _(t,e){var o=!0,n=!1;if(!1===e?o=!1:"object"==typeof e&&(e.hasOwnProperty("credentials")&&(o=e.credentials),e.hasOwnProperty("dimensions"))&&(n=e.dimensions),"tab"===t.type)return S(t,{credentials:o});var i={};if(i.id=t.id,i.type=t.type,i.z=t.z,0!==i.z&&""!==i.z||delete i.z,!0===t.d&&(i.d=!0),t.g&&(i.g=t.g),"unknown"==i.type)for(var a in t._orig)t._orig.hasOwnProperty(a)&&(i[a]=t._orig[a]);else{for(var s in t._def.defaults)t._def.defaults.hasOwnProperty(s)&&(i[s]=t[s]);if(o){var r={};if((/^subflow:/.test(i.type)||"group"===i.type)&&t.credentials)for(var d in t.credentials)t.credentials.hasOwnProperty(d)&&(!t.credentials._||t.credentials["has_"+d]!=t.credentials._["has_"+d]||t.credentials["has_"+d]&&t.credentials[d])&&(r[d]=t.credentials[d]);else if(t.credentials)for(var l in t._def.credentials)t._def.credentials.hasOwnProperty(l)&&("password"==t._def.credentials[l].type?(!t.credentials._||t.credentials["has_"+l]!=t.credentials._["has_"+l]||t.credentials["has_"+l]&&t.credentials[l])&&(r[l]=t.credentials[l]):null==t.credentials[l]||t.credentials._&&t.credentials[l]==t.credentials._[l]||(r[l]=t.credentials[l]));0<Object.keys(r).length&&(i.credentials=r)}}if("group"===t.type&&(i.x=t.x,i.y=t.y,i.w=t.w,i.h=t.h,i.nodes=i.nodes.filter(function(e){return!!e}).map(function(e){return e.id})),"tab"!==t.type&&"group"!==t.type||i.env&&0===i.env.length&&delete i.env,"config"!=t._def.category||"junction"===t.type){i.x=t.x,i.y=t.y,n&&(t.hasOwnProperty("w")||(e=RED.view.calculateNodeDimensions(t),t.w=e[0],t.h=e[1]),i.w=t.w,i.h=t.h),i.wires=[];for(var c=0;c<t.outputs;c++)i.wires.push([]);for(var u=h.filter(function(e){return e.source===t}),p=0;p<u.length;p++){var f=u[p];"subflow"!=f.target.type&&f.sourcePort<i.wires.length&&i.wires[f.sourcePort].push(f.target.id)}0<t.inputs&&t.inputLabels&&!/^\s*$/.test(t.inputLabels.join(""))&&(i.inputLabels=t.inputLabels.slice()),0<t.outputs&&t.outputLabels&&!/^\s*$/.test(t.outputLabels.join(""))&&(i.outputLabels=t.outputLabels.slice()),t._def.defaults&&t._def.defaults.hasOwnProperty("icon")||!t.icon||(o=RED.utils.getDefaultNodeIcon(t._def,t),t.icon!==o.module+"/"+o.file&&(i.icon=t.icon)),t._def.defaults&&t._def.defaults.hasOwnProperty("l")||!t.hasOwnProperty("l")||(!t._def.hasOwnProperty("showLabel")||t._def.showLabel)!=t.l&&(i.l=t.l)}return t.info&&(i.info=t.info),i}function O(a,e){var t=!0,s=(!1===e?t=!1:"object"==typeof e&&(e.hasOwnProperty("credentials")&&(t=e.credentials),e.hasOwnProperty("dimensions"))&&e.dimensions,{});if(s.id=a.id,s.type=a.type,s.name=a.name,s.info=a.info,s.category=a.category,s.in=[],s.out=[],s.env=a.env,s.meta=a.meta,t){var o,n={};for(o in a.credentials)a.credentials.hasOwnProperty(o)&&(!a.credentials._||a.credentials["has_"+o]!=a.credentials._["has_"+o]||a.credentials["has_"+o]&&a.credentials[o])&&(n[o]=a.credentials[o]);0<Object.keys(n).length&&(s.credentials=n)}return s.color=a.color,a.in.forEach(function(t){for(var e={x:t.x,y:t.y,wires:[]},o=h.filter(function(e){return e.source===t}),n=0;n<o.length;n++){var i=o[n];"subflow"!=i.target.type&&e.wires.push({id:i.target.id})}s.in.push(e)}),a.out.forEach(function(t,e){var o={x:t.x,y:t.y,wires:[]},n=h.filter(function(e){return e.target===t});for(i=0;i<n.length;i++)"subflow"!=n[i].source.type?o.wires.push({id:n[i].source.id,port:n[i].sourcePort}):o.wires.push({id:a.id,port:0});s.out.push(o)}),0<s.in.length&&a.inputLabels&&!/^\s*$/.test(a.inputLabels.join(""))&&(s.inputLabels=a.inputLabels.slice()),0<s.out.length&&a.outputLabels&&!/^\s*$/.test(a.outputLabels.join(""))&&(s.outputLabels=a.outputLabels.slice()),a.icon&&"node-red/subflow.svg"!==a.icon&&(s.icon=a.icon),a.status&&(s.status={x:a.status.x,y:a.status.y,wires:[]},h.forEach(function(e){e.target===a.status&&("subflow"!=e.source.type?s.status.wires.push({id:e.source.id,port:e.sourcePort}):s.status.wires.push({id:a.id,port:0}))})),s}function Re(o,t,e,n){var i=[];t=t||{},o=o.filter(function(e){return!t[e.id]&&(t[e.id]=!0)}),n=n||{},e=e||{};for(var a=0;a<o.length;a++){var s,r,d=o[a];if("subflow:"!=d.type.substring(0,8)||e[s=d.type.substring(8)]||(e[s]=!0,p=De(s),(r=be.getNodes(s).slice()).unshift(p),RED.nodes.eachConfig(function(e){e.z==s&&(r.push(e),n[e.id]=!0)}),i=Re(r=(r=r.concat(RED.nodes.junctions(s))).concat(RED.nodes.groups(s)),t,e,n).concat(i)),"subflow"!==d.type){var l,c,u=RED.nodes.convertNode(d,{credentials:!1});for(l in d._def.defaults)d._def.defaults[l].type&&(c=d[l],0===(c=(c=Array.isArray(c)?c:[c]).filter(function(e){var t;return!(e in pe)||!1!==(t=pe[e])._def.exportable&&(e in n||(n[e]=!0,o.push(t)),!0)})).length?u[l]=Array.isArray(d[l])?[]:"":u[l]=Array.isArray(d[l])?c:c[0]);i.push(u),"group"===d.type&&(i=i.concat(Re(d.nodes,t,e,n)))}else{var p=O(d,{credentials:!1});i.push(p)}}return i}function $e(e){var o={tabs:{},subflows:{},groups:{},junctions:{},configs:{},nodes:{},all:[],conflicted:{},zMap:{}};return e.forEach(function(e){o.all.push(e),"tab"===e.type?o.tabs[e.id]=e:"subflow"===e.type?o.subflows[e.id]=e:"group"===e.type?o.groups[e.id]=e:"junction"===e.type?o.junctions[e.id]=e:e.hasOwnProperty("x")&&e.hasOwnProperty("y")?o.nodes[e.id]=e:o.configs[e.id]=e;var t=e.z||"__global__";o.zMap[t]=o.zMap[t]||[],o.zMap[t].push(e),(be.hasNode(e.id)||pe[e.id]||fe[e.id]||he[e.id]||ge[e.id]||me[e.id])&&(o.conflicted[e.id]=e)}),o}function Te(e){var a={},s={},n={},r=[],e=(e.forEach(function(e){"subflow"===e.type?s[e.id]=e:e.hasOwnProperty("x")||e.hasOwnProperty("y")||(n[e.id]=e),e.z&&(a[e.z]=a[e.z]||[],a[e.z].push(e))}),Object.keys(n)),t=(e.forEach(function(e){s[n[e].z]&&delete n[e]}),e=Object.keys(n),Object.keys(s));return t.forEach(function(e){var t,o,n,i=s[e];r=r.concat((t=De(t=e),(n=be.getNodes(t.id))?(o=n.slice()).unshift(t):o=[t],Re(o))),RED.subflow.removeSubflow(i.id,!0),k([i].concat(a[i.id]).filter(e=>!!e));s[e]=De(e)}),RED.nodes.eachNode(function(e){var t;/^subflow:/.test(e.type)&&(t=e.type.substring(8),s[t])&&(s[t].instances.push(e),e._def=RED.nodes.getType(e.type),e.dirty=!0,e.changed=!0,e._colorChanged=!0)}),t.forEach(function(e){RED.events.emit("subflows:change",s[e])}),RED.utils.clearNodeColorCache(),e.forEach(function(e){var t=D(e),o=t.users;r=r.concat(_(t)),R(e),k([n[e]]),D(e).users=o}),{removedNodes:r}}function k(e,o){(o=Object.assign({},{generateIds:!1,addFlow:!1,markChanged:!1,reimport:!1,importMap:{}},o)).importMap=o.importMap||{};var t,n=o.generateIds,A=!n&&!!o.reimport,M=o.addFlow,i={};if("string"==typeof e){if(""===e)return;try{r=JSON.parse(e)}catch(g){var a=new Error(RED._("clipboard.invalidFlow",{message:g.message}));throw a.code="NODE_RED",a}}else r=e;Array.isArray(r)||(r=[r]);var z,B={},s=[],G=[],r=r.filter(function(e){var t=e.id;if(B[e.id])return!1;if(B[e.id]=!0,!o.generateIds)if(o.importMap[t]){if("replace"===o.importMap[t])return G.push(e),!1}else{t=be.getNode(t)||pe[t]||fe[t]||he[t]||ge[t]||me[t];t&&s.push({existing:t,imported:e})}return!0});if(0<s.length){for(var a=RED._("clipboard.importDuplicate",{count:s.length}),d=$("<ul>"),F=Math.min(5,s.length),l=0;l<F;l++){var c=s[l];$("<li>").text(c.existing.id+" [ "+c.existing.type+(c.imported.type!==c.existing.type?" | "+c.imported.type:"")+" ]").appendTo(d)}F!==s.length&&$("<li>").text(RED._("deploy.confirm.plusNMore",{count:s.length-F})).appendTo(d);e=$("<p>").append(d),a=new Error(a+e.html());throw a.code="import_conflict",a.importConfig=$e(r),a}0<G.length&&(z=Te(G).removedNodes);var u,U=!1,p=(ue||(U=!0,ue=JSON.parse(JSON.stringify(r))),[]);for(l=0;l<r.length;l++){var f;(f=r[l]).id;"workspace"==f.type||"tab"==f.type||"subflow"==f.type||"group"==f.type||"junction"==f.type||ve.getNodeType(f.type)||"subflow:"==f.type.substring(0,8)||-1!=p.indexOf(f.type)||p.push(f.type),f.z?(i[f.z]=i[f.z]||[],i[f.z].push(f)):U&&f.hasOwnProperty("x")&&f.hasOwnProperty("y")&&!f.z&&(t||(Ee(t={id:RED.nodes.id(),type:"tab",disabled:!1,label:RED._("clipboard.recoveredNodes"),info:RED._("clipboard.recoveredNodesInfo"),env:[]}),RED.workspaces.add(t),i[t.id]=[]),f.z=t.id,i[t.id].push(f))}!U&&0<p.length&&(u=$("<ul>"),p.forEach(function(e){$("<li>").text(e).appendTo(u)}),u=u[0].outerHTML,RED.notify("<p>"+RED._("clipboard.importUnrecognised",{count:p.length})+"</p>"+u,"error",!1,1e4));var h=RED.workspaces.active();De(h);for(l=0;l<r.length;l++){var V=/^subflow:(.+)$/.exec(r[l].type);if(V){var g,V=V[1],J=De(h);if(J)if(V===J.id&&(g=new Error(RED._("notification.errors.cannotAddSubflowToItself"))),g=ke(V,J.id)?new Error(RED._("notification.errors.cannotAddCircularReference")):g)throw g.code="NODE_RED",g}}var q,m,v,b,W,H,y=[],w={},K=[],E={},X={},D={},R=[],x=[],_=[],k=[],Y=new Set,T=null;for(t&&y.push(t),l=0;l<r.length;l++)"workspace"===(f=r[l]).type||"tab"===f.type?("workspace"===f.type&&(f.type="tab"),null==ce&&(ce=f),0===h&&(h=f.id),n||"copy"===o.importMap[f.id]?(q=ye(),w[f.id]=q,f.id=q):w[f.id]=f.id,Ee(f),RED.workspaces.add(f),y.push(f)):"subflow"===f.type&&((W=o.importMap[f.id]?W:function(a,s){s=s||[];var r,d=null;return RED.nodes.eachSubflow(function(e){if(e.name==a.name&&e.info==a.info&&e.in.length==a.in.length&&e.out.length==a.out.length){var t=RED.nodes.filterNodes({z:e.id});if(t.length==s.length){var o=[a].concat(s),n=[e].concat(t),i=JSON.stringify(o),o=JSON.stringify(Re(n));for(r=0;r<t.length;r++)i=i.replace(new RegExp('"'+s[r].id+'"',"g"),'"'+t[r].id+'"');if((i=i.replace(new RegExp('"'+a.id+'"',"g"),'"'+e.id+'"'))===o)return d=e,!1}}}),d}(f,i[f.id]))?X[f.id]=W:(H=f.id,E[f.id]=f,!n&&"copy"!==o.importMap[f.id]||(q=ye(),f.id=q),f.in.forEach(function(e,t){e.type="subflow",e.direction="in",e.z=f.id,e.i=t,e.id=ye()}),f.out.forEach(function(e,t){e.type="subflow",e.direction="out",e.z=f.id,e.i=t,e.id=ye()}),f.status&&(f.status.type="subflow",f.status.direction="status",f.status.z=f.id,f.status.id=ye()),K.push(f),_e(f,n||"copy"===o.importMap[H])));null==ce&&(Ee(ce={type:"tab",id:ye(),disabled:!1,info:"",label:RED._("workspace.defaultName",{number:1}),env:[]}),RED.workspaces.add(ce),y.push(ce),h=RED.workspaces.active());var C=[];const Z=new Set;for(l=0;l<r.length;l++)if(f=r[l],(m=ve.getNodeType(f.type))&&"config"==m.category){var j=null;if(n||"copy"===o.importMap[f.id]){if(f.z){if(X[f.z])continue;E[f.z]?f.z=E[f.z].id:(f.z=w[f.z],fe[f.z]||(M?(null===T&&(T=RED.workspaces.add(null,!0),y.push(T)),f.z=T.id):f.z=h))}if("copy"!==o.importMap[f.id]&&(j=RED.nodes.node(f.id))&&f.z&&j.z!==f.z)for(var Q in j=null,pe)if(pe.hasOwnProperty(Q)&&pe[Q].z===f.z&&function(e,t,o){if((!o||e.id==t.id)&&e.type==t.type){var n,i=e._def;for(n in i.defaults)if(i.defaults.hasOwnProperty(n)){var a=e[n],s=t[n];if(typeof a!=typeof s)return;if(null===a||"string"==typeof a||"number"==typeof a){if(a!==s)return}else if(JSON.stringify(a)!==JSON.stringify(s))return}return 1}}(pe[Q],f,!1)){j=pe[Q],D[f.id]=pe[Q];break}}else A&&f.z&&(RED.workspaces.contains(f.z)||RED.nodes.subflow(f.z))||!f.z||w[f.z]||E[f.z]||(f.z=h);if(!j||j._def.exclusive){for(b in v={id:f.id,z:f.z,type:f.type,info:f.info,users:[],_config:{},_configNodeReferences:new Set},f.z||delete v.z,o.markChanged&&(v.changed=!0),f.hasOwnProperty("d")&&(v.d=f.d),m.defaults)m.defaults.hasOwnProperty(b)&&(v[b]=f[b],v._config[b]=JSON.stringify(f[b]),m.defaults[b].type)&&v._configNodeReferences.add(f[b]);if(m.hasOwnProperty("credentials")&&f.hasOwnProperty("credentials"))for(b in v.credentials={},m.credentials)m.credentials.hasOwnProperty(b)&&f.credentials.hasOwnProperty(b)&&(v.credentials[b]=f.credentials[b]);v.label=m.label,v._def=m,!n&&"copy"!==o.importMap[f.id]||(v.id=ye()),D[f.id]=v,C.push(v),Z.add(v.id)}}let ee=5*C.length;const te=new Set;for(;0<C.length&&0<ee;){const L=C.shift();let t=!1;L._configNodeReferences.forEach(e=>{Z.has(e)&&!te.has(e)&&(t=!0)}),t?C.push(L):(delete L._configNodeReferences,R.push(L),te.add(L.id)),ee--}for(0<C.length&&C.forEach(e=>{delete e._configNodeReferences,R.push(e)}),l=0;l<r.length;l++)if("workspace"!==(f=r[l]).type&&"tab"!==f.type&&"subflow"!==f.type&&(!(m=ve.getNodeType(f.type))||"config"!=m.category)){var L={x:parseFloat(f.x||0),y:parseFloat(f.y||0),z:f.z,type:f.type,info:f.info,changed:!1,_config:{}};if("group"!==f.type&&"junction"!==f.type&&(L.wires=f.wires||[],L.inputLabels=f.inputLabels,L.outputLabels=f.outputLabels,L.icon=f.icon),"junction"===f.type&&(L.wires=f.wires||[]),f.hasOwnProperty("l")&&(L.l=f.l),f.hasOwnProperty("d")&&(L.d=f.d),f.hasOwnProperty("g")&&(L.g=f.g),o.markChanged&&(L.changed=!0),n||"copy"===o.importMap[f.id]){if(X[f.z])continue;E[L.z]?L.z=E[L.z].id:(L.z=w[L.z],fe[L.z]||(M?(null===T&&(T=RED.workspaces.add(null,!0),y.push(T)),L.z=T.id):L.z=h)),L.id=ye()}else L.id=f.id,A&&L.z&&(RED.workspaces.contains(L.z)||RED.nodes.subflow(L.z))||null!=L.z&&(w[L.z]||E[L.z])||(M?(null===T&&(T=RED.workspaces.add(null,!0),y.push(T)),L.z=T.id):L.z=h);if(L._def=m,"group"===L.type){for(b in L._def=RED.group.def,L._def.defaults)L._def.defaults.hasOwnProperty(b)&&"inputs"!==b&&"outputs"!==b&&(L[b]=f[b],L._config[b]=JSON.stringify(f[b]));L._config.x=L.x,L._config.y=L.y,f.hasOwnProperty("w")&&(L.w=f.w),f.hasOwnProperty("h")&&(L.h=f.h)}else if("subflow"===f.type.substring(0,7)){var S=f.type.split(":")[1],oe=X[S]||E[S]||De(S);if(oe)(X[S]||n||"copy"===o.importMap[f.id])&&(S=oe.id,L.type="subflow:"+S,L._def=ve.getNodeType(L.type),delete L.i),L.name=f.name,L.outputs=oe.out.length,L.inputs=oe.in.length,L.env=f.env;else{L._def={color:"#fee",defaults:{},label:"unknown: "+f.type,labelStyle:"red-ui-flow-node-label-italic",outputs:f.outputs||f.wires&&f.wires.length||0,set:ve.getNodeSet("node-red/unknown")};var ne={};for(O in f)f.hasOwnProperty(O)&&"x"!=O&&"y"!=O&&"z"!=O&&"id"!=O&&"wires"!=O&&(ne[O]=f[O]);L._orig=ne,L.name=f.type,L.type="unknown"}}else if("junction"===f.type)L._def={defaults:{}},L._config.x=L.x,L._config.y=L.y,L.inputs=1,L.outputs=1,L.w=0,L.h=0;else{if(!L._def){L.x&&L.y?L._def={color:"#fee",defaults:{},label:"unknown: "+f.type,labelStyle:"red-ui-flow-node-label-italic",outputs:f.outputs||f.wires&&f.wires.length||0,set:ve.getNodeSet("node-red/unknown")}:(L._def={category:"config",set:ve.getNodeSet("node-red/unknown")},L.users=[],delete L.x,delete L.y,delete L.wires,delete L.inputLabels,delete L.outputLabels,f.z||delete L.z);var O,ne={};for(O in f)f.hasOwnProperty(O)&&"x"!=O&&"y"!=O&&"z"!=O&&"id"!=O&&"wires"!=O&&(ne[O]=f[O]);L._orig=ne,L.name=f.type,L.type="unknown"}if("config"!=L._def.category){for(b in f.hasOwnProperty("inputs")&&L._def.defaults.hasOwnProperty("inputs")?(L.inputs=parseInt(f.inputs,10),L._config.inputs=JSON.stringify(f.inputs)):L.inputs=L._def.inputs,f.hasOwnProperty("outputs")&&L._def.defaults.hasOwnProperty("outputs")?(L.outputs=parseInt(f.outputs,10),L._config.outputs=JSON.stringify(f.outputs)):L.outputs=L._def.outputs,L.hasOwnProperty("wires")&&(isNaN(L.outputs)?L.outputs=L.wires.length:L.wires.length>L.outputs&&(console.log("Warning: node.wires longer than node.outputs - trimming wires:",L.id," wires:",L.wires.length," outputs:",L.outputs),L.wires=L.wires.slice(0,L.outputs))),L._def.defaults)L._def.defaults.hasOwnProperty(b)&&"inputs"!==b&&"outputs"!==b&&(L[b]=f[b],L._config[b]=JSON.stringify(f[b]));if(L._config.x=L.x,L._config.y=L.y,L._def.hasOwnProperty("credentials")&&f.hasOwnProperty("credentials"))for(b in L.credentials={},L._def.credentials)L._def.credentials.hasOwnProperty(b)&&f.credentials.hasOwnProperty(b)&&(L.credentials[b]=f.credentials[b])}}"junction"===(D[f.id]=L).type?k.push(L):"unknown"===L.type||"config"!==L._def.category?R.push(L):"group"===L.type&&(_.push(L),Y.add(L.id))}for(l=0;l<R.length+k.length;l++){if((f=l<R.length?R[l]:k[l-R.length]).wires){for(var N=0;N<f.wires.length;N++)for(var ie,ae=Array.isArray(f.wires[N])?f.wires[N]:[f.wires[N]],I=0;I<ae.length;I++)D.hasOwnProperty(ae[I])&&(f.z===D[ae[I]].z?(we(ie={source:f,sourcePort:N,target:D[ae[I]]}),x.push(ie)):console.log("Warning: dropping link that crosses tabs:",f.id,"->",D[ae[I]].id));delete f.wires}for(var se in f.g&&D[f.g]?f.g=D[f.g].id:delete f.g,/^link /.test(f.type)&&f.links&&(f.links=f.links.filter(function(e){e=D[e]||RED.nodes.node(e);return!!e&&(e.z===f.z||"link call"===f.type&&!De(e.z)||!De(f.z)&&!De(e.z))})),f._def.defaults)f._def.defaults.hasOwnProperty(se)&&f._def.defaults[se].type&&(d=f[se],d=(d=Array.isArray(d)?d:[d]).map(function(e){var t=D[e];return t?t.id:e}),f[se]=Array.isArray(f[se])?d:d[0])}for(l=0;l<K.length;l++)(f=K[l]).in.forEach(function(t){t.wires.forEach(function(e){D.hasOwnProperty(e.id)&&(we(e={source:t,sourcePort:0,target:D[e.id]}),x.push(e))}),delete t.wires}),f.out.forEach(function(o){o.wires.forEach(function(e){var t;E[e.id]&&E[e.id].id==f.id?t={source:f.in[e.port],sourcePort:e.port,target:o}:(D.hasOwnProperty(e.id)||E.hasOwnProperty(e.id))&&(t={source:D[e.id]||E[e.id],sourcePort:e.port,target:o}),t&&(we(t),x.push(t))}),delete o.wires}),f.status&&(f.status.wires.forEach(function(e){var t;E[e.id]&&E[e.id].id==f.id?t={source:f.in[e.port],sourcePort:e.port,target:f.status}:(D.hasOwnProperty(e.id)||E.hasOwnProperty(e.id))&&(t={source:D[e.id]||E[e.id],sourcePort:e.port,target:f.status}),t&&(we(t),x.push(t))}),delete f.status.wires);var re,P={};for(l=0;l<_.length;l++)(f=_[l]).g&&!Y.has(f.g)&&delete f.g,f.g||(P[f.id]=0);do{for(re=!1,l=0;l<_.length;l++)(f=_[l]).g&&P[f.id]!==P[f.g]+1&&(P[f.id]=P[f.g]+1,re=!0)}while(re);for(_.sort(function(e,t){return P[e.id]-P[t.id]}),l=0;l<_.length;l++)_[l]=Ce(_[l]),D[_[l].id]=_[l];for(l=0;l<k.length;l++)k[l]=je(k[l]),D[k[l].id]=k[l];for(l=0;l<R.length;l++)R[l]=xe(R[l]),D[R[l].id]=R[l];for(l=0;l<R.length;l++){L=R[l];RED.editor.validateNode(L)}var de,le=e=>{e=D[e];return e?e.__isProxy__?e:D[e.id]:null};for(l=0;l<_.length;l++)(f=_[l]).__node__.nodes=f.nodes.map(le),f.__node__.nodes=f.nodes.filter(function(e){return e&&e.g!==f.id&&(e.g=f.id),!!e});for(l=0;l<x.length;l++)x[l].source=le(x[l].source.id)||x[l].source,x[l].target=le(x[l].target.id)||x[l].target;return RED.workspaces.refresh(),t&&(de=RED.notify(RED._("clipboard.recoveredNodesNotification",{flowName:RED._("clipboard.recoveredNodes")}),{type:"warning",fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){de.close()}}]})),{nodes:R,links:x,groups:_,junctions:k,workspaces:y,subflows:K,missingWorkspace:T,removedNodes:z}}function N(o,n){var e,t,i;for(e in n=Object.assign({},{action:"add",emitEvent:!0},n),o._def.defaults)o._def.defaults.hasOwnProperty(e)&&(t=o._def.defaults[e]).type&&(t=ve.getNodeType(t.type))&&"config"==t.category&&(t=pe[o[e]])&&("add"===n.action?-1===t.users.indexOf(o)&&(t.users.push(o),n.emitEvent)&&RED.events.emit("nodes:change",t):"remove"===n.action&&-1!==t.users.indexOf(o)&&((i=t.users).splice(i.indexOf(o),1),n.emitEvent)&&RED.events.emit("nodes:change",t));0===o.type.indexOf("subflow:")&&o.env?.forEach(e=>{var t;"conf-type"===e.type&&e.value&&(e=D(e.value))&&("add"===n.action?-1===e.users.indexOf(o)&&(e.users.push(o),n.emitEvent)&&RED.events.emit("nodes:change",e):"remove"===n.action&&-1!==e.users.indexOf(o)&&((t=e.users).splice(t.indexOf(o),1),n.emitEvent)&&RED.events.emit("nodes:change",e))})}function Ce(e){return e.__isProxy__||(e=new Proxy(e,j)),p[e.z]=p[e.z]||[],p[e.z].push(e),ge[e.id]=e,be.addObjectToWorkspace(e.z,e.id,e.changed||e.moved),RED.events.emit("groups:add",e),e}function I(e){var t=p[e.z].indexOf(e);p[e.z].splice(t,1),0===p[e.z].length&&delete p[e.z],e.g&&ge[e.g]&&(t=ge[e.g].nodes.indexOf(e),ge[e.g].nodes.splice(t,1)),RED.group.markDirty(e),be.removeObjectFromWorkspace(e.z,e.id),delete ge[e.id],RED.events.emit("groups:remove",e)}function je(e){return e.__isProxy__||(e=new Proxy(e,j)),d[e.z]=d[e.z]||[],d[e.z].push(e),me[e.id]=e,c[e.id]||(c[e.id]={in:[],out:[]}),be.addObjectToWorkspace(e.z,e.id,e.changed||e.moved),RED.events.emit("junctions:add",e),e}function P(t){var e=d[t.z].indexOf(t),e=(d[t.z].splice(e,1),0===d[t.z].length&&delete d[t.z],delete me[t.id],delete c[t.id],be.removeObjectFromWorkspace(t.z,t.id),RED.events.emit("junctions:remove",t),h.filter(function(e){return e.source===t||e.target===t}));return e.forEach(x),{links:e}}return{init:function(){RED.events.on("registry:node-type-added",function(t){ve.getNodeType(t);var o={};RED.nodes.eachNode(function(e){"unknown"===e.type&&e.name===t&&(o[e.id]=e)}),RED.nodes.eachConfig(function(e){"unknown"===e.type&&e.name===t&&(o[e.id]=e)});const n={};var i,a,s,e=Object.keys(o);0<e.length&&(i=[],e.forEach(function(e){e=o[e];pe.hasOwnProperty(e.id)?delete pe[e.id]:be.removeNode(e),e.g&&(n[e.id]=e.g),i.push(_(e)),RED.events.emit("nodes:remove",e)}),a=[],RED.nodes.eachLink(function(e){o.hasOwnProperty(e.source.id)&&o.hasOwnProperty(e.target.id)&&a.push(e)}),a.forEach(x),RED.view.redraw(!0,!0),e=k(i,{generateIds:!1,reimport:!0}),s={},e.nodes.forEach(function(t){var e,o;s[t.id]=t,n[t.id]&&(t.g=n[t.id],e=RED.nodes.group(t.g))&&-1<(o=e.nodes.findIndex(e=>e.id===t.id))&&(e.nodes[o]=t)}),RED.nodes.eachLink(function(e){s.hasOwnProperty(e.source.id)&&(e.source=s[e.source.id]),s.hasOwnProperty(e.target.id)&&(e.target=s[e.target.id])}),RED.view.redraw(!0))}),RED.events.on("deploy",function(){be.clearState()})},registry:ve,setNodeList:ve.setNodeList,getNodeSet:ve.getNodeSet,addNodeSet:ve.addNodeSet,removeNodeSet:ve.removeNodeSet,enableNodeSet:ve.enableNodeSet,disableNodeSet:ve.disableNodeSet,setIconSets:ve.setIconSets,getIconSets:ve.getIconSets,registerType:ve.registerNodeType,getType:ve.getNodeType,getNodeHelp:function(e){var t="",e=$("script[data-help-name='"+e+"']");return t=e&&(t=e.html(),"text/markdown"===e.attr("type"))?RED.utils.renderMarkdown(t):t},convertNode:_,add:xe,remove:R,clear:function(){h=[],l={},c={},pe={},u=[],ge={},p={},me={},d={};var e=Object.keys(fe);e.forEach(function(e){fe[e].locked=!1}),Object.keys(he).forEach(function(e){RED.subflow.removeSubflow(e)}),e.forEach(function(e){RED.workspaces.remove(fe[e])}),ue=ce=null,fe={},be.clear(),RED.nodes.dirty(!1),RED.view.redraw(!0,!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.sidebar.config.refresh(),RED.sidebar.info.refresh(),RED.events.emit("workspace:clear")},detachNodes:function(e){let o=[];if(e.forEach(e=>{var t;"group"===e.type?(t=RED.group.getNodes(e,!0,!0),o=o.concat(t)):o.push(e)}),0<o.length){e=RED.nodes.getNodeIslands(o);let t=[],r=[],d=new Set;return e.forEach(e=>{let s=new Set(e),o=[],n=[];e.forEach(e=>{var t=RED.nodes.getNodeLinks(e,1),e=RED.nodes.getNodeLinks(e,0);t.forEach(e=>{s.has(e.source)||o.push(e)}),e.forEach(e=>{s.has(e.target)||n.push(e)})}),o.forEach(o=>{let n=o.source,t=new Set,i=new Set,a=[o.target];for(;0<a.length;){var e=a.pop(a);i.add(e),RED.nodes.getNodeLinks(e,0).forEach(e=>{i.has(e.target)||(i.add(e.target),s.has(e.target)?a.push(e.target):t.add(e.target))})}t.forEach(e=>{var t=`${n.id}[${o.sourcePort}] -> `+e.id;d.has(t)||(d.add(t),t={source:n,sourcePort:o.sourcePort,target:e},0===RED.nodes.filterLinks(t).length&&r.push(t))})}),o.forEach(e=>{RED.nodes.removeLink(e),t.push(e)}),n.forEach(e=>{RED.nodes.removeLink(e),t.push(e)})}),r.forEach(e=>RED.nodes.addLink(e)),{newLinks:r,removedLinks:t}}},moveNodesForwards:function(e){return be.moveNodesForwards(e)},moveNodesBackwards:function(e){return be.moveNodesBackwards(e)},moveNodesToFront:function(e){return be.moveNodesToFront(e)},moveNodesToBack:function(e){return be.moveNodesToBack(e)},getNodeOrder:function(e){return be.getNodeOrder(e)},setNodeOrder:function(e,t){be.setNodeOrder(e,t)},moveNodeToTab:function(e,o){var t,n,i,a,s,r;"group"===e.type?(a=o,t=p[(r=e).z].indexOf(r),p[r.z].splice(t,1),p[a]=p[a]||[],p[a].push(r),r.z=a,RED.events.emit("groups:change",r)):"junction"===e.type?(n=o,a=d[(t=e).z].indexOf(t),d[t.z].splice(a,1),d[n]=d[n]||[],d[n].push(t),i=t.z,t.z=n,(a=c[t.id])&&(a.in.forEach(function(e){var t=l[i].indexOf(e);-1!=t&&l[i].splice(t,1),e.source.z===n&&l[n]&&l[n].push(e)}),a.out.forEach(function(e){var t=l[i].indexOf(e);-1!=t&&l[i].splice(t,1),e.target.z===n&&l[n]&&l[n].push(e)})),RED.events.emit("junctions:change",t)):(s=e.z,be.moveNode(e,o),(r=c[e.id])&&(r.in.forEach(function(e){var t=l[s].indexOf(e);-1!=t&&l[s].splice(t,1),e.source.z===o&&l[o]&&l[o].push(e)}),r.out.forEach(function(e){var t=l[s].indexOf(e);-1!=t&&l[s].splice(t,1),e.target.z===o&&l[o]&&l[o].push(e)})),RED.events.emit("nodes:change",e))},addLink:we,removeLink:x,getNodeLinks:function(e,t){return"string"!=typeof e&&(e=e.id),c[e]?[].concat(1===t?c[e].in:c[e].out):[]},addWorkspace:Ee,removeWorkspace:function(e){var t,o,n=fe[e],i=[],a=[],s=[],r=[];if(n){for(t in delete fe[e],delete l[e],u.splice(u.indexOf(e),1),be.hasTab(e)&&(i=be.getNodes(e).slice()),pe)pe.hasOwnProperty(t)&&(o=pe[t]).z==e&&i.push(o);for(r=RED.nodes.junctions(e),t=0;t<i.length;t++)var d=R(i[t].id),a=a.concat(d.links);for(t=0;t<r.length;t++){d=P(r[t]);a=a.concat(d.links)}for(s=(p[e]||[]).filter(function(e){return!e.g}),t=0;t<s.length;t++)s[t].nodes.forEach(function(e){"group"===e.type&&s.push(e)});for(t=s.length-1;0<=t;t--)I(s[t]);be.removeTab(e),RED.events.emit("flows:remove",n)}return{nodes:i,links:a,groups:s,junctions:r}},getWorkspaceOrder:function(){return[...u]},setWorkspaceOrder:function(e){u=e},workspace:function(e){return fe[e]},addSubflow:_e,removeSubflow:function(e){he[e.id]&&(delete he[e.id],be.removeTab(e.id),ve.removeNodeType("subflow:"+e.id),RED.events.emit("subflows:remove",e))},subflow:De,subflowContains:ke,addGroup:Ce,removeGroup:I,group:function(e){return ge[e]},groups:function(e){return p[e]?p[e].slice():[]},addJunction:je,removeJunction:P,junction:function(e){return me[e]},junctions:function(e){return d[e]?d[e].slice():[]},eachNode:function(e){be.eachNode(e)},eachLink:function(e){for(var t=0;t<h.length&&!1!==e(h[t]);t++);},eachConfig:function(e){for(var t in pe)if(pe.hasOwnProperty(t)&&!1===e(pe[t]))break},eachSubflow:function(e){for(var t in he)if(he.hasOwnProperty(t)&&!1===e(he[t]))break},eachWorkspace:function(e){for(var t=0;t<u.length&&!1!==e(fe[u[t]]);t++);},eachGroup:function(e){for(var t of Object.values(ge))if(!1===e(t))break},eachJunction:function(e){for(var t of Object.values(me))if(!1===e(t))break},node:D,version:function(e){if(void 0===e)return t;t=e},originalFlow:function(e){if(void 0===e)return ue;ue=e},filterNodes:function(e){return be.filterNodes(e)},filterLinks:function(e){var t,o=[],n=[],i=!1,a=e.source&&e.source.z,s=e.target&&e.target.z;(t=a||s?a!==s&&void 0===a?s:a:t)?(n=l[t]||[],i=!0):e.source&&e.source.hasOwnProperty("id")?c[e.source.id]&&(i=!0,n=n.concat(c[e.source.id].out)):e.target&&e.target.hasOwnProperty("id")&&c[e.target.id]&&(i=!0,n=n.concat(c[e.target.id].in)),i||(n=h);for(var r=0;r<n.length;r++){var d=n[r];if(e.source){if(e.source.hasOwnProperty("id")&&d.source.id!==e.source.id)continue;if(e.source.hasOwnProperty("z")&&d.source.z!==e.source.z)continue}if(e.target){if(e.target.hasOwnProperty("id")&&d.target.id!==e.target.id)continue;if(e.target.hasOwnProperty("z")&&d.target.z!==e.target.z)continue}e.hasOwnProperty("sourcePort")&&d.sourcePort!==e.sourcePort||o.push(d)}return o},import:k,identifyImportConflicts:$e,getAllFlowNodes:e,getAllUpstreamNodes:function(t){return e(t,"up").filter(function(e){return e!==t})},getAllDownstreamNodes:function(t){return e(t,"down").filter(function(e){return e!==t})},getDownstreamNodes:function(e){return e=c[e.id].out,e=new Set(e.map(e=>e.target)),Array.from(e)},getNodeIslands:function(e){var o=new Set(e),n=new Map,i=new Map,a=new Set;e.forEach((e,t)=>{n.set(e,t),i.set(t,[e]);t=RED.nodes.getNodeLinks(e,1),e=RED.nodes.getNodeLinks(e,0);t.forEach(e=>{o.has(e.source)&&a.add(e)}),e.forEach(e=>{o.has(e.target)&&a.add(e)})}),a.forEach(e=>{var o=e.source,e=e.target;if(n.get(o)!==n.get(e)){let t=n.get(o);o=n.get(e);i.get(o).forEach(e=>{n.set(e,t),i.get(t).push(e)}),i.delete(o)}});const s=[];return i.forEach((e,t)=>{s.push(e)}),s},createExportableNodeSet:Re,createCompleteNodeSet:function(t){for(var o=[],e=0;e<u.length;e++)"tab"==fe[u[e]].type&&o.push(S(fe[u[e]],t));for(e in he)he.hasOwnProperty(e)&&o.push(O(he[e],t));for(e in ge)ge.hasOwnProperty(e)&&o.push(_(ge[e],t));for(e in me)me.hasOwnProperty(e)&&o.push(_(me[e],t));for(e in pe)pe.hasOwnProperty(e)&&o.push(_(pe[e],t));return RED.nodes.eachNode(function(e){o.push(_(e,t))}),o},updateConfigNodeUsers:N,id:ye,dirty:function(e){if(null==e)return o;(o=e)||be.clearState(),RED.events.emit("workspace:dirty",{dirty:o})}}}(),RED.nodes.fontAwesome=function(){var t={"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":""},o={"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":""},e=Object.keys(t);return{getIconUnicode:function(e){return t[e]||o[e]},getIconList:function(){return e}}}(),RED.history=function(){var t=[],o=[];function S(e,t){var e=e&&(RED.nodes.workspace(e)||RED.nodes.subflow(e)||null),o=!!e&&e.locked;e&&o&&(e.locked=!1,t.add(e))}function O(t){var e,o,n,i,a,s={};if(t){if("multi"==t.t)for(d={t:"multi",events:[]},e=t.events.length-1;0<=e;e--){var r=O(t.events[e]);d.events.push(r)}else if("replace"==t.t)if(t.complete){var d={t:"replace",config:RED.nodes.createCompleteNodeSet(),changed:{},moved:{},complete:!0,rev:RED.nodes.version(),dirty:RED.nodes.dirty()},l=RED.workspaces.active(),c=(d.config.forEach(e=>{var t=RED.nodes.node(e.id);t&&(d.changed[e.id]=t.changed,d.moved[e.id]=t.moved)}),RED.nodes.clear(),RED.nodes.import(t.config));RED.nodes.dirty(!1);const L=new Set;c.nodes.forEach(function(e){t.changed[e.id]&&(S(e.z,L),e.changed=!0),t.moved[e.id]&&(S(e.z,L),e.moved=!0)}),L.forEach(e=>{e.locked=!0}),RED.nodes.version(t.rev),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.workspaces.show(l,!0),RED.sidebar.config.refresh()}else{var u={},c=(t.config.forEach(function(e){u[e.id]="replace"}),RED.nodes.import(t.config,{importMap:u}));d={t:"replace",config:c.removedNodes,dirty:RED.nodes.dirty()}}else if("add"==t.t){if(d={t:"delete",dirty:RED.nodes.dirty()},t.nodes)for(d.nodes=[],e=0;e<t.nodes.length;e++){var p,f,h=RED.nodes.node(t.nodes[e]);h.z&&(s[h.z]=!0),d.nodes.push(h),RED.nodes.remove(t.nodes[e]),h.g&&-1!==(f=(p=RED.nodes.group(h.g)).nodes.indexOf(h))&&(p.nodes.splice(f,1),RED.group.markDirty(p))}if(t.links)for(d.links=[],e=0;e<t.links.length;e++)d.links.push(t.links[e]),RED.nodes.removeLink(t.links[e]);if(t.junctions)for(d.junctions=[],e=0;e<t.junctions.length;e++)d.junctions.push(t.junctions[e]),RED.nodes.removeJunction(t.junctions[e]),t.junctions[e].g&&-1!==(f=(p=RED.nodes.group(t.junctions[e].g)).nodes.indexOf(t.junctions[e]))&&(p.nodes.splice(f,1),RED.group.markDirty(p));if(t.groups)for(d.groups=[],e=t.groups.length-1;0<=e;e--)s[(p=t.groups[e]).z]=!0,d.groups.unshift(p),RED.nodes.removeGroup(p);if(t.workspaces)for(d.workspaces=[],e=0;e<t.workspaces.length;e++){var g=RED.nodes.getWorkspaceOrder();t.workspaces[e]._index=g.indexOf(t.workspaces[e].id),d.workspaces.push(t.workspaces[e]),RED.nodes.removeWorkspace(t.workspaces[e].id),RED.workspaces.remove(t.workspaces[e])}if(t.subflows)for(d.subflows=[],e=0;e<t.subflows.length;e++)d.subflows.push(t.subflows[e]),RED.nodes.removeSubflow(t.subflows[e]),RED.workspaces.remove(t.subflows[e]);if(t.subflow&&(d.subflow={},t.subflow.instances&&(d.subflow.instances=[],t.subflow.instances.forEach(function(e){d.subflow.instances.push(e);var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)})),t.subflow.hasOwnProperty("changed"))&&(o=RED.nodes.subflow(t.subflow.id))&&(o.changed=t.subflow.changed),t.removedLinks)for(d.createdLinks=[],e=0;e<t.removedLinks.length;e++)d.createdLinks.push(t.removedLinks[e]),RED.nodes.addLink(t.removedLinks[e])}else if("delete"==t.t){if(d={t:"add",dirty:RED.nodes.dirty()},t.workspaces)for(d.workspaces=[],e=0;e<t.workspaces.length;e++)d.workspaces.push(t.workspaces[e]),RED.nodes.addWorkspace(t.workspaces[e],t.workspaces[e]._index),RED.workspaces.add(t.workspaces[e],void 0,t.workspaces[e]._index),delete t.workspaces[e]._index;if(t.subflows)for(d.subflows=[],e=0;e<t.subflows.length;e++)d.subflows.push(t.subflows[e]),RED.nodes.addSubflow(t.subflows[e]);if(t.subflowInputs&&0<t.subflowInputs.length&&((o=RED.nodes.subflow(t.subflowInputs[0].z)).in.push(t.subflowInputs[0]),o.in[0].dirty=!0),t.subflowOutputs&&0<t.subflowOutputs.length)for(o=RED.nodes.subflow(t.subflowOutputs[0].z),t.subflowOutputs.sort(function(e,t){return e.i-t.i}),e=0;e<t.subflowOutputs.length;e++){var m=t.subflowOutputs[e];o.out.splice(m.i,0,m);for(var v=m.i+1;v<o.out.length;v++)o.out[v].i++,o.out[v].dirty=!0;RED.nodes.eachLink(function(e){e.source.type=="subflow:"+o.id&&e.sourcePort>=m.i&&e.sourcePort++})}if(t.subflow&&(d.subflow={},t.subflow.hasOwnProperty("instances")&&(d.subflow.instances=[],t.subflow.instances.forEach(function(e){d.subflow.instances.push(e);var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)})),t.subflow.hasOwnProperty("status"))&&((o=RED.nodes.subflow(t.subflow.id)).status=t.subflow.status),o&&RED.nodes.filterNodes({type:"subflow:"+o.id}).forEach(function(e){e.inputs=o.in.length,e.outputs=o.out.length,e.resize=!0,e.dirty=!0}),t.groups){d.groups=[];var b={};for(t.groups.forEach(function(e){b[e.id]=e}),e=t.groups.length-1;0<=e;e--)RED.nodes.addGroup(t.groups[e]),s[t.groups[e].z]=!0,d.groups.unshift(t.groups[e]),t.groups[e].g&&(-1===(p=b[t.groups[e].g]||RED.nodes.group(t.groups[e].g)).nodes.indexOf(t.groups[e])&&p.nodes.push(t.groups[e]),RED.group.markDirty(t.groups[e]))}if(t.nodes)for(d.nodes=[],e=0;e<t.nodes.length;e++)RED.nodes.add(t.nodes[e]),s[t.nodes[e].z]=!0,d.nodes.push(t.nodes[e].id),t.nodes[e].g&&(-1===(p=RED.nodes.group(t.nodes[e].g)).nodes.indexOf(t.nodes[e])&&p.nodes.push(t.nodes[e]),RED.group.markDirty(p));if(t.junctions)for(d.junctions=[],e=0;e<t.junctions.length;e++)d.junctions.push(t.junctions[e]),RED.nodes.addJunction(t.junctions[e]),t.junctions[e].g&&(-1===(p=RED.nodes.group(t.junctions[e].g)).nodes.indexOf(t.junctions[e])&&p.nodes.push(t.junctions[e]),RED.group.markDirty(p));if(t.links)for(d.links=[],e=0;e<t.links.length;e++)RED.nodes.addLink(t.links[e]),d.links.push(t.links[e]);if(t.createdLinks)for(d.removedLinks=[],e=0;e<t.createdLinks.length;e++)d.removedLinks.push(t.createdLinks[e]),RED.nodes.removeLink(t.createdLinks[e]);if(t.changes)for(e in t.changes)if(t.changes.hasOwnProperty(e)){if(h=RED.nodes.node(e)){for(var y in t.changes[e])t.changes[e].hasOwnProperty(y)&&(h[y]=t.changes[e][y]);h.dirty=!0}RED.events.emit("nodes:change",h)}o&&RED.events.emit("subflows:change",o)}else if("move"==t.t){for(d={t:"move",nodes:[],dirty:RED.nodes.dirty()},e=0;e<t.nodes.length;e++){var w=t.nodes[e],E={n:w.n,ox:w.n.x,oy:w.n.y,dirty:!0,moved:w.n.moved};d.nodes.push(E),w.n.x=w.ox,w.n.y=w.oy,w.n.dirty=!0,w.n.moved=w.moved}if(t.links)for(d.removedLinks=[],e=0;e<t.links.length;e++)d.removedLinks.push(t.links[e]),RED.nodes.removeLink(t.links[e]);if(t.removedLinks)for(d.links=[],e=0;e<t.removedLinks.length;e++)d.links.push(t.removedLinks[e]),RED.nodes.addLink(t.removedLinks[e]);t.addToGroup&&(RED.group.removeFromGroup(t.addToGroup,t.nodes.map(function(e){return e.n}),!1),d.removeFromGroup=t.addToGroup),t.removeFromGroup&&(RED.group.addToGroup(t.removeFromGroup,t.nodes.map(function(e){return e.n})),d.addToGroup=t.removeFromGroup)}else if("edit"==t.t){for(e in(d={t:"edit",changes:{},changed:t.node.changed,dirty:RED.nodes.dirty()}).node=t.node,t.changes)if(t.changes.hasOwnProperty(e)){if(d.changes[e]=t.node[e],t.node._def.defaults&&t.node._def.defaults[e]&&t.node._def.defaults[e].type){var D=t.node[e];(D=Array.isArray(D)?D:[D]).forEach(function(e){e=RED.nodes.node(e);e&&"config"===e._def.category&&(e.users.splice(e.users.indexOf(t.node),1),RED.events.emit("nodes:change",e))}),D=t.changes[e],(D=Array.isArray(D)?D:[D]).forEach(function(e){e=RED.nodes.node(e);e&&"config"===e._def.category&&(e.users.push(t.node),RED.events.emit("nodes:change",e))})}else if("env"===e&&0===t.node.type.indexOf("subflow:")){let e=t.node.env||[];(e=e.reduce((e,t)=>("conf-type"===t.type&&t.value&&e.push(t.value),e),[])).forEach(function(e){e=RED.nodes.node(e);e&&-1!==e.users.indexOf(t.node)&&(e.users.splice(e.users.indexOf(t.node),1),RED.events.emit("nodes:change",e))}),(e=(e=t.changes.env||[]).reduce((e,t)=>("conf-type"===t.type&&t.value&&e.push(t.value),e),[])).forEach(function(e){e=RED.nodes.node(e);e&&-1===e.users.indexOf(t.node)&&(e.users.push(t.node),RED.events.emit("nodes:change",e))})}if("credentials"===e&&t.changes[e]){d.changes[e]={};for(var[R,x]of Object.entries(t.changes[e]))t.node.credentials&&(d.changes[e][R]=t.node.credentials[R]),t.node.credentials[R]=x}else t.node[e]=t.changes[e]}switch(t.node.dirty=!0,t.node.changed=t.changed,t.node.type){case"tab":n="flows";break;case"group":n="groups";break;case"subflow":n="subflows";break;default:n="nodes"}if(RED.events.emit(n+=":change",t.node),"tab"===t.node.type&&t.changes.hasOwnProperty("disabled")&&$("#red-ui-tab-"+t.node.id.replace(".","-")).toggleClass("red-ui-workspace-disabled",!!t.node.disabled),"tab"===t.node.type&&t.changes.hasOwnProperty("locked")&&$("#red-ui-tab-"+t.node.id.replace(".","-")).toggleClass("red-ui-workspace-locked",!!t.node.locked),t.subflow)d.subflow={},t.subflow.hasOwnProperty("inputCount")&&(d.subflow.inputCount=t.node.in.length,t.node.in.length>t.subflow.inputCount?(d.subflow.inputs=t.node.in.slice(t.subflow.inputCount),t.node.in.splice(t.subflow.inputCount)):0<t.subflow.inputs.length&&(t.node.in=t.node.in.concat(t.subflow.inputs))),t.subflow.hasOwnProperty("outputCount")&&(d.subflow.outputCount=t.node.out.length,t.node.out.length>t.subflow.outputCount?(d.subflow.outputs=t.node.out.slice(t.subflow.outputCount),t.node.out.splice(t.subflow.outputCount)):0<t.subflow.outputs.length&&(t.node.out=t.node.out.concat(t.subflow.outputs))),t.subflow.hasOwnProperty("instances")&&(d.subflow.instances=[],t.subflow.instances.forEach(function(e){d.subflow.instances.push(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{if(t.outputMap)for(var _ in i={},d.outputMap={},t.outputMap)t.outputMap.hasOwnProperty(_)&&"-1"!==t.outputMap[_]&&(i[t.outputMap[_]]=_,d.outputMap[t.outputMap[_]]=_);t.node.__outputs=d.changes.outputs,RED.editor.updateNodeProperties(t.node,i),RED.editor.validateNode(t.node)}if(t.node.users){var k=new Set,T=t.node.users.slice();for(k.add(t.node.id);T.length;){const h=T.pop();k.has(h.id)||(k.add(h.id),h.users&&T.push(...h.users),RED.editor.validateNode(h))}}if(t.links)for(d.createdLinks=[],e=0;e<t.links.length;e++)RED.nodes.addLink(t.links[e]),d.createdLinks.push(t.links[e]);if(t.createdLinks)for(d.links=[],e=0;e<t.createdLinks.length;e++)RED.nodes.removeLink(t.createdLinks[e]),d.links.push(t.createdLinks[e])}else if("createSubflow"==t.t){if(d={t:"deleteSubflow",activeWorkspace:t.activeWorkspace,dirty:RED.nodes.dirty()},t.nodes){d.movedNodes=[];var C=t.activeWorkspace,l=RED.nodes.filterNodes({z:t.subflow.subflow.id});for((l=(l=l.concat(RED.nodes.groups(t.subflow.subflow.id))).concat(RED.nodes.junctions(t.subflow.subflow.id))).forEach(function(e){e.x+=t.subflow.offsetX,e.y+=t.subflow.offsetY,e.dirty=!0,d.movedNodes.push(e.id),RED.nodes.moveNodeToTab(e,C)}),d.subflows=[],e=0;e<t.nodes.length;e++)d.subflows.push((a=t.nodes[e],RED.nodes.node(a)||RED.nodes.junction(a))),RED.nodes.remove(t.nodes[e])}if(t.links)for(d.links=[],e=0;e<t.links.length;e++)d.links.push(t.links[e]),RED.nodes.removeLink(t.links[e]);if(d.subflow=t.subflow,RED.nodes.removeSubflow(t.subflow.subflow),RED.workspaces.remove(t.subflow.subflow),t.removedLinks)for(d.createdLinks=[],e=0;e<t.removedLinks.length;e++)d.createdLinks.push(t.removedLinks[e]),RED.nodes.addLink(t.removedLinks[e])}else if("deleteSubflow"==t.t){if(d={t:"createSubflow",activeWorkspace:t.activeWorkspace,dirty:RED.nodes.dirty()},t.subflow&&(RED.nodes.addSubflow(t.subflow.subflow),d.subflow=t.subflow,t.subflow.subflow.g)&&RED.group.addToGroup(RED.nodes.group(t.subflow.subflow.g),t.subflow.subflow),t.subflows)for(d.nodes=[],e=0;e<t.subflows.length;e++)RED.nodes.add(t.subflows[e]),d.nodes.push(t.subflows[e].id);if(t.movedNodes&&t.movedNodes.forEach(function(e){(nn=(nn=RED.nodes.node(e))||RED.nodes.group(e)).x-=t.subflow.offsetX,nn.y-=t.subflow.offsetY,nn.dirty=!0,RED.nodes.moveNodeToTab(nn,t.subflow.subflow.id)}),t.links)for(d.links=[],e=0;e<t.links.length;e++)d.links.push(t.links[e]),RED.nodes.addLink(t.links[e]);if(t.createdLinks)for(d.removedLinks=[],e=0;e<t.createdLinks.length;e++)d.removedLinks.push(t.createdLinks[e]),RED.nodes.removeLink(t.createdLinks[e])}else if("reorder"==t.t)d={t:"reorder",dirty:RED.nodes.dirty()},t.workspaces&&(d.workspaces={from:t.workspaces.to,to:t.workspaces.from},RED.workspaces.order(t.workspaces.from)),t.nodes&&(d.nodes={z:t.nodes.z,from:t.nodes.to,to:t.nodes.from},RED.nodes.setNodeOrder(t.nodes.z,t.nodes.from));else if("createGroup"==t.t){if(d={t:"ungroup",dirty:RED.nodes.dirty(),groups:[]},t.groups)for(e=0;e<t.groups.length;e++)d.groups.push(t.groups[e]),RED.group.ungroup(t.groups[e])}else if("ungroup"==t.t){if(d={t:"createGroup",dirty:RED.nodes.dirty(),groups:[]},t.groups)for(e=0;e<t.groups.length;e++){d.groups.push(t.groups[e]);var j=t.groups[e].nodes.slice();t.groups[e].nodes=[],RED.nodes.addGroup(t.groups[e]),RED.group.addToGroup(t.groups[e],j),t.groups[e].g&&(j=RED.nodes.group(t.groups[e].g))&&RED.group.addToGroup(j,t.groups[e])}}else"addToGroup"==t.t?(d={t:"removeFromGroup",dirty:RED.nodes.dirty(),group:t.group,nodes:t.nodes,reparent:t.reparent},t.nodes&&RED.group.removeFromGroup(t.group,t.nodes,!t.hasOwnProperty("reparent")||void 0===t.hasOwnProperty("reparent")||t.reparent)):"removeFromGroup"==t.t&&(d={t:"addToGroup",dirty:RED.nodes.dirty(),group:t.group,nodes:t.nodes,reparent:t.reparent},t.nodes)&&RED.group.addToGroup(t.group,t.nodes);return t.callback&&"function"==typeof t.callback&&(d.callback=t.callback,t.callback(t)),Object.keys(s).forEach(function(e){e=RED.nodes.subflow(e);e&&RED.editor.validateNode(e)}),RED.nodes.dirty(t.dirty),RED.view.updateActive(),RED.view.select(null),RED.workspaces.refresh(),RED.sidebar.config.refresh(),RED.subflow.refresh(),d}}return{markAllDirty:function(){for(var e=0;e<t.length;e++)t[e].dirty=!0},list:function(){return t},listRedo:function(){return o},depth:function(){return t.length},push:function(e){t.push(e),o=[],RED.menu.setDisabled("menu-item-edit-undo",!1),RED.menu.setDisabled("menu-item-edit-redo",!0)},pop:function(){var e=O(t.pop());e&&o.push(e),RED.menu.setDisabled("menu-item-edit-undo",0===t.length),RED.menu.setDisabled("menu-item-edit-redo",0===o.length)},peek:function(){return t[t.length-1]},replace:function(e){0===t.length?RED.history.push(e):t[t.length-1]=e},clear:function(){t=[],o=[],RED.menu.setDisabled("menu-item-edit-undo",!0),RED.menu.setDisabled("menu-item-edit-redo",!0)},redo:function(){var e=o.pop();e&&(e=O(e))&&t.push(e),RED.menu.setDisabled("menu-item-edit-undo",0===t.length),RED.menu.setDisabled("menu-item-edit-redo",0===o.length)}}}(),RED.validators={number:function(o,e){return function(e,t){if(o&&(""===e||void 0===e))return!0;if(""!==e){if(/^NaN$|^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$|^[+-]?(0b|0B)[01]+$|^[+-]?(0o|0O)[0-7]+$|^[+-]?(0x|0X)[0-9a-fA-F]+$/.test(e))return!0;if(/^\${[^}]+}$/.test(e))return!0}return!isNaN(e)||(t&&t.label?RED._("validator.errors.invalid-num-prop",{prop:t.label}):!!t&&RED._("validator.errors.invalid-num"))}},regex:function(o,e){return function(e,t){return!!o.test(e)||(t&&t.label?RED._("validator.errors.invalid-regex-prop",{prop:t.label}):!!t&&RED._("validator.errors.invalid-regexp"))}},typedInput:function(e,t,o){let n=e;return"string"==typeof e&&((n={}).typeField=e,n.isConfig=t,n.allowBlank=!1),function(e,t){let o=n.type;return!o&&n.typeField&&(o=$("#node-"+(n.isConfig?"config-":"")+"input-"+n.typeField).val()||this[n.typeField]),!(!n.allowBlank||""!==e)||!(!n.allowUndefined||void 0!==e)||!(!0!==(e=RED.utils.validateTypedProperty(e,o,t))&&!t)&&e}}},RED.utils=function(){window._marked=window.marked,window.marked=function(e){return console.warn("Use of 'marked()' is deprecated. Use RED.utils.renderMarkdown() instead"),t(e)};var e=new window._marked.Renderer;e.list=function(e,t,o){return/dl.*?class.*?message-properties.*/.test(e)&&t?'<ol class="node-ports">'+e+"</ol>":t?"<ol>"+e+"</ol>":"<ul>"+e+"</ul>"};function t(e){e=_marked.parse(e);return DOMPurify.sanitize(e,{SAFE_FOR_JQUERY:!0})}function U(e){return e.replace(/\r?\n/g,"&crarr;").replace(/\t/g,"&rarr;")}function V(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function J(e){var t;return Array.isArray(e)?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-meta"></span>').text("array["+e.length+"]"):null===e?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-null">null</span>'):"object"==typeof e?e.hasOwnProperty("type")&&"undefined"===e.type?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-null">undefined</span>'):e.hasOwnProperty("type")&&"Buffer"===e.type&&e.hasOwnProperty("data")?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-meta"></span>').text("buffer["+e.length+"]"):e.hasOwnProperty("type")&&"array"===e.type&&e.hasOwnProperty("data")?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-meta"></span>').text("array["+e.length+"]"):e.hasOwnProperty("type")&&"set"===e.type&&e.hasOwnProperty("data")?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-meta"></span>').text("set["+e.length+"]"):e.hasOwnProperty("type")&&"map"===e.type&&e.hasOwnProperty("data")?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-meta"></span>').text("map"):e.hasOwnProperty("type")&&"function"===e.type?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-meta"></span>').text("function"):!e.hasOwnProperty("type")||"number"!==e.type&&"bigint"!==e.type?e.hasOwnProperty("type")&&"regexp"===e.type?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-string"></span>').text(e.data):$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-meta">object</span>'):$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-number"></span>').text(e.data):"string"==typeof e?(t=30<e.length?V(e.substring(0,30))+"&hellip;":V(e),$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-string"></span>').html('"'+U(t)+'"')):("number"==typeof e?$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-number"></span>'):$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-other"></span>')).text(""+e)}function q(o,n,i,e){o.addClass("red-ui-debug-msg-expandable"),o.prop("toggle",function(){return function(e){var t=o.parent();if(t.hasClass("collapsed")){if(e)return n&&!t.hasClass("built")&&(n(),t.addClass("built")),t.removeClass("collapsed"),!0}else if(!e)return t.addClass("collapsed"),!0;return!1}}),o.on("click",function(e){var t=!$(this).parent().hasClass("collapsed");$(this).prop("toggle")(!t)&&i&&i(!t),e.preventDefault()}),e&&o.trigger("click")}e.code=function(e,t){return"mermaid"===t?`<pre class='mermaid'>${e}</pre>`:"<pre><code>"+e+"</code></pre>"},window._marked.setOptions({renderer:e,gfm:!0,tables:!0,breaks:!1,pedantic:!1,smartLists:!0,smartypants:!1}),window._marked.use({extensions:[{name:"descriptionList",level:"block",start(e){return e?(e=e.match(/:[^:\n]/g))&&e.index:null},tokenizer(e,t){return e?(e=/^(?::[^:\n]+:[^:\n]*(?:\n|$))+/.exec(e))?{type:"descriptionList",raw:e[0],text:e[0].trim(),tokens:this.lexer.inlineTokens(e[0].trim())}:void 0:null},renderer(e){return`<dl class="message-properties">${this.parser.parseInline(e.tokens)}
</dl>`}},{name:"description",level:"inline",start(e){return e?(e=e.match(/:/g))&&e.index:null},tokenizer(e,t){return e?(e=/^:([^:\n]+)\(([^:\n]+)\).*?:([^:\n]*)(?:\n|$)/.exec(e))?{type:"description",raw:e[0],dt:this.lexer.inlineTokens(e[1].trim()),types:this.lexer.inlineTokens(e[2].trim()),dd:this.lexer.inlineTokens(e[3].trim())}:void 0:null},renderer(e){return`
<dt>${this.parser.parseInline(e.dt)}<span class="property-type">${this.parser.parseInline(e.types)}</span></dt><dd>${this.parser.parseInline(e.dd)}</dd>`},childTokens:["dt","dd"],walkTokens(e){"strong"===e.type&&(e.text+=" walked")}}]});var W={},r={};function H(e,t,{minRange:o,maxRange:n,expandLeafNodes:i}){if(t&&0<t.length){if(""===e&&void 0===o)return!0;for(var a=0;a<t.length;a++){var s=t[a];if(i&&s===e)return!0;if(0===s.indexOf(e)&&("."===s[e.length]||"["===s[e.length])){if(void 0===o||"["!==s[e.length])return!0;var s=s.substring(e.length),s=/\[(\d+)\]/.exec(s);if(s)return o<=(s=parseInt(s[1]))&&s<=n}}}return!1}function K(e,t,o,n,i,a){var s=r[o]&&r[o][n]&&r[o][n].number||a||"dec";i?(s="dec"===s?13===t.toString().length&&t<=2147483647e3?"dateMS":10===t.toString().length&&t<=2147483647?"dateS":"hex":"dateMS"===s||"dateS"==s?13===t.toString().length&&t<=2147483647e3?"dateML":10===t.toString().length&&t<=2147483647?"dateL":"hex":"dateML"===s||"dateL"==s?"hex":"dec",r[o]=r[o]||{},r[o][n]=r[o][n]||{},r[o][n].number=s):void 0!==a&&(r[o]=r[o]||{},r[o][n]=r[o][n]||{},r[o][n].number=s),"dec"===s?e.text(""+t):"dateMS"===s?e.text(new Date(t).toISOString()):"dateS"===s?e.text(new Date(1e3*t).toISOString()):"dateML"===s?(i=new Date(t),e.text(i.toLocaleString()+" [UTC"+(i.getTimezoneOffset()/-60<=0?"":"+")+i.getTimezoneOffset()/-60+"]")):"dateL"===s?(a=new Date(1e3*t),e.text(a.toLocaleString()+" [UTC"+(a.getTimezoneOffset()/-60<=0?"":"+")+a.getTimezoneOffset()/-60+"]")):"hex"===s&&e.text("0x"+t.toString(16))}function X(e,t,o,n,i){var a=r[o]&&r[o][n]&&r[o][n].buffer||"raw";i&&(a="raw"===a?"string":"raw",r[o]=r[o]||{},r[o][n]=r[o][n]||{},r[o][n].buffer=a),"raw"===a?(t.text("raw"),e.removeClass("red-ui-debug-msg-buffer-string").addClass("red-ui-debug-msg-buffer-raw")):"string"===a&&(t.text("string"),e.addClass("red-ui-debug-msg-buffer-string").removeClass("red-ui-debug-msg-buffer-raw"))}function g(e,t){t=new Error(t);return t.code=e,t}function Y(e,t){var o=e.length;if(0===o)throw g("INVALID_EXPR","Invalid property expression: zero-length");for(var n,i,a=[],s=0,r=!1,d=!1,l=0;l<o;l++){var c=e[l];if(r){if(c===n){if(l-s==0)throw g("INVALID_EXPR","Invalid property expression: zero-length string at position "+s);if(a.push(e.substring(s,l)),d&&!/\]/.test(e[l+1]))throw g("INVALID_EXPR","Invalid property expression: unexpected array expression at position "+s);if(!d&&l+1!==o&&!/[\[\.]/.test(e[l+1]))throw g("INVALID_EXPR","Invalid property expression: unexpected "+e[l+1]+" expression at position "+(l+1));s=l+1,r=!1}}else if("'"===c||'"'===c){if(l!=s)throw g("INVALID_EXPR","Invalid property expression: unexpected "+c+" at position "+l);r=!0,n=c,s=l+1}else if("."===c){if(0===l)throw g("INVALID_EXPR","Invalid property expression: unexpected . at position 0");if(s!=l&&(i=e.substring(s,l),/^\d+$/.test(i)?a.push(parseInt(i)):a.push(i)),l===o-1)throw g("INVALID_EXPR","Invalid property expression: unterminated expression");if(!/[a-z0-9\$\_]/i.test(e[l+1]))throw g("INVALID_EXPR","Invalid property expression: unexpected "+e[l+1]+" at position "+(l+1));s=l+1}else if("["===c){if(0===l)throw g("INVALID_EXPR","Invalid property expression: unexpected "+c+" at position "+l);if(s!=l&&a.push(e.substring(s,l)),l===o-1)throw g("INVALID_EXPR","Invalid property expression: unterminated expression");if(/^msg[.\[]/.test(e.substring(l+1))){for(var u,p=1,f=!1,h=l+1;h<o;h++)if(/["']/.test(e[h])&&(f?e[h]===u&&(f=!1):(f=!0,u=e[h])),"["===e[h]?p++:"]"===e[h]&&p--,0===p)try{a.push(t?Z(t,e.substring(l+1,h)):Y(e.substring(l+1,h),t)),d=!1,s=(l=h)+1;break}catch(e){throw g("INVALID_EXPR","Invalid expression started at position "+(l+1))}if(0<p)throw g("INVALID_EXPR","Invalid property expression: unmatched '[' at position "+l)}else{if(!/["'\d]/.test(e[l+1]))throw g("INVALID_EXPR","Invalid property expression: unexpected "+e[l+1]+" at position "+(l+1));s=l+1,d=!0}}else if("]"===c){if(!d)throw g("INVALID_EXPR","Invalid property expression: unexpected "+c+" at position "+l);if(s!=l){if(i=e.substring(s,l),!/^\d+$/.test(i))throw g("INVALID_EXPR","Invalid property expression: unexpected array expression at position "+s);a.push(parseInt(i))}s=l+1,d=!1}else if(" "===c)throw g("INVALID_EXPR","Invalid property expression: unexpected ' ' at position "+l)}if(d||r)throw new g("INVALID_EXPR","Invalid property expression: unterminated expression");return s<o&&a.push(e.substring(s)),a}function Z(e,t){var o=null,t="string"==typeof t?Y(t=0===t.indexOf("msg.")?t.substring(4):t):t;return t.reduce(function(e,t){return o=void 0===(o=void 0!==e[t]?e[t]:void 0)&&e.hasOwnProperty("type")&&e.hasOwnProperty("data")&&e.hasOwnProperty("length")?void 0!==e.data[t]?e.data[t]:void 0:o},e),o}function a(e){var t,o={module:"",file:""};return e&&(0===e.indexOf(RED.settings.apiRootUrl+"icons/")&&(e=e.substring((RED.settings.apiRootUrl+"icons/").length)),(t=/^((?:@[^/]+\/)?[^/]+)\/(.*)$/.exec(e))?(o.module=t[1],o.file=t[2]):o.file=e),o}function n(t,e){var o;if(t=t||{},e&&"subflow"===e.type)o="node-red/subflow.svg";else if("function"==typeof t.icon)try{o=t.icon.call(e)}catch(e){console.log("Definition error: "+t.type+".icon",e),o="arrow-in.svg"}else o=t.icon;e=a(o);return e.module||(t.set?e.module=t.set.module:e.module="node-red"),e}function i(e){var t=RED.nodes.getIconSets()[e.module];return!(!t||-1===t.indexOf(e.file))}var d={};function l(e){if(/^#[a-f0-9]{6}$/i.test(e))t=parseInt(e.substring(1,3),16),o=parseInt(e.substring(3,5),16),n=parseInt(e.substring(5,7),16);else{if(!/^#[a-f0-9]{3}$/i.test(e))return e;t=parseInt(e.substring(1,2)+e.substring(1,2),16),o=parseInt(e.substring(2,3)+e.substring(2,3),16),n=parseInt(e.substring(3,4)+e.substring(3,4),16)}var t,o,n,e=(((t=Math.max(0,t-50))<<16)+((o=Math.max(0,o-50))<<8)+(n=Math.max(0,n-50))).toString(16);return"#"+"000000".slice(0,6-e.length)+e}function s(e,t,o){for(var n=0;n<o.length;n++){var i=o[n];if(i.module.test(e))return i}}return{createObjectElement:function A(o,r){var n=(r=r||{}).key,i=r.typeHint,M=r.hideKey,d=r.path,l=r.sourceId,c=r.rootPath,u=r.expandPaths;const p=r.enablePinning,f=r.expandLeafNodes;var e,h,g,m,t,a,s,z,v,B,G,b=r.ontoggle,y=r.exposeApi,w=r.tools,E={},D=(void 0!==d&&void 0!==c&&(m=d.substring(c.length+("."===d[c.length]?1:0))),$('<span class="red-ui-debug-msg-element"></span>'));if(D.collapse=function(){D.find(".red-ui-debug-msg-expandable").parent().addClass("collapsed")},h=$('<span class="red-ui-debug-msg-row"></span>').appendTo(D),l&&(t=h,a=l,s=d,z=o,v=m,x=p,W.hasOwnProperty(a)||(W[a]={}),k=$('<span class="red-ui-debug-msg-tools"></span>').appendTo(t),_=$('<span class="red-ui-debug-msg-tools-copy button-group"></span>').appendTo(k),s&&(B=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-terminal"></i></button>').appendTo(_).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(s,B,"clipboard.copyMessagePath")}),RED.popover.tooltip(B,RED._("node-red:debug.sidebar.copyPath"))),G=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-clipboard"></i></button>').appendTo(_).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(z,G,"clipboard.copyMessageValue")}),RED.popover.tooltip(G,RED._("node-red:debug.sidebar.copyPayload")),x&&void 0!==v&&""!==v&&(_=W[a].hasOwnProperty(v),x=$('<button class="red-ui-button red-ui-button-small red-ui-debug-msg-tools-pin"><i class="fa fa-map-pin"></i></button>').appendTo(k).on("click",function(e){e.preventDefault(),e.stopPropagation(),W[a].hasOwnProperty(v)?(delete W[a][v],$(this).removeClass("selected"),t.removeClass("red-ui-debug-msg-row-pinned")):(e="$"+("["===v[0]?"":".")+v,W[a][v]=Y(e),$(this).addClass("selected"),t.addClass("red-ui-debug-msg-row-pinned"))}).toggleClass("selected",_),t.toggleClass("red-ui-debug-msg-row-pinned",_),RED.popover.tooltip(x,RED._("node-red:debug.sidebar.pinPath"))),w)&&(_="function"==typeof(_=w)?_(s,z):_)&&(_.addClass("red-ui-debug-msg-tools-other"),_.appendTo(k)),n)M||($('<span class="red-ui-debug-msg-object-key"></span>').text(n).appendTo(h),$("<span>: </span>").appendTo(h));else if(D.addClass("red-ui-debug-msg-top-level"),l&&!u){var R=W[l],u=[];if(R){for(var F in R)if(R.hasOwnProperty(F))try{void 0!==Z({$:o},R[F])&&u.push(F)}catch(e){}u.sort()}D.clearPinned=function(){D.find(".red-ui-debug-msg-row-pinned").removeClass("red-ui-debug-msg-row-pinned"),W[l]={}}}var x=$('<span class="red-ui-debug-msg-object-value"></span>').appendTo(h),w=Array.isArray(o),_=!1;if(o&&"object"==typeof o&&o.hasOwnProperty("type")&&o.hasOwnProperty("data")&&(o.__enc__&&"set"===o.type||o.__enc__&&"array"===o.type||"Buffer"===o.type)&&(_=w=!0),null==o)$('<span class="red-ui-debug-msg-type-null">'+o+"</span>").appendTo(x);else if(o.__enc__&&"undefined"===o.type)$('<span class="red-ui-debug-msg-type-null">undefined</span>').appendTo(x);else if(!o.__enc__||"number"!==o.type&&"bigint"!==o.type)if("regexp"===i||o.__enc__&&"regexp"===o.type)e=$('<span class="red-ui-debug-msg-type-string red-ui-debug-msg-object-header"></span>').text("string"==typeof o?o:o.data).appendTo(x);else if("function"===i||o.__enc__&&"function"===o.type)e=$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-header"></span>').text("function").appendTo(x);else if("internal"===i||o.__enc__&&"internal"===o.type)e=$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-header"></span>').text("[internal]").appendTo(x);else if("string"==typeof o){/[\t\n\r]/.test(o)&&(D.addClass("collapsed"),$('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').prependTo(h),q(h,function(){$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-type-header"></span>').text(i||"string").appendTo(h);var e=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(D);$('<pre class="red-ui-debug-msg-type-string"></pre>').text(o).appendTo(e)},function(e){b&&b(d,e)},H(m,u,{expandLeafNodes:f}))),e=$('<span class="red-ui-debug-msg-type-string red-ui-debug-msg-object-header"></span>').html('"'+U(V(o))+'"').appendTo(x),/^#[0-9a-f]{6}$/i.test(o)&&$('<span class="red-ui-debug-msg-type-string-swatch"></span>').css("backgroundColor",o).appendTo(e);let t=RED.nodes.node(o)??RED.nodes.workspace(o);t&&r.nodeSelector&&"function"==typeof r.nodeSelector&&e.css("cursor","pointer").on("click",function(e){e.preventDefault(),r.nodeSelector(t.id)})}else if("number"==typeof o)e=$('<span class="red-ui-debug-msg-type-number"></span>').appendTo(x),Number.isInteger(o)&&0<=o&&(e.addClass("red-ui-debug-msg-type-number-toggle"),e.on("click",function(e){e.preventDefault(),K($(this),o,l,d,!0)})),K(e,o,l,d,!1,"hex"===i?"hex":void 0);else if(w){D.addClass("collapsed");var k,T,C=o.length,j=(i&&(k=/\[(\d+)\]/.exec(i))&&(C=parseInt(k[1])),o),L="array",S=(_?(j=o.data,void 0===C&&(C=j.length),j.__enc__&&(j=j.data),L=o.type.toLowerCase()):/buffer/.test(i)&&(L="buffer"),j.length);if(0<C&&($('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').prependTo(h),T=$('<div class="red-ui-debug-msg-array-rows"></div>').appendTo(D),D.addClass("red-ui-debug-msg-buffer-raw")),n)g=$('<span class="red-ui-debug-msg-type-meta"></span>').text(i||L+"["+C+"]").appendTo(x);else{g=$('<span class="red-ui-debug-msg-object-header"></span>').appendTo(x),$("<span>[ </span>").appendTo(g);for(var O=Math.min(C,10),N=0;N<O;N++)J(j[N]).appendTo(g),N<O-1&&$("<span>, </span>").appendTo(g);O<C&&$("<span> &hellip;</span>").appendTo(g),0===O&&$('<span class="red-ui-debug-msg-type-meta">empty</span>').appendTo(g),$("<span> ]</span>").appendTo(g)}0<C&&q(h,function(){if(n||(g=$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-type-header"></span>').text(i||L+"["+C+"]").appendTo(h)),"buffer"===L){var e=$('<div class="red-ui-debug-msg-string-rows"></div>').appendTo(D),e=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(e),t="";try{t=String.fromCharCode.apply(null,new Uint16Array(j))}catch(e){console.log(e)}$('<pre class="red-ui-debug-msg-type-string"></pre>').text(t).appendTo(e),t=$('<span class="red-ui-debug-msg-buffer-opts"></span>').appendTo(g),e=$('<a class="red-ui-button red-ui-button-small" href="#"></a>').text("raw").appendTo(t).on("click",function(e){e.preventDefault(),e.stopPropagation(),X(D,$(this),l,d,!0)}),X(D,e,l,d,!1)}if(S<=10)for(N=0;N<S;N++)s=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(T),E[d+"["+N+"]"]=A(j[N],{key:""+N,typeHint:"buffer"===L&&"hex",hideKey:!1,path:d+"["+N+"]",sourceId:l,rootPath:c,expandPaths:u,expandLeafNodes:f,ontoggle:b,exposeApi:y,nodeSelector:r.nodeSelector,enablePinning:p}).appendTo(s);else{for(N=0;N<S;N+=10){var a=N,s=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(T);h=$("<span></span>").appendTo(s),$('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').appendTo(h),q(h,function(){var o=a,n=Math.min(S-1,a+9),i=s;return function(){for(var e=o;e<=n;e++){var t=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(i);E[d+"["+e+"]"]=A(j[e],{key:""+e,typeHint:"buffer"===L&&"hex",hideKey:!1,path:d+"["+e+"]",sourceId:l,rootPath:c,expandPaths:u,expandLeafNodes:f,ontoggle:b,exposeApi:y,nodeSelector:r.nodeSelector,enablePinning:p}).appendTo(t)}}}(),function(){var t=void 0+"["+N+"]";return function(e){b&&b(t,e)}}(),H(m,u,{minRange:a,maxRange:Math.min(S-1,a+9),expandLeafNodes:f})),$('<span class="red-ui-debug-msg-object-key"></span>').html("["+a+" &hellip; "+Math.min(S-1,a+9)+"]").appendTo(h)}S<C&&$('<div class="red-ui-debug-msg-object-entry collapsed"><span class="red-ui-debug-msg-object-key">['+S+" &hellip; "+C+"]</span></div>").appendTo(T)}},function(e){b&&b(d,e)},H(m,u,{expandLeafNodes:f}))}else if("object"==typeof o){D.addClass("collapsed");var L="object",I=((j=o).__enc__&&(j=j.data,L=o.type.toLowerCase()),Object.keys(j));if((n||0<I.length)&&($('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').prependTo(h),q(h,function(){for(n||$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-type-header"></span>').text(L).appendTo(h),N=0;N<I.length;N++){var e=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(D),t=d;void 0!==t&&(/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(I[N])?t+=(0<t.length?".":"")+I[N]:t+='["'+I[N].replace(/"/,'\\"')+'"]'),E[t]=A(j[I[N]],{key:I[N],typeHint:!1,hideKey:!1,path:t,sourceId:l,rootPath:c,expandPaths:u,expandLeafNodes:f,ontoggle:b,exposeApi:y,nodeSelector:r.nodeSelector,enablePinning:p}).appendTo(e)}0===I.length&&$('<div class="red-ui-debug-msg-object-entry red-ui-debug-msg-type-meta collapsed"></div>').text("empty").appendTo(D)},function(e){b&&b(d,e)},H(m,u,{expandLeafNodes:f}))),n)$('<span class="red-ui-debug-msg-type-meta"></span>').text(L).appendTo(x);else{g=$('<span class="red-ui-debug-msg-object-header"></span>').appendTo(x),$("<span>{ </span>").appendTo(g);var P=Math.min(I.length,5);for(N=0;N<P;N++)$('<span class="red-ui-debug-msg-object-key"></span>').text(I[N]).appendTo(g),$("<span>: </span>").appendTo(g),J(j[I[N]]).appendTo(g),N<P-1&&$("<span>, </span>").appendTo(g);I.length>P&&$("<span> &hellip;</span>").appendTo(g),0===P&&$('<span class="red-ui-debug-msg-type-meta">empty</span>').appendTo(g),$("<span> }</span>").appendTo(g)}}else $('<span class="red-ui-debug-msg-type-other"></span>').text(""+o).appendTo(x);else e=$('<span class="red-ui-debug-msg-type-number red-ui-debug-msg-object-header"></span>').text(o.data).appendTo(x);return y&&D.prop("expand",function(){return function(e,t){if(d===e)h.prop("toggle")&&h.prop("toggle")(t);else if(E[e]&&E[e].prop("expand"))E[e].prop("expand")(e,t);else for(var o in E)if(E.hasOwnProperty(o)&&0===e.indexOf(o)){E[o].prop("expand")&&E[o].prop("expand")(e,t);break}}}),D},getMessageProperty:Z,setMessageProperty:function(e,t,o,n){void 0===n&&(n=void 0!==o);for(var i,a=Y(t=0===t.indexOf("msg.")?t.substring(4):t),s=a.length,r=e,d=0;d<s-1;d++)if("string"==typeof(i=a[d])||"number"==typeof i&&!Array.isArray(r)){if(!r.hasOwnProperty(i)){if(!n)return null;"string"==typeof a[d+1]?r[i]={}:r[i]=[]}r=r[i]}else if("number"==typeof i){if(void 0===r[i]){if(!n)return null;"string"==typeof a[d+1]?r[i]={}:r[i]=[]}r=r[i]}i=a[s-1],void 0===o?"number"==typeof i&&Array.isArray(r)?r.splice(i,1):delete r[i]:r[i]=o},normalisePropertyExpression:Y,validatePropertyExpression:function(e,t){try{Y(e);return!0}catch(e){return t?t.label?t.label+": "+e.message:e.message:!1}},separateIconPath:a,getDefaultNodeIcon:n,getNodeIcon:function(e,t){if(e=e||{},t&&"_selection_"===t.type)return"font-awesome/fa-object-ungroup";if(t&&"group"===t.type)return"font-awesome/fa-object-group";if(t&&"junction"===t.type||"junction"===e.type)return"font-awesome/fa-circle-o";if("config"===e.category)return RED.settings.apiRootUrl+"icons/node-red/cog.svg";if(t&&/^_action_:/.test(t.type)||/^_action_:/.test(e.type))return"font-awesome/fa-cogs";if(t&&"tab"===t.type)return"red-ui-icons/red-ui-icons-flow";if(t&&"unknown"===t.type)return RED.settings.apiRootUrl+"icons/node-red/alert.svg";if(t&&t.icon){if(i(o=a(t.icon)))return"font-awesome"===o.module?t.icon:RED.settings.apiRootUrl+"icons/"+t.icon;if("font-awesome"!==o.module&&/.png$/i.test(o.file)&&(o.file=o.file.replace(/.png$/,".svg"),i(o)))return RED.settings.apiRootUrl+"icons/"+t.icon.replace(/.png$/,".svg")}var o;if(i(o=n(e,t)))return"font-awesome"===o.module?o.module+"/"+o.file:RED.settings.apiRootUrl+"icons/"+o.module+"/"+o.file;if(/.png$/i.test(o.file)){t=o.file;if(o.file=o.file.replace(/.png$/,".svg"),i(o))return RED.settings.apiRootUrl+"icons/"+o.module+"/"+o.file;o.file=t}return o.module="node-red",i(o)||/.png$/i.test(o.file)&&(o.file=o.file.replace(/.png$/,".svg"),i(o))?RED.settings.apiRootUrl+"icons/"+o.module+"/"+o.file:"subflows"===e.category?RED.settings.apiRootUrl+"icons/node-red/subflow.svg":RED.settings.apiRootUrl+"icons/node-red/arrow-in.svg"},getNodeLabel:function(t,o){var n;if(o=o||"","tab"===t.type)n=t.label||o;else if("group"===t.type)n=t.name||o;else if("junction"===t.type)n="junction";else{n=t._def.label;try{n=("function"==typeof n?n.call(t):n)||o}catch(e){console.log("Definition error: "+t.type+".label",e),n=o}}return RED.text.bidi.enforceTextDirectionWithUCC(n)},getNodeColor:function(e,t){var o=(t=t||{}).color,n=RED.settings.theme("palette.theme")||[];if(0<n.length){if(!d.hasOwnProperty(e)){d[e]=t.color;for(var i=n.length,a=0;a<i;a++){var s=n[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)))){d[e]=s.color||t.color;break}}}o=d[e]}return o||"#ddd"},getPaletteLabel:function(t,e){var o=t;if(void 0!==e.paletteLabel)try{o=("function"==typeof e.paletteLabel?e.paletteLabel.call(e):e.paletteLabel)||""}catch(e){console.log("Definition error: "+t+".paletteLabel",e)}return o},clearNodeColorCache:function(){d={}},addSpinnerOverlay:function(e,t){return e=$('<div class="red-ui-component-spinner "><img src="red/images/spin.svg"/></div>').appendTo(e),t&&e.addClass("red-ui-component-spinner-contain"),e},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|set|map)/.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 o=e;e=[];for(var n=0;n<o.length;n+=2)e.push(parseInt(o.substr(n,2),16))}return e},parseContextKey:function(e,t){var o={},n=/^#:\((\S+?)\)::(.*)$/.exec(e);return n?(o.store=n[1],o.key=n[2]):(o.key=e,t?o.store=t:RED.settings.context&&(o.store=RED.settings.context.default)),o},createIconElement:function(e,t,o){var n=t.find(".red-ui-palette-icon");0!==n.length&&n.remove();0!==(n=t.find("i")).length&&n.remove();var i=a(e);if("font-awesome"===i.module){if(RED.nodes.fontAwesome.getIconUnicode(i.file))return void(n=$("<i/>").appendTo(t)).addClass("red-ui-palette-icon-fa fa fa-fw "+(o?"fa-lg ":"")+i.file);e=RED.settings.apiRootUrl+"icons/node-red/arrow-in.svg"}else if("red-ui-icons"===i.module)return void $("<i/>").appendTo(t).addClass("red-ui-palette-icon red-ui-icons "+i.file);$("<div/>",{class:"red-ui-palette-icon"}).appendTo(t).css("backgroundImage","url("+e+")")},sanitize:V,renderMarkdown:t,createNodeIcon:function(e,t){var o,n=$('<span class="red-ui-node-icon-container">'),i=e._def,a=$("<div>",{class:"red-ui-node-icon"}),s=("_selection_"===e.type?a.addClass("red-ui-palette-icon-selection"):"group"===e.type?a.addClass("red-ui-palette-icon-group"):"junction"===e.type?a.addClass("red-ui-palette-icon-junction"):"tab"===e.type?a.addClass("red-ui-palette-icon-flow"):(s=RED.utils.getNodeColor(e.type,i),a.css("backgroundColor",s),(o=l(s))!==s&&a.css("border-color",o)),RED.utils.getNodeIcon(i,e));return RED.utils.createIconElement(s,a,!0),a.appendTo(n),t&&(o=RED.utils.getNodeLabel(e,e.name||e.type+": "+e.id),i=$("<div>",{class:"red-ui-node-label"}).appendTo(n),o?i.text(o):i.html("&nbsp;")),n},getDarkerColor:l,parseModuleList:function(e){return(e=e||["*"]).map(function(e){var e=/^(.+?)(?:@(.*))?$/.exec(e),t=-1===(t=e[1].indexOf("*"))?1/0:t;return{module:new RegExp("^"+e[1].replace(/\*/g,".*")+"$"),version:e[2],wildcardPos:t}})},checkModuleAllowed:function(e,t,o,n){return!o&&!n||0===o.length&&0===n.length||(o=s(e,0,o),e=s(e,0,n),!(!o||e))||!(!o&&e||(o||e)&&!(o.wildcardPos!==e.wildcardPos?o.wildcardPos>e.wildcardPos:o.module.toString().length>e.module.toString().length))},getBrowserInfo:function(){var e={};try{var t=navigator.userAgent;e.ua=t,e.browser=/Edge\/\d+/.test(t)?"ed":/MSIE 9/.test(t)?"ie9":/MSIE 10/.test(t)?"ie10":/MSIE 11/.test(t)?"ie11":/MSIE\s\d/.test(t)?"ie?":/rv\:11/.test(t)?"ie11":/Firefox\W\d/.test(t)?"ff":/Chrom(e|ium)\W\d|CriOS\W\d/.test(t)?"gc":/\bSafari\W\d/.test(t)?"sa":/\bOpera\W\d/.test(t)||/\bOPR\W\d/i.test(t)?"op":"undefined"!=typeof MSPointerEvent?"ie?":"",e.os=/Windows NT 10/.test(t)?"win10":/Windows NT 6\.0/.test(t)?"winvista":/Windows NT 6\.1/.test(t)?"win7":/Windows NT 6\.\d/.test(t)?"win8":/Windows NT 5\.1/.test(t)?"winxp":/Windows NT [1-5]\./.test(t)?"winnt":/Mac/.test(t)?"mac":/Linux/.test(t)?"linux":/X11/.test(t)?"nix":"",e.touch="ontouchstart"in document.documentElement,e.mobile=/IEMobile|Windows Phone|Lumia/i.test(t)?"w":/iPhone|iP[oa]d/.test(t)?"i":/Android/.test(t)?"a":/BlackBerry|PlayBook|BB10/.test(t)?"b":/Mobile Safari/.test(t)?"s":/webOS|Mobile|Tablet|Opera Mini|\bCrMo\/|Opera Mobi/i.test(t)?1:0,e.tablet=/Tablet|iPad/i.test(t),e.ie=/MSIE \d|Trident.*rv:/.test(navigator.userAgent),e.android=/android/i.test(navigator.userAgent)}catch(e){}return e},validateTypedProperty:function(e,t,o){if(e&&/^\${[^}]+}$/.test(e))return!0;let n;if("json"===t)try{JSON.parse(e)}catch(e){n=RED._("validator.errors.invalid-json",{error:e.message})}else if("msg"===t||"flow"===t||"global"===t){var i=RED.utils.validatePropertyExpression(e,o?{}:null);!0!==i&&(n=o?i:RED._("validator.errors.invalid-prop"))}else if("num"===t)/^NaN$|^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$|^[+-]?(0b|0B)[01]+$|^[+-]?(0o|0O)[0-7]+$|^[+-]?(0x|0X)[0-9a-fA-F]+$/.test(e)||(n=RED._("validator.errors.invalid-num"));else if("jsonata"===t)try{jsonata(e)}catch(e){n=RED._("validator.errors.invalid-expr",{error:e.message})}return!n||(o&&o.label?o.label+": "+n:n)}}}(),function(r){r.widget("nodered.editableList",{_create:function(){var n,i,a=this,e=(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),this.options.buttons||[]),t=(!1!==this.options.addButton&&("string"==typeof this.options.addButton?t=this.options.addButton:o=RED&&RED._?(t=RED._("editableList.add"),RED._("editableList.addTitle")):(t="add","add new item"),e.unshift({label:t,icon:"fa fa-plus",click:function(e){a.addItem({})},title:o})),e.forEach(function(t){var e=r('<button type="button" class="red-ui-button red-ui-button-small red-ui-editableList-addButton" style="margin-top: 4px; margin-right: 5px;"></button>').appendTo(a.topContainer).on("click",function(e){e.preventDefault(),void 0!==t.click&&t.click(e)});t.id&&e.attr("id",t.id),t.title&&e.attr("title",t.title),t.icon&&e.append(r("<i></i>").attr("class",t.icon)),t.label&&e.append(r("<span></span>").text(" "+t.label))}),"absolute"===this.element.css("position")&&(["top","left","bottom","right"].forEach(function(e){var t=a.element.css(e);"auto"!==t&&""!==t&&(a.topContainer.css(e,t),a.uiContainer.css(e,"0"),"top"===e&&a.options.header&&a.uiContainer.css(e,"20px"),a.element.css(e,"auto"))}),this.element.css("position","static"),this.topContainer.css("position","absolute"),this.uiContainer.css("position","absolute")),(this.options.header?this.borderContainer: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),this.element.css("minHeight")),o=("0px"!==t&&(this.uiContainer.css("minHeight",t),this.element.css("minHeight",0)),this.element.css("maxHeight")),e=("0px"!==o&&(this.uiContainer.css("maxHeight",o),this.element.css("maxHeight",null)),"auto"!==this.options.height&&(this.uiContainer.css("overflow-y","auto"),isNaN(this.options.height)||(this.uiHeight=this.options.height)),this.element.height("auto"),this.element.attr("style"));null!==(t=/width\s*:\s*(\d+%)/i.exec(e))&&(this.element.width("100%"),this.uiContainer.width(t[1])),this.options.sortable&&(i=n=!1,o={axis:"y",update:function(e,t){var e=r(e.target),t=t.item,o=t.parent();!e.is(o)&&t.hasClass("red-ui-editableList-item-constrained")&&(i=!0),n||i||a.options.sortItems&&a.options.sortItems(a.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){n=!1,t.placeholder.height(t.item.height()-4),t.item.css("cursor","grabbing")},stop:function(e,t){t.item.css("cursor","auto")},receive:function(e,t){t.item.hasClass("red-ui-editableList-item-constrained")&&(n=!0,r(t.sender).sortable("cancel"))},over:function(e,t){var e=r(e.target),t=t.item,o=t.parent();!e.is(o)&&t.hasClass("red-ui-editableList-item-constrained")?(i=!0,t.css("cursor","no-drop")):(i=!1,t.css("cursor","grabbing"))}},this.options.connectWith&&(o.connectWith=this.options.connectWith),this.element.sortable(o)),this._resize()},_resize:function(){var t,e=this.topContainer.height(),o=this.uiContainer.height();0!==this.uiHeight&&this.uiContainer.height(this.uiHeight-(e-o)),this.options.resize&&this.options.resize(),this.options.resizeItem&&(t=this).element.children().each(function(e){t.options.resizeItem(r(this).children(".red-ui-editableList-item-content"),e)})},_destroy:function(){var e;this.topContainer&&(e=this.topContainer,delete this.topContainer,e.remove())},_refreshFilter:function(){var n=this,i=0;return this.activeFilter?(this.items().each(function(e,t){var o=t.data("data");try{n.activeFilter(o)?(t.parent().show(),i++):t.parent().hide()}catch(e){console.log(e),t.parent().show(),i++}}),i):this.element.children().show()},_refreshSort:function(){var e,o;this.activeSort&&(e=this.element.children(),o=this,e.sort(function(e,t){return o.activeSort(r(e).children(".red-ui-editableList-item-content").data("data"),r(t).children(".red-ui-editableList-item-content").data("data"))}),r.each(e,function(e,t){o.element.append(t)}))},width:function(e){this.uiWidth=e,this._resize()},height:function(e){this.uiHeight=e,this._resize()},getItemAt:function(e){var t=this.items();if(0<=e&&e<t.length)return r(t[e]).data("data")},indexOf:function(e){for(var t=this.items(),o=0;o<t.length;o++)if(r(t[o]).data("data")===e)return o;return-1},insertItemAt:function(n,e){var t,i=this,a=(n=n||{},r("<li>")),o=r("<div/>").addClass("red-ui-editableList-item-content").appendTo(a),s=(o.data("data",n),!0===this.options.sortable&&(r('<i class="red-ui-editableList-item-handle fa fa-bars"></i>').appendTo(a),a.addClass("red-ui-editableList-item-sortable")),this.options.removable&&(t=r("<a/>",{href:"#",class:"red-ui-editableList-item-remove red-ui-button red-ui-button-small"}).appendTo(a),r("<i/>",{class:"fa fa-remove"}).appendTo(t),a.addClass("red-ui-editableList-item-removable"),t.on("click",function(e){e.preventDefault();var t=o.data("data");a.addClass("red-ui-editableList-item-deleting"),a.fadeOut(300,function(){r(this).remove(),i.options.removeItem&&i.options.removeItem(t)})})),!1);if(this.activeSort&&this.items().each(function(e,t){var o;s||(o=t.data("data"),i.activeSort(n,o)<0&&(a.insertBefore(t.closest("li")),s=!0))}),s||(e<=0?a.prependTo(this.element):e>i.element.children().length-1?a.appendTo(this.element):a.insertBefore(this.element.children().eq(e))),this.options.addItem){e=i.element.children().length-1;if(i.options.addItem(o,e,n),i.activeFilter)try{i.activeFilter(n)||a.hide()}catch(e){}!i.activeSort&&i.scrollOnAdd&&setTimeout(function(){i.uiContainer.scrollTop(i.element.height())},0)}},addItem:function(e){this.insertItemAt(e,this.element.children().length)},addItems:function(e){for(var t=0;t<e.length;t++)this.addItem(e[t])},removeItem:function(t,e){var o=this.element.children().filter(function(e){return t===r(this).children(".red-ui-editableList-item-content").data("data")});e?o.detach():o.remove(),this.options.removeItem&&this.options.removeItem(t)},items:function(){return this.element.children().map(function(e){return r(this).children(".red-ui-editableList-item-content")})},empty:function(){this.element.empty(),this.uiContainer.scrollTop(0)},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 e=this.element.children().filter(function(e){return t===r(this).children(".red-ui-editableList-item-content").data("data")});0<e.length&&this.uiContainer.scrollTop(this.uiContainer.scrollTop()+e.position().top)},getItem:function(e){e=e.children(".red-ui-editableList-item-content");return e.length?e.data("data"):null},cancel:function(){this.element.sortable("cancel")}})}(jQuery),function(u){u.widget("nodered.treeList",{_create:function(){var n=this,i=!0,e=(!1===n.options.autoSelect&&(i=!1),this.element.addClass("red-ui-treeList"),this.element.attr("tabIndex",0),u("<div>",{class:"red-ui-treeList-container"}).appendTo(this.element)),e=(this.element.on("keydown",function(e){var t,o=n._topList.find(".focus").parent().data("data");if(o||40!==e.keyCode&&38!==e.keyCode){switch(e.keyCode){case 32:case 13:if(!n.options.selectable)return;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;e.preventDefault(),e.stopPropagation(),o.checkbox?o.treeList.checkbox.trigger("click"):o.radio?o.treeList.radio.trigger("click"):o.children?o.treeList.container.hasClass("expanded")?o.treeList.collapse():o.treeList.expand():n._trigger("confirm",null,o);break;case 37:e.preventDefault(),e.stopPropagation(),o.children&&o.treeList.container.hasClass("expanded")?o.treeList.collapse():o.parent&&(t=o.parent);break;case 38:e.preventDefault(),e.stopPropagation(),!(t=(t=n._getPreviousSibling(o))&&n._getLastDescendant(t))&&o.parent&&(t=o.parent);break;case 39:e.preventDefault(),e.stopPropagation(),!o.children||o.treeList.container.hasClass("expanded")||o.treeList.expand();break;case 40:if(e.preventDefault(),e.stopPropagation(),o.children&&Array.isArray(o.children)&&0<o.children.length&&o.treeList.container.hasClass("expanded"))t=o.children[0];else for(t=n._getNextSibling(o);!t&&o.parent;)o=o.parent,t=n._getNextSibling(o)}t&&(i?n.select(t):n._topList.find(".focus").removeClass("focus"),t.treeList.label.addClass("focus"))}else n._data[0]&&(i?n.select(n._data[0]):n._topList.find(".focus").removeClass("focus"),n._data[0].treeList.label.addClass("focus"))}),this._data=[],this._items={},this._selected=new Set,this._topList=u('<ol class="red-ui-treeList-list">').css({position:"absolute",top:0,left:0,right:0,bottom:0}).appendTo(e),{addButton:!1,scrollOnAdd:!1,height:"100%",addItem:function(e,t,o){n._addSubtree(n._topList,e,o,0)}});this.options.header&&(e.header=this.options.header),!1!==this.options.rootSortable&&this.options.sortable&&(e.sortable=this.options.sortable,e.connectWith=".red-ui-treeList-sortable",this._topList.addClass("red-ui-treeList-sortable")),this._topList.editableList(e),this.options.data&&this.data(this.options.data)},_getLastDescendant:function(e){return e.children&&e.treeList.container.hasClass("expanded")&&0!==e.children.length?this._getLastDescendant(e.children[e.children.length-1]):e},_getPreviousSibling:function(e){var t=e.parent?e.parent.children:this._data,e=t.indexOf(e);return 0===e?null:t[e-1]},_getNextSibling:function(e){var t=e.parent?e.parent.children:this._data,e=t.indexOf(e);return e===t.length-1?null:t[e+1]},_addChildren:function(e,n,o,i,a){var s=this,r=u('<ol class="red-ui-treeList-list">').appendTo(e).editableList({connectWith:".red-ui-treeList-sortable",sortable:s.options.sortable,addButton:!1,scrollOnAdd:!1,height:"auto",addItem:function(e,t,o){s._addSubtree(r,e,o,i+1)},sortItems:function(e){var t=[],o=[];e.each(function(){var e=u(this).data("data"),e=(t.push(e),s._fixDepths(n,e));e&&o.push(e)}),Array.isArray(n.children)&&(n.children=t),o.forEach(function(e){s._trigger("changeparent",null,e)}),s._trigger("sort",null,n)},filter:n.treeList.childFilter}),d=(s.options.sortable&&r.addClass("red-ui-treeList-sortable"),30),l=0,c=function(){for(var e=l,t=0;t<d;t++){if((l=e+t)===o.length)return void setTimeout(function(){a&&a()},10);o[l].parent=n,r.editableList("addItem",o[l])}++l<o.length&&setTimeout(function(){c()},10)};return c(),r.hide(),r},_fixDepths:function(e,t){var o,n=this,i=null;return t.parent!==e&&(reparented=!0,o=t.parent,t.parent=e,i={item:t,old:o}),t.depth!==e.depth+1&&(t.depth=e.depth+1,o=(t.gutter&&!t.gutter.hasClass("red-ui-treeList-gutter-float")?t.gutter.width()+2:0)+20*t.depth,t.treeList.labelPadding.width(o+"px"),t.element&&u(t.element).css({width:"calc(100% - "+(o+20+(t.icon?20:0))+"px)"}),t.children)&&Array.isArray(t.children)&&t.children.forEach(function(e){n._fixDepths(t,e)}),i},_initItem:function(s,r){var d;s.treeList||(((d=this)._items[s.id]=s).treeList={},s.depth=r,s.treeList.remove=function(e){var t;if(s.treeList.parentList&&s.treeList.parentList.editableList("removeItem",s,e),s.parent&&(e=s.parent.children.indexOf(s),s.parent.children.splice(e,1),d._trigger("sort",null,s.parent)),d._selected.delete(s),delete s.treeList,delete d._items[s.id],0===s.depth){for(var o in d._items)d._items.hasOwnProperty(o)&&(t=d._items[o]).parent&&t.parent.id===s.id&&(delete d._items[o].treeList,delete d._items[o]);d._data=d._data.filter(function(e){return e.id!==s.id})}},s.treeList.insertChildAt=function(e,t,o){(e.parent=s).children.splice(t,0,e);function n(t,o){d._initItem(o,t.depth+1),o.parent=t,o.children&&"function"!=typeof o.children&&o.children.forEach(function(e){n(o,e,t.depth)})}n(s,e),!s.deferBuild&&s.treeList.childList&&(s.treeList.childList.editableList("insertItemAt",e,t),o&&setTimeout(function(){d.select(e)},100),d._trigger("sort",null,s),d.activeFilter)&&d.filter(d.activeFilter)},s.treeList.addChild=function(e,t){s.treeList.insertChildAt(e,s.children.length,t)},s.treeList.expand=function(t){var o,n,i,a,e;s.children?s.treeList.container?(o=s.treeList.container).hasClass("expanded")?t&&t(!1):(o.hasClass("built")||!s.deferBuild&&"function"!=typeof s.children?(d._loadingData||20<s.children.length?s.treeList.childList.show():s.treeList.childList.slideDown("fast"),s.expanded=!0,t&&t(!d._loadingData)):(o.addClass("built"),n=!1,a=0,Date.now(),e=function(e){n=!0,s.treeList.childList=d._addChildren(o,s,e,r,function(){t&&t(!0),d._trigger("childrenloaded",null,s)});e=Date.now()-a;e<400?setTimeout(function(){s.treeList.childList.slideDown("fast"),i&&i.remove()},400-e):(s.treeList.childList.slideDown("fast"),i&&i.remove()),s.expanded=!0},"function"==typeof s.children?s.children(e,s):(delete s.deferBuild,e(s.children)),n||(a=Date.now(),i=u('<div class="red-ui-treeList-spinner">').css({"background-position":35+20*r+"px 50%"}).appendTo(o))),o.addClass("expanded")):(s.expanded=!0,t&&t(!1)):t&&t(!1)},s.treeList.collapse=function(){!1!==s.collapsible&&s.children&&(s.expanded=!1,s.treeList.container)&&(s.children.length<20?s.treeList.childList.slideUp("fast"):s.treeList.childList.hide(),s.treeList.container.removeClass("expanded"))},s.treeList.sortChildren=function(e){s.children&&(s.children.sort(e),s.treeList.childList)&&(s.treeList.childList.editableList("sort",e),s.treeList.childList.editableList("sort",null))},s.treeList.replaceElement=function(e){var t;s.element&&(s.treeList.container&&(u(s.element).remove(),u(e).appendTo(s.treeList.label),t=(s.gutter?s.gutter[0].offsetWidth+2:0)+20*s.depth,u(e).css({width:"calc(100% - "+(t+20+(s.icon?20:0))+"px)"})),s.element=e)},s.children&&"function"!=typeof s.children&&s.children.forEach(function(e){d._initItem(e,r+1)}))},_addSubtree:function(e,o,n,t){var i,a,s=this,r=(this._initItem(n,t),n.treeList.container=o,n.treeList.parentList=e,u("<div>",{class:"red-ui-treeList-label"})),e=(r.appendTo(o),n.treeList.label=r,n.class&&r.addClass(n.class),n.gutter&&n.gutter.css({position:"absolute"}).appendTo(r),(n.gutter&&!n.gutter.hasClass("red-ui-treeList-gutter-float")?n.gutter.width()+2:0)+20*t),d=(n.treeList.labelPadding=u("<span>").css({display:"inline-block","flex-shrink":0,width:e+"px"}).appendTo(r),r.on("mouseover",function(e){s._trigger("itemmouseover",e,n)}),r.on("mouseout",function(e){s._trigger("itemmouseout",e,n)}),r.on("mouseenter",function(e){s._trigger("itemmouseenter",e,n)}),r.on("mouseleave",function(e){s._trigger("itemmouseleave",e,n)}),n.treeList.makeLeaf=function(e){var t;d.children().length&&(e&&n.children&&(t=function(e){e.children&&e.children.forEach(function(e){e.element&&e.element.detach(),e.gutter&&e.gutter.detach(),t(e)})})(n),d.empty(),n.deferBuild||(n.treeList.childList.remove(),delete n.treeList.childList),r.off("click.red-ui-treeList-expand"),d.off("click.red-ui-treeList-expand"),delete n.children,o.removeClass("expanded"),delete n.expanded)},n.treeList.makeParent=function(e){d.children().length||(u('<i class="fa fa-angle-right" />').toggleClass("hide",!1===n.collapsible).appendTo(d),d.on("click.red-ui-treeList-expand",function(e){e.stopPropagation(),e.preventDefault(),o.hasClass("expanded")?n.treeList.collapse():n.treeList.expand()}),r.on("click.red-ui-treeList-expand",function(e){o.hasClass("expanded")?(n.hasOwnProperty("selected")||r.hasClass("selected"))&&n.treeList.collapse():n.treeList.expand()}),n.children)||(n.children=e||[],n.treeList.childList=s._addChildren(o,n,n.children,t))},u('<span class="red-ui-treeList-icon"></span>').appendTo(r));n.children&&n.treeList.makeParent(),n.checkbox?(i=u('<span class="red-ui-treeList-icon"></span>'),(a=u('<input class="red-ui-treeList-checkbox" type="checkbox">').prop("checked",n.selected).appendTo(i)).on("click",function(e){e.stopPropagation()}),a.on("change",function(e){n.selected=this.checked,n.selected?s._selected.add(n):s._selected.delete(n),r.toggleClass("selected",this.checked),s._trigger("select",e,n)}),n.children||r.on("click",function(e){e.stopPropagation(),a.trigger("click"),s._topList.find(".focus").removeClass("focus"),r.addClass("focus")}),n.treeList.select=function(e){e!==n.selected&&a.trigger("click")},n.treeList.checkbox=a,i.appendTo(r)):n.radio?(i=u('<span class="red-ui-treeList-icon"></span>'),(a=u('<input class="red-ui-treeList-radio" type="radio">').prop("name",n.radio).prop("checked",n.selected).appendTo(i)).on("click",function(e){e.stopPropagation()}),a.on("change",function(e){n.selected=this.checked,s._selected.forEach(function(e){e.radio===n.radio&&(e.treeList.label.removeClass("selected"),e.selected=!1,s._selected.delete(e))}),n.selected?s._selected.add(n):s._selected.delete(n),r.toggleClass("selected",this.checked),s._trigger("select",e,n)}),n.children||r.on("click",function(e){e.stopPropagation(),a.trigger("click"),s._topList.find(".focus").removeClass("focus"),r.addClass("focus")}),n.treeList.select=function(e){e!==n.selected&&a.trigger("click")},i.appendTo(r),n.treeList.radio=a):(r.on("click",function(e){s.options.multi||s.clearSelection(),r.addClass("selected"),s._selected.add(n),s._topList.find(".focus").removeClass("focus"),r.addClass("focus"),s._trigger("select",e,n)}),r.on("dblclick",function(e){s._topList.find(".focus").removeClass("focus"),r.addClass("focus"),n.children||s._trigger("confirm",e,n)}),n.treeList.select=function(e){s.options.multi||s.clearSelection(),r.toggleClass("selected",e),e?(s._selected.add(n),s._trigger("select",null,n)):s._selected.delete(n),s.reveal(n)}),r.toggleClass("selected",!!n.selected),n.selected&&s._selected.add(n),n.icon&&("string"==typeof n.icon?u('<span class="red-ui-treeList-icon"><i class="'+n.icon+'" /></span>').appendTo(r):u('<span class="red-ui-treeList-icon">').appendTo(r).append(n.icon)),n.hasOwnProperty("label")||n.hasOwnProperty("sublabel")?(n.hasOwnProperty("label")&&u('<span class="red-ui-treeList-label-text"></span>').text(n.label).appendTo(r),n.hasOwnProperty("sublabel")&&u('<span class="red-ui-treeList-sublabel-text"></span>').text(n.sublabel).appendTo(r)):n.element&&(u(n.element).appendTo(r),u(n.element).css({width:"calc(100% - "+(e+20+(n.icon?20:0))+"px)"})),n.children&&(Array.isArray(n.children)&&!n.deferBuild&&(n.treeList.childList=s._addChildren(o,n,n.children,t)),n.expanded)&&n.treeList.expand()},empty:function(){this._topList.editableList("empty")},data:function(e){var t=this;if(void 0===e)return this._data;this._data=e,this._items={},this._topList.editableList("empty"),this._loadingData=!0;for(var o=0;o<e.length;o++)this._topList.editableList("addItem",e[o]);setTimeout(function(){delete t._loadingData},200),this._trigger("select")},show:function(e,o){if(e="string"==typeof e?this._items[e]:e){for(var n=this,i=[],t=e;t;)i.unshift(t),t=t.parent;var a=!1,s=function(e){a=a||e;var t=i.shift();0===i.length?setTimeout(function(){n.reveal(t),o&&o()},a?200:0):t.treeList.expand(s)};s()}},reveal:function(e){var t,o,n;(e="string"==typeof e?this._items[e]:e)&&(o=this._topList.offset().top,t=e.treeList.label.offset().top,t-=o+(o=this._topList.parent().scrollTop()),n=this._topList.parent().height(),t<(e=e.treeList.label.outerHeight())/2?this._topList.parent().scrollTop(o+t-e/2-e):n<t+e&&this._topList.parent().scrollTop(o+(t+2.5*e-n)))},select:function(e,t,o){var n=this;this.options.multi||!1===o||this.clearSelection(),Array.isArray(e)?e.forEach(function(e){n.select(e,t,!1)}):(e="string"==typeof e?this._items[e]:e)&&(e.selected=!0,this._selected.add(e),e.treeList.label&&e.treeList.label.addClass("selected"),n._topList.find(".focus").removeClass("focus"),!1!==t)&&this._trigger("select",null,e)},clearSelection:function(){this._selected.forEach(function(e){e.selected=!1,e.treeList.checkbox&&e.treeList.checkbox.prop("checked",!1),e.treeList.label&&e.treeList.label.removeClass("selected")}),this._selected.clear()},selected:function(){var t=[];return this._selected.forEach(function(e){t.push(e)}),this.options.multi?t:t.length?t[0]:void 0},filter:function(n){this.activeFilter=n;function i(e){var t=0,o=(n&&n(e)&&(t++,a++),0);return e.children&&"function"!=typeof e.children&&(e.treeList.childList?o=e.treeList.childList.editableList("filter",i):(e.treeList.childFilter=i,n&&e.children.forEach(function(e){i(e)&&o++})),t+=o,n)&&0<o&&setTimeout(function(){e.treeList.expand()},10),n?0<t:(a++,!0)}var a=0;return this._topList.editableList("filter",i),a},get:function(e){return this._items[e]||null}})}(jQuery),function(t){t.widget("nodered.checkboxSet",{_create:function(){var o=this,e=(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,this.element.prop("checked"));this.states=[t('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-square-o"></i></span>').appendTo(this.uiElement),t('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-check-square-o"></i></span>').appendTo(this.uiElement),t('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-minus-square-o"></i></span>').appendTo(this.uiElement)],(e?this.states[1]:this.states[0]).show(),this.element.on("change",function(){(this.checked?(o.states[0].hide(),o.states[1]):(o.states[1].hide(),o.states[0])).show(),o.states[2].hide();var t=this.checked;o.children.forEach(function(e){e.checkboxSet("state",t,!1,!0)})}),this.uiElement.on("click",function(e){e.stopPropagation(),o.state(!1===o.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){e=this.children.indexOf(e);-1<e&&this.children.splice(e,1)},updateChild:function(e){var o=0;this.children.forEach(function(e,t){!0===e.checkboxSet("state")&&o++}),0===o?this.state(!1,!0):o===this.children.length?this.state(!0,!0):this.state(null,!0)},disable:function(){this.uiElement.addClass("disabled")},state:function(e,t,o){if(0===arguments.length)return this.partialFlag?null:this.element.is(":checked");this.partialFlag=null===e;var n=this.partialFlag||e;this.element.prop("checked",n),!0===e?(this.states[0].hide(),this.states[1].show(),this.states[2].hide()):!1===e?(this.states[2].hide(),this.states[1].hide(),this.states[0].show()):null===e&&(this.states[0].hide(),this.states[1].hide(),this.states[2].show()),t||this.element.trigger("change",null),!o&&this.parent&&this.parent.checkboxSet("updateChild",this)}})}(jQuery),RED.menu=function(){var c={};let u=0;function p(t){var o;if(null!==t&&t.id&&!1===RED.settings.theme("menu."+t.id))return null;if(null===t)o=$('<li class="red-ui-menu-divider"></li>');else{o=$("<li></li>"),t.id||(t.id="red-ui-menu-item-"+u++),t.group&&o.addClass("red-ui-menu-group-"+t.group);var n="<a "+(t.id?'id="'+t.id+'" ':"")+'tabindex="-1" href="#">';t.toggle&&(n=(n+='<i class="fa fa-square'+("right"!==t.direction?" pull-left":"")+'"></i>')+'<i class="fa fa-check-square'+("right"!==t.direction?" pull-left":"")+'"></i>'),void 0!==t.icon&&(/\.(png|svg)/.test(t.icon)?n+='<img src="'+t.icon+'"/> ':n+='<i class="'+(t.icon||'" style="display: inline-block;"')+'"></i> ');let e=t.label;t.label||"string"!=typeof t.onselect||(e=RED.actions.getLabel(t.onselect)),t.sublabel?n+='<span class="red-ui-menu-label-container"><span class="red-ui-menu-label">'+e+'</span><span class="red-ui-menu-sublabel">'+t.sublabel+"</span></span>":n+='<span class="red-ui-menu-label"><span>'+e+"</span></span>",n+="</a>";var i,n=$(n).appendTo(o);if(t.link=n,("string"==typeof t.onselect||t.shortcut)&&(i=t.shortcut||RED.keyboard.getShortcut(t.onselect))&&i.key&&(t.shortcutSpan=$('<span class="red-ui-popover-key">'+RED.keyboard.formatKey(i.key,!0)+"</span>").appendTo(n.find(".red-ui-menu-label"))),(c[t.id]=t).onselect?(n.on("click",function(e){e.preventDefault(),$(this).parent().hasClass("disabled")||(t.toggle?!0===t.toggle?g(t.id,!h(t.id)):g(t.id,!0):f(t.id))}),t.toggle&&(i=RED.settings.get("menu-"+t.id),t.setting&&(null!==i?(RED.settings.set(t.setting,i),RED.settings.remove("menu-"+t.id)):i=RED.settings.get(t.setting)),i?(n.addClass("active"),f(t.id,!0)):!1===i?(n.removeClass("active"),f(t.id,!1)):t.hasOwnProperty("selected")&&(t.selected?n.addClass("active"):n.removeClass("active"),f(t.id,t.selected)))):t.href?n.attr("target","_blank").attr("href",t.href):t.options||(o.addClass("disabled"),n.on("click",function(e){e.preventDefault()})),t.options){o.addClass("red-ui-menu-dropdown-submenu"+("right"!==t.direction?" pull-left":""));for(var a=$('<ul id="'+t.id+'-submenu" class="red-ui-menu-dropdown"></ul>').appendTo(o),s=!1,r=!1,d=0;d<t.options.length;d++){t.options[d]&&(t.onpreselect&&void 0===t.options[d].onpreselect&&(t.options[d].onpreselect=t.onpreselect),t.onpostselect&&void 0===t.options[d].onpostselect&&(t.options[d].onpostselect=t.onpostselect),t.options[d].direction=t.direction,s=s||t.options[d].icon,r=r||t.options[d].options);var l=p(t.options[d]);l&&l.appendTo(a)}s||a.addClass("red-ui-menu-dropdown-noicons"),r&&a.addClass("red-ui-menu-dropdown-submenus")}t.disabled&&o.addClass("disabled"),!1===t.visible&&o.addClass("hide")}return o}function f(e,t){var o=c[e],n=o.onselect;o.onpreselect&&o.onpreselect.call(o,t),(n="string"==typeof o.onselect?RED.actions.get(o.onselect):n)?n.call(o,t):console.log("No callback for",e,o.onselect),o.onpostselect&&o.onpostselect.call(o,t)}function h(e){return $("#"+e).hasClass("active")}function g(e,t){var o=!1,n=(h(e)==t&&(o=!0),c[e]);if(t?$("#"+e).addClass("active"):$("#"+e).removeClass("active"),n){if(n.toggle&&"string"==typeof n.toggle&&t)for(var i in c)c.hasOwnProperty(i)&&(i=c[i]).id!=n.id&&n.toggle==i.toggle&&g(i.id,!1);!o&&n.onselect&&f(n.id,t),n.local||o||RED.settings.set(n.setting||"menu-"+n.id,t)}}return{init:function(e){for(var t,o=$("<ul/>",{class:"red-ui-menu red-ui-menu-dropdown pull-right"}),n=(e.direction&&o.addClass("red-ui-menu-dropdown-direction-"+e.direction),e.id&&(o.attr({id:e.id+"-submenu"}),1===(t=$("#"+e.id)).length)&&(o.insertAfter(t),t.on("click",function(e){e.stopPropagation(),e.preventDefault(),o.is(":visible")?($(document).off("click.red-ui-menu"),o.hide()):($(document).on("click.red-ui-menu",function(e){$(document).off("click.red-ui-menu"),activeMenu=null,o.hide()}),$(".red-ui-menu.red-ui-menu-dropdown").hide(),o.show())})),!1),i=!1,a=!1,s=0;s<e.options.length;s++){var r,d=e.options[s];d&&(e.onpreselect&&void 0===d.onpreselect&&(d.onpreselect=e.onpreselect),e.onpostselect&&void 0===d.onpostselect&&(d.onpostselect=e.onpostselect),d.direction=e.direction||"left"),null===d&&n||(a=a||d&&d.icon,i=i||d&&d.options,(r=p(d))&&(r.appendTo(o),n=null===d))}return a||o.addClass("red-ui-menu-dropdown-noicons"),i&&o.addClass("red-ui-menu-dropdown-submenus"),o},setSelected:g,isSelected:h,toggleSelected:function(e){g(e,!h(e))},setDisabled:function(e,t){t?$("#"+e).parent().addClass("disabled"):$("#"+e).parent().removeClass("disabled")},setVisible:function(e,t){t?$("#"+e).parent().removeClass("hide"):$("#"+e).parent().addClass("hide")},addItem:function(e,t){var o=p(t);if(null!==t&&t.group){var n=$("#"+e+"-submenu").children(".red-ui-menu-group-"+t.group);if(0===n.length)o.appendTo("#"+e+"-submenu");else{for(var i=0;i<n.length;i++){var a=n[i],s=$(a).find(".red-ui-menu-label").html();if(t.label<s){$(a).before(o);break}}i===n.length&&o.appendTo("#"+e+"-submenu")}}else o.appendTo("#"+e+"-submenu")},removeItem:function(e){$("#"+e).parent().remove()},setAction:function(e,t){(e=c[e])&&(e.onselect=t)},refreshShortcuts:function(){for(var e in c){var t;c.hasOwnProperty(e)&&"string"==typeof(e=c[e]).onselect&&e.shortcutSpan&&(e.shortcutSpan.remove(),delete e.shortcutSpan,t=RED.keyboard.getShortcut(e.onselect))&&t.key&&(e.shortcutSpan=$('<span class="red-ui-popover-key">'+RED.keyboard.formatKey(t.key,!0)+"</span>").appendTo(e.link.find(".red-ui-menu-label")))}}}}(),RED.panels={create:function(a){var s=a.container||$("#"+a.id),r=s.children();if(2!==r.length)throw console.log(a.id),new Error("Container must have exactly two children");var d,l=!a.dir||"vertical"===a.dir,t=(s.addClass("red-ui-panels"),l||s.addClass("red-ui-panels-horizontal"),$(r[0]).addClass("red-ui-panel"),$(r[1]).addClass("red-ui-panel"),$('<div class="red-ui-panels-separator"></div>').insertAfter(r[0])),c=[],n=!1,u=.5,o=(t.draggable({axis:l?"y":"x",containment:s,scroll:!1,start:function(e,t){d=l?t.position.top:t.position.left,c=[l?$(r[0]).height():$(r[0]).width(),l?$(r[1]).height():$(r[1]).width()]},drag:function(e,t){var o=l?s.height():s.width(),n=(l?t.position.top:t.position.left)-d,i=[c[0]+n,c[1]-n];l?($(r[0]).height(i[0]),t.position.top-=n):($(r[0]).width(i[0]),t.position.left-=n),a.resize&&a.resize(i[0],i[1]),u=i[0]/(o-8)},stop:function(e,t){n=!0}}),{ratio:function(e){if(void 0===e)return u;n=!0,0===(u=e)||1===e?t.hide():t.show(),l?o.resize(s.height()):o.resize(s.width())},resize:function(e){var t,o;l?(o=[$(r[0]).outerHeight(),$(r[1]).outerHeight()],s.height(e)):(o=[$(r[0]).outerWidth(),$(r[1]).outerWidth()],s.width(e)),n&&(o=[t=u*(e-8),e-t-8],l?$(r[0]).outerHeight(o[0]):$(r[0]).outerWidth(o[0])),a.resize&&(o=l?[$(r[0]).height(),$(r[1]).height()]:[$(r[0]).width(),$(r[1]).width()],a.resize(o[0],o[1]))}});return o}},RED.popover=function(){var w={default:{x:12,y:12},small:{x:8,y:8}};return{create:function(n){var i,a,c,s,u,t,r,d,l,p=n.target,f=n.direction||"right",e=n.trigger,h=n.content,g=n.delay||{show:750,hide:50},o=n.autoClose,m=n.width||"auto",v=n.maxWidth,b=n.size||"default",y=n.offset||0;if(w[b])return i=null,t=function(e){if(a){var t=p.data("red-ui-popover");if(n.tooltip&&t)a=!1;else{if(c=$('<div class="red-ui-popover"></div>'),n.class&&c.addClass(n.class),s=$('<div class="red-ui-popover-content">').appendTo(c),"default"!==b&&c.addClass("red-ui-popover-size-"+b),"function"==typeof h){var o=h.call(l);if(null===o)return;"string"==typeof o?s.text(o):s.append(o)}else s.html(h);c.appendTo("body"),r({target:p,direction:f,width:m,maxWidth:v}),t&&t.close(!0),"manual"!==n.trigger&&p.data("red-ui-popover",l),n.tooltip&&c.on("mousedown",function(e){d(!0)}),n.interactive&&(c.on("mouseenter",function(e){clearTimeout(i),a=!0}),c.on("mouseleave",function(e){i&&clearTimeout(i),a&&(i=setTimeout(function(){a=!1,d()},g.hide))})),e?c.show():c.fadeIn("fast")}}},r=function(e){p=e.target||p,f=e.direction||f||"right",y=e.offset||y;var t=e.transition,o=e.width||"auto",o=(c.width(o),e.maxWidth?c.css("max-width",e.maxWidth):c.css("max-width","auto"),p[0].getBoundingClientRect()),e=o.height,n=o.width,i=c.outerHeight(),a=c.outerWidth(),s=$(window).scrollTop(),r=$(window).scrollLeft(),s=s+$(window).height(),r=r+$(window).width(),d=0,l=0;"right"===f?(d=o.top+e/2-i/2,l=o.left+n+w[b].x+y):"left"===f?(d=o.top+e/2-i/2,l=o.left-w[b].x-a-y):"bottom"===f?(d=o.top+e+w[b].y+y,(l=o.left+n/2-a/2)<0?(f="right",d=o.top+e/2-i/2,l=o.left+n+w[b].x+y):r<l+a+10?(f="left",d=o.top+e/2-i/2,l=o.left-w[b].x-a-y,s<d+i+e/2+5&&(d-=d+i+e/2-s+5)):s<d+i&&(f="top",d=o.top-w[b].y-i-y,l=o.left+n/2-a/2)):"top"===f?(d=o.top-w[b].y-i-y,l=o.left+n/2-a/2,d<0&&(f="bottom",d=o.top+e+w[b].y+y,l=o.left+n/2-a/2)):/inset/.test(f)&&(d=o.top+e/2-i/2,l=o.left+n/2-a/2,/bottom/.test(f)&&(d=o.top+e-i-y),/top/.test(f)&&(d=o.top+y),/left/.test(f)&&(l=o.left+y),/right/.test(f))&&(l=o.left+n-a-y),u&&c.removeClass(u),t&&c.css({transition:"0.6s ease","transition-property":"top,left,right,bottom"}),u="red-ui-popover-"+f,c.addClass(u).css({top:d,left:l}),t&&setTimeout(function(){c.css({transition:"none"})},600)},d=function(e){$(document).off("mousedown.red-ui-popover"),a||c&&(e?c.remove():c.fadeOut("fast",function(){$(this).remove()}),c=null,p.removeData("red-ui-popover",l))},p.on("remove",function(e){i&&clearTimeout(i),a&&(a=!1,setTimeout(d,g.hide))}),"hover"===e?(p.on("mouseenter",function(e){clearTimeout(i),a||(a=!0,i=setTimeout(t,g.show))}),p.on("mouseleave disabled",function(e){i&&clearTimeout(i),a&&(a=!1,setTimeout(d,g.hide))})):"click"===e?(p.on("click",function(e){e.preventDefault(),e.stopPropagation(),((a=!a)?t:d)()}),o&&p.on("mouseleave disabled",function(e){i&&clearTimeout(i),a&&(a=!1,setTimeout(d,o))})):"modal"===e?$(document).on("mousedown.red-ui-popover",function(e){for(var t=e.target;"BODY"!==t.nodeName&&t!==c[0];)t=t.parentElement;"BODY"===t.nodeName&&(a=!1,d())}):o&&setTimeout(function(){a=!1,d()},o),l={get element(){return c},setContent:function(e){return h=e,l},open:function(e){return a=!0,t(e),l},close:function(e){return a=!1,d(e),l},move:function(e){r(e)}};throw new Error("Invalid RED.popover size value:",b)},tooltip:function(e,o,n,t){var i=RED.popover.create({tooltip:!0,target:e,trigger:"hover",size:"small",direction:"bottom",content:function(){var e,t=o;return"function"==typeof o&&(t=o()),t=n&&(e=RED.keyboard.getShortcut(n))&&e.key?$("<span>"+o+' <span class="red-ui-popover-key">'+RED.keyboard.formatKey(e.key,!0)+"</span></span>"):t},interactive:t,delay:{show:750,hide:50}});return i.setContent=function(e){o=e},i.setAction=function(e){n=e},i.delete=function(){i.close(!0),e.off("mouseenter"),e.off("mouseleave")},i},menu:function(o){var n=$('<ul class="red-ui-menu"></ul>'),i=("compact"===o.style&&n.addClass("red-ui-menu-compact"),o.options||[]),t=RED.popover.panel(n),a=(o.width&&t.container.width(o.width),o.class&&t.container.addClass(o.class),o.maxHeight&&t.container.css({"max-height":o.maxHeight,"overflow-y":"auto"}),{options:function(e){if(void 0===e)return i;i=e||[],n.empty(),i.forEach(function(t){var e=$("<li>").appendTo(n),e=$('<a href="#"></a>').appendTo(e);"string"==typeof t.label?e.text(t.label):t.label&&t.label.appendTo(e),e.on("click",function(e){e.preventDefault(),t.onselect?t.onselect():o.onselect&&o.onselect(t),a.hide()}),0})},show:function(e){$(document).on("keydown.red-ui-menu",function(e){var t=n.find(":focus").parent();40===e.keyCode?(e.preventDefault(),(!(0<t.length)||t.index()===i.length-1?n.children().first():t.next()).children().first().focus()):38===e.keyCode?(e.preventDefault(),(!(0<t.length)||0===t.index()?n.children().last():t.prev()).children().first().focus()):27===e.keyCode?(e.preventDefault(),a.hide(!0)):9===e.keyCode&&o.tabSelect&&(e.preventDefault(),t.find("a").trigger("click")),e.stopPropagation()}),e.onclose=function(){$(document).off("keydown.red-ui-menu"),o.onclose&&o.onclose(!0)},t.show(e)},hide:function(e){$(document).off("keydown.red-ui-menu"),t.hide(o.disposeOnClose),o.onclose&&o.onclose(e)}});return a.options(i),a},panel:function(e){var l=$('<div class="red-ui-editor-dialog red-ui-popover-panel"></div>');function c(e){$(document).off("mousedown.red-ui-popover-panel-close"),$(document).off("keydown.red-ui-popover-panel-close"),l.hide(),l.css({height:"auto"}),!1!==e&&l.remove()}return l.css({display:"none"}),l.appendTo(document.body),e.appendTo(l),{container:l,show:function(t){var o=t.onclose,n=t.closeButton,e=t.target,i=t.align||"right",a=t.offset||[0,0],s=t.x,r=t.y,s=(d=void 0!==s&&void 0!==r)?{left:s,top:r}:e.offset(),r=(d||e.width(),d?0:e.outerHeight()),d=l.height(),e=l.width();(r=r+s.top+a[1])+d-$(document).scrollTop()>$(window).height()&&(r-=r+d-$(window).height()+5),r<0&&(l.height(d+r),r=0),"right"===i?l.css({top:r+"px",left:s.left+a[0]+"px"}):"left"===i&&l.css({top:r+"px",left:s.left-e+a[0]+"px"}),l.slideDown(100),$(document).on("keydown.red-ui-popover-panel-close",function(e){27===e.keyCode&&(o&&o(),c(t.dispose))}),$(document).on("mousedown.red-ui-popover-panel-close",function(e){n&&$(e.target).closest(n).length||$(e.target).closest(l).length||$(e.target).closest(".red-ui-editor-dialog").length||(o&&o(),c(t.dispose))})},hide:c}}}}(),function(i){i.widget("nodered.searchBox",{_create:function(){var t,o,n=this;this.currentTimeout=null,this.lastSent="",this.element.val(""),this.element.addClass("red-ui-searchBox-input"),this.uiContainer=this.element.wrap("<div>").parent(),this.uiContainer.addClass("red-ui-searchBox-container"),"compact"===this.options.style&&this.uiContainer.addClass("red-ui-searchBox-compact"),0===this.element.parents("form").length&&this.element.wrap("<form>").parent().addClass("red-ui-searchBox-form"),i('<i class="fa fa-search"></i>').prependTo(this.uiContainer),this.clearButton=i('<a class="red-ui-searchBox-clear" href="#"><i class="fa fa-times"></i></a>').appendTo(this.uiContainer),this.clearButton.on("click",function(e){e.preventDefault(),n.element.val(""),n._change("",!0),n.element.trigger("focus")}),this.options.options&&(this.uiContainer.addClass("red-ui-searchBox-has-options"),this.optsButton=i('<a class="red-ui-searchBox-opts" href="#"><i class="fa fa-caret-down"></i></a>').appendTo(this.uiContainer),t=!1,this.optsMenu=RED.popover.menu({style:this.options.style,options:this.options.options.map(function(e){return{label:e.label,onselect:function(){n.element.val(e.value+" "),n._change(e.value,!0)}}}),onclose:function(e){t=!1,n.element.trigger("focus")},disposeOnClose:!1}),o=function(){t=!0,n.optsMenu.show({target:n.optsButton,align:"left",offset:[n.optsButton.width()-2,-1],dispose:!1})},this.optsButton.on("click",function(e){e.preventDefault(),t?n.optsMenu.hide(!0):o()}),this.optsButton.on("keydown",function(e){t||40!==e.keyCode||o()}),this.element.on("keydown",function(e){t||40!==e.keyCode||""!==i(this).val()||o()})),this.resultCount=i("<span>",{class:"red-ui-searchBox-resultCount hide"}).appendTo(this.uiContainer),this.element.val(""),this.element.on("keydown",function(e){27===e.keyCode&&n.element.val(""),13===e.keyCode&&e.preventDefault()}),this.element.on("keyup",function(e){n._change(i(this).val())}),this.element.on("focus",function(){i(document).one("mousedown",function(){n.element.blur()})})},_change:function(e,t){var o,n=!1,n=""===e?(this.clearButton.hide(),!0):(this.clearButton.show(),e.length>=(this.options.minimumLength||0)),e=this.element.val();(n=n&&e!==this.lastSent)&&(!t&&0<this.options.delay?(clearTimeout(this.currentTimeout),(o=this).currentTimeout=setTimeout(function(){o.lastSent=o.element.val(),o._trigger("change")},this.options.delay)):(this.lastSent=this.element.val(),this._trigger("change")))},value:function(e){if(void 0===e)return this.element.val();this.element.val(e),this._change(e)},count:function(e){null==e||""===e?this.resultCount.text("").hide():this.resultCount.text(e).show()},change:function(){this._trigger("change")}})}(jQuery),RED.tabs=function(){var S,O="fa fa-lemon-o",N=!1,I=!1;return{create:function(p){var d,f,h,e,t,o,n,i,a,s,g,r,m={},v=0,l=0,b=p.order,y=p.element||$("#"+p.id),c=y.wrap("<div>").parent(),w=y.wrap("<div>").parent();function u(e,t){var o,n;e.preventDefault(),$(this).hasClass("disabled")||(o=w.scrollLeft(),w.animate({scrollLeft:t},100),n=setInterval(function(){var e=w.scrollLeft();e===o?clearInterval(n):(o=e,w.animate({scrollLeft:t},100))},100),$(this).one("mouseup",function(){clearInterval(n)}))}function E(){var e=y.find("li.red-ui-tab.selected"),t=[];return e.each(function(){t.push(m[$(this).find("a").attr("href").slice(1)])}),t}function D(){p.onselect(E())}function R(e){if(!N)if(e.currentTarget!==h)h=null;else{if(h=null,S&&Date.now()-S<400)return I=!(S=0),function(e){if(e.preventDefault(),!e.metaKey&&!e.shiftKey)return p.ondblclick&&p.ondblclick(m[$(this).attr("href").slice(1)]),!1}.call(this,e);S=Date.now();var t,o=y.find("li.red-ui-tab.active"),n=$(this).parent(),i=!1;if(p.onselect)if(e.metaKey||e.ctrlKey){if(n.hasClass("selected")){if(n.removeClass("selected"),n[0]!==o[0])return void D();if(0===(t=y.find("li.red-ui-tab.selected")).length)return void D();n=t.first()}else o.hasClass("selected")||(m[o.find("a").attr("href").slice(1)],o.addClass("selected")),n.addClass("selected");i=!0}else e.shiftKey?(o[0]!==n[0]&&(o=o.index()<n.index()?(a=o,n):(a=n,o),y.find("li.red-ui-tab").removeClass("selected"),a.addClass("selected"),o.addClass("selected"),a.nextUntil(o).addClass("selected")),i=!0):0<(t=y.find("li.red-ui-tab.selected")).length&&(t.removeClass("selected"),i=!0);var a=n.find("a");if(p.onclick&&(p.onclick(m[a.attr("href").slice(1)],e),e.isDefaultPrevented())&&e.isPropagationStopped())return!1;_(a),i&&D()}}function x(){var e,t,o;0!==y.children().length&&(e=w.scrollLeft(),t=w.width(),o=y.width(),0===e?a.hide():a.show(),e===o-t?s.hide():s.show())}function _(e){var t;0===(e="string"==typeof e?y.find("a[href='#"+e+"']"):e).length||(e.parent().hasClass("hide-tab")&&(e.parent().removeClass("hide-tab").removeClass("hide"),p.onshow)&&p.onshow(m[e.attr("href").slice(1)]),e.parent().hasClass("active"))||(y.children().removeClass("active"),y.children().css({transition:"width 100ms"}),e.parent().addClass("active"),t=e.parent().attr("id"),c.find(".red-ui-tab-link-button").removeClass("active selected"),$("#"+t+"-link-button").addClass("active selected"),p.scrollable&&((t=e.parent().position().left)-21<0?w.animate({scrollLeft:"+="+(t-50)},300):t+120>w.width()&&w.animate({scrollLeft:"+="+(t+140-w.width())},300)),p.onchange&&p.onchange(m[e.attr("href").slice(1)]),k(),setTimeout(function(){y.children().css({transition:""})},100))}function k(){if(!p.vertical){var e,t=y.find("li.red-ui-tab"),o=t.filter(":not(.hide-tab)"),t=t.filter(".hide-tab"),n=c.width(),i=o.length;if(p.collapsible){var a=g.children().length,s=g.children(":visible").length;if((e=n-g.width()-10)<=120||e<198&&5<s){var r=g.find("a:last").prev();for(g.children().length;r.is(":not(:visible)");)r=r.prev(),0;(e<=120||6<s)&&r.hide(),e=Math.max(120,n-g.width()-10)}else 40<n-(e=s!==a?s<6?120:198:e)-g.width()&&g.find("a:not(:visible):first").show(),e=n-g.width()-10;o.css({width:e})}else l=(d=100*(e=(n-12-6*i)/i)/n+"%")+"%",p.scrollable?(e=Math.max(e,140),d=e+"px",l=0,a=Math.max(c.width(),12+(e+6)*i),y.width(a),x()):p.hasOwnProperty("minimumActiveTabWidth")&&(l=e<p.minimumActiveTabWidth?(e=(n-12-p.minimumActiveTabWidth-6*--i)/i,d=100*e/n+"%",p.minimumActiveTabWidth+"px"):0),o.css({width:d}),t.css({width:"0px"}),e<50?(y.find(".red-ui-tab-icon").hide(),y.find(".red-ui-tab-label").css({paddingLeft:Math.min(12,Math.max(0,e-38))+"px"})):(y.find(".red-ui-tab-icon").show(),y.find(".red-ui-tab-label").css({paddingLeft:""})),0!==l&&(y.find("li.red-ui-tab.active").css({width:p.minimumActiveTabWidth}),y.find("li.red-ui-tab.active .red-ui-tab-icon").show(),y.find("li.red-ui-tab.active .red-ui-tab-label").css({paddingLeft:""}))}}function T(e){p.onselect&&0<(o=y.find("li.red-ui-tab.selected")).length&&(o.removeClass("selected"),D());var t,o=y.find("a[href='#"+e+"']").parent();o.hasClass("active")&&(0<(t=0===(t=C(o)).length?j(o):t).length?_(t.find("a")):p.onchange&&p.onchange(null)),o.remove(),m[e].pinned&&v--,p.onremove&&p.onremove(m[e]),delete m[e],k(),f&&(f.remove(),f=null)}function C(e){for(var t=(e=e||y.find("li.active")).prev();0<t.length&&t.hasClass("hide-tab");)t=t.prev();return t}function j(e){for(var t=(e=e||y.find("li.active")).next();0<t.length&&t.hasClass("hide-tab");)t=t.next();return t}c.addClass("red-ui-tabs"),p.vertical&&c.addClass("red-ui-tabs-vertical"),p.addButton&&(c.addClass("red-ui-tabs-add"),(o=$('<div class="red-ui-tab-button red-ui-tabs-add"><a href="#"><i class="fa fa-plus"></i></a></div>').appendTo(c)).find("a").on("click",function(e){e.preventDefault(),"function"==typeof p.addButton?p.addButton():"string"==typeof p.addButton&&RED.actions.invoke(p.addButton)}),"string"==typeof p.addButton&&(e=p.addButton,p.addButtonCaption&&(e=p.addButtonCaption),RED.popover.tooltip(o,e,p.addButton)),y.on("dblclick",function(e){var t=y.children(),o=e.clientX,n=0;t.each(function(e){if($(this).offset().left>o)return!1;n=e+1}),"function"==typeof p.addButton?p.addButton({index:n}):"string"==typeof p.addButton&&RED.actions.invoke(p.addButton,{index:n})})),p.searchButton&&(c.addClass("red-ui-tabs-search"),(o=$('<div class="red-ui-tab-button red-ui-tabs-search"><a href="#"><i class="fa fa-list-ul"></i></a></div>').appendTo(c)).find("a").on("click",function(e){e.preventDefault(),"function"==typeof p.searchButton?p.searchButton():"string"==typeof p.searchButton&&RED.actions.invoke(p.searchButton)}),"string"==typeof p.searchButton)&&(e=p.searchButton,p.searchButtonCaption&&(e=p.searchButtonCaption),RED.popover.tooltip(o,e,p.searchButton)),p.menu&&(c.addClass("red-ui-tabs-menu"),o=(t=$('<div class="red-ui-tab-button red-ui-tabs-menu"><a href="#"><i class="fa fa-caret-down"></i></a></div>').appendTo(c)).find("a"),n=!1,o.on("click",function(e){e.stopPropagation(),e.preventDefault(),n?(i.remove(),n=!1):(n=!0,e=[],"function"==typeof p.searchButton?e=p.menu():Array.isArray(p.menu)?e=p.menu:"function"==typeof p.menu&&(e=p.menu()),(i=RED.menu.init({options:e})).attr("id",p.id+"-menu"),i.css({position:"absolute"}),i.appendTo("body"),e=t.offset(),i.css({top:e.top+t.height()-2+"px",left:e.left-i.width()+t.width()+"px"}),$(".red-ui-menu.red-ui-menu-dropdown").hide(),$(document).on("click.red-ui-tabmenu",function(e){$(document).off("click.red-ui-tabmenu"),n=!1,i.remove()}),i.show())})),p.contextmenu&&c.on("contextmenu",function(e){let t,o=e.target;for(;"A"!==o.nodeName&&"UL"!==o.nodeName&&"BODY"!==o.nodeName;)o=o.parentNode;var n;return"A"===o.nodeName&&(n=o.getAttribute("href"))&&(t=m[n.slice(1)]),e.preventDefault(),e.stopPropagation(),RED.contextMenu.show({x:e.clientX-5,y:e.clientY-5,options:p.contextmenu(t)}),!1}),p.scrollable&&(c.addClass("red-ui-tabs-scrollable"),w.addClass("red-ui-tabs-scroll-container"),w.on("scroll",function(e){x()}),w.on("wheel",function(e){var t;0===e.originalEvent.deltaX&&(e.preventDefault(),t=w.scrollLeft(),t+=e.originalEvent.deltaY,w.scrollLeft(t))}),(a=$('<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(c).find("a")).on("mousedown",function(e){u(e,e.shiftKey?"-="+w.scrollLeft():"-=150")}).on("click",function(e){e.preventDefault()}),(s=$('<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(c).find("a")).on("mousedown",function(e){u(e,e.shiftKey?"+="+(w[0].scrollWidth-w.width()-w.scrollLeft()):"+=150")}).on("click",function(e){e.preventDefault()})),p.collapsible&&(c.addClass("red-ui-tabs-collapsible"),g=$('<div class="red-ui-tab-link-buttons"></div>').appendTo(c),!1!==p.menu)&&((r=$('<a href="#"><i class="fa fa-caret-down"></i></a>').appendTo(g)).addClass("red-ui-tab-link-button-menu"),r.on("click",function(e){e.stopPropagation(),e.preventDefault(),f||(n=[],y.children().each(function(e,t){var o=$(t).data("tabId"),t={id:"red-ui-tabs-menu-option-"+o,icon:m[o].iconClass||O,label:m[o].name,onselect:function(){_(o)}};n.push(t)}),n=[].concat(n),(f=RED.menu.init({options:n})).css({position:"absolute"}),f.appendTo("body"));var n,e=r.offset();f.css({top:e.top+r.height()-2+"px",left:e.left-f.width()+r.width()+"px"}),f.is(":visible")?$(document).off("click.red-ui-tabmenu"):($(".red-ui-menu.red-ui-menu-dropdown").hide(),$(document).on("click.red-ui-tabmenu",function(e){$(document).off("click.red-ui-tabmenu"),f.hide()})),f.toggle()})),y.children().first().addClass("active"),y.children().addClass("red-ui-tab"),y.find("li.red-ui-tab a").on("mousedown",function(e){h=e.currentTarget}).on("mouseup",R).on("auxclick",function(e){e.preventDefault()}).on("click",function(e){e.preventDefault()}).on("dblclick",function(e){e.stopPropagation(),e.preventDefault()}),setTimeout(function(){k()},0);var L={addTab:function(t,e){p.onselect&&0<(n=y.find("li.red-ui-tab.selected")).length&&(n.removeClass("selected"),D()),m[t.id]=t;var o=$("<li/>",{class:"red-ui-tab"}),n=(0===(e=0===y.children().length?void 0:e)?o.prependTo(y):0<e?o.insertAfter(y.find("li:nth-child("+e+")")):o.appendTo(y),o.attr("id","red-ui-tab-"+t.id.replace(".","-")),o.data("tabId",t.id),(p.maximumTabWidth||t.maximumTabWidth)&&o.css("maxWidth",(p.maximumTabWidth||t.maximumTabWidth)+"px"),$("<a/>",{href:"#"+t.id,class:"red-ui-tab-label"}).appendTo(o));t.icon?$("<i>",{class:"red-ui-tab-icon",style:"mask-image: url("+t.icon+"); -webkit-mask-image: url("+t.icon+");"}).appendTo(n):t.iconClass&&$("<i>",{class:"red-ui-tab-icon "+t.iconClass}).appendTo(n);$("<span/>",{class:"red-ui-text-bidi-aware"}).text(t.label).appendTo(n).attr("dir",RED.text.bidi.resolveBaseTextDir(t.label)),p.collapsible&&(o.addClass("red-ui-tab-pinned"),i=$('<a href="#'+t.id+'" class="red-ui-tab-link-button"></a>'),t.pinned?0===v?i.prependTo(g):i.insertAfter(g.find("a.red-ui-tab-link-button-pinned:last")):!1!==p.menu?i.insertBefore(g.find("a:last")):i.appendTo(g),i.attr("id",o.attr("id")+"-link-button"),(t.iconClass?$("<i>",{class:t.iconClass}):$("<i>",{class:O})).appendTo(i),i.on("click",function(e){e.preventDefault(),_(t.id)}),i.data("tabId",t.id),t.pinned&&(i.addClass("red-ui-tab-link-button-pinned"),v++),RED.popover.tooltip($(i),t.name,t.action),p.onreorder)&&(s=[],i.draggable({distance:10,axis:"x",containment:".red-ui-tab-link-buttons",start:function(e,t){if(N=!0,$(".red-ui-tab-link-buttons").width($(".red-ui-tab-link-buttons").width()),I)return I=!1;g.children().each(function(e){s[e]={el:$(this),text:$(this).text(),left:$(this).position().left,width:$(this).width(),menu:$(this).hasClass("red-ui-tab-link-button-menu")},$(this).is(i)&&(r=a=e)}),g.children().each(function(e){e!==a&&$(this).css({position:"absolute",left:s[e].left+"px",width:s[e].width+2,transition:"left 0.3s"})}),i.hasClass("active")||i.css({zIndex:1})},drag:function(e,t){t.position.left+=s[a].left;for(var o=t.position.left+s[a].width/2,n=0;n<s.length;n++)if(n!==a&&!s[n].menu&&!s[n].el.is(":not(:visible)")&&o>s[n].left&&o<s[n].left+s[n].width){n<a?(s[n].left+=s[a].width+8,s[a].el.detach().insertBefore(s[n].el)):(s[n].left-=s[a].width+8,s[a].el.detach().insertAfter(s[n].el)),s[n].el.css({left:s[n].left+"px"}),s.splice(n,0,s.splice(a,1)[0]),a=n;break}},stop:function(e,t){var o;N=!1,g.children().css({position:"relative",left:"",transition:""}),$(".red-ui-tab-link-buttons").width("auto"),i.css({zIndex:""}),k(),r!==a&&(f&&(f.remove(),f=null),o=$.makeArray(g.children().map(function(){return $(this).data("tabId")})),L.order(o),p.onreorder(o))}})),n.on("mousedown",function(e){h=e.currentTarget}),n.on("mouseup",R),n.on("auxclick",function(e){e.preventDefault()}),n.on("click",function(e){e.preventDefault()}),n.on("dblclick",function(e){e.stopPropagation(),e.preventDefault()}),$('<span class="red-ui-tabs-fade"></span>').appendTo(o),t.closeable&&(o.addClass("red-ui-tabs-closeable"),(e=$("<a/>",{href:"#",class:"red-ui-tab-close"}).appendTo(o)).append('<i class="fa fa-times" />'),e.on("click",function(e){e.preventDefault(),T(t.id)}),RED.popover.tooltip(e,RED._("workspace.closeFlow")));var i,a,s,r,d,l,c,u,e=$('<span class="red-ui-tabs-badges"></span>').appendTo(o);p.onselect&&$('<i class="red-ui-tabs-badge-selected fa fa-check-circle"></i>').appendTo(e),RED.popover.tooltip(n,function(){return RED.utils.sanitize(t.label)}),p.onadd&&p.onadd(t),1==y.find("li.red-ui-tab").length&&_(n),p.onreorder&&!p.collapsible&&(c=[],o.draggable({axis:"x",distance:20,start:function(e,t){if(I)return I=!1;N=!0,d=[],c=[],y.children().each(function(e){c[e]={el:$(this),text:$(this).text(),left:$(this).position().left,width:$(this).width()},$(this).is(o)&&(u=l=e),d.push($(this).data("tabId"))}),y.children().each(function(e){e!==l&&$(this).css({position:"absolute",left:c[e].left+"px",width:c[e].width+2,transition:"left 0.3s"})}),o.hasClass("active")||o.css({zIndex:1})},drag:function(e,t){t.position.left+=c[l].left+w.scrollLeft();for(var o=t.position.left+c[l].width/2-w.scrollLeft(),n=0;n<c.length;n++)if(n!==l&&o>c[n].left&&o<c[n].left+c[n].width){n<l?(c[n].left+=c[l].width+8,c[l].el.detach().insertBefore(c[n].el)):(c[n].left-=c[l].width+8,c[l].el.detach().insertAfter(c[n].el)),c[n].el.css({left:c[n].left+"px"}),c.splice(n,0,c.splice(l,1)[0]),l=n;break}},stop:function(e,t){N=!1,y.children().css({position:"relative",left:"",transition:""}),o.hasClass("active")||o.css({zIndex:""}),k(),u!==l&&p.onreorder(d,$.makeArray(y.children().map(function(){return $(this).data("tabId")}))),_(c[l].el.data("tabId"))}})),setTimeout(function(){k()},10),f&&(f.remove(),f=null),b&&L.order(b)},removeTab:T,activateTab:_,nextTab:function(){var e=j();0<e.length&&_(e.find("a"))},previousTab:function(){var e=C();0<e.length&&_(e.find("a"))},resize:k,count:function(){return y.find("li.red-ui-tab:not(.hide)").length},activeIndex:function(){return y.find("li.active").index()},getTabIndex:function(e){return y.find("a[href='#"+e+"']").parent().index()},contains:function(e){return 0<y.find("a[href='#"+e+"']").length},showTab:function(e){var t;m[e]&&(t=y.find("a[href='#"+e+"']").parent()).hasClass("hide-tab")&&(t.removeClass("hide-tab").removeClass("hide"),1===y.find("li.red-ui-tab:not(.hide-tab)").length&&_(t.find("a")),k(),p.onshow)&&p.onshow(m[e])},hideTab:function(t){var o,e;m[t]&&!(o=y.find("a[href='#"+t+"']").parent()).hasClass("hide-tab")&&(o.hasClass("active")&&(0<(e=0===(e=C(o)).length?j(o):e).length?_(e.find("a")):p.onchange&&p.onchange(null)),o.removeClass("active"),o.one("transitionend",function(e){o.addClass("hide"),k(),p.onhide&&p.onhide(m[t]),setTimeout(function(){x()},200)}),o.addClass("hide-tab"),o.css({width:0}))},renameTab:function(e,t){m[e].label=t,y.find("a[href='#"+e+"']").find("span.red-ui-text-bidi-aware").text(t).attr("dir",RED.text.bidi.resolveBaseTextDir(t)),k()},listTabs:function(){return $.makeArray(y.children().map(function(){return $(this).data("tabId")}))},selection:E,clearSelection:function(){var e;p.onselect&&0<(e=y.find("li.red-ui-tab.selected")).length&&(e.removeClass("selected"),D())},order:function(e){b=e;for(var t=$.makeArray(y.children().map(function(){return $(this).data("tabId")})),o=!0,n=0;n<e.length;n++)if(e[n]!==t[n]){o=!1;break}if(!o){var i={},a=(y.children().detach().each(function(){i[$(this).data("tabId")]=$(this)}),{});for(p.collapsible&&g.children().detach().each(function(){var e=$(this).data("tabId");a[e=e||"__menu__"]=$(this)}),n=0;n<e.length;n++)i[e[n]]&&(i[e[n]].appendTo(y),p.collapsible&&a[e[n]].appendTo(g),delete i[e[n]]);for(n in i)i.hasOwnProperty(n)&&(i[n].appendTo(y),p.collapsible)&&a[n].appendTo(g);p.collapsible&&(a.__menu__.appendTo(g),k())}}};return L}}}(),RED.stack={create:function(n){function i(){var t,e;0<r.length&&(t=0,r.forEach(function(e){t+=e.header.outerHeight()}),e=a.innerHeight(),s=e-t-(r.length-1),r.forEach(function(e){e.contentWrap.height(s)}))}var a=n.container,s=(a.addClass("red-ui-stack"),0),r=[],d=!0;return n.fill&&n.singleExpanded&&($(window).on("resize",i),$(window).on("focus",i)),{add:function(t){r.push(t),t.container=$('<div class="red-ui-palette-category">').appendTo(a),d||t.container.hide();var e,o=$('<div class="red-ui-palette-header"></div>').appendTo(t.container);return t.header=o,t.contentWrap=$("<div></div>",{style:"position:relative"}).appendTo(t.container),n.fill&&t.contentWrap.css("height",s),t.content=$("<div></div>").appendTo(t.contentWrap),!1!==t.collapsible?(o.on("click",function(){if(n.singleExpanded)if(t.isExpanded())2===r.length&&(r[0]===t?(r[0].collapse(),r[1]):(r[1].collapse(),r[0])).expand();else{for(var e=0;e<r.length;e++)r[e].isExpanded()&&r[e].collapse();t.expand()}else t.toggle()}),e=$('<i class="fa fa-angle-down"></i>').appendTo(o),t.expanded?(t.container.addClass("expanded"),e.addClass("expanded")):t.contentWrap.hide()):($('<i style="opacity: 0.5;" class="fa fa-angle-down expanded"></i>').appendTo(o),o.css("cursor","default")),t.title=$("<span></span>").html(t.title).appendTo(o),t.toggle=function(){return t.isExpanded()?(t.collapse(),!1):(t.expand(),!0)},t.expand=function(){if(!t.isExpanded())return t.onexpand&&t.onexpand.call(t),n.singleExpanded&&r.forEach(function(e){e!==t&&e.collapse()}),e.addClass("expanded"),t.container.addClass("expanded"),t.contentWrap.slideDown(200),!0},t.collapse=function(){if(t.isExpanded())return e.removeClass("expanded"),t.container.removeClass("expanded"),t.contentWrap.slideUp(200),!0},t.isExpanded=function(){return t.container.hasClass("expanded")},n.fill&&n.singleExpanded&&i(),t},hide:function(){return d=!1,r.forEach(function(e){e.container.hide()}),this},show:function(){return d=!0,r.forEach(function(e){e.container.show()}),this},resize:function(){i()}}}},function(c){function e(e,t){return{option:(e=RED.utils.parseContextKey(e,t&&t.value)).store,value:e.key}}function t(e,t){return t&&(t="string"==typeof t?t:t.value)!==RED.settings.context.default?"#:("+t+")::"+e:e}function o(e,t){e.css("pointer-events","none"),e.css("flex-grow",0),e.css("position","relative"),e.css("overflow","visible"),c("<div></div>").text(t).css({position:"absolute",bottom:"-2px",right:"5px","font-size":"0.7em",opacity:.3}).appendTo(e),this.elementDiv.show()}function u(e,t){var o=e.toLowerCase().indexOf(t.toLowerCase()),n=-1<o?t.length:0;return{index:o,found:-1<o,pre:e.substring(0,o),match:e.substring(o,o+n),post:e.substring(o+n),exact:0===o&&e.length===t.length}}function p(e){var t=[];return e.pre&&t.push(c("<span/>").text(e.pre)),e.match&&t.push(c("<span/>",{style:"font-weight: bold; color: var(--red-ui-text-color-link);"}).text(e.match)),e.post&&t.push(c("<span/>").text(e.post)),t}let f={},r={};RED.events&&RED.events.on("editor:close",function(){r={},f={}});function n(){function d(n,i,a,t){if(f[n]=f[n]||{},f[n][i]=f[n][i]||new Map,0<a.length)try{RED.utils.normalisePropertyExpression(a)}catch(e){return t()}const s=`context/${n}/${encodeURIComponent(a)}?store=${i}&keysOnly`;r[s]?t():c.getJSON(s,function(e){r[s]=!0;e=(e[i]||{}).keys||[];const o=a+(0<a.length?".":"");e.forEach(e=>{var t=e.key;/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(t)?f[n][i].set(o+t,e):f[n][i].set(a+'["'+t.replace(/"/,'\\"')+'"]',e)}),t()})}const l=this;return function(s,t){{var o=s,n=function(e){const a=[];e.forEach((e,t)=>{let o=t,n=u(o,s);var i;(n=!n.found&&0<s.length&&s.endsWith(".")?u(o,s.substring(0,s.length-1)+'["'):n).found&&(t=c("<div>",{style:"display: flex"}),i=c("<div/>",{class:"red-ui-autoComplete-completion"}),n.exact&&/^array/.test(e.format)&&(n.post+=`[0-${e.length}]`,o+="["),i.append(p(n)),i.appendTo(t),a.push({value:o,label:t}))}),a.sort(function(e,t){return e.value.localeCompare(t.value)}),t(a)},i=o.split(".");i.pop();let e=l.propertyType;if("flow"===e){var a=RED.editor.getEditStack();if(0===a.length)return void n(new Map);a=a.pop();if(!a.z)return void n(new Map);e=e+"/"+a.z}const r=1===h.length?h[0].value:l.optionValue;a=i.join("."),d(e,r,a,function(){(f[e][r].has(o)||o.endsWith("]"))&&d(e,r,o,function(){n(f[e][r])}),n(f[e][r])})}}}var i,s={msg:{value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression,autoComplete:(i=[{value:"payload"},{value:"topic",source:["mqtt","inject","rbe"]},{value:"action",source:["mqtt"]},{value:"complete",source:["join"]},{value:"contentType",source:["mqtt"]},{value:"cookies",source:["http request","http response"]},{value:"correlationData",source:["mqtt"]},{value:"delay",source:["delay","trigger"]},{value:"encoding",source:["file"]},{value:"error",source:["catch"]},{value:"error.message",source:["catch"]},{value:"error.source",source:["catch"]},{value:"error.source.id",source:["catch"]},{value:"error.source.type",source:["catch"]},{value:"error.source.name",source:["catch"]},{value:"filename",source:["file","file in"]},{value:"flush",source:["delay"]},{value:"followRedirects",source:["http request"]},{value:"headers",source:["http response","http request"]},{value:"host",source:["tcp request","http request"]},{value:"ip",source:["udp out"]},{value:"kill",source:["exec"]},{value:"messageExpiryInterval",source:["mqtt"]},{value:"method",source:["http request"]},{value:"options",source:["xml"]},{value:"parts",source:["split","join","batch","sort"]},{value:"pid",source:["exec"]},{value:"port",source:["tcp request"," udp out"]},{value:"qos",source:["mqtt"]},{value:"rate",source:["delay"]},{value:"rejectUnauthorized",source:["http request"]},{value:"req",source:["http in"]},{value:"req.body",source:["http in"]},{value:"req.headers",source:["http in"]},{value:"req.query",source:["http in"]},{value:"req.params",source:["http in"]},{value:"req.cookies",source:["http in"]},{value:"req.files",source:["http in"]},{value:"requestTimeout",source:["http request"]},{value:"reset",source:["delay","trigger","join","rbe"]},{value:"responseCookies",source:["http request"]},{value:"responseTopic",source:["mqtt"]},{value:"responseUrl",source:["http request"]},{value:"restartTimeout",source:["join"]},{value:"retain",source:["mqtt"]},{value:"schema",source:["json"]},{value:"select",source:["html"]},{value:"statusCode",source:["http response","http request"]},{value:"status",source:["status"]},{value:"status.text",source:["status"]},{value:"status.source",source:["status"]},{value:"status.source.type",source:["status"]},{value:"status.source.id",source:["status"]},{value:"status.source.name",source:["status"]},{value:"target",source:["link call"]},{value:"template",source:["template"]},{value:"toFront",source:["delay"]},{value:"url",source:["http request"]},{value:"userProperties",source:["mqtt"]},{value:"_session",source:["websocket out","tcp out"]}],function(s){var r=[];return i.forEach(e=>{var t,o,n=e.value,e=(e.source||[]).join(","),i=u(n,s),a=u(e,s);(i.found||a.found)&&(t=c("<div>",{style:"display: flex"}),(o=c("<div/>",{class:"red-ui-autoComplete-completion"})).append(p(i)),o.appendTo(t),e&&((o=c("<div>").css({"font-size":"0.8em"})).append(p(a)),o.appendTo(t)),r.push({value:n,label:t,i:(i.found?i:a).index}))}),r.sort(function(e,t){return e.i-t.i}),r})},flow:{value:"flow",label:"flow.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:e,export:t,valueLabel:o,autoComplete:n},global:{value:"global",label:"global.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:e,export:t,valueLabel:o,autoComplete:n},str:{value:"str",label:"string",icon:"red/images/typedInput/az.svg"},num:{value:"num",label:"number",icon:"red/images/typedInput/09.svg",validate:function(e,t){return RED.utils.validateTypedProperty(e,"num",t)}},bool:{value:"bool",label:"boolean",icon:"red/images/typedInput/bool.svg",options:["true","false"]},json:{value:"json",label:"JSON",icon:"red/images/typedInput/json.svg",validate:function(e,t){return RED.utils.validateTypedProperty(e,"json",t)},expand:function(){var o=this,e=this.value();try{e=JSON.stringify(JSON.parse(e),null,4)}catch(e){}RED.editor.editJSON({value:e,stateId:RED.editor.generateViewStateId("typedInput",o,"json"),focus:!0,complete:function(e){var t=e;try{t=JSON.stringify(JSON.parse(e))}catch(e){}o.value(t)}})}},re:{value:"re",label:"regular expression",icon:"red/images/typedInput/re.svg"},date:{value:"date",label:"timestamp",icon:"fa fa-clock-o",options:[{label:"milliseconds since epoch",value:""},{label:"YYYY-MM-DDTHH:mm:ss.sssZ",value:"iso"},{label:"JavaScript Date Object",value:"object"}]},jsonata:{value:"jsonata",label:"expression",icon:"red/images/typedInput/expr.svg",validate:function(e,t){return RED.utils.validateTypedProperty(e,"jsonata",t)},expand:function(){var t=this;RED.editor.editExpression({value:this.value().replace(/\t/g,"\n"),stateId:RED.editor.generateViewStateId("typedInput",t,"jsonata"),focus:!0,complete:function(e){t.value(e.replace(/\n/g,"\t"))}})}},bin:{value:"bin",label:"buffer",icon:"red/images/typedInput/bin.svg",expand:function(){var t=this;RED.editor.editBuffer({value:this.value(),stateId:RED.editor.generateViewStateId("typedInput",t,"bin"),focus:!0,complete:function(e){t.value(e)}})}},env:{value:"env",label:"env variable",icon:"red/images/typedInput/env.svg",autoComplete:function(r){var e=RED.editor.getEditStack();if(0!==e.length){e=e.pop();if(!e)return[];const d=function e(t,o={}){if(f.env=f.env||{},f.env[t.id])return f.env[t.id];let n;return"tab"===t.type||"subflow"===t.type?RED.nodes.eachConfig(function(e){"global-config"===e.type&&(n=e)}):t.g?n=RED.nodes.group(t.g):t.z&&(n=RED.nodes.workspace(t.z)||RED.nodes.subflow(t.z)),n&&e(n,o),t.env&&t.env.forEach(e=>{o[e.name]=t}),f.env[t.id]=o}(e);e=Object.keys(d);const l=[];var t=r.lastIndexOf("${");let a=r,s=!1;return-1<t&&r.lastIndexOf("}")<t&&(a=r.substring(t+2),s=!0),e.forEach(e=>{var t=u(e,a);if(t.found){var o=d[e],n=c("<div>",{style:"display: flex"}),i=c("<div/>",{class:"red-ui-autoComplete-completion"});if(i.append(p(t)),i.appendTo(n),o){i=c("<div>").css({"font-size":"0.8em"});let e;e="global-config"===o.type?RED._("sidebar.context.global"):"group"===o.type?RED.utils.getNodeLabel(o)||RED._("sidebar.info.group")+": "+o.id:RED.utils.getNodeLabel(o)||o.id,i.append(p({match:e})),i.appendTo(n)}l.push({value:s?r+e+"}":e,label:n,i:t.index})}}),l.sort(function(e,t){return e.i-t.i}),l}done([])}},node:{value:"node",label:"node",icon:"red/images/typedInput/target.svg",valueLabel:function(e,t){var o,n,t=RED.nodes.node(t),i=c("<div>",{class:"red-ui-search-result-node"}).css({"margin-top":"2px","margin-left":"3px"}).appendTo(e),e=c("<span>").css({"line-height":"32px","margin-left":"6px"}).appendTo(e);t?(o=RED.utils.getNodeColor(t.type,t._def),n=RED.utils.getNodeIcon(t._def,t),"tab"===t.type&&(o="#C0DEED"),i.css("backgroundColor",o),o=c("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(i),RED.utils.createIconElement(n,o,!0),n=RED.utils.getNodeLabel(t,t.id),e.text(n)):i.css({backgroundColor:"#eee","border-style":"dashed"})},expand:function(){var t=this;RED.tray.hide(),RED.view.selectNodes({single:!0,selected:[t.value()],onselect:function(e){t.value(e.id),RED.tray.show()},oncancel:function(){RED.tray.show()}})}},cred:{value:"cred",label:"credential",icon:"fa fa-lock",inputType:"password",valueLabel:function(t,e){var o,n,i,a=this,s=(t.css("pointer-events","none"),t.css("flex-grow",0),this.elementDiv.hide(),c("<div>").css({position:"absolute",right:"6px",top:"6px","pointer-events":"all"}).appendTo(t)),r=c('<button type="button" class="red-ui-button red-ui-button-small"></button>').css({width:"20px"}).appendTo(s).on("click",function(e){e.preventDefault();var t=a.input[0].selectionStart;"text"===a.input.attr("type")?(a.input.attr("type","password"),d.removeClass("fa-eye-slash").addClass("fa-eye")):(a.input.attr("type","text"),d.removeClass("fa-eye").addClass("fa-eye-slash")),setTimeout(function(){a.input.focus(),a.input[0].setSelectionRange(t,t)},50)}).hide(),d=c('<i class="fa fa-eye"></i>').css("margin-left","-2px").appendTo(r);"__PWRD__"===e?(o=c('<div><i class="fa fa-asterisk"></i><i class="fa fa-asterisk"></i><i class="fa fa-asterisk"></i><i class="fa fa-asterisk"></i><i class="fa fa-asterisk"></i></div>').css({padding:"6px 6px",borderRadius:"4px"}).addClass("red-ui-typedInput-value-label-inactive").appendTo(t),n=c('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-pencil"></i></button>').appendTo(s).on("click",function(e){e.preventDefault(),o.hide(),t.css("background","none"),t.css("pointer-events","none"),a.input.val(""),a.element.val(""),a.elementDiv.show(),n.hide(),i.show(),r.show(),setTimeout(function(){a.input.focus()},50)}),i=c('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-times"></i></button>').css("margin-left","3px").appendTo(s).on("click",function(e){e.preventDefault(),o.show(),t.css("background",""),a.input.val("__PWRD__"),a.element.val("__PWRD__"),a.elementDiv.hide(),n.show(),i.hide(),r.hide(),a.input.attr("type","password"),d.removeClass("fa-eye-slash").addClass("fa-eye")}).hide()):(t.css("background","none"),t.css("pointer-events","none"),this.elementDiv.show(),r.show())}},"conf-types":{value:"conf-types",label:"config",icon:"fa fa-cog",valueLabel:function(e,t){var o=(this._optionsCache||this.typeList.find(e=>e.value===t)?.options||[]).find(e=>e.value===t)||{title:"",name:"",module:""};e.attr("title",o.title),e.text(o.name),e.css("line-height","1.4em"),c("<div></div>").text(o.module).css({color:"var(--red-ui-tertiary-text-color)","font-size":"0.8em","line-height":"1em",opacity:.8}).appendTo(e)},options:function(){var e;return this._optionsCache||(e=RED.nodes.registry.getNodeDefinitions({configOnly:!0,filter:e=>"global-config"!==e.type}).map(e=>{var t=c('<div style="display: flex; flex-direction: column; justify-content: space-between; row-gap: 1px;">'),o=c("<div>").text(e.type),n=c('<div style="font-size: 0.8em; color: var(--red-ui-tertiary-text-color);">').text(e.set.module);return t.append(o,n),{value:e.type,name:e.type,enabled:e.set.enabled??!0,local:e.set.local,title:e.set.id,module:e.set.module,icon:t[0].outerHTML.trim()}}),this._optionsCache=e)}}};function d(e,t){let o=e.options;if("function"==typeof o&&(o=o.call(this)),e.multiple){var n={},i=[];t.split(",").forEach(function(e){e&&(n[e]=!0)});for(s=0;s<o.length;s++){var a="string"==typeof(op=o[s])?op:op.value;n.hasOwnProperty(a)&&(delete n[a],i.push("string"==typeof op?{value:op}:op.value))}return c.isEmptyObject(n)?i:null}for(var s=0;s<o.length;s++){if("string"==typeof(op=o[s])&&op===t)return{value:t};if(op.value===t)return op}}var l=!1;let h;c.widget("nodered.typedInput",{_create:function(){try{if(!l&&RED&&RED._){for(var e in s)s.hasOwnProperty(e)&&(s[e].label=RED._("typedInput.type."+e,{defaultValue:s[e].label}));var t=RED.settings.context.stores;(h=t.map(function(e){return{value:e,label:e,icon:'<i class="red-ui-typedInput-icon fa fa-database"></i>'}}).sort(function(e,t){return e.value===RED.settings.context.default?-1:t.value===RED.settings.context.default?1:e.value.localeCompare(t.value)})).length<2?(s.flow.options=[],s.global.options=[]):(s.flow.options=h,s.global.options=h),s.date.options.forEach(e=>{e.label=RED._("typedInput.date.format."+(e.value||"timestamp"),{defaultValue:e.label})})}l=!0;var o,n,i=this,a=(this.identifier=this.element.attr("id")||"TypedInput-"+Math.floor(100*Math.random()),this.options.debug&&console.log(this.identifier,"Create",{defaultType:this.options.default,value:this.element.val()}),this.disarmClick=!1,this.input=c('<input class="red-ui-typedInput-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-wrap"),this.uiSelect=this.elementDiv.wrap("<div>").parent(),this.element.attr("style"));null!==(o=/width\s*:\s*(calc\s*\(.*\)|\d+(%|px))/i.exec(a))?(this.input.css("width","100%"),this.uiSelect.width(o[1]),this.uiWidth=null):0!==this.uiWidth&&this.uiSelect.width(this.uiWidth),["Right","Left"].forEach(function(e){var t=i.element.css("margin"+e);i.uiSelect.css("margin"+e,t),i.input.css("margin"+e,0)}),["type","placeholder","autocomplete","data-i18n"].forEach(function(e){var t=i.element.attr(e);i.input.attr(e,t)}),this.defaultInputType=this.input.attr("type"),this.oldValues={},this.uiSelect.addClass("red-ui-typedInput-container"),this.element.attr("type","hidden"),!this.options.types&&this.options.type?this.options.types=[this.options.type]:this.options.types=this.options.types||Object.keys(s),this.selectTrigger=c('<button type="button" class="red-ui-typedInput-type-select" tabindex="0"></button>').prependTo(this.uiSelect),c('<i class="red-ui-typedInput-icon fa fa-caret-down"></i>').toggle(1<this.options.types.length).appendTo(this.selectTrigger),this.selectLabel=c('<span class="red-ui-typedInput-type-label"></span>').appendTo(this.selectTrigger),this.valueLabelContainer=c('<div class="red-ui-typedInput-value-label">').appendTo(this.uiSelect),this.types(this.options.types),this.options.typeField?(this.typeField=c(this.options.typeField).hide(),(n=this.typeField.val())&&this.typeMap[n]&&(this.options.default=n)):this.typeField=c("<input>",{type:"hidden"}).appendTo(this.uiSelect),this.input.on("focus",function(){i.uiSelect.addClass("red-ui-typedInput-focus")}),this.input.on("blur",function(){i.uiSelect.removeClass("red-ui-typedInput-focus")}),this.input.on("change",function(){i.validate(),i.element.val(i.value()),i.element.trigger("change",[i.propertyType,i.value()])}),this.input.on("keyup",function(e){i.validate(),i.element.val(i.value()),i.element.trigger("keyup",e)}),this.input.on("paste",function(e){i.validate(),i.element.val(i.value()),i.element.trigger("paste",e)}),this.input.on("keydown",function(e){i.typeMap[i.propertyType].autoComplete||i.input.hasClass("red-ui-autoComplete")||37<=e.keyCode&&e.keyCode<=40&&e.stopPropagation()}),this.selectTrigger.on("click",function(e){e.preventDefault(),e.stopPropagation(),i._showTypeMenu()}),this.selectTrigger.on("keydown",function(e){40===e.keyCode&&i._showTypeMenu(),e.stopPropagation()}).on("focus",function(){i.uiSelect.addClass("red-ui-typedInput-focus")}).on("blur",function(){!1===i.typeMap[i.propertyType].hasValue&&i.uiSelect.removeClass("red-ui-typedInput-focus")}),this.optionSelectTrigger=c('<button type="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-caret-down"></i></span></button>').appendTo(this.uiSelect),this.optionSelectLabel=c('<span class="red-ui-typedInput-option-label"></span>').prependTo(this.optionSelectTrigger),this.optionSelectTrigger.on("click",function(e){e.preventDefault(),e.stopPropagation(),i._showOptionSelectMenu()}).on("keydown",function(e){40===e.keyCode&&i._showOptionSelectMenu(),e.stopPropagation()}).on("blur",function(){i.uiSelect.removeClass("red-ui-typedInput-focus")}).on("focus",function(){i.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionExpandButton=c('<button type="button" tabindex="0" class="red-ui-typedInput-option-expand" style="display:inline-block"></button>').appendTo(this.uiSelect),this.optionExpandButtonIcon=c('<i class="red-ui-typedInput-icon fa fa-ellipsis-h"></i>').appendTo(this.optionExpandButton),this.type(this.typeField.val()||this.options.default||this.typeList[0].value),this.typeChanged=!!this.options.default}catch(e){console.log(e.stack)}},_showTypeMenu:function(){var e;1<this.typeList.length?(this._showMenu(this.menu,this.selectTrigger),e=this.menu.find("[value='"+this.propertyType+"']"),setTimeout(function(){e.trigger("focus")},120)):this.input.trigger("focus")},_showOptionSelectMenu:function(){var e;this.optionMenu&&(this.optionMenu.css({minWidth:this.optionSelectLabel.width()}),this._showMenu(this.optionMenu,this.optionSelectTrigger),e=this.optionValue,null!==this.optionValue&&void 0!==this.optionValue||(e=this.value()),(e=0===(e=this.optionMenu.find("[value='"+e+"']")).length?this.optionMenu.children(":first"):e).trigger("focus"))},_hideMenu:function(e){var t;c(document).off("mousedown.red-ui-typedInput-close-property-select"),e.hide(),e.css({height:"auto"}),e.opts.multiple&&(t=[],e.find('input[type="checkbox"]').each(function(){c(this).prop("checked")&&t.push(c(this).data("value"))}),e.callback(t)),(this.elementDiv.is(":visible")?this.input:this.optionSelectTrigger.is(":visible")?this.optionSelectTrigger:this.selectTrigger).trigger("focus")},_createMenu:function(e,n,i){var a=this,s=c("<div>").addClass("red-ui-typedInput-options red-ui-editor-dialog");return s.opts=n,s.callback=i,e.forEach(function(t){"string"==typeof t&&(t={value:t,label:t});var o,e=c('<a href="#"></a>').attr("value",t.value).appendTo(s);t.label&&e.text(t.label),t.title&&e.prop("title",t.title),t.icon?(0===t.icon.indexOf("<")?c(t.icon):-1!==t.icon.indexOf("/")?c("<i>",{class:"red-ui-typedInput-icon",style:"mask-image: url("+t.icon+"); -webkit-mask-image: url("+t.icon+");"}):c("<i>",{class:"red-ui-typedInput-icon "+t.icon})).prependTo(e):e.css({paddingLeft:"18px"}),t.icon||t.label||e.text(t.value),n.multiple&&(o=c('<input type="checkbox">').css("pointer-events","none").data("value",t.value).prependTo(e).on("mousedown",function(e){e.preventDefault()})),e.on("click",function(e){e.preventDefault(),e.stopPropagation(),n.multiple?o.prop("checked",!o.prop("checked")):(i(t.value),a._hideMenu(s))})}),s.css({display:"none"}),s.appendTo(document.body),s.on("keydown",function(e){40===e.keyCode?(e.preventDefault(),c(this).children(":focus").next().trigger("focus")):38===e.keyCode?(e.preventDefault(),c(this).children(":focus").prev().trigger("focus")):27===e.keyCode&&(e.preventDefault(),a._hideMenu(s)),e.stopPropagation()}),s},_showMenu:function(t,o){var n,i,e,a,s;this.disarmClick?this.disarmClick=!1:(t.opts.multiple&&(n={},this.value().split(",").forEach(function(e){n[e]=!0}),t.find('input[type="checkbox"]').each(function(){c(this).prop("checked",n[c(this).data("value")]||!1)})),i=this,e=o.offset(),s=o.height(),a=t.height(),(s=s+e.top)+a-c(document).scrollTop()>c(window).height()&&(s-=s+a-c(window).height()+5),s<0&&(t.height(a+s),s=0),t.css({top:s+"px",left:e.left+"px"}),t.slideDown(100),this._delay(function(){i.uiSelect.addClass("red-ui-typedInput-focus"),c(document).on("mousedown.red-ui-typedInput-close-property-select",function(e){c(e.target).closest(t).length||i._hideMenu(t),c(e.target).closest(o).length&&(i.disarmClick=!0,e.preventDefault())})}))},_getLabelWidth:function(e,t){var o,n,i,a=e.outerWidth();0===a?(o=c('<div class="red-ui-editor"></div>').css({position:"absolute","white-space":"nowrap",top:-2e3}).appendTo(document.body),n=c('<div class="red-ui-typedInput-container"></div>').appendTo(o),i=e.clone().appendTo(n),setTimeout(function(){a=i.outerWidth(),o.remove(),t(a)},50)):t(a)},_updateOptionSelectLabel:function(e){var t,o=this.typeMap[this.propertyType];this.optionSelectLabel.empty(),o.hasValue?(this.valueLabelContainer.empty(),this.valueLabelContainer.show()):this.valueLabelContainer.hide(),this.typeMap[this.propertyType].valueLabel&&(o.multiple?this.typeMap[this.propertyType].valueLabel.call(this,o.hasValue?this.valueLabelContainer:this.optionSelectLabel,e):this.typeMap[this.propertyType].valueLabel.call(this,o.hasValue?this.valueLabelContainer:this.optionSelectLabel,e.value)),this.typeMap[this.propertyType].valueLabel&&!o.hasValue||(o.multiple?this.optionSelectLabel.text(RED._("typedInput.selected",{count:e.length})):(e.icon?(0===e.icon.indexOf("<")?c(e.icon):-1!==e.icon.indexOf("/")?c("<img>",{src:(t=e.icon,t=/^red\/images\/typedInput\/.+\.png$/.test(t)?t.replace(/.png$/,".svg"):t),style:"height: 18px;"}):c("<i>",{class:"red-ui-typedInput-icon "+e.icon})).prependTo(this.optionSelectLabel):e.label?this.optionSelectLabel.text(e.label):this.optionSelectLabel.text(e.value),o.hasValue&&(this.optionValue=e.value,this.input.trigger("change",[this.propertyType,this.value()]))))},_destroy:function(){this.optionMenu&&this.optionMenu.remove(),this.menu&&this.menu.remove(),this.uiSelect.remove()},types:function(e){var t=this,o=this.type(),n=(this.typeMap={},void 0===this.typeList);this.typeList=e.map(function(e){e="string"==typeof e?s[e]:e;return t.typeMap[e.value]=e}),this.typeList.length<2?(this.selectTrigger.attr("tabindex",-1),this.selectTrigger.on("mousedown.red-ui-typedInput-focus-block",function(e){e.preventDefault()})):(this.selectTrigger.attr("tabindex",0),this.selectTrigger.off("mousedown.red-ui-typedInput-focus-block")),this.selectTrigger.toggleClass("disabled",1===this.typeList.length),this.selectTrigger.find(".fa-caret-down").toggle(1<this.typeList.length),this.menu&&this.menu.remove(),this.menu=this._createMenu(this.typeList,{},function(e){t.type(e)}),o&&!this.typeMap.hasOwnProperty(o)?n||this.type(this.typeList[0]?.value||""):(this.propertyType=null,n||this.type(o)),1!==this.typeList.length||this.typeList[0].icon||this.typeList[0].label&&!1!==this.typeList[0].showLabel?this.selectTrigger.show():this.selectTrigger.hide()},width:function(e){this.uiWidth=e,null!==this.uiWidth&&this.uiSelect.width(this.uiWidth)},value:function(e){var i=this,t=this.typeMap[this.propertyType]||{};if(!arguments.length)return o=this.input.val(),t.export?t.export(o,this.optionValue):o;this.options.debug&&console.log(this.identifier,"----- SET VALUE ------",e);var a=[],o=e;if(t.options){let n=t.options;"function"==typeof t.options&&(n=t.options.call(this)),t.hasValue&&t.parse&&(s=t.parse(e),this.options.debug&&console.log(this.identifier,"new parse",s),e=s.value,o=s.option||s.value);var s=[o];t.multiple&&(a=[],s=o.split(",")),s.forEach(function(e){for(var t=0;t<n.length;t++){var o=n[t];if("string"==typeof o){if(o===e||o===""+e){a.push(i.activeOptions[o]);break}}else if(o.value===e){a.push(o);break}}}),this.options.debug&&console.log(this.identifier,"set value to",e),this.input.val(e),t.multiple?this._updateOptionSelectLabel(a):(0===a.length&&(a=[{value:""}]),this._updateOptionSelectLabel(a[0]))}else this.input.val(e),t.valueLabel&&(this.valueLabelContainer.empty(),t.valueLabel.call(this,this.valueLabelContainer,e));this.input.trigger("change",[this.type(),e])},type:function(e){if(!arguments.length)return this.propertyType||this.options?.default||"";var o=this,n=(this.options.debug&&console.log(this.identifier,"----- SET TYPE -----",e),this.typeMap[e]);if(n&&this.propertyType!==e){var t=this.typeMap[this.propertyType],i=this.input.val();if(this.input.hasClass("red-ui-autoComplete")&&this.input.autoComplete("destroy"),t&&this.typeChanged&&(this.options.debug&&console.log(this.identifier,"typeChanged",{previousType:t,previousValue:i}),t.options&&!0!==n.hasValue||!1===t.hasValue?this.oldValues[t.value]=i:this.oldValues._=i,n.options&&!0!==n.hasValue||!1===n.hasValue?this.oldValues.hasOwnProperty(n.value)?(this.options.debug&&console.log(this.identifier,"restored previous (1)",this.oldValues[n.value]),this.input.val(this.oldValues[n.value])):n.options?(a=d(n,i),this.options.debug&&console.log(this.identifier,{previousValue:i,opt:n,validOptions:a}),(i||""===i)&&a?(this.options.debug&&console.log(this.identifier,"restored previous (2)"),this.input.val(i)):"string"==typeof n.default?(this.options.debug&&console.log(this.identifier,"restored previous (3)",n.default),this.input.val(n.default)):Array.isArray(n.default)?(this.options.debug&&console.log(this.identifier,"restored previous (4)",n.default.join(",")),this.input.val(n.default.join(","))):(this.options.debug&&console.log(this.identifier,"restored previous (5)"),this.input.val(""))):(this.options.debug&&console.log(this.identifier,"restored default/blank",n.default||""),this.input.val(n.default||"")):(this.options.debug&&console.log(this.identifier,"restored old/default/blank"),this.input.val(this.oldValues.hasOwnProperty("_")?this.oldValues._:n.default||"")),t.autoComplete)&&this.input.hasClass("red-ui-autoComplete")&&this.input.autoComplete("destroy"),this.propertyType=e,this.typeChanged=!0,this.typeField&&this.typeField.val(e),this.selectLabel.empty(),n.icon&&!1!==n.showLabel&&(0===n.icon.indexOf("<")?c(n.icon):-1!==n.icon.indexOf("/")?c("<i>",{class:"red-ui-typedInput-icon",style:"mask-image: url("+n.icon+"); -webkit-mask-image: url("+n.icon+"); margin-right: 4px;height: 18px;width:13px"}):c("<i>",{class:"red-ui-typedInput-icon "+n.icon,style:"min-width: 13px; margin-right: 4px;"})).prependTo(this.selectLabel),!1!==n.hasValue&&(!1===n.showLabel||n.icon)||this.selectLabel.text(n.label),n.label?this.selectTrigger.attr("title",n.label):this.selectTrigger.attr("title",""),!1===n.hasValue?this.selectTrigger.addClass("red-ui-typedInput-full-width"):this.selectTrigger.removeClass("red-ui-typedInput-full-width"),this.optionMenu&&(this.optionMenu.remove(),this.optionMenu=null),n.options){let e=n.options;if("function"==typeof e&&(e=n.options.call(this)),this.optionExpandButton&&(this.optionExpandButton.hide(),this.optionExpandButton.shown=!1),this.optionSelectTrigger){if(this.optionSelectTrigger.css({display:"inline-flex"}),n.hasValue?(this.optionSelectTrigger.css({"flex-grow":0}),this.elementDiv.show()):(this.optionSelectTrigger.css({"flex-grow":1}),this.elementDiv.hide()),this.valueLabelContainer.hide(),this.activeOptions={},e.forEach(function(e){"string"==typeof e?o.activeOptions[e]={label:e,value:e}:o.activeOptions[e.value]=e}),o.activeOptions.hasOwnProperty(o.optionValue)||(o.optionValue=null),n.hasValue){var a=this.optionValue||e[0];if(n.parse&&(i="string"==typeof a?{value:a}:a,(t=n.parse(this.input.val(),i)).option&&(a=t.option,this.activeOptions.hasOwnProperty(a)||(t.option=Object.keys(this.activeOptions)[0],a=t.option)),this.input.val(t.value),n.export)&&this.element.val(n.export(t.value,t.option||a)),"string"==typeof a?(this.optionValue=a,(a=this.activeOptions.hasOwnProperty(a)?a:Object.keys(this.activeOptions)[0])?this._updateOptionSelectLabel(this.activeOptions[a]):this.optionSelectTrigger.hide()):a?(this.options.debug&&console.log(this.identifier,"HERE",{optionValue:a.value}),this.optionValue=a.value,this._updateOptionSelectLabel(a)):this.optionSelectTrigger.hide(),n.autoComplete){let e=n.autoComplete;0===e.length&&(e=n.autoComplete.call(this)),this.input.autoComplete({search:e,minLength:0})}}else{i=d(n,this.input.val());n.multiple?(i||(i=(n.default||[]).map(function(e){return"string"==typeof e?e:e.value}),this.value(i.join(","))),o._updateOptionSelectLabel(i)):i?o._updateOptionSelectLabel(i):"string"==typeof(t=e[0]||{value:""})?(this.value(t),o._updateOptionSelectLabel({value:t})):(this.value(t.value),o._updateOptionSelectLabel(t))}this.optionMenu=this._createMenu(e,n,function(e){n.multiple?(o._updateOptionSelectLabel(e),n.hasValue||o.value(e.join(","))):(o._updateOptionSelectLabel(o.activeOptions[e]),n.hasValue||o.value(o.activeOptions[e].value))})}}else{if(this.optionSelectTrigger&&this.optionSelectTrigger.hide(),n.inputType?this.input.attr("type",n.inputType):this.input.attr("type",this.defaultInputType),!1===n.hasValue)this.elementDiv.hide(),this.valueLabelContainer.hide();else if(n.valueLabel)this.valueLabelContainer.css("pointer-events",""),this.valueLabelContainer.css("flex-grow",1),this.valueLabelContainer.css("overflow","hidden"),this.valueLabelContainer.show(),this.valueLabelContainer.empty(),this.elementDiv.hide(),n.valueLabel.call(this,this.valueLabelContainer,this.input.val());else if(this.valueLabelContainer.hide(),this.elementDiv.show(),n.autoComplete){let e=n.autoComplete;0===e.length&&(e=n.autoComplete.call(this)),this.input.autoComplete({search:e,minLength:0})}this.optionExpandButton&&(n.expand?(n.expand.icon?this.optionExpandButtonIcon.removeClass().addClass("red-ui-typedInput-icon fa "+n.expand.icon):this.optionExpandButtonIcon.removeClass().addClass("red-ui-typedInput-icon fa fa-ellipsis-h"),this.optionExpandButton.shown=!0,this.optionExpandButton.show(),this.optionExpandButton.off("click"),this.optionExpandButton.on("click",function(e){var t;e.preventDefault(),"function"==typeof n.expand?n.expand.call(o):(e=c("<div>"),t=n.expand.content.call(o,e),(e=RED.popover.panel(e)).container.css({width:o.valueLabelContainer.width()}),n.expand.minWidth&&e.container.css({minWidth:n.expand.minWidth+"px"}),e.show({target:o.optionExpandButton,onclose:t.onclose,align:"left"}))})):(this.optionExpandButton.shown=!1,this.optionExpandButton.hide()))}this._trigger("typechange",null,this.propertyType),this.input.trigger("change",[this.propertyType,this.value()])}},validate:function(e){let t=!0;var o=this.value(),n=this.type();if(this.typeMap[n]&&this.typeMap[n].validate&&(i=this.typeMap[n].validate,t="function"==typeof i?i(o,{}):(t=i.test(o))||RED._("validator.errors.invalid-regexp")),"string"!=typeof t&&t){this.element.removeClass("input-error"),this.uiSelect.removeClass("input-error");var i=this.element.data("tooltip");i&&(this.element.data("tooltip",null),i.delete())}else if(this.element.addClass("input-error"),this.uiSelect.addClass("input-error"),"string"==typeof t){let e=this.element.data("tooltip");e?e.setContent(t):(o=this.typeMap[n]?.options?this.optionSelectLabel:this.elementDiv,e=RED.popover.tooltip(o,t),this.element.data("tooltip",e))}return(!0===e?.returnErrorMessage||"string"!=typeof t)&&t},show:function(){this.uiSelect.show()},hide:function(){this.uiSelect.hide()},disable:function(e){void 0===e||e?this.uiSelect.attr("disabled","disabled"):this.uiSelect.attr("disabled",null)},enable:function(){this.uiSelect.attr("disabled",null)},disabled:function(){return"disabled"===this.uiSelect.attr("disabled")},focus:function(){this.input.focus()}})}(jQuery),function(r){r.widget("nodered.toggleButton",{_create:function(){var t=this,o=!1,e=(this.options.hasOwnProperty("invertState")&&(o=this.options.invertState),this.options.baseClass||"red-ui-button"),n=this.options.hasOwnProperty("enabledIcon")?this.options.enabledIcon:"fa-check-square-o",i=this.options.hasOwnProperty("disabledIcon")?this.options.disabledIcon:"fa-square-o",a=this.options.hasOwnProperty("enabledLabel")?this.options.enabledLabel:RED._("editor:workspace.enabled"),s=this.options.hasOwnProperty("disabledLabel")?this.options.disabledLabel:RED._("editor:workspace.disabled"),e=(this.element.css("display","none"),this.element.on("focus",function(){t.button.focus()}),this.button=r('<button type="button" class="red-ui-toggleButton '+e+' toggle single"></button>'),(a||s)&&(this.buttonLabel=r("<span>").appendTo(this.button).css("margin-left","5px")),this.options.class&&this.button.addClass(this.options.class),this.element.after(this.button),n&&i&&(this.buttonIcon=r('<i class="fa"></i>').prependTo(this.button)),this.button.addClass("selected"),this.buttonIcon&&this.buttonIcon.addClass(n),this.buttonLabel&&this.buttonLabel.text(a),this.button.width());this.button.removeClass("selected"),this.buttonIcon&&(this.buttonIcon.removeClass(n),t.buttonIcon.addClass(i)),this.buttonLabel&&t.buttonLabel.text(s),e=Math.max(e,this.button.width()),this.buttonIcon&&this.buttonIcon.removeClass(i),0<e&&this.button.width(Math.ceil(e)),this.button.on("click",function(e){e.stopPropagation(),t.state?t.element.prop("checked",o):t.element.prop("checked",!o),t.element.trigger("change")}),this.element.on("change",function(e){r(this).prop("checked")!==o?(t.button.addClass("selected"),t.state=!0,t.buttonIcon&&(t.buttonIcon.addClass(n),t.buttonIcon.removeClass(i)),t.buttonLabel&&t.buttonLabel.text(a)):(t.button.removeClass("selected"),t.state=!1,t.buttonIcon&&(t.buttonIcon.addClass(i),t.buttonIcon.removeClass(n)),t.buttonLabel&&t.buttonLabel.text(s))}),this.element.trigger("change")}})}(jQuery),jQuery.widget("nodered.autoComplete",{_create:function(){const o=this;this.completionMenuShown=!1,this.options.minLength=function(e,t,o,n){if(null==e)return t||0;o=null==o?Number.NEGATIVE_INFINITY:o,n=null==n?Number.POSITIVE_INFINITY:n;let i=parseInt(e);(isNaN(i)||i<o||i>n)&&(i=t||0);return i}(this.options.minLength,1,0),this.options.search=this.options.search||function(){return[]},this.element.addClass("red-ui-autoComplete"),this.element.on("keydown.red-ui-autoComplete",function(e){var t;13!==e.keyCode&&9!==e.keyCode||!o.completionMenuShown||(t=o.menu.options(),o.element.val(t[0].value),o.menu.hide(),e.preventDefault())}),this.element.on("keyup.red-ui-autoComplete",function(e){13!==e.keyCode&&9!==e.keyCode&&27!==e.keyCode&&(8!==e.keyCode&&46!==e.keyCode||o.completionMenuShown)&&o._updateCompletions(this.value)})},_showCompletionMenu:function(e){this.completionMenuShown||(this.menu=RED.popover.menu({tabSelect:!0,width:Math.max(300,this.element.width()),maxHeight:200,class:"red-ui-autoComplete-container",options:e,onselect:e=>{this.element.val(e.value),this.element.focus(),this.element.trigger("change")},onclose:()=>{this.completionMenuShown=!1,delete this.menu,this.element.focus()}}),this.menu.show({target:this.element}),this.completionMenuShown=!0)},_updateCompletions:function(e){const o=this;if(e.trim().length<this.options.minLength)this.completionMenuShown&&this.menu.hide();else if(2===this.options.search.length){const n=1+Math.floor(1e4*Math.random());this.pendingRequest=n,this.options.search(e,function(e){t(e,n)})}else t(this.options.search(e));function t(e,t){t&&t!==o.pendingRequest||(e&&0!==e.length?o.completionMenuShown?o.menu.options(e):o._showCompletionMenu(e):o.completionMenuShown&&o.menu.hide())}},_destroy:function(){this.element.removeClass("red-ui-autoComplete"),this.element.off("keydown.red-ui-autoComplete"),this.element.off("keyup.red-ui-autoComplete"),this.completionMenuShown&&this.menu.hide()}}),RED.actions=function(){var a={};function s(e){var t,o,n=a[e];return n?(n.label||(t=(t=(t=n.options)?t.label:void 0)||"action-list."+e.replace(/^.*:/,""),(o=RED._(t))===t&&(o=e.replace(/(^.+:([a-z]))|(-([a-z]))/g,function(){return 0===arguments[5]?arguments[2].toUpperCase():" "+arguments[4].toUpperCase()})),n.label=o),n.label):""}return{add:function(e,t,o){if("function"!=typeof t)throw new Error("Action handler not a function");if(a[e])throw new Error("Cannot override existing action");a[e]={handler:t,options:o}},remove:function(e){delete a[e]},get:function(e){return a[e].handler},getLabel:s,invoke:function(){var e=Array.prototype.slice.call(arguments),t=e.shift();a.hasOwnProperty(t)&&a[t].handler.apply(null,e)},list:function(){var i=[];return Object.keys(a).forEach(function(e){var t=a[e],o=RED.keyboard.getShortcut(e),n=!1,n=o?o.user:!!RED.keyboard.getUserShortcut(e);t.label||(t.label=s(e)),i.push({id:e,scope:o?o.scope:void 0,key:o?o.key:void 0,user:n,label:t.label,options:t.options})}),i}}}(),RED.deploy=function(){var d,t={full:{img:"red/images/deploy-full-o.svg"},nodes:{img:"red/images/deploy-nodes-o.svg"},flows:{img:"red/images/deploy-flows-o.svg"}},u={unknown:!1,unusedConfig:!1,invalid:!1},o="full",p=!1,l=null;function i(e){o=e,$("#red-ui-header-button-deploy-icon").attr("src",t[e].img)}function a(){"read"===RED.settings.user?.permissions?($(".red-ui-deploy-button-group").addClass("readOnly"),$("#red-ui-header-button-deploy").addClass("disabled")):($(".red-ui-deploy-button-group").removeClass("readOnly"),RED.nodes.dirty()&&$("#red-ui-header-button-deploy").removeClass("disabled"))}function f(e){var t="",o=(e.z&&(t=(o=RED.nodes.workspace(e.z))?o.label:(o=RED.nodes.subflow(e.z)).name),RED.utils.getNodeLabel(e,e.id));return{tab:t,type:e.type,label:o}}function h(e,t){return e.tab<t.tab?-1:e.tab>t.tab?1:e.type<t.type?-1:e.type>t.type?1:e.name<t.name?-1:e.name>t.name?1:0}function g(e,t){var o=$("<div>"),n=($('<p data-i18n="deploy.confirm.conflict"></p>').appendTo(o),$('<div class="red-ui-deploy-dialog-confirm-conflict-row"><img src="red/images/spin.svg"/><div data-i18n="deploy.confirm.conflictChecking"></div></div>').appendTo(o)),i=$('<div class="red-ui-deploy-dialog-confirm-conflict-row"><i class="fa fa-check"></i><div data-i18n="deploy.confirm.conflictAutoMerge"></div></div>').hide().appendTo(o),a=$('<div class="red-ui-deploy-dialog-confirm-conflict-row"><i class="fa fa-exclamation"></i><div data-i18n="deploy.confirm.conflictManualMerge"></div></div>').hide().appendTo(o),s=(o.i18n(),l=null,[{text:RED._("common.label.cancel"),click:function(){r.close()}},{id:"red-ui-deploy-dialog-confirm-deploy-review",text:RED._("deploy.confirm.button.review"),class:"primary disabled",click:function(){$("#red-ui-deploy-dialog-confirm-deploy-review").hasClass("disabled")||(RED.diff.showRemoteDiff(null,{onmerge:function(){d.close()}}),r.close())}},{id:"red-ui-deploy-dialog-confirm-deploy-merge",text:RED._("deploy.confirm.button.merge"),class:"primary disabled",click:function(){$("#red-ui-deploy-dialog-confirm-deploy-merge").hasClass("disabled")||(RED.diff.mergeDiff(l),r.close(),d.close())}}]),r=(t&&s.push({id:"red-ui-deploy-dialog-confirm-deploy-overwrite",text:RED._("deploy.confirm.button.overwrite"),class:"primary",click:function(){D(!0,t),r.close(),d.close()}}),RED.notify(o,{modal:!0,fixed:!0,width:600,buttons:s}));RED.diff.getRemoteDiff(function(e){l=e,n.hide(),0===Object.keys(e.conflicts).length?(i.show(),$("#red-ui-deploy-dialog-confirm-deploy-merge").removeClass("disabled")):a.show(),$("#red-ui-deploy-dialog-confirm-deploy-review").removeClass("disabled")})}function m(e){var t;return 5<e.length&&(t=e.length-5,(e=e.slice(0,5)).push(RED._("deploy.confirm.plusNMore",{count:t}))),e}function v(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function b(){$("#red-ui-header-shade").show(),$("#red-ui-editor-shade").show(),$("#red-ui-palette-shade").show(),$("#red-ui-sidebar-shade").show()}function y(){$("#red-ui-header-shade").hide(),$("#red-ui-editor-shade").hide(),$("#red-ui-palette-shade").hide(),$("#red-ui-sidebar-shade").hide()}function w(){$(".red-ui-deploy-button-content").css("opacity",0),$(".red-ui-deploy-button-spinner").show(),$("#red-ui-header-button-deploy").addClass("disabled")}function E(){$(".red-ui-deploy-button-content").css("opacity",1),$(".red-ui-deploy-button-spinner").hide()}function s(e){const t=Date.now(),n=!$("#red-ui-header-button-deploy").hasClass("disabled");p=!0,w(),b(),$.ajax({url:"flows/state",type:"POST",data:{state:e}}).done(function(e,t,o){n&&$("#red-ui-header-button-deploy").removeClass("disabled")}).fail(function(e,t,o){if(n&&$("#red-ui-header-button-deploy").removeClass("disabled"),401===e.status)RED.notify(RED._("notification.error",{message:RED._("user.notAuthorized")}),"error");else if(e.responseText){o={message:o?o+"":""};try{o.message=JSON.parse(e.responseText).message}finally{o.message=o.message||e.responseText}RED.notify(RED._("notification.error",o),"error")}else RED.notify(RED._("notification.error",{message:RED._("deploy.errors.noResponse")}),"error")}).always(function(){var e=Math.max(0,300-(Date.now()-t));setTimeout(function(){E(),y(),p=!1},e)})}function r(){var t=Date.now(),n=!$("#red-ui-header-button-deploy").hasClass("disabled");p=!0,w(),$.ajax({url:"flows",type:"POST",headers:{"Node-RED-Deployment-Type":"reload"}}).done(function(e,t,o){n&&$("#red-ui-header-button-deploy").removeClass("disabled"),RED.notify("<p>"+RED._("deploy.successfulRestart")+"</p>","success")}).fail(function(e,t,o){n&&$("#red-ui-header-button-deploy").removeClass("disabled"),401===e.status?RED.notify(RED._("deploy.deployFailed",{message:RED._("user.notAuthorized")}),"error"):409===e.status?g(nns,!0):e.responseText?RED.notify(RED._("deploy.deployFailed",{message:e.responseText}),"error"):RED.notify(RED._("deploy.deployFailed",{message:RED._("deploy.errors.noResponse")}),"error")}).always(function(){var e=Math.max(0,300-(Date.now()-t));setTimeout(function(){E(),p=!1},e)})}function D(i,e){if(!$("#red-ui-header-button-deploy").hasClass("disabled")&&!$("#red-ui-header-shade").is(":visible"))if(RED.user.hasPermission("flows.write")){let a=!1;if(!i){var s;const d=[],l=[],c=(RED.nodes.eachConfig(function(e){void 0===e.valid&&RED.editor.validateNode(e),e.valid||e.d||l.push(f(e)),"unknown"===e.type&&-1==d.indexOf(e.name)&&d.push(e.name)}),RED.nodes.eachNode(function(e){e.valid||e.d||l.push(f(e)),"unknown"===e.type&&-1==d.indexOf(e.name)&&d.push(e.name)}),i=0<d.length,s=0<l.length,[]);RED.nodes.eachConfig(function(e){!1!==e._def.hasUsers&&0===e.users.length&&(c.push(f(e)),a=!0)});let e=!1,t,o=[],n;if(i&&!u.unknown?(e=!0,t="<p>"+RED._("deploy.confirm.unknown")+'</p><ul class="red-ui-deploy-dialog-confirm-list"><li>'+m(d).map(v).join("</li><li>")+"</li></ul><p>"+RED._("deploy.confirm.confirm")+"</p>",o=[{text:RED._("deploy.unknownNodesButton"),class:"pull-left",click:function(){n.close(),RED.actions.invoke("core:search","type:unknown ")}},{id:"red-ui-deploy-dialog-confirm-deploy-deploy",text:RED._("deploy.confirm.button.confirm"),class:"primary",click:function(){D(!0),n.close()}}]):s&&!u.invalid&&(e=!0,l.sort(h),t="<p>"+RED._("deploy.confirm.improperlyConfigured")+'</p><ul class="red-ui-deploy-dialog-confirm-list"><li>'+m(l.map(function(e){return v((e.tab?"["+e.tab+"] ":"")+e.label+" ("+e.type+")")})).join("</li><li>")+"</li></ul><p>"+RED._("deploy.confirm.confirm")+"</p>",o=[{text:RED._("deploy.invalidNodesButton"),class:"pull-left",click:function(){n.close(),RED.actions.invoke("core:search","is:invalid ")}},{id:"red-ui-deploy-dialog-confirm-deploy-deploy",text:RED._("deploy.confirm.button.confirm"),class:"primary",click:function(){D(!0),n.close()}}]),e)return o.unshift({text:RED._("common.label.cancel"),click:function(){n.close()}}),void(n=RED.notify(t,{modal:!0,fixed:!0,buttons:o}))}const r=RED.nodes.createCompleteNodeSet(),t=Date.now();w();i={flows:r};e||(i.rev=RED.nodes.version()),p=!0,b(),$.ajax({url:"flows",type:"POST",data:JSON.stringify(i),contentType:"application/json; charset=utf-8",headers:{"Node-RED-Deployment-Type":o}}).done(function(t,e,o){if(RED.nodes.dirty(!1),RED.nodes.version(t.rev),RED.nodes.originalFlow(r),a){let e;t={type:"success",fixed:!1,timeout:6e3,buttons:[{text:RED._("deploy.unusedConfigNodesButton"),class:"pull-left",click:function(){e.close(),RED.actions.invoke("core:search","is:config is:unused ")}},{text:RED._("common.label.close"),class:"primary",click:function(){D(!0),e.close()}}]};e=RED.notify("<p>"+RED._("deploy.successfulDeploy")+"</p><p>"+RED._("deploy.unusedConfigNodes")+"</p>",t)}else RED.notify("<p>"+RED._("deploy.successfulDeploy")+"</p>","success");const n=new Set;function i(e){var e=e&&(RED.nodes.workspace(e)||RED.nodes.subflow(e)||null),t=!!e&&e.locked;e&&t&&(e.locked=!1,n.add(e))}RED.nodes.eachNode(function(e){i(e.z),e.changed&&(e.dirty=!0,e.changed=!1),e.moved&&(e.dirty=!0,e.moved=!1),e.credentials&&delete e.credentials}),RED.nodes.eachGroup(function(e){i(e.z),e.changed&&(e.dirty=!0,e.changed=!1),e.moved&&(e.dirty=!0,e.moved=!1)}),RED.nodes.eachJunction(function(e){i(e.z),e.changed&&(e.dirty=!0,e.changed=!1),e.moved&&(e.dirty=!0,e.moved=!1)}),RED.nodes.eachConfig(function(e){e.z&&i(e.z),e.changed=!1,e.credentials&&delete e.credentials}),RED.nodes.eachSubflow(function(e){e.changed&&(e.changed=!1,RED.events.emit("subflows:change",e))}),RED.nodes.eachWorkspace(function(e){(e.changed||e.added)&&(i(e.id),e.changed=!1,delete e.added,n.has(e)&&(e.locked=!0,n.delete(e)),RED.events.emit("flows:change",e))}),n.forEach(e=>{e.locked=!0}),RED.history.markAllDirty(),RED.view.redraw(),RED.sidebar.config.refresh(),RED.events.emit("deploy")}).fail(function(e,t,o){RED.nodes.dirty(!0),$("#red-ui-header-button-deploy").removeClass("disabled"),401===e.status?RED.notify(RED._("deploy.deployFailed",{message:RED._("user.notAuthorized")}),"error"):409===e.status?g(r,!0):e.responseText?RED.notify(RED._("deploy.deployFailed",{message:e.responseText}),"error"):RED.notify(RED._("deploy.deployFailed",{message:RED._("deploy.errors.noResponse")}),"error")}).always(function(){var e=Math.max(0,300-(Date.now()-t));setTimeout(function(){p=!1,E(),y()},e)})}else RED.notify(RED._("user.errors.deploy"),"error")}return{init:function(e){var t,o=(e=e||{}).type||"default",n=e.label||RED._("deploy.deploy");"default"==o?($('<li><span class="red-ui-deploy-button-group button-group"><a id="red-ui-header-button-deploy" class="red-ui-deploy-button disabled" href="#"><span class="red-ui-deploy-button-content"><img id="red-ui-header-button-deploy-icon" src="red/images/deploy-full-o.svg"> <span>'+n+'</span></span><span class="red-ui-deploy-button-spinner hide"><img src="red/images/spin.svg"/></span></a><a id="red-ui-header-button-deploy-options" class="red-ui-deploy-button" href="#"><i class="fa fa-caret-down"></i><i class="fa fa-lock"></i></a></span></li>').prependTo(".red-ui-header-toolbar"),t=[{id:"deploymenu-item-full",toggle:"deploy-type",icon:"red/images/deploy-full.svg",label:RED._("deploy.full"),sublabel:RED._("deploy.fullDesc"),selected:!0,onselect:function(e){e&&i("full")}},{id:"deploymenu-item-flow",toggle:"deploy-type",icon:"red/images/deploy-flows.svg",label:RED._("deploy.modifiedFlows"),sublabel:RED._("deploy.modifiedFlowsDesc"),onselect:function(e){e&&i("flows")}},{id:"deploymenu-item-node",toggle:"deploy-type",icon:"red/images/deploy-nodes.svg",label:RED._("deploy.modifiedNodes"),sublabel:RED._("deploy.modifiedNodesDesc"),onselect:function(e){e&&i("nodes")}},null],RED.settings.runtimeState&&!0===RED.settings.runtimeState.ui&&(t.push({id:"deploymenu-item-runtime-start",icon:"red/images/start.svg",label:RED._("deploy.startFlows"),sublabel:RED._("deploy.startFlowsDesc"),onselect:"core:start-flows",visible:!1}),t.push({id:"deploymenu-item-runtime-stop",icon:"red/images/stop.svg",label:RED._("deploy.stopFlows"),sublabel:RED._("deploy.stopFlowsDesc"),onselect:"core:stop-flows",visible:!1})),t.push({id:"deploymenu-item-reload",icon:"red/images/deploy-reload.svg",label:RED._("deploy.restartFlows"),sublabel:RED._("deploy.restartFlowsDesc"),onselect:"core:restart-flows"}),RED.menu.init({id:"red-ui-header-button-deploy-options",options:t})):"simple"==o&&(t="red/images/deploy-full-o.svg",e.hasOwnProperty("icon")&&(t=e.icon),$('<li><span class="red-ui-deploy-button-group button-group"><a id="red-ui-header-button-deploy" class="red-ui-deploy-button disabled" href="#"><span class="red-ui-deploy-button-content">'+(t?'<img id="red-ui-header-button-deploy-icon" src="'+t+'"> ':"")+"<span>"+n+'</span></span><span class="red-ui-deploy-button-spinner hide"><img src="red/images/spin.svg"/></span></a></span></li>').prependTo(".red-ui-header-toolbar")),$("#red-ui-header-button-deploy").on("click",function(e){e.preventDefault(),D()}),RED.actions.add("core:deploy-flows",D),"default"===o&&(RED.settings.runtimeState&&!0===RED.settings.runtimeState.ui&&(RED.actions.add("core:stop-flows",function(){s("stop")}),RED.actions.add("core:start-flows",function(){s("start")})),RED.actions.add("core:restart-flows",r),RED.actions.add("core:set-deploy-type-to-full",function(){RED.menu.setSelected("deploymenu-item-full",!0)}),RED.actions.add("core:set-deploy-type-to-modified-flows",function(){RED.menu.setSelected("deploymenu-item-flow",!0)}),RED.actions.add("core:set-deploy-type-to-modified-nodes",function(){RED.menu.setSelected("deploymenu-item-node",!0)})),window.addEventListener("beforeunload",function(e){RED.nodes.dirty()&&(e.preventDefault(),e.stopImmediatePropagation(),e.returnValue=RED._("deploy.confirm.undeployedChanges"))}),RED.events.on("workspace:dirty",function(e){"read"!==RED.settings.user?.permissions&&(e.dirty?$("#red-ui-header-button-deploy").removeClass("disabled"):$("#red-ui-header-button-deploy").addClass("disabled"))}),RED.comms.subscribe("notification/runtime-deploy",function(e,t){var o=RED.nodes.version();null===o||p||o===t.revision||(d?.hidden&&!d?.closed?d.showNotification():(o=$("<p>").text(RED._("deploy.confirm.backgroundUpdate")),t={id:"background-update",type:"compact",modal:!1,fixed:!0,timeout:1e4,buttons:[{text:RED._("deploy.confirm.button.review"),class:"primary",click:function(){d.hideNotification(),g(RED.nodes.createCompleteNodeSet(),!1)}}]},!d||d.closed?d=RED.notify(o,t):d.update(o,t)))}),a(),RED.events.on("login",a)},setDeployInflight:function(e){p=e}}}(),RED.diagnostics={init:function(){!1!==RED.settings.get("diagnostics.ui",!0)&&RED.actions.add("core:show-system-info",function(){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"diagnostics",success:function(e){var t=JSON.stringify(e||{},"",4);"{}"===t&&(t="{\n\n}"),RED.editor.editJSON({title:RED._("diagnostics.title"),value:t,requireValid:!0,readOnly:!0,toolbarButtons:[{text:RED._("clipboard.export.copy"),icon:"fa fa-copy",click:function(){RED.clipboard.copyText(t,$(this),RED._("clipboard.copyMessageValue"))}},{text:RED._("clipboard.download"),icon:"fa fa-download",click:function(){var e=document.createElement("a");e.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),e.setAttribute("download","system-info.json"),e.style.display="none",document.body.appendChild(e),e.click(),document.body.removeChild(e)}}]})},error:function(e,t,o){console.log("Unexpected error loading system info:",e.status,t,o)}})})}},RED.diff=function(){var s=!1;function p(e,t,o){var D,n,e=$('<div class="red-ui-diff-panel"></div>').appendTo(e),i=$('<div class="red-ui-diff-panel-headers"></div>').appendTo(e),a=("merge"===o.mode&&e.addClass("red-ui-diff-panel-merge"),n=e,D=t,(n=$('<ol class="red-ui-diff-list"></ol>').appendTo(n)).editableList({addButton:!1,height:"auto",scrollOnAdd:!1,addItem:function(e,t,o){var n,i,a,s,r,d=o.diff,l=o.remoteDiff,c=o.tab.n,u=o.def,p=D.conflicts,f=$("<div>",{class:"red-ui-diff-list-flow"}).appendTo(e),h=(f.addClass("collapsed"),$("<div>",{class:"red-ui-diff-list-flow-title"}).appendTo(f)),g=$("<div>").appendTo(f),m=$("<div>",{class:"red-ui-diff-list-node-cell"}).appendTo(h),v=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-local"}).appendTo(h),b=(l&&(n=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-remote"}).appendTo(h)),$('<span class="red-ui-diff-list-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(m),R(c,u).appendTo(m),(o.newTab||o.tab).n),m=$("<span>",{class:"red-ui-diff-list-flow-title-meta"}).appendTo(m),y=("tab"===b.type?m.text(b.label||b.id):"subflow"===c.type?m.text(b.name||b.id):m.text(RED._("diff.globalNodes")),{local:{addedCount:0,deletedCount:0,changedCount:0,movedCount:0,unchangedCount:0},remote:{addedCount:0,deletedCount:0,changedCount:0,movedCount:0,unchangedCount:0},conflicts:0}),w=((o.newTab||o.remoteTab)&&(b={node:d.newConfig.all[c.id],all:d.newConfig.all,diff:d},l&&(a={node:l.newConfig.all[c.id]||null,all:l.newConfig.all,diff:l}),void 0!==c.type)&&(m=$("<div>",{class:"red-ui-diff-list-node red-ui-diff-list-node-props collapsed"}).appendTo(g),w=$("<div>",{class:"red-ui-diff-list-node-header"}).appendTo(m),i=$("<div>",{class:"red-ui-diff-list-node-cell"}).appendTo(w),s=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-local"}).appendTo(w),0,d.newConfig.all[c.id]?(d.added[c.id]?(s.addClass("red-ui-diff-status-added"),$('<span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>')):d.changed[c.id]?(s.addClass("red-ui-diff-status-changed"),$('<span class="red-ui-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>')):(s.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>'))).appendTo(s):s.addClass("red-ui-diff-empty"),l&&(r=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-remote"}).appendTo(w),l.newConfig.all[c.id]?(l.added[c.id]?(r.addClass("red-ui-diff-status-added"),$('<span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>')):l.changed[c.id]?(r.addClass("red-ui-diff-status-changed"),$('<span class="red-ui-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>')):(r.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>'))).appendTo(r):(r.addClass("red-ui-diff-empty"),l.deleted[c.id]&&0)),$('<span class="red-ui-diff-list-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(i),$("<span>").text(RED._("diff.flowProperties")).appendTo(i),w.on("click",function(e){e.preventDefault(),$(this).parent().toggleClass("collapsed")}),_(u,c,b,a).appendTo(m),i="",p[c.id]?(y.conflicts++,s.hasClass("red-ui-diff-empty")||$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(s),r.hasClass("red-ui-diff-empty")||$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(r),m.addClass("red-ui-diff-list-node-conflict")):i=D.resolutions[c.id],k(c,m,s,r,!0,!p[c.id],i,D)),0),u=0,E={};o.tab.nodes.forEach(function(e){E[e.id]=!0,x(e,y,D).appendTo(g)}),o.newTab&&(w=o.newTab.nodes.length,o.newTab.nodes.forEach(function(e){E[e.id]||(E[e.id]=!0,x(e,y,D).appendTo(g))})),o.remoteTab&&(u=o.remoteTab.nodes.length,o.remoteTab.nodes.forEach(function(e){E[e.id]||x(e,y,D).appendTo(g)})),h.on("click",function(e){h.parent().toggleClass("collapsed"),$(this).parent().hasClass("collapsed")&&($(this).parent().find(".red-ui-diff-list-node").addClass("collapsed"),$(this).parent().find(".red-ui-debug-msg-element").addClass("collapsed"))}),d.deleted[c.id]?$('<span class="red-ui-diff-status-deleted"><span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.flowDeleted"></span></span></span>').appendTo(v):o.newTab?d.added[c.id]?$('<span class="red-ui-diff-status-added"><span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.flowAdded"></span></span></span>').appendTo(v):(c.id&&(d.changed[c.id]?y.local.changedCount++:y.local.unchangedCount++),b=$("<span>",{class:"red-ui-diff-list-flow-stats"}).appendTo(v),$('<span class="red-ui-diff-status"></span>').text(RED._("diff.nodeCount",{count:w})).appendTo(b),0<y.conflicts+y.local.addedCount+y.local.changedCount+y.local.movedCount+y.local.deletedCount&&($('<span class="red-ui-diff-status"> [ </span>').appendTo(b),0<y.conflicts&&$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i> '+y.conflicts+"</span></span>").appendTo(b),0<y.local.addedCount&&(a=$('<span class="red-ui-diff-status-added"><span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> '+y.local.addedCount+"</span></span>").appendTo(b),RED.popover.tooltip(a,RED._("diff.type.added"))),0<y.local.changedCount&&(m=$('<span class="red-ui-diff-status-changed"><span class="red-ui-diff-status"><i class="fa fa-square"></i> '+y.local.changedCount+"</span></span>").appendTo(b),RED.popover.tooltip(m,RED._("diff.type.changed"))),0<y.local.movedCount&&(s=$('<span class="red-ui-diff-status-moved"><span class="red-ui-diff-status"><i class="fa fa-square"></i> '+y.local.movedCount+"</span></span>").appendTo(b),RED.popover.tooltip(s,RED._("diff.type.moved"))),0<y.local.deletedCount&&(r=$('<span class="red-ui-diff-status-deleted"><span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> '+y.local.deletedCount+"</span></span>").appendTo(b),RED.popover.tooltip(r,RED._("diff.type.deleted"))),$('<span class="red-ui-diff-status"> ] </span>').appendTo(b))):v.addClass("red-ui-diff-empty"),l&&(l.deleted[c.id]?$('<span class="red-ui-diff-status-deleted"><span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.flowDeleted"></span></span></span>').appendTo(n):o.remoteTab?l.added[c.id]?$('<span class="red-ui-diff-status-added"><span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.flowAdded"></span></span></span>').appendTo(n):(c.id&&(l.changed[c.id]?y.remote.changedCount++:y.remote.unchangedCount++),p=$("<span>",{class:"red-ui-diff-list-flow-stats"}).appendTo(n),$('<span class="red-ui-diff-status"></span>').text(RED._("diff.nodeCount",{count:u})).appendTo(p),0<y.conflicts+y.remote.addedCount+y.remote.changedCount+y.remote.movedCount+y.remote.deletedCount&&($('<span class="red-ui-diff-status"> [ </span>').appendTo(p),0<y.conflicts&&$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i> '+y.conflicts+"</span></span>").appendTo(p),0<y.remote.addedCount&&(w=$('<span class="red-ui-diff-status-added"><span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> '+y.remote.addedCount+"</span></span>").appendTo(p),RED.popover.tooltip(w,RED._("diff.type.added"))),0<y.remote.changedCount&&(a=$('<span class="red-ui-diff-status-changed"><span class="red-ui-diff-status"><i class="fa fa-square"></i> '+y.remote.changedCount+"</span></span>").appendTo(p),RED.popover.tooltip(a,RED._("diff.type.changed"))),0<y.remote.movedCount&&(m=$('<span class="red-ui-diff-status-moved"><span class="red-ui-diff-status"><i class="fa fa-square"></i> '+y.remote.movedCount+"</span></span>").appendTo(p),RED.popover.tooltip(m,RED._("diff.type.moved"))),0<y.remote.deletedCount&&(s=$('<span class="red-ui-diff-status-deleted"><span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> '+y.remote.deletedCount+"</span></span>").appendTo(p),RED.popover.tooltip(s,RED._("diff.type.deleted"))),$('<span class="red-ui-diff-status"> ] </span>').appendTo(p))):n.addClass("red-ui-diff-empty"),i="",0<y.conflicts?h.addClass("red-ui-diff-list-node-conflict"):i=D.resolutions[c.id],c.id)&&(r=!(0<y.conflicts&&(d.deleted[c.id]||l.deleted[c.id])),k(c,h,v,n,!1,r,i,D)),0===f.find(".red-ui-diff-list-node").length&&f.addClass("red-ui-diff-list-flow-empty"),e.i18n()}}),n),s=t.localDiff,r=t.remoteDiff,d=(t.conflicts,s.currentConfig),l=s.newConfig;return void 0!==r?(e.addClass("red-ui-diff-three-way"),n=o.oldRevTitle||RED._("diff.local"),t=o.newRevTitle||RED._("diff.remote"),$("<div></div>").text(n).appendTo(i),$("<div></div>").text(t).appendTo(i)):e.removeClass("red-ui-diff-three-way"),{list:a,finish:function(){var e,t={diff:s,def:{category:"config",color:"#f0f0f0"},tab:{n:{},nodes:d.globals},newTab:{n:{},nodes:l.globals}},o=(void 0!==r&&(t.remoteTab={n:{},nodes:r.newConfig.globals},t.remoteDiff=r),a.editableList("addItem",t),{});for(e in d.tabOrder.forEach(function(e){var t=d.tabs[e],t={diff:s,def:RED.nodes.getType("tab"),tab:t};l.tabs.hasOwnProperty(e)&&(t.newTab=l.tabs[e]),void 0!==r&&(t.remoteTab=r.newConfig.tabs[e],t.remoteDiff=r),o[e]=!0,a.editableList("addItem",t)}),l.tabOrder.forEach(function(e){o[e]||(o[e]=!0,e=l.tabs[e],e={diff:s,def:RED.nodes.getType("tab"),tab:e,newTab:e},void 0!==r&&(e.remoteDiff=r),a.editableList("addItem",e))}),void 0!==r&&r.newConfig.tabOrder.forEach(function(e){o[e]||(e=r.newConfig.tabs[e],e={diff:s,remoteDiff:r,def:RED.nodes.getType("tab"),tab:e,remoteTab:e},a.editableList("addItem",e))}),d.subflows)d.subflows.hasOwnProperty(e)&&(o[e]=!0,t={diff:s,def:{defaults:{},icon:"subflow.svg",category:"subflows",color:"#DDAA99"},tab:d.subflows[e]},l.subflows.hasOwnProperty(e)&&(t.newTab=l.subflows[e]),void 0!==r&&(t.remoteTab=r.newConfig.subflows[e],t.remoteDiff=r),a.editableList("addItem",t));for(e in l.subflows)l.subflows.hasOwnProperty(e)&&!o[e]&&(o[e]=!0,t={diff:s,def:{defaults:{},icon:"subflow.svg",category:"subflows",color:"#DDAA99"},tab:l.subflows[e],newTab:l.subflows[e]},void 0!==r&&(t.remoteDiff=r),a.editableList("addItem",t));if(void 0!==r)for(e in r.newConfig.subflows)r.newConfig.subflows.hasOwnProperty(e)&&!o[e]&&(t={diff:s,remoteDiff:r,def:{defaults:{},icon:"subflow.svg",category:"subflows",color:"#DDAA99"},tab:r.newConfig.subflows[e],remoteTab:r.newConfig.subflows[e]},a.editableList("addItem",t))}}}function E(e,i){var t=$("<div>",{class:"red-ui-diff-list-wires"}),a=$("<ol></ol>"),s=0;return e.forEach(function(e,t){var n,o=$("<li>").appendTo(a);e&&0<e.length?($("<span>").text(t+1).appendTo(o),n=$("<ul>").appendTo(o),e.forEach(function(e){s++;var t=$("<li>").appendTo(n),o=i[e];o?m(o,RED.nodes.getType(o.type)||{}).appendTo(t):t.text(e)})):o.text("none")}),0===s?t.text(RED._("diff.type.none")):a.appendTo(t),t}function R(e,t){var o=$("<div>",{class:"red-ui-diff-list-node-icon"}),n=RED.utils.getNodeColor(e.type,t),t=RED.utils.getNodeIcon(t,e),e=("tab"===e.type&&(n="#C0DEED"),o.css("backgroundColor",n),$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(o));return RED.utils.createIconElement(t,e,!1),o}function m(e,t){var o=$("<div>",{class:"red-ui-diff-list-node-title"}),t=(R(e,t).appendTo(o),e.label||e.name||e.id);return $("<div>",{class:"red-ui-diff-list-node-description"}).text(t).appendTo(o),o}function x(t,e,o){var n,i,a,s=o.localDiff,r=o.remoteDiff,d=o.conflicts[t.id],l=!0,c=(s.added[t.id]&&(e.local.addedCount++,l=!1),r&&r.added[t.id]&&(e.remote.addedCount++,l=!1),s.deleted[t.id]&&(e.local.deletedCount++,l=!1),r&&r.deleted[t.id]&&(e.remote.deletedCount++,l=!1),s.changed[t.id]&&(s.positionChanged[t.id]?e.local.movedCount++:e.local.changedCount++,l=!!0),r&&r.changed[t.id]&&(r.positionChanged[t.id]?e.remote.movedCount++:e.remote.changedCount++,l=!!0),RED.nodes.getType(t.type)),u=(void 0===c&&(c=/^subflow:/.test(t.type)?{icon:"subflow.svg",category:"subflows",color:"#DDAA99",defaults:{name:{value:""}}}:"group"===t.type?RED.group.def:{}),$("<div>",{class:"red-ui-diff-list-node collapsed"})),p=$("<div>",{class:"red-ui-diff-list-node-header"}).appendTo(u),f=$("<div>",{class:"red-ui-diff-list-node-cell"}).appendTo(p),h=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-local"}).appendTo(p),g=(r&&(n=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-remote"}).appendTo(p)),$('<span class="red-ui-diff-list-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(f),l?(e.local.unchangedCount++,m(t,c).appendTo(f),h.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(h),r&&(e.remote.unchangedCount++,n.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(n)),u.addClass("red-ui-diff-status-unchanged")):s.added[t.id]?(h.addClass("red-ui-diff-status-added"),n&&n.addClass("red-ui-diff-empty"),$('<span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>').appendTo(h),m(t,c).appendTo(f)):r&&r.added[t.id]?(h.addClass("red-ui-diff-empty"),n.addClass("red-ui-diff-status-added"),$('<span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>').appendTo(n),m(t,c).appendTo(f)):(m(t,c).appendTo(f),s.moved[t.id]?(l=s.newConfig.all[t.id],s.deleted[t.z]||t.z===l.z||""===t.z||s.newConfig.all[t.z]?(h.addClass("red-ui-diff-status-moved"),f="",f=t.z===l.z?(i=`'${(i=s.currentConfig.all[s.currentConfig.all[t.id].z])?i.label||i.id:"global"}'`,RED._("diff.type.movedFrom",{id:i})):(l=`'${(i=s.newConfig.all[l.z])?i.label||i.id:"global"}'`,RED._("diff.type.movedTo",{id:l})),$('<span class="red-ui-diff-status"><i class="fa fa-caret-square-o-right"></i> '+f+"</span>").appendTo(h)):h.addClass("red-ui-diff-empty")):s.deleted[t.z]?h.addClass("red-ui-diff-empty"):s.deleted[t.id]?(h.addClass("red-ui-diff-status-deleted"),$('<span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.deleted"></span></span>').appendTo(h)):s.changed[t.id]?s.newConfig.all[t.id].z!==t.z?h.addClass("red-ui-diff-empty"):(s.positionChanged[t.id]?(h.addClass("red-ui-diff-status-moved"),$('<span class="red-ui-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.moved"></span></span>')):(h.addClass("red-ui-diff-status-changed"),$('<span class="red-ui-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>'))).appendTo(h):s.newConfig.all[t.id].z!==t.z?h.addClass("red-ui-diff-empty"):(e.local.unchangedCount++,h.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(h)),r&&(r.moved[t.id]?(i=r.newConfig.all[t.id],r.deleted[t.z]||t.z===i.z||""===t.z||r.newConfig.all[t.z]?(n.addClass("red-ui-diff-status-moved"),l="",l=t.z===i.z?(f=`'${(f=r.currentConfig.all[r.currentConfig.all[t.id].z])?f.label||f.id:"global"}'`,RED._("diff.type.movedFrom",{id:f})):(i=`'${(f=r.newConfig.all[i.z])?f.label||f.id:"global"}'`,RED._("diff.type.movedTo",{id:i})),$('<span class="red-ui-diff-status"><i class="fa fa-caret-square-o-right"></i> '+l+"</span>").appendTo(n)):n.addClass("red-ui-diff-empty")):r.deleted[t.z]?n.addClass("red-ui-diff-empty"):r.deleted[t.id]?(n.addClass("red-ui-diff-status-deleted"),$('<span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.deleted"></span></span>').appendTo(n)):r.changed[t.id]?r.newConfig.all[t.id].z!==t.z?n.addClass("red-ui-diff-empty"):(r.positionChanged[t.id]?(n.addClass("red-ui-diff-status-moved"),$('<span class="red-ui-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.moved"></span></span>')):(n.addClass("red-ui-diff-status-changed"),$('<span class="red-ui-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>'))).appendTo(n):r.newConfig.all[t.id].z!==t.z?n.addClass("red-ui-diff-empty"):(e.remote.unchangedCount++,n.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(n)))),{node:s.newConfig.all[t.id],all:s.newConfig.all,diff:s}),f=(r&&(a={node:r.newConfig.all[t.id]||null,all:r.newConfig.all,diff:r}),"");return d?(e.conflicts++,h.hasClass("red-ui-diff-empty")||$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(h),n.hasClass("red-ui-diff-empty")||$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(n),u.addClass("red-ui-diff-list-node-conflict")):f=o.resolutions[t.id],k(t,u,h,n,!1,!d,f,o),p.on("click",function(e){$(this).parent().toggleClass("collapsed"),0===$(this).siblings(".red-ui-diff-list-node-properties").length&&_(c,t,g,a).appendTo(u)}),u}function _(t,n,i,a){var s,r,d,l,c,u,p,f={},h=i.node,e=(a&&(s=a.node),$("<div>",{class:"red-ui-diff-list-node-properties"})),o=$("<table>").appendTo(e),g=$("<colgroup><col/><col/></colgroup>").appendTo(o),m=(void 0!==s&&$("<col/>").appendTo(g),$("<tbody>").appendTo(o)),v=!1,b=!1,y=!1,w=$("<tr>").appendTo(m),g=($("<td>",{class:"red-ui-diff-list-cell-label"}).text("id").appendTo(w),r=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),h?(r.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"></span>').appendTo(r),u=$('<span class="red-ui-diff-list-element"></span>').appendTo(r),f["local.id"]=RED.utils.createObjectElement(h.id).appendTo(u)):r.addClass("red-ui-diff-empty"),void 0!==s&&((p=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w)).addClass("red-ui-diff-status-unchanged"),s?($('<span class="red-ui-diff-status"></span>').appendTo(p),u=$('<span class="red-ui-diff-list-element"></span>').appendTo(p),f["remote.id"]=RED.utils.createObjectElement(s.id).appendTo(u)):p.addClass("red-ui-diff-empty")),n.hasOwnProperty("x")&&(!h||h.x===n.x&&h.y===n.y&&h.w===n.w&&h.h===n.h||(v=!0,0),!s||s.x===n.x&&s.y===n.y&&s.w===n.w&&s.h===n.h||(b=!0,0),(b&&v&&(h.x!==s.x||h.y!==s.y)||!v&&b&&i.diff.deleted[n.id]||v&&!b&&a.diff.deleted[n.id])&&(y=!0),w=$("<tr>").appendTo(m),$("<td>",{class:"red-ui-diff-list-cell-label"}).text(RED._("diff.type.position")).appendTo(w),r=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),h?(r.addClass("red-ui-diff-status-"+(v?"moved":"unchanged")),$('<span class="red-ui-diff-status">'+(v?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(r),u=$('<span class="red-ui-diff-list-element"></span>').appendTo(r),g={x:h.x,y:h.y},h.hasOwnProperty("w")&&(g.w=h.w,g.h=h.h),f["local.position"]=RED.utils.createObjectElement(g,{path:"position",exposeApi:!0,ontoggle:function(e,t){f["remote."+e]&&f["remote."+e].prop("expand")(e,t)}}).appendTo(u)):r.addClass("red-ui-diff-empty"),void 0!==s)&&((p=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w)).addClass("red-ui-diff-status-"+(b?"moved":"unchanged")),s?($('<span class="red-ui-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(p),u=$('<span class="red-ui-diff-list-element"></span>').appendTo(p),o={x:s.x,y:s.y},s.hasOwnProperty("w")&&(o.w=s.w,o.h=s.h),f["remote.position"]=RED.utils.createObjectElement(o,{path:"position",exposeApi:!0,ontoggle:function(e,t){f["local."+e]&&f["local."+e].prop("expand")(e,t)}}).appendTo(u)):p.addClass("red-ui-diff-empty")),v=b=y=!1,n.hasOwnProperty("wires")&&(d=JSON.stringify(n.wires),h&&(l=JSON.stringify(h.wires),d!==l)&&(v=!0,0),s&&(c=JSON.stringify(s.wires),d!==c)&&(b=!0,0),(b&&v&&l!==c||!v&&b&&i.diff.deleted[n.id]||v&&!b&&a.diff.deleted[n.id])&&(y=!0),w=$("<tr>").appendTo(m),$("<td>",{class:"red-ui-diff-list-cell-label"}).text(RED._("diff.type.wires")).appendTo(w),r=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),h?((y?(r.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>')):(r.addClass("red-ui-diff-status-"+(v?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(v?'<i class="fa fa-square"></i>':"")+"</span>"))).appendTo(r),E(h.wires,i.all).appendTo(r)):r.addClass("red-ui-diff-empty"),void 0!==s)&&(p=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w),s?((y?(p.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>')):(p.addClass("red-ui-diff-status-"+(b?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>"))).appendTo(p),E(s.wires,a.all).appendTo(p)):p.addClass("red-ui-diff-empty")),Object.keys(n).filter(function(e){return!("inputLabels"==e||"outputLabels"==e||"z"==e||"wires"==e||"x"===e||"y"===e||"w"===e||"h"===e||"id"===e||"type"===e||t.defaults&&t.defaults.hasOwnProperty(e))}));return t.defaults&&(g=g.concat(Object.keys(t.defaults))),"tab"!==n.type&&"group"!==n.type&&(g=g.concat(["inputLabels","outputLabels"])),(h&&h.hasOwnProperty("icon")||s&&s.hasOwnProperty("icon"))&&-1===g.indexOf("icon")&&g.unshift("icon"),g.forEach(function(o){y=b=v=!1,d=JSON.stringify(n[o]),h&&(l=JSON.stringify(h[o]),d!==l)&&(v=!0,0),s&&(c=JSON.stringify(s[o]),d!==c)&&(b=!0,0),(b&&v&&l!==c||!v&&b&&i.diff.deleted[n.id]||v&&!b&&a.diff.deleted[n.id])&&(y=!0),w=$("<tr>").appendTo(m);var e=$("<td>",{class:"red-ui-diff-list-cell-label"}).text(o).appendTo(w);r=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),h?((y?(r.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>')):(r.addClass("red-ui-diff-status-"+(v?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(v?'<i class="fa fa-square"></i>':"")+"</span>"))).appendTo(r),u=$('<span class="red-ui-diff-list-element"></span>').appendTo(r),f["local."+o]=RED.utils.createObjectElement(h[o],{path:o,exposeApi:!0,ontoggle:function(e,t){f["remote."+o]&&f["remote."+o].prop("expand")(e,t)}}).appendTo(u)):r.addClass("red-ui-diff-empty"),void 0!==s&&(p=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w),s?((y?(p.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>')):(p.addClass("red-ui-diff-status-"+(b?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>"))).appendTo(p),u=$('<span class="red-ui-diff-list-element"></span>').appendTo(p),f["remote."+o]=RED.utils.createObjectElement(s[o],{path:o,exposeApi:!0,ontoggle:function(e,t){f["local."+o]&&f["local."+o].prop("expand")(e,t)}}).appendTo(u)):p.addClass("red-ui-diff-empty")),h&&s&&"string"==typeof h[o]&&(/\n/.test(h[o])||/\n/.test(s[o]))&&(e=$('<button class="red-ui-button red-ui-button-small red-ui-diff-text-diff-button"><i class="fa fa-file-o"> <i class="fa fa-caret-left"></i> <i class="fa fa-caret-right"></i> <i class="fa fa-file-o"></i></button>').on("click",function(){C(h[o],s[o])}).appendTo(e),RED.popover.tooltip(e,RED._("diff.compareChanges")))}),e}function k(o,n,e,t,i,a,s,r){function d(e){var t;void 0!==o.type&&(u?(t="red-ui-diff-selectbox-tab-"+o.id.replace(/\./g,"-"),$("."+t+"-"+this.value).prop("checked",!0),"local"===this.value?($("."+t+"-"+this.value).closest(".red-ui-diff-list-node").addClass("red-ui-diff-select-local"),$("."+t+"-"+this.value).closest(".red-ui-diff-list-node").removeClass("red-ui-diff-select-remote")):($("."+t+"-"+this.value).closest(".red-ui-diff-list-node").removeClass("red-ui-diff-select-local"),$("."+t+"-"+this.value).closest(".red-ui-diff-list-node").addClass("red-ui-diff-select-remote"))):(t="red-ui-diff-selectbox-"+(i?o.id:o.z).replace(/\./g,"-"),$("#"+t+"-local").prop("checked",!1),$("#"+t+"-remote").prop("checked",!1),(t=$("#"+t+"-local").closest(".red-ui-diff-list-flow").find(".red-ui-diff-list-flow-title")).removeClass("red-ui-diff-select-local"),t.removeClass("red-ui-diff-select-remote"))),"local"===this.value?(n.removeClass("red-ui-diff-select-remote"),n.addClass("red-ui-diff-select-local")):"remote"===this.value&&(n.addClass("red-ui-diff-select-remote"),n.removeClass("red-ui-diff-select-local")),w(r)}var l="red-ui-diff-selectbox-"+o.id.replace(/\./g,"-")+(i?"-props":""),c="",u=((o.z||i)&&(c="red-ui-diff-selectbox-tab-"+(i?o.id:o.z).replace(/\./g,"-")),!i&&("tab"===o.type||"subflow"===o.type)),p=$("<label>",{class:"red-ui-diff-selectbox",for:l+"-local"}).on("click",function(e){e.stopPropagation()}).appendTo(e),f=$("<input>",{class:"red-ui-diff-selectbox-input "+c+"-local",id:l+"-local",type:"radio",value:"local",name:l}).data("node-id",o.id).on("change",d).appendTo(p),h=$("<label>",{class:"red-ui-diff-selectbox",for:l+"-remote"}).on("click",function(e){e.stopPropagation()}).appendTo(t),c=$("<input>",{class:"red-ui-diff-selectbox-input "+c+"-remote",id:l+"-remote",type:"radio",value:"remote",name:l}).data("node-id",o.id).on("change",d).appendTo(h);"local"===s?f.prop("checked",!0):"remote"===s&&c.prop("checked",!0),(a||e.hasClass("red-ui-diff-empty")||t.hasClass("red-ui-diff-empty"))&&(p.hide(),h.hide())}function w(e){var t=0,o=($(".red-ui-diff-selectbox>input:checked").each(function(){e.conflicts[$(this).data("node-id")]&&t++,e.resolutions[$(this).data("node-id")]=$(this).val()}),Object.keys(e.conflicts).length);o-t==0?$("#red-ui-diff-dialog-toolbar-resolved-conflicts").html('<span class="red-ui-diff-status-added"><span class="red-ui-diff-status"><i class="fa fa-check"></i></span></span> '+RED._("diff.unresolvedCount",{count:o-t})):$("#red-ui-diff-dialog-toolbar-resolved-conflicts").html('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span></span> '+RED._("diff.unresolvedCount",{count:o-t})),o===t&&($("#red-ui-diff-view-diff-merge").removeClass("disabled"),$("#red-ui-diff-view-resolve-diff").removeClass("disabled"))}function r(i){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"flows",success:function(e){var t=RED.nodes.createCompleteNodeSet(),o=RED.nodes.originalFlow(),n=e.flows,t=D(o,t),o=D(o,n);o.rev=e.rev,i(T(t,o))}})}function d(e,t={}){var o,n,i,a;e?(o=e,n={...t,mode:"merge"},s||((n=n||{}).hidePositionChanges=!0,o.localDiff,i=o.remoteDiff,a=o.conflicts,e={title:n.title||RED._("diff.reviewChanges"),width:1/0,overlay:!0,buttons:[{text:RED._("merge"===n.mode?"common.label.cancel":"common.label.close"),click:function(){RED.tray.close()}}],resize:function(e){},open:function(e){var e=e.find(".red-ui-tray-body"),t=($('<div class="red-ui-diff-dialog-toolbar"><span><span id="red-ui-diff-dialog-toolbar-resolved-conflicts"></span></span> </div>').prependTo(e),p($('<div class="red-ui-diff-container"></div>').appendTo(e),o,n));t.list.hide(),i?($("#red-ui-diff-view-diff-merge").show(),0===Object.keys(a).length?$("#red-ui-diff-view-diff-merge").removeClass("disabled"):$("#red-ui-diff-view-diff-merge").addClass("disabled")):$("#red-ui-diff-view-diff-merge").hide(),w(o),setTimeout(function(){t.finish(),t.list.show()},300),$("#red-ui-sidebar-shade").show()},close:function(){s=!1,$("#red-ui-sidebar-shade").hide()},show:function(){}},"merge"===n.mode&&e.buttons.push({id:"red-ui-diff-view-diff-merge",text:RED._("deploy.confirm.button.merge"),class:"primary disabled",click:function(){$("#red-ui-diff-view-diff-merge").hasClass("disabled")||(w(o),u(o),n.onmerge&&n.onmerge(),RED.tray.close())}}),RED.tray.show(e))):r(e=>d(e,t))}function l(e){var t=[],o={},n={},i=[],a={};return e.forEach(function(e){"tab"===(a[e.id]=e).type?(t.push(e.id),o[e.id]={n:e,nodes:[]}):"subflow"===e.type&&(n[e.id]={n:e,nodes:[]})}),e.forEach(function(e){"tab"!==e.type&&"subflow"!==e.type&&(o[e.z]?o[e.z].nodes:n[e.z]?n[e.z].nodes:i).push(e)}),{all:a,tabOrder:t,tabs:o,subflows:n,globals:i}}function D(e,t){const n=l(e),i=l(t),o={},a={},s={},r={},d={};return Object.keys(n.all).forEach(function(e){var t,o;RED.nodes.workspace(e)||RED.nodes.subflow(e)||RED.nodes.node(e);i.all.hasOwnProperty(e)?(t=JSON.stringify(n.all[e]))!==(o=JSON.stringify(i.all[e]))&&(s[e]=!0,n.all[e].z!==i.all[e].z?d[e]=!0:n.all[e].x===i.all[e].x&&n.all[e].y===i.all[e].y&&n.all[e].w===i.all[e].w&&n.all[e].h===i.all[e].h||(t=JSON.parse(t),o=JSON.parse(o),delete t.x,delete t.y,delete t.w,delete t.h,delete o.x,delete o.y,delete o.w,delete o.h,JSON.stringify(t)===JSON.stringify(o)&&(r[e]=!0))):a[e]=!0}),Object.keys(i.all).forEach(function(e){n.all.hasOwnProperty(e)||(o[e]=!0)}),{currentConfig:n,newConfig:i,added:o,deleted:a,changed:s,positionChanged:r,moved:d}}function T(e,t){var o,n,i,a,s={},r={},d={localDiff:e,remoteDiff:t,conflicts:s,resolutions:r};for(o in e.currentConfig.all)e.currentConfig.all.hasOwnProperty(o)&&(o,i=e.newConfig.all[o],(e.changed[o]&&t.deleted[o]||e.deleted[o]&&t.changed[o]||e.changed[o]&&t.changed[o]&&(a=t.newConfig.all[o],JSON.stringify(i)!==JSON.stringify(a)))&&(s[o]=!0),s[o]||(t.added[o]||t.changed[o]||t.deleted[o]?r[o]="remote":r[o]="local"));for(o in e.added)e.added.hasOwnProperty(o)&&(n=e.newConfig.all[o],t.deleted[n.z]?s[o]=!0:r[o]="local");for(o in t.added)t.added.hasOwnProperty(o)&&(n=t.newConfig.all[o],e.deleted[n.z]?s[o]=!0:r[o]="remote");return d}function c(e){e.localDiff.currentConfig;var t,o=e.localDiff,n=e.remoteDiff,i=e.conflicts,a=e.resolutions;for(t in i)if(i.hasOwnProperty(t)&&!a.hasOwnProperty(t))throw console.log(e),new Error("No resolution for conflict on node",t);var s,r=[],d={},l={},c={};for(t in o.newConfig.all)o.newConfig.all.hasOwnProperty(t)&&(s=RED.nodes.node(t),"local"===a[t]?(s&&(d[t]=s.changed,l[t]=s.moved),r.push(o.newConfig.all[t])):"remote"===a[t]?!n.deleted[t]&&n.newConfig.all.hasOwnProperty(t)&&(s&&(d[t]=s.changed,l[t]=s.moved),c[t]=1,r.push(n.newConfig.all[t])):console.log("Unresolved",t));for(t in n.added)n.added.hasOwnProperty(t)&&((s=RED.nodes.node(t))&&(d[t]=s.changed),o.added.hasOwnProperty(t)||(c[t]=2,r.push(n.newConfig.all[t])));return{config:r,nodeChangedStates:d,nodeMovedStates:l,localChangedStates:c}}function u(e){var t=RED.workspaces.active(),o=c(e),n=o.config,i=o.nodeChangedStates,a=o.nodeMovedStates,o=(o.localChangedStates,RED.nodes.dirty()),s={t:"replace",config:RED.nodes.createCompleteNodeSet(),changed:i,moved:a,complete:!0,dirty:o,rev:RED.nodes.version()},s=(RED.history.push(s),RED.nodes.clear(),RED.nodes.import(n));RED.nodes.dirty(!1);const r=new Set;function d(e){var e=e&&(RED.nodes.workspace(e)||RED.nodes.subflow(e)||null),t=!!e&&e.locked;e&&t&&(e.locked=!1,r.add(e))}s.nodes.forEach(function(e){i[e.id]&&(d(e.z),e.changed=!0),a[e.id]&&(d(e.z),e.moved=!0)}),r.forEach(e=>{e.locked=!0}),RED.nodes.version(e.remoteDiff.rev),o&&RED.nodes.dirty(!0),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.workspaces.show(t,!0),RED.sidebar.config.refresh()}function C(m,v){var e={title:RED._("diff.compareChanges"),width:1/0,overlay:!0,buttons:[{text:RED._("common.label.close"),click:function(){RED.tray.close()}}],resize:function(e){},open:function(e){for(var t,e=e.find(".red-ui-tray-body"),e=$('<div class="red-ui-diff-text"></div>').appendTo(e),e=$("<table>",{class:"red-ui-diff-text-content"}).appendTo(e),o=($('<colgroup><col width="50"><col width="50%"><col width="50"><col width="50%"></colgroup>').appendTo(e),$("<tbody>").appendTo(e)),n=function(e,t,o){var n,i,a=e.split(/\r?\n/),s=t.split(/\r?\n/),r=a.length,d=s.length,l={a:[],b:[]},c=[];for(n=0;n<r+1;n++)for(c[n]=[],i=0;i<d+1;i++)c[n][i]=0;for(n=r-1;0<=n;n--)for(i=d-1;0<=i;i--)1!==y(a[n],s[i],o)?c[n][i]=c[n+1][i+1]+1:c[n][i]=Math.max(c[n+1][i],c[n][i+1]);i=n=0;for(;n<r&&i<d;){var u,p=y(a[n],s[i],o);1!==p?((u=0)===p?u=0:2==p&&(u=3),l.a.push({i:n+1,j:i+1,line:a[n],type:u}),l.b.push({i:i+1,j:n+1,line:s[i],type:u}),n++,i++):c[n+1][i]>=c[n][i+1]?(l.a.push({i:n+1,line:a[n],type:1}),n++):(l.b.push({i:i+1,line:s[i],type:4}),i++)}for(;n<r||i<d;)n==r?(l.b.push({i:i+1,line:s[i],type:4}),i++):i==d&&(l.a.push({i:n+1,line:a[n],type:1}),n++);return l}(m||"",v||""),i=0,a=0,s=Math.max(n.a.length,n.b.length),r=[],d=[],l=0,c=0,u=0;u<s;u++){n[u];var p=i<n.a.length?n.a[i]:{type:2,line:""},f=a<n.b.length?n.b[a]:{type:2,line:""};0===p.type&&0!==f.type?(p={type:2,line:""},a++):0===f.type&&0!==p.type?(f={type:2,line:""},i++):(i++,a++),r.push({a:p,b:f}),void 0===t?(t={start:u,end:u},c=(l=0)===p.type&&0===f.type?0:1):0===p.type&&0===f.type?0===c?(t.end=u,l++):1===c?(t.end=u,c=2,l=0):2===c&&(t.end=u,8===++l)&&(t.end-=5,d.push(t),t={start:u-5,end:u-5},l=c=0):(t.end=u,l++,0===c?(3<t.end&&(t.end-=3,t.empty=!0,d.push(t),t={start:u-3,end:u-3}),c=1):2===c&&(c=1))}0===c&&(t.empty=!0),t.end=s,d.push(t),console.table(d);for(var h=0;h<d.length;h++)if((t=d[h]).empty)(function(n,i,a){diffRow=$('<tr class="red-ui-diff-text-header red-ui-diff-text-expand">');var e=$('<td colspan="4"> <i class="fa fa-arrows-v"></i> </td>').appendTo(diffRow),s=$("<span></span>").appendTo(e);i<a.length-1&&s.text("@@ -"+(a[i-1].a.i+1)+" +"+(a[i-1].b.i+1));return diffRow.on("click",function(e){if(20<i-n){var t=$(this).offset();if(0<n){for(var o=n;o<n+10;o++)b(a[o]).addClass("unchanged").insertBefore($(this));n+=10}if(i<a.length-1){for(o=i-1;i-11<o;o--)b(a[o]).addClass("unchanged").insertAfter($(this));i-=10}i<a.length-1&&s.text("@@ -"+(a[i-1].a.i+1)+" +"+(a[i-1].b.i+1));t=$(this).offset().top-t.top;$(".red-ui-diff-text").scrollTop($(".red-ui-diff-text").scrollTop()+t)}else{for(o=n;o<i;o++)b(a[o]).addClass("unchanged").insertBefore($(this));$(this).remove()}}),diffRow})(t.start,t.end,r).appendTo(o);else for(u=t.start;u<t.end;u++){var g=b(r[u]).appendTo(o);u===t.start?g.addClass("start-block"):u===t.end-1&&g.addClass("end-block")}},close:function(){s=!1},show:function(){}};RED.tray.show(e)}function b(e){var t=$("<tr>"),o=e.a,e=e.b,n=$('<td class="lineno">').text(2===o.type?"":o.i).appendTo(t),i=$('<td class="linetext">').text(o.line).appendTo(t);return 2===o.type?(n.addClass("blank"),i.addClass("blank")):4===o.type?(n.addClass("added"),i.addClass("added")):1===o.type&&(n.addClass("removed"),i.addClass("removed")),n=$('<td class="lineno">').text(2===e.type?"":e.i).appendTo(t),i=$('<td class="linetext">').text(e.line).appendTo(t),2===e.type?(n.addClass("blank"),i.addClass("blank")):4===e.type?(n.addClass("added"),i.addClass("added")):1===e.type&&(n.addClass("removed"),i.addClass("removed")),t}function y(e,t,o){return o?e===t?0:e.trim()===t.trime()?2:1:e===t?0:1}function a(e,y){var u=$("<div></div>");return e.forEach(function(f){var h,r,d,l,t,c,e,o,n=f.hunks,i=f.binary,a=$("<table>",{class:"red-ui-diff-text-content"}).appendTo(u),g=($('<colgroup><col width="50"><col width="50"><col width="100%"></colgroup>').appendTo(a),$("<tbody>").appendTo(a)),s=$('<tr class="red-ui-diff-text-file-header">').appendTo(g),a=$('<td colspan="3"></td>').appendTo(s),m=($('<i class="red-ui-diff-list-chevron fa fa-angle-down"></i>').appendTo(a),s.on("click",function(e){s.toggleClass("collapsed");var t=s.hasClass("collapsed");s.nextUntil(".red-ui-diff-text-file-header").toggle(!t)}),$('<span class="filename"></span>').text(f.file).appendTo(a),0),v=0,b={};y.project.files&&y.project.files.flow===f.file?(y.unmerged&&$('<span style="float: right;"><span id="red-ui-diff-dialog-toolbar-resolved-conflicts"></span></span>').appendTo(a),e=$('<tr class="red-ui-diff-text-header">').appendTo(g),r=$('<td class="red-ui-diff-flow-diff" colspan="3"></td>').appendTo(e),e=y.project.name,d=y.project.files.flow,c="projects/"+e+"/files/"+y.commonRev+"/"+d,l="projects/"+e+"/files/"+y.oldRev+"/"+d,o="projects/"+e+"/files/"+y.newRev+"/"+d,t=[$.Deferred(),$.Deferred(),$.Deferred()],y.commonRev?(c="projects/"+e+"/files/"+y.commonRev+"/"+d,$.ajax({dataType:"json",url:c}).then(function(e){t[0].resolve(e)}).fail(function(){t[0].resolve(null)})):t[0].resolve(null),$.ajax({dataType:"json",url:l}).then(function(e){t[1].resolve(e)}).fail(function(){t[1].resolve({content:"[]"})}),$.ajax({dataType:"json",url:o}).then(function(e){t[2].resolve(e)}).fail(function(){t[2].resolve({content:"[]"})}),$.when.apply($,t).always(function(e,t,o){var n,i,a;if(e)try{n=JSON.parse(e.content||"[]")}catch(e){return console.log(RED._("diff.commonVersionError"),c),void console.log(e)}try{i=JSON.parse(t.content||"[]")}catch(e){return console.log(RED._("diff.oldVersionError"),l),void console.log(e)}n=n||i;try{a=JSON.parse(o.content||"[]")}catch(e){return console.log(RED._("diff.newVersionError"),a),void console.log(e)}var e=D(n,i),t=D(n,a),s=(y.currentDiff=T(e,t),p(r,y.currentDiff,{title:d,mode:y.commonRev?"merge":"view",oldRevTitle:y.oldRevTitle,newRevTitle:y.newRevTitle}));s.list.hide(),w(y.currentDiff),setTimeout(function(){s.finish(),s.list.show()},300)})):i?(e=$('<tr class="red-ui-diff-text-header">').appendTo(g),o=$('<td colspan="3"></td>').appendTo(e),$("<span></span>").text(RED._("diff.noBinaryFileShowed")).appendTo(o)):(y.unmerged&&(h=$('<span style="float: right;">'+RED._("diff.conflictHeader",{resolved:v,unresolved:m})+"</span>").appendTo(a)),n.forEach(function(l){var e=$('<tr class="red-ui-diff-text-header">').appendTo(g),e=$('<td colspan="3"></td>').appendTo(e),c=($("<span></span>").text(l.header).appendTo(e),l.conflict),u=l.localStartLine,p=l.remoteStartLine;c&&m++,l.lines.forEach(function(e,t){var o,n,t=l.diffStart+t,i=c&&/^\+\+(<<<<<<<|=======$|>>>>>>>)/.test(e),a=$("<tr>").appendTo(g),s=$('<td class="lineno">').appendTo(a),r=(i?s.attr("colspan",2):o=$('<td class="lineno">').appendTo(a),$('<td class="linetext">').appendTo(a)),d=c?2:1;i?(a.addClass("mergeHeader"),/^\+\+=======$/.test(e)?(l.changeSeparator=t,a.addClass("mergeHeader-separator")):((n=/^..<<<<<<</.test(e))?($("<span>").text("<<<<<<< "+RED._("diff.localChanges")).appendTo(r),l.localChangeStart=t):(l.remoteChangeEnd=t,$("<span>").text(">>>>>>> "+RED._("diff.remoteChanges")).appendTo(r)),a.addClass("mergeHeader-"+(n?"ours":"theirs")),$('<button class="red-ui-button red-ui-button-small" style="float: right; margin-right: 20px;"><i class="fa fa-angle-double-'+(n?"down":"up")+'"></i> '+RED._(n?"diff.useLocalChanges":"diff.useRemoteChanges")+"</button>").appendTo(r).on("click",function(e){var t,o;e.preventDefault(),v++,(n?((o=(t=a.nextUntil(".mergeHeader-separator")).last().next()).nextUntil(".mergeHeader").remove(),o.next()):((o=(t=a.prevUntil(".mergeHeader-separator")).last().prev()).prevUntil(".mergeHeader").remove(),o.prev())).remove(),o.remove(),a.remove(),t.find(".linetext").addClass("added"),h.empty(),$("<span>"+RED._("diff.conflictHeader",{resolved:v,unresolved:m})+"</span>").appendTo(h),b[f.file]=b[f.file]||{},b[f.file][l.localChangeStart]={changeStart:l.localChangeStart,separator:l.changeSeparator,changeEnd:l.remoteChangeEnd,selection:n?"A":"B"},y.resolveConflict&&y.resolveConflict({conflicts:m,resolved:v,resolutions:b})}))):(i=e[0],c&&!y.unmerged&&" "===i&&(i=e[1]),$('<span class="prefix">').text(i).appendTo(r),t=!1,c&&y.unmerged?($('<span class="prefix">').text(e[1]).appendTo(r),"+"===e[0]&&(s.text(u++),t=!0),"+"===e[1]&&(o.text(p++),t=!0)):"+"===e[0]||c&&"+"===e[1]?(s.addClass("added"),o.addClass("added"),r.addClass("added"),o.text(p++),t=!0):("-"===e[0]||c&&"-"===e[1])&&(s.addClass("removed"),o.addClass("removed"),r.addClass("removed"),s.text(u++),t=!0),t||(r.addClass("unchanged"),0<u&&"\\"!==e[0]&&""!==e&&s.text(u++),0<p&&"\\"!==e[0]&&""!==e&&o.text(p++)),$("<span>").text(e.substring(d)).appendTo(r))})}))}),u}function f(e){for(var t,o,n=Array.isArray(e)?e:e.split("\n"),i=/^diff (?:(?:--git a\/(.*) b\/(.*))|(?:--cc (.*)))$/,a=/^\+\+\+ b\/(.*)\t?/,s=/^Binary files /,r=/^@@ -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @@ ?(.*)$/,d=/^@+ -((\d+)(,(\d+))?) -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @+/,l=[],c=0;c<n.length;c++){var u=n[c],p=i.exec(u);p?(o&&(t.hunks.push(o),l.push(t)),o=null,t={file:p[1]||p[3],hunks:[]}):s.test(u)?t&&(t.binary=!0):(p=a.exec(u))?t.file=p[1]:(p=r.exec(u))?(o&&t.hunks.push(o),o={header:u,localStartLine:p[2],localLength:p[4]||1,remoteStartLine:p[6],remoteLength:p[8]||1,lines:[],conflict:!1}):(p=d.exec(u))?(o&&t.hunks.push(o),o={header:u,localStartLine:p[2],localLength:p[4]||1,remoteStartLine:p[6],remoteLength:p[8]||1,diffStart:parseInt(p[10]),lines:[],conflict:!0}):o&&o.lines.push(u)}return o&&t.hunks.push(o),l.push(t),l}return{init:function(){RED.actions.add("core:show-remote-diff",d)},getRemoteDiff:r,showRemoteDiff:d,showUnifiedDiff:function(t){var o,e=t.diff,n=t.title,i=f(e),e=(t.unmerged&&(t.resolveConflict=function(e){(o=e).conflicts===e.resolved&&$("#red-ui-diff-view-resolve-diff").removeClass("disabled")}),{title:n||RED._("diff.compareChanges"),width:1/0,overlay:!0,buttons:[{text:RED._(t.unmerged?"common.label.cancel":"common.label.close"),click:function(){t.oncancel&&t.oncancel(),RED.tray.close()}}],resize:function(e){},open:function(e){e=e.find(".red-ui-tray-body"),e=$('<div class="red-ui-diff-text"></div>').appendTo(e);a(i,t).appendTo(e)},close:function(){s=!1},show:function(){}});t.unmerged&&e.buttons.push({id:"red-ui-diff-view-resolve-diff",text:RED._("diff.saveConflict"),class:"primary disabled",click:function(){var e;$("#red-ui-diff-view-resolve-diff").hasClass("disabled")||(t.currentDiff&&(e=c(t.currentDiff),(o={resolutions:{}}).resolutions[t.project.files.flow]=JSON.stringify(e.config,"",4)),t.onresolve&&t.onresolve(o),RED.tray.close())}}),RED.tray.show(e)},showCommitDiff:function(o){var n=function(e){for(var t={},o=e.split("\n"),n=[],i=0;i<o.length;i++)if(/^commit /.test(o[i]))t.sha=o[i].substring(7);else if(/^Author: /.test(o[i])){t.author=o[i].substring(8);var a=/^(.*) <(.*)>$/.exec(t.author);a&&(t.authorName=a[1],t.authorEmail=a[2])}else if(/^Date: /.test(o[i]))t.date=o[i].substring(8);else if(/^ /.test(o[i]))t.title?(4!==o[i].length||0<n.length)&&n.push(o[i].substring(4)):t.title=o[i].substring(4);else if(/^diff /.test(o[i])){t.files=f(o.slice(i));break}return t.comment=n.join("\n"),t}(o.commit),e={title:RED._("diff.viewCommitDiff"),width:1/0,overlay:!0,buttons:[{text:RED._("common.label.close"),click:function(){RED.tray.close()}}],resize:function(e){},open:function(e){var e=e.find(".red-ui-tray-body"),e=$('<div class="red-ui-diff-text"></div>').appendTo(e),t=$("<table>",{class:"red-ui-diff-text-content"}).appendTo(e),t=($('<colgroup><col width="50"><col width="50"><col width="100%"></colgroup>').appendTo(t),$("<tbody>").appendTo(t)),t=$('<tr class="red-ui-diff-text-commit-header">').appendTo(t),t=$('<td colspan="3"></td>').appendTo(t),t=($("<h3>").text(n.title).appendTo(t),$('<div class="commit-body"></div>').text(n.comment).appendTo(t),$('<div class="commit-summary"></div>').appendTo(t));$('<div style="float: right">').text(RED._("diff.commit")+" "+n.sha).appendTo(t),$("<div>").text((n.authorName||n.author)+" - "+o.date).appendTo(t),n.files&&a(n.files,o).appendTo(e)},close:function(){s=!1},show:function(){}};RED.tray.show(e)},mergeDiff:u}}(),RED.keyboard=function(){var d,u,n=/Mac/i.test(window.navigator.platform),t=!0,p={},a={left:37,up:38,right:39,down:40,escape:27,enter:13,backspace:8,delete:46,space:32,";":186,"=":187,"+":187,",":188,"-":189,".":190,"/":191,"\\":220,"'":222,"?":191,"[":219,"]":221,"{":219,"}":221},o={16:!0,17:!0,18:!0,91:!0,93:!0},f={},h={},g={59:186,61:187,173:189};function m(e){return RED.settings.get("editor.keymap",{})[e]}function v(e){for(var t,o=e.toLowerCase().split("-"),n={},i=0;i<o.length;i++)switch(o[i]){case"ctrl":case"cmd":n.ctrl=!0,n.meta=!0;break;case"alt":n.alt=!0;break;case"shift":n.shift=!0;break;case"":t=a["-"];break;default:if(a.hasOwnProperty(o[i]))t=a[o[i]];else{if(1<o[i].length)return null;t=o[i].toUpperCase().charCodeAt(0)}}return[t,n]}function b(e,t){for(var o=e.target,n=0;"BODY"!==o.nodeName&&o.id!==t.scope;)o=o.parentElement,n++;return n="BODY"===o.nodeName&&"*"!==t.scope?-1:n}function r(e,t,o,n){var i=o,a=n,s=("function"!=typeof o&&"string"!=typeof o||(i={},a=o),[]),r=0;if("string"==typeof t){if("string"==typeof a){if(n||h.hasOwnProperty(a)||(h[a]={scope:e,key:t,user:!1}),!n)if(m(a))return;f[a]={scope:e,key:t},"boolean"==typeof n&&(f[a].user=n)}for(var d=t.split(" "),r=0;r<d.length;r++){var l=v(d[r]);if(!l)return;s.push(l)}}else s.push([t,i]);var c=p;for(r=0;r<s.length;r++)t=s[r][0],(i=s[r][1]).ctrl&&(c.ctrl=c.ctrl||{},c=c.ctrl),i.shift&&(c.shift=c.shift||{},c=c.shift),i.alt&&(c.alt=c.alt||{},c=c.alt),c[t]=c[t]||{},c=c[t];c.handlers=c.handlers||[],c.handlers.push({scope:e,ondown:a}),c.scope=e,c.ondown=a}function s(e,t){var o=t||{},n=[],i=0;if("string"==typeof e)for(var a=e.split(" "),i=0;i<a.length;i++){var s=v(a[i]);if(!s)return void console.log("Unrecognised key specifier:",e);n.push(s)}else n.push([e,o]);var r=p;for(i=0;i<n.length;i++){if(e=n[i][0],!(r=(r=(r=(o=n[i][1]).ctrl?r.ctrl:r)&&o.shift?r.shift:r)&&o.alt?r.alt:r)[e])return;r=r[e]}"string"==typeof r.ondown&&("boolean"==typeof t&&t?f[r.ondown]={user:t}:delete f[r.ondown]),delete r.scope,delete r.ondown,delete r.handlers}d3.select(window).on("keydown",function(){var e;t&&!o[d3.event.keyCode]&&(e=function e(t){var o=u||p;if(t.ctrlKey&&t.metaKey)return null;(o=(o=t.ctrlKey||t.metaKey?o.ctrl:o)&&t.shiftKey?o.shift:o)&&t.altKey&&(o=o.alt);var n=g[t.keyCode]||t.keyCode;if(o&&o[n]){var i=o[n];if(!i.handlers){if(u)return u=null,e(t);if(0<Object.keys(i).length)for(var a in i)if(-1<b(t,i[a])){u=i,t.preventDefault();break}return null}for(var s,r=1/0,d=0,l=i.handlers.length,d=0;d<l;d++){var c=b(t,i.handlers[d]);-1<c&&c<r&&(r=c,s=i.handlers[d])}return u=null,i=s}return u?(u=null,e(t)):void 0}(d3.event))&&e.ondown&&("string"==typeof e.ondown?RED.actions.invoke(e.ondown):e.ondown(),d3.event.preventDefault())});function l(e){e.preventDefault();var t,o,n,i,a=$(this),s=a.data("data");a.hasClass("keyboard-shortcut-entry-expanded")||(c(),e=a.find(".keyboard-shortcut-entry-key"),i=a.find(".keyboard-shortcut-entry-scope"),a.addClass("keyboard-shortcut-entry-expanded"),(t=$('<input type="text">').attr("placeholder",RED._("keyboard.unassigned")).val(s.key||"").appendTo(e)).on("change paste keyup",function(e){var t;return 13!==e.keyCode||$(this).hasClass("input-error")?27===e.keyCode?c(!0):((t=""===(e=(e=$(this).val()).trim())||RED.keyboard.validateKey(e))&&""!==e&&(t=!d.has(o.val()+":"+e.toLowerCase())),$(this).toggleClass("input-error",!t),void n.attr("disabled",!t)):c()}),(o=$('<select><option value="*" data-i18n="keyboard.global"></option><option value="red-ui-workspace" data-i18n="keyboard.workspace"></option><option value="red-ui-editor-stack" data-i18n="keyboard.editor"></option></select>').appendTo(i)).i18n(),"workspace"===s.scope&&(s.scope="red-ui-workspace"),o.val(s.scope||"*"),o.on("change",function(){t.trigger("change")}),e=$('<div class="keyboard-shortcut-edit button-group-vertical"></div>').appendTo(i),n=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-check"></i></button>').appendTo(e),i=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-reply"></i></button>').appendTo(e),n.on("click",function(e){e.stopPropagation(),c()}),i.on("click",function(e){e.stopPropagation(),a.empty(),a.removeClass("keyboard-shortcut-entry-expanded");e=RED.settings.get("editor.keymap",{}),e[s.id]=null,RED.settings.set("editor.keymap",e),RED.keyboard.revertToDefault(s.id),e=RED.keyboard.getShortcut(s.id),e={id:s.id,scope:e?e.scope:void 0,key:e?e.key:void 0,user:e?e.user:void 0,label:s.label,options:s.options};y(a,e)}),t.trigger("focus"))}function c(e){var t,o,n,i,a,s,r=$(".keyboard-shortcut-entry-expanded");1===r.length&&(t=r.data("data"),o=r.find(".keyboard-shortcut-entry-key input"),n=r.find(".keyboard-shortcut-entry-scope select"),e||(e=o.val().trim(),i=n.val(),(""===e||RED.keyboard.validateKey(e))&&(!(a=RED.keyboard.getShortcut(t.id))&&e||a&&(a.scope!==i||a.key!==e))&&(a=r.find(".keyboard-shortcut-entry-key"),s=r.find(".keyboard-shortcut-entry-scope"),a.empty(),s.empty(),t.key&&(d.delete(t.scope+":"+t.key),RED.keyboard.remove(t.key,!0)),r.find(".keyboard-shortcut-entry-text i").css("opacity",1),""===e?(a.parent().addClass("keyboard-shortcut-entry-unassigned"),a.append($("<span>").text(RED._("keyboard.unassigned"))),delete t.key,delete t.scope):(a.parent().removeClass("keyboard-shortcut-entry-unassigned"),a.append(RED.keyboard.formatKey(e)),$("<span>").text(i).appendTo(s),t.key=e,t.scope=i,d.add(t.scope+":"+t.key),RED.keyboard.add(t.scope,t.key,t.id,!0)),a=RED.settings.get("editor.keymap",{}),s=RED.keyboard.getShortcut(t.id),a[t.id]={scope:s.scope,key:s.key},RED.settings.set("editor.keymap",a))),o.remove(),n.remove(),$(".keyboard-shortcut-edit").remove(),r.removeClass("keyboard-shortcut-entry-expanded"))}function y(e,t){var o=$('<div class="keyboard-shortcut-entry">').appendTo(e),n=(e.data("data",t),t.label),n=$("<div>").addClass("keyboard-shortcut-entry-text").text(n).appendTo(o),n=$('<i class="fa fa-user"></i>').prependTo(n),n=(t.user||n.css("opacity",0),$('<div class="keyboard-shortcut-entry-key">').appendTo(o)),n=(t.key?n.append(RED.keyboard.formatKey(t.key)):(o.addClass("keyboard-shortcut-entry-unassigned"),n.append($("<span>").text(RED._("keyboard.unassigned")))),$('<div class="keyboard-shortcut-entry-scope">').appendTo(o));$("<span>").text("*"===t.scope?"global":t.scope||"").appendTo(n),e.on("click",l)}function w(){var e=$('<div id="red-ui-settings-tab-keyboard"></div>'),o=($('<div class="keyboard-shortcut-entry keyboard-shortcut-list-header"><div class="keyboard-shortcut-entry-key keyboard-shortcut-entry-text"><input autocomplete="off" name="keyboard-filter" id="red-ui-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("#red-ui-settings-tab-keyboard-filter").searchBox({delay:100,change:function(){var t=$(this).val().trim().toLowerCase();""===t?o.editableList("filter",null):(t=t.replace(/\s/g,""),o.editableList("filter",function(e){return-1<e.label.toLowerCase().indexOf(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,o){y(e,o)}})),t=RED.actions.list();return t.sort(function(e,t){e=e.label,t=t.label;return e.localeCompare(t)}),d=new Set,t.forEach(function(e){e.key&&d.add(e.scope+":"+e.key),o.editableList("addItem",e)}),e}return{init:function(a){"localStorage"in window&&null!==window.localStorage&&null!==(e=localStorage.getItem("keymap"))&&(localStorage.removeItem("keymap"),RED.settings.set("editor.keymap",JSON.parse(e)));var e,s=RED.settings.get("editor.keymap",{});$.getJSON("red/keymap.json",function(e){var t,o,n,i=function(e,t){var o,n,i={};for(o in e)if(e.hasOwnProperty(o)){var a,s=e[o];for(a in s)s.hasOwnProperty(a)&&(i[s[a]]?i[s[a]].push({scope:o,key:a,user:!1}):i[s[a]]=[{scope:o,key:a,user:!1}])}for(n in t)t.hasOwnProperty(n)&&(t[n].key?(i[n]=[{scope:t[n].scope||"*",key:t[n].key,user:!1}],"workspace"===i[n][0].scope&&(i[n][0].scope="red-ui-workspace")):delete i[n]);return i}(e,RED.settings.theme("keymap",{}));for(t in i)i.hasOwnProperty(t)&&(s.hasOwnProperty(t)||i[t].forEach(function(e){r(e.scope,e.key,t,!1)}),h[t]=i[t][0]);for(t in s)s.hasOwnProperty(t)&&s[t]&&(o=s[t]).hasOwnProperty("key")&&r(n="workspace"===(n=o.scope)?"red-ui-workspace":n,o.key,t,!0);a()}),RED.userSettings.add({id:"keyboard",title:RED._("keyboard.keyboard"),get:w,focus:function(){setTimeout(function(){$("#red-ui-settings-tab-keyboard-filter").trigger("focus")},200)},close:function(){RED.menu.refreshShortcuts()}})},add:r,remove:s,getShortcut:function(e){return f[e]},getUserShortcut:m,revertToDefault:function(e){var t=f[e];t&&s(t.key),h.hasOwnProperty(e)&&r((t=h[e]).scope,t.key,e,!1)},formatKey:function(e,t){var o=n?e.replace(/ctrl-?/,"&#8984;"):e;return o=(o=(o=(o=(o=(o=n?o.replace(/alt-?/,"&#8997;"):e).replace(/shift-?/,"&#8679;")).replace(/left/,"&#x2190;")).replace(/up/,"&#x2191;")).replace(/right/,"&#x2192;")).replace(/down/,"&#x2193;"),t?o:'<span class="help-key-block"><span class="help-key">'+o.split(" ").join('</span> <span class="help-key">')+"</span></span>"},validateKey:function(e){var t=(e=e.trim()).split(" ");for(i=0;i<t.length;i++)if(!v(t[i]))return!1;return!0},disable:function(){t=!1},enable:function(){t=!0}}}(),RED.envVar=function(){function r(e){var t=null;return RED.nodes.eachConfig(function(e){"global-config"===e.type&&(t=e)}),null===t&&e&&(t={id:RED.nodes.id(),type:"global-config",env:[],name:"global-config",label:"",hasUsers:!1,users:[],credentials:{_:{},map:{}},_def:RED.nodes.getType("global-config")},RED.nodes.add(t)),t}function t(){var e=r(!1),t=e?e.env:[],e=(e=e?e.credentials:null)||{_:{},map:{}},o=$("<div/>",{id:"red-ui-settings-tab-envvar",class:"form-horizontal"}),n=$("<div/>",{class:"form-row node-input-env-container-row"}).css({margin:"10px"}).appendTo(o),i=$("<label></label>").css({width:"100%"}).appendTo(n),a=($("<i/>",{class:"fa fa-list"}).appendTo(i),$("<span/>").text(" "+RED._("env-var.header")).appendTo(i),$("<ol/>",{id:"node-input-env-container"}).appendTo(n)),i={type:"",env:t,credentials:e.map},t=(RED.editor.envVarList.create(a,i),$("<div/>").css({"text-align":"right"}).appendTo(n)),e=$("<button/>",{class:"red-ui-button"}).css({}).text(RED._("env-var.revert")).appendTo(t),s=function(e){e=e.editableList("items");const o=[];return e.each(function(e,t){var t=t.data("data");t.nameField&&t.valueField&&(t={name:t.nameField.val(),value:t.valueField.typedInput("value"),type:t.valueField.typedInput("type")},o.push(t))}),o}(a);return e.on("click",function(e){a.editableList("empty"),a.editableList("addItems",s)}),o}return{init:function(e){RED.userSettings.add({id:"envvar",title:RED._("env-var.environment"),get:t,focus:function(){var e=$("#red-ui-settings-tab-envvar").parent().height();$("#node-input-env-container").editableList("height",e-100)},close:function(){var e,t,o,n,i,a=$("#node-input-env-container");try{e=a,t=r(!1),o=[],n=e.editableList("items"),i=t?t.credentials:null,!t&&0===e.editableList("length")||(i=i||{_:{},map:{}},n.each(function(e,t){var t=t.data("data");t.nameField&&t.valueField&&""!==(t={name:t.nameField.val(),value:t.valueField.typedInput("value"),type:t.valueField.typedInput("type")}).name.trim()&&(o.push(t),"cred"===t.type)&&(i.map[t.name]=t.value,i.map["has_"+t.name]=""!==t.value,t.value="__PWRD__")}),(t=null===t?r(!0):t).credentials||(t.credentials={_:{},map:{}}),JSON.stringify(o)===JSON.stringify(t.env)&&JSON.stringify(i)===JSON.stringify(t.credentials))||(t.env=o,t.credentials=i,RED.nodes.dirty(!0))}catch(e){console.log(e),console.log(e.stack)}}}),RED.actions.add("core:show-global-env",function(){RED.userSettings.show("envvar")})}}}(),RED.workspaces=function(){const o=document.title;var c,a=0,i=0,t=[],u=[],n=0;let s,r;function d(e){n!==t.length&&t.splice(n),t.push(e),n=t.length}function l(o){u=u.filter(function(e){var t;return e!==o&&(!Array.isArray(e)||(-1<(t=e.indexOf(o))&&e.splice(t,1),0!==e.length))})}function p(e,t,o){if(e)e.closeable||(e.hideable=!0),e.hasOwnProperty("locked")||(e.locked=!1),c.addTab(e,o),JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}")[e.id]&&c.hideTab(e.id),c.resize();else{for(var n=RED.nodes.id();i+=1,0!==$("#red-ui-workspace-tabs li[flowname='"+RED._("workspace.defaultName",{number:i})+"']").size(););e={type:"tab",id:n,disabled:!1,locked:!1,info:"",label:RED._("workspace.defaultName",{number:i}),env:[],hideable:!0},t||(e.added=!0),RED.nodes.addWorkspace(e,o),c.addTab(e,o),c.activateTab(n),t||(RED.history.push({t:"add",workspaces:[e],dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0))}return $("#red-ui-tab-"+e.id.replace(".","-")).attr("flowname",e.label).toggleClass("red-ui-workspace-changed",!!(e.contentsChanged||e.changed||e.added)),RED.view.focus(),e}function f(e){var t;1===g||e.locked||(t=RED.nodes.getWorkspaceOrder(),e._index=t.indexOf(e.id),_(e),(t=RED.nodes.removeWorkspace(e.id)).t="delete",t.dirty=RED.nodes.dirty(),t.workspaces=[e],RED.history.push(t),RED.nodes.dirty(!0),RED.sidebar.config.refresh())}function h(e){var t=RED.nodes.workspace(e);t?t.locked||RED.editor.editFlow(t):(t=RED.nodes.subflow(e))&&RED.editor.editSubflow(t)}var g=0;function m(e,t){let o=new Set;for(let t=0;t<u.length;t++){let e=u[t];(e=Array.isArray(e)?e:[e]).forEach(e=>{RED.nodes.workspace(e)&&o.add(e)})}var n=o.size;let i=t||RED.nodes.workspace(RED.workspaces.active())||RED.nodes.subflow(RED.workspaces.active());var a=!!i&&i.disabled,s=c.listTabs();let r=0,d=(s.forEach(e=>{RED.nodes.workspace(e)&&r++}),RED.workspaces.isLocked());t&&(d=t.locked);var l=[];return e&&l.push({id:"red-ui-tabs-menu-option-search-flows",label:RED._("workspace.listFlows"),onselect:"core:list-flows"},{id:"red-ui-tabs-menu-option-search-subflows",label:RED._("workspace.listSubflows"),onselect:"core:list-subflows"},null),RED.settings.theme("menu.menu-item-workspace-add",!0)&&l.push({id:"red-ui-tabs-menu-option-add-flow",label:RED._("workspace.addFlow"),onselect:"core:add-flow"}),(e||t)&&(RED.settings.theme("menu.menu-item-workspace-add",!0)&&l.push({id:"red-ui-tabs-menu-option-add-flow-right",label:RED._("workspace.addFlowToRight"),shortcut:RED.keyboard.getShortcut("core:add-flow-to-right"),onselect:function(){RED.actions.invoke("core:add-flow-to-right",t)}},null),i&&"tab"===i.type&&l.push(a?{label:RED._("workspace.enableFlow"),shortcut:RED.keyboard.getShortcut("core:enable-flow"),onselect:function(){RED.actions.invoke("core:enable-flow",t?t.id:void 0)},disabled:d}:{label:RED._("workspace.disableFlow"),shortcut:RED.keyboard.getShortcut("core:disable-flow"),onselect:function(){RED.actions.invoke("core:disable-flow",t?t.id:void 0)},disabled:d},d?{label:RED._("workspace.unlockFlow"),shortcut:RED.keyboard.getShortcut("core:unlock-flow"),onselect:function(){RED.actions.invoke("core:unlock-flow",t?t.id:void 0)}}:{label:RED._("workspace.lockFlow"),shortcut:RED.keyboard.getShortcut("core:lock-flow"),onselect:function(){RED.actions.invoke("core:lock-flow",t?t.id:void 0)}},null),a=s.findIndex(e=>i&&e===i.id),l.push({label:RED._("workspace.moveToStart"),shortcut:RED.keyboard.getShortcut("core:move-flow-to-start"),onselect:function(){RED.actions.invoke("core:move-flow-to-start",t?t.id:void 0)},disabled:0===a},{label:RED._("workspace.moveToEnd"),shortcut:RED.keyboard.getShortcut("core:move-flow-to-end"),onselect:function(){RED.actions.invoke("core:move-flow-to-end",t?t.id:void 0)},disabled:a===s.length-1})),0<l.length&&l.push(null),(e||t)&&l.push({id:"red-ui-tabs-menu-option-add-hide-flows",label:RED._("workspace.hideFlow"),shortcut:RED.keyboard.getShortcut("core:hide-flow"),onselect:function(){RED.actions.invoke("core:hide-flow",t)}},{id:"red-ui-tabs-menu-option-add-hide-other-flows",label:RED._("workspace.hideOtherFlows"),shortcut:RED.keyboard.getShortcut("core:hide-other-flows"),onselect:function(){RED.actions.invoke("core:hide-other-flows",t)}}),l.push({id:"red-ui-tabs-menu-option-add-hide-all-flows",label:RED._("workspace.hideAllFlows"),onselect:"core:hide-all-flows",disabled:n===r},{id:"red-ui-tabs-menu-option-add-show-all-flows",disabled:0===n,label:RED._("workspace.showAllFlows",{count:n}),onselect:"core:show-all-flows"},{id:"red-ui-tabs-menu-option-add-show-last-flow",disabled:0===u.length,label:RED._("workspace.showLastHiddenFlow"),onselect:"core:show-last-hidden-flow"}),t&&(l.push(null),RED.settings.theme("menu.menu-item-workspace-delete",!0)&&l.push({label:RED._("common.label.delete"),onselect:function(){"tab"===t.type?RED.workspaces.delete(t):"subflow"===t.type&&RED.subflow.delete(t.id)},disabled:d||1===g}),l.push({label:RED._("menu.label.export"),shortcut:RED.keyboard.getShortcut("core:show-export-dialog"),onselect:function(){RED.workspaces.show(t.id),RED.actions.invoke("core:show-export-dialog",null,"flow")}})),l}function e(){c=RED.tabs.create({id:"red-ui-workspace-tabs",onchange:function(e){var t={old:a};e?($("#red-ui-workspace-chart").show(),a=e.id,window.location.hash="flow/"+e.id,e.label?document.title=o+" : "+e.label:document.title=o,$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!e.disabled),$("#red-ui-workspace").toggleClass("red-ui-workspace-locked",!!e.locked)):($("#red-ui-workspace-chart").hide(),a=0,window.location.hash="",document.title=o),t.workspace=a,RED.events.emit("workspace:change",t),RED.sidebar.config.refresh(),RED.view.focus()},onclick:function(e,t){2===t.which?(t.preventDefault(),t.stopPropagation(),RED.actions.invoke("core:hide-flow",e)):(e.id!==a&&d(a),RED.view.focus())},ondblclick:function(e){"subflow"!=e.type?h(e.id):RED.editor.editSubflow(RED.nodes.subflow(e.id))},onadd:function(e){"tab"===e.type&&g++,$('<span class="red-ui-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("red-ui-workspace-disabled"),$('<span class="red-ui-workspace-locked-icon"><i class="fa fa-lock"></i> </span>').prependTo("#red-ui-tab-"+e.id.replace(".","-")+" .red-ui-tab-label"),e.locked&&$("#red-ui-tab-"+e.id.replace(".","-")).addClass("red-ui-workspace-locked");var e=$('<svg class="red-ui-flow-tab-changed red-ui-flow-node-changed" width="10" height="10" viewBox="-1 -1 12 12"></svg>').appendTo("#red-ui-tab-"+e.id.replace(".","-")),t=document.createElementNS("http://www.w3.org/2000/svg","circle");t.setAttribute("cx",5),t.setAttribute("cy",5),t.setAttribute("r",5),e.append(t),RED.menu.setDisabled("menu-item-workspace-delete",0===a||g<=1),1===g&&($("#red-ui-workspace .red-ui-tabs").show(),$("#red-ui-workspace-chart").show(),$("#red-ui-workspace-footer").children().show())},onremove:function(e){"tab"===e.type?g--:(RED.events.emit("workspace:close",{workspace:e.id}),u.push(e.id)),RED.menu.setDisabled("menu-item-workspace-delete",0===a||g<=1),0===g&&v()},onreorder:function(e,t){RED.history.push({t:"reorder",workspaces:{from:e,to:t},dirty:RED.nodes.dirty()});var e=e.filter(e=>!!RED.nodes.workspace(e)),o=t.filter(e=>!!RED.nodes.workspace(e));JSON.stringify(e)!==JSON.stringify(o)&&(RED.nodes.dirty(!0),T(t))},onselect:function(e){RED.view.select(!1),0===e.length?($("#red-ui-workspace-chart svg").css({"pointer-events":"auto",filter:"none"}),$("#red-ui-workspace-toolbar").css({"pointer-events":"auto",filter:"none"}),$("#red-ui-palette-container").css({"pointer-events":"auto",filter:"none"}),$(".red-ui-sidebar-shade").hide()):(RED.view.select(!1),$("#red-ui-workspace-chart svg").css({"pointer-events":"none",filter:"opacity(60%)"}),$("#red-ui-workspace-toolbar").css({"pointer-events":"none",filter:"opacity(60%)"}),$("#red-ui-palette-container").css({"pointer-events":"none",filter:"opacity(60%)"}),$(".red-ui-sidebar-shade").show())},onhide:function(e){var t;u.push(e.id),"tab"===e.type&&((t=JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}"))[e.id]=!0,RED.settings.setLocal("hiddenTabs",JSON.stringify(t)),RED.events.emit("workspace:hide",{workspace:e.id}))},onshow:function(e){l(e.id);var t=JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}");delete t[e.id],RED.settings.setLocal("hiddenTabs",JSON.stringify(t)),RED.events.emit("workspace:show",{workspace:e.id})},minimumActiveTabWidth:150,scrollable:!0,addButton:RED.settings.theme("menu.menu-item-workspace-add",!0)?"core:add-flow":void 0,addButtonCaption:RED._("workspace.addFlow"),menu:function(){return m(!0)},contextmenu:function(e){return m(!1,e)}}),g=0}function v(){$("#red-ui-workspace .red-ui-tabs").hide(),$("#red-ui-workspace-chart").hide(),$("#red-ui-workspace-footer").children().hide()}function b(e){h(e||a)}function y(e){E(e,!1)}function w(e){E(e,!0)}function E(e,t){var o,n=RED.nodes.workspace(e||a);n&&!n.locked&&n.disabled!==t&&(o={disabled:n.disabled},n.disabled=t,$("#red-ui-tab-"+n.id.replace(".","-")).toggleClass("red-ui-workspace-disabled",!!n.disabled),e&&e!==a||$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!n.disabled),t={t:"edit",changes:o,node:n,dirty:RED.nodes.dirty()},n.changed=!0,RED.history.push(t),RED.events.emit("flows:change",n),RED.nodes.dirty(!0),RED.sidebar.config.refresh(),(e=RED.view.selection()).nodes||e.links||n.id!==a||RED.sidebar.info.refresh(n),o.hasOwnProperty("disabled"))&&(RED.nodes.eachNode(function(e){e.z===n.id&&(e.dirty=!0)}),RED.view.redraw())}function D(e){x(e,!0)}function R(e){x(e,!1)}function x(e,t){var o,n=RED.nodes.workspace(e||a);n&&n.locked!==t&&(o={locked:n.locked},n.locked=t,$("#red-ui-tab-"+n.id.replace(".","-")).toggleClass("red-ui-workspace-locked",!!n.locked),e&&e!==a||$("#red-ui-workspace").toggleClass("red-ui-workspace-locked",!!n.locked),t={t:"edit",changes:o,node:n,dirty:RED.nodes.dirty()},n.changed=!0,RED.history.push(t),RED.events.emit("flows:change",n),RED.nodes.dirty(!0),RED.nodes.filterNodes({z:n.id}).forEach(e=>e.dirty=!0),RED.view.redraw(!0))}function _(e){e?e.locked||(c.contains(e.id)&&c.removeTab(e.id),e.id===a&&(a=0)):(e=RED.nodes.workspace(a))&&!e.locked&&f(RED.nodes.workspace(a))}function k(e,t){const o=RED.nodes.workspace(e||a)||RED.nodes.subflow(e||a);var n,i;o&&(n=[...e=c.listTabs()],i=e.findIndex(e=>e===o.id),e.splice(i,1),"start"===t?e.unshift(o.id):"end"===t&&e.push(o.id),i=T(e),JSON.stringify(i)!==JSON.stringify(n))&&(RED.history.push({t:"reorder",workspaces:{from:n,to:i},dirty:RED.nodes.dirty()}),t=n.filter(e=>!!RED.nodes.workspace(e)),e=i.filter(e=>!!RED.nodes.workspace(e)),JSON.stringify(t)!==JSON.stringify(e))&&RED.nodes.dirty(!0)}function T(e){var t=e.filter(e=>!!RED.nodes.workspace(e)),o=RED.nodes.getWorkspaceOrder();return JSON.stringify(t)!==JSON.stringify(o)&&(RED.nodes.setWorkspaceOrder(t),RED.events.emit("flows:reorder",t)),c.order(e),t}return{init:function(){$('<ul id="red-ui-workspace-tabs"></ul>').appendTo("#red-ui-workspace"),$('<div id="red-ui-workspace-tabs-shade" class="hide"></div>').appendTo("#red-ui-workspace"),$('<div id="red-ui-workspace-chart" tabindex="1"></div>').appendTo("#red-ui-workspace"),$('<div id="red-ui-workspace-toolbar"></div>').appendTo("#red-ui-workspace"),$('<div id="red-ui-workspace-footer" class="red-ui-component-footer"></div>').appendTo("#red-ui-workspace"),$('<div id="red-ui-editor-shade" class="hide"></div>').appendTo("#red-ui-workspace"),e(),RED.events.on("sidebar:resize",c.resize),RED.events.on("workspace:clear",()=>{i=0}),RED.actions.add("core:show-next-tab",function(){var e=a;c.nextTab(),e!==a&&d(e)}),RED.actions.add("core:show-previous-tab",function(){var e=a;c.previousTab(),e!==a&&d(e)}),RED.menu.setAction("menu-item-workspace-delete",function(){f(RED.nodes.workspace(a))}),$(window).on("resize",function(){c.resize()}),RED.settings.theme("menu.menu-item-workspace-add",!0)&&(RED.actions.add("core:add-flow",function(e){p(void 0,void 0,e?e.index:void 0)}),RED.actions.add("core:add-flow-to-right",function(e){let t;p(void 0,void 0,t=e?c.getTabIndex(e.id)+1:c.activeIndex()+1)})),RED.settings.theme("menu.menu-item-workspace-edit",!0)&&RED.actions.add("core:edit-flow",b),RED.settings.theme("menu.menu-item-workspace-delete",!0)&&RED.actions.add("core:remove-flow",_),RED.actions.add("core:enable-flow",y),RED.actions.add("core:disable-flow",w),RED.actions.add("core:lock-flow",D),RED.actions.add("core:unlock-flow",R),RED.actions.add("core:move-flow-to-start",function(e){k(e,"start")}),RED.actions.add("core:move-flow-to-end",function(e){k(e,"end")}),RED.actions.add("core:hide-flow",function(e){let t;e?t=[e]:0===(t=c.selection()).length&&(t=[{id:a}]);var o=[];t.forEach(function(e){RED.workspaces.hide(e.id),u.pop(),o.push(e.id)}),0<o.length&&u.push(o),c.clearSelection()}),RED.actions.add("core:hide-other-flows",function(e){let t;e?t=[e]:0===(t=c.selection()).length&&(t=[{id:a}]);var o=new Set(t.map(function(e){return e.id})),e=c.listTabs(),n=[];e.forEach(function(e){o.has(e)||(RED.workspaces.hide(e),u.pop(),n.push(e))}),0<n.length&&u.push(n)}),RED.actions.add("core:hide-all-flows",function(){var e=c.listTabs();e.forEach(function(e){RED.workspaces.hide(e),u.pop()}),0<e.length&&u.push(e),c.clearSelection()}),RED.actions.add("core:show-all-flows",function(){c.listTabs().forEach(function(e){RED.workspaces.show(e,null,!0)})}),RED.actions.add("core:show-last-hidden-flow",function(){var e,t=u.pop();t&&("string"==typeof t?RED.workspaces.show(t):(e=t.pop(),t.forEach(function(e){RED.workspaces.show(e,null,!0)}),setTimeout(function(){RED.workspaces.show(e)},150)))}),RED.actions.add("core:list-modified-nodes",function(){RED.actions.invoke("core:search","is:modified ")}),RED.actions.add("core:list-hidden-flows",function(){RED.actions.invoke("core:search","is:hidden ")}),RED.actions.add("core:list-flows",function(){RED.actions.invoke("core:search","type:tab ")}),RED.actions.add("core:list-subflows",function(){RED.actions.invoke("core:search","type:subflow ")}),RED.actions.add("core:go-to-previous-location",function(){0<n&&(n===t.length&&t.push(a),RED.workspaces.show(t[--n],!0))}),RED.actions.add("core:go-to-next-location",function(){n<t.length-1&&RED.workspaces.show(t[++n],!0)}),RED.events.on("flows:change",e=>{$("#red-ui-tab-"+e.id.replace(".","-")).toggleClass("red-ui-workspace-changed",!!(e.contentsChanged||e.changed||e.added))}),RED.events.on("subflows:change",e=>{$("#red-ui-tab-"+e.id.replace(".","-")).toggleClass("red-ui-workspace-changed",!!(e.contentsChanged||e.changed||e.added))}),v()},add:p,remove:_,delete:f,order:T,edit:b,contains:function(e){return c.contains(e)},count:function(){return g},active:function(){return a},isLocked:function(e){e=e||a;e=RED.nodes.workspace(e)||RED.nodes.subflow(e);return e&&e.locked},selection:function(){return c.selection()},hide:function(e){e=e||a,c.contains(e)&&c.hideTab(e)},isHidden:function(e){return u.includes(e)},show:function(e,t,o,n){if(!c.contains(e)){var i=RED.nodes.subflow(e);if(!i)return;p({type:"subflow",id:e,icon:"red/images/subflow_tab.svg",label:i.name,closeable:!0},null,c.activeIndex()+1),l(e)}if(o?c.showTab(e):(t||a===e||d(a),c.activateTab(e)),n){i=e.replace(".","-");s&&s.length&&(clearInterval(r),r=null,s.removeClass("highlighted"),s=null);let t=$("#red-ui-tab-"+i);t&&t.length&&(r=setInterval(function(e){e>=Date.now()?(e=t.hasClass("highlighted"),t.toggleClass("highlighted",!e)):(clearInterval(r),r=null,s=null,t.removeClass("highlighted"))},100,Date.now()+2200),(s=t).addClass("highlighted"))}},refresh:function(){var e=RED.nodes.workspace(RED.workspaces.active());e?document.title=o+" : "+e.label:(e=RED.nodes.subflow(RED.workspaces.active()),document.title=e?o+" : "+e.name:o),RED.nodes.eachWorkspace(function(e){c.renameTab(e.id,e.label),$("#red-ui-tab-"+e.id.replace(".","-")).attr("flowname",e.label)}),RED.nodes.eachSubflow(function(e){c.contains(e.id)&&c.renameTab(e.id,e.name)}),RED.sidebar.config.refresh()},resize:function(){c.resize()},enable:y,disable:w,lock:D,unlock:R}}(),RED.statusBar=function(){var o,n;return{init:function(){o=$('<span class="red-ui-statusbar-bucket red-ui-statusbar-bucket-left">').appendTo("#red-ui-workspace-footer"),n=$('<span class="red-ui-statusbar-bucket red-ui-statusbar-bucket-right">').appendTo("#red-ui-workspace-footer")},add:function(e){e.id,e;var t=$('<span class="red-ui-statusbar-widget"></span>');t.prop("id",e.id),e.element.appendTo(t),"left"===e.align?o.append(t):"right"===e.align&&n.prepend(t)}}}(),RED.view=function(){var Z,Q,ee,d,R=8e3,te=8e3,e=.75,x=1,G=100,F=30,c=650,u=1e3,p=0,f=[],l=0,a={},w=20,oe=!1,ne=!1,_=!1,U=null,ie=[],ae=[],se=[],h=[],k={},E=null,re=!1,D=null,v=[],de={},T=null,C=null,le=null,j=null,ce=0,L=null,ue=[0,0],V=null,J=0,S=null,O=null,pe=null,m=null,s=!1,g=null,fe=null,y=0,he=0,ge=[],N=null,me=-1,n=!1,ve=[];let r;var b,I,be="";let ye;const we={red:"#c00",green:"#5a8",yellow:"#F9DF31",blue:"#53A3F3",grey:"#d3d3d3",gray:"#d3d3d3"},P=1,A=0;let M,z,Ee,De,Re,xe,_e,ke,$e;const q=function(){var a=new Set,s=[];const r={add:function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)r.add(e[t]);else if(!a.has(e.id)){s.push({n:e}),a.add(e.id);for(var o=RED.nodes.getNodeLinks(e.id,P).concat(RED.nodes.getNodeLinks(e.id,A)),t=0,n=o.length;t<n;t++){var i=o[t];(i.source===e&&a.has(i.target.id)||i.target===e&&a.has(i.source.id))&&B.add(i)}}},remove:function(e,t){if(a.has(e.id)){if(a.delete(e.id),void 0!==t&&s[t].n===e)s.splice(t,1);else for(var o=0;o<s.length;o++)if(s[o].n===e){s.splice(o,1);break}for(var n=RED.nodes.getNodeLinks(e.id,P).concat(RED.nodes.getNodeLinks(e.id,A)),o=0,i=n.length;o<i;o++)B.remove(n[o])}},clear:function(){a.clear(),s=[]},length:function(){return s.length},get:function(e){return s[e]},forEach:function(e){s.forEach(e)},nodes:function(){return s.map(function(e){return e.n})},has:function(e){return a.has(e.id)},makePrimary:function(t){var e=s.findIndex(e=>e.n===t);-1<e&&(e=s.splice(e,1),s.unshift(...e))},find:function(e){return s.find(e)},dump:function(){console.log("MovingSet Contents"),r.forEach((e,t)=>{console.log(`${t+1} ${e.n.id} `+e.n.type)})}};return r}(),B=function(){var t=new Set;const o={add:function(e){t.add(e),e.selected=!0},remove:function(e){t.delete(e),e.selected=!1},clear:function(){t.forEach(function(e){e.selected=!1}),t.clear()},length:function(){return t.size},forEach:function(e){t.forEach(e)},has:function(e){return t.has(e)},toArray:function(){return Array.from(t)},clearUnselected:function(){o.forEach(e=>{e.source.selected&&e.target.selected||o.remove(e)})}};return o}(),Te=function(){let i=new Set;return{add:function(e,t,o){var n;i.add(e),e.selected||(e.selected=!0,e.dirty=!0),!1!==o&&q.add(e),t&&(n=new Set(q.nodes()),RED.group.getNodes(e,!0).forEach(function(e){n.has(e)||q.add(e),e.dirty=!0})),B.clearUnselected()},remove:function(t){i.delete(t),t.selected&&(t.selected=!1,t.dirty=!0);var e=RED.group.getNodes(t,!0),o=new Set(e);o.add(t);for(let e=q.length()-1;0<=e;--e){var n=q.get(e);!o.has(n.n)&&n.n!==t||(n.n.selected=!1,n.n.dirty=!0,q.remove(n.n,e))}B.clearUnselected()},length:()=>i.size,forEach:e=>{i.forEach(e)},toArray:()=>[...i],clear:function(){i.forEach(e=>{e.selected=!1,e.dirty=!0}),i.clear()}}}(),t="mac"===RED.utils.getBrowserInfo().os;function Ce(e){return t&&e.metaKey||!t&&e.ctrlKey}function je(){for(var e=[],t=0;t<R;t+=+w)e.push(t);Ee.selectAll("line.red-ui-workspace-chart-grid-h").remove(),Ee.selectAll("line.red-ui-workspace-chart-grid-h").data(e).enter().append("line").attr({class:"red-ui-workspace-chart-grid-h",x1:0,x2:R,y1:function(e){return e},y2:function(e){return e}}),Ee.selectAll("line.red-ui-workspace-chart-grid-v").remove(),Ee.selectAll("line.red-ui-workspace-chart-grid-v").data(e).enter().append("line").attr({class:"red-ui-workspace-chart-grid-v",y1:0,y2:R,x1:function(e){return e},x2:function(e){return e}})}function Le(e){me=-1;for(var t=0;t<e.length;t++){var o=e[t];o.el=xe.append("svg:path").attr("class","red-ui-flow-drag-line"),("link out"===o.node.type&&o.portType===A||"link in"===o.node.type&&o.portType===P)&&(o.el.attr("class","red-ui-flow-link-link red-ui-flow-drag-line"),o.virtualLink=!0,me=o.portType===A?P:A),I.push(o)}-1!==me&&ie.forEach(function(e){"link in"!==e.type&&"link out"!==e.type||(e.dirty=!0)})}function Se(){for(-1!==me&&ie.forEach(function(e){"link in"!==e.type&&"link out"!==e.type||(e.dirty=!0)}),me=-1;I.length;){var e=I.pop();e.el&&e.el.remove()}}function W(){var e=RED.workspaces.active();if(0!==e){if((ie=RED.nodes.filterNodes({z:e})).forEach(function(e,t){e._index=t}),ae=RED.nodes.filterLinks({source:{z:e},target:{z:e}}),se=RED.nodes.junctions(e)||[],(v=RED.nodes.groups(e)||[]).length){const o={},n=[];v.forEach(function(e,t){(o[e.id]=e)._index=t,e._childGroups=[],e.g||n.push(e)}),v.forEach(function(e){e.g&&(o[e.g]._childGroups.push(e),e._parentGroup=o[e.g])});let t=0;const i=e=>{e._order=t++,e._childGroups.forEach(i)};n.forEach(i)}}else ie=[],ae=[],se=[],v=[];v.sort(function(e,t){return e._order-t._order}),$e.selectAll(".red-ui-flow-group").data(v,function(e){return e.id}).sort(function(e,t){return e._order-t._order})}function Oe(a,s,r,d,l,c=!1){var u=d-s,p=r-a,f=Math.sqrt(u*u+p*p),h=e;if(0<p*l?f<G&&(h=.75-(G-f)/G*.75):h=.4-.2*Math.max(0,(G-Math.min(Math.abs(p),Math.abs(u)))/G),0<p*l)return`M ${a} ${s} C ${(f=[[a+l*(G*h),s+0*F],[r-l*h*G,d-0*F]])[0][0]} ${f[0][1]} ${f[1][0]} ${f[1][1]} ${r} `+d;{let e,t,o,n,i;var g,f=Math.floor(r-p/2),m=Math.floor(d-u/2);return Math.abs(u)<10?(c=(n=Math.max(s,d)+(c?35:25))-s,g=n-d,"M "+a+" "+s+" C "+(i=[[a+15*l,s],[a+25*l,s+5],[a+25*l,s+c/2],[a+25*l,s+c-5],[a+15*l,s+c],[a,s+c],[r-15*l,s+c],[r-25*l,s+c-5],[r-25*l,d+g/2],[r-25*l,d+5],[r-15*l,d],[r,d]])[0][0]+" "+i[0][1]+" "+i[1][0]+" "+i[1][1]+" "+i[2][0]+" "+i[2][1]+" C "+i[3][0]+" "+i[3][1]+" "+i[4][0]+" "+i[4][1]+" "+i[5][0]+" "+i[5][1]+" h "+p+" C "+i[6][0]+" "+i[6][1]+" "+i[7][0]+" "+i[7][1]+" "+i[8][0]+" "+i[8][1]+" C "+i[9][0]+" "+i[9][1]+" "+i[10][0]+" "+i[10][1]+" "+i[11][0]+" "+i[11][1]+" "):(c=F/2,g=(d+m)/2,e=a+l*G*h,t=0<u?Math.min(g-u/2,s+c):Math.max(g-u/2,s-c),o=r-l*G*h,n=0<u?Math.max(g,d-c):Math.min(g,d+c),p=(a+e)/2,l=0<u?1:-1,(i=[[p,s],[e,0<u?Math.max(s,t-c):Math.min(s,t+c)],[p,0<u?Math.min(m,t+c):Math.max(m,t-c)],[o,0<u?Math.max(m,n-c):Math.min(m,n+c)],[(r+o)/2,d]])[2][1]===t+l*c&&(Math.abs(u)<10*c&&(i[1][1]=t-l*c/2,i[3][1]=n-l*c/2),i[2][0]=e),"M "+a+" "+s+" C "+i[0][0]+" "+i[0][1]+" "+i[1][0]+" "+i[1][1]+" "+e+" "+t+" S "+i[2][0]+" "+i[2][1]+" "+f+" "+m+" S "+i[3][0]+" "+i[3][1]+" "+o+" "+n+" S "+i[4][0]+" "+i[4][1]+" "+r+" "+d)}}function Ne(){var e,t;RED.view.DEBUG&&console.warn("canvasMouseDown",{mouse_mode:J,point:d3.mouse(this),event:d3.event}),RED.contextMenu.hide(),J===RED.state.SELECTING_NODE?d3.event.stopPropagation():1===d3.event.button?(d3.event.preventDefault(),J=RED.state.PANNING,V=[d3.event.pageX,d3.event.pageY],ge=[M.scrollLeft(),M.scrollTop()]):2!==d3.event.button&&(C||T||le||d3.event.shiftKey||(B.clear(),K()),0===J&&S&&(z.classed("red-ui-workspace-lasso-active",!1),S.remove(),S=null),d3.event.touches||0===d3.event.button)&&(0===J&&Ce(d3.event)&&!d3.event.altKey&&!d3.event.shiftKey||J===RED.state.QUICK_JOINING?(d3.event.stopPropagation(),H(),t=Nt((e=d3.mouse(this))[0],e[1]),Ie({position:e,group:t=0<I.length?t||RED.nodes.group(I[0].node.g):t})):0!==J||Ce(d3.event)||(d3.event.altKey?d3.event.altKey&&!_&&(H(),J=d3.event.shiftKey?RED.state.SLICING_JUNCTION:RED.state.SLICING,e=d3.mouse(this),O=b.append("path").attr("class","nr-ui-view-slice").attr("d",`M${e[0]} `+e[1]),pe=e,RED.view.redraw()):l||(t=d3.mouse(this),S=b.append("rect").attr("ox",t[0]).attr("oy",t[1]).attr("rx",1).attr("ry",1).attr("x",t[0]).attr("y",t[1]).attr("width",0).attr("height",0).attr("class","nr-ui-view-lasso"),d3.event.preventDefault(),z.classed("red-ui-workspace-lasso-active",!0))))}function Ie(e){var l,c,t,u,p,o,n,i,a,s,f,h,g;_||(l=(e=e||{}).position||ve,c=e.splice,t=e.spliceMultiple,u=e.group,p=e.touchTrigger,e=l[0],o=l[1],i=$("#red-ui-workspace-chart").offset(),n=e*x+i.left-$("#red-ui-workspace-chart").scrollLeft(),i=o*x+i.top-$("#red-ui-workspace-chart").scrollTop(),RED.settings.get("editor").view["view-snap-grid"]&&(l[0]=Math.round(l[0]/w)*w,l[1]=Math.round(l[1]/w)*w),a=$("#red-ui-main-container").position(),J!==RED.state.QUICK_JOINING&&(J=RED.state.QUICK_JOINING,$(window).on("keyup",it)),m&&m.remove(),(m=b.append("g").attr("transform","translate("+(l[0]-G/2)+","+(l[1]-F/2)+")")).append("rect").attr("class","red-ui-flow-node-placeholder").attr("rx",5).attr("ry",5).attr("width",G).attr("height",F).attr("fill","none"),0<I.length&&(s=I[0].virtualLink?{type:"link in"===I[0].node.type?"link out":"link in"}:I[0].portType===A?{input:!0}:{output:!0},N={node:I[0].node,port:I[0].port,portType:I[0].portType},I[0].virtualLink&&(N.virtualLink=!0),Se()),(c||t)&&(s={input:!0,output:!0,spliceMultiple:t}),f=function(){var e,t;N&&(N.el||(N.el=xe.append("svg:path").attr("class","red-ui-flow-drag-line")),e=-((N.portType===A&&N.node.outputs||1)-1)/2*13+13*N.port,t=N.portType===A?1:-1,N.el.attr("d",Oe(N.node.x+t*N.node.w/2,N.node.y+e,l[0]-t*G/2,l[1],t)))},N&&f(),RED.typeSearch.show({x:n-a.left-G/2-(e-l[0]),y:i-a.top+F/2+5-(o-l[1]),disableFocus:p,filter:s,move:function(e,t){var o;m&&(o=d3.transform(m.attr("transform")).translate,m.attr("transform","translate("+(o[0]+e)+","+(o[1]+t)+")"),l[0]+=e,l[1]+=t,f())},cancel:function(){N&&(N.el&&N.el.remove(),N=null),m&&m.remove(),X(),K(),Se(),Y()},add:function(e,t){var o;if(p&&(t=!1,X()),/^_action_:/.test(e))n=e.substring(9),m.remove(),RED.actions.invoke(n);else{if("junction"===e)o={_def:{defaults:{}},type:"junction",z:RED.workspaces.active(),id:RED.nodes.id(),x:0,y:0,w:0,h:0,outputs:1,inputs:1,dirty:!0,moved:!0},i={t:"add",dirty:RED.nodes.dirty(),junctions:[o]};else{var n=qt(e);if(!n)return;o=n.node,i=n.historyEvent}t&&(J=RED.state.QUICK_JOINING),o.x=l[0],o.y=l[1];var i,a,s,r,d,e=RED.utils.getMessageProperty(RED.settings.get("editor"),"view.view-node-show-label");void 0===e||o._def.hasOwnProperty("showLabel")&&!o._def.showLabel||o._def.defaults.hasOwnProperty("l")||(o.l=e),o="junction"===o.type?RED.nodes.addJunction(o):RED.nodes.add(o),N?(n=null,(e=N).portType===A&&(0<o.inputs||e.virtualLink)?(n=e.node,s=e.port,r=o):e.portType===P&&(0<o.outputs||e.virtualLink)&&(n=o,r=e.node,s=0),null!==n?(e.virtualLink?(i={t:"multi",events:[i]},d=$.extend(!0,{},{v:n.links}).v,a=$.extend(!0,{},{v:r.links}).v,n.links.push(r.id),r.links.push(n.id),n.dirty=!0,r.dirty=!0,i.events.push({t:"edit",node:n,dirty:RED.nodes.dirty(),changed:n.changed,changes:{links:d}}),i.events.push({t:"edit",node:r,dirty:RED.nodes.dirty(),changed:r.changed,changes:{links:a}}),n.changed=!0,r.changed=!0):(RED.nodes.addLink(d={source:n,sourcePort:s,target:r}),i.links=[d]),t?(N.node=o,N.port=0):(N.el.remove(),N=null,J===RED.state.QUICK_JOINING&&(e.portType===A&&0<o.outputs?Le([{node:o,port:0,portType:A}]):!N&&e.portType===P&&0<o.inputs?Le([{node:o,port:0,portType:P}]):X()))):(Se(),X())):t?0<o.outputs?N={node:o,port:0,portType:A}:0<o.inputs?N={node:o,port:0,portType:P}:X():J===RED.state.QUICK_JOINING&&(0<o.outputs?Le([{node:o,port:0,portType:A}]):0<o.inputs?Le([{node:o,port:0,portType:P}]):X()),RED.editor.validateNode(o),u&&(a=u.x,n=u.y,RED.group.addToGroup(u,o),s=null,u.x===a&&u.y===n||(s={t:"move",nodes:[{n:u,ox:a,oy:n,dx:u.x-a,dy:u.y-n}],dirty:!0}),(i="multi"!==i.t?{t:"multi",events:[i]}:i).events.push({t:"addToGroup",group:u,nodes:o}),s)&&i.events.push(s),c&&(X(),ze(c,o,i)),RED.history.push(i),RED.nodes.dirty(!0),H(),o.selected=!0,q.add(o),W(),K(),Y(),void 0!==h&&(r=h+g/2,(d=o.x-o.w/2-r)!=2*w)&&(o.x=o.x+2*w-d,o.dirty=!0,o.x=Math.ceil(o.x/w)*w,Y()),t?(void 0===h&&setTimeout(function(){RED.typeSearch.refresh({filter:{input:!0}})},100),h=o.x,g=o.w,l[0]=o.x+o.w/2+G/2+2*w,m.attr("transform","translate("+(l[0]-G/2)+","+(l[1]-F/2)+")"),f()):m.remove()}}}),W(),K(),Y())}function Pe(){var c,e;if(J===RED.state.PANNING)d=[d3.event.pageX,d3.event.pageY],d3.event.touches&&(d=[(v=d3.event.touches.item(0)).pageX,v.pageY]),v=[V[0]-d[0],V[1]-d[1]],M.scrollLeft(ge[0]+v[0]),M.scrollTop(ge[1]+v[1]);else if(V=d3.touches(this)[0]||d3.mouse(this),S)d=parseInt(S.attr("ox")),v=parseInt(S.attr("oy")),e=parseInt(S.attr("x")),t=parseInt(S.attr("y")),d=V[0]<d?d-(e=V[0]):V[0]-e,v=V[1]<v?v-(t=V[1]):V[1]-t,S.attr("x",e).attr("y",t).attr("width",d).attr("height",v);else if(J===RED.state.SLICING||J===RED.state.SLICING_JUNCTION)O&&20<Math.max(1,Math.abs(pe[0]-V[0]))*Math.max(1,Math.abs(pe[1]-V[1]))&&(e=O.attr("d"),e+=" L"+V[0]+" "+V[1],O.attr("d",e),pe=V);else if(J===RED.state.SELECTING_NODE)d3.event.stopPropagation();else if(J==RED.state.QUICK_JOINING||J==RED.state.IMPORT_DRAGGING||J==RED.state.DETACHED_DRAGGING||C||le||0!==B.length()){if(J==RED.state.JOINING||J===RED.state.QUICK_JOINING){if(0===I.length&&null!==j){if(d3.event.shiftKey){var t,o=[],n=[];for(0<B.length()?B.forEach(function(e){(j===A&&e.source===C&&e.sourcePort===ce||j===P&&e.target===C)&&n.push(e)}):(t=j===A?{source:C,sourcePort:ce}:{target:C},n=RED.nodes.filterLinks(t)),b=0;b<n.length;b++){var i=n[b];RED.nodes.removeLink(i),o.push({link:i,node:j===A?i.target:i.source,port:j===A?0:i.sourcePort,portType:j===A?P:A})}0===o.length?(X(),Y()):(Le(o),J=0,W(),Y(),J=RED.state.JOINING)}else C&&!N&&Le([{node:C,port:ce,portType:j}]);B.clear()}for(l=V,b=0;b<I.length;b++){var a=I[b],s=-((a.portType===A&&a.node.outputs||1)-1)/2*13+13*a.port,r=a.portType===A?1:-1;a.el.attr("d",Oe(a.node.x+r*a.node.w/2,a.node.y+s,l[0],l[1],r,!!a.node.status))}d3.event.preventDefault()}else if(J==RED.state.MOVING){l=d3.mouse(document.body),isNaN(l[0])&&(l=d3.touches(document.body)[0]);var d=(ue[0]-l[0])*(ue[0]-l[0])+(ue[1]-l[1])*(ue[1]-l[1]);(3<d&&!fe||fe&&10<d)&&(he=0,_||(C&&q.makePrimary(C),J=RED.state.MOVING_ACTIVE,Ut()))}else if(J==RED.state.MOVING_ACTIVE||J==RED.state.IMPORT_DRAGGING||J==RED.state.DETACHED_DRAGGING){for(var l=V,u=0,p=0,f=R,h=te,g=0;g<q.length();g++)c=q.get(g),d3.event.shiftKey&&(c.n.ox=c.n.x,c.n.oy=c.n.y),c.n._detachFromGroup=d3.event.altKey,c.n.x=l[0]+c.dx,c.n.y=l[1]+c.dy,c.n.dirty=!0,h="group"===c.n.type?(!1!==c.n.groupMoved&&(c.n.groupMoved=!0),RED.group.markDirty(c.n),u=Math.min(c.n.x-5,u),p=Math.min(c.n.y-5,p),f=Math.max(c.n.x+c.n.w+5,f),Math.max(c.n.y+c.n.h+5,h)):(u=Math.min(c.n.x-c.n.w/2-5,u),p=Math.min(c.n.y-c.n.h/2-5,p),f=Math.max(c.n.x+c.n.w/2+5,f),Math.max(c.n.y+c.n.h/2+5,h));if(0!==u||0!==p)for(b=0;b<q.length();b++)(c=q.get(b)).n.x-=u,c.n.y-=p;if(f!==R||h!==te)for(b=0;b<q.length();b++)(c=q.get(b)).n.x-=f-R,c.n.y-=h-te;var m=[0,0];if(oe!=d3.event.shiftKey&&0<q.length()){for(var v,b=0;c=q.get(b++),b<q.length()&&"group"===c.n.type;);if("group"===c.n.type?(m[0]=c.n.x-w*Math.floor(c.n.x/w)-w/2,m[1]=c.n.y-w*Math.floor(c.n.y/w)-w/2):(v=RED.view.tools.calculateGridSnapOffsets(c.n),m[0]=v.x,m[1]=v.y),0!==m[0]||0!==m[1])for(b=0;b<q.length();b++)(c=q.get(b)).n.x-=m[0],c.n.y-=m[1],c.n.x==c.n.ox&&c.n.y==c.n.oy&&(c.dirty=!1)}if(1===q.length()&&"group"!==q.get(0).n.type&&(c=q.get(0),ne)&&(Q=Q||setTimeout(function(){for(var e,t=[],o=1/0,n=null,i=c.n.x,a=c.n.y,t=z[0][0].getIntersectionList?((e=z[0][0].createSVGRect()).x=i*x,e.y=a*x,e.width=1,e.height=1,z[0][0].getIntersectionList(e,z[0][0])):RED.view.getLinksAtPoint(i*x,a*x),s=0;s<t.length;s++)if(d3.select(t[s]).classed("red-ui-flow-link-background"))for(var r=t[s].getTotalLength(),d=0;d<r;d+=10){var l=t[s].getPointAtLength(d),l=(l.x-i)*(l.x-i)+(l.y-a)*(l.y-a);l<200&&l<o&&(o=l,n=t[s])}Z&&Z!==n&&d3.select(Z.parentNode).classed("red-ui-flow-link-splice",!1),n?d3.select(n.parentNode).classed("red-ui-flow-link-splice",!0):d3.select(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),Z=n,Q=null},100)),re&&!ee){const y=d3.event.altKey;ee=setTimeout(function(){c=q.get(0);var e=Nt(l[0],l[1],!0);e!==E&&(E&&(E.hovered=!1,E.dirty=!0),E=e),(E=!E||!D||y||D!==E.id&&(e=RED.nodes.group(D),RED.group.contains(e,E))?E:null)&&(E.hovered=!0,E.dirty=!0),ee=null},50)}}0!==J&&Y()}}function Ae(){0!==J&&0!==d3.event.buttons&&d3.select(document).on("mouseup.red-ui-workspace-tracker",function(){d3.select(document).on("mouseup.red-ui-workspace-tracker",null),Me.call(this)})}function Me(){var a,s,r,d;if(ve=[d3.event.offsetX/x,d3.event.offsetY/x],RED.view.DEBUG&&console.warn("canvasMouseUp",{mouse_mode:J,point:d3.mouse(this),event:d3.event}),2!==d3.event.button)if(J===RED.state.PANNING)X();else if(J===RED.state.SELECTING_NODE)d3.event.stopPropagation();else if(J!==RED.state.QUICK_JOINING){if(C&&J==RED.state.JOINING){for(var e=[],t=0;t<I.length;t++)I[t].link&&e.push(I[t].link);0<e.length?(g={t:"delete",links:e,dirty:RED.nodes.dirty()},RED.history.push(g),RED.nodes.dirty(!0)):(d3.event.stopPropagation(),H(),i=Nt((n=d3.mouse(this))[0],n[1]),Ie({position:n,group:i=0<I.length?i||RED.nodes.group(I[0].node.g):i})),Se()}if(S?(a=parseInt(S.attr("x")),s=parseInt(S.attr("y")),r=a+parseInt(S.attr("width")),d=s+parseInt(S.attr("height")),d3.event.shiftKey||H(),v.forEach(function(e){q.has(e)||e.selected||e.x>a&&e.y>s&&e.x+e.w<r&&e.y+e.h<d&&Te.add(e,!0)}),ie.forEach(function(e){q.has(e)||e.selected||e.x>a&&e.x<r&&e.y>s&&e.y<d&&(e.selected=!0,e.dirty=!0,q.add(e))}),se.forEach(function(e){q.has(e)||e.selected||e.x>a&&e.x<r&&e.y>s&&e.y<d&&(e.selected=!0,e.dirty=!0,q.add(e))}),ae.forEach(function(e){var t,o,n,i;e.selected||(t=e.source.y,o=e.target.y,n=e.source.x+e.source.w/2+10,i=e.target.x-e.target.w/2-10,a<n&&n<r&&s<t&&t<d&&a<i&&i<r&&s<o&&o<d&&B.add(e))}),U&&(U.in.forEach(function(e){e.selected=e.x>a&&e.x<r&&e.y>s&&e.y<d,e.selected&&(e.dirty=!0,q.add(e))}),U.out.forEach(function(e){e.selected=e.x>a&&e.x<r&&e.y>s&&e.y<d,e.selected&&(e.dirty=!0,q.add(e))}),U.status)&&(U.status.selected=U.status.x>a&&U.status.x<r&&U.status.y>s&&U.status.y<d,U.status.selected)&&(U.status.dirty=!0,q.add(U.status)),K(),z.classed("red-ui-workspace-lasso-active",!1),S.remove(),S=null):J!=RED.state.DEFAULT||null!=T||d3.event.ctrlKey||d3.event.metaKey?J==RED.state.SLICING?(Ye(),O.remove(),O=null,RED.view.redraw(!0)):J==RED.state.SLICING_JUNCTION&&(RED.actions.invoke("core:split-wires-with-junctions"),O.remove(),O=null):(H(),K()),J==RED.state.MOVING_ACTIVE&&0<q.length()){g={t:"multi",events:[]};var{addedToGroup:o,removedFromGroup:n,groupMoveEvent:i,rehomedNodes:l}=Be(),c=(i&&g.events.push(i),{t:"move",nodes:[],dirty:RED.nodes.dirty()}),u={t:"move",nodes:[],dirty:RED.nodes.dirty(),addToGroup:o,removeFromGroup:n};for(let e=0;e<q.length();e++){const h=q.get(e);delete h.n._detachFromGroup,h.ox===h.n.x&&h.oy===h.n.y&&!o||((l.has(h)?u:c).nodes.push({...h}),h.n.dirty=!0,h.n.moved=!0)}let e=null;0<c.nodes.length&&(g.events.push(c),e=c),0<u.nodes.length&&(g.events.push(u),e=u),e&&Z&&ze(d3.select(Z).data()[0],q.get(0).n,e),0<g.events.length&&(RED.nodes.dirty(!0),1===g.events.length?RED.history.push(g.events[0]):RED.history.push(g),W())}if(J==RED.state.MOVING||J==RED.state.MOVING_ACTIVE||J==RED.state.DETACHED_DRAGGING){if(J===RED.state.DETACHED_DRAGGING){for(var p=[],f=0;f<q.length();f++){var h=q.get(f);h.ox===h.n.x&&h.oy===h.n.y||(p.push({n:h.n,ox:h.ox,oy:h.oy,moved:h.n.moved}),h.n.dirty=!0,h.n.moved=!0)}var i=RED.history.peek(),g={t:"move",nodes:p,dirty:RED.nodes.dirty()};("multi"===i.t?i.events:RED.history).push(g)}for(t=0;t<q.length();t++){var m=q.get(t);delete m.ox,delete m.oy}}J==RED.state.IMPORT_DRAGGING&&("cut"===ye&&(ye="copy"),W(),RED.nodes.dirty(!0)),X(),Y()}}function ze(e,t,o){RED.nodes.removeLink(e);var n={source:e.source,sourcePort:e.sourcePort,target:t},t={source:t,sourcePort:0,target:e.target};RED.nodes.addLink(n),RED.nodes.addLink(t),o.links=(o.links||[]).concat([n,t]),o.removedLinks=[e]}function Be(){var e=D&&d3.event.altKey;let t=null,o=null,n=null;var i=new Set;if(E){var a=E.x,s=E.y;D&&(o=RED.nodes.group(D));for(let e=0;e<q.length();e++){var r=q.get(e);(!r.n.g||o&&r.n.g===o.id)&&(i.add(r),RED.group.addToGroup(E,r.n))}E.x===a&&E.y===s||(n={t:"move",nodes:[{n:E,ox:a,oy:s,dx:E.x-a,dy:E.y-s}],dirty:!0}),(t=E).hovered=!1,E=null}else if(e){o=RED.nodes.group(D);for(let e=0;e<q.length();e++){var d=q.get(e);d.n.g&&d.n.g===o.id&&(i.add(d),RED.group.removeFromGroup(o,d.n))}}return v.forEach(e=>{e.hovered&&(e.hovered=!1,e.dirty=!0)}),{addedToGroup:t,removedFromGroup:o,groupMoveEvent:n,rehomedNodes:i}}function Ge(){x<2&&o(x+.1)}function Fe(){.3<x&&o(x-.1)}function Ue(){o(1)}function Ve(){RED.actions.invoke("core:search",$(this).data("term"))}function Je(){RED.actions.invoke("core:search-previous")}function qe(){RED.actions.invoke("core:search-next")}function o(e){var t=[M.width(),M.height()],o=[M.scrollLeft(),M.scrollTop()],n=[(o[0]+t[0]/2)/x,(o[1]+t[1]/2)/x],t=(x=e,[(o[0]+t[0]/2)/x,(o[1]+t[1]/2)/x]),t=[(t[0]-n[0])*x,(t[1]-n[1])*x];M.scrollLeft(o[0]-t[0]),M.scrollTop(o[1]-t[1]),RED.view.navigator.resize(),Y(),RED.settings.get("editor.view.view-store-zoom")&&RED.settings.setLocal("zoom-level",e.toFixed(1))}function We(){if(J!==RED.state.MOVING&&J!==RED.state.MOVING_ACTIVE){if(J===RED.state.DETACHED_DRAGGING){for(var e=0;e<q.length();e++){var t=q.get(e);t.n.x=t.ox,t.n.y=t.oy}H(),RED.history.pop(),J=0}else J===RED.state.IMPORT_DRAGGING?(H(),RED.history.pop(),J=0):J===RED.state.SLICING||J===RED.state.SLICING_JUNCTION?(O&&(O.remove(),O=null,X()),H()):S?(z.classed("red-ui-workspace-lasso-active",!1),S.remove(),S=null):H();Y()}}function He(){J===RED.state.SELECTING_NODE&&d.single||(B.clear(),H(),v.forEach(function(e){e.g?(e.selected=!1,e.dirty=!0):(Te.add(e,!0),e.selected||(e.selected=!0,e.dirty=!0))}),ie.forEach(function(e){J===RED.state.SELECTING_NODE&&d.filter&&!d.filter(e)||e.g||e.selected||(e.selected=!0,e.dirty=!0,q.add(e))}),se.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,q.add(e))}),J!==RED.state.SELECTING_NODE&&U&&(U.in.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,q.add(e))}),U.out.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,q.add(e))}),U.status)&&!U.status.selected&&(U.status.selected=!0,U.status.dirty=!0,q.add(U.status)),J!==RED.state.SELECTING_NODE&&K(),Y())}function H(){RED.view.DEBUG&&console.warn("clearSelection",J,"movingSet.length():",q.length());for(var e=0;e<q.length();e++){var t=q.get(e);t.n.dirty=!0,t.n.selected=!1}q.clear(),B.clear(),Te.clear()}var Ke=null;function K(){var e={},t=RED.workspaces.active(),o=RED.workspaces.selection();if(0!==t)if(0===o.length){e=Jt(),ae=RED.nodes.filterLinks({source:{z:t},target:{z:t}});RED.nodes.getWorkspaceOrder();var n={};h=[],Object.keys(k).forEach(function(e){k[e].dirty=!0}),k={};for(var i=0;i<q.length();i++){var a,s,r=q.get(i);("link out"===r.n.type&&"return"!==r.n.mode||"link in"===r.n.type)&&r.n.z===t&&(a=r.n,k[a.id]=a,s={},a.links.forEach(function(e){e=RED.nodes.node(e);e&&("link out"===a.type?e.z===a.z?n[a.id+":"+e.id]||(ae.push({source:a,sourcePort:0,target:e,link:!0}),n[a.id+":"+e.id]=!0,(k[e.id]=e).dirty=!0):(s[e.z]=s[e.z]||[],s[e.z].push(e)):e.z===a.z?n[e.id+":"+a.id]||(ae.push({source:e,sourcePort:0,target:a,link:!0}),n[e.id+":"+a.id]=!0,(k[e.id]=e).dirty=!0):(s[e.z]=s[e.z]||[],s[e.z].push(e)))}),0<Object.keys(s).length)&&h.push({refresh:Math.floor(1e4*Math.random()),node:a,links:s})}0===h.length&&0<B.length()&&B.forEach(function(e){e.link&&(ae.push(e),k[e.source.id]=e.source,e.source.dirty=!0,k[e.target.id]=e.target,e.target.dirty=!0)})}else e.flows=o;o=t+":"+JSON.stringify(e,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:"links"===e?t.map(function(e){return e.source.id+":"+e.sourcePort+":"+e.target.id}):t});o!==Ke&&(Ke=o,RED.events.emit("view:selection-changed",e))}function Xe(){var e;RED.workspaces.isLocked()||0<q.length()&&("subflow"===(e=q.get(0).n).type?RED.editor.editSubflow(U):"group"===e.type?RED.editor.editGroup(e):RED.editor.edit(e))}function Ye(e){if(J!==RED.state.SELECTING_NODE&&!_){lt&&(lt.remove(),lt=null);var t=RED.workspaces.selection();if(0<t.length){var o=0;if(t.forEach(function(e){"tab"===e.type&&o++}),o!==RED.workspaces.count()){for(var n={t:"delete",dirty:RED.nodes.dirty(),nodes:[],links:[],groups:[],junctions:[],workspaces:[],subflows:[]},i=RED.nodes.getWorkspaceOrder().slice(0),a=0;a<t.length;a++){var s,r=t[a];r._index=i.indexOf(r.id),RED.workspaces.remove(r),"tab"===r.type?(n.workspaces.push(r),s=RED.nodes.removeWorkspace(r.id)):(s=RED.subflow.removeSubflow(r.id),n.subflows=n.subflows.concat(s.subflows)),n.nodes=n.nodes.concat(s.nodes),n.links=n.links.concat(s.links),n.groups=n.groups.concat(s.groups),n.junctions=n.junctions.concat(s.junctions)}RED.history.push(n),RED.nodes.dirty(!0),W(),K(),Y()}}else if(0<q.length()||0<B.length()){function d(e){e&&(Array.isArray(e)?e:[e]).forEach(function(e){u.push(e),B.remove(e)})}var l,c=[],u=[],p=[],f=[],h=[],g=[],m=[],v=[],b=(e&&(0<(b=(e=RED.nodes.detachNodes(q.nodes())).newLinks).length&&v.push({t:"add",links:b}),d(e.removedLinks)),RED.nodes.dirty());let t=[];if(0<q.length()){for(a=0;a<q.length();a++)"group"===(R=q.get(a).n).type&&t.push(R);for(a=0;a<t.length;a++)t[a].nodes.forEach(function(e){"group"===e.type&&-1===t.indexOf(e)&&t.push(e)});for(var y,w,E,D,R,a=0;a<q.length();a++)(R=q.get(a).n).selected=!1,"group"!==R.type&&"subflow"!==R.type&&"junction"!==R.type?(R.x<0&&(R.x=25),y=RED.nodes.remove(R.id),c.push(R),c=c.concat(y.nodes),d(y.links),R.g&&(E=RED.nodes.group(R.g),-1===t.indexOf(E))&&(D=E.nodes.indexOf(R),E.nodes.splice(D,1),RED.group.markDirty(E))):"junction"===R.type?(w=RED.nodes.removeJunction(R),f.push(R),u=u.concat(w.links),R.g&&(E=RED.nodes.group(R.g),-1===t.indexOf(E))&&(D=E.nodes.indexOf(R),E.nodes.splice(D,1),RED.group.markDirty(E))):("out"===R.direction?h.push(R):"in"===R.direction?g.push(R):"status"===R.direction&&(l=R),R.dirty=!0);for(a=t.length-1;0<=a;a--){var x=t[a];p.push(x),RED.nodes.removeGroup(x)}0<h.length&&(w=RED.subflow.removeOutput(h))&&d(w.links),1==g.length&&(w=RED.subflow.removeInput())&&d(w.links),l&&(w=RED.subflow.removeStatus())&&d(w.links);e=RED.subflow.refresh(!0);e&&(m=e.instances),q.clear(),(0<c.length||0<h.length||0<g.length||l||0<p.length||0<f.length)&&RED.nodes.dirty(!0)}0<B.length()&&B.forEach(function(e){var t,o;e.link?(t=e.source.id,o=e.target.id,t=e.target.links.indexOf(t),o=e.source.links.indexOf(o),v.push({t:"edit",node:e.source,changed:e.source.changed,changes:{links:$.extend(!0,{},{v:e.source.links}).v}}),v.push({t:"edit",node:e.target,changed:e.target.changed,changes:{links:$.extend(!0,{},{v:e.target.links}).v}}),e.source.changed=!0,e.target.changed=!0,e.target.links.splice(t,1),e.source.links.splice(o,1),e.source.dirty=!0,e.target.dirty=!0):(RED.nodes.removeLink(e),u.push(e))}),RED.nodes.dirty(!0);n={t:"delete",nodes:c,links:u,groups:p,junctions:f,subflowOutputs:h,subflowInputs:g,subflow:{id:U?U.id:void 0,instances:m},dirty:b};l&&(n.subflow.status=l),0<v.length?(v.unshift(n),RED.history.push({t:"multi",events:v})):RED.history.push(n),B.clear(),W(),K(),Y()}}}function Ze(e){if(J!==RED.state.SELECTING_NODE){var t=[],o=RED.workspaces.selection();if(0<o.length?(t=[],o.forEach(function(e){"tab"===e.type&&(t.push(e),t=(t=t.concat(RED.nodes.groups(e.id))).concat(RED.nodes.filterNodes({z:e.id})))})):(o=RED.view.selection()).nodes&&o.nodes.forEach(function(e){t.push(e),"group"===e.type&&(t=t.concat(RED.group.getNodes(e,!0)))}),0<t.length){for(var n=[],i=0,a=0,s={},r=0;r<t.length;r++){var d=t[r];if(!s[d.id]&&(s[d.id]=!0,"subflow"!=d.type)){for(var l in"group"===d.type?a++:"junction"===d.type?0:i++,d._def.defaults)d._def.defaults.hasOwnProperty(l)&&d._def.defaults[l].type&&(l=RED.nodes.node(d[l]))&&l._def.exclusive&&n.push(RED.nodes.convertNode(l));n.push(RED.nodes.convertNode(d))}}be=JSON.stringify(n),ye=e?"cut":"copy",RED.menu.setDisabled("menu-item-edit-paste",!1),0<i?RED.notify(RED._("clipboard.nodeCopied",{count:i}),{id:"clipboard"}):0<a&&RED.notify(RED._("clipboard.groupCopied",{count:a}),{id:"clipboard"})}}}function Qe(e,t){for(var o=nt(e),n=0,i=0;i<o.length;i++){var a=ot(o[i],t)[0];n<a&&(n=a)}return{lines:o,width:n}}var et={},tt={};function ot(e,t){var o="!"+e;if(et[t]){if(tt[t][o])return tt[t][o]}else et[t]=document.createElement("span"),et[t].className=t,et[t].style.position="absolute",et[t].style.top="-1000px",document.getElementById("red-ui-editor").appendChild(et[t]),tt[t]={};et[t].textContent=e||"";var e=et[t].offsetWidth,n=et[t].offsetHeight;return tt[t][o]=[e,n],tt[t][o]}function nt(e){var t=[],o=e.split(/\\n /);if(1<o.length){for(var n=0,n=0;n<o.length-1;n++)/\\$/.test(o[n])?(t.push(o[n]+"\\n "+o[n+1]),n++):t.push(o[n]);n===o.length-1&&t.push(o[o.length-1])}else t=o;return t=t.map(function(e){return e.replace(/\\\\n /g,"\\n ").trim()})}function X(){J=0,Z=j=T=L=le=C=null,re=ne=!1,E&&(E.hovered=!1,E=null),d3.selectAll(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),Q&&(clearTimeout(Q),Q=null),ee&&(clearTimeout(ee),ee=null)}function it(e){17!==e.keyCode&&"Meta"!==e.key&&91!==e.keyCode&&27!==e.keyCode||(X(),Se(),Y(),$(window).off("keyup",it))}function at(e,t,o,n){RED.view.DEBUG&&console.warn("portMouseDown",J,e,t,o),RED.contextMenu.hide(),1!==(n=n||d3.event)&&(J===RED.state.SELECTING_NODE?n.stopPropagation():(C=e,j=t,ce=o||0,J!==RED.state.QUICK_JOINING&&!_&&(J=RED.state.JOINING,document.body.style.cursor="crosshair",n.ctrlKey||n.metaKey)&&(J=RED.state.QUICK_JOINING,Le([{node:C,port:ce,portType:j}]),$(window).on("keyup",it)),n.stopPropagation(),n.preventDefault()))}function st(a,s,r,e){if(RED.view.DEBUG&&console.warn("portMouseUp",J,a,s,r),e=e||d3.event,J===RED.state.SELECTING_NODE)e.stopPropagation();else{if(J===RED.state.QUICK_JOINING&&0<I.length){if(I[0].node===a)return;if(I[0].virtualLink&&("link in"===I[0].node.type&&"link out"!==a.type||"link out"===I[0].node.type&&"link in"!==a.type))return}if(document.body.style.cursor="",J==RED.state.JOINING||J==RED.state.QUICK_JOINING){if("undefined"!=typeof TouchEvent&&e instanceof TouchEvent){RED.view.DEBUG&&console.warn("portMouseUp: TouchEvent",J,a,s,r);var o=I[0].portType===P?A:P;let t=!1;for(let e=0;e<ie.length;e++){var n=ie[e];if(RED.view.tools.isPointInNode(n,V)){t=!0,L=n,s=o,r=0;break}}if(!t&&0<I.length&&!I[0].virtualLink)for(let e=0;e<se.length;e++){var i=se[e];if(RED.view.tools.isPointInNode(i,V,20,10)){t=!0,L=i,s=o,r=0;break}}if(!t&&U){var d=[];U.status&&d.push(U.status),U.in&&(d=d.concat(U.in)),U.out&&(d=d.concat(U.out));for(var l=0;l<d.length;l++){var c=d[l];if(RED.view.tools.isPointInNode(c,V)){t=!0,s="in"===(L=c).direction?A:P,r=0;break}}}}else L=a;var u=[],t=[],p=[],f=null;for(l=0;l<I.length;l++)I[l].link&&t.push(I[l].link);var h,g=[];for(l=0;l<I.length;l++)if(s!=I[l].portType&&L!==I[l].node){var m=I[l];let e,o,n,t,i;m.portType===A?(e=m.node,n=m.port,o=L,i=e,m.link&&(t=m.link.target)):m.portType===P&&(e=L,o=m.node,n=r||0,i=o,m.link)&&(t=m.link.source);var v,b,y={source:e,sourcePort:n,target:o};if(m.virtualLink)/^link (in|out)$/.test(e.type)&&/^link (in|out)$/.test(o.type)&&e.type!==o.type&&-1===e.links.indexOf(o.id)&&-1===o.links.indexOf(e.id)&&(v=[...e.links],b=[...o.links],e.links.push(o.id),o.links.push(e.id),t&&(e.links=e.links.filter(e=>e!==t.id),o.links=o.links.filter(e=>e!==t.id),E=[...t.links],t.links=t.links.filter(e=>e!==i.id),t.dirty=!0,p.push(t),g.push({t:"edit",node:t,dirty:RED.nodes.dirty(),changed:t.changed,changes:{links:E}}),t.changed=!0),e.dirty=!0,o.dirty=!0,p.push(e),p.push(o),y.link=!0,ae.push(y),k[e.id]=e,k[o.id]=o,f=y,g.push({t:"edit",node:e,dirty:RED.nodes.dirty(),changed:e.changed,changes:{links:v}}),g.push({t:"edit",node:o,dirty:RED.nodes.dirty(),changed:o.changed,changes:{links:b}}),e.changed=!0,o.changed=!0);else if(!("link out"===a.type&&s===A||"link in"===a.type&&s===P||s===A&&"subflow"!==L.type&&0===L.outputs||s===P&&"subflow"!==L.type&&0===L.inputs||m.portType===P&&"subflow"===L.type&&("status"===L.direction||"out"===L.direction)||m.portType===A&&"subflow"===L.type&&"in"===L.direction)){let t=!1;if("junction"===y.source.type&&"junction"===y.target.type){const D=new Set;let e=[y.target];for(;0<e.length;){var w=e.shift();if(w===y.source){t=!0;break}D.add(w),e=e.concat(RED.nodes.getDownstreamNodes(w).filter(e=>"junction"===e.type&&!D.has(e)))}}var E=0!==RED.nodes.filterLinks({source:e,target:o,sourcePort:n}).length;t||E||(RED.nodes.addLink(y),u.push(y))}}(0<u.length||0<t.length||0<p.length)&&(e=0<p.length?{t:"multi",events:g,dirty:RED.nodes.dirty()}:{t:"add",links:u,removedLinks:t,dirty:RED.nodes.dirty()},U&&(h=RED.subflow.refresh(!0))&&(e.subflow={id:U.id,changed:U.changed,instances:h.instances}),RED.history.push(e),W(),RED.nodes.dirty(!0)),J===RED.state.QUICK_JOINING?((0<u.length||0<p.length)&&(Se(),s===P&&0<a.outputs?Le([{node:a,port:0,portType:A}]):s===A&&0<a.inputs?Le([{node:a,port:0,portType:P}]):X(),(T=f)?(B.clear(),B.add(f),K()):B.clear()),Y()):(X(),Se(),f&&(B.clear(),B.add(f)),(T=f)&&K(),Y())}}}var rt,dt=null,lt=null;function ct(e){var t,o,n=d3.select(e);return"red-ui-workspace-chart-event-layer"===n.attr("class")?[0,0]:(t=[0,0],"g"===e.nodeName.toLowerCase()?(o=n.attr("transform"))&&(t=d3.transform(o).translate):t=[n.attr("x")||0,n.attr("y")||0],o=ct(e.parentNode),[t[0]+o[0],t[1]+o[1]])}function ut(t,o,e){var n,i=o===P?t.inputLabels:t.outputLabels;if(i&&i[e])return i[e];i=o===P?t._def.inputLabels:t._def.outputLabels;if("string"==typeof i)n=i;else if("function"==typeof i)try{n=i.call(t,e)}catch(e){console.log("Definition error: "+t.type+"."+(o===P?"inputLabels":"outputLabels"),e),n=null}else Array.isArray(i)&&(n=i[e]);return n}function pt(e,t,o,n){var i,a,s,r=b.append("g").attr("transform","translate("+e+","+t+")").attr("class","red-ui-flow-port-tooltip"),e=o.indexOf("\\n "),t=(o=-1<e&&"\\"!==o[e-1]?o.substring(0,e)+"...":o).split("\n"),d=6,l=12,c=[],u=0,e=(t.forEach(function(e,t){e=ot(e||"&nbsp;","red-ui-flow-port-tooltip-label");d=Math.max(d,e[0]+14),c.push(e[1]),0===t&&(u=e[1]),l+=e[1]}),d/2-5-2),o=l/2-5-2,p=l-4,f=-l/2;return"left"===n?(i="M0 0 l -5 -5 v -"+o+" q 0 -2 -2 -2 h -"+d+" q -2 0 -2 2 v "+p+" q 0 2 2 2 h "+d+" q 2 0 2 -2 v -"+o+" l 5 -5",a=-14,s="end"):"right"===n?(i="M0 0 l 5 -5 v -"+o+" q 0 -2 2 -2 h "+d+" q 2 0 2 2 v "+p+" q 0 2 -2 2 h -"+d+" q -2 0 -2 -2 v -"+o+" l -5 -5",a=14,s="start"):"top"===n&&(i="M0 0 l 5 -5 h "+e+" q 2 0 2 -2 v -"+l+" q 0 -2 -2 -2 h -"+(d-4)+" q -2 0 -2 2 v "+l+" q 0 2 2 2 h "+e+" l 5 5",a=-d/2+6,f=-l-u+12,s="start"),r.append("path").attr("d",i),t.forEach(function(e,t){f+=c[t],r.append("svg:text").attr("class","red-ui-flow-port-tooltip-label").attr("x",a).attr("y",f).attr("text-anchor",s).text(e||" ")}),r}function ft(o,n,i,a){var e;J===RED.state.SELECTING_NODE?d3.event.stopPropagation():(clearTimeout(dt),(e=J!=RED.state.JOINING&&J!=RED.state.QUICK_JOINING||0<I.length&&I[0].portType!==i&&(!I[0].virtualLink||"link in"===I[0].node.type&&"link out"===n.type||"link out"===I[0].node.type&&"link in"===n.type))&&(i===P&&(n._def&&n._def.inputLabels||n.inputLabels)||i===A&&(n._def&&n._def.outputLabels||n.outputLabels))&&(dt=setTimeout(function(){var e,t=o&&o.node();t&&t.__data__&&t.__data__.id;t&&t.parentNode&&RED.nodes.node(t.__data__.id)&&(e=ut(n,i,a))&&(t=ct(t),dt=null,lt=pt(t[0]+(i===P?-2:12),t[1]+5,e,i===P?"left":"right"))},500)),o.classed("red-ui-flow-port-hovered",e))}function ht(e){J===RED.state.SELECTING_NODE?d3.event.stopPropagation():(clearTimeout(dt),lt&&(lt.remove(),lt=null),e.classed("red-ui-flow-port-hovered",!1))}function gt(e){for(J=RED.state.MOVING,i=0;i<q.length();i++){var t=q.get(i);t.ox=t.n.x,t.oy=t.n.y,t.dx=t.n.x-e[0],t.dy=t.n.y-e[1]}try{ue=d3.mouse(document.body),isNaN(ue[0])&&(ue=d3.touches(document.body)[0])}catch(e){ue=[0,0]}}function mt(e){if(RED.view.DEBUG&&console.warn("nodeMouseUp",J,e),J===RED.state.SELECTING_NODE)d3.event.stopPropagation();else if(fe&&C==e&&0<he&&he<c)J=RED.state.DEFAULT,he=(RED.workspaces.isLocked()||(d3.event.preventDefault(),document.getSelection().removeAllRanges(),"subflow"!=e.type?/^subflow:/.test(e.type)&&Ce(d3.event)?RED.workspaces.show(e.type.substring(8)):RED.editor.edit(e):RED.editor.editSubflow(U)),0),d3.event.stopPropagation();else{if(J===RED.state.MOVING)if(!n&&!e.selected&&e.g&&RED.nodes.group(e.g).selected)return H(),Te.add(RED.nodes.group(e.g),!1),C.selected=!0,q.add(C),(t=d3.touches(this)[0]||d3.mouse(this))[0]+=e.x-e.w/2,t[1]+=e.y-e.h/2,gt(t),void K();n=!1;var t=e._def?0<e.inputs?1:0:"in"==e.direction?0:1,o=!1;J!==RED.state.JOINING&&J!==RED.state.QUICK_JOINING||(o=!0,0<I.length&&(I[0].virtualLink?"link in"===e.type?t=1:"link out"===e.type&&(t=0):t=1===I[0].portType?A:P)),st(e,t,0),o&&d3.selectAll(".red-ui-flow-port-hovered").classed("red-ui-flow-port-hovered",!1)}}function vt(e){if(RED.view.DEBUG&&console.warn("nodeMouseDown",J,e),Gt(),RED.contextMenu.hide(),1!==d3.event.button){if(J==RED.state.IMPORT_DRAGGING||J==RED.state.DETACHED_DRAGGING){var t=RED.history.peek(),o=Be()["groupMoveEvent"];if(Z&&(ze(d3.select(Z).data()[0],q.get(0).n,t),W()),J==RED.state.DETACHED_DRAGGING){for(var n=[],i=0;i<q.length();i++)(r=q.get(i)).ox===r.n.x&&r.oy===r.n.y||(n.push({n:r.n,ox:r.ox,oy:r.oy,moved:r.n.moved}),r.n.dirty=!0,r.n.moved=!0);var a={t:"multi",events:[t,{t:"move",nodes:n}],dirty:t.dirty};o&&a.events.push(o),RED.history.replace(a)}else o&&RED.history.replace(a={t:"multi",events:[t,o],dirty:!0});K(),RED.nodes.dirty(!0),Y(),"cut"===ye&&(ye="copy"),X()}else if(J!=RED.state.QUICK_JOINING){if(J===RED.state.SELECTING_NODE)return d3.event.stopPropagation(),"junction"===e.type?void 0:d.single?void d.done(e):(e.selected?(e.selected=!1,q.remove(e)):d.filter&&!d.filter(e)||(e.selected=!0,q.add(e)),e.dirty=!0,void Y());C=e;t=Date.now();if(he=t-y,y=t,fe=g==C&&(d3.event.touches||0===d3.event.button)&&!d3.event.shiftKey&&!d3.event.altKey&&he<c&&"junction"!==e.type,g=C,e.selected&&Ce(d3.event))C.selected=!1,q.remove(C);else{if(d3.event.shiftKey){Ce(d3.event)||H();for(var o=d3.event.offsetX/x-C.x,s=(C.w||10)/2-Math.abs(o)<(30<C.w?25:0<C.w?8:3)?[C].concat(o<0?RED.nodes.getAllUpstreamNodes(C):RED.nodes.getAllDownstreamNodes(C)):RED.nodes.getAllFlowNodes(C),r=0;r<s.length;r++)s[r].selected=!0,s[r].dirty=!0,q.add(s[r])}else e.selected||(d3.event.ctrlKey||d3.event.metaKey||H(),C.selected=!0,q.add(C));2!=d3.event.button&&((a=d3.touches(this)[0]||d3.mouse(this))[0]+=e.x-e.w/2,a[1]+=e.y-e.h/2,gt(a))}e.dirty=!0,K(),Y()}d3.event.stopPropagation()}}function bt(e){RED.view.DEBUG&&console.warn("nodeTouchStart",J,e);var t=d3.select(this),o=d3.event.touches.item(0),n=[o.pageX,o.pageY];f=[o.pageX,o.pageY],p=0,l=setTimeout(function(){At(t,n)},u),vt.call(this,e),d3.event.preventDefault()}function yt(e){RED.view.DEBUG&&console.warn("nodeTouchEnd",J,e),d3.event.preventDefault(),clearTimeout(l),l=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():mt.call(this,e)}function wt(o){var n,e,t;RED.view.DEBUG&&console.warn("nodeMouseOver",J,o),0===J||J===RED.state.SELECTING_NODE?(J===RED.state.SELECTING_NODE&&d&&d.filter&&!d.filter(o)||this.parentNode.classList.add("red-ui-flow-node-hovered"),clearTimeout(dt),(o.hasOwnProperty("l")?o.l:"link in"!==o.type&&"link out"!==o.type)||(n=this.parentNode,dt=setTimeout(function(){if(n&&n.parentNode&&RED.nodes.node(n.id)){var t,e;if(o._def.label){t=o._def.label;try{t=("function"==typeof t?t.call(o):t)||""}catch(e){console.log("Definition error: "+o.type+".label",e),t=o.type}}""!==t&&(e=ct(n),dt=null,lt=pt(e[0]+o.w/2,e[1]-1,t,"top"))}},500))):J!==RED.state.JOINING&&J!==RED.state.QUICK_JOINING||0<I.length&&(t=I[0].virtualLink&&I[0].portType===P||I[0].portType===A?(e=".red-ui-flow-port-input .red-ui-flow-port",P):(e=".red-ui-flow-port-output .red-ui-flow-port",A),ft(d3.select(this.parentNode).selectAll(e),o,t,0))}function Et(e){var t;RED.view.DEBUG&&console.warn("nodeMouseOut",J,e),this.parentNode.classList.remove("red-ui-flow-node-hovered"),clearTimeout(dt),lt&&(lt.remove(),lt=null),J!==RED.state.JOINING&&J!==RED.state.QUICK_JOINING||0<I.length&&(I[0].virtualLink&&I[0].portType===P||I[0].portType===A?(t=".red-ui-flow-port-input .red-ui-flow-port",P):(t=".red-ui-flow-port-output .red-ui-flow-port",A),ht(d3.select(this.parentNode).selectAll(t)))}function Dt(e){at(this.__data__,this.__portType__,this.__portIndex__,e)}function Rt(e){at(this.__data__,this.__portType__,this.__portIndex__,e),e.preventDefault()}function xt(e){st(this.__data__,this.__portType__,this.__portIndex__,e)}function _t(e){st(this.__data__,this.__portType__,this.__portIndex__,e),e.preventDefault()}function kt(e){ft(d3.select(this),this.__data__,this.__portType__,this.__portIndex__)}function $t(e){ht(d3.select(this),this.__data__,this.__portType__,this.__portIndex__)}function Tt(e){var t,o;t=d3.select(this),this.__data__,o=void 0===(o=this.__portType__)||J!==RED.state.JOINING&&J!==RED.state.QUICK_JOINING||0<I.length&&I[0].portType!==o&&!I[0].virtualLink,t.classed("red-ui-flow-junction-hovered",o)}function Ct(e){var t;t=d3.select(this),this.__data__,t.classed("red-ui-flow-junction-hovered",!1)}function jt(e){var t;RED.view.DEBUG&&console.warn("linkMouseDown",{mouse_mode:J,point:d3.mouse(this),event:d3.event}),RED.contextMenu.hide(),J===RED.state.SELECTING_NODE?d3.event.stopPropagation():2!==d3.event.button&&(T=e,Ce(d3.event)||H(),Ce(d3.event)&&B.has(T)?1!==B.length()&&B.remove(T):B.add(T),K(),Y(),Gt(),d3.event.stopPropagation(),!T.link)&&0===q.length()&&(d3.event.touches||0===d3.event.button)&&1===B.length()&&B.has(T)&&Ce(d3.event)&&(d3.select(this).classed("red-ui-flow-link-splice",!0),t=Nt((e=d3.mouse(this))[0],e[1]),Ie({position:e,splice:T,group:t}))}function Lt(e){var t,o;J===RED.state.SELECTING_NODE?d3.event.stopPropagation():(T=e,H(),B.clear(),B.add(T),K(),Y(),Gt(),d3.event.stopPropagation(),t=d3.select(document.body),e=d3.event.touches.item(0),o=[e.pageX,e.pageY],l=setTimeout(function(){l=null,At(t,o)},u),d3.event.preventDefault())}function St(e){RED.view.DEBUG&&console.warn("groupMouseUp",{mouse_mode:J,event:d3.event}),RED.workspaces.isLocked()||fe&&le==e&&0<he&&he<c&&(J=RED.state.DEFAULT,RED.editor.editGroup(e),d3.event.stopPropagation())}function Ot(e){var t,o=d3.touches(this.parentNode)[0]||d3.mouse(this.parentNode);RED.view.DEBUG&&console.warn("groupMouseDown",{mouse_mode:J,point:o,event:d3.event}),RED.contextMenu.hide(),Gt(),1!==d3.event.button&&J!=RED.state.QUICK_JOINING&&(J!==RED.state.SELECTING_NODE&&(le=e,t=Date.now(),he=t-y,y=t,fe=g==e&&(d3.event.touches||0===d3.event.button)&&!d3.event.shiftKey&&!d3.event.metaKey&&!d3.event.altKey&&!d3.event.ctrlKey&&he<c,(g=e).selected&&Ce(d3.event)?(Te.remove(e),d3.event.stopPropagation()):(e.selected||(d3.event.ctrlKey||d3.event.metaKey||H(),Te.add(e,!0)),2!=d3.event.button&&(e.nodes[0],gt(o),le.dx=le.x-o[0],le.dy=le.y-o[1])),K(),Y()),d3.event.stopPropagation())}function Nt(e,t,o){for(var n={},i=0;i<v.length;i++){var a=v[i];o&&q.has(a)||e>=a.x&&e<=a.x+a.w&&t>=a.y&&t<=a.y+a.h&&(n[a.id]=a)}var s=Object.keys(n);return 1<s.length&&(s.forEach(function(e){n[e]&&n[e].g&&delete n[n[e].g]}),s=Object.keys(n)),0===s.length?null:n[s[s.length-1]]}function It(e){var t=!0,o=RED.nodes.workspace(RED.workspaces.active());return!o||o.disabled||e.d||o.locked?t=!1:e._def.button.hasOwnProperty("enabled")&&(t="function"==typeof e._def.button.enabled?e._def.button.enabled.call(e):e._def.button.enabled),t}function Pt(t){if(J===RED.state.SELECTING_NODE)d3.event&&d3.event.stopPropagation();else{var e=RED.workspaces.active(),e=RED.nodes.workspace(e);if(!e||e.disabled||t.d||e.locked)e&&e.locked||(U?RED.notify(RED._("notification.warning",{message:RED._("notification.warnings.nodeActionDisabledSubflow")}),"warning"):RED.notify(RED._("notification.warning",{message:RED._("notification.warnings.nodeActionDisabled")}),"warning"));else{if(t._def.button.toggle&&(t[t._def.button.toggle]=!t[t._def.button.toggle],t.dirty=!0),t._def.button.onclick)try{t._def.button.onclick.call(t)}catch(e){console.log("Definition error: "+t.type+".onclick",e)}t.dirty&&Y()}d3.event&&d3.event.preventDefault()}}function At(e,t){var o=C,n=[],i=RED.workspaces.isLocked();n.push({name:"delete",disabled:i||0===q.length()&&0===B.length(),onselect:function(){Ye()}}),n.push({name:"cut",disabled:i||0===q.length(),onselect:function(){Ze(!0),Ye()}}),n.push({name:"copy",disabled:i||0===q.length(),onselect:function(){Ze()}}),n.push({name:"paste",disabled:i||0===be.length,onselect:function(){Ft(be,{generateIds:!0,touchImport:!0})}}),n.push({name:"edit",disabled:i||1!=q.length(),onselect:function(){RED.editor.edit(o)}}),n.push({name:"select",onselect:function(){He()}}),n.push({name:"undo",disabled:0===RED.history.depth(),onselect:function(){RED.history.pop()}}),n.push({name:"add",disabled:i,onselect:function(){chartPos=M.offset(),Ie({position:[t[0]-chartPos.left+M.scrollLeft(),t[1]-chartPos.top+M.scrollTop()],touchTrigger:!0})}}),RED.touch.radialMenu.show(e,t,n),X()}function Mt(o,e,t){var n,i,a,s=null;0!==o.indexOf("font-awesome/")||(n=o.substr(13),s=RED.nodes.fontAwesome.getIconUnicode(n))||(n=RED.utils.getDefaultNodeIcon(t._def,t),o=RED.settings.apiRootUrl+"icons/"+n.module+"/"+n.file),s?e.append("text").attr("xlink:href",o).attr("class","fa-lg").attr("x",15).text(s):(i=e.append("image").style("display","none").attr("xlink:href",o).attr("class","red-ui-flow-node-icon").attr("x",0).attr("width","30").attr("height","30"),(a=new Image).src=o,a.onload=function(){var e,t;o.match(/\.svg$/)||(e=Math.max(a.width,a.height),t=1,20<(e=a.width*(t=30<e?30/e:t))&&(t*=20/e,e=20),t=a.height*t,i.attr("width",e),i.attr("height",t),i.attr("x",15-e/2),i.attr("y",(30-t)/2)),i.attr("xlink:href",o),i.style("display",null)})}function zt(t,o){if(t.z===RED.workspaces.active()&&(o=o||document.getElementById(t.id))){if(s&&t.status&&!0!==t.d){o.__statusGroup__.style.display="inline";let e=15;var n=we[t.status.fill],n=(null==t.status.shape&&null==n?(e=0,o.__statusShape__.style.display="none",o.__statusBackground__.setAttribute("x",17),o.__statusGroup__.setAttribute("transform","translate(-14,"+(t.h+3)+")")):(o.__statusGroup__.setAttribute("transform","translate(3,"+(t.h+3)+")"),n="red-ui-flow-node-status-"+(t.status.shape||"dot")+"-"+t.status.fill,o.__statusShape__.style.display="inline",o.__statusShape__.setAttribute("class","red-ui-flow-node-status "+n),o.__statusBackground__.setAttribute("x",3)),t.status.hasOwnProperty("text")?o.__statusLabel__.textContent=t.status.text:o.__statusLabel__.textContent="",o.__statusLabel__.getBBox());0<(e+=n.width)&&0<n.width&&(e+=6),o.__statusBackground__.setAttribute("width",e)}else o.__statusGroup__.style.display="none";delete t.dirtyStatus}}function Y(){RED.view.DEBUG_SYNC_REDRAW?Bt():(rt&&cancelAnimationFrame(rt),rt=requestAnimationFrame(Bt))}function Bt(){var E,D,e,t,o,n,a;b.attr("transform","scale("+x+")"),z.attr("width",R*x).attr("height",te*x),-1!==me||J!=RED.state.JOINING?(E={},U?((n=ke.selectAll(".red-ui-flow-subflow-port-output").data(U.out,function(e,t){return e.id})).exit().remove(),n.enter().insert("svg:g").attr("class","red-ui-flow-node red-ui-flow-subflow-port-output").each(function(e,t){var o=d3.select(this),n=document.createDocumentFragment(),i=(e.h=40,e.resize=!0,e.dirty=!0,document.createElementNS("http://www.w3.org/2000/svg","rect")),i=(i.__data__=e,i.setAttribute("class","red-ui-flow-subflow-port"),i.setAttribute("rx",8),i.setAttribute("ry",8),i.setAttribute("width",40),i.setAttribute("height",40),o[0][0].__mainRect__=i,d3.select(i).on("mouseup",mt).on("mousedown",vt).on("touchstart",bt).on("touchend",yt),n.appendChild(i),document.createElementNS("http://www.w3.org/2000/svg","g")),a=(i.setAttribute("x",0),i.setAttribute("y",0),o[0][0].__outputLabelGroup__=i,document.createElementNS("http://www.w3.org/2000/svg","text")),a=(a.setAttribute("class","red-ui-flow-port-label"),a.style["font-size"]="10px",a.textContent="output",i.appendChild(a),o[0][0].__outputOutput__=a,document.createElementNS("http://www.w3.org/2000/svg","text")),a=(a.setAttribute("class","red-ui-flow-port-label red-ui-flow-port-index"),a.setAttribute("x",0),a.setAttribute("y",0),a.textContent=e.i+1,i.appendChild(a),o[0][0].__outputNumber__=a,document.createElementNS("http://www.w3.org/2000/svg","path")),a=(a.setAttribute("d","M 40 1 l 0 38"),a.setAttribute("class","red-ui-flow-node-icon-shade-border"),i.appendChild(a),o[0][0].__outputBorder__=a,n.appendChild(i),document.createElementNS("http://www.w3.org/2000/svg","g")),i=(a.setAttribute("class","red-ui-flow-port-label"),a.setAttribute("transform","translate(38,0)"),a.setAttribute("style","fill : #888"),o[0][0].__textGroup__=a,n.append(a),document.createElementNS("http://www.w3.org/2000/svg","g")),a=(i.setAttribute("transform","translate(-5,15)"),document.createElementNS("http://www.w3.org/2000/svg","rect"));a.setAttribute("class","red-ui-flow-port"),a.setAttribute("rx",3),a.setAttribute("ry",3),a.setAttribute("width",10),a.setAttribute("height",10),i.appendChild(a),a.__data__=e,d3.select(a).on("mousedown",function(e,t){at(e,P,0)}).on("touchstart",function(e,t){at(e,P,0),d3.event.preventDefault()}).on("mouseup",function(e,t){st(e,P,0)}).on("touchend",function(e,t){st(e,P,0),d3.event.preventDefault()}).on("mouseover",function(e){ft(d3.select(this),e,P,0)}).on("mouseout",function(e){ht(d3.select(this),P)}),o[0][0].__port__=i,n.appendChild(i),o[0][0].appendChild(n)}),(e=ke.selectAll(".red-ui-flow-subflow-port-input").data(U.in,function(e,t){return e.id})).exit().remove(),(t=e.enter().insert("svg:g").attr("class","red-ui-flow-node red-ui-flow-subflow-port-input").attr("transform",function(e){return"translate("+(e.x-20)+","+(e.y-20)+")"})).each(function(e,t){e.w=40,e.h=40}),t.append("rect").attr("class","red-ui-flow-subflow-port").attr("rx",8).attr("ry",8).attr("width",40).attr("height",40).on("mouseup",mt).on("mousedown",vt).on("touchstart",bt).on("touchend",yt),t.append("g").attr("transform","translate(35,15)").append("rect").attr("class","red-ui-flow-port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e,t){at(e,A,t)}).on("touchstart",function(e,t){at(e,A,t),d3.event.preventDefault()}).on("mouseup",function(e,t){st(e,A,t)}).on("touchend",function(e,t){st(e,A,t),d3.event.preventDefault()}).on("mouseover",function(e){ft(d3.select(this),e,A,0)}).on("mouseout",function(e){ht(d3.select(this),A)}),t.append("svg:text").attr("class","red-ui-flow-port-label").attr("x",18).attr("y",20).style("font-size","10px").text("input"),(t=ke.selectAll(".red-ui-flow-subflow-port-status").data(U.status?[U.status]:[],function(e,t){return e.id})).exit().remove(),(o=t.enter().insert("svg:g").attr("class","red-ui-flow-node red-ui-flow-subflow-port-status").attr("transform",function(e){return"translate("+(e.x-20)+","+(e.y-20)+")"})).each(function(e,t){e.w=40,e.h=40}),o.append("rect").attr("class","red-ui-flow-subflow-port").attr("rx",8).attr("ry",8).attr("width",40).attr("height",40).on("mouseup",mt).on("mousedown",vt).on("touchstart",bt).on("touchend",yt),o.append("g").attr("transform","translate(-5,15)").append("rect").attr("class","red-ui-flow-port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e,t){at(e,P,0)}).on("touchstart",function(e,t){at(e,P,0),d3.event.preventDefault()}).on("mouseup",function(e,t){st(e,P,0)}).on("touchend",function(e,t){st(e,P,0),d3.event.preventDefault()}).on("mouseover",function(e){ft(d3.select(this),e,P,0)}).on("mouseout",function(e){ht(d3.select(this),P)}),o.append("svg:text").attr("class","red-ui-flow-port-label").attr("x",22).attr("y",20).style("font-size","10px").text("status"),n.each(function(e,t){if(e.dirty){d3.select(this);E[e.id]=e;var o,n=ut(U,A,e.i)||"",i=n.length<1;if(!e.resize&&this.__hideLabel__===i&&this.__label__===n||((o=Qe(n,"red-ui-flow-node-label")).lines.length===this.__labelLineCount__&&this.__label__===n||(e.resize=!0),this.__label__=n,this.__labelLineCount__=o.lines.length,e.h=i?Math.max(40,15*(e.outputs||0)):Math.max(6+24*o.lines.length,15*(e.outputs||0),40),this.__hideLabel__=i),e.resize&&(n=e.w,e.w=i?40:Math.max(40,20*Math.ceil((o.width+50+7)/20)),void 0!==n&&(e.x+=(e.w-n)/2),e.resize=!1),this.setAttribute("transform","translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"),this.classList.toggle("red-ui-flow-node-selected",!!e.selected),J!=RED.state.MOVING_ACTIVE){if(this.classList.toggle("red-ui-flow-node-disabled",!0===e.d),this.__mainRect__.setAttribute("width",e.w),this.__mainRect__.setAttribute("height",e.h),this.__mainRect__.classList.toggle("red-ui-flow-node-highlighted",!!e.highlighted),o){for(var a=o.lines,s=o.lines.length,r=this.__textGroup__.childNodes;r.length>s;)r[r.length-1].remove();for(var d,t=0;t<s;t++)t===r.length&&((d=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","red-ui-flow-node-label-text"),d.setAttribute("x",0),d.setAttribute("y",24*t),this.__textGroup__.appendChild(d)),r[t].textContent=a[t]}this.__textGroup__.setAttribute("class","red-ui-flow-node-label"+(i?" hide":""));n=e.h/2-this.__labelLineCount__/2*24+13;this.__textGroup__.setAttribute("transform","translate(48,"+n+")"),this.__outputBorder__.setAttribute("d","M 40 1 l 0 "+(i?0:e.h-2)),this.__port__.setAttribute("transform","translate(-5,"+(e.h/2-5)+")"),this.__outputOutput__.setAttribute("transform","translate(20,"+(e.h/2-8)+")"),this.__outputNumber__.setAttribute("transform","translate(20,"+(e.h/2+7)+")"),this.__outputNumber__.textContent=e.i+1}e.dirty=!1}}),e.each(function(e,t){var o;e.dirty&&((o=d3.select(this)).classed("red-ui-flow-node-selected",function(e){return e.selected}),o.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),(E[e.id]=e).dirty=!1)}),t.each(function(e,t){var o;e.dirty&&((o=d3.select(this)).classed("red-ui-flow-node-selected",function(e){return e.selected}),o.selectAll(".red-ui-flow-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)+")"}),(E[e.id]=e).dirty=!1)})):(ke.selectAll(".red-ui-flow-subflow-port-output").remove(),ke.selectAll(".red-ui-flow-subflow-port-input").remove(),ke.selectAll(".red-ui-flow-subflow-port-status").remove()),(o=ke.selectAll(".red-ui-flow-node-group").data(ie,function(e){return e.id})).exit().each(function(e,t){RED.hooks.trigger("viewRemoveNode",{node:e,el:this})}).remove(),o.enter().insert("svg:g").attr("class","red-ui-flow-node red-ui-flow-node-group").classed("red-ui-flow-subflow",null!=U).each(function(e,t){this.__outputs__=[],this.__inputs__=[];var o=d3.select(this),n=document.createDocumentFragment(),i="link in"===e.type||"link out"===e.type,i=e.hasOwnProperty("l")?!e.l:i,a=(o.attr("id",e.id),e.h=F,e.resize=!0,e._def.button&&((s=document.createElementNS("http://www.w3.org/2000/svg","g")).__data__=e,s.setAttribute("transform","translate("+("right"==e._def.align?94:-25)+",2)"),s.setAttribute("class","red-ui-flow-node-button"),o[0][0].__buttonGroup__=s,(a=document.createElementNS("http://www.w3.org/2000/svg","rect")).__data__=e,a.setAttribute("class","red-ui-flow-node-button-background"),a.setAttribute("rx",5),a.setAttribute("ry",5),a.setAttribute("width",32),a.setAttribute("height",F-4),s.appendChild(a),o[0][0].__buttonGroupBackground__=a,(a=document.createElementNS("http://www.w3.org/2000/svg","rect")).__data__=e,a.setAttribute("class","red-ui-flow-node-button-button"),a.setAttribute("x","right"==e._def.align?11:5),a.setAttribute("y",4),a.setAttribute("rx",4),a.setAttribute("ry",4),a.setAttribute("width",16),a.setAttribute("height",F-12),a.setAttribute("fill",RED.utils.getNodeColor(e.type,e._def)),d3.select(a).on("mousedown",function(e){!S&&It(e)&&(Gt(),d3.select(this).attr("fill-opacity",.2),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseup",function(e){!S&&It(e)&&(d3.select(this).attr("fill-opacity",.4),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseover",function(e){!S&&It(e)&&d3.select(this).attr("fill-opacity",.4)}).on("mouseout",function(e){var t;!S&&It(e)&&(t=1,e._def.button.toggle&&(t=e[e._def.button.toggle]?1:.2),d3.select(this).attr("fill-opacity",t))}).on("click",Pt).on("touchstart",function(e){Pt.call(this,e),d3.event.preventDefault()}),s.appendChild(a),o[0][0].__buttonGroupButton__=a,n.appendChild(s)),document.createElementNS("http://www.w3.org/2000/svg","rect")),s=(a.__data__=e,a.setAttribute("class","red-ui-flow-node "+("unknown"==e.type?"red-ui-flow-node-unknown":"")),a.setAttribute("rx",5),a.setAttribute("ry",5),a.setAttribute("fill",RED.utils.getNodeColor(e.type,e._def)),o[0][0].__mainRect__=a,d3.select(a).on("mouseup",mt).on("mousedown",vt).on("touchstart",bt).on("touchend",yt).on("mouseover",wt).on("mouseout",Et),n.appendChild(a),e._def.icon&&(s=RED.utils.getNodeIcon(e._def,e),(a=document.createElementNS("http://www.w3.org/2000/svg","g")).__data__=e,a.setAttribute("class","red-ui-flow-node-icon-group"+("right"==e._def.align?" red-ui-flow-node-icon-group-right":"")),a.setAttribute("x",0),a.setAttribute("y",0),a.style["pointer-events"]="none",o[0][0].__iconGroup__=a,(r=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("x",0),r.setAttribute("y",0),r.setAttribute("class","red-ui-flow-node-icon-shade"),a.appendChild(r),o[0][0].__iconShade__=r,Mt(s,d3.select(a),e),(r=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("d","right"!=e._def.align?"M 30 1 l 0 "+(e.h-2):"M 0 1 l 0 "+(e.h-2)),r.setAttribute("class","red-ui-flow-node-icon-shade-border"),a.appendChild(r),o[0][0].__iconShadeBorder__=r,n.appendChild(a)),document.createElementNS("http://www.w3.org/2000/svg","g")),r=(s.setAttribute("class","red-ui-flow-node-label"+(i?" hide":"")+(e._def.align?" red-ui-flow-node-label-"+e._def.align:"")),s.setAttribute("transform","translate(38,0)"),n.appendChild(s),o[0][0].__textGroup__=s,document.createElementNS("http://www.w3.org/2000/svg","g")),a=(r.setAttribute("class","red-ui-flow-node-status-group"),r.style.display="none",o[0][0].__statusGroup__=r,document.createElementNS("http://www.w3.org/2000/svg","rect")),i=(a.setAttribute("class","red-ui-flow-node-status-background"),a.setAttribute("x",3),a.setAttribute("y",-1),a.setAttribute("width",200),a.setAttribute("height",13),a.setAttribute("rx",2),a.setAttribute("ry",2),r.appendChild(a),o[0][0].__statusBackground__=a,document.createElementNS("http://www.w3.org/2000/svg","rect")),s=(i.setAttribute("class","red-ui-flow-node-status"),i.setAttribute("x",6),i.setAttribute("y",1),i.setAttribute("width",9),i.setAttribute("height",9),i.setAttribute("rx",2),i.setAttribute("ry",2),i.setAttribute("stroke-width","3"),r.appendChild(i),o[0][0].__statusShape__=i,document.createElementNS("http://www.w3.org/2000/svg","text"));s.setAttribute("class","red-ui-flow-node-status-label"),s.setAttribute("x",20),s.setAttribute("y",10),r.appendChild(s),o[0][0].__statusLabel__=s,n.appendChild(r),o[0][0].appendChild(n),RED.hooks.trigger("viewAddNode",{node:e,el:this})}),D=!1,o.each(function(t,e){if(t._reordered&&(D=!0,delete t._reordered),t.dirty){var o=this,n=d3.select(this),i="link in"===t.type||"link out"===t.type,a=t.hasOwnProperty("l")?!t.l:i,s=(E[t.id]=t,RED.utils.getNodeLabel(t,t.type));if(!t.resize&&this.__hideLabel__===a&&this.__label__===s&&this.__outputs__.length===t.outputs||((u=Qe(s,"red-ui-flow-node-label")).lines.length===this.__labelLineCount__&&this.__label__===s||(t.resize=!0),this.__label__=s,this.__labelLineCount__=u.lines.length,t.h=a?Math.max(F,15*(t.outputs||0)):Math.max(6+24*u.lines.length,15*(t.outputs||0),30),this.__hideLabel__=a),t.resize&&(s=t.w,t.w=a?F:Math.max(G,20*Math.ceil((u.width+50+(0<t._def.inputs?7:0))/20)),void 0!==s&&(t.x+=(t.w-s)/2),t.resize=!1),t._colorChanged&&(s=RED.utils.getNodeColor(t.type,t._def),this.__mainRect__.setAttribute("fill",s),this.__buttonGroupButton__&&this.__buttonGroupButton__.settAttribute("fill",s),delete t._colorChanged),this.setAttribute("transform","translate("+(t.x-t.w/2)+","+(t.y-t.h/2)+")"),this.classList.toggle("red-ui-flow-node-selected",!!t.selected),J!=RED.state.MOVING_ACTIVE){if(this.classList.toggle("red-ui-flow-node-disabled",!0===t.d),this.__mainRect__.setAttribute("width",t.w),this.__mainRect__.setAttribute("height",t.h),this.__mainRect__.classList.toggle("red-ui-flow-node-highlighted",!!t.highlighted),u){for(var r=u.lines,d=u.lines.length,l=this.__textGroup__.childNodes;l.length>d;)l[l.length-1].remove();for(var c,e=0;e<d;e++)e===l.length&&((c=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","red-ui-flow-node-label-text"),c.setAttribute("x",0),c.setAttribute("y",24*e),this.__textGroup__.appendChild(c)),l[e].textContent=r[e]}s="";if(t._def.labelStyle){s=t._def.labelStyle;try{s=("function"==typeof s?s.call(t):s)||""}catch(e){console.log("Definition error: "+t.type+".labelStyle",e),s=""}s=" "+s}s="red-ui-flow-node-label"+(t._def.align?" red-ui-flow-node-label-"+t._def.align:"")+s+(a?" hide":""),this.__textGroup__.setAttribute("class",s);var u=t.h/2-this.__labelLineCount__/2*24+13,s=(!t._def.align&&0!==t.inputs&&0===t.outputs||"right"===t._def.align?(this.__iconGroup__&&(this.__iconGroup__.classList.add("red-ui-flow-node-icon-group-right"),this.__iconGroup__.setAttribute("transform","translate("+(t.w-30)+",0)")),this.__textGroup__.classList.add("red-ui-flow-node-label-right"),this.__textGroup__.setAttribute("transform","translate("+(t.w-38)+","+u+")")):(this.__iconGroup__&&(this.__iconGroup__.classList.remove("red-ui-flow-node-icon-group-right"),this.__iconGroup__.setAttribute("transform","")),this.__textGroup__.classList.remove("red-ui-flow-node-label-right"),this.__textGroup__.setAttribute("transform","translate(38,"+u+")")),n.selectAll(".red-ui-flow-port-input")),p=(i&&(-1!==me||k[t.id])||0!==t.inputs||s.empty()?(i&&(me===P||k[t.id])||1===t.inputs)&&s.empty()&&(u=n.append("g").attr("class","red-ui-flow-port-input"),h="link in"===t.type?u.append("circle").attr("cx",-1).attr("cy",5).attr("r",5).attr("class","red-ui-flow-port red-ui-flow-link-port"):u.append("rect").attr("class","red-ui-flow-port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10),u[0][0].__port__=h[0][0],h[0][0].__data__=this.__data__,h[0][0].__portType__=P,h[0][0].__portIndex__=0,h.on("mousedown",function(e){at(e,P,0)}).on("touchstart",function(e){at(e,P,0),d3.event.preventDefault()}).on("mouseup",function(e){st(e,P,0)}).on("touchend",function(e){st(e,P,0),d3.event.preventDefault()}).on("mouseover",function(e){ft(d3.select(this),e,P,0)}).on("mouseout",function(e){ht(d3.select(this),P)}),RED.hooks.trigger("viewAddPort",{node:t,el:this,port:u[0][0],portType:"input",portIndex:0})):s.each(function(e,t){RED.hooks.trigger("viewRemovePort",{node:e,el:o,port:d3.select(this)[0][0],portType:"input",portIndex:0})}).remove(),t.outputs);for(i&&"link out"===t.type&&(p="return"===t.mode||me!==A&&!k[t.id]?0:1),t.h;this.__outputs__.length>p;){var f=this.__outputs__.pop();RED.hooks.trigger("viewRemovePort",{node:t,el:this,port:f,portType:"output",portIndex:this.__outputs__.length}),f.remove()}for(var h,g=0;g<p;g++){g===this.__outputs__.length?((v=document.createElementNS("http://www.w3.org/2000/svg","g")).setAttribute("class","red-ui-flow-port-output"),"link out"===t.type?((m=document.createElementNS("http://www.w3.org/2000/svg","circle")).setAttribute("cx",11),m.setAttribute("cy",5),m.setAttribute("r",5),m.setAttribute("class","red-ui-flow-port red-ui-flow-link-port")):((m=document.createElementNS("http://www.w3.org/2000/svg","rect")).setAttribute("rx",3),m.setAttribute("ry",3),m.setAttribute("width",10),m.setAttribute("height",10),m.setAttribute("class","red-ui-flow-port")),v.appendChild(m),(v.__port__=m).__data__=this.__data__,m.__portType__=A,m.__portIndex__=g,m.addEventListener("mousedown",Dt),m.addEventListener("touchstart",Rt),m.addEventListener("mouseup",xt),m.addEventListener("touchend",_t),m.addEventListener("mouseover",kt),m.addEventListener("mouseout",$t),this.appendChild(v),this.__outputs__.push(v),RED.hooks.trigger("viewAddPort",{node:t,el:this,port:v,portType:"output",portIndex:g})):v=this.__outputs__[g];var m,v,b=t.w-5,y=t.h/2-(p-1)/2*13;v.setAttribute("transform","translate("+b+","+(y+13*g-5)+")")}t._def.icon&&(h=n.select(".red-ui-flow-node-icon"),u=n.select(".fa-lg"),s=(h.empty()?u:h).attr("xlink:href"),(i=RED.utils.getNodeIcon(t._def,t))!==s&&((h.empty()?u:h).remove(),Mt(i,n.select(".red-ui-flow-node-icon-group"),t),h=n.select(".red-ui-flow-node-icon"),u=n.select(".fa-lg")),h.attr("y",function(){return(t.h-d3.select(this).attr("height"))/2}),s=t.h,this.__iconShade__.setAttribute("d",a?`M5 0 h20 a 5 5 0 0 1 5 5 v${s-10} a 5 5 0 0 1 -5 5 h-20 a 5 5 0 0 1 -5 -5 v-${s-10} a 5 5 0 0 1 5 -5`:"right"===t._def.align?`M 0 0 h25 a 5 5 0 0 1 5 5 v${s-10} a 5 5 0 0 1 -5 5 h-25 v-`+s:`M5 0 h25 v${s} h-25 a 5 5 0 0 1 -5 -5 v-${s-10} a 5 5 0 0 1 5 -5`),this.__iconShadeBorder__.style.display=a?"none":"",this.__iconShadeBorder__.setAttribute("d","M "+(!t._def.align&&0!==t.inputs&&0===t.outputs||"right"===t._def.align?.5:29.5)+" "+(t.selected?1:.5)+" l 0 "+(t.h-(t.selected?2:1))),u.attr("y",(t.h+13)/2)),n.selectAll(".red-ui-flow-port-input").each(function(e,t){d3.select(this).attr("transform",function(e){return"translate(-5,"+(e.h/2-5)+")"})}),t._def.button&&(i=It(t),this.__buttonGroup__.classList.toggle("red-ui-flow-node-button-disabled",!i),RED.runtime&&void 0!==RED.runtime.started&&this.__buttonGroup__.classList.toggle("red-ui-flow-node-button-stopped",!RED.runtime.started),b="right"==t._def.align?t.w-6:-25,t._def.button.toggle&&!t[t._def.button.toggle]&&(b-="right"==t._def.align?8:-8),this.__buttonGroup__.setAttribute("transform","translate("+b+",2)"),t._def.button.toggle&&(this.__buttonGroupButton__.setAttribute("fill-opacity",t[t._def.button.toggle]?1:.2),this.__buttonGroupBackground__.setAttribute("fill-opacity",t[t._def.button.toggle]?1:.2)),"function"==typeof t._def.button.visible)&&(!1===t._def.button.visible.call(t)?this.__buttonGroup__.style.display="none":this.__buttonGroup__.style.display="inherit")}if(t.dirtyStatus&&zt(t,this),t.dirty=!1,t.g&&!de[t.g])for(var w=t.g;w&&!de[w];)de[w]=RED.nodes.group(w),w=de[w].g}RED.hooks.trigger("viewRedrawNode",{node:t,el:this})}),D&&o.sort(function(e,t){return e._index-t._index}),(n=Re.selectAll(".red-ui-flow-junction").data(se,e=>e.id)).enter().insert("svg:g").attr("class","red-ui-flow-junction").each(function(e,t){var o=d3.select(this),n=document.createDocumentFragment(),i=document.createElementNS("http://www.w3.org/2000/svg","rect"),a=(i.setAttribute("class","red-ui-flow-junction-background"),i.setAttribute("x",-5),i.setAttribute("y",-5),i.setAttribute("width",10),i.setAttribute("height",10),i.setAttribute("rx",3),i.setAttribute("ry",3),i.__data__=e,this.__junctionBack__=i,n.appendChild(i),document.createElementNS("http://www.w3.org/2000/svg","rect")),s=(a.setAttribute("class","red-ui-flow-junction-port red-ui-flow-junction-port-input"),a.setAttribute("x",-5),a.setAttribute("y",-5),a.setAttribute("width",10),a.setAttribute("height",10),a.setAttribute("rx",3),a.setAttribute("ry",3),a.__data__=e,a.__portType__=P,a.__portIndex__=0,this.__junctionInput__=void 0,n.appendChild(a),a.addEventListener("mouseup",xt),a.addEventListener("mousedown",Dt),this.__junctionInput__=a,n.appendChild(a),document.createElementNS("http://www.w3.org/2000/svg","rect"));s.setAttribute("class","red-ui-flow-junction-port red-ui-flow-junction-port-output"),s.setAttribute("x",-5),s.setAttribute("y",-5),s.setAttribute("width",10),s.setAttribute("height",10),s.setAttribute("rx",3),s.setAttribute("ry",3),s.__data__=e,s.__portType__=A,s.__portIndex__=0,this.__junctionOutput__=s,n.appendChild(s),s.addEventListener("mouseup",xt),s.addEventListener("mousedown",Dt),s.addEventListener("mouseover",Tt),s.addEventListener("mouseout",Ct),s.addEventListener("touchmove",Tt),s.addEventListener("touchend",xt),s.addEventListener("touchstart",Dt),a.addEventListener("mouseover",Tt),a.addEventListener("mouseout",Ct),a.addEventListener("touchmove",Tt),a.addEventListener("touchend",xt),a.addEventListener("touchstart",Dt),i.addEventListener("mouseover",Tt),i.addEventListener("mouseout",Ct),i.addEventListener("touchmove",Tt),d3.select(i).on("mousedown",vt).on("mouseup",mt),d3.select(i).on("touchstart",vt).on("touchend",mt),o[0][0].appendChild(n)}),n.exit().remove(),n.each(function(e){var t=d3.select(this);if(this.setAttribute("transform","translate("+e.x+","+e.y+")"),e.dirty&&(t.classed("red-ui-flow-junction-dragging",J===RED.state.MOVING_ACTIVE&&q.has(e)),t.classed("selected",!!e.selected),(E[e.id]=e).g)&&!de[e.g])for(var o=e.g;o&&!de[o];)de[o]=RED.nodes.group(o),o=de[o].g}),(e=De.selectAll(".red-ui-flow-link").data(ae,function(e){return e.source.id+":"+e.sourcePort+":"+e.target.id+":"+e.target.i})).enter().insert("g",".red-ui-flow-node").attr("class","red-ui-flow-link").each(function(e,t){var d=d3.select(this),o=document.createDocumentFragment(),n=(e.added=!0,document.createElementNS("http://www.w3.org/2000/svg","path")),n=(n.__data__=e,n.setAttribute("class","red-ui-flow-link-background red-ui-flow-link-path"+(e.link?" red-ui-flow-link-link":"")),this.__pathBack__=n,o.appendChild(n),d3.select(n).on("mousedown",jt).on("touchstart",Lt).on("mousemove",function(e){if(J===RED.state.SLICING)B.add(e),d.classed("red-ui-flow-link-splice",!0),Y();else if(J===RED.state.SLICING_JUNCTION&&!e.link&&!d.classed("red-ui-flow-link-splice")){for(var t,o=l.getTotalLength(),n=1/0,i=0;i<o;i++){var a=l.getPointAtLength(i),s=Math.abs(a.x-d3.event.offsetX/x),r=Math.abs(a.y-d3.event.offsetY/x),s=s*s+r*r;s<n&&(t=a,n=s)}e._sliceLocation=t,B.add(e),d.classed("red-ui-flow-link-splice",!0),Y()}}),document.createElementNS("http://www.w3.org/2000/svg","path")),l=(n.__data__=e,n.setAttribute("class","red-ui-flow-link-outline red-ui-flow-link-path"),this.__pathOutline__=n,o.appendChild(n),document.createElementNS("http://www.w3.org/2000/svg","path"));l.__data__=e,l.setAttribute("class","red-ui-flow-link-line red-ui-flow-link-path"+(e.link?" red-ui-flow-link-link":U?" red-ui-flow-subflow-link":"")),this.__pathLine__=l,o.appendChild(l),d[0][0].appendChild(o)}),e.exit().remove(),e.each(function(e){var t;d3.select(this),(e.added||e.selected||E[e.source.id]||E[e.target.id])&&(t=-((e.source.outputs||1)-1)/2*13+13*(e.sourcePort||0),e.x1=e.source.x+(e.source.w/2||0),e.y1=e.source.y+t,e.x2=e.target.x-(e.target.w/2||0),e.y2=e.target.y,t=Oe(e.x1,e.y1,e.x2,e.y2,1,!(!e.source.status&&!e.target.status)),/NaN/.test(t)&&(t=""),this.__pathBack__.setAttribute("d",t),this.__pathOutline__.setAttribute("d",t),this.__pathLine__.setAttribute("d",t),this.__pathLine__.classList.toggle("red-ui-flow-node-disabled",!(!e.source.d&&!e.target.d)),this.__pathLine__.classList.toggle("red-ui-flow-subflow-link",!e.link&&U)),this.classList.toggle("red-ui-flow-link-selected",!!e.selected),"unknown"!=e.target.type&&e.source.type;this.classList.toggle("red-ui-flow-link-unknown",!("unknown"!=e.target.type&&"unknown"!=e.source.type)),delete e.added}),(t=De.selectAll(".red-ui-flow-link-off-flow").data(h,function(e){return e.node.id+":"+e.refresh})).enter().insert("g",".red-ui-flow-node").attr("class","red-ui-flow-link-off-flow").each(function(o,e){var t=d3.select(this),n=1,i="start",a=("link in"===o.node.type&&(n=-1,i="end"),30*n),s=20*n,r=(t.append("svg:path").attr("class","red-ui-flow-link-link").attr("d","M 0 0 h "+a),o.links),r=Object.keys(r),d=RED.nodes.getWorkspaceOrder(),l=(r.sort(function(e,t){return d.indexOf(e)-d.indexOf(t)}),F),c=-(r.length-1)*l/2,t=t.selectAll(".red-ui-flow-link-group").data(r);t.enter().append("g").attr("class","red-ui-flow-link-group").on("mouseover",function(){0===J&&d3.select(this).classed("red-ui-flow-link-group-active",!0)}).on("mouseout",function(){0===J&&d3.select(this).classed("red-ui-flow-link-group-active",!1)}).on("mousedown",function(){d3.event.preventDefault(),d3.event.stopPropagation()}).on("mouseup",function(e){var t;0===J&&(d3.event.stopPropagation(),t=o.links[e],RED.workspaces.show(e),t.forEach(function(e){e.selected=!0,e.dirty=!0,q.add(e),1===t.length&&RED.view.reveal(e.id)}),K(),Y())}).each(function(e){var t,o=d3.select(this),e=(o.append("svg:path").attr("class","red-ui-flow-link-link").attr("d","M "+a+" 0 C "+(a+1.7*s)+" 0 "+(a+.1*s)+" "+c+" "+(a+1.5*s)+" "+c+" "),o.append("svg:path").attr("class","red-ui-flow-link-port").attr("d","M "+(a+1.5*s+17*n)+" "+(c-12)+" h "+10*-n+" a 3 3 45 0 "+(1===n?"0":"1")+" "+-3*n+" 3 v 18 a 3 3 45 0 "+(1===n?"0":"1")+" "+3*n+" 3 h "+10*n),o.append("svg:path").attr("class","red-ui-flow-link-port").attr("d","M "+(a+1.5*s+20*n)+" "+(c-12)+" h "+30*n+" M "+(a+1.5*s+20*n)+" "+(c+12)+" h "+30*n).style("stroke-dasharray","12 3 8 4 3"),o.append("rect").attr("class","red-ui-flow-port red-ui-flow-link-port").attr("x",a+1.5*s-4+4*n).attr("y",c-4).attr("rx",2).attr("ry",2).attr("width",8).attr("height",8),o.append("rect").attr("x",a+1.5*s-(-1===n?G:0)).attr("y",c-12).attr("width",G).attr("height",24).style("stroke","none").style("fill","transparent"),RED.nodes.workspace(e));e&&(t=e.label||e.id),o.append("svg:text").attr("class","red-ui-flow-port-label").attr("x",a+1.5*s+15*n).attr("y",c+1).style("font-size","10px").style("text-anchor",i).text(t),c+=l}),t.exit().remove()}),t.exit().remove(),(t=De.selectAll(".red-ui-flow-link-off-flow")).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+")"})}),(o=$e.selectAll(".red-ui-flow-group").data(v,function(e){return e.id})).exit().each(function(e,t){document.getElementById("group_select_"+e.id).remove()}).remove(),n=o.enter().insert("svg:g").attr("class","red-ui-flow-group"),a=!1,n.each(function(e,t){a=!0;var o=d3.select(this),n=(o.attr("id",e.id),_e.append("g").attr("class","red-ui-flow-group").attr("id","group_select_"+e.id)),i=n.append("rect").classed("red-ui-flow-group-outline-select",!0).classed("red-ui-flow-group-outline-select-background",!0).attr("rx",6).attr("ry",6).attr("x",-3).attr("y",-3);n.append("rect").classed("red-ui-flow-group-outline-select",!0).classed("red-ui-flow-group-outline-select-outline",!0).attr("rx",6).attr("ry",6).attr("x",-3).attr("y",-3),n.append("rect").classed("red-ui-flow-group-outline-select",!0).classed("red-ui-flow-group-outline-select-line",!0).attr("rx",6).attr("ry",6).attr("x",-3).attr("y",-3),i.on("mousedown",function(){Ot.call(o[0][0],e)}),i.on("mouseup",function(){St.call(o[0][0],e)}),i.on("touchstart",function(){Ot.call(o[0][0],e),d3.event.preventDefault()}),i.on("touchend",function(){St.call(o[0][0],e),d3.event.preventDefault()}),o.append("rect").classed("red-ui-flow-group-outline",!0).attr("rx",.5).attr("ry",.5),o.append("rect").classed("red-ui-flow-group-body",!0).attr("rx",4).attr("ry",4).style({fill:e.fill||"none",stroke:e.stroke||"none"}),o.on("mousedown",Ot).on("mouseup",St),o.on("touchstart",function(){Ot.call(o[0][0],e),d3.event.preventDefault()}),o.on("touchend",function(){St.call(o[0][0],e),d3.event.preventDefault()}),o.append("svg:text").attr("class","red-ui-flow-group-label"),e.dirty=!0}),a&&o.sort(function(e,t){return e._order-t._order}),o[0].reverse(),o.each(function(e,t){var o,n,i,a,s,r,d,l,c,u;e.resize&&(e.minWidth=0,delete e.resize),(e.dirty||de[e.id])&&(o=d3.select(this),u=!1,0<e.nodes.length?!e.groupMoved&&(n=Number.POSITIVE_INFINITY,i=Number.POSITIVE_INFINITY,s=a=0,e.nodes.forEach(function(e){e._detachFromGroup||(s="group"!==e.type?(n=Math.min(n,e.x-e.w/2-26-(e._def.button&&"right"!==e._def.align?20:0)),i=Math.min(i,e.y-e.h/2-26),a=Math.max(a,e.x+e.w/2+26+(e._def.button&&"right"==e._def.align?20:0)),Math.max(s,e.y+e.h/2+26)):(n=Math.min(n,e.x-26),i=Math.min(i,e.y-26),a=Math.max(a,e.x+e.w+26),Math.max(s,e.y+e.h+26)))}),n!==Number.POSITIVE_INFINITY&&i!==Number.POSITIVE_INFINITY&&(e.x=n,e.y=i,e.w=a-n,e.h=s-i),!(u=!0)!==e.groupMoved)||delete e.groupMoved:(e.w=40,e.h=40,u=!0),u&&(e.minWidth||(e.style.label&&e.name?(u=Qe(e.name||"","red-ui-flow-group-label"),e.minWidth=u.width+8,e.labels=u.lines):(e.minWidth=40,e.labels=[])),e.w=Math.max(e.minWidth,e.w),e.style.label)&&0<e.labels.length&&(d=e.style["label-position"]||"nw",u=16*(e.labels.length-1),"s"===d[0]&&(u+=8),e.h+=u,"n"===d[0])&&0<e.nodes.length&&(e.y-=u),o.attr("transform","translate("+e.x+","+e.y+")"),o.selectAll(".red-ui-flow-group-outline").attr("width",e.w).attr("height",e.h),(u=document.getElementById("group_select_"+e.id)).setAttribute("transform","translate("+e.x+","+e.y+")"),e.hovered?u.classList.add("red-ui-flow-group-hovered"):u.classList.remove("red-ui-flow-group-hovered"),e.selected?u.classList.add("red-ui-flow-group-selected"):u.classList.remove("red-ui-flow-group-selected"),(l=u.children[0]).setAttribute("width",e.w+6),l.setAttribute("height",e.h+6),(l=u.children[1]).setAttribute("width",e.w+6),l.setAttribute("height",e.h+6),l.style.strokeOpacity=e.selected||e.highlighted?.8:0,(l=u.children[2]).setAttribute("width",e.w+6),l.setAttribute("height",e.h+6),l.style.strokeOpacity=e.selected||e.highlighted?.8:0,e.highlighted?u.classList.add("red-ui-flow-node-highlighted"):u.classList.remove("red-ui-flow-node-highlighted"),o.selectAll(".red-ui-flow-group-body").attr("width",e.w).attr("height",e.h).style("stroke",e.style.stroke||"").style("stroke-opacity",e.style.hasOwnProperty("stroke-opacity")?e.style["stroke-opacity"]:"").style("fill",e.style.fill||"").style("fill-opacity",e.style.hasOwnProperty("fill-opacity")?e.style["fill-opacity"]:""),(r=o.selectAll(".red-ui-flow-group-label")).classed("hide",!e.style.label),e.style.label&&(u="n"===(d=e.style["label-position"]||"nw")[u=l=0]?15:e.h-5-16*(e.labels.length-1),labelAnchor="w"===d[1]?(l=5,"start"):"e"===d[1]?(l=e.w-5,"end"):(l=e.w/2,"middle"),e.style.hasOwnProperty("color")?r.style("fill",e.style.color):r.style("fill",null),r.attr("transform","translate("+l+","+u+")").attr("text-anchor",labelAnchor),e.labels?(c=0,o.selectAll(".red-ui-flow-group-label-text").remove(),e.labels.forEach(function(e){r.append("tspan").classed("red-ui-flow-group-label-text",!0).text(e).attr("x",0).attr("y",c),c+=16})):o.selectAll(".red-ui-flow-group-label-text").remove()),delete de[e.id],delete e.dirty)})):De.selectAll(".red-ui-flow-link-selected").data(ae,function(e){return e.source.id+":"+e.sourcePort+":"+e.target.id+":"+e.target.i}).classed("red-ui-flow-link-selected",!1),RED.view.navigator.refresh(),d3.event&&d3.event.preventDefault()}function Gt(){try{var e=window.parent.window.scrollX,t=window.parent.window.scrollY;M.trigger("focus"),window.parent.window.scrollTo(e,t)}catch(e){M.trigger("focus")}}function Ft(e,t){var o=(t=t||{addFlow:!1,touchImport:!1,generateIds:!1,generateDefaultNames:!1}).addFlow,P=t.touchImport;if(J!==RED.state.SELECTING_NODE){var n,A=RED.nodes.dirty();if("string"==typeof e){if(""===e)return;try{n=JSON.parse(e)}catch(e){var i=new Error(RED._("clipboard.invalidFlow",{message:e.message}));throw i.code="NODE_RED",i}}else n=e;Array.isArray(n)||(n=[n]),t.generateDefaultNames&&RED.actions.invoke("core:generate-node-names",n,{renameBlank:!1,renameClash:!0,generateHistory:!1});try{U&&(a=U.changed);var a,s=n,r=null,d=null,l=(RED.nodes.eachConfig(function(e){"global-config"===e.type&&(d=e)}),d&&(s=n.filter(function(e){return"global-config"!==e.type}),r=n.find(function(e){return"global-config"===e.type})),RED.nodes.import(s,{generateIds:t.generateIds,addFlow:o,importMap:t.importMap,markChanged:!0}));if(l){var c=l.nodes,M=l.links,u=l.groups,p=l.junctions,f=l.workspaces,h=l.subflows,g=l.removedNodes,m=l.missingWorkspace,v=(o&&m&&RED.workspaces.show(m.id),c.filter(function(e){return e.hasOwnProperty("x")&&e.hasOwnProperty("y")&&e.z==RED.workspaces.active()})),z=(v=(v=v.concat(u.filter(function(e){return e.z===RED.workspaces.active()}))).concat(p.filter(function(e){return e.z===RED.workspaces.active()})),c.map(function(e){return e.id}));if(H(),q.clear(),q.add(v),0<q.length()){for(var b,y,w=(V=null==V?[0,0]:V)[0],E=V[1],D=(0<q.length()&&(w=(b=q.get(0).n).x,E=b.y),0),R=0,x=q.length(),_=0;_<x;_++)(y=q.get(_)).n.selected=!0,y.n.changed=!0,y.n.moved=!0,y.n.x-=w-V[0],y.n.y-=E-V[1],"junction"!==y.n.type&&(y.n.w=G,y.n.h=F,y.n.resize=!0),y.dx=y.n.x-V[0],y.dy=y.n.y-V[1],R="group"===y.n.type?(y.n.groupMoved=!1,D=Math.min(y.n.x-5,D),Math.min(y.n.y-5,R)):(D=Math.min(y.n.x-G/2-5,D),Math.min(y.n.y-F/2-5,R));for(_=0;_<x;_++)if((y=q.get(_)).n.x-=D,y.n.y-=R,y.dx-=D,y.dy-=R,y.n._def.onadd)try{y.n._def.onadd.call(y.n)}catch(e){console.log("Definition error: "+y.n.type+".onadd:",e)}P||(J=RED.state.IMPORT_DRAGGING,Ut())}var k,$,T,C,j,L,S={t:"add",nodes:z,links:M,groups:u,junctions:p,workspaces:f,subflows:h,dirty:A},O=(0===q.length()&&RED.nodes.dirty(!0),U&&(k=RED.subflow.refresh(!0))&&(S.subflow={id:U.id,changed:a,instances:k.instances}),g&&(S={t:"multi",events:[{t:"replace",config:g},S]}),r&&($=d.env,T=r.env,C=Array.from($),j=!1,T.forEach(function(t){var e,o=C.findIndex(function(e){return e.name===t.name});0<=o?(e=C[o]).type===t.type&&e.value===t.value||(C[o]=t,j=!0):(C.push(t),j=!0)}),j)&&(d.env=C,S={t:"multi",events:[{t:"edit",node:d,changed:!0,changes:{env:$}},S]}),RED.history.push(S),W(),Y(),[]),N=0,I=0,B=(c.forEach(function(e){e.hasOwnProperty("x")&&e.hasOwnProperty("y")?N++:I++}),u.length);p.length;0<f.length&&O.push(RED._("clipboard.flow",{count:f.length})),0<N&&O.push(RED._("clipboard.node",{count:N})),0<B&&O.push(RED._("clipboard.group",{count:B})),0<I&&O.push(RED._("clipboard.configNode",{count:I})),0<h.length&&O.push(RED._("clipboard.subflow",{count:h.length})),g&&0<g.length&&O.push(RED._("clipboard.replacedNodes",{count:g.length})),0<O.length&&(L="<ul><li>"+O.join("</li><li>")+"</li></ul>",RED.notify("<p>"+RED._("clipboard.nodesImported")+"</p>"+L,{id:"clipboard"}))}}catch(e){if("import_conflict"===e.code)throw e;"NODE_RED"!=e.code?(console.log(e.stack),RED.notify(RED._("notification.error",{message:e.toString()}),"error")):RED.notify(RED._("notification.error",{message:e.message}),"error")}}}function Ut(){var e;if(ne=!1,1===q.length()&&(e=q.get(0),ne=e.n.hasOwnProperty("_def")&&(e.n.hasOwnProperty("inputs")&&0<e.n.inputs||!e.n.hasOwnProperty("inputs")&&0<e.n._def.inputs)&&(e.n.hasOwnProperty("outputs")&&0<e.n.outputs||!e.n.hasOwnProperty("outputs")&&0<e.n._def.outputs)&&0===RED.nodes.filterLinks({source:e.n}).length&&0===RED.nodes.filterLinks({target:e.n}).length),re=!1,D=null,0<q.length()&&v){let t=!0,o=!1;const n=[],i=new Set;q.forEach(e=>{"subflow"===e.n.type&&(t=!1),"group"===e.n.type&&n.push(e.n.id),e.n.g?i.add(e.n.g):o=!0}),t&&(n.forEach(e=>i.delete(e)),0===i.size?re=!0:o||1!==i.size||(D=i.values().next().value,re=!0))}}function Vt(e){if(J!==RED.state.SELECTING_NODE&&!_){var t=RED.workspaces.selection();if(!(0<t.length)&&0<q.length()){for(var o=[],n=0;n<q.length();n++){var i=q.get(n).n;"group"!==i.type&&"subflow"!==i.type&&e!=i.d&&(o.push({t:"edit",node:i,changed:i.changed,changes:{d:i.d}}),e?i.d=!0:delete i.d,i.dirty=!0,i.dirtyStatus=!0,i.changed=!0,"junction"===i.type?RED.events.emit("junctions:change",i):RED.events.emit("nodes:change",i))}0<o.length&&(RED.history.push({t:"multi",events:o,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0))}RED.view.redraw()}}function Jt(){var e={},t=new Set;return 0<q.length()&&q.forEach(function(e){"group"!==e.n.type&&t.add(e.n)}),Te.forEach(function(e){RED.group.getNodes(e,!0).forEach(function(e){t.delete(e)}),t.add(e)}),0<t.size&&(e.nodes=Array.from(t)),0<B.length()&&(e.links=B.toArray(),e.link=e.links[0]),e}function qt(e,t,o,n){var i=RED.nodes.dirty(),a=/^subflow:(.+)$/.exec(e),s=n||RED.workspaces.active()?RED.nodes.subflow(n||RED.workspaces.active()):null;if(s&&a){let e;if(a[1]===s.id?e=new Error(RED._("notification.errors.cannotAddSubflowToItself")):RED.nodes.subflowContains(a[1],s.id)&&(e=new Error(RED._("notification.errors.cannotAddCircularReference"))),e)throw e.code="NODE_RED",e}var r={id:RED.nodes.id(),z:n||RED.workspaces.active()};if(r.type=e,r._def=RED.nodes.getType(r.type),a){n=RED.nodes.subflow(a[1]);r.name="",r.inputs=n.in.length,r.outputs=n.out.length}else{for(var d in r.inputs=r._def.inputs||0,r.outputs=r._def.outputs,r._def.defaults)r._def.defaults.hasOwnProperty(d)&&void 0!==r._def.defaults[d].value&&(r[d]=JSON.parse(JSON.stringify(r._def.defaults[d].value)));if(r._def.onadd)try{r._def.onadd.call(r)}catch(e){console.log("Definition error: "+r.type+".onadd:",e)}}r.changed=!0,r.moved=!0,r.w=RED.view.node_width,r.h=Math.max(RED.view.node_height,15*(r.outputs||0)),r.resize=!0,null!=t&&"number"==typeof t&&0<=t&&(r.x=t),null!=o&&"number"==typeof o&&0<=o&&(r.y=o);e={t:"add",nodes:[r.id],dirty:i};return s&&(a=RED.subflow.refresh(!0))&&(e.subflow={id:s.id,changed:s.changed,instances:a.instances}),{node:r,historyEvent:e}}return{init:function(){(M=$("#red-ui-workspace-chart")).on("contextmenu",function(e){return RED.view.DEBUG&&console.warn("contextmenu",{mouse_mode:J,event:d3.event}),J=RED.state.DEFAULT,e.preventDefault(),e.stopPropagation(),RED.contextMenu.show({type:"workspace",x:e.clientX,y:e.clientY}),!1}),z=d3.select("#red-ui-workspace-chart").append("svg:svg").attr("width",R).attr("height",te).attr("pointer-events","all").style("cursor","crosshair").style("touch-action","none").on("mousedown",function(){Gt()}).on("contextmenu",function(){d3.event.preventDefault()}),b=z.append("svg:g").on("dblclick.zoom",null).append("svg:g").attr("class","red-ui-workspace-chart-event-layer").on("mousemove",Pe).on("mousedown",Ne).on("mouseup",Me).on("mouseenter",function(){d3.select(document).on("mouseup.red-ui-workspace-tracker",null),S?1!==d3.event.buttons&&(z.classed("red-ui-workspace-lasso-active",!1),S.remove(),S=null):J===RED.state.PANNING&&4!==d3.event.buttons?X():O&&2!==d3.event.buttons&&(O.remove(),O=null,X())}).on("mouseleave",Ae).on("touchend",function(){d3.event.preventDefault(),clearTimeout(l),l=null,RED.touch.radialMenu.active()||Me.call(this)}).on("touchcancel",function(){RED.view.DEBUG&&console.warn("eventLayer.touchcancel",J),d3.event.preventDefault(),Me.call(this)}).on("touchstart",function(){var e,t,o,n,i,a,s,r;RED.view.DEBUG&&console.warn("eventLayer.touchstart",J),1<d3.event.touches.length?(clearTimeout(l),l=null,d3.event.preventDefault(),e=d3.event.touches.item(0),t=d3.event.touches.item(1),o=e.pageY-t.pageY,n=e.pageX-t.pageX,i=M.offset(),a=[M.scrollLeft(),M.scrollTop()],f=[(t.pageX+n/2-i.left+a[0])/x,(t.pageY+o/2-i.top+a[1])/x],t.pageX,t.pageY,p=Math.sqrt(o*o+n*n)):(s=d3.select(document.body),r=[(e=d3.event.touches.item(0)).pageX,e.pageY],f=[e.pageX,e.pageY],p=0,d3.touches(this)[0],l=setTimeout(function(){l=null,At(s,r)},u)),d3.event.preventDefault()}).on("touchmove",function(){var e,t,o,n,i;RED.touch.radialMenu.active()||(RED.view.DEBUG&&console.warn("eventLayer.touchmove",J,C),d3.event.touches.length<2?(l?(i=(n=d3.event.touches.item(0)).pageX-f[0],e=n.pageY-f[1],64<Math.abs(i*i+e*e)&&(clearTimeout(l),l=null,C||le||(J=RED.state.PANNING,V=[n.pageX,n.pageY],ge=[M.scrollLeft(),M.scrollTop()]))):S&&d3.event.preventDefault(),Pe.call(this)):(n=d3.event.touches.item(0),i=d3.event.touches.item(1),e=n.pageY-i.pageY,n=n.pageX-i.pageX,M.offset(),t=[M.scrollLeft(),M.scrollTop()],o=Math.sqrt(e*e+n*n),n=[i.pageX+n/2,i.pageY+e/2],isNaN(o)||(oldScaleFactor=x,x=Math.min(2,Math.max(.3,x+Math.floor(100*o-100*p)/1e4)),i=[f[0]*(x-oldScaleFactor),f[1]*(x-oldScaleFactor)],p=o,M.scrollLeft(t[0]+i[0]),M.scrollTop(t[1]+i[1]),Y()))),d3.event.preventDefault()});var e=t=>{if(J===RED.state.MOVING_ACTIVE&&"Alt"===t.key&&D){RED.nodes.group(D).dirty=!0;for(let e=0;e<q.length();e++)q.get(e).n._detachFromGroup=t.altKey;t.altKey||(ee&&(clearTimeout(ee),ee=null),E&&(E.hovered=!1,E.dirty=!0,E=null)),RED.view.redraw()}},t=(document.addEventListener("keyup",e),document.addEventListener("keydown",e),b.append("svg:rect").attr("class","red-ui-workspace-chart-background").attr("width",R).attr("height",te),Ee=b.append("g").attr("class","red-ui-workspace-chart-grid"),je(),$e=b.append("g"),_e=b.append("g"),De=b.append("g"),xe=b.append("g"),Re=b.append("g"),ke=b.append("g"),I=[],RED.events.on("workspace:change",function(e){(J=0)!==e.old&&(a[e.old]={left:M.scrollLeft(),top:M.scrollTop()});var t=M.scrollLeft(),o=M.scrollTop(),n=(U=RED.nodes.subflow(e.workspace),_=U?U.locked:!(n=RED.nodes.workspace(e.workspace))||n.locked,RED.menu.setDisabled("menu-item-workspace-edit",_||U||0===e.workspace),RED.menu.setDisabled("menu-item-workspace-delete",_||0===e.workspace||1==RED.workspaces.count()||U),a[e.workspace]?(M.scrollLeft(a[e.workspace].left),M.scrollTop(a[e.workspace].top)):(M.scrollLeft(0),M.scrollTop(0)),M.scrollLeft()-t),e=M.scrollTop()-o;null!=V&&(V[0]+=n,V[1]+=e),0===RED.workspaces.selection().length&&H(),RED.nodes.eachNode(function(e){e.dirty=!0,e.dirtyStatus=!0}),K(),W(),Y()}),RED.events.on("flows:change",function(e){e.id===RED.workspaces.active()&&(_=!!e.locked,$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!e.disabled),$("#red-ui-workspace").toggleClass("red-ui-workspace-locked",!!e.locked))}),RED.statusBar.add({id:"view-zoom-controls",align:"right",element:$('<span class="button-group"><button class="red-ui-footer-button" id="red-ui-view-zoom-out"><i class="fa fa-minus"></i></button><button class="red-ui-footer-button" id="red-ui-view-zoom-zero"><i class="fa fa-circle-o"></i></button><button class="red-ui-footer-button" id="red-ui-view-zoom-in"><i class="fa fa-plus"></i></button></span>')}),$("#red-ui-view-zoom-out").on("click",Fe),RED.popover.tooltip($("#red-ui-view-zoom-out"),RED._("actions.zoom-out"),"core:zoom-out"),$("#red-ui-view-zoom-zero").on("click",Ue),RED.popover.tooltip($("#red-ui-view-zoom-zero"),RED._("actions.zoom-reset"),"core:zoom-reset"),$("#red-ui-view-zoom-in").on("click",Ge),RED.popover.tooltip($("#red-ui-view-zoom-in"),RED._("actions.zoom-in"),"core:zoom-in"),M.on("DOMMouseScroll mousewheel",function(e){e.altKey&&(e.preventDefault(),e.stopPropagation(),((-e.originalEvent.detail||e.originalEvent.wheelDelta)<=0?Fe:Ge)())}),RED.statusBar.add({id:"view-search-tools",align:"left",hidden:!1,element:$('<span class="button-group"><button class="red-ui-footer-button" id="red-ui-view-searchtools-search"><i class="fa fa-search"></i></button></span><span class="button-group search-counter"><span class="red-ui-footer-button" id="red-ui-view-searchtools-counter">? of ?</span></span><span class="button-group"><button class="red-ui-footer-button" id="red-ui-view-searchtools-prev"><i class="fa fa-chevron-left"></i></button><button class="red-ui-footer-button" id="red-ui-view-searchtools-next"><i class="fa fa-chevron-right"></i></button></span><span class="button-group"><button class="red-ui-footer-button" id="red-ui-view-searchtools-close"><i class="fa fa-close"></i></button></span>')}),$("#red-ui-view-searchtools-search").on("click",Ve),RED.popover.tooltip($("#red-ui-view-searchtools-search"),RED._("actions.search-flows"),"core:search"),$("#red-ui-view-searchtools-prev").on("click",Je),RED.popover.tooltip($("#red-ui-view-searchtools-prev"),RED._("actions.search-prev"),"core:search-previous"),$("#red-ui-view-searchtools-next").on("click",qe),RED.popover.tooltip($("#red-ui-view-searchtools-next"),RED._("actions.search-next"),"core:search-next"),RED.popover.tooltip($("#red-ui-view-searchtools-close"),RED._("common.label.close")),M.droppable({accept:".red-ui-palette-node",drop:function(e,t){if(!_){d3.event=e;e=$(t.draggable[0]).attr("data-palette-type");try{var o=qt(e);if(o){var n=o.historyEvent,i=RED.nodes.add(o.node),a=RED.utils.getMessageProperty(RED.settings.get("editor"),"view.view-node-show-label"),s=(void 0===a||i._def.hasOwnProperty("showLabel")&&!i._def.showLabel||i._def.defaults.hasOwnProperty("l")||(i.l=a),d3.touches(t.helper.get(0))[0]||d3.mouse(t.helper.get(0))),r=t.helper.width(),d=t.helper.height(),l=d3.touches(this)[0]||d3.mouse(this);try{var c="link in"===i.type||"link out"===i.type,u=i.hasOwnProperty("l")?!i.l:c,p=Qe(RED.utils.getNodeLabel(i,i.type),"red-ui-flow-node-label");u?(i.w=F,i.h=Math.max(F,15*(i.outputs||0))):(i.w=Math.max(G,20*Math.ceil((p.width+50+(0<i._def.inputs?7:0))/20)),i.h=Math.max(6+24*p.lines.length,15*(i.outputs||0),30))}catch(e){}l[1]+=this.scrollTop+(d/2-s[1]),l[0]+=this.scrollLeft+(r/2-s[0]),l[1]/=x,l[0]/=x,i.x=l[0],i.y=l[1];var f,h,g,m,v=i.w/2-5,b=(i.x<v&&(i.x=v),i.h/2-5),y=(i.y<b&&(i.y=b),R-i.w/2+5),w=(i.x>y&&(i.x=y),te-i.h+5),E=(i.y>w&&(i.y=w),oe&&(f=RED.view.tools.calculateGridSnapOffsets(i),i.x-=f.x,i.y-=f.y),$(t.helper).data("splice")),D=(E&&ze(E,i,n),$(t.helper).data("group"));D&&(h=D.x,g=D.y,RED.group.addToGroup(D,i),m=null,D.x===h&&D.y===g||(m={t:"move",nodes:[{n:D,ox:h,oy:g,dx:D.x-h,dy:D.y-g}],dirty:!0}),n={t:"multi",events:[n]},m&&n.events.push(m),n.events.push({t:"addToGroup",group:D,nodes:i})),RED.history.push(n),RED.editor.validateNode(i),RED.nodes.dirty(!0),H(),i.selected=!0,q.add(i),W(),K(),Y(),i._def.autoedit&&RED.editor.edit(i)}}catch(e){"NODE_RED"!=e.code?RED.notify(RED._("notification.error",{message:e.toString()}),"error"):RED.notify(RED._("notification.error",{message:e.message}),"error")}}}}),M.on("focus",function(){$("#red-ui-workspace-tabs").addClass("red-ui-workspace-focussed")}),M.on("blur",function(){$("#red-ui-workspace-tabs").removeClass("red-ui-workspace-focussed")}),RED.actions.add("core:copy-selection-to-internal-clipboard",Ze),RED.actions.add("core:cut-selection-to-internal-clipboard",function(){Ze(!0),Ye()}),RED.actions.add("core:paste-from-internal-clipboard",function(){RED.workspaces.isLocked()||Ft(be,{generateIds:"copy"===ye,generateDefaultNames:"copy"===ye})}),RED.actions.add("core:detach-selected-nodes",function(){var e,t,o;RED.workspaces.isLocked()||(e=RED.view.selection()).nodes&&({newLinks:t,removedLinks:o}=RED.nodes.detachNodes(e.nodes),(o.length||t.length)&&(RED.history.push({t:"multi",events:[{t:"delete",links:o},{t:"add",links:t}],dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0)),gt([e.nodes[0].x,e.nodes[0].y]),J=RED.state.DETACHED_DRAGGING,RED.view.redraw(!0))}),RED.events.on("view:selection-changed",function(e){var t=e.nodes&&0<e.nodes.length,o=t&&1<e.nodes.length,e=e.links&&0<e.links.length,n=!_&&t,o=!_&&o;RED.menu.setDisabled("menu-item-edit-cut",!n),RED.menu.setDisabled("menu-item-edit-copy",!t),RED.menu.setDisabled("menu-item-edit-select-connected",!t),RED.menu.setDisabled("menu-item-view-tools-move-to-back",!n),RED.menu.setDisabled("menu-item-view-tools-move-to-front",!n),RED.menu.setDisabled("menu-item-view-tools-move-backwards",!n),RED.menu.setDisabled("menu-item-view-tools-move-forwards",!n),RED.menu.setDisabled("menu-item-view-tools-align-left",!o),RED.menu.setDisabled("menu-item-view-tools-align-center",!o),RED.menu.setDisabled("menu-item-view-tools-align-right",!o),RED.menu.setDisabled("menu-item-view-tools-align-top",!o),RED.menu.setDisabled("menu-item-view-tools-align-middle",!o),RED.menu.setDisabled("menu-item-view-tools-align-bottom",!o),RED.menu.setDisabled("menu-item-view-tools-distribute-horizontally",!o),RED.menu.setDisabled("menu-item-view-tools-distribute-veritcally",!o),RED.menu.setDisabled("menu-item-edit-split-wire-with-links",_||!e)}),RED.actions.add("core:delete-selection",Ye),RED.actions.add("core:delete-selection-and-reconnect",function(){Ye(!0)}),RED.actions.add("core:edit-selected-node",Xe),RED.actions.add("core:go-to-selection",function(){var e;0<q.length()&&(e=q.get(0).n,/^subflow:/.test(e.type)?RED.workspaces.show(e.type.substring(8)):"group"===e.type&&Y())}),RED.actions.add("core:undo",RED.history.pop),RED.actions.add("core:redo",RED.history.redo),RED.actions.add("core:select-all-nodes",He),RED.actions.add("core:select-none",We),RED.actions.add("core:zoom-in",Ge),RED.actions.add("core:zoom-out",Fe),RED.actions.add("core:zoom-reset",Ue),RED.actions.add("core:enable-selected-nodes",function(){Vt(!1)}),RED.actions.add("core:disable-selected-nodes",function(){Vt(!0)}),RED.actions.add("core:toggle-show-grid",function(e){void 0===e?RED.userSettings.toggle("view-show-grid"):e?Ee.style("visibility","visible"):Ee.style("visibility","hidden")}),RED.actions.add("core:toggle-snap-grid",function(e){void 0===e?RED.userSettings.toggle("view-snap-grid"):(oe=e,Y())}),RED.actions.add("core:toggle-status",function(e){void 0===e?RED.userSettings.toggle("view-node-status"):(s=e,RED.nodes.eachNode(function(e){e.dirtyStatus=!0,e.dirty=!0}),Y())}),RED.view.annotations.init(),RED.view.navigator.init(),RED.view.tools.init(),RED.view.annotations.register("red-ui-flow-node-changed",{type:"badge",class:"red-ui-flow-node-changed",element:function(){var e=document.createElementNS("http://www.w3.org/2000/svg","circle");return e.setAttribute("cx",5),e.setAttribute("cy",5),e.setAttribute("r",5),e},show:function(e){return e.changed||e.moved}}),RED.view.annotations.register("red-ui-flow-node-error",{type:"badge",class:"red-ui-flow-node-error",element:function(e){var t=document.createElementNS("http://www.w3.org/2000/svg","path");return t.setAttribute("d","M 0,9 l 10,0 -5,-8 z"),t},tooltip:function(e){if(e.validationErrors&&0<e.validationErrors.length)return RED._("editor.errors.invalidProperties")+"\n - "+e.validationErrors.join("\n - ")},show:function(e){return!e.valid}}),RED.settings.get("editor.view.view-store-zoom")&&(e=parseFloat(RED.settings.getLocal("zoom-level")),isNaN(e)||(x=e)),null);function o(){a[RED.workspaces.active()]={left:M.scrollLeft(),top:M.scrollTop()},RED.settings.setLocal("scroll-positions",JSON.stringify(a))}if(M.on("scroll",function(){RED.settings.get("editor.view.view-store-position")&&(t&&clearTimeout(t),t=setTimeout(o,200))}),RED.settings.get("editor.view.view-store-position")){e=RED.settings.getLocal("scroll-positions");if(e)try{a=JSON.parse(e)}catch(e){}}},state:function(e){if(null==e)return J;J=e},updateActive:W,redraw:function(e,t){e&&(W(),K()),(t?Bt:Y)()},focus:Gt,importNodes:Ft,calculateTextWidth:function(e,t){for(var o=nt(e),n=0,i=0;i<o.length;i++){var a=ot(o[i],t)[0];n<a&&(n=a)}return n},select:function(e){var t;void 0!==e&&(H(),"string"==typeof e?(t=RED.nodes.node(e))?(t.selected=!0,t.dirty=!0,q.clear(),q.add(t)):(t=RED.nodes.group(e))&&(q.clear(),Te.clear(),Te.add(t)):e&&(e.nodes&&(W(),q.clear(),e.nodes.forEach(function(e){"group"!==e.type?(e.selected=!0,e.dirty=!0,q.add(e)):Te.add(e,!0)})),e.links)&&(B.clear(),e.links.forEach(B.add))),K(),Y()},selection:Jt,clearSelection:H,createNode:qt,get node_width(){return G},get node_height(){return F},get snapGrid(){return oe},scale:function(){return x},getLinksAtPoint:function(e,t){for(var o=[],n=z.selectAll(".red-ui-flow-link-background")[0],i=0;i<n.length;i++){var a=n[i].getBBox();e>=a.x&&t>=a.y&&e<=a.x+a.width&&t<=a.y+a.height&&o.push(n[i])}return o},getGroupAtPoint:Nt,getActiveGroup:function(){return null},reveal:function(e,t){if(RED.nodes.workspace(e)||RED.nodes.subflow(e))RED.workspaces.show(e,null,null,!0);else{var o=RED.nodes.node(e)||RED.nodes.group(e);if(o)if(!o.z||"group"!==o.type&&"config"===o._def.category)"config"===o._def.category&&RED.sidebar.config.show(e);else{o.dirty=!0,RED.workspaces.show(o.z),"group"!==o.type||o.w||o.h||Bt();var e=[M[0].clientWidth/x,M[0].clientHeight/x],n=[M.scrollLeft()/x,M.scrollTop()/x],i=o.x,a=o.y;if("group"===o.type&&(i+=o.w/2,a+=o.h/2),(i<n[0]||a<n[1]||e[0]+n[0]<i||e[1]+n[1]<a)&&(i="-="+(n[0]-i+e[0]/2)*x,n="-="+(n[1]-a+e[1]/2)*x,M.animate({scrollLeft:i,scrollTop:n},200)),!1!==t){a=o;let e=a;(e="string"==typeof e?RED.nodes.node(a):e)&&((a=r&&RED.nodes.node(r))&&(clearInterval(a.__flashTimer),delete a.__flashTimer,a.dirty=!0,a.highlighted=!1),e.__flashTimer=setInterval(function(e,t){t.dirty=!0,e>=Date.now()?t.highlighted=!t.highlighted:(clearInterval(t.__flashTimer),delete t.__flashTimer,r=null,t.highlighted=!1),RED.view.redraw()},100,Date.now()+2200,e),r=e.id,e.highlighted=!0,RED.view.redraw())}}}},gridSize:function(e){if(void 0===e)return w;w=Math.max(5,e),je()},getActiveNodes:function(){return ie},getSubflowPorts:function(){var o=[];return U&&(ke.selectAll(".red-ui-flow-subflow-port-output").data(U.out,function(e,t){return e.id}).each(function(e,t){o.push(e)}),ke.selectAll(".red-ui-flow-subflow-port-input").data(U.in,function(e,t){return e.id}).each(function(e,t){o.push(e)}),ke.selectAll(".red-ui-flow-subflow-port-status").data(U.status?[U.status]:[],function(e,t){return e.id}).each(function(e,t){o.push(e)})),o},selectNodes:function(e){$("#red-ui-workspace-tabs-shade").show(),$("#red-ui-palette-shade").show(),$("#red-ui-sidebar-shade").show(),$("#red-ui-header-shade").show(),$("#red-ui-workspace").addClass("red-ui-workspace-select-mode"),J=RED.state.SELECTING_NODE,H(),e.selected&&e.selected.forEach(function(e){e=RED.nodes.node(e);e&&(e.selected=!0,e.dirty=!0,q.add(e))}),Y();function t(){H(),$("#red-ui-workspace-tabs-shade").hide(),$("#red-ui-palette-shade").hide(),$("#red-ui-sidebar-shade").hide(),$("#red-ui-header-shade").hide(),$("#red-ui-workspace").removeClass("red-ui-workspace-select-mode"),X(),o.close()}(d=e||{}).done=function(e){t(),d.onselect&&d.onselect(e)};var e=[{text:RED._("common.label.cancel"),click:function(e){t(),d.oncancel&&d.oncancel()}}],o=(d.single||e.push({text:RED._("common.label.done"),class:"primary",click:function(e){var t=q.nodes();d.done(t)}}),RED.notify(d.prompt||RED._("workspace.selectNodes"),{modal:!1,fixed:!0,type:"compact",buttons:e}))},scroll:function(e,t){if(void 0===e||void 0===t)return[M.scrollLeft(),M.scrollTop()];M.scrollLeft(M.scrollLeft()+e),M.scrollTop(M.scrollTop()+t)},clickNodeButton:function(e){e._def.button&&Pt(e)},clipboard:function(){return be},redrawStatus:zt,showQuickAddDialog:Ie,calculateNodeDimensions:function(t){var e=[G,F];try{var o="link in"===t.type||"link out"===t.type,n=t.hasOwnProperty("l")?!t.l:o,i=Qe(RED.utils.getNodeLabel(t,t.type),"red-ui-flow-node-label");e[1]=n?Math.max(F,15*(t.outputs||0)):Math.max(6+24*i.lines.length,15*(t.outputs||0),30),e[0]=n?F:Math.max(G,20*Math.ceil((i.width+50+(0<t._def.inputs?7:0))/20))}catch(e){console.log("Error",t)}return e},getElementPosition:ct,showTooltip:pt,dimensions:function(){return{width:R,height:te}}}}(),RED.view.annotations=function(){var r,d,c={};function u(e,t){var o=c[e],n=(t.el.__annotations__=t.el.__annotations__||[],document.createElementNS("http://www.w3.org/2000/svg","g"));n.setAttribute("class",o.class||""),t.el.__annotations__.push({id:e,node:t.node,element:n}),p(e,t.node,n),t.el.appendChild(n)}function p(e,t,o){var n,i,a,e=c[e],s=e.element(t);e.tooltip&&(s.addEventListener("mouseenter",(n=s,i=t,a=e.tooltip,function(){var o="function"==typeof a?a(i):a;o&&(clearTimeout(r),r=setTimeout(function(){var e=RED.view.getElementPosition(n),t=n.getBoundingClientRect();r=null,d=RED.view.showTooltip(e[0]+t.width/2,e[1],o,"top")},500))})),s.addEventListener("mouseleave",l)),o.hasChildNodes()&&o.removeChild(o.firstChild),o.appendChild(s)}function l(){clearTimeout(r),d&&(d.remove(),d=null)}return{init:function(){RED.hooks.add("viewRedrawNode.annotations",function(i){try{i.node.__pendingAnnotation__&&(u(i.node.__pendingAnnotation__,i),delete i.node.__pendingAnnotation__);let o=0,n=0;var a=RED.view.scale();for(let e=0,t=i.el.__annotations__.length;e<t;e++){var s=i.el.__annotations__[e];if(c.hasOwnProperty(s.id)){var r=c[s.id];let e=!0;var d="badge"===r.type;if(void 0!==r.refresh){let e=!1;"string"==typeof r.refresh?(e=!!i.node[r.refresh],delete i.node[r.refresh]):"function"==typeof r.refresh&&(e=r.refresh(evnt.node)),e&&p(s.id,s.node,s.element)}if(void 0!==r.show&&(e="string"==typeof r.show?!!i.node[r.show]:"function"==typeof r.show?r.show(i.node):!!r.show,s.element.classList.toggle("hide",!e)),d&&e){var l=s.element.getBoundingClientRect().width/a;let e;r.align&&"right"!==r.align?"left"===r.align&&(e=3+n,n+=4+l):(e=i.node.w-3-o-l,o+=4+l),s.element.setAttribute("transform","translate("+e+", -8)")}}else s.element.parentNode.removeChild(s.element),i.el.__annotations__.splice(e,1),e--,t--}}catch(e){console.log(e)}})},register:function(t,o){if("badge"!==o.type)throw new Error("Unsupported annotation type: "+o.type);c[t]=o,RED.hooks.add("viewAddNode.annotation-"+t,function(e){o.filter&&!o.filter(e.node)||u(t,e)}),RED.view.getActiveNodes().forEach(function(e){e.__pendingAnnotation__=t}),RED.view.redraw()},unregister:function(e){delete c[e],RED.hooks.remove("*.annotation-"+e),RED.view.redraw()}}}(),RED.view.navigator=function(){var e,t,o,n,i,a,s,r,d,l=50,c=8e3/l,u=8e3/l,p=!1;function f(){var e;p&&((e=n.selectAll(".red-ui-navigator-node").data(RED.view.getActiveNodes(),function(e){return e.id})).exit().remove(),e.enter().insert("rect").attr("class","red-ui-navigator-node").attr("pointer-events","none"),e.each(function(e){d3.select(this).attr("x",function(e){return(e.x-e.w/2)/l}).attr("y",function(e){return(e.y-e.h/2)/l}).attr("width",function(e){return Math.max(9,e.w/l)}).attr("height",function(e){return Math.max(3,e.h/l)}).attr("fill",function(e){return RED.utils.getNodeColor(e.type,e._def)})}))}function h(){d||g()}function g(){o&&(a=RED.view.scale(),s=[$("#red-ui-workspace-chart").width(),$("#red-ui-workspace-chart").height()],i=[$("#red-ui-workspace-chart").scrollLeft(),$("#red-ui-workspace-chart").scrollTop()],o.attr("x",i[0]/l).attr("y",i[1]/l).attr("width",s[0]/l/a).attr("height",s[1]/l/a))}function m(){p?(p=!1,e.fadeOut(100),$("#red-ui-workspace-chart").off("scroll",h),$("#red-ui-view-navigate").removeClass("selected")):(p=!0,$("#red-ui-view-navigate").addClass("selected"),g(),f(),$("#red-ui-workspace-chart").on("scroll",h),e.fadeIn(200))}return{init:function(){$(window).on("resize",g),RED.events.on("sidebar:resize",g),RED.actions.add("core:toggle-navigator",m),e=$("<div>").css({position:"absolute",bottom:$("#red-ui-workspace-footer").height(),right:0,zIndex:1}).appendTo("#red-ui-workspace").hide(),(t=d3.select(e[0]).append("svg:svg").attr("width",c).attr("height",u).attr("pointer-events","all").attr("id","red-ui-navigator-canvas")).append("rect").attr("x",0).attr("y",0).attr("width",c).attr("height",u).style({fill:"none",stroke:"none",pointerEvents:"all"}).on("mousedown",function(){a=RED.view.scale(),s=[$("#red-ui-workspace-chart").width(),$("#red-ui-workspace-chart").height()],r=[s[0]/l/a,s[1]/l/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,u)-r[1]);o.attr("x",e).attr("y",t),d=!0,$("#red-ui-workspace-chart").scrollLeft(e*l*a),$("#red-ui-workspace-chart").scrollTop(t*l*a)}).on("mousemove",function(){var e,t;d&&(0===d3.event.buttons?d=!1:(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,u)-r[1]),o.attr("x",e).attr("y",t),$("#red-ui-workspace-chart").scrollLeft(e*l*a),$("#red-ui-workspace-chart").scrollTop(t*l*a)))}).on("mouseup",function(){d=!1}),o=t.append("rect").attr("class","red-ui-navigator-border"),n=t.append("svg:g"),RED.statusBar.add({id:"view-navigator",align:"right",element:$('<button class="red-ui-footer-button-toggle single" id="red-ui-view-navigate"><i class="fa fa-map-o"></i></button>')}),$("#red-ui-view-navigate").on("click",function(e){e.preventDefault(),m()}),RED.popover.tooltip($("#red-ui-view-navigate"),RED._("actions.toggle-navigator"),"core:toggle-navigator")},refresh:f,resize:g,toggle:m}}(),RED.view.tools=function(){"use strict";function t(o){var e=RED.view.selection(),n=new Set;e.nodes&&0<e.nodes.length&&(e.nodes.forEach(function(e){var t;n.has(e)||("all"===o?t=RED.nodes.getAllFlowNodes(e):"up"===o?t=[e].concat(RED.nodes.getAllUpstreamNodes(e)):"down"===o&&(t=[e].concat(RED.nodes.getAllDownstreamNodes(e))),t.forEach(function(e){n.add(e)}))}),RED.view.select({nodes:Array.from(n)}))}function e(){var e,n;RED.workspaces.isLocked()||(e=RED.view.selection()).nodes&&(n=[],e.nodes.forEach(function(e){var t=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===t&&e.y===o||(n.push({n:e,ox:e.x,oy:e.y,moved:e.moved}),e.x=t,e.y=o,e.dirty=!0,e.moved=!0)}),0<n.length)&&(RED.history.push({t:"move",nodes:n,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}var u=null,p=!1;function f(){if(p=!1,0<u.length){for(var e=[],t=0;t<u.length;t++)e.push({n:u[t].n,ox:u[t].ox,oy:u[t].oy,moved:u[t].moved}),u[t].n.moved=!0,u[t].n.dirty=!0,delete u[t].ox,delete u[t].oy;RED.view.redraw(),RED.history.push({t:"move",nodes:e,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),u=null}}function o(e,t){if(!RED.workspaces.isLocked()){if(null===u){u=[];var o=RED.view.selection();if(o.nodes)for(;0<o.nodes.length;){var n=o.nodes.shift();u.push({n:n}),"group"===n.type&&(o.nodes=o.nodes.concat(n.nodes))}}if(u&&0<u.length){p||($(document).one("keyup",f),p=!0);for(var i,a=RED.view.dimensions(),s=a.width,r=a.height,d=0,l=0,c=0;c<u.length;c++)null==(i=u[c]).ox&&null==i.oy&&(i.ox=i.n.x,i.oy=i.n.y,i.moved=i.n.moved),i.n.moved=!0,i.n.dirty=!0,i.n.x+=e,i.n.y+=t,i.n.x+i.n.w/2>=s&&(i.n.x=s-i.n.w/2),i.n.y+i.n.h/2>=r&&(i.n.y=r-i.n.h/2),i.n.dirty=!0,l="group"===i.n.type?(RED.group.markDirty(i.n),d=Math.min(i.n.x-5,d),Math.min(i.n.y-5,l)):(d=Math.min(i.n.x-i.n.w/2-5,d),Math.min(i.n.y-i.n.h/2-5,l));if(0!==d||0!==l)for(n=0;n<u.length;n++)(i=u[n]).n.x-=d,i.n.y-=l;RED.view.redraw()}else RED.view.scroll(10*e,10*t)}}function n(i){var e,a,t;RED.workspaces.isLocked()||(e=RED.view.selection(),a=[],t=[],e.nodes&&e.nodes.forEach(function(e){"subflow"!==e.type&&"group"!==e.type?t.push(e):"group"===e.type&&(t=t.concat(RED.group.getNodes(e,!0)))}),t.forEach(function(e){var t=!1,o=void 0===e.l||e.l,n=!e._def.hasOwnProperty("showLabel")||e._def.showLabel;i?!1!==e.l&&(n||e.hasOwnProperty("l"))||(t=e.l=!0):(!n||e.hasOwnProperty("l")&&!0!==e.l)&&(n||!0!==e.l)||(t=!(e.l=!1)),t&&(a.push({t:"edit",node:e,changed:e.changed,changes:{l:o}}),e.changed=!0,e.dirty=!0,e.resize=!0)}),0<a.length&&(RED.history.push({t:"multi",events:a,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0)),RED.view.redraw())}function i(){var n={x:0,y:0},e=RED.view.getActiveGroup(),i=(e?(candidates=RED.group.getNodes(e,!1),n=e):candidates=RED.view.getActiveNodes(),[]);candidates.forEach(function(e){var t=e.x-n.x,o=e.y-n.x;i.push({node:e,delta:o*o+t*t})}),0<i.length&&(i.sort(function(e,t){return e.delta-t.delta}),e=i[0].node)&&(RED.view.select({nodes:[e]}),RED.view.reveal(e.id,!1))}function a(e){return RED.nodes.filterLinks({source:e}).map(function(e){return e.target})}function s(e){return RED.nodes.filterLinks({target:e}).map(function(e){return e.source})}function r(e){var t=new Set;return s(e).forEach(function(e){a(e).forEach(function(e){t.add(e)})}),a(e).forEach(function(e){s(e).forEach(function(e){t.add(e)})}),t.delete(e),Array.from(t)}function d(s){var r,e,d,t,o=RED.view.selection();o.nodes&&1===o.nodes.length?(r=o.nodes[0],d=[],(e=(e=RED.nodes.filterNodes({z:r.z})).concat(RED.view.getSubflowPorts())).forEach(function(e){if(e!==r){var t,o=e.x-r.x,n=e.y-r.y,i=n*n+o*o,a=180/Math.PI*Math.atan2(n,o);switch(a<0&&(a+=360),360<a&&(a-=360),s){case"up":if(a<210||330<a)return;t=Math.max(Math.abs(270-a)/60,.2);break;case"down":if(a<30||150<a)return;t=Math.max(Math.abs(90-a)/60,.2);break;case"left":if(a<140||220<a)return;t=Math.max(Math.abs(180-a)/40,.1);break;case"right":if(40<a&&a<320)return;t=Math.max(Math.abs(a)/40,.1)}t=Math.max(t,.1),d.push({node:e,d:i,w:t,delta:i*t})}}),0<d.length&&(d.sort(function(e,t){return e.delta-t.delta}),t=d[0].node)&&(RED.view.select({nodes:[t]}),RED.view.reveal(t.id,!1))):0===RED.workspaces.selection().length&&(e=RED.view.getActiveNodes(),d=[],e.forEach(function(e){var t=e.x,o=e.y;d.push({node:e,delta:o*o+t*t})}),0<d.length)&&(d.sort(function(e,t){return e.delta-t.delta}),t=d[0].node)&&(RED.view.select({nodes:[t]}),RED.view.reveal(t.id,!1))}function l(r){var e,d,l;RED.workspaces.isLocked()||(e=RED.view.selection()).nodes&&1<e.nodes.length&&(d=[],l={minX:Number.MAX_SAFE_INTEGER,minY:Number.MAX_SAFE_INTEGER,maxX:Number.MIN_SAFE_INTEGER,maxY:Number.MIN_SAFE_INTEGER},e.nodes.forEach(function(e){"group"===e.type?(l.minX=Math.min(l.minX,e.x),l.minY=Math.min(l.minY,e.y),l.maxX=Math.max(l.maxX,e.x+e.w),l.maxY=Math.max(l.maxY,e.y+e.h)):(l.minX=Math.min(l.minX,e.x-e.w/2),l.minY=Math.min(l.minY,e.y-e.h/2),l.maxX=Math.max(l.maxX,e.x+e.w/2),l.maxY=Math.max(l.maxY,e.y+e.h/2))}),l.midX=l.minX+(l.maxX-l.minX)/2,l.midY=l.minY+(l.maxY-l.minY)/2,e.nodes.forEach(function(e){var t,o,n,i,a,s="group"===e.type;switch(r){case"top":t=e.x,o=l.minY+(s?0:e.h/2);break;case"bottom":t=e.x,o=l.maxY-(s?e.h:e.h/2);break;case"left":t=l.minX+(s?0:e.w/2),o=e.y;break;case"right":t=l.maxX-(s?e.w:e.w/2),o=e.y;break;case"middle":t=e.x,o=l.midY-(s?e.h/2:0);break;case"center":t=l.midX-(s?e.w/2:0),o=e.y}e.x===t&&e.y===o||(s?(n=RED.group.getNodes(e,!0),i=e.x-t,a=e.y-o,n.forEach(function(e){"group"!==e.type&&(d.push({n:e,ox:e.x,oy:e.y,moved:e.moved}),e.x=e.x-i,e.y=e.y-a,e.dirty=!0,e.moved=!0)})):(d.push({n:e,ox:e.x,oy:e.y,moved:e.moved}),e.x=t,e.y=o,e.dirty=!0,e.moved=!0))}),0<d.length)&&(RED.history.push({t:"move",nodes:d,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}function c(n){if(!RED.workspaces.isLocked()){var e=RED.view.selection();if(e.nodes&&2<e.nodes.length){var t=[],i={minX:Number.MAX_SAFE_INTEGER,minY:Number.MAX_SAFE_INTEGER,maxX:Number.MIN_SAFE_INTEGER,maxY:Number.MIN_SAFE_INTEGER},a=[],s=[],o=(e.nodes.forEach(function(e){var t,o="group"===e.type?(t=e.x+e.w/2,e.y+e.h/2):(t=e.x,e.y);"h"===n?(t<i.minX&&(a=[],i.minX=t),t===i.minX&&a.push(e),i.maxX<t&&(s=[],i.maxX=t),t===i.maxX&&s.push(e)):(o<i.minY&&(a=[],i.minY=o),o===i.minY&&a.push(e),i.maxY<o&&(s=[],i.maxY=o),o===i.maxY&&s.push(e))}),a[0]),r=s[0],d=0,l=e.nodes.filter(function(e){return e.id!==o.id&&e.id!==r.id&&(d+="h"===n?e.w:e.h,!0)}).sort(function(e,t){return"h"===n?e.x-t.x:e.y-t.y}),e=o.x+o.w/2,c=o.y+o.h/2,u=("group"===o.type&&(e=o.x+o.w,c=o.y+o.h),r.x),p=r.y;"group"!==r.type&&(u-=r.w/2,p-=r.h/2);for(var f=("h"===n?u-e-d:p-c-d)/(l.length+1),h=e,g=c;0<l.length;){"h"===n?h+=f:g+=f;var m,v,b,y=l.shift(),w="group"===y.type,E=y.x,D=y.y;w||(h+=y.w/2,g+=y.h/2),("h"===n&&E!==h||"v"===n&&D!==g)&&(w?(m=RED.group.getNodes(y,!0),v="h"===n?E-h:0,b="v"===n?D-g:0,m.forEach(function(e){"group"!==e.type&&(t.push({n:e,ox:e.x,oy:e.y,moved:e.moved}),e.x=e.x-v,e.y=e.y-b,e.dirty=!0,e.moved=!0)})):(t.push({n:y,ox:y.x,oy:y.y,moved:y.moved}),"h"===n?y.x=h:y.y=g,y.dirty=!0,y.moved=!0)),w?(h+=y.w,g+=y.h):(h+=y.w/2,g+=y.h/2)}0<t.length&&(RED.history.push({t:"move",nodes:t,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}}}function h(e){var t,o,n,i;RED.workspaces.isLocked()||(o=RED.view.selection()).nodes&&(t=[],o.nodes.forEach(function(e){"group"===e.type?(t.push(e),t=t.concat(RED.group.getNodes(e,!0))):"subflow"!==e.type&&t.push(e)}),0<t.length)&&(o=t[0].z,n=RED.nodes.getNodeOrder(o),"forwards"===e?i=RED.nodes.moveNodesForwards(t):"backwards"===e?i=RED.nodes.moveNodesBackwards(t):"front"===e?i=RED.nodes.moveNodesToFront(t):"back"===e&&(i=RED.nodes.moveNodesToBack(t)),0<i.length)&&(e=RED.nodes.getNodeOrder(o),RED.history.push({t:"reorder",nodes:{z:o,from:n,to:e},dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}function g(t,a){if(!RED.workspaces.isLocked()){a=Object.assign({renameBlank:!0,renameClash:!0,generateHistory:!0},a);let e=t;if(t?Array.isArray(t)||(e=[t]):e=RED.view.selection().nodes,e&&0<e.length){const s=a.generateHistory&&(!t||!!RED.nodes.node(t.id)),r=[],d={};let i=!1;e.forEach(e=>{var t=e._def||RED.nodes.getType(e.type);if(t&&t.defaults&&t.defaults.name){t=RED.utils.getPaletteLabel(e.type,t);const n=new RegExp("^"+t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+" (\\d+)$");if(!d.hasOwnProperty(e.type)){var o=RED.nodes.filterNodes({type:e.type}).reduce((e,t)=>{var t=n.exec(t.name);return t&&(t=parseInt(t[1],10),e.includes(t)||e.push(t)),e},[]).sort((e,t)=>e-t);let t=1;for(let e=0;e<o.length&&o[e]===t;e++)t++;d[e.type]=t}(a.renameBlank&&""===e.name||a.renameClash&&n.test(e.name))&&(s&&r.push({t:"edit",node:e,changes:{name:e.name},dirty:RED.nodes.dirty(),changed:e.changed}),e.name=t+" "+d[e.type],e.dirty=!0,d[e.type]++,i=!0)}}),i&&(0<r.length&&RED.history.push({t:"multi",events:r}),RED.nodes.dirty(!0),RED.view.redraw())}}}function m(o,n){var e;if(o||(e=RED.view.selection()).nodes&&0<e.nodes.length&&(o=e.nodes[0]),o){let e="node",t=("group"===o.type?e="group":"tab"!==o.type&&"subflow"!==o.type||(e="flow"),""+window.location.origin+window.location.pathname+`#${e}/`+o.id);n&&(t+="/edit"),RED.clipboard.copyText(t)&&RED.notify(RED._("sidebar.info.copyURL2Clipboard"),{timeout:2e3})}}return{init:function(){RED.actions.add("core:show-selected-node-labels",function(){n(!0)}),RED.actions.add("core:hide-selected-node-labels",function(){n(!1)}),RED.actions.add("core:scroll-view-up",function(){RED.view.scroll(0,-RED.view.gridSize())}),RED.actions.add("core:scroll-view-right",function(){RED.view.scroll(RED.view.gridSize(),0)}),RED.actions.add("core:scroll-view-down",function(){RED.view.scroll(0,RED.view.gridSize())}),RED.actions.add("core:scroll-view-left",function(){RED.view.scroll(-RED.view.gridSize(),0)}),RED.actions.add("core:step-view-up",function(){RED.view.scroll(0,-5*RED.view.gridSize())}),RED.actions.add("core:step-view-right",function(){RED.view.scroll(5*RED.view.gridSize(),0)}),RED.actions.add("core:step-view-down",function(){RED.view.scroll(0,5*RED.view.gridSize())}),RED.actions.add("core:step-view-left",function(){RED.view.scroll(-5*RED.view.gridSize(),0)}),RED.actions.add("core:move-selection-up",function(){o(0,-1)}),RED.actions.add("core:move-selection-right",function(){o(1,0)}),RED.actions.add("core:move-selection-down",function(){o(0,1)}),RED.actions.add("core:move-selection-left",function(){o(-1,0)}),RED.actions.add("core:move-selection-forwards",function(){h("forwards")}),RED.actions.add("core:move-selection-backwards",function(){h("backwards")}),RED.actions.add("core:move-selection-to-front",function(){h("front")}),RED.actions.add("core:move-selection-to-back",function(){h("back")}),RED.actions.add("core:step-selection-up",function(){o(0,-RED.view.gridSize())}),RED.actions.add("core:step-selection-right",function(){o(RED.view.gridSize(),0)}),RED.actions.add("core:step-selection-down",function(){o(0,RED.view.gridSize())}),RED.actions.add("core:step-selection-left",function(){o(-RED.view.gridSize(),0)}),RED.actions.add("core:select-connected-nodes",function(){t("all")}),RED.actions.add("core:select-downstream-nodes",function(){t("down")}),RED.actions.add("core:select-upstream-nodes",function(){t("up")}),RED.actions.add("core:go-to-next-node",function(){var o,e;(e=RED.view.selection()).nodes&&1===e.nodes.length?(o=e.nodes[0],0<(e=RED.nodes.filterLinks({source:o})).length&&(e.sort(function(e,t){return Math.abs(e.target.y-o.y)-Math.abs(t.target.y-o.y)}),e=e[0].target)&&(RED.view.select({nodes:[e]}),RED.view.reveal(e.id,!1))):0===RED.workspaces.selection().length&&i()}),RED.actions.add("core:go-to-previous-node",function(){var o,e;(e=RED.view.selection()).nodes&&1===e.nodes.length?(o=e.nodes[0],0<(e=RED.nodes.filterLinks({target:o})).length&&(e.sort(function(e,t){return Math.abs(e.source.y-o.y)-Math.abs(t.source.y-o.y)}),e=e[0].source)&&(RED.view.select({nodes:[e]}),RED.view.reveal(e.id,!1))):0===RED.workspaces.selection().length&&i()}),RED.actions.add("core:go-to-next-sibling",function(){var o,e;(e=RED.view.selection()).nodes&&1===e.nodes.length?0<(e=r(o=e.nodes[0])).length&&((e=e.filter(function(e){return e.y>o.y})).sort(function(e,t){return Math.abs(e.y-o.y)-Math.abs(t.y-o.y)}),e=e[0])&&(RED.view.select({nodes:[e]}),RED.view.reveal(e.id,!1)):0===RED.workspaces.selection().length&&i()}),RED.actions.add("core:go-to-previous-sibling",function(){var o,e;(e=RED.view.selection()).nodes&&1===e.nodes.length?0<(e=r(o=e.nodes[0])).length&&((e=e.filter(function(e){return e.y<o.y})).sort(function(e,t){return Math.abs(e.y-o.y)-Math.abs(t.y-o.y)}),e=e[0])&&(RED.view.select({nodes:[e]}),RED.view.reveal(e.id,!1)):0===RED.workspaces.selection().length&&i()}),RED.actions.add("core:go-to-nearest-node-on-left",function(){d("left")}),RED.actions.add("core:go-to-nearest-node-on-right",function(){d("right")}),RED.actions.add("core:go-to-nearest-node-above",function(){d("up")}),RED.actions.add("core:go-to-nearest-node-below",function(){d("down")}),RED.actions.add("core:align-selection-to-grid",e),RED.actions.add("core:align-selection-to-left",function(){l("left")}),RED.actions.add("core:align-selection-to-right",function(){l("right")}),RED.actions.add("core:align-selection-to-top",function(){l("top")}),RED.actions.add("core:align-selection-to-bottom",function(){l("bottom")}),RED.actions.add("core:align-selection-to-middle",function(){l("middle")}),RED.actions.add("core:align-selection-to-center",function(){l("center")}),RED.actions.add("core:distribute-selection-horizontally",function(){c("h")}),RED.actions.add("core:distribute-selection-vertically",function(){c("v")}),RED.actions.add("core:wire-series-of-nodes",function(){if(!RED.workspaces.isLocked()){var e=RED.view.selection();if(e.nodes&&1<e.nodes.length){for(var t=0,o=[];t<e.nodes.length-1;){var n=e.nodes[t],i=e.nodes[t+1];0<n.outputs&&0<i.inputs&&0===RED.nodes.filterLinks({source:n,target:i,sourcePort:0}).length&&(RED.nodes.addLink(n={source:n,target:i,sourcePort:0}),o.push(n)),t++}0<o.length&&(RED.history.push({t:"add",links:o,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}}}),RED.actions.add("core:wire-node-to-multiple",function(){if(!RED.workspaces.isLocked()){var e=RED.view.selection();if(e.nodes&&1<e.nodes.length){var t=e.nodes[0];if(0!==t.outputs){for(var o=1,n=[];o<e.nodes.length;){var i=e.nodes[o];0<i.inputs&&0===RED.nodes.filterLinks({source:t,target:i,sourcePort:Math.min(t.outputs-1,o-1)}).length&&(i={source:t,target:i,sourcePort:Math.min(t.outputs-1,o-1)},RED.nodes.addLink(i),n.push(i)),o++}0<n.length&&(RED.history.push({t:"add",links:n,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}}}}),RED.actions.add("core:wire-multiple-to-node",function(){if(!RED.workspaces.isLocked()){var e=RED.view.selection();if(e.nodes&&1<e.nodes.length){var t=e.nodes[e.nodes.length-1];if(0!==t.inputs){for(var o=0,n=[],o=0;o<e.nodes.length-1;o++){var i,a,s,r=e.nodes[o];0<r.outputs&&(a=RED.nodes.filterLinks({source:r,target:t}),s=Array.from({length:r.outputs},(e,t)=>t),i=a.map(e=>e.sourcePort),0!=(a=s.filter(e=>!i.includes(e))).length)&&(s={source:r,target:t,sourcePort:a[0]},RED.nodes.addLink(s),n.push(s))}0<n.length&&(RED.history.push({t:"add",links:n,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))}}}}),RED.actions.add("core:split-wire-with-link-nodes",function(){var e=void 0;if(!RED.workspaces.isLocked()){let n=e||RED.view.selection().links&&RED.view.selection().links.filter(e=>!e.link);if(n&&!((n=Array.isArray(n)?n:[n]).length<1)){var i={t:"multi",events:[],dirty:RED.nodes.dirty()},a={},s={};const m=RED.view.gridSize();for(let o=0;o<n.length;o++){var r=n[o],d=r.source,l=r.target,c=function(e,t,o,n,i){var a=RED.view.calculateNodeDimensions(t),a=(t.w=a[0],t.h=a[1],{x:e.x||0,y:e.y||0,w:e.w||RED.view.node_width,h:e.h||RED.view.node_height}),e=a.x-a.w/2;a.x=o?e-m-t.w/2:e+a.w+m+t.w/2,t.x=a.x,t.y=a.y,!1!==n&&(o=RED.view.tools.calculateGridSnapOffsets(t),t.x-=o.x,t.y-=o.y),t.y+=i||0},u=r.sourcePort||0,p=d.id+":"+u;let t=a[p];if(!t){var f,h=RED.view.createNode("link out");t=h.node;let e=0;1<d.outputs?(f=(d.outputs-1)/2+1,g=Math.abs(f-(u+1)),e=2*m*g,u+1<f&&(e=-e),c(d,t,!1,!1,e)):c(d,t,!1,RED.view.snapGrid,e),t=RED.nodes.add(t),a[p]=t,RED.editor.validateNode(t),i.events.push(h.historyEvent);var g={source:d,sourcePort:r.sourcePort||0,target:t};RED.nodes.addLink(g),i.events.push({t:"add",links:[g]})}let e=s[l.id];e||(u=RED.view.createNode("link in"),c(l,e=u.node,!0,RED.view.snapGrid,0),e=RED.nodes.add(e),s[l.id]=e,RED.editor.validateNode(e),i.events.push(u.historyEvent),f={source:e,sourcePort:0,target:l},RED.nodes.addLink(f),i.events.push({t:"add",links:[f]})),-1==e.links.indexOf(t.id)&&e.links.push(t.id),-1==t.links.indexOf(e.id)&&t.links.push(e.id),RED.nodes.removeLink(r),i.events.push({t:"delete",links:[r]})}RED.history.push(i),RED.view.clearSelection(),RED.view.select({nodes:Object.values(s)}),t("down"),RED.nodes.dirty(!0),RED.view.redraw(!0)}}}),RED.actions.add("core:split-wires-with-junctions",function(t){var s,r,d,l,o,[c={}]=[t];if(!RED.workspaces.isLocked()){let e=c.wires||RED.view.selection().links&&RED.view.selection().links.filter(e=>!e.link);e&&0!==(e=Array.isArray(e)?e:[e]).length&&(s=new Set,r=[],d=[],l={},e.forEach(function(e){var t=e.source.id+":"+e.sourcePort;l[t]=l[t]||[],l[t].push(e),l[e.target.id]=l[e.target.id]||[],l[e.target.id].push(e)}),(t=Object.keys(l)).sort(function(e,t){return l[t].length-l[e].length}),o=RED.nodes.dirty(),t.forEach(function(o){var n=l[o],i={_def:{defaults:{}},type:"junction",z:RED.workspaces.active(),id:RED.nodes.id(),x:0,y:0,w:0,h:0,outputs:1,inputs:1,dirty:!0,moved:!0},n=n.filter(function(e){return!s.has(e)});if(0!==n.length){if(0===d.length&&Object.hasOwn(c,"x")&&Object.hasOwn(c,"y"))i.x=c.x,i.y=c.y;else{let t=0;n.forEach(function(e){e._sliceLocation?(i.x+=e._sliceLocation.x,i.y+=e._sliceLocation.y,delete e._sliceLocation,t++):(i.x+=e.source.x+e.source.w/2+e.target.x-e.target.w/2,i.y+=e.source.y+e.target.y,t+=2)}),i.x=Math.round(i.x/t),i.y=Math.round(i.y/t)}RED.view.snapGrid&&(t=RED.view.gridSize(),i.x=t*Math.round(i.x/t),i.y=t*Math.round(i.y/t));var t,a=new Set,i=RED.nodes.addJunction(i);d.push(i);let e;e=o===n[0].source.id+":"+n[0].sourcePort?{source:n[0].source,sourcePort:n[0].sourcePort,target:i}:{source:i,sourcePort:0,target:n[0].target},r.push(e),RED.nodes.addLink(e),n.forEach(function(e){s.add(e),RED.nodes.removeLink(e);let t;t=o===e.target.id?{source:e.source,sourcePort:e.sourcePort,target:i}:{source:i,sourcePort:0,target:e.target},r.push(t),RED.nodes.addLink(t),a.add(e.source.g||"__NONE__"),a.add(e.target.g||"__NONE__")}),1===a.size&&"__NONE__"!==(t=a.values().next().value)&&RED.group.addToGroup(RED.nodes.group(t),i)}}),0<d.length&&(RED.history.push({dirty:o,t:"add",links:r,junctions:d,removedLinks:Array.from(s)}),RED.nodes.dirty(!0),RED.view.select({nodes:d})),RED.view.redraw(!0))}}),RED.actions.add("core:generate-node-names",g),RED.actions.add("core:copy-item-url",function(e){m(e)}),RED.actions.add("core:copy-item-edit-url",function(e){m(e,!0)})},alignSelectionToGrid:e,moveSelection:o,calculateGridSnapOffsets:function(e,t){t=t||{align:"nearest"};var o={x:0,y:0},n=RED.view.gridSize(),i=e.x-(n*Math.round((e.x-e.w/2)/n)+e.w/2),a=e.x-(n*Math.round((e.x+e.w/2)/n)-e.w/2);return o.x=a,"right"!==t.align&&("left"===t.align||Math.abs(i)<Math.abs(a))&&(o.x=i),o.y=e.y-n*Math.round(e.y/n),o},isPointInNode:function(e,[t,o],n,i){n=n||0,i=i||0;var a=e.w||10,s=e.h||10;let r,d,l,c;return c="junction"===e.type||"group"===e.type?(r=e.x,l=e.y,d=e.x+a,e.y+s):([a,s]=[a/2,s/2],r=e.x-a,l=e.y-s,d=e.x+a,e.y+s),t>=r-n&&t<=d+n&&o>=l-i&&o<=c+i}}}(),RED.sidebar=function(){var a,s={},o=null;var i={};function t(e){e?($("#red-ui-main-container").removeClass("red-ui-sidebar-closed"),a.resize()):$("#red-ui-main-container").addClass("red-ui-sidebar-closed"),RED.events.emit("sidebar:resize")}function r(e,t){(e=":first"===e?o||RED.settings.get("editor.sidebar.order",["info","help","version-control","debug"])[0]:e)&&(!n(e)&&s[e]&&a.addTab(s[e]),a.activateTab(e),t||RED.menu.isSelected("menu-item-sidebar")||RED.menu.setSelected("menu-item-sidebar",!0))}function n(e){return a.contains(e)}return i.dragging=!1,{init:function(){var e;$("#red-ui-sidebar-separator").draggable({axis:"x",start:function(e,t){i.closing=!1,i.opening=!1;var o=$("#red-ui-editor").width();i.start=t.position.left,i.chartWidth=$("#red-ui-workspace").width(),i.chartRight=o-$("#red-ui-workspace").width()-$("#red-ui-workspace").offset().left-2,i.dragging=!0,RED.menu.isSelected("menu-item-sidebar")||(i.opening=!0,$("#red-ui-sidebar").addClass("closing"),$("#red-ui-workspace").css("right",7),$("#red-ui-editor-stack").css("right",8),$("#red-ui-sidebar").width(0),RED.menu.setSelected("menu-item-sidebar",!0),RED.events.emit("sidebar:resize")),i.width=$("#red-ui-sidebar").width()},drag:function(e,t){var o=t.position.left-i.start,n=i.width-o,t=(i.opening&&(n-=3),150<n&&i.chartWidth+o<200&&(t.position.left=200+i.start-i.chartWidth,o=t.position.left-i.start,n=i.width-o),n<150?(i.closing||($("#red-ui-sidebar").addClass("closing"),i.closing=!0),i.opening||(t.position.left=i.width-((n=150)-i.start),o=t.position.left-i.start)):150<n&&(i.closing||i.opening)&&(i.closing=!1,$("#red-ui-sidebar").removeClass("closing")),i.chartRight-o);$("#red-ui-workspace").css("right",t),$("#red-ui-editor-stack").css("right",1+t),$("#red-ui-sidebar").width(n),a.resize(),RED.events.emit("sidebar:resize")},stop:function(e,t){i.dragging=!1,i.closing&&($("#red-ui-sidebar").removeClass("closing"),RED.menu.setSelected("menu-item-sidebar",!1),$("#red-ui-sidebar").width()<180)&&($("#red-ui-sidebar").width(180),$("#red-ui-workspace").css("right",187),$("#red-ui-editor-stack").css("right",188)),$("#red-ui-sidebar-separator").css("left","auto"),$("#red-ui-sidebar-separator").css("right",$("#red-ui-sidebar").width()+2+"px"),RED.events.emit("sidebar:resize")}}),(e=$('<div class="red-ui-sidebar-control-right"><i class="fa fa-chevron-right"</div>').appendTo($("#red-ui-sidebar-separator"))).on("click",function(){e.hide(),RED.menu.toggleSelected("menu-item-sidebar")}),$("#red-ui-sidebar-separator").on("mouseenter",function(){i.dragging||(RED.menu.isSelected("menu-item-sidebar")?e.find("i").addClass("fa-chevron-right").removeClass("fa-chevron-left"):e.find("i").removeClass("fa-chevron-right").addClass("fa-chevron-left"),e.toggle("slide",{direction:"right"},200))}),$("#red-ui-sidebar-separator").on("mouseleave",function(){i.dragging||(e.stop(!1,!0),e.hide())}),a=RED.tabs.create({element:$('<ul id="red-ui-sidebar-tabs"></ul>').appendTo("#red-ui-sidebar"),onchange:function(e){$("#red-ui-sidebar-content").children().hide(),$("#red-ui-sidebar-footer").children().hide(),e.onchange&&e.onchange.call(e),$(e.wrapper).show(),e.toolbar&&$(e.toolbar).show(),RED.settings.setLocal("last-sidebar-tab",e.id)},onremove:function(e){$(e.wrapper).hide(),e.onremove&&e.onremove.call(e)},collapsible:!0,onreorder:function(e){RED.settings.set("editor.sidebar.order",e)},order:RED.settings.get("editor.sidebar.order",["info","help","version-control","debug"])}),$('<div id="red-ui-sidebar-content"></div>').appendTo("#red-ui-sidebar"),$('<div id="red-ui-sidebar-footer" class="red-ui-component-footer"></div>').appendTo("#red-ui-sidebar"),$('<div id="red-ui-sidebar-shade" class="hide"></div>').appendTo("#red-ui-sidebar"),RED.actions.add("core:toggle-sidebar",function(e){void 0===e?RED.menu.toggleSelected("menu-item-sidebar"):t(e)}),RED.popover.tooltip($("#red-ui-sidebar-separator").find(".red-ui-sidebar-control-right"),RED._("keyboard.toggleSidebar"),"core:toggle-sidebar"),o=RED.settings.getLocal("last-sidebar-tab"),RED.sidebar.info.init(),RED.sidebar.help.init(),RED.sidebar.config.init(),RED.sidebar.context.init(),$("#red-ui-editor").width()<600&&RED.menu.setSelected("menu-item-sidebar",!1)},addTab:function(e,t,o,n){var i;"string"==typeof e?i={id:t.id,label:e,name:e,content:t,closeable:o,visible:n}:"object"==typeof e&&(i=e),delete i.closeable,i.wrapper=$("<div>",{style:"height:100%"}).appendTo("#red-ui-sidebar-content"),i.wrapper.append(i.content),i.wrapper.hide(),i.enableOnEdit||(i.shade=$("<div>",{class:"red-ui-sidebar-shade hide"}).appendTo(i.wrapper)),i.toolbar&&($("#red-ui-sidebar-footer").append(i.toolbar),$(i.toolbar).hide()),i.id,RED.menu.addItem("menu-item-view-menu",{id:"menu-item-view-menu-"+i.id,label:i.name,onselect:function(){r(i.id)},group:"sidebar-tabs"}),i.iconClass=i.iconClass||"fa fa-square-o",!1!==(s[i.id]=i).visible&&a.addTab(s[i.id])},removeTab:function(e){a.removeTab(e),$(s[e].wrapper).remove(),s[e].footer&&s[e].footer.remove(),delete s[e],RED.menu.removeItem("menu-item-view-menu-"+e)},show:r,containsTab:n,toggleSidebar:t}}(),RED.palette=function(){var n,E=["config","unknown","deprecated"],D=["subflows","common","function","network","input","output","sequence","parser","storage","analysis","social","advanced"],R={};let x={filter:"",collapsed:[]},_;function k(e,t,o,n){0===$("#red-ui-palette-base-category-"+t).length&&i(e,t,n+":palette.label."+t),$("#red-ui-palette-container-"+t).show(),0===$("#red-ui-palette-"+o).length&&$("#red-ui-palette-base-category-"+t).append('<div id="red-ui-palette-'+o+'"></div>')}function i(e,o,t){var t=((t=RED._(t,{defaultValue:o}))||o).replace(/_/g," "),n=$('<div id="red-ui-palette-container-'+o+'" class="red-ui-palette-category hide"><div id="red-ui-palette-header-'+o+'" class="red-ui-palette-header"><i class="expanded fa fa-angle-down"></i><span>'+t+'</span></div><div class="red-ui-palette-content" id="red-ui-palette-base-category-'+o+'"><div id="red-ui-palette-'+o+'"></div><div id="red-ui-palette-'+o+'-input"></div><div id="red-ui-palette-'+o+'-output"></div><div id="red-ui-palette-'+o+'-function"></div></div></div>').appendTo("#red-ui-palette-container");n.data("category",e),n.data("label",t),R[o]={container:n,hide:function(e){e?n.hide():n.slideUp()},show:function(){n.show()},isOpen:function(){return!!n.hasClass("red-ui-palette-open")},getNodeCount:function(e){var t=n.find(".red-ui-palette-node");return(e?t.filter(function(){return"none"!==$(this).css("display")}):t).length},close:function(e,t){n.removeClass("red-ui-palette-open"),n.addClass("red-ui-palette-closed"),e?$("#red-ui-palette-base-category-"+o).hide():$("#red-ui-palette-base-category-"+o).slideUp(),$("#red-ui-palette-header-"+o+" i").removeClass("expanded"),t||x.collapsed.includes(o)||(x.collapsed.push(o),c())},open:function(e){n.addClass("red-ui-palette-open"),n.removeClass("red-ui-palette-closed"),$("#red-ui-palette-base-category-"+o).slideDown(),$("#red-ui-palette-header-"+o+" i").addClass("expanded"),e||x.collapsed.includes(o)&&(x.collapsed.splice(x.collapsed.indexOf(o),1),c())},toggle:function(){R[o].isOpen()?R[o].close():R[o].open()}},$("#red-ui-palette-header-"+o).on("click",function(e){R[o].toggle()})}function T(t,e,o,n){e.attr("data-palette-label",o);for(var i=(o=RED.utils.sanitize(o)).split(/([ -]|\\n )/),a=[],s="",r=0;r<i.length;r++){var d=i[r];if("\\n "===d)a.push(s),s="";else{var l=0==r?"":" ";if(RED.view.calculateTextWidth(s+l+d,"red-ui-palette-label")<82)s+=l+d;else for(0<r&&a.push(s);;){if(!(82<=RED.view.calculateTextWidth(d,"red-ui-palette-label"))){s=d;break}for(var c=d.length;0<c;c--){var u=d.substring(0,c);if(RED.view.calculateTextWidth(u,"red-ui-palette-label")<82){a.push(u),d=d.substring(c);break}}}}}a.push(s);var p=a.join("<br/>"),f=8+20*a.length;e.css({height:f+"px"}),e.find(".red-ui-palette-label").html(p).attr("dir",RED.text.bidi.resolveBaseTextDir(p)),e.find(".red-ui-palette-port").css({top:f/2-5+"px"});try{var h,g,m,v,b="<p><b>"+RED.text.bidi.enforceTextDirectionWithUCC(o)+"</b></p>",y=((h=$("<div></div>").append($(b+(n||RED.nodes.getNodeHelp(t)||"<p>"+RED._("palette.noInfo")+"</p>").trim()).filter(function(e){return 1==this.nodeType&&"P"==this.nodeName||3==this.nodeType&&0<this.textContent.trim().length}).slice(0,2))).find("a").each(function(){var e=$(this).text();$(this).before(e),$(this).remove()}),RED.nodes.getType(t));y&&(g="",y&&!/^subflow:/.test(t)&&(g=y.set.module+" : "),g+=t,m=t.replace(/'/g,"\\'"),v=-1<t.indexOf(" ")?"&quot;"+t+"&quot;":t,/^subflow:/.test(t)&&$('<button type="button" onclick="RED.workspaces.show(\''+t.substring(8).replace(/'/g,"\\'")+'\'); return false;" class="red-ui-button red-ui-button-small" style="float: right; margin-left: 5px;"><i class="fa fa-pencil"></i></button>').appendTo(h),$('<button type="button" onclick="RED.search.show(\'type:'+v+'\'); return false;" class="red-ui-button red-ui-button-small" style="float: right; margin-left: 5px;"><i class="fa fa-search"></i></button>').appendTo(h),$('<button type="button" onclick="RED.sidebar.help.show(\''+m+'\'); return false;" class="red-ui-button red-ui-button-small" style="float: right; margin-left: 5px;"><i class="fa fa-book"></i></button>').appendTo(h),$("<p>",{style:"font-size: 0.8em"}).text(g).appendTo(h))}catch(e){console.log("Error generating pop-over label for ",t),console.log(e.toString()),h="<p><b>"+o+"</b></p><p>"+RED._("palette.noInfo")+"</p>"}e.data("popover").setContent(h)}function C(e){return $(".red-ui-palette-node[data-palette-type='"+e+"']")}function j(e){return e.replace(/[\x00-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]/g,"_")}function a(o,n){var e,t,i,a,s,r,p,f,h,g,m,d,l,c,v,b,y,u,w;C(o).length||(u=n.category,-1===E.indexOf(u)&&(t=(e=j(u)).split("-")[0],i=$("<div>",{class:"red-ui-palette-node"}).attr("data-palette-type",o).data("category",t),a=RED.utils.getPaletteLabel(o,n),$("<div/>",{class:"red-ui-palette-label"+(!n.align&&0!==n.inputs&&0===n.outputs||"right"===n.align?" red-ui-palette-label-right":"")}).appendTo(i),n.icon&&(s=RED.utils.getNodeIcon(n),(w=$("<div/>",{class:"red-ui-palette-icon-container"+(!n.align&&0!==n.inputs&&0===n.outputs||"right"===n.align?" red-ui-palette-icon-container-right":"")}).appendTo(i)).attr("data-palette-icon",s),RED.utils.createIconElement(s,w,!0)),i.css("backgroundColor",RED.utils.getNodeColor(o,n)),0<n.outputs&&((s=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-output",i.append(s)),0<n.inputs&&((w=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-input",i.append(w)),k(u,t,e,-1!==D.indexOf(t)?"node-red":n.set.id),$("#red-ui-palette-"+e).append(i),i.on("mousedown",function(e){e.preventDefault()}),s=RED.popover.create({target:i,trigger:"hover",interactive:!0,width:"300px",content:"hi",delay:{show:750,hide:50}}),i.data("popover",s),r=$("#red-ui-workspace-chart"),p=$("#red-ui-workspace-chart>svg").get(0),$(i).draggable({helper:"clone",appendTo:"#red-ui-editor",revert:"invalid",revertDuration:200,containment:"#red-ui-main-container",start:function(){y=!RED.nodes.workspace(RED.workspaces.active())?.locked,v=$("#red-ui-palette").width(),b=$("#red-ui-palette").parent().position().top+$("#red-ui-palette-container").position().top,c=null,(l=RED.view.getActiveGroup())&&document.getElementById("group_select_"+l.id).classList.add("red-ui-flow-group-active-hovered"),RED.view.focus()},stop:function(){y&&(d3.select(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),c&&document.getElementById("group_select_"+c.id).classList.remove("red-ui-flow-group-hovered"),l&&document.getElementById("group_select_"+l.id).classList.remove("red-ui-flow-group-active-hovered"),m&&(clearTimeout(m),m=null),d)&&(clearTimeout(d),d=null)},drag:function(e,u){var t=C(o);u.originalPosition.left=t.offset().left,y&&(h=u.position.left-v+u.helper.width()/2+r.scrollLeft(),g=u.position.top-b+u.helper.height()/2+r.scrollTop()+10,d=d||setTimeout(function(){var e=h/RED.view.scale(),t=g/RED.view.scale(),e=RED.view.getGroupAtPoint(e,t);e!==c&&(c&&document.getElementById("group_select_"+c.id).classList.remove("red-ui-flow-group-hovered"),e&&document.getElementById("group_select_"+e.id).classList.add("red-ui-flow-group-hovered"),(c=e)?$(u.helper).data("group",c):$(u.helper).removeData("group")),d=null},200),0<n.inputs)&&0<n.outputs&&(m=m||setTimeout(function(){for(var e,t=[],o=1/0,n=null,t=p.getIntersectionList?((e=p.createSVGRect()).x=h,e.y=g,e.width=1,e.height=1,p.getIntersectionList(e,p)):RED.view.getLinksAtPoint(h,g),i=h/RED.view.scale(),a=g/RED.view.scale(),s=0;s<t.length;s++){var r=d3.select(t[s]);if(r.classed("red-ui-flow-link-background")&&!r.classed("red-ui-flow-link-link"))for(var d=t[s].getTotalLength(),l=0;l<d;l+=10){var c=t[s].getPointAtLength(l),c=(c.x-i)*(c.x-i)+(c.y-a)*(c.y-a);c<200&&c<o&&(o=c,n=t[s])}}f&&f!==n&&d3.select(f.parentNode).classed("red-ui-flow-link-splice",!1),n?d3.select(n.parentNode).classed("red-ui-flow-link-splice",!0):d3.select(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),f!==n&&(n?$(u.helper).data("splice",d3.select(n).data()[0]):$(u.helper).removeData("splice")),f=n,m=null},200))}}),w=null,0===o.indexOf("subflow:")&&(i.on("dblclick",function(e){RED.workspaces.show(o.substring(8)),e.preventDefault()}),u=RED.nodes.subflow(o.substring(8)),w=RED.utils.renderMarkdown(u.info||"")),T(o,i,a,w),1===$("#red-ui-palette-container-"+t).find(".red-ui-palette-node").length&&(x?.collapsed?.includes(t)?R[t].close(!0):R[t].open()),clearTimeout(_),_=setTimeout(()=>{L()},200)))}function s(e){var e=C(e),t=e.closest(".red-ui-palette-category");e.remove(),0===t.find(".red-ui-palette-node").length&&(t.find("i").hasClass("expanded")&&(t.find(".red-ui-palette-content").slideToggle(),t.find("i").toggleClass("expanded")),t.hide())}function r(e){for(var e=C(e),e=(e.hide(),e.closest(".red-ui-palette-category")),t=e.find(".red-ui-palette-node"),o=0,n=0;n<t.length;n++)"none"===$(t[n]).css("display")&&(o+=1);o===t.length&&e.hide()}function d(e){e=C(e);e.closest(".red-ui-palette-category").show(),e.show()}function l(e){var t=C("subflow:"+e.id),o=t.find(".red-ui-palette-port-input"),n=t.find(".red-ui-palette-port-output");t.find(".red-ui-palette-label").attr("class","red-ui-palette-label"+(!e._def.align&&0!==e.in.length&&0===e.out.length||"right"===e._def.align?" red-ui-palette-label-right":""));t.find(".red-ui-palette-icon-container").attr("class","red-ui-palette-icon-container"+(!e._def.align&&0!==e.in.length&&0===e.out.length||"right"===e._def.align?" red-ui-palette-icon-container-right":"")),0===o.length&&0<e.in.length?((a=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-input",t.append(a)):0!==o.length&&0===e.in.length&&o.remove(),0===n.length&&0<e.out.length?((a=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-output",t.append(a)):0!==n.length&&0===e.out.length&&n.remove();var i,o=t.attr("data-palette-label"),a=t.attr("data-palette-info"),a=((o!==e.name||a!==e.info||0<e.in.length||0<e.out.length)&&(t.attr("data-palette-info",e.info),T(e.type+":"+e.id,t,e.name,RED.utils.renderMarkdown(e.info||""))),n=t,o=e,o=RED.utils.getNodeIcon(o._def),(n=n.find(".red-ui-palette-icon-container")).attr("data-palette-icon")!==o&&(n.attr("data-palette-icon",o),RED.utils.createIconElement(o,n,!0)),t.data("category")),o=e.category||"subflows";a!==o&&(k(o,n=j(o),n,"node-red"),a=t.closest(".red-ui-palette-category"),(i=$("#red-ui-palette-"+n)).append(t),1===i.find(".red-ui-palette-node").length&&R[n].open(),t.data("category",o),0===a.find(".red-ui-palette-node").length)&&(a.find("i").hasClass("expanded")&&(a.find(".red-ui-palette-content").slideToggle(),a.find("i").toggleClass("expanded")),a.hide()),t.css("backgroundColor",e.color)}function L(){const n=$("#red-ui-palette-search input").val();var e,t,i=new RegExp(n.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"i");for(e in $("#red-ui-palette-container .red-ui-palette-node").each(function(e,t){var o=$(t).attr("data-palette-label"),t=$(t).attr("data-palette-type");""===n||i.test(t)||i.test(o)?$(this).show():$(this).hide()}),R)R.hasOwnProperty(e)&&(0===(t=R[e]).getNodeCount(!0)?t.hide():(t.show(),!n&&x.collapsed.includes(e)?t.isOpen()&&t.close(!0,!0):t.open(!0)))}function c(){try{RED.settings.setLocal("palette-state",JSON.stringify(x))}catch(e){console.error("Unexpected error saving palette state to localStorage: ",e)}}return{init:function(){$('<img src="red/images/spin.svg" class="red-ui-palette-spinner hide"/>').appendTo("#red-ui-palette"),$('<div id="red-ui-palette-search" class="red-ui-palette-search hide"><input type="text" data-i18n="[placeholder]palette.filter"></input></div>').appendTo("#red-ui-palette"),$('<div id="red-ui-palette-container" class="red-ui-palette-scroll hide"></div>').appendTo("#red-ui-palette"),$('<div class="red-ui-component-footer"></div>').appendTo("#red-ui-palette"),$('<div id="red-ui-palette-shade" class="hide"></div>').appendTo("#red-ui-palette"),$("#red-ui-palette > .red-ui-palette-spinner").show(),RED.events.on("logout",function(){RED.settings.removeLocal("palette-state")}),RED.events.on("registry:node-type-added",function(e){var t=RED.nodes.getType(e);a(e,t),t.onpaletteadd&&"function"==typeof t.onpaletteadd&&t.onpaletteadd.call(t)}),RED.events.on("registry:node-type-removed",function(e){s(e)}),RED.events.on("registry:node-set-enabled",function(e){for(var t=0;t<e.types.length;t++){d(e.types[t]);var o=RED.nodes.getType(e.types[t]);o&&o.onpaletteadd&&"function"==typeof o.onpaletteadd&&o.onpaletteadd.call(o)}}),RED.events.on("registry:node-set-disabled",function(e){for(var t=0;t<e.types.length;t++){r(e.types[t]);var o=RED.nodes.getType(e.types[t]);o&&o.onpaletteremove&&"function"==typeof o.onpaletteremove&&o.onpaletteremove.call(o)}}),RED.events.on("registry:node-set-removed",function(e){if(e.added)for(var t=0;t<e.types.length;t++){s(e.types[t]);var o=RED.nodes.getType(e.types[t]);o&&o.onpaletteremove&&"function"==typeof o.onpaletteremove&&o.onpaletteremove.call(o)}}),RED.events.on("subflows:change",l),$("#red-ui-palette-search input").searchBox({delay:100,change:function(){L(),x.filter=$(this).val(),c()}}),n=$('<div class="red-ui-sidebar-control-left"><i class="fa fa-chevron-left"></i></div>').appendTo($("#red-ui-palette")),RED.popover.tooltip(n,RED._("keyboard.togglePalette"),"core:toggle-palette"),n.on("click",function(){RED.menu.toggleSelected("menu-item-palette")}),$("#red-ui-palette").on("mouseenter",function(){n.toggle("slide",{direction:"left"},200)}),$("#red-ui-palette").on("mouseleave",function(){n.stop(!1,!0),n.hide()});var e=[],t=(RED.settings.paletteCategories?e=RED.settings.paletteCategories:RED.settings.theme("palette.categories")&&(e=RED.settings.theme("palette.categories")),Array.isArray(e)||(e=[]),{}),e=(e.forEach(function(e){t[e]=!0,i(e,j(e),"palette.label."+j(e))}),D.forEach(function(e){t[e]||i(e,j(e),"palette.label."+j(e))}),$('<span class="button-group"></span>').appendTo("#red-ui-palette .red-ui-component-footer")),o=$('<button type="button" class="red-ui-footer-button"><i class="fa fa-angle-double-up"></i></button>').appendTo(e);o.on("click",function(e){for(var t in e.preventDefault(),R)R.hasOwnProperty(t)&&R[t].close()}),RED.popover.tooltip(o,RED._("palette.actions.collapse-all")),(o=$('<button type="button" class="red-ui-footer-button"><i class="fa fa-angle-double-down"></i></button>').appendTo(e)).on("click",function(e){for(var t in e.preventDefault(),R)R.hasOwnProperty(t)&&R[t].open()}),RED.popover.tooltip(o,RED._("palette.actions.expand-all")),RED.actions.add("core:toggle-palette",function(e){void 0===e?RED.menu.toggleSelected("menu-item-palette"):(e?($("#red-ui-main-container").removeClass("red-ui-palette-closed"),n.find("i").removeClass("fa-chevron-right").addClass("fa-chevron-left")):($("#red-ui-main-container").addClass("red-ui-palette-closed"),n.hide(),n.find("i").addClass("fa-chevron-right").removeClass("fa-chevron-left")),setTimeout(function(){$(window).trigger("resize")},200))});try{(x=JSON.parse(RED.settings.getLocal("palette-state")||'{"filter":"", "collapsed": []}')).filter&&$("#red-ui-palette-search input").searchBox("value",x.filter)}catch(e){console.error("Unexpected error loading palette state from localStorage: ",e)}setTimeout(()=>{x.collapsed=x.collapsed.filter(e=>!!R[e]),c()},1e4)},add:a,remove:s,hide:r,show:d,refresh:function(){RED.nodes.eachSubflow(l)},getCategories:function(){var o=[];return $("#red-ui-palette-container .red-ui-palette-category").each(function(e,t){o.push({id:$(t).data("category"),label:$(t).data("label")})}),o}}}(),RED.sidebar.info=function(){var n,i,w,a,E,D,R,x,_,k,s,r,T={property:!1};function d(){var e;i&&(e=$(n).parent().height()-s.outerHeight(),i.resize(e))}function l(){RED.sidebar.show("info")}function o(e){if(void 0===e)C();else{$(w).empty();var t=$('<table class="red-ui-info-table"></table>').appendTo(w),o=$("<tbody>").appendTo(t);if(null===e)RED.sidebar.info.outliner.select(null),E.empty(),D.text(""),R.hide(),x.hide(),_.hide();else if(Array.isArray(e)){RED.sidebar.info.outliner.select(e),E.empty(),RED.utils.createNodeIcon({type:"_selection_"}).appendTo(E),D.text(RED._("sidebar.info.selection")),R.hide(),x.hide(),_.hide(),k=null;var n={nodes:0,flows:0,subflows:0,groups:0},i=(e.forEach(function(e){"tab"===e.type?(n.flows++,n.nodes+=RED.nodes.filterNodes({z:e.id}).length):"subflow"===e.type?n.subflows++:"group"===e.type?n.groups++:n.nodes++}),r=$('<tr class="red-ui-help-info-row"><td>'+RED._("sidebar.info.selection")+"</td><td></td></tr>").appendTo(o),$("<div>").appendTo($(r.children()[1])));0<n.flows&&$("<div>").text(RED._("clipboard.flow",{count:n.flows})).appendTo(i),0<n.subflows&&$("<div>").text(RED._("clipboard.subflow",{count:n.subflows})).appendTo(i),0<n.nodes&&$("<div>").text(RED._("clipboard.node",{count:n.nodes})).appendTo(i),0<n.groups&&$("<div>").text(RED._("clipboard.group",{count:n.groups})).appendTo(i)}else{RED.sidebar.info.outliner.select(e);var t=/^subflow(:(.+))?$/.exec(e.type),a=(t&&((y=t[2]?RED.nodes.subflow(t[2]):e).id,b=y.instances.length),E.empty(),RED.utils.createNodeIcon(e).appendTo(E),RED.utils.getNodeLabel(e,e.type+": "+e.id)),s=a.indexOf("\\n"),s=(-1<s&&(a=a.substring(0,s)+"..."),D.text(a),R.show(),k=e,r=$('<tr class="red-ui-help-info-row"><td></td><td></td></tr>').appendTo(o),"node");if("subflow"===e.type||t?s="subflow":"tab"===e.type?s="flow":"group"===e.type&&(s="group"),$(r.children()[0]).text(RED._("sidebar.info."+s)),RED.utils.createObjectElement(e.id,{sourceId:e.id}).appendTo(r.children()[1]),"tab"===e.type||"subflow"===e.type)x.hide(),_.show();else if("group"===e.type){x.hide(),_.show();var r=$('<tr class="red-ui-help-info-row"><td>&nbsp;</td><td></td></tr>').appendTo(o),d={nodes:0,groups:0},i=(RED.group.getNodes(e,!0).forEach(function(e){"group"===e.type?d.groups++:d.nodes++}),$("<div>").appendTo($(r.children()[1])));0<d.nodes&&$("<div>").text(RED._("clipboard.node",{count:d.nodes})).appendTo(i),0<d.groups&&$("<div>").text(RED._("clipboard.group",{count:d.groups})).appendTo(i)}else if("junction"===e.type)x.hide(),_.hide();else{x.show(),_.show(),t||(r=$('<tr class="red-ui-help-info-row"><td>'+RED._("sidebar.info.type")+"</td><td></td></tr>").appendTo(o),$(r.children()[1]).text(("unknown"===e.type?e._orig:e).type),"unknown"===e.type&&$('<span style="float: right; font-size: 0.8em"><i class="fa fa-warning"></i></span>').prependTo($(r.children()[1])));var l=0;if(!t&&"subflow"!=e.type&&"group"!=e.type){var c,u,p,f,h,g,m,a=$('<tr class="red-ui-help-property-expand blank"><td colspan="2"></td></tr>').appendTo(o);if("unknown"===e.type?(c={},Object.keys(e._orig).forEach(function(e){"type"!==e&&(c[e]={})})):e._def&&(c=e._def.defaults,r=$('<tr class="red-ui-help-info-property-row'+(T.property?"":" hide")+'"><td>'+RED._("sidebar.info.module")+"</td><td></td></tr>").appendTo(o),$(r.children()[1]).text(RED.nodes.getType(e.type).set.module),l++),c)for(var v in c)"name"!=v&&"info"!=v&&c.hasOwnProperty(v)&&(u=e[v],l++,r=$('<tr class="red-ui-help-info-property-row'+(T.property?"":" hide")+'"><td></td><td></td></tr>').appendTo(o),$(r.children()[0]).text(v),c[v].type&&!c[v]._type.array?(p=RED.nodes.node(u))?(v=RED.utils.getNodeLabel(p,u),f=r.children()[1],h=$("<span>",{class:""}).appendTo(f),h=$("<div>",{class:"red-ui-palette-node red-ui-palette-node-small"}).appendTo(h),m=RED.utils.getNodeColor(p.type,p._def),g=RED.utils.getNodeIcon(p._def),h.css({backgroundColor:m,cursor:"pointer"}),m=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(h),$("<div/>",{class:"red-ui-palette-icon",style:"background-image: url("+g+")"}).appendTo(m),$("<span></span>").css({verticalAlign:"top",marginLeft:"6px"}).text(v).appendTo(f),h.on("dblclick",function(){RED.editor.editConfig("",p.type,p.id)})):RED.utils.createObjectElement(void 0).appendTo(r.children()[1]):RED.utils.createObjectElement(u,{sourceId:e.id}).appendTo(r.children()[1]));0<l&&$('<a href="#" class="node-info-property-header'+(T.property?" expanded":"")+'"><span class="red-ui-help-property-more">'+RED._("sidebar.info.showMore")+'</span><span class="red-ui-help-property-less">'+RED._("sidebar.info.showLess")+'</span> <i class="fa fa-caret-down"></i></a>').appendTo(a.children()[0])}"tab"!==e.type&&t&&($('<tr class="blank"><th colspan="2">'+RED._("sidebar.info.subflow")+"</th></tr>").appendTo(o),$('<tr class="node-info-subflow-row"><td>'+RED._("common.label.name")+'</td><td><span class="red-ui-text-bidi-aware" dir="'+RED.text.bidi.resolveBaseTextDir(y.name)+'">'+RED.utils.sanitize(y.name)+"</span></td></tr>").appendTo(o))}t&&(r=$('<tr class="red-ui-help-info-row"><td>'+RED._("subflow.category")+"</td><td></td></tr>").appendTo(o),s=y.category||"subflows",$(r.children()[1]).text(RED._("palette.label."+s,{defaultValue:s})),$('<tr class="node-info-subflow-row"><td>'+RED._("sidebar.info.instances")+"</td><td>"+b+"</td></tr>").appendTo(o),y.meta)&&(r=$('<tr class="red-ui-help-info-row"><td>'+RED._("subflow.module")+"</td><td></td></tr>").appendTo(o),$(r.children()[1]).text(y.meta.module||""),r=$('<tr class="red-ui-help-info-row"><td>'+RED._("subflow.version")+"</td><td></td></tr>").appendTo(o),$(r.children()[1]).text(y.meta.version||""));var i="",s=(e._def&&e._def.info&&(t="function"==typeof(a=e._def.info)?a.call(e):a,i+=RED.utils.renderMarkdown(t)),e.info&&(i+=RED.utils.renderMarkdown(e.info||"")),$("<div>").css("padding","0 6px 6px").appendTo(w)),b=i,y=s;(b=function(e){return $(e).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")}),e}($('<div class="red-ui-help"><span class="red-ui-text-bidi-aware" dir="'+RED.text.bidi.resolveBaseTextDir(b)+'">'+b+"</span></div>")).appendTo(y)).find(".red-ui-text-bidi-aware").contents().filter(function(){return 3===this.nodeType&&""!==this.textContent.trim()}).wrap("<span></span>"),b.find("H3").wrapInner('<a class="red-ui-help-info-header expanded" href="#"></a>').find("a").prepend('<i class="fa fa-angle-right">').on("click",function(e){e.preventDefault();for(var t=$(this).hasClass("expanded"),o=$(this).parent().next();1===o.length&&"H3"!==o[0].nodeName;)o.toggle(!t),o=o.next();$(this).toggleClass("expanded",!t)}),RED.editor.mermaid.render(),$(".red-ui-sidebar-info-stack").scrollTop(0),$(".node-info-property-header").on("click",function(e){e.preventDefault(),T.property=!T.property,$(this).toggleClass("expanded",T.property),$(".red-ui-help-info-property-row").toggle(T.property)})}}}t=!0,p=15e3,f=-1,RED.actions.add("core:toggle-show-tips",function(e){void 0===e?RED.userSettings.toggle("view-show-tips"):((t=e)?m:v)()});var c,u,t,p,f,h={start:m,stop:v,next:function(){clearInterval(u),c=!0,e()},enabled:function(){return t}};function e(){for(var e,t=Math.floor(Math.random()*f),o=RED._("infotips:info.tip"+t);e=/({{(.*?)}})/.exec(o);){var n=RED.keyboard.getShortcut(e[2]);if(!n)return;o=o.replace(e[1],RED.keyboard.formatKey(n.key))}for(;e=/(\[([a-z]*?)\])/.exec(o);)o=o.replace(e[1],RED.keyboard.formatKey(e[2]));r.html(o).fadeIn(200),c&&(c=null,u=setInterval(g,p))}function g(){r.fadeOut(300,function(){e()})}function m(){if($(".red-ui-sidebar-info").addClass("show-tips"),d(),t&&!c&&!u){if(-1===f)for(;f++,RED._("infotips:info.tip"+f)!=="info.tip"+f;);c=setTimeout(e,1e3)}}function v(){$(".red-ui-sidebar-info").removeClass("show-tips"),d(),clearInterval(u),clearTimeout(c),c=u=null}function C(e){var t;(e=void 0===e?RED.view.selection():e).nodes?1==e.nodes.length?"subflow"===(t=e.nodes[0]).type&&t.direction?o(RED.nodes.subflow(t.z)):o(t):o(e.nodes):e.flows||e.subflows?o(e.flows):(t=RED.workspaces.active(),(e=RED.nodes.workspace(t)||RED.nodes.subflow(t))?o(e):(t=RED.nodes.workspace(RED.workspaces.active()))&&t.info?o(t):o(null))}return RED.events.on("view:selection-changed",C),{init:function(){(n=document.createElement("div")).className="red-ui-sidebar-info",RED.actions.add("core:show-info-tab",l);var e=$("<div>",{class:"red-ui-sidebar-info-stack"}).appendTo(n),t=$("<div>").css({overflow:"hidden",height:"calc(70%)"}).appendTo(e),o=$("<div>").css({overflow:"hidden",height:"100%",display:"flex","flex-direction":"column"}).appendTo(e),o=(a=$("<div>",{class:"red-ui-palette-header red-ui-info-header"}).css({flex:"0 0 auto"}).appendTo(o),E=$("<span>").appendTo(a),D=$("<span>").appendTo(a),_=$('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-link"></button>').css({position:"absolute",top:"12px",right:"32px"}).on("click",function(e){RED.actions.invoke("core:copy-item-url",k)}).appendTo(a),RED.popover.tooltip(_,RED._("sidebar.info.copyItemUrl")),x=$('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-book"></button>').css({position:"absolute",top:"12px",right:"56px"}).on("click",function(e){e.preventDefault(),e.stopPropagation(),k&&RED.sidebar.help.show(k.type)}).appendTo(a),RED.popover.tooltip(x,RED._("sidebar.help.showHelp")),R=$('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-search"></button>').css({position:"absolute",top:"12px",right:"8px"}).on("click",function(e){e.preventDefault(),e.stopPropagation(),k&&(RED.sidebar.info.outliner.reveal(k),RED.view.reveal(k.id))}).appendTo(a),RED.popover.tooltip(R,RED._("sidebar.help.showInOutline")),w=$("<div>").css({flex:"1 1 auto","overflow-y":"auto"}).appendTo(o),(i=RED.panels.create({container:e})).ratio(.6),RED.sidebar.info.outliner.build().appendTo(t),RED.sidebar.addTab({id:"info",label:RED._("sidebar.info.label"),name:RED._("sidebar.info.name"),iconClass:"fa fa-info",action:"core:show-info-tab",content:n,pinned:!0,enableOnEdit:!0}),RED.events.on("sidebar:resize",d),$(window).on("resize",d),$(window).on("focus",d),s=$('<div class="red-ui-help-tips"></div>').appendTo(n),r=$('<div class="red-ui-help-tip"></div>').appendTo(s),$('<div class="red-ui-help-tips-buttons"></div>').appendTo(s));$('<a href="#" class="red-ui-footer-button"><i class="fa fa-refresh"></a>').appendTo(o).on("click",function(e){e.preventDefault(),h.next()}),$('<a href="#" class="red-ui-footer-button"><i class="fa fa-times"></a>').appendTo(o).on("click",function(e){e.preventDefault(),RED.actions.invoke("core:toggle-show-tips"),RED.notify(RED._("sidebar.info.showTips"))}),h.enabled()?h.start():h.stop()},show:l,refresh:o,clear:function(){o(null)},set:function(e,t){console.warn("Deprecated use of RED.sidebar.info.set - use RED.sidebar.help.set instead"),RED.sidebar.help.set(e,t)}}}(),RED.sidebar.info.outliner=function(){var a,o,s,n,i,r,t,d,l={},c={};function u(){var e=[{label:RED._("menu.label.flows"),expanded:!0,children:[]},{id:"__subflow__",label:RED._("menu.label.subflows"),children:[f("__subflow__")]},{id:"__global__",flow:"__global__",label:RED._("sidebar.info.globalConfig"),types:{},children:[f("__global__")]}];return r=e[0],t=e[1],d={__global__:e[2]},e}var e,p={};function f(e){var t={empty:!0,element:$('<div class="red-ui-info-outline-item red-ui-info-outline-item-empty">').text(RED._("sidebar.info.empty"))};return p[e]=t}function h(e){var t=$("<div>",{class:"red-ui-node-list-item red-ui-info-outline-item"});return RED.utils.createNodeIcon(e,!0).appendTo(t),t.find(".red-ui-node-label").addClass("red-ui-info-outline-item-label"),g(e,t),t}function g(t,o){var e,n=$("<div>",{class:"red-ui-info-outline-item-controls red-ui-info-outline-item-hover-controls"}).appendTo(o);"subflow"===t.type&&(e=$('<button type="button" class="red-ui-info-outline-item-control-users red-ui-button red-ui-button-small"><i class="fa fa-toggle-right"></i></button>').text(t.instances.length).appendTo(n).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.search.show("type:subflow:"+t.id)}),RED.popover.tooltip(e,function(){return RED._("subflow.subflowInstances",{count:t.instances.length})})),"config"===t._def.category&&"group"!==t.type&&(e=$('<button type="button" class="red-ui-info-outline-item-control-users red-ui-button red-ui-button-small"><i class="fa fa-toggle-right"></i></button>').text(t.users.length).appendTo(n).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.search.show("uses:"+t.id)}),RED.popover.tooltip(e,function(){return RED._("editor.nodesUse",{count:t.users.length})})),t._def.button&&(e=$('<button type="button" class="red-ui-info-outline-item-control-action red-ui-button red-ui-button-small"><i class="fa fa-toggle-right"></i></button>').appendTo(n).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.view.clickNodeButton(t)}),RED.popover.tooltip(e,RED._("sidebar.info.triggerAction"))),"tab"===t.type&&(e=$('<button type="button" class="red-ui-info-outline-item-control-hide red-ui-button red-ui-button-small"><i class="fa fa-eye"></i><i class="fa fa-eye-slash"></i></button>').appendTo(n).on("click",function(e){e.preventDefault(),e.stopPropagation();e=!o.hasClass("red-ui-info-outline-item-hidden");o.toggleClass("red-ui-info-outline-item-hidden",e),e?RED.workspaces.hide(t.id):RED.workspaces.show(t.id,null,!0)}),RED.popover.tooltip(e,function(){var e=!o.hasClass("red-ui-info-outline-item-hidden");return RED._("sidebar.info."+(e?"hideFlow":"showFlow"))})),"subflow"!==t.type?(e=$('<button type="button" class="red-ui-info-outline-item-control-disable red-ui-button red-ui-button-small"><i class="fa fa-circle-thin"></i><i class="fa fa-ban"></i></button>').appendTo(n).on("click",function(e){var o,n;e.preventDefault(),e.stopPropagation(),"tab"===t.type?t.disabled?RED.workspaces.enable(t.id):RED.workspaces.disable(t.id):"group"===t.type?(e=RED.group.getNodes(t,!0),o={t:"multi",events:[],dirty:RED.nodes.dirty()},e.forEach(function(e){var t;"group"!==e.type&&(void 0===n&&(n=!e.d),!!e.d!==n)&&(t={t:"edit",node:e,changed:e.changed,changes:{d:e.d}},e.d?delete e.d:e.d=!0,e.dirty=!0,e.dirtyStatus=!0,e.changed=!0,RED.events.emit("nodes:change",e),o.events.push(t)),0<o.events.length&&(RED.history.push(o),RED.nodes.dirty(!0),RED.view.redraw())})):(e={t:"edit",node:t,changed:t.changed,changes:{d:t.d},dirty:RED.nodes.dirty()},t.d?delete t.d:t.d=!0,t.dirty=!0,t.dirtyStatus=!0,t.changed=!0,RED.events.emit("nodes:change",t),RED.history.push(e),RED.nodes.dirty(!0),RED.view.redraw())}),RED.popover.tooltip(e,function(){return"group"===t.type?RED._("common.label.enable")+" / "+RED._("common.label.disable"):RED._("common.label."+("tab"===t.type&&t.disabled||"tab"!==t.type&&t.d?"enable":"disable"))})):$('<div class="red-ui-info-outline-item-control-spacer">').appendTo(n),"tab"===t.type?(e=$('<button type="button" class="red-ui-info-outline-item-control-lock red-ui-button red-ui-button-small"><i class="fa fa-unlock-alt"></i><i class="fa fa-lock"></i></button>').appendTo(n).on("click",function(e){e.preventDefault(),e.stopPropagation(),t.locked?RED.workspaces.unlock(t.id):RED.workspaces.lock(t.id)}),RED.popover.tooltip(e,function(){return RED._("common.label."+(t.locked?"unlock":"lock"))})):$('<div class="red-ui-info-outline-item-control-spacer">').appendTo(n),n.find("button").on("dblclick",function(e){e.preventDefault(),e.stopPropagation()})}function m(e){l={};var t,o=u();i.empty(),e=e,(t=$("<div>",{class:"red-ui-info-outline-item red-ui-info-outline-item-flow"})).css("width","calc(100% - 40px)"),$("<div>",{class:"red-ui-search-result-description red-ui-info-outline-item-label"}).appendTo(t).text(e.name),e=$("<div>",{class:"red-ui-info-outline-item-controls"}).appendTo(t),e=$('<button class="red-ui-button red-ui-button-small" style="position:absolute;right:5px;top: 3px;"><i class="fa fa-ellipsis-h"></i></button>').appendTo(e).on("click",function(e){e.preventDefault(),RED.projects.editProject()}),RED.popover.tooltip(e,RED._("sidebar.project.showProjectSettings")),t.appendTo(i),n.show(),a.treeList("data",o)}function v(){a.treeList("data",u())}function b(e){e=l[e.workspace];e&&e.element.removeClass("red-ui-info-outline-item-hidden")}function y(e){e=l[e.workspace];e&&e.element.addClass("red-ui-info-outline-item-hidden")}function w(e){var t,o,n,i,a;l[e.id]={id:e.id,element:(t=e,o=$("<div>",{class:"red-ui-info-outline-item red-ui-info-outline-item-flow"}),n=$("<div>",{class:"red-ui-search-result-description red-ui-info-outline-item-label"}).appendTo(o),i="string"==typeof t?t:t.label,-1<(a=i.indexOf("\\n"))&&(i=i.substring(0,a)+"..."),n.text(i),g(t,o),o),children:[],deferBuild:!0,icon:"red-ui-icons red-ui-icons-flow",gutter:T(e)},c[e.id]?(l[e.id].children=c[e.id],delete c[e.id]):l[e.id].children.push(f(e.id)),r.treeList.addChild(l[e.id]),l[e.id].element.toggleClass("red-ui-info-outline-item-disabled",!!e.disabled),l[e.id].treeList.container.toggleClass("red-ui-info-outline-item-disabled",!!e.disabled),l[e.id].element.toggleClass("red-ui-info-outline-item-locked",!!e.locked),l[e.id].treeList.container.toggleClass("red-ui-info-outline-item-locked",!!e.locked),L()}function E(e){var t=l[e.id],o=e.label||e.id,n=o.indexOf("\\n");-1<n&&(o=o.substring(0,n)+"..."),t.element.find(".red-ui-info-outline-item-label").text(o),t.element.toggleClass("red-ui-info-outline-item-disabled",!!e.disabled),t.treeList.container.toggleClass("red-ui-info-outline-item-disabled",!!e.disabled),t.element.toggleClass("red-ui-info-outline-item-locked",!!e.locked),t.treeList.container.toggleClass("red-ui-info-outline-item-locked",!!e.locked),L()}function D(e){var o={};e.forEach(function(e,t){o[e]=t}),r.treeList.sortChildren(function(e,t){return"__global__"===e.id?-1:"__global__"===t.id?1:o[e.id]-o[t.id]})}function R(e){l[e.id]={id:e.id,element:h(e),children:[],deferBuild:!0,gutter:T(e)},c[e.id]?(l[e.id].children=c[e.id],delete c[e.id]):l[e.id].children.push(f(e.id)),p.__subflow__&&(p.__subflow__.treeList.remove(),delete p.__subflow__),t.treeList.addChild(l[e.id]),L()}function x(t){l[t.id].treeList.replaceElement(h(t)),RED.nodes.eachNode(function(e){e.type=="subflow:"+t.id&&l[e.id].treeList.replaceElement(h(e))}),L()}function _(e){var t=l[e.id],o=e.g||e.z||"__global__",n=RED.utils.getNodeLabel(e,e.name||e.type+": "+e.id);n?t.element.find(".red-ui-info-outline-item-label").text(n):t.element.find(".red-ui-info-outline-item-label").html("&nbsp;"),o!==(t.parent.id||t.parent.parent.flow)&&(n=t.parent,t.treeList.remove(!0),0===n.children.length&&(n.config?(n.treeList.remove(),delete d[n.parent.id||n.parent.parent.id].types[e.type],0===n.parent.children.length&&("__global__"===n.parent.id?n.parent.treeList.addChild(f(n.parent.id)):(delete d[n.parent.parent.id],n.parent.treeList.remove(),0===n.parent.parent.children.length&&n.parent.parent.treeList.addChild(f(n.parent.parent.id))))):n.treeList.addChild(f(n.id))),"config"===e._def.category&&"group"!==e.type?(C(o,e.type),d[o].types[e.type].treeList.addChild(l[e.id])):(p[o]&&(p[o].treeList.remove(),delete p[o]),l[o].treeList.addChild(t))),t.element.toggleClass("red-ui-info-outline-item-disabled",!!e.d),"config"===e._def.category&&"group"!==e.type&&t.element.find(".red-ui-info-outline-item-control-users").text(e.users.length),L()}function k(e){var t=l[e.id],o=(t.treeList.remove(),delete l[e.id],/^subflow:/.test(e.type)&&(o=e.type.substring(8),l[o])&&l[o].element.find(".red-ui-info-outline-item-control-users").text(RED.nodes.subflow(o).instances.length),p[e.id]&&delete p[e.id],t.parent);0===o.children.length&&(o.config?(o.treeList.remove(),delete d[o.parent.id||e.z].types[e.type],0===o.parent.children.length&&("__global__"===o.parent.id?o.parent.treeList.addChild(f(o.parent.id)):(delete d[e.z],o.parent.treeList.remove(),0===o.parent.parent.children.length&&o.parent.parent.treeList.addChild(f(o.parent.parent.id))))):o.treeList.addChild(f(o.id)))}function T(t){var e=$("<span>",{class:"red-ui-info-outline-gutter red-ui-treeList-gutter-float"}),o=$('<button type="button" class="red-ui-info-outline-item-control-reveal red-ui-button red-ui-button-small"><i class="fa fa-search"></i></button>').appendTo(e).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.view.reveal(t.id)});return RED.popover.tooltip(o,RED._("sidebar.info.find")),e}function C(e,t){p[e]&&(p[e].treeList.remove(),delete p[e]),d[e]||(d[e]={config:!0,flow:e,types:{},label:RED._("menu.label.displayConfig"),children:[]},l[e].treeList.insertChildAt(d[e],0)),d[e].types[t]||(d[e].types[t]={config:!0,label:t,children:[]},d[e].treeList.addChild(d[e].types[t]))}function j(e){l[e.id]={id:e.id,element:h(e),gutter:T(e)},"group"===e.type&&(l[e.id].children=[],l[e.id].deferBuild=!0,c[e.id]&&(l[e.id].children=c[e.id],delete c[e.id]),0===l[e.id].children.length)&&l[e.id].children.push(f(e.id));var t=e.g||e.z||"__global__";"config"!==e._def.category||"group"===e.type?l[t]?(p[t]&&(p[t].treeList.remove(),delete p[t]),l[t].treeList?l[t].treeList.addChild(l[e.id]):l[t].children.push(l[e.id])):(c[t]=c[t]||[],c[t].push(l[e.id])):(C(t,e.type),d[t].types[e.type].treeList.addChild(l[e.id])),l[e.id].element.toggleClass("red-ui-info-outline-item-disabled",!!e.d),/^subflow:/.test(e.type)&&(t=e.type.substring(8),l[t])&&l[t].element.find(".red-ui-info-outline-item-control-users").text(RED.nodes.subflow(t).instances.length),L()}function L(){e&&clearTimeout(e),s&&(e=setTimeout(function(){o.searchBox("change")},100))}return{build:function(){var e=$("<div>",{class:"red-ui-info-outline"}).css({height:"100%"}),t=$("<div>",{class:"red-ui-sidebar-header red-ui-info-toolbar"}).appendTo(e);return o=$('<input type="text" data-i18n="[placeholder]menu.label.search">').appendTo(t).searchBox({style:"compact",delay:500,change:function(){var e=$(this).val(),t=RED.search.search(e);if(e){s=e;for(var o={},n=0,i=t.length;n<i;n++)o[t[n].node.id]=!0;a.treeList("filter",function(e){return 0===e.depth||e.id&&l[e.id]&&o[e.id]},!0)}else{s=null,a.treeList("filter",null);e=a.treeList("selected");e.id&&a.treeList("show",e.id)}},options:RED.search.getSearchOptions()}),n=$('<div class="red-ui-treeList-label red-ui-info-outline-project"><span class="red-ui-treeList-icon"><i class="fa fa-archive"></i></span></div>').hide().appendTo(e),i=$("<span>").appendTo(n),(a=$("<div>").css({width:"100%"}).appendTo(e).treeList({data:u()})).on("treelistselect",function(e,t){t=RED.nodes.node(t.id)||RED.nodes.group(t.id)||RED.nodes.workspace(t.id)||RED.nodes.subflow(t.id);t?RED.sidebar.info.refresh(t):RED.sidebar.info.refresh(null)}),a.on("treelistconfirm",function(e,t){t=RED.nodes.node(t.id);t&&("config"===t._def.category?RED.editor.editConfig("",t.type,t.id):RED.editor.edit(t))}),RED.events.on("projects:load",m),RED.events.on("flows:add",w),RED.events.on("flows:remove",k),RED.events.on("flows:change",E),RED.events.on("flows:reorder",D),RED.events.on("subflows:add",R),RED.events.on("subflows:remove",k),RED.events.on("subflows:change",x),RED.events.on("nodes:add",j),RED.events.on("nodes:remove",k),RED.events.on("nodes:change",_),RED.events.on("groups:add",j),RED.events.on("groups:remove",k),RED.events.on("groups:change",_),RED.events.on("workspace:show",b),RED.events.on("workspace:hide",y),RED.events.on("workspace:clear",v),e},search:function(e){o.searchBox("value",e)},select:function(e){e?Array.isArray(e)?a.treeList("select",e.map(function(e){return l[e.id]}),!1):a.treeList("select",l[e.id],!1):a.treeList("clearSelection")},reveal:function(e){a.treeList("show",l[e.id])}}}(),RED.sidebar.help=function(){var i,a,s,r,t,d,l,n;function c(){var e=$(i).parent().height()-a.outerHeight();r.resize(e)}function u(){n=n||setTimeout(function(){n=null;var i=RED.nodes.registry.getModuleList(),e=Object.keys(i),a=(e.sort(),{label:RED._("sidebar.help.nodeHelp"),children:[],expanded:!0}),t=RED.tourGuide.list().map(function(e){return{icon:"fa fa-play-circle-o",label:e.label,tour:e.path}}),t=[{label:"Node-RED",children:[{id:"changelog",label:RED._("sidebar.help.changeLog"),content:E},{label:RED._("tourGuide.welcomeTours"),children:t}]},a],o=RED.nodes.registry.getNodeTypes().filter(function(e){return/subflow/.test(e)});0<o.length&&(a.children.push({label:RED._("menu.label.subflows"),children:[]}),o.forEach(function(e){var t=RED.nodes.getType(e);a.children[0].children.push({id:"node-type:"+e,nodeType:e,subflowLabel:t.label().toLowerCase(),element:m({_def:t,type:t.label()})})})),e.forEach(function(e){var t=i[e];const o=[],n=t.sets;Object.keys(n).forEach(function(e){n[e].types.forEach(function(e){var t;$("script[data-help-name='"+e+"']").length&&((t={_def:RED.nodes.getType(e),type:e}).name=g(t),o.push({id:"node-type:"+e,nodeType:e,palleteLabel:t.name,element:m(t)}))})}),0<o.length&&(o.sort(function(e,t){return e.nodeType.localeCompare(t.nodeType)}),a.children.push({id:e,icon:"fa fa-cube",label:e,children:o}))}),d.treeList("data",t)},500)}function p(e){var t=d.treeList("get","node-type:subflow:"+e.id);t&&(t.subflowLabel=e._def.label().toLowerCase(),t.treeList.replaceElement(m({_def:e._def,type:e._def.label()})))}function f(){var e=$("#red-ui-sidebar-help-show-toc");e.hasClass("selected")&&(e.removeClass("selected"),t=r.ratio(),l.css({transition:"height 0.2s"}),r.ratio(0),setTimeout(function(){l.css({transition:""})},250))}function h(){var e=$("#red-ui-sidebar-help-show-toc");e.hasClass("selected")||(e.addClass("selected"),l.css({transition:"height 0.2s"}),r.ratio(Math.max(.3,Math.min(t,.7))),setTimeout(function(){l.css({transition:""});var e=d.treeList("selected");e.id&&d.treeList("show",e)},250))}function g(e){let t=e.name;if(!t&&e._def&&e._def.paletteLabel)try{t=("function"==typeof e._def.paletteLabel?e._def.paletteLabel.call(e._def):e._def.paletteLabel)||""}catch(e){}return t||e.type}function m(e){var t=$("<div>",{class:"red-ui-node-list-item"}),o=RED.utils.createNodeIcon(e).appendTo(t);return $("<div>",{class:"red-ui-node-label"}).text(g(e)).appendTo(o),t}function v(t){s.empty();var e=/^subflow(:(.+))?$/.exec(t);if(e&&e[2])var e=RED.nodes.subflow(e[2]),o=RED.utils.renderMarkdown(e.info||"")||'<span class="red-ui-help-info-none">'+RED._("sidebar.info.none")+"</span>",n=e.name||t;else{o=RED.nodes.getNodeHelp(t)||'<span class="red-ui-help-info-none">'+RED._("sidebar.info.none")+"</span>";e=RED.nodes.registry.getNodeType(t);if("function"==typeof(n=e&&e.paletteLabel?e.paletteLabel:t))try{n=e.paletteLabel.call(e)}catch(e){n=t}}w(n,o),.7<r.ratio()&&r.ratio(.7),d.treeList("show","node-type:"+t),d.treeList("select","node-type:"+t,!1)}function b(e,t){!1!==t&&RED.sidebar.show("help"),e&&v(e),c()}function y(e){var t;e||(t=RED.view.selection()).nodes&&0<t.nodes.length&&(e=t.nodes.find(e=>"group"!==e.type&&"junction"!==e.type)),e&&b(e.type,!0)}function w(e,t){s.empty(),e&&$("<h1>",{class:"red-ui-help-title"}).text(e).appendTo(s);e=$('<div class="red-ui-help"><span class="red-ui-text-bidi-aware" dir="'+RED.text.bidi.resolveBaseTextDir(t)+'">'+t+"</span></div>"),$(e).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")});t=e.appendTo(s);t.find(".red-ui-text-bidi-aware").contents().filter(function(){return 3===this.nodeType&&""!==this.textContent.trim()}).wrap("<span></span>");t.find("H3").wrapInner('<a class="red-ui-help-info-header expanded" href="#"></a>').find("a").prepend('<i class="fa fa-angle-right">').on("click",function(e){e.preventDefault();for(var t=$(this).hasClass("expanded"),o=$(this).parent().next();1===o.length&&"H3"!==o[0].nodeName;)o.toggle(!t),o=o.next();$(this).toggleClass("expanded",!t)}),s.parent().scrollTop(0),RED.editor.mermaid.render()}function E(a){$.get("red/about",function(i){i=RED.utils.sanitize(i),RED.tourGuide.load("./tours/welcome.js",function(e,t){var o,n='<div><img width="50px" src="red/images/node-red-icon.svg" /></div>',t='<div style="text-align:center;">'+(n=t&&(o=RED.settings.version.split("."),(t=t.version.split("."))[0]===o[0])&&t[1]===o[1]?'<div><button type="button" onclick="RED.actions.invoke(\'core:show-welcome-tour\')" class="red-ui-button">'+RED._("tourGuide.takeATour")+"</button></div>":n)+"</div>";a(t+RED.utils.renderMarkdown(i))})})}return RED.events.on("view:selection-changed",function(e){!(e=void 0===e?RED.view.selection():e).nodes||1!=e.nodes.length||"subflow"===(e=e.nodes[0]).type&&e.direction||"group"!==e.type&&"junction"!==e.type&&v(e.type)}),RED.actions.add("core:show-about",function(){d.treeList("show","changelog"),d.treeList("select","changelog"),b()}),RED.actions.add("core:show-welcome-tour",function(o,n){n=n||function(){},RED.tourGuide.load("./tours/welcome.js",function(e,t){if(e)console.warn("Failed to load welcome tour",e),n();else{e=RED.settings.version.split("."),t=t.version.split(".");if(t[0]!==e[0]||t[1]!==e[1])n();else{if(o){if(o===RED.settings.version)return void n();t=o.split(".");if(e[0]<t[0]||e[0]===t[0]&&e[1]<t[1])return void n();if(e[0]===t[0]&&e[1]===t[1]){if(3===t.length&&3===e.length)return void n();if(4===e.length&&(3===t.length||e[3]<t[3]))return void n()}}RED.tourGuide.run("./tours/welcome.js",function(e){RED.settings.set("editor.tours.welcome",RED.settings.version),n()})}}})}),{init:function(){(i=document.createElement("div")).className="red-ui-sidebar-info",a=$("<div>",{class:"red-ui-sidebar-header red-ui-info-toolbar"}).appendTo(i),$('<span class="button-group"><a id="red-ui-sidebar-help-show-toc" class="red-ui-button red-ui-button-small selected" href="#"><i class="fa fa-list-ul"></i></a></span>').appendTo(a);var o,e=a.find("#red-ui-sidebar-help-show-toc"),t=(RED.popover.tooltip(e,function(){return $(e).hasClass("selected")?RED._("sidebar.help.hideTopics"):RED._("sidebar.help.showTopics")}),e.on("click",function(e){e.preventDefault(),($(this).hasClass("selected")?f:h)()}),$("<div>",{class:"red-ui-sidebar-help-stack"}).appendTo(i)),n=(l=$("<div>",{class:"red-ui-sidebar-help-toc"}).appendTo(t),$("<div>").css({"overflow-y":"auto"}).appendTo(t));(r=RED.panels.create({container:t})).ratio(.3),helpSearch=$('<input type="text" data-i18n="[placeholder]sidebar.help.search">').appendTo(a).searchBox({style:"compact",delay:100,change:function(){const t=$(this).val().toLowerCase();var e;t?(h(),d.treeList("filter",function(e){return 0===e.depth||e.nodeType&&-1<e.nodeType.toLowerCase().indexOf(t)||e.subflowLabel&&-1<e.subflowLabel.toLowerCase().indexOf(t)||e.palleteLabel&&-1<e.palleteLabel.toLowerCase().indexOf(t)},!0)):(d.treeList("filter",null),(e=d.treeList("selected")).id&&d.treeList("show",e.id))}}),s=$("<div>",{class:"red-ui-help"}).css({padding:"6px"}).appendTo(n),$('<span class="red-ui-help-info-none">'+RED._("sidebar.help.noHelp")+"</span>").appendTo(s),(d=$("<div>").css({width:"100%"}).appendTo(l).treeList({data:[]})).on("treelistselect",function(e,t){(o=t).tour?RED.tourGuide.run(t.tour):t.nodeType?v(t.nodeType):t.content&&(s.empty(),"string"==typeof t.content?w(t.label,t.content):"function"==typeof t.content&&(0===t.content.length?w(t.label,t.content()):(w(t.label,'<div class="red-ui-component-spinner red-ui-component-spinner-contain"><img src="red/images/spin.svg" /></div>'),t.content(function(e){o===t&&(s.empty(),w(t.label,e))}))))}),RED.sidebar.addTab({id:"help",label:RED._("sidebar.help.label"),name:RED._("sidebar.help.name"),iconClass:"fa fa-book",action:"core:show-help-tab",content:i,pinned:!0,enableOnEdit:!0,onchange:function(){c()}}),$(window).on("resize",c),$(window).on("focus",c),RED.events.on("registry:node-type-added",u),RED.events.on("registry:node-type-removed",u),RED.events.on("subflows:change",p),RED.actions.add("core:show-help-tab",b),RED.actions.add("core:show-node-help",y)},show:b,set:function(e,t){$(s).empty(),w(t,e),f(),b()}}}(),RED.sidebar.config=function(){let r,d;var l=document.createElement("div"),e=(l.className="red-ui-sidebar-node-config",l.id="red-ui-sidebar-node-config",l.tabIndex=0,$('<div class="red-ui-sidebar-header"><span class="button-group"><a class="red-ui-sidebar-header-button-toggle selected" id="red-ui-sidebar-config-filter-all" href="#"><span data-i18n="sidebar.config.filterAll"></span></a><a class="red-ui-sidebar-header-button-toggle" id="red-ui-sidebar-config-filter-unused" href="#"><span data-i18n="sidebar.config.filterUnused"></span></a> </span></div>').appendTo(l),$('<div><a class="red-ui-footer-button" id="red-ui-sidebar-config-collapse-all" href="#"><i class="fa fa-angle-double-up"></i></a> <a class="red-ui-footer-button" id="red-ui-sidebar-config-expand-all" href="#"><i class="fa fa-angle-double-down"></i></a></div>')),i=$("<div>").appendTo(l),a=$("<div>").appendTo(l),s=$("<div>").appendTo(l),n=!1,c={};function u(t,o,n,i){if(t=t.replace(/\./i,"-"),c[t])void 0!==i&&c[t].lockIcon&&c[t].lockIcon.toggle(!!i),c[t].label!==n&&(c[t].list.parent().find(".red-ui-palette-node-config-label").text(n),c[t].label=n);else{var o=$('<div class="red-ui-palette-category red-ui-sidebar-config-category" id="red-ui-sidebar-config-category-'+t+'"></div>').appendTo(o),a=$('<div class="red-ui-sidebar-config-tray-header red-ui-palette-header"><i class="fa fa-angle-down expanded"></i></div>').appendTo(o);let e;(n?((e=$('<span style="margin-right: 5px"><i class="fa fa-lock"/></span>').appendTo(a)).toggle(!!i),$('<span class="red-ui-palette-node-config-label"/>').text(n)):$('<span class="red-ui-palette-node-config-label" data-i18n="sidebar.config.'+t+'">')).appendTo(a),$('<span class="red-ui-sidebar-node-config-filter-info"></span>').appendTo(a),(category=$('<ul class="red-ui-palette-content red-ui-sidebar-node-config-list"></ul>').appendTo(o)).on("click",function(e){$(l).find(".red-ui-palette-node").removeClass("selected")}),o.i18n();var s=a.find("i"),r={label:n,lockIcon:e,list:category,size:function(){return r.list.find("li:not(.red-ui-palette-node-config-none)").length},open:function(e){s.hasClass("expanded")||(s.addClass("expanded"),e?r.list.show():r.list.slideDown())},close:function(e){s.hasClass("expanded")&&(s.removeClass("expanded"),e?r.list.hide():r.list.slideUp())},isOpen:function(){return s.hasClass("expanded")}};a.on("click",function(e){r.isOpen()?r.close():r.open()}),c[t]=r}return c[t]}function p(e,t){var o,a,e=u(e.replace(/\./i,"-")),s=e.list;t.sort(function(e,t){return e.type<t.type?-1:e.type>t.type?1:0}),n&&(o=t.length,0<(o-=(t=t.filter(function(e){return!1!==e._def.hasUsers&&0===e.users.length})).length))?s.parent().find(".red-ui-sidebar-node-config-filter-info").text(RED._("sidebar.config.filtered",{count:o})).show():s.parent().find(".red-ui-sidebar-node-config-filter-info").hide(),s.empty(),0===t.length?($('<li class="red-ui-palette-node-config-none" data-i18n="sidebar.config.none">NONE</li>').i18n().appendTo(s),e.close(!0)):(a="",t.forEach(function(t){var e=RED.utils.getNodeLabel(t,t.id),o=(t.type!=a&&($('<li class="red-ui-palette-node-config-type">'+t.type+"</li>").appendTo(s),a=t.type),t.changed&&(e+="!!"),$('<li class="red-ui-palette-node_id_'+t.id.replace(/\./g,"-")+'"></li>').appendTo(s)),n=$('<div class="red-ui-palette-node-config red-ui-palette-node"></div>').appendTo(o),o=(o.data("node",t.id),n.data("node",t.id),$('<div class="red-ui-palette-label"></div>').text(e).appendTo(n)),i=(t.d&&(n.addClass("red-ui-palette-node-config-disabled"),$('<i class="fa fa-ban"></i>').prependTo(o)),!1!==t._def.hasUsers&&(e=$("<div/>",{class:"red-ui-palette-icon-container red-ui-palette-icon-container-right"}).appendTo(n),0===t.users.length?e.text(0):$('<a href="#"/>').on("click",function(e){e.stopPropagation(),e.preventDefault(),RED.search.show(t.id)}).text(t.users.length).appendTo(e),RED.popover.tooltip(e,RED._("editor.nodesUse",{count:t.users.length})),0===t.users.length)&&n.addClass("red-ui-palette-node-config-unused"),t.valid||(n.addClass("red-ui-palette-node-config-invalid"),o=$('<svg class="red-ui-palette-node-annotations red-ui-flow-node-error" width="10" height="10"></svg>').appendTo(n),(e=document.createElementNS("http://www.w3.org/2000/svg","path")).setAttribute("d","M 0,9 l 10,0 -5,-8 z"),o.append($(e)),RED.popover.tooltip(o,function(){if(t.validationErrors&&0<t.validationErrors.length)return RED._("editor.errors.invalidProperties")+"<br> - "+t.validationErrors.join("<br> - ")})),n.on("click",function(e){e.stopPropagation(),RED.view.select(!1),e.metaKey?$(this).toggleClass("selected"):($(l).find(".red-ui-palette-node").removeClass("selected"),$(this).addClass("selected")),RED.sidebar.info.refresh(t)}),n.on("dblclick",function(e){e.stopPropagation(),RED.editor.editConfig("",t.type,t.id)}),t.users.map(function(e){return e.id}));n.on("mouseover",function(e){RED.nodes.eachNode(function(e){-1!=i.indexOf(e.id)&&(e.highlighted=!0,e.dirty=!0)}),RED.view.redraw()}),n.on("mouseout",function(e){RED.nodes.eachNode(function(e){e.highlighted&&(e.highlighted=!1,e.dirty=!0)}),RED.view.redraw()})}),e.open(!0))}function t(){var e,t={global:!0},o=(u("global",i),RED.nodes.eachWorkspace(function(e){t[e.id.replace(/\./g,"-")]=!0,u(e.id,a,e.label,e.locked)}),RED.nodes.eachSubflow(function(e){t[e.id.replace(/\./g,"-")]=!0,u(e.id,s,e.name)}),$(".red-ui-sidebar-config-category").each(function(){var e=$(this).attr("id").substring("red-ui-sidebar-config-category-".length);t[e]||($(this).remove(),delete c[e])}),[]),n={};for(e in RED.nodes.eachConfig(function(e){e.z?(n[e.z.replace(/\./g,"-")]=n[e.z.replace(/\./g,"-")]||[],n[e.z.replace(/\./g,"-")].push(e)):e.z||o.push(e)}),t)t.hasOwnProperty(e)&&p(e,n[e]||[]);p("global",o)}return{init:function(){RED.sidebar.addTab({id:"config",label:RED._("sidebar.config.label"),name:RED._("sidebar.config.name"),content:l,toolbar:e,iconClass:"fa fa-cog",action:"core:show-config-tab",onchange:function(){t()}}),RED.actions.add("core:show-config-tab",function(){RED.sidebar.show("config")}),RED.actions.add("core:select-all-config-nodes",function(){$(l).find(".red-ui-palette-node").addClass("selected")}),RED.actions.add("core:delete-config-selection",function(){var t=[];if($(l).find(".red-ui-palette-node.selected").each(function(){t.push($(this).parent().data("node"))}),0<t.length){var a={t:"delete",nodes:[],changes:{},dirty:RED.nodes.dirty()};for(let e=0;e<t.length;e++){var o=RED.nodes.node(t[e]);if(o.z){o=RED.nodes.workspace(o.z);if(o&&o.locked)return}}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())}a.nodes.push(t);for(var o=0;o<t.users.length;o++){var n,i=t.users[o];for(n in a.changes[i.id]={changed:i.changed,valid:i.valid},i._def.defaults)i._def.defaults.hasOwnProperty(n)&&i[n]==e&&(a.changes[i.id][n]=e,i[n]="",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(a)}}),RED.events.on("view:selection-changed",function(){$(l).find(".red-ui-palette-node").removeClass("selected")}),$("#red-ui-sidebar-config-collapse-all").on("click",function(e){for(var t in e.preventDefault(),c)c.hasOwnProperty(t)&&c[t].close()}),$("#red-ui-sidebar-config-expand-all").on("click",function(e){for(var t in e.preventDefault(),c)c.hasOwnProperty(t)&&0<c[t].size()&&c[t].open()}),$("#red-ui-sidebar-config-filter-all").on("click",function(e){e.preventDefault(),n&&($(this).addClass("selected"),$("#red-ui-sidebar-config-filter-unused").removeClass("selected"),n=!n,t())}),$("#red-ui-sidebar-config-filter-unused").on("click",function(e){e.preventDefault(),n||($(this).addClass("selected"),$("#red-ui-sidebar-config-filter-all").removeClass("selected"),n=!n,t())}),RED.popover.tooltip($("#red-ui-sidebar-config-filter-all"),RED._("sidebar.config.showAllConfigNodes")),RED.popover.tooltip($("#red-ui-sidebar-config-filter-unused"),RED._("sidebar.config.showAllUnusedConfigNodes")),RED.popover.tooltip($("#red-ui-sidebar-config-collapse-all"),RED._("palette.actions.collapse-all")),RED.popover.tooltip($("#red-ui-sidebar-config-expand-all"),RED._("palette.actions.expand-all"))},show:function(s){"boolean"==typeof s&&(s?$("#red-ui-sidebar-config-filter-unused"):$("#red-ui-sidebar-config-filter-all")).trigger("click"),t(),"string"==typeof s&&($("#red-ui-sidebar-config-filter-all").trigger("click"),s=s.replace(/\./g,"-"),setTimeout(function(){var t,e=$(".red-ui-palette-node_id_"+s),o=e.position().top,n=e.height(),i=$(".red-ui-sidebar-node-config"),a=i.height();a<o+n?i.animate({scrollTop:"-="+(a-(o+n)-30)},150):o<0&&i.animate({scrollTop:"+="+(o-10)},150),t=e,r&&r.length&&(clearInterval(d),d=null,r.children("div").removeClass("highlighted"),r=null),t&&t.children("div").length&&(d=setInterval(function(e){e>=Date.now()?(e=t.children("div").hasClass("highlighted"),t.children("div").toggleClass("highlighted",!e)):(clearInterval(d),d=null,r=null,t.children("div").removeClass("highlighted"))},100,Date.now()+2200),(r=t).children("div").addClass("highlighted"))},100)),RED.sidebar.show("config")},refresh:t}}(),RED.sidebar.context=function(){var i,a,s,r,d,l,c,u,p;const v={};function f(e,t){u=e,t||r.prop("checked")?e?g(d,"context/node/"+e.id,e.id):g(d):($(d.table).empty(),(e?$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.refresh"></td></tr>'):$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.none"></td></tr>')).appendTo(d.table).i18n(),d.timestamp.html("&nbsp;"))}function h(e,t){p=e,t||s.prop("checked")?e?g(l,"context/flow/"+e.id,e.id):g(l):($(l.table).empty(),$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.refresh"></td></tr>').appendTo(l.table).i18n(),l.timestamp.html("&nbsp;"))}function g(e,t,o){var s,f,h,g,m,n=e.table;o?(s=e,f=t,h=o,g=RED.settings.context.stores,m=s.table,$.getJSON(f,function(e){$(m).empty();var t,o={};for(t in e)if(e.hasOwnProperty(t))for(var n in e[t])e[t].hasOwnProperty(n)&&(o.hasOwnProperty(n)||(o[n]=[]),e[t][n].store=t,o[n].push(e[t][n]));for(var i=Object.keys(o),a=(i.sort(),i.length),p=0;p<a;p++)o[i[p]].forEach(function(a){const s=i[p];let r=a.msg,d=a.format;const l=$('<span class="button-group"></span>'),c=(v[h+"."+s]=v[h+"."+s]||new Set,{typeHint:d,sourceId:h+"."+s,tools:l,path:s,rootPath:s,exposeApi:!0,ontoggle:function(e,t){if(e=e.substring(s.length+1),t)v[h+"."+s].add(e);else{for(var o of v[h+"."+s])(o.startsWith(e+".")||o.startsWith(e+"["))&&v[h+"."+s].delete(o);v[h+"."+s].delete(e)}},expandPaths:[...v[h+"."+s]].sort(),expandLeafNodes:!0}),u=$('<tr class="red-ui-help-info-row"><td class="red-ui-sidebar-context-property"></td><td></td></tr>').appendTo(m);$(u.children()[0]).text(s);const t=encodeURIComponent(s);var e=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-refresh"></i></button>').appendTo(l).on("click",function(e){e.preventDefault(),e.stopPropagation(),$.getJSON(f+"/"+t+"?store="+a.store,function(e){e.msg===r&&e.format===d||(r=e.msg,d=e.format,l.detach(),$(u.children()[1]).empty(),RED.utils.createObjectElement(RED.utils.decodeObject(r,d),{...c,typeHint:e.format}).appendTo(u.children()[1]))})}),e=(RED.popover.tooltip(e,RED._("sidebar.context.refrsh")),$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-trash"></i></button>').appendTo(l).on("click",function(e){e.preventDefault(),e.stopPropagation();var i=RED.popover.create({trigger:"modal",target:u,direction:"left",content:function(){var e=$("<div>"),t=($('<p data-i18n="sidebar.context.deleteConfirm"></p>').appendTo(e),$("<p>").appendTo(e)),o=$('<span class="button-group"></span>').appendTo(t);return $('<button class="red-ui-button" data-i18n="common.label.cancel"></button>').appendTo(o).on("click",function(e){e.preventDefault(),i.close()}),o=$('<span class="button-group"></span>').appendTo(t),$('<button class="red-ui-button primary" data-i18n="common.label.delete"></button>').appendTo(o).on("click",function(e){e.preventDefault(),i.close();const n=encodeURIComponent(s);$.ajax({url:f+"/"+n+"?store="+a.store,type:"DELETE"}).done(function(e,t,o){$.getJSON(f+"/"+n+"?store="+a.store,function(e){"undefined"===e.format?(u.remove(),0===m.children().length&&$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.empty"></td></tr>').appendTo(m).i18n(),delete v[h+"."+s]):(r=e.msg,d=e.format,l.detach(),$(u.children()[1]).empty(),RED.utils.createObjectElement(RED.utils.decodeObject(r,d),{...c,typeHint:e.format}).appendTo(u.children()[1]))})}).fail(function(e,t,o){})}),e.i18n()}});i.open()}));RED.popover.tooltip(e,RED._("sidebar.context.delete")),RED.utils.createObjectElement(RED.utils.decodeObject(r,d),c).appendTo(u.children()[1]),1<g.length&&$("<span>",{class:"red-ui-sidebar-context-property-storename"}).text(a.store).appendTo($(u.children()[0]))});0===a&&$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.empty"></td></tr>').appendTo(m).i18n(),$(s.timestamp).text((new Date).toLocaleString())})):($(n).empty(),$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.none"></td></tr>').appendTo(n).i18n())}function m(){RED.sidebar.show("context")}return{init:function(){(i=$("<div>").css({position:"relative",height:"100%"})).className="red-ui-sidebar-context";var e=$("<div></div>"),t=$("<div>",{class:"red-ui-sidebar-context-stack"}).appendTo(i),t=(a=RED.stack.create({container:t}),(d=a.add({title:RED._("sidebar.context.node"),collapsible:!0})).expand(),d.content.css({height:"100%"}),d.timestamp=$('<div class="red-ui-sidebar-context-updated">&nbsp;</div>').appendTo(d.content),$('<table class="red-ui-info-table"></table>').appendTo(d.content)),o=(d.table=$("<tbody>").appendTo(t),$('<div style="float: right"></div>').appendTo(d.header)),n=RED.settings.get("editor.context.nodeRefresh",!1),n=(r=$('<input type="checkbox">').prop("checked",n).appendTo(o).toggleButton({baseClass:"red-ui-sidebar-header-button red-ui-button-small",enabledLabel:"",disabledLabel:""}).on("change",function(){var e=$(this).prop("checked");RED.settings.set("editor.context.flowRefresh",e)}),RED.popover.tooltip(r.next(),RED._("sidebar.context.autoRefresh")),$('<button class="red-ui-button red-ui-button-small" style="margin-left: 5px"><i class="fa fa-refresh"></i></button>').appendTo(o).on("click",function(e){e.stopPropagation(),e.preventDefault(),f(u,!0)})),t=(RED.popover.tooltip(n,RED._("sidebar.context.refrsh")),(l=a.add({title:RED._("sidebar.context.flow"),collapsible:!0})).expand(),l.content.css({height:"100%"}),l.timestamp=$('<div class="red-ui-sidebar-context-updated">&nbsp;</div>').appendTo(l.content),$('<table class="red-ui-info-table"></table>').appendTo(l.content)),n=(l.table=$("<tbody>").appendTo(t),o=$('<div style="float: right"></div>').appendTo(l.header),RED.settings.get("editor.context.flowRefresh",!1)),n=(s=$('<input type="checkbox">').prop("checked",n).appendTo(o).toggleButton({baseClass:"red-ui-sidebar-header-button red-ui-button-small",enabledLabel:"",disabledLabel:""}).on("change",function(){var e=$(this).prop("checked");RED.settings.set("editor.context.flowRefresh",e)}),RED.popover.tooltip(s.next(),RED._("sidebar.context.autoRefresh")),$('<button class="red-ui-button red-ui-button-small" style="margin-left: 5px"><i class="fa fa-refresh"></i></button>').appendTo(o).on("click",function(e){e.stopPropagation(),e.preventDefault(),h(p,!0)})),t=(RED.popover.tooltip(n,RED._("sidebar.context.refrsh")),(c=a.add({title:RED._("sidebar.context.global"),collapsible:!0})).expand(),c.content.css({height:"100%"}),c.timestamp=$('<div class="red-ui-sidebar-context-updated">&nbsp;</div>').appendTo(c.content),$('<table class="red-ui-info-table"></table>').appendTo(c.content));c.table=$("<tbody>").appendTo(t),o=$('<div style="float: right"></div>').appendTo(c.header),$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-refresh"></i></button>').appendTo(o).on("click",function(e){e.stopPropagation(),e.preventDefault(),g(c,"context/global","global")}),RED.popover.tooltip(o,RED._("sidebar.context.refrsh")),RED.actions.add("core:show-context-tab",m),RED.sidebar.addTab({id:"context",label:RED._("sidebar.context.label"),name:RED._("sidebar.context.name"),iconClass:"fa fa-database",content:i,toolbar:e,enableOnEdit:!0,action:"core:show-context-tab"}),RED.events.on("view:selection-changed",function(e){f(e.nodes&&1===e.nodes.length&&e.nodes[0])}),RED.events.on("workspace:change",function(e){h(RED.nodes.workspace(e.workspace))}),$(c.table).empty(),$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.refresh"></td></tr>').appendTo(c.table).i18n(),c.timestamp.html("&nbsp;")}}}(),RED.palette.editor=function(){var l;let c=[];const u=[];let p,f,y,h,a=[],g=[],m=[],w={};var s,E={},D={},t={},v="",n=/^(\d+)(\.(\d+))?(\.(\d+))?(-([0-9A-Za-z-]+))?(\.([0-9A-Za-z-.]+))?$/,i=/^\d+$/;function o(e){this.number=0,this.text=e,i.test(e)?(this.number=parseInt(e),this.type="N"):this.type=null==e||e.length<1?"E":"T"}function R(e){e=e.match(n);this.parts=[new o(e[1]),new o(e[3]),new o(e[5]),new o(e[7]),new o(e[9])]}function r(e,t){e=(e=Date.now()-e)<300?300:0;setTimeout(function(){t()},e)}function b(e,t,n,i){n.show();var a=Date.now();$.ajax({url:"nodes/"+e,type:"PUT",data:JSON.stringify({enabled:t}),contentType:"application/json; charset=utf-8"}).done(function(e,t,o){r(a,function(){n.hide(),i()})}).fail(function(e,t,o){r(a,function(){n.hide(),i(e)})})}function x(e,t,o,n){e={module:e};t&&(e.version=t),o&&(e.url=o),$.ajax({url:"nodes",type:"POST",data:JSON.stringify(e),contentType:"application/json; charset=utf-8"}).done(function(e,t,o){n()}).fail(function(e,t,o){n(e,t,o)})}function _(e){t.hasOwnProperty(e)||(t[e]=setTimeout(function(){delete t[e],T(e)},100))}function k(e){var t=/^rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)[,)]/.exec(e);if(t){var o=parseInt(t[1]),n=parseInt(t[2]),t=parseInt(t[3]);if(160<(299*o+587*n+114*t)/1e3)return"rgb("+Math.floor(.8*o)+","+Math.floor(.8*n)+","+Math.floor(.8*t)+")"}return e}function T(e){if(D.hasOwnProperty(e)){var t=D[e].info,o=D[e].elements;if(o)if(t.plugin){o.enableButton.hide(),o.removeButton.show();let e=0;for(var n in t.sets)t.sets.hasOwnProperty(n)&&(n=t.sets[n]).plugins&&(e+=n.plugins.length);o.setCount.text(RED._("palette.editor.pluginCount",{count:e,label:e}))}else{var i,a=0,s=0,r=0;for(i in o.errorList.empty(),D[e].totalUseCount=0,D[e].setUseCount={},t.sets)if(t.sets.hasOwnProperty(i)){var d,l=0,c=t.sets[i],u=o.sets[i];c.err&&(r++,d=c.err,c.err.message?d=c.err.message:c.err.code&&(d=c.err.code),$("<li>").text(d).appendTo(o.errorList)),c.enabled&&(a+=c.types.length),s+=c.types.length;for(var p=0;p<t.sets[i].types.length;p++){var f,h=t.sets[i].types[p];l+=E[h]||0,u&&c.enabled&&(f=RED.nodes.getType(h))&&f.color&&(u.swatches[h].css({background:RED.utils.getNodeColor(h,f)}),u.swatches[h].css({border:"1px solid "+k(u.swatches[h].css("backgroundColor"))}))}D[e].setUseCount[i]=l,D[e].totalUseCount+=l,u&&(0<l?(u.enableButton.text(RED._("palette.editor.inuse")),u.enableButton.addClass("disabled")):(u.enableButton.removeClass("disabled"),c.enabled?u.enableButton.text(RED._("palette.editor.disable")):u.enableButton.text(RED._("palette.editor.enable"))),u.setRow.toggleClass("red-ui-palette-module-set-disabled",!c.enabled))}0===r?o.errorRow.hide():o.errorRow.show(),o.setCount.text(RED._("palette.editor.nodeCount",{count:s,label:a===s?s:a+" / "+s})),0<D[e].totalUseCount?(o.enableButton.text(RED._("palette.editor.inuse")),o.enableButton.addClass("disabled"),o.removeButton.hide()):(o.enableButton.removeClass("disabled"),t.local&&o.removeButton.css("display","inline-block"),0===a?o.enableButton.text(RED._("palette.editor.enableall")):o.enableButton.text(RED._("palette.editor.disableall")),o.container.toggleClass("disabled",0===a))}t.pending_version?(o.versionSpan.html(t.version+' <i class="fa fa-long-arrow-right"></i> '+t.pending_version).appendTo(o.metaRow),o.updateButton.text(RED._("palette.editor.updated")).addClass("disabled").css("display","inline-block")):w.hasOwnProperty(e)&&V&&(v=w[e].version,b=t.version,v=new R(v),b=new R(b),0<v.compare(b))&&RED.utils.checkModuleAllowed(e,null,M,z)?(o.updateButton.show(),o.updateButton.text(RED._("palette.editor.update",{version:w[e].version}))):o.updateButton.hide()}else{D[e]={info:RED.nodes.registry.getModule(e)};var g,m=[e];for(g in D[e].info.sets)D[e].info.sets.hasOwnProperty(g)&&(m.push(g),m=m.concat(D[e].info.sets[g].types));D[e].index=m.join(",").toLowerCase(),y.editableList("addItem",D[e])}var v,b}o.prototype.compare=function(e){switch(this.type+e.type){case"EE":return 0;case"NT":case"TE":case"EN":return-1;case"NN":return this.number-e.number;case"TT":return this.text.localeCompare(e.text);case"ET":case"TN":case"NE":return 1}};var d,C=[],j=!(R.prototype.compare=function(e){for(var t=0,o=0,n=this.parts.length;0==t&&o<n;o++)t=this.parts[o].compare(e.parts[o]);return t}),L=G;function S(e,t,o,n){var i=t.url;C.push(e||n),e?j=!0:n.modules&&(n.modules=n.modules.filter(function(e){return!!RED.utils.checkModuleAllowed(e.id,e.version,P,A)&&((w[e.id]=e).index=[e.id],e.keywords&&(e.index=e.index.concat(e.keywords)),e.types&&(e.index=e.index.concat(e.types)),e.updated_at?e.timestamp=new Date(e.updated_at).getTime():e.timestamp=0,e.index=e.index.join(",").toLowerCase(),e.catalog=t,e.catalogIndex=o,!0)}),g=g.concat(n.modules)),1<s&&$(".red-ui-palette-module-shade-status").html(RED._("palette.editor.loading")+"<br>"+C.length+"/"+s),C.length===s&&(j&&RED.notify(RED._("palette.editor.errors.catalogLoadFailed",{url:i}),"error",!1,8e3),e=250-(Date.now()-d),setTimeout(function(){$("#red-ui-palette-module-install-shade").hide()},Math.max(e,0)))}function O(){if(0===g.length){a=[],g=[],w={},h.editableList("empty"),$(".red-ui-palette-module-shade-status").text(RED._("palette.editor.loading")),j=!(C=[]),s=c.length,1<c.length&&$(".red-ui-palette-module-shade-status").html(RED._("palette.editor.loading")+"<br>0/"+c.length),$("#red-ui-palette-module-install-shade").show(),d=Date.now();var e=0;for(let n=u.length=0;n<c.length;n++){const i=c[n];$.getJSON(i,{_:(new Date).getTime()},function(e){for(var t in u.push({index:n,url:i,name:e.name,updated_at:e.updated_at,modules_count:(e.modules||[]).length}),S(null,{url:i,name:e.name},n,e),D)D.hasOwnProperty(t)&&T(t)}).fail(function(e,t,o){console.warn("Error loading catalog",i,":",o),S(e,i,n)}).always(function(){++e===s&&(u.sort((e,t)=>e.index-t.index),function e(t,o=3){const n=$("#red-catalogue-filter-select");if(0===n.length)return 0<o?void setTimeout(()=>{e(t,o-1)},100):void 0;n.off("change");n.attr("disabled","disabled");n.empty();n.append($("<option>",{value:"loading",text:RED._("palette.editor.loading"),disabled:!0,selected:!0}));a=g.slice();n.empty();for(let e=0;e<t.length;e++){const i=t[e];n.append(`<option value="${i.name}">${i.name}</option>`)}n.val(n.find("option:first").val());1<t.length&&(n.prepend(`<option value="all">${RED._("palette.editor.allCatalogs")}</option>`),n.val("all"),n.removeAttr("disabled"));B(n.val());f.searchBox("change");n.on("change",function(){const e=$(this).val();B(e),f.searchBox("change")})}(u))})}}}function B(t){g=u.length<=1||"all"===t?a.slice():a.filter(function(e){return e.catalog.name===t}),N(),f.searchBox("count",m.length+" / "+g.length)}function N(){if(h.editableList("empty"),""===f.searchBox("value").trim()&&20<g.length)h.editableList("addItem",{count:g.length});else{m.sort(L);for(var e=0;e<Math.min(10,m.length);e++)h.editableList("addItem",m[e]);0===m.length&&h.editableList("addItem",{}),10<m.length&&h.editableList("addItem",{start:10,more:m.length-10})}}function G(e,t){var o=f.searchBox("value").trim();return""===o||0==(o=e.info.index.indexOf(o)-t.info.index.indexOf(o))?F(e,t):o}function F(e,t){return e.info.id.localeCompare(t.info.id)}function U(e,t){return-1*(e.info.timestamp-t.info.timestamp)}var I,P=["*"],A=[],V=!0,M=["*"],z=[];function J(){return O(),l.activateTab("nodes"),I}function q(a,t,s){var e,o;!1===RED.settings.get("externalModules.palette.allowInstall",!0)?s(new Error("Palette not editable")):(e=[{text:RED._("common.label.cancel"),click:function(){o.close()}}],a.url&&e.push({text:RED._("palette.editor.confirm.button.review"),class:"primary red-ui-palette-module-install-confirm-button-install",click:function(){var e=a.url||"";window.open(e)}}),e.push({text:RED._("palette.editor.confirm.button.install"),class:"primary red-ui-palette-module-install-confirm-button-install",click:function(){var i=RED.utils.addSpinnerOverlay(t,!0),e=$('<div style="position: relative;bottom: calc(50% + 17px); padding-right: 10px;text-align: right;"></div>').appendTo(i);$('<button class="red-ui-button"></button>').text(RED._("eventLog.view")).appendTo(e).on("click",function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.eventLog.startEvent(RED._("palette.editor.confirm.button.install")+" : "+a.id+" "+a.version),x(a.id,a.version,a.pkg_url,function(e,t,o){var n;i.remove(),o&&504===e.status?n=RED.notify(RED._("palette.editor.errors.installTimeout"),{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){n.close()}},{text:RED._("eventLog.view"),click:function(){n.close(),RED.actions.invoke("core:show-event-log")}}]}):e&&e.responseJSON&&(n=RED.notify(RED._("palette.editor.errors.installFailed",{module:a.id,message:e.responseJSON.message}),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){n.close()}},{text:RED._("eventLog.view"),click:function(){n.close(),RED.actions.invoke("core:show-event-log")}}]})),s(e)}),o.close()}}),o=RED.notify(RED._("palette.editor.confirm.install.body",{module:a.id}),{modal:!0,fixed:!0,buttons:e}))}return{init:function(){var a,s,t,o,e,n,i,r,d;c=RED.settings.theme("palette.catalogues")||["https://catalogue.nodered.org/catalogue.json"],!1!==RED.settings.get("externalModules.palette.allowInstall",!0)&&(r=RED.settings.get("externalModules.palette.allowList"),e=RED.settings.get("externalModules.palette.denyList"),(r||e)&&(P=r,A=e),P=RED.utils.parseModuleList(P),A=RED.utils.parseModuleList(A),r=RED.settings.get("externalModules.palette.allowUpdateList"),e=RED.settings.get("externalModules.palette.denyUpdateList"),(r||e)&&(M=r,z=e),M=RED.utils.parseModuleList(M),z=RED.utils.parseModuleList(z),V=RED.settings.get("externalModules.palette.allowUpdate",!0),I=$('<div id="red-ui-settings-tab-palette"></div>'),o=$('<div id="red-ui-palette-editor"><ul id="red-ui-palette-editor-tabs"></ul></div>').appendTo(I),l=RED.tabs.create({element:I.find("#red-ui-palette-editor-tabs"),onchange:function(e){o.find(".red-ui-palette-editor-tab").hide(),e.content.show(),p&&p.searchBox("value",""),f&&f.searchBox("value",""),"install"===e.id?f&&f.trigger("focus"):p&&p.trigger("focus")},minimumActiveTabWidth:110}),r=o,r=$("<div>",{class:"red-ui-palette-editor-tab"}).appendTo(r),l.addTab({id:"nodes",label:RED._("palette.editor.tab-nodes"),content:r}),e=$("<div>",{class:"red-ui-palette-search"}).appendTo(r),p=$('<input type="text" data-i18n="[placeholder]palette.filter"></input>').appendTo(e).searchBox({delay:200,change:function(){var e,t,o;e=$(this).val(),v=e.toLowerCase(),t=y.editableList("filter"),o=y.editableList("length"),""===e?p.searchBox("count"):p.searchBox("count",t+" / "+o)}}),y=$("<ol>",{id:"red-ui-palette-module-list"}).appendTo(r).editableList({class:"scrollable",addButton:!1,scrollOnAdd:!1,sort:function(e,t){return e.info.name.localeCompare(t.info.name)},filter:function(e){return""===v||-1<e.index.indexOf(v)},addItem:function(o,e,s){var d=s.info;if(d){var t=$("<div>",{class:"red-ui-palette-module-header"}).appendTo(o),n=$('<div class="red-ui-palette-module-meta red-ui-palette-module-name"><i class="fa fa-cube"></i></div>').appendTo(t),n=($("<span>").text(d.name).appendTo(n),$('<div class="red-ui-palette-module-meta red-ui-palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(t)),n=$("<span>").text(d.version).appendTo(n),i=$('<div class="red-ui-palette-module-meta red-ui-palette-module-errors"><i class="fa fa-warning"></i></div>').hide().appendTo(t),a=$('<ul class="red-ui-palette-module-error-list"></ul>').appendTo(i),t=$("<div>",{class:"red-ui-palette-module-meta"}).appendTo(t),r=$('<a href="#" class="red-ui-button red-ui-button-small red-ui-palette-module-set-button"><i class="fa fa-angle-right red-ui-palette-module-node-chevron"></i> </a>').appendTo(t),l=$("<span>").appendTo(r),t=$("<div>",{class:"red-ui-palette-module-button-group"}).appendTo(t),c=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.update")).appendTo(t),u=(c.attr("id","up_"+Math.floor(1e9*Math.random())),c.on("click",function(e){var n,t,i,a,s,r;e.preventDefault(),$(this).hasClass("disabled")||(n=d,t=w[d.name].version,i=w[d.name].pkg_url,a=o,!(s=function(e){})===RED.settings.get("externalModules.palette.allowInstall",!0)?s(new Error("Palette not editable")):r=RED.notify(RED._("palette.editor.confirm.update.body",{module:n.name}),{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){r.close()}},{text:RED._("palette.editor.confirm.button.update"),class:"primary red-ui-palette-module-install-confirm-button-update",click:function(){var o=RED.utils.addSpinnerOverlay(a,!0),e=$('<div style="position: relative;bottom: calc(50% + 17px); padding-right: 10px;text-align: right;"></div>').appendTo(o);$('<button class="red-ui-button"></button>').text(RED._("eventLog.view")).appendTo(e).on("click",function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.eventLog.startEvent(RED._("palette.editor.confirm.button.install")+" : "+n.name+" "+t),x(n.name,t,i,function(e){var t;o.remove(),e&&e.responseJSON&&(t=RED.notify(RED._("palette.editor.errors.updateFailed",{module:n.name,message:e.responseJSON.message}),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){t.close()}},{text:RED._("eventLog.view"),click:function(){t.close(),RED.actions.invoke("core:show-event-log")}}]})),s(e)}),r.close()}}]}))}),$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.remove")).appendTo(t)),t=(u.attr("id","up_"+Math.floor(1e9*Math.random())),u.on("click",function(e){var i,t,a;e.preventDefault(),i=d,t=o,!(e=function(e){})===RED.settings.get("externalModules.palette.allowInstall",!0)?e(new Error("Palette not editable")):a=RED.notify(RED._("palette.editor.confirm.remove.body",{module:i.name}),{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){a.close()}},{text:RED._("palette.editor.confirm.button.remove"),class:"primary red-ui-palette-module-install-confirm-button-remove",click:function(){var n,o=RED.utils.addSpinnerOverlay(t,!0),e=$('<div style="position: relative;bottom: calc(50% + 17px); padding-right: 10px;text-align: right;"></div>').appendTo(o);$('<button class="red-ui-button"></button>').text(RED._("eventLog.view")).appendTo(e).on("click",function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.eventLog.startEvent(RED._("palette.editor.confirm.button.remove")+" : "+i.name),e=i.name,n=function(e){var t;if(o.remove(),e)e.responseJSON&&(t=RED.notify(RED._("palette.editor.errors.removeFailed",{module:i.name,message:e.responseJSON.message}),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){t.close()}},{text:RED._("eventLog.view"),click:function(){t.close(),RED.actions.invoke("core:show-event-log")}}]}));else if(i.plugin){e=D[i.name];e&&(y.editableList("removeItem",e),delete D[i.name]);let n=!0;if(Object.keys(i.sets).forEach(e=>{var t=i.sets[e];for(let e=0;e<t.plugins?.length;e++){var o=RED.plugins.getPlugin(t.plugins[e].id);o&&o.onremove&&"function"==typeof o.onremove?o.onremove():o&&o.onadd&&"function"==typeof o.onadd&&(n=!1)}}),!n){let t=RED.notify(RED._("palette.editor.confirm.removePlugin.body",{module:i.name}),{modal:!0,fixed:!0,type:"warning",buttons:[{text:RED._("palette.editor.confirm.button.understood"),class:"primary",click:function(e){t.close()}}]})}}},$.ajax({url:"nodes/"+e,type:"DELETE"}).done(function(e,t,o){n()}).fail(function(e,t,o){n(e)}),a.close()}}]})}),d.local||u.hide(),$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.disableall")).appendTo(t)),p=$("<div>",{class:"red-ui-palette-module-content"}).appendTo(o),f=$('<div class="red-ui-palette-module-shade hide"><img src="red/images/spin.svg" class="red-ui-palette-spinner"/></div>').appendTo(o);s.elements={updateButton:c,removeButton:u,enableButton:t,errorRow:i,errorList:a,setCount:l,setButton:r,container:o,shade:f,versionSpan:n,sets:{}},r.on("click",function(e){e.preventDefault(),o.hasClass("expanded")?(o.removeClass("expanded"),p.slideUp(),setTimeout(()=>{p.empty()},200),s.elements.sets={}):(o.addClass("expanded"),h(),p.slideDown())});const h=function(){var e=Object.keys(d.sets);e.sort(function(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}),e.forEach(function(o){var n=d.sets[o],i=$("<div>",{class:"red-ui-palette-module-set"}).appendTo(p),e=$("<div>",{class:"red-ui-palette-module-set-button-group"}).appendTo(i),a={};let t;n.types&&(n.types.forEach(function(e){var t,o=$("<div>",{class:"red-ui-palette-module-type"}).appendTo(i);a[e]=$("<span>",{class:"red-ui-palette-module-type-swatch"}).appendTo(o),n.enabled&&(t=RED.nodes.getType(e))&&t.color&&(a[e].css({background:RED.utils.getNodeColor(e,t)}),a[e].css({border:"1px solid "+k(a[e].css("backgroundColor"))})),$("<span>",{class:"red-ui-palette-module-type-node"}).text(e).appendTo(o)}),(t=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').appendTo(e)).on("click",function(e){var t;e.preventDefault(),0===s.setUseCount[o]&&(e=RED.nodes.registry.getNodeSet(n.id),f.show(),t=!e.enabled,b(n.id,t,f,function(e){e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors."+(t?"enable":"disable")+"Failed",{module:id,message:e.responseJSON.message}))}))}),0<s.setUseCount[o]?(t.text(RED._("palette.editor.inuse")),t.addClass("disabled")):(t.removeClass("disabled"),n.enabled?t.text(RED._("palette.editor.disable")):t.text(RED._("palette.editor.enable"))),i.toggleClass("red-ui-palette-module-set-disabled",!n.enabled)),n.plugins&&n.plugins.forEach(function(e){var t=$("<div>",{class:"red-ui-palette-module-type"}).appendTo(i);$('<span><i class="fa fa-puzzle-piece" aria-hidden="true"></i> </span>',{class:"red-ui-palette-module-type-swatch"}).appendTo(t),$("<span>",{class:"red-ui-palette-module-type-node"}).text(e.id).appendTo(t)}),s.elements.sets[n.name]={setRow:i,enableButton:t,swatches:a}})};t.on("click",function(e){e.preventDefault(),0===s.totalUseCount&&b(d.name,o.hasClass("disabled"),f,function(e){e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors.installFailed",{module:id,message:e.responseJSON.message}))})}),_(d.name)}else $("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(o)}}),e=o,e=$("<div>",{class:"red-ui-palette-editor-tab",style:"display: none;"}).appendTo(e),l.addTab({id:"install",label:RED._("palette.editor.tab-install"),content:e}),r=$("<div>",{class:"red-ui-palette-editor-toolbar"}).appendTo(e),n=$("<div>",{class:"red-ui-palette-search"}).appendTo(e),f=$('<input type="text" data-i18n="[placeholder]palette.search"></input>').appendTo(n).searchBox({delay:300,change:function(){var t=$(this).val().trim().toLowerCase();0<t.length||g.length<20?(m=g.filter(function(e){return-1<e.index.indexOf(t)}).map(function(e){return{info:e}}),N(),f.searchBox("count",m.length+" / "+g.length)):(f.searchBox("count",g.length),h.editableList("empty"),h.editableList("addItem",{count:g.length}))}}),(n=$('<select id="red-catalogue-filter-select">').appendTo(r)).addClass("red-ui-palette-editor-catalogue-filter"),n=$("<div>",{class:"red-ui-palette-editor-toolbar-actions"}).appendTo(r),$("<span>").text(RED._("palette.editor.sort")+" ").appendTo(n),r=$('<span class="button-group"></span>').appendTo(n),d=$('<a href="#" class="red-ui-palette-editor-install-sort-option red-ui-sidebar-header-button-toggle selected"><i class="fa fa-sort-amount-desc"></i></a>').appendTo(r),i=$('<a href="#" class="red-ui-palette-editor-install-sort-option red-ui-sidebar-header-button-toggle"><i class="fa fa-sort-alpha-asc"></i></a>').appendTo(r),r=$('<a href="#" class="red-ui-palette-editor-install-sort-option red-ui-sidebar-header-button-toggle"><i class="fa fa-calendar"></i></a>').appendTo(r),RED.popover.tooltip(d,RED._("palette.editor.sortRelevance")),RED.popover.tooltip(i,RED._("palette.editor.sortAZ")),RED.popover.tooltip(r,RED._("palette.editor.sortRecent")),(d=[{button:d,func:G},{button:i,func:F},{button:r,func:U}]).forEach(function(t){t.button.on("click",function(e){e.preventDefault(),$(this).hasClass("selected")||($(".red-ui-palette-editor-install-sort-option").removeClass("selected"),$(this).addClass("selected"),L=t.func,N())})}),i=$("<span>").appendTo(n),(r=$('<a href="#" class="red-ui-sidebar-header-button"><i class="fa fa-refresh"></i></a>').appendTo(i)).on("click",function(e){e.preventDefault(),g=[],w={},O()}),RED.popover.tooltip(r,RED._("palette.editor.refresh")),h=$("<ol>").appendTo(e).editableList({class:"scrollable",addButton:!1,scrollOnAdd:!1,addItem:function(t,e,o){if(o.count)$("<div>",{class:"red-ui-search-empty"}).text(RED._("palette.editor.moduleCount",{count:o.count})).appendTo(t);else if(o.more)t.addClass("red-ui-palette-module-more"),i=$("<div>",{class:"red-ui-palette-module-header palette-module"}).appendTo(t),$('<a href="#"></a>').text(RED._("palette.editor.more",{count:o.more})).appendTo(i).on("click",function(e){e.preventDefault(),h.editableList("removeItem",o);for(var t=o.start;t<Math.min(o.start+10,o.start+o.more);t++)h.editableList("addItem",m[t]);10<o.more&&h.editableList("addItem",{start:o.start+10,more:o.more-10})});else if(o.info){var n=o.info,i=$("<div>",{class:"red-ui-palette-module-header"}).appendTo(t),a=$('<div class="red-ui-palette-module-meta red-ui-palette-module-name"><i class="fa fa-cube"></i></div>').appendTo(i),a=($("<span>").text(n.name||n.id).appendTo(a),$('<a target="_blank" class="red-ui-palette-module-link"><i class="fa fa-external-link"></i></a>').attr("href",n.url).appendTo(a),$('<div class="red-ui-palette-module-meta"></div>').appendTo(i)),a=($("<div>",{class:"red-ui-palette-module-description"}).text(n.description).appendTo(a),$('<div class="red-ui-palette-module-meta"></div>').appendTo(i)),s=($('<span class="red-ui-palette-module-version"><i class="fa fa-tag"></i> '+n.version+"</span>").appendTo(a),$('<span class="red-ui-palette-module-updated"><i class="fa fa-calendar"></i> '+(d=n.updated_at,new Date,new Date(d),(d=(Date.now()-new Date(d).getTime())/1e3)<60?RED._("palette.editor.times.seconds"):(d=Math.floor(d/60))<10?RED._("palette.editor.times.minutes"):d<60?RED._("palette.editor.times.minutesV",{count:d}):(d=Math.floor(d/60))<24?RED._("palette.editor.times.hoursV",{count:d}):(d=Math.floor(d/24))<7?RED._("palette.editor.times.daysV",{count:d}):(d=Math.floor(d/7))<4?RED._("palette.editor.times.weeksV",{count:d}):(l=Math.floor(d/4),d%=4,l<12?RED._("palette.editor.times.monthsV",{count:l}):(d=Math.floor(l/12),0==(l%=12)?RED._("palette.editor.times.yearsV",{count:d}):RED._("palette.editor.times.year"+(1<d?"s":"")+"MonthsV",{y:d,count:l}))))+"</span>").appendTo(a),1<u.length&&$('<span class="red-ui-palette-module-updated"><i class="fa fa-cubes"></i>'+(n.catalog.name||n.catalog.url)+"</span>").appendTo(a),!1);if(n.types&&0<n.types.length)for(e=0;e<n.types.length;e++){var r=RED.nodes.registry.getNodeSetForType(n.types[e]);if(r){s=r.module;break}}var d=$("<div>",{class:"red-ui-palette-module-meta"}).appendTo(i),l=$("<div>",{class:"red-ui-palette-module-button-group"}).appendTo(d),a=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.install")).appendTo(l);a.on("click",function(e){e.preventDefault(),$(this).hasClass("disabled")||q(n,t,function(e){})}),D.hasOwnProperty(n.id)?(a.addClass("disabled"),a.text(RED._("palette.editor.installed"))):s&&(a.addClass("disabled"),a.text(RED._("palette.editor.conflict")),RED.popover.create({target:a,content:RED._("palette.editor.conflictTip",{module:s}),trigger:"hover",direction:"bottom",delay:{show:750,hide:50}})),o.elements={installButton:a}}else $("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(t)}}),!1!==RED.settings.get("externalModules.palette.allowUpload",!0)&&(d=$('<span class="button-group">').prependTo(n),i=$('<button type="button" class="red-ui-sidebar-header-button red-ui-palette-editor-upload-button"><label><i class="fa fa-upload"></i><form id="red-ui-palette-editor-upload-form" enctype="multipart/form-data"><input name="tarball" type="file" accept=".tgz"></label></button>').appendTo(d),(a=i.find('input[type="file"]')).on("change",function(e){0<this.files.length&&(t.text(this.files[0].name),s.slideDown(200))}),s=$('<div class="red-ui-palette-editor-upload"></div>').appendTo(e),r=$("<div>").appendTo(s),n=$('<div class="placeholder-input"><i class="fa fa-upload"></i> </div>').appendTo(r),t=$("<span></span>").appendTo(n),d=$('<div class="red-ui-palette-editor-upload-buttons"></div>').appendTo(r),$('<button class="editor-button"></button>').text(RED._("common.label.cancel")).appendTo(d).on("click",function(e){e.preventDefault(),s.slideUp(200),a.val("")}),$('<button class="editor-button primary"></button>').text(RED._("common.label.upload")).appendTo(d).on("click",function(e){e.preventDefault();var n=RED.utils.addSpinnerOverlay(s,!0),e=$('<div style="position: relative;bottom: calc(50% + 17px); padding-right: 10px;text-align: right;"></div>').appendTo(n),e=($('<button class="red-ui-button"></button>').text(RED._("eventLog.view")).appendTo(e).on("click",function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.eventLog.startEvent(RED._("palette.editor.confirm.button.install")+" : "+a[0].files[0].name),new FormData),i=(e.append("tarball",a[0].files[0]),a[0].files[0].name);$.ajax({url:"nodes",data:e,cache:!1,contentType:!1,processData:!1,method:"POST"}).always(function(e,t,o){n.remove(),a.val(""),s.slideUp(200)}).fail(function(e,t,o){e.responseJSON&&(t=e.responseJSON.message);var n=RED.notify(RED._("palette.editor.errors.installFailed",{module:i,message:t}),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){n.close()}},{text:RED._("eventLog.view"),click:function(){n.close(),RED.actions.invoke("core:show-event-log")}}]});a.val(""),s.slideUp(200)})}),RED.popover.tooltip(i,RED._("palette.editor.upload"))),$('<div id="red-ui-palette-module-install-shade" class="red-ui-palette-module-shade hide"><div class="red-ui-palette-module-shade-status"></div><img src="red/images/spin.svg" class="red-ui-palette-spinner"/></div>').appendTo(e),RED.userSettings.add({id:"palette",title:RED._("palette.editor.palette"),get:J,close:function(){I.detach()},focus:function(){l.resize(),setTimeout(function(){p.trigger("focus")},200)}}),RED.actions.add("core:manage-palette",function(){RED.userSettings.show("palette")}),RED.events.on("registry:module-updated",function(e){_(e.module)}),RED.events.on("registry:node-set-enabled",function(e){_(e.module)}),RED.events.on("registry:node-set-disabled",function(e){_(e.module)}),RED.events.on("registry:node-type-added",function(e){/^subflow:/.test(e)||_(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-type-removed",function(e){/^subflow:/.test(e)||_(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-set-added",function(e){_(e.module);for(var t=0;t<m.length;t++)if(m[t].info.id===e.module){var o=m[t].elements.installButton;o.addClass("disabled"),o.text(RED._("palette.editor.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){y.editableList("removeItem",t),delete D[e.module];for(var o=0;o<m.length;o++)if(m[o].info.id===e.module){var n=m[o].elements.installButton;n.removeClass("disabled"),n.text(RED._("palette.editor.install"));break}}}}),RED.events.on("nodes:add",function(e){/^subflow:/.test(e.type)||(E[e.type]=(E[e.type]||0)+1,1===E[e.type]&&_(RED.nodes.registry.getNodeSetForType(e.type).module))}),RED.events.on("nodes:remove",function(e){E.hasOwnProperty(e.type)&&(E[e.type]--,0===E[e.type])&&(delete E[e.type],_(RED.nodes.registry.getNodeSetForType(e.type).module))}),RED.events.on("registry:plugin-module-added",function(e){if(D.hasOwnProperty(e))T(e);else{D[e]={info:RED.plugins.getModule(e)};var t,o=[e];for(t in D[e].info.sets)D[e].info.sets.hasOwnProperty(t)&&(o.push(t),o=o.concat(D[e].info.sets[t].types));D[e].index=o.join(",").toLowerCase(),y.editableList("addItem",D[e])}for(var n=0;n<m.length;n++)if(m[n].info.id===e){var i=m[n].elements.installButton;i.addClass("disabled"),i.text(RED._("palette.editor.installed"));break}}))},install:q}}(),RED.editor=function(){var v=[],b=!1,o={},m={},y={},c={};function w(e){var t,o,n,i,a=e.valid,s=e.changed;if(e.valid=!0,0===e.type.indexOf("subflow:"))(t=RED.nodes.subflow(e.type.substring(8)))&&(o=t.valid,i=t.changed,void 0===o)&&(o=w(t),i=t.changed),n=u(e,e._def.defaults,e),e.valid=o&&0===n.length,e.changed=e.changed||i,e.validationErrors=n;else if(e._def)n=u(e,e._def.defaults,e),e._def._creds&&(n=n.concat(u(e,e._def.credentials,e._def._creds))),e.valid=0===n.length,e.validationErrors=n;else if("subflow"==e.type){for(var r=RED.nodes.filterNodes({z:e.id}),d=0;d<r.length;d++)o=r[d].valid,i=r[d].changed,void 0===o&&(o=w(r[d]),i=r[d].changed),e.valid=e.valid&&o,e.changed=e.changed||i;for(var l=RED.nodes.filterNodes({type:"subflow:"+e.id}),c={},d=0;d<l.length;d++)l[d].valid=e.valid,l[d].changed=l[d].changed||e.changed,l[d].dirty=!0,c[l[d].z]=!0;Object.keys(c).forEach(function(e){e=RED.nodes.subflow(e);e&&w(e)})}return(a!==e.valid||s!==e.changed)&&(e.dirty=!0,t=RED.nodes.subflow(e.z))&&w(t),e.valid}function u(e,t,o){var n,i,a=[];for(n in t)t.hasOwnProperty(n)&&("string"==typeof(i=s(e,t,n,o[n]))?a.push(i):Array.isArray(i)?a=a.concat(i):i||a.push(n));return a}function s(t,e,o,n){var i=!0;if(/^\$\([a-zA-Z_][a-zA-Z0-9_]*\)$/.test(n))return!0;if(/^\$\{[a-zA-Z_][a-zA-Z0-9_]*\}$/.test(n))return!0;var a=null;if("label"in e[o]&&"string"==typeof e[o].label&&(a=e[o].label),"required"in e[o]&&e[o].required&&!(i=""!==n)&&a)return RED._("validator.errors.missing-required-prop",{prop:a});if(i&&"validate"in e[o]){if(e[o].hasOwnProperty("required")&&!1===e[o].required&&""===n)return!0;try{var s={};if(a&&(s.label=a),i=e[o].validate.call(t,n,s),2===e[o].validate.length&&"string"==typeof i||Array.isArray(i))return i;i=!!i}catch(e){return console.log("Validation error:",t.type,t.id,"property: "+o,"value:",n,e),RED._("validator.errors.validation-error",{prop:o,node:t.type,id:t.id,error:e.message})}}else if(i){if(e[o].hasOwnProperty("required")&&!1===e[o].required&&""===n)return!0;if("category"in t._def){s="config"===t._def.category,t=$("#"+(s?"node-config-input":"node-input")+"-"+o),s=0<t.length&&0<t.next(".red-ui-typedInput-container").length;if(s&&"string"==typeof(i=t.typedInput("validate",{returnErrorMessage:!0})))return a?a+": "+i:i}}if(i&&e[o].type&&RED.nodes.getType(e[o].type)&&!("validate"in e[o])){if(n&&"_ADD_"!=n){s=RED.nodes.node(n);if(s){if(null==s.valid||s.valid)return!0;if(a)return RED._("validator.errors.invalid-config",{prop:a})}else if(a)return RED._("validator.errors.missing-config",{prop:a});return!1}if(!(i=e[o].hasOwnProperty("required")&&!e[o].required)&&a)return RED._("validator.errors.missing-required-prop",{prop:a})}return i}function E(e,t){for(var o in e._def.defaults)e._def.defaults.hasOwnProperty(o)&&n(e,e._def.defaults,o,t);if(e._def.credentials)for(o in e._def.credentials)e._def.credentials.hasOwnProperty(o)&&n(e,e._def.credentials,o,t)}function n(e,t,o,n){var i,a,n=$("#"+n+"-"+o);0<n.length&&(i=n.val(),t[o].hasOwnProperty("format")&&""!==t[o].format&&"DIV"===n[0].nodeName?i=n.text():"checkbox"===n.attr("type")&&(i=n.prop("checked")),"string"!=typeof(e=s(e,t,o,i))&&e?(n.removeClass("input-error"),n.next(".red-ui-typedInput-container").removeClass("input-error"),(a=n.data("tooltip"))&&(n.data("tooltip",null),a.delete())):(n.addClass("input-error"),n.next(".red-ui-typedInput-container").addClass("input-error"),"string"==typeof e&&((a=n.data("tooltip"))?a.setContent(e):(a=RED.popover.tooltip(n,e),n.data("tooltip",a)))))}function p(t,o){t.resize=!0,t.dirty=!0,t.dirtyStatus=!0;var n=[];o&&RED.nodes.eachLink(function(e){e.source===t&&o.hasOwnProperty(e.sourcePort)&&("-1"===o[e.sourcePort]?n.push(e):e.sourcePort=o[e.sourcePort])}),t.hasOwnProperty("__outputs")&&(t.outputs<t.__outputs&&RED.nodes.eachLink(function(e){e.source===t&&e.sourcePort>=t.outputs&&-1===n.indexOf(e)&&n.push(e)}),delete t.__outputs),t.inputs=Math.min(1,Math.max(0,parseInt(t.inputs))),isNaN(t.inputs)&&(t.inputs=0),0===t.inputs&&(n=n.concat(RED.nodes.filterLinks({target:t})));for(var e=0;e<n.length;e++)RED.nodes.removeLink(n[e]);return n}function D(o,n,i,a,t,s){let r;r="node-input-subflow-env"===a?s?.value:o[n];var s=a+`-btn-${n}-add`,d=a+`-btn-${n}-edit`,l=a+"-"+n,c=$("#"+l);if(0!==c.length){var u=c.attr("style");let e;e=null!==(u=/(^|\s|;)width\s*:\s*([^;]+)/i.exec(u))?u[2].trim():"70%";u=$("<div></div>").css({width:e,display:"inline-flex"});const p=$('<select id="'+l+'"></select>').appendTo(u),f=(c.replaceWith(u),p.css({"flex-grow":1}),j(n,i,r,a,t),$('<a id="'+d+'" class="red-ui-button"><i class="fa fa-pencil"></i></a>').css({"margin-left":"10px"}).appendTo(u)),h=(RED.popover.tooltip(f,RED._("editor.editConfig",{type:i})),$('<a id="'+s+'" class="red-ui-button"><i class="fa fa-plus"></i></a>').css({"margin-left":"10px"}).appendTo(u)),g=(RED.popover.tooltip(h,RED._("editor.addNewConfig",{type:i})),function(e,t){$(e).prop("disabled",!!t),$(e).toggleClass("disabled",!!t)});h.on("click",function(e){h.prop("disabled")||(L(n,i,"_ADD_",a,o),e.preventDefault())}),f.on("click",function(e){var t=p.find(":selected");t.data("env")||f.prop("disabled")||(L(n,i,t.val(),a,o),e.preventDefault())}),p.on("change",function(){var e=p.find(":selected"),t=p.find("option").length;e?.data("env")?(g(h,!0),g(f,!0)):1===t||"_ADD_"===e.val()?(g(h,!1),g(f,!0)):(g(h,!1),g(f,!1))}),p.val(r||"_ADD_")}}function R(e,t,o,n){o=$("#"+o+"-"+t);0!==o.length&&("checkbox"===o.attr("type")?o.prop("checked",e[t]):(null==(e=e[t])&&(e=""),void 0!==n&&n[t].hasOwnProperty("format")&&""!==n[t].format&&"DIV"===o[0].nodeName?(o.html(RED.text.format.getHtml(e,n[t].format,{},!1,"en")),RED.text.format.attach(o[0],n[t].format,{},!1,"en")):(o.val(e),"INPUT"!==o[0].nodeName&&"TEXTAREA"!==o[0].nodeName||RED.text.bidi.prepareInput(o))))}function x(t,e,o,n){$("#"+n+"-"+o).on("change keyup paste",function(e){$(this).attr("skipValidation")||E(t,n)})}function _(e,t,o,n){for(var i in t)t.hasOwnProperty(i)&&("password"==t[i].type?o[i]?$("#"+n+"-"+i).val(o[i]):o["has_"+i]?$("#"+n+"-"+i).val("__PWRD__"):$("#"+n+"-"+i).val(""):R(o,i,n,t),x(e,0,i,n))}function k(d,l,c,u,p,f,h){function t(){var e,t,o,n,i=$("<ul></ul>").appendTo(d),a=$("<div></div>").appendTo(d),s=RED.tabs.create({element:i,onchange:function(e){a.children().hide(),e.content.show(),e.onchange&&e.onchange.call(e),g&&RED.tray.resize()},collapsible:!0,menu:!1}),r=[];for(e in l=l.slice(),y)y.hasOwnProperty(e)&&y[e](c)&&l.push(e);for(o in l.forEach(function(t){try{var e,o,n=m[t];n?("function"==typeof n&&(n=n.call(n,c)),e=$("<div>",{class:"red-ui-tray-content"}).appendTo(a).hide(),n.create.call(n,e),o={id:t,label:n.label,name:n.name,iconClass:n.iconClass,content:e,onchange:function(){n.show&&n.show.call(n)}},s.addTab(o),r.push(n)):console.warn("Unregisted edit pane:",t)}catch(e){console.log(t,e)}}),u.defaults)u.defaults.hasOwnProperty(o)&&(u.defaults[o].type?u.defaults[o]._type.array||((t=RED.nodes.getType(u.defaults[o].type))&&"config"===t.category?t.exclusive?function(t,o,n,i){var a=$("#"+i+"-"+o),e=(a.val(t[o]),a.attr("type","hidden"),$("<a>",{id:i+"-edit-"+o,class:"red-ui-button"}));a.after(e),t[o]?e.text(RED._("editor.configEdit")):e.text(RED._("editor.configAdd")),e.on("click",function(e){L(o,n,a.val()||"_ADD_",i,t),e.preventDefault()})}(c,o,u.defaults[o].type,p):D(c,o,u.defaults[o].type,p,u.defaults[o].filter):(console.log("Unknown type:",u.defaults[o].type),R(c,o,p,u.defaults))):R(c,o,p,u.defaults),x(c,u.defaults,o,p));if(/^subflow:/.test(u.type)||_(c,u.credentials,c.credentials,p),u.oneditprepare)try{u.oneditprepare.call(c)}catch(e){console.log("oneditprepare",c.id,c.type,e.toString()),console.log(e.stack)}for(o in u.defaults)u.defaults.hasOwnProperty(o)&&((n=$("#"+p+"-"+o)).attr("skipValidation",!0),void 0!==n.data("noderedTypedInput")?n.trigger("change",[n.typedInput("type"),n.typedInput("value")]):n.trigger("change"),n.removeAttr("skipValidation"));if(u.credentials)for(o in u.credentials)u.credentials.hasOwnProperty(o)&&((n=$("#"+p+"-"+o)).attr("skipValidation",!0),void 0!==n.data("noderedTypedInput")?n.trigger("change",[n.typedInput("type"),n.typedInput("value")]):n.trigger("change"),n.removeAttr("skipValidation"));E(c,p),g=!0,f&&s.activateTab(f),h&&h(r)}var e,o,n,i,a,g=!1;u.credentials||/^subflow:/.test(u.type)||"group"===c.type||"tab"===c.type?c.credentials?(_(c,u.credentials,c.credentials,p),t()):(e=c.type,/^subflow:/.test(e)&&(e="subflow"),e=e,o=c.id,n=function(e){e&&(c.credentials=e,c.credentials._=$.extend(!0,{},e)),t()},a=setTimeout(function(){i=RED.notify($('<p data-i18n="[prepend]editor.loadCredentials"> <img src="red/images/spin.svg"/></p>').i18n(),{fixed:!0})},800),e="credentials/"+e.replace(/\s+/g,"-")+"/"+o,$.ajax({url:e,dataType:"json",success:function(e){i&&(i.close(),i=null),clearTimeout(a),n(e)},error:function(e,t,o){i&&(i.close(),i=null),clearTimeout(a),RED.notify(RED._("editor.errors.credentialLoadFailed"),"error"),n(null)},timeout:3e4})):t()}function T(){for(var e=v.length-1;e<v.length;e++){var t=v[e];if(n=t.type,"group"===t.type)n=RED._("group.editGroup",{name:RED.utils.sanitize(t.name||t.id)});else if("_expression"===t.type)n=RED._("expressionEditor.title");else if("_js"===t.type)n=RED._("jsEditor.title");else if("_text"===t.type)n=RED._("textEditor.title");else if("_json"===t.type)n=RED._("jsonEditor.title");else if("_markdown"===t.type)n=RED._("markdownEditor.title");else if("_buffer"===t.type)n=RED._("bufferEditor.title");else if("subflow"===t.type)n=RED._("subflow.editSubflow",{name:RED.utils.sanitize(t.name)});else if(0===t.type.indexOf("subflow:"))var o=RED.nodes.subflow(t.type.substring(8)),n=RED._("subflow.editSubflowInstance",{name:RED.utils.sanitize(o.name)});else if(void 0!==t._def){if(void 0!==t._def.paletteLabel)try{n=RED.utils.sanitize(("function"==typeof t._def.paletteLabel?t._def.paletteLabel.call(t._def):t._def.paletteLabel)||"")}catch(e){console.log("Definition error: "+t.type+".paletteLabel",e)}e===v.length-1&&(n=RED.nodes.node(t.id)?RED._("editor.editNode",{type:RED.utils.sanitize(n)}):RED._("editor.addNewConfig",{type:RED.utils.sanitize(n)}))}}return n}function C(t,e){if(t._def.oneditsave){var o={};for(var n in t._def.defaults)t._def.defaults.hasOwnProperty(n)&&("string"==typeof t[n]||"number"==typeof t[n]?o[n]=t[n]:"group"===t.type&&"nodes"===n||(o[n]=$.extend(!0,{},{v:t[n]}).v));var i={};if(t._def.credentials)for(const s in t._def.credentials)Object.prototype.hasOwnProperty.call(t._def.credentials,s)&&("password"===t._def.credentials[s].type&&(i["has_"+s]=t.credentials["has_"+s]),s in t.credentials)&&(i[s]=t.credentials[s]);try{var a=t._def.oneditsave.call(t);!0===a?e.changed=!0:"object"==typeof a&&null!==a&&(!0===a.changed&&(e.changed=!0),Array.isArray(a.history))&&0<a.history.length&&(e.history=a.history)}catch(e){console.warn("oneditsave",t.id,t.type,e.toString())}for(n in t._def.defaults)t._def.defaults.hasOwnProperty(n)&&(null===o[n]||"string"==typeof o[n]||"number"==typeof o[n]?o[n]!==t[n]&&(e.changes[n]=o[n],e.changed=!0):"group"===t.type&&"nodes"===n||JSON.stringify(o[n])!==JSON.stringify(t[n])&&(e.changes[n]=o[n],e.changed=!0));if(t._def.credentials)for(const r in t._def.credentials)Object.prototype.hasOwnProperty.call(t._def.credentials,r)&&i[r]!==t.credentials[r]&&"__PWRD__"!==t.credentials[r]&&(e.changes.credentials=e.changes.credentials||{},e.changes.credentials["has_"+r]=i["has_"+r],e.changes.credentials[r]=i[r],e.changed=!0)}}function h(e,t){return(e.__label__||"").localeCompare(t.__label__||"",void 0,{sensitivity:"base"})}function j(t,o,n,i,a){if(i){var s=$("#"+i+"-edit-"+t);if(s.length)n?s.text(RED._("editor.configEdit")):s.text(RED._("editor.configAdd")),$("#"+i+"-"+t).val(n);else{let e=!1;var r=$("#"+i+"-"+t),s=RED.nodes.getType(o),d=(r.children().remove(),RED.nodes.workspace(RED.workspaces.active())),l=(d||(d=RED.nodes.subflow(RED.workspaces.active()),e=!0),[]);if("function"!=typeof a&&(a=null),RED.nodes.eachConfig(function(e){var t;e.type!=o||e.z&&e.z!==d.id||a&&!a.call(null,e)||(t=RED.utils.getNodeLabel(e,e.id),e.__label__=t+(e.d?" ["+RED._("workspace.disabled")+"]":""),l.push(e))}),e&&d.env){var c=d.env.filter(e=>"conf-types"===e.ui?.type&&e.type===o);if(c&&0<c.length){var u=RED.i18n.lang();for(let e=0;e<c.length;e++){var p=c[e],f=(p.ui||{}).label||{},f=RED.editor.envVarList.lookupLabel(f,f["en-US"]||p.name,u),p={env:p,id:"${"+p.name+"}",type:o,label:f,__label__:"[env] "+f};l.push(p)}}}i=h;"function"==typeof s.sort&&(i=s.sort);try{l.sort(i)}catch(e){console.log("Definition error: "+s.type+".sort",e)}l.forEach(function(e){var t=$('<option value="'+e.id+'"'+(n==e.id?" selected":"")+"></option>").text(RED.text.bidi.enforceTextDirectionWithUCC(e.__label__)).appendTo(r);e.env&&t.data("env",e.env),delete e.__label__});t=o;if(void 0!==s.paletteLabel)try{t=RED.utils.sanitize(("function"==typeof s.paletteLabel?s.paletteLabel.call(s):s.paletteLabel)||o)}catch(e){console.log("Definition error: "+o+".paletteLabel",e)}l.length?r.append('<option value="_ADD_">'+RED._("editor.inputs.none")+"</option>"):r.append('<option value="_ADD_" selected>'+RED._("editor.addNewType",{type:t})+"</option>"),window.setTimeout(function(){r.trigger("change")},50)}}}function L(c,u,e,p,f){if(!b){b=!0;var h="_ADD_"==e,r=RED.nodes.getType(u),g=RED.nodes.node(e),m=[];if(!(g&&g.z&&RED.workspaces.isLocked(g.z))){var e="",t=RED.nodes.subflow(RED.workspaces.active());if(t&&(e=t.id),null==g){for(var o in g={id:RED.nodes.id(),_def:r,type:u,z:e,users:[]},r.defaults)r.defaults[o].value&&(g[o]=JSON.parse(JSON.stringify(r.defaults[o].value)));g._=r._}v.push(g),RED.view.state(RED.state.EDITING);t={title:T(),resize:function(e){$(".red-ui-tray-content").height(e.height-50);var e=$("#node-config-dialog-edit-form"),t={width:e.width(),height:e.height()};m.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,i){e.find(".red-ui-tray-header");var a=e.find(".red-ui-tray-body"),s=e.find(".red-ui-tray-footer"),e=$('<div class="red-ui-tray-footer-left"></div>').appendTo(s),t=$('<button type="button" class="red-ui-button"><i class="fa fa-book"></button>').on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.sidebar.help.show(g.type)}).appendTo(e),t=(RED.popover.tooltip(t,RED._("sidebar.help.showHelp")),$('<input id="node-config-input-node-disabled" type="checkbox">').prop("checked",!!g.d).appendTo(e).toggleButton({enabledIcon:"fa-circle-thin",disabledIcon:"fa-ban",invertState:!0}),!1!==r.hasUsers&&$('<button type="button" class="red-ui-button"><i class="fa fa-user"></i><span id="red-ui-editor-config-user-count"></span></button>').on("click",function(){RED.sidebar.info.outliner.search("uses:"+g.id),RED.sidebar.info.show()}).appendTo(e),s.append('<span class="red-ui-tray-footer-right"><span id="red-ui-editor-config-scope-warning" data-i18n="[title]editor.errors.scopeChange"><i class="fa fa-warning"></i></span><select id="red-ui-editor-config-scope"></select></span>'),["editor-tab-properties"]);g._def.defaults&&g._def.defaults.hasOwnProperty("info")||t.push("editor-tab-description"),k(a,t,g,r,"node-config-input",null,function(e){m=e,g._def.exclusive?$("#red-ui-editor-config-scope").hide():$("#red-ui-editor-config-scope").show(),$("#red-ui-editor-config-scope-warning").hide();var o={},t=(g.users.forEach(function(e){o[e.z]=!0}),Object.keys(o).length),n=$("#red-ui-editor-config-scope").empty();n.off("change"),n.append('<option value=""'+(g.z?"":" selected")+' data-i18n="sidebar.config.global"></option>'),n.append('<option disabled data-i18n="sidebar.config.flows"></option>'),RED.nodes.eachWorkspace(function(e){var t=e.label;o[e.id]&&(t="* "+t),$('<option value="'+e.id+'"'+(e.id==g.z?" selected":"")+"></option>").text(t).appendTo(n)}),n.append('<option disabled data-i18n="sidebar.config.subflows"></option>'),RED.nodes.eachSubflow(function(e){var t=e.name;o[e.id]&&(t="* "+t),$('<option value="'+e.id+'"'+(e.id==g.z?" selected":"")+"></option>").text(t).appendTo(n)}),0<t&&n.on("change",function(){var e=$(this).val();""!==e&&(!o[e]||1<t)?$("#red-ui-editor-config-scope-warning").show():$("#red-ui-editor-config-scope-warning").hide()}),!1!==r.hasUsers&&($("#red-ui-editor-config-user-count").text(g.users.length).parent().show(),RED.popover.tooltip($("#red-ui-editor-config-user-count").parent(),function(){return RED._("editor.nodesUse",{count:g.users.length})})),a.i18n(),s.i18n(),b=!1,i()})},close:function(){RED.workspaces.refresh(),m.forEach(function(e){e.close&&e.close.call(e)}),v.pop()},show:function(){g&&(RED.sidebar.info.refresh(g),RED.sidebar.help.show(u,!1))}};t.buttons=[{id:"node-config-dialog-cancel",text:RED._("common.label.cancel"),click:function(){var t=u,o=g.id,e=RED.nodes.getType(t);if(e.oneditcancel&&e.oneditcancel){var n=RED.nodes.node(o);if(n)try{e.oneditcancel.call(n,!1)}catch(e){console.log("oneditcancel",n.id,n.type,e.toString())}else try{e.oneditcancel.call({id:o},!0)}catch(e){console.log("oneditcancel",o,t,e.toString())}}RED.tray.close()}},{id:"node-config-dialog-ok",text:h?RED._("editor.configAdd"):RED._("editor.configUpdate"),class:"primary",click:function(){const o=c,n=u;var e=RED.nodes.getType(n),t=g.changed;const i={changes:{},changed:!1,outputMap:null};C(g,i),m.forEach(function(e){e.apply&&e.apply.call(e,i)}),g.label=e.label,$("#node-config-input-node-disabled").prop("checked")?!0!==g.d&&(i.changes.d=g.d,i.changed=!0,g.d=!0):!0===g.d&&(i.changes.d=g.d,i.changed=!0,delete g.d);var e=$("#red-ui-editor-config-scope").val()||void 0;g.z!==e&&(i.changes.z=g.z,i.changed=!0,g.z=e);const a=[];e&&(e=g.users.filter(function(e){let t=!1,o=null;for(const n in e._def.defaults)e._def.defaults.hasOwnProperty(n)&&e._def.defaults[n].type===g.type&&e[n]===g.id&&(e.z===g.z?t=!0:(o?o.changes[n]=e[n]:o={t:"edit",node:e,changes:{[n]:e[n]},changed:e.changed,dirty:e.dirty},e[n]=""));return o&&a.push(o),t||(e.changed=!0,e.dirty=!0,w(e),RED.events.emit("nodes:change",e)),t}),g.users.length!==e.length)&&(i.changes.users=g.users,i.changed=!0,g.users=e),i.changed&&(g.changed=!0),w(g);var s=new Set,r=g.users.slice();for(s.add(g.id);r.length;){var d=r.pop();s.has(d.id)||(s.add(d.id),d.users&&r.push(...d.users),w(d))}let l={t:"edit",node:g,changes:i.changes,changed:t,dirty:RED.nodes.dirty()};a.length&&(l={t:"multi",events:[l].concat(a),dirty:l.dirty}),h||RED.events.emit("editor:save",g),i.changed&&(h?(RED.history.push({t:"add",nodes:[g.id],dirty:RED.nodes.dirty()}),RED.nodes.add(g)):(RED.history.push(l),RED.events.emit("nodes:change",g)),RED.nodes.dirty(!0),RED.view.redraw(!0)),RED.tray.close(function(){var e,t=null;f?._def&&(e="subflow"===f._def.type||/subflow:.*/.test(f._def.type),f)&&!e&&"function"==typeof f._def.defaults?.[o]?.filter&&(t=function(e){return f._def.defaults[o].filter.call(f,e)}),j(o,n,g.id,p,t)})}}],h||t.buttons.unshift({class:"leftButton",text:RED._("editor.configDelete"),click:function(){var t=c,e=g.id,o=u,n=RED.nodes.getType(o);try{n.ondelete&&(console.log("Deprecated API warning: config node type ",o," has an ondelete function - should be oneditdelete"),n.ondelete.call(g)),n.oneditdelete&&n.oneditdelete.call(g)}catch(e){console.log("oneditdelete",g.id,g.type,e.toString())}for(var i={t:"delete",nodes:[g],changes:{},dirty:RED.nodes.dirty()},a=0;a<g.users.length;a++){var s,r=g.users[a];for(s in i.changes[r.id]={changed:r.changed,valid:r.valid},r._def.defaults)r._def.defaults.hasOwnProperty(s)&&r[s]==e&&(i.changes[r.id][s]=e,r[s]="",r.changed=!0,r.dirty=!0);w(r)}RED.nodes.remove(e),RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(i),RED.tray.close(function(){var e=null;f&&"function"==typeof f._def.defaults[t]?.filter&&(e=function(e){return f._def.defaults[t].filter.call(f,e)}),j(t,o,"",p,e)})}}),RED.tray.show(t)}}}function t(e,t){o.hasOwnProperty(e)?(0<v.length&&(t.parent=v[v.length-1].id),v.push({type:e}),t.title=t.title||T(),t.onclose=function(){v.pop()},o[e].show(t)):console.log("Unknown type editor:",e)}return{init:function(){window.ace&&window.ace.config.set("basePath","vendor/ace"),RED.tray.init(),RED.actions.add("core:confirm-edit-tray",function(){$(document.activeElement).blur(),$("#node-dialog-ok").trigger("click"),$("#node-config-dialog-ok").trigger("click")}),RED.actions.add("core:cancel-edit-tray",function(){$(document.activeElement).blur(),$("#node-dialog-cancel").trigger("click"),$("#node-config-dialog-cancel").trigger("click")}),RED.editor.codeEditor.init()},generateViewStateId:function(o,n,i){try{var a="object"==typeof(n=n||{}).options?n.options:{};let t;if(!1===(t=n.hasOwnProperty("stateId")||a.hasOwnProperty("stateId")?n.stateId:t))return!1;if(!t){let e;var s=RED.view.selection();if("node"===o&&n.id)e=n.id;else{if(!s.nodes||!s.nodes.length)return!1;e=s.nodes[0].id}var r=[e],d=$(n.element||a.element);d.length&&(r.push(d.closest(".form-row").index()),r.push(d.index())),"typedInput"==o&&(r.push(d.closest("li").index()),!i)&&n.propertyType&&(i=n.propertyType),t=r.join("/")}return t&&i&&(t+="/"+i),t}catch(e){return!1}},edit:function(r,a){var d,s,e,l,o,t,n;b||(b=!0,r.z&&RED.workspaces.isLocked(r.z))||(d=r,e=s=!1,l=[],v.push(r),RED.view.state(RED.state.EDITING),o=r.type,"subflow:"==r.type.substring(0,8)&&(o="subflow"),t={title:T(),buttons:[{id:"node-dialog-delete",class:"leftButton",text:RED._("common.label.delete"),click:function(){var e=RED.nodes.dirty(),t=[],o=[],n=RED.nodes.remove(d.id),t=(t.push(d),{t:"delete",nodes:t=t.concat(n.nodes),links:o=o.concat(n.links),changes:{},dirty:e});d.g&&-1<(o=(n=RED.nodes.group(d.g))?.nodes.indexOf(d)??-1)&&(n.nodes.splice(o,1),RED.group.markDirty(n)),RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(t),RED.tray.close()}},{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){if(d._def){if(d._def.oneditcancel)try{d._def.oneditcancel.call(d)}catch(e){console.log("oneditcancel",d.id,d.type,e.toString())}for(var e in d._def.defaults){var t;d._def.defaults.hasOwnProperty(e)&&(t=d._def.defaults[e]).type&&(t=RED.nodes.getType(t.type))&&t.exclusive&&(""===(t=$("#node-input-"+e).val()||"")||d[e]||RED.nodes.remove(t))}}RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){var t={changes:{},changed:!1,outputMap:null},o=RED.nodes.dirty(),n=(C(d,t),l.forEach(function(e){e.apply&&e.apply.call(e,t)}),p(d,t.outputMap));if($("#node-input-node-disabled").prop("checked")?!0!==r.d&&(t.changes.d=r.d,t.changed=!0,r.d=!0):!0===r.d&&(t.changes.d=r.d,t.changed=!0,delete r.d),r.resize=!0,t.changed){var i=d.changed,a=(d.changed=!0,RED.nodes.dirty(!0),RED.nodes.subflow(RED.workspaces.active())),s=null;a&&(s=[],RED.nodes.eachNode(function(e){e.type=="subflow:"+RED.workspaces.active()&&(s.push({id:e.id,changed:e.changed}),e.changed=!0,e.dirty=!0,p(e))}));let e={t:"edit",node:d,changes:t.changes,links:n,dirty:o,changed:i};t.outputMap&&(e.outputMap=t.outputMap),s&&(e.subflow={instances:s}),t.history&&(e={t:"multi",events:[e,...t.history],dirty:o}),RED.history.push(e)}d.dirty=!0,w(d),RED.events.emit("editor:save",d),RED.events.emit("nodes:change",d),RED.tray.close()}}],resize:function(e){c[o]=e.width,$(".red-ui-tray-content").height(e.height-50);var e=$(".red-ui-tray-content form").height(e.height-50-40),t={width:e.width(),height:e.height()};l.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,t){d.hasOwnProperty("outputs")&&(d.__outputs=d.outputs);var o=e.find(".red-ui-tray-footer"),n=e.find(".red-ui-tray-body"),e=(n.parent().css("overflow","hidden"),$('<div class="red-ui-tray-footer-left"></div>').appendTo(o)),i=$('<button type="button" class="red-ui-button"><i class="fa fa-book"></button>').on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.sidebar.help.show(d.type)}).appendTo(e),i=(RED.popover.tooltip(i,RED._("sidebar.help.showHelp")),$('<input id="node-input-node-disabled" type="checkbox">').prop("checked",!!r.d).appendTo(e).toggleButton({enabledIcon:"fa-circle-thin",disabledIcon:"fa-ban",invertState:!0}),["editor-tab-properties"]);/^subflow:/.test(r.type)&&i.push("editor-tab-envProperties"),r._def.defaults&&r._def.defaults.hasOwnProperty("info")||(i.push("editor-tab-description"),s=!0,r.infoEditor&&(r.infoEditor__orig=r.infoEditor,delete r.infoEditor,s=!1)),i.push("editor-tab-appearance"),k(n,i,r,r._def,"node-input",a,function(e){l=e,n.i18n(),o.i18n(),b=!1,t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),d&&(d.infoEditor__orig&&(d.infoEditor=d.infoEditor__orig,delete d.infoEditor__orig),s&&delete d.infoEditor,e||RED.sidebar.info.refresh(d)),RED.workspaces.refresh(),l.forEach(function(e){e.close&&e.close.call(e)}),RED.view.redraw(!0),v.pop()},show:function(){d&&(RED.sidebar.info.refresh(d),RED.sidebar.help.show(d.type,!1),"BODY"===document.activeElement.tagName)&&$("#red-ui-editor-stack").trigger("focus")}},c.hasOwnProperty(o)&&(t.width=c[o]),"subflow"===o&&(n=d.type.substring(8),t.buttons.unshift({class:"leftButton",text:RED._("subflow.edit"),click:function(){RED.workspaces.show(n),e=!0,$("#node-dialog-ok").trigger("click")}})),RED.tray.show(t))},editConfig:L,editFlow:function(a,s){var r,e;b||(b=!0,r=[],RED.view.state(RED.state.EDITING),e={title:RED._("workspace.editFlow",{name:RED.utils.sanitize(a.label)}),buttons:[{id:"node-dialog-delete",class:"leftButton"+(1===RED.workspaces.count()?" disabled":""),text:RED._("common.label.delete"),click:function(){RED.workspaces.delete(a),RED.tray.close()}},{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",class:"primary",text:RED._("common.label.done"),click:function(){var t={changes:{},changed:!1,outputMap:null},e=RED.nodes.dirty(),o=(r.forEach(function(e){e.apply&&e.apply.call(e,t)}),$("#node-input-disabled").prop("checked")),o=(a.disabled!==o&&(t.changes.disabled=a.disabled,t.changed=!0,a.disabled=o,$("#red-ui-tab-"+a.id.replace(".","-")).toggleClass("red-ui-workspace-disabled",!!a.disabled)),$("#node-input-locked").prop("checked"));a.locked!==o&&(t.changes.locked=a.locked,t.changed=!0,a.locked=o,$("#red-ui-tab-"+a.id.replace(".","-")).toggleClass("red-ui-workspace-locked",!!a.locked)),t.changed&&(o={t:"edit",changes:t.changes,node:a,dirty:e},a.changed=!0,RED.history.push(o),RED.nodes.dirty(!0),t.changes.hasOwnProperty("disabled")&&(RED.nodes.eachNode(function(e){e.z===a.id&&(e.dirty=!0)}),RED.view.redraw()),RED.workspaces.refresh(),RED.events.emit("flows:change",a)),RED.tray.close()}}],resize:function(e){$(".red-ui-tray-content").height(e.height-50);var e=$(".red-ui-tray-content form").height(e.height-50-40),t={width:e.width(),height:e.height()};r.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,t){var o=e.find(".red-ui-tray-footer"),n=e.find(".red-ui-tray-body"),e=(n.parent().css("overflow","hidden"),$('<div class="red-ui-tray-footer-left"></div>').appendTo(o)),i=$('<div class="red-ui-tray-footer-right"></div>').appendTo(o);a.hasOwnProperty("disabled")||(a.disabled=!1),$('<input id="node-input-disabled" type="checkbox">').prop("checked",a.disabled).appendTo(e).toggleButton({enabledIcon:"fa-circle-thin",disabledIcon:"fa-ban",invertState:!0}),a.hasOwnProperty("locked")||(a.locked=!1),$('<input id="node-input-locked" type="checkbox">').prop("checked",a.locked).appendTo(i).toggleButton({enabledLabel:RED._("common.label.unlocked"),enabledIcon:"fa-unlock-alt",disabledLabel:RED._("common.label.locked"),disabledIcon:"fa-lock",invertState:!0}),k(n,["editor-tab-flow-properties","editor-tab-envProperties"],a,{},"node-input",s,function(e){r=e,n.i18n(),o.i18n(),b=!1,t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),r.forEach(function(e){e.close&&e.close.call(e)});var e=RED.view.selection();e.nodes||e.links||a.id!==RED.workspaces.active()||RED.sidebar.info.refresh(a)}},RED.tray.show(e))},editSubflow:function(a,s){var r,d,e;b||(b=!0,r=a,d=[],v.push(a),RED.view.state(RED.state.EDITING),e={title:T(),buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",class:"primary",text:RED._("common.label.done"),click:function(){var t={changes:{},changed:!1,outputMap:null},n=RED.nodes.dirty(),e=(d.forEach(function(e){e.apply&&e.apply.call(e,t)}),$("#subflow-input-name").val()),e=(e!=r.name&&(t.changes.name=r.name,r.name=e,t.changed=!0),r.env),o=RED.subflow.exportSubflowTemplateEnv($("#node-input-env-container").editableList("items"));o&&0<o.length&&o.forEach(function(e){"cred"===e.type&&(r.credentials=r.credentials||{_:{}},r.credentials[e.name]=e.value,r.credentials["has_"+e.name]=""!==e.value,"__PWRD__"!==e.value&&(t.changed=!0),delete e.value)});let a=new Set;if(s=o,JSON.stringify(e)!==JSON.stringify(s)&&(e&&e.forEach(e=>{a.add(e.name)}),o&&o.forEach(e=>{a.delete(e.name)}),t.changes.env=r.env,r.env=o,t.changed=!0),t.changed){var s=r.changed;r.changed=!0,w(r);let o=[],i=[],e=(RED.nodes.eachNode(function(e){if(e.type=="subflow:"+r.id){if(o.push({id:e.id,changed:e.changed}),e._def.color=r.color,e.changed=!0,e.dirty=!0,e.env){var t=e.env;const n=[];let o=!1;e.env.forEach((e,t)=>{a.has(e.name)?o=!0:n.push(e)}),o&&(i.push({t:"edit",node:e,changes:{env:t},dirty:e.dirty,changed:e.changed}),e.env=n)}p(e),w(e)}}),RED.events.emit("subflows:change",r),RED.nodes.dirty(!0),{t:"edit",node:r,changes:t.changes,dirty:n,changed:s,subflow:{instances:o}});0<i.length&&(e={t:"multi",events:[e,...i],dirty:n}),RED.history.push(e)}r.dirty=!0,RED.tray.close()}}],resize:function(e){$(".red-ui-tray-content").height(e.height-50);var e=$(".red-ui-tray-content form").height(e.height-50-40),t={width:e.width(),height:e.height()};d.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,t){var o=e.find(".red-ui-tray-footer"),n=$("<div/>",{class:"red-ui-tray-footer-left"}).appendTo(o),i=e.find(".red-ui-tray-body");i.parent().css("overflow","hidden"),$('<span style="margin-left: 10px"><i class="fa fa-info-circle"></i> <i id="red-ui-editor-subflow-user-count"></i></span>').appendTo(n),r&&RED.sidebar.info.refresh(r);k(i,["editor-tab-properties","editor-tab-subflow-module","editor-tab-description","editor-tab-appearance"],a,a._def,"node-input",s,function(e){d=e,$("#subflow-input-name").val(a.name),RED.text.bidi.prepareInput($("#subflow-input-name")),i.i18n(),o.i18n(),b=!1,t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(r),RED.workspaces.refresh(),d.forEach(function(e){e.close&&e.close.call(e)}),v.pop(),r=null},show:function(){}},RED.tray.show(e))},editGroup:function(i,a){var n,s,e;b||(b=!0,i.z&&RED.workspaces.isLocked(i.z))||(n=i,v.push(i),RED.view.state(RED.state.EDITING),s=[],e={title:T(),buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",class:"primary",text:RED._("common.label.done"),click:function(){var e,t={changes:{},changed:!1,outputMap:null},o=RED.nodes.dirty();C(n,t),s.forEach(function(e){e.apply&&e.apply.call(e,t)}),t.changed&&(e=n.changed,n.changed=!0,RED.nodes.dirty(!0),o={t:"edit",node:n,changes:t.changes,dirty:o,changed:e},RED.history.push(o),RED.events.emit("groups:change",n)),n.dirty=!0,RED.tray.close(),RED.view.redraw(!0)}}],resize:function(e){c.group=e.width,$(".red-ui-tray-content").height(e.height-50);var e=$(".red-ui-tray-content form").height(e.height-50-40),t={width:e.width(),height:e.height()};s.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,t){var o=e.find(".red-ui-tray-footer"),n=($("<div/>",{class:"red-ui-tray-footer-left"}).appendTo(o),e.find(".red-ui-tray-body"));n.parent().css("overflow","hidden");k(n,["editor-tab-properties","editor-tab-envProperties","editor-tab-description"],i,i._def,"node-input",a,function(e){s=e,n.i18n(),b=!1,t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(n),s.forEach(function(e){e.close&&e.close.call(e)}),v.pop(),n=null},show:function(){}},c.hasOwnProperty("group")&&(e.width=c.group),RED.tray.show(e))},editJavaScript:function(e){t("_js",e)},editExpression:function(e){t("_expression",e)},editJSON:function(e){t("_json",e)},editMarkdown:function(e){t("_markdown",e)},editText:function(e){"markdown"==e.mode?t("_markdown",e):t("_text",e)},editBuffer:function(e){t("_buffer",e)},getEditStack:function(){return[...v]},buildEditForm:function(e,t,o,a,n){return(t=$('<form id="'+t+'" class="form-horizontal" autocomplete="off"></form>').appendTo(e)).html($("script[data-template-name='"+o+"']").html()),a=a||"node-red",t.find("[data-i18n]").each(function(){for(var e=$(this).attr("data-i18n").split(";"),t=0;t<e.length;t++){var o,n,i=e[t];-1===i.indexOf(":")&&(n="",0===i.indexOf("[")&&(n=(o=i.split("]"))[0]+"]",i=o[1]),e[t]=n+a+":"+i)}$(this).attr("data-i18n",e.join(";"))}),$('<span style="position: absolute; top: -2000px;"><input id="red-ui-trap-password" type="password"/></span>').prependTo(t),$('<span style="position: absolute; top: -2000px;"><input id="red-ui-trap-username" type="text"/></span>').prependTo(t),$('<span style="position: absolute; top: -2000px;"><input id="red-ui-trap-user" type="text"/></span>').prependTo(t),t.on("submit",function(e){e.preventDefault()}),t.find("input").attr("autocomplete","off"),t},validateNode:w,updateNodeProperties:p,showIconPicker:function(){RED.editor.iconPicker.show.apply(null,arguments)},showTypeEditor:t,registerTypeEditor:function(e,t){o[e]=t},createEditor:function(e){return RED.editor.codeEditor.create(e)},get customEditTypes(){return o},registerEditPane:function(e,t,o){o&&(y[e]=o),m[e]=t},prepareConfigNodeSelect:D}}(),function(){function w(e,t,o,n){var i,a=$("<div>",{class:"red-ui-editor-node-label-form-row"});return void 0===e?($("<span>").text(RED._("editor.noDefaultLabel")).appendTo(a),a.addClass("red-ui-editor-node-label-form-none")):(a.addClass(""),e="red-ui-editor-node-label-form-"+e+"-"+t,$("<label>",{for:e}).text(t+1+".").appendTo(a),i=$("<input>",{type:"text",id:e,placeholder:n}).val(o).appendTo(a),$('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-times"></i></button>').appendTo(a).on("click",function(e){e.preventDefault(),i.val("")})),a}RED.editor.registerEditPane("editor-tab-appearance",function(y){return{label:RED._("editor-tab.appearance"),name:RED._("editor-tab.appearance"),iconClass:"fa fa-object-group",create:function(e){this.content=e;var t,o,n,i,a,s,r,d,e=this.content,l=y,e=$('<form class="dialog-form form-horizontal" autocomplete="off"></form>').appendTo(e),c=("subflow"===l.type&&(n=$("<div/>",{class:"form-row"}).appendTo(e),$("<label/>",{for:"subflow-appearance-input-category","data-i18n":"editor:subflow.category"}).appendTo(n),o=$("<select/>",{id:"subflow-appearance-input-category"}).css({width:"250px"}).appendTo(n),$("<input/>",{type:"text",id:"subflow-appearance-input-custom-category"}).css({display:"none","margin-left":"10px",width:"calc(100% - 250px)"}).appendTo(n),(n=RED.palette.getCategories()).sort(function(e,t){return e.label.localeCompare(t.label)}),n.forEach(function(e){o.append($("<option/>").val(e.id).text(e.label))}),o.append($("<option/>").attr("disabled",!0).text("---")),o.append($("<option/>").val("_custom_").text(RED._("palette.addCategory"))),$("#subflow-appearance-input-category").on("change",function(){"_custom_"===$(this).val()?($("#subflow-appearance-input-category").width(120),$("#subflow-appearance-input-custom-category").show()):($("#subflow-appearance-input-category").width(250),$("#subflow-appearance-input-custom-category").hide())}),$("#subflow-appearance-input-category").val(l.category||"subflows"),l.id,$("#red-ui-editor-subflow-user-count").text(RED._("subflow.subflowInstances",{count:l.instances.length})).show()),$('<div class="form-row"><label for="node-input-show-label" data-i18n="editor.label"></label><span style="margin-right: 2px;"/><input type="checkbox" id="node-input-show-label"/></div>').appendTo(e),$("#node-input-show-label").toggleButton({enabledLabel:RED._("editor.show"),disabledLabel:RED._("editor.hide")}),l.hasOwnProperty("l")||(l.l=!l._def.hasOwnProperty("showLabel")||l._def.showLabel),$("#node-input-show-label").prop("checked",l.l).trigger("change"),"subflow"===l.type&&(n=l.color||"#DDAA99",v=$("<div/>",{class:"form-row"}).appendTo(e),$("<label/>").text(RED._("editor.color")).appendTo(v),RED.editor.colorPicker.create({id:"red-ui-editor-node-color",value:n,defaultValue:"#DDAA99",palette:["#DDAA99","#3FADB5","#87A980","#A6BBCF","#AAAA66","#C0C0C0","#C0DEED","#C7E9C0","#D7D7A0","#D8BFD8","#DAC4B4","#DEB887","#DEBD5C","#E2D96E","#E6E0F8","#E7E7AE","#E9967A","#F3B567","#FDD0A2","#FDF0C2","#FFAAAA","#FFCC66","#FFF0F0","#FFFFFF"],sortPalette:function(e,t){return e.l-t.l}}).appendTo(v),$("#red-ui-editor-node-color").on("change",function(e){var t=$(this).val(),o=(a.css("backgroundColor",t),RED.utils.getDarkerColor(t));o!==t&&a.css("border-color",o)})),l._def.defaults&&l._def.defaults.hasOwnProperty("icon")||(n=$('<div class="form-row"></div>').appendTo(e),$('<label data-i18n="editor.settingIcon">').appendTo(n),i=$('<button type="button" class="red-ui-button red-ui-editor-node-appearance-button">').appendTo(n),$('<i class="fa fa-caret-down"></i>').appendTo(i),a=$("<div>",{class:"red-ui-search-result-node"}).appendTo(i),v=RED.utils.getNodeColor(l.type,l._def),s=RED.utils.getNodeIcon(l._def,l),a.css("backgroundColor",v),(r=RED.utils.getDarkerColor(v))!==v&&a.css("border-color",r),d=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(a),RED.utils.createIconElement(s,d,!0),i.on("click",function(e){e.preventDefault();var e=$("#red-ui-editor-node-icon").val()||"",e=e?RED.utils.separateIconPath(e):RED.utils.getDefaultNodeIcon(l._def,l),t=RED.utils.getNodeColor(l.type,l._def);"subflow"===l.type&&(t=$("#red-ui-editor-node-color").val()),RED.editor.iconPicker.show(i,t,e,!1,function(e){$("#red-ui-editor-node-icon").val(e||"");e=RED.utils.getNodeIcon(l._def,{type:l.type,icon:e});RED.utils.createIconElement(e,d,!0)})}),RED.popover.tooltip(i,function(){return $("#red-ui-editor-node-icon").val()||RED._("editor.default")}),$('<input type="hidden" id="red-ui-editor-node-icon">').val(l.icon).appendTo(n)),$('<div class="form-row"><span data-i18n="editor.portLabels"></span></div>').appendTo(e),l.inputs||l._def.inputs||0),u=l.outputs||l._def.outputs||0,p=("subflow"===l.type&&(c=l.in.length,u=l.out.length),l.inputLabels||[]),f=l.outputLabels||[],h=l._def.inputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),g=l._def.outputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),m=($('<div class="form-row"><span style="margin-left: 50px;" data-i18n="editor.labelInputs"></span><div id="red-ui-editor-node-label-form-inputs"></div></div>').appendTo(e),$("#red-ui-editor-node-label-form-inputs"));if(0<c)for(t=0;t<c;t++)w("input",t,p[t],h).appendTo(m);else w().appendTo(m);$('<div class="form-row"><span style="margin-left: 50px;" data-i18n="editor.labelOutputs"></span><div id="red-ui-editor-node-label-form-outputs"></div></div>').appendTo(e);var v,b=$("#red-ui-editor-node-label-form-outputs");if(0<u)for(t=0;t<u;t++)w("output",t,f[t],g).appendTo(b);else w().appendTo(b);"subflow"===y.type?this.defaultIcon="node-red/subflow.svg":(v=RED.utils.getDefaultNodeIcon(y._def,y),this.defaultIcon=v.module+"/"+v.file,y.icon&&y.icon!==this.defaultIcon?this.isDefaultIcon=!1:this.isDefaultIcon=!0)},resize:function(e){},close:function(){},show:function(){this.content;var e,t=y,o=t._def.inputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),n=t._def.outputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),i=$("#red-ui-editor-node-label-form-inputs"),a=$("#red-ui-editor-node-label-form-outputs"),s=$("#node-input-inputs").val();void 0===s?e="subflow"===t.type?t.in.length:t.inputs||t._def.inputs||0:(e=Math.min(1,Math.max(0,parseInt(s))),isNaN(e)&&(e=0));var r,d,l,c,u=i.children(),p=u.length;if(1===p&&$(u[0]).hasClass("red-ui-editor-node-label-form-none")&&p--,p<e)for(0===p&&$(u[0]).remove(),d=p;d<e;d++)w("input",d,"",o).appendTo(i);else if(e<p){for(d=e;d<p;d++)$(u[d]).remove();0===e&&w().appendTo(i)}if(void 0===(s=$("#node-input-outputs").val())?"subflow"===t.type?r=t.out.length:e=t.outputs||t._def.outputs||0:isNaN(s)?(l=JSON.parse(s),t=Object.keys(l),u=a.children(),1===(p=u.length)&&$(u[0]).hasClass("red-ui-editor-node-label-form-none")&&p--,r=0,c=[],t.forEach(function(e){var t=$("#red-ui-editor-node-label-form-output-"+e).parent();0===t.length&&-1!==l[e]?(0===p&&($(u[0]).remove(),p=-1),t=w("output",e,"",n)):t.detach(),-1!==l[e]&&(r++,c.push({i:parseInt(l[e]),r:t}))}),c.sort(function(e,t){return e.i-t.i}),c.forEach(function(e,t){e.r.find("label").text(t+1+"."),e.r.appendTo(a)}),0===c.length&&w("output",d,"").appendTo(a)):r=Math.max(0,parseInt(s)),u=a.children(),1===(p=u.length)&&$(u[0]).hasClass("red-ui-editor-node-label-form-none")&&p--,p<r)for(0===p&&$(u[0]).remove(),d=p;d<r;d++)w("output",d,"").appendTo(a);else if(r<p){for(d=r;d<p;d++)$(u[d]).remove();0===r&&w().appendTo(a)}},apply:function(e){!function(o,e,n){var t=$("#red-ui-editor-node-label-form-inputs").children().find("input"),i=$("#red-ui-editor-node-label-form-outputs").children().find("input"),a=!1,s=!1,r=t.map(function(){var e=$(this).val();return a=a||""!==e,e}).toArray().slice(0,o.inputs);(void 0===o.inputLabels&&a||void 0!==o.inputLabels&&JSON.stringify(r)!==JSON.stringify(o.inputLabels))&&(e.inputLabels=o.inputLabels,o.inputLabels=r,s=!0);a=!1,r=new Array(o.outputs),i.each(function(){var e,t=$(this).attr("id").substring("red-ui-editor-node-label-form-output-".length);n&&n.hasOwnProperty(t)&&-1===(t=parseInt(n[t]))||(e=$(this).val(),a=a||""!==e,"subflow"!==o.type||o.outputLabels&&o.outputLabels[t]===e||(o.out[t].dirty=!0),r[t]=e)}),(void 0===o.outputLabels&&a||void 0!==o.outputLabels&&JSON.stringify(r)!==JSON.stringify(o.outputLabels))&&(e.outputLabels=o.outputLabels,o.outputLabels=r,s=!0,"subflow"===o.type)&&RED.view.redraw();return s}(y,e.changes,e.outputMap)||(e.changed=!0),y._def.defaults&&y._def.defaults.hasOwnProperty("icon")||(t=$("#red-ui-editor-node-icon").val()||"",this.isDefaultIcon?""!==t&&t!==this.defaultIcon?(e.changes.icon=y.icon,y.icon=t,e.changed=!0):(o=(o=RED.utils.getDefaultNodeIcon(y._def,y)).module+"/"+o.file,this.defaultIcon!==o&&(e.changes.icon=y.icon,y.icon=o,e.changed=!0)):(y.icon&&t!==y.icon||!y.icon&&""!==t)&&(e.changes.icon=y.icon,y.icon=t,e.changed=!0)),"subflow"===y.type&&((o="subflows"===(o="_custom_"===(o=$("#subflow-appearance-input-category").val().trim())&&""===(o=$("#subflow-appearance-input-custom-category").val().trim())?y.category:o)?"":o)!=y.category&&(e.changes.category=y.category,y.category=o,e.changed=!0),y.color!==(t=$("#red-ui-editor-node-color").val()))&&(e.changes.color=y.color,y.color=t,e.changed=!0,RED.utils.clearNodeColorCache(),"subflow"===y.type)&&(RED.nodes.getType("subflow:"+y.id).color=t);var t,o=!y._def.hasOwnProperty("showLabel")||y._def.showLabel;$("#node-input-show-label").prop("checked")?o?(y.hasOwnProperty("l")&&!y.l&&(e.changes.l=y.l,e.changed=!0),delete y.l):(y.l||(e.changes.l=y.l,e.changed=!0),y.l=!0):o?(!1!==y.l&&(e.changes.l=y.l,e.changed=!0),y.l=!1):(y.hasOwnProperty("l")&&y.l&&(e.changes.l=y.l,e.changed=!0),delete y.l)}}})}(),RED.editor.registerEditPane("editor-tab-description",function(n){return{label:RED._("editor-tab.description"),name:RED._("editor-tab.description"),iconClass:"fa fa-file-text-o",create:function(e){var t,o;this.editor=(e=e,t=n,e=$('<form class="dialog-form form-horizontal" autocomplete="off"></form>').appendTo(e),$("<div></div>").appendTo(e),e=$('<div class="form-row node-text-editor-row" style="position:relative; padding-top: 4px; height: 100%"></div>').appendTo(e),o="node-info-input-info-editor-"+Math.floor(1e3*Math.random()),$('<div style="height: 100%" class="node-text-editor" id="'+o+'" ></div>').appendTo(e),e=RED.editor.createEditor({id:o,mode:"ace/mode/markdown",stateId:RED.editor.generateViewStateId("node",t,"nodeinfo"),value:t.info||""}),t.infoEditor=e)},resize:function(e){this.editor.resize()},close:function(){this.editor.destroy(),this.editor=null},show:function(){this.editor.focus()},apply:function(e){var t=n.info,o=this.editor.getValue();t?""===o.trim()?(e.changed=!0,e.changes.info=t,delete n.info):o!==t&&(e.changed=!0,e.changes.info=t,n.info=o):""!==o.trim()&&(e.changed=!0,e.changes.info=void 0,n.info=o)}}}),RED.editor.registerEditPane("editor-tab-envProperties",function(i){return{label:RED._("editor-tab.envProperties"),name:RED._("editor-tab.envProperties"),iconClass:"fa fa-list",create:function(e){e=$('<form class="dialog-form form-horizontal"></form>').appendTo(e),e=$('<div class="form-row node-input-env-container-row"></div>').appendTo(e);this.list=$("<ol></ol>").appendTo(e),RED.editor.envVarList.create(this.list,i)},resize:function(e){this.list.editableList("height",e.height)},close:function(){},apply:function(t){var e,o=i.env,n=[];/^subflow:/.test(i.type)&&(n=RED.subflow.exportSubflowInstanceEnv(i)),o&&o.length&&o.forEach(function(t){var e;"conf-type"===t.type&&t.value&&!n?.some(e=>"conf-type"===e.type&&e.name===t.name&&e.value===t.value)&&(e=RED.nodes.node(t.value))&&-1!==e.users.indexOf(i)&&(e.users.splice(e.users.indexOf(i),1),RED.events.emit("nodes:change",e))}),this.list.editableList("items").each(function(e,t){var t=t.data("data");t.nameField&&t.valueField&&""!==(t={name:t.nameField.val(),value:t.valueField.typedInput("value"),type:t.valueField.typedInput("type")}).name.trim()&&n.push(t)}),n&&0<n.length&&n.forEach(function(e){"cred"===e.type?(i.credentials=i.credentials||{_:{}},i.credentials[e.name]=e.value,i.credentials["has_"+e.name]=""!==e.value,"__PWRD__"!==e.value&&(t.changed=!0),delete e.value):"conf-type"===e.type&&e.value&&(e=RED.nodes.node(e.value))&&-1===e.users.indexOf(i)&&(e.users.push(i),RED.events.emit("nodes:change",e))}),o||0!==n.length?(e=n,JSON.stringify(o)!==JSON.stringify(e)&&(t.changes.env=i.env,0===n.length?delete i.env:i.env=n,t.changed=!0)):delete i.env}}}),RED.editor.registerEditPane("editor-tab-flow-properties",function(o){return{label:RED._("editor-tab.properties"),name:RED._("editor-tab.properties"),iconClass:"fa fa-cog",create:function(e){e=$('<form id="dialog-form" class="form-horizontal"></form>').appendTo(e);$('<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" data-i18n="[placeholder]common.label.name"></div>').appendTo(e),$('<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:150px;" class="node-text-editor" id="node-input-info"></div></div>').appendTo(e);this.tabflowEditor=RED.editor.createEditor({id:"node-input-info",mode:"ace/mode/markdown",value:""}),$('<input type="text" style="display: none;" />').prependTo(e),e.on("submit",function(e){e.preventDefault()}),$("#node-input-name").val(o.label),RED.text.bidi.prepareInput($("#node-input-name")),this.tabflowEditor.getSession().setValue(o.info||"",-1)},resize:function(e){$("#node-input-info").css("height",e.height-70+"px"),this.tabflowEditor.resize()},close:function(){this.tabflowEditor.destroy()},apply:function(e){var t=$("#node-input-name").val(),t=(o.label!=t&&(e.changes.label=o.label,e.changed=!0,o.label=t),this.tabflowEditor.getValue());o.info!==t&&(e.changes.info=o.info,e.changed=!0,o.info=t),$("#red-ui-tab-"+o.id.replace(".","-")).toggleClass("red-ui-workspace-disabled",!!o.disabled)}}}),RED.editor.registerEditPane("editor-tab-properties",function(d){return{label:RED._("editor-tab.properties"),name:RED._("editor-tab.properties"),iconClass:"fa fa-cog",create:function(e){var t,o=d.type,n=("subflow"===d.type?o="subflow-template":"subflow:"==d.type.substring(0,8)&&(o="subflow"),t="node-red"===d._def.set.module?"node-red":d._def.set.id,"dialog-form");this.inputClass="node-input","config"===d._def.category&&"group"!==o&&(this.inputClass="node-config-input",n="node-config-dialog-edit-form"),RED.editor.buildEditForm(e,n,o,t,d)},resize:function(e){if(d&&d._def.oneditresize)try{d._def.oneditresize.call(d,e)}catch(e){console.log("oneditresize",d.id,d.type,e.toString())}},close:function(){},apply:function(t){var e,o,n;if(d._def.defaults)for(o in d._def.defaults)if(d._def.defaults.hasOwnProperty(o)){var i,a,s,r=$("#"+this.inputClass+"-"+o);if("checkbox"===r.attr("type")?e=r.prop("checked"):"select"===r.prop("nodeName")&&"multiple"===r.attr("multiple")?null==(e=r.val())&&(e=[]):e="format"in d._def.defaults[o]&&""!==d._def.defaults[o].format&&"DIV"===r[0].nodeName?r.text():r.val(),null!=e){if("outputs"===o){if(""===e.trim())continue;isNaN(e)?(t.outputMap=JSON.parse(e),i=0,a=!1,Object.keys(t.outputMap).forEach(function(e){isNaN(e)?(i++,delete t.outputMap[e]):(t.outputMap[e]=t.outputMap[e]+"","-1"===t.outputMap[e]||(i++,t.outputMap[e]!==e)?a=!0:delete t.outputMap[e])}),e=i,a&&(t.changed=!0)):e=parseInt(e)}d._def.defaults[o].type&&"_ADD_"==e&&(e=""),!function(e,t){try{return e==t?1:JSON.stringify(e)===JSON.stringify(t)}catch(e){}}(d[o],e)&&(d._def.defaults[o].type&&((r=RED.nodes.node(d[o]))&&((s=r.users).splice(s.indexOf(d),1),RED.events.emit("nodes:change",r)),r=RED.nodes.node(e))&&(r.users.push(d),RED.events.emit("nodes:change",r)),t.changes[o]=d[o],d[o]=e,t.changed=!0)}}d._def.credentials&&(n=d._def.credentials,n=function(e,t,o){var n={};e.credentials?e.credentials._||(e.credentials._={}):e.credentials={_:{}};for(var i in t){var a;t.hasOwnProperty(i)&&0<(a=$("#"+o+"-"+i)).length&&(a=a.val(),"password"==t[i].type?("__PWRD__"===a||""===a&&!1===e.credentials["has_"+i]||a!==e.credentials[i]&&(n["has_"+i]=e.credentials["has_"+i],n[i]=e.credentials[i],e.credentials[i]=a),e.credentials["has_"+i]=""!==a):a!==e.credentials[i]&&(n[i]=e.credentials[i],e.credentials[i]=a))}return n}(d,n,this.inputClass),Object.keys(n).length)&&(t.changed=!0,t.changes.credentials={...t.changes.credentials||{},...n})}}}),function(){function n(t,o){var n;t.on("change keyup paste",function(){n=n||setTimeout(function(){var e=o(t.val());t.toggleClass("input-error",!!e),n=null})})}RED.editor.registerEditPane("editor-tab-subflow-module",function(i){return{label:RED._("editor-tab.module"),name:RED._("editor-tab.module"),iconClass:"fa fa-cube",create:function(e){var t=i,o=($('<form class="dialog-form form-horizontal" autocomplete="off"><div class="form-row"><label for="subflow-input-module-module" data-i18n="[append]editor:subflow.module"><i class="fa fa-cube"></i> </label><input style="width: calc(100% - 110px)" type="text" id="subflow-input-module-module" data-i18n="[placeholder]common.label.name"></div><div class="form-row"><label for="subflow-input-module-type" data-i18n="[append]editor:subflow.type"> </label><input style="width: calc(100% - 110px)" type="text" id="subflow-input-module-type"></div><div class="form-row"><label for="subflow-input-module-version" data-i18n="[append]editor:subflow.version"></label><input style="width: calc(100% - 110px)" type="text" id="subflow-input-module-version" data-i18n="[placeholder]editor:subflow.versionPlaceholder"></div><div class="form-row"><label for="subflow-input-module-desc" data-i18n="[append]editor:subflow.desc"></label><input style="width: calc(100% - 110px)" type="text" id="subflow-input-module-desc"></div><div class="form-row"><label for="subflow-input-module-license" data-i18n="[append]editor:subflow.license"></label><input style="width: calc(100% - 110px)" type="text" id="subflow-input-module-license"></div><div class="form-row"><label for="subflow-input-module-author" data-i18n="[append]editor:subflow.author"></label><input style="width: calc(100% - 110px)" type="text" id="subflow-input-module-author" data-i18n="[placeholder]editor:subflow.authorPlaceholder"></div><div class="form-row"><label for="subflow-input-module-keywords" data-i18n="[append]editor:subflow.keys"></label><input style="width: calc(100% - 110px)" type="text" id="subflow-input-module-keywords" data-i18n="[placeholder]editor:subflow.keysPlaceholder"></div></form>').appendTo(e),t.meta||{});["module","type","version","author","desc","keywords","license"].forEach(function(e){$("#subflow-input-module-"+e).val(o[e]||"")}),$("#subflow-input-module-type").attr("placeholder",t.id),n($("#subflow-input-module-module"),function(e){var t=(e=e.trim()).length<215;return t=(t=t&&!/^[._]/.test(e))&&!/[A-Z]/.test(e),(t=e!==encodeURIComponent(e)?!!(e=/^@([^\/]+)\/([^\/]+)$/.exec(e))&&t&&e[1]===encodeURIComponent(e[1])&&e[2]===encodeURIComponent(e[2]):t)?"":"Invalid module name"}),n($("#subflow-input-module-version"),function(e){return""===(e=e.trim())||/^(\d|[1-9]\d*)\.(\d|[1-9]\d*)\.(\d|[1-9]\d*)(-(0|[1-9A-Za-z-][0-9A-Za-z-]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(\.(0|[1-9A-Za-z-][0-9A-Za-z-]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$/.test(e)?"":"Invalid version number"}),(t={types:(e=["none","Apache-2.0","BSD-3-Clause","BSD-2-Clause","GPL-2.0","GPL-3.0","MIT","MPL-2.0","CDDL-1.0","EPL-2.0"]).map(function(e){return{value:e,label:"none"===e?RED._("editor:subflow.licenseNone"):e,hasValue:!1}})}).types.push({value:"_custom_",label:RED._("editor:subflow.licenseOther"),icon:"red/images/typedInput/az.svg"}),o.license?-1<e.indexOf(o.license)?t.default=o.license:t.default="_custom_":t.default="none",$("#subflow-input-module-license").typedInput(t)},resize:function(e){},close:function(){},apply:function(e){var t,o,n=function(){var t,o={},e=(["module","type","version","author","desc","keywords"].forEach(function(e){(t=$("#subflow-input-module-"+e).val().trim())&&(o[e]=t)}),$("#subflow-input-module-license").typedInput("type"));"_custom_"===e?(t=$("#subflow-input-module-license").val())&&(o.license=t):"none"!==e&&(o.license=e);return o}();t=i.meta,o=n,JSON.stringify(t)!==JSON.stringify(o)&&(e.changes.meta=i.meta,i.meta=n,e.changed=!0)}}})}(),RED.editor.registerTypeEditor("_buffer",{show:function(i){var r,a,s=i.value,e=i.cancel,t=i.complete,d=(0===$("script[data-template-name='_buffer']").length&&$('<script type="text/x-red" data-template-name="_buffer"><div id="red-ui-editor-type-buffer-panels"><div id="red-ui-editor-type-buffer-panel-str" class="red-ui-panel"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><button class="red-ui-editor-type-buffer-type red-ui-button red-ui-button-small"><i class="fa fa-exclamation-circle"></i> <span id="red-ui-editor-type-buffer-type-string" data-i18n="bufferEditor.modeString"></span><span id="red-ui-editor-type-buffer-type-array" data-i18n="bufferEditor.modeArray"></span></button></div><div class="form-row node-text-editor-row"><div class="node-text-editor" id="red-ui-editor-type-buffer-str"></div></div></div><div id="red-ui-editor-type-buffer-panel-bin" class="red-ui-panel"><div class="form-row node-text-editor-row" style="margin-top: 10px; margin-bottom:0;"><div class="node-text-editor" id="red-ui-editor-type-buffer-bin"></div></div></div></div><\/script>').appendTo("#red-ui-editor-node-configs"),RED.view.state(RED.state.EDITING),[]),o={title:i.title,focusElement:i.focusElement,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){e&&e(),RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){d.saveView(),t&&t(JSON.stringify(r),null,d),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").height();a&&a.resize(t)},open:function(e){function n(e){for(var t=!0,o="string"==typeof e,n=[],i=0,a=(r=o?function(e){for(var t=[],o=0,n=e.length,o=0;o<n;o++){var i=e.charCodeAt(o);i<128?t.push(i):(i<2048?t.push(192|i>>6):(i<55296||57344<=i?t.push(224|i>>12):(o++,i=65536+((1023&i)<<10|1023&e.charAt(o)),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).length,i=0;i<a;i++){var s=parseInt(Number(r[i]));if(!o&&(isNaN(s)||s<0||255<s)){t=!1;break}0<i&&n.push(i%8==0?i%16==0?"\n":" ":" "),n.push((s<16?"0":"")+s.toString(16).toUpperCase())}return t&&($("#red-ui-editor-type-buffer-type-string").toggle(o),$("#red-ui-editor-type-buffer-type-array").toggle(!o),bufferBinEditor.setValue(n.join(""),1)),t}function t(){var e=d.getValue(),t=!1;if(/^[\s]*\[[\s\S]*\][\s]*$/.test(e)){t=!0;try{var o=JSON.parse(e),t=n(o)}catch(e){t=!1}}t||n(e)}var o,e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_buffer","editor");d=RED.editor.createEditor({id:"red-ui-editor-type-buffer-str",value:s||"",stateId:RED.editor.generateViewStateId("buffer",i,""),focus:!0,mode:"ace/mode/text"}),bufferBinEditor=RED.editor.createEditor({id:"red-ui-editor-type-buffer-bin",value:"",stateId:!1,focus:!1,mode:"ace/mode/text",readOnly:!0});d.getSession().on("change",function(){clearTimeout(o),o=setTimeout(t,200)}),t(),e.i18n(),a=RED.panels.create({id:"red-ui-editor-type-buffer-panels",resize:function(e,t){var o=$("#red-ui-editor-type-buffer-panel-str"),o=(e-=$(o.children()[0]).outerHeight(!0),$(o.children()[1])),e=(e-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#red-ui-editor-type-buffer-str").css("height",e-5+"px"),d.resize(),$("#red-ui-editor-type-buffer-panel-bin")),o=$(e.children()[0]);t-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#red-ui-editor-type-buffer-bin").css("height",t-5+"px"),bufferBinEditor.resize()}}),$(".red-ui-editor-type-buffer-type").on("click",function(e){e.preventDefault(),RED.sidebar.help.set(RED._("bufferEditor.modeDesc"))})},close:function(){i.onclose&&i.onclose(),d.destroy(),bufferBinEditor.destroy()},show:function(){}};RED.tray.show(o)}}),RED.editor.codeEditor=function(){const o="monaco",n=o,e={lib:n,options:{}};var i=null,a=!1;return{init:function(){var t=RED.editor.codeEditor.settings.lib===o?o:"ace";try{var e=RED.utils.getBrowserInfo();(i=RED.editor.codeEditor[t])&&(t!=o||!e.ie&&window.monaco)||(i=RED.editor.codeEditor[n]),a=i.init()}catch(e){i=null,console.warn("Problem initialising '"+t+"' code editor",e)}a||(i=RED.editor.codeEditor[n],a=i.init()),$('<div id="red-ui-image-drop-target"><div data-i18n="[append]workspace.dropImageHere"><i class="fa fa-download"></i><br></div></div>').appendTo("#red-ui-editor"),$("#red-ui-image-drop-target").hide()},get settings(){return RED.settings.get("codeEditor")||e},get editor(){return i},create:function(e){e||(console.warn("createEditor() options are missing"),e={});var t=null,t=(this.editor.type===o&&(e.element||e.id||(e.id="node-backwards-compatability-dummy-editor"),e.element=e.element||$("#"+e.id)[0],e.element||(console.warn("createEditor() options.element or options.id is not valid",e),$("#dialog-form").append('<div id="'+e.id+'" style="display: none;" />'))),this.editor.create(e));return"ace/mode/markdown"===e.mode&&RED.editor.customEditTypes._markdown.postInit(t,e),t}}}(),RED.editor.colorPicker=RED.colorPicker={create:function(c){function u(e){var t,o;"none"===e?(i.addClass("red-ui-color-picker-cell-none").css({"background-color":"",opacity:1}),n.css({"border-color":""})):(t=parseFloat(b.val()),i.removeClass("red-ui-color-picker-cell-none").css({"background-color":e,opacity:t}),"#"===(o=RED.utils.getDarkerColor(e))[0]?o+=Math.round(255*Math.floor(100*t)/100).toString(16):o="",n.css({"border-color":o})),c.hasOwnProperty("opacity")&&$(".red-ui-color-picker-opacity-slider-overlay").css({"background-image":"linear-gradient(90deg, transparent 0%, "+e+" 100%)"})}var e=c.value,t=c.id,p=c.palette||[],f=c.cellWidth||30,h=c.cellHeight||30,g=c.cellMargin||2,m=c.cellPerRow||6,o=$("<div>",{style:"display:inline-block"}),v=$("<input/>",{id:t,type:"hidden",value:e}).appendTo(o),b=$("<input/>",{id:t+"-opacity",type:"hidden",value:c.hasOwnProperty("opacity")?c.opacity:"1"}).appendTo(o),y=$('<button type="button" class="red-ui-button red-ui-editor-node-appearance-button">').appendTo(o),n=($('<i class="fa fa-caret-down"></i>').appendTo(y),$("<div>",{class:"red-ui-search-result-node"}).appendTo(y)),i=($("<div>",{class:"red-ui-color-picker-cell-none"}).appendTo(n),$("<div>",{class:"red-ui-color-picker-swatch"}).appendTo(n));return y.on("click",function(e){var t,o,n,i=p.length,a=$("<div/>",{class:"red-ui-color-picker"}).css({width:(f+g+g)*m+"px",height:Math.ceil(i/m)*(h+g+g)+"+px"}),s=0,r=null,d=(r=$("<div/>").appendTo(a),$("<input>",{type:"text",value:v.val()}).appendTo(r)),i=d,l=(d.on("change",function(e){var t=d.val();c.defaultValue&&!t.match(/^([a-z]+|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3})$/)&&(t=c.defaultValue),v.val(t).trigger("change"),u(t)}),c.none&&(r=$("<div/>").appendTo(a),$("<button/>",{class:"red-ui-color-picker-cell red-ui-color-picker-cell-none"}).css({width:f+"px",height:h+"px",margin:g+"px"}).appendTo(r).on("click",function(e){e.preventDefault(),d.val("none"),d.trigger("change")})),p.forEach(function(t){s%m==0&&(r=$("<div/>").appendTo(a)),$("<button/>",{class:"red-ui-color-picker-cell"}).css({width:f+"px",height:h+"px",margin:g+"px",backgroundColor:t,"border-color":RED.utils.getDarkerColor(t)}).appendTo(r).on("click",function(e){e.preventDefault(),d.val(t),d.trigger("change")}),s++}),(c.none||c.hasOwnProperty("opacity"))&&(r=$("<div/>").appendTo(a),c.hasOwnProperty("opacity"))&&((t=$("<div>",{class:"red-ui-color-picker-opacity-slider"}).appendTo(r)).on("mousedown",function(e){e.target!==o[0]&&(e=e.offsetX/t.width(),o.css({left:e*(t.width()-o.outerWidth())+"px"}),e=Math.floor(100*e),b.val(e/100),n.text(e+"%"),u(v.val()))}),$("<div>",{class:"red-ui-color-picker-opacity-slider-overlay"}).appendTo(t),o=$("<div>",{class:"red-ui-color-picker-opacity-slider-handle red-ui-button red-ui-button-small"}).appendTo(t).draggable({containment:"parent",axis:"x",drag:function(e,t){t=Math.max(0,t.position.left/($(this).parent().width()-$(this).outerWidth())),t=Math.floor(100*t);b.val((t=99===t?100:t)/100),n.text(t+"%"),u(v.val())}}),n=$("<small></small>").appendTo(r),setTimeout(function(){o.css({left:parseFloat(b.val())*(t.width()-o.outerWidth())+"px"}),n.text(Math.floor(100*b.val())+"%")},50)),RED.popover.panel(a));setTimeout(function(){u(v.val())},50),l.show({target:y,onclose:function(){y.focus()}}),i&&i.focus()}),setTimeout(function(){u(v.val())},50),o}},RED.editor.envVarList=function(){var D="en-US";const R=["str","num","bool","json","bin","env"],x=["str","num","bool","json","bin","env","conf-types"],_=["str","num","bool","json","bin","env","cred","jsonata"];function k(e,t,o){if(e){if(e[o])return e[o];if(o){o=o.substring(0,2);if(e[o])return e[o]}}return t}return{create:function(y,w){RED.editor.envVarList.debug&&console.log("envVarList: buildPropertiesList",y,w);const E="subflow"===w.type;y.css({"min-height":"150px","min-width":"450px"}).editableList({header:E?$('<div><div><div></div><div data-i18n="common.label.name"></div><div data-i18n="editor-tab.defaultValue"></div><div></div></div></div>'):void 0,addItem:function(t,e,o){E&&t.addClass("red-ui-editor-subflow-env-editable");var n=$("<div/>").appendTo(t),i=null,a=null,i=$("<input/>",{class:"node-input-env-name",type:"text",placeholder:RED._("common.label.name")}).attr("autocomplete","disable").appendTo(n).val(o.name),a=$("<input/>",{style:"width:100%",class:"node-input-env-value",type:"text"}).attr("autocomplete","disable").appendTo(n),s=(s=o.ui&&o.ui.opts&&o.ui.opts.types)||(E?R:_),s=(a.typedInput({default:"str",types:s}),a.typedInput("type",o.type),"cred"!==o.type||o.value?a.typedInput("value",o.value):w.credentials&&w.credentials[o.name]?a.typedInput("value",w.credentials[o.name]):w.credentials&&w.credentials["has_"+o.name]?a.typedInput("value","__PWRD__"):a.typedInput("value",""),o.nameField=i,o.valueField=a,$("<a/>",{href:"#",class:"red-ui-editableList-item-remove red-ui-button red-ui-button-small"}).appendTo(n)),r=($("<i/>",{class:"fa "+(o.parent?"fa-reply":"fa-remove")}).appendTo(s),RED.popover.tooltip(s,RED._("subflow.env.remove")));if(s.on("click",function(e){e.preventDefault(),r.close(),t.parent().addClass("red-ui-editableList-item-deleting"),t.fadeOut(300,function(){y.editableList("removeItem",o)})}),E){"conf-types"===o.type?(o.ui=o.ui||{icon:"fa fa-cog",type:"conf-types",opts:{opts:[]}},o.ui.type="conf-types"):"cred"===o.type?(o.ui=o.ui||{icon:"",type:"cred"},o.ui.type="cred"):o.ui=o.ui||{icon:"",type:"input",opts:{types:R}},o.ui.label=o.ui.label||{},o.ui.type=o.ui.type||"input","cred"===o.ui.type&&o.ui.opts&&o.ui.opts.types&&(o.ui.type="input");var d=$("<div/>").appendTo(t).hide();$('<a href="#"><i class="fa fa-angle-right"></a>').prependTo(n).on("click",function(e){e.preventDefault(),$(this).hasClass("expanded")?(d.slideUp(),$(this).removeClass("expanded")):(d.slideDown(),$(this).addClass("expanded"))});{s=d;var l=o;n=i;var c=a;const b=l.ui;RED.editor.envVarList.debug&&console.log("envVarList: buildEnvEditRow",s,b,n,c);s.addClass("red-ui-editor-subflow-env-ui-row");var a=$("<div></div>").appendTo(s),a=($("<div></div>").appendTo(a),$("<div>").text(RED._("editor.icon")).appendTo(a),$("<div>").text(RED._("editor.label")).appendTo(a),$('<div class="red-env-ui-input-type-col">').text(RED._("editor.inputType")).appendTo(a),$("<div></div>").appendTo(s)),u=($('<div><i class="red-ui-editableList-item-handle fa fa-bars"></i></div>').appendTo(a),{input:{types:x},select:{opts:[]},spinner:{},cred:{}});b.opts?u[b.type]=b.opts:b.opts=u[b.type];var s=$("<div></div>").appendTo(a),p=$('<a href="#"></a>').appendTo(s);p.on("click",function(e){e.preventDefault();e=b.icon||"",e=e?RED.utils.separateIconPath(e):{};RED.editor.iconPicker.show(p,null,e,!0,function(e){p.empty();var e=e||"",t=RED.utils.separateIconPath(e);t&&$('<i class="fa"></i>').addClass(t.file).appendTo(p),b.icon=e})}),b.icon&&(s=RED.utils.separateIconPath(b.icon),$('<i class="fa '+s.file+'"></i>').appendTo(p));var f,h,s=$("<div></div>").appendTo(a),g=b.label&&b.label[D]||"",m=$('<input type="text">').val(g).appendTo(s),g=((b.labelField=m).on("change",function(e){b.label=b.label||{};var t=$(this).val().trim();""===t?delete b.label[D]:b.label[D]=t}),$('<span class="red-ui-editor-subflow-env-lang-icon"><i class="fa fa-language"></i></span>').appendTo(s)),s=(RED.popover.tooltip(g,function(){var e=Object.keys(b.label),o=$("<div>");return-1===e.indexOf(D)&&(e.push(D),e.sort()),e.forEach(function(e){var t=$("<div>").appendTo(o);$("<span>").css({display:"inline-block",width:"120px"}).text(RED._("languages."+e)+(e===D?"*":"")).appendTo(t),$("<span>").text(b.label[e]||"").appendTo(t)}),o}),n.on("change",function(e){m.attr("placeholder",$(this).val())}),$('<div class="red-env-ui-input-type-col"></div>').appendTo(a)),v=$('<input type="text">').css("width","100%").appendTo(s);"input"===b.type&&v.val(b.opts.types.join(","));v.typedInput({types:[{value:"input",label:RED._("editor.inputs.input"),icon:"fa fa-i-cursor",showLabel:!1,multiple:!0,options:[{value:"str",label:RED._("editor.types.str"),icon:"red/images/typedInput/az.svg"},{value:"num",label:RED._("editor.types.num"),icon:"red/images/typedInput/09.svg"},{value:"bool",label:RED._("editor.types.bool"),icon:"red/images/typedInput/bool.svg"},{value:"json",label:RED._("editor.types.json"),icon:"red/images/typedInput/json.svg"},{value:"bin",label:RED._("editor.types.bin"),icon:"red/images/typedInput/bin.svg"},{value:"env",label:RED._("editor.types.env"),icon:"red/images/typedInput/env.svg"},{value:"cred",label:RED._("editor.types.cred"),icon:"fa fa-lock"}],default:R,valueLabel:function(e,t){e.css("padding",0);var e=$('<div class="red-ui-editor-subflow-env-input-type"></div>').appendTo(e),o=$('<div class="placeholder-input">').appendTo(e);$('<span><i class="fa fa-i-cursor"></i></span>').appendTo(o),t.length?t.forEach(function(e){var t;/^fa /.test(e.icon)?(t=$("<span>",{style:"max-width:14px; padding: 0 3px; margin-top:-4px; margin-left: 1px"}).appendTo(o),$("<i>",{class:e.icon}).appendTo(t)):$("<img>",{src:e.icon,style:"max-width:14px; padding: 0 3px; margin-top:-4px; margin-left: 1px"}).appendTo(o)}):$('<span class="red-ui-editor-subflow-env-input-type-placeholder"></span>').text(RED._("editor.selectType")).appendTo(o)}},{value:"cred",label:RED._("typedInput.type.cred"),icon:"fa fa-lock",showLabel:!1,valueLabel:function(e,t){e.css("padding",0);e=$('<div class="red-ui-editor-subflow-env-input-type">').css({"border-top-right-radius":"4px","border-bottom-right-radius":"4px"}).appendTo(e);$('<div class="placeholder-input">').html("&bull;&bull;&bull;&bull;&bull;&bull;&bull;&bull;").appendTo(e)}},{value:"select",label:RED._("editor.inputs.select"),icon:"fa fa-tasks",showLabel:!1,valueLabel:function(e,t){e.css("padding","0"),h=$("<select></select>").appendTo(e),b.opts&&Array.isArray(b.opts.opts)&&b.opts.opts.forEach(function(e){var t=k(e.l,e.l["en-US"]||e.v,D);$("<option>").val(e.v).text(t).appendTo(h)}),h.on("change",function(e){var t=h.val();c.typedInput("value",t)}),h.val(c.typedInput("value"))},expand:{icon:"fa-caret-down",minWidth:400,content:function(e){var e=$('<div class="red-ui-editor-subflow-ui-edit-panel">').appendTo(e),a=$("<ol>").appendTo(e).editableList({header:$("<div><div>"+RED._("editor.select.label")+"</div><div>"+RED._("editor.select.value")+"</div></div>"),addItem:function(e,t,n){var o=$("<div>").appendTo(e),i=k(n.l,"",D),i=(n.label=$('<input type="text">').val(i).appendTo(o),n.label.on("keydown",function(e){13===e.keyCode&&(n.input.focus(),e.preventDefault())}),$('<span class="red-ui-editor-subflow-env-lang-icon"><i class="fa fa-language"></i></span>').appendTo(o));RED.popover.tooltip(i,function(){return D}),n.input=$('<input type="text">').val(n.v).appendTo(e),n.input.on("keydown",function(e){var t,o;13===e.keyCode&&((o=a.editableList("indexOf",n))+1===a.editableList("length")?(t={},a.editableList("addItem",t),setTimeout(function(){t.label&&t.label.focus()},100)):(o=a.editableList("getItemAt",o+1)).label&&o.label.focus(),e.preventDefault())})},sortable:!0,removable:!0,height:160});return 0<b.opts.opts.length?b.opts.opts.forEach(function(e){a.editableList("addItem",$.extend(!0,{},e))}):a.editableList("addItem",{}),{onclose:function(){var e=a.editableList("items"),i=[];e.each(function(e,t){var t=t.data("data"),o=t.label.val().trim(),n=t.input.val();0<o.length&&(t.l=t.l||{},t.l[D]=o),t.v=n,(0<o.length||0<n.length)&&(o={l:t.l,v:t.v},i.push(o))}),b.opts.opts=i,v.typedInput("value",Date.now())}}}}},{value:"checkbox",label:RED._("editor.inputs.checkbox"),icon:"fa fa-check-square-o",showLabel:!1,valueLabel:function(e,t){e.css("padding",0),(f=$('<input type="checkbox">').appendTo(e)).on("change",function(e){c.typedInput("value",$(this).prop("checked")?"true":"false")}),f.prop("checked","true"===c.typedInput("value"))}},{value:"spinner",label:RED._("editor.inputs.spinner"),icon:"fa fa-sort-numeric-asc",showLabel:!1,valueLabel:function(e,t){e.css("padding",0);var e=$('<div class="red-ui-editor-subflow-env-input-type"></div>').appendTo(e),e=$('<div class="placeholder-input">').appendTo(e),o=($('<span><i class="fa fa-sort-numeric-asc"></i></span>').appendTo(e),b.opts&&b.opts.min),n=b.opts&&b.opts.max,i="";void 0!==o&&void 0!==n?i=Math.min(o,n)+" - "+Math.max(o,n):void 0!==o?i="> "+o:void 0!==n&&(i="< "+n),$("<span>").css("margin-left","15px").text(i).appendTo(e)},expand:{icon:"fa-caret-down",content:function(e){var e=$('<div class="red-ui-editor-subflow-ui-edit-panel">').appendTo(e),t=(e.css("padding","8px 5px"),b.opts.min),o=b.opts.max,n=$('<input type="number" style="margin-bottom:0; width:60px">'),i=(n.val(t),$('<input type="number" style="margin-bottom:0; width:60px">'));return i.val(o),$('<div class="form-row" style="margin-bottom:3px"><label>'+RED._("editor.spinner.min")+"</label></div>").append(n).appendTo(e),$('<div class="form-row" style="margin-bottom:0"><label>'+RED._("editor.spinner.max")+"</label></div>").append(i).appendTo(e),{onclose:function(){var e=n.val().trim(),t=i.val().trim();""!==e?b.opts.min=parseInt(e):delete b.opts.min,""!==t?b.opts.max=parseInt(t):delete b.opts.max,v.typedInput("value",Date.now())}}}}},"conf-types",{value:"none",label:RED._("editor.inputs.none"),icon:"fa fa-times",hasValue:!1},{value:"hide",label:RED._("editor.inputs.hidden"),icon:"fa fa-ban",hasValue:!1}],default:"none"}).on("typedinputtypechange",function(e,t){switch(b.type=$(this).typedInput("type"),b.opts=u[b.type],"input"===b.type?v.typedInput("value",b.opts.types.join(",")):"conf-types"===b.type?v.typedInput("value",l.type):v.typedInput("value",Date.now()),RED.editor.envVarList.debug&&console.log("envVarList: inputCellInput on:typedinputtypechange. ui.type = "+b.type),b.type){case"input":c.typedInput("types",b.opts.types);break;case"select":c.typedInput("types",["str"]);break;case"checkbox":c.typedInput("types",["bool"]);break;case"spinner":c.typedInput("types",["num"]);break;case"cred":c.typedInput("types",["cred"]);break;default:c.typedInput("types",R)}"checkbox"===b.type?c.typedInput("type","bool"):"spinner"===b.type&&c.typedInput("type","num"),"checkbox"!==b.type&&(f=null)}).on("change",function(e,t){var o=$(this).typedInput("type");if(RED.editor.envVarList.debug&&console.log("envVarList: inputCellInput on:change. selectedType = "+o),"conf-types"===o){const i=$(this).typedInput("value")||l.type;let n=RED.nodes.workspace(RED.workspaces.active());n=n||RED.nodes.subflow(RED.workspaces.active());const a=[];RED.nodes.eachConfig(function(e){var t,o;e.type!=i||e.z&&e.z!==n.id||(o=e._def?.set?.id||"",t=RED.utils.getNodeLabel(e,e.id)||e.id,t+=e.d?" ["+RED._("workspace.disabled")+"]":"",o={_type:i,value:e.id,label:t,title:o?o+" - "+t:t,enabled:!0!==e.d,disabled:!0===e.d},a.push(o))});var o={value:i,label:"config",icon:"fa fa-cog",options:a};c.typedInput("types",[o]),c.typedInput("type",i),c.typedInput("value",l.value)}else"input"===b.type&&(o=v.typedInput("value"),b.opts.types=""===o?["str"]:o.split(","),c.typedInput("types",b.opts.types))}),c.on("change",function(e){f&&f.prop("checked","true"===$(this).typedInput("value"))}),v.typedInput("type",b.type)}i.trigger("change")}},sortable:!0,removable:!1});var e,o={},n=[];if(/^subflow:/.test(w.type)&&(e=RED.nodes.subflow(w.type.substring(8))).env&&e.env.forEach(function(e){var t={name:e.name,parent:{type:e.type,value:e.value,ui:e.ui}};n.push(t),o[e.name]=t}),w.env)for(var t=0;t<w.env.length;t++){var i=w.env[t];o.hasOwnProperty(i.name)?(o[i.name].type=i.type,o[i.name].value=i.value):n.push({name:i.name,type:i.type,value:i.value,ui:i.ui})}n.forEach(function(e){e.parent&&e.parent.ui&&"hide"===e.parent.ui.type||!E&&e.parent||y.editableList("addItem",JSON.parse(JSON.stringify(e)))})},setLocale:function(e,t){D=e,t&&t.editableList("items").each(function(e,t){var o=$(this).data("data"),n=o.ui.labelField;n.val(k(o.ui.label,"",D)),n.timeout&&(clearTimeout(n.timeout),delete n.timeout),n.addClass("input-updated"),n.timeout=setTimeout(function(){delete n.timeout,n.removeClass("input-updated")},3e3)})},lookupLabel:k,DEFAULT_ENV_TYPE_LIST:R,DEFAULT_ENV_TYPE_LIST_INC_CRED:_}}(),function(){var d={};RED.editor.registerTypeEditor("_expression",{show:function(n){var p,f,h,i,a=n.parent||"_",s=n.value,e=n.cancel,t=n.complete,r=(0===$("script[data-template-name='_expression']").length&&$('<script type="text/x-red" data-template-name="_expression"><div id="red-ui-editor-type-expression-panels"><div id="red-ui-editor-type-expression-panel-expr" class="red-ui-panel"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><button class="red-ui-editor-type-expression-legacy red-ui-button red-ui-button-small"><i class="fa fa-exclamation-circle"></i> <span data-i18n="expressionEditor.compatMode"></span></button><button id="red-ui-editor-type-expression-reformat" class="red-ui-button red-ui-button-small"><span data-i18n="expressionEditor.format"></span></button></div><div class="form-row node-text-editor-row"><div class="node-text-editor" id="red-ui-editor-type-expression"></div></div></div><div id="red-ui-editor-type-expression-panel-info" class="red-ui-panel"><div class="form-row"><ul id="red-ui-editor-type-expression-tabs"></ul><div id="red-ui-editor-type-expression-tab-help" class="red-ui-editor-type-expression-tab-content hide"><div><select id="red-ui-editor-type-expression-func"></select><button id="red-ui-editor-type-expression-func-insert" class="red-ui-button" data-i18n="expressionEditor.insert"></button></div><div id="red-ui-editor-type-expression-help"></div></div><div id="red-ui-editor-type-expression-tab-test" class="red-ui-editor-type-expression-tab-content hide"><div><span style="display: inline-block; width: calc(50% - 5px);"><span data-i18n="expressionEditor.data"></span><button style="float: right; margin-right: 5px;" id="node-input-example-reformat" class="red-ui-button red-ui-button-small"><span data-i18n="jsonEditor.format"></span></button></span><span style="display: inline-block; margin-left: 10px; width: calc(50% - 5px);" data-i18n="expressionEditor.result"></span></div><div style="display: inline-block; width: calc(50% - 5px);" class="node-text-editor" id="red-ui-editor-type-expression-test-data"></div><div style="display: inline-block; margin-left: 10px; width:calc(50% - 5px);" class="node-text-editor" id="red-ui-editor-type-expression-test-result"></div></div></div></div></div><\/script>').appendTo("#red-ui-editor-node-configs"),RED.view.state(RED.state.EDITING),{title:n.title,focusElement:n.focusElement,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){e&&e(),RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){$("#red-ui-editor-type-expression-help").text(""),p.saveView(),t&&t(p.getValue(),p.getCursorPosition(),p),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").height();i&&i.resize(t)},open:function(e){function t(){var e,t,o=f.getValue(),n=p.getValue(),i=!1,a=!1,s=!1,r=!1,d=/(^|[^a-zA-Z0-9_'".])msg([^a-zA-Z0-9_'"]|$)/.test(n);$(".red-ui-editor-type-expression-legacy").toggle(d);try{(t=jsonata(n)).assign("flowContext",function(e){return i=!0,null}),t.assign("globalContext",function(e){return i=!0,null}),t.assign("env",function(e){return a=!0,null}),t.assign("moment",function(e){return s=!0,null}),t.assign("clone",function(e){return r=!0,null})}catch(e){return void h.setValue(RED._("expressionEditor.errors.invalid-expr",{message:e.message}),-1)}try{e=JSON.parse(o)}catch(e){return void h.setValue(RED._("expressionEditor.errors.invalid-msg",{message:e.toString()}))}try{t.evaluate(d?{msg:e}:e,null,(e,t)=>{e?h.setValue(RED._("expressionEditor.errors.eval",{message:e.message}),-1):i?h.setValue(RED._("expressionEditor.errors.context-unsupported"),-1):a?h.setValue(RED._("expressionEditor.errors.env-unsupported"),-1):s?h.setValue(RED._("expressionEditor.errors.moment-unsupported"),-1):r?h.setValue(RED._("expressionEditor.errors.clone-unsupported"),-1):(e=void 0!==t?JSON.stringify(t,null,4):RED._("expressionEditor.noMatch"),h.setValue(e,-1))})}catch(e){h.setValue(RED._("expressionEditor.errors.eval",{message:e.message}),-1)}}e.find(".red-ui-tray-body").addClass("red-ui-editor-type-expression");var o,e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_expression","editor"),l=$("#red-ui-editor-type-expression-func"),c=(Object.keys(jsonata.functions).forEach(function(e){l.append($("<option></option>").val(e).text(e))}),l.on("change",function(e){var t=$(this).val(),o="<h5>"+t+"("+RED._("jsonata:"+t+".args",{defaultValue:""})+")</h5>",t=RED.utils.renderMarkdown(RED._("jsonata:"+t+".desc",{defaultValue:""}));$("#red-ui-editor-type-expression-help").html(o+"<p>"+t+"</p>")}),p=RED.editor.createEditor({id:"red-ui-editor-type-expression",value:"",mode:"ace/mode/jsonata",stateId:n.stateId,focus:!0,options:{enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0}}),null),u=-1,e=(p.getSession().setValue(s||"",-1),"ace"==p.type&&p.on("changeSelection",function(){var e=p.getCursorPosition(),t=p.getSession().getTokenAt(e.row,e.column);if(t!==c||t&&/paren/.test(t.type)&&e.column!==u){var o,n=null;if((c=t)&&"keyword"===t.type)o=e.row,n=t;else for(var i=0,a=!1,s=t?("paren.rparen"===t.type&&(u=e.column,i=e.column-(t.start+t.value.length)),o=e.row,t.index):(o=e.row-1,-1);null===n&&-1<o;){var r=p.getSession().getTokens(o);for(-1===s&&(s=r.length-1);-1<s;){var d=r[s].type;if(a){if("keyword"===d){n=r[s];break}a=!1}"paren.lparen"===d?i-=r[s].value.length:"paren.rparen"===d&&(i+=r[s].value.length),i<0&&(a=!0,i=0),s--}n||o--}p.session.removeMarker(null),n&&l.val(n.value).trigger("change")}}),e.i18n(),$("#red-ui-editor-type-expression-func-insert").on("click",function(e){e.preventDefault();p.getCursorPosition();e=l.val(),e=jsonata.getFunctionSnippet(e);p.insertSnippet(e),p.focus()}),$("#red-ui-editor-type-expression-reformat").on("click",function(e){e.preventDefault();e=p.getValue()||"";try{e=jsonata.format(e)}catch(e){}p.getSession().setValue(e||"",-1)}),l.change(),RED.tabs.create({element:$("#red-ui-editor-type-expression-tabs"),onchange:function(e){$(".red-ui-editor-type-expression-tab-content").hide(),e.content.show(),r.resize()}}));e.addTab({id:"expression-help",label:RED._("expressionEditor.functionReference"),content:$("#red-ui-editor-type-expression-tab-help")}),e.addTab({id:"expression-tests",label:RED._("expressionEditor.test"),content:$("#red-ui-editor-type-expression-tab-test")}),f=RED.editor.createEditor({id:"red-ui-editor-type-expression-test-data",value:d[a]||'{\n "payload": "hello world"\n}',stateId:!1,focus:!1,mode:"ace/mode/json",lineNumbers:!1}),$(".red-ui-editor-type-expression-legacy").on("click",function(e){e.preventDefault(),RED.sidebar.help.set(RED._("expressionEditor.compatModeDesc"))});f.getSession().on("change",function(){clearTimeout(o),o=setTimeout(t,200),d[a]=f.getValue()}),p.getSession().on("change",function(){clearTimeout(o),o=setTimeout(t,200)}),h=RED.editor.createEditor({id:"red-ui-editor-type-expression-test-result",value:"",stateId:!1,focus:!1,mode:"ace/mode/json",lineNumbers:!1,readOnly:!0}),i=RED.panels.create({id:"red-ui-editor-type-expression-panels",resize:function(e,t){var o=$("#red-ui-editor-type-expression-panel-expr"),o=(e-=$(o.children()[0]).outerHeight(!0),$(o.children()[1]));e-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#red-ui-editor-type-expression").css("height",e-5+"px"),p.resize(),t-=$("#red-ui-editor-type-expression-panel-info > .form-row > div:first-child").outerHeight(!0)+20,$(".red-ui-editor-type-expression-tab-content").height(t),$("#red-ui-editor-type-expression-test-data").css("height",t-25+"px"),f.resize(),$("#red-ui-editor-type-expression-test-result").css("height",t-25+"px"),h.resize()}}),$("#node-input-example-reformat").on("click",function(e){e.preventDefault();e=f.getValue()||"";try{e=JSON.stringify(JSON.parse(e),null,4)}catch(e){}f.getSession().setValue(e||"",-1)}),t()},close:function(){n.onclose&&n.onclose(),p.destroy(),f.destroy(),h.destroy()},show:function(){}});RED.tray.show(r)}})}(),RED.editor.iconPicker={show:function(e,s,r,n,d){var t=$('<div class="red-ui-icon-picker">'),o=$("<div>",{class:"red-ui-search-container"}).appendTo(t),l=(searchInput=$('<input type="text">').attr("placeholder",RED._("editor.searchIcons")).appendTo(o).searchBox({delay:50,change:function(){var o=$(this).val().trim();""===o?(l.find(".red-ui-icon-list-module").show(),l.find(".red-ui-icon-list-icon").show()):(l.find(".red-ui-icon-list-module").hide(),l.find(".red-ui-icon-list-icon").each(function(e,t){-1===$(t).data("icon").indexOf(o)?$(t).hide():$(t).show()}))}}),$("<div>").appendTo(t),$('<div class="red-ui-icon-list">').appendTo(t)),o=$('<div class="red-ui-icon-meta"></div>').appendTo(t),c=$("<span>").appendTo(o),i=($('<button type="button" class="red-ui-button red-ui-button-small">'+RED._("editor.useDefault")+"</button>").appendTo(o).on("click",function(e){e.preventDefault(),u.hide(),d(null)}),!s&&n&&l.addClass("red-ui-icon-list-dark"),setTimeout(function(){var o=RED.nodes.getIconSets();Object.keys(o).forEach(function(a){var e,t;n&&"font-awesome"!==a||0<(e=o[a]).length&&(t=$('<div class="red-ui-icon-list-module"></div>').text(a).appendTo(l),$('<i class="fa fa-cube"></i>').prependTo(t),e.forEach(function(e){var t=$("<div>",{class:"red-ui-icon-list-icon"}).appendTo(l),o=$("<div>",{class:"red-ui-search-result-node"}).appendTo(t),n=RED.settings.apiRootUrl+"icons/"+a+"/"+e,i=(t.data("icon",n),s&&(o.css({backgroundColor:s}),(i=RED.utils.getDarkerColor(s))!==s)&&o.css("border-color",i),$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(o));RED.utils.createIconElement(n,i,!0),r.module===a&&r.file===e&&t.addClass("selected"),t.on("mouseover",function(){c.text(e)}),t.on("mouseout",function(){c.html("&nbsp;")}),t.on("click",function(){u.hide(),d(a+"/"+e)})}))}),setTimeout(function(){i.remove()},50)},300),RED.utils.addSpinnerOverlay(l,!0)),u=RED.popover.panel(t);u.show({target:e}),t.slideDown(100),searchInput.trigger("focus")}},RED.editor.registerTypeEditor("_js",{show:function(t){var i,o=t.value,e=t.cancel,n=t.complete,a=(0===$("script[data-template-name='_js']").length&&$('<script type="text/x-red" 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("#red-ui-editor-node-configs"),RED.view.state(RED.state.EDITING),{title:t.title,focusElement:t.focusElement,width:t.width||"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){e&&e(),RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){i.saveView(),n&&n(i.getValue(),i.getCursorPosition(),i),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()),n=0;n<t.size();n++)o-=$(t[n]).outerHeight(!0);$(".node-text-editor").css("height",o+"px"),i.resize()},open:function(e){e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_js","editor");i=RED.editor.createEditor({id:"node-input-js",mode:t.mode||"ace/mode/javascript",stateId:t.stateId,focus:!0,value:o,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},extraLibs:t.extraLibs}),t.cursor&&!i._initState&&i.gotoLine(t.cursor.row+1,t.cursor.column,!1),e.i18n()},close:function(){t.onclose&&t.onclose(),i.destroy()},show:function(){}});RED.tray.show(a)}}),function(){var u;function h(e,t,o,n){var i="";if(0<e.children.length)switch(e.children[Math.max(0,Math.min(e.children.length-1,o))].type){case"string":i="";break;case"number":i=0;break;case"boolean":i=!0;break;case"null":i=null;break;case"object":i={};break;case"array":i=[]}if("array"===e.type)r=e.children.length;else for(var a={},s=(e.children.forEach(function(e){a[e.key]=!0}),2),r="item";a[r];)r="item-"+s++;o=g(r,i,e.depth+1,e,n);e.treeList.insertChildAt(o,t,!0),e.treeList.expand()}function g(e,t,o,n,a){var i,s,r,d,l,c={depth:o,type:typeof t},u=$('<span class="red-ui-editor-type-json-editor-label">'),p=(null!=e&&(i="string"==typeof(c.key=e)?'"'+e+'"':e,(s=$('<span class="red-ui-debug-msg-object-key red-ui-editor-type-json-editor-label-key">').text(i).appendTo(u)).addClass("red-ui-debug-msg-type-"+typeof e),n&&"array"===n.type&&s.addClass("red-ui-editor-type-json-editor-label-array-key"),a&&s.addClass("readonly"),s.on("click",function(e){var n;"array"===c.parent.type||a||(e.preventDefault(),e.stopPropagation(),e=Math.max(150,s.width()),n=$('<input type="text" class="red-ui-editor-type-json-editor-key">').css({width:e+"px"}).val(""+c.key).insertAfter(s).typedInput({types:["str"]}),$(document).on("mousedown.nr-ui-json-editor",function(e){for(var t=n.next(".red-ui-typedInput-container")[0],o=e.target;"BODY"!==o.nodeName&&o!==t&&!$(o).hasClass("red-ui-typedInput-options");)o=o.parentElement;"BODY"===o.nodeName&&(e=n.typedInput("value"),c.key=e,s.text("string"==typeof e?'"'+e+'"':e),n.remove(),s.show(),$(document).off("mousedown.nr-ui-json-editor"),$(document).off("keydown.nr-ui-json-editor"))}),$(document).on("keydown.nr-ui-json-editor",function(e){27===e.keyCode&&(n.remove(),s.show(),$(document).off("mousedown.nr-ui-json-editor"),$(document).off("keydown.nr-ui-json-editor"))}),s.hide())}),$("<span>").text(" : ").appendTo(u)),Array.isArray(t)?(c.expanded=o<2,c.type="array",c.deferBuild=2<=o,c.children=function(e,t,o,n){for(var i=[],a=e.length,s=0;s<a;s++)i.push(g(s,e[s],t,o,n));return i}(t,o+1,c,a)):null!==t&&"object"===c.type?(c.expanded=o<2,c.children=function(e,t,o,n){var i,a=[];for(i in e)e.hasOwnProperty(i)&&a.push(g(i,e[i],t,o,n));return a}(t,o+1,c,a),c.deferBuild=2<=o):null===(c.value=t)&&(c.type="null"),"");switch(c.type){case"string":r="str",p='"'+c.value+'"',d="red-ui-debug-msg-type-string";break;case"number":r="num",p=c.value,d="red-ui-debug-msg-type-number";break;case"boolean":r="bool",p=c.value,d="red-ui-debug-msg-type-other";break;case"null":p=r=c.type,d="red-ui-debug-msg-type-null";break;case"object":p=r=c.type,d="red-ui-debug-msg-type-meta";break;case"array":p=(r=c.type)+"["+c.children.length+"]",d="red-ui-debug-msg-type-meta"}var f=$('<span class="red-ui-editor-type-json-editor-label-value">').addClass(d).text(p).appendTo(u);return a&&f.addClass("readonly"),f.on("click",function(e){var i;a||(e.preventDefault(),e.stopPropagation(),"str"===r?p=p.substring(1,p.length-1):"array"!==r&&"object"!==r||(p=""),e=Math.max(150,f.width()),i=$('<input type="text" class="red-ui-editor-type-json-editor-value">').css({width:e+"px"}).val(""+p).insertAfter(f).typedInput({types:["str","num","bool",{value:"null",label:RED._("common.type.null"),hasValue:!1},{value:"array",label:RED._("common.type.array"),hasValue:!1,icon:"red/images/typedInput/json.svg"},{value:"object",label:RED._("common.type.object"),hasValue:!1,icon:"red/images/typedInput/json.svg"}],default:r}),$(document).on("mousedown.nr-ui-json-editor",function(e){for(var t,o=i.next(".red-ui-typedInput-container")[0],n=e.target;"BODY"!==n.nodeName&&n!==o&&!$(n).hasClass("red-ui-typedInput-options");)n=n.parentElement;if("BODY"===n.nodeName){switch(r=i.typedInput("type"),p=i.typedInput("value"),"num"===r&&(p=p.trim(),isNaN(p)?r="str":""===p&&(p=0)),c.value=p,r){case"str":c.children&&(l=c.children),c.treeList.makeLeaf(!0),c.type="string",t="red-ui-debug-msg-type-string",p='"'+p+'"';break;case"num":c.children&&(l=c.children),c.treeList.makeLeaf(!0),c.type="number",t="red-ui-debug-msg-type-number";break;case"bool":c.children&&(l=c.children),c.treeList.makeLeaf(!0),c.type="boolean",t="red-ui-debug-msg-type-other",c.value="true"===p;break;case"null":c.children&&(l=c.children),c.treeList.makeLeaf(!0),c.type="null",t="red-ui-debug-msg-type-null",c.value=p="null";break;case"object":c.treeList.makeParent(l),c.type="object",t="red-ui-debug-msg-type-meta",c.value=p="object",c.children.forEach(function(e,t){var o,n;e.hasOwnProperty("_key")&&(e.key=e._key,delete e._key,(n=e.element.find(".red-ui-editor-type-json-editor-label-key")).removeClass("red-ui-editor-type-json-editor-label-array-key"),"string"==typeof e.key?(o='"'+e.key+'"',n.addClass("red-ui-debug-msg-type-string"),n.removeClass("red-ui-debug-msg-type-number")):(o=e.key,n.removeClass("red-ui-debug-msg-type-string"),n.addClass("red-ui-debug-msg-type-number")),n.text(o))});break;case"array":c.treeList.makeParent(l),c.type="array",t="red-ui-debug-msg-type-meta",c.value=p="array["+c.children.length+"]",c.children.forEach(function(e,t){e._key=e.key,e.key=t,e.element.find(".red-ui-editor-type-json-editor-label-key").addClass("red-ui-editor-type-json-editor-label-array-key").text(""+e.key).removeClass("red-ui-debug-msg-type-string").addClass("red-ui-debug-msg-type-number")})}f.text(p).removeClass().addClass("red-ui-editor-type-json-editor-label-value "+t),i.remove(),f.show(),$(document).off("mousedown.nr-ui-json-editor"),$(document).off("keydown.nr-ui-json-editor")}}),$(document).on("keydown.nr-ui-json-editor",function(e){27===e.keyCode&&(i.remove(),f.show(),"str"===r&&(p='"'+p+'"'),$(document).off("mousedown.nr-ui-json-editor"),$(document).off("keydown.nr-ui-json-editor"))}),f.hide())}),c.gutter=$('<span class="red-ui-editor-type-json-editor-item-gutter"></span>'),a||((n?$('<span class="red-ui-editor-type-json-editor-item-handle"><i class="fa fa-bars"></span>'):$("<span></span>")).appendTo(c.gutter),$('<button type="button" class="editor-button editor-button-small"><i class="fa fa-caret-down"></button>').appendTo(c.gutter).on("click",function(e){e.preventDefault(),e.stopPropagation();var e=$(this),s=c,r=a,e=e.offset(),t=[],o=(s.parent&&(t.push({id:"red-ui-editor-type-json-menu-insert-above",icon:"fa fa-toggle-up",label:RED._("jsonEditor.insertAbove"),onselect:function(){var e=s.parent.children.indexOf(s);h(s.parent,e,e,r)}}),t.push({id:"red-ui-editor-type-json-menu-insert-below",icon:"fa fa-toggle-down",label:RED._("jsonEditor.insertBelow"),onselect:function(){var e=s.parent.children.indexOf(s)+1;h(s.parent,e,e-1,r)}})),"array"!==s.type&&"object"!==s.type||t.push({id:"red-ui-editor-type-json-menu-add-child",icon:"fa fa-plus",label:RED._("jsonEditor.addItem"),onselect:function(){h(s,s.children.length,s.children.length-1,r)}}),s.parent&&(t.push({id:"red-ui-editor-type-json-menu-copy-path",icon:"fa fa-terminal",label:RED._("jsonEditor.copyPath"),onselect:function(){for(var e=s,t="";e.parent;)t=("array"===e.parent.type?"["+e.key+"]":/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(e.key)?e.key:'["'+e.key.replace(/"/,'\\"')+'"]')+(0<t.length&&"["!==t[0]?".":"")+t,e=e.parent;RED.clipboard.copyText(t,s.element,"clipboard.copyMessagePath")}}),t.push({id:"red-ui-editor-type-json-menu-duplicate",icon:"fa fa-copy",label:RED._("jsonEditor.duplicate"),onselect:function(){var e=s.key;if("array"===s.parent.type)e=s.parent.children.length;else{var t=/^(.*?)(-(\d+))?$/.exec(e),o={},n=(s.parent.children.forEach(function(e){o[e.key]=!0}),t[1]),i=2;for(void 0!==t[3]&&(i=parseInt(t[3])),e=n;o[e];)e=n+"-"+i++}var t=g(e,m(s),s.parent.depth+1,s.parent,r),a=s.parent.children.indexOf(s)+1;s.parent.treeList.insertChildAt(t,a,!0),s.parent.treeList.expand()}}),t.push({id:"red-ui-editor-type-json-menu-delete",icon:"fa fa-times",label:RED._("common.label.delete"),onselect:function(){s.treeList.remove()}})),"array"!==s.type&&"object"!==s.type||(t.push(null),t.push({id:"red-ui-editor-type-json-menu-expand-children",icon:"fa fa-angle-double-down",label:RED._("jsonEditor.expandItems"),onselect:function(){s.treeList.expand(),s.children.forEach(function(e){e.treeList.expand()})}}),t.push({id:"red-ui-editor-type-json-menu-collapse-children",icon:"fa fa-angle-double-up",label:RED._("jsonEditor.collapseItems"),onselect:function(){s.treeList.collapse(),s.children.forEach(function(e){e.treeList.collapse()})}})),(t=RED.menu.init({id:"red-ui-editor-type-json-menu",options:t})).css({position:"absolute"}),t.on("mouseleave",function(){$(this).hide()}),t.on("mouseup",function(){$(this).hide()}),t.appendTo("body"),e.top),n=t.height(),i=$(window).height();i<o+n&&(o-=o+n-i+20),t.css({top:o+"px",left:e.left+"px"}),t.show()})),c.element=u,c}function m(e){var t;switch(e.type){case"string":t=e.value;break;case"number":t=Number(e.value);break;case"boolean":t=e.value;break;case"null":t=null;break;case"object":t={},e.children.forEach(function(e){t[e.key]=m(e)});break;case"array":t=e.children.map(m)}return t}RED.editor.registerTypeEditor("_json",{show:function(a){function o(){var e=s.getValue();try{return JSON.parse(e),$("#node-dialog-ok").removeClass("disabled"),!0}catch(e){return $("#node-dialog-ok").addClass("disabled"),!1}}var s,r,d,l=a.value,e=a.cancel,t=a.complete,c=(0===$("script[data-template-name='_json']").length&&$('<script type="text/x-red" data-template-name="_json"><ul id="red-ui-editor-type-json-tabs"></ul><div id="red-ui-editor-type-json-tab-raw" class="red-ui-editor-type-json-tab-content hide"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><span class="button-group"><button id="node-input-json-reformat" class="red-ui-button red-ui-button-small"><span data-i18n="jsonEditor.format"></span></button><span class="button-group"></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></div><div id="red-ui-editor-type-json-tab-ui" class="red-ui-editor-type-json-tab-content hide"><div id="red-ui-editor-type-json-tab-ui-container"></div></div><\/script>').appendTo("#red-ui-editor-node-configs"),RED.view.state(RED.state.EDITING),{title:a.title,focusElement:a.focusElement,width:a.width||700,buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){e&&e(),RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){var e;a.requireValid&&!o()||("json-ui"===u?e=d?JSON.stringify(m(d),null,4):s.getValue():"json-raw"===u&&(e=s.getValue()),s.saveView(),t&&t(e,null,s),RED.tray.close())}}],resize:function(e){var t=$(".red-ui-editor-type-json-tab-content").height();$(".node-text-editor").css("height",t-45+"px"),s.resize()},open:function(e){e.find(".red-ui-tray-body");var e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_json","editor"),t=a.toolbarButtons||[],t=(t.length&&t.forEach(function(t){var o=$('<button type="button" class="red-ui-button red-ui-button-small"> </button>').insertBefore("#node-input-json-reformat").on("click",function(e){e.preventDefault(),void 0!==t.click&&t.click.call(o,e)});t.id&&o.attr("id",t.id),t.title&&o.attr("title",t.title),t.icon&&o.append($("<i></i>").attr("class",t.icon)),(t.label||t.text)&&o.append($("<span></span>").text(" "+(t.label||t.text)))}),$("#red-ui-editor-type-json-tab-ui-container").css({height:"100%"})),n=$('<div class="red-ui-debug-msg-payload red-ui-editor-type-json-editor">').appendTo(t).treeList({selectable:!1,rootSortable:!1,sortable:".red-ui-editor-type-json-editor-item-handle"}).on("treelistchangeparent",function(e,t){"array"===t.old.type&&t.old.element.find(".red-ui-editor-type-json-editor-label-type").text("array["+t.old.children.length+"]"),"array"===t.item.parent.type&&t.item.parent.element.find(".red-ui-editor-type-json-editor-label-type").text("array["+t.item.parent.children.length+"]")}).on("treelistsort",function(e,o){o.children.forEach(function(e,t){"array"===o.type?(e.key=t,e.element.find(".red-ui-editor-type-json-editor-label-key").text(e.key).removeClass("red-ui-debug-msg-type-string").addClass("red-ui-debug-msg-type-number")):e.element.find(".red-ui-editor-type-json-editor-label-key").text('"'+e.key+'"').removeClass("red-ui-debug-msg-type-number").addClass("red-ui-debug-msg-type-string")})}),i=(s=RED.editor.createEditor({id:"node-input-json",value:l||"",mode:"ace/mode/json",readOnly:!!a.readOnly,stateId:a.stateId,focus:!0}),a.requireValid&&(s.getSession().on("change",function(){clearTimeout(r),r=setTimeout(o,200)}),o()),$("#node-input-json-reformat").on("click",function(e){e.preventDefault();e=s.getValue()||"";try{e=JSON.stringify(JSON.parse(e),null,4)}catch(e){}s.getSession().setValue(e||"",-1)}),e.i18n(),!1),t=RED.tabs.create({element:$("#red-ui-editor-type-json-tabs"),onchange:function(e){if(u=e.id,$(".red-ui-editor-type-json-tab-content").hide(),i)if("json-raw"===e.id)d&&(t=JSON.stringify(m(d),null,4),s.getSession().setValue(t||"",-1));else if("json-ui"===e.id){var t=s.getValue().trim()||"{}";try{var o=JSON.parse(t);(d=g(null,o,0,null,a.readOnly)).class="red-ui-editor-type-json-root-node",n.treeList("data",[d])}catch(e){d=null,n.treeList("data",[{label:RED._("jsonEditor.error.invalidJSON")+e.toString()}])}}e.content.show(),c.resize()}});t.addTab({id:"json-raw",label:a.readOnly?RED._("jsonEditor.rawMode-readonly"):RED._("jsonEditor.rawMode"),content:$("#red-ui-editor-type-json-tab-raw")}),t.addTab({id:"json-ui",label:a.readOnly?RED._("jsonEditor.uiMode-readonly"):RED._("jsonEditor.uiMode"),content:$("#red-ui-editor-type-json-tab-ui")}),i=!0},close:function(){a.onclose&&a.onclose(),s.destroy()},show:function(){}});RED.tray.show(c)}})}(),function(){var o=!1,n=null;function i(e,t){$(e).on("dragenter",function(e){e.preventDefault(),$("#red-ui-image-drop-target").css({display:"table"}).focus(),n=t}),o||(o=!0,$("#red-ui-image-drop-target").on("dragover",function(e){e.preventDefault()}).on("dragleave",function(e){$("#red-ui-image-drop-target").hide()}).on("drop",function(e){if(e.preventDefault(),-1!=$.inArray("Files",e.originalEvent.dataTransfer.types)){e=e.originalEvent.dataTransfer.files;if(1===e.length){e=e[0];if(e.name.toLowerCase().match(/\.(apng|avif|gif|jpeg|png|svg|webp)$/))return e=e,t=function(e){var t=n.getSession(),e=`<img src="${e}"/>
`,o=t.getCursorPosition();t.insert(o,e),$("#red-ui-image-drop-target").hide()},(o=new FileReader).onload=function(e){t(e.target.result)},void o.readAsDataURL(e)}}var t,o;$("#red-ui-image-drop-target").hide()}))}var s;RED.editor.registerTypeEditor("_markdown",{show:function(n){var i,a=n.value,e=n.cancel,t=n.complete,o=(0===$("script[data-template-name='_markdown']").length&&$('<script type="text/x-red" data-template-name="_markdown"><div id="red-ui-editor-type-markdown-panels"><div id="red-ui-editor-type-markdown-panel-editor" class="red-ui-panel"><div style="height: 100%; margin: auto;"><div id="red-ui-editor-type-markdown-toolbar"></div><div class="node-text-editor" style="height: 100%" id="red-ui-editor-type-markdown"></div></div></div><div class="red-ui-panel"><div class="red-ui-editor-type-markdown-panel-preview red-ui-help"></div></div><\/script>').appendTo("#red-ui-editor-node-configs"),RED.view.state(RED.state.EDITING),{title:n.title,focusElement:n.focusElement,width:n.width||1/0,buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){e&&e(),RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){i.saveView(),t&&t(i.getValue(),i.getCursorPosition(),i),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").width();s&&s.resize(t)},open:function(e){e.find(".red-ui-tray-body").addClass("red-ui-editor-type-markdown-editor");var t,o=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_markdown","editor");(i=RED.editor.createEditor({id:"red-ui-editor-type-markdown",value:a,stateId:n.stateId,focus:!0,mode:"ace/mode/markdown",expandable:!1})).getSession().on("change",function(){clearTimeout(t),t=setTimeout(function(){var e=$(".red-ui-editor-type-markdown-panel-preview").scrollTop();$(".red-ui-editor-type-markdown-panel-preview").html(RED.utils.renderMarkdown(i.getValue())),$(".red-ui-editor-type-markdown-panel-preview").scrollTop(e),RED.editor.mermaid.render()},200)}),n.header&&n.header.appendTo(e.find("#red-ui-editor-type-markdown-title")),a&&($(".red-ui-editor-type-markdown-panel-preview").html(RED.utils.renderMarkdown(i.getValue())),RED.editor.mermaid.render()),(s=RED.panels.create({id:"red-ui-editor-type-markdown-panels",dir:"horizontal",resize:function(e,t){i.resize()}})).ratio(1),$('<span class="button-group" style="float:right"><button type="button" id="node-btn-markdown-preview" class="red-ui-button toggle single"><i class="fa fa-eye"></i></button></span>').appendTo(i.toolbar),$("#node-btn-markdown-preview").on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),s.ratio(1)):($(this).addClass("selected"),s.ratio(.5))}),RED.popover.tooltip($("#node-btn-markdown-preview"),RED._("markdownEditor.toggle-preview")),i._initState||(n.cursor?i.gotoLine(n.cursor.row+1,n.cursor.column,!1):i.gotoLine(0,0,!1)),o.i18n()},close:function(){n.onclose&&n.onclose(),i.destroy()},show:function(){}});RED.tray.show(o)},buildToolbar:function(e,r){var t={h1:{newline:!0,before:"# ",tooltip:RED._("markdownEditor.heading1")},h2:{newline:!0,before:"## ",tooltip:RED._("markdownEditor.heading2")},h3:{newline:!0,before:"### ",tooltip:RED._("markdownEditor.heading3")},b:{before:"**",after:"**",tooltip:RED._("markdownEditor.bold")},i:{before:"_",after:"_",tooltip:RED._("markdownEditor.italic")},code:{before:"`",after:"`",tooltip:RED._("markdownEditor.code")},ol:{before:" 1. ",newline:!0,tooltip:RED._("markdownEditor.ordered-list")},ul:{before:" - ",newline:!0,tooltip:RED._("markdownEditor.unordered-list")},bq:{before:"> ",newline:!0,tooltip:RED._("markdownEditor.quote")},link:{before:"[",after:"]()",tooltip:RED._("markdownEditor.link")},hr:{before:"\n---\n\n",tooltip:RED._("markdownEditor.horizontal-rule")}},e=$('<div style="margin-bottom: 5px"><span class="button-group"><button type="button" class="red-ui-button" data-style="h1" style="font-size:1.1em; font-weight: bold">h1</button><button type="button" class="red-ui-button" data-style="h2" style="font-size:1.0em; font-weight: bold">h2</button><button type="button" class="red-ui-button" data-style="h3" style="font-size:0.9em; font-weight: bold">h3</button></span><span class="button-group"><button type="button" class="red-ui-button" data-style="b"><i class="fa fa-bold"></i></button><button type="button" class="red-ui-button" data-style="i"><i class="fa fa-italic"></i></button><button type="button" class="red-ui-button" data-style="code"><i class="fa fa-code"></i></button></span><span class="button-group"><button type="button" class="red-ui-button" data-style="ol"><i class="fa fa-list-ol"></i></button><button type="button" class="red-ui-button" data-style="ul"><i class="fa fa-list-ul"></i></button><button type="button" class="red-ui-button" data-style="bq"><i class="fa fa-quote-left"></i></button><button type="button" class="red-ui-button" data-style="hr"><i class="fa fa-minus"></i></button><button type="button" class="red-ui-button" data-style="link"><i class="fa fa-link"></i></button></span></div>').appendTo(e);return e.find("button[data-style]").each(function(e){var s=t[$(this).data("style")];$(this).on("click",function(e){e.preventDefault();var e=r.getSelectedText(),t=r.selection.getRange();if(s.newline)for(var o=0,n=((s.before||"").match(/\n/g)||[]).length,i=((s.after||"").match(/\n/g)||[]).length,a=t.start.row;a<=t.end.row+o;a++)s.before&&(r.session.insert({row:a,column:0},s.before),o+=n,a+=n),s.after&&(r.session.insert({row:a,column:1/0},s.after),o+=i,a+=i);else r.session.replace(r.selection.getRange(),(s.before||"")+e+(s.after||"")),""===e&&r.gotoLine(t.start.row+1,t.start.column+(s.before||"").length,!1);r.focus()}),s.tooltip&&RED.popover.tooltip($(this),s.tooltip)}),e},postInit:function(e,t){i($("#"+t.id),e)}})}(),RED.editor.mermaid=function(){let t=!1,i=!1,a=[],s=0;return{render:function n(e=".mermaid"){if(i)document.querySelectorAll(e).forEach(async t=>{if(!t.getAttribute("mermaid-processed")){var e=t.innerText;t.setAttribute("mermaid-processed",!0);try{var o=(await mermaid.render("mermaid-render-"+Date.now()+"-"+s++,e)).svg;t.innerHTML=o}catch(e){$("<div>").css({fontSize:"0.8em",border:"1px solid var(--red-ui-border-color-error)",padding:"5px",marginBottom:"10px"}).text(e.toString()).prependTo(t)}}});else if(a.push(e),!t){t=!0;let o;$("script").each(function(e,t){!o&&(t=t.getAttribute("src"),t=/\?v=(.+)$/.exec(t))&&(o=t[1])}),$.ajax({url:"vendor/mermaid/mermaid.min.js?v="+o,dataType:"script",cache:!0,success:function(e,t,o){for(mermaid.initialize({startOnLoad:!1,theme:RED.settings.get("mermaid",{}).theme}),i=!0;0<a.length;)n(a.shift())}})}}}}(),RED.editor.registerTypeEditor("_text",{show:function(t){var o,n=t.value,e=t.cancel,i=t.complete,a=(0===$("script[data-template-name='_text']").length&&$('<script type="text/x-red" data-template-name="_text"><div class="form-row node-text-editor-row"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-text"></div></div><\/script>').appendTo("#red-ui-editor-node-configs"),RED.view.state(RED.state.EDITING),{title:t.title,focusElement:t.focusElement,width:t.width||"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){e&&e(),RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){o.saveView(),i&&i(o.getValue(),o.getCursorPosition(),o),RED.tray.close()}}],resize:function(e){$("#dialog-form>div:not(.node-text-editor-row)"),$("#dialog-form>div.node-text-editor-row");var t=$("#dialog-form").height();$(".node-text-editor").css("height",t+"px"),o.resize()},open:function(e){RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_text","editor");o=RED.editor.createEditor({id:"node-input-text",value:n||"",stateId:t.stateId,mode:"ace/mode/"+(t.mode||"text"),focus:!0}),t.cursor&&!o._initState&&o.gotoLine(t.cursor.row+1,t.cursor.column,!1)},close:function(){t.onclose&&t.onclose(),o.destroy()},show:function(){}});RED.tray.show(a)}}),RED.editor.codeEditor.ace=function(){var t=!1,s={};return{get type(){return"ace"},get initialised(){return t},init:function(e){return s=e||{},t=!0},create:function(o){var e=RED.editor.codeEditor.settings||{},t=o.element||$("#"+o.id)[0],n=$("<div>").appendTo(t),t=$("<div>").appendTo(t).addClass("red-ui-editor-text-container")[0],i=window.ace.edit(t),a=(i.setTheme(e.theme||s.theme||"ace/theme/tomorrow"),i.getSession());return a.on("changeAnnotation",function(){for(var e=a.getAnnotations()||[],t=e.length,o=e.length;t--;)(/doctype first\. Expected/.test(e[t].text)||/Unexpected End of file\. Expected/.test(e[t].text))&&e.splice(t,1);o>e.length&&a.setAnnotations(e)}),o.mode&&a.setMode(o.mode),o.foldStyle?a.setFoldStyle(o.foldStyle):a.setFoldStyle("markbeginend"),o.options?i.setOptions(o.options):i.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,tooltipFollowsMouse:!1}),o.readOnly&&(i.setOption("readOnly",o.readOnly),i.container.classList.add("ace_read-only")),o.hasOwnProperty("lineNumbers")&&i.renderer.setOption("showGutter",o.lineNumbers),i.$blockScrolling=1/0,o.value&&a.setValue(o.value,-1),o.globals&&setTimeout(function(){a.$worker&&a.$worker.send("setOptions",[{globals:o.globals,maxerr:1e3}])},100),o.stateId||!1===o.stateId||(o.stateId=RED.editor.generateViewStateId("ace",o,(o.mode||o.title).split("/").pop())),"ace/mode/markdown"===o.mode&&($(t).addClass("red-ui-editor-text-container-toolbar"),i.toolbar=RED.editor.customEditTypes._markdown.buildToolbar(n,i),!1!==o.expandable&&(e=$('<button type="button" class="red-ui-button" style="float: right;"><i class="fa fa-expand"></i></button>').appendTo(i.toolbar),RED.popover.tooltip(e,RED._("markdownEditor.expand")),e.on("click",function(e){e.preventDefault();e=i.getValue();RED.editor.editMarkdown({value:e,width:"Infinity",stateId:o.stateId,focus:!0,cancel:function(){i.focus()},complete:function(e,t){i.setValue(e,-1),setTimeout(function(){i.restoreView(),i.focus()},300)}})})),e=$('<button type="button" class="red-ui-editor-text-help red-ui-button red-ui-button-small"><i class="fa fa-question"></i></button>').appendTo($(t).parent()),RED.popover.create({target:e,trigger:"click",size:"small",direction:"left",content:RED._("markdownEditor.format"),autoClose:50}),a.setUseWrapMode(!0)),i._destroy=i.destroy,i.destroy=function(){try{i.saveView(),i._initState=null,this._destroy()}catch(e){}$(t).remove(),$(n).remove()},i.on("blur",function(){i.focusMemory=!1,i.saveView()}),i.on("focus",function(){i._initState&&(i.restoreView(i._initState),i._initState=null)}),i.getView=function(){var e=i.getSession();return{selection:e.selection.toJSON(),scrollTop:e.getScrollTop(),scrollLeft:e.getScrollLeft(),options:e.getOptions()}},i.saveView=function(){var e;if(o.stateId)return window._editorStateAce=window._editorStateAce||{},e=i.getView(),window._editorStateAce[o.stateId]=e},i.restoreView=function(e){if(o.stateId){window._editorStateAce=window._editorStateAce||{};e=e||window._editorStateAce[o.stateId];if(e)try{var t=i.getSession();t.setOptions(e.options),t.selection.fromJSON(e.selection),t.setScrollTop(e.scrollTop),t.setScrollLeft(e.scrollLeft),i._initState=e}catch(e){delete window._editorStateMonaco[o.stateId]}}},i.restoreView(),i.type="ace",i}}}(),RED.editor.codeEditor.monaco=function(){var y=!1;const w=["vs","vs-dark","hc-black"];let E;const b={assert:{package:"node",module:"assert",path:"node/assert.d.ts"},"assert/strict":{package:"node",module:"assert/strict",path:"node/assert/strict.d.ts"},async_hooks:{package:"node",module:"async_hooks",path:"node/async_hooks.d.ts"},buffer:{package:"node",module:"buffer",path:"node/buffer.d.ts"},child_process:{package:"node",module:"child_process",path:"node/child_process.d.ts"},cluster:{package:"node",module:"cluster",path:"node/cluster.d.ts"},console:{package:"node",module:"console",path:"node/console.d.ts"},crypto:{package:"node",module:"crypto",path:"node/crypto.d.ts"},dgram:{package:"node",module:"dgram",path:"node/dgram.d.ts"},"diagnostics_channel.d":{package:"node",module:"diagnostics_channel",path:"node/diagnostics_channel.d.ts"},dns:{package:"node",module:"dns",path:"node/dns.d.ts"},"dns/promises":{package:"node",module:"dns/promises",path:"node/dns/promises.d.ts"},domain:{package:"node",module:"domain",path:"node/domain.d.ts"},events:{package:"node",module:"events",path:"node/events.d.ts"},fs:{package:"node",module:"fs",path:"node/fs.d.ts"},"fs/promises":{package:"node",module:"fs/promises",path:"node/fs/promises.d.ts"},globals:{package:"node",module:"globals",path:"node/globals.d.ts"},http:{package:"node",module:"http",path:"node/http.d.ts"},http2:{package:"node",module:"http2",path:"node/http2.d.ts"},https:{package:"node",module:"https",path:"node/https.d.ts"},module:{package:"node",module:"module",path:"node/module.d.ts"},net:{package:"node",module:"net",path:"node/net.d.ts"},os:{package:"node",module:"os",path:"node/os.d.ts"},path:{package:"node",module:"path",path:"node/path.d.ts"},perf_hooks:{package:"node",module:"perf_hooks",path:"node/perf_hooks.d.ts"},process:{package:"node",module:"process",path:"node/process.d.ts"},querystring:{package:"node",module:"querystring",path:"node/querystring.d.ts"},readline:{package:"node",module:"readline",path:"node/readline.d.ts"},stream:{package:"node",module:"stream",path:"node/stream.d.ts"},"stream/consumers":{package:"node",module:"stream/consumers",path:"node/stream/consumers.d.ts"},"stream/promises":{package:"node",module:"stream/promises",path:"node/stream/promises.d.ts"},"stream/web":{package:"node",module:"stream/web",path:"node/stream/web.d.ts"},string_decoder:{package:"node",module:"string_decoder",path:"node/string_decoder.d.ts"},test:{package:"node",module:"test",path:"node/test.d.ts"},timers:{package:"node",module:"timers",path:"node/timers.d.ts"},"timers/promises":{package:"node",module:"timers/promises",path:"node/timers/promises.d.ts"},tls:{package:"node",module:"tls",path:"node/tls.d.ts"},trace_events:{package:"node",module:"trace_events",path:"node/trace_events.d.ts"},tty:{package:"node",module:"tty",path:"node/tty.d.ts"},url:{package:"node",module:"url",path:"node/url.d.ts"},util:{package:"node",module:"util",path:"node/util.d.ts"},v8:{package:"node",module:"v8",path:"node/v8.d.ts"},vm:{package:"node",module:"vm",path:"node/vm.d.ts"},wasi:{package:"node",module:"wasi",path:"node/wasi.d.ts"},worker_threads:{package:"node",module:"worker_threads",path:"node/worker_threads.d.ts"},zlib:{package:"node",module:"zlib",path:"node/zlib.d.ts"},"node-red":{package:"node-red",module:"node-red",path:"node-red/index.d.ts"},"node-red-util":{package:"node-red",module:"util",path:"node-red/util.d.ts"},"node-red-func":{package:"node-red",module:"func",path:"node-red/func.d.ts"}},D=[b["node-red-util"],b["node-red-func"],b.globals,b.console,b.buffer,b.timers,b.util],l={};function R(e,t,o,n){var i="object"==typeof e?e:b[e];if(i){const s=i.package,r=i.module,d=i.path;var a,e=l[d];e?(t||(o.JS[r]=monaco.languages.typescript.javascriptDefaults.addExtraLib(e,"file://types/"+s+"/"+r+"/index.d.ts")),n&&setTimeout(function(){n(null,i)},5)):(a="types/"+d,$.get(a).done(function(e){l[d]=e,t||(o.JS[r]=monaco.languages.typescript.javascriptDefaults.addExtraLib(e,"file://types/"+s+"/"+r+"/index.d.ts")),n&&n(null,i)}).fail(function(e){var t="Failed to load '"+a+"'";l[d]="/* "+t+" */\n",n&&n(e,i),console.warn(t)}))}}function x(e){return!(!e.offsetHeight&&!e.offsetWidth)&&"hidden"!==getComputedStyle(e).visibility}return{get type(){return"monaco"},get initialised(){return y},init:function(e){RED.events.on("editor:close",function(){if(window.monaco){window.monaco.editor.getEditors().filter(e=>e&&!document.body.contains(e.getDomNode())).forEach(e=>{e.dispose()});var t=monaco.editor.getModels();if(t&&t.length){console.warn("Cleaning up monaco models left behind. Any node that calls createEditor() should call .destroy().");for(let e=0;e<t.length;e++){var o=t[e];o.isDisposed()||o.dispose()}}}}),window.MonacoEnvironment=window.MonacoEnvironment||{},window.MonacoEnvironment.getWorkerUrl=window.MonacoEnvironment.getWorkerUrl||function(e,t){return"json"===t?"./vendor/monaco/dist/json.worker.js":"css"===t||"scss"===t?"./vendor/monaco/dist/css.worker.js":"html"===t||"handlebars"===t?"./vendor/monaco/dist/html.worker.js":"typescript"===t||"javascript"===t?"./vendor/monaco/dist/ts.worker.js":"./vendor/monaco/dist/editor.worker.js"};var o=(RED.editor.codeEditor.settings||{}).options||{};try{const b=function(e,t){(t.rules&&Array.isArray(t.rules)||t.colors)&&(w.push(e),monaco.editor.defineTheme(e,t),monaco.editor.setTheme(e),E=e)};if(o.theme)if("object"==typeof o.theme&&RED.settings.editorTheme.theme){var t=o.theme.name||RED.settings.editorTheme.theme;b(t,o.theme)}else if("string"==typeof o.theme){let t=o.theme;w.includes(t)||$.get("vendor/monaco/dist/theme/"+t+".json",function(e){b(t,e)})}}catch(e){console.warn(e)}function i(e,t,o,n,i){return Array.isArray(o)&&(o=o.join("\n")),{label:e,kind:null==i?monaco.languages.CompletionItemKind.Snippet:i,documentation:{value:o},insertText:t,insertTextRules:monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:n}}(t=monaco).languages.registerCompletionItemProvider("javascript",{provideCompletionItems:function(e,t){var e=e.getWordUntilPosition(t),t={startLineNumber:t.lineNumber,endLineNumber:t.lineNumber,startColumn:e.startColumn,endColumn:e.endColumn};return{suggestions:[i("dowhile","do {\n\t${2}\n} while (${1:condition});","Do-While Statement (JavaScript Language Basics)",e=t),i("while","while (${1:condition}) {\n\t${2}\n}","While Statement (JavaScript Language Basics)",e),i("switch",'switch (${1:msg.topic}) {\n\tcase ${2:"value"}:\n\t\t${3}\n\t\tbreak;\n\tdefault:\n\t\t\n}',"Switch Statement (JavaScript Language Basics)",e),i("trycatch","try {\n\t${2}\n} catch (${1:error}) {\n\t\n};","Try-Catch Statement (JavaScript Language Basics)",e),i("for (for loop)","for (let ${1:index} = 0; ${1:index} < ${2:array}.length; ${1:index}++) {\n\tconst element = ${2:array}[${1:index}];\n\t${3}\n}","for loop",e),i("foreach","${1:array}.forEach(function(${2:element}) {\n\t${3}\n});","forEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void\n\nA function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.",e),i("forin","for (${1:prop} in ${2:obj}) {\n\tif (${2:obj}.hasOwnProperty(${1:prop})) {\n\t\t${3}\n\t}\n}","for in",e),i("forof","for (const ${1:iterator} of ${2:object}) {\n\t${3}\n}","for of",e),i("function","function ${1:methodName}(${2:arguments}) {\n\t${3}\n}","Function Declaration",e),i("func (anonymous function)","var ${1:fn} = function(${2:arguments}) {\n\t${3}\n}","Function Expression",e),i("pt (prototype)","${1:ClassName}.prototype.${2:methodName} = function(${3:arguments}) {\n\t${4}\n}","prototype",e),i("iife","(function(${1:arg}) {\n\t${1}\n})(${1:arg});","immediately-invoked function expression",e),i("call (function call)","${1:methodName}.call(${2:context}, ${3:arguments})","function call",e),i("apply (function apply)","${1:methodName}.apply(${2:context}, [${3:arguments}])","function apply",e),i("jsonparse","JSON.parse(${1:json});","JSON.parse",e),i("jsonstringify","JSON.stringify(${1:obj});","JSON.stringify",e),i("setinterval","setInterval(function() {\n\t${2}\n}, ${1:delay});","setInterval",e),i("settimeout","setTimeout(function() {\n\t${2}\n}, ${1:delay});","setTimeout",e),i("node.log",'node.log(${1:"info"});',"Write an info message to the console (not sent to sidebar)",e),i("node.warn",'node.warn(${1:"my warning"});',"Write a warning to the console and debug sidebar",e),i("node.error",'node.error(${1:"my error message"}, ${2:msg});',"Send an error to the console and debug sidebar. To trigger a Catch node on the same tab, the function should call `node.error` with the original message as a second argument",e),i("node.send","node.send(${1:msg});","async send a msg to the next node",e),i("node.send (multiple)","var ${1:msg1} = {payload:${2:1}};\nvar ${3:msg2} = {payload:${4:2}};\nnode.send([[${1:msg1}, ${3:msg2}]]);","send 1 or more messages out of 1 output",e),i("node.send (multiple outputs)","var ${1:msg1} = {payload:${2:1}};\nvar ${3:msg2} = {payload:${4:2}};\nnode.send([${1:msg1}, ${3:msg2}]);","send more than 1 message out of multiple outputs",e),i("node.status",'node.status({fill:"${1|red,green,yellow,blue,grey|}",shape:"${2|ring,dot|}",text:"${3:message}"});',"Set the status icon and text underneath the function node",e),i("get (node context)",'context.get("${1:name}");',"Get a value from node context",e),i("set (node context)",'context.set("${1:name}", ${1:value});',"Set a value in node context",e),i("get (flow context)",'flow.get("${1:name}");',"Get a value from flow context",e),i("set (flow context)",'flow.set("${1:name}", ${1:value});',"Set a value in flow context",e),i("get (global context)",'global.get("${1:name}");',"Get a value from global context",e),i("set (global context)",'global.set("${1:name}", ${1:value});',"Set a value in global context",e),i("get (env)",'env.get("${1|NR_NODE_ID,NR_NODE_NAME,NR_NODE_PATH,NR_GROUP_ID,NR_GROUP_NAME,NR_FLOW_ID,NR_FLOW_NAME,NR_SUBFLOW_NAME,NR_SUBFLOW_ID,NR_SUBFLOW_PATH|}");',"Get env variable value",e),i("cloneMessage (RED.util)","RED.util.cloneMessage(${1:msg});",["```typescript","RED.util.cloneMessage<T extends registry.NodeMessage>(msg: T): T","```","Safely clones a message object. This handles msg.req/msg.res objects that must not be cloned\n","*@param* `msg` — the msg object\n"],e),i("getObjectProperty (RED.util)","RED.util.getObjectProperty(${1:msg},${2:prop});",["```typescript","RED.util.getObjectProperty(msg: object, expr: string): any;","```","Gets a property of an object\n","*@param* `msg` — the msg object\n","*@param* `prop` — the msg object"],e),i("setObjectProperty (RED.util)","RED.util.setObjectProperty(${1:msg},${2:prop},${3:value},${4:createMissing});",["```typescript","RED.util.setObjectProperty(msg: object, prop: string, value: any, createMissing?: boolean): boolean","```","Sets a property of an object\n","`msg` — the object\n","`prop` — the property expression\n","`value` — the value to set\n","`createMissing` — whether to create missing parent properties"],e),i("getMessageProperty (RED.util)","RED.util.getMessageProperty(${1:msg},${2:prop});",["```typescript","RED.util.getMessageProperty(msg: object, expr: string): any;","```","Gets a property of an object\n","*@param* `msg` — the msg object\n","*@param* `prop` — the msg object"],e),i("setMessageProperty (RED.util)","RED.util.setMessageProperty(${1:msg},${2:prop},${3:value},${4:createMissing});",["```typescript","RED.util.setMessageProperty(msg: object, prop: string, value: any, createMissing?: boolean): boolean","```","Sets a property of an object\n","`msg` — the object\n","`prop` — the property expression\n","`value` — the value to set\n","`createMissing` — whether to create missing parent properties"],e)]}}});try{var n={allowJs:!0,checkJs:!0,allowNonTsExtensions:!0,target:monaco.languages.typescript.ScriptTarget.ESNext,strictNullChecks:!1,strictPropertyInitialization:!0,strictFunctionTypes:!0,strictBindCallApply:!0,useDefineForClassFields:!0,moduleResolution:monaco.languages.typescript.ModuleResolutionKind.NodeJs,module:monaco.languages.typescript.ModuleKind.CommonJS,typeRoots:["types"],lib:["esnext"]},a=RED.settings.get("codeEditor.monaco.languages.typescript.javascriptDefaults.compilerOptions")||{},n=Object.assign({},n,a),s=(t.languages.typescript.javascriptDefaults.setCompilerOptions(n),{noSemanticValidation:!1,noSyntaxValidation:!1,diagnosticCodesToIgnore:[1108,1375,1378,2307,2322,2339,2345,2538,7043,80001,80004]}),r=RED.settings.get("codeEditor.monaco.languages.typescript.javascriptDefaults.diagnosticsOptions")||{},s=Object.assign({},s,r);t.languages.typescript.javascriptDefaults.setDiagnosticsOptions(s)}catch(e){console.warn("monaco - Error setting javascriptDefaults",e)}(o=monaco).languages.register({id:"jsonata"}),o.languages.setMonarchTokensProvider("jsonata",{defaultToken:"invalid",tokenPostfix:".js",keywords:["function","true","true","null","Infinity","NaN","undefined"].concat(Object.keys(jsonata.functions)),operatorsKeywords:["and","or","in"],operators:["<=",">=","!=","==","!=","=>","+","-","*","/","%",":=","~>","?",":","..","@","#","|","^","*","**"],symbols:/[=><!~?:&|+\-*\/\^%@#]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,digits:/\d+(_+\d+)*/,octaldigits:/[0-7]+(_+[0-7]+)*/,binarydigits:/[0-1]+(_+[0-1]+)*/,hexdigits:/[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,regexpctl:/[(){}\[\]\$\^|\-*+?\.]/,regexpesc:/\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:{root:[[/[{}]/,"delimiter.bracket"],{include:"common"}],common:[[/([a-zA-Z][\w$]*)|([$][\w$]*)/,{cases:{"@keywords":"keyword","@operatorsKeywords":"keyword",$2:"variable","@default":"identifier"}}],[/[$][\w\$]*/,"variable"],{include:"@whitespace"},[/\/(?=([^\\\/]|\\.)+\/([gimsuy]*)(\s*)(\.|;|\/|,|\)|\]|\}|$))/,{token:"regexp",bracket:"@open",next:"@regexp"}],[/[()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/(@symbols)|(\.\.)/,{cases:{"@operators":"operator","@default":""}}],[/(@digits)[eE]([\-+]?(@digits))?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?/,"number.float"],[/0[xX](@hexdigits)/,"number.hex"],[/0[oO]?(@octaldigits)/,"number.octal"],[/0[bB](@binarydigits)/,"number.binary"],[/(@digits)/,"number"],[/[?:;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string_double"],[/'/,"string","@string_single"],[/`/,"string","@string_backtick"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@jsdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],jsdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],regexp:[[/(\{)(\d+(?:,\d*)?)(\})/,["regexp.escape.control","regexp.escape.control","regexp.escape.control"]],[/(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,["regexp.escape.control",{token:"regexp.escape.control",next:"@regexrange"}]],[/(\()(\?:|\?=|\?!)/,["regexp.escape.control","regexp.escape.control"]],[/[()]/,"regexp.escape.control"],[/@regexpctl/,"regexp.escape.control"],[/[^\\\/]/,"regexp"],[/@regexpesc/,"regexp.escape"],[/\\\./,"regexp.invalid"],[/(\/)([gimsuy]*)/,[{token:"regexp",bracket:"@close",next:"@pop"},"keyword.other"]]],regexrange:[[/-/,"regexp.escape.control"],[/\^/,"regexp.invalid"],[/@regexpesc/,"regexp.escape"],[/[^\]]/,"regexp"],[/\]/,{token:"regexp.escape.control",next:"@pop",bracket:"@close"}]],string_double:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],string_single:[[/[^\\']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/'/,"string","@pop"]],string_backtick:[[/\$\{/,{token:"delimiter.bracket",next:"@bracketCounting"}],[/[^\\`$]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/`/,"string","@pop"]],bracketCounting:[[/\{/,"delimiter.bracket","@bracketCounting"],[/\}/,"delimiter.bracket","@pop"],{include:"common"}]}}),o.languages.setLanguageConfiguration("jsonata",{comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:<editor-fold\\b))"),end:new RegExp("^\\s*//\\s*(?:(?:#?endregion\\b)|(?:</editor-fold>))")}}}),o.languages.registerCompletionItemProvider("jsonata",{provideCompletionItems:function(e,t){var n,o,e=e.getWordUntilPosition(t);if(e)return o=e.startColumn,"$"!==e.word[0]&&1<t.column&&o--,n={startLineNumber:t.lineNumber,endLineNumber:t.lineNumber,startColumn:o,endColumn:e.endColumn},o=(t=Object.keys(jsonata.functions)).map(function(e){var t=e+"("+RED._("jsonata:"+e+".args",{defaultValue:""})+")",o=RED._("jsonata:"+e+".desc",{defaultValue:""});return i(e,(jsonata.getFunctionSnippet(e)+"").trim(),{value:"`"+t+"`\n\n"+o},n,monaco.languages.CompletionItemKind.Function)}),t.sort(function(e,t){return t.length-e.length}),o.unshift(i("randominteger","(\n\t\\$minimum := ${1:1};\n\t\\$maximum := ${2:10};\n\t\\$round((\\$random() * (\\$maximum-\\$minimum)) + \\$minimum, 0)\n)","Random integer between 2 numbers",n)),{suggestions:o}}}),o.languages.registerHoverProvider("jsonata",{provideHover:function(e,t){var e=e.getWordAtPosition(t),o=e&&e.word;if(o&&"$"!==o[0]&&1<t.column){var o="$"+o,n=RED._("jsonata:"+o+".args",{defaultValue:""});if(n)return n=o+"("+n+")",o=RED._("jsonata:"+o+".desc",{defaultValue:""}),{range:new monaco.Range(t.lineNumber,t.column,t.lineNumber,t.column+e.word.length),contents:[{value:"**`"+n+"`**"},{value:o}]}}}}),a=monaco;try{var d=RED.settings.get("codeEditor.monaco.languages.json.jsonDefaults.diagnosticOptions"),l=RED.settings.get("codeEditor.monaco.languages.json.jsonDefaults.modeConfiguration"),d=Object.assign({},{validate:!0},d||{});a.languages.json.jsonDefaults.setDiagnosticsOptions(d),l&&a.languages.json.jsonDefaults.setModeConfiguration(l)}catch(e){console.warn("monaco - Error setting up json options",e)}n=monaco;try{var c=RED.settings.get("codeEditor.monaco.languages.css.cssDefaults.diagnosticsOptions"),u=RED.settings.get("codeEditor.monaco.languages.css.lessDefaults.diagnosticsOption"),p=RED.settings.get("codeEditor.monaco.languages.css.scssDefaults.diagnosticsOption"),f=RED.settings.get("codeEditor.monaco.languages.css.cssDefaults.modeConfiguration"),h=RED.settings.get("codeEditor.monaco.languages.css.lessDefaults.modeConfiguration"),g=RED.settings.get("codeEditor.monaco.languages.css.scssDefaults.modeConfiguration");c&&n.languages.css.cssDefaults.setDiagnosticsOptions(c),u&&n.languages.css.cssDefaults.setDiagnosticsOptions(u),p&&n.languages.css.cssDefaults.setDiagnosticsOptions(p),f&&n.languages.css.cssDefaults.setDiagnosticsOptions(f),h&&n.languages.css.cssDefaults.setDiagnosticsOptions(h),g&&n.languages.css.cssDefaults.setDiagnosticsOptions(g)}catch(e){console.warn("monaco - Error setting up CSS/SCSS/LESS options",e)}r=monaco;try{var m=RED.settings.get("codeEditor.monaco.languages.html.htmlDefaults.options"),v=RED.settings.get("codeEditor.monaco.languages.html.handlebarDefaults.options");m&&r.languages.html.htmlDefaults.setOptions(m),v&&r.languages.html.handlebarDefaults.setOptions(v)}catch(e){console.warn("monaco - Error setting up html options",e)}return D.forEach(function(e){R(e,!0)}),y=!0},create:function(o){function c(e){switch(e=(e="object"==typeof e&&e.path?e.path:e)?e.replace("ace/mode/",""):"text"){case"nrjavascript":case"mjs":e="javascript";break;case"vue":e="html";break;case"appcache":case"sh":case"bash":e="shell";break;case"batchfile":e="bat";break;case"protobuf":e="proto"}return e}var a,e=RED.editor.codeEditor.settings||{},u={JS:{},TS:{}},s=(o.stateId||!1===o.stateId||(o.stateId=RED.editor.generateViewStateId("monaco",o,(o.mode||o.title||"").split("/").pop())),o.element||$("#"+o.id)[0]),r=$("<div>").appendTo(s),s=$("<div>").appendTo(s).addClass("red-ui-editor-text-container")[0];(e=$.extend({},e.options,o)).language=c(o.mode),E&&(e.theme=E),"javascript"==e.language&&(e._language=e.language,e.language="text"),e.minimap||(e.minimap={enabled:!0,maxColumn:50,scale:1,showSlider:"mouseover",renderCharacters:!0}),!1===o.enableBasicAutocompletion&&(e.showSnippets=!1,e.quickSuggestions=!1,e.parameterHints={enabled:!1},e.suggestOnTriggerCharacters=!1,e.acceptSuggestionOnEnter="off",e.tabCompletion="off",e.wordBasedSuggestions=!1),!1===o.enableSnippets&&(e.showSnippets=!1),null==e.mouseWheelZoom&&(e.mouseWheelZoom=!0),null==e.suggestFontSize&&(e.suggestFontSize=12),null==e.formatOnPaste&&(e.formatOnPaste=!0),null==e.foldingHighlight&&(e.foldingHighlight=!0),null==e.foldStyle&&(e.foldStyle=!0),null!=e.readOnly&&(e.readOnly=e.readOnly),!1===e.lineNumbers&&(e.lineNumbers=!1),null==e.theme&&(e.theme=w[0]),null==e.mode&&(e.mode=c(o.mode)),null==e.automaticLayout&&(e.automaticLayout=!0),o.foldStyle&&"none"===o.foldStyle?(e.foldStyle=!1,e.foldingHighlight=!1):(e.foldStyle=!0,e.foldingHighlight=!0),e.roundedSelection=!1!==e.roundedSelection,e.contextmenu=!1!==e.contextmenu,e.snippetSuggestions=!1!==e.enableSnippets,e.value=o.value||"",e.wordSeparators||"jsonata"!=e.language&&"json"!=e.language&&"javascript"!=e.language||(e.wordSeparators="`~!@#%^&*()-=+[{]}|;:'\",.<>/?"),e.fixedOverflowWidgets=!1!==e.fixedOverflowWidgets;((t=RED.utils.getBrowserInfo()).mobile||t.tablet)&&(e.minimap={enabled:!1},e.formatOnType=!1,e.formatOnPaste=!1,e.disableMonospaceOptimizations=!0,e.columnSelection=!1,e.matchBrackets="never",e.maxTokenizationLineLength=1e4,e.stopRenderingLineAfter=2e3,e.roundedSelection=!1,e.trimAutoWhitespace=!1,e.parameterHints={enabled:!1},e.suggestOnTriggerCharacters=!1,e.wordBasedSuggestions=!1,e.suggest={maxVisibleSuggestions:6},!e.accessibilitySupport)&&t.android&&(e.accessibilitySupport="off");var t=!1,n=(null==o.clientSideSuggestions&&(0<=(o.mode+"").indexOf("nrjavascript")||o.globals&&(o.globals.RED||o.globals.Buffer))&&(t=!0),monaco.languages.typescript.javascriptDefaults.getCompilerOptions());function i(t){var n=[],i=[];const a="extraModuleLibs/index.d.ts",s="file://types/extraModuleLibs/index.d.ts";if(t&&0!=t.length){var r=[],o=(Array.prototype.push.apply(r,t),{});for(let e=0;e<t.length;e++){var d=t[e],l=d.var,d=d.module,l=(l&&d&&(i.push("import "+l+"_import = require('"+d+"');\n"),n.push("var "+l+": typeof "+l+"_import;\n")),b[d]);o[d]=l||{package:"other",module:d,path:"other/"+d+".d.ts"}}Object.values(o).forEach(function(e){R(e,!1,u,function(e,t){var o;0==(r=r.filter(function(e){return e.module!=t.module})).length&&(o=i.join("")+("\ndeclare global {\n"+n.join("")+"\n}"),setTimeout(function(){u.JS[a]=monaco.languages.typescript.javascriptDefaults.addExtraLib(o,s)},500))})})}else u.JS[a]=monaco.languages.typescript.javascriptDefaults.addExtraLib(" ",s)}t?(n.lib=["esnext"],D.forEach(function(e){R(e,!1,u)})):n.lib=["esnext","dom"],monaco.languages.typescript.javascriptDefaults.setCompilerOptions(n),i(e.extraLibs);var p=monaco.editor.create(s,e);try{monaco.editor.addKeybindingRule({keybinding:0,command:"-editor.action.insertLineAfter"})}catch(e){console.warn(e)}p.nodered={refreshModuleLibs:i};for(var d=0;d<w.length;d++){var l=w[d];p.addAction(function(t,e){return{id:"set-theme-"+t,label:RED._("monaco.setTheme")+" "+t,precondition:null,keybindingContext:e||null,run:function(e){return e.setTheme(t),null}}}(l))}function f(e,t,o){e.getOption(monaco.editor.EditorOptions.readOnly.id)?e.getModel().pushEditOperations(e.getSelections(),t,function(){return o||null}):e.executeEdits("editor",t)}function h(e,t,o){t=t||50,e?(p.focusMemory&&setTimeout(function(){o.parentElement&&p.focus()},300),p._initState&&setTimeout(function(){o.parentElement&&(p.restoreViewState(p._initState),p._initState=null)},t),"javascript"==p._mode&&"text"==p._tempMode&&(p._tempMode="",setTimeout(function(){o.parentElement&&p.setMode("javascript",void 0,!1)},t))):"javascript"==p._mode&&"text"!=p._tempMode&&o.parentElement&&(p.setMode("text",void 0,!1),p._tempMode="text")}p.selection={},(p.session=p).renderer={},p.setMode=function(e,t,o){null==o&&(o=!0),e=c(e);var n,i=p.getModel(),a=p.getValue();if(i){var s=p.getScrollTop(),r=p.getScrollLeft(),d=p.getSelections(),l=p.getPosition(),a=i.getValue()||"";try{i.isDisposed()||i.dispose()}catch(e){}p.setModel(null),n=monaco.editor.createModel(a||"",e),p.setModel(n),p.setScrollTop(s,1),p.setScrollLeft(r,1),p.setPosition(l),p.setSelections(d)}else n=monaco.editor.createModel(a||"",e),p.setModel(n);t&&"function"==typeof t&&t(),o&&this.resize()},p.getRange=function(){var e=p.getSelection();return e.start={row:e.selectionStartLineNumber-1,column:e.selectionStartColumn-1},e.end={row:e.endLineNumber-1,column:e.endColumn-1},e},p.selection.getRange=p.getRange,p.session.insert=function(e,t){f(this,[{range:new monaco.Range(e.row+1,e.column+1,e.row+1,e.column+1),text:t,forceMoveMarkers:!0}])},p.setReadOnly=function(e){p.updateOptions({readOnly:e})},p.session.replace=function(e,t){f(this,[{range:e,text:t,forceMoveMarkers:!0}])},p.selectAll=function(){var e=p.getModel().getFullModelRange();p.setSelection(e)},p.clearSelection=function(){p.setPosition({column:1,lineNumber:1})},p.getSelectedText=function(){return p.getModel().getValueInRange(p.getSelection())},p.insertSnippet=function(e){p.getContribution("snippetController2").insert(e)},p.destroy=function(){a&&clearInterval(a);try{if(Object.keys(u.JS).length){var t=Object.entries(u.JS);for(let e=0;e<t.length;e++)try{var o=t[e][0];u.JS[o].dispose(),u.JS[o]=null,delete u.JS[o]}catch(e){}}if(Object.keys(u.TS).length){var n=Object.entries(u.TS);for(let e=0;e<n.length;e++)try{var i=n[e][0];u.TS[i].dispose(),u.TS[i]=null,delete u.TS[i]}catch(e){}}}catch(e){}try{var e=this.getModel();e&&!e.isDisposed()&&(p._initState=null,e.dispose()),this.setModel(null)}catch(e){}$(s).remove(),$(r).remove(),p.dispose()},p.resize=function(){p.layout()},p.renderer.updateFull=p.resize.bind(p),p.getSession=function(){return p},p.getLength=function(){var e=p.getModel();return null!==e?e.getLineCount():0},p.scrollToLine=function(e,t){p.revealLine(e,t)},p.moveCursorTo=function(e,t){p.setPosition({lineNumber:e,column:t})},p.getAnnotations=function(){let e;try{var t=p.getModel();if(null!==t){const i=t.getLanguageId(),a=t.uri.authority,s=t.uri.path,r=t.uri.scheme;var o=(monaco.editor.getModelMarkers(t)||[]).filter(function(e){var t=e.resource.authority,o=e.resource.path,n=e.resource.scheme;return e.owner==i&&t===a&&o===s&&n===r});e=o.map(function(e){return{row:e.startLineNumber,column:e.startColumn,endColumn:e.endColumn,endRow:e.endLineNumber,text:e.message,type:monaco.MarkerSeverity[e.severity]?monaco.MarkerSeverity[e.severity].toLowerCase():e.severity}})}}catch(e){console.log("Failed to get editor Annotations",e)}return e||[]},p.gotoLine=function(e,t){p.setPosition({lineNumber:e+1,column:t+1})},p.getCursorPosition=function(){var e=p.getPosition();return{row:e.lineNumber-1,column:e.column-1}},p.setTheme=function(e){monaco.editor.setTheme(e),E=e},p.on=function(e,t){switch(e){case"change":case"input":e="onDidChangeModelContent";break;case"focus":e="onDidFocusEditorWidget";break;case"blur":e="onDidBlurEditorWidget";break;case"paste":e="onDidPaste"}var o;if(p[e])o=p[e];else{if(!monaco.editor[e])return void console.warn("monaco - unknown event: "+e);o=monaco.editor[e]}o(t)},p.getUndoManager=function(){var e={};return e.isClean=function(){try{return!1===p.getModel().canUndo()}catch(e){return!1}}.bind(p),e},p.setFontSize=function(e){p.updateOptions({fontSize:e})},p.focusMemory=o.focus,p._mode=e.language,e._language&&(p._mode=e._language,p._tempMode=e.language),p.onDidBlurEditorWidget(function(){p.focusMemory=!1,p.saveView(),0==x(s)&&h(!1,0,s)}),p.onDidFocusEditorWidget(function(){h(!0,10,s)});var g=s,m=h;try{var v={root:$(g).closest("div.red-ui-tray-content")[0]||document,attributes:!0,childList:!0};new IntersectionObserver(function(e,t){e.forEach(function(e){m(0<e.intersectionRatio,5,e.target)})},v).observe(g)}catch(e){try{let t=x(s);a=setInterval(function(){var e=x(s);e!=t&&m(e,5,g),t=e},100)}catch(e){}}return"markdown"===e.language&&($(s).addClass("red-ui-editor-text-container-toolbar"),p.toolbar=RED.editor.customEditTypes._markdown.buildToolbar(r,p),!1!==o.expandable&&(t=$('<button type="button" class="red-ui-button" style="float: right;"><i class="fa fa-expand"></i></button>').appendTo(p.toolbar),RED.popover.tooltip(t,RED._("markdownEditor.expand")),t.on("click",function(e){e.preventDefault();e=p.getValue();p.saveView(),RED.editor.editMarkdown({value:e,width:"Infinity",stateId:o.stateId,cancel:function(){p.focus()},complete:function(e,t){p.setValue(e,-1),setTimeout(function(){p.focus(),p.restoreView()},300)}})})),n=$('<button type="button" class="red-ui-editor-text-help red-ui-button red-ui-button-small"><i class="fa fa-question"></i></button>').appendTo($(s).parent()),RED.popover.create({target:n,trigger:"click",size:"small",direction:"left",content:RED._("markdownEditor.format"),autoClose:50})),p.getView=function(){return p.saveViewState()},p.saveView=function(e){var t;if(o.stateId)return window._editorStateMonaco=window._editorStateMonaco||{},t=p.getView(),window._editorStateMonaco[o.stateId]=t},p.restoreView=function(e){if(o.stateId){window._editorStateMonaco=window._editorStateMonaco||{};e=e||window._editorStateMonaco[o.stateId];if(e)try{p.type?p.restoreViewState(e):p._initState=e}catch(e){delete window._editorStateMonaco[o.stateId]}}},p.restoreView(),o.cursor&&!p._initState&&(v=o.cursor.row||o.cursor.lineNumber,e=o.cursor.column||o.cursor.col,p.gotoLine(v,e)),p.type="monaco",p}}}(),RED.eventLog=function(){var i,n=[],t=!1;return{init:function(){$('<script type="text/x-red" data-template-name="_eventLog"><div class="form-row node-text-editor-row"><div style="height: 100%;min-height: 150px;" class="node-text-editor" id="red-ui-event-log-editor"></div></div><\/script>').appendTo("#red-ui-editor-node-configs"),RED.actions.add("core:show-event-log",RED.eventLog.show)},show:function(){var e;t||(t=!0,e={title:RED._("eventLog.title"),width:1/0,buttons:[{id:"node-dialog-close",text:RED._("common.label.close"),click:function(){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()),n=0;n<t.size();n++)o-=$(t[n]).outerHeight(!0);o-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",o+"px"),i.resize()},open:function(e){e.find(".red-ui-tray-body");e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_eventLog","editor");i=RED.editor.createEditor({mode:"ace/mode/shell",id:"red-ui-event-log-editor",value:n.join("\n"),lineNumbers:!1,readOnly:!0,options:{showPrintMargin:!1}}),setTimeout(function(){i.scrollToLine(i.getSession().getLength())},200),e.i18n()},close:function(){i.destroy(),i=null,t=!1},show:function(){}},RED.tray.show(e))},log:function(e,t){var o=new Date(t.ts).toISOString()+" ";t.type&&(o+="["+t.type+"] "),t.data&&(t=(t=t.data).endsWith("\n")?t.substring(0,t.length-1):t).split(/\n/).forEach(function(e){e=o+e,n.push(e),500<n.length&&(n=n.slice(-500)),i&&(i.getSession().insert({row:i.getSession().getLength(),column:0},"\n"+e),i.scrollToLine(i.getSession().getLength()))})},startEvent:function(e){n.push(""),n.push("-----------------------------------------------------------"),n.push((new Date).toISOString()+" "+e),n.push("")}}}(),RED.tray=function(){var h,g=[],m=!1,o=!1;function n(e){var t,o,n=$('<div class="red-ui-tray"></div>'),i=$('<div class="red-ui-tray-header editor-tray-header"></div>').appendTo(n),a=$('<div class="red-ui-tray-body-wrapper"></div>').appendTo(n),s=$('<div class="red-ui-tray-body editor-tray-body"></div>').appendTo(a),a=$('<div class="red-ui-tray-footer"></div>').appendTo(n),r=$('<div class="red-ui-tray-resize-handle"></div>').appendTo(n),d=(e.title&&((t=g.map(function(e){return e.options.title})).push(e.title),t='<ul class="red-ui-tray-breadcrumbs"><li>'+t.join("</li><li>")+"</li></ul>",$('<div class="red-ui-tray-titlebar">'+t+"</div>").appendTo(i)),e.width===1/0&&(e.maximized=!0,r.addClass("red-ui-tray-resize-maximised")),$('<div class="red-ui-tray-toolbar"></div>').appendTo(i));if(e.buttons)for(var l=0;l<e.buttons.length;l++){var c=e.buttons[l],u=$("<button>").button().appendTo(d);c.id&&u.attr("id",c.id),c.text&&u.text(c.text),c.click&&u.on("click",function(t){return function(e){$(this).hasClass("disabled")||t(e)}}(c.click)),c.class&&(u.addClass(c.class),"primary"===c.class)&&(o=c)}n.appendTo(h);var p={tray:n,header:i,body:s,footer:a,options:e,primaryButton:o};function f(){$("#red-ui-header-shade").show(),$("#red-ui-editor-shade").show(),$("#red-ui-palette-shade").show(),$(".red-ui-sidebar-shade").show(),p.preferredWidth=Math.max(n.width(),500),e.maximized||s.css({minWidth:p.preferredWidth-40}),e.width?(e.width>$("#red-ui-editor-stack").position().left-8&&(e.width=$("#red-ui-editor-stack").position().left-8),n.width(e.width)):n.width(p.preferredWidth),p.width=n.width(),p.width>$("#red-ui-editor-stack").position().left-8&&(p.width=Math.max(0,$("#red-ui-editor-stack").position().left-8),n.width(p.width)),$("#red-ui-main-container").scrollLeft(0),n.css({right:-(n.width()+10)+"px",transition:"right 0.25s ease"}),v(),m=!0,setTimeout(function(){setTimeout(function(){e.width||n.width(Math.min(p.preferredWidth,$("#red-ui-editor-stack").position().left-8)),e.resize&&e.resize({width:n.width()}),e.show&&e.show(),setTimeout(function(){m=!1,b(),v()},200),e.hasOwnProperty("focusElement")?!1!==e.focusElement&&$(e.focusElement).trigger("focus"):s.find(":focusable:first").trigger("focus")},150),n.css({right:0})},0)}g.push(p),e.maximized||n.draggable({handle:r,axis:"x",start:function(e,t){n.width("auto")},drag:function(e,t){var o=h.position().left+t.position.left;o<7?t.position.left+=7-o:t.position.left>-p.preferredWidth-1&&(t.position.left=-Math.min(h.position().left-7,p.preferredWidth-1)),p.options.resize&&setTimeout(function(){p.options.resize({width:-t.position.left})},0),p.width=-t.position.left},stop:function(e,t){n.width(-t.position.left),n.css({left:""}),p.options.resize&&p.options.resize({width:-t.position.left}),p.width=-t.position.left}}),e.open?1===e.open.length?(e.open(n),f()):e.open(n,f):f()}function v(){var e,t;0<g.length&&((e=g[g.length-1]).options.maximized||e.width>$("#red-ui-editor-stack").position().left-8?(e.width=$("#red-ui-editor-stack").position().left-8,e.tray.width(e.width)):e.width<e.preferredWidth&&(e.width=Math.min($("#red-ui-editor-stack").position().left-8,e.preferredWidth),e.tray.width(e.width)),t=e.tray.height()-e.header.outerHeight()-e.footer.outerHeight(),e.body.height(t),e.options.resize)&&e.options.resize({width:e.width,height:t})}function b(){setTimeout(function(){$("#red-ui-editor-stack").css("zIndex","13")},300)}function i(){$("#red-ui-editor-stack").css("zIndex","9")}return{init:function(){h=$("#red-ui-editor-stack"),$(window).on("resize",v),RED.events.on("sidebar:resize",v),$("#red-ui-editor-shade").on("click",function(){var e;m||(e=g[g.length-1])&&e.primaryButton&&e.primaryButton.click()})},show:function(e){if(i(),e){if(o)throw new Error("Cannot add to stack whilst hidden");var t;0<g.length&&!e.overlay?(t=g[g.length-1],"inherit"===e.width&&(e.width=t.tray.width()),t.tray.css({right:-(t.tray.width()+10)+"px"}),setTimeout(function(){t.tray.detach(),n(e),RED.events.emit("editor:change")},250)):(0<g.length&&g[g.length-1].tray.css("z-index",0),RED.events.emit("editor:open"),n(e))}else 0<g.length&&(g[g.length-1].tray.css({right:0}),$("#red-ui-header-shade").show(),$("#red-ui-editor-shade").show(),$("#red-ui-palette-shade").show(),$(".red-ui-sidebar-shade").show(),o=!1)},hide:function(){var e;i(),0<g.length&&((e=g[g.length-1]).tray.css({right:-(e.tray.width()+10)+"px"}),$("#red-ui-header-shade").hide(),$("#red-ui-editor-shade").hide(),$("#red-ui-palette-shade").hide(),$(".red-ui-sidebar-shade").hide(),o=!0)},resize:v,close:function(t){var o;i(),0<g.length&&((o=g.pop()).tray.css({right:-(o.tray.width()+10)+"px"}),setTimeout(function(){try{o.options.close&&o.options.close()}catch(e){}var e;o.tray.remove(),0<g.length&&((e=g[g.length-1]).options.overlay?(v(),e.options.show&&e.options.show()):(e.tray.appendTo("#red-ui-editor-stack"),setTimeout(function(){v(),e.tray.css({right:0}),e.options.show&&(b(),v(),e.options.show())},0))),t&&t(),0===g.length?($("#red-ui-header-shade").hide(),$("#red-ui-editor-shade").hide(),$("#red-ui-palette-shade").hide(),$(".red-ui-sidebar-shade").hide(),RED.events.emit("editor:close"),RED.view.focus()):(g[g.length-1].tray.css("z-index","auto"),RED.events.emit("editor:change"))},250))}}}(),RED.clipboard=function(){var m,v,a,o,c,u,r,s,b,e,t,d=!1,l={};function n(){m=$('<div id="red-ui-clipboard-dialog" class="hide"><form class="dialog-form form-horizontal"></form></div>').appendTo("#red-ui-editor").dialog({modal:!0,autoOpen:!1,width:700,resizable:!1,classes:{"ui-dialog":"red-ui-editor-dialog","ui-dialog-titlebar-close":"hide","ui-widget-overlay":"red-ui-editor-dialog"},buttons:[{id:"red-ui-clipboard-dialog-cancel",text:RED._("common.label.cancel"),click:function(){$(this).dialog("close"),RED.view.focus()}},{id:"red-ui-clipboard-dialog-download",class:"primary",text:RED._("clipboard.download"),click:function(){var e,t,o=$("#red-ui-clipboard-dialog-export-text").val();e="flows.json",o=o,window.navigator.msSaveBlob?(t=new Blob([o],{type:"data:application/json;charset=utf-8"}),navigator.msSaveBlob(t,e)):((t=document.createElement("a")).setAttribute("href","data:application/json;charset=utf-8,"+encodeURIComponent(o)),t.setAttribute("download",e),t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t)),$(this).dialog("close"),RED.view.focus()}},{id:"red-ui-clipboard-dialog-export",class:"primary",text:RED._("clipboard.export.copy"),click:function(){var e,t,o,n,i,a,s;"red-ui-clipboard-dialog-export-tab-clipboard"===r?(e=$("#red-ui-clipboard-dialog-export-text").val(),$(this).dialog("close"),D(e),RED.notify(RED._("clipboard.nodesExported"),{id:"clipboard"}),RED.view.focus()):(t=$("#red-ui-clipboard-dialog-export-text").val(),(o=l[r].getSelected()).children||(o=o.parent),n=$("#red-ui-clipboard-dialog-tab-library-name").val().trim(),i=function(){$.ajax({url:"library/"+o.library+"/"+o.type+"/"+o.path+n,type:"POST",data:t,contentType:"application/json; charset=utf-8"}).done(function(){$(m).dialog("close"),RED.view.focus(),RED.notify(RED._("library.exportedToLibrary"),"success")}).fail(function(e,t,o){401===e.status?RED.notify(RED._("library.saveFailed",{message:RED._("user.notAuthorized")}),"error"):RED.notify(RED._("library.saveFailed",{message:e.responseText}),"error")})},o.children&&(a=!1,o.children.forEach(function(e){e.label===n&&(a=!0)}),a)?(m.dialog("close"),s=RED.notify(RED._("clipboard.export.exists",{file:RED.utils.sanitize(n)}),{type:"warning",fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){s.hideNotification(),m.dialog("open")}},{text:RED._("clipboard.export.overwrite"),click:function(){s.hideNotification(),i()}}]})):i())}},{id:"red-ui-clipboard-dialog-ok",class:"primary",text:RED._("common.label.import"),click:function(){var e,t="red-ui-clipboard-dialog-import-opt-new"===$("#red-ui-clipboard-dialog-import-opt > a.selected").attr("id");"red-ui-clipboard-dialog-import-tab-clipboard"===r?R($("#red-ui-clipboard-dialog-import-text").val(),t):(e=l[r].getSelected()).path&&$.get("library/"+e.library+"/"+e.type+"/"+e.path,function(e){R(e,t)}),$(this).dialog("close"),RED.view.focus()}},{id:"red-ui-clipboard-dialog-import-conflict",class:"primary",text:RED._("clipboard.import.importSelected"),click:function(){var t={},e=($('#red-ui-clipboard-dialog-import-conflicts-list input[type="checkbox"]').each(function(){t[$(this).attr("data-node-id")]=this.checked?"import":"skip"}),$('.red-ui-clipboard-dialog-import-conflicts-controls input[type="checkbox"]').each(function(){$(this).attr("disabled")||(t[$(this).attr("data-node-id")]=this.checked?"replace":"copy")}),b.importOptions.importMap=t,b.importNodes.filter(function(e){return t[e.id]&&!t[e.z]||(t[e.id]=t[e.z]),"skip"!==t[e.id]}));RED.view.importNodes(e,b.importOptions),$(this).dialog("close"),RED.view.focus()}}],open:function(e,t){RED.keyboard.disable()},beforeClose:function(e){var t,o;s&&"red-ui-clipboard-dialog-export-tab-clipboard"===r&&(t=s.getTabIndex("red-ui-clipboard-dialog-export-tab-clipboard-json"),o=s.activeIndex(),RED.settings.set("editor.dialog.export.json-view",o===t))},close:function(e){RED.keyboard.enable(),c&&(c.close(!0),u=null)}}),v=m.children(".dialog-form"),a='<div class="form-row"><div style="display: flex; justify-content: space-between;"><div class="form-row"><label style="width:auto;margin-right: 10px;" data-i18n="common.label.export"></label><span id="red-ui-clipboard-dialog-export-rng-group" class="button-group"><a id="red-ui-clipboard-dialog-export-rng-selected" class="red-ui-button toggle" href="#" data-i18n="clipboard.export.selected"></a><a id="red-ui-clipboard-dialog-export-rng-flow" class="red-ui-button toggle" href="#" data-i18n="clipboard.export.current"></a><a id="red-ui-clipboard-dialog-export-rng-full" class="red-ui-button toggle" href="#" data-i18n="clipboard.export.all"></a></span></div><div class="form-row"><label style="width:auto;margin-right: 10px;" data-i18n="common.label.format"></label><span id="red-ui-clipboard-dialog-export-fmt-group" class="button-group"><a id="red-ui-clipboard-dialog-export-fmt-mini" class="red-ui-button red-ui-button toggle" href="#" data-i18n="clipboard.export.compact"></a><a id="red-ui-clipboard-dialog-export-fmt-full" class="red-ui-button red-ui-button toggle" href="#" data-i18n="clipboard.export.formatted"></a></span></div></div></div><div class="red-ui-clipboard-dialog-box"><div class="red-ui-clipboard-dialog-tabs"><ul id="red-ui-clipboard-dialog-export-tabs"></ul></div><div id="red-ui-clipboard-dialog-export-tabs-content" class="red-ui-clipboard-dialog-tabs-content"><div id="red-ui-clipboard-dialog-export-tab-clipboard" class="red-ui-clipboard-dialog-tab-clipboard"><div id="red-ui-clipboard-dialog-export-tab-clipboard-tab-bar"><ul id="red-ui-clipboard-dialog-export-tab-clipboard-tabs"></ul></div><div class="red-ui-clipboard-dialog-export-tab-clipboard-tab" id="red-ui-clipboard-dialog-export-tab-clipboard-preview"><div id="red-ui-clipboard-dialog-export-tab-clipboard-preview-list"></div></div><div class="red-ui-clipboard-dialog-export-tab-clipboard-tab" id="red-ui-clipboard-dialog-export-tab-clipboard-json"><div class="form-row" style="height:calc(100% - 10px)"><textarea readonly id="red-ui-clipboard-dialog-export-text"></textarea></div></div></div><div class="form-row" id="red-ui-clipboard-dialog-export-tab-library-filename"><label data-i18n="clipboard.export.exportAs"></label><input id="red-ui-clipboard-dialog-tab-library-name" type="text"></div></div></div>',o='<div class="red-ui-clipboard-dialog-box" style="margin-bottom: 12px"><div class="red-ui-clipboard-dialog-tabs"><ul id="red-ui-clipboard-dialog-import-tabs"></ul></div><div id="red-ui-clipboard-dialog-import-tabs-content" class="red-ui-clipboard-dialog-tabs-content"><div id="red-ui-clipboard-dialog-import-tab-clipboard" class="red-ui-clipboard-dialog-tab-clipboard"><div class="form-row"><span data-i18n="clipboard.pasteNodes"></span> <a class="red-ui-button" id="red-ui-clipboard-dialog-import-file-upload-btn"><i class="fa fa-upload"></i> <span data-i18n="clipboard.selectFile"></span></a><input type="file" id="red-ui-clipboard-dialog-import-file-upload" accept=".json" style="display:none"></div><div class="form-row" style="height:calc(100% - 47px)"><textarea id="red-ui-clipboard-dialog-import-text"></textarea></div></div></div></div><div class="form-row"><label style="width:auto;margin-right: 10px;" data-i18n="clipboard.import.import"></label><span id="red-ui-clipboard-dialog-import-opt" class="button-group"><a id="red-ui-clipboard-dialog-import-opt-current" class="red-ui-button toggle selected" href="#" data-i18n="clipboard.export.current"></a><a id="red-ui-clipboard-dialog-import-opt-new" class="red-ui-button toggle" href="#" data-i18n="clipboard.import.newFlow"></a></span></div>',importConflictsDialog='<div class="form-row"><div class="form-row"><p data-i18n="clipboard.import.conflictNotification1"></p><p data-i18n="clipboard.import.conflictNotification2"></p></div><div class="red-ui-clipboard-dialog-import-conflicts-list-container"><div id="red-ui-clipboard-dialog-import-conflicts-list"></div></div></div>'}function p(){e&&clearTimeout(e),e=setTimeout(function(){var e=$("#red-ui-clipboard-dialog-tab-library-name"),t=e.val().trim();0<t.length&&!/[\/\\]/.test(t)?(e.removeClass("input-error"),$("#red-ui-clipboard-dialog-export").button("enable")):(e.addClass("input-error"),$("#red-ui-clipboard-dialog-export").button("disable"))},100)}function y(e){var t=JSON.parse(e);if(!Array.isArray(t))throw new Error(RED._("clipboard.import.errors.notArray"));for(let e=0;e<t.length;e++){if("object"!=typeof t[e])throw new Error(RED._("clipboard.import.errors.itemNotObject",{index:e}));if(!Object.hasOwn(t[e],"id"))throw new Error(RED._("clipboard.import.errors.missingId",{index:e}));if(!Object.hasOwn(t[e],"type"))throw new Error(RED._("clipboard.import.errors.missingType",{index:e}))}return t}function i(){var e;"red-ui-clipboard-dialog-import-tab-clipboard"===r?(t&&clearTimeout(t),t=setTimeout(function(){var t=$("#red-ui-clipboard-dialog-import-text");if(""===(o=t.val().trim()))c.close(!0),u=null,t.removeClass("input-error"),$("#red-ui-clipboard-dialog-ok").button("disable");else try{y(o),u=null,c.close(!0),t.removeClass("input-error"),t.val(o),$("#red-ui-clipboard-dialog-ok").button("enable")}catch(e){if(""!==o){t.addClass("input-error");t=e.toString();if(t!==u){var o,n=$('<div class="red-ui-clipboard-import-error"></div>').text(t),i=/at position (\d+)/i.exec(t);if(i)d=parseInt(i[1]);else if(i=/at line (\d+) column (\d+)/i.exec(t)){for(var a=parseInt(i[1])-1,s=parseInt(i[2])-1,r=o.split("\n"),d=0,l=0;l<a;l++)d+=r[l].length+1;d+=s}void 0!==d&&(o=o.replace(/\n/g,"↵"),parseInt(i[1]),s=$("<div>").appendTo(n),i=$("<pre>").appendTo(s),$("<span>").text(o.substring(d-12,d)).appendTo(i),$('<span class="error">').text(o.charAt(d)).appendTo(i),$("<span>").text(o.substring(d+1,d+12)).appendTo(i)),c.close(!0).setContent(n).open(),u=t}}else u=null;$("#red-ui-clipboard-dialog-ok").button("disable")}},100)):(e=l[r].getSelected())&&e.label&&!e.children?$("#red-ui-clipboard-dialog-ok").button("enable"):$("#red-ui-clipboard-dialog-ok").button("disable")}function f(e="clipboard"){var n,t;d||(v.empty(),v.append($(o)),(n=RED.tabs.create({id:"red-ui-clipboard-dialog-import-tabs",vertical:!0,onchange:function(e){$("#red-ui-clipboard-dialog-import-tabs-content").children().hide(),$("#"+e.id).show(),r=e.id,c&&(c.close(!0),u=null),"red-ui-clipboard-dialog-import-tab-clipboard"===e.id?$("#red-ui-clipboard-dialog-import-text").trigger("focus"):l[e.id].focus(),i()}})).addTab({id:"red-ui-clipboard-dialog-import-tab-clipboard",label:RED._("clipboard.clipboard")}),(RED.settings.libraries||[]).forEach(function(e){var t="red-ui-clipboard-dialog-import-tab-"+e.id,o=(n.addTab({id:t,label:RED._(e.label||e.id)}),$('<div id="red-ui-clipboard-dialog-import-tab-library" class="red-ui-clipboard-dialog-tab-library"></div>').attr("id",t).hide().appendTo("#red-ui-clipboard-dialog-import-tabs-content")),o=RED.library.createBrowser({container:o,onselect:function(e){e&&e.label&&!e.children?$("#red-ui-clipboard-dialog-ok").button("enable"):$("#red-ui-clipboard-dialog-ok").button("disable")},onconfirm:function(e){e&&e.label&&!e.children&&$("#red-ui-clipboard-dialog-ok").trigger("click")}});w(o,e),l[t]=o}),$("#red-ui-clipboard-dialog-tab-library-name").on("keyup",p),$("#red-ui-clipboard-dialog-tab-library-name").on("paste",function(){setTimeout(p,10)}),$("#red-ui-clipboard-dialog-export").button("enable"),v.i18n(),$("#red-ui-clipboard-dialog-ok").show(),$("#red-ui-clipboard-dialog-cancel").show(),$("#red-ui-clipboard-dialog-export").hide(),$("#red-ui-clipboard-dialog-download").hide(),$("#red-ui-clipboard-dialog-import-conflict").hide(),$("#red-ui-clipboard-dialog-ok").button("disable"),$("#red-ui-clipboard-dialog-import-text").on("keyup",i),$("#red-ui-clipboard-dialog-import-text").on("paste",function(){setTimeout(i,10)}),0===RED.workspaces.active()||RED.workspaces.isLocked()?($("#red-ui-clipboard-dialog-import-opt-current").addClass("disabled").removeClass("selected"),$("#red-ui-clipboard-dialog-import-opt-new").addClass("selected")):($("#red-ui-clipboard-dialog-import-opt-current").removeClass("disabled").addClass("selected"),$("#red-ui-clipboard-dialog-import-opt-new").removeClass("selected")),$("#red-ui-clipboard-dialog-import-opt > a").on("click",function(e){e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected")||($(this).parent().children().removeClass("selected"),$(this).addClass("selected"))}),$("#red-ui-clipboard-dialog-import-file-upload").on("change",function(){var e=new FileReader;e.onload=function(){$("#red-ui-clipboard-dialog-import-text").val(e.result),i()},e.readAsText($(this).prop("files")[0])}),$("#red-ui-clipboard-dialog-import-file-upload-btn").on("click",function(e){e.preventDefault(),$("#red-ui-clipboard-dialog-import-file-upload").trigger("click")}),n.activateTab("red-ui-clipboard-dialog-import-tab-"+e),"clipboard"===e&&setTimeout(function(){$("#red-ui-clipboard-dialog-import-text").trigger("focus")},100),e=400,(t=$(window).height())<600&&(e=400-(600-t)),$(".red-ui-clipboard-dialog-box").height(e),m.dialog("option","title",RED._("clipboard.importNodes")).dialog("option","width",700).dialog("open"),c=RED.popover.create({target:$("#red-ui-clipboard-dialog-import-text"),trigger:"manual",direction:"bottom",content:""}))}function h(e="clipboard",t="auto"){var n,i,o;d||(v.empty(),v.append($(a)),s=null,(n=RED.tabs.create({id:"red-ui-clipboard-dialog-export-tabs",vertical:!0,onchange:function(e){$("#red-ui-clipboard-dialog-export-tabs-content").children().hide(),$("#"+e.id).show(),r=e.id,"red-ui-clipboard-dialog-export-tab-clipboard"===e.id?($("#red-ui-clipboard-dialog-export").button("option","label",RED._("clipboard.export.copy")),$("#red-ui-clipboard-dialog-download").show(),$("#red-ui-clipboard-dialog-export-tab-library-filename").hide()):($("#red-ui-clipboard-dialog-export").button("option","label",RED._("clipboard.export.export")),$("#red-ui-clipboard-dialog-download").hide(),$("#red-ui-clipboard-dialog-export-tab-library-filename").show(),l[r].focus())}})).addTab({id:"red-ui-clipboard-dialog-export-tab-clipboard",label:RED._("clipboard.clipboard")}),(RED.settings.libraries||[]).forEach(function(e){var t,o;e.readOnly||(t="red-ui-clipboard-dialog-export-tab-library-"+e.id,n.addTab({id:t,label:RED._(e.label||e.id)}),o=$('<div class="red-ui-clipboard-dialog-export-tab-library-browser red-ui-clipboard-dialog-tab-library"></div>').attr("id",t).hide().insertBefore("#red-ui-clipboard-dialog-export-tab-library-filename"),w(o=RED.library.createBrowser({container:o,folderTools:!0,onselect:function(e){e&&e.label&&!e.children&&$("#red-ui-clipboard-dialog-tab-library-name").val(e.label)}}),e),l[t]=o)}),$("#red-ui-clipboard-dialog-tab-library-name").on("keyup",p),$("#red-ui-clipboard-dialog-tab-library-name").on("paste",function(){setTimeout(p,10)}),$("#red-ui-clipboard-dialog-export").button("enable"),(s=RED.tabs.create({id:"red-ui-clipboard-dialog-export-tab-clipboard-tabs",onchange:function(e){$(".red-ui-clipboard-dialog-export-tab-clipboard-tab").hide(),$("#"+e.id).show()}})).addTab({id:"red-ui-clipboard-dialog-export-tab-clipboard-preview",label:RED._("clipboard.exportNodes")}),s.addTab({id:"red-ui-clipboard-dialog-export-tab-clipboard-json",label:RED._("editor.types.json")}),!0===RED.settings.get("editor.dialog.export.json-view")&&s.activateTab("red-ui-clipboard-dialog-export-tab-clipboard-json"),$("#red-ui-clipboard-dialog-export-tab-clipboard-preview-list").css({position:"absolute",top:0,right:0,bottom:0,left:0}).treeList({data:[]}),g(),$("#red-ui-clipboard-dialog-tab-library-name").val("flows.json").select(),v.i18n(),i=RED.settings.flowFilePretty?"red-ui-clipboard-dialog-export-fmt-full":"red-ui-clipboard-dialog-export-fmt-mini",!1!==(o=RED.settings.get("editor.dialog.export.pretty"))&&!0!==o||(i=o?"red-ui-clipboard-dialog-export-fmt-full":"red-ui-clipboard-dialog-export-fmt-mini"),$("#red-ui-clipboard-dialog-export-fmt-group > a").on("click",function(e){var t,o;e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected")?$("#red-ui-clipboard-dialog-export-text").trigger("focus"):($(this).parent().children().removeClass("selected"),$(this).addClass("selected"),0<(e=$("#red-ui-clipboard-dialog-export-text").val()).length&&(t=JSON.parse(e),e=(o="red-ui-clipboard-dialog-export-fmt-full"===(i=$(this).attr("id")))?JSON.stringify(t,null,4):JSON.stringify(t),$("#red-ui-clipboard-dialog-export-text").val(e),setTimeout(function(){$("#red-ui-clipboard-dialog-export-text").scrollTop(0)},50),$("#red-ui-clipboard-dialog-export-text").trigger("focus"),RED.settings.set("editor.dialog.export.pretty",o)))}),$("#red-ui-clipboard-dialog-export-rng-group > a").on("click",function(e){var t,o,n;e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected")||($(this).parent().children().removeClass("selected"),$(this).addClass("selected"),t=$(this).attr("id").substring("red-ui-clipboard-dialog-export-rng-".length),e="",o=null,"selected"===t?(0<(n=RED.workspaces.selection()).length?(o=[],n.forEach(function(e){o.push(e),o=(o=o.concat(RED.nodes.groups(e.id))).concat(RED.nodes.filterNodes({z:e.id}))})):o=RED.view.selection().nodes||[],o=RED.nodes.createExportableNodeSet(o.filter(function(e){return"subflow"!==e.type}))):"flow"===t?(n=RED.workspaces.active(),o=(o=(o=RED.nodes.groups(n)).concat(RED.nodes.junctions(n))).concat(RED.nodes.filterNodes({z:n})),RED.nodes.eachConfig(function(e){e.z===RED.workspaces.active()&&!1===e._def.hasUsers&&o.push(e)}),n=RED.nodes.workspace(n)||RED.nodes.subflow(n),o.unshift(n),o=RED.nodes.createExportableNodeSet(o)):"full"===t&&(o=RED.nodes.createCompleteNodeSet({credentials:!1})),0<(e=null!==o?"red-ui-clipboard-dialog-export-fmt-full"===i?JSON.stringify(o,null,4):JSON.stringify(o):e).length?$("#red-ui-clipboard-dialog-export").removeClass("disabled"):$("#red-ui-clipboard-dialog-export").addClass("disabled"),$("#red-ui-clipboard-dialog-export-text").val(e),setTimeout(function(){$("#red-ui-clipboard-dialog-export-text").scrollTop(0),g(t)},50))}),$("#red-ui-clipboard-dialog-ok").hide(),$("#red-ui-clipboard-dialog-cancel").hide(),$("#red-ui-clipboard-dialog-export").hide(),$("#red-ui-clipboard-dialog-import-conflict").hide(),(0===RED.workspaces.active()?($("#red-ui-clipboard-dialog-export-rng-selected").addClass("disabled").removeClass("selected"),$("#red-ui-clipboard-dialog-export-rng-flow").addClass("disabled").removeClass("selected"),$("#red-ui-clipboard-dialog-export-rng-full")):0<RED.workspaces.selection().length||RED.view.selection().nodes?$("#red-ui-clipboard-dialog-export-rng-selected"):($("#red-ui-clipboard-dialog-export-rng-selected").addClass("disabled").removeClass("selected"),$("#red-ui-clipboard-dialog-export-rng-flow"))).trigger("click"),"flow"!==t||$("#red-ui-clipboard-dialog-export-rng-flow").hasClass("disabled")||$("#red-ui-clipboard-dialog-export-rng-flow").trigger("click"),("red-ui-clipboard-dialog-export-fmt-full"===i?$("#red-ui-clipboard-dialog-export-fmt-full"):$("#red-ui-clipboard-dialog-export-fmt-mini")).trigger("click"),n.activateTab("red-ui-clipboard-dialog-export-tab-"+e),o=400,(t=$(window).height())<600&&(o=400-(600-t)),$(".red-ui-clipboard-dialog-box").height(o),m.dialog("option","title",RED._("clipboard.exportNodes")).dialog("option","width",700).dialog("open"),$("#red-ui-clipboard-dialog-export-text").trigger("focus"),$("#red-ui-clipboard-dialog-cancel").show(),$("#red-ui-clipboard-dialog-export").show(),$("#red-ui-clipboard-dialog-download").show(),$("#red-ui-clipboard-dialog-import-conflict").hide())}function g(t){var e=$("#red-ui-clipboard-dialog-export-text").val()||"[]",e=JSON.parse(e),o={},n={},i=[],a=[],s=[],r=(e.forEach(function(e){"tab"===e.type?(o[e.id]={element:_(e),deferBuild:"flow"!==t,expanded:"flow"===t,children:[]},a.push(o[e.id])):"subflow"===e.type?(n[e.id]={element:k(e,!1),deferBuild:!0,children:[]},s.push(n[e.id])):i.push(e)}),[]),d=[],e=(i.forEach(function(e){var t={element:k(e,!1)};e.z?o[e.z]||n[e.z]?o[e.z]?o[e.z].children.push(t):n[e.z]&&n[e.z].children.push(t):d.push(t):r.push(t)}),[]);0<d.length&&(e=e.concat(d)),"flow"===t?e=e.concat(a):0<a.length&&e.push({label:RED._("menu.label.flows"),deferBuild:20<a.length,expanded:a.length<=20,children:a}),0<s.length&&e.push({label:RED._("menu.label.subflows"),deferBuild:10<s.length,expanded:s.length<=10,children:s}),0<r.length&&e.push({label:RED._("sidebar.info.globalConfig"),deferBuild:10<r.length,expanded:r.length<=10,children:r}),$("#red-ui-clipboard-dialog-export-tab-clipboard-preview-list").treeList("data",e)}function w(e,n){var t,o="fa fa-hdd-o";n.icon&&(o=("font-awesome"===(t=RED.utils.separateIconPath(n.icon)).module?"fa ":"")+t.file),e.data([{library:n.id,type:"flows",icon:o,label:RED._(n.label||n.id),path:"",expanded:!0,children:[{library:n.id,type:"flows",icon:"fa fa-cube",label:"flows",path:"",expanded:!0,children:function(t,o){RED.library.loadLibraryFolder(n.id,"flows","",function(e){o.children=e,t(e)})}}]}],!0)}function E(){$("#red-ui-drop-target").hide()}function D(e,t,o){var n,i=!1,a=document.activeElement,s=("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 i=t.data.length!==t.length,t.data;if("function"===t.type||"internal"===t.type)return;if("number"===t.type)return null;if("bigint"===t.type)return t.data.toString();if("undefined"===t.type)return}return t})),i&&(o+="_truncated"),$('<textarea type="text" id="red-ui-clipboard-hidden" tabIndex="-1">').appendTo(document.body)),e=(s.val(e).focus().select(),document.execCommand("copy"));return e&&t&&(n=RED.popover.create({target:t,direction:"left",size:"small",content:RED._(o)}),setTimeout(function(){n.close()},1e3),n.open()),s.remove(),a&&$(a).focus(),e}function R(t,e){let o=t;if("string"==typeof t)try{if(0===(t=t.trim()).length)return;o=y(t)}catch(e){t=new Error(RED._("clipboard.invalidFlow",{message:e.message}));throw t.code="NODE_RED",t}var p,f,h,g,t={generateIds:!1,addFlow:e};try{RED.view.importNodes(o,t)}catch(e){p=e.importConfig,f=o,h=t,g=RED.notify("<p>"+RED._("clipboard.import.conflictNotification1")+"</p>",{type:"info",fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){g.close()}},{text:RED._("clipboard.import.viewNodes"),click:function(){g.close();var e,t,o,n,i,a,s=p,r=f,d=h,l=[],c=!(b={importConfig:s,importNodes:r,importOptions:d});for(e in s.subflows)s.subflows.hasOwnProperty(e)&&(c||(l.push({gutter:$('<span data-i18n="menu.label.subflows"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),c=!0),t=s.subflows[e],n=s.conflicted[t.id],a=x(t,n,i=!n),o={id:t.id,gutter:a.gutter.element,element:a.element,class:i?"":"disabled",deferBuild:!0,children:[]},l.push(o),s.zMap[e])&&s.zMap[e].forEach(function(e){var t=x(e,s.conflicted[e.id],i,a.gutter.cb);o.children.push({id:e.id,gutter:t.gutter.element,element:t.element,class:i?"":"disabled"})});for(e in c=!1,s.tabs)s.tabs.hasOwnProperty(e)&&(c||(l.push({gutter:$('<span data-i18n="menu.label.flows"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),c=!0),t=s.tabs[e],n=s.conflicted[t.id],a=x(t,n,i=!0),o={id:t.id,gutter:a.gutter.element,element:a.element,icon:"red-ui-icons red-ui-icons-flow",deferBuild:!0,class:i?"":"disabled",children:[]},l.push(o),s.zMap[e])&&s.zMap[e].forEach(function(e){var t=x(e,s.conflicted[e.id],i,a.gutter.cb);o.children.push({id:e.id,gutter:t.gutter.element,element:t.element,class:i?"":"disabled"})});c=!1;var u=[];s.all.forEach(function(e){var t,o;"tab"===e.type||"subflow"===e.type||s.tabs[e.z]||s.subflows[e.z]||(o=x(e,t=s.conflicted[e.id],t=!t||!s.configs[e.id]),o={id:e.id,gutter:o.gutter.element,element:o.element,class:t?"":"disabled"},(s.configs[e.id]?u:(c||(l.push({gutter:$('<span data-i18n="menu.label.nodes"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),c=!0),l)).push(o))}),0<u.length&&(l.push({gutter:$('<span data-i18n="menu.label.displayConfig"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),c=!0,l=l.concat(u)),v.empty(),v.append($(importConflictsDialog)),$("#red-ui-clipboard-dialog-import-conflicts-list").css({position:"absolute",top:0,right:0,bottom:0,left:0}).treeList({data:l}),v.i18n(),r=400,(d=$(window).height())<600&&(r=400-(600-d)),$(".red-ui-clipboard-dialog-box").height(r),$("#red-ui-clipboard-dialog-ok").hide(),$("#red-ui-clipboard-dialog-cancel").show(),$("#red-ui-clipboard-dialog-export").hide(),$("#red-ui-clipboard-dialog-download").hide(),$("#red-ui-clipboard-dialog-import-conflict").show(),m.dialog("option","title",RED._("clipboard.importNodes")).dialog("option","width",500).dialog("open")}},{text:RED._("clipboard.import.importCopy"),click:function(){g.close(),h.generateIds=!0,RED.view.importNodes(f,h)}}]})}}function x(e,t,o,n){var i="tab"===e.type?_(e,t):k(e,t,0,n),a=$("<div>",{class:"red-ui-clipboard-dialog-import-conflicts-controls"}).appendTo(i);return a.on("click",function(e){e.stopPropagation()}),t&&!n&&(t=$("<label><input "+(o?"":"disabled ")+'type="checkbox" data-node-id="'+e.id+'"> <span data-i18n="clipboard.import.replace"></span></label>').appendTo(a),"tab"===e.type||"subflow"!==e.type&&e.hasOwnProperty("x")&&e.hasOwnProperty("y"))&&t.hide(),{element:i,gutter:function(e,t,o){var n=$("<label>",{class:"red-ui-clipboard-dialog-import-conflicts-gutter"}),e=$('<input data-node-id="'+e.id+'" type="checkbox" '+(t?"checked":"")+">").appendTo(n);o&&(e.attr("disabled",!0),o.addChild(e));n.on("click",function(e){e.stopPropagation()}),e.on("change",function(e){var t=this.checked;n.parent().toggleClass("disabled",!t),n.parent().find('.red-ui-clipboard-dialog-import-conflicts-controls input[type="checkbox"]').attr("disabled",!t),i.forEach(function(e){e.attr("checked",t),e.trigger("change")})});var i=[];return{cb:{addChild:function(e){i.push(e)}},element:n}}(e,o,n)}}function _(e,t){(e=JSON.parse(JSON.stringify(e)))._def=RED.nodes.getType(e.type)||{},e._def&&(e._=e._def._);var o=$("<div>",{class:"red-ui-info-outline-item red-ui-info-outline-item-flow red-ui-node-list-item"}),n=$("<div>",{class:"red-ui-search-result-description red-ui-info-outline-item-label"}).appendTo(o),e="string"==typeof e?e:e.label,i=e.indexOf("\\n");return-1<i&&(e=e.substring(0,i)+"..."),n.text(e),t&&(i=$('<span style="padding: 0 10px;"><i class="fa fa-exclamation-circle"></span>').appendTo(o),RED.popover.tooltip(i,RED._("clipboard.import.alreadyExists"))),o}function k(e,t,o,n){(e=JSON.parse(JSON.stringify(e)))._def=RED.nodes.getType(e.type)||{},e._def&&(e._=e._def._);var i=$("<div>",{class:"red-ui-node-list-item"});return RED.utils.createNodeIcon(e,!0).appendTo(i),!n&&t&&(e=$('<span style="padding: 0 10px;"><i class="fa fa-exclamation-circle"></span>').appendTo(i),RED.popover.tooltip(e,RED._("clipboard.import.alreadyExists"))),i}return{init:function(){n(),RED.actions.add("core:show-export-dialog",h),RED.actions.add("core:show-import-dialog",f),RED.actions.add("core:show-library-export-dialog",function(){h("library")}),RED.actions.add("core:show-library-import-dialog",function(){f("library")}),RED.actions.add("core:show-examples-import-dialog",function(){f("examples")}),RED.events.on("editor:open",function(){d=!0}),RED.events.on("editor:close",function(){d=!1}),RED.events.on("search:open",function(){d=!0}),RED.events.on("search:close",function(){d=!1}),RED.events.on("actionList:open",function(){d=!0}),RED.events.on("actionList:close",function(){d=!1}),RED.events.on("type-search:open",function(){d=!0}),RED.events.on("type-search:close",function(){d=!1}),$('<div id="red-ui-drop-target"><div data-i18n="[append]workspace.dropFlowHere"><i class="fa fa-download"></i><br></div></div>').appendTo("#red-ui-editor"),RED.keyboard.add("#red-ui-drop-target","escape",E),$("#red-ui-workspace-chart").on("dragenter",function(e){RED.workspaces.isLocked()||-1==$.inArray("text/plain",e.originalEvent.dataTransfer.types)&&-1==$.inArray("Files",e.originalEvent.dataTransfer.types)||$("#red-ui-drop-target").css({display:"table"}).focus()}),$("#red-ui-drop-target").on("dragover",function(e){-1==$.inArray("text/plain",e.originalEvent.dataTransfer.types)&&-1==$.inArray("Files",e.originalEvent.dataTransfer.types)&&!RED.workspaces.isLocked()||e.preventDefault()}).on("dragleave",function(e){E()}).on("drop",function(e){if(!RED.workspaces.isLocked())try{var t,o,n,i;-1!=$.inArray("text/plain",e.originalEvent.dataTransfer.types)?R(t=(t=e.originalEvent.dataTransfer.getData("text/plain")).substring(t.indexOf("["),t.lastIndexOf("]")+1)):-1!=$.inArray("Files",e.originalEvent.dataTransfer.types)&&1===(o=e.originalEvent.dataTransfer.files).length&&(n=o[0],(i=new FileReader).onload=function(e){R(e.target.result)},i.readAsText(n))}catch(e){console.warn("Import failed: ",e)}E(),e.preventDefault()})},import:f,export:h,copyText:D}}(),RED.library=function(){var a,c,s,u,e;function r(n,i,a,t){$.getJSON("library/"+n+"/"+i+"/"+a,function(e){e=e.map(function(e){return"string"==typeof e?{library:n,type:i,icon:"fa fa-folder",label:e,path:a+e+"/",children:function(t,o){r(n,i,a+e+"/",function(e){o.children=e,t(e)})}}:{library:n,type:i,icon:"fa fa-file-o",label:e.fn,path:a+e.fn,props:e}});e.sort(function(e,t){return e.children&&!t.children?-1:!e.children&&t.children?1:e.label.localeCompare(t.label)}),t(e)})}function t(t){e&&clearTimeout(e),e=setTimeout(function(){var e=t.val().trim();0<e.length&&!/[\/\\]/.test(e)?(t.removeClass("input-error"),$("#red-ui-library-dialog-save-button").button("enable")):(t.addClass("input-error"),$("#red-ui-library-dialog-save-button").button("disable"))},100)}return{init:function(){$('<div id="red-ui-library-dialog-save" class="hide"><form class="form-horizontal"><div class="red-ui-library-dialog-box" style="height: 400px; position:relative; "><div id="red-ui-library-dialog-save-browser"></div><div class="form-row"><label data-i18n="clipboard.export.exportAs"></label><input id="red-ui-library-dialog-save-filename" type="text"></div></div></form></div>').appendTo("#red-ui-editor").i18n(),$('<div id="red-ui-library-dialog-load" class="hide"><form class="form-horizontal"><div class="red-ui-library-dialog-box" style="height: 400px; position:relative; "><div id="red-ui-library-dialog-load-panes"><div class="red-ui-panel" id="red-ui-library-dialog-load-browser"></div><div class="red-ui-panel"><div id="red-ui-library-dialog-load-preview"><div class="red-ui-panel" id="red-ui-library-dialog-load-preview-text" style="position:relative; height: 50%; overflow-y: hidden;"></div><div class="red-ui-panel" id="red-ui-library-dialog-load-preview-details"><table id="red-ui-library-dialog-load-preview-details-table" class="red-ui-info-table"></table></div></div></div></div></div></form></div>').appendTo("#red-ui-editor").i18n(),$("#red-ui-library-dialog-save").dialog({title:RED._("library.saveToLibrary"),modal:!0,autoOpen:!1,width:800,resizable:!1,open:function(e,t){RED.keyboard.disable()},close:function(e,t){RED.keyboard.enable()},classes:{"ui-dialog":"red-ui-editor-dialog","ui-dialog-titlebar-close":"hide","ui-widget-overlay":"red-ui-editor-dialog"},buttons:[{text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{id:"red-ui-library-dialog-save-button",text:RED._("common.label.save"),class:"primary",click:function(){for(var t,e,o=u.elementPrefix||"node-input-",n=$("#"+o+"name").val().trim(),i=(""===n&&(n=RED._("library.unnamedType",{type:u.type})),$("#red-ui-library-dialog-save-filename").val().trim()),a=c.getSelected(),s=(a.children||(a=a.parent),{}),r=0;r<u.fields.length;r++){var d=u.fields[r];"name"===d?s.name=n:"object"==typeof d?s[d.name]=d.get():s[d]=$("#"+o+d).val()}function l(){$.ajax({url:"library/"+a.library+"/"+a.type+"/"+a.path+i,type:"POST",data:JSON.stringify(s),contentType:"application/json; charset=utf-8"}).done(function(e,t,o){RED.notify(RED._("library.savedType",{type:u.type}),"success")}).fail(function(e,t,o){401===e.status?RED.notify(RED._("library.saveFailed",{message:RED._("user.notAuthorized")}),"error"):RED.notify(RED._("library.saveFailed",{message:e.responseText}),"error")})}s.text=u.editor.getValue(),a.children&&(t=!1,a.children.forEach(function(e){e.label===i&&(t=!0)}),t)?($("#red-ui-library-dialog-save").dialog("close"),e=RED.notify(RED._("clipboard.export.exists",{file:RED.utils.sanitize(i)}),{type:"warning",fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){e.hideNotification(),$("#red-ui-library-dialog-save").dialog("open")}},{text:RED._("clipboard.export.overwrite"),click:function(){e.hideNotification(),l()}}]})):l(),$(this).dialog("close")}}]}),c=RED.library.createBrowser({container:$("#red-ui-library-dialog-save-browser"),folderTools:!0,onselect:function(e){e.label&&(e.children||($("#red-ui-library-dialog-save-filename").val(e.label),e=e.parent),!1===e.writable?$("#red-ui-library-dialog-save-button").button("disable"):$("#red-ui-library-dialog-save-button").button("enable"))}}),$("#red-ui-library-dialog-save-filename").on("keyup",function(){t($(this))}),$("#red-ui-library-dialog-save-filename").on("paste",function(){var e=$(this);setTimeout(function(){t(e)},10)}),$("#red-ui-library-dialog-load").dialog({modal:!0,autoOpen:!1,width:800,resizable:!1,classes:{"ui-dialog":"red-ui-editor-dialog","ui-dialog-titlebar-close":"hide","ui-widget-overlay":"red-ui-editor-dialog"},buttons:[{text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{text:RED._("common.label.load"),class:"primary",click:function(){if(selectedLibraryItem){for(var e=u.elementPrefix||"node-input-",t=0;t<u.fields.length;t++){var o,n=u.fields[t];"object"==typeof n?(o=selectedLibraryItem[n.name],n.set(o)):$("#"+e+n).val(selectedLibraryItem[n])}u.editor.setValue(s.getValue(),-1)}$(this).dialog("close")}}],open:function(e){RED.keyboard.disable(),$(this).parent().find(".ui-dialog-titlebar-close").hide(),s.resize()},close:function(e){RED.keyboard.enable(),s&&(s.destroy(),s=null)}}),a=RED.library.createBrowser({container:$("#red-ui-library-dialog-load-browser"),onselect:function(n){var i=$("#red-ui-library-dialog-load-preview-details-table").empty();selectedLibraryItem=n.props,n&&n.label&&!n.children?$.get("library/"+n.library+"/"+n.type+"/"+n.path,function(e){var t,o=$('<tr class="red-ui-help-info-row"><td>'+RED._("library.type")+"</td><td></td></tr>").appendTo(i);for(t in $(o.children()[1]).text(u.type),n.props.hasOwnProperty("name")&&(o=$('<tr class="red-ui-help-info-row"><td>'+RED._("library.name")+"</td><td>"+n.props.name+"</td></tr>").appendTo(i),$(o.children()[1]).text(n.props.name)),n.props)n.props.hasOwnProperty(t)&&"name"!==t&&"fn"!==t&&(o=$('<tr class="red-ui-help-info-row"><td></td><td></td></tr>').appendTo(i),$(o.children()[0]).text(t),RED.utils.createObjectElement(n.props[t]).appendTo(o.children()[1]));s.setValue(e,-1)}):s.setValue("",-1)}}),RED.panels.create({container:$("#red-ui-library-dialog-load-panes"),dir:"horizontal",resize:function(){s.resize()}}),RED.panels.create({container:$("#red-ui-library-dialog-load-preview"),dir:"vertical",resize:function(){s.resize()}})},create:function(i){var n=i.elementPrefix||"node-input-";i.editor.setText&&(i.editor.setValue=function(e,t){i.editor.setText.call(i.editor,e)}),i.editor.getText&&(i.editor.getValue=i.editor.getText),$("#"+n+"name").css("width","calc(100% - 52px)").after('<div style="margin-left:5px; display: inline-block;position: relative;"><a id="node-input-'+i.type+'-lookup" class="red-ui-button"><i class="fa fa-book"></i> <i class="fa fa-caret-down"></i></a></div>'),RED.menu.init({id:"node-input-"+i.type+"-lookup",options:[{id:"node-input-"+i.type+"-menu-open-library",label:RED._("library.openLibrary"),onselect:function(){var e={id:"red-ui-library-dialog-load-preview-text",mode:i.mode,readOnly:!0,highlightActiveLine:!1,highlightGutterLine:!1,contextmenu:!1},o=((s=RED.editor.createEditor(e)).isACE&&(i.mode&&s.getSession().setMode(i.mode),s.setOptions({readOnly:!0,highlightActiveLine:!1,highlightGutterLine:!1}),s.renderer.$cursorLayer.element.style.opacity=0,s.$blockScrolling=1/0),u=i,[]),e=((RED.settings.libraries||[]).forEach(function(n){if(!n.types||-1!==n.types.indexOf(i.url)){let e="fa fa-hdd-o";var t;n.icon&&(t=RED.utils.separateIconPath(n.icon),e=("font-awesome"===t.module?"fa ":"")+t.file),o.push({library:n.id,type:i.url,icon:e,label:RED._(n.label||n.id),path:"",expanded:!0,writable:!1,children:[{library:n.id,type:i.url,icon:"fa fa-cube",label:i.type,path:"",expanded:!1,children:function(t,o){r(n.id,i.url,"",function(e){o.children=e,t(e)})}}]})}}),a.data(o),setTimeout(function(){a.select(o[0].children[0])},200),400),t=$(window).height();t<570&&(e=400-(570-t)),$("#red-ui-library-dialog-load .red-ui-library-dialog-box").height(e),$("#red-ui-library-dialog-load").dialog("option","title",RED._("library.typeLibrary",{type:i.type})).dialog("open")}},{id:"node-input-"+i.type+"-menu-save-library",label:RED._("library.saveToLibrary"),onselect:function(){u=i;var e=$("#"+n+"name").val().replace(/(^\s*)|(\s*$)/g,"").replace(/[^\w-]/g,"-"),o=(""===e&&(e="unnamed-"+i.type),$("#red-ui-library-dialog-save-filename").attr("value",e+"."+(i.ext||"txt")),[]),e=((RED.settings.libraries||[]).forEach(function(n){if(!n.types||-1!==n.types.indexOf(i.url)){let e="fa fa-hdd-o";var t;n.icon&&(t=RED.utils.separateIconPath(n.icon),e=("font-awesome"===t.module?"fa ":"")+t.file),o.push({library:n.id,type:i.url,icon:e,label:RED._(n.label||n.id),path:"",expanded:!0,writable:!1,children:[{library:n.id,type:i.url,icon:"fa fa-cube",label:i.type,path:"",expanded:!1,children:function(t,o){r(n.id,i.url,"",function(e){o.children=e,t(e)})}}]})}}),c.data(o),setTimeout(function(){c.select(o[0].children[0])},200),400),t=$(window).height();t<570&&(e=400-(570-t)),$("#red-ui-library-dialog-save .red-ui-library-dialog-box").height(e),$("#red-ui-library-dialog-save").dialog("open")}}]})},createBrowser:function(o){var e=$('<div class="red-ui-library-browser"></div>').appendTo(o.container),n=$("<div>").css({width:"100%",height:"100%"}).appendTo(e).treeList({}).on("treelistselect",function(e,t){o.onselect&&o.onselect(t)}).on("treelistconfirm",function(e,t){o.onconfirm&&o.onconfirm(t)}),i=null;return o.folderTools&&n.on("treelistselect",function(e,t){var o;!1!==t.writable&&t.treeList&&(i&&i.remove(),i=$("<div>").css({position:"absolute",bottom:"6px",right:"8px"}),o=$('<button class="red-ui-button red-ui-button-small" type="button"><i class="fa fa-ellipsis-h"></i></button>').on("click",function(e){e.preventDefault(),e.stopPropagation();var e=o.offset(),t=RED.menu.init({id:"red-ui-library-browser-menu",options:[{id:"red-ui-library-browser-menu-addFolder",label:RED._("library.newFolder"),onselect:function(){var o="new-folder",s={},r=n.treeList("selected");(r=r.children?r:r.parent).treeList.expand(function(){r.children.forEach(function(e){/^new-folder/.test(e.label)&&(s[e.label]=!0)});for(var e=2;s[o];)o="new-folder-"+e++;r.treeList.expand();function t(){var e=i.val().trim();if(""===e)n();else{for(var t=0;t<r.children.length;t++)if(r.children[t].label===e)return n();a.treeList.remove();var o={library:r.library,type:r.type,icon:"fa fa-folder",children:[],label:e,path:a.path+e+"/"};r.treeList.addChild(o,!0)}}function n(){a.treeList.remove()}var i=$('<input type="text" class="red-ui-treeList-input">').val(o),a={icon:"fa fa-folder-o",children:[],path:r.path,element:i};i.on("keydown",function(e){e.stopPropagation(),13===e.keyCode?t():27===e.keyCode&&n()}),i.on("blur",function(){t()}),r.treeList.addChild(a),setTimeout(function(){i.trigger("focus"),i.select()},400)})}}]}).on("mouseleave",function(){$(this).remove(),n.focus()}).on("mouseup",function(){var e=$(this);e.hide(),n.focus(),setTimeout(function(){e.remove()},100)}).appendTo("body");t.css({position:"absolute",top:e.top+"px",left:e.left-t.width()+20+"px"}).show()}).appendTo(i),i.appendTo(t.treeList.label))}),{select:function(e){n.treeList("select",e)},getSelected:function(){return n.treeList("selected")},focus:function(){n.focus()},data:function(e,t){n.treeList("data",e),t&&setTimeout(function(){n.treeList("select",e[0])},100)}}},export:function(){console.warn("Deprecated call to RED.library.export")},loadLibraryFolder:r}}(),RED.notifications=function(){var e,v,b={},y={show:function(){e++,$("#red-ui-full-shade").show()},hide:function(){0===--e&&$("#red-ui-full-shade").hide()}},w=[],E=e=0;function t(e,i,a,s){var r={};if(null!==i&&"object"==typeof i?(a=(r=i).fixed,s=r.timeout,i=r.type):(r.type=i,r.fixed=a,r.timeout=r.timeout),r.id&&b.hasOwnProperty(r.id))return b[r.id].update(e,r),b[r.id];if(r.modal&&y.show(),4<w.length)for(var t=w.length,o=0;4<t&&o<w.length;o+=1){var n=w[o];n.fixed||(window.clearTimeout(n.timeoutid),n.close(),--t)}var d,l,c,u,p,f,h,g,m=document.createElement("div");return m.id="red-ui-notification-"+E,m.className="red-ui-notification",m.options=r,m.fixed=a,i&&(m.className="red-ui-notification red-ui-notification-"+i),r.width&&(d=$("#red-ui-notifications").width(),r.width>d)&&(d=-(r.width-d)/2,$(m).css({width:r.width+"px",marginLeft:d+"px"})),m.style.display="none","string"==typeof e?(/<p>/i.test(e)||(e="<p>"+e+"</p>"),m.innerHTML=e):$(m).append(e),r.buttons&&(l=$('<div class="ui-dialog-buttonset"></div>').appendTo(m),r.buttons.forEach(function(e){var t=$("<button>").html(e.text).on("click",e.click).appendTo(l);e.id&&t.attr("id",e.id),e.class&&t.addClass(e.class)})),$("#red-ui-notifications").append(m),RED.notifications.hide||$(m).slideDown(300),m.close=(c=m,function(){c.closed||(c.closed=!0,w.splice(w.indexOf(c),1),r.id&&(delete b[r.id],0===Object.keys(b).length)&&v.hide(),RED.notifications.hide?c.parentNode.removeChild(c):$(c).slideUp(300,function(){c.parentNode.removeChild(c)}),c.options.modal&&y.hide())}),m.hideNotification=(u=m,function(){u.closed||(u.hidden=!0,RED.notifications.hide)||$(u).slideUp(300)}),m.showNotification=(p=m,function(){p.closed||!p.hidden||(p.hidden=!1,RED.notifications.hide)||$(p).slideDown(300)}),m.update=(f=m,function(e,t){var o,n;"string"==typeof e?(/<p>/i.test(e)||(e="<p>"+e+"</p>"),f.innerHTML=e):$(f).empty().append(e),"number"==typeof t?f.options.timeout=o=t:void 0!==t&&(!r.modal&&t.modal?(f.options.modal=!0,y.show()):r.modal&&!1===t.modal&&(f.options.modal=!1,y.hide()),(e=t.hasOwnProperty("type")?t.type:i)&&(m.className="red-ui-notification red-ui-notification-"+e),o=t.hasOwnProperty("timeout")?t.timeout:s,a&&!1!==t.fixed||(o=o||5e3),t.buttons)&&(n=$('<div class="ui-dialog-buttonset"></div>').appendTo(f),t.buttons.forEach(function(e){var t=$("<button>").text(e.text).on("click",e.click).appendTo(n);e.id&&t.attr("id",e.id),e.class&&t.addClass(e.class)})),$(f).off("click.red-ui-notification-close"),void 0!==o&&0<o?(window.clearTimeout(f.timeoutid),f.timeoutid=window.setTimeout(f.close,o),setTimeout(function(){$(f).on("click.red-ui-notification-close",function(){f.close(),window.clearTimeout(f.timeoutid)})},50)):window.clearTimeout(f.timeoutid),f.hidden?f.showNotification():t&&t.silent||($(f).addClass("red-ui-notification-shake-horizontal"),setTimeout(function(){$(f).removeClass("red-ui-notification-shake-horizontal")},300))}),a?s&&($(m).on("click.red-ui-notification-close",(h=m,function(){h.hideNotification(),window.clearTimeout(h.timeoutid)})),m.timeoutid=window.setTimeout(m.hideNotification,s||5e3)):($(m).on("click.red-ui-notification-close",(g=m,function(){g.close(),window.clearTimeout(g.timeoutid)})),m.timeoutid=window.setTimeout(m.close,s||5e3)),w.push(m),r.id&&(b[r.id]=m,r.fixed)&&v.show(),E+=1,m}return{init:function(){$('<div id="red-ui-notifications"></div>').appendTo("#red-ui-editor"),v=$("<li></li>").prependTo(".red-ui-header-toolbar").hide(),$('<a class="button" href="#"><i class="fa fa-warning"></i></a>').appendTo(v).on("click",function(){for(var e in b)b.hasOwnProperty(e)&&b[e].showNotification()})},notify:RED.notify=t}}(),RED.search=function(){var s,r,o,n=!1,a=null,d=-1,l=!1,c=[],m={},u=[],p=[],f=0;function h(t,o,e){if("string"==typeof e||"number"==typeof e)e=(""+e).toLowerCase(),m[e]=m[e]||{},m[e][t.id]={node:t,label:o};else if(Array.isArray(e))e.forEach(function(e){h(t,o,e)});else if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&h(t,o,e[n])}function t(e,t,o){var n=new RegExp("(?:^| )is:"+t+"(?: |$)");return n.exec(e)&&(e=e.replace(n," ").trim(),o[t]=!0),e}function v(e,t,o){for(var n,i=new RegExp("(?:^| )"+t+":([^ ]+)(?: |$)");n=i.exec(e);)e=e.replace(i," ").trim(),o[t]=o[t]||[],o[t].push(n[1]);return e}function g(n){var e,i=[],a={},s=(n=t(n,"invalid",a),n=t(n,"unused",a),n=t(n,"config",a),n=t(n,"subflow",a),n=t(n,"hidden",a),n=v(n=t(n,"modified",a),"flow",a),n=(n=function(e,t){for(var o=/(?:type):\s*(?:"([^"]+)"|([^" ]+))/;null!==(n=o.exec(e));){n.index===o.lastIndex&&o.lastIndex++,e=e.replace(n[0]," ").trim();var n=n[2]||n[1];t.type=t.type||[],t.type.push(n)}return e}(n=v(n,"uses",a),a)).trim(),0<Object.keys(a).length),r=a.type&&0<a.type.length;if(a.flow&&0<=a.flow.indexOf("current")&&(e=a.flow.indexOf("current"),a.flow[e]=RED.workspaces.active()),a.flow&&a.flow.length&&(a.flow=[...new Set(a.flow)]),0<n.length||s){n=n.toLowerCase();let e,t;var d=[];const g={};let o=[];for(o=a.uses||Object.keys(m),e=0;e<o.length;e++){var l=o[e],c=n?o[e].indexOf(n):-1;if(-1<c||""===n&&s){var u=Object.keys(m[l]||{});for(t=0;t<u.length;t++){var p=m[l][u[t]],f="config"===p.node._def.category&&"group"!==p.node.type;if(!a.uses||l!==p.node.id){if(a.hasOwnProperty("invalid")){var h=!p.node.hasOwnProperty("valid")||p.node.valid;if(a.invalid===h)continue}if((!a.hasOwnProperty("config")||a.config===f)&&(!a.hasOwnProperty("subflow")||a.subflow===("subflow"===p.node.type))&&(!a.hasOwnProperty("modified")||p.node.changed||p.node.moved)){if(a.hasOwnProperty("hidden")){if("tab"!==p.node.type)continue;if(!RED.workspaces.isHidden(p.node.id))continue}if(a.hasOwnProperty("unused")){h="subflow"===p.node.type&&0===p.node.instances.length||f&&0===p.node.users.length&&!1!==p.node._def.hasUsers;if(a.unused!==h)continue}if(!(a.hasOwnProperty("flow")&&a.flow.indexOf(p.node.z||p.node.id)<0)){let e=-1;r&&(e=a.type.indexOf(p.node.type)),(!r||-1<e)&&(g[p.node.id]=g[p.node.id]||{node:p.node,label:p.label},g[p.node.id].index=Math.min(g[p.node.id].index||1/0,-1<e?e:c))}}}}}}for((d=Object.keys(g)).sort(function(e,t){return g[e].index-g[t].index}),e=0;e<d.length;e++)i.push(g[d[e]])}return i}function b(){var e,t,o,n=r.find("li.selected");1===n.length&&(t=(e=r.parent()).height(),e.scrollTop(),t<(o=n.position().top)+(n=n.height())?e.animate({scrollTop:"-="+(t-(o+n)-10)},50):o<0&&e.animate({scrollTop:"+="+(o-10)},50))}function y(){0<c.length&&(r.editableList("addItem",{historyHeader:!0}),c.forEach(function(e){r.editableList("addItem",{history:!0,value:e})}))}function w(e){var t=s.val(),o=c.indexOf(t);-1<o&&c.splice(o,1),c.unshift(t),$("#red-ui-view-searchtools-search").data("term",t),R(0,0<(p=Object.assign([],u)).length),RED.view.reveal(e.id)}function e(){var e;(n?x:r&&p.length?(0<f?f--:f=p.length-1,(e=p[f])&&e.node&&e.node.id&&(RED.view.reveal(e.node.id),$("#red-ui-view-searchtools-prev").trigger("focus")),x):D)()}function E(){var e;(n?x:r&&p.length?(f<p.length-1?f++:f=0,(e=p[f])&&e.node&&e.node.id&&(RED.view.reveal(e.node.id),$("#red-ui-view-searchtools-next").trigger("focus")),x):D)()}function D(e){var t;n?x():(l||(o=document.activeElement,$("#red-ui-header-shade").show(),$("#red-ui-editor-shade").show(),$("#red-ui-palette-shade").show(),$("#red-ui-sidebar-shade").show(),$("#red-ui-sidebar-separator").hide(),null===a?(a=$("<div>",{id:"red-ui-search",class:"red-ui-search"}).appendTo("#red-ui-main-container"),t=$("<div>",{class:"red-ui-search-container"}).appendTo(a),s=$('<input type="text" data-i18n="[placeholder]menu.label.searchInput">').appendTo(t).searchBox({delay:200,change:function(){r.editableList("empty"),d=-1;var e=$(this).val();if(""===e)y();else if(0<(u=g(e)).length){for(let e=0;e<Math.min(u.length,25);e++)r.editableList("addItem",u[e]);25<u.length&&r.editableList("addItem",{more:{results:u,start:25}})}else r.editableList("addItem",{})},options:L()}),$('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-caret-right"></button>').appendTo(t).on("click",function(e){e.preventDefault(),RED.sidebar.info.outliner.search(s.val()),R()}),s.on("keydown",function(e){if(0<u.length)if(40===e.keyCode)o=r.children(),d<o.length-1&&(-1<d&&$(o[d]).removeClass("selected"),d++),$(o[d]).addClass("selected"),b(),e.preventDefault();else if(38===e.keyCode)o=r.children(),0<d&&(d<o.length&&$(o[d]).removeClass("selected"),d--),$(o[d]).addClass("selected"),b(),e.preventDefault();else if(13===e.keyCode){var t,o=r.children();if($(o[d]).hasClass("red-ui-search-more"))if(t=$(o[d]).find(".red-ui-editableList-item-content").data("data")){for(r.editableList("removeItem",t),i=t.more.start;i<Math.min(u.length,t.more.start+25);i++)r.editableList("addItem",u[i]);u.length>t.more.start+25&&r.editableList("addItem",{more:{results:u,start:t.more.start+25}})}$(o[d]).hasClass("red-ui-search-history")?(t=$(o[d]).find(".red-ui-editableList-item-content").data("data"))&&s.searchBox("value",t.value):$(o[d]).hasClass("red-ui-search-historyHeader")||0<u.length&&(f=Math.max(0,d),w(u[f].node))}}),s.i18n(),t=$("<div>",{class:"red-ui-search-results-container"}).appendTo(a),r=$("<ol>",{style:"position: absolute;top: 5px;bottom: 5px;left: 5px;right: 5px;"}).appendTo(t).editableList({addButton:!1,addItem:function(e,t,o){var n,i,a=o.node;o.historyHeader?(e.parent().addClass("red-ui-search-historyHeader"),$("<div>",{class:"red-ui-search-empty"}).text(RED._("search.history")).appendTo(e),$('<button type="button" class="red-ui-button red-ui-button-small"></button>').text(RED._("search.clear")).appendTo(e).on("click",function(e){e.preventDefault(),c=[],r.editableList("empty")})):o.history?(e.parent().addClass("red-ui-search-history"),(n=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e)).text(o.value),n.on("click",function(e){e.preventDefault(),s.searchBox("value",o.value),s.focus()}),$('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-remove"></i></button>').appendTo(e).on("click",function(e){e.preventDefault();e=c.indexOf(o.value);c.splice(e,1),r.editableList("removeItem",o)})):o.more?(e.parent().addClass("red-ui-search-more"),(n=$("<a>",{href:"#",class:"red-ui-search-result red-ui-search-empty"}).appendTo(e)).text(RED._("palette.editor.more",{count:o.more.results.length-o.more.start})),n.on("click",function(e){for(e.preventDefault(),r.editableList("removeItem",o),t=o.more.start;t<Math.min(u.length,o.more.start+25);t++)r.editableList("addItem",u[t]);u.length>o.more.start+25&&r.editableList("addItem",{more:{results:u,start:o.more.start+25}})})):void 0===a?$("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(e):(a._def,n=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),RED.utils.createNodeIcon(a).appendTo(n),e=$("<div>",{class:"red-ui-search-result-node-description"}).appendTo(n),a.z&&(i=(i=RED.nodes.workspace(a.z))?"flow:"+i.label:"subflow:"+(i=RED.nodes.subflow(a.z)).name,$("<div>",{class:"red-ui-search-result-node-flow"}).text(i).appendTo(e)),$("<div>",{class:"red-ui-search-result-node-label"}).text(o.label||a.id).appendTo(e),$("<div>",{class:"red-ui-search-result-node-type"}).text(a.type).appendTo(e),$("<div>",{class:"red-ui-search-result-node-id"}).text(a.id).appendTo(e),n.on("click",function(e){e.preventDefault(),f=t,w(a)}))},scrollOnAdd:!1})):r.editableList("empty"),a.slideDown(300),s.searchBox("value",e),e&&""!==e||y(),RED.events.emit("search:open"),l=!0),s.trigger("focus"))}function R(e,t){l&&(l=!1,$("#red-ui-header-shade").hide(),$("#red-ui-editor-shade").hide(),$("#red-ui-palette-shade").hide(),$("#red-ui-sidebar-shade").hide(),$("#red-ui-sidebar-separator").show(),null!==a&&a.slideUp(200,function(){s.searchBox("value","")}),RED.events.emit("search:close"),!o||t&&p.length||$(o).trigger("focus"),o=null),t||j(),x(),t&&p.length&&$("#red-ui-view-searchtools-next").trigger("focus")}function x(){if(!n&&0<=f&&p&&p.length){let e=$("#red-ui-view-searchtools-search").data("term")||"";var t={term:e=16<e.length?e.substring(0,12)+"...":e,result:f+1,count:p.length};$("#red-ui-view-searchtools-counter").text(RED._("actions.search-counter",t)),$("#view-search-tools > :not(:first-child)").show()}else j(),$("#view-search-tools > :not(:first-child)").hide()}function _(){m={}}function k(e){var t=e,o=RED.utils.getNodeLabel(t),n=(o&&(o=(""+o).toLowerCase(),m[o]=m[o]||{},m[o][t.id]={node:t,label:o}),o=o||t.label||t.name||t.id||"",["id","type","name","label","info"]),e=t&&t._def;if(e&&(e.defaults&&(n=n.concat(Object.keys(e.defaults))),"group"!==t.type)&&e.paletteLabel&&e.paletteLabel!==e.type)try{var i=(""+("function"==typeof e.paletteLabel?e.paletteLabel.call(e):e.paletteLabel)).toLowerCase();i&&i!==(""+e.type).toLowerCase()&&h(t,o,i)}catch(e){console.warn("error indexing "+o,e)}for(var a=0;a<n.length;a++)!t.hasOwnProperty(n[a])||"group"===t.type&&"nodes"===n[a]||h(t,o,t[n[a]])}function T(e){for(var t=Object.keys(m),o=0,n=t.length;o<n;o++)delete m[t[o]][e.id],0===Object.keys(m[t[o]]).length&&delete m[t[o]]}function C(e){T(e),k(e)}function j(){p=[],f=0,$("#red-ui-view-searchtools-search").data("term","")}function L(){return[{label:RED._("search.options.configNodes"),value:"is:config"},{label:RED._("search.options.unusedConfigNodes"),value:"is:config is:unused"},{label:RED._("search.options.modifiedNodes"),value:"is:modified"},{label:RED._("search.options.invalidNodes"),value:"is:invalid"},{label:RED._("search.options.uknownNodes"),value:"type:unknown"},{label:RED._("search.options.unusedSubflows"),value:"is:subflow is:unused"},{label:RED._("search.options.hiddenFlows"),value:"is:hidden"},{label:RED._("search.options.thisFlow"),value:"flow:current"}]}return{init:function(){RED.actions.add("core:search",D),RED.actions.add("core:search-previous",e),RED.actions.add("core:search-next",E),RED.events.on("editor:open",function(){n=!0}),RED.events.on("editor:close",function(){n=!1}),RED.events.on("type-search:open",function(){n=!0}),RED.events.on("type-search:close",function(){n=!1}),RED.events.on("actionList:open",function(){n=!0}),RED.events.on("actionList:close",function(){n=!1}),RED.keyboard.add("red-ui-search","escape",R),RED.keyboard.add("view-search-tools","escape",function(){j(),x()}),$("#red-ui-header-shade").on("mousedown",R),$("#red-ui-editor-shade").on("mousedown",R),$("#red-ui-palette-shade").on("mousedown",R),$("#red-ui-sidebar-shade").on("mousedown",R),$("#red-ui-view-searchtools-close").on("click",function(){j(),x()}),$("#red-ui-view-searchtools-close").trigger("click"),RED.events.on("workspace:clear",_),RED.events.on("flows:add",k),RED.events.on("flows:remove",T),RED.events.on("flows:change",C),RED.events.on("subflows:add",k),RED.events.on("subflows:remove",T),RED.events.on("subflows:change",C),RED.events.on("nodes:add",k),RED.events.on("nodes:remove",T),RED.events.on("nodes:change",C),RED.events.on("groups:add",k),RED.events.on("groups:remove",T),RED.events.on("groups:change",C)},show:D,hide:R,search:g,getSearchOptions:L}}(),RED.contextMenu=function(){let t;function o(){$(document).off("mousedown.red-ui-workspace-context-menu"),t&&t.remove(),t=null}return RED.keyboard.add("red-ui-workspace-context-menu","escape",function(){RED.contextMenu.hide()}),RED.events.on("editor:open",function(){RED.contextMenu.hide()}),RED.events.on("search:open",function(){RED.contextMenu.hide()}),RED.events.on("type-search:open",function(){RED.contextMenu.hide()}),RED.events.on("actionList:open",function(){RED.contextMenu.hide()}),RED.events.on("view:selection-changed",function(){RED.contextMenu.hide()}),{show:function(r){t&&t.remove();let d=[];if(r.options)d=r.options;else if("workspace"===r.type){const w=RED.view.selection();w&&Object.keys(w).length;var l=w.nodes&&0<w.nodes.length,c=l&&1<w.nodes.length,u=(w.links&&w.links.filter(e=>!!e.link),w.links&&w.links.filter(e=>!e.link)||[]),p=0<u.length;const E=!l&&p&&1===u.length;!l&&p&&u.length;var u=l||p,f=l&&1===w.nodes.length&&"group"===w.nodes[0].type,h=!RED.workspaces.isLocked(),g=l&&!!w.nodes[0].g;let e,t,o,n,i;if(l)for(var m=w.nodes.slice();m.length;){var v=m.shift();"group"===v.type?(e=!0,m.push(...v.nodes)):v.d?t=!0:o=!0,void 0===v.l||v.l?n=!0:i=!0}var b=RED.view.scale(),y=$("#red-ui-workspace-chart").offset();let a=(r.x-y.left+$("#red-ui-workspace-chart").scrollLeft())/b,s=(r.y-y.top+$("#red-ui-workspace-chart").scrollTop())/b;RED.view.snapGrid&&(y=RED.view.gridSize(),a=y*Math.round(a/y),s=y*Math.round(s/y)),RED.settings.theme("menu.menu-item-action-list",!0)&&d.push({onselect:"core:show-action-list",label:RED._("contextMenu.showActionList"),onpostselect:function(){}});b=[];d.push({label:RED._("contextMenu.insert"),options:b}),b.push({label:RED._("contextMenu.node"),onselect:function(){RED.view.showQuickAddDialog({position:[a,s],touchTrigger:"ontouchstart"in window,splice:E?w.links[0]:void 0})},disabled:!h},p?{label:RED._("contextMenu.junction"),onselect:function(){RED.actions.invoke("core:split-wires-with-junctions",{x:a,y:s})},disabled:!h||!p}:{label:RED._("contextMenu.junction"),onselect:function(){var e={_def:{defaults:{}},type:"junction",z:RED.workspaces.active(),id:RED.nodes.id(),x:a,y:s,w:0,h:0,outputs:1,inputs:1,dirty:!0,moved:!0},e=RED.nodes.addJunction(e),t={dirty:RED.nodes.dirty(),t:"add",junctions:[e]};RED.history.push(t),RED.nodes.dirty(!0),RED.view.select({nodes:[e]}),RED.view.redraw(!0)},disabled:!h},{label:RED._("contextMenu.linkNodes"),onselect:"core:split-wire-with-link-nodes",disabled:!h||!p},null),RED.settings.theme("menu.menu-item-import-library",!0)&&b.push({onselect:"core:show-import-dialog",label:RED._("common.label.import")},{onselect:"core:show-examples-import-dialog",label:RED._("menu.label.importExample")}),l&&h&&(y=[],c||f||y.push({onselect:"core:show-node-help",label:RED._("menu.label.showNodeHelp")},null),y.push({onselect:"core:enable-selected-nodes",label:RED._("menu.label.enableSelectedNodes"),disabled:!t},{onselect:"core:disable-selected-nodes",label:RED._("menu.label.disableSelectedNodes"),disabled:!o},null,{onselect:"core:show-selected-node-labels",label:RED._("menu.label.showSelectedNodeLabels"),disabled:!i},{onselect:"core:hide-selected-node-labels",label:RED._("menu.label.hideSelectedNodeLabels"),disabled:!n}),d.push({label:RED._("sidebar.info.node"),options:y}),d.push({label:RED._("sidebar.info.group"),options:[{onselect:"core:group-selection",label:RED._("menu.label.groupSelection")},{onselect:"core:ungroup-selection",label:RED._("menu.label.ungroupSelection"),disabled:!e}]}),e&&d[d.length-1].options.push({onselect:"core:merge-selection-to-group",label:RED._("menu.label.groupMergeSelection")}),g&&d[d.length-1].options.push({onselect:"core:remove-selection-from-group",label:RED._("menu.label.groupRemoveSelection")}),d[d.length-1].options.push(null,{onselect:"core:copy-group-style",label:RED._("keyboard.copyGroupStyle"),disabled:!e},{onselect:"core:paste-group-style",label:RED._("keyboard.pasteGroupStyle"),disabled:!e})),h&&c&&d.push({label:RED._("menu.label.arrange"),options:[{label:RED._("menu.label.alignLeft"),onselect:"core:align-selection-to-left"},{label:RED._("menu.label.alignCenter"),onselect:"core:align-selection-to-center"},{label:RED._("menu.label.alignRight"),onselect:"core:align-selection-to-right"},null,{label:RED._("menu.label.alignTop"),onselect:"core:align-selection-to-top"},{label:RED._("menu.label.alignMiddle"),onselect:"core:align-selection-to-middle"},{label:RED._("menu.label.alignBottom"),onselect:"core:align-selection-to-bottom"},null,{label:RED._("menu.label.distributeHorizontally"),onselect:"core:distribute-selection-horizontally"},{label:RED._("menu.label.distributeVertically"),onselect:"core:distribute-selection-vertically"}]}),d.push(null,{onselect:"core:undo",label:RED._("keyboard.undoChange"),disabled:0===RED.history.list().length},{onselect:"core:redo",label:RED._("keyboard.redoChange"),disabled:0===RED.history.listRedo().length},null,{onselect:"core:cut-selection-to-internal-clipboard",label:RED._("keyboard.cutNode"),disabled:!h||!l},{onselect:"core:copy-selection-to-internal-clipboard",label:RED._("keyboard.copyNode"),disabled:!l},{onselect:"core:paste-from-internal-clipboard",label:RED._("keyboard.pasteNode"),disabled:!h||!RED.view.clipboard()},{onselect:"core:delete-selection",label:RED._("keyboard.deleteSelected"),disabled:!h||!u},{onselect:"core:delete-selection-and-reconnect",label:RED._("keyboard.deleteReconnect"),disabled:!h||!u}),RED.settings.theme("menu.menu-item-export-library",!0)&&d.push({onselect:"core:show-export-dialog",label:RED._("menu.label.export")}),d.push({onselect:"core:select-all-nodes",label:RED._("keyboard.selectAll")})}p="right",r.x-$(document).scrollLeft()>$(window).width()-500&&(p="left"),(t=RED.menu.init({direction:p,onpreselect:function(){o()},onpostselect:function(){RED.view.focus()},options:d})).attr("id","red-ui-workspace-context-menu"),t.css({position:"absolute"}),t.appendTo("body"),b=r.y,f=r.x,b+t.height()-$(document).scrollTop()>$(window).height()&&(b-=b+t.height()-$(window).height()+22),f+t.width()-$(document).scrollLeft()>$(window).width()&&(f-=f+t.width()-$(window).width()+18),t.css({top:b+"px",left:f+"px"}),$(".red-ui-menu.red-ui-menu-dropdown").hide(),$(document).on("mousedown.red-ui-workspace-context-menu",function(e){t&&t[0].contains(e.target)||o()}),t.show(),$("#red-ui-workspace-context-menu :first(ul) > a").trigger("focus")},hide:o}}(),RED.actionList=function(){var o,i,n,a=!1,s=null,r=!1,d="",l=[];function c(){var e,t,o,n=i.find("li.selected");1===n.length&&(t=(e=i.parent()).height(),e.scrollTop(),t<(o=n.position().top)+(n=n.height())?e.animate({scrollTop:"-="+(t-(o+n)-10)},50):o<0&&e.animate({scrollTop:"+="+(o-10)},50))}function u(e){t(),e&&RED.actions.invoke(e.id)}function e(e){var t;a||(r||(n=document.activeElement,$("#red-ui-header-shade").show(),$("#red-ui-editor-shade").show(),$("#red-ui-palette-shade").show(),$("#red-ui-sidebar-shade").show(),$("#red-ui-sidebar-separator").hide(),null===s&&(s=$("<div>",{id:"red-ui-actionList",class:"red-ui-search"}).appendTo("#red-ui-main-container"),t=$("<div>",{class:"red-ui-search-container"}).appendTo(s),(o=$('<input type="text" data-i18n="[placeholder]keyboard.filterActions">').appendTo(t).searchBox({change:function(){d=$(this).val().trim().toLowerCase(),l=d.split(" "),i.editableList("filter"),i.find("li.selected").removeClass("selected");var e=i.children(":visible");e.length&&$(e[0]).addClass("selected")}})).on("keydown",function(e){var t,o,n;40===e.keyCode?((o=i.find("li.selected")).length?(n=o.nextAll(":visible").first()).length&&(o.removeClass("selected"),n.addClass("selected")):(t=i.children(":visible")).length&&$(t[0]).addClass("selected"),c(),e.preventDefault()):38===e.keyCode?((n=(o=i.find("li.selected")).prevAll(":visible").first()).length&&(o.removeClass("selected"),n.addClass("selected")),c(),e.preventDefault()):13===e.keyCode&&(o=i.find("li.selected"),u(i.editableList("getItem",o)))}),o.i18n(),t=$("<div>",{class:"red-ui-search-results-container"}).appendTo(s),i=$("<ol>",{style:"position: absolute;top: 5px;bottom: 5px;left: 5px;right: 5px;"}).appendTo(t).editableList({addButton:!1,addItem:function(e,t,o){var n;void 0===o.id?$("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(e):(e=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),n=$("<div>",{class:"red-ui-search-result-action"}).appendTo(e),$("<div>").text(o.label).appendTo(n),o.key&&$("<div>",{class:"red-ui-search-result-action-key"}).html(RED.keyboard.formatKey(o.key)).appendTo(n),e.on("click",function(e){e.preventDefault(),u(o)}))},scrollOnAdd:!1,filter:function(e){if(""!==d)for(var t=0,o=0;o<l.length;o++){var n=e._label.indexOf(l[o],t);if(!(-1<n))return!1;t=n}return!0}})),s.slideDown(300),o.searchBox("value",e),i.editableList("empty"),results=[],(t=RED.actions.list()).sort(function(e,t){e=e.label,t=t.label;return e.localeCompare(t)}),t.forEach(function(e){e._label=e.label.toLowerCase(),i.editableList("addItem",e)}),RED.events.emit("actionList:open"),r=!0),o.trigger("focus"),(e=i.children(":visible")).length&&$(e[0]).addClass("selected"))}function t(){r&&(r=!1,$("#red-ui-header-shade").hide(),$("#red-ui-editor-shade").hide(),$("#red-ui-palette-shade").hide(),$("#red-ui-sidebar-shade").hide(),$("#red-ui-sidebar-separator").show(),null!==s&&s.slideUp(200,function(){o.searchBox("value","")}),RED.events.emit("actionList:close"),n)&&($(n).trigger("focus"),n=null)}return{init:function(){RED.settings.theme("menu.menu-item-action-list",!0)&&RED.actions.add("core:show-action-list",e),RED.events.on("editor:open",function(){a=!0}),RED.events.on("editor:close",function(){a=!1}),RED.events.on("search:open",function(){a=!0}),RED.events.on("search:close",function(){a=!1}),RED.events.on("type-search:open",function(){a=!0}),RED.events.on("type-search:close",function(){a=!1}),RED.keyboard.add("red-ui-actionList","escape",function(){t()}),$("#red-ui-header-shade").on("mousedown",t),$("#red-ui-editor-shade").on("mousedown",t),$("#red-ui-palette-shade").on("mousedown",t),$("#red-ui-sidebar-shade").on("mousedown",t)},show:e,hide:t}}(),RED.typeSearch=function(){var d,l,n,i,a,s,r=null,c=-1,u=!1,p="",f={};function h(){var e,t,o,n=l.find("li.selected");1===n.length&&(t=(e=l.parent()).height(),e.scrollTop(),t<(o=n.position().top)+(n=n.height())?e.animate({scrollTop:"-="+(t-(o+n)-10)},50):o<0&&e.animate({scrollTop:"+="+(o-10)},50))}function g(e,t){var o=r.position();o.top=o.top+t+"px",o.left=o.left+e+"px",r.css(o),s(e,t)}function m(){r=$("<div>",{id:"red-ui-type-search",class:"red-ui-search red-ui-type-search"}).appendTo("#red-ui-main-container");var e=$("<div>",{class:"red-ui-search-container"}).appendTo(r);(d=$('<input type="text" id="red-ui-type-search-input">').attr("placeholder",RED._("search.addNode")).appendTo(e).searchBox({delay:50,change:function(){var e;e=$(this).val(),p=e.toLowerCase(),l.editableList("filter"),l.editableList("sort"),setTimeout(function(){c=0,l.children().removeClass("selected"),l.children(":visible:first").addClass("selected")},100)}})).on("keydown",function(e){var t,o,n=l.children(":visible");40===e.keyCode&&e.shiftKey?(e.preventDefault(),g(0,10)):38===e.keyCode&&e.shiftKey?(e.preventDefault(),g(0,-10)):39===e.keyCode&&e.shiftKey?(e.preventDefault(),g(10,0)):37===e.keyCode&&e.shiftKey?(e.preventDefault(),g(-10,0)):0<n.length?40===e.keyCode?(c<n.length-1&&(-1<c&&$(n[c]).removeClass("selected"),c++),$(n[c]).addClass("selected"),h(),e.preventDefault()):38===e.keyCode?(0<c&&(c<n.length&&$(n[c]).removeClass("selected"),c--),$(n[c]).addClass("selected"),h(),e.preventDefault()):(e.metaKey||e.ctrlKey)&&13===e.keyCode?(e.preventDefault(),(o=Math.max(0,c))<n.length&&(t=$(n[o]).find(".red-ui-editableList-item-content").data("data"),/^_action_:/.test(t.type)||(f[t.type]=Date.now()),0===t.def.outputs?v(t):i(t.type,!0),$("#red-ui-type-search-input").val("").trigger("keyup"),setTimeout(function(){$("#red-ui-type-search-input").focus()},100))):13===e.keyCode&&(e.preventDefault(),(o=Math.max(0,c))<n.length)&&v($(n[o]).find(".red-ui-editableList-item-content").data("data")):13===e.keyCode&&(e.stopPropagation(),e.preventDefault())}),n=$("<div>",{class:"red-ui-search-results-container"}).appendTo(r),l=$("<ol>",{style:"position: absolute;top: 0;bottom: 0;left: 0;right: 0;"}).appendTo(n).editableList({addButton:!1,filter:function(e){return""===p||!e.recent&&!e.common&&(""===p||-1<e.index.indexOf(p))},sort:function(e,t){var o,n;return""===p?e.i-t.i:(o=e.index.indexOf(p),n=t.index.indexOf(p),-1===o?1:-1===n?-1:o===n?E(e,t):o-n)},addItem:function(e,t,o){var n=o.def,e=(o.index=o.type.toLowerCase(),o.separator&&e.addClass("red-ui-search-result-separator"),$("<div>",{class:"red-ui-search-result"}).appendTo(e)),i=$("<div>",{class:"red-ui-search-result-node"}).appendTo(e),a=("junction"===o.type||/^_action_:/.test(o.type)?i.addClass("red-ui-palette-icon-junction"):(a=RED.utils.getNodeColor(o.type,n),i.css("backgroundColor",a)),RED.utils.getNodeIcon(n)),s=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(i),s=(RED.utils.createIconElement(a,s,!1),/^subflow:/.test(o.type)?(0<(a=RED.nodes.subflow(o.type.substring(8))).in.length&&$("<div/>",{class:"red-ui-search-result-node-port"}).appendTo(i),0<a.out.length&&$("<div/>",{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(i)):/^_action_:/.test(o.type)||"junction"===o.type||(0<n.inputs&&$("<div/>",{class:"red-ui-search-result-node-port"}).appendTo(i),0<n.outputs&&$("<div/>",{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(i)),$("<div>",{class:"red-ui-search-result-description"}).appendTo(e)),a=o.label;o.index+="|"+a.toLowerCase(),$("<div>",{class:"red-ui-search-result-node-label"}).text(a).appendTo(s),e.on("click",function(e){e.preventDefault(),v(o)})},scrollOnAdd:!1})}function v(e){y(),/^_action_:/.test(e.type)||(f[e.type]=Date.now()),i(e.type)}function b(e){if(u){for(var t=$(e.target);"body"!==t.prop("nodeName").toLowerCase();){if("red-ui-type-search"===t.attr("id"))return;t=t.parent()}y(!0),a&&a()}}function y(e){u&&(u=!1,null!==r&&n.slideUp(e?50:200,function(){r.hide(),d.searchBox("value","")}),RED.events.emit("type-search:close"),RED.view.focus(),$(document).off("mousedown.red-ui-type-search"),$(document).off("mouseup.red-ui-type-search"),$(document).off("click.red-ui-type-search"),$(document).off("touchstart.red-ui-type-search"))}function w(t,e){var o=t;if(void 0!==e.paletteLabel)try{o=("function"==typeof e.paletteLabel?e.paletteLabel.call(e):e.paletteLabel)||"",o+=" ("+t+")"}catch(e){console.log("Definition error: "+t+".paletteLabel",e)}return o}function E(e,t){e=e.label.toLowerCase(),t=t.label.toLowerCase();return e<t?-1:e===t?0:1}function D(e,t,o){return!e||("junction"===t?!e.type:e.type?e.type===t:!o||(!e.input||0<o.inputs)&&(!e.output||0<o.outputs))}function R(t){l.editableList("empty"),d.searchBox("value","").focus(),c=-1;for(var e,o=["inject","debug","function","change","switch","junction"].filter(function(e){return D(t.filter,e,RED.nodes.getType(e))}),n=Object.keys(f),i=(n.sort(function(e,t){return f[t]-f[e]}),n=n.filter(function(e){return D(t.filter,e,RED.nodes.getType(e))&&-1===o.indexOf(e)}),[]),a=(RED.nodes.registry.getNodeTypes().forEach(function(e){var t=RED.nodes.getType(e);!1!==t.set?.enabled&&"config"!==t.category&&"unknown"!==e&&"tab"!==e&&i.push({type:e,def:t,label:w(e,t)})}),i.push({type:"junction",def:{inputs:1,outputs:1,label:"junction",type:"junction"},label:"junction"}),i.sort(E),0),s=0;s<o.length;s++){var r=RED.nodes.getType(o[s]);"junction"===o[s]?r={inputs:1,outputs:1,label:"junction",type:"junction"}:/^_action_:/.test(o[s])&&(r={inputs:1,outputs:1,label:o[s],type:o[s]}),r&&((e={type:o[s],common:!0,def:r,i:a++}).label=w(e.type,e.def),s===o.length-1&&(e.separator=!0),l.editableList("addItem",e))}for(s=0;s<Math.min(5,n.length);s++)(e={type:n[s],def:RED.nodes.getType(n[s]),recent:!0,i:a++}).label=w(e.type,e.def),s===n.length-1&&(e.separator=!0),l.editableList("addItem",e);for(s=0;s<i.length;s++)D(t.filter,i[s].type,i[s].def)&&(i[s].i=a++,l.editableList("addItem",i[s]));setTimeout(function(){c=0,l.children(":first").addClass("selected")},100)}return{show:function(e){u?(r.hide(),n.hide()):(null===r&&(m(),RED.keyboard.add("red-ui-type-search","escape",function(){y(),a&&a()})),u=!0),$(document).off("mousedown.red-ui-type-search"),$(document).off("mouseup.red-ui-type-search"),$(document).off("click.red-ui-type-search"),$(document).off("touchstart.red-ui-type-search"),$(document).off("mousedown.red-ui-type-search"),setTimeout(function(){$(document).on("mousedown.red-ui-type-search",b),$(document).on("mouseup.red-ui-type-search",b),$(document).on("click.red-ui-type-search",b),$(document).on("touchstart.red-ui-type-search",b)},200),R(e),i=e.add,a=e.cancel,s=e.move,RED.events.emit("type-search:open"),$("#red-ui-main-container").height()-e.y-195<0&&(e.y=e.y-275);var t=r.width()||300,o=$("#red-ui-workspace").width();t<o&&o-e.x-t<0&&(e.x=e.x-(t-RED.view.node_width)),r.css({left:e.x+"px",top:e.y+"px"}).show(),n.slideDown(300),setTimeout(function(){n.find(".red-ui-editableList-container").scrollTop(0),e.disableFocus||d.trigger("focus")},200)},refresh:R,hide:y}}(),RED.subflow=function(){function s(e,t){var o=RED.view.scroll(),n=RED.view.scale(),i={x:o[0]/n+50,y:o[1]/n+30},a=(t||(i.x+=110),[].concat(e.out).concat(e.in));e.status&&a.push(e.status),a.sort(function(e,t){return e.x-t.x});for(var s=0;s<a.length;s++){var r=a[s];r.x==i.x&&r.y==i.y&&(i.x+=55)}return i}function r(){var t,o,n=RED.nodes.subflow(RED.workspaces.active());if(0!==n.in.length)return t=n.in[0],o=[],RED.nodes.eachLink(function(e){("subflow"==e.source.type&&e.source.z==n.id&&e.source.i==t.i||e.target.type=="subflow:"+n.id)&&o.push(e)}),o.forEach(function(e){RED.nodes.removeLink(e)}),n.in=[],$("#red-ui-subflow-input-add").removeClass("active"),$("#red-ui-subflow-input-remove").addClass("active"),n.changed=!0,RED.events.emit("subflows:change",n),{subflowInputs:[t],links:o}}function d(e){var t=RED.nodes.subflow(RED.workspaces.active());if(0!==t.out.length){var o=[];for((e=void 0===e?[t.out[t.out.length-1]]:e).sort(function(e,t){return t.i-e.i}),i=0;i<e.length;i++){var n=e[i],a=(t.out.splice(n.i,1),[]),s=[];RED.nodes.eachLink(function(e){"subflow"==e.target.type&&e.target.z==t.id&&e.target.i==n.i&&a.push(e),e.source.type=="subflow:"+t.id&&(e.sourcePort==n.i?a.push(e):e.sourcePort>n.i&&s.push(e))}),a.forEach(function(e){RED.nodes.removeLink(e)}),s.forEach(function(e){e.sourcePort--});for(var o=o.concat(a),r=n.i;r<t.out.length;r++)t.out[r].i--,t.out[r].dirty=!0}return t.changed=!0,RED.events.emit("subflows:change",t),{subflowOutputs:e,links:o}}}function l(){var t,o=RED.nodes.subflow(RED.workspaces.active());if(o.status)return t=[],RED.nodes.eachLink(function(e){"subflow"==e.target.type&&e.target.z==o.id&&"status"==e.target.direction&&t.push(e)}),t.forEach(function(e){RED.nodes.removeLink(e)}),delete o.status,$("#red-ui-subflow-status").prop("checked",!!o.status),$("#red-ui-subflow-status").parent().parent().toggleClass("active",!!o.status),{links:t}}function c(n){var i=RED.nodes.subflow(RED.workspaces.active()),a=(t(i),[]);if(i)return RED.nodes.filterNodes({type:"subflow:"+i.id}).forEach(function(e){var t=RED.nodes.workspace(e.z),o=t&&t.locked;o&&(t.locked=!1),a.push({id:e.id,changed:e.changed}),n&&(e.changed=!0),e.inputs=i.in.length,e.outputs=i.out.length,e.resize=!0,e.dirty=!0,RED.editor.updateNodeProperties(e),o&&(t.locked=!0)}),RED.editor.validateNode(i),{instances:a}}function t(e){e&&($("#red-ui-subflow-input-add").toggleClass("active",0!==e.in.length),$("#red-ui-subflow-input-remove").toggleClass("active",0===e.in.length),$("#red-ui-subflow-output .spinner-value").text(e.out.length),$("#red-ui-subflow-status").prop("checked",!!e.status),$("#red-ui-subflow-status").parent().parent().toggleClass("active",!!e.status))}function o(a){var e=$("#red-ui-workspace-toolbar");e.empty(),$('<a class="button" id="red-ui-subflow-edit" href="#" data-i18n="[append]subflow.editSubflowProperties"><i class="fa fa-pencil"></i> </a>').appendTo(e),$('<span style="margin-left: 5px;" data-i18n="subflow.input"></span> <div style="display: inline-block;" class="button-group"><a id="red-ui-subflow-input-remove" class="button active" href="#">0</a><a id="red-ui-subflow-input-add" class="button" href="#">1</a></div>').appendTo(e),$('<span style="margin-left: 5px;" data-i18n="subflow.output"></span> <div id="red-ui-subflow-output" style="display: inline-block;" class="button-group spinner-group"><a id="red-ui-subflow-output-remove" class="button" href="#"><i class="fa fa-minus"></i></a><div class="spinner-value">3</div><a id="red-ui-subflow-output-add" class="button" href="#"><i class="fa fa-plus"></i></a></div>').appendTo(e),$('<span class="button-group"><span class="button" style="padding:0"><label for="red-ui-subflow-status"><input id="red-ui-subflow-status" type="checkbox"> <span data-i18n="subflow.status"></span></label></span></span>').appendTo(e),$('<a class="button" id="red-ui-subflow-delete" href="#" data-i18n="[append]subflow.deleteSubflow"><i class="fa fa-trash"></i> </a>').appendTo(e),e.i18n(),$("#red-ui-subflow-output-remove").on("click",function(e){e.preventDefault();var t,e=RED.nodes.dirty(),o=a.changed,n=d();n&&(t=c(!0),RED.history.push({t:"delete",links:n.links,subflowOutputs:n.subflowOutputs,changed:o,dirty:e,subflow:{instances:t.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0))}),$("#red-ui-subflow-output-add").on("click",function(e){var t,o,n,i;e.preventDefault(),e=RED.nodes.subflow(RED.workspaces.active()),t=s(e,!1),t={type:"subflow",direction:"out",z:e.id,i:e.out.length,x:t.x,y:t.y,id:RED.nodes.id()},o=e.out.length,e.out.push(t),e.dirty=!0,t=RED.nodes.dirty(),n=e.changed,i=c(e.changed=!0),t={t:"edit",node:e,dirty:t,changed:n,subflow:{outputCount:o,instances:i.instances}},RED.history.push(t),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#red-ui-subflow-output .spinner-value").text(e.out.length),RED.events.emit("subflows:change",e)}),$("#red-ui-subflow-input-add").on("click",function(e){var t,o,n,i;e.preventDefault(),1!==(e=RED.nodes.subflow(RED.workspaces.active())).in.length&&(i=s(e,!0),i={type:"subflow",direction:"in",z:e.id,i:e.in.length,x:i.x,y:i.y,id:RED.nodes.id()},t=e.in.length,e.in.push(i),e.dirty=!0,i=RED.nodes.dirty(),o=e.changed,n=c(e.changed=!0),i={t:"edit",node:e,dirty:i,changed:o,subflow:{inputCount:t,instances:n.instances}},RED.history.push(i),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#red-ui-subflow-input-add").addClass("active"),$("#red-ui-subflow-input-remove").removeClass("active"),RED.events.emit("subflows:change",e))}),$("#red-ui-subflow-input-remove").on("click",function(e){e.preventDefault();var t,e=RED.nodes.dirty(),o=a.changed,n=(a.changed=!0,r());n&&(t=c(!0),RED.history.push({t:"delete",links:n.links,changed:o,subflowInputs:n.subflowInputs,dirty:e,subflow:{instances:t.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0))}),$("#red-ui-subflow-status").on("change",function(e){var t,o,n,i;this.checked?(i=RED.nodes.subflow(RED.workspaces.active())).status||(o=s(i,!1),o={type:"subflow",direction:"status",z:i.id,x:o.x,y:o.y,id:RED.nodes.id()},i.status=o,i.dirty=!0,o=RED.nodes.dirty(),n=i.changed,c(i.changed=!0),RED.history.push({t:"edit",node:i,dirty:o,changed:n,subflow:{status:!0}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),RED.events.emit("subflows:change",i),$("#red-ui-subflow-status").prop("checked",!!i.status),$("#red-ui-subflow-status").parent().parent().toggleClass("active",!!i.status)):(o=a.status,n=a.changed,(i=l())&&(a.changed=!0,t=RED.nodes.dirty(),RED.history.push({t:"delete",links:i.links,changed:n,dirty:t,subflow:{id:a.id,status:o}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw()))}),$("#red-ui-subflow-edit").on("click",function(e){RED.editor.editSubflow(RED.nodes.subflow(RED.workspaces.active())),e.preventDefault()}),$("#red-ui-subflow-delete").on("click",function(e){e.preventDefault(),RED.subflow.delete(RED.workspaces.active())}),t(a),$("#red-ui-workspace-chart").css({"margin-top":"40px"}),$("#red-ui-workspace-toolbar").show()}function a(t,o){for(var n=[],e=[],i=[],a=RED.nodes.subflow(t),s=(RED.nodes.eachNode(function(e){o||e.type!="subflow:"+t||n.push(e),e.z==t&&n.push(e)}),RED.nodes.eachConfig(function(e){e.z==t&&n.push(e)}),RED.nodes.groups(t).forEach(function(e){i.push(e)}),RED.nodes.junctions(t)),r=0;r<s.length;r++)var d=RED.nodes.removeJunction(s[r]),e=e.concat(d.links);for(var l=[],r=0;r<n.length;r++){d=RED.nodes.remove(n[r].id);e=e.concat(d.links),l=l.concat(d.nodes)}for(n=n.concat(l),i=RED.nodes.groups(t).filter(function(e){return!e.g}),r=0;r<i.length;r++)i[r].nodes.forEach(function(e){"group"===e.type&&i.push(e)});for(r=i.length-1;0<=r;r--)RED.nodes.removeGroup(i[r]);return RED.nodes.removeSubflow(a),RED.workspaces.remove(a),RED.nodes.dirty(!0),RED.view.redraw(),{nodes:n,links:e,groups:i,junctions:s,subflows:[a]}}function e(){var t=0,e=(RED.nodes.eachSubflow(function(e){e=new RegExp("^Subflow (\\d+)$").exec(e.name);e&&(t=Math.max(t,e[1]))}),"Subflow "+(t+1)),o=RED.nodes.id(),e={type:"subflow",id:o,name:e,info:"",in:[],out:[]};RED.nodes.addSubflow(e),RED.history.push({t:"createSubflow",subflow:{subflow:e},dirty:RED.nodes.dirty()}),RED.workspaces.show(o),RED.nodes.dirty(!0)}function R(e){return e=RED.settings.get("editor").view["view-snap-grid"]?Math.round(e/RED.view.gridSize())*RED.view.gridSize():e}function x(e){var t=RED.nodes.node(e);return t||RED.nodes.junction(e)}function n(){if(!RED.workspaces.isLocked()){var e=RED.view.selection();if(e.nodes){for(var n,t=new Set,o=e.nodes.slice(),i=new Set;0<o.length;)"group"===(n=o.shift()).type&&(i.add(n.id),o=o.concat(n.nodes)),t.add(n);for(var a=(t=Array.from(t))[0].g,s=[],r=0;r<t.length;r++)if(t[r].g&&!i.has(t[r].g)&&a!==t[r].g)return void RED.notify(RED._("subflow.errors.acrossMultipleGroups"),"error");var a=a&&RED.nodes.group(a),d={},l=[],c=[],u=[],p=[],f={},h=[t[0].x-t[0].w/2,t[0].y-t[0].h/2,t[0].x+t[0].w/2,t[0].y+t[0].h/2];for(r=0;r<t.length;r++)n=t[r],d[n.id]={n:n,outputs:{}},h=[Math.min(h[0],n.x-n.w/2),Math.min(h[1],n.y-n.h/2),Math.max(h[2],n.x+n.w/2),Math.max(h[3],n.y+n.h/2)];var g=R(h[0]-140),m=R(h[1]-60),e=[R((h[2]+h[0])/2),R((h[3]+h[1])/2)],v=(RED.nodes.eachLink(function(e){d[e.source.id]&&e.target.id,d[e.source.id]&&!d[e.target.id]&&(p.push(e),c.push(e)),!d[e.source.id]&&d[e.target.id]&&(u.push(e),f[e.target.id]=e.target,c.push(e))}),{});if((p=p.filter(function(e){return v[e.source.id+":"+e.sourcePort]?(v[e.source.id+":"+e.sourcePort].targets.push(e.target),!1):(e.targets=[],e.targets.push(e.target),v[e.source.id+":"+e.sourcePort]=e,!0)})).sort(function(e,t){return e.source.y-t.source.y}),1<Object.keys(f).length)RED.notify(RED._("subflow.errors.multipleInputsToSelection"),"error");else{var b=0,y=(RED.nodes.eachSubflow(function(e){e=new RegExp("^Subflow (\\d+)$").exec(e.name);e&&(b=Math.max(b,e[1]))}),"Subflow "+(b+1)),w=RED.nodes.id(),E={type:"subflow",id:w,name:y,info:"",in:Object.keys(f).map(function(e,t){return{type:"subflow",direction:"in",x:R(f[e].x-f[e].w/2-80-g),y:R(f[e].y-m),z:w,i:t,id:RED.nodes.id(),wires:[{id:f[e].id}]}}),out:p.map(function(e,t){return{type:"subflow",direction:"out",x:R(e.source.x+e.source.w/2+80-g),y:R(e.source.y-m),z:w,i:t,id:RED.nodes.id(),wires:[{id:e.source.id,port:e.sourcePort}]}})},D=(RED.nodes.addSubflow(E),{id:RED.nodes.id(),type:"subflow:"+E.id,x:e[0],y:e[1],z:RED.workspaces.active(),inputs:E.in.length,outputs:E.out.length,h:Math.max(30,15*(E.out.length||0)),changed:!0});for(D._def=RED.nodes.getType(D.type),RED.editor.validateNode(D),D=RED.nodes.add(D),a&&(RED.group.addToGroup(a,D),t.forEach(function(e){var t;e.g===a.id&&(delete e.g,t=a.nodes.indexOf(e),a.nodes.splice(t,1),s.push(e))}),a.dirty=!0),u.forEach(function(e){e={source:e.source,sourcePort:e.sourcePort,target:D};l.push(e),RED.nodes.addLink(e)}),p.forEach(function(e,t){e.targets.forEach(function(e){e={source:D,sourcePort:t,target:e};l.push(e),RED.nodes.addLink(e)})}),E.in.forEach(function(t){t.wires.forEach(function(e){e={source:t,sourcePort:0,target:x(e.id)};l.push(e),RED.nodes.addLink(e)})}),E.out.forEach(function(t,e){t.wires.forEach(function(e){e={source:x(e.id),sourcePort:e.port,target:t};l.push(e),RED.nodes.addLink(e)})}),r=0;r<c.length;r++)RED.nodes.removeLink(c[r]);for(r=0;r<t.length;r++)n=t[r],/^link /.test(n.type)&&(n.links=n.links.filter(function(e){var t,o=d.hasOwnProperty(e);return o||(e=x(e))&&e.links&&-1<(t=e.links.indexOf(n.id))&&e.links.splice(t,1),o})),n.x-=g,n.y-=m,RED.nodes.moveNodeToTab(n,E.id);y={t:"createSubflow",nodes:[D.id],links:l,subflow:{subflow:E,offsetX:g,offsetY:m},activeWorkspace:RED.workspaces.active(),removedLinks:c,dirty:RED.nodes.dirty()};a&&((y={t:"multi",events:[y]}).events.push({t:"addToGroup",group:a,nodes:[D]}),y.events.push({t:"removeFromGroup",group:a,nodes:s,reparent:!1})),RED.history.push(y),RED.editor.validateNode(E),RED.nodes.dirty(!0),RED.view.updateActive(),RED.view.select(null),RED.view.focus()}}else RED.notify(RED._("subflow.errors.noNodesSelected"),"error")}}function u(e,t,o){RED.subflow.debug&&console.log("buildEnvUI",t),e.empty();for(var n=0;n<t.length;n++){var i=t[n];i.ui&&"hide"===i.ui.type||!function(e,t,o){RED.subflow.debug&&console.log("buildEnvUIRow",t);var n=t.ui||{},i=(n.label=n.label||{},("cred"===t.type||t.parent&&"cred"===t.parent.type)&&!n.type?(n.type="cred",n.opts={}):"conf-types"===t.type?(n.type="conf-types",n.opts={types:["conf-types"]}):n.type?n.opts||(n.opts="select"===n.type?{opts:[]}:{}):(n.type="input",n.opts={types:RED.editor.envVarList.DEFAULT_ENV_TYPE_LIST}),n.label||{}),a=RED.i18n.lang(),s=RED.editor.envVarList.lookupLabel(i,i["en-US"]||t.name,a),r=$("<label>").appendTo(e),d=($("<span>&nbsp;</span>").appendTo(e),$("<span></span>").appendTo(r)),l=(n.icon&&(i=RED.utils.separateIconPath(n.icon))&&$("<i class='fa "+i.file+"'/>").appendTo(d),"checkbox"!==n.type&&(i=n.icon?{"padding-left":"5px"}:{},$("<span>").css(i).text(s).appendTo(r),"none"===n.type)&&r.width("100%"),{value:"",type:"str"}),c=(t.parent&&(l.value=t.parent.value,l.type=t.parent.type),t.hasOwnProperty("value")&&(l.value=t.value),t.hasOwnProperty("type")&&(l.type=t.type),h(t.name));switch(n.type){case"input":var u=$('<input type="text">').css("width","70%").attr("id",c).appendTo(e);n.opts.types&&0<n.opts.types.length?(-1===n.opts.types.indexOf(p=l.type)&&(p=n.opts.types[0]),u.typedInput({types:n.opts.types,default:p}),u.typedInput("value",l.value),"cred"===p&&o.credentials&&(o.credentials[t.name]?u.typedInput("value",o.credentials[t.name]):o.credentials["has_"+t.name]?u.typedInput("value","__PWRD__"):u.typedInput("value",""))):u.val(l.value);break;case"select":u=$("<select>").css("width","70%").attr("id",c).appendTo(e),n.opts.opts&&n.opts.opts.forEach(function(e){$("<option>").val(e.v).text(RED.editor.envVarList.lookupLabel(e.l,e.l["en-US"]||e.v,a)).appendTo(u)}),u.val(l.value);break;case"checkbox":r.css("cursor","default");var p=$("<label>").css("width","70%").appendTo(e),p=(u=$('<input type="checkbox">').attr("id",c).css({marginTop:0,width:"auto",height:"34px"}).appendTo(p),d.css({"padding-left":"5px"}).appendTo(p),$("<span>").css({"padding-left":"5px"}).text(s).appendTo(p),!1),p="bool"===l.type?"true"===l.value:"num"===l.type?"0"!==l.value:""!==l.value;u.prop("checked",p);break;case"spinner":u=$("<input>").css("width","70%").attr("id",c).appendTo(e);p={};n.opts.hasOwnProperty("min")&&(p.min=n.opts.min),n.opts.hasOwnProperty("max")&&(p.max=n.opts.max),u.spinner(p).parent().width("70%"),u.val(l.value);break;case"cred":u=$('<input type="password">').css("width","70%").attr("id",c).appendTo(e),o.credentials?o.credentials[t.name]?u.val(o.credentials[t.name]):o.credentials["has_"+t.name]?u.val("__PWRD__"):u.val(""):u.val(""),u.typedInput({types:["cred"],default:"cred"});break;case"conf-types":u=$("<input>").css("width","70%").attr("id",c).appendTo(e);p=t.parent?.type||t.type;RED.editor.prepareConfigNodeSelect(o,t.name,p,"node-input-subflow-env",null,t)}}($("<div/>",{class:"form-row"}).appendTo(e),i,o)}}function p(e,r){var d;return e?(d=[],e.each(function(e){var t=$(this).data("data"),o=(t.parent?t.name:t.nameField.val()).trim();if(""!==o||t.ui&&"none"===t.ui.type){var n=t.valueField,i=n.typedInput("value"),n=n.typedInput("type");if(r||!t.parent||t.parent.value!==i||t.parent.type!==n){var a={name:o,type:n,value:i};if(t.ui){var s={icon:t.ui.icon,label:$.extend(!0,{},t.ui.label),type:t.ui.type,opts:$.extend(!0,{},t.ui.opts)};switch(s.icon||delete s.icon,$.isEmptyObject(s.label)&&delete s.label,s.type){case"input":JSON.stringify(s.opts)===JSON.stringify({types:RED.editor.envVarList.DEFAULT_ENV_TYPE_LIST})&&(delete s.type,delete s.opts);break;case"cred":"cred"===a.type&&delete s.type,delete s.opts;break;case"select":s.opts&&$.isEmptyObject(s.opts.opts)&&delete s.opts;break;case"spinner":$.isEmptyObject(s.opts)&&delete s.opts;break;default:delete s.opts}$.isEmptyObject(s)||(a.ui=s)}d.push(a)}}}),d):null}function f(a){var o={},s=[];if(/^subflow:/.test(a.type)){var e=RED.nodes.subflow(a.type.substring(8));if(e.env&&e.env.forEach(function(e,t){t={index:t,name:e.name,parent:{type:e.type,value:e.value},ui:$.extend(!0,{},e.ui)};s.push(t),o[e.name]=t}),a.env)for(var t=0;t<a.env.length;t++){var n=a.env[t];o.hasOwnProperty(n.name)&&(o[n.name].type=n.type,o[n.name].value=n.value)}}else a._def.subflowModule&&Object.keys(a._def.defaults).forEach(function(e){if("name"!==e){var t,o=a._def.defaults[e],n=a[e],i=n;if(o.ui&&"cred"===o.ui.type)t="cred";else if(o.ui&&"conf-types"===o.ui.type)t=o.value.type;else switch(typeof n){case"string":t="str";break;case"number":t="num";break;case"boolean":t="bool",i=n?"true":"false";break;default:n?(t=n.type,i=n.value):t="str"}e={name:e,type:t,value:i,parent:{type:o.type,value:o.value},ui:$.extend(!0,{},o.ui)};s.push(e)}});return s}function h(e){return"node-input-subflow-env-"+e.replace(/[^a-z0-9-_]/gi,"_")}return{init:function(){RED.events.on("workspace:change",function(e){e=RED.nodes.subflow(e.workspace);e?o(e):($("#red-ui-workspace-toolbar").hide().empty(),$("#red-ui-workspace-chart").css({"margin-top":"0"}))}),RED.events.on("view:selection-changed",function(e){!e.nodes||RED.workspaces.isLocked()?RED.menu.setDisabled("menu-item-subflow-convert",!0):RED.menu.setDisabled("menu-item-subflow-convert",!1)}),RED.actions.add("core:create-subflow",e),RED.actions.add("core:convert-to-subflow",n),$('<script type="text/x-red" 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" data-i18n="[placeholder]common.label.name"></div><div id="subflow-input-ui"></div><\/script>').appendTo("#red-ui-editor-node-configs"),$('<script type="text/x-red" data-template-name="subflow-template"><div class="form-row"><label for="subflow-input-name" data-i18n="[append]common.label.name"><i class="fa fa-tag"></i> </label><input type="text" id="subflow-input-name" data-i18n="[placeholder]common.label.name"></div><div class="form-row"><ul style="margin-bottom: 20px;" id="subflow-env-tabs"></ul></div><div id="subflow-env-tabs-content"><div id="subflow-env-tab-edit"><div class="form-row node-input-env-container-row" id="subflow-input-edit-ui"><ol id="node-input-env-container"></ol><div class="node-input-env-locales-row"><i class="fa fa-language"></i> <select id="subflow-input-env-locale"></select></div></div></div><div id="subflow-env-tab-preview"><div id="subflow-input-ui"/></div></div><\/script>').appendTo("#red-ui-editor-node-configs")},createSubflow:e,convertToSubflow:n,removeSubflow:a,delete:function(e){const o=RED.nodes.subflow(e||RED.workspaces.active());if(o)if(0<o.instances.length){if(!o.instances.some(e=>{e=RED.nodes.workspace(e.z);return!!e&&e.locked})){e=$("<div>");$("<p>").text(RED._("subflow.subflowInstances",{count:o.instances.length})).appendTo(e),$("<p>").text(RED._("subflow.confirmDelete")).appendTo(e);const n=RED.notify(e,{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){n.close()}},{text:RED._("workspace.confirmDelete"),class:"primary",click:function(){n.close(),t()}}]})}}else t();function t(){var e=RED.nodes.dirty(),t=a(o.id);t.t="delete",t.dirty=e,RED.history.push(t)}},refresh:c,removeInput:r,removeOutput:d,removeStatus:l,buildEditForm:function(e,t){var o,n,i,a;RED.subflow.debug&&console.log("buildEditForm",e,t),"subflow-template"===e?(o=$("#node-input-env-container"),n=t,(i=RED.tabs.create({id:"subflow-env-tabs",onchange:function(e){"subflow-env-tab-preview"===e.id&&u($("#subflow-input-ui"),p(o.editableList("items"),!0),n),$("#subflow-env-tabs-content").children().hide(),$("#"+e.id).show()}})).addTab({id:"subflow-env-tab-edit",label:RED._("editor-tab.envProperties")}),i.addTab({id:"subflow-env-tab-preview",label:RED._("editor-tab.preview")}),i=RED.settings.theme("languages").map(function(e){var t=RED._("languages."+e);return{text:t||e,val:e}}).sort(function(e,t){return e.text.localeCompare(t.text)}),RED.popover.tooltip($(".node-input-env-locales-row i"),RED._("editor.locale")),a=$("#subflow-input-env-locale"),i.forEach(function(e){var t={value:e.val};"en-US"===e.val&&(t.selected=""),$("<option/>",t).text(e.text).appendTo(a)}),i=RED.i18n.lang(),a.val(i),a.on("change",function(){RED.editor.envVarList.setLocale($(this).val(),$("#node-input-env-container"))}),RED.editor.envVarList.setLocale(i),RED.editor.envVarList.create($("#node-input-env-container"),t)):"subflow"===e&&u($("#subflow-input-ui"),f(t),t)},exportSubflowTemplateEnv:p,exportSubflowInstanceEnv:function(e){RED.subflow.debug&&console.log("exportSubflowInstanceEnv",e);var i=[];return f(e).forEach(function(e){var t,o=e.ui||{},n=(o.type?o.opts=o.opts||{}:e.parent&&"cred"===e.parent.type?o.type="cred":(o.type="input",o.opts={types:RED.editor.envVarList.DEFAULT_ENV_TYPE_LIST}),$("#"+h(e.name)));if(n.length||"cred"===o.type){switch(t={name:e.name},o.type){case"input":o.opts.types&&0<o.opts.types.length?(t.value=n.typedInput("value"),t.type=n.typedInput("type")):(t.value=n.val(),t.type="str");break;case"cred":t.value=n.typedInput("value"),t.type="cred";break;case"spinner":t.value=n.val(),t.type="num";break;case"select":t.value=n.val(),t.type="str";break;case"checkbox":t.type="bool",t.value=""+n.prop("checked");break;case"conf-types":t.value="_ADD_"===n.val()?"":n.val(),t.type="conf-type"}"cred"!==o.type&&t.type===e.parent.type&&t.value===e.parent.value||i.push(t)}}),i}}}(),RED.group=function(){for(var i=["#ff0000","#ffC000","#ffff00","#92d04f","#0070c0","#001f60","#6f2fa0","#000000","#777777"],a=i.length,e=0,t=3*i.length;e<t;e++){var o=e%a,n=Math.floor(e/a)+1,s=i[o],r=parseInt(s.substring(1,3),16),d=parseInt(s.substring(3,5),16),s=parseInt(s.substring(5,7),16),l=(255-d)/(3+(o==a-1?0:1)),c=(255-s)/(3+(o==a-1?0:1)),r=((Math.min(255,Math.floor(r+n*((255-r)/(3+(o==a-1?0:1)))))<<16)+(Math.min(255,Math.floor(d+n*l))<<8)+Math.min(255,Math.floor(s+n*c))).toString(16);i.push("#"+"000000".slice(0,6-r.length)+r)}var u,f={label:!0,"label-position":"nw"};function p(e){var t=/^rgb\((\d+), (\d+), (\d+)\)$/.exec(e);return t?(t=((parseInt(t[1])<<16)+(parseInt(t[2])<<8)+parseInt(t[3])).toString(16),"#"+"000000".slice(0,6-t.length)+t):e}function h(e){var t,o;if(!RED.workspaces.isLocked())return t=[],o=RED.nodes.group(e.g),e.nodes.forEach(function(e){t.push(e),o?(e.g=o.id,o.nodes.push(e),o.dirty=!0,e.dirty=!0):delete e.g,"group"===e.type?RED.events.emit("groups:change",e):"junction"!==e.type?RED.events.emit("nodes:change",e):RED.events.emit("junctions:change",e)}),RED.nodes.removeGroup(e),t}function g(t){if(!RED.workspaces.isLocked()&&0!==t.length){var o=t[0].g;for(let e=0;e<t.length;e++){var n=t[e];if("subflow"===n.type)return void RED.notify(RED._("group.errors.cannotAddSubflowPorts"),"error");if(n.g!==o)return void console.warn("Cannot add nooes with different z properties")}var e={id:RED.nodes.id(),type:"group",nodes:[],style:JSON.parse(JSON.stringify(f)),x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY,w:0,h:0,_def:RED.group.def,changed:!0};e.z=t[0].z,e=RED.nodes.addGroup(e),o&&m(RED.nodes.group(o),e);try{m(e,t)}catch(e){return void RED.notify(e,"error")}return e}}function m(e,t){var o,n,i,a,s;for(Array.isArray(t)||(t=[t]),o=0;o<t.length;o++){if(!(s=t[o]).z)throw new Error("Cannot add node without a z property to a group");if(n){if(n!==s.z)throw new Error("Cannot add nodes with different z properties")}else n=s.z;if(s.g&&!i){if(0!==o)throw new Error(RED._("group.errors.cannotCreateDiffGroups"));i=s.g}if(i!==s.g)throw new Error(RED._("group.errors.cannotCreateDiffGroups"))}for(i&&((i=RED.nodes.group(i)).dirty=!0),o=0;o<t.length;o++)"subflow"!==(s=t[o]).type&&(i&&s.g===i.id&&-1<(a=i.nodes.indexOf(s))&&i.nodes.splice(a,1),s.g=e.id,s.dirty=!0,e.nodes.push(s),e.x=Math.min(e.x,s.x-s.w/2-25-(s._def.button&&"right"!==s._def.align?20:0)),e.y=Math.min(e.y,s.y-s.h/2-25),e.w=Math.max(e.w,s.x+s.w/2+25+(s._def.button&&"right"==s._def.align?20:0)-e.x),e.h=Math.max(e.h,s.y+s.h/2+25-e.y),"group"===s.type?RED.events.emit("groups:change",s):"junction"!==s.type?RED.events.emit("nodes:change",s):RED.events.emit("junctions:change",s));i&&RED.events.emit("groups:change",e),b(e)}function v(e,t,o){if(!RED.workspaces.isLocked()){var n;Array.isArray(t)||(t=[t]);for(var i=0;i<t.length;i++)if(t[i].g!==e.id)return;for(var a=RED.nodes.group(e.g),i=0;i<t.length;i++){(n=t[i]).dirty=!0;var s=e.nodes.indexOf(n);e.nodes.splice(s,1),o&&a?(n.g=e.g,a.nodes.push(n)):delete n.g,"group"===n.type?RED.events.emit("groups:change",n):"junction"!==n.type?RED.events.emit("nodes:change",n):RED.events.emit("junctions:change",n)}b(e)}}function b(e){for(e.dirty=!0;e;)e.dirty=!0,e=RED.nodes.group(e.g)}return{def:{defaults:{name:{value:""},style:{value:{label:!0}},nodes:{value:[]},env:{value:[]}},category:"config",oneditprepare:function(){var e,t,c,u,o,n=this.style||{};function p(){var e=c.val();o.removeClass().addClass("red-ui-group-layout-picker-cell-text red-ui-group-layout-text-pos-"+e)}RED.editor.colorPicker.create({id:"node-input-style-stroke",value:n.stroke||f.stroke||"#a4a4a4",defaultValue:"#a4a4a4",palette:i,cellPerRow:a,cellWidth:16,cellHeight:16,cellMargin:3,none:!0,opacity:n.hasOwnProperty("stroke-opacity")?n["stroke-opacity"]:f.hasOwnProperty("stroke-opacity")?f["stroke-opacity"]:1}).appendTo("#node-input-row-style-stroke"),RED.editor.colorPicker.create({id:"node-input-style-fill",value:n.fill||f.fill||"none",defaultValue:"none",palette:i,cellPerRow:a,cellWidth:16,cellHeight:16,cellMargin:3,none:!0,opacity:n.hasOwnProperty("fill-opacity")?n["fill-opacity"]:f.hasOwnProperty("fill-opacity")?f["fill-opacity"]:1}).appendTo("#node-input-row-style-fill"),e={id:"node-input-style-label-position",value:n["label-position"]||"nw"},t=$("<div>",{style:"display:inline-block"}),c=$("<input/>",{id:e.id,type:"hidden",value:e.value}).appendTo(t),u=$('<button type="button" class="red-ui-button red-ui-editor-node-appearance-button">').appendTo(t),$('<i class="fa fa-caret-down"></i>').appendTo(u),e=$("<div>",{class:"red-ui-search-result-node"}).appendTo(u),o=$("<div>",{class:"red-ui-group-layout-picker-cell-text red-ui-group-layout-text-pos-"}).appendTo(e),u.on("click",function(e){var t,o=$("<div/>",{class:"red-ui-group-layout-picker"}).css({width:"126px"});$("<div/>").appendTo(o);for(var n=0;n<2;n++)for(var i="ns"[n],a=$("<div/>").appendTo(o),s=0;s<3;s++){var r=i+["w","","e"][s],d=$("<button/>",{class:"red-ui-search-result-node red-ui-button","data-pos":r}).appendTo(a);d.on("click",function(e){e.preventDefault(),c.val($(this).data("pos")),l.hide(),p()}),$("<div>",{class:"red-ui-group-layout-picker-cell-text red-ui-group-layout-text-pos-"+r}).appendTo(d),r===c.val()&&(t=d)}p();var l=RED.popover.panel(o);l.show({target:u,onclose:function(){u.focus()}}),t&&t.focus()}),p(),t.appendTo("#node-input-row-style-label-position"),RED.editor.colorPicker.create({id:"node-input-style-color",value:n.color||f.color||"#a4a4a4",defaultValue:"#a4a4a4",palette:i,cellPerRow:a,cellWidth:16,cellHeight:16,cellMargin:3}).appendTo("#node-input-row-style-label-color"),$("#node-input-style-label").toggleButton({enabledLabel:RED._("editor.show"),disabledLabel:RED._("editor.show")}),$("#node-input-style-label").on("change",function(e){$("#node-input-row-style-label-options").toggle($(this).prop("checked"))}),$("#node-input-style-label").prop("checked",this.style.label),$("#node-input-style-label").trigger("change")},oneditresize:function(e){},oneditsave:function(){this.style.stroke=$("#node-input-style-stroke").val(),this.style.fill=$("#node-input-style-fill").val(),this.style["stroke-opacity"]=$("#node-input-style-stroke-opacity").val(),this.style["fill-opacity"]=$("#node-input-style-fill-opacity").val(),this.style.label=$("#node-input-style-label").prop("checked"),this.style.label?(this.style["label-position"]=$("#node-input-style-label-position").val(),this.style.color=$("#node-input-style-color").val()):(delete this.style["label-position"],delete this.style.color);var t=this;["stroke","fill","stroke-opacity","fill-opacity","color","label-position"].forEach(function(e){t.style[e]===f[e]&&delete t.style[e]}),this.resize=!0},set:{module:"node-red"}},init:function(){RED.events.on("view:selection-changed",function(e){var t=!!e.nodes,o=!1,n=!1,i=!1,a=!1,s=RED.workspaces.isLocked();t&&(a=1===e.nodes.length&&"group"===e.nodes[0].type,e.nodes.forEach(function(e){"group"===e.type&&(o=!0),e.g&&(i=!0)}),o)&&(n=1<e.nodes.length),RED.menu.setDisabled("menu-item-group-group",s||!t),RED.menu.setDisabled("menu-item-group-ungroup",s||!o),RED.menu.setDisabled("menu-item-group-merge",s||!n),RED.menu.setDisabled("menu-item-group-remove",s||!i),RED.menu.setDisabled("menu-item-edit-copy-group-style",!a),RED.menu.setDisabled("menu-item-edit-paste-group-style",s||!o)}),RED.actions.add("core:group-selection",function(){var e,t;RED.workspaces.isLocked()||RED.view.state()===RED.state.DEFAULT&&(e=RED.view.selection()).nodes&&(e=g(e.nodes))&&(t={t:"createGroup",groups:[e],dirty:RED.nodes.dirty()},RED.history.push(t),RED.view.select({nodes:[e]}),RED.nodes.dirty(!0),RED.view.focus())}),RED.actions.add("core:ungroup-selection",function(){var t,e,o;RED.workspaces.isLocked()||RED.view.state()===RED.state.DEFAULT&&(e=RED.view.selection()).nodes&&(t=[],e=e.nodes.filter(function(e){return"group"===e.type}),o={t:"ungroup",groups:[],dirty:RED.nodes.dirty()},e.forEach(function(e){t=t.concat(h(e)),o.groups.push(e)}),RED.history.push(o),RED.view.select({nodes:t}),RED.nodes.dirty(!0),RED.view.focus())}),RED.actions.add("core:merge-selection-to-group",function(){if(!RED.workspaces.isLocked()&&RED.view.state()===RED.state.DEFAULT){var e=RED.view.selection();if(e.nodes){for(var t,o,n,i=[],a={t:"multi",events:[]},s={t:"ungroup",groups:[]},r=0;r<e.nodes.length;r++)if(t=e.nodes[r],0===r)o=t.g;else if(t.g!==o)return void RED.notify(RED._("group.errors.cannotCreateDiffGroups"),"error");for(var d={},r=0;r<e.nodes.length;r++)"group"===(t=e.nodes[r]).type?(n=n||t,t.env&&0<t.env.length&&t.env.forEach(e=>{d[e.name]=e}),s.groups.push(t),i=i.concat(h(t))):i.push(t),t.dirty=!0;0<s.groups.length&&a.events.push(s);var l=g(i);l&&(n&&(l.style=n.style,l.name=n.name),l.env=Object.values(d),RED.view.select({nodes:[l]})),a.events.push({t:"createGroup",groups:[l],dirty:RED.nodes.dirty()}),RED.history.push(a),RED.nodes.dirty(!0),RED.view.focus()}}}),RED.actions.add("core:remove-selection-from-group",function(){if(!RED.workspaces.isLocked()&&RED.view.state()===RED.state.DEFAULT){var e=RED.view.selection();if(e.nodes){var t=RED.nodes.group(e.nodes[0].g);if(t)try{v(t,e.nodes,!0);var o={t:"removeFromGroup",dirty:RED.nodes.dirty(),group:t,nodes:e.nodes};RED.history.push(o),RED.nodes.dirty(!0)}catch(e){return void RED.notify(e,"error")}RED.view.select({nodes:e.nodes}),RED.view.focus()}}}),RED.actions.add("core:copy-group-style",function(){var e;RED.view.state()===RED.state.DEFAULT&&(e=RED.view.selection()).nodes&&1===e.nodes.length&&"group"===e.nodes[0].type&&(u=JSON.parse(JSON.stringify(e.nodes[0].style)),RED.notify(RED._("clipboard.groupStyleCopied"),{id:"clipboard"}),RED.menu.setDisabled("menu-item-edit-paste-group-style",!1))}),RED.actions.add("core:paste-group-style",function(){var e,t;RED.workspaces.isLocked()||RED.view.state()===RED.state.DEFAULT&&u&&(e=RED.view.selection()).nodes&&(t={t:"multi",events:[],dirty:RED.nodes.dirty()},e.nodes.forEach(function(e){"group"===e.type&&(t.events.push({t:"edit",node:e,changes:{style:JSON.parse(JSON.stringify(e.style))},dirty:RED.nodes.dirty()}),e.style=JSON.parse(JSON.stringify(u)),e.dirty=!0)}),0<t.events.length)&&(RED.history.push(t),RED.nodes.dirty(!0),RED.view.redraw())}),$('<script type="text/x-red" data-template-name="group"><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" data-i18n="[placeholder]common.label.name"></div><div class="form-row" id="node-input-row-style-stroke"><label data-i18n="editor:common.label.style"></label><label style="width: 70px;margin-right:10px" for="node-input-style-stroke" data-i18n="editor:common.label.line"></label></div><div class="form-row" style="padding-left: 100px;" id="node-input-row-style-fill"><label style="width: 70px;margin-right: 10px " for="node-input-style-fill" data-i18n="editor:common.label.fill"></label></div><div class="form-row"><label for="node-input-style-label" data-i18n="editor:common.label.label"></label><input type="checkbox" id="node-input-style-label"/></div><div class="form-row" id="node-input-row-style-label-options"><div style="margin-left: 100px; display: inline-block"><div class="form-row"><span style="display: inline-block; min-width: 140px" id="node-input-row-style-label-color"><label style="width: 70px;margin-right: 10px" for="node-input-style-fill" data-i18n="editor:common.label.color"></label></span></div><div class="form-row"><span style="display: inline-block; min-width: 140px;" id="node-input-row-style-label-position"><label style="width: 70px;margin-right: 10px " for="node-input-style-label-position" data-i18n="editor:common.label.position"></label></span></div></div></div><\/script>').appendTo("#red-ui-editor-node-configs");var e=$("<div>",{class:"red-ui-flow-group-body",style:"position: absolute; top: -1000px;"}).appendTo(document.body),t=getComputedStyle(e[0]);f={stroke:p(t.stroke),"stroke-opacity":t.strokeOpacity,fill:p(t.fill),"fill-opacity":t.fillOpacity,label:!0,"label-position":"nw"},e.remove(),e=$("<div>",{class:"red-ui-flow-group-label",style:"position: absolute; top: -1000px;"}).appendTo(document.body),t=getComputedStyle(e[0]),f.color=p(t.fill),e.remove()},createGroup:g,ungroup:h,addToGroup:m,removeFromGroup:v,getNodes:function t(e,o,n){var i=[];return e.nodes.forEach(function(e){"group"===e.type&&n||i.push(e),o&&"group"===e.type&&(i=i.concat(t(e,o,n)))}),i},contains:function e(t,o){if(o.g===t.id)return!0;for(var n=0;n<t.nodes.length;n++)if("group"===t.nodes[n].type&&e(t.nodes[n],o))return!0;return!1},markDirty:b}}(),RED.userSettings=function(){var t=700,o=!1,a=[];function e(e){a.push(e)}function s(i){var e;o||(RED.user.hasPermission("settings.write")?(o=!0,e={title:RED._("menu.label.userSettings"),buttons:[{id:"node-dialog-ok",text:RED._("common.label.close"),class:"primary",click:function(){RED.tray.close()}}],resize:function(e){t=e.width},open:function(e){var e=e.find(".red-ui-tray-body"),e=$("<div></div>").appendTo(e),t=$("<div></div>",{class:"red-ui-settings-tabs-container"}).appendTo(e),o=($("<ul></ul>",{id:"user-settings-tabs"}).appendTo(t),RED.tabs.create({id:"user-settings-tabs",vertical:!0,onchange:function(e){setTimeout(function(){n.children().hide(),$("#"+e.id).show(),e.pane.focus&&e.pane.focus()},50)}})),n=$("<div></div>",{class:"red-ui-settings-tabs-content"}).appendTo(e);a.forEach(function(e){o.addTab({id:"red-ui-settings-tab-"+e.id,label:e.title,pane:e}),e.get().hide().appendTo(n)}),e.i18n(),o.activateTab("red-ui-settings-tab-"+(i||"view")),$("#red-ui-sidebar-shade").show()},close:function(){o=!1,a.forEach(function(e){e.close&&e.close()}),$("#red-ui-sidebar-shade").hide()},show:function(){}},null!==t&&(e.width=t),RED.tray.show(e)):RED.notify(RED._("user.errors.settings"),"error"))}function n(e){var t=RED._("languages."+e);return{text:t||e,val:e}}function i(e,t){return e.text.localeCompare(t.text)}var r=[{options:[{setting:"editor-language",local:!0,label:"menu.label.view.language",options:function(e){e([{val:"",text:RED._("menu.label.view.browserDefault")}].concat(RED.settings.theme("languages").map(n).sort(i)))}}]},{title:"menu.label.view.view",options:[{setting:"view-store-zoom",label:"menu.label.view.storeZoom",default:!1,toggle:!0,onchange:function(e){e||RED.settings.removeLocal("zoom-level")}},{setting:"view-store-position",label:"menu.label.view.storePosition",default:!1,toggle:!0,onchange:function(e){e||RED.settings.removeLocal("scroll-positions")}}]},{title:"menu.label.view.grid",options:[{setting:"view-show-grid",oldSetting:"menu-menu-item-view-show-grid",label:"menu.label.view.showGrid",default:!0,toggle:!0,onchange:"core:toggle-show-grid"},{setting:"view-snap-grid",oldSetting:"menu-menu-item-view-snap-grid",label:"menu.label.view.snapGrid",default:!0,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"},{setting:"view-show-welcome-tours",label:"menu.label.showWelcomeTours",toggle:!0,default:!0}]}],d={};function l(){var i=$('<div id="red-ui-settings-tab-view" class="red-ui-help"></div>'),a=RED.settings.get("editor")||{};return a.view=a.view||{},r.forEach(function(e){e.title&&$("<h3></h3>").text(RED._(e.title)).appendTo(i),e.options.forEach(function(e){var n,t=e.local?localStorage.getItem(e.setting):a.view[e.setting],o=$('<div class="red-ui-settings-row"></div>').appendTo(i);e.toggle?$('<label for="user-settings-'+e.setting+'"><input id="user-settings-'+e.setting+'" type="checkbox"> '+RED._(e.label)+"</label>").appendTo(o).find("input").prop("checked",t):e.options?($('<label for="user-settings-'+e.setting+'">'+RED._(e.label)+"</label>").appendTo(o),n=$('<select id="user-settings-'+e.setting+'"></select>').appendTo(o),"function"==typeof e.options&&(e.options(function(e){e.forEach(function(e){var t=e,o=e;"string"!=typeof e&&(t=e.val,o=e.text),$("<option>").val(t).text(o).appendTo(n)})}),n.val(t))):($('<label for="user-settings-'+e.setting+'">'+RED._(e.label)+"</label>").appendTo(o),$('<input id="user-settings-'+e.setting+'" type="'+(e.type||"text")+'">').appendTo(o).val(t))})}),i}function c(e,t){var o,e=d[e];e.local?localStorage.setItem(e.setting,t):((o=RED.settings.get("editor")||{}).view=o.view||{},o.view[e.setting]=t,RED.settings.set("editor",o),(o="string"==typeof(o=e.onchange)?RED.actions.get(o):o)&&o.call(e,t))}return{init:function(){RED.actions.add("core:show-user-settings",s),RED.actions.add("core:show-help",function(){s("keyboard")}),e({id:"view",title:RED._("menu.label.view.view"),get:l,close:function(){r.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 n=RED.settings.get("editor")||{},i=(n.view=n.view||{},!1);r.forEach(function(e){e.options.forEach(function(e){var t,o;e.local?d[e.setting]=e:(e.oldSetting&&null!=(t=RED.settings.get(e.oldSetting))&&(n.view[e.setting]=t,i=!0,RED.settings.remove(e.oldSetting)),d[e.setting]=e,null==(t=n.view[e.setting])&&e.hasOwnProperty("default")&&(t=e.default,n.view[e.setting]=t,i=!0),e.onchange&&(o="string"==typeof(o=e.onchange)?RED.actions.get(o):o)&&o.call(e,t))})}),i&&RED.settings.set("editor",n)},toggle:function(e){var t=d[e],o=RED.settings.get("editor")||{};o.view=o.view||{},c(e,!o.view[t.setting])},show:s,add:e}}(),RED.projects=function(){var T,i,U;function p(e){var t="git_missing_user"===e.code?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),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 a={};function t(){var L,S,O,N,I,P,A,M,z,B,G,F,d,s,r,b,y,w,E,D,R,x,_,f,h,l,c,k=$('<div class="red-ui-projects-dialog-screen-start-hero"></div>'),g=($('<span><i class="fa fa-files-o fa-2x"></i> &nbsp; &nbsp; <i class="fa fa-long-arrow-right fa-2x"></i> &nbsp; &nbsp; <i class="fa fa-archive fa-2x"></i></span>').appendTo(k),$("<hr>").appendTo(k),{});a={welcome:{content:function(e){var t=$('<div class="red-ui-projects-dialog-screen-start"></div>'),o=(k.appendTo(t),$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t)),o=($("<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),$('<div style="text-align: center"></div>').appendTo(o)),n=$('<button data-type="empty" class="red-ui-button red-ui-projects-dialog-button red-ui-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(o),o=$('<button data-type="clone" class="red-ui-button red-ui-projects-dialog-button red-ui-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(o);return n.on("click",function(e){e.preventDefault(),g={action:"create"},u("git-config")}),o.on("click",function(e){e.preventDefault(),g={action:"clone"},u("git-config")}),t},buttons:[{text:RED._("projects.welcome.openExistingProject"),class:"secondary",click:function(){g={action:"open"},u("git-config")}},{text:RED._("projects.welcome.not-right-now"),click:function(){g={},$(this).dialog("close")}}]},"git-config":{content:function(e){function t(){var e=l.val().trim(),t=c.val().trim(),e=0<e.length&&0<t.length;$("#red-ui-projects-dialog-git-config").prop("disabled",!e).toggleClass("disabled ui-button-disabled ui-state-disabled",!e)}var o=!1,n=RED.settings.get("git"),i=(n&&n.user?n=n.user:RED.settings.git&&RED.settings.git.globalUser&&(o=!0,n=RED.settings.git.globalUser),$('<div class="red-ui-projects-dialog-screen-start"></div>')),a=(k.appendTo(i),$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(i)),o=($("<p>").text(RED._("projects.git-config.setup")).appendTo(a),$("<p>").text(RED._("projects.git-config.desc0")).appendTo(a),$("<p>").text(RED._("projects.git-config.desc1")).appendTo(a),o&&$("<p>").text(RED._("projects.git-config.desc2")).appendTo(a),$("<p>").text(RED._("projects.git-config.desc3")).appendTo(a),$('<div class="form-row"></div>').appendTo(a));return $('<label for="">'+RED._("projects.git-config.username")+"</label>").appendTo(o),(l=$('<input type="text">').val(n&&n.name||"").appendTo(o)).on("change keyup paste",t),o=$('<div class="form-row"></div>').appendTo(a),$('<label for="">'+RED._("projects.git-config.email")+"</label>").appendTo(o),(c=$('<input type="text">').val(n&&n.email||"").appendTo(o)).on("change keyup paste",t),setTimeout(function(){l.trigger("focus"),t()},50),i},buttons:[{text:RED._("common.label.back"),click:function(){u("welcome")}},{id:"red-ui-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=l.val(),e.user.email=c.val(),RED.settings.set("git",e),"create"===g.action?u("project-details"):"clone"===g.action?u("clone-project"):"open"===g.action&&u("create",{screen:"open"})}}]},"project-details":{content:function(e){var o,t,n=null,i=!1,a=($.getJSON("projects",function(e){n={},e.projects.forEach(function(e){n[e]=!0,i&&(i=!1,r())})}),$('<div class="red-ui-projects-dialog-screen-start"></div>')),s=(k.appendTo(a),$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(a)),r=($("<p>").text(RED._("projects.project-details.create")).appendTo(s),$("<p>").text(RED._("projects.project-details.desc0")).appendTo(s),$("<p>").text(RED._("projects.project-details.desc1")).appendTo(s),$("<p>").text(RED._("projects.project-details.desc2")).appendTo(s),function(){var e=f.val(),t=!0;if(u){if(null===n)return void(i=!0);c.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||n[e]?(f.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(c),t=o=!1,n[e]?projectNameSublabel.text(RED._("projects.project-details.already-exists")):projectNameSublabel.text(RED._("projects.project-details.must-contain"))):(f.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(c),projectNameSublabel.text(RED._("projects.project-details.must-contain")),o=!0),p=e}t=o,$("#red-ui-projects-dialog-create-name").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)}),d=$('<div class="form-row"></div>').appendTo(s),l=($('<label for="red-ui-projects-dialog-screen-create-project-name">'+RED._("projects.project-details.project-name")+"</label>").appendTo(d),$('<div style="position:relative;"></div>').appendTo(d)),c=(f=$('<input id="red-ui-projects-dialog-screen-create-project-name" type="text"></input>').val(g.name||"").appendTo(l),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(l)),u=!1,p="";return f.on("change keyup paste",function(){if(u=f.val()!==p,t)clearTimeout(t);else if(u&&(c.empty(),$('<img src="red/images/spin.svg"/>').appendTo(c),""===f.val()))return void r();t=setTimeout(function(){r(),t=null},300)}),projectNameSublabel=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.project-details.must-contain")+"</small></label>").appendTo(d).find("small"),d=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(s),$('<label for="red-ui-projects-dialog-screen-create-project-desc">'+RED._("projects.project-details.desc")+"</label>").appendTo(d),h=$('<input id="red-ui-projects-dialog-screen-create-project-desc" type="text">').val(g.summary||"").appendTo(d),$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.project-details.opt")+"</small></label>").appendTo(d),setTimeout(function(){f.trigger("focus"),f.trigger("change")},50),a},buttons:function(e){return[{text:RED._("common.label.back"),click:function(){u("git-config")}},{id:"red-ui-projects-dialog-create-name",disabled:!0,text:RED._("common.label.next"),class:"primary disabled",click:function(){g.name=f.val(),g.summary=h.val(),u("default-files",e)}}]}},"clone-project":{content:function(e){var n,t,o=$('<div class="red-ui-projects-dialog-screen-start"></div>'),i=(k.appendTo(o),$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(o)),a=($("<p>").text(RED._("projects.clone-project.clone")).appendTo(i),$("<p>").text(RED._("projects.clone-project.desc0")).appendTo(i),null),s=!1,r=($.getJSON("projects",function(e){a={},e.projects.forEach(function(e){a[e]=!0,s&&(s=!1,r())})}),function(){var e=b.val(),t=!0;if(u){if(null===a)return void(s=!0);c.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||a[e]?(b.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(c),t=n=!1,a[e]?R.text(RED._("projects.clone-project.already-exists")):R.text(RED._("projects.clone-project.must-contain"))):(b.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(c),R.text(RED._("projects.clone-project.must-contain")),n=!0),p=e}var t=n,e=w.val(),o=0<e.length&&!/\s/.test(e);/^https?:\/\/[^/]+@/i.test(e)&&($("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.no-info-in-url")),o=!1),o?w.removeClass("input-error"):(h&&w.addClass("input-error"),t=!1),/^https?:\/\//.test(e)?($(".red-ui-projects-dialog-screen-create-row-creds").show(),$(".red-ui-projects-dialog-screen-create-row-sshkey").hide()):/^(?:ssh|[\S]+?@[\S]+?):(?:\/\/)?/.test(e)?($(".red-ui-projects-dialog-screen-create-row-creds").hide(),$(".red-ui-projects-dialog-screen-create-row-sshkey").show()):($(".red-ui-projects-dialog-screen-create-row-creds").hide(),$(".red-ui-projects-dialog-screen-create-row-sshkey").hide()),$("#red-ui-projects-dialog-clone-project").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)}),d=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(i),l=($('<label for="red-ui-projects-dialog-screen-create-project-name">'+RED._("projects.clone-project.project-name")+"</label>").appendTo(d),$('<div style="position:relative;"></div>').appendTo(d)),c=(b=$('<input id="red-ui-projects-dialog-screen-create-project-name" type="text"></input>').appendTo(l),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(l)),u=!1,p="",f="",h=(b.on("change keyup paste",function(){if(u=b.val()!==p,t)clearTimeout(t);else if(u&&(c.empty(),$('<img src="red/images/spin.svg"/>').appendTo(c),""===b.val()))return void r();t=setTimeout(function(){r(),t=null},300)}),R=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.clone-project.must-contain")+"</small></label>").appendTo(d).find("small"),d=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(i),$('<label for="red-ui-projects-dialog-screen-create-project-repo">'+RED._("projects.clone-project.git-url")+"</label>").appendTo(d),w=$('<input id="red-ui-projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(d),$('<label id="red-ui-projects-dialog-screen-create-project-repo-label" class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.clone-project.protocols")+"</small></label>").appendTo(d),!1),g="",m=(w.on("change keyup paste",function(){h=!0;var e,t=$(this).val(),t=(g!==t&&$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.protocols")),g=t,/\/([^/]+?)(?:\.git)?$/.exec(t));!t||""!==(e=b.val())&&e!==f||(f=t[1],b.val(f),b.trigger("change")),r()}),$('<div class="red-ui-projects-dialog-screen-create-row"></div>').appendTo(i)),l=(d=$('<div class="form-row red-ui-projects-dialog-screen-create-row-auth-error"></div>').hide().appendTo(m),$('<div><i class="fa fa-warning"></i> '+RED._("projects.clone-project.auth-failed")+"</div>").appendTo(d),d=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row-creds"></div>').hide().appendTo(m),$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(d)),v=($('<label for="red-ui-projects-dialog-screen-create-project-repo-user">'+RED._("projects.clone-project.username")+"</label>").appendTo(l),E=$('<input id="red-ui-projects-dialog-screen-create-project-repo-user" type="text"></input>').appendTo(l),l=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(d),$('<label for="red-ui-projects-dialog-screen-create-project-repo-pass">'+RED._("projects.clone-project.passwd")+"</label>").appendTo(l),(D=$('<input style="width:100%" id="red-ui-projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(l)).typedInput({type:"cred"}),d=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-sshkey"></div>').hide().appendTo(m),l=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(d),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.ssh-key")+"</label>").appendTo(l),x=$("<select>",{style:"width: 100%"}).appendTo(l),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){x.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(x.addClass("input-error"),x.attr("disabled",!0),v.show()):(x.removeClass("input-error"),x.attr("disabled",!1),v.hide())}),l=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(d),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.passphrase")+"</label>").appendTo(l),(_=$('<input id="red-ui-projects-dialog-screen-create-project-repo-passphrase" type="password"></input>').appendTo(l)).typedInput({type:"cred"}),l=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-sshkey"></div>').appendTo(m),$('<div class="red-ui-projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(l));return $('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.clone-project.ssh-key-desc")+"</div>").appendTo(v),l=$('<div style="text-align: center">').appendTo(v),$('<button type="button" class="red-ui-button red-ui-projects-dialog-button">'+RED._("projects.clone-project.ssh-key-add")+"</button>").appendTo(l).on("click",function(e){e.preventDefault(),T.dialog("close"),RED.userSettings.show("gitconfig"),setTimeout(function(){$("#user-settings-gitconfig-add-key").trigger("click")},500)}),d=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(i),$("<label>"+RED._("projects.clone-project.credential-key")+"</label>").appendTo(d),(y=$('<input style="width: 100%" type="password"></input>').appendTo(d)).typedInput({type:"cred"}),o},buttons:function(e){return[{text:RED._("common.label.back"),click:function(){u("git-config")}},{id:"red-ui-projects-dialog-clone-project",disabled:!0,text:RED._("common.label.clone"),class:"primary disabled",click:function(){$(".red-ui-projects-dialog-screen-create-type.selected").data("type");var e={name:b.val()},t=(e.credentialSecret=y.val(),w.val());if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(t)){var o=x.val();if(!o)return void console.log(RED._("projects.clone-project.cant-get-ssh-key"));e.git={remotes:{origin:{url:t,keyFile:o,passphrase:_.val()}}}}else e.git={remotes:{origin:{url:t,username:E.val(),password:D.val()}}};$(".red-ui-projects-dialog-screen-create-row-auth-error").hide(),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.protocols")),E.removeClass("input-error"),D.removeClass("input-error"),x.removeClass("input-error"),_.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(e.name),V({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(e){T.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){w.addClass("input-error"),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.connection-failed"))},git_not_a_repository:function(e){w.addClass("input-error"),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.not-git-repo"))},git_repository_not_found:function(e){w.addClass("input-error"),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.repo-not-found"))},git_auth_failed:function(e){$(".red-ui-projects-dialog-screen-create-row-auth-error").show(),E.addClass("input-error"),D.addClass("input-error"),x.addClass("input-error"),_.addClass("input-error")},missing_flow_file:function(e){T.dialog("close")},missing_package_file:function(e){T.dialog("close")},project_empty:function(e){T.dialog("close")},credentials_load_failed:function(e){T.dialog("close")},"*":function(e){p(e),$(T).dialog("close")}}}},e).then(function(){RED.menu.setDisabled("menu-item-projects-open",!1),RED.menu.setDisabled("menu-item-projects-settings",!1),RED.events.emit("project:change",{name:name})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}},"default-files":{content:function(e){function t(){var e=!0,t=s.val();""!==t&&/\.json$/.test(t)?(s.hasClass("input-error")&&(s.removeClass("input-error"),s.next().empty()),r.hasClass("input-error")&&(r.removeClass("input-error"),r.next().empty()),r.text(t.substring(0,t.length-5)+"_cred.json")):(e=!1,s.hasClass("input-error")||(s.addClass("input-error"),s.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>')),r.text(""),r.hasClass("input-error")||(r.addClass("input-error"),r.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>'))),$("#red-ui-projects-dialog-create-default-files").prop("disabled",!e).toggleClass("disabled ui-button-disabled ui-state-disabled",!e)}var o=$('<div class="red-ui-projects-dialog-screen-start"></div>'),n=(k.appendTo(o),$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(o)),e=($("<p>").text(RED._("projects.default-files.create")).appendTo(n),$("<p>").text(RED._("projects.default-files.desc0")).appendTo(n),$("<p>").text(RED._("projects.default-files.desc1")).appendTo(n),!e.existingProject&&RED.settings.files&&$("<p>").text(RED._("projects.default-files.desc2")).appendTo(n),$('<div class="form-row"></div>').appendTo(n)),i=($('<label for="red-ui-projects-dialog-screen-create-project-file">'+RED._("projects.default-files.flow-file")+"</label>").appendTo(e),$('<div style="position:relative;"></div>').appendTo(e)),a=g.files&&g.files.flow||RED.settings.files&&RED.settings.files.flow||"flows.json",a=(s=$('<input id="red-ui-projects-dialog-screen-create-project-file" type="text">').val(a).on("change keyup paste",t).appendTo(i),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(i),$('<label class="red-ui-projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(e),g.files&&g.files.credentials||RED.settings.files&&RED.settings.files.credentials||"flows_cred.json"),e=$('<div class="form-row"></div>').appendTo(n);return $('<label for="red-ui-projects-dialog-screen-create-project-credfile">'+RED._("projects.default-files.credentials-file")+"</label>").appendTo(e),i=$('<div style="position:relative;"></div>').appendTo(e),r=$('<div style="width: 100%" class="uneditable-input" id="red-ui-projects-dialog-screen-create-project-credentials">').text(a).appendTo(i),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(i),setTimeout(function(){s.trigger("focus"),t()},50),o},buttons:function(e){return[{text:RED._(e.existingProject?"common.label.cancel":"common.label.back"),click:function(){e.existingProject?$(this).dialog("close"):u("project-details",e)}},{id:"red-ui-projects-dialog-create-default-files",text:RED._("common.label.next"),class:"primary",click:function(){g.files={flow:s.val(),credentials:r.text()},e.existingProject||(g.migrateFiles=!0),u("encryption-config",e)}}]}},"encryption-config":{content:function(e){function n(){var e=!0;"enabled"===$("input[name=projects-encryption-type]:checked").val()&&"custom"===$("input[name=projects-encryption-key]:checked").val()&&(e=e&&""!==d.val()),$("#red-ui-projects-dialog-create-encryption").prop("disabled",!e).toggleClass("disabled ui-button-disabled ui-state-disabled",!e)}var t=$('<div class="red-ui-projects-dialog-screen-start"></div>'),o=(k.appendTo(t),$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t)),e=($("<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"))):"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"))):("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),$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(o)),o=($("<label>"+RED._("projects.encryption-config.credentials")+"</label>").appendTo(e),$('<div class="red-ui-projects-dialog-credentials-box">').appendTo(e)),i=$('<div class="red-ui-projects-dialog-credentials-box-right">').appendTo(o),a=$('<div class="red-ui-projects-dialog-credentials-box-left">').appendTo(o),s=$('<div class="form-row red-ui-projects-dialog-credentials-box-enabled"></div>').appendTo(a),r=($('<label class="red-ui-projects-edit-form-inline-label"><input type="radio" name="projects-encryption-type" value="enabled"> <i class="fa fa-lock"></i> <span>'+RED._("projects.encryption-config.enable")+"</span></label>").appendTo(s),$('<div class="form-row red-ui-projects-dialog-credentials-box-disabled"></div>').appendTo(a));return $('<label class="red-ui-projects-edit-form-inline-label"><input type="radio" name="projects-encryption-type" value="disabled"> <i class="fa fa-unlock"></i> <span>'+RED._("projects.encryption-config.disable")+"</span></label>").appendTo(r),a.find("input[name=projects-encryption-type]").on("click",function(e){var t,o;"enabled"===$(this).val()?(t=s,o=r,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&d.trigger("focus")):(o=s,t=r,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.removeClass("disabled"),o.addClass("disabled"),n()}),e=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(i),$('<label class="red-ui-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(e),e=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(i),$('<label class="red-ui-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(e),e=$('<div class="projects-encryption-enabled-row"></div>').appendTo(i),(d=$('<input disabled type="password" style="margin-left: 25px; width: calc(100% - 30px);"></input>').appendTo(e)).typedInput({type:"cred"}),d.on("change keyup paste",n),e=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(i),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.encryption-config.desc8")+"</div>").appendTo(e),i.find("input[name=projects-encryption-key]").on("click",function(){var e=$(this).val();d.attr("disabled","default"===e),"custom"===e&&d.trigger("focus"),n()}),setTimeout(function(){a.find("input[name=projects-encryption-type][value=enabled]").trigger("click"),("user"!==RED.settings.flowEncryptionType?i.find("input[name=projects-encryption-key][value=custom]"):i.find("input[name=projects-encryption-key][value=default]")).trigger("click"),n()},100),t},buttons:function(n){return[{text:RED._("common.label.back"),click:function(){u("default-files",n)}},{id:"red-ui-projects-dialog-create-encryption",text:RED._(n.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()&&(g.credentialSecret=d.val()):g.credentialSecret=!1,RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(g.name);var e="POST",t="projects",o=(n.existingProject&&(g.initialise=!0,e="PUT",t="projects/"+U.name),this);V({url:t,type:e,requireCleanWorkspace:!0,handleAuthFail:!1,responses:{200:function(e){g={},n.existingProject?$(o).dialog("close"):(u("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(e){p(e),$(T).dialog("close")}}}},g).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}},"create-success":{content:function(e){var t=$('<div class="red-ui-projects-dialog-screen-start"></div>'),o=(k.appendTo(t),$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t));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),t},buttons:[{text:RED._("common.label.done"),click:function(){$(this).dialog("close")}}]},create:{title:RED._("projects.create.projects"),content:function(e){var s,n,t,r,d,i,l,a,o,c=null,u=(F=null,!1),p=($.getJSON("projects",function(e){c={},e.projects.forEach(function(e){c[e]=!0,u&&(u=!1,f())})}),$('<div class="red-ui-projects-dialog-screen-create"></div>')),f=function(){var e=L.val(),t=!0;if(w){if(null===c)return void(u=!0);y.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||c[e]?(L.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(y),t=a=!1,c[e]?z.text(RED._("projects.create.already-exists")):z.text(RED._("projects.create.must-contain"))):(L.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(y),z.text(RED._("projects.create.must-contain")),a=!0),E=e}var o,n,t=a,e=$(".red-ui-projects-dialog-screen-create-type.selected").data("type");"copy"===e?t=!1:"clone"===e?(n=0<(o=I.val()).length&&!/\s/.test(o),/^https?:\/\/[^/]+@/i.test(o)&&($("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.no-info-in-url")),n=!1),n?I.removeClass("input-error"):(T&&I.addClass("input-error"),t=!1),/^https?:\/\//.test(o)?($(".red-ui-projects-dialog-screen-create-row-creds").show(),$(".red-ui-projects-dialog-screen-create-row-sshkey").hide()):/^(?:ssh|[\S]+?@[\S]+?):(?:\/\/)?/.test(o)?($(".red-ui-projects-dialog-screen-create-row-creds").hide(),$(".red-ui-projects-dialog-screen-create-row-sshkey").show()):($(".red-ui-projects-dialog-screen-create-row-creds").hide(),$(".red-ui-projects-dialog-screen-create-row-sshkey").hide())):"empty"===e?(""!==(n=O.val())&&/\.json$/.test(n)?O.hasClass("input-error")&&(O.removeClass("input-error"),O.next().empty()):(t=!1,O.hasClass("input-error")||(O.addClass("input-error"),O.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()&&(t=t&&""!==P.val())):"open"===e&&(t=!!F),$("#red-ui-projects-dialog-create").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)},h=$('<div class="form-row button-group"></div>').appendTo(p),g=$('<button type="button" data-type="open" class="red-ui-button red-ui-projects-dialog-button red-ui-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(h),m=$('<button type="button" data-type="empty" class="red-ui-button red-ui-projects-dialog-button red-ui-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(h),v=$('<button type="button" data-type="clone" class="red-ui-button red-ui-projects-dialog-button red-ui-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(h),b=(h.find(".red-ui-projects-dialog-screen-create-type").on("click",function(e){switch(e.preventDefault(),p.find(".red-ui-projects-dialog-screen-create-type").removeClass("selected"),$(this).addClass("selected"),p.find(".red-ui-projects-dialog-screen-create-row").hide(),p.find(".red-ui-projects-dialog-screen-create-row-"+$(this).data("type")).show(),f(),L.trigger("focus"),$(this).data("type")){case"open":$("#red-ui-projects-dialog-create").text(RED._("projects.create.open"));break;case"empty":$("#red-ui-projects-dialog-create").text(RED._("projects.create.create"));break;case"clone":$("#red-ui-projects-dialog-create").text(RED._("projects.create.clone"))}}),h=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-open"></div>').hide().appendTo(p),s=(s={canSelectActive:!1,dblclick:function(e){F=e,$("#red-ui-projects-dialog-create").trigger("click")},select:function(e){F=e,f()},delete:function(e){c&&delete c[e.name],F=null,f()}})||{},R=$("<div></div>",{class:"red-ui-projects-dialog-project-list-container"}),t="",b=$("<div>",{class:"red-ui-search-container"}).appendTo(R),(r=$('<input id="red-ui-projects-dialog-project-list-search" type="text" placeholder="'+RED._("projects.create-project-list.search")+'">').appendTo(b).searchBox({delay:200,change:function(){t=$(this).val().toLowerCase(),l.editableList("filter"),n&&!n.is(":visible")&&n.children().children().removeClass("selected"),(n=l.children(":visible").first()).children().children().addClass("selected"),s.select&&s.select(n.children().data("data")),d()}})).on("keydown",function(e){if(40===e.keyCode){e.preventDefault();var t=n;if(n){for(;0!==(t=t.next()).length&&!t.is(":visible"););if(0===t.length)return;n.children().children().removeClass("selected")}else t=l.children(":visible").first();(n=t).children().children().addClass("selected"),s.select&&s.select(n.children().data("data")),d()}else if(38===e.keyCode){e.preventDefault();var o=n;if(n){for(;0!==(o=o.prev()).length&&!o.is(":visible"););if(0===o.length)return;n.children().children().removeClass("selected")}else o=l.children(":visible").first();(n=o).children().children().addClass("selected"),s.select&&s.select(n.children().data("data")),d()}else 13===e.keyCode&&(e.preventDefault(),n)&&s.dblclick&&s.dblclick(n.children().data("data"))}),r.i18n(),d=function(){var e,t,o,n=l.find(".red-ui-projects-dialog-project-list-entry.selected").parent().parent();1===n.length&&(t=(e=i).height(),e.scrollTop(),t<(o=n.position().top)+(n=n.height())?e.animate({scrollTop:"-="+(t-o-n)},50):o<0&&e.animate({scrollTop:"+="+o},50))},i=$("<div></div>",{class:"red-ui-projects-dialog-project-list-inner-container"}).appendTo(R),l=$("<ol>",{class:"red-ui-projects-dialog-project-list"}).appendTo(i).editableList({addButton:!1,height:"auto",scrollOnAdd:!1,addItem:function(i,e,a){var t,o=$("<div></div>",{class:"red-ui-projects-dialog-project-list-entry"}).appendTo(i);$('<span class="red-ui-projects-dialog-project-list-entry-icon"><i class="fa fa-archive"></i></span>').appendTo(o),$('<span class="red-ui-projects-dialog-project-list-entry-name" style=""></span>').text(a.name).appendTo(o),U&&U.name===a.name&&(o.addClass("projects-list-entry-current"),$('<span class="red-ui-projects-dialog-project-list-entry-current">'+RED._("projects.create-project-list.current")+"</span>").appendTo(o),!1===s.canSelectActive)||(o.addClass("selectable"),t=$('<div class="red-ui-projects-dialog-project-list-entry-tools"></div>').appendTo(o),$('<button type="button" class="red-ui-button red-ui-projects-dialog-button red-ui-button-small" style="float: right;"><i class="fa fa-trash"></i></button>').appendTo(t).on("click",function(e){var t,o,n;e.stopPropagation(),e.preventDefault(),e=i,t=a.name,o=function(e){e||i.fadeOut(300,function(){l.editableList("removeItem",a),s.delete&&s.delete(a)})},n=$('<div class="red-ui-projects-dialog-project-list-entry-delete-confirm"></div>').on("click",function(e){e.stopPropagation()}).appendTo(e),$("<span>").text(RED._("projects.delete.confirm")).appendTo(n),$('<button type="button" class="red-ui-button red-ui-projects-dialog-button">'+RED._("common.label.cancel")+"</button>").appendTo(n).on("click",function(e){e.stopPropagation(),n.remove(),o(!0)}),$('<button type="button" class="red-ui-button red-ui-projects-dialog-button primary">'+RED._("common.label.delete")+"</button>").appendTo(n).on("click",function(e){e.stopPropagation(),n.remove(),V({url:"projects/"+t,type:"DELETE",responses:{200:function(e){o(!1)},400:{unexpected_error:function(e){n.remove(),o(!0)}}}})}),setTimeout(function(){n.css("left",0)},50)}),i.on("click",function(e){$(".red-ui-projects-dialog-project-list-entry").removeClass("selected"),o.addClass("selected"),n=i.parent(),s.select&&s.select(a),d(),r.trigger("focus")}),s.dblclick&&i.on("dblclick",function(e){e.preventDefault(),s.dblclick(a)}))},filter:function(e){return""===t||-1!==e.name.toLowerCase().indexOf(t)}}),$.getJSON("projects",function(e){e.projects.forEach(function(e){l.editableList("addItem",{name:e})})}),R.appendTo(h),h=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-open"></div>').hide().appendTo(p),$('<span style="display: flex; align-items: center;"><input style="padding:0; margin: 0 5px 0 0" checked type="checkbox" id="red-ui-projects-dialog-screen-clear-context"> <label for="red-ui-projects-dialog-screen-clear-context" style="padding:0; margin: 0"> <span data-i18n="projects.create.clearContext"></span></label></span>').appendTo(h).i18n(),h=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(p),$('<label for="red-ui-projects-dialog-screen-create-project-name">'+RED._("projects.create.project-name")+"</label>").appendTo(h),$('<div style="position:relative;"></div>').appendTo(h)),y=(L=$('<input id="red-ui-projects-dialog-screen-create-project-name" type="text"></input>').appendTo(b),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(b)),w=!1,E="",D="",R=(L.on("change keyup paste",function(){if(w=L.val()!==E,o)clearTimeout(o);else if(w&&(y.empty(),$('<img src="red/images/spin.svg"/>').appendTo(y),""===L.val()))return void f();o=setTimeout(function(){f(),o=null},300)}),z=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.create.must-contain")+"</small></label>").appendTo(h).find("small"),h=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(p),$('<label for="red-ui-projects-dialog-screen-create-project-desc">'+RED._("projects.create.desc")+"</label>").appendTo(h),S=$('<input id="red-ui-projects-dialog-screen-create-project-desc" type="text">').appendTo(h),$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.create.opt")+"</small></label>").appendTo(h),h=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(p),$('<label for="red-ui-projects-dialog-screen-create-project-file">'+RED._("projects.create.flow-file")+"</label>").appendTo(h),b=$('<div style="position:relative;"></div>').appendTo(h),O=$('<input id="red-ui-projects-dialog-screen-create-project-file" type="text">').val("flows.json").on("change keyup paste",f).appendTo(b),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(b),$('<label class="red-ui-projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(h),h=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(p),$("<label>"+RED._("projects.create.credentials")+"</label>").appendTo(h),$('<div class="red-ui-projects-dialog-credentials-box">').appendTo(h)),x=$('<div class="red-ui-projects-dialog-credentials-box-right">').appendTo(R),R=$('<div class="red-ui-projects-dialog-credentials-box-left">').appendTo(R),_=$('<div class="form-row red-ui-projects-dialog-credentials-box-enabled"></div>').appendTo(R),k=($('<label class="red-ui-projects-edit-form-inline-label"><input type="radio" name="projects-encryption-type" value="enabled" checked> <i class="fa fa-lock"></i> <span>'+RED._("projects.encryption-config.enable")+"</span></label>").appendTo(_),$('<div class="form-row red-ui-projects-dialog-credentials-box-disabled disabled"></div>').appendTo(R)),T=($('<label class="red-ui-projects-edit-form-inline-label"><input type="radio" name="projects-encryption-type" value="disabled"> <i class="fa fa-unlock"></i> <span>'+RED._("projects.encryption-config.disable")+"</span></label>").appendTo(k),R.find("input[name=projects-encryption-type]").on("click",function(e){var t,o;"enabled"===$(this).val()?(t=_,o=k,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&P.trigger("focus")):(o=_,t=k,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.removeClass("disabled"),o.addClass("disabled"),f()}),h=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(x),$('<label class="red-ui-projects-edit-form-inline-label">'+RED._("projects.create.encryption-key")+"</label>").appendTo(h),(P=$('<input type="password"></input>').appendTo(h)).typedInput({type:"cred"}),P.on("change keyup paste",f),$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.create.desc0")+"</small></label>").appendTo(h),h=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(x),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.create.desc1")+"</div>").appendTo(h),x.find("input[name=projects-encryption-key]").on("click",function(){var e=$(this).val();P.attr("disabled","default"===e),"custom"===e&&P.trigger("focus"),f()}),h=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(p),$('<label for="red-ui-projects-dialog-screen-create-project-repo">'+RED._("projects.create.git-url")+"</label>").appendTo(h),I=$('<input id="red-ui-projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(h),$('<label id="red-ui-projects-dialog-screen-create-project-repo-label" class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.create.protocols")+"</small></label>").appendTo(h),!1),C="",R=(I.on("change keyup paste",function(){T=!0;var e,t=$(this).val(),t=(C!==t&&$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.protocols")),C=t,/\/([^/]+?)(?:\.git)?$/.exec(t));!t||""!==(e=L.val())&&e!==D||(D=t[1],L.val(D),L.trigger("change")),f()}),$('<div class="hide red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').hide().appendTo(p)),b=(h=$('<div class="form-row red-ui-projects-dialog-screen-create-row-auth-error"></div>').hide().appendTo(R),$('<div><i class="fa fa-warning"></i> '+RED._("projects.create.auth-failed")+"</div>").appendTo(h),h=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row-creds"></div>').hide().appendTo(R),$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(h)),j=($('<label for="red-ui-projects-dialog-screen-create-project-repo-user">'+RED._("projects.create.username")+"</label>").appendTo(b),A=$('<input id="red-ui-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(h),$('<label for="red-ui-projects-dialog-screen-create-project-repo-pass">'+RED._("projects.create.password")+"</label>").appendTo(b),(M=$('<input style="width:100%" id="red-ui-projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(b)).typedInput({type:"cred"}),h=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-sshkey"></div>').hide().appendTo(R),b=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(h),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.ssh-key")+"</label>").appendTo(b),B=$("<select>",{style:"width: 100%"}).appendTo(b),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){B.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(B.addClass("input-error"),B.attr("disabled",!0),j.show()):(B.removeClass("input-error"),B.attr("disabled",!1),j.hide())}),b=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(h),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.passphrase")+"</label>").appendTo(b),(G=$('<input id="red-ui-projects-dialog-screen-create-project-repo-passphrase" type="password"></input>').appendTo(b)).typedInput({type:"cred"}),b=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-sshkey"></div>').appendTo(R),$('<div class="red-ui-projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(b));switch($('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.create.desc2")+"</div>").appendTo(j),b=$('<div style="text-align: center">').appendTo(j),$('<button type="button" class="red-ui-button red-ui-projects-dialog-button">'+RED._("projects.create.add-ssh-key")+"</button>").appendTo(b).on("click",function(e){e.preventDefault(),$("#red-ui-projects-dialog-cancel").trigger("click"),RED.userSettings.show("gitconfig"),setTimeout(function(){$("#user-settings-gitconfig-add-key").trigger("click")},500)}),h=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(p),$("<label>"+RED._("projects.create.credentials-encryption-key")+"</label>").appendTo(h),(N=$('<input style="width:100%" type="password"></input>').appendTo(h)).typedInput({type:"cred"}),e.screen||"empty"){case"empty":m.trigger("click");break;case"open":g.trigger("click");break;case"clone":v.trigger("click")}return setTimeout(function(){("open"!==(e.screen||"empty")?L:$("#red-ui-projects-dialog-project-list-search")).trigger("focus")},50),p},buttons:function(e){var t;switch(e.screen||"empty"){case"open":t=RED._("projects.create.open");break;case"empty":t=RED._("projects.create.create");break;case"clone":t=RED._("projects.create.clone")}return[{id:"red-ui-projects-dialog-cancel",text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{id:"red-ui-projects-dialog-create",text:t,class:"primary disabled",disabled:!0,click:function(){var t,o,e=$(".red-ui-projects-dialog-screen-create-type.selected").data("type"),n={name:L.val()};if("empty"===e){n.summary=S.val(),n.files={flow:O.val()};var i=$("input[name=projects-encryption-type]:checked").val();n.credentialSecret="enabled"===i&&P.val()}else if("copy"===e)n.copy=(void 0).name;else if("clone"===e){n.credentialSecret=N.val();var i=I.val();if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(i)){var a=B.val();if(!a)return void console.log(RED._("projects.create.cant-get-ssh-key-path"));n.git={remotes:{origin:{url:i,keyFile:a,passphrase:G.val()}}}}else n.git={remotes:{origin:{url:i,username:A.val(),password:M.val()}}}}else if("open"===e)return a=$("#red-ui-projects-dialog-screen-clear-context").prop("checked"),t=F.name,i=a,o=function(e,t){e&&"credentials_load_failed"!==e.code&&console.log(RED._("projects.create.unexpected_error"),e)},RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(t),void V({url:"projects/"+t,type:"PUT",responses:{200:function(e){o(null,e)},400:{credentials_load_failed:function(e){T.dialog("close"),RED.events.emit("project:change",{name:t}),o(null,e)},"*":o}}},{active:!0,clearContext:i}).then(function(){T.dialog("close"),RED.events.emit("project:change",{name:t})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)});$(".red-ui-projects-dialog-screen-create-row-auth-error").hide(),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.protocols")),A.removeClass("input-error"),M.removeClass("input-error"),B.removeClass("input-error"),G.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(n.name),V({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(e){T.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){I.addClass("input-error"),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.con-failed"))},git_not_a_repository:function(e){I.addClass("input-error"),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.not-git"))},git_repository_not_found:function(e){I.addClass("input-error"),$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.no-resource"))},git_auth_failed:function(e){$(".red-ui-projects-dialog-screen-create-row-auth-error").show(),A.addClass("input-error"),M.addClass("input-error"),B.addClass("input-error"),G.addClass("input-error")},missing_flow_file:function(e){T.dialog("close")},missing_package_file:function(e){T.dialog("close")},project_empty:function(e){T.dialog("close")},credentials_load_failed:function(e){T.dialog("close")},"*":function(e){p(e),$(T).dialog("close")}}}},n).then(function(){RED.events.emit("project:change",{name:name})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}}}}function u(e,t){T||RED.projects.init();var e=a[e],o=e.content(t||{}),n=(i.empty(),e.buttons),t=("function"==typeof n&&(n=n(t||{})),T.dialog("option","buttons",n),i.append(o),590),n=$(window).height();n<750&&(t=590-(750-n)),$(".red-ui-projects-dialog-box").height(t),$(".red-ui-projects-dialog-project-list-inner-container").height(Math.max(500,t)-210),T.dialog("option","title",e.title||""),T.dialog("open")}function e(e){var t,o;RED.nodes.dirty()&&(t=RED._("projects.require-clean.confirm"),o=RED.notify(t,{type:"info",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){o.close(),e(!0)}},{text:RED._("common.label.cont"),click:function(){o.close(),e(!1)}}]}))}function V(l,c){var t,o,n,u,p;return l.requireCleanWorkspace&&RED.nodes.dirty()?(e(function(e){e?l.cancel&&(l.cancel(),o)&&o():(delete l.requireCleanWorkspace,V(l,c).then(function(){t&&t()}).always(function(){o&&o()}))}),{then:function(e){return t=e,{always:function(e){o=e}}},always:function(e){o=e}}):(n=Date.now(),$(".red-ui-component-spinner").show(),$("#red-ui-projects-dialog").parent().find(".ui-dialog-buttonset").children().css("visibility","hidden"),c&&(l.data=JSON.stringify(c),l.contentType="application/json; charset=utf-8"),$.ajax(l).done(function(e,t,o){l.responses&&l.responses[200]&&(u=l.responses[200],p=e)}).fail(function(o,e,t){var n,i,a,s,r,d;if(l.responses&&l.responses[o.status]){if("function"==typeof(n=l.responses[o.status]))return void(p={error:(u=n).statusText});if(!1===l.handleAuthFail||"git_auth_failed"!==o.responseJSON.code&&"git_host_key_verification_failed"!==o.responseJSON.code){if(n[o.responseJSON.code])return u=n[o.responseJSON.code],void(p=o.responseJSON);if(n["*"])return u=n["*"],void(p=o.responseJSON)}else{if("git_auth_failed"===o.responseJSON.code)return a=U.git.remotes[o.responseJSON.remote||l.remote||"origin"].fetch,r=$('<div><div class="form-row">'+RED._("projects.send-req.auth-req")+':</div><div class="form-row"><div style="margin-left: 20px;">'+a+"</div></div></div>"),i=!1,/^https?:\/\//.test(a)?($('<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(r),r.find("#projects-user-auth-password").typedInput({type:"cred"})):/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(a)&&(i=!0,a=$('<div class="form-row"></div>').appendTo(r),$('<label for="projects-user-auth-key">SSH Key</label>').appendTo(a),s=$('<select id="projects-user-auth-key">').width("70%").appendTo(a),$.getJSON("settings/user/keys",function(e){e.keys.forEach(function(e){s.append($("<option></option>").val(e.name).text(e.name)),0})}),a=$('<div class="form-row"></div>').appendTo(r),$('<label for="projects-user-auth-passphrase">'+RED._("projects.send-req.passphrase")+"</label>").appendTo(a),$('<input id="projects-user-auth-passphrase" type="password"></input>').appendTo(a).typedInput({type:"cred"})),void(d=RED.notify(r,{type:"error",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){d.close()}},{text:'<span><i class="fa fa-refresh"></i> '+RED._("projects.send-req.retry")+"</span>",click:function(){c=c||{};function t(e){e?(console.log(RED._("projects.send-req.update-failed")),console.log(e)):(V(l,c),d.close())}var e={};i?(e.keyFile=$("#projects-user-auth-key").val(),e.passphrase=$("#projects-user-auth-passphrase").val()):(e.username=$("#projects-user-auth-username").val(),e.password=$("#projects-user-auth-password").val());V({url:"projects/"+U.name+"/remotes/"+(o.responseJSON.remote||l.remote||"origin"),type:"PUT",responses:{0:function(e){t(e)},200:function(e){t(null)},400:{unexpected_error:function(e){t(e)}}}},{auth:e})}}]}));if("git_host_key_verification_failed"===o.responseJSON.code)return r=$('<div><div class="form-row">'+RED._("projects.send-req.host-key-verify-failed")+"</div></div>"),void(d=RED.notify(r,{type:"error",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.close"),click:function(){d.close()}}]}))}}console.log(n),console.log(RED._("projects.send-req.unhandled")+":"),console.log(o),console.log(e),console.log(t)}).always(function(){var e=Date.now()-n,e=Math.max(0,500-e);setTimeout(function(){$(".red-ui-component-spinner").hide(),$("#red-ui-projects-dialog").parent().find(".ui-dialog-buttonset").children().css("visibility",""),u&&u(p)},e)}))}function o(n){var i,a="",s=new Set,r=[],d="",l=$('<div class="red-ui-projects-branch-list">').appendTo(n.container),c=$('<input type="text">').attr("placeholder",n.placeholder).appendTo(l).searchBox({delay:200,change:function(){a=$(this).val();var e=!1,t=!1,o=/^([^/]+)\/[^/.~*?\[]/.exec(a);o&&-1<r.indexOf(o[1])&&(t=e=!0),!e&&/(\.\.|\/\.|[?*[~^: \\]|\/\/|\/.$|\/$)/.test(a)?(i.hasClass("input-error")||(i.addClass("input-error"),i.find("i").addClass("fa-warning").removeClass("fa-code-fork")),i.find("span").text(RED._("projects.create-branch-list.invalid")+": "+(t?"":d)+a)):(i.hasClass("input-error")&&(i.removeClass("input-error"),i.find("i").removeClass("fa-warning").addClass("fa-code-fork")),i.find("span").text(RED._("projects.create-branch-list.create")+":"),i.find(".red-ui-sidebar-vc-branch-list-entry-create-name").text((t?"":d)+a)),u.editableList("filter")}}),u=$("<ol>",{style:"height: 130px;"}).appendTo(l);return u.editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,o){e=$('<div class="red-ui-sidebar-vc-branch-list-entry">').appendTo(e);o.hasOwnProperty("commit")?($('<i class="fa fa-code-fork"></i>').appendTo(e),$("<span>").text(o.name).appendTo(e),o.current&&(e.addClass("selected"),$('<span class="current"></span>').text(n.currentLabel||RED._("projects.create-branch-list.current")).appendTo(e))):(i=e,$('<i class="fa fa-code-fork"></i>').appendTo(e),$("<span>").text(RED._("projects.create-branch-list.create")+":").appendTo(e),$('<div class="red-ui-sidebar-vc-branch-list-entry-create-name" style="margin-left: 10px;">').text(o.name).appendTo(e)),e.on("click",function(e){var t;e.preventDefault(),$(this).hasClass("input-error")||(e={},o.hasOwnProperty("commit")?($(this).hasClass("selected")&&(e.current=!0),e.name=o.name):(e.name=c.val(),e.create=!0,!n.remotes||(t=/^([^/]+)\/[^/.~*?\[]/.exec(e.name))&&-1!==r.indexOf(t[1])||(e.name=r[0]+"/"+e.name)),n.onselect&&n.onselect(e))})},filter:function(e){var t,o=!e.hasOwnProperty("commit"),n=a;return 0<r.length&&(t=/^([^/]+)\/[^/.~*?\[]/.exec(n),""===n||t&&-1!=r.indexOf(t[1])||(n=r[0]+"/"+n)),o&&""!==n&&!s.has(n)||!o&&-1!==e.name.indexOf(a)}}),{refresh:function(e){c.searchBox("value",""),u.editableList("empty");var t=Date.now(),o=f(l).addClass("red-ui-component-spinner-contain");n.remotes?(r=n.remotes(),d=r[0]+"/"):(d="",r=[]),s=new Set,V({url:e,type:"GET",responses:{0:function(e){console.log(e)},200:function(e){e.branches,e.branches.forEach(function(e){u.editableList("addItem",e),s.add(e.name)}),u.editableList("addItem",{}),setTimeout(function(){o.remove()},Math.max(300-(Date.now()-t),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){p(e)}}}})},filter:function(){u.editableList("filter")},focus:function(){c.trigger("focus")}}}function f(e){return $('<div class="red-ui-component-spinner"><img src="red/images/spin.svg"/></div>').appendTo(e)}function n(){createProjectOptions={},U?u("create",{screen:"empty"}):u("welcome")}return{init:function(){T=$('<div id="red-ui-projects-dialog" class="hide red-ui-projects-edit-form"><div class="red-ui-projects-dialog-box"><form class="form-horizontal"></form><div class="red-ui-component-spinner hide"><img src="red/images/spin.svg"/></div></div></div>').appendTo("#red-ui-editor").dialog({modal:!0,autoOpen:!1,width:600,resizable:!1,open:function(e){RED.keyboard.disable()},close:function(e){RED.keyboard.enable()},classes:{"ui-dialog":"red-ui-editor-dialog","ui-dialog-titlebar-close":"hide","ui-widget-overlay":"red-ui-editor-dialog"}}),i=T.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 e={sendRequest:V,createBranchList:o,addSpinnerOverlay:f,reportUnexpectedError:p};RED.projects.settings.init(e),RED.projects.userSettings.init(e),RED.sidebar.versionControl.init(e),t()},showStartup:function(){console.warn("showStartup"),RED.user.hasPermission("projects.write")?u("welcome"):RED.notify(RED._("user.errors.notAuthorized"),"error")},newProject:function(){if(RED.user.hasPermission("projects.write"))return RED.nodes.dirty()?e(function(e){e||n()}):void n();RED.notify(RED._("user.errors.notAuthorized"),"error")},selectProject:function(){if(RED.user.hasPermission("projects.write"))return RED.nodes.dirty()?e(function(e){e||u("create",{screen:"open"})}):void u("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").trigger("click")},200)):RED.notify(RED._("user.errors.notAuthorized"),"error")},showProjectDependencies:function(){RED.projects.settings.show("deps")},createDefaultFileSet:function(){if(!U)throw new Error(RED._("projects.create-default-file-set.no-active"));if(!U.empty)throw new Error(RED._("projects.create-default-file-set.no-empty"));RED.user.hasPermission("projects.write")?(createProjectOptions={},u("default-files",{existingProject:!0})):RED.notify(RED._("user.errors.notAuthorized"),"error")},createDefaultPackageFile:function(){RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(U.name),V({url:"projects/"+U.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(e){$(T).dialog("close")},"*":function(e){p(e),$(T).dialog("close")}}}},{initialise:!0}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})},refresh:function(t){$.getJSON("projects",function(e){e.active?$.getJSON("projects/"+e.active,function(e){U=e,RED.events.emit("projects:load",U),RED.sidebar.versionControl.refresh(!0),t&&t(U)}):t&&t(null)})},editProject:function(){RED.projects.settings.show()},getActiveProject:function(){return U}}}(),RED.projects.settings=function(){var B,G,t=700,o=!1,s=[];function n(e){s.push(e)}function r(n,i){RED.editor.editMarkdown({title:RED._("sidebar.project.editDescription"),header:$('<span><i class="fa fa-book"></i> README.md</span>'),value:n.description,stateId:"sidebar.project.editDescription",complete:function(o){i.empty();function t(e,t){if(e)return r(n,i);n.description=o,d(n,i)}var e=G.addSpinnerOverlay(i);G.sendRequest({url:"projects/"+n.name,type:"PUT",responses:{0:function(e){t(e)},200:function(e){t(null),RED.sidebar.versionControl.refresh(!0)},400:{"*":function(e){G.reportUnexpectedError(e),t(e)}}}},{description:o}).always(function(){e.remove()})}})}function d(e,t){t.empty(),e=e.description?RED.utils.renderMarkdown(e.description):'<span class="red-ui-help-info-none">'+RED._("sidebar.project.noDescriptionAvailable")+"</span>",e=$('<span class="red-ui-text-bidi-aware" dir="'+RED.text.bidi.resolveBaseTextDir(e)+'">'+e+"</span>"),$(e).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")}),e.appendTo(t).find(".red-ui-text-bidi-aware").contents().filter(function(){return 3===this.nodeType&&""!==this.textContent.trim()}).wrap("<span></span>"),setTimeout(function(){RED.editor.mermaid.render()},200)}function f(a,s,r,d,l){var c=r.prev(),e=(c.hide(),r.empty(),l.empty(),$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').appendTo(r)),u=$('<input type="text" style="width: calc(100% - 150px); margin-right: 10px;">').val(s||"").appendTo(r),p=$('<input type="text" style="width: calc(100% - 150px); margin-right: 10px;">').val(d||"").appendTo(l);$('<button class="red-ui-button">'+RED._("common.label.cancel")+"</button>").appendTo(e).on("click",function(e){e.preventDefault(),h(a.summary,r),g(a.version,l),c.show()}),$('<button class="red-ui-button">'+RED._("common.label.save")+"</button>").appendTo(e).on("click",function(e){e.preventDefault();function t(e,t){if(e)return i.remove(),f(a,s,r,d,l);a.summary=o,a.version=n,i.remove(),h(a.summary,r),g(a.version,l),c.show()}var o=u.val(),n=p.val(),i=(h(o,r),g(n,l),G.addSpinnerOverlay(r).addClass("red-ui-component-spinner-contain"));G.sendRequest({url:"projects/"+a.name,type:"PUT",responses:{0:function(e){t(e)},200:function(e){RED.sidebar.versionControl.refresh(!0),t(null)},400:{"*":function(e){G.reportUnexpectedError(e),t(e)}}}},{summary:o,version:n})})}function h(e,t){t.empty(),e?t.text(e).removeClass("red-ui-help-info-none"):t.text(RED._("sidebar.project.noSummaryAvailable")).addClass("red-ui-help-info-none")}function g(e,t){t.empty(),e&&t.text(e)}function i(t){var e=$('<div id="red-ui-project-settings-tab-main" class="red-ui-project-settings-tab-pane red-ui-help"></div>'),o=($("<h1>").text(t.name).appendTo(e),$('<div style="position: relative">').appendTo(e)),n=$("<div></div>").appendTo(o),i=$("<div></div>").addClass("red-ui-help-info-none").appendTo(o),o=(h(t.summary,n),g(t.version,i),RED.user.hasPermission("projects.write")&&$('<button class="red-ui-button red-ui-button-small" style="float: right;">'+RED._("sidebar.project.editDescription")+"</button>").prependTo(o).on("click",function(e){e.preventDefault(),f(t,t.summary,n,t.version,i)}),$("<hr>").appendTo(e),$('<div class="red-ui-help" style="position: relative"></div>').appendTo(e)),a=$("<div>",{style:"min-height: 200px"}).appendTo(o);return d(t,a),RED.user.hasPermission("projects.write")&&$('<button class="red-ui-button red-ui-button-small" style="float: right;">'+RED._("sidebar.project.editReadme")+"</button>").prependTo(o).on("click",function(e){e.preventDefault(),r(t,a)}),e}function l(e,t){t.editableList("empty");var o,n=0;for(i in b)b.hasOwnProperty(i)&&!e.dependencies.hasOwnProperty(i)&&(t.editableList("addItem",{id:b[i].module,version:b[i].version,count:b[i].count,known:e.dependencies.hasOwnProperty(i),installed:!0}),n++,0===b[i].count&&0,e.dependencies.hasOwnProperty(i)||0);if(e.dependencies)for(var i in e.dependencies)e.dependencies.hasOwnProperty(i)&&(o=!!RED.nodes.registry.getModule(i)&&e.dependencies[i]===b[i]?.version,t.editableList("addItem",{id:i,version:e.dependencies[i],count:0,known:!0,installed:o}),n++,o?0:0);0===n&&t.editableList("addItem",{index:0,label:RED._("sidebar.project.projectSettings.none")})}function c(e,t,o,n){function i(e,t){if(s.remove(),e)return n(e);a.dependencies=o,RED.sidebar.versionControl.refresh(!0),n()}var a=RED.projects.getActiveProject(),s=G.addSpinnerOverlay(t).addClass("red-ui-component-spinner-contain");G.sendRequest({url:"projects/"+a.name,type:"PUT",responses:{0:function(e){i(e)},200:function(e){RED.sidebar.versionControl.refresh(!0),i(null)},400:{"*":function(e){i(e)}}}},{dependencies:o})}function a(r){var t=$('<div id="red-ui-project-settings-tab-deps" class="red-ui-project-settings-tab-pane red-ui-help"></div>'),d=(RED.user.hasPermission("projects.write")&&$('<button class="red-ui-button red-ui-button-small" style="margin-top:10px;float: right;">'+RED._("sidebar.project.projectSettings.edit")+"</button>").appendTo(t).on("click",function(e){e.preventDefault(),function n(i,e,a,s){e=e||JSON.stringify(i.dependencies||{},"",4);"{}"===e&&(e="{\n\n}"),RED.editor.editJSON({title:RED._("sidebar.project.editDependencies"),value:e,requireValid:!0,complete:function(t){try{var o=JSON.parse(t);c(0,a,o,function(e){if(e)return n(i,t,a,s);i.dependencies=o,l(i,s)})}catch(e){n(i,t,a,s)}}})}(r,null,t,d)}),$("<ol>",{style:"position: absolute;top: 60px;bottom: 20px;left: 20px;right: 20px;"}).appendTo(t));return d.editableList({addButton:!1,addItem:function(t,e,o){var n,i,a,s=$("<div>",{class:"red-ui-palette-module-header"}).appendTo(t);o.label?(0===o.index?s.addClass("red-ui-search-empty"):t.parent().addClass("red-ui-palette-module-section"),s.text(o.label)):(s.addClass("red-ui-palette-module-header"),o.installed?0===o.count?s.addClass("red-ui-palette-module-unused"):o.known||s.addClass("red-ui-palette-module-unknown"):s.addClass("red-ui-palette-module-not-installed"),o.element=s,n=$('<div class="red-ui-palette-module-meta red-ui-palette-module-name"></div>').appendTo(s),i="fa-cube",o.installed||(i="fa-warning"),i=$('<i class="fa '+i+'"></i>').appendTo(n),o.icon=i,$("<span>").text(o.id).appendTo(n),i=$('<div class="red-ui-palette-module-meta red-ui-palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(s),$("<span>").text(o.version).appendTo(i),i=$('<div class="red-ui-palette-module-meta"></div>').appendTo(s),a=$('<div class="red-ui-palette-module-button-group"></div>').appendTo(i),RED.user.hasPermission("projects.write")&&(o.installed||!1===RED.settings.get("externalModules.palette.allowInstall",!0)?o.known&&0===o.count?$('<a href="#" class="red-ui-button red-ui-button-small">'+RED._("sidebar.project.projectSettings.removeFromProject")+"</a>").appendTo(a).on("click",function(e){e.preventDefault();e=$.extend(!0,{},r.dependencies);delete e[o.id],c(0,t,e,function(e){e?console.log(e):t.fadeOut(200,function(){d.editableList("removeItem",o)})})}):o.known||$('<a href="#" class="red-ui-button red-ui-button-small">'+RED._("sidebar.project.projectSettings.addToProject")+"</a>").appendTo(a).on("click",function(e){e.preventDefault();e=$.extend(!0,{},r.dependencies);e[o.id]=b[o.id].version,c(0,t,e,function(e){e?console.log(e):(a.remove(),s.removeClass("red-ui-palette-module-unknown"))})}):$('<a href="#" class="red-ui-button red-ui-button-small">'+RED._("sidebar.project.projectSettings.install")+"</a>").appendTo(a).on("click",function(e){e.preventDefault(),RED.palette.editor.install(o,t,function(e){e||(o.installed=!0,RED.utils.addSpinnerOverlay(t,!0),setTimeout(function(){d.editableList("removeItem",o),b={},RED.nodes.eachNode(v),RED.nodes.eachConfig(v),b.hasOwnProperty(o.id)?o.count=b[o.id].count:o.count=0,d.editableList("addItem",o)},500))})})))},sort:function(e,t){return e.id.localeCompare(t.id)}}),l(r,d),t}function F(e,t,n,a,s){var r=$('<div class="red-ui-projects-file-listing-container"></div>',{style:"position: relative; min-height: 175px; height: 175px;"}).hide().appendTo(e),d=G.addSpinnerOverlay(r);return $.getJSON("projects/"+t.name+"/files",function(t){var e=(e=Object.keys(t)).filter(function(e){return!t[e].status||!/D/.test(t[e].status)}),o={},i=(e.sort(),e.forEach(function(e){e.split("/").reduce(function(e,t,o,n){if(t)return o<n.length-1?e[t]=e[t]||{}:e[t]=!0,e[t]},o)}),function(e,t,o){var n={name:e||"/",path:o+(o?"/":"")+e};return!0===t?n.type="f":(n.type="d",n.children=[],Object.keys(t).forEach(function(e){n.children.push(i(e,t[e],n.path))}),n.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)})),n}),o=i("",o,"");!function a(e,t,s,r,d,o){o=o||"";var n=$("<ol>",{class:"red-ui-projects-dialog-file-list",style:o}).appendTo(e).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,o){var n,i=$("<div></div>",{class:"red-ui-projects-dialog-file-list-entry"}).appendTo(e);o.children?($('<span class="red-ui-projects-dialog-file-list-entry-folder"><i class="fa fa-angle-right"></i> <i class="fa fa-folder-o"></i></span>').appendTo(i),0<o.children.length&&(n=$("<div></div>",{style:"padding-left: 20px;"}).appendTo(e),0===s.indexOf(o.path+"/")?i.addClass("expanded"):n.hide(),a(n,o.children,s,r,d),i.addClass("selectable"),i.on("click",function(e){$(this).hasClass("expanded")?($(this).removeClass("expanded"),n.slideUp(200)):($(this).addClass("expanded"),n.slideDown(200))}))):(e="fa-file-o",/\.json$/i.test(o.name)?e="fa-file-code-o":/\.md$/i.test(o.name)?e="fa-book":/^\.git/i.test(o.name)&&(e="fa-code-fork",i.addClass("red-ui-projects-dialog-file-list-entry-file-type-git")),$('<span class="red-ui-projects-dialog-file-list-entry-file"> <i class="fa '+e+'"></i></span>').appendTo(i),r(o)?(i.addClass("selectable"),o.path===s&&i.addClass("selected"),i.on("click",function(e){$(".red-ui-projects-dialog-file-list-entry.selected").removeClass("selected"),$(this).addClass("selected"),d(o.path,!0)}),i.on("dblclick",function(e){e.preventDefault(),d(o.path,!0)})):i.addClass("unselectable")),$('<span class="red-ui-projects-dialog-file-list-entry-name" style=""></span>').text(o.name).appendTo(i)}});o||n.parent().css("overflow-y","");t.forEach(function(e){n.editableList("addItem",e)})}(r,o.children,n,a,s,"height: 175px"),d.remove()}),r}function u(a,e){function n(){t.show(),P.hide(),l.hide(),h.show(),m.hide(),v.hide(),R.removeClass("uneditable-input"),R.css("height",""),v.removeClass("selected"),u.find(".red-ui-projects-file-listing-container").remove(),u.css("height",""),u.css("color",""),$(".red-ui-settings-row-credentials").hide(),T.hide(),x.hide(),_.removeClass("selected"),k.removeClass("selected")}var t,o=$("<h3></h3>").text(RED._("sidebar.project.projectSettings.files")).appendTo(e),i=$('<div class="red-ui-settings-section"></div>').appendTo(e),s=(RED.user.hasPermission("projects.write")&&(t=$('<button type="button" id="red-ui-project-settings-tab-settings-file-edit" class="red-ui-button red-ui-button-small" style="float: right;">'+RED._("sidebar.project.projectSettings.edit")+"</button>").appendTo(o).on("click",function(e){e.preventDefault(),P.show(),t.hide(),a.files.package||(c.find(".red-ui-projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.packageCreate")),c.show()),l.show(),h.hide(),m.show(),v.show(),g(),R.addClass("uneditable-input"),$(".red-ui-settings-row-credentials").show(),R.css("height","auto"),T.hide(),x.show()})),e=$('<div class="red-ui-settings-row"></div>').appendTo(i),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.package")).appendTo(e),$('<div class="uneditable-input" style="padding:0">').appendTo(e)),r=$('<span style="display:inline-block; padding: 6px">').text(a.files.package||"package.json").appendTo(s),d=$('<input type="hidden">').val(a.files.package||"package.json").appendTo(s),l=$('<button type="button" class="red-ui-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(s).on("click",function(e){var t;$(this).hasClass("selected")?($(this).removeClass("selected"),s.find(".red-ui-projects-file-listing-container").slideUp(200,function(){$(this).remove(),s.css("height","")}),s.css("color","")):($(this).addClass("selected"),s.css("color","inherit"),t=F(s,a,d.val(),function(e){return e.children||/package\.json$/.test(e.path)},function(e,t){e&&(d.val(e),r.text(e),e=e.substring(0,e.length-12),p.text(e),y.text(e),g(),c.hide()),t&&$(l).trigger("click"),D()}),s.css("height","auto"),setTimeout(function(){t.slideDown(200)},50))}),c=(RED.popover.tooltip(l,RED._("sidebar.project.projectSettings.selectFile")),$('<label style="margin-left: 110px" class="red-ui-projects-edit-form-sublabel"><small><span class="form-warning"><i class="fa fa-warning"></i> <span class="red-ui-projects-edit-form-sublabel-text"></span></small></label>').appendTo(e).hide()),o=(a.files.package||(c.find(".red-ui-projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.fileNotExist")),c.show()),a.files.package||"package.json"),o=o.substring(0,o.length-12),e=$('<div class="red-ui-settings-row"></div>').appendTo(i),u=($('<label for=""></label>').text(RED._("sidebar.project.projectSettings.flow")).appendTo(e),$('<div class="uneditable-input" style="padding:0">').appendTo(e)),p=$('<span style="display:inline-block; padding: 6px 0 6px 6px">').text(o).appendTo(u),f="flows.json",h=(a.files.flow&&(f=0===a.files.flow.indexOf(o)?a.files.flow.substring(o.length):a.files.flow),$('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(f).appendTo(u)),g=function(){m.css({width:"calc(100% - "+(v.width()+p.width())+"px)"})},m=$('<input type="text" style="padding-left:1px; margin-top: -2px; margin-bottom: 0;border: none;">').val(f).hide().appendTo(u),v=$('<button type="button" class="red-ui-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(u).on("click",function(e){var t,o,n,i;$(this).hasClass("selected")?($(this).removeClass("selected"),u.find(".red-ui-projects-file-listing-container").slideUp(200,function(){$(this).remove(),u.css("height","")}),u.css("color","")):($(this).addClass("selected"),u.css("color","inherit"),t=d.val(),o=t.substring(0,t.length-12),n=new RegExp("^"+o+".*.json$"),i=F(u,a,m.val(),function(e){return!/package.json$/.test(e.path)&&n.test(e.path)&&!/_cred\.json$/.test(e.path)},function(e,t){e&&m.val(e.substring(o.length)),t&&$(v).trigger("click"),D()}),u.css("height","auto"),setTimeout(function(){i.slideDown(200)},50))}),b=(RED.popover.tooltip(v,RED._("sidebar.project.projectSettings.selectFile")),e=$('<div class="red-ui-settings-row"></div>').appendTo(i),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.credentials")).appendTo(e),"flows_cred.json"),f=(a.files.credentials&&(b=0===a.files.flow.indexOf(o)?a.files.credentials.substring(o.length):a.files.credentials),$('<div class="uneditable-input" style="padding:0">').appendTo(e)),y=$('<span style="display:inline-block;padding: 6px 0 6px 6px">').text(o).appendTo(f),w=$('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(b).appendTo(f),E=$('<input type="hidden">').val(b).insertAfter(f),D=function(){var e=m.val(),t=/^(.+?)(\.[^.]*)?$/.exec(e),t=(t?w.text(t[1]+"_cred"+(t[2]||".json")):""===e&&w.text(""),E.val(w.text()),""===e||/\.\./.test(e)||/\/$/.test(e)),e=t||""===w.text();S.is(":visible")&&(O.toggleClass("input-error",""===O.val()),e=e||""===O.val()),N.is(":visible")&&(I.toggleClass("input-error",""===I.val()),e=e||""===I.val()),m.toggleClass("input-error",t),M.toggleClass("disabled",e),M.prop("disabled",e)},R=(m.on("change keyup paste",D),e=$('<div class="red-ui-settings-row"></div>').appendTo(i),$("<label></label>").appendTo(e),$('<span><i class="user-settings-credentials-state-icon fa"></i> <span class="user-settings-credentials-state"></span></span>').appendTo(e)),x=$('<span class="button-group" style="margin-left: -72px;">').hide().appendTo(e),_=(R.css("color","#666"),x.css("vertical-align","top"),$('<button type="button" class="red-ui-button" style="vertical-align: top; width: 36px; margin-bottom: 10px"><i class="fa fa-trash-o"></i></button>').appendTo(x).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),T.hide()):(I.val(""),S.hide(),N.show(),$(this).addClass("selected"),k.removeClass("selected"),L.show(),A.show(),C.hide(),j.hide(),T.show()),D()})),k=(RED.popover.tooltip(_,RED._("sidebar.project.projectSettings.resetTheEncryptionKey")),$('<button type="button" class="red-ui-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(x).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),T.hide()):(O.val(""),I.val(""),a.settings.credentialSecretInvalid||!a.settings.credentialsEncrypted?(C.show(),j.hide(),S.hide()):(S.show(),C.hide(),j.show()),N.show(),k.addClass("selected"),_.removeClass("selected"),L.hide(),A.hide(),T.show()),D()})),T=(RED.popover.tooltip(k,RED._("sidebar.project.projectSettings.changeTheEncryptionKey")),$('<div class="red-ui-settings-row red-ui-settings-row-credentials"></div>').hide().appendTo(i),$("<div>",{style:"margin-top:10px"}).hide().appendTo(R)),C=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.setTheEncryptionKey")+"</div>").hide().appendTo(T),j=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.changeTheEncryptionKey")+"</div>").hide().appendTo(T),L=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.resetTheEncryptionKey")+"</div>").hide().appendTo(T),S=$('<div class="red-ui-settings-row red-ui-settings-row-credentials"></div>').appendTo(T),O=($('<label for=""></label>').text(RED._("sidebar.project.projectSettings.currentKey")).appendTo(S),$('<input type="text">').appendTo(S).typedInput({type:"cred"}).on("change keyup paste",function(){B&&(B.close(),B=null),D()})),N=$('<div class="red-ui-settings-row red-ui-settings-row-credentials"></div>').appendTo(T),I=($('<label for=""></label>').text(RED._("sidebar.project.projectSettings.newKey")).appendTo(N),$('<input type="text">').appendTo(N).typedInput({type:"cred"}).on("change keyup paste",D)),A=$('<div class="form-tips form-warning" style="margin: 10px;"><i class="fa fa-warning"></i>'+RED._("sidebar.project.projectSettings.credentialsAlert")+"</div>").hide().appendTo(T),P=$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').hide().appendTo(i),M=($('<button type="button" class="red-ui-button">'+RED._("common.label.cancel")+"</button>").appendTo(P).on("click",function(e){e.preventDefault();e=a.files.package||"package.json",e=e.substring(0,e.length-12);p.text(e),y.text(e),r.text(a.files.package||"package.json"),a.files.package?c.hide():(c.find(".red-ui-projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.fileNotExist")),c.show()),m.val(h.text()),w.text(b),n()}),$('<button type="button" class="red-ui-button">'+RED._("common.label.save")+"</button>").appendTo(P).on("click",function(e){e.preventDefault();function t(e){o.remove(),e?G.reportUnexpectedError(e):(h.text(m.val()),w.text(E.val()),c.hide(),n())}var o=G.addSpinnerOverlay(i),e=(e=d.val()).substring(0,e.length-12),e={files:{package:d.val(),flow:e+m.val(),credentials:e+E.val()}};_.hasClass("selected")&&(e.resetCredentialSecret=!0),(_.hasClass("selected")||k.hasClass("selected"))&&(e.credentialSecret=I.val(),S.is(":visible"))&&(e.currentCredentialSecret=O.val()),RED.deploy.setDeployInflight(!0),G.sendRequest({url:"projects/"+a.name,type:"PUT",responses:{0:function(e){t(e)},200:function(e){a=e,RED.sidebar.versionControl.refresh(!0),z(),t()},400:{credentials_load_failed:function(e){t(e)},missing_current_credential_key:function(e){O.addClass("input-error"),B=RED.popover.create({target:O,direction:"right",size:"small",content:"Incorrect key",autoClose:3e3}).open(),t(e)},"*":function(e){t(e)}}}},e).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})})),z=function(){a.settings.credentialSecretInvalid?(R.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-warning"),R.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.invalidEncryptionKey"))):a.settings.credentialsEncrypted?(R.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-lock"),R.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionEnabled"))):(R.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-unlock"),R.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionDisabled"))),_.toggleClass("disabled",!a.settings.credentialSecretInvalid&&!a.settings.credentialsEncrypted),_.prop("disabled",!a.settings.credentialSecretInvalid&&!a.settings.credentialsEncrypted)};D(),z()}function p(a,e){function n(){o.attr("disabled",!1),c.hide(),g.val(""),m.val(""),i&&(i.close(),i=null)}$("<h3></h3>").text(RED._("sidebar.project.projectSettings.versionControl")).appendTo(e),s=a,t=e,t=$('<div class="red-ui-settings-section"></div>').appendTo(t),$("<h4></h4>").text(RED._("sidebar.project.projectSettings.branches")).appendTo(t),t=$('<div class="red-ui-settings-row red-ui-projects-dialog-list"></div>').appendTo(t),r=$("<ol>").appendTo(t).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(i,e,a){var t,o,n=$('<div class="red-ui-projects-dialog-list-entry">').appendTo(i);a.empty?(n.addClass("red-ui-search-empty"),n.text(RED._("sidebar.project.projectSettings.noBranches"))):(a.current&&n.addClass("current"),$('<span class="entry-icon"><i class="fa fa-code-fork"></i></span>').appendTo(n),o=$("<span>").appendTo(n),t=$("<div>").appendTo(o),$('<span class="entry-name">').text(a.name).appendTo(t),a.commit&&$('<span class="entry-detail">').text(a.commit.sha).appendTo(t),a.remote&&(t=$("<div>").appendTo(o),$('<span class="entry-detail entry-remote-name">').text(a.remote||"").appendTo(t),0<a.status.ahead+a.status.behind)&&$('<span class="entry-detail"><i class="fa fa-long-arrow-up"></i> <span>'+a.status.ahead+'</span> <i class="fa fa-long-arrow-down"></i> <span>'+a.status.behind+"</span></span>").appendTo(t),a.current||(o=$('<span class="entry-tools">').appendTo(n),$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-trash"></i></button>').appendTo(o).on("click",function(e){e.preventDefault();var o=G.addSpinnerOverlay(i).addClass("red-ui-component-spinner-contain"),n=RED.notify(RED._("sidebar.project.projectSettings.deleteConfirm",{name:a.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){o.remove(),n.close()}},{text:RED._("sidebar.project.projectSettings.deleteBranch"),click:function(){n.close();var t={url:"projects/"+s.name+"/branches/"+a.name,type:"DELETE",responses:{200:function(e){i.fadeOut(200,function(){r.editableList("removeItem",a),o.remove()})},400:{git_delete_branch_unmerged:function(e){n=RED.notify(RED._("sidebar.project.projectSettings.unmergedConfirm",{name:a.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){o.remove(),n.close()}},{text:RED._("sidebar.project.projectSettings.deleteUnmergedBranch"),click:function(){t.url+="?force=true",n.close(),G.sendRequest(t)}}]})},"*":function(e){G.reportUnexpectedError(e),o.remove()}}}};G.sendRequest(t)}}]})})))}}),$.getJSON("projects/"+s.name+"/branches",function(e){e.branches&&(0<e.branches.length?(e.branches.sort(function(e,t){return e.current?-1:t.current?1:e.name.localeCompare(t.name)}),e.branches.forEach(function(e){r.editableList("addItem",e)})):r.editableList("addItem",{empty:!0}))});var s,r,i,t=$('<div class="red-ui-settings-section"></div>').appendTo(e),e=$("<h4></h4>").text(RED._("sidebar.project.projectSettings.gitRemotes")).appendTo(t),o=$('<button class="red-ui-button red-ui-button-small" style="float: right; margin-right: 10px;">'+RED._("sidebar.project.projectSettings.addRemote")+"</button>").appendTo(e).on("click",function(e){o.attr("disabled",!0),c.slideDown(200,function(){c[0].scrollIntoView(),(l?(g.val("origin"),m):g).trigger("focus"),p()})}),d={empty:!0},l=!0,e=$('<div class="red-ui-settings-row"></div>').appendTo(t),c=$('<div class="red-ui-projects-dialog-list-dialog"></div>').hide().appendTo(e),e=$('<div class="red-ui-settings-row red-ui-projects-dialog-list"></div>').appendTo(t),u=$("<ol>").appendTo(e),p=(u.editableList({addButton:!1,height:"auto",addItem:function(n,e,i){var t,o=$('<div class="red-ui-projects-dialog-list-entry">').appendTo(n);i.empty?(o.addClass("red-ui-search-empty"),o.text(RED._("sidebar.project.projectSettings.noRemotes"))):($('<span class="entry-icon"><i class="fa fa-globe"></i></span>').appendTo(o),t=$("<span>").appendTo(o),$('<div class="entry-name">').text(i.name).appendTo(t),(i.urls.fetch===i.urls.push?$('<div class="entry-detail">').text(i.urls.fetch):($('<div class="entry-detail">').text("fetch: "+i.urls.fetch).appendTo(t),$('<div class="entry-detail">').text("push: "+i.urls.push))).appendTo(t),t=$('<span class="entry-tools">').appendTo(o),$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-trash"></i></button>').appendTo(t).on("click",function(e){e.preventDefault();var t=G.addSpinnerOverlay(n).addClass("red-ui-component-spinner-contain"),o=RED.notify(RED._("sidebar.project.projectSettings.deleteRemoteConfrim",{name:i.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.remove(),o.close()}},{text:RED._("sidebar.project.projectSettings.deleteRemote"),click:function(){o.close(),a.git.branches.remote&&0===a.git.branches.remote.indexOf(i.name+"/")&&delete a.git.branches.remote,a.git.branches.remoteAlt&&0===a.git.branches.remoteAlt.indexOf(i.name+"/")&&delete a.git.branches.remoteAlt;var e="projects/"+a.name+"/remotes/"+i.name;G.sendRequest({url:e,type:"DELETE",responses:{200:function(e){n.fadeOut(200,function(){u.editableList("removeItem",i),setTimeout(t.remove,100),0===e.remotes.length?(delete a.git.remotes,l=!0,u.editableList("addItem",d)):(a.git.remotes={},e.remotes.forEach(function(e){var t=e.name;delete e.name,a.git.remotes[t]=e})),delete a.git.branches.remoteAlt,RED.sidebar.versionControl.refresh()})},400:{"*":function(e){G.reportUnexpectedError(e),t.remove()}}}})}}]})}))}}),function(){var e=/^[a-zA-Z0-9\-_]+$/.test(g.val()),t=m.val(),o=0<t.length&&!/\s/.test(t);/^https?:\/\/[^/]+@/i.test(t)?(v.text(RED._("sidebar.project.projectSettings.urlRule2")),o=!1):v.text(RED._("sidebar.project.projectSettings.urlRule")),b.attr("disabled",!e||!o),g.toggleClass("input-error",f&&!e),m.toggleClass("input-error",h&&!o),i&&(i.close(),i=null)}),f=!1,h=!1,g=($('<div class="red-ui-projects-dialog-list-dialog-header">').text(RED._("sidebar.project.projectSettings.addRemote2")).appendTo(c),e=$('<div class="red-ui-settings-row"></div>').appendTo(c),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.remoteName")).appendTo(e),$('<input type="text">').appendTo(e).on("change keyup paste",function(){f=!0,p()})),m=($('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("sidebar.project.projectSettings.nameRule")+"</small></label>").appendTo(e).find("small"),e=$('<div class="red-ui-settings-row"></div>').appendTo(c),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.url")).appendTo(e),$('<input type="text">').appendTo(e).on("change keyup paste",function(){h=!0,p()})),v=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("sidebar.project.projectSettings.urlRule")+"</small></label>").appendTo(e).find("small"),t=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(c),b=($('<button class="red-ui-button">'+RED._("common.label.cancel")+"</button>").appendTo(t).on("click",function(e){e.preventDefault(),n()}),$('<button class="red-ui-button">'+RED._("sidebar.project.projectSettings.addRemote2")+"</button>").appendTo(t).on("click",function(e){e.preventDefault();function t(e){o.remove(),e||n()}var o=G.addSpinnerOverlay(c).addClass("red-ui-component-spinner-contain"),e={name:g.val(),url:m.val()};RED.deploy.setDeployInflight(!0),G.sendRequest({url:"projects/"+a.name+"/remotes",type:"POST",responses:{0:function(e){t(e)},200:function(e){a.git.remotes={},e.remotes.forEach(function(e){var t=e.name;delete e.name,a.git.remotes[t]=e}),y(),RED.sidebar.versionControl.refresh(),t()},400:{git_remote_already_exists:function(e){i=RED.popover.create({target:g,direction:"right",size:"small",content:"Remote already exists",autoClose:6e3}).open(),g.addClass("input-error"),t(e)},"*":function(e){G.reportUnexpectedError(e),t(e)}}}},e)})),y=function(){u.editableList("empty");var e=0;if(a.git.hasOwnProperty("remotes"))for(var t in a.git.remotes)a.git.remotes.hasOwnProperty(t)&&(e++,u.editableList("addItem",{name:t,urls:a.git.remotes[t]}));(l=0===e)&&u.editableList("addItem",d)};y()}function m(e){var t=$('<div id="red-ui-project-settings-tab-settings" class="red-ui-project-settings-tab-pane red-ui-help"></div>');return u(e,t),p(e,t),t}function v(e){/^subflow:/.test(e.type)||"node-red"!==(e=RED.nodes.registry.getNodeSetForType(e.type).module)&&(b.hasOwnProperty(e)||(b[e]={module:e,version:RED.nodes.registry.getModule(e).version,count:0,known:!1}),b[e].count++)}var b={};return{init:function(e){G=e,n({id:"main",title:RED._("sidebar.project.name"),get:i,close:function(){}}),n({id:"deps",title:RED._("sidebar.project.dependencies"),get:a,close:function(){}}),n({id:"settings",title:RED._("sidebar.project.settings"),get:m,close:function(){B&&(B.close(),B=null)}}),RED.events.on("nodes:add",v),RED.events.on("nodes:remove",function(e){/^subflow:/.test(e.type)||"node-red"!==(e=RED.nodes.registry.getNodeSetForType(e.type).module)&&b.hasOwnProperty(e)&&(b[e].count--,0!==b[e].count||b[e].known||delete b[e])})},show:function(a){var e;o||(RED.user.hasPermission("projects.write")?(o=!0,e={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){t=e.width},open:function(e){var t=RED.projects.getActiveProject(),e=e.find(".red-ui-tray-body"),e=$("<div></div>").appendTo(e),o=$("<div></div>",{class:"red-ui-settings-tabs-container"}).appendTo(e),n=($("<ul></ul>",{id:"user-settings-tabs"}).appendTo(o),RED.tabs.create({id:"user-settings-tabs",vertical:!0,onchange:function(e){setTimeout(function(){i.children().hide(),$("#"+e.id).show(),e.pane.focus&&e.pane.focus()},50)}})),i=$("<div></div>",{class:"red-ui-settings-tabs-content"}).appendTo(e);s.forEach(function(e){n.addTab({id:"red-ui-project-settings-tab-"+e.id,label:e.title,pane:e}),e.get(t).hide().appendTo(i)}),e.i18n(),n.activateTab("red-ui-project-settings-tab-"+(a||"main")),$("#red-ui-sidebar-shade").show()},close:function(){o=!1,s.forEach(function(e){e.close&&e.close()}),$("#red-ui-sidebar-shade").hide()},show:function(){}},null!==t&&(e.width=t),RED.tray.show(e)):RED.notify(RED._("user.errors.notAuthorized"),"error"))},switchProject:function(e){b={}}}}(),RED.projects.userSettings=function(){var a,v,b;function s(e){$("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.sshKeys")).appendTo(e);function t(){var e=/^[a-zA-Z0-9\-_]+$/.test(c.val()),t=(c.toggleClass("input-error",l&&!e),u.val()),o=0===t.length||8<=t.length;u.toggleClass("input-error",!o),o?0===t.length?p.text(RED._("editor:sidebar.project.userSettings.optional")):p.text(""):p.text(RED._("editor:sidebar.project.userSettings.passphraseShort")),f.attr("disabled",!(e&&o)),n&&(n.close(),n=null)}function i(){a.attr("disabled",!1),s.hide(),c.val(""),l=!1,u.val(""),n&&(n.close(),n=null)}function r(e,t){var e=$('<div class="red-ui-projects-dialog-ssh-public-key">',{style:"position:relative"}).appendTo(e),o=$("<pre>",{style:"min-height: 80px"}).appendTo(e),n=b.addSpinnerOverlay(o).addClass("red-ui-component-spinner-contain"),t={url:"settings/user/keys/"+t.name,type:"GET",responses:{200:function(e){o.text(e.publickey),n.remove()},400:{unexpected_error:function(e){console.log(e),n.remove()}}}},t=(b.sendRequest(t),$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(e));return $('<button class="red-ui-button red-ui-button-small">'+RED._("editor:sidebar.project.userSettings.copyPublicKey")+"</button>").appendTo(t).on("click",function(e){try{e.stopPropagation(),e.preventDefault(),document.getSelection().selectAllChildren(o[0]);document.execCommand("copy");document.getSelection().empty()}catch(e){}}),e}var n,e=$('<div class="red-ui-settings-section"></div>').appendTo(e),o=$('<div class="red-ui-settings-section-description"></div>').appendTo(e).text(RED._("editor:sidebar.project.userSettings.sshKeysTip")),a=$('<button id="user-settings-gitconfig-add-key" class="red-ui-button red-ui-button-small" style="float: right; margin-right: 10px;">'+RED._("editor:sidebar.project.userSettings.add")+"</button>").appendTo(o).on("click",function(e){a.attr("disabled",!0),f.attr("disabled",!0),s.slideDown(200),c.trigger("focus")}),o=$('<div class="red-ui-settings-row"></div>').appendTo(e),s=$('<div class="red-ui-projects-dialog-list-dialog"></div>').hide().appendTo(o),d=($('<div class="red-ui-projects-dialog-list-dialog-header">').text(RED._("editor:sidebar.project.userSettings.addSshKey")).appendTo(s),$("<div>").appendTo(s)),o=$('<div class="red-ui-settings-row"></div>').appendTo(d),l=($('<div class="red-ui-settings-section-description"></div>').appendTo(o).text(RED._("editor:sidebar.project.userSettings.addSshKeyTip")),o=$('<div class="red-ui-settings-row"></div>').appendTo(d),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.name")).appendTo(o),!1),c=$('<input type="text">').appendTo(o).on("change keyup paste",function(){l=!0,t()}),d=($('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.nameRule")+"</small></label>").appendTo(o).find("small"),$("<div>").appendTo(d)),u=(o=$('<div class="red-ui-settings-row"></div>').appendTo(d),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.passphrase")).appendTo(o),$('<input type="password">').appendTo(o).on("change keyup paste",t)),p=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.optional")+"</small></label>").appendTo(o).find("small"),d=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(s),f=($('<button class="red-ui-button">'+RED._("editor:sidebar.project.userSettings.cancel")+"</button>").appendTo(d).on("click",function(e){e.preventDefault(),i()}),$('<button class="red-ui-button">'+RED._("editor:sidebar.project.userSettings.generate")+"</button>").appendTo(d).on("click",function(e){e.preventDefault();function t(e){o.remove(),e||i()}var o=b.addSpinnerOverlay(s).addClass("red-ui-component-spinner-contain"),n={name:c.val(),type:"generate"};n.comment=v.val(),n.password=u.val(),n.size=4096;RED.deploy.setDeployInflight(!0),b.sendRequest({url:"settings/user/keys",type:"POST",responses:{0:function(e){t(e)},200:function(e){m(n.name),t()},400:{unexpected_error:function(e){console.log(e),t(e)}}}},n)})),h=(o=$('<div class="red-ui-settings-row red-ui-projects-dialog-list"></div>').appendTo(e),{empty:!0}),g=$('<ol class="red-ui-projects-dialog-ssh-key-list">').appendTo(o).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(n,e,i){var t,o,a,s=$('<div class="red-ui-projects-dialog-list-entry">').appendTo(n);i.empty?(s.addClass("red-ui-search-empty"),s.text(RED._("editor:sidebar.project.userSettings.noSshKeys"))):(t=$('<div class="red-ui-projects-dialog-ssh-key-header">').appendTo(s),$('<span class="entry-icon"><i class="fa fa-key"></i></span>').appendTo(t),$('<span class="entry-name">').text(i.name).appendTo(t),o=$('<span class="button-row entry-tools">').appendTo(t),t.on("click",function(e){a?a.slideUp(200,function(){a.remove(),a=null}):a=r(s,i)}),i.system||$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-trash"></i></button>').appendTo(o).on("click",function(e){e.stopPropagation();var t=b.addSpinnerOverlay(n).addClass("red-ui-component-spinner-contain"),o=RED.notify(RED._("editor:sidebar.project.userSettings.deleteConfirm",{name:i.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.remove(),o.close()}},{text:RED._("editor:sidebar.project.userSettings.delete"),click:function(){o.close();var e="settings/user/keys/"+i.name;b.sendRequest({url:e,type:"DELETE",responses:{200:function(e){n.fadeOut(200,function(){g.editableList("removeItem",i),setTimeout(t.remove,100),0===g.editableList("length")&&g.editableList("addItem",h)})},400:{unexpected_error:function(e){console.log(e),t.remove()}}}})}}]})}),i.expand&&(a=r(s,i)))}}),m=function(t){$.getJSON("settings/user/keys",function(e){e.keys&&(e.keys.sort(function(e,t){return e.name.localeCompare(t.name)}),g.editableList("empty"),e.keys.forEach(function(e){e.name===t&&(e.expand=!0),g.editableList("addItem",e)}),0===g.editableList("length"))&&g.editableList("addItem",h)})};m()}function t(e){var t,o,n,i=$('<div id="red-ui-settings-tab-gitconfig" class="project-settings-tab-pane red-ui-help"></div>');return t=i,(n=RED.settings.get("git")||{}).user=n.user||{},$("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.committerDetail")).appendTo(t),t=$('<div class="red-ui-settings-section"></div>').appendTo(t),$('<div class="red-ui-settings-section-description"></div>').appendTo(t).text(RED._("editor:sidebar.project.userSettings.committerTip")),o=$('<div class="red-ui-settings-row"></div>').appendTo(t),$('<label for="user-settings-gitconfig-username"></label>').text(RED._("editor:sidebar.project.userSettings.userName")).appendTo(o),(a=$('<input type="text" id="user-settings-gitconfig-username">').appendTo(o)).val(n.user.name||""),o=$('<div class="red-ui-settings-row"></div>').appendTo(t),$('<label for="user-settings-gitconfig-email"></label>').text(RED._("editor:sidebar.project.userSettings.email")).appendTo(o),(v=$('<input type="text" id="user-settings-gitconfig-email">').appendTo(o)).val(n.user.email||""),t=i,o=RED.settings.theme("projects.workflow.mode","manual"),(n=RED.settings.get("git")||{}).workflow=n.workflow||{},n.workflow.mode=n.workflow.mode||o,$("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.workflow")).appendTo(t),o=$('<div class="red-ui-settings-section"></div>').appendTo(t),$('<div class="red-ui-settings-section-description"></div>').appendTo(o).text(RED._("editor:sidebar.project.userSettings.workfowTip")),t=$('<div class="red-ui-settings-row"></div>').appendTo(o),$('<label><input type="radio" name="user-setting-gitworkflow" value="manual"> <div style="margin-left: 3px; display: inline-block"><div data-i18n="editor:sidebar.project.userSettings.workflowManual"></div><div style="color:#aaa;" data-i18n="editor:sidebar.project.userSettings.workflowManualTip"></div></div></label>').appendTo(t),t=$('<div class="red-ui-settings-row"></div>').appendTo(o),$('<label><input type="radio" name="user-setting-gitworkflow" value="auto"> <div style="margin-left: 3px; display: inline-block"><div data-i18n="editor:sidebar.project.userSettings.workflowAuto"></div><div style="color:#aaa;" data-i18n="editor:sidebar.project.userSettings.workflowAutoTip"></div></div></label>').appendTo(t),o.find('[name="user-setting-gitworkflow"][type="radio"][value="'+n.workflow.mode+'"]').prop("checked",!0),s(i),i}return{init:function(e){b=e,RED.userSettings.add({id:"gitconfig",title:RED._("editor:sidebar.project.userSettings.gitConfig"),get:t,close:function(){var e=RED.settings.get("git")||{};e.user=e.user||{},e.user.name=a.val(),e.user.email=v.val(),e.workflow=e.workflow||{},e.workflow.mode=$('[name="user-setting-gitworkflow"][type="radio"]:checked').val(),RED.settings.set("git",e)}})}}}(),RED.sidebar.versionControl=function(){var D,R,x,_,k,T,a,C,j,L,S,O,N,s,I,P,A,M={};function z(t,a,e,s){t.addClass("red-ui-sidebar-vc-change-entry");var n,i,r,o,d,l,c=$("<div>").appendTo(t);a.label?(t.addClass("red-ui-help-info-none"),c.text(a.label),a.button&&(c.css({display:"inline-block",maxWidth:"300px",textAlign:"left"}),l=$('<div style="float: right; margin: 5px; height: 50px;"></div>').appendTo(c),$('<button class="red-ui-button red-ui-button-small"></button>').text(a.button.label).appendTo(l).on("click",a.button.click))):(n=$('<i class=""></i>').appendTo(c),i=$('<a href="#">').appendTo(c).on("click",function(e){var o,n,i;e.preventDefault(),o=a,n=s,i=RED.projects.getActiveProject(),I.sendRequest({url:"projects/"+i.name+"/diff/"+("staged"===n?"index":"tree")+"/"+encodeURIComponent(o.file),type:"GET",responses:{0:function(e){console.log(e)},200:function(e){var t="unstaged"===n?RED._("sidebar.project.versionControl.unstagedChanges")+" : "+o.file:"staged"===n?RED._("sidebar.project.versionControl.stagedChanges")+" : "+o.file:RED._("sidebar.project.versionControl.resolveConflicts")+" : "+o.file,e={diff:e.diff,title:t,unmerged:"unmerged"===n,project:i};"unstaged"==n?(e.oldRevTitle=" "===o.indexStatus?RED._("sidebar.project.versionControl.head"):RED._("sidebar.project.versionControl.staged"),e.newRevTitle=RED._("sidebar.project.versionControl.unstaged"),e.oldRev=" "===o.indexStatus?"@":":0",e.newRev="_"):"staged"===n?(e.oldRevTitle=RED._("sidebar.project.versionControl.head"),e.newRevTitle=RED._("sidebar.project.versionControl.staged"),e.oldRev="@",e.newRev=":0"):(e.oldRevTitle=RED._("sidebar.project.versionControl.local"),e.newRevTitle=RED._("sidebar.project.versionControl.remote"),e.commonRev=":1",e.oldRev=":2",e.newRev=":3",e.onresolve=function(e){I.sendRequest({url:"projects/"+i.name+"/resolve/"+encodeURIComponent(o.file),type:"POST",responses:{0:function(e){console.log(e)},200:function(e){V(!0)},400:{unexpected_error:function(e){console.log(e)}}}},{resolutions:e.resolutions[o.file]})}),RED.diff.showUnifiedDiff(e)},400:{unexpected_error:function(e){console.log(e)}}}})}),r=$("<span>").appendTo(i),l=$('<div class="red-ui-sidebar-vc-change-entry-tools">').appendTo(t),"unstaged"===s&&(o=$('<span class="button-group" style="margin-right: 5px;"></span>').appendTo(l),d=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-reply"></i></button>').appendTo(o).on("click",function(e){e.preventDefault();var t=I.addSpinnerOverlay(c).addClass("red-ui-component-spinner-contain"),o=RED.notify(RED._("sidebar.project.versionControl.revert",{file:a.file}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.remove(),o.close()}},{text:RED._("sidebar.project.versionControl.revertChanges"),click:function(){o.close();var e={url:"projects/"+RED.projects.getActiveProject().name+"/files/_/"+a.file,type:"DELETE",responses:{200:function(e){t.remove()},400:{unexpected_error:function(e){t.remove(),console.log(e)}}}};RED.deploy.setDeployInflight(!0),I.sendRequest(e).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]})}),RED.popover.tooltip(d,RED._("sidebar.project.versionControl.revertChanges"))),o=$('<span class="button-group"></span>').appendTo(l),"unmerged"!==s&&(l=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-'+("unstaged"===s?"plus":"minus")+'"></i></button>').appendTo(o).on("click",function(e){e.preventDefault();e=RED.projects.getActiveProject();a.spinner=I.addSpinnerOverlay(t).addClass("projects-version-control-spinner-sidebar"),I.sendRequest({url:"projects/"+e.name+"/stage/"+encodeURIComponent(a.file),type:"unstaged"===s?"POST":"DELETE",responses:{0:function(e){console.log(e)},200:function(e){U(e)},400:{unexpected_error:function(e){console.log(e)}}}},{})}),RED.popover.tooltip(l,RED._("sidebar.project.versionControl."+("unstaged"===s?"stage":"unstage")+"Change"))),a["update"+("unstaged"===s?"Unstaged":"Staged")]=function(e,t){c.removeClass();var o="",o="A"===t?(c.addClass("red-ui-diff-state-added"),"fa-plus-square"):"?"===t?(c.addClass("red-ui-diff-state-unchanged"),"fa-question-circle-o"):"D"===t?(c.addClass("red-ui-diff-state-deleted"),"fa-minus-square"):"M"===t?(c.addClass("red-ui-diff-state-changed"),"fa-square"):"R"===t?(c.addClass("red-ui-diff-state-changed"),"fa-toggle-right"):("U"===t&&c.addClass("red-ui-diff-state-conflicted"),"fa-exclamation-triangle");r.empty(),$("<span>").text(e.file.replace(/\\(.)/g,"$1")).appendTo(r),e.oldName&&($('<i class="fa fa-long-arrow-right"></i>').prependTo(r),$("<span>").text(e.oldName.replace(/\\(.)/g,"$1")).prependTo(r)),n.removeClass(),n.addClass("fa "+o),e.spinner&&(e.spinner.remove(),delete e.spinner),d&&d.toggle("?"!==t),i.toggleClass("disabled","D"===t||"?"===t)},a["update"+("unstaged"===s?"Unstaged":"Staged")](a,e))}function B(e){var t=Date.now()/1e3-e,o=Math.floor(t/86400);return 30<o?new Date(1e3*e).toLocaleDateString():0<o?RED._("sidebar.project.versionControl.daysAgo",{count:o}):0<(e=Math.floor(t/3600))?RED._("sidebar.project.versionControl.hoursAgo",{count:e}):0<(o=Math.floor(t/60))?RED._("sidebar.project.versionControl.minsAgo",{count:o}):RED._("sidebar.project.versionControl.secondsAgo")}function G(e,t){var o=RED.projects.getActiveProject(),e=((a=t?I.addSpinnerOverlay(x.parent()):I.addSpinnerOverlay(k.parent())).addClass("red-ui-component-spinner-sidebar"),t?{files:e}:void 0);I.sendRequest({url:"projects/"+o.name+"/stage",type:t?"POST":"DELETE",responses:{0:function(e){console.log(e)},200:function(e){U(e)},400:{unexpected_error:function(e){console.log(e)}}}},e)}var i=!1;function F(n,i,e,a,t){var s=I.addSpinnerOverlay(e),e=n+"?limit="+(a||20);t&&(e+="&before="+t),I.sendRequest({url:e,type:"GET",responses:{0:function(e){console.log(e)},200:function(e){e.commits.forEach(function(e){i.editableList("addItem",e),t=e.sha}),i.loadMoreItem&&(i.editableList("removeItem",i.loadMoreItem),delete i.loadMoreItem);var t,o=i.editableList("length");o<e.total&&(i.loadMoreItem={totalKnown:o,total:e.total,url:n,before:t+"~1",limit:a},i.editableList("addItem",i.loadMoreItem)),s.remove()},400:{unexpected_error:function(e){console.log(e)}}}})}function U(e){var n=e.files,e=(a&&(a.remove(),a=null),(s=!!e.merging)?(D.addClass("red-ui-sidebar-vc-merging"),C.show()):(D.removeClass("red-ui-sidebar-vc-merging"),C.hide()),x.editableList("removeItem",P),k.editableList("removeItem",P),j.editableList("removeItem",A),Object.keys(n).filter(function(e){return"f"===n[e].type})),i=(e.sort(),Date.now()+Math.floor(100*Math.random())),e=(e.forEach(function(e){var t=n[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),M[e]?(M[e].unmerged&&!t.unmerged?(j.editableList("removeItem",M[e]),o=!0):!M[e].unmerged&&t.unmerged&&(x.editableList("removeItem",M[e]),k.editableList("removeItem",M[e])),M[e].status!==t.status&&(" "!==M[e].treeStatus?" "===t.treeStatus?x.editableList("removeItem",M[e]):t.treeStatus!==M[e].treeStatus&&M[e].updateUnstaged(t,t.treeStatus):o=!0," "!==M[e].indexStatus&&"?"!==M[e].indexStatus?" "===t.indexStatus||"?"===t.indexStatus?k.editableList("removeItem",M[e]):t.indexStatus!==M[e].indexStatus&&M[e].updateStaged(t,t.indexStatus):o=!0),M[e].status=t.status,M[e].indexStatus=t.indexStatus,M[e].treeStatus=t.treeStatus,M[e].oldName=t.oldName,M[e].unmerged=t.unmerged):(o=!0,M[e]=t),M[e].updateIndex=i,o)&&(t.unmerged?j.editableList("addItem",M[e]):(" "!==t.treeStatus&&x.editableList("addItem",M[e])," "!==t.indexStatus&&"?"!==t.indexStatus&&k.editableList("addItem",M[e])))}),Object.keys(M).forEach(function(e){M[e].updateIndex!==i&&(x.editableList("removeItem",M[e]),k.editableList("removeItem",M[e]),delete M[e])}),k.editableList("length")),t=x.editableList("length"),o=j.editableList("length");L.prop("disabled",s&&0<o||!s&&0===e),_.prop("disabled",0===t),T.prop("disabled",0===e),0===e&&k.editableList("addItem",P),0===t&&x.editableList("addItem",P),0===o&&j.editableList("addItem",A)}function V(e,t){var n;i||(e&&(M={},x.editableList("empty"),k.editableList("empty"),j.editableList("empty")),RED.user.hasPermission("projects.write")&&(i=!0,O.editableList("empty"),(e=RED.projects.getActiveProject())&&F("projects/"+e.name+"/commits",O,O.parent()),(n=RED.projects.getActiveProject())?(e="projects/"+n.name+"/status",t&&(e+="?remote=true"),$.getJSON(e,function(e){U(e),$("#red-ui-sidebar-vc-local-branch").text(e.branches.local),$("#red-ui-sidebar-vc-remote-branch").text(e.branches.remote||RED._("sidebar.project.versionControl.none"));var t=e.commits.ahead||0,o=e.commits.behind||0;n.git.hasOwnProperty("remotes")?e.branches.hasOwnProperty("remoteError")&&"git_remote_gone"!==e.branches.remoteError.code?($("#red-ui-sidebar-vc-repo-status-auth-issue").show(),$("#red-ui-sidebar-vc-repo-status-stats").hide(),$("#red-ui-sidebar-vc-repo-branch").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-toolbar-message").hide(),$("#red-ui-sidebar-vc-repo-toolbar-error-message").show()):($("#red-ui-sidebar-vc-repo-toolbar-message").show(),$("#red-ui-sidebar-vc-repo-toolbar-error-message").hide(),$("#red-ui-sidebar-vc-repo-status-auth-issue").hide(),$("#red-ui-sidebar-vc-repo-status-stats").show(),$("#red-ui-sidebar-vc-repo-branch").prop("disabled",!1),$("#red-ui-sidebar-vc-repo-status-button").show(),e.branches.hasOwnProperty("remote")?J(t,o):($("#red-ui-sidebar-vc-commits-ahead").text(""),$("#red-ui-sidebar-vc-commits-behind").text(""),$("#red-ui-sidebar-vc-repo-toolbar-message").text(RED._("sidebar.project.versionControl.notTracking")),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!0))):$("#red-ui-sidebar-vc-repo-status-button").hide(),i=!1,$(".red-ui-sidebar-vc-shade").hide()}).fail(function(){i=!1})):($(".red-ui-sidebar-vc-shade").show(),x.editableList("empty"),k.editableList("empty"),j.editableList("empty"))))}function J(e,t){$("#red-ui-sidebar-vc-commits-ahead").text(e),$("#red-ui-sidebar-vc-commits-behind").text(t),s?($("#red-ui-sidebar-vc-repo-toolbar-message").text(RED._("sidebar.project.versionControl.statusUnmergedChanged")),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!0)):0<e&&0===t?($("#red-ui-sidebar-vc-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsAhead",{count:e})),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!1)):0===e&&0<t?($("#red-ui-sidebar-vc-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsBehind",{count:t})),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!1),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!0)):0<e&&0<t?($("#red-ui-sidebar-vc-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})),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!1),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!0)):0===e&&0===t&&($("#red-ui-sidebar-vc-repo-toolbar-message").text(RED._("sidebar.project.versionControl.repositoryUpToDate")),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!0))}function q(){V(),RED.sidebar.show("version-control")}return{init:function(e){function i(o){o=o||{};var e=I.addSpinnerOverlay(m).addClass("red-ui-component-spinner-contain"),t=$('<div style="position: relative; bottom: 60px;"></div>').appendTo(e),n=($('<button class="red-ui-button"></button>').text(RED._("eventLog.view")).appendTo(t).on("click",function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.projects.getActiveProject()),t=(RED.eventLog.startEvent("Pull changes"+(n.git.branches.remoteAlt?" : "+n.git.branches.remoteAlt:"")),"projects/"+n.name+"/pull");n.git.branches.remoteAlt&&(t+="/"+n.git.branches.remoteAlt),(o.setUpstream||o.allowUnrelatedHistories)&&(t+="?"),o.setUpstream&&(t+="setUpstream=true",o.allowUnrelatedHistories)&&(t+="&"),o.allowUnrelatedHistories&&(t+="allowUnrelatedHistories=true"),I.sendRequest({url:t,type:"POST",responses:{0:function(e){console.log(e)},200:function(e){o.setUpstream&&n.git.branches.remoteAlt&&(n.git.branches.remote=n.git.branches.remoteAlt,delete n.git.branches.remoteAlt),V(!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){V(!0),v()},git_connection_failed:function(e){RED.notify(RED._("sidebar.project.versionControl.connectionFailed")+e.toString(),"warning")},git_pull_unrelated_history:function(e){var t=RED.notify(RED._("sidebar.project.versionControl.pullUnrelatedHistory"),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.close()}},{text:RED._("sidebar.project.versionControl.pullChanges"),click:function(){t.close(),o.allowUnrelatedHistories=!0,i(o)}}]})},"*":function(e){I.reportUnexpectedError(e)}}}},{}).always(function(){e.remove()})}I=e,RED.actions.add("core:show-version-control-tab",q),RED.events.on("deploy",function(){var e,t=RED.projects.getActiveProject();t&&(e=RED.settings.theme("projects.workflow.mode","manual"),"auto"===(((RED.settings.get("git")||{}).workflow||{}).mode||e)?V(!0):(M={},x.editableList("empty"),k.editableList("empty"),j.editableList("empty"),$.getJSON("projects/"+t.name+"/status",function(e){U(e)})))}),RED.events.on("login",function(){V(!0)}),D=$("<div>",{class:"red-ui-sidebar-vc"});var e=$("<div>",{class:"red-ui-sidebar-vc-stack"}).appendTo(D),e=(R=RED.stack.create({container:e,fill:!0,singleExpanded:!0}),(S=R.add({title:RED._("sidebar.project.versionControl.localChanges"),collapsible:!0})).expand(),S.content.css({height:"100%"}),$('<div style="float: right"></div>').appendTo(S.header)),t=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-refresh"></i></button>').appendTo(e).on("click",function(e){e.preventDefault(),e.stopPropagation(),V(!0)}),o=(RED.popover.tooltip(t,RED._("sidebar.project.versionControl.refreshChanges")),P={label:RED._("sidebar.project.versionControl.none")},A={label:RED._("sidebar.project.versionControl.conflictResolve")},$('<div class="red-ui-sidebar-vc-change-container"></div>').appendTo(S.content)),n=$('<div class="red-ui-sidebar-vc-change-header">'+RED._("sidebar.project.versionControl.localFiles")+"</div>").appendTo(o),a=(_=$('<button class="red-ui-button red-ui-button-small" style="position: absolute; right: 5px; top: 5px;"><i class="fa fa-plus"></i> '+RED._("sidebar.project.versionControl.all")+"</button>").appendTo(n).on("click",function(e){e.preventDefault(),e.stopPropagation(),G(Object.keys(M).filter(function(e){return" "!==M[e].treeStatus}),!0)}),RED.popover.tooltip(_,RED._("sidebar.project.versionControl.stageAllChange")),(x=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(o)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,o){z(e,o,o.treeStatus,"unstaged")},sort:function(e,t){return"?"===e.treeStatus&&"?"!==t.treeStatus?1:"?"!==e.treeStatus&&"?"===t.treeStatus?-1:e.file.localeCompare(t.file)}}),C=$('<div class="red-ui-sidebar-vc-change-container"></div>').appendTo(S.content),n=$('<div class="red-ui-sidebar-vc-change-header">'+RED._("sidebar.project.versionControl.unmergedChanges")+"</div>").appendTo(C),e=$('<div style="position: absolute; right: 5px; top: 5px;"></div>').appendTo(n),$('<button class="red-ui-button red-ui-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.abortMerge")+"</button>").appendTo(e).on("click",function(e){e.preventDefault(),e.stopPropagation();var t=I.addSpinnerOverlay(C),e=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),I.sendRequest({url:"projects/"+e.name+"/merge",type:"DELETE",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),V(!0)},400:{unexpected_error:function(e){console.log(e)}}}}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})})),s=((j=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(C)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,o){o===A&&(o.button={label:RED._("sidebar.project.versionControl.commit"),click:function(e){e.preventDefault(),e.stopPropagation(),r()}}),z(e,o,o.treeStatus,"unmerged")},sort:function(e,t){return"?"===e.treeStatus&&"?"!==t.treeStatus?1:"?"!==e.treeStatus&&"?"===t.treeStatus?-1:e.file.localeCompare(t.file)}}),$('<div class="red-ui-sidebar-vc-change-container"></div>').appendTo(S.content)),n=$('<div class="red-ui-sidebar-vc-change-header">'+RED._("sidebar.project.versionControl.changeToCommit")+"</div>").appendTo(s),e=$('<div style="position: absolute; right: 5px; top: 5px;"></div>').appendTo(n),r=function(){d.val(""),c.prop("disabled",!0),o.css("height","30px"),C.is(":visible")?(C.css("height","30px"),s.css("height","calc(100% - 60px - 175px)")):s.css("height","calc(100% - 30px - 175px)"),commitBox.show(),setTimeout(function(){commitBox.css("height","175px")},10),_.prop("disabled",!0),T.prop("disabled",!0),L.prop("disabled",!0),a.prop("disabled",!0),d.trigger("focus")},d=(L=$('<button class="red-ui-button red-ui-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.commit")+"</button>").appendTo(e).on("click",function(e){e.preventDefault(),e.stopPropagation(),r()}),RED.popover.tooltip(L,RED._("sidebar.project.versionControl.commitChanges")),T=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-minus"></i> '+RED._("sidebar.project.versionControl.all")+"</button>").appendTo(e).on("click",function(e){e.preventDefault(),e.stopPropagation(),G(Object.keys(M).filter(function(e){return" "!==M[e].indexStatus&&"?"!==M[e].indexStatus}),!1)}),RED.popover.tooltip(T,RED._("sidebar.project.versionControl.unstageAllChange")),(k=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(s)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,o){z(e,o,o.indexStatus,"staged")},sort:function(e,t){return e.file.localeCompare(t.file)}}),commitBox=$('<div class="red-ui-sidebar-vc-slide-box red-ui-sidebar-vc-slide-box-bottom"></div>').hide().appendTo(S.content),$("<textarea></textarea>").attr("placeholder",RED._("sidebar.project.versionControl.commitPlaceholder")).appendTo(commitBox).on("change keyup paste",function(){c.prop("disabled",""===$(this).val().trim())})),n=$('<div class="red-ui-sidebar-vc-slide-box-toolbar button-group">').appendTo(commitBox),l=$('<button class="red-ui-button">'+RED._("sidebar.project.versionControl.cancelCapital")+"</button>").appendTo(n).on("click",function(e){e.preventDefault(),d.val(""),o.css("height",""),C.css("height",""),s.css("height",""),commitBox.css("height",0),setTimeout(function(){commitBox.hide()},200),_.prop("disabled",!1),T.prop("disabled",!1),L.prop("disabled",!1),a.prop("disabled",!1)}),c=$('<button class="red-ui-button">'+RED._("sidebar.project.versionControl.commitCapital")+"</button>").appendTo(n).on("click",function(e){e.preventDefault();var t=I.addSpinnerOverlay(c).addClass("red-ui-component-spinner-sidebar"),e=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),I.sendRequest({url:"projects/"+e.name+"/commit",type:"POST",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),l.trigger("click"),V(!0)},400:{"*":function(e){I.reportUnexpectedError(e)}}}},{message:d.val()}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}),n=R.add({title:RED._("sidebar.project.versionControl.commitHistory"),collapsible:!0}),e=(e=$('<div style="float: right"></div>').appendTo(n.header),t=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-refresh"></i></button>').appendTo(e).on("click",function(e){e.preventDefault(),e.stopPropagation(),V(!0,!0)}),RED.popover.tooltip(t,RED._("sidebar.project.versionControl.refreshCommitHistory")),$('<div class="red-ui-sidebar-vc-change-header" style="text-align: right;"></div>').appendTo(n.content)),u=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-code-fork"></i> '+RED._("sidebar.project.versionControl.branch")+' <span id="red-ui-sidebar-vc-local-branch"></span></button>').appendTo(e).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?f():(v(),N.show(),$(this).addClass("selected"),e=RED.projects.getActiveProject(),g.refresh("projects/"+e.name+"/branches"),h.show(),setTimeout(function(){h.css("height","215px"),g.focus()},100))}),p=(RED.popover.tooltip(u,RED._("sidebar.project.versionControl.changeLocalBranch")),$('<button class="red-ui-button red-ui-button-small" style="margin-left: 10px;" id="red-ui-sidebar-vc-repo-status-button"><span id="red-ui-sidebar-vc-repo-status-stats"><i class="fa fa-long-arrow-up"></i> <span id="red-ui-sidebar-vc-commits-ahead"></span> <i class="fa fa-long-arrow-down"></i> <span id="red-ui-sidebar-vc-commits-behind"></span></span><span id="red-ui-sidebar-vc-repo-status-auth-issue"><i class="fa fa-warning"></i></span></button>').appendTo(e).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?v():(f(),N.show(),$(this).addClass("selected"),e=RED.projects.getActiveProject(),$("#red-ui-sidebar-vc-repo-toolbar-set-upstream-row").toggle(!!e.git.branches.remoteAlt),m.show(),setTimeout(function(){m.css("height","265px")},100))})),f=(RED.popover.tooltip(p,RED._("sidebar.project.versionControl.manageRemoteBranch")),O=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0px; right:0; left:0;"}).appendTo(n.content),N=$('<div class="red-ui-shade" style="z-Index: 3"></div>').css("top","30px").hide().appendTo(n.content),O.editableList({addButton:!1,scrollOnAdd:!1,addItem:function(t,e,o){var n,i;t.addClass("red-ui-sidebar-vc-commit-entry"),o.url?(t.addClass("red-ui-sidebar-vc-commit-more"),t.text("+ "+(o.total-o.totalKnown)+RED._("sidebar.project.versionControl.moreCommits")),t.on("click",function(e){e.preventDefault(),F(o.url,O,t,o.limit,o.before)})):(t.on("click",function(e){var t=RED.projects.getActiveProject();t&&$.getJSON("projects/"+t.name+"/commits/"+o.sha,function(e){e.project=t,e.parents=o.parents,e.oldRev=0!==o.parents[0].length?o.sha+"~1":o.sha,e.newRev=o.sha,e.oldRevTitle=0!==o.parents[0].length?RED._("sidebar.project.versionControl.commitCapital")+" "+o.sha.substring(0,7)+"~1":" ",e.newRevTitle=RED._("sidebar.project.versionControl.commitCapital")+" "+o.sha.substring(0,7),e.date=B(parseInt(o.date)),RED.diff.showCommitDiff(e)})}),n=$("<div>").appendTo(t),$('<div class="red-ui-sidebar-vc-commit-subject">').text(o.subject).appendTo(n),o.refs&&(i=$('<div class="red-ui-sidebar-vc-commit-refs">').appendTo(n),o.refs.forEach(function(e){var t=e;/HEAD -> /.test(e)&&(t=e.substring(8)),$('<span class="red-ui-sidebar-vc-commit-ref">').text(t).appendTo(i)}),t.addClass("red-ui-sidebar-vc-commit-head")),$('<div class="red-ui-sidebar-vc-commit-sha">').text(o.sha.substring(0,7)).appendTo(n),$('<div class="red-ui-sidebar-vc-commit-date">').text(B(parseInt(o.date))).appendTo(n))}}),function(e){u.removeClass("selected"),h.css("height","0"),N.hide(),setTimeout(function(){h.hide(),e&&e()},200)}),h=$('<div class="red-ui-sidebar-vc-slide-box red-ui-sidebar-vc-slide-box-top" style="top:30px;"></div>').hide().appendTo(n.content),g=($('<div class="red-ui-sidebar-vc-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.changeLocalBranch")).appendTo(h),I.createBranchList({placeholder:RED._("sidebar.project.versionControl.createBranchPlaceholder"),container:h,onselect:function(e){if(e.current)return f();var t=I.addSpinnerOverlay(h),o=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),I.sendRequest({url:"projects/"+o.name+"/branches",type:"POST",requireCleanWorkspace:!0,cancel:function(){t.remove()},responses:{0:function(e){t.remove(),console.log(e)},200:function(e){f(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)})}})),m=$('<div class="red-ui-sidebar-vc-slide-box red-ui-sidebar-vc-slide-box-top" style="top:30px"></div>').hide().appendTo(n.content),v=function(){$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("checked",!1),p.removeClass("selected"),m.css("height","0"),N.hide(),setTimeout(function(){m.hide(),b()},200)},b=function(e){y.hasClass("selected")&&(y.removeClass("selected"),w.height(0),m.css("height","265px"),setTimeout(function(){w.hide(),e&&e()},200))},t=($('<div class="red-ui-sidebar-vc-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.manageRemoteBranch")).appendTo(m),$('<div style="margin-bottom: 5px;"></div>').appendTo(m)),y=$('<button id="red-ui-sidebar-vc-repo-branch" class="red-ui-sidebar-vc-repo-action red-ui-button"><i class="fa fa-code-fork"></i> '+RED._("sidebar.project.versionControl.remote")+': <span id="red-ui-sidebar-vc-remote-branch"></span></button>').appendTo(t).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?b():($(this).addClass("selected"),e=RED.projects.getActiveProject(),E.refresh("projects/"+e.name+"/branches/remote"),w.show(),setTimeout(function(){w.height(180),m.css("height","445px"),E.focus()},100))}),e=($('<div id="red-ui-sidebar-vc-repo-toolbar-message" class="red-ui-sidebar-vc-slide-box-header" style="min-height: 100px;"></div>').appendTo(m),$('<div id="red-ui-sidebar-vc-repo-toolbar-error-message" class="red-ui-sidebar-vc-slide-box-header" style="min-height: 100px;"></div>').hide().appendTo(m)),n=($('<div style="margin-top: 10px;"><i class="fa fa-warning"></i> '+RED._("sidebar.project.versionControl.unableToAccess")+"</div>").appendTo(e),$('<div style="margin: 10px 30px; text-align: center"></div>').appendTo(e)),w=($('<button class="red-ui-button" style="width: 80%;"><i class="fa fa-refresh"></i> '+RED._("sidebar.project.versionControl.retry")+"</button>").appendTo(n).on("click",function(e){e.preventDefault();var e=RED.projects.getActiveProject(),t=I.addSpinnerOverlay(m).addClass("red-ui-component-spinner-contain");I.sendRequest({url:"projects/"+e.name+"/branches/remote",type:"GET",responses:{0:function(e){console.log(e)},200:function(e){V(!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(){t.remove()})}),$('<div class="red-ui-sidebar-vc-slide-box-header" style="height: 20px;"><label id="red-ui-sidebar-vc-repo-toolbar-set-upstream-row" for="red-ui-sidebar-vc-repo-toolbar-set-upstream" class="hide"><input type="checkbox" id="red-ui-sidebar-vc-repo-toolbar-set-upstream"> '+RED._("sidebar.project.versionControl.setUpstreamBranch")+"</label></div>").appendTo(m),$('<div style="height: 0;overflow:hidden; transition: height 0.2s ease-in-out;"></div>').hide().appendTo(t)),E=I.createBranchList({placeholder:RED._("sidebar.project.versionControl.createRemoteBranchPlaceholder"),currentLabel:RED._("sidebar.project.versionControl.upstream"),remotes:function(){var e=RED.projects.getActiveProject();return Object.keys(e.git.remotes)},container:w,onselect:function(e){$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("checked",!1),$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("disabled",!1),$("#red-ui-sidebar-vc-remote-branch").text(e.name+(e.create?" *":""));var n=RED.projects.getActiveProject();n.git.branches.remote===e.name?delete n.git.branches.remoteAlt:n.git.branches.remoteAlt=e.name,$("#red-ui-sidebar-vc-repo-toolbar-set-upstream-row").toggle(!!n.git.branches.remoteAlt),b(function(){var t,o;e.create?(n.git.branches.remote?$("#red-ui-sidebar-vc-repo-toolbar-message").text(RED._("sidebar.project.versionControl.selectUpstreamBranch")):($("#red-ui-sidebar-vc-repo-toolbar-message").text(RED._("sidebar.project.versionControl.trackedUpstreamBranch")),$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("checked",!0),$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("disabled",!0)),$("#red-ui-sidebar-vc-repo-pull").prop("disabled",!0),$("#red-ui-sidebar-vc-repo-push").prop("disabled",!1)):(t=Date.now(),o=I.addSpinnerOverlay($("#red-ui-sidebar-vc-repo-toolbar-message")).addClass("red-ui-component-spinner-contain"),$.getJSON("projects/"+n.name+"/branches/remote/"+e.name+"/status",function(e){setTimeout(function(){J(e.commits.ahead,e.commits.behind),o.remove()},Math.max(400-(Date.now()-t),0))}))})}}),e=$('<div style="margin-bottom: 5px;"></div>').appendTo(m);$('<button id="red-ui-sidebar-vc-repo-push" class="red-ui-sidebar-vc-repo-sub-action red-ui-button"><i class="fa fa-long-arrow-up"></i> <span data-i18n="sidebar.project.versionControl.push"></span></button>').appendTo(e).on("click",function(e){e.preventDefault();var t=I.addSpinnerOverlay(m).addClass("red-ui-component-spinner-contain"),e=$('<div style="position: relative; bottom: 60px;"></div>').appendTo(t),o=($('<button class="red-ui-button"></button>').text(RED._("eventLog.view")).appendTo(e).on("click",function(e){e.preventDefault(),RED.actions.invoke("core:show-event-log")}),RED.projects.getActiveProject()),e=(RED.eventLog.startEvent("Push changes"+(o.git.branches.remoteAlt?" : "+o.git.branches.remoteAlt:"")),"projects/"+o.name+"/push"),n=(o.git.branches.remoteAlt&&(e+="/"+o.git.branches.remoteAlt),$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("checked"));n&&(e+="?u=true"),I.sendRequest({url:e,type:"POST",responses:{0:function(e){console.log(e)},200:function(e){n&&o.git.branches.remoteAlt&&(o.git.branches.remote=o.git.branches.remoteAlt,delete o.git.branches.remoteAlt),V(!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()})}),$('<button id="red-ui-sidebar-vc-repo-pull" class="red-ui-sidebar-vc-repo-sub-action red-ui-button"><i class="fa fa-long-arrow-down"></i> <span data-i18n="sidebar.project.versionControl.pull"></span></button>').appendTo(e).on("click",function(e){e.preventDefault(),i({setUpstream:$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("checked")})}),$('<div class="red-ui-shade red-ui-sidebar-vc-shade">').appendTo(D),RED.sidebar.addTab({id:"version-control",label:RED._("sidebar.project.versionControl.history"),name:RED._("sidebar.project.versionControl.projectHistory"),content:D,enableOnEdit:!1,pinned:!0,iconClass:"fa fa-code-fork",action:"core:show-version-control-tab",onchange:function(){setTimeout(function(){R.resize()},10)}})},show:q,refresh:V,showLocalChanges:function(){RED.sidebar.show("version-control"),S.expand()}}}(),RED.touch=RED.touch||{},RED.touch.radialMenu=function(){var p=null,f=!1,h=!1,g=null;return{show:function(e,a,t){f=!0;try{for(var n=(p=d3.select("body").append("div").classed("red-ui-editor-radial-menu",!0).on("touchstart",function(){u(),d3.event.preventDefault()})).append("div").style({top:a[1]-80+"px",left:a[0]-80+"px"}),s=[],o=t.length,i=Math.max(Math.PI/(o-1),Math.PI/4),r=Math.PI,d=0;d<o;d++){var l=Math.floor(80*Math.cos(r)),c=Math.floor(80*Math.sin(r));t[d].name&&!function(e,t,o){o.el=n.append("div").classed("red-ui-editor-radial-menu-opt",!0).style({top:t+80-25+"px",left:e+80-25+"px"}).classed("red-ui-editor-radial-menu-opt-disabled",!!o.disabled),o.el.html(o.name),o.x=e,o.y=t,s.push(o),o.el.on("touchstart",function(){o.el.classed("red-ui-editor-radial-menu-opt-active",!0),d3.event.preventDefault(),d3.event.stopPropagation()}),o.el.on("touchend",function(){u(),o.onselect(),d3.event.preventDefault(),d3.event.stopPropagation()})}(l,c,t[d]),r+=i}var u=function(){f=!1,g=null,p.remove(),p=null};e.on("touchend.radial",function(){if(e.on("touchend.radial",null),e.on("touchmenu.radial",null),g){try{g.onselect()}catch(e){RED._debug(e)}u()}else h&&u()}),e.on("touchmove.radial",function(){try{for(var e,t=d3.event.touches.item(0),o=[t.pageX-a[0],t.pageY-a[1]],n=0;n<s.length;n++){var i=s[n];i.disabled||(o[0]>i.x-30&&o[0]<i.x+30&&o[1]>i.y-30&&o[1]<i.y+30?i!==g&&(i.el.classed("selected",!0),g=i):(i===g&&(g=null),i.el.classed("selected",!1)))}g||(e=Math.abs(o[0]*o[0]+o[1]*o[1]),h=6400<e)}catch(e){RED._debug(e)}})}catch(e){RED._debug(e)}},active:function(){return f}}}(),RED.tourGuide=function(){var p,f,h,g,m,v,b=[],n={};function t(t,o){n[t]?o(null,n[t]):import(t).then(function(e){n[t]=e.default,o(null,n[t])}).catch(function(e){o(e)})}function y(){var e,t;m&&(v?f.css({left:$(window).width()/2+"px",top:$(window).height()/2+"px",width:"0px",height:"0px"}):(e=m[0].getBoundingClientRect(),t=Math.max(50,1.5*Math.max(e.width,e.height)),f.css({left:e.left+e.width/2+"px",top:e.top+e.height/2+"px",width:2*t+"px",height:2*t+"px"}),f[0].offsetHeight,f.addClass("transition"),f.css({width:t+"px",height:t+"px"})),h)&&h.move({target:m})}function w(e,t,o){function n(){b.forEach(function(e){"dom-event"===e.type?e.target[0].removeEventListener(e.event,e.listener,e.opts):"nr-event"===e.type&&RED.events.off(e.event,e.listener)}),b=[],setTimeout(function(){o()},0)}if(e.complete){if(0!==e.complete.length)return h&&(h.element.hide(),v||(v=!0,y())),void e.complete.call(t,function(){h&&h.element.show(),n()});e.complete.call(t)}n()}function E(e){var t,o;return"string"==typeof e?e:(t=RED.i18n.lang()||"en-US",o=Object.keys(e),e[t]||e["en-US"]||e[o[0]])}return{load:t,run:function(e,n){n=n||function(e){e&&console.error(e)},t(e,function(e,t){var a,o,s,r;function u(e){$(window).off("resize.red-ui-tourGuide"),$(document).off("keydown.red-ui-tourGuide"),h&&h.close(),h=g=null,p.remove(),p=null,o(e)}e?console.warn("Error loading tour:",e):(a=t,o=n,p=$('<div class="red-ui-tourGuide-shade"></div>').appendTo(document.body),f=$('<div class="red-ui-tourGuide-shade-focus"></div>').appendTo(p),$(window).on("resize.red-ui-tourGuide",function(){y()}),r={index:s=0,count:a.steps.length},function e(t){if(!1===t)u(!1);else if(s===a.steps.length)u();else{r.index=s;try{d=a.steps[s++],l=r,c=e,p.fadeIn();var o=d,n=l,i=function(){var e,t=d.direction||"bottom";if(v=!1,"string"==typeof d.element?m=$(d.element):"function"==typeof d.element?m=d.element.call(l):d.element?m=d.element:(m=$(".red-ui-editor"),v=!0,t="inset"),0===m.length)throw m=null,p.hide(),new Error("Element not found");$(window).width()<400&&(m=$(".red-ui-editor"),v=!0,t="inset"),e=m.css("z-index"),v||!d.interactive&&!d.wait||m.css("z-index",2002),y(),g?g.empty():g=$('<div style="position:relative"></div>'),$('<button type="button" class="red-ui-button red-ui-button-small" style="float: right; margin-top: -4px; margin-right: -4px;"><i class="fa fa-times"></i></button>').appendTo(g).click(function(e){e.preventDefault(),w(d,l,function(){c(!1)})});var o,n,i=$('<div class="red-ui-tourGuide-popover-description"></div>').appendTo(g),i=(d.titleIcon&&$('<h2><i class="'+d.titleIcon+'"></i></h2>').appendTo(i),d.title&&$("<h2>").text(E(d.title)).appendTo(i),$("<div>").css("text-align","left").html(E(d.description)).appendTo(i),d.image&&$(`<img src="red/tours/${d.image}" />`).appendTo(i),$("<div>",{class:"red-ui-tourGuide-toolbar"}).appendTo(g)),i=($("<small>").text(l.index+1+"/"+l.count).appendTo(i),!v&&d.wait||(o=$('<button type="button" class="red-ui-button" style="position: absolute; right:0;bottom:0;"></button>').appendTo(i).one("click",function(e){e.preventDefault(),r()}),l.index===l.count-1?$("<span></span>").text(RED._("common.label.close")).appendTo(o):0===l.index?($("<span>start</span>").text(RED._("tourGuide.start")).appendTo(o),$('<span style="margin-left: 6px"><i class="fa fa-chevron-right"></i></span>').appendTo(o)):l.index<l.count-1&&($("<span></span>").text(RED._("tourGuide.next")).appendTo(o),$('<span style="margin-left: 6px"><i class="fa fa-chevron-right"></i></span>').appendTo(o))),d.width),a=(v&&(i=500),Math.min($(window).width()-10,Math.max(i||0,300))),s=(h=h||RED.popover.create({target:m,width:i||"auto",maxWidth:a+"px",direction:t,class:"red-ui-tourGuide-popover"+(v?" ":""),trigger:"manual",content:g}).open(),$(document).off("keydown.red-ui-tourGuide"),$(document).on("keydown.red-ui-tourGuide",function(e){"Escape"!==e.key&&"Esc"!==e.key||(e.preventDefault(),e.stopPropagation(),w(d,l,function(){c(!1)}))}),h.element.toggleClass("red-ui-tourGuide-popover-full",!!v),h.move({target:m,width:i||"auto",maxWidth:a+"px",direction:t}),setTimeout(function(){h.element.position().left<0&&h.element.css({left:0})},100),o&&setTimeout(function(){o.focus()},100),m[0]instanceof SVGElement),r=(d.fallback&&f.one("mouseenter",function(e){setTimeout(function(){var e=m[0].getBoundingClientRect(),e=Math.max(50,1.5*Math.max(e.width,e.height));f.css({width:4*e+"px",height:4*e+"px"}),p.fadeOut(),h.move({target:$(".red-ui-editor"),direction:d.fallback,offset:10,transition:!0})},s?0:500)}),function(){f.removeClass("transition"),m.css("z-index",e),w(d,l,c)});d.wait&&("dom-event"===d.wait.type?(i=m,d.wait.element&&("string"==typeof d.wait.element?i=$(d.wait.element):"function"==typeof d.wait.element&&(i=d.wait.element.call(l))),n={type:d.wait.type,target:i,event:d.wait.event,listener:function(){r()},opts:{once:!0}},b.push(n),i[0].addEventListener(n.event,n.listener,n.opts)):"nr-event"===d.wait.type&&(n={type:d.wait.type,event:d.wait.event,listener:function(){d.wait.filter&&!d.wait.filter.apply(l,arguments)||r()}},b.push(n),RED.events.on(n.event,n.listener)))};if(o.prepare){if(0!==o.prepare.length)return h&&(h.element.hide(),v||(v=!0,y())),void o.prepare.call(n,function(){h&&h.element.show(),i()});o.prepare.call(n)}i()}catch(e){u(e)}var d,l,c}}())})},list:function(){return[{id:"4_0",label:"4.0",path:"./tours/welcome.js"},{id:"3_1",label:"3.1",path:"./tours/3.1/welcome.js"},{id:"3_0",label:"3.0",path:"./tours/3.0/welcome.js"},{id:"2_2",label:"2.2",path:"./tours/2.2/welcome.js"},{id:"2_1",label:"2.1",path:"./tours/2.1/welcome.js"}]},reset:function(){RED.settings.set("editor.tours.welcome","")}}}();