!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/node-red/packages/node_modules/@node-red/editor-client/public/red/   drwxr-xr-x
Free 13.12 GB of 57.97 GB (22.63%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     red.min.js (827.36 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/**
 * 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},Set.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 n(){f.reportProgress(RED._("event.loadPlugins"),10),$.ajax({headers:{Accept:"application/json"},cache:!1,url:"plugins",success:function(e){f.reportProgress(RED._("event.loadPlugins"),13),RED.i18n.loadPluginCatalogs(function(){!function(n){f.reportProgress(RED._("event.loadPlugins",{count:""}),17);var e=localStorage.getItem("editor-language")||RED.i18n.detectLanguage();$.ajax({headers:{Accept:"text/html","Accept-Language":e},cache:!1,url:"plugins",success:function(e){var o=e.trim().split(/(?=<!-- --- \[red-plugin:\S+\] --- -->)/),i=(o.length,function(){var e,t;0===o.length?n():(e=o.shift(),t=i,a(e,/<!-- --- \[red-plugin:(\S+)\] --- -->/.exec(e.trim()),"#red-ui-editor-plugin-configs",t))});i()}})}(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(){s(t)})}})})})}})}function a(e,t,n,a){var r;a=a||function(){},t?(r=t[1],RED._loadingModule=r):r="unknown";try{var s=!1,d=$("<div>"+e+"</div>"),o=d.find("script"),l=o.length;o.each(function(e,t){var o,i=$(t).attr("src");i&&!/^\s*(https?:|\/|\.)/.test(i)?($(t).remove(),(o=document.createElement("script")).onload=function(){0===--l&&($(n).append(d),delete RED._loadingModule,a())},"module"===$(t).attr("type")&&(o.type="module"),$(n).append(o),o.src=RED.settings.apiRootUrl+i,s=!0):((/\/ace.js$/.test(i)||/\/ext-language_tools.js$/.test(i))&&(console.warn("Blocked attempt to load",i,"by",r),$(t).remove()),l--)}),s||($(n).append(d),delete RED._loadingModule,a())}catch(e){RED.notify(RED._("notification.errors.failedToAppendNode",{module:r,error:e.toString()}),{type:"error",timeout:1e4}),console.log("["+r+"] "+e.toString()),delete RED._loadingModule,a()}}function r(e,t){a(e,/<!-- --- \[red-module:(\S+)\] --- -->/.exec(e.trim()),"#red-ui-editor-node-configs",t)}function s(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,i=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){d(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)),l(e)})}):d(function(){RED.sidebar.info.refresh(),l()})):r(t.shift(),i)};i()}})}function d(o){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{RED.nodes.import(e.flows),RED.nodes.dirty(!1),RED.view.redraw(!0),/^#flow\/.+$/.test(t)&&RED.workspaces.show(t.substring(6),!0),0===RED.workspaces.active()&&0<RED.workspaces.count()&&RED.workspaces.show(RED.nodes.getWorkspaceOrder()[0])}catch(e){console.warn(e),RED.notify(RED._("event.importError",{message:e.message}),{fixed:!0,type:"error"})}}o()}})}function l(t){var n={};RED.comms.subscribe("notification/#",function(e,t){var o,i=e.split("/")[1];if("runtime-deploy"!==i&&"node"!==i)return"project-update"===i?(f.start(RED._("event.loadingProject"),0),RED.nodes.clear(),RED.history.clear(),RED.view.redraw(!0),void RED.projects.refresh(function(){d(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()})})):void(t.text?(t.default=t.text,o=RED._(t.text,t),e={type:t.type,fixed:void 0===t.timeout,timeout:t.timeout,id:i},"runtime-state"===i&&(RED.events.emit("runtime-state",t),"safe-mode"===t.error?e.buttons=[{text:RED._("common.label.close"),click:function(){n[i].hideNotification()}}]:"missing-types"===t.error?(o+="<ul><li>"+t.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.projects.getActiveProject()?e.buttons=[{text:RED._("notification.label.manage-project-dep"),click:function(){n[i].hideNotification(),RED.projects.settings.show("deps")}}]:e.buttons=[{text:RED._("common.label.close"),click:function(){n[i].hideNotification()}}]):"missing-modules"===t.error?(o+="<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>",e.buttons=[{text:RED._("common.label.close"),click:function(){n[i].hideNotification()}}]):"credentials_load_failed"===t.error?RED.settings.theme("projects.enabled",!1)?RED.user.hasPermission("projects.write")&&(e.buttons=[{text:RED._("notification.project.setupCredentials"),click:function(){n[i].hideNotification(),RED.projects.showCredentialsPrompt()}}]):e.buttons=[{text:RED._("common.label.close"),click:function(){n[i].hideNotification()}}]:"missing_flow_file"===t.error||"missing_package_file"===t.error?RED.user.hasPermission("projects.write")&&(e.buttons=[{text:RED._("notification.project.setupProjectFiles"),click:function(){n[i].hideNotification(),RED.projects.showFilesPrompt()}}]):"project_empty"===t.error?RED.user.hasPermission("projects.write")&&(e.buttons=[{text:RED._("notification.project.no"),click:function(){n[i].hideNotification()}},{text:RED._("notification.project.createDefault"),click:function(){n[i].hideNotification(),RED.projects.createDefaultFileSet()}}]):"git_merge_conflict"===t.error&&(RED.nodes.clear(),RED.sidebar.versionControl.refresh(!0),RED.user.hasPermission("projects.write")&&(e.buttons=[{text:RED._("notification.project.mergeConflict"),click:function(){n[i].hideNotification(),RED.sidebar.versionControl.showLocalChanges()}}]))),n.hasOwnProperty(i)?n[i].update(o,e):n[i]=RED.notify(o,e)):n.hasOwnProperty(i)&&(n[i].close(),delete n[i],"runtime-state"===i&&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/node/#",function(e,i){var t,o,n;if("notification/node/added"==e)RED.settings.refreshSettings(function(e,t){var o=[];i.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){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")),s()});else if("notification/node/removed"==e){for(t=0;t<i.length;t++)o=i[t],RED.nodes.removeNodeSet(o.id).added&&(n="<ul><li>"+o.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeRemoved",{count:o.types.length})+n,"success"));s()}else"notification/node/enabled"==e?i.types&&RED.settings.refreshSettings(function(e,t){var o;RED.nodes.getNodeSet(i.id).added?(RED.nodes.enableNodeSet(i.id),n="<ul><li>"+i.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeEnabled",{count:i.types.length})+n,"success")):(o=localStorage.getItem("editor-language")||RED.i18n.detectLanguage(),$.ajax({headers:{Accept:"text/html","Accept-Language":o},cache:!1,url:"nodes/"+i.id,success:function(e){r(e),n="<ul><li>"+i.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:i.types.length})+n,"success")}}))}):"notification/node/disabled"==e?i.types&&(RED.nodes.disableNodeSet(i.id),n="<ul><li>"+i.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeDisabled",{count:i.types.length})+n,"success")):"notification/node/upgraded"==e&&(RED.notify(RED._("palette.event.nodeUpgraded",{module:i.module,version:i.version}),"success"),RED.nodes.registry.setModulePendingUpdated(i.module,i.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"),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 c(){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"}]}),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-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"},null,{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"}]}),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.rename"),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","http://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,i;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),i=$('<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"></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&&(i=$("<a>",{href:e.header.url}).appendTo(i)),e.header.image&&$("<img>",{src:e.header.image}).appendTo(i),e.header.title&&$("<span>").html(e.header.title).appendTo(i)),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.diff.init(),RED.deploy.init(RED.settings.theme("deployButton",null)),RED.keyboard.init(c),RED.nodes.init(),RED.comms.connect(),$("#red-ui-main-container").show(),n()})})},loader:f}}();RED.events=function(){var n={};return{on:function(e,t){n[e]=n[e]||[],n[e].push(t)},off:function(e,t){var o=n[e];if(o)for(var i=0;i<o.length;i++)if(o[i]===t)return void o.splice(i,1)},emit:function(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);if(RED.events.DEBUG&&console.warn(t,e),n[t])for(var o=0;o<n[t].length;o++)try{n[t][o].apply(null,e)}catch(e){console.warn("RED.events.emit error: ["+t+"] "+e.toString()),console.warn(e)}}}}(),RED.hooks=function(){var r={},s={};function d(e,t){var o=t.previousHook,i=t.nextHook;o?o.nextHook=i:r[e]=i,i&&(i.previousHook=o),t.removed=!0,o||i||delete r[e]}return{has:function(e){var t=e.split("."),e=t[0];return(t=t[1])?!(!s[t]||!s[t][e]):!!r[e]},clear:function(){r={},s={}},add:function(e,t){var o=e.split("."),i=o[0];if((o=o[1])&&s[o]&&s[o][i])throw new Error("Hook "+e+" already registered");var t={cb:t,previousHook:null,nextHook:null},n=r[i];if(void 0===n)r[i]=t;else{for(;null!==n.nextHook;)n=n.nextHook;(n.nextHook=t).previousHook=n}o&&(s[o]=s[o]||{},s[o][i]=t)},remove:function(e){var t=e.split("."),o=t[0],i=t[1];if(!i)throw new Error("Cannot remove hook without label: "+e);if(s[i])if("*"===o){for(var n=Object.keys(s[i]),a=0;a<n.length;a++)d(n[a],s[i][n[a]]);delete s[i]}else s[i][o]&&(d(o,s[i][o]),delete s[i][o],0===Object.keys(s[i]).length&&delete s[i])},trigger:function(e,i,n){var a=r[e];if(a)return function t(e){if(!a||e)return n&&n(e),e;if(a.removed)return a=a.nextHook,t();e=a.cb;if(1===e.length)try{var o=e(i);return!1===o?(n&&n(!1),o):(a=a.nextHook,t())}catch(e){return console.warn(e),n&&n(e),e}else try{e(i,function(e){void 0===e?(a=a.nextHook,t()):n&&n(e)})}catch(e){return console.warn(e),n&&n(e),e}}();n&&n()}}}(),RED.i18n=function(){var a;function r(){return navigator.language}return{init:function(e,t){a=e.apiRootUrl||"";var o=localStorage.getItem("editor-language")||r(),e={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:"__"}};o&&(e.lng=o),i18next.use(i18nextHttpBackend).init(e,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")||r()].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,i){var e=[localStorage.getItem("editor-language")||r()].concat(i18next.languages),n=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===--n&&i()}})})},loadNodeCatalogs:function(e){var t=[localStorage.getItem("editor-language")||r()].concat(i18next.languages),i=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===--i&&e()}})})},loadPluginCatalogs:function(e){var t=[localStorage.getItem("editor-language")||r()].concat(i18next.languages),i=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===--i&&e()}})})},detectLanguage:r}}(),RED.settings=function(){function i(){try{return"localStorage"in window&&null!==window.localStorage}catch(e){return}}function o(e){r=e}function n(o){s(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={},r={},s=function(i){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings",success:function(e){!function(e){for(var t in a)a.hasOwnProperty(t)&&RED.settings.hasOwnProperty(t)&&delete RED.settings[t];for(t in e)e.hasOwnProperty(t)&&(RED.settings[t]=e[t]);a=e}(e),i(null,e)},error:function(e,t,o){401===e.status?(/[?&]access_token=(.*?)(?:$|&)/.test(window.location.search)&&(window.location.search=""),RED.user.login(function(){s(i)})):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(r),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);t&&(t=t[1],RED.settings.set("auth-tokens",{access_token:t}),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"))}}),n(e)},load:n,loadUserSettings:d,refreshSettings:s,set:function(e,t){i()&&("auth-tokens"===e?localStorage.setItem(e,JSON.stringify(t)):(RED.utils.setMessageProperty(r,e,t),l()))},get:function(e,t){if(i()){if("auth-tokens"===e)return JSON.parse(localStorage.getItem(e));var o;try{o=RED.utils.getMessageProperty(r,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){i()&&("auth-tokens"===e?localStorage.removeItem(e):(delete r[e],l()))},theme:function(e,t){if(!RED.settings.editorTheme)return t;var o=e.split("."),i=RED.settings.editorTheme;try{for(var n=0;n<o.length;n++)i=i[o[n]];return void 0===i?t:i}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(),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()}}))}var n=/^((.+)\.)?read$/,a=/^((.+)\.)?write$/;return{init:function(){var e;RED.settings.user&&(RED.settings.editorTheme&&RED.settings.editorTheme.hasOwnProperty("userMenu")&&!RED.settings.editorTheme.userMenu||(e=$('<li><a id="red-ui-header-button-user" class="button hide" href="#"></a></li>').prependTo(".red-ui-header-toolbar"),(RED.settings.user.image?$('<span class="user-profile"></span>').css({backgroundImage:"url("+RED.settings.user.image+")"}):$('<i class="fa fa-user"></i>')).appendTo(e.find("a")),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(n){var e=0;if("credentials"==n.type){for(;e<n.prompts.length;e++){var t=n.prompts[e],o=$("<div/>",{class:"form-row"});$('<label for="node-dialog-login-'+t.id+'">'+RED._(t.label)+":</label><br/>").appendTo(o);var i=$('<input style="width: 100%" id="node-dialog-login-'+t.id+'" type="'+t.type+'" tabIndex="'+(e+1)+'"/>').appendTo(o);e<n.prompts.length-1&&i.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<n.prompts.length;o++){var i=n.prompts[o];t[i.id]=$("#node-dialog-login-"+i.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"==n.type)for(e=0;e<n.prompts.length;e++){var a,t=n.prompts[e],r=/[?&]session_message=(.*?)(?:$|&)/.exec(window.location.search);r&&(RED.sessionMessages=RED.sessionMessages||[],RED.sessionMessages.push(r[1]),history.pushState?(s=window.location.protocol+"//"+window.location.host+window.location.pathname,window.history.replaceState({path:s},"",s)):window.location.search=""),RED.sessionMessages&&(a=$("<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(a)}),delete RED.sessionMessages);var s,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&&(s=$("<span></span>").text(t.label),t.icon&&($("<i></i>",{class:"fa fa-2x "+t.icon,style:"vertical-align: middle"}).appendTo(r),s.css({verticalAlign:"middle",marginLeft:"8px"})),s.appendTo(r)),r.button()}l.cancelable&&$("#node-dialog-login-cancel").button().on("click",function(e){$("#node-dialog-login").dialog("close")});var d=n.image||"red/images/node-red-256.svg";$("#node-dialog-login-image").load(function(){u.dialog("open")}).attr("src",d),RED.keyboard.disable()}})},logout:function(){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 i;if(Array.isArray(o)){for(i=0;i<o.length;i++)if(!e(t,o[i]))return!1;return!0}if(Array.isArray(t)){if(0===t.length)return!1;for(i=0;i<t.length;i++)if(e(t[i],o))return!0;return!1}if("*"===t||t===o)return!0;{if("read"===t||"*.read"===t)return n.test(o);if("write"===t||"*.write"===t)return a.test(o)}return!1}(RED.settings.user.permissions||"",e))}}}(),RED.comms=function(){var n,a=null,r=null,l=null,c=10,u={},p=!1,f=0,h=!1;return{connect:function s(){var e,t,o;h=!0,RED.settings.apiRootUrl?(o=/^(https?):\/\/(.*)$/.exec(RED.settings.apiRootUrl))&&(console.log(o),e="ws"+("https"===o[1]?"s":"")+"://"+o[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 i=RED.settings.get("auth-tokens");function d(){for(var e in u)u.hasOwnProperty(e)&&n.send(JSON.stringify({subscribe:e}))}p=null!=i,(n=new WebSocket(e)).onopen=function(){f=0,a&&(r=setTimeout(function(){a.close(),a=null},1e3)),p?n.send(JSON.stringify({auth:i.access_token})):d()},n.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(){s()}));else for(var o=0;o<t.length;o++){var i=t[o];if(i.topic)for(var n in u)if(u.hasOwnProperty(n)&&new RegExp("^"+n.replace(/([\[\]\?\(\)\\\\$\^\*\.|])/g,"\\$1").replace(/\+/g,"[^/]+").replace(/\/#$/,"(/.*)?")+"$").test(i.topic)){var a=u[n];if(a)for(var r=0;r<a.length;r++)a[r](i.topic,i.data)}}},n.onclose=function(){h&&(r&&(clearTimeout(r),r=null),++f<10?(setTimeout(s,1e3),5<f&&null==a&&(a=RED.notify(RED._("notification.errors.lostConnection"),"error",!0))):f<20?setTimeout(s,2e3):(c=60,l=setInterval(function(){var e;0==--c?(a.update(RED._("notification.errors.lostConnection")),clearInterval(l),s()):(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),s()}))},1e3)))}},subscribe:function(e,t){null==u[e]&&(u[e]=[]),u[e].push(t),n&&1==n.readyState&&n.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]}}}}(),RED.text={},RED.text.bidi=function(){var t="";function o(e){return"auto"==t?function(e){for(var t,o=e.length,i=0;i<o;i++){if(1488<=(t=e.charCodeAt(i))&&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(i))&&t<91||96<t&&t<123)return}}(e)?"rtl":"ltr":t}function i(){$(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",i).on("paste",i).on("cut",i),i.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,i,n){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 r=0;;r++){1;{if(r>=e.length)break;if(!(e[r].isParsed||e.keep||e[r].isSeparator)){var s=e[r].content,d=s.indexOf(o.content);if(!(d<0)){var l,c=0;if(o.continued)for(;c++,0===(l=s.indexOf(o.content,d+c*o.content.length)););else c=1;if(l=d+c*o.content.length,e.splice(r,1),0<d&&(e.splice(r,0,new u({content:s.substring(0,d),localGui:t.dir,keep:!0})),r++),e.splice(r,0,new u({content:s.substring(d,l),textDirection:o.subDir,localGui:t.dir})),l<s.length&&e.splice(r+1,0,new u({content:s.substring(l,s.length),localGui:t.dir,keep:!0})),!a)break}}}}},handleBounds:function(e,t,o,i,n){for(var a=0;a<o.length;a++)if(function(e){if(e){void 0===e.start&&(e.start=""),void 0===e.end&&(e.end=""),void 0!==e.startAfter?(e.start=e.startAfter,e.after=!0):e.after=!1,void 0!==e.endBefore?(e.end=e.endBefore,e.before=!0):e.before=!1;var t=parseInt(e.startPos,10);isNaN(t)?e.usePos=!1:e.usePos=!0;t=parseInt(e.length,10);return isNaN(t)?e.useLength=!1:e.useLength=!0,e.loops=void 0===e.loops||!!e.loops,1}}(o[a]))for(var r=0;;r++){1;{if(r>=e.length)break;if(!(e[r].isParsed||e[r].inBounds||e.keep||e[r].isSeparator)){var s=function(e,t){var o,i={};for(o in t)t.hasOwnProperty(o)&&(i[o]=t[o]);var n=e.content;return(e=i.usePos&&i.startPos<n.length)&&(i.start="",i.loops=!1),i.bStart=e?i.startPos:0<i.start.length?n.indexOf(i.start):0,(e=i.useLength&&0<i.length&&i.bStart+i.length<n.length)&&(i.end=""),i.bEnd=e?i.bStart+i.length:0<i.end.length?n.indexOf(i.end,i.bStart+i.start.length)+1:n.length,i.after||(i.start=""),i.before||(i.end=""),i}(e[r],o[a]),d=s.bStart,l=s.bEnd;if(!(d<0||l<0)){var c=e[r].content;if(e.splice(r,1),0<d&&(e.splice(r,0,new u({content:c.substring(0,d),localGui:t.dir,keep:!0})),r++),s.start&&(e.splice(r,0,new u({content:s.start,localGui:t.dir,isSeparator:!0})),r++),e.splice(r,0,new u({content:c.substring(d+s.start.length,l-s.end.length),textDirection:s.subDir,localGui:t.dir,inBounds:!0})),s.end&&(r++,e.splice(r,0,new u({content:s.end,localGui:t.dir,isSeparator:!0}))),l+s.end.length<c.length&&e.splice(r+1,0,new u({content:c.substring(l+s.end.length,c.length),localGui:t.dir,keep:!0})),!s.loops)break}}}}for(a=0;a<e.length;a++)e[a].inBounds=!1;return e},handleCases:function(e,t,o,i,n){if(0===o.length)return e;var a,r={};for(a in t)t.hasOwnProperty(a)&&(r[a]=t[a]);for(var s=0;s<o.length;s++)o[s].handler&&"function"==typeof o[s].handler.handle||(o[s].handler=t.commonHandler),o[s].args?(r.cases=o[s].args.cases,r.points=o[s].args.points,r.bounds=o[s].args.bounds,r.subs=o[s].args.subs):(r.cases=[],r.points=[],r.bounds=[],r.subs={}),o[s].handler.handle(i,e,r,n);return e},handlePoints:function(e,t,o,i,n){for(var a=0;a<o.length;a++)for(var r,s,d=0;;d++){1;{if(d>=e.length)break;e[d].isParsed||e[d].keep||e[d].isSeparator||0<=(s=(r=e[d].content).indexOf(o[a]))&&(e.splice(d,1),0<s&&(e.splice(d,0,new u({content:r.substring(0,s),textDirection:t.subDir,localGui:t.dir,inPoints:!0})),d++),e.splice(d,0,new u({content:o[a],localGui:t.dir,isSeparator:!0})),s+o[a].length+1<=r.length&&e.splice(d+1,0,new u({content:r.substring(s+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}},s={handle:function(e,t,o,i){var n=[];Array.isArray(o.cases)&&(n=o.cases);var a=[];void 0!==o.points&&(Array.isArray(o.points)?a=o.points:"string"==typeof o.points&&(a=o.points.split("")));var r={};"object"==typeof o.subs&&(r=o.subs);var s=[];return Array.isArray(o.bounds)&&(s=o.bounds),d.handleBounds(t,o,s,e,i),d.handleSubcontents(t,o,r,e,i),d.handleCases(t,o,n,e,i),d.handlePoints(t,o,a,e,i),t}},l={LRE:"‪",RLE:"‫",PDF:"‬",LRM:"‎",RLM:"‏",LRO:"‭",RLO:"‮",getLocaleDetails:function(e){if(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}))return{lang:"not-bidi"};var t,o,e=e.split("-");return{lang:e[0],country:e[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,i){if("auto"!==t&&/^(rtl|ltr)$/i.test(t))return t;o=/^(rtl|ltr)$/i.test(o)?o:"ltr";e=i?e.split("").reverse().join(""):e,e=/[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(e);return e?e[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="",i=0;i<e.length;i++){var n=""+e.charAt(i);switch(n){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+=n}}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,"")}},c=((e={}).parseAndDisplayStructure=function(e,t,o,i){return e&&t?r(n(e,t,i),t,o):e},e.parseStructure=n,e.displayStructure=r,e.restore=function(e,t){return e},e);function a(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=s),e}function n(e,t,o){if(!e||!t)return new u({content:""});var i=a(t,!0),n=[new u({content:e,actual:e,localGui:i.dir})],t=s.handle;return(t=i.handler&&"function"==typeof i.handler?i.handler.handle:t)(e,n,i,o),n}function r(e,t,o){t=a(t,!1);return(o?function(e,t){for(var o="",i="",n=0;n<e.length;n++){var a,r;stop=!e[n].isVisible||(r=e[n].textDirection,""!==(a=e[n].localGui)&&""===i?o+="<bdi dir='"+("rtl"===a?"rtl":"ltr")+"'>":""===i||""!==a&&a===i&&!stop||(o+="</bdi>"+(n==e.length-1&&""!==a?"":"<span style='unicode-bidi: embed; direction: "+("rtl"===t.dir?"rtl":"ltr")+";'></span>"),""!==a&&(o+="<bdi dir='"+("rtl"===a?"rtl":"ltr")+"'>")),"auto"===r&&(r=l.getDirection(e[n].content,r,t.guiDir)),/^(rtl|ltr)$/i.test(r)?o+="<bdi dir='"+("rtl"===r?"rtl":"ltr")+"'>"+e[n].content+"</bdi>":(o+=e[n].content,l.getDirection(e[n].content,r,t.guiDir,!0)),n<e.length-1?(r=a&&e[n+1].localGui?a:t.dir,o+="<span style='unicode-bidi: embed; direction: "+("rtl"===r?"rtl":"ltr")+";'></span>"):""!==i&&(o+="</bdi>"),i=a,!1)}var s="auto"===t.dir?l.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;s!==t.guiDir&&(o="<bdi dir='"+("rtl"===s?"rtl":"ltr")+"'>"+o+"</bdi>");return o}:function(e,t){for(var o="",i="",n=!1,a=0;a<e.length;a++){var r,s;n=!e[a].isVisible||(s=e[a].textDirection,""!==(r=e[a].localGui)&&""===i?o+="rtl"===r?l.RLE:l.LRE:""===i||""!==r&&r===i&&!n||(o+=l.PDF+(a==e.length-1&&""!==r?"":"rtl"===t.dir?l.RLM:l.LRM),""!==r&&(o+="rtl"===r?l.RLE:l.LRE)),"auto"===s&&(s=l.getDirection(e[a].content,s,t.guiDir)),/^(rtl|ltr)$/i.test(s)?o+=("rtl"===s?l.RLE:l.LRE)+e[a].content+l.PDF:(o+=e[a].content,l.getDirection(e[a].content,s,t.guiDir,!0)),a<e.length-1?(s=r&&e[a+1].localGui?r:t.dir,o+="rtl"===s?l.RLM:l.LRM):""!==i&&(o+=l.PDF),i=r,!1)}var d="auto"===t.dir?l.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;d!==t.guiDir&&(o=("rtl"===d?l.RLE:l.LRE)+o+l.PDF);return o})(e,t)}var t,o,i={format:function(e,t,o,i,n,a){o={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?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},p={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:","};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},f={format:function(e,t,o,i,n,a){var r,o={guiDir:o?"rtl":"ltr",dir:(r=e,o=n,"ar"===l.getLocaleDetails(o).lang&&0<(o=r.indexOf("@"))&&o<r.length-1&&l.hasArabicChar(r.substring(o+1))?"rtl":"ltr"),points:"<>.:,;@",cases:[{handler:s,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"(",endBefore:")"}],points:""}}]};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},h={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:"/\\:."};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},g={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:" /%^&[]<>=!?~:.,|()+-*{}"};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},v={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:"\t!#%&()*+,-./:;<=>?|[]{}",cases:[{handler:s,args:{bounds:[{startAfter:"/*",endBefore:"*/"},{startAfter:"--",end:"\n"},{startAfter:"--"}]}},{handler:s,args:{subs:{content:" ",continued:!0}}},{handler:s,args:{bounds:[{startAfter:"'",endBefore:"'"},{startAfter:'"',endBefore:'"'}]}}]};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},m={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:"_"};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},b={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:":?#/@.[]="};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},y={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:t.dir||(o?"rtl":"ltr"),points:" ,.!?;:"};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},w={format:function(e,t,o,i,n,a){o={guiDir:o?"rtl":"ltr",dir:"ltr",points:" /[]<>=!:@.|()+-*",cases:[{handler:s,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"'",endBefore:"'"}],points:""}}]};return a?c.parseStructure(e,o,!!i,n):c.parseAndDisplayStructure(e,o,!!i,n)}},E={format:function(e,t,o,i,n,a){var r={},s="",d=Array.isArray(t)?t[0]:t;for(s in d)d.hasOwnProperty(s)&&(r[s]=d[s]);return r.guiDir=o?"rtl":"ltr",r.dir=r.dir||r.guiDir,a?c.parseStructure(e,r,!!i,n):c.parseAndDisplayStructure(e,r,!!i,n)}};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 i;case"comma":return p;case"email":return f;case"filepath":return h;case"formula":return g;case"sql":return v;case"underscore":return m;case"url":return b;case"word":return y;case"xpath":return w;default:return E}}function _(t,e,o,i,n){if(!t||1!=t.nodeType)return!1;x||(x=document.createEvent("Event")).initEvent("TF",!0,!0),t.setAttribute("data-tf-type",e);o="undefined"===o?"{}":JSON.stringify(Array.isArray(o)?o[0]:o);t.setAttribute("data-tf-args",o);o="ltr";return"undefined"===i&&(t.dir?o=t.dir:t.style&&t.style.direction&&(o=t.style.direction),i="rtl"===o.toLowerCase()),t.setAttribute("data-tf-dir",i),t.setAttribute("data-tf-locale",l.getLocaleDetails(n).lang),!function(e){var t=window.navigator.userAgent;if(!(0<=t.indexOf("MSIE")||0<=t.indexOf("Trident")||0<=t.indexOf("Edge"))){t=document.createElement(e.tagName);t.contentEditable=!0;e="oninput"in t;return e||(t.setAttribute("oninput","return;"),e="function"==typeof t.oninput),t=null,e}}(t)?(t.onkeyup=function(e){k(e.target),t.dispatchEvent(x)},t.onmouseup=function(e){k(e.target),t.dispatchEvent(x)}):(t.oninput,t.oninput=function(e){k(e.target)}),k(t),!0}function k(e){var t=e.textContent||"",o=document.getSelection();if(0===t.length||!o||o.rangeCount<=0)e.dispatchEvent(x);else{var i=o.getRangeAt(0),n=i.cloneRange(),a=i.startContainer,r=i.startOffset,s=0;3===a.nodeType&&(s+=r),n.setStart(e,0),n.setEndBefore(a);a=document.createElement("div");a.appendChild(n.cloneContents()),s+=a.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"));var d=e,l=e,c=0,u=!1;for(o.removeAllRanges(),i.setStart(e,0),i.setEnd(e,0);l;){if(3===l.nodeType){if(c+l.nodeValue.length>=s){i.setStart(l,s-c);break}c+=l.nodeValue.length,l=l.nextSibling}else{if(l.hasChildNodes()){l=(d=l).firstChild;continue}l=l.nextSibling}for(;!l;){if(d===e){u=!0;break}l=d.nextSibling,d=d.parentNode}if(u)break}o.addRange(i),e.dispatchEvent(x)}}return{getHtml:function(e,t,o,i,n){return $(t).format(e,o,i,!0,n)},attach:_}}(),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},RED.plugins=function(){var t={},o={};return{registerPlugin:function(e,i){(t[e]=i).type&&(o[i.type]=o[i.type]||[],o[i.type].push(i)),RED._loadingModule?(i.module=RED._loadingModule,i._=function(){var e=Array.prototype.slice.call(arguments),t=e[0];/:/.test(e[0])||(e[0]=i.module+":"+e[0]);var o=RED._.apply(null,e);return o===e[0]?t:o}):i._=RED._,i.onadd&&"function"==typeof i.onadd&&i.onadd(),RED.events.emit("registry:plugin-added",e)},getPlugin:function(e){return t[e]},getPluginsByType:function(e){return o[e]||[]}}}(),RED.nodes=function(){var ie,ne,l={},ae={},g=[],c={},re={},d=[],se={},t=null,de={},u={},o=!1;var s,p,a,le=function(){var n={},a=[],r={},s={},d={},t={};d.tab={defaults:{label:{value:""},disabled:{value:!1},info:{value:""},env:{value:[]}}};var i={setModulePendingUpdated:function(e,t){n[e].pending_version=t,RED.events.emit("registry:module-updated",{module:e,version:t})},getModule:function(e){return n[e]},getNodeSetForType:function(e){return i.getNodeSet(s[e])},getModuleList:function(){return n},getNodeList:function(){return a},getNodeTypes:function(){return Object.keys(d)},setNodeList:function(e){a=[];for(var t=0;t<e.length;t++){var o=e[t];i.addNodeSet(o)}},addNodeSet:function(e){if(e.types){e.added=!1,r[e.id]=e;for(var t=0;t<e.types.length;t++)s[e.types[t]]=e.id;a.push(e),n[e.module]=n[e.module]||{name:e.module,version:e.version,local:e.local,sets:{}},e.pending_version&&(n[e.module].pending_version=e.pending_version),n[e.module].sets[e.name]=e,RED.events.emit("registry:node-set-added",e)}},removeNodeSet:function(e){for(var t=r[e],o=0;o<t.types.length;o++)delete s[t.types[o]];delete r[e];for(var i=0;i<a.length;i++)if(a[i].id===e){a.splice(i,1);break}return delete n[t.module].sets[t.name],0===Object.keys(n[t.module].sets).length&&delete n[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)){if(!r[s[e]]){var o="",i=e;return RED._loadingModule&&(i="["+RED._loadingModule+"] "+e,o=r[RED._loadingModule]?r[RED._loadingModule].err||"":"Unknown error"),void RED.notify(RED._("palette.event.unknownNodeRegistered",{type:i,error:o}),"error")}var n;t.set=r[s[e]],r[s[e]].added=!0,r[s[e]].enabled=!0,n="node-red"===t.set.module?"node-red":t.set.id,t._=function(){var e=Array.prototype.slice.call(arguments,0),t=e[0];-1===e[0].indexOf(":")&&(e[0]=n+":"+e[0]);var o=RED._.apply(null,e);return o=o===e[0]?t:o}}if(t.type=e,(d[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){var t;e=e.trim();var o=0,i=/\[\]$/.test(e);i&&(e=e.substring(0,e.length-2));var n=e.length,a=!1,r=!1,s="",d=[];for(;o<n;){if(t=e[o],r)"|"===t?(d.push(s.trim()),s="",r=!1):")"===t?(d.push(s.trim()),s="",r=a=!1):s+=t;else if("("===t){if(a)throw new Error("Invalid character '"+t+"' at position "+o);a=!0}else" "!==t&&(r=!0,s=t);o++}0<(s=s.trim()).length&&d.push(s);return{types:d,array:i}}(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 d[e],RED.events.emit("registry:node-type-removed",e)},getNodeType:function(e){return d[e]},setIconSets:function(e){(t=e)["font-awesome"]=RED.nodes.fontAwesome.getIconList()},getIconSets:function(){return t}};return i}(),ce=(s={},p={},a={addTab:function(e){p[e]=[]},hasTab:function(e){return p.hasOwnProperty(e)},removeTab:function(e){delete p[e]},addNode:function(e){s[e.id]=e,p.hasOwnProperty(e.z)?p[e.z].push(e):(console.warn("Node added to unknown tab/subflow:",e),p._=p._||[],p._.push(e))},removeNode:function(e){var t;delete s[e.id],!p.hasOwnProperty(e.z)||-1<(t=p[e.z].indexOf(e))&&p[e.z].splice(t,1)},hasNode:function(e){return s.hasOwnProperty(e)},getNode:function(e){return s[e]},moveNode:function(e,t){a.removeNode(e),e.z=t,a.addNode(e)},moveNodesForwards:function(e){var t=[];Array.isArray(e)||(e=[e]);for(var o=p[e[0].z],i=new Set(e.filter(function(e){return"group"!==e.type&&"subflow"!==e.type})),n=new Set,a=o.length-1;0<=a&&0!==i.size;a--){var r=o[a];i.has(r)&&(a<o.length-1&&!n.has(o[a+1])&&(o.splice(a,1),o.splice(a+1,0,r),r._reordered=!0,t.push(r)),i.delete(r),n.add(r))}return 0<t.length&&RED.events.emit("nodes:reorder",{z:e[0].z,nodes:t}),t},moveNodesBackwards:function(e){var t=[];Array.isArray(e)||(e=[e]);for(var o=p[e[0].z],i=new Set(e.filter(function(e){return"group"!==e.type&&"subflow"!==e.type})),n=new Set,a=0;a<o.length&&0!==i.size;a++){var r=o[a];i.has(r)&&(0<a&&!n.has(o[a-1])&&(o.splice(a,1),o.splice(a-1,0,r),r._reordered=!0,t.push(r)),i.delete(r),n.add(r))}return 0<t.length&&RED.events.emit("nodes:reorder",{z:e[0].z,nodes:t}),t},moveNodesToFront:function(e){var t=[];Array.isArray(e)||(e=[e]);for(var o=p[e[0].z],i=new Set(e.filter(function(e){return"group"!==e.type&&"subflow"!==e.type})),n=o.length-1,a=o.length-1;0<=a&&0!==i.size;a--){var r=o[a];i.has(r)&&(a<n&&(o.splice(a,1),o.splice(n,0,r),r._reordered=!0,t.push(r)),n--,i.delete(r))}return 0<t.length&&RED.events.emit("nodes:reorder",{z:e[0].z,nodes:t}),t},moveNodesToBack:function(e){var t=[];Array.isArray(e)||(e=[e]);for(var o=p[e[0].z],i=new Set(e.filter(function(e){return"group"!==e.type&&"subflow"!==e.type})),n=0,a=0;a<o.length&&0!==i.size;a++){var r=o[a];i.has(r)&&(n<a&&(o.splice(a,1),o.splice(n,0,r),r._reordered=!0,t.push(r)),n++,i.delete(r))}return 0<t.length&&RED.events.emit("nodes:reorder",{z:e[0].z,nodes:t}),t},getNodes:function(e){return p[e]},clear:function(){s={},p={}},eachNode:function(e){var t,o,i;for(o in se)if(se.hasOwnProperty(o))for(t=p[o],i=0;i<t.length;i++)if(!1===e(t[i]))return;for(o=0;o<d.length;o++)for(t=p[d[o]],i=0;i<t.length;i++)if(!1===e(t[i]))return;if(p._)for(t=p._,i=0;i<t.length;i++)if(!1===e(t[i]))return},filterNodes:function(e){var t=[],o=null,i=!1;e.hasOwnProperty("z")&&(p.hasOwnProperty(e.z)?o=p[e.z]:i=!0);var n=!1;null===o&&(o=Object.keys(s),n=!0);for(var a=0;a<o.length;a++){var r=o[a];n&&(r=s[r]),e.hasOwnProperty("type")&&r.type!==e.type||i&&r.z!==e.z||t.push(r)}return t},getNodeOrder:function(e){return p[e].map(function(e){return e.id})},setNodeOrder:function(e,t){var o={};t.forEach(function(e,t){o[e]=t}),p[e].sort(function(e,t){return e._reordered=!0,t._reordered=!0,o[e.id]-o[t.id]})}});function ue(){for(var e=[],t=0;t<8;t++)e.push(Math.round(255*Math.random()).toString(16).padStart(2,"0"));return e.join("")}function pe(e){var t,o;0!==e.type.indexOf("subflow")?e._=e._def._:(t=e.type.substring(8),(t=RED.nodes.subflow(t))&&t.instances.push(t),e._=RED._),"config"==e._def.category?ae[e.id]=e:(e.wires&&e.wires.length>e.outputs&&(e.outputs=e.wires.length),e.dirty=!0,r(e),"subflows"==e._def.category&&void 0===e.i&&(o=0,RED.nodes.eachNode(function(e){o=Math.max(o,e.i||0)}),e.i=o+1),ce.addNode(e),c[e.id]||(c[e.id]={in:[],out:[]})),RED.events.emit("nodes:add",e)}function fe(e){g.push(e),e.source&&(c[e.source.id]||(c[e.source.id]={in:[],out:[]}),c[e.source.id].out.push(e)),e.target&&(c[e.target.id]||(c[e.target.id]={in:[],out:[]}),c[e.target.id].in.push(e)),e.source.z===e.target.z&&l[e.source.z]&&l[e.source.z].push(e),RED.events.emit("links:add",e)}function f(e){return e in ae?ae[e]:ce.getNode(e)}function h(e){var t,o=[],i=[];if(e in ae)t=ae[e],delete ae[e],RED.events.emit("nodes:remove",t),RED.workspaces.refresh();else if(ce.hasNode(e)){t=ce.getNode(e),ce.removeNode(t),delete c[e],(o=g.filter(function(e){return e.source===t||e.target===t})).forEach(v);var a,r,s,d=!1;for(a in t._def.defaults)!t._def.defaults.hasOwnProperty(a)||(r=t._def.defaults[a]).type&&(!(s=le.getNodeType(r.type))||"config"!=s.category||(r=ae[t[a]])&&(d=!0,r._def.exclusive?(h(t[a]),i.push(r)):((s=r.users).splice(s.indexOf(t),1),RED.events.emit("nodes:change",r))));0===t.type.indexOf("subflow:")&&(e=t.type.substring(8),(e=RED.nodes.subflow(e))&&e.instances.splice(e.instances.indexOf(t),1)),d&&RED.workspaces.refresh();try{t._def.oneditdelete&&t._def.oneditdelete.call(t)}catch(e){console.log("oneditdelete",t.id,t.type,e.toString())}RED.events.emit("nodes:remove",t)}return t&&t._def.onremove&&(console.log("Deprecated API warning: node type ",t.type," has an onremove function - should be oneditremove - please report"),t._def.onremove.call(n)),{links:o,nodes:i}}function v(e){var t,o=g.indexOf(e);-1!=o&&(g.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)),RED.events.emit("links:remove",e)}function he(e,t){re[e.id]=e,ce.addTab(e.id),l[e.id]=[],e._def=RED.nodes.getType("tab"),void 0===t?d.push(e.id):d.splice(t,0,e.id),RED.events.emit("flows:add",e),void 0!==t&&RED.events.emit("flows:reorder",d)}function ge(t,e){var o,i;e&&((e=Object.keys(se).map(function(e){return se[e].name})).sort(),o=1,i=t.name,e.forEach(function(e){i==e&&(o++,i=t.name+" ("+o+")")}),t.name=i),se[t.id]=t,ce.addTab(t.id),l[t.id]=[],RED.nodes.registerType("subflow:"+t.id,{defaults:{name:{value:""},env:{value:[]}},icon:function(){return t.icon||"subflow.svg"},category:t.category||"subflows",inputs:t.in.length,outputs:t.out.length,color:t.color||"#DDAA99",label:function(){return this.name||RED.nodes.subflow(t.id).name},labelStyle:function(){return this.name?"red-ui-flow-node-label-italic":""},paletteLabel:function(){return RED.nodes.subflow(t.id).name},inputLabels:function(e){return t.inputLabels?t.inputLabels[e]:null},outputLabels:function(e){return t.outputLabels?t.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"}}),t.instances=[],t._def=RED.nodes.getType("subflow:"+t.id),RED.events.emit("subflows:add",t)}function ve(e){return se[e]}function me(e,t){for(var o=ce.getNodes(e),i=0;i<o.length;i++){var n=o[i],n=/^subflow:(.+)$/.exec(n.type);if(n){if(n[1]===t)return!0;if(me(n[1],t))return!0}}return!1}function e(e,t){RED.view.selection();for(var o=new Set,i=[e],n=!0;0<i.length;){var a=i.shift();o.add(a);var r=[];n&&t&&(!n||"up"!==t)||(r=r.concat(c[a.id].in)),n&&t&&(!n||"down"!==t)||(r=r.concat(c[a.id].out)),n=!1,r.forEach(function(e){o.has(e.source)||i.push(e.source),o.has(e.target)||i.push(e.target)})}return Array.from(o)}function m(e,t){var o=!0;t&&t.hasOwnProperty("credentials")&&(o=t.credentials);var i,n={};for(i in n.id=e.id,n.type=e.type,e._def.defaults)e._def.defaults.hasOwnProperty(i)&&(n[i]=e[i]);if(o){var a={};if(e.credentials){for(var r in e.credentials)e.credentials.hasOwnProperty(r)&&(!e.credentials._||e.credentials["has_"+r]!=e.credentials._["has_"+r]||e.credentials["has_"+r]&&e.credentials[r])&&(a[r]=e.credentials[r]);0<Object.keys(a).length&&(n.credentials=a)}}return n}function b(t,e){var o=!0,i=!1;if(!1===e?o=!1:"object"==typeof e&&(e.hasOwnProperty("credentials")&&(o=e.credentials),e.hasOwnProperty("dimensions")&&(i=e.dimensions)),"tab"===t.type)return m(t,{credentials:o});var n={};if(n.id=t.id,n.type=t.type,n.z=t.z,0!==n.z&&""!==n.z||delete n.z,!0===t.d&&(n.d=!0),t.g&&(n.g=t.g),"unknown"==n.type)for(var a in t._orig)t._orig.hasOwnProperty(a)&&(n[a]=t._orig[a]);else{for(var r in t._def.defaults)t._def.defaults.hasOwnProperty(r)&&(n[r]=t[r]);if(o){var s={};if((/^subflow:/.test(n.type)||"group"===n.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])&&(s[d]=t.credentials[d]);else if(t.credentials)for(var l in n.credentials={},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])&&(s[l]=t.credentials[l]):null==t.credentials[l]||t.credentials._&&t.credentials[l]==t.credentials._[l]||(s[l]=t.credentials[l]));0<Object.keys(s).length&&(n.credentials=s)}}if("group"===t.type&&(n.x=t.x,n.y=t.y,n.w=t.w,n.h=t.h,n.nodes=n.nodes.filter(function(e){return!!e}).map(function(e){return e.id})),"tab"!==t.type&&"group"!==t.type||n.env&&0===n.env.length&&delete n.env,"config"!=t._def.category){n.x=t.x,n.y=t.y,i&&(t.hasOwnProperty("w")||(u=RED.view.calculateNodeDimensions(t),t.w=u[0],t.h=u[1]),n.w=t.w,n.h=t.h),n.wires=[];for(var c=0;c<t.outputs;c++)n.wires.push([]);for(var u,p=g.filter(function(e){return e.source===t}),f=0;f<p.length;f++){var h=p[f];"subflow"!=h.target.type&&h.sourcePort<n.wires.length&&n.wires[h.sourcePort].push(h.target.id)}0<t.inputs&&t.inputLabels&&!/^\s*$/.test(t.inputLabels.join(""))&&(n.inputLabels=t.inputLabels.slice()),0<t.outputs&&t.outputLabels&&!/^\s*$/.test(t.outputLabels.join(""))&&(n.outputLabels=t.outputLabels.slice()),t._def.defaults&&t._def.defaults.hasOwnProperty("icon")||!t.icon||(u=RED.utils.getDefaultNodeIcon(t._def,t),t.icon!==u.module+"/"+u.file&&(n.icon=t.icon)),t._def.defaults&&t._def.defaults.hasOwnProperty("l")||!t.hasOwnProperty("l")||(!t._def.hasOwnProperty("showLabel")||t._def.showLabel)!=t.l&&(n.l=t.l)}return t.info&&(n.info=t.info),n}function y(a,e){var t=!0;!1===e?t=!1:"object"==typeof e&&(e.hasOwnProperty("credentials")&&(t=e.credentials),e.hasOwnProperty("dimensions")&&e.dimensions);var r={};if(r.id=a.id,r.type=a.type,r.name=a.name,r.info=a.info,r.category=a.category,r.in=[],r.out=[],r.env=a.env,r.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&&(r.credentials=n)}return r.color=a.color,a.in.forEach(function(t){for(var e={x:t.x,y:t.y,wires:[]},o=g.filter(function(e){return e.source===t}),i=0;i<o.length;i++){var n=o[i];"subflow"!=n.target.type&&e.wires.push({id:n.target.id})}r.in.push(e)}),a.out.forEach(function(t,e){var o={x:t.x,y:t.y,wires:[]},n=g.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});r.out.push(o)}),0<r.in.length&&a.inputLabels&&!/^\s*$/.test(a.inputLabels.join(""))&&(r.inputLabels=a.inputLabels.slice()),0<r.out.length&&a.outputLabels&&!/^\s*$/.test(a.outputLabels.join(""))&&(r.outputLabels=a.outputLabels.slice()),a.icon&&"node-red/subflow.svg"!==a.icon&&(r.icon=a.icon),a.status&&(r.status={x:a.status.x,y:a.status.y,wires:[]},g.forEach(function(e){e.target===a.status&&("subflow"!=e.source.type?r.status.wires.push({id:e.source.id,port:e.sourcePort}):r.status.wires.push({id:a.id,port:0}))})),r}function be(o,t,e,i){var n=[];t=t||{},o=o.filter(function(e){return!t[e.id]&&(t[e.id]=!0)}),i=i||{},e=e||{};for(var a=0;a<o.length;a++){var r,s,d=o[a];if("subflow:"==d.type.substring(0,8)&&(e[r=d.type.substring(8)]||(e[r]=!0,p=ve(r),(s=ce.getNodes(r).slice()).unshift(p),RED.nodes.eachConfig(function(e){e.z==r&&(s.push(e),i[e.id]=!0)}),n=be(s,t,e,i).concat(n))),"subflow"!==d.type){var l,c,u=RED.nodes.convertNode(d);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){if(e in ae){var t=ae[e];return!1!==t._def.exportable?(e in i||(i[e]=!0,o.push(t)),!0):!1}return!0})).length?u[l]=Array.isArray(d[l])?[]:"":u[l]=Array.isArray(d[l])?c:c[0]);n.push(u),"group"===d.type&&(n=n.concat(be(d.nodes,t,e,i)))}else{var p=y(d);n.push(p)}}return n}function ye(e){var o={tabs:{},subflows:{},groups:{},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: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),(ce.hasNode(e.id)||ae[e.id]||re[e.id]||se[e.id]||de[e.id])&&(o.conflicted[e.id]=e)}),o}function we(e){var a={},r={},o={},s=[];e.forEach(function(e){"subflow"===e.type?r[e.id]=e:e.hasOwnProperty("x")||e.hasOwnProperty("y")||(o[e.id]=e),e.z&&(a[e.z]=a[e.z]||[],a[e.z].push(e))}),(t=Object.keys(o)).forEach(function(e){var t=o[e];r[t.z]&&delete o[e]});var t=Object.keys(o),e=Object.keys(r);return e.forEach(function(e){var t,o,i,n=r[e];s=s.concat((i=ve(t=e),(t=ce.getNodes(i.id))?(o=t.slice()).unshift(i):o=[i],console.log(o),be(o)));RED.subflow.removeSubflow(n.id,!0),w([n].concat(a[n.id]));r[e]=ve(e)}),RED.nodes.eachNode(function(e){var t;/^subflow:/.test(e.type)&&(t=e.type.substring(8),r[t]&&(r[t].instances.push(e),e._def=RED.nodes.getType(e.type),e.dirty=!0,e.changed=!0,e._colorChanged=!0))}),e.forEach(function(e){e=r[e];RED.events.emit("subflows:change",e)}),RED.utils.clearNodeColorCache(),t.forEach(function(e){s=s.concat(b(f(e))),h(e),w([o[e]])}),{removedNodes:s}}function w(e,o){(o=o||{generateIds:!1,addFlow:!1}).importMap=o.importMap||{};var t,i=o.generateIds,n=o.addFlow,a={};if("string"==typeof e){if(""===e)return;try{u=JSON.parse(e)}catch(R){var r=new Error(RED._("clipboard.invalidFlow",{message:R.message}));throw r.code="NODE_RED",r}}else u=e;$.isArray(u)||(u=[u]);var s,d={},l=[],c=[],u=u.filter(function(e){var t=e.id;if(d[e.id])return!1;if(d[e.id]=!0,!o.generateIds)if(o.importMap[t]){if("replace"===o.importMap[t])return c.push(e),!1}else{t=ce.getNode(t)||ae[t]||re[t]||se[t]||de[t];t&&l.push({existing:t,imported:e})}return!0});if(0<l.length){for(var r=RED._("clipboard.importDuplicate",{count:l.length}),p=$("<ul>"),f=Math.min(5,l.length),h=0;h<f;h++){var g=l[h];$("<li>").text(g.existing.id+" [ "+g.existing.type+(g.imported.type!==g.existing.type?" | "+g.imported.type:"")+" ]").appendTo(p)}f!==l.length&&$("<li>").text(RED._("deploy.confirm.plusNMore",{count:l.length-f})).appendTo(p);e=$("<p>").append(p),e=new Error(r+e.html());throw e.code="import_conflict",e.importConfig=ye(u),e}0<c.length&&(s=we(c).removedNodes);var v=!1;ne||(v=!0,ne=JSON.parse(JSON.stringify(u)));var m,b=[];for(h=0;h<u.length;h++){var y;(y=u[h]).id;"workspace"==y.type||"tab"==y.type||"subflow"==y.type||"group"==y.type||le.getNodeType(y.type)||"subflow:"==y.type.substring(0,8)||-1!=b.indexOf(y.type)||b.push(y.type),y.z?(a[y.z]=a[y.z]||[],a[y.z].push(y)):v&&y.hasOwnProperty("x")&&y.hasOwnProperty("y")&&!y.z&&(t||(he(t={id:RED.nodes.id(),type:"tab",disabled:!1,label:RED._("clipboard.recoveredNodes"),info:RED._("clipboard.recoveredNodesInfo"),env:[]}),RED.workspaces.add(t),a[t.id]=[]),y.z=t.id,a[t.id].push(y))}!v&&0<b.length&&(m=$("<ul>"),b.forEach(function(e){$("<li>").text(e).appendTo(m)}),m=m[0].outerHTML,RED.notify("<p>"+RED._("clipboard.importUnrecognised",{count:b.length})+"</p>"+m,"error",!1,1e4));var w=RED.workspaces.active(),E=ve(w);for(h=0;h<u.length;h++){var D=/^subflow:(.+)$/.exec(u[h].type);if(D){var R,x=D[1],D=ve(w);if(D)if(x===D.id&&(R=new Error(RED._("notification.errors.cannotAddSubflowToItself"))),R=me(x,D.id)?new Error(RED._("notification.errors.cannotAddCircularReference")):R)throw R.code="NODE_RED",R}}var _,k,T,C,j,L=[],S={},O=[],I={},N={},P={},A=[],M=[],z=[],B=new Set,G=null;for(t&&L.push(t),h=0;h<u.length;h++)"workspace"===(y=u[h]).type||"tab"===y.type?("workspace"===y.type&&(y.type="tab"),null==ie&&(ie=y),0===w&&(w=y.id),i||"copy"===o.importMap[y.id]?(_=ue(),S[y.id]=_,y.id=_):S[y.id]=y.id,he(y),RED.workspaces.add(y),L.push(y)):"subflow"===y.type&&((j=!o.importMap[y.id]?function(a,r){var s;r=r||[];var 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==r.length){var o=[a].concat(r),i=[e].concat(t),n=JSON.stringify(o),i=JSON.stringify(be(i));for(s=0;s<t.length;s++)n=n.replace(new RegExp('"'+r[s].id+'"',"g"),'"'+t[s].id+'"');if((n=n.replace(new RegExp('"'+a.id+'"',"g"),'"'+e.id+'"'))===i)return d=e,!1}}}),d}(y,a[y.id]):j)?N[y.id]=j:(I[y.id]=y,!i&&"copy"!==o.importMap[y.id]||(_=ue(),y.id=_),y.in.forEach(function(e,t){e.type="subflow",e.direction="in",e.z=y.id,e.i=t,e.id=ue()}),y.out.forEach(function(e,t){e.type="subflow",e.direction="out",e.z=y.id,e.i=t,e.id=ue()}),y.status&&(y.status.type="subflow",y.status.direction="status",y.status.z=y.id,y.status.id=ue()),O.push(y),ge(y,i||"copy"===o.importMap[y.id])));for(null==ie&&(he(ie={type:"tab",id:ue(),disabled:!1,info:"",label:RED._("workspace.defaultName",{number:1}),env:[]}),RED.workspaces.add(ie),L.push(ie),w=RED.workspaces.active()),h=0;h<u.length;h++)if(y=u[h],(k=le.getNodeType(y.type))&&"config"==k.category){var F=null;if(i||"copy"===o.importMap[y.id]){if(y.z){if(N[y.z])continue;I[y.z]?y.z=I[y.z].id:(y.z=S[y.z],re[y.z]||(n?(null===G&&(G=RED.workspaces.add(null,!0),L.push(G)),y.z=G.id):y.z=w))}if("copy"!==o.importMap[y.id]&&(F=RED.nodes.node(y.id))&&y.z&&F.z!==y.z)for(var U in F=null,ae)if(ae.hasOwnProperty(U)&&ae[U].z===y.z&&function(e,t,o){if((!o||e.id==t.id)&&e.type==t.type){var i,n=e._def;for(i in n.defaults)if(n.defaults.hasOwnProperty(i)){var a=e[i],r=t[i];if(typeof a!=typeof r)return;if(null===a||"string"==typeof a||"number"==typeof a){if(a!==r)return}else if(JSON.stringify(a)!==JSON.stringify(r))return}return 1}}(ae[U],y,!1)){F=ae[U],P[y.id]=ae[U];break}}else!y.z||S[y.z]||I[y.z]||(y.z=w);if(!F||F._def.exclusive){for(C in T={id:y.id,z:y.z,type:y.type,info:y.info,users:[],_config:{}},y.z||delete T.z,y.hasOwnProperty("d")&&(T.d=y.d),k.defaults)k.defaults.hasOwnProperty(C)&&(T[C]=y[C],T._config[C]=JSON.stringify(y[C]));if(k.hasOwnProperty("credentials")&&y.hasOwnProperty("credentials"))for(C in T.credentials={},k.credentials)k.credentials.hasOwnProperty(C)&&y.credentials.hasOwnProperty(C)&&(T.credentials[C]=y.credentials[C]);T.label=k.label,T._def=k,!i&&"copy"!==o.importMap[y.id]||(T.id=ue()),P[y.id]=T,A.push(T)}}for(h=0;h<u.length;h++)if("workspace"!==(y=u[h]).type&&"tab"!==y.type&&"subflow"!==y.type&&(!(k=le.getNodeType(y.type))||"config"!=k.category)){var J={x:parseFloat(y.x||0),y:parseFloat(y.y||0),z:y.z,type:0,info:y.info,changed:!1,_config:{}};if("group"!==y.type&&(J.wires=y.wires||[],J.inputLabels=y.inputLabels,J.outputLabels=y.outputLabels,J.icon=y.icon),y.hasOwnProperty("l")&&(J.l=y.l),y.hasOwnProperty("d")&&(J.d=y.d),y.hasOwnProperty("g")&&(J.g=y.g),i||"copy"===o.importMap[y.id]){if(N[y.z])continue;I[J.z]?J.z=I[J.z].id:(J.z=S[J.z],re[J.z]||(n?(null===G&&(G=RED.workspaces.add(null,!0),L.push(G)),J.z=G.id):J.z=w)),J.id=ue()}else J.id=y.id,null!=J.z&&(S[J.z]||I[J.z])||(n?(null===G&&(G=RED.workspaces.add(null,!0),L.push(G)),J.z=G.id):J.z=w);if(J.type=y.type,J._def=k,"group"===J.type){for(C in J._def=RED.group.def,J._def.defaults)J._def.defaults.hasOwnProperty(C)&&"inputs"!==C&&"outputs"!==C&&(J[C]=y[C],J._config[C]=JSON.stringify(y[C]));J._config.x=J.x,J._config.y=J.y}else if("subflow"===y.type.substring(0,7)){var V=y.type.split(":")[1],q=N[V]||I[V]||ve(V);!i&&"copy"!==o.importMap[y.id]||(V=q.id,J.type="subflow:"+V,J._def=le.getNodeType(J.type),delete J.i),J.name=y.name,J.outputs=q.out.length,J.inputs=q.in.length,J.env=y.env}else{if(!J._def){J.x&&J.y?J._def={color:"#fee",defaults:{},label:"unknown: "+y.type,labelStyle:"red-ui-flow-node-label-italic",outputs:y.outputs||y.wires&&y.wires.length||0,set:le.getNodeSet("node-red/unknown")}:(J._def={category:"config",set:le.getNodeSet("node-red/unknown")},J.users=[],delete J.x,delete J.y,delete J.wires,delete J.inputLabels,delete J.outputLabels,y.z||delete J.z);var W,K={};for(W in y)y.hasOwnProperty(W)&&"x"!=W&&"y"!=W&&"z"!=W&&"id"!=W&&"wires"!=W&&(K[W]=y[W]);J._orig=K,J.name=y.type,J.type="unknown"}if("config"!=J._def.category){for(C in y.hasOwnProperty("inputs")?(J.inputs=y.inputs,J._config.inputs=JSON.stringify(y.inputs)):J.inputs=J._def.inputs,y.hasOwnProperty("outputs")?(J.outputs=y.outputs,J._config.outputs=JSON.stringify(y.outputs)):J.outputs=J._def.outputs,J.hasOwnProperty("wires")&&J.wires.length>J.outputs&&(J._def.defaults.hasOwnProperty("outputs")&&isNaN(parseInt(y.outputs))?J.outputs=J.wires.length:(console.log("Warning: node.wires longer than node.outputs - trimming wires:",J.id," wires:",J.wires.length," outputs:",J.outputs),J.wires=J.wires.slice(0,J.outputs))),J._def.defaults)J._def.defaults.hasOwnProperty(C)&&"inputs"!==C&&"outputs"!==C&&(J[C]=y[C],J._config[C]=JSON.stringify(y[C]));if(J._config.x=J.x,J._config.y=J.y,J._def.hasOwnProperty("credentials")&&y.hasOwnProperty("credentials"))for(C in J.credentials={},J._def.credentials)J._def.credentials.hasOwnProperty(C)&&y.credentials.hasOwnProperty(C)&&(J.credentials[C]=y.credentials[C])}}"unknown"===(P[y.id]=J).type||"config"!==J._def.category?A.push(J):"group"===J.type&&(z.push(J),B.add(J.id))}for(h=0;h<A.length;h++){if((y=A[h]).wires){for(var H=0;H<y.wires.length;H++)for(var X,Y=y.wires[H]instanceof Array?y.wires[H]:[y.wires[H]],Z=0;Z<Y.length;Z++)P.hasOwnProperty(Y[Z])&&(y.z===P[Y[Z]].z?(fe(X={source:y,sourcePort:H,target:P[Y[Z]]}),M.push(X)):console.log("Warning: dropping link that crosses tabs:",y.id,"->",P[Y[Z]].id));delete y.wires}for(var Q in y.g&&P[y.g]?y.g=P[y.g].id:delete y.g,y._def.defaults)y._def.defaults.hasOwnProperty(Q)&&y._def.defaults[Q].type&&(p=y[Q],p=(p=!Array.isArray(p)?[p]:p).map(function(e){var t=P[e];return t?("config"===t._def.category&&-1===t.users.indexOf(y)&&t.users.push(y),t.id):e}),y[Q]=Array.isArray(y[Q])?p:p[0]);E&&/^link /.test(y.type)&&y.links&&(y.links=y.links.filter(function(e){e=RED.nodes.node(e);return e&&e.z===w}))}for(h=0;h<O.length;h++)(y=O[h]).in.forEach(function(t){t.wires.forEach(function(e){e={source:t,sourcePort:0,target:P[e.id]};fe(e),M.push(e)}),delete t.wires}),y.out.forEach(function(t){t.wires.forEach(function(e){e=I[e.id]&&I[e.id].id==y.id?{source:y.in[e.port],sourcePort:e.port,target:t}:{source:P[e.id]||I[e.id],sourcePort:e.port,target:t};fe(e),M.push(e)}),delete t.wires}),y.status&&(y.status.wires.forEach(function(e){e=I[e.id]&&I[e.id].id==y.id?{source:y.in[e.port],sourcePort:e.port,target:y.status}:{source:P[e.id]||I[e.id],sourcePort:e.port,target:y.status};fe(e),M.push(e)}),delete y.status.wires);var ee,te,oe={};for(h=0;h<z.length;h++)(y=z[h]).g&&!B.has(y.g)&&delete y.g,y.nodes=y.nodes.map(function(e){return P[e]}),y.nodes=y.nodes.filter(function(e){return e&&e.g!==y.id&&(e.g=y.id),!!e}),y.g||(oe[y.id]=0);do{for(ee=!1,h=0;h<z.length;h++)(y=z[h]).g&&oe[y.id]!==oe[y.g]+1&&(oe[y.id]=oe[y.g]+1,ee=!0)}while(ee);for(z.sort(function(e,t){return oe[e.id]-oe[t.id]}),h=0;h<z.length;h++)Ee(y=z[h]);for(h=0;h<A.length;h++)pe(J=A[h]);for(h=0;h<A.length;h++){J=A[h];RED.editor.validateNode(J)}return RED.workspaces.refresh(),t&&(te=RED.notify(RED._("clipboard.recoveredNodesNotification",{flowName:RED._("clipboard.recoveredNodes")}),{type:"warning",fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){te.close()}}]})),{nodes:A,links:M,groups:z,workspaces:L,subflows:O,missingWorkspace:G,removedNodes:s}}function r(e){for(var t in e._def.defaults){var o;!e._def.defaults.hasOwnProperty(t)||(o=e._def.defaults[t]).type&&(!(o=le.getNodeType(o.type))||"config"!=o.category||(t=ae[e[t]])&&-1===t.users.indexOf(e)&&(t.users.push(e),RED.events.emit("nodes:change",t)))}}function Ee(e){u[e.z]=u[e.z]||[],u[e.z].push(e),de[e.id]=e,RED.events.emit("groups:add",e)}function E(e){var t=u[e.z].indexOf(e);u[e.z].splice(t,1),0===u[e.z].length&&delete u[e.z],e.g&&de[e.g]&&(t=de[e.g].nodes.indexOf(e),de[e.g].nodes.splice(t,1)),RED.group.markDirty(e),delete de[e.id],RED.events.emit("groups:remove",e)}return{init:function(){RED.events.on("registry:node-type-added",function(t){le.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)});var i,n,a,e=Object.keys(o);0<e.length&&(i=[],e.forEach(function(e){e=o[e];ae.hasOwnProperty(e.id)?delete ae[e.id]:ce.removeNode(e),i.push(b(e)),RED.events.emit("nodes:remove",e)}),n=[],RED.nodes.eachLink(function(e){o.hasOwnProperty(e.source.id)&&o.hasOwnProperty(e.target.id)&&n.push(e)}),n.forEach(v),RED.view.redraw(!0,!0),e=w(i,{generateIds:!1}),a={},e.nodes.forEach(function(e){a[e.id]=e}),RED.nodes.eachLink(function(e){a.hasOwnProperty(e.source.id)&&(e.source=a[e.source.id]),a.hasOwnProperty(e.target.id)&&(e.target=a[e.target.id])}),RED.view.redraw(!0))})},registry:le,setNodeList:le.setNodeList,getNodeSet:le.getNodeSet,addNodeSet:le.addNodeSet,removeNodeSet:le.removeNodeSet,enableNodeSet:le.enableNodeSet,disableNodeSet:le.disableNodeSet,setIconSets:le.setIconSets,getIconSets:le.getIconSets,registerType:le.registerNodeType,getType:le.getNodeType,getNodeHelp:function(e){var t="";return(e=$("script[data-help-name='"+e+"']"))&&(t=e.html(),"text/markdown"===e.attr("type")&&(t=RED.utils.renderMarkdown(t))),t},convertNode:b,add:pe,remove:h,clear:function(){g=[],l={},c={},ae={},d=[],de={},u={},Object.keys(se).forEach(function(e){RED.subflow.removeSubflow(e)}),Object.keys(re).forEach(function(e){RED.workspaces.remove(re[e])}),ne=ie=null,re={},ce.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")},moveNodesForwards:function(e){return ce.moveNodesForwards(e)},moveNodesBackwards:function(e){return ce.moveNodesBackwards(e)},moveNodesToFront:function(e){return ce.moveNodesToFront(e)},moveNodesToBack:function(e){return ce.moveNodesToBack(e)},getNodeOrder:function(e){return ce.getNodeOrder(e)},setNodeOrder:function(e,t){ce.setNodeOrder(e,t)},moveNodeToTab:function(e,o){if("group"===e.type)return t=o,i=u[(a=e).z].indexOf(a),u[a.z].splice(i,1),u[t]=u[t]||[],u[t].push(a),a.z=t,void RED.events.emit("groups:change",a);var t,i,n=e.z;ce.moveNode(e,o);var a=c[e.id];a&&(a.in.forEach(function(e){var t=l[n].indexOf(e);-1!=t&&l[n].splice(t,1),e.source.z===o&&l[o]&&l[o].push(e)}),a.out.forEach(function(e){var t=l[n].indexOf(e);-1!=t&&l[n].splice(t,1),e.target.z===o&&l[o]&&l[o].push(e)})),RED.events.emit("nodes:change",e)},addLink:fe,removeLink:v,addWorkspace:he,removeWorkspace:function(e){var t,o,i=re[e],n=[],a=[],r=[];if(i){for(t in delete re[e],delete l[e],d.splice(d.indexOf(e),1),ce.hasTab(e)&&(n=ce.getNodes(e).slice()),ae)ae.hasOwnProperty(t)&&(o=ae[t]).z==e&&n.push(o);for(t=0;t<n.length;t++)var s=h(n[t].id),a=a.concat(s.links);for(r=(u[e]||[]).filter(function(e){return!e.g}),t=0;t<r.length;t++)r[t].nodes.forEach(function(e){"group"===e.type&&r.push(e)});for(t=r.length-1;0<=t;t--)E(r[t]);ce.removeTab(e),RED.events.emit("flows:remove",i)}return{nodes:n,links:a,groups:r}},getWorkspaceOrder:function(){return d},setWorkspaceOrder:function(e){d=e},workspace:function(e){return re[e]},addSubflow:ge,removeSubflow:function(e){se[e.id]&&(delete se[e.id],ce.removeTab(e.id),le.removeNodeType("subflow:"+e.id),RED.events.emit("subflows:remove",e))},subflow:ve,subflowContains:me,addGroup:Ee,removeGroup:E,group:function(e){return de[e]},groups:function(e){return u[e]?u[e].slice():[]},eachNode:function(e){ce.eachNode(e)},eachLink:function(e){for(var t=0;t<g.length&&!1!==e(g[t]);t++);},eachConfig:function(e){for(var t in ae)if(ae.hasOwnProperty(t)&&!1===e(ae[t]))break},eachSubflow:function(e){for(var t in se)if(se.hasOwnProperty(t)&&!1===e(se[t]))break},eachWorkspace:function(e){for(var t=0;t<d.length&&!1!==e(re[d[t]]);t++);},node:f,version:function(e){if(void 0===e)return t;t=e},originalFlow:function(e){if(void 0===e)return ne;ne=e},filterNodes:function(e){return ce.filterNodes(e)},filterLinks:function(e){var t,o=[],i=[],n=!1,a=e.source&&e.source.z,r=e.target&&e.target.z;(t=a||r?a!==r&&void 0===a?r:a:t)?(i=l[t]||[],n=!0):e.source&&e.source.hasOwnProperty("id")?c[e.source.id]&&(n=!0,i=i.concat(c[e.source.id].out)):e.target&&e.target.hasOwnProperty("id")&&c[e.target.id]&&(n=!0,i=i.concat(c[e.target.id].in)),n||(i=g);for(var s=0;s<i.length;s++){var d=i[s];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:w,identifyImportConflicts:ye,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})},createExportableNodeSet:be,createCompleteNodeSet:function(t){for(var o=[],e=0;e<d.length;e++)"tab"==re[d[e]].type&&o.push(m(re[d[e]],t));for(e in se)se.hasOwnProperty(e)&&o.push(y(se[e],t));for(e in de)de.hasOwnProperty(e)&&o.push(b(de[e],t));for(e in ae)ae.hasOwnProperty(e)&&o.push(b(ae[e],t));return RED.nodes.eachNode(function(e){o.push(b(e,t))}),o},updateConfigNodeUsers:r,id:ue,dirty:function(e){if(null==e)return o;o=e,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 x(t){var e,o,i,n,a,r,s,d,l,c,u,p={};if(t){if("multi"==t.t)for(i={t:"multi",events:[]},e=t.events.length-1;0<=e;e--){var f=x(t.events[e]);i.events.push(f)}else if("replace"==t.t)t.complete?(i={t:"replace",config:RED.nodes.createCompleteNodeSet(),changed:{},rev:RED.nodes.version()},RED.nodes.clear(),RED.nodes.import(t.config).nodes.forEach(function(e){t.changed[e.id]&&(e.changed=!0,i.changed[e.id]=!0)}),RED.nodes.version(t.rev)):(n={},t.config.forEach(function(e){n[e.id]="replace"}),a=RED.nodes.import(t.config,{importMap:n}),i={t:"replace",config:a.removedNodes,dirty:RED.nodes.dirty()});else if("add"==t.t){if(i={t:"delete",dirty:RED.nodes.dirty()},t.nodes)for(i.nodes=[],e=0;e<t.nodes.length;e++)(d=RED.nodes.node(t.nodes[e])).z&&(p[d.z]=!0),i.nodes.push(d),RED.nodes.remove(t.nodes[e]),!d.g||-1!==(s=(r=RED.nodes.group(d.g)).nodes.indexOf(d))&&(r.nodes.splice(s,1),RED.group.markDirty(r));if(t.links)for(i.links=[],e=0;e<t.links.length;e++)i.links.push(t.links[e]),RED.nodes.removeLink(t.links[e]);if(t.groups)for(i.groups=[],e=t.groups.length-1;0<=e;e--)p[(r=t.groups[e]).z]=!0,i.groups.unshift(r),RED.nodes.removeGroup(r);if(t.workspaces)for(i.workspaces=[],e=0;e<t.workspaces.length;e++){var h=RED.nodes.getWorkspaceOrder();t.workspaces[e]._index=h.indexOf(t.workspaces[e].id),i.workspaces.push(t.workspaces[e]),RED.nodes.removeWorkspace(t.workspaces[e].id),RED.workspaces.remove(t.workspaces[e])}if(t.subflows)for(i.subflows=[],e=0;e<t.subflows.length;e++)i.subflows.push(t.subflows[e]),RED.nodes.removeSubflow(t.subflows[e]),RED.workspaces.remove(t.subflows[e]);if(t.subflow&&(i.subflow={},t.subflow.instances&&(i.subflow.instances=[],t.subflow.instances.forEach(function(e){i.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(i.createdLinks=[],e=0;e<t.removedLinks.length;e++)i.createdLinks.push(t.removedLinks[e]),RED.nodes.addLink(t.removedLinks[e])}else if("delete"==t.t){if(i={t:"add",dirty:RED.nodes.dirty()},t.workspaces)for(i.workspaces=[],e=0;e<t.workspaces.length;e++)i.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(i.subflows=[],e=0;e<t.subflows.length;e++)i.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 g=t.subflowOutputs[e];o.out.splice(g.i,0,g);for(var v=g.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>=g.i&&e.sourcePort++})}if(t.subflow&&(i.subflow={},t.subflow.hasOwnProperty("instances")&&(i.subflow.instances=[],t.subflow.instances.forEach(function(e){i.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){i.groups=[];var m={};for(t.groups.forEach(function(e){m[e.id]=e}),e=t.groups.length-1;0<=e;e--)RED.nodes.addGroup(t.groups[e]),p[t.groups[e].z]=!0,i.groups.unshift(t.groups[e]),t.groups[e].g&&(-1===(r=m[t.groups[e].g]||RED.nodes.group(t.groups[e].g)).nodes.indexOf(t.groups[e])&&r.nodes.push(t.groups[e]),RED.group.markDirty(t.groups[e]))}if(t.nodes)for(i.nodes=[],e=0;e<t.nodes.length;e++)RED.nodes.add(t.nodes[e]),p[t.nodes[e].z]=!0,i.nodes.push(t.nodes[e].id),t.nodes[e].g&&(-1===(r=RED.nodes.group(t.nodes[e].g)).nodes.indexOf(t.nodes[e])&&r.nodes.push(t.nodes[e]),RED.group.markDirty(r));if(t.links)for(i.links=[],e=0;e<t.links.length;e++)RED.nodes.addLink(t.links[e]),i.links.push(t.links[e]);if(t.createdLinks)for(i.removedLinks=[],e=0;e<t.createdLinks.length;e++)i.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(d=RED.nodes.node(e)){for(var b in t.changes[e])t.changes[e].hasOwnProperty(b)&&(d[b]=t.changes[e][b]);d.dirty=!0}RED.events.emit("nodes:change",d)}o&&RED.events.emit("subflows:change",o)}else if("move"==t.t){for(i={t:"move",nodes:[],dirty:RED.nodes.dirty()},e=0;e<t.nodes.length;e++){var y=t.nodes[e],w={n:y.n,ox:y.n.x,oy:y.n.y,dirty:!0,moved:y.n.moved};i.nodes.push(w),y.n.x=y.ox,y.n.y=y.oy,y.n.dirty=!0,y.n.moved=y.moved}if(t.links)for(i.removedLinks=[],e=0;e<t.links.length;e++)i.removedLinks.push(t.links[e]),RED.nodes.removeLink(t.links[e]);if(t.removedLinks)for(i.links=[],e=0;e<t.removedLinks.length;e++)i.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),i.removeFromGroup=t.addToGroup):t.removeFromGroup&&(RED.group.addToGroup(t.removeFromGroup,t.nodes.map(function(e){return e.n})),i.addToGroup=t.removeFromGroup)}else if("edit"==t.t){for(e in(i={t:"edit",changes:{},changed:t.node.changed,dirty:RED.nodes.dirty()}).node=t.node,t.changes)t.changes.hasOwnProperty(e)&&(i.changes[e]=t.node[e],t.node._def.defaults&&t.node._def.defaults[e]&&t.node._def.defaults[e].type&&(l=t.node[e],(l=!Array.isArray(l)?[l]:l).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))}),l=t.changes[e],(l=!Array.isArray(l)?[l]:l).forEach(function(e){e=RED.nodes.node(e);e&&"config"===e._def.category&&(e.users.push(t.node),RED.events.emit("nodes:change",e))})),t.node[e]=t.changes[e]);switch(t.node.type){case"tab":c="flows";break;case"group":c="groups";break;case"subflow":c="subflows";break;default:c="nodes"}if(RED.events.emit(c+=":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),$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!t.node.disabled)),t.subflow)i.subflow={},t.subflow.hasOwnProperty("inputCount")&&(i.subflow.inputCount=t.node.in.length,t.node.in.length>t.subflow.inputCount?(i.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")&&(i.subflow.outputCount=t.node.out.length,t.node.out.length>t.subflow.outputCount?(i.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")&&(i.subflow.instances=[],t.subflow.instances.forEach(function(e){i.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 E in u={},i.outputMap={},t.outputMap)t.outputMap.hasOwnProperty(E)&&"-1"!==t.outputMap[E]&&(u[t.outputMap[E]]=E,i.outputMap[t.outputMap[E]]=E);t.node.__outputs=i.changes.outputs,RED.editor.updateNodeProperties(t.node,u),RED.editor.validateNode(t.node)}if(t.links)for(i.createdLinks=[],e=0;e<t.links.length;e++)RED.nodes.addLink(t.links[e]),i.createdLinks.push(t.links[e]);if(t.createdLinks)for(i.links=[],e=0;e<t.createdLinks.length;e++)RED.nodes.removeLink(t.createdLinks[e]),i.links.push(t.createdLinks[e]);t.node.dirty=!0,t.node.changed=t.changed}else if("createSubflow"==t.t){if(i={t:"deleteSubflow",activeWorkspace:t.activeWorkspace,dirty:RED.nodes.dirty()},t.nodes){i.movedNodes=[];var D=t.activeWorkspace;for(RED.nodes.filterNodes({z:t.subflow.subflow.id}).concat(RED.nodes.groups(t.subflow.subflow.id)).forEach(function(e){e.x+=t.subflow.offsetX,e.y+=t.subflow.offsetY,e.dirty=!0,i.movedNodes.push(e.id),RED.nodes.moveNodeToTab(e,D)}),i.subflows=[],e=0;e<t.nodes.length;e++)i.subflows.push(RED.nodes.node(t.nodes[e])),RED.nodes.remove(t.nodes[e])}if(t.links)for(i.links=[],e=0;e<t.links.length;e++)i.links.push(t.links[e]),RED.nodes.removeLink(t.links[e]);if(i.subflow=t.subflow,RED.nodes.removeSubflow(t.subflow.subflow),RED.workspaces.remove(t.subflow.subflow),t.removedLinks)for(i.createdLinks=[],e=0;e<t.removedLinks.length;e++)i.createdLinks.push(t.removedLinks[e]),RED.nodes.addLink(t.removedLinks[e])}else if("deleteSubflow"==t.t){if(i={t:"createSubflow",activeWorkspace:t.activeWorkspace,dirty:RED.nodes.dirty()},t.subflow&&(RED.nodes.addSubflow(t.subflow.subflow),i.subflow=t.subflow,t.subflow.subflow.g&&RED.group.addToGroup(RED.nodes.group(t.subflow.subflow.g),t.subflow.subflow)),t.subflows)for(i.nodes=[],e=0;e<t.subflows.length;e++)RED.nodes.add(t.subflows[e]),i.nodes.push(t.subflows[e].id);if(t.movedNodes&&t.movedNodes.forEach(function(e){nn=RED.nodes.node(e),nn=nn||RED.nodes.group(e),nn.x-=t.subflow.offsetX,nn.y-=t.subflow.offsetY,nn.dirty=!0,RED.nodes.moveNodeToTab(nn,t.subflow.subflow.id)}),t.links)for(i.links=[],e=0;e<t.links.length;e++)i.links.push(t.links[e]),RED.nodes.addLink(t.links[e]);if(t.createdLinks)for(i.removedLinks=[],e=0;e<t.createdLinks.length;e++)i.removedLinks.push(t.createdLinks[e]),RED.nodes.removeLink(t.createdLinks[e])}else if("reorder"==t.t)i={t:"reorder",dirty:RED.nodes.dirty()},t.workspaces&&(i.workspaces={from:t.workspaces.to,to:t.workspaces.from},RED.workspaces.order(t.workspaces.from)),t.nodes&&(i.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(i={t:"ungroup",dirty:RED.nodes.dirty(),groups:[]},t.groups)for(e=0;e<t.groups.length;e++)i.groups.push(t.groups[e]),RED.group.ungroup(t.groups[e])}else if("ungroup"==t.t){if(i={t:"createGroup",dirty:RED.nodes.dirty(),groups:[]},t.groups)for(e=0;e<t.groups.length;e++){i.groups.push(t.groups[e]);var R=t.groups[e].nodes.slice();t.groups[e].nodes=[],RED.nodes.addGroup(t.groups[e]),RED.group.addToGroup(t.groups[e],R)}}else"addToGroup"==t.t?(i={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&&(i={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&&(i.callback=t.callback,t.callback(t)),Object.keys(p).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(),i}}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=x(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]},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=x(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(t){return function(e){return t&&(""===e||void 0===e)||""!==e&&!isNaN(e)}},regex:function(t){return function(e){return t.test(e)}},typedInput:function(o,i){return function(e){var t=$("#node-"+(i?"config-":"")+"input-"+o).val()||this[o];if("json"===t)try{return JSON.parse(e),!0}catch(e){return!1}else{if("msg"===t||"flow"===t||"global"===t)return RED.utils.validatePropertyExpression(e);if("num"===t)return/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/.test(e)}return!0}}},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)};const e=new window._marked.Renderer;function t(e){e=_marked(e);return DOMPurify.sanitize(e,{SAFE_FOR_JQUERY:!0})}function L(e){return e.replace(/\r?\n/g,"&crarr;").replace(/\t/g,"&rarr;")}function S(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function O(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?S(e.substring(0,30))+"&hellip;":S(e),$('<span class="red-ui-debug-msg-object-value red-ui-debug-msg-type-string"></span>').html('"'+L(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 I(o,i,n,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 i&&!t.hasClass("built")&&(i(),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)&&n&&n(!t),e.preventDefault()}),e&&o.trigger("click")}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>"},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){if(!e)return null;e=e.match(/:[^:\n]/g);return e&&e.index},tokenizer(e,t){if(!e)return null;const o=/^(?::[^:\n]+:[^:\n]*(?:\n|$))+/.exec(e);return o?{type:"descriptionList",raw:o[0],text:o[0].trim(),tokens:this.lexer.inlineTokens(o[0].trim())}:void 0},renderer(e){return`<dl class="message-properties">${this.parser.parseInline(e.tokens)}
</dl>`}},{name:"description",level:"inline",start(e){if(!e)return null;e=e.match(/:/g);return e&&e.index},tokenizer(e,t){if(!e)return null;const o=/^:([^:\n]+)\(([^:\n]+)\).*?:([^:\n]*)(?:\n|$)/.exec(e);return o?{type:"description",raw:o[0],dt:this.lexer.inlineTokens(o[1].trim()),types:this.lexer.inlineTokens(o[2].trim()),dd:this.lexer.inlineTokens(o[3].trim())}:void 0},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 N={},d={};function P(e,t,o,i){if(t&&0<t.length){if(""===e&&void 0===o)return!0;for(var n=0;n<t.length;n++){var a=t[n];if(0===a.indexOf(e)&&("."===a[e.length]||"["===a[e.length])){if(void 0===o||"["!==a[e.length])return!0;a=a.substring(e.length),a=/\[(\d+)\]/.exec(a);if(a){a=parseInt(a[1]);return o<=a&&a<=i}}}}return!1}function A(e,t,o,i,n,a){var r,s=d[o]&&d[o][i]&&d[o][i].number||a||"dec";n?(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",d[o]=d[o]||{},d[o][i]=d[o][i]||{},d[o][i].number=s):void 0!==a&&(d[o]=d[o]||{},d[o][i]=d[o][i]||{},d[o][i].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?(r=new Date(t),e.text(r.toLocaleString()+"  [UTC"+(r.getTimezoneOffset()/-60<=0?"":"+")+r.getTimezoneOffset()/-60+"]")):"dateL"===s?(r=new Date(1e3*t),e.text(r.toLocaleString()+"  [UTC"+(r.getTimezoneOffset()/-60<=0?"":"+")+r.getTimezoneOffset()/-60+"]")):"hex"===s&&e.text("0x"+t.toString(16))}function M(e,t,o,i,n){var a=d[o]&&d[o][i]&&d[o][i].buffer||"raw";n&&(a="raw"===a?"string":"raw",d[o]=d[o]||{},d[o][i]=d[o][i]||{},d[o][i].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 z(e,t){var o=e.length;if(0===o)throw g("INVALID_EXPR","Invalid property expression: zero-length");for(var i,n,a=[],r=0,s=!1,d=!1,l=0;l<o;l++){var c=e[l];if(s){if(c===i){if(l-r==0)throw g("INVALID_EXPR","Invalid property expression: zero-length string at position "+r);if(a.push(e.substring(r,l)),d&&!/\]/.test(e[l+1]))throw g("INVALID_EXPR","Invalid property expression: unexpected array expression at position "+r);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));r=l+1,s=!1}}else if("'"===c||'"'===c){if(l!=r)throw g("INVALID_EXPR","Invalid property expression: unexpected "+c+" at position "+l);s=!0,i=c,r=l+1}else if("."===c){if(0===l)throw g("INVALID_EXPR","Invalid property expression: unexpected . at position 0");if(r!=l&&(n=e.substring(r,l),/^\d+$/.test(n)?a.push(parseInt(n)):a.push(n)),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));r=l+1}else if("["===c){if(0===l)throw g("INVALID_EXPR","Invalid property expression: unexpected "+c+" at position "+l);if(r!=l&&a.push(e.substring(r,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{t?a.push(B(t,e.substring(l+1,h))):a.push(z(e.substring(l+1,h),t)),d=!1,r=(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));r=l+1,d=!0}}else if("]"===c){if(!d)throw g("INVALID_EXPR","Invalid property expression: unexpected "+c+" at position "+l);if(r!=l){if(n=e.substring(r,l),!/^\d+$/.test(n))throw g("INVALID_EXPR","Invalid property expression: unexpected array expression at position "+r);a.push(parseInt(n))}r=l+1,d=!1}else if(" "===c)throw g("INVALID_EXPR","Invalid property expression: unexpected ' ' at position "+l)}if(d||s)throw new g("INVALID_EXPR","Invalid property expression: unterminated expression");return r<o&&a.push(e.substring(r)),a}function B(e,t){var o=null,t="string"==typeof t?z(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 r(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 i(t,e){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;var o=r(o);return o.module||(t.set?o.module=t.set.module:o.module="node-red"),o}function n(e){var t=RED.nodes.getIconSets()[e.module];return!(!t||-1===t.indexOf(e.file))}var s={};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),i=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),i=parseInt(e.substring(3,4)+e.substring(3,4),16)}var t,o,i=(((t=Math.max(0,t-50))<<16)+((o=Math.max(0,o-50))<<8)+(i=Math.max(0,i-50))).toString(16);return"#"+"000000".slice(0,6-i.length)+i}function a(e,t,o){for(var i=0;i<o.length;i++){var n=o[i];if(n.module.test(e))return n}}return{createObjectElement:function s(t,e){var o,i,n,d,l=(e=e||{}).key,c=e.typeHint,a=e.hideKey,u=e.path,p=e.sourceId,f=e.rootPath,h=e.expandPaths,g=e.ontoggle,v=e.exposeApi,r=e.tools,m={};void 0!==u&&void 0!==f&&(d=u.substring(f.length+("."===u[f.length]?1:0)));var b=$('<span class="red-ui-debug-msg-element"></span>');if(b.collapse=function(){b.find(".red-ui-debug-msg-expandable").parent().addClass("collapsed")},i=$('<span class="red-ui-debug-msg-row"></span>').appendTo(b),p&&function(t,o,i,n,a,e){N.hasOwnProperty(o)||(N[o]={});var r,s=$('<span class="red-ui-debug-msg-tools"></span>').appendTo(t),d=$('<span class="red-ui-debug-msg-tools-copy button-group"></span>').appendTo(s);i&&(r=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-terminal"></i></button>').appendTo(d).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(i,r,"clipboard.copyMessagePath")}),RED.popover.tooltip(r,RED._("node-red:debug.sidebar.copyPath")));var l,c=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-clipboard"></i></button>').appendTo(d).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(n,c,"clipboard.copyMessageValue")});RED.popover.tooltip(c,RED._("node-red:debug.sidebar.copyPayload")),void 0!==a&&""!==a&&(l=N[o].hasOwnProperty(a),d=$('<button class="red-ui-button red-ui-button-small red-ui-debug-msg-tools-pin"><i class="fa fa-map-pin"></i></button>').appendTo(s).on("click",function(e){e.preventDefault(),e.stopPropagation(),N[o].hasOwnProperty(a)?(delete N[o][a],$(this).removeClass("selected"),t.removeClass("red-ui-debug-msg-row-pinned")):(e="$"+("["===a[0]?"":".")+a,N[o][a]=z(e),$(this).addClass("selected"),t.addClass("red-ui-debug-msg-row-pinned"))}).toggleClass("selected",l),t.toggleClass("red-ui-debug-msg-row-pinned",l),RED.popover.tooltip(d,RED._("node-red:debug.sidebar.pinPath"))),!e||(e="function"==typeof e?e(i,n):e)&&(e.addClass("red-ui-debug-msg-tools-other"),e.appendTo(s))}(i,p,u,t,d,r),l)a||($('<span class="red-ui-debug-msg-object-key"></span>').text(l).appendTo(i),$("<span>: </span>").appendTo(i));else if(b.addClass("red-ui-debug-msg-top-level"),p){var y=N[p],h=[];if(y){for(var w in y)if(y.hasOwnProperty(w))try{void 0!==B({$:t},y[w])&&h.push(w)}catch(e){}h.sort()}b.clearPinned=function(){b.find(".red-ui-debug-msg-row-pinned").removeClass("red-ui-debug-msg-row-pinned"),N[p]={}}}e=$('<span class="red-ui-debug-msg-object-value"></span>').appendTo(i),r=Array.isArray(t),a=!1;if(t&&"object"==typeof t&&t.hasOwnProperty("type")&&t.hasOwnProperty("data")&&(t.__enc__&&"set"===t.type||t.__enc__&&"array"===t.type||"Buffer"===t.type)&&(a=r=!0),null==t)$('<span class="red-ui-debug-msg-type-null">'+t+"</span>").appendTo(e);else if(t.__enc__&&"undefined"===t.type)$('<span class="red-ui-debug-msg-type-null">undefined</span>').appendTo(e);else if(!t.__enc__||"number"!==t.type&&"bigint"!==t.type)if("regexp"===c||t.__enc__&&"regexp"===t.type)o=$('<span class="red-ui-debug-msg-type-string red-ui-debug-msg-object-header"></span>').text("string"==typeof t?t:t.data).appendTo(e);else if("function"===c||t.__enc__&&"function"===t.type)o=$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-header"></span>').text("function").appendTo(e);else if("internal"===c||t.__enc__&&"internal"===t.type)o=$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-header"></span>').text("[internal]").appendTo(e);else if("string"==typeof t)/[\t\n\r]/.test(t)&&(b.addClass("collapsed"),$('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').prependTo(i),I(i,function(){$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-type-header"></span>').text(c||"string").appendTo(i);var e=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(b);$('<pre class="red-ui-debug-msg-type-string"></pre>').text(t).appendTo(e)},function(e){g&&g(u,e)},P(d,h))),o=$('<span class="red-ui-debug-msg-type-string red-ui-debug-msg-object-header"></span>').html('"'+L(S(t))+'"').appendTo(e),/^#[0-9a-f]{6}$/i.test(t)&&$('<span class="red-ui-debug-msg-type-string-swatch"></span>').css("backgroundColor",t).appendTo(o);else if("number"==typeof t)o=$('<span class="red-ui-debug-msg-type-number"></span>').appendTo(e),Number.isInteger(t)&&0<=t&&(o.addClass("red-ui-debug-msg-type-number-toggle"),o.on("click",function(e){e.preventDefault(),A($(this),t,p,u,!0)})),A(o,t,p,u,!1,"hex"===c?"hex":void 0);else if(r){b.addClass("collapsed");var E=t.length;!c||(r=/\[(\d+)\]/.exec(c))&&(E=parseInt(r[1]));var D=t,R="array";a?(D=t.data,void 0===E&&(E=D.length),D.__enc__&&(D=D.data),R=t.type.toLowerCase()):/buffer/.test(c)&&(R="buffer");var x,_=D.length;if(0<E&&($('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').prependTo(i),x=$('<div class="red-ui-debug-msg-array-rows"></div>').appendTo(b),b.addClass("red-ui-debug-msg-buffer-raw")),l)n=$('<span class="red-ui-debug-msg-type-meta"></span>').text(c||R+"["+E+"]").appendTo(e);else{n=$('<span class="red-ui-debug-msg-object-header"></span>').appendTo(e),$("<span>[ </span>").appendTo(n);for(var k=Math.min(E,10),T=0;T<k;T++)O(D[T]).appendTo(n),T<k-1&&$("<span>, </span>").appendTo(n);k<E&&$("<span> &hellip;</span>").appendTo(n),0===k&&$('<span class="red-ui-debug-msg-type-meta">empty</span>').appendTo(n),$("<span> ]</span>").appendTo(n)}0<E&&I(i,function(){if(l||(n=$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-type-header"></span>').text(c||R+"["+E+"]").appendTo(i)),"buffer"===R){var e=$('<div class="red-ui-debug-msg-string-rows"></div>').appendTo(b),t=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(e),e="";try{e=String.fromCharCode.apply(null,new Uint16Array(D))}catch(e){console.log(e)}$('<pre class="red-ui-debug-msg-type-string"></pre>').text(e).appendTo(t),t=$('<span class="red-ui-debug-msg-buffer-opts"></span>').appendTo(n),t=$('<a class="red-ui-button red-ui-button-small" href="#"></a>').text("raw").appendTo(t).on("click",function(e){e.preventDefault(),e.stopPropagation(),M(b,$(this),p,u,!0)}),M(b,t,p,u,!1)}if(_<=10)for(T=0;T<_;T++)r=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(x),m[u+"["+T+"]"]=s(D[T],{key:""+T,typeHint:"buffer"===R&&"hex",hideKey:!1,path:u+"["+T+"]",sourceId:p,rootPath:f,expandPaths:h,ontoggle:g,exposeApi:v}).appendTo(r);else{for(T=0;T<_;T+=10){var a=T,r=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(x);i=$("<span></span>").appendTo(r),$('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').appendTo(i),I(i,function(){var o=a,i=Math.min(_-1,a+9),n=r;return function(){for(var e=o;e<=i;e++){var t=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(n);m[u+"["+e+"]"]=s(D[e],{key:""+e,typeHint:"buffer"===R&&"hex",hideKey:!1,path:u+"["+e+"]",sourceId:p,rootPath:f,expandPaths:h,ontoggle:g,exposeApi:v}).appendTo(t)}}}(),function(){var t=void 0+"["+T+"]";return function(e){g&&g(t,e)}}(),P(d,h,a,Math.min(_-1,a+9))),$('<span class="red-ui-debug-msg-object-key"></span>').html("["+a+" &hellip; "+Math.min(_-1,a+9)+"]").appendTo(i)}_<E&&$('<div class="red-ui-debug-msg-object-entry collapsed"><span class="red-ui-debug-msg-object-key">['+_+" &hellip; "+E+"]</span></div>").appendTo(x)}},function(e){g&&g(u,e)},P(d,h))}else if("object"==typeof t){b.addClass("collapsed"),R="object",(D=t).__enc__&&(D=D.data,R=t.type.toLowerCase());var C=Object.keys(D);if((l||0<C.length)&&($('<i class="fa fa-caret-right red-ui-debug-msg-object-handle"></i> ').prependTo(i),I(i,function(){for(l||$('<span class="red-ui-debug-msg-type-meta red-ui-debug-msg-object-type-header"></span>').text(R).appendTo(i),T=0;T<C.length;T++){var e=$('<div class="red-ui-debug-msg-object-entry collapsed"></div>').appendTo(b),t=u;void 0!==t&&(/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(C[T])?t+=(0<t.length?".":"")+C[T]:t+='["'+C[T].replace(/"/,'\\"')+'"]'),m[t]=s(D[C[T]],{key:C[T],typeHint:!1,hideKey:!1,path:t,sourceId:p,rootPath:f,expandPaths:h,ontoggle:g,exposeApi:v}).appendTo(e)}0===C.length&&$('<div class="red-ui-debug-msg-object-entry red-ui-debug-msg-type-meta collapsed"></div>').text("empty").appendTo(b)},function(e){g&&g(u,e)},P(d,h))),l)$('<span class="red-ui-debug-msg-type-meta"></span>').text(R).appendTo(e);else{n=$('<span class="red-ui-debug-msg-object-header"></span>').appendTo(e),$("<span>{ </span>").appendTo(n);var j=Math.min(C.length,5);for(T=0;T<j;T++)$('<span class="red-ui-debug-msg-object-key"></span>').text(C[T]).appendTo(n),$("<span>: </span>").appendTo(n),O(D[C[T]]).appendTo(n),T<j-1&&$("<span>, </span>").appendTo(n);C.length>j&&$("<span> &hellip;</span>").appendTo(n),0===j&&$('<span class="red-ui-debug-msg-type-meta">empty</span>').appendTo(n),$("<span> }</span>").appendTo(n)}}else $('<span class="red-ui-debug-msg-type-other"></span>').text(""+t).appendTo(e);else o=$('<span class="red-ui-debug-msg-type-number red-ui-debug-msg-object-header"></span>').text(t.data).appendTo(e);return v&&b.prop("expand",function(){return function(e,t){if(u===e)i.prop("toggle")&&i.prop("toggle")(t);else if(m[e]&&m[e].prop("expand"))m[e].prop("expand")(e,t);else for(var o in m)if(m.hasOwnProperty(o)&&0===e.indexOf(o)){m[o].prop("expand")&&m[o].prop("expand")(e,t);break}}}),b},getMessageProperty:B,setMessageProperty:function(e,t,o,i){void 0===i&&(i=void 0!==o);for(var n,a=z(t=0===t.indexOf("msg.")?t.substring(4):t),r=a.length,s=e,d=0;d<r-1;d++)if("string"==typeof(n=a[d])||"number"==typeof n&&!Array.isArray(s))if(s.hasOwnProperty(n))s=s[n];else{if(!i)return null;"string"==typeof a[d+1]?s[n]={}:s[n]=[],s=s[n]}else if("number"==typeof n)if(void 0===s[n]){if(!i)return null;"string"==typeof a[d+1]?s[n]={}:s[n]=[],s=s[n]}else s=s[n];n=a[r-1],void 0===o?"number"==typeof n&&Array.isArray(s)?s.splice(n,1):delete s[n]:s[n]=o},normalisePropertyExpression:z,validatePropertyExpression:function(e){try{z(e);return!0}catch(e){return!1}},separateIconPath:r,getDefaultNodeIcon:i,getNodeIcon:function(e,t){if(t&&"_selection_"===t.type)return"font-awesome/fa-object-ungroup";if(t&&"group"===t.type)return"font-awesome/fa-object-group";if("config"===(e=e||{}).category)return RED.settings.apiRootUrl+"icons/node-red/cog.svg";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(n(o=r(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"),n(o)))return RED.settings.apiRootUrl+"icons/"+t.icon.replace(/.png$/,".svg")}var o;if(n(o=i(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"),n(o))return RED.settings.apiRootUrl+"icons/"+o.module+"/"+o.file;o.file=t}return o.module="node-red",n(o)||/.png$/i.test(o.file)&&(o.file=o.file.replace(/.png$/,".svg"),n(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 i;if(o=o||"","tab"===t.type)i=t.label||o;else if("group"===t.type)i=t.name||o;else{i=t._def.label;try{i=("function"==typeof i?i.call(t):i)||o}catch(e){console.log("Definition error: "+t.type+".label",e),i=o}}return RED.text.bidi.enforceTextDirectionWithUCC(i)},getNodeColor:function(e,t){var o=(t=t||{}).color,i=RED.settings.theme("palette.theme")||[];if(0<i.length){if(!s.hasOwnProperty(e)){s[e]=t.color;for(var n=i.length,a=0;a<n;a++){var r=i[a];if((!r.hasOwnProperty("category")||(r.hasOwnProperty("_category")||(r._category=new RegExp(r.category)),r._category.test(t.category)))&&(!r.hasOwnProperty("type")||(r.hasOwnProperty("_type")||(r._type=new RegExp(r.type)),r._type.test(e)))){s[e]=r.color||t.color;break}}}o=s[e]}return o||"#ddd"},clearNodeColorCache:function(){s={}},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 i=0;i<o.length;i+=2)e.push(parseInt(o.substr(i,2),16))}return e},parseContextKey:function(e,t){var o={},i=/^#:\((\S+?)\)::(.*)$/.exec(e);return i?(o.store=i[1],o.key=i[2]):(o.key=e,t?o.store=t:RED.settings.context&&(o.store=RED.settings.context.default)),o},createIconElement:function(e,t,o){0!==(a=t.find(".red-ui-palette-icon")).length&&a.remove(),0!==(n=t.find("i")).length&&n.remove();var i=r(e);if("font-awesome"===i.module){var n,a=RED.nodes.fontAwesome.getIconUnicode(i.file);if(a)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:S,renderMarkdown:t,createNodeIcon:function(e,t){var o,i,n=$('<span class="red-ui-node-icon-container">'),a=e._def,r=$("<div>",{class:"red-ui-node-icon"});return"_selection_"===e.type?r.addClass("red-ui-palette-icon-selection"):"group"===e.type?r.addClass("red-ui-palette-icon-group"):"tab"===e.type?r.addClass("red-ui-palette-icon-flow"):(o=RED.utils.getNodeColor(e.type,a),r.css("backgroundColor",o),(i=l(o))!==o&&r.css("border-color",i)),a=RED.utils.getNodeIcon(a,e),RED.utils.createIconElement(a,r,!0),r.appendTo(n),t&&(t=RED.utils.getNodeLabel(e,e.name||e.type+": "+e.id),e=$("<div>",{class:"red-ui-node-label"}).appendTo(n),t?e.text(t):e.html("&nbsp;")),n},getDarkerColor:l,parseModuleList:function(e){return(e=e||["*"]).map(function(e){var t=/^(.+?)(?:@(.*))?$/.exec(e),e=-1===(e=t[1].indexOf("*"))?1/0:e;return{module:new RegExp("^"+t[1].replace(/\*/g,".*")+"$"),version:t[2],wildcardPos:e}})},checkModuleAllowed:function(e,t,o,i){return!o&&!i||(0===o.length&&0===i.length||(o=a(e,0,o),i=a(e,0,i),!(!o||i)||!(!o&&i)&&(!o&&!i||(o.wildcardPos!==i.wildcardPos?o.wildcardPos>i.wildcardPos:o.module.toString().length>i.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}}}(),function(s){s.widget("nodered.editableList",{_create:function(){var o=this;this.element.addClass("red-ui-editableList-list"),this.uiWidth=this.element.width(),this.uiContainer=this.element.wrap("<div>").parent(),this.options.header?(this.options.header.addClass("red-ui-editableList-header"),this.borderContainer=this.uiContainer.wrap("<div>").parent(),this.borderContainer.prepend(this.options.header),this.topContainer=this.borderContainer.wrap("<div>").parent()):this.topContainer=this.uiContainer.wrap("<div>").parent(),this.topContainer.addClass("red-ui-editableList"),this.options.class&&this.topContainer.addClass(this.options.class);var e,t,i=this.options.buttons||[];!1!==this.options.addButton&&("string"==typeof this.options.addButton?e=this.options.addButton:t=RED&&RED._?(e=RED._("editableList.add"),RED._("editableList.addTitle")):(e="add","add new item"),i.unshift({label:e,icon:"fa fa-plus",click:function(e){o.addItem({})},title:t})),i.forEach(function(t){var e=s('<button type="button" class="red-ui-button red-ui-button-small red-ui-editableList-addButton" style="margin-top: 4px; margin-right: 5px;"></button>').appendTo(o.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(s("<i></i>").attr("class",t.icon)),t.label&&e.append(s("<span></span>").text(" "+t.label))}),"absolute"===this.element.css("position")&&(["top","left","bottom","right"].forEach(function(e){var t=o.element.css(e);"auto"!==t&&""!==t&&(o.topContainer.css(e,t),o.uiContainer.css(e,"0"),"top"===e&&o.options.header&&o.uiContainer.css(e,"20px"),o.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);i=this.element.css("minHeight");"0px"!==i&&(this.uiContainer.css("minHeight",i),this.element.css("minHeight",0));i=this.element.css("maxHeight");"0px"!==i&&(this.uiContainer.css("maxHeight",i),this.element.css("maxHeight",null)),"auto"!==this.options.height&&(this.uiContainer.css("overflow-y","scroll"),isNaN(this.options.height)||(this.uiHeight=this.options.height)),this.element.height("auto");var i=this.element.attr("style");null!==(i=/width\s*:\s*(\d+%)/i.exec(i))&&(this.element.width("100%"),this.uiContainer.width(i[1])),this.options.sortable&&(i={axis:"y",update:function(e,t){o.options.sortItems&&o.options.sortItems(o.items())},handle:"string"==typeof this.options.sortable?this.options.sortable:".red-ui-editableList-item-handle",cursor:"move",tolerance:"pointer",forcePlaceholderSize:!0,placeholder:"red-ui-editabelList-item-placeholder",start:function(e,t){t.placeholder.height(t.item.height()-4)}},this.options.connectWith&&(i.connectWith=this.options.connectWith),this.element.sortable(i)),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(s(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 i=this,n=0;return this.activeFilter?(this.items().each(function(e,t){var o=t.data("data");try{i.activeFilter(o)?(t.parent().show(),n++):t.parent().hide()}catch(e){console.log(e),t.parent().show(),n++}}),n):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(s(e).children(".red-ui-editableList-item-content").data("data"),s(t).children(".red-ui-editableList-item-content").data("data"))}),s.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 s(t[e]).data("data")},indexOf:function(e){for(var t=this.items(),o=0;o<t.length;o++)if(s(t[o]).data("data")===e)return o;return-1},insertItemAt:function(i,e){var n=this;i=i||{};var t,a=s("<li>"),o=s("<div/>").addClass("red-ui-editableList-item-content").appendTo(a);o.data("data",i),!0===this.options.sortable&&(s('<i class="red-ui-editableList-item-handle fa fa-bars"></i>').appendTo(a),a.addClass("red-ui-editableList-item-sortable")),this.options.removable&&(t=s("<a/>",{href:"#",class:"red-ui-editableList-item-remove red-ui-button red-ui-button-small"}).appendTo(a),s("<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(){s(this).remove(),n.options.removeItem&&n.options.removeItem(t)})}));var r=!1;if(this.activeSort&&this.items().each(function(e,t){var o;r||(o=t.data("data"),n.activeSort(i,o)<0&&(a.insertBefore(t.closest("li")),r=!0))}),r||(e<=0?a.prependTo(this.element):e>n.element.children().length-1?a.appendTo(this.element):a.insertBefore(this.element.children().eq(e))),this.options.addItem){e=n.element.children().length-1;if(n.options.addItem(o,e,i),n.activeFilter)try{n.activeFilter(i)||a.hide()}catch(e){}!n.activeSort&&n.scrollOnAdd&&setTimeout(function(){n.uiContainer.scrollTop(n.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===s(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 s(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===s(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}})}(jQuery),function(u){u.widget("nodered.treeList",{_create:function(){var i=this,n=!0;!1===i.options.autoSelect&&(n=!1),this.element.addClass("red-ui-treeList"),this.element.attr("tabIndex",0);var e=u("<div>",{class:"red-ui-treeList-container"}).appendTo(this.element);this.element.on("keydown",function(e){var t,o=i._topList.find(".focus").parent().data("data");if(o||40!==e.keyCode&&38!==e.keyCode){switch(e.keyCode){case 32:case 13: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():i._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=i._getPreviousSibling(o))&&i._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=i._getNextSibling(o);!t&&o.parent;)o=o.parent,t=i._getNextSibling(o)}t&&(n?i.select(t):i._topList.find(".focus").removeClass("focus"),t.treeList.label.addClass("focus"))}else i._data[0]&&(n?i.select(i._data[0]):i._topList.find(".focus").removeClass("focus"),i._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);e={addButton:!1,scrollOnAdd:!1,height:"100%",addItem:function(e,t,o){i._addSubtree(i._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,i,o,n,a){var r=this,s=u('<ol class="red-ui-treeList-list">').appendTo(e).editableList({connectWith:".red-ui-treeList-sortable",sortable:r.options.sortable,addButton:!1,scrollOnAdd:!1,height:"auto",addItem:function(e,t,o){r._addSubtree(s,e,o,n+1)},sortItems:function(e){var t=[],o=[];e.each(function(){var e=u(this).data("data");t.push(e);e=r._fixDepths(i,e);e&&o.push(e)}),Array.isArray(i.children)&&(i.children=t),o.forEach(function(e){r._trigger("changeparent",null,e)}),r._trigger("sort",null,i)},filter:i.treeList.childFilter});r.options.sortable&&s.addClass("red-ui-treeList-sortable");var d=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=i,s.editableList("addItem",o[l])}++l<o.length&&setTimeout(function(){c()},10)};return c(),s.hide(),s},_fixDepths:function(e,t){var o,i=this,n=null;return t.parent!==e&&(reparented=!0,o=t.parent,t.parent=e,n={item:t,old:o}),t.depth!==e.depth+1&&(t.depth=e.depth+1,e=(t.gutter&&!t.gutter.hasClass("red-ui-treeList-gutter-float")?t.gutter.width()+2:0)+20*t.depth,t.treeList.labelPadding.width(e+"px"),t.element&&u(t.element).css({width:"calc(100% - "+(e+20+(t.icon?20:0))+"px)"}),t.children&&Array.isArray(t.children)&&t.children.forEach(function(e){i._fixDepths(t,e)})),n},_initItem:function(r,s){var d;r.treeList||(((d=this)._items[r.id]=r).treeList={},r.depth=s,r.treeList.remove=function(e){var t;if(r.treeList.parentList&&r.treeList.parentList.editableList("removeItem",r,e),r.parent&&(e=r.parent.children.indexOf(r),r.parent.children.splice(e,1),d._trigger("sort",null,r.parent)),d._selected.delete(r),delete r.treeList,delete d._items[r.id],0===r.depth){for(var o in d._items)!d._items.hasOwnProperty(o)||(t=d._items[o]).parent&&t.parent.id===r.id&&(delete d._items[o].treeList,delete d._items[o]);d._data=d._data.filter(function(e){return e.id!==r.id})}},r.treeList.insertChildAt=function(e,t,o){(e.parent=r).children.splice(t,0,e);function i(t,o){d._initItem(o,t.depth+1),o.parent=t,o.children&&"function"!=typeof o.children&&o.children.forEach(function(e){i(o,e,t.depth)})}i(r,e),!r.deferBuild&&r.treeList.childList&&(r.treeList.childList.editableList("insertItemAt",e,t),o&&setTimeout(function(){d.select(e)},100),d._trigger("sort",null,r),d.activeFilter&&d.filter(d.activeFilter))},r.treeList.addChild=function(e,t){r.treeList.insertChildAt(e,r.children.length,t)},r.treeList.expand=function(t){if(r.children){if(!r.treeList.container)return r.expanded=!0,void(t&&t(!1));var o,i,n,e,a=r.treeList.container;a.hasClass("expanded")?t&&t(!1):(a.hasClass("built")||!r.deferBuild&&"function"!=typeof r.children?(d._loadingData||20<r.children.length?r.treeList.childList.show():r.treeList.childList.slideDown("fast"),r.expanded=!0,t&&t(!d._loadingData)):(a.addClass("built"),o=!1,n=0,Date.now(),e=function(e){o=!0,r.treeList.childList=d._addChildren(a,r,e,s,function(){t&&t(!0),d._trigger("childrenloaded",null,r)});e=Date.now()-n;e<400?setTimeout(function(){r.treeList.childList.slideDown("fast"),i&&i.remove()},400-e):(r.treeList.childList.slideDown("fast"),i&&i.remove()),r.expanded=!0},"function"==typeof r.children?r.children(e,r):(delete r.deferBuild,e(r.children)),o||(n=Date.now(),i=u('<div class="red-ui-treeList-spinner">').css({"background-position":35+20*s+"px 50%"}).appendTo(a))),a.addClass("expanded"))}else t&&t(!1)},r.treeList.collapse=function(){!1!==r.collapsible&&r.children&&(r.expanded=!1,r.treeList.container&&(r.children.length<20?r.treeList.childList.slideUp("fast"):r.treeList.childList.hide(),r.treeList.container.removeClass("expanded")))},r.treeList.sortChildren=function(e){r.children&&(r.children.sort(e),r.treeList.childList&&(r.treeList.childList.editableList("sort",e),r.treeList.childList.editableList("sort",null)))},r.treeList.replaceElement=function(e){var t;r.element&&(r.treeList.container&&(u(r.element).remove(),u(e).appendTo(r.treeList.label),t=(r.gutter?r.gutter[0].offsetWidth+2:0)+20*r.depth,u(e).css({width:"calc(100% - "+(t+20+(r.icon?20:0))+"px)"})),r.element=e)},r.children&&"function"!=typeof r.children&&r.children.forEach(function(e){d._initItem(e,s+1)}))},_addSubtree:function(e,o,i,t){var n=this;this._initItem(i,t),i.treeList.container=o,i.treeList.parentList=e;var a=u("<div>",{class:"red-ui-treeList-label"});a.appendTo(o),i.treeList.label=a,i.class&&a.addClass(i.class),i.gutter&&i.gutter.css({position:"absolute"}).appendTo(a);e=(i.gutter&&!i.gutter.hasClass("red-ui-treeList-gutter-float")?i.gutter.width()+2:0)+20*t;i.treeList.labelPadding=u("<span>").css({display:"inline-block","flex-shrink":0,width:e+"px"}).appendTo(a),a.on("mouseover",function(e){n._trigger("itemmouseover",e,i)}),a.on("mouseout",function(e){n._trigger("itemmouseout",e,i)}),a.on("mouseenter",function(e){n._trigger("itemmouseenter",e,i)}),a.on("mouseleave",function(e){n._trigger("itemmouseleave",e,i)}),i.treeList.makeLeaf=function(e){var t;d.children().length&&(e&&i.children&&(t=function(e){e.children&&e.children.forEach(function(e){e.element&&e.element.detach(),e.gutter&&e.gutter.detach(),t(e)})})(i),d.empty(),i.deferBuild||(i.treeList.childList.remove(),delete i.treeList.childList),a.off("click.red-ui-treeList-expand"),d.off("click.red-ui-treeList-expand"),delete i.children,o.removeClass("expanded"),delete i.expanded)},i.treeList.makeParent=function(e){d.children().length||(u('<i class="fa fa-angle-right" />').toggleClass("hide",!1===i.collapsible).appendTo(d),d.on("click.red-ui-treeList-expand",function(e){e.stopPropagation(),e.preventDefault(),o.hasClass("expanded")?i.treeList.collapse():i.treeList.expand()}),a.on("click.red-ui-treeList-expand",function(e){o.hasClass("expanded")?(i.hasOwnProperty("selected")||a.hasClass("selected"))&&i.treeList.collapse():i.treeList.expand()}),i.children||(i.children=e||[],i.treeList.childList=n._addChildren(o,i,i.children,t)))};var r,s,d=u('<span class="red-ui-treeList-icon"></span>').appendTo(a);i.children&&i.treeList.makeParent(),i.checkbox?(r=u('<span class="red-ui-treeList-icon"></span>'),(s=u('<input class="red-ui-treeList-checkbox" type="checkbox">').prop("checked",i.selected).appendTo(r)).on("click",function(e){e.stopPropagation()}),s.on("change",function(e){i.selected=this.checked,i.selected?n._selected.add(i):n._selected.delete(i),a.toggleClass("selected",this.checked),n._trigger("select",e,i)}),i.children||a.on("click",function(e){e.stopPropagation(),s.trigger("click"),n._topList.find(".focus").removeClass("focus"),a.addClass("focus")}),i.treeList.select=function(e){e!==i.selected&&s.trigger("click")},i.treeList.checkbox=s,r.appendTo(a)):i.radio?(r=u('<span class="red-ui-treeList-icon"></span>'),(s=u('<input class="red-ui-treeList-radio" type="radio">').prop("name",i.radio).prop("checked",i.selected).appendTo(r)).on("click",function(e){e.stopPropagation()}),s.on("change",function(e){i.selected=this.checked,n._selected.forEach(function(e){e.radio===i.radio&&(e.treeList.label.removeClass("selected"),e.selected=!1,n._selected.delete(e))}),i.selected?n._selected.add(i):n._selected.delete(i),a.toggleClass("selected",this.checked),n._trigger("select",e,i)}),i.children||a.on("click",function(e){e.stopPropagation(),s.trigger("click"),n._topList.find(".focus").removeClass("focus"),a.addClass("focus")}),i.treeList.select=function(e){e!==i.selected&&s.trigger("click")},r.appendTo(a),i.treeList.radio=s):(a.on("click",function(e){n.options.multi||n.clearSelection(),a.addClass("selected"),n._selected.add(i),n._topList.find(".focus").removeClass("focus"),a.addClass("focus"),n._trigger("select",e,i)}),a.on("dblclick",function(e){n._topList.find(".focus").removeClass("focus"),a.addClass("focus"),i.children||n._trigger("confirm",e,i)}),i.treeList.select=function(e){n.options.multi||n.clearSelection(),a.toggleClass("selected",e),e?(n._selected.add(i),n._trigger("select",null,i)):n._selected.delete(i),n.reveal(i)}),a.toggleClass("selected",!!i.selected),i.selected&&n._selected.add(i),i.icon&&("string"==typeof i.icon?u('<span class="red-ui-treeList-icon"><i class="'+i.icon+'" /></span>').appendTo(a):u('<span class="red-ui-treeList-icon">').appendTo(a).append(i.icon)),i.hasOwnProperty("label")||i.hasOwnProperty("sublabel")?(i.hasOwnProperty("label")&&u('<span class="red-ui-treeList-label-text"></span>').text(i.label).appendTo(a),i.hasOwnProperty("sublabel")&&u('<span class="red-ui-treeList-sublabel-text"></span>').text(i.sublabel).appendTo(a)):i.element&&(u(i.element).appendTo(a),u(i.element).css({width:"calc(100% - "+(e+20+(i.icon?20:0))+"px)"})),i.children&&(Array.isArray(i.children)&&!i.deferBuild&&(i.treeList.childList=n._addChildren(o,i,i.children,t)),i.expanded&&i.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 i=this,n=[],t=e;t;)n.unshift(t),t=t.parent;var a=!1,r=function(e){a=a||e;var t=n.shift();0===n.length?setTimeout(function(){i.reveal(t),o&&o()},a?200:0):t.treeList.expand(r)};r()}},reveal:function(e){var t,o,i;(e="string"==typeof e?this._items[e]:e)&&(i=this._topList.offset().top,t=e.treeList.label.offset().top,t-=i+(o=this._topList.parent().scrollTop()),i=this._topList.parent().height(),t<(e=e.treeList.label.outerHeight())/2?this._topList.parent().scrollTop(o+t-e/2-e):i<t+e&&this._topList.parent().scrollTop(o+(t+2.5*e-i)))},select:function(e,t,o){var i=this;this.options.multi||!1===o||this.clearSelection(),Array.isArray(e)?e.forEach(function(e){i.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"),i._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(i){this.activeFilter=i;function n(e){var t=0;i&&i(e)&&(t++,a++);var o=0;return e.children&&"function"!=typeof e.children&&(e.treeList.childList?o=e.treeList.childList.editableList("filter",n):(e.treeList.childFilter=n,i&&e.children.forEach(function(e){n(e)&&o++})),t+=o,i&&0<o&&setTimeout(function(){e.treeList.expand()},10)),i?0<t:(a++,!0)}var a=0;return this._topList.editableList("filter",n),a},get:function(e){return this._items[e]||null}})}(jQuery),function(t){t.widget("nodered.checkboxSet",{_create:function(){var o=this;this.uiElement=this.element.wrap("<span>").parent(),this.uiElement.addClass("red-ui-checkboxSet"),this.options.parent&&(this.parent=this.options.parent,this.parent.checkboxSet("addChild",this.element)),this.children=[],this.partialFlag=!1,this.stateValue=0;var e=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].show()):(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 i=this.partialFlag||e;this.element.prop("checked",i),!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 s={};function d(t){var e;if(null!==t&&t.id&&!1===RED.settings.theme("menu."+t.id))return null;if(null===t)e=$('<li class="red-ui-menu-divider"></li>');else{e=$("<li></li>"),t.group&&e.addClass("red-ui-menu-group-"+t.group);var o="<a "+(t.id?'id="'+t.id+'" ':"")+'tabindex="-1" href="#">';t.toggle&&(o+='<i class="fa fa-square pull-left"></i>',o+='<i class="fa fa-check-square pull-left"></i>'),void 0!==t.icon&&(/\.(png|svg)/.test(t.icon)?o+='<img src="'+t.icon+'"/> ':o+='<i class="'+(t.icon||'" style="display: inline-block;"')+'"></i> '),t.sublabel?o+='<span class="red-ui-menu-label-container"><span class="red-ui-menu-label">'+t.label+'</span><span class="red-ui-menu-sublabel">'+t.sublabel+"</span></span>":o+='<span class="red-ui-menu-label"><span>'+t.label+"</span></span>",o+="</a>";var i,o=$(o).appendTo(e);if(t.link=o,"string"!=typeof t.onselect||(i=RED.keyboard.getShortcut(t.onselect))&&i.key&&(t.shortcutSpan=$('<span class="red-ui-popover-key">'+RED.keyboard.formatKey(i.key,!0)+"</span>").appendTo(o.find(".red-ui-menu-label"))),(s[t.id]=t).onselect?(o.on("click",function(e){e.preventDefault(),$(this).parent().hasClass("disabled")||(t.toggle?!0===t.toggle?u(t.id,!c(t.id)):u(t.id,!0):l(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?(o.addClass("active"),l(t.id,!0)):!1===i?(o.removeClass("active"),l(t.id,!1)):t.hasOwnProperty("selected")&&(t.selected?o.addClass("active"):o.removeClass("active"),l(t.id,t.selected)))):t.href?o.attr("target","_blank").attr("href",t.href):t.options||(e.addClass("disabled"),o.on("click",function(e){e.preventDefault()})),t.options){e.addClass("red-ui-menu-dropdown-submenu pull-left");for(var n=$('<ul id="'+t.id+'-submenu" class="red-ui-menu-dropdown"></ul>').appendTo(e),a=0;a<t.options.length;a++){var r=d(t.options[a]);r&&r.appendTo(n)}}t.disabled&&e.addClass("disabled")}return e}function l(e,t){var o=s[e],i=o.onselect;(i="string"==typeof o.onselect?RED.actions.get(o.onselect):i)?i.call(o,t):console.log("No callback for",e,o.onselect)}function c(e){return $("#"+e).hasClass("active")}function u(e,t){var o=!1;c(e)==t&&(o=!0);var i=s[e];if(t?$("#"+e).addClass("active"):$("#"+e).removeClass("active"),i){if(i.toggle&&"string"==typeof i.toggle&&t)for(var n in s)!s.hasOwnProperty(n)||(n=s[n]).id!=i.id&&i.toggle==n.toggle&&u(n.id,!1);!o&&i.onselect&&l(i.id,t),i.local||o||RED.settings.set(i.setting||"menu-"+i.id,t)}}return{init:function(e){var t,o=$("<ul/>",{class:"red-ui-menu red-ui-menu-dropdown pull-right"});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())})));for(var i=!1,n=0;n<e.options.length;n++){var a,r=e.options[n];null===r&&i||(a=d(r))&&(a.appendTo(o),i=null===r)}return o},setSelected:u,isSelected:c,toggleSelected:function(e){u(e,!c(e))},setDisabled:function(e,t){t?$("#"+e).parent().addClass("disabled"):$("#"+e).parent().removeClass("disabled")},addItem:function(e,t){var o=d(t);if(null!==t&&t.group){var i=$("#"+e+"-submenu").children(".red-ui-menu-group-"+t.group);if(0===i.length)o.appendTo("#"+e+"-submenu");else{for(var n=0;n<i.length;n++){var a=i[n],r=$(a).find(".red-ui-menu-label").html();if(t.label<r){$(a).before(o);break}}n===i.length&&o.appendTo("#"+e+"-submenu")}}else o.appendTo("#"+e+"-submenu")},removeItem:function(e){$("#"+e).parent().remove()},setAction:function(e,t){(e=s[e])&&(e.onselect=t)},refreshShortcuts:function(){for(var e in s){var t;!s.hasOwnProperty(e)||"string"==typeof(t=s[e]).onselect&&t.shortcutSpan&&(t.shortcutSpan.remove(),delete t.shortcutSpan,(e=RED.keyboard.getShortcut(t.onselect))&&e.key&&(t.shortcutSpan=$('<span class="red-ui-popover-key">'+RED.keyboard.formatKey(e.key,!0)+"</span>").appendTo(t.link.find(".red-ui-menu-label"))))}}}}(),RED.panels={create:function(a){var r=a.container||$("#"+a.id),s=r.children();if(2!==s.length)throw console.log(a.id),new Error("Container must have exactly two children");var d=!a.dir||"vertical"===a.dir;r.addClass("red-ui-panels"),d||r.addClass("red-ui-panels-horizontal"),$(s[0]).addClass("red-ui-panel"),$(s[1]).addClass("red-ui-panel");var l,t=$('<div class="red-ui-panels-separator"></div>').insertAfter(s[0]),c=[],i=!1,u=.5;t.draggable({axis:d?"y":"x",containment:r,scroll:!1,start:function(e,t){l=d?t.position.top:t.position.left,c=[d?$(s[0]).height():$(s[0]).width(),d?$(s[1]).height():$(s[1]).width()]},drag:function(e,t){var o=d?r.height():r.width(),i=(d?t.position.top:t.position.left)-l,n=[c[0]+i,c[1]-i];d?($(s[0]).height(n[0]),t.position.top-=i):($(s[0]).width(n[0]),t.position.left-=i),a.resize&&a.resize(n[0],n[1]),u=n[0]/(o-8)},stop:function(e,t){i=!0}});var o={ratio:function(e){if(void 0===e)return u;i=!0,0===(u=e)||1===e?t.hide():t.show(),d?o.resize(r.height()):o.resize(r.width())},resize:function(e){var t,o;d?(o=[$(s[0]).outerHeight(),$(s[1]).outerHeight()],r.height(e)):(o=[$(s[0]).outerWidth(),$(s[1]).outerWidth()],r.width(e)),i&&(o=[t=u*(e-8),e-t-8],d?$(s[0]).outerHeight(o[0]):$(s[0]).outerWidth(o[0])),a.resize&&(o=d?[$(s[0]).height(),$(s[1]).height()]:[$(s[0]).width(),$(s[1]).width()],a.resize(o[0],o[1]))}};return o}},RED.popover=function(){var E={default:{x:12,y:12},small:{x:8,y:8}};return{create:function(i){var c=i.target,u=i.direction||"right",n=i.trigger,a=i.content,r=i.delay||{show:750,hide:50},t=i.autoClose,s=i.width||"auto",d=i.maxWidth,p=i.size||"default",f=i.offset||0;if(!E[p])throw new Error("Invalid RED.popover size value:",p);function o(e){if(g){var t=c.data("red-ui-popover");if(i.tooltip&&t)g=!1;else{if(v=$('<div class="red-ui-popover"></div>'),i.class&&v.addClass(i.class),m=$('<div class="red-ui-popover-content">').appendTo(v),"default"!==p&&v.addClass("red-ui-popover-size-"+p),"function"==typeof a){var o=a.call(w);if(null===o)return;"string"==typeof o?m.text(o):m.append(o)}else m.html(a);v.appendTo("body"),l({target:c,direction:u,width:s,maxWidth:d}),t&&t.close(!0),"manual"!==i.trigger&&c.data("red-ui-popover",w),i.tooltip&&v.on("mousedown",function(e){h(!0)}),"hover"===n&&i.interactive&&(v.on("mouseenter",function(e){clearTimeout(y),g=!0}),v.on("mouseleave",function(e){y&&clearTimeout(y),g&&(y=setTimeout(function(){g=!1,h()},r.hide))})),e?v.show():v.fadeIn("fast")}}}function l(e){c=e.target||c,u=e.direction||u||"right",f=e.offset||f;var t=e.transition,o=e.width||"auto";v.width(o),e.maxWidth?v.css("max-width",e.maxWidth):v.css("max-width","auto");var i=c[0].getBoundingClientRect(),n=i.height,a=i.width,r=v.outerHeight(),s=v.outerWidth(),d=$(window).scrollTop(),l=$(window).scrollLeft(),o=d+$(window).height(),e=l+$(window).width(),d=0,l=0;"right"===u?(d=i.top+n/2-r/2,l=i.left+a+E[p].x+f):"left"===u?(d=i.top+n/2-r/2,l=i.left-E[p].x-s-f):"bottom"===u?(d=i.top+n+E[p].y+f,(l=i.left+a/2-s/2)<0?(u="right",d=i.top+n/2-r/2,l=i.left+a+E[p].x+f):e<l+s+10?(u="left",d=i.top+n/2-r/2,l=i.left-E[p].x-s-f,o<d+r+n/2+5&&(d-=d+r+n/2-o+5)):o<d+r&&(u="top",d=i.top-E[p].y-r-f,l=i.left+a/2-s/2)):"top"===u?(d=i.top-E[p].y-r-f,l=i.left+a/2-s/2,d<0&&(u="bottom",d=i.top+n+E[p].y+f,l=i.left+a/2-s/2)):/inset/.test(u)&&(d=i.top+n/2-r/2,l=i.left+a/2-s/2,/bottom/.test(u)&&(d=i.top+n-r-f),/top/.test(u)&&(d=i.top+f),/left/.test(u)&&(l=i.left+f),/right/.test(u)&&(l=i.left+a-s-f)),b&&v.removeClass(b),t&&v.css({transition:"0.6s ease","transition-property":"top,left,right,bottom"}),b="red-ui-popover-"+u,v.addClass(b).css({top:d,left:l}),t&&setTimeout(function(){v.css({transition:"none"})},600)}function h(e){$(document).off("mousedown.red-ui-popover"),g||v&&(e?v.remove():v.fadeOut("fast",function(){$(this).remove()}),v=null,c.removeData("red-ui-popover",w))}var g,v,m,b,y=null;"hover"===n?(c.on("mouseenter",function(e){clearTimeout(y),g||(g=!0,y=setTimeout(o,r.show))}),c.on("mouseleave disabled",function(e){y&&clearTimeout(y),g&&(g=!1,setTimeout(h,r.hide))})):"click"===n?(c.on("click",function(e){e.preventDefault(),e.stopPropagation(),((g=!g)?o:h)()}),t&&c.on("mouseleave disabled",function(e){y&&clearTimeout(y),g&&(g=!1,setTimeout(h,t))})):"modal"===n?$(document).on("mousedown.red-ui-popover",function(e){for(var t=e.target;"BODY"!==t.nodeName&&t!==v[0];)t=t.parentElement;"BODY"===t.nodeName&&(g=!1,h())}):t&&setTimeout(function(){g=!1,h()},t);var w={get element(){return v},setContent:function(e){return a=e,w},open:function(e){return g=!0,o(e),w},close:function(e){return g=!1,h(e),w},move:function(e){l(e)}};return w},tooltip:function(e,o,i){e=RED.popover.create({tooltip:!0,target:e,trigger:"hover",size:"small",direction:"bottom",content:function(){var e,t=o;return!i||(e=RED.keyboard.getShortcut(i))&&e.key&&(t=$("<span>"+o+' <span class="red-ui-popover-key">'+RED.keyboard.formatKey(e.key,!0)+"</span></span>")),t},delay:{show:750,hide:50}});return e.setContent=function(e){o=e},e.setAction=function(e){i=e},e},menu:function(o){var i=$('<ul class="red-ui-menu"></ul>');"compact"===o.style&&i.addClass("red-ui-menu-compact");var n=o.options||[],t=RED.popover.panel(i);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"});var a={options:function(e){if(void 0===e)return n;n=e||[],i.empty(),n.forEach(function(t){var e=$("<li>").appendTo(i),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=i.find(":focus").parent();40===e.keyCode?(e.preventDefault(),(!(0<t.length)||t.index()===n.length-1?i.children().first():t.next()).children().first().focus()):38===e.keyCode?(e.preventDefault(),(!(0<t.length)||0===t.index()?i.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(n),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,i=t.closeButton,e=t.target,n=t.align||"right",a=t.offset||[0,0],r=e.offset(),s=(e.width(),e.outerHeight()),d=l.height(),e=l.width();(s=s+r.top+a[1])+d-$(document).scrollTop()>$(window).height()&&(s-=s+d-$(window).height()+5),s<0&&(l.height(d+s),s=0),"right"===n?l.css({top:s+"px",left:r.left+a[0]+"px"}):"left"===n&&l.css({top:s+"px",left:r.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){i&&$(e.target).closest(i).length||$(e.target).closest(l).length||$(e.target).closest(".red-ui-editor-dialog").length||(o&&o(),c(t.dispose))})},hide:c}}}}(),function(n){n.widget("nodered.searchBox",{_create:function(){var t,o,i=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"),n('<i class="fa fa-search"></i>').prependTo(this.uiContainer),this.clearButton=n('<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(),i.element.val(""),i._change("",!0),i.element.trigger("focus")}),this.options.options&&(this.uiContainer.addClass("red-ui-searchBox-has-options"),this.optsButton=n('<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(){i.element.val(e.value+" "),i._change(e.value,!0)}}}),onclose:function(e){t=!1,i.element.trigger("focus")},disposeOnClose:!1}),o=function(){t=!0,i.optsMenu.show({target:i.optsButton,align:"left",offset:[i.optsButton.width()-2,-1],dispose:!1})},this.optsButton.on("click",function(e){e.preventDefault(),t?i.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||o()})),this.resultCount=n("<span>",{class:"red-ui-searchBox-resultCount hide"}).appendTo(this.uiContainer),this.element.val(""),this.element.on("keydown",function(e){27===e.keyCode&&i.element.val(""),13===e.keyCode&&e.preventDefault()}),this.element.on("keyup",function(e){i._change(n(this).val())}),this.element.on("focus",function(){n(document).one("mousedown",function(){i.element.blur()})})},_change:function(e,t){var o,i=!1,i=""===e?(this.clearButton.hide(),!0):(this.clearButton.show(),e.length>=(this.options.minimumLength||0)),e=this.element.val();(i=i&&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 O,I="fa fa-lemon-o",N=!1,P=!1;return{create:function(f){var d,h,g,e,t,o,i,n,a,r,v,s,m={},b=0,l=0,y=f.order,w=f.element||$("#"+f.id),c=w.wrap("<div>").parent(),E=w.wrap("<div>").parent();function u(e,t){var o,i;e.preventDefault(),$(this).hasClass("disabled")||(o=E.scrollLeft(),E.animate({scrollLeft:t},100),i=setInterval(function(){var e=E.scrollLeft();e!==o?(o=e,E.animate({scrollLeft:t},100)):clearInterval(i)},100),$(this).one("mouseup",function(){clearInterval(i)}))}function p(){var e=w.find("li.red-ui-tab.selected"),t=[];return e.each(function(){t.push(m[$(this).find("a").attr("href").slice(1)])}),t}function D(){f.onselect(p())}function R(e){if(!N)if(e.currentTarget===g){if(g=null,O&&Date.now()-O<400)return P=!(O=0),function(e){if(e.preventDefault(),!e.metaKey&&!e.shiftKey)return f.ondblclick&&f.ondblclick(m[$(this).attr("href").slice(1)]),!1}.call(this,e);O=Date.now();var t,o,i=w.find("li.red-ui-tab.active"),n=$(this).parent(),a=!1;if(f.onselect)if(e.metaKey||e.ctrlKey){if(n.hasClass("selected")){if(n.removeClass("selected"),n[0]!==i[0])return void D();if(0===(o=w.find("li.red-ui-tab.selected")).length)return void D();n=o.first()}else i.hasClass("selected")||(m[i.find("a").attr("href").slice(1)],i.addClass("selected")),n.addClass("selected");a=!0}else e.shiftKey?(i[0]!==n[0]&&(i=i.index()<n.index()?(t=i,n):(t=n,i),w.find("li.red-ui-tab").removeClass("selected"),t.addClass("selected"),i.addClass("selected"),t.nextUntil(i).addClass("selected")),a=!0):0<(o=w.find("li.red-ui-tab.selected")).length&&(o.removeClass("selected"),a=!0);n=n.find("a");f.onclick&&f.onclick(m[n.attr("href").slice(1)]),_(n),a&&D()}else g=null}function x(){var e,t,o;0!==w.children().length&&(e=E.scrollLeft(),t=E.width(),o=w.width(),0===e?a.hide():a.show(),e===o-t?r.hide():r.show())}function _(e){var t;0!==(e="string"==typeof e?w.find("a[href='#"+e+"']"):e).length&&(e.parent().hasClass("hide-tab")&&(e.parent().removeClass("hide-tab").removeClass("hide"),f.onshow&&f.onshow(m[e.attr("href").slice(1)])),e.parent().hasClass("active")||(w.children().removeClass("active"),w.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"),f.scrollable&&((t=e.parent().position().left)-21<0?E.animate({scrollLeft:"+="+(t-50)},300):t+120>E.width()&&E.animate({scrollLeft:"+="+(t+140-E.width())},300)),f.onchange&&f.onchange(m[e.attr("href").slice(1)]),k(),setTimeout(function(){w.children().css({transition:""})},100)))}function k(){if(!f.vertical){var e,t=w.find("li.red-ui-tab"),o=t.filter(":not(.hide-tab)"),i=t.filter(".hide-tab"),n=c.width(),a=o.length;if(f.collapsible){var t=v.children().length,r=v.children(":visible").length;if((e=n-v.width()-10)<=120||e<198&&5<r){var s=v.find("a:last").prev();for(v.children().length;s.is(":not(:visible)");)s=s.prev(),0;(e<=120||6<r)&&s.hide(),e=Math.max(120,n-v.width()-10)}else 40<n-(e=r!==t?r<6?120:198:e)-v.width()&&v.find("a:not(:visible):first").show(),e=n-v.width()-10;o.css({width:e})}else l=(d=100*(e=(n-12-6*a)/a)/n+"%")+"%",f.scrollable?(e=Math.max(e,140),d=e+"px",l=0,r=Math.max(c.width(),12+(e+6)*a),w.width(r),x()):f.hasOwnProperty("minimumActiveTabWidth")&&(l=e<f.minimumActiveTabWidth?(e=(n-12-f.minimumActiveTabWidth-6*--a)/a,d=100*e/n+"%",f.minimumActiveTabWidth+"px"):0),o.css({width:d}),i.css({width:"0px"}),e<50?(w.find(".red-ui-tab-icon").hide(),w.find(".red-ui-tab-label").css({paddingLeft:Math.min(12,Math.max(0,e-38))+"px"})):(w.find(".red-ui-tab-icon").show(),w.find(".red-ui-tab-label").css({paddingLeft:""})),0!==l&&(w.find("li.red-ui-tab.active").css({width:f.minimumActiveTabWidth}),w.find("li.red-ui-tab.active .red-ui-tab-icon").show(),w.find("li.red-ui-tab.active .red-ui-tab-label").css({paddingLeft:""}))}}function T(t){!f.onselect||0<(e=w.find("li.red-ui-tab.selected")).length&&(e.removeClass("selected"),D());var e,o=w.find("a[href='#"+t+"']").parent();o.hasClass("active")&&(0<(e=0===(e=C(o)).length?j(o):e).length?_(e.find("a")):f.onchange&&f.onchange(null)),o.one("transitionend",function(e){o.remove(),m[t].pinned&&b--,f.onremove&&f.onremove(m[t]),delete m[t],k(),h&&(h.remove(),h=null)}),o.addClass("hide-tab"),o.width(0)}function C(e){for(var t=(e=e||w.find("li.active").parent()).prev();0<t.length&&t.hasClass("hide-tab");)t=t.prev();return t}function j(e){e=e||w.find("li.active").parent();for(var t=w.find("li.active").next();0<t.length&&t.hasClass("hide-tab");)t=t.next();return t}function L(t){var o,e;m[t]&&((o=w.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")):f.onchange&&f.onchange(null)),o.removeClass("active"),o.one("transitionend",function(e){o.addClass("hide"),k(),f.onhide&&f.onhide(m[t]),setTimeout(function(){x()},200)}),o.addClass("hide-tab"),o.css({width:0})))}c.addClass("red-ui-tabs"),f.vertical&&c.addClass("red-ui-tabs-vertical"),f.addButton&&(c.addClass("red-ui-tabs-add"),(e=$('<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 f.addButton?f.addButton():"string"==typeof f.addButton&&RED.actions.invoke(f.addButton)}),"string"==typeof f.addButton&&(o=f.addButton,f.addButtonCaption&&(o=f.addButtonCaption),RED.popover.tooltip(e,o,f.addButton)),w.on("dblclick",function(e){var t=w.children(),o=e.clientX,i=0;t.each(function(e){return!($(this).offset().left>o)&&void(i=e+1)}),"function"==typeof f.addButton?f.addButton({index:i}):"string"==typeof f.addButton&&RED.actions.invoke(f.addButton,{index:i})})),f.searchButton&&(c.addClass("red-ui-tabs-search"),(e=$('<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 f.searchButton?f.searchButton():"string"==typeof f.searchButton&&RED.actions.invoke(f.searchButton)}),"string"==typeof f.searchButton&&(o=f.searchButton,f.searchButtonCaption&&(o=f.searchButtonCaption),RED.popover.tooltip(e,o,f.searchButton))),f.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"),i=!1,o.on("click",function(e){if(e.stopPropagation(),e.preventDefault(),i)return n.remove(),void(i=!1);i=!0;e=[];"function"==typeof f.searchButton?e=f.menu():Array.isArray(f.menu)?e=f.menu:"function"==typeof f.menu&&(e=f.menu()),(n=RED.menu.init({options:e})).attr("id",f.id+"-menu"),n.css({position:"absolute"}),n.appendTo("body");e=t.offset();n.css({top:e.top+t.height()-2+"px",left:e.left-n.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"),i=!1,n.remove()}),n.show()})),f.scrollable&&(c.addClass("red-ui-tabs-scrollable"),E.addClass("red-ui-tabs-scroll-container"),E.on("scroll",function(e){x()}),E.on("wheel",function(e){var t;0===e.originalEvent.deltaX&&(e.preventDefault(),t=E.scrollLeft(),t-=e.originalEvent.deltaY,E.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?"-="+E.scrollLeft():"-=150")}).on("click",function(e){e.preventDefault()}),(r=$('<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?"+="+(E[0].scrollWidth-E.width()-E.scrollLeft()):"+=150")}).on("click",function(e){e.preventDefault()})),f.collapsible&&(c.addClass("red-ui-tabs-collapsible"),v=$('<div class="red-ui-tab-link-buttons"></div>').appendTo(c),!1!==f.menu&&((s=$('<a href="#"><i class="fa fa-caret-down"></i></a>').appendTo(v)).addClass("red-ui-tab-link-button-menu"),s.on("click",function(e){var i;e.stopPropagation(),e.preventDefault(),h||(i=[],w.children().each(function(e,t){var o=$(t).data("tabId"),t={id:"red-ui-tabs-menu-option-"+o,icon:m[o].iconClass||I,label:m[o].name,onselect:function(){_(o)}};i.push(t)}),i=[].concat(i),(h=RED.menu.init({options:i})).css({position:"absolute"}),h.appendTo("body"));e=s.offset();h.css({top:e.top+s.height()-2+"px",left:e.left-h.width()+s.width()+"px"}),h.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"),h.hide()})),h.toggle()}))),w.children().first().addClass("active"),w.children().addClass("red-ui-tab"),w.find("li.red-ui-tab a").on("mousedown",function(e){g=e.currentTarget}).on("mouseup",R).on("click",function(e){e.preventDefault()}).on("dblclick",function(e){e.stopPropagation(),e.preventDefault()}),setTimeout(function(){k()},0);var S={addTab:function(t,e){var o;!f.onselect||0<(o=w.find("li.red-ui-tab.selected")).length&&(o.removeClass("selected"),D()),m[t.id]=t;var i=$("<li/>",{class:"red-ui-tab"});0===(e=0===w.children().length?void 0:e)?i.prependTo(w):0<e?i.insertAfter(w.find("li:nth-child("+e+")")):i.appendTo(w),i.attr("id","red-ui-tab-"+t.id.replace(".","-")),i.data("tabId",t.id),(f.maximumTabWidth||t.maximumTabWidth)&&i.css("maxWidth",(f.maximumTabWidth||t.maximumTabWidth)+"px");var n,a,r,s,e=$("<a/>",{href:"#"+t.id,class:"red-ui-tab-label"}).appendTo(i);t.icon?$('<img src="'+t.icon+'" class="red-ui-tab-icon"/>').appendTo(e):t.iconClass&&$("<i>",{class:"red-ui-tab-icon "+t.iconClass}).appendTo(e),$("<span/>",{class:"red-ui-text-bidi-aware"}).text(t.label).appendTo(e).attr("dir",RED.text.bidi.resolveBaseTextDir(t.label)),f.collapsible&&(i.addClass("red-ui-tab-pinned"),n=$('<a href="#'+t.id+'" class="red-ui-tab-link-button"></a>'),t.pinned?0===b?n.prependTo(v):n.insertAfter(v.find("a.red-ui-tab-link-button-pinned:last")):!1!==f.menu?n.insertBefore(v.find("a:last")):n.appendTo(v),n.attr("id",i.attr("id")+"-link-button"),(t.iconClass?$("<i>",{class:t.iconClass}):$("<i>",{class:I})).appendTo(n),n.on("click",function(e){e.preventDefault(),_(t.id)}),n.data("tabId",t.id),t.pinned&&(n.addClass("red-ui-tab-link-button-pinned"),b++),RED.popover.tooltip($(n),t.name,t.action),f.onreorder&&(r=[],n.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()),P)return P=!1;v.children().each(function(e){r[e]={el:$(this),text:$(this).text(),left:$(this).position().left,width:$(this).width(),menu:$(this).hasClass("red-ui-tab-link-button-menu")},$(this).is(n)&&(s=a=e)}),v.children().each(function(e){e!==a&&$(this).css({position:"absolute",left:r[e].left+"px",width:r[e].width+2,transition:"left 0.3s"})}),n.hasClass("active")||n.css({zIndex:1})},drag:function(e,t){t.position.left+=r[a].left;for(var o=t.position.left+r[a].width/2,i=0;i<r.length;i++)if(i!==a&&!r[i].menu&&!r[i].el.is(":not(:visible)")&&o>r[i].left&&o<r[i].left+r[i].width){i<a?(r[i].left+=r[a].width+8,r[a].el.detach().insertBefore(r[i].el)):(r[i].left-=r[a].width+8,r[a].el.detach().insertAfter(r[i].el)),r[i].el.css({left:r[i].left+"px"}),r.splice(i,0,r.splice(a,1)[0]),a=i;break}},stop:function(e,t){var o;N=!1,v.children().css({position:"relative",left:"",transition:""}),$(".red-ui-tab-link-buttons").width("auto"),n.css({zIndex:""}),k(),s!==a&&(h&&(h.remove(),h=null),o=$.makeArray(v.children().map(function(){return $(this).data("tabId")})),S.order(o),f.onreorder(o))}}))),e.on("mousedown",function(e){g=e.currentTarget}),e.on("mouseup",R),e.on("click",function(e){e.preventDefault()}),e.on("dblclick",function(e){e.stopPropagation(),e.preventDefault()}),$('<span class="red-ui-tabs-fade"></span>').appendTo(i),t.closeable&&(i.addClass("red-ui-tabs-closeable"),(p=$("<a/>",{href:"#",class:"red-ui-tab-close"}).appendTo(i)).append('<i class="fa fa-times" />'),p.on("click",function(e){e.preventDefault(),T(t.id)}),RED.popover.tooltip(p,RED._("workspace.hideFlow"))),t.hideable&&(i.addClass("red-ui-tabs-closeable"),(p=$("<a/>",{href:"#",class:"red-ui-tab-close red-ui-tab-hide"}).appendTo(i)).append('<i class="fa fa-eye" />'),p.append('<i class="fa fa-eye-slash" />'),p.on("click",function(e){e.preventDefault(),L(t.id)}),RED.popover.tooltip(p,RED._("workspace.hideFlow")));var d,l,c,u,p=$('<span class="red-ui-tabs-badges"></span>').appendTo(i);f.onselect&&($('<i class="red-ui-tabs-badge-changed fa fa-circle"></i>').appendTo(p),$('<i class="red-ui-tabs-badge-selected fa fa-check-circle"></i>').appendTo(p)),RED.popover.tooltip(e,function(){return t.label}),f.onadd&&f.onadd(t),1==w.find("li.red-ui-tab").length&&_(e),f.onreorder&&!f.collapsible&&(c=[],i.draggable({axis:"x",distance:20,start:function(e,t){if(P)return P=!1;N=!0,d=[],c=[],w.children().each(function(e){c[e]={el:$(this),text:$(this).text(),left:$(this).position().left,width:$(this).width()},$(this).is(i)&&(u=l=e),d.push($(this).data("tabId"))}),w.children().each(function(e){e!==l&&$(this).css({position:"absolute",left:c[e].left+"px",width:c[e].width+2,transition:"left 0.3s"})}),i.hasClass("active")||i.css({zIndex:1})},drag:function(e,t){t.position.left+=c[l].left+E.scrollLeft();for(var o=t.position.left+c[l].width/2-E.scrollLeft(),i=0;i<c.length;i++)if(i!==l&&o>c[i].left&&o<c[i].left+c[i].width){i<l?(c[i].left+=c[l].width+8,c[l].el.detach().insertBefore(c[i].el)):(c[i].left-=c[l].width+8,c[l].el.detach().insertAfter(c[i].el)),c[i].el.css({left:c[i].left+"px"}),c.splice(i,0,c.splice(l,1)[0]),l=i;break}},stop:function(e,t){N=!1,w.children().css({position:"relative",left:"",transition:""}),i.hasClass("active")||i.css({zIndex:""}),k(),u!==l&&f.onreorder(d,$.makeArray(w.children().map(function(){return $(this).data("tabId")}))),_(c[l].el.data("tabId"))}})),setTimeout(function(){k()},10),h&&(h.remove(),h=null),y&&S.order(y)},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 w.find("li.red-ui-tab:not(.hide)").length},activeIndex:function(){return w.find("li.active").index()},contains:function(e){return 0<w.find("a[href='#"+e+"']").length},showTab:function(e){var t;!m[e]||(t=w.find("a[href='#"+e+"']").parent()).hasClass("hide-tab")&&(t.removeClass("hide-tab").removeClass("hide"),1===w.find("li.red-ui-tab:not(.hide-tab)").length&&_(t.find("a")),k(),f.onshow&&f.onshow(m[e]))},hideTab:L,renameTab:function(e,t){m[e].label=t,w.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(w.children().map(function(){return $(this).data("tabId")}))},selection:p,clearSelection:function(){var e;!f.onselect||0<(e=w.find("li.red-ui-tab.selected")).length&&(e.removeClass("selected"),D())},order:function(e){y=e;for(var t=$.makeArray(w.children().map(function(){return $(this).data("tabId")})),o=!0,i=0;i<e.length;i++)if(e[i]!==t[i]){o=!1;break}if(!o){var n={},a=(w.children().detach().each(function(){n[$(this).data("tabId")]=$(this)}),{});for(f.collapsible&&v.children().detach().each(function(){var e=$(this).data("tabId");a[e=e||"__menu__"]=$(this)}),i=0;i<e.length;i++)n[e[i]]&&(n[e[i]].appendTo(w),f.collapsible&&a[e[i]].appendTo(v),delete n[e[i]]);for(i in n)n.hasOwnProperty(i)&&(n[i].appendTo(w),f.collapsible&&a[i].appendTo(v));f.collapsible&&(a.__menu__.appendTo(v),k())}}};return S}}}(),RED.stack={create:function(i){var n=i.container;function a(){var t,e;0<s.length&&(t=0,s.forEach(function(e){t+=e.header.outerHeight()}),e=n.innerHeight(),r=e-t-(s.length-1),s.forEach(function(e){e.contentWrap.height(r)}))}n.addClass("red-ui-stack");var r=0,s=[],d=!0;return i.fill&&i.singleExpanded&&($(window).on("resize",a),$(window).on("focus",a)),{add:function(t){s.push(t),t.container=$('<div class="red-ui-palette-category">').appendTo(n),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),i.fill&&t.contentWrap.css("height",r),t.content=$("<div></div>").appendTo(t.contentWrap),!1!==t.collapsible?(o.on("click",function(){if(i.singleExpanded)if(t.isExpanded())2===s.length&&(s[0]===t?(s[0].collapse(),s[1].expand()):(s[1].collapse(),s[0].expand()));else{for(var e=0;e<s.length;e++)s[e].isExpanded()&&s[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),i.singleExpanded&&s.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")},i.fill&&i.singleExpanded&&a(),t},hide:function(){return d=!1,s.forEach(function(e){e.container.hide()}),this},show:function(){return d=!0,s.forEach(function(e){e.container.show()}),this},resize:function(){a()}}}},function(l){function e(e,t){return{option:(t=RED.utils.parseContextKey(e,t&&t.value)).store,value:t.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"),l("<div></div>").text(t).css({position:"absolute",bottom:"-2px",right:"5px","font-size":"0.7em",opacity:.3}).appendTo(e),this.elementDiv.show()}function d(e){return e=/^red\/images\/typedInput\/.+\.png$/.test(e)?e.replace(/.png$/,".svg"):e}var i,r={msg:{value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression,autoComplete:(i=[{value:"payload"},{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:"complete",source:["join"]},{value:"contentType",source:["mqtt"]},{value:"cookies",source:["http in","http request"]},{value:"correlationData",source:["mqtt"]},{value:"delay",source:["delay","trigger"]},{value:"encoding",source:["file"]},{value:"error",source:["catch"]},{value:"filename",source:["file","file in"]},{value:"flush",source:["delay"]},{value:"followRedirects",source:["http request"]},{value:"headers",source:["http in"," http request"]},{value:"kill",source:["exec"]},{value:"messageExpiryInterval",source:["mqtt"]},{value:"method",source:["http-request"]},{value:"options",source:["xml"]},{value:"parts",source:["split","join"]},{value:"pid",source:["exec"]},{value:"qos",source:["mqtt"]},{value:"rate",source:["delay"]},{value:"rejectUnauthorized",source:["http request"]},{value:"requestTimeout",source:["http request"]},{value:"reset",source:["delay","trigger","join","rbe"]},{value:"responseTopic",source:["mqtt"]},{value:"restartTimeout",source:["join"]},{value:"retain",source:["mqtt"]},{value:"select",source:["html"]},{value:"statusCode",source:["http in"]},{value:"template",source:["template"]},{value:"toFront",source:["delay"]},{value:"topic",source:["inject","mqtt","rbe"]},{value:"url",source:["http request"]},{value:"userProperties",source:["mqtt"]}],function(s){var d=[];return i.forEach(e=>{let t=e.value;var o,i,n,a,r=t.toLowerCase().indexOf(s.toLowerCase());-1<r&&(o=t.substring(0,r),i=t.substring(r,r+s.length),a=t.substring(r+s.length),n=l("<div/>",{style:"white-space:nowrap; overflow: hidden; flex-grow:1"}),l("<span/>").text(o).appendTo(n),l("<span/>",{style:"font-weight: bold"}).text(i).appendTo(n),l("<span/>").text(a).appendTo(n),a=l("<div>",{style:"display: flex"}),n.appendTo(a),e.source&&l("<div>").css({"font-size":"0.8em"}).text(e.source.join(",")).appendTo(a),d.push({value:t,label:a,i:r}))}),d.sort(function(e,t){return e.i-t.i}),d})},flow:{value:"flow",label:"flow.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:e,export:t,valueLabel:o},global:{value:"global",label:"global.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:e,export:t,valueLabel:o},str:{value:"str",label:"string",icon:"red/images/typedInput/az.svg"},num:{value:"num",label:"number",icon:"red/images/typedInput/09.svg",validate:/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/},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){try{return JSON.parse(e),!0}catch(e){return!1}},expand:function(){var o=this,e=this.value();try{e=JSON.stringify(JSON.parse(e),null,4)}catch(e){}RED.editor.editJSON({value:e,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",hasValue:!1},jsonata:{value:"jsonata",label:"expression",icon:"red/images/typedInput/expr.svg",validate:function(e){try{return jsonata(e),!0}catch(e){return!1}},expand:function(){var t=this;RED.editor.editExpression({value:this.value().replace(/\t/g,"\n"),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(),complete:function(e){t.value(e)}})}},env:{value:"env",label:"env variable",icon:"red/images/typedInput/env.svg"},node:{value:"node",label:"node",icon:"red/images/typedInput/target.svg",valueLabel:function(e,t){var o=RED.nodes.node(t),i=l("<div>",{class:"red-ui-search-result-node"}).css({"margin-top":"2px","margin-left":"3px"}).appendTo(e),n=l("<span>").css({"line-height":"32px","margin-left":"6px"}).appendTo(e);o?(t=RED.utils.getNodeColor(o.type,o._def),e=RED.utils.getNodeIcon(o._def,o),"tab"===o.type&&(t="#C0DEED"),i.css("backgroundColor",t),t=l("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(i),RED.utils.createIconElement(e,t,!0),o=RED.utils.getNodeLabel(o,o.id),n.text(o)):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=this;t.css("pointer-events","none"),t.css("flex-grow",0),this.elementDiv.hide();var i,n,a,r=l("<div>").css({position:"absolute",right:"6px",top:"6px","pointer-events":"all"}).appendTo(t),s=l('<button type="button" class="red-ui-button red-ui-button-small"></button>').css({width:"20px"}).appendTo(r).on("click",function(e){e.preventDefault();var t=o.input[0].selectionStart;"text"===o.input.attr("type")?(o.input.attr("type","password"),d.removeClass("fa-eye-slash").addClass("fa-eye")):(o.input.attr("type","text"),d.removeClass("fa-eye").addClass("fa-eye-slash")),setTimeout(function(){o.input.focus(),o.input[0].setSelectionRange(t,t)},50)}).hide(),d=l('<i class="fa fa-eye"></i>').css("margin-left","-2px").appendTo(s);"__PWRD__"===e?(i=l('<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=l('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-pencil"></i></button>').appendTo(r).on("click",function(e){e.preventDefault(),i.hide(),t.css("background","none"),t.css("pointer-events","none"),o.input.val(""),o.element.val(""),o.elementDiv.show(),n.hide(),a.show(),s.show(),setTimeout(function(){o.input.focus()},50)}),a=l('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-times"></i></button>').css("margin-left","3px").appendTo(r).on("click",function(e){e.preventDefault(),i.show(),t.css("background",""),o.input.val("__PWRD__"),o.element.val("__PWRD__"),o.elementDiv.hide(),n.show(),a.hide(),s.hide(),o.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(),s.show())}}};function c(e,t){if(e.multiple){var o={},i=[];t.split(",").forEach(function(e){e&&(o[e]=!0)});for(a=0;a<e.options.length;a++){op=e.options[a];var n="string"==typeof op?op:op.value;o.hasOwnProperty(n)&&(delete o[n],i.push("string"==typeof op?{value:op}:op.value))}return l.isEmptyObject(o)?i:null}for(var a=0;a<e.options.length;a++){if(op=e.options[a],"string"==typeof op&&op===t)return{value:t};if(op.value===t)return op}}var s=!1;l.widget("nodered.typedInput",{_create:function(){try{if(!s&&RED&&RED._){for(var e in r)r.hasOwnProperty(e)&&(r[e].label=RED._("typedInput.type."+e,{defaultValue:r[e].label}));var t=RED.settings.context.stores.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)});t.length<2?(r.flow.options=[],r.global.options=[]):(r.flow.options=t,r.global.options=t)}s=!0;var o=this;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=l('<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();var i,n,a=this.element.attr("style");null!==(i=/width\s*:\s*(calc\s*\(.*\)|\d+(%|px))/i.exec(a))?(this.input.css("width","100%"),this.uiSelect.width(i[1]),this.uiWidth=null):0!==this.uiWidth&&this.uiSelect.width(this.uiWidth),["Right","Left"].forEach(function(e){var t=o.element.css("margin"+e);o.uiSelect.css("margin"+e,t),o.input.css("margin"+e,0)}),["type","placeholder","autocomplete","data-i18n"].forEach(function(e){var t=o.element.attr(e);o.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(r),this.selectTrigger=l('<button class="red-ui-typedInput-type-select" tabindex="0"></button>').prependTo(this.uiSelect),l('<i class="red-ui-typedInput-icon fa fa-caret-down"></i>').toggle(1<this.options.types.length).appendTo(this.selectTrigger),this.selectLabel=l('<span class="red-ui-typedInput-type-label"></span>').appendTo(this.selectTrigger),this.valueLabelContainer=l('<div class="red-ui-typedInput-value-label">').appendTo(this.uiSelect),this.types(this.options.types),this.options.typeField?(this.typeField=l(this.options.typeField).hide(),(n=this.typeField.val())&&this.typeMap[n]&&(this.options.default=n)):this.typeField=l("<input>",{type:"hidden"}).appendTo(this.uiSelect),this.input.on("focus",function(){o.uiSelect.addClass("red-ui-typedInput-focus")}),this.input.on("blur",function(){o.uiSelect.removeClass("red-ui-typedInput-focus")}),this.input.on("change",function(){o.validate(),o.element.val(o.value()),o.element.trigger("change",[o.propertyType,o.value()])}),this.input.on("keyup",function(e){o.validate(),o.element.val(o.value()),o.element.trigger("keyup",e)}),this.input.on("paste",function(e){o.validate(),o.element.val(o.value()),o.element.trigger("paste",e)}),this.input.on("keydown",function(e){o.typeMap[o.propertyType].autoComplete||37<=e.keyCode&&e.keyCode<=40&&e.stopPropagation()}),this.selectTrigger.on("click",function(e){e.preventDefault(),e.stopPropagation(),o._showTypeMenu()}),this.selectTrigger.on("keydown",function(e){40===e.keyCode&&o._showTypeMenu(),e.stopPropagation()}).on("focus",function(){o.uiSelect.addClass("red-ui-typedInput-focus")}).on("blur",function(){!1===o.typeMap[o.propertyType].hasValue&&o.uiSelect.removeClass("red-ui-typedInput-focus")}),this.optionSelectTrigger=l('<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=l('<span class="red-ui-typedInput-option-label"></span>').prependTo(this.optionSelectTrigger),this.optionSelectTrigger.on("click",function(e){e.preventDefault(),e.stopPropagation(),o._showOptionSelectMenu()}).on("keydown",function(e){40===e.keyCode&&o._showOptionSelectMenu(),e.stopPropagation()}).on("blur",function(){o.uiSelect.removeClass("red-ui-typedInput-focus")}).on("focus",function(){o.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionExpandButton=l('<button tabindex="0" class="red-ui-typedInput-option-expand" style="display:inline-block"></button>').appendTo(this.uiSelect),this.optionExpandButtonIcon=l('<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;l(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(){l(this).prop("checked")&&t.push(l(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,i,n){var a=this,r=l("<div>").addClass("red-ui-typedInput-options red-ui-editor-dialog");return r.opts=i,r.callback=n,e.forEach(function(t){"string"==typeof t&&(t={value:t,label:t});var o,e=l('<a href="#"></a>').attr("value",t.value).appendTo(r);t.label&&e.text(t.label),t.title&&e.prop("title",t.title),t.icon?(0===t.icon.indexOf("<")?l(t.icon):-1!==t.icon.indexOf("/")?l("<img>",{src:d(t.icon),style:"margin-right: 4px; height: 18px;"}):l("<i>",{class:"red-ui-typedInput-icon "+t.icon})).prependTo(e):e.css({paddingLeft:"18px"}),t.icon||t.label||e.text(t.value),i.multiple&&(o=l('<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(),i.multiple?o.prop("checked",!o.prop("checked")):(n(t.value),a._hideMenu(r))})}),r.css({display:"none"}),r.appendTo(document.body),r.on("keydown",function(e){40===e.keyCode?(e.preventDefault(),l(this).children(":focus").next().trigger("focus")):38===e.keyCode?(e.preventDefault(),l(this).children(":focus").prev().trigger("focus")):27===e.keyCode&&(e.preventDefault(),a._hideMenu(r)),e.stopPropagation()}),r},_showMenu:function(t,o){var i,n,e,a,r;this.disarmClick?this.disarmClick=!1:(t.opts.multiple&&(i={},this.value().split(",").forEach(function(e){i[e]=!0}),t.find('input[type="checkbox"]').each(function(){l(this).prop("checked",i[l(this).data("value")])})),n=this,e=o.offset(),r=o.height(),a=t.height(),(r=r+e.top)+a-l(document).scrollTop()>l(window).height()&&(r-=r+a-l(window).height()+5),r<0&&(t.height(a+r),r=0),t.css({top:r+"px",left:e.left+"px"}),t.slideDown(100),this._delay(function(){n.uiSelect.addClass("red-ui-typedInput-focus"),l(document).on("mousedown.red-ui-typedInput-close-property-select",function(e){l(e.target).closest(t).length||n._hideMenu(t),l(e.target).closest(o).length&&(n.disarmClick=!0,e.preventDefault())})}))},_getLabelWidth:function(e,t){var o,i,n,a=e.outerWidth();0===a?(o=l('<div class="red-ui-editor"></div>').css({position:"absolute","white-space":"nowrap",top:-2e3}).appendTo(document.body),i=l('<div class="red-ui-typedInput-container"></div>').appendTo(o),n=e.clone().appendTo(i),setTimeout(function(){a=n.outerWidth(),o.remove(),t(a)},50)):t(a)},_updateOptionSelectLabel:function(e){var t=this.typeMap[this.propertyType];this.optionSelectLabel.empty(),t.hasValue?(this.valueLabelContainer.empty(),this.valueLabelContainer.show()):this.valueLabelContainer.hide(),this.typeMap[this.propertyType].valueLabel&&(t.multiple?this.typeMap[this.propertyType].valueLabel.call(this,t.hasValue?this.valueLabelContainer:this.optionSelectLabel,e):this.typeMap[this.propertyType].valueLabel.call(this,t.hasValue?this.valueLabelContainer:this.optionSelectLabel,e.value)),this.typeMap[this.propertyType].valueLabel&&!t.hasValue||(t.multiple?this.optionSelectLabel.text(e.length+" selected"):(e.icon?(0===e.icon.indexOf("<")?l(e.icon):-1!==e.icon.indexOf("/")?l("<img>",{src:d(e.icon),style:"height: 18px;"}):l("<i>",{class:"red-ui-typedInput-icon "+e.icon})).prependTo(this.optionSelectLabel):e.label?this.optionSelectLabel.text(e.label):this.optionSelectLabel.text(e.value),t.hasValue&&(this.optionValue=e.value,this.input.trigger("change",[this.propertyType,this.value()]))))},_destroy:function(){this.optionMenu&&this.optionMenu.remove(),this.menu.remove(),this.uiSelect.remove()},types:function(e){var t=this,o=this.type();this.typeMap={};var i=void 0===this.typeList;this.typeList=e.map(function(e){e="string"==typeof e?r[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)?i||this.type(this.typeList[0].value):(this.propertyType=null,i||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,n=this.typeMap[this.propertyType]||{};if(!arguments.length){var t=this.input.val();return t=n.export?n.export(t,this.optionValue):t}this.options.debug&&console.log(this.identifier,"----- SET VALUE ------",e);var o,a=[],t=e;n.options?(n.hasValue&&n.parse&&(o=n.parse(e),this.options.debug&&console.log(this.identifier,"new parse",o),e=o.value,t=o.option||o.value),o=[t],n.multiple&&(a=[],o=t.split(",")),o.forEach(function(e){for(var t=0;t<n.options.length;t++){var o=n.options[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),n.multiple?this._updateOptionSelectLabel(a):(0===a.length&&(a=[{value:""}]),this._updateOptionSelectLabel(a[0]))):(this.input.val(e),n.valueLabel&&(this.valueLabelContainer.empty(),n.valueLabel.call(this,this.valueLabelContainer,e))),this.input.trigger("change",[this.type(),e])},type:function(e){if(!arguments.length)return this.propertyType;var o=this;this.options.debug&&console.log(this.identifier,"----- SET TYPE -----",e);var t,i,n,a,r=null,s=this.typeMap[e];s&&this.propertyType!==e&&(t=this.typeMap[this.propertyType],r=this.input.val(),t&&this.typeChanged&&(this.options.debug&&console.log(this.identifier,"typeChanged",{previousType:t,previousValue:r}),t.options&&!0!==s.hasValue||!1===t.hasValue?this.oldValues[t.value]=r:this.oldValues._=r,s.options&&!0!==s.hasValue||!1===s.hasValue?this.oldValues.hasOwnProperty(s.value)?(this.options.debug&&console.log(this.identifier,"restored previous (1)",this.oldValues[s.value]),this.input.val(this.oldValues[s.value])):s.options?(i=c(s,r),this.options.debug&&console.log(this.identifier,{previousValue:r,opt:s,validOptions:i}),(r||""===r)&&i?(this.options.debug&&console.log(this.identifier,"restored previous (2)"),this.input.val(r)):"string"==typeof s.default?(this.options.debug&&console.log(this.identifier,"restored previous (3)",s.default),this.input.val(s.default)):Array.isArray(s.default)?(this.options.debug&&console.log(this.identifier,"restored previous (4)",s.default.join(",")),this.input.val(s.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",s.default||""),this.input.val(s.default||"")):(this.options.debug&&console.log(this.identifier,"restored old/default/blank"),this.input.val(this.oldValues.hasOwnProperty("_")?this.oldValues._:s.default||"")),t.autoComplete&&this.input.autoComplete("destroy")),this.propertyType=e,this.typeChanged=!0,this.typeField&&this.typeField.val(e),this.selectLabel.empty(),s.icon&&!1!==s.showLabel&&(0===s.icon.indexOf("<")?l(s.icon).prependTo(this.selectLabel):-1!==s.icon.indexOf("/")?((n=new Image).name=s.icon,n.src=d(s.icon),l("<img>",{src:d(s.icon),style:"margin-right: 4px;height: 18px;"}).prependTo(this.selectLabel)):l("<i>",{class:"red-ui-typedInput-icon "+s.icon,style:"min-width: 13px; margin-right: 4px;"}).prependTo(this.selectLabel)),!1!==s.hasValue&&(!1===s.showLabel||s.icon)||this.selectLabel.text(s.label),s.label?this.selectTrigger.attr("title",s.label):this.selectTrigger.attr("title",""),!1===s.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),s.options?(this.optionExpandButton&&(this.optionExpandButton.hide(),this.optionExpandButton.shown=!1),this.optionSelectTrigger&&(this.optionSelectTrigger.css({display:"inline-flex"}),s.hasValue?(this.optionSelectTrigger.css({"flex-grow":0}),this.elementDiv.show()):(this.optionSelectTrigger.css({"flex-grow":1}),this.elementDiv.hide()),this.valueLabelContainer.hide(),this.activeOptions={},s.options.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),s.hasValue?(a=this.optionValue||s.options[0],s.parse&&(n="string"==typeof a?{value:a}:a,(n=s.parse(this.input.val(),n)).option&&(a=n.option,this.activeOptions.hasOwnProperty(a)||(n.option=Object.keys(this.activeOptions)[0],a=n.option)),this.input.val(n.value),s.export&&this.element.val(s.export(n.value,n.option||a))),"string"==typeof a?(this.optionValue=a,(a=!this.activeOptions.hasOwnProperty(a)?Object.keys(this.activeOptions)[0]:a)?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()):(a=c(s,this.input.val()),s.multiple?(a||(a=(s.default||[]).map(function(e){return"string"==typeof e?e:e.value}),this.value(a.join(","))),o._updateOptionSelectLabel(a)):a?o._updateOptionSelectLabel(a):"string"==typeof(a=s.options[0])?(this.value(a),o._updateOptionSelectLabel({value:a})):(this.value(a.value),o._updateOptionSelectLabel(a))),this.optionMenu=this._createMenu(s.options,s,function(e){s.multiple?(o._updateOptionSelectLabel(e),s.hasValue||o.value(e.join(","))):(o._updateOptionSelectLabel(o.activeOptions[e]),s.hasValue||o.value(o.activeOptions[e].value))}))):(this.optionSelectTrigger&&this.optionSelectTrigger.hide(),s.inputType?this.input.attr("type",s.inputType):this.input.attr("type",this.defaultInputType),!1===s.hasValue?(this.elementDiv.hide(),this.valueLabelContainer.hide()):s.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(),s.valueLabel.call(this,this.valueLabelContainer,this.input.val())):(this.valueLabelContainer.hide(),this.elementDiv.show(),s.autoComplete&&this.input.autoComplete({search:s.autoComplete})),this.optionExpandButton&&(s.expand?(s.expand.icon?this.optionExpandButtonIcon.removeClass().addClass("red-ui-typedInput-icon fa "+s.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 s.expand?s.expand.call(o):(t=l("<div>"),e=s.expand.content.call(o,t),(t=RED.popover.panel(t)).container.css({width:o.valueLabelContainer.width()}),s.expand.minWidth&&t.container.css({minWidth:s.expand.minWidth+"px"}),t.show({target:o.optionExpandButton,onclose:e.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(){var e=this.value(),t=this.type();return(e=!this.typeMap[t]||!this.typeMap[t].validate||("function"==typeof(t=this.typeMap[t].validate)?t(e):t.test(e)))?this.uiSelect.removeClass("input-error"):this.uiSelect.addClass("input-error"),e},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(s){s.widget("nodered.toggleButton",{_create:function(){var t=this,o=!1;this.options.hasOwnProperty("invertState")&&(o=this.options.invertState);var e=this.options.baseClass||"red-ui-button",i=this.options.hasOwnProperty("enabledIcon")?this.options.enabledIcon:"fa-check-square-o",n=this.options.hasOwnProperty("disabledIcon")?this.options.disabledIcon:"fa-square-o",a=this.options.hasOwnProperty("enabledLabel")?this.options.enabledLabel:RED._("editor:workspace.enabled"),r=this.options.hasOwnProperty("disabledLabel")?this.options.disabledLabel:RED._("editor:workspace.disabled");this.element.css("display","none"),this.element.on("focus",function(){t.button.focus()}),this.button=s('<button type="button" class="red-ui-toggleButton '+e+' toggle single"></button>'),(a||r)&&(this.buttonLabel=s("<span>").appendTo(this.button).css("margin-left","5px")),this.options.class&&this.button.addClass(this.options.class),this.element.after(this.button),i&&n&&(this.buttonIcon=s('<i class="fa"></i>').prependTo(this.button)),this.button.addClass("selected"),this.buttonIcon&&this.buttonIcon.addClass(i),this.buttonLabel&&this.buttonLabel.text(a);e=this.button.width();this.button.removeClass("selected"),this.buttonIcon&&(this.buttonIcon.removeClass(i),t.buttonIcon.addClass(n)),this.buttonLabel&&t.buttonLabel.text(r),e=Math.max(e,this.button.width()),this.buttonIcon&&this.buttonIcon.removeClass(n),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){s(this).prop("checked")!==o?(t.button.addClass("selected"),t.state=!0,t.buttonIcon&&(t.buttonIcon.addClass(i),t.buttonIcon.removeClass(n)),t.buttonLabel&&t.buttonLabel.text(a)):(t.button.removeClass("selected"),t.state=!1,t.buttonIcon&&(t.buttonIcon.addClass(n),t.buttonIcon.removeClass(i)),t.buttonLabel&&t.buttonLabel.text(r))}),this.element.trigger("change")}})}(jQuery),jQuery.widget("nodered.autoComplete",{_create:function(){var o=this;this.completionMenuShown=!1,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:300,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){var t,o=this;function i(e,t){t&&t!==o.pendingRequest||(e&&0!==e.length?o.completionMenuShown?o.menu.options(e):o._showCompletionMenu(e):o.completionMenuShown&&o.menu.hide())}""!==e.trim()?2===this.options.search.length?(t=1+Math.floor(1e4*Math.random()),this.pendingRequest=t,this.options.search(e,function(e){i(e,t)})):i(this.options.search(e)):this.completionMenuShown&&this.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 o={};return{add:function(e,t){if("function"!=typeof t)throw new Error("Action handler not a function");if(o[e])throw new Error("Cannot override existing action");o[e]=t},remove:function(e){delete o[e]},get:function(e){return o[e]},invoke:function(){var e=Array.prototype.slice.call(arguments),t=e.shift();o.hasOwnProperty(t)&&o[t].apply(null,e)},list:function(){var i=[];return Object.keys(o).forEach(function(e){var t=RED.keyboard.getShortcut(e),o=!1,o=t?t.user:!!RED.keyboard.getUserShortcut(e);i.push({id:e,scope:t?t.scope:void 0,key:t?t.key:void 0,user:o})}),i}}}(),RED.deploy=function(){var 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"}},f={unknown:!1,unusedConfig:!1,invalid:!1},h="full",g=!1,l=null;function a(e){h=e,$("#red-ui-header-button-deploy-icon").attr("src",t[e].img)}function v(e){var t="";e.z&&(t=(o=RED.nodes.workspace(e.z))?o.label:(o=RED.nodes.subflow(e.z)).name);var o=RED.utils.getNodeLabel(e,e.id);return{tab:t,type:e.type,label:o}}function m(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 b(e,t){var o=$("<div>");$('<p data-i18n="deploy.confirm.conflict"></p>').appendTo(o);var i=$('<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),n=$('<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);o.i18n(),l=null;var r=[{text:RED._("common.label.cancel"),click:function(){s.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(),s.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),s.close())}}];t&&r.push({id:"red-ui-deploy-dialog-confirm-deploy-overwrite",text:RED._("deploy.confirm.button.overwrite"),class:"primary",click:function(){E(!0,t),s.close()}});var s=RED.notify(o,{modal:!0,fixed:!0,width:600,buttons:r}),d=Date.now();RED.diff.getRemoteDiff(function(e){var t=Math.max(1e3-(Date.now()-d),0);l=e,setTimeout(function(){i.hide(),0===Object.keys(e.conflicts).length?(n.show(),$("#red-ui-deploy-dialog-confirm-deploy-merge").removeClass("disabled")):a.show(),$("#red-ui-deploy-dialog-confirm-deploy-review").removeClass("disabled")},t)})}function y(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 w(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function r(){var t=Date.now();$(".red-ui-deploy-button-content").css("opacity",0),$(".red-ui-deploy-button-spinner").show();var i=!$("#red-ui-header-button-deploy").hasClass("disabled");$("#red-ui-header-button-deploy").addClass("disabled"),g=!0,$("#red-ui-header-shade").show(),$("#red-ui-editor-shade").show(),$("#red-ui-palette-shade").show(),$("#red-ui-sidebar-shade").show(),$.ajax({url:"flows",type:"POST",headers:{"Node-RED-Deployment-Type":"reload"}}).done(function(e,t,o){i&&$("#red-ui-header-button-deploy").removeClass("disabled"),RED.notify("<p>"+RED._("deploy.successfulRestart")+"</p>","success")}).fail(function(e,t,o){i&&$("#red-ui-header-button-deploy").removeClass("disabled"),401===e.status?RED.notify(RED._("deploy.deployFailed",{message:RED._("user.notAuthorized")}),"error"):409===e.status?b(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(){g=!1;var e=Math.max(0,300-(Date.now()-t));setTimeout(function(){$(".red-ui-deploy-button-content").css("opacity",1),$(".red-ui-deploy-button-spinner").hide(),$("#red-ui-header-shade").hide(),$("#red-ui-editor-shade").hide(),$("#red-ui-palette-shade").hide(),$("#red-ui-sidebar-shade").hide()},e)})}function E(e,t){if(!$("#red-ui-header-button-deploy").hasClass("disabled"))if(RED.user.hasPermission("flows.write")){if(!e){var i=!1,o=[],n=[];RED.nodes.eachNode(function(e){e.valid||e.d||n.push(v(e)),"unknown"===e.type&&-1==o.indexOf(e.name)&&o.push(e.name)});var a=0<o.length,r=0<n.length,s=[];RED.nodes.eachConfig(function(e){!1!==e._def.hasUsers&&0===e.users.length&&(s.push(v(e)),i=!0)});var d,l,e=!1,c=[];if(a&&!f.unknown?(e=!0,d="<p>"+RED._("deploy.confirm.unknown")+'</p><ul class="red-ui-deploy-dialog-confirm-list"><li>'+y(o).map(w).join("</li><li>")+"</li></ul><p>"+RED._("deploy.confirm.confirm")+"</p>",c=[{id:"red-ui-deploy-dialog-confirm-deploy-deploy",text:RED._("deploy.confirm.button.confirm"),class:"primary",click:function(){E(!0),l.close()}}]):r&&!f.invalid&&(e=!0,n.sort(m),d="<p>"+RED._("deploy.confirm.improperlyConfigured")+'</p><ul class="red-ui-deploy-dialog-confirm-list"><li>'+y(n.map(function(e){return w((e.tab?"["+e.tab+"] ":"")+e.label+" ("+e.type+")")})).join("</li><li>")+"</li></ul><p>"+RED._("deploy.confirm.confirm")+"</p>",c=[{id:"red-ui-deploy-dialog-confirm-deploy-deploy",text:RED._("deploy.confirm.button.confirm"),class:"primary",click:function(){E(!0),l.close()}}]),e)return c.unshift({text:RED._("common.label.cancel"),click:function(){l.close()}}),void(l=RED.notify(d,{modal:!0,fixed:!0,buttons:c}))}var u=RED.nodes.createCompleteNodeSet(),p=Date.now();$(".red-ui-deploy-button-content").css("opacity",0),$(".red-ui-deploy-button-spinner").show(),$("#red-ui-header-button-deploy").addClass("disabled");c={flows:u};t||(c.rev=RED.nodes.version()),g=!0,$("#red-ui-header-shade").show(),$("#red-ui-editor-shade").show(),$("#red-ui-palette-shade").show(),$("#red-ui-sidebar-shade").show(),$.ajax({url:"flows",type:"POST",data:JSON.stringify(c),contentType:"application/json; charset=utf-8",headers:{"Node-RED-Deployment-Type":h}}).done(function(e,t,o){RED.nodes.dirty(!1),RED.nodes.version(e.rev),RED.nodes.originalFlow(u),i?RED.notify("<p>"+RED._("deploy.successfulDeploy")+"</p><p>"+RED._("deploy.unusedConfigNodes")+' <a href="#" onclick="RED.sidebar.config.show(true); return false;">'+RED._("deploy.unusedConfigNodesLink")+"</a></p>","success",!1,6e3):RED.notify("<p>"+RED._("deploy.successfulDeploy")+"</p>","success"),RED.nodes.eachNode(function(e){e.changed&&(e.dirty=!0,e.changed=!1),e.moved&&(e.dirty=!0,e.moved=!1),e.credentials&&delete e.credentials}),RED.nodes.eachConfig(function(e){e.changed=!1,e.credentials&&delete e.credentials}),RED.nodes.eachSubflow(function(e){e.changed=!1}),RED.nodes.eachWorkspace(function(e){e.changed=!1}),RED.history.markAllDirty(),RED.view.redraw(),RED.events.emit("deploy")}).fail(function(e,t,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?b(0,!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(){g=!1;var e=Math.max(0,300-(Date.now()-p));setTimeout(function(){$(".red-ui-deploy-button-content").css("opacity",1),$(".red-ui-deploy-button-spinner").hide(),$("#red-ui-header-shade").hide(),$("#red-ui-editor-shade").hide(),$("#red-ui-palette-shade").hide(),$("#red-ui-sidebar-shade").hide()},e)})}else RED.notify(RED._("user.errors.deploy"),"error")}return{init:function(e){var t,o,i,n=(e=e||{}).type||"default";"default"==n?($('<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>'+RED._("deploy.deploy")+'</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></a></span></li>').prependTo(".red-ui-header-toolbar"),RED.menu.init({id:"red-ui-header-button-deploy-options",options:[{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&&a("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&&a("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&&a("nodes")}},null,{id:"deploymenu-item-reload",icon:"red/images/deploy-reload.svg",label:RED._("deploy.restartFlows"),sublabel:RED._("deploy.restartFlowsDesc"),onselect:"core:restart-flows"}]})):"simple"==n&&(t=e.label||RED._("deploy.deploy"),o="red/images/deploy-full-o.svg",e.hasOwnProperty("icon")&&(o=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">'+(o?'<img id="red-ui-header-button-deploy-icon" src="'+o+'"> ':"")+"<span>"+t+'</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(),E()}),RED.actions.add("core:deploy-flows",E),"default"===n&&(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)})),RED.events.on("workspace:dirty",function(e){e.dirty?(window.onbeforeunload=function(){return RED._("deploy.confirm.undeployedChanges")},$("#red-ui-header-button-deploy").removeClass("disabled")):(window.onbeforeunload=null,$("#red-ui-header-button-deploy").addClass("disabled"))}),RED.comms.subscribe("notification/runtime-deploy",function(e,t){var o;i||(null===(o=RED.nodes.version())||g||o===t.revision||(t=$("<p>").text(RED._("deploy.confirm.backgroundUpdate")),i=RED.notify(t,{modal:!0,fixed:!0,buttons:[{text:RED._("deploy.confirm.button.ignore"),click:function(){i.close(),i=null}},{text:RED._("deploy.confirm.button.review"),class:"primary",click:function(){i.close(),b(RED.nodes.createCompleteNodeSet(),!1),i=null}}]})))})},setDeployInflight:function(e){g=e}}}(),RED.diff=function(){var r=!1;function p(e,t,o){var i=$('<div class="red-ui-diff-panel"></div>').appendTo(e),n=$('<div class="red-ui-diff-panel-headers"></div>').appendTo(i);"merge"===o.mode&&i.addClass("red-ui-diff-panel-merge");var D,a=(e=i,D=t,(e=$('<ol class="red-ui-diff-list"></ol>').appendTo(e)).editableList({addButton:!1,height:"auto",scrollOnAdd:!1,addItem:function(e,t,o){var i=o.diff,n=o.remoteDiff,a=o.tab.n,r=o.def,s=D.conflicts,d=$("<div>",{class:"red-ui-diff-list-flow"}).appendTo(e);d.addClass("collapsed");var l,c=$("<div>",{class:"red-ui-diff-list-flow-title"}).appendTo(d),u=$("<div>").appendTo(d),p=$("<div>",{class:"red-ui-diff-list-node-cell"}).appendTo(c),f=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-local"}).appendTo(c);n&&(l=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-remote"}).appendTo(c)),$('<span class="red-ui-diff-list-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(p),R(a,r).appendTo(p);var h=(o.newTab||o.tab).n,g=$("<span>",{class:"red-ui-diff-list-flow-title-meta"}).appendTo(p);"tab"===h.type?g.text(h.label||h.id):"subflow"===a.type?g.text(h.name||h.id):g.text(RED._("diff.globalNodes"));var v,m,b={local:{addedCount:0,deletedCount:0,changedCount:0,unchangedCount:0},remote:{addedCount:0,deletedCount:0,changedCount:0,unchangedCount:0},conflicts:0};(o.newTab||o.remoteTab)&&(p={node:i.newConfig.all[a.id],all:i.newConfig.all,diff:i},n&&(v={node:n.newConfig.all[a.id]||null,all:n.newConfig.all,diff:n}),void 0!==a.type&&(h=$("<div>",{class:"red-ui-diff-list-node red-ui-diff-list-node-props collapsed"}).appendTo(u),m=$("<div>",{class:"red-ui-diff-list-node-header"}).appendTo(h),g=$("<div>",{class:"red-ui-diff-list-node-cell"}).appendTo(m),y=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-local"}).appendTo(m),i.newConfig.all[a.id]?i.added[a.id]?(y.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(y)):i.changed[a.id]?(y.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(y)):(y.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(y)):y.addClass("red-ui-diff-empty"),n&&(w=$("<div>",{class:"red-ui-diff-list-node-cell red-ui-diff-list-node-remote"}).appendTo(m),n.newConfig.all[a.id]?n.added[a.id]?(w.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(w)):n.changed[a.id]?(w.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(w)):(w.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(w)):(w.addClass("red-ui-diff-empty"),n.deleted[a.id])),$('<span class="red-ui-diff-list-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(g),$("<span>").text(RED._("diff.flowProperties")).appendTo(g),m.on("click",function(e){e.preventDefault(),$(this).parent().toggleClass("collapsed")}),_(r,a,p,v).appendTo(h),m="",s[a.id]?(b.conflicts++,y.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(y),w.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(w),h.addClass("red-ui-diff-list-node-conflict")):m=D.resolutions[a.id],k(a,h,y,w,!0,!s[a.id],m,D)));var y=0,w=0,E={};o.tab.nodes.forEach(function(e){E[e.id]=!0,x(e,b,D).appendTo(u)}),o.newTab&&(y=o.newTab.nodes.length,o.newTab.nodes.forEach(function(e){E[e.id]||(E[e.id]=!0,x(e,b,D).appendTo(u))})),o.remoteTab&&(w=o.remoteTab.nodes.length,o.remoteTab.nodes.forEach(function(e){E[e.id]||x(e,b,D).appendTo(u)})),c.on("click",function(e){c.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"))}),i.deleted[a.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(f):o.newTab?i.added[a.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(f):(a.id&&(i.changed[a.id]?b.local.changedCount++:b.local.unchangedCount++),s=$("<span>",{class:"red-ui-diff-list-flow-stats"}).appendTo(f),$('<span class="red-ui-diff-status"></span>').text(RED._("diff.nodeCount",{count:y})).appendTo(s),0<b.conflicts+b.local.addedCount+b.local.changedCount+b.local.deletedCount&&($('<span class="red-ui-diff-status"> [ </span>').appendTo(s),0<b.conflicts&&$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i> '+b.conflicts+"</span></span>").appendTo(s),0<b.local.addedCount&&$('<span class="red-ui-diff-status-added"><span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> '+b.local.addedCount+"</span></span>").appendTo(s),0<b.local.changedCount&&$('<span class="red-ui-diff-status-changed"><span class="red-ui-diff-status"><i class="fa fa-square"></i> '+b.local.changedCount+"</span></span>").appendTo(s),0<b.local.deletedCount&&$('<span class="red-ui-diff-status-deleted"><span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> '+b.local.deletedCount+"</span></span>").appendTo(s),$('<span class="red-ui-diff-status"> ] </span>').appendTo(s))):f.addClass("red-ui-diff-empty"),n&&(n.deleted[a.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(l):o.remoteTab?n.added[a.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(l):(a.id&&(n.changed[a.id]?b.remote.changedCount++:b.remote.unchangedCount++),o=$("<span>",{class:"red-ui-diff-list-flow-stats"}).appendTo(l),$('<span class="red-ui-diff-status"></span>').text(RED._("diff.nodeCount",{count:w})).appendTo(o),0<b.conflicts+b.remote.addedCount+b.remote.changedCount+b.remote.deletedCount&&($('<span class="red-ui-diff-status"> [ </span>').appendTo(o),0<b.conflicts&&$('<span class="red-ui-diff-status-conflict"><span class="red-ui-diff-status"><i class="fa fa-exclamation"></i> '+b.conflicts+"</span></span>").appendTo(o),0<b.remote.addedCount&&$('<span class="red-ui-diff-status-added"><span class="red-ui-diff-status"><i class="fa fa-plus-square"></i> '+b.remote.addedCount+"</span></span>").appendTo(o),0<b.remote.changedCount&&$('<span class="red-ui-diff-status-changed"><span class="red-ui-diff-status"><i class="fa fa-square"></i> '+b.remote.changedCount+"</span></span>").appendTo(o),0<b.remote.deletedCount&&$('<span class="red-ui-diff-status-deleted"><span class="red-ui-diff-status"><i class="fa fa-minus-square"></i> '+b.remote.deletedCount+"</span></span>").appendTo(o),$('<span class="red-ui-diff-status"> ] </span>').appendTo(o))):l.addClass("red-ui-diff-empty"),m="",0<b.conflicts?c.addClass("red-ui-diff-list-node-conflict"):m=D.resolutions[a.id],a.id&&(n=!(0<b.conflicts&&(i.deleted[a.id]||n.deleted[a.id])),k(a,c,f,l,!1,n,m,D))),0===d.find(".red-ui-diff-list-node").length&&d.addClass("red-ui-diff-list-flow-empty"),e.i18n()}}),e),r=t.localDiff,s=t.remoteDiff,d=(t.conflicts,r.currentConfig),l=r.newConfig;return void 0!==s?(i.addClass("red-ui-diff-three-way"),t=o.oldRevTitle||RED._("diff.local"),o=o.newRevTitle||RED._("diff.remote"),$("<div></div>").text(t).appendTo(n),$("<div></div>").text(o).appendTo(n)):i.removeClass("red-ui-diff-three-way"),{list:a,finish:function(){var e={diff:r,def:{category:"config",color:"#f0f0f0"},tab:{n:{},nodes:d.globals},newTab:{n:{},nodes:l.globals}};void 0!==s&&(e.remoteTab={n:{},nodes:s.newConfig.globals},e.remoteDiff=s),a.editableList("addItem",e);var t,o={};for(t in d.tabOrder.forEach(function(e){var t=d.tabs[e],t={diff:r,def:RED.nodes.getType("tab"),tab:t};l.tabs.hasOwnProperty(e)&&(t.newTab=l.tabs[e]),void 0!==s&&(t.remoteTab=s.newConfig.tabs[e],t.remoteDiff=s),o[e]=!0,a.editableList("addItem",t)}),l.tabOrder.forEach(function(e){o[e]||(o[e]=!0,e=l.tabs[e],e={diff:r,def:RED.nodes.getType("tab"),tab:e,newTab:e},void 0!==s&&(e.remoteDiff=s),a.editableList("addItem",e))}),void 0!==s&&s.newConfig.tabOrder.forEach(function(e){o[e]||(e=s.newConfig.tabs[e],e={diff:r,remoteDiff:s,def:RED.nodes.getType("tab"),tab:e,remoteTab:e},a.editableList("addItem",e))}),d.subflows)d.subflows.hasOwnProperty(t)&&(o[t]=!0,e={diff:r,def:{defaults:{},icon:"subflow.svg",category:"subflows",color:"#DDAA99"},tab:d.subflows[t]},l.subflows.hasOwnProperty(t)&&(e.newTab=l.subflows[t]),void 0!==s&&(e.remoteTab=s.newConfig.subflows[t],e.remoteDiff=s),a.editableList("addItem",e));for(t in l.subflows)l.subflows.hasOwnProperty(t)&&!o[t]&&(o[t]=!0,e={diff:r,def:{defaults:{},icon:"subflow.svg",category:"subflows",color:"#DDAA99"},tab:l.subflows[t],newTab:l.subflows[t]},void 0!==s&&(e.remoteDiff=s),a.editableList("addItem",e));if(void 0!==s)for(t in s.newConfig.subflows)s.newConfig.subflows.hasOwnProperty(t)&&!o[t]&&(e={diff:r,remoteDiff:s,def:{defaults:{},icon:"subflow.svg",category:"subflows",color:"#DDAA99"},tab:s.newConfig.subflows[t],remoteTab:s.newConfig.subflows[t]},a.editableList("addItem",e))}}}function D(e,n){var t=$("<div>",{class:"red-ui-diff-list-wires"}),a=$("<ol></ol>"),r=0;return e.forEach(function(e,t){var i,o=$("<li>").appendTo(a);e&&0<e.length?($("<span>").text(t+1).appendTo(o),i=$("<ul>").appendTo(o),e.forEach(function(e){r++;var t=$("<li>").appendTo(i),o=n[e];o?m(o,RED.nodes.getType(o.type)||{}).appendTo(t):t.text(e)})):o.text("none")}),0===r?t.text("none"):a.appendTo(t),t}function R(e,t){var o=$("<div>",{class:"red-ui-diff-list-node-icon"}),i=RED.utils.getNodeColor(e.type,t),t=RED.utils.getNodeIcon(t,e);"tab"===e.type&&(i="#C0DEED"),o.css("backgroundColor",i);i=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(o);return RED.utils.createIconElement(t,i,!1),o}function m(e,t){var o=$("<div>",{class:"red-ui-diff-list-node-title"});R(e,t).appendTo(o);e=e.label||e.name||e.id;return $("<div>",{class:"red-ui-diff-list-node-description"}).text(e).appendTo(o),o}function x(t,e,o){var i=o.localDiff,n=o.remoteDiff,a=o.conflicts[t.id],r=!0;i.added[t.id]&&(e.local.addedCount++,r=!1),n&&n.added[t.id]&&(e.remote.addedCount++,r=!1),i.deleted[t.id]&&(e.local.deletedCount++,r=!1),n&&n.deleted[t.id]&&(e.remote.deletedCount++,r=!1),i.changed[t.id]&&(e.local.changedCount++,r=!!0),n&&n.changed[t.id]&&(e.remote.changedCount++,r=!!0);var s=RED.nodes.getType(t.type);void 0===s&&(s=/^subflow:/.test(t.type)?{icon:"subflow.svg",category:"subflows",color:"#DDAA99",defaults:{name:{value:""}}}:"group"===t.type?RED.group.def:{});var d,l,c,u=$("<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);n&&(d=$("<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),r?(e.local.unchangedCount++,m(t,s).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),n&&(e.remote.unchangedCount++,d.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(d)),u.addClass("red-ui-diff-status-unchanged")):i.added[t.id]?(h.addClass("red-ui-diff-status-added"),d&&d.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,s).appendTo(f)):n&&n.added[t.id]?(h.addClass("red-ui-diff-empty"),d.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(d),m(t,s).appendTo(f)):(m(t,s).appendTo(f),i.moved[t.id]?(l=i.newConfig.all[t.id],i.deleted[t.z]||t.z===l.z||""===t.z||i.newConfig.all[t.z]?(h.addClass("red-ui-diff-status-moved"),c="",c=t.z===l.z?RED._("diff.type.movedFrom",{id:i.currentConfig.all[t.id].z||"global"}):RED._("diff.type.movedTo",{id:l.z||"global"}),$('<span class="red-ui-diff-status"><i class="fa fa-caret-square-o-right"></i> '+c+"</span>").appendTo(h)):h.addClass("red-ui-diff-empty")):i.deleted[t.z]?h.addClass("red-ui-diff-empty"):i.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)):i.changed[t.id]?i.newConfig.all[t.id].z!==t.z?h.addClass("red-ui-diff-empty"):(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)):i.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)),n&&(n.moved[t.id]?(l=n.newConfig.all[t.id],n.deleted[t.z]||t.z===l.z||""===t.z||n.newConfig.all[t.z]?(d.addClass("red-ui-diff-status-moved"),c="",c=t.z===l.z?RED._("diff.type.movedFrom",{id:n.currentConfig.all[t.id].z||"global"}):RED._("diff.type.movedTo",{id:l.z||"global"}),$('<span class="red-ui-diff-status"><i class="fa fa-caret-square-o-right"></i> '+c+"</span>").appendTo(d)):d.addClass("red-ui-diff-empty")):n.deleted[t.z]?d.addClass("red-ui-diff-empty"):n.deleted[t.id]?(d.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(d)):n.changed[t.id]?n.newConfig.all[t.id].z!==t.z?d.addClass("red-ui-diff-empty"):(d.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(d)):n.newConfig.all[t.id].z!==t.z?d.addClass("red-ui-diff-empty"):(e.remote.unchangedCount++,d.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(d))));var g,v={node:i.newConfig.all[t.id],all:i.newConfig.all,diff:i};n&&(g={node:n.newConfig.all[t.id]||null,all:n.newConfig.all,diff:n});n="";return a?(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),d.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(d),u.addClass("red-ui-diff-list-node-conflict")):n=o.resolutions[t.id],k(t,u,h,d,!1,!a,n,o),p.on("click",function(e){$(this).parent().toggleClass("collapsed"),0===$(this).siblings(".red-ui-diff-list-node-properties").length&&_(s,t,v,g).appendTo(u)}),u}function _(t,i,n,a){var r,s={},d=n.node;a&&(r=a.node);var e=$("<div>",{class:"red-ui-diff-list-node-properties"}),o=$("<table>").appendTo(e),l=$("<colgroup><col/><col/></colgroup>").appendTo(o);void 0!==r&&$("<col/>").appendTo(l);var c,u,p,f,h,g,v=$("<tbody>").appendTo(o),m=!1,b=!1,y=!1,w=$("<tr>").appendTo(v);$("<td>",{class:"red-ui-diff-list-cell-label"}).text("id").appendTo(w),c=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),d?(c.addClass("red-ui-diff-status-unchanged"),$('<span class="red-ui-diff-status"></span>').appendTo(c),h=$('<span class="red-ui-diff-list-element"></span>').appendTo(c),s["local.id"]=RED.utils.createObjectElement(d.id).appendTo(h)):c.addClass("red-ui-diff-empty"),void 0!==r&&((g=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w)).addClass("red-ui-diff-status-unchanged"),r?($('<span class="red-ui-diff-status"></span>').appendTo(g),h=$('<span class="red-ui-diff-list-element"></span>').appendTo(g),s["remote.id"]=RED.utils.createObjectElement(r.id).appendTo(h)):g.addClass("red-ui-diff-empty")),i.hasOwnProperty("x")&&(d&&(d.x===i.x&&d.y===i.y&&d.w===i.w&&d.h===i.h||(m=!0)),r&&(r.x===i.x&&r.y===i.y&&r.w===i.w&&r.h===i.h||(b=!0)),(b&&m&&(d.x!==r.x||d.y!==r.y)||!m&&b&&n.diff.deleted[i.id]||m&&!b&&a.diff.deleted[i.id])&&(y=!0),w=$("<tr>").appendTo(v),$("<td>",{class:"red-ui-diff-list-cell-label"}).text("position").appendTo(w),c=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),d?(c.addClass("red-ui-diff-status-"+(m?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(m?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(c),h=$('<span class="red-ui-diff-list-element"></span>').appendTo(c),o={x:d.x,y:d.y},d.hasOwnProperty("w")&&(o.w=d.w,o.h=d.h),s["local.position"]=RED.utils.createObjectElement(o,{path:"position",exposeApi:!0,ontoggle:function(e,t){s["remote."+e]&&s["remote."+e].prop("expand")(e,t)}}).appendTo(h)):c.addClass("red-ui-diff-empty"),void 0!==r&&((g=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w)).addClass("red-ui-diff-status-"+(b?"changed":"unchanged")),r?($('<span class="red-ui-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(g),h=$('<span class="red-ui-diff-list-element"></span>').appendTo(g),E={x:r.x,y:r.y},r.hasOwnProperty("w")&&(E.w=r.w,E.h=r.h),s["remote.position"]=RED.utils.createObjectElement(E,{path:"position",exposeApi:!0,ontoggle:function(e,t){s["local."+e]&&s["local."+e].prop("expand")(e,t)}}).appendTo(h)):g.addClass("red-ui-diff-empty"))),m=b=y=!1,i.hasOwnProperty("wires")&&(u=JSON.stringify(i.wires),d&&(p=JSON.stringify(d.wires),u!==p&&(m=!0)),r&&(f=JSON.stringify(r.wires),u!==f&&(b=!0)),(b&&m&&p!==f||!m&&b&&n.diff.deleted[i.id]||m&&!b&&a.diff.deleted[i.id])&&(y=!0),w=$("<tr>").appendTo(v),$("<td>",{class:"red-ui-diff-list-cell-label"}).text("wires").appendTo(w),c=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),d?(y?(c.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(c)):(c.addClass("red-ui-diff-status-"+(m?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(m?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(c)),D(d.wires,n.all).appendTo(c)):c.addClass("red-ui-diff-empty"),void 0!==r&&(g=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w),r?(y?(g.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(g)):(g.addClass("red-ui-diff-status-"+(b?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(g)),D(r.wires,a.all).appendTo(g)):g.addClass("red-ui-diff-empty")));var E=Object.keys(i).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&&(E=E.concat(Object.keys(t.defaults))),"tab"!==i.type&&"group"!==i.type&&(E=E.concat(["inputLabels","outputLabels"])),(d&&d.hasOwnProperty("icon")||r&&r.hasOwnProperty("icon"))&&-1===E.indexOf("icon")&&E.unshift("icon"),E.forEach(function(o){y=b=m=!1,u=JSON.stringify(i[o]),d&&(p=JSON.stringify(d[o]),u!==p&&(m=!0,0)),r&&(f=JSON.stringify(r[o]),u!==f&&(b=!0,0)),(b&&m&&p!==f||!m&&b&&n.diff.deleted[i.id]||m&&!b&&a.diff.deleted[i.id])&&(y=!0),w=$("<tr>").appendTo(v);var e=$("<td>",{class:"red-ui-diff-list-cell-label"}).text(o).appendTo(w);c=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-local"}).appendTo(w),d?(y?(c.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(c)):(c.addClass("red-ui-diff-status-"+(m?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(m?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(c)),h=$('<span class="red-ui-diff-list-element"></span>').appendTo(c),s["local."+o]=RED.utils.createObjectElement(d[o],{path:o,exposeApi:!0,ontoggle:function(e,t){s["remote."+o]&&s["remote."+o].prop("expand")(e,t)}}).appendTo(h)):c.addClass("red-ui-diff-empty"),void 0!==r&&(g=$("<td>",{class:"red-ui-diff-list-cell red-ui-diff-list-node-remote"}).appendTo(w),r?(y?(g.addClass("red-ui-diff-status-conflict"),$('<span class="red-ui-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(g)):(g.addClass("red-ui-diff-status-"+(b?"changed":"unchanged")),$('<span class="red-ui-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(g)),h=$('<span class="red-ui-diff-list-element"></span>').appendTo(g),s["remote."+o]=RED.utils.createObjectElement(r[o],{path:o,exposeApi:!0,ontoggle:function(e,t){s["local."+o]&&s["local."+o].prop("expand")(e,t)}}).appendTo(h)):g.addClass("red-ui-diff-empty")),d&&r&&"string"==typeof d[o]&&(/\n/.test(d[o])||/\n/.test(r[o]))&&$('<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(d[o],r[o])}).appendTo(e)}),e}function k(o,i,e,t,n,a,r,s){var d="red-ui-diff-selectbox-"+o.id.replace(/\./g,"-")+(n?"-props":""),l="";(o.z||n)&&(l="red-ui-diff-selectbox-tab-"+(n?o.id:o.z).replace(/\./g,"-"));function c(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-"+(n?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?(i.removeClass("red-ui-diff-select-remote"),i.addClass("red-ui-diff-select-local")):"remote"===this.value&&(i.addClass("red-ui-diff-select-remote"),i.removeClass("red-ui-diff-select-local")),w(s)}var u=!n&&("tab"===o.type||"subflow"===o.type),p=$("<label>",{class:"red-ui-diff-selectbox",for:d+"-local"}).on("click",function(e){e.stopPropagation()}).appendTo(e),f=$("<input>",{class:"red-ui-diff-selectbox-input "+l+"-local",id:d+"-local",type:"radio",value:"local",name:d}).data("node-id",o.id).on("change",c).appendTo(p),h=$("<label>",{class:"red-ui-diff-selectbox",for:d+"-remote"}).on("click",function(e){e.stopPropagation()}).appendTo(t),d=$("<input>",{class:"red-ui-diff-selectbox-input "+l+"-remote",id:d+"-remote",type:"radio",value:"remote",name:d}).data("node-id",o.id).on("change",c).appendTo(h);"local"===r?f.prop("checked",!0):"remote"===r&&d.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;$(".red-ui-diff-selectbox>input:checked").each(function(){e.conflicts[$(this).data("node-id")]&&t++,e.resolutions[$(this).data("node-id")]=$(this).val()});var o=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 t(n){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"flows",success:function(e){var t=RED.nodes.createCompleteNodeSet(),o=RED.nodes.originalFlow(),i=e.flows,t=E(o,t),i=E(o,i);i.rev=e.rev,n(T(t,i))}})}function s(e){var o,i,n,a;void 0===e?t(s):(o=e,i={mode:"merge"},r||(i=i||{},o.localDiff,n=o.remoteDiff,a=o.conflicts,e={title:i.title||RED._("diff.reviewChanges"),width:1/0,overlay:!0,buttons:[{text:RED._("merge"===i.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,i));t.list.hide(),n?($("#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(){r=!1,$("#red-ui-sidebar-shade").hide()},show:function(){}},"merge"===i.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),c(o),RED.tray.close())}}),RED.tray.show(e)))}function d(e){var t=[],o={},i={},n=[],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&&(i[e.id]={n:e,nodes:[]})}),e.forEach(function(e){"tab"!==e.type&&"subflow"!==e.type&&(o[e.z]?o[e.z].nodes:i[e.z]?i[e.z].nodes:n).push(e)}),{all:a,tabOrder:t,tabs:o,subflows:i,globals:n}}function E(e,t){var o=d(e),i=d(t),n={},a={},r={},s={};return Object.keys(o.all).forEach(function(e){RED.nodes.workspace(e)||RED.nodes.subflow(e)||RED.nodes.node(e);i.all.hasOwnProperty(e)?JSON.stringify(o.all[e])!==JSON.stringify(i.all[e])&&(r[e]=!0,o.all[e].z!==i.all[e].z&&(s[e]=!0)):a[e]=!0}),Object.keys(i.all).forEach(function(e){o.all.hasOwnProperty(e)||(n[e]=!0)}),{currentConfig:o,newConfig:i,added:n,deleted:a,changed:r,moved:s}}function T(e,t){var o,i,n,a,r={},s={},d={localDiff:e,remoteDiff:t,conflicts:r,resolutions:s},l={};for(o in e.currentConfig.all)e.currentConfig.all.hasOwnProperty(o)&&(l[o]=!0,n=e.newConfig.all[o],e.changed[o]&&t.deleted[o]||e.deleted[o]&&t.changed[o]?r[o]=!0:e.changed[o]&&t.changed[o]&&(a=t.newConfig.all[o],JSON.stringify(n)!==JSON.stringify(a)&&(r[o]=!0)),r[o]||(t.added[o]||t.changed[o]||t.deleted[o]?s[o]="remote":s[o]="local"));for(o in e.added)e.added.hasOwnProperty(o)&&(i=e.newConfig.all[o],t.deleted[i.z]?r[o]=!0:s[o]="local");for(o in t.added)t.added.hasOwnProperty(o)&&(i=t.newConfig.all[o],e.deleted[i.z]?r[o]=!0:s[o]="remote");return d}function l(e){e.localDiff.currentConfig;var t,o=e.localDiff,i=e.remoteDiff,n=e.conflicts,a=e.resolutions;for(t in n)if(n.hasOwnProperty(t)&&!a.hasOwnProperty(t))throw console.log(e),new Error("No resolution for conflict on node",t);var r,s=[],d={},l={};for(t in o.newConfig.all)o.newConfig.all.hasOwnProperty(t)&&(r=RED.nodes.node(t),"local"===a[t]?(r&&(d[t]=r.changed),s.push(o.newConfig.all[t])):"remote"===a[t]?!i.deleted[t]&&i.newConfig.all.hasOwnProperty(t)&&(r&&(d[t]=r.changed),l[t]=1,s.push(i.newConfig.all[t])):console.log("Unresolved",t));for(t in i.added)i.added.hasOwnProperty(t)&&((r=RED.nodes.node(t))&&(d[t]=r.changed),o.added.hasOwnProperty(t)||(l[t]=2,s.push(i.newConfig.all[t])));return{config:s,nodeChangedStates:d,localChangedStates:l}}function c(e){var t=RED.workspaces.active(),o=l(e),i=o.config,n=o.nodeChangedStates,a=o.localChangedStates,r=RED.nodes.dirty(),o={t:"replace",config:RED.nodes.createCompleteNodeSet(),changed:n,dirty:r,rev:RED.nodes.version()};RED.history.push(o);var s,d=RED.nodes.originalFlow();for(s in e.remoteDiff.added)e.remoteDiff.added.hasOwnProperty(s)&&e.remoteDiff.newConfig.all.hasOwnProperty(s)&&d.push(JSON.parse(JSON.stringify(e.remoteDiff.newConfig.all[s])));RED.nodes.clear();i=RED.nodes.import(i);RED.nodes.originalFlow(d),i.nodes.forEach(function(e){(n[e.id]||a[e.id])&&(e.changed=!0)}),RED.nodes.version(e.remoteDiff.rev),r&&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(v,m){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){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);$('<colgroup><col width="50"><col width="50%"><col width="50"><col width="50%"></colgroup>').appendTo(e);for(var t,o=$("<tbody>").appendTo(e),i=function(e,t,o){var i,n,a=e.split(/\r?\n/),r=t.split(/\r?\n/),s=a.length,d=r.length,l={a:[],b:[]},c=[];for(i=0;i<s+1;i++)for(c[i]=[],n=0;n<d+1;n++)c[i][n]=0;for(i=s-1;0<=i;i--)for(n=d-1;0<=n;n--)1!==y(a[i],r[n],o)?c[i][n]=c[i+1][n+1]+1:c[i][n]=Math.max(c[i+1][n],c[i][n+1]);n=i=0;for(;i<s&&n<d;){var u,p=y(a[i],r[n],o);1!==p?((u=0)===p?u=0:2==p&&(u=3),l.a.push({i:i+1,j:n+1,line:a[i],type:u}),l.b.push({i:n+1,j:i+1,line:r[n],type:u}),i++,n++):c[i+1][n]>=c[i][n+1]?(l.a.push({i:i+1,line:a[i],type:1}),i++):(l.b.push({i:n+1,line:r[n],type:4}),n++)}for(;i<s||n<d;)i==s?(l.b.push({i:n+1,line:r[n],type:4}),n++):n==d&&(l.a.push({i:i+1,line:a[i],type:1}),i++);return l}(v||"",m||""),n=0,a=0,r=Math.max(i.a.length,i.b.length),s=[],d=[],l=0,c=0,u=0;u<r;u++){i[u];var p=n<i.a.length?i.a[n]:{type:2,line:""},f=a<i.b.length?i.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:""},n++):(n++,a++),s.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=r,d.push(t),console.table(d);for(var h=0;h<d.length;h++)if((t=d[h]).empty)(function(i,n,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),r=$("<span></span>").appendTo(e);n<a.length-1&&r.text("@@ -"+(a[n-1].a.i+1)+" +"+(a[n-1].b.i+1));return diffRow.on("click",function(e){if(20<n-i){var t=$(this).offset();if(0<i){for(var o=i;o<i+10;o++)b(a[o]).addClass("unchanged").insertBefore($(this));i+=10}if(n<a.length-1){for(o=n-1;n-11<o;o--)b(a[o]).addClass("unchanged").insertAfter($(this));n-=10}n<a.length-1&&r.text("@@ -"+(a[n-1].a.i+1)+" +"+(a[n-1].b.i+1));t=$(this).offset().top-t.top;$(".red-ui-diff-text").scrollTop($(".red-ui-diff-text").scrollTop()+t)}else{for(o=i;o<n;o++)b(a[o]).addClass("unchanged").insertBefore($(this));$(this).remove()}}),diffRow})(t.start,t.end,s).appendTo(o);else for(u=t.start;u<t.end;u++){var g=b(s[u]).appendTo(o);u===t.start?g.addClass("start-block"):u===t.end-1&&g.addClass("end-block")}},close:function(){r=!1},show:function(){}};RED.tray.show(e)}function b(e){var t=$("<tr>"),o=e.a,i=e.b,n=$('<td class="lineno">').text(2===o.type?"":o.i).appendTo(t),e=$('<td class="linetext">').text(o.line).appendTo(t);return 2===o.type?(n.addClass("blank"),e.addClass("blank")):4===o.type?(n.addClass("added"),e.addClass("added")):1===o.type&&(n.addClass("removed"),e.addClass("removed")),n=$('<td class="lineno">').text(2===i.type?"":i.i).appendTo(t),e=$('<td class="linetext">').text(i.line).appendTo(t),2===i.type?(n.addClass("blank"),e.addClass("blank")):4===i.type?(n.addClass("added"),e.addClass("added")):1===i.type&&(n.addClass("removed"),e.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 e=f.hunks,t=f.binary,o=$("<table>",{class:"red-ui-diff-text-content"}).appendTo(u);$('<colgroup><col width="50"><col width="50"><col width="100%"></colgroup>').appendTo(o);var h=$("<tbody>").appendTo(o),i=$('<tr class="red-ui-diff-text-file-header">').appendTo(h),n=$('<td colspan="3"></td>').appendTo(i);$('<i class="red-ui-diff-list-chevron fa fa-angle-down"></i>').appendTo(n);i.on("click",function(e){i.toggleClass("collapsed");var t=i.hasClass("collapsed");i.nextUntil(".red-ui-diff-text-file-header").toggle(!t)});$('<span class="filename"></span>').text(f.file).appendTo(n);var g,s,d,l,a,r,c,v=0,m=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(n),a=$('<tr class="red-ui-diff-text-header">').appendTo(h),s=$('<td class="red-ui-diff-flow-diff" colspan="3"></td>').appendTo(a),o=y.project.name,d=y.project.files.flow,c="projects/"+o+"/files/"+y.commonRev+"/"+d,l="projects/"+o+"/files/"+y.oldRev+"/"+d,a="projects/"+o+"/files/"+y.newRev+"/"+d,r=[$.Deferred(),$.Deferred(),$.Deferred()],y.commonRev?(c="projects/"+o+"/files/"+y.commonRev+"/"+d,$.ajax({dataType:"json",url:c}).then(function(e){r[0].resolve(e)}).fail(function(){r[0].resolve(null)})):r[0].resolve(null),$.ajax({dataType:"json",url:l}).then(function(e){r[1].resolve(e)}).fail(function(){r[1].resolve({content:"[]"})}),$.ajax({dataType:"json",url:a}).then(function(e){r[2].resolve(e)}).fail(function(){r[2].resolve({content:"[]"})}),$.when.apply($,r).always(function(e,t,o){var i;if(e)try{i=JSON.parse(e.content||"[]")}catch(e){return console.log(RED._("diff.commonVersionError"),c),void console.log(e)}try{n=JSON.parse(t.content||"[]")}catch(e){return console.log(RED._("diff.oldVersionError"),l),void console.log(e)}i=i||n;try{a=JSON.parse(o.content||"[]")}catch(e){return console.log(RED._("diff.newVersionError"),a),void console.log(e)}var n=E(i,n),a=E(i,a);y.currentDiff=T(n,a);var r=p(s,y.currentDiff,{title:d,mode:y.commonRev?"merge":"view",oldRevTitle:y.oldRevTitle,newRevTitle:y.newRevTitle});r.list.hide(),w(y.currentDiff),setTimeout(function(){r.finish(),r.list.show()},300)})):t?(t=$('<tr class="red-ui-diff-text-header">').appendTo(h),t=$('<td colspan="3"></td>').appendTo(t),$("<span></span>").text(RED._("diff.noBinaryFileShowed")).appendTo(t)):(y.unmerged&&(g=$('<span style="float: right;">'+RED._("diff.conflictHeader",{resolved:m,unresolved:v})+"</span>").appendTo(n)),e.forEach(function(l){var e=$('<tr class="red-ui-diff-text-header">').appendTo(h),e=$('<td colspan="3"></td>').appendTo(e),c=($("<span></span>").text(l.header).appendTo(e),l.conflict),u=l.localStartLine,p=l.remoteStartLine;c&&v++,l.lines.forEach(function(e,t){var o,i=l.diffStart+t,n=c&&/^\+\+(<<<<<<<|=======$|>>>>>>>)/.test(e),a=$("<tr>").appendTo(h),r=$('<td class="lineno">').appendTo(a);n?r.attr("colspan",2):o=$('<td class="lineno">').appendTo(a);var s,d=$('<td class="linetext">').appendTo(a),t=c?2:1;n?(a.addClass("mergeHeader"),/^\+\+=======$/.test(e)?(l.changeSeparator=i,a.addClass("mergeHeader-separator")):((s=/^..<<<<<<</.test(e))?($("<span>").text("<<<<<<< Local Changes").appendTo(d),l.localChangeStart=i):(l.remoteChangeEnd=i,$("<span>").text(">>>>>>> Remote Changes").appendTo(d)),a.addClass("mergeHeader-"+(s?"ours":"theirs")),$('<button class="red-ui-button red-ui-button-small" style="float: right; margin-right: 20px;"><i class="fa fa-angle-double-'+(s?"down":"up")+'"></i> use '+(s?"local":"remote")+" changes</button>").appendTo(d).on("click",function(e){var t,o;e.preventDefault(),m++,s?((o=(t=a.nextUntil(".mergeHeader-separator")).last().next()).nextUntil(".mergeHeader").remove(),o.next().remove()):((o=(t=a.prevUntil(".mergeHeader-separator")).last().prev()).prevUntil(".mergeHeader").remove(),o.prev().remove()),o.remove(),a.remove(),t.find(".linetext").addClass("added"),g.empty(),$("<span>"+RED._("diff.conflictHeader",{resolved:m,unresolved:v})+"</span>").appendTo(g),b[f.file]=b[f.file]||{},b[f.file][l.localChangeStart]={changeStart:l.localChangeStart,separator:l.changeSeparator,changeEnd:l.remoteChangeEnd,selection:s?"A":"B"},y.resolveConflict&&y.resolveConflict({conflicts:v,resolved:m,resolutions:b})}))):(i=e[0],c&&!y.unmerged&&" "===i&&(i=e[1]),$('<span class="prefix">').text(i).appendTo(d),i=!1,c&&y.unmerged?($('<span class="prefix">').text(e[1]).appendTo(d),"+"===e[0]&&(r.text(u++),i=!0),"+"===e[1]&&(o.text(p++),i=!0)):"+"===e[0]||c&&"+"===e[1]?(r.addClass("added"),o.addClass("added"),d.addClass("added"),o.text(p++),i=!0):("-"===e[0]||c&&"-"===e[1])&&(r.addClass("removed"),o.addClass("removed"),d.addClass("removed"),r.text(u++),i=!0),i||(d.addClass("unchanged"),0<u&&"\\"!==e[0]&&""!==e&&r.text(u++),0<p&&"\\"!==e[0]&&""!==e&&o.text(p++)),$("<span>").text(e.substring(t)).appendTo(d))})}))}),u}function u(e){for(var t,o,i=Array.isArray(e)?e:e.split("\n"),n=/^diff (?:(?:--git a\/(.*) b\/(.*))|(?:--cc (.*)))$/,a=/^\+\+\+ b\/(.*)\t?/,r=/^Binary files /,s=/^@@ -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @@ ?(.*)$/,d=/^@+ -((\d+)(,(\d+))?) -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @+/,l=[],c=0;c<i.length;c++){var u=i[c],p=n.exec(u);p?(o&&(t.hunks.push(o),l.push(t)),o=null,t={file:p[1]||p[3],hunks:[]}):r.test(u)?t&&(t.binary=!0):(p=a.exec(u))?t.file=p[1]:(p=s.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",s)},getRemoteDiff:t,showRemoteDiff:s,showUnifiedDiff:function(t){var o,e=t.diff,i=t.title,n=u(e);t.unmerged&&(t.resolveConflict=function(e){(o=e).conflicts===e.resolved&&$("#red-ui-diff-view-resolve-diff").removeClass("disabled")}),i={title:i||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(n,t).appendTo(e)},close:function(){r=!1},show:function(){}},t.unmerged&&i.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=l(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(i)},showCommitDiff:function(o){var i=function(e){for(var t={},o=e.split("\n"),i=[],n=0;n<o.length;n++)if(/^commit /.test(o[n]))t.sha=o[n].substring(7);else if(/^Author: /.test(o[n])){t.author=o[n].substring(8);var a=/^(.*) <(.*)>$/.exec(t.author);a&&(t.authorName=a[1],t.authorEmail=a[2])}else if(/^Date: /.test(o[n]))t.date=o[n].substring(8);else if(/^    /.test(o[n]))t.title?(4!==o[n].length||0<i.length)&&i.push(o[n].substring(4)):t.title=o[n].substring(4);else if(/^diff /.test(o[n])){t.files=u(o.slice(n));break}return t.comment=i.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 t=e.find(".red-ui-tray-body"),e=$('<div class="red-ui-diff-text"></div>').appendTo(t),t=$("<table>",{class:"red-ui-diff-text-content"}).appendTo(e);$('<colgroup><col width="50"><col width="50"><col width="100%"></colgroup>').appendTo(t);t=$("<tbody>").appendTo(t),t=$('<tr class="red-ui-diff-text-commit-header">').appendTo(t),t=$('<td colspan="3"></td>').appendTo(t);$("<h3>").text(i.title).appendTo(t),$('<div class="commit-body"></div>').text(i.comment).appendTo(t);t=$('<div class="commit-summary"></div>').appendTo(t);$('<div style="float: right">').text("Commit "+i.sha).appendTo(t),$("<div>").text((i.authorName||i.author)+" - "+o.date).appendTo(t),i.files&&a(i.files,o).appendTo(e)},close:function(){r=!1},show:function(){}};RED.tray.show(e)},mergeDiff:c}}(),RED.keyboard=function(){var d,l,n=/Mac/i.test(window.navigator.platform),t=!0,u={},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},p={},f={},c={59:186,61:187,173:189};function h(e){return RED.settings.get("editor.keymap",{})[e]}function g(e){for(var t,o=e.toLowerCase().split("-"),i={},n=0;n<o.length;n++)switch(o[n]){case"ctrl":case"cmd":i.ctrl=!0,i.meta=!0;break;case"alt":i.alt=!0;break;case"shift":i.shift=!0;break;case"":t=a["-"];break;default:if(a.hasOwnProperty(o[n]))t=a[o[n]];else{if(1<o[n].length)return null;t=o[n].toUpperCase().charCodeAt(0)}}return[t,i]}function v(e){var t=l||u;(t=(t=(e.ctrlKey||e.metaKey)&&e.ctrlKey!==e.metaKey?t.ctrl:t)&&e.shiftKey?t.shift:t)&&e.altKey&&(t=t.alt);var o=c[e.keyCode]||e.keyCode;if(t&&t[o]){var i=t[o];if(!i.handlers)return l?(l=null,v(e)):(0<Object.keys(i).length&&(l=i,e.preventDefault()),null);for(var n,a=1/0,r=0,s=i.handlers.length,r=0;r<s;r++){var d=function(e,t){for(var o=e.target,i=0;"BODY"!==o.nodeName&&o.id!==t.scope;)o=o.parentElement,i++;return i="BODY"===o.nodeName&&"*"!==t.scope?-1:i}(e,i.handlers[r]);-1<d&&d<a&&(a=d,n=i.handlers[r])}return l=null,i=n}if(l)return l=null,v(e)}function s(e,t,o,i){var n=o,a=i;"function"!=typeof o&&"string"!=typeof o||(n={},a=o);var r=[],s=0;if("string"==typeof t){if("string"==typeof a){if(i||f.hasOwnProperty(a)||(f[a]={scope:e,key:t,user:!1}),!i)if(h(a))return;p[a]={scope:e,key:t},"boolean"==typeof i&&(p[a].user=i)}for(var d=t.split(" "),s=0;s<d.length;s++){var l=g(d[s]);if(!l)return;r.push(l)}}else r.push([t,n]);var c=u;for(s=0;s<r.length;s++)t=r[s][0],(n=r[s][1]).ctrl&&(c.ctrl=c.ctrl||{},c=c.ctrl),n.shift&&(c.shift=c.shift||{},c=c.shift),n.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 r(e,t){var o=t||{},i=[],n=0;if("string"==typeof e)for(var a=e.split(" "),n=0;n<a.length;n++){var r=g(a[n]);if(!r)return void console.log("Unrecognised key specifier:",e);i.push(r)}else i.push([e,o]);var s=u;for(n=0;n<i.length;n++){if(e=i[n][0],!(s=(s=(s=(o=i[n][1]).ctrl?s.ctrl:s)&&o.shift?s.shift:s)&&o.alt?s.alt:s)[e])return;s=s[e]}"string"==typeof s.ondown&&("boolean"==typeof t&&t?p[s.ondown]={user:t}:delete p[s.ondown]),delete s.scope,delete s.ondown,delete s.handlers}d3.select(window).on("keydown",function(){var e;t&&(o[d3.event.keyCode]||(e=v(d3.event))&&e.ondown&&("string"==typeof e.ondown?RED.actions.invoke(e.ondown):e.ondown(),d3.event.preventDefault()))});function m(e){e.preventDefault();var t,o,i,n,a=$(this),r=a.data("data");a.hasClass("keyboard-shortcut-entry-expanded")||(b(),t=a.find(".keyboard-shortcut-entry-key"),e=a.find(".keyboard-shortcut-entry-scope"),a.addClass("keyboard-shortcut-entry-expanded"),(o=$('<input type="text">').attr("placeholder",RED._("keyboard.unassigned")).val(r.key||"").appendTo(t)).on("change paste keyup",function(e){if(13===e.keyCode&&!$(this).hasClass("input-error"))return b();if(27===e.keyCode)return b(!0);var t=$(this).val(),e=""===(t=t.trim())||RED.keyboard.validateKey(t);e&&""!==t&&(e=!d.has(i.val()+":"+t.toLowerCase())),$(this).toggleClass("input-error",!e),n.attr("disabled",!e)}),(i=$('<select><option value="*" data-i18n="keyboard.global"></option><option value="red-ui-workspace" data-i18n="keyboard.workspace"></option></select>').appendTo(e)).i18n(),"workspace"===r.scope&&(r.scope="red-ui-workspace"),i.val(r.scope||"*"),i.on("change",function(){o.trigger("change")}),e=$('<div class="keyboard-shortcut-edit button-group-vertical"></div>').appendTo(e),n=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-check"></i></button>').appendTo(e),e=$('<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(),b()}),e.on("click",function(e){e.stopPropagation(),a.empty(),a.removeClass("keyboard-shortcut-entry-expanded");e=RED.settings.get("editor.keymap",{});e[r.id]=null,RED.settings.set("editor.keymap",e),RED.keyboard.revertToDefault(r.id);e=RED.keyboard.getShortcut(r.id),e={id:r.id,scope:e?e.scope:void 0,key:e?e.key:void 0,user:e?e.user:void 0};y(a,e)}),o.trigger("focus"))}function b(e){var t,o,i,n,a,r,s=$(".keyboard-shortcut-entry-expanded");1===s.length&&(t=s.data("data"),o=s.find(".keyboard-shortcut-entry-key input"),i=s.find(".keyboard-shortcut-entry-scope select"),e||(a=o.val().trim(),r=i.val(),!(""===a||RED.keyboard.validateKey(a))||(!(n=RED.keyboard.getShortcut(t.id))&&a||n&&(n.scope!==r||n.key!==a))&&(e=s.find(".keyboard-shortcut-entry-key"),n=s.find(".keyboard-shortcut-entry-scope"),e.empty(),n.empty(),t.key&&(d.delete(t.scope+":"+t.key),RED.keyboard.remove(t.key,!0)),s.find(".keyboard-shortcut-entry-text i").css("opacity",1),""===a?(e.parent().addClass("keyboard-shortcut-entry-unassigned"),e.append($("<span>").text(RED._("keyboard.unassigned"))),delete t.key,delete t.scope):(e.parent().removeClass("keyboard-shortcut-entry-unassigned"),e.append(RED.keyboard.formatKey(a)),$("<span>").text(r).appendTo(n),t.key=a,t.scope=r,d.add(t.scope+":"+t.key),RED.keyboard.add(t.scope,t.key,t.id,!0)),a=RED.settings.get("editor.keymap",{}),r=RED.keyboard.getShortcut(t.id),a[t.id]={scope:r.scope,key:r.key},RED.settings.set("editor.keymap",a))),o.remove(),i.remove(),$(".keyboard-shortcut-edit").remove(),s.removeClass("keyboard-shortcut-entry-expanded"))}function y(e,t){var o=$('<div class="keyboard-shortcut-entry">').appendTo(e);e.data("data",t);var i=t.id.replace(/(^.+:([a-z]))|(-([a-z]))/g,function(){return 0===arguments[5]?arguments[2].toUpperCase():" "+arguments[4].toUpperCase()}),i=$("<div>").addClass("keyboard-shortcut-entry-text").text(i).appendTo(o),i=$('<i class="fa fa-user"></i>').prependTo(i);t.user||i.css("opacity",0);i=$('<div class="keyboard-shortcut-entry-key">').appendTo(o);t.key?i.append(RED.keyboard.formatKey(t.key)):(o.addClass("keyboard-shortcut-entry-unassigned"),i.append($("<span>").text(RED._("keyboard.unassigned"))));o=$('<div class="keyboard-shortcut-entry-scope">').appendTo(o);$("<span>").text("*"===t.scope?"global":t.scope||"").appendTo(o),e.on("click",m)}function w(){var e=$('<div id="red-ui-settings-tab-keyboard"></div>');$('<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();""===t?o.editableList("filter",null):(t=t.replace(/\s/g,""),o.editableList("filter",function(e){return-1<e.id.toLowerCase().replace(/^.*:/,"").replace("-","").indexOf(t)}))}});var o=$('<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.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase(),t=t.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase();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){var e;"localStorage"in window&&null!==window.localStorage&&(null!==(e=localStorage.getItem("keymap"))&&(localStorage.removeItem("keymap"),RED.settings.set("editor.keymap",JSON.parse(e))));var r=RED.settings.get("editor.keymap",{});$.getJSON("red/keymap.json",function(e){var t,o,i,n=function(e,t){var o,i,n={};for(o in e)if(e.hasOwnProperty(o)){var a,r=e[o];for(a in r)r.hasOwnProperty(a)&&(n[r[a]]?n[r[a]].push({scope:o,key:a,user:!1}):n[r[a]]=[{scope:o,key:a,user:!1}])}for(i in t)t.hasOwnProperty(i)&&(t[i].key?(n[i]=[{scope:t[i].scope||"*",key:t[i].key,user:!1}],"workspace"===n[i][0].scope&&(n[i][0].scope="red-ui-workspace")):delete n[i]);return n}(e,RED.settings.theme("keymap",{}));for(t in n)n.hasOwnProperty(t)&&(r.hasOwnProperty(t)||n[t].forEach(function(e){s(e.scope,e.key,t,!1)}),f[t]=n[t][0]);for(t in r)r.hasOwnProperty(t)&&r[t]&&((o=r[t]).hasOwnProperty("key")&&s(i="workspace"===(i=o.scope)?"red-ui-workspace":i,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:s,remove:r,getShortcut:function(e){return p[e]},getUserShortcut:h,revertToDefault:function(e){var t=p[e];t&&r(t.key),f.hasOwnProperty(e)&&s((t=f[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(!g(t[i]))return!1;return!0},disable:function(){t=!1},enable:function(){t=!0}}}(),RED.workspaces=function(){var n,a=0,r=0,t=[],i=[],o=0;function s(e){o!==t.length&&t.splice(o),t.push(e),o=t.length}function d(o){i=i.filter(function(e){if(e===o)return!1;if(Array.isArray(e)){var t=e.indexOf(o);return-1<t&&e.splice(t,1),0===e.length?!1:!0}return!0})}function l(e,t,o){if(e)e.closeable||(e.hideable=!0),n.addTab(e,o),JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}")[e.id]&&n.hideTab(e.id),n.resize();else{for(var i=RED.nodes.id();r+=1,0!==$("#red-ui-workspace-tabs a[title='"+RED._("workspace.defaultName",{number:r})+"']").size(););e={type:"tab",id:i,disabled:!1,info:"",label:RED._("workspace.defaultName",{number:r}),env:[],hideable:!0},RED.nodes.addWorkspace(e,o),n.addTab(e,o),n.activateTab(i),t||(RED.history.push({t:"add",workspaces:[e],dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0))}return RED.view.focus(),e}function c(e){var t;1!==p&&(t=RED.nodes.getWorkspaceOrder(),e._index=t.indexOf(e.id),b(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 u(e){var t=RED.nodes.workspace(e);t?RED.editor.editFlow(t):(e=RED.nodes.subflow(e))&&RED.editor.editSubflow(e)}var p=0;function e(){n=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,$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!e.disabled)):($("#red-ui-workspace-chart").hide(),a=0,window.location.hash=""),t.workspace=a,RED.events.emit("workspace:change",t),RED.sidebar.config.refresh(),RED.view.focus()},onclick:function(e){e.id!==a&&s(a),RED.view.focus()},ondblclick:function(e){"subflow"!=e.type?u(e.id):RED.editor.editSubflow(RED.nodes.subflow(e.id))},onadd:function(e){"tab"===e.type&&p++,$('<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"),RED.menu.setDisabled("menu-item-workspace-delete",0===a||p<=1),1===p&&($("#red-ui-workspace .red-ui-tabs").show(),$("#red-ui-workspace-chart").show(),$("#red-ui-workspace-footer").children().show())},onremove:function(e){"tab"===e.type?p--:i.push(e.id),RED.menu.setDisabled("menu-item-workspace-delete",0===a||p<=1),0===p&&f()},onreorder:function(e,t){RED.history.push({t:"reorder",workspaces:{from:e,to:t},dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),y(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){i.push(e.id),RED.events.emit("workspace:hide",{workspace:e.id})},onshow:function(e){d(e.id),RED.events.emit("workspace:show",{workspace:e.id})},minimumActiveTabWidth:150,scrollable:!0,addButton:"core:add-flow",addButtonCaption:RED._("workspace.addFlow"),menu:function(){var e=[{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,{id:"red-ui-tabs-menu-option-add-flow",label:RED._("workspace.addFlow"),onselect:"core:add-flow"},{id:"red-ui-tabs-menu-option-add-flow-right",label:RED._("workspace.addFlowToRight"),onselect:"core:add-flow-to-right"},null,{id:"red-ui-tabs-menu-option-add-hide-flows",label:RED._("workspace.hideFlow"),onselect:"core:hide-flow"},{id:"red-ui-tabs-menu-option-add-hide-other-flows",label:RED._("workspace.hideOtherFlows"),onselect:"core:hide-other-flows"},{id:"red-ui-tabs-menu-option-add-show-all-flows",label:RED._("workspace.showAllFlows"),onselect:"core:show-all-flows"},{id:"red-ui-tabs-menu-option-add-hide-all-flows",label:RED._("workspace.hideAllFlows"),onselect:"core:hide-all-flows"},{id:"red-ui-tabs-menu-option-add-show-last-flow",label:RED._("workspace.showLastHiddenFlow"),onselect:"core:show-last-hidden-flow"}];return 0<i.length&&e.unshift({label:RED._("workspace.hiddenFlows",{count:i.length}),onselect:"core:list-hidden-flows"}),e}}),p=0}function f(){$("#red-ui-workspace .red-ui-tabs").hide(),$("#red-ui-workspace-chart").hide(),$("#red-ui-workspace-footer").children().hide()}function h(e){u(e||a)}function g(e){m(e,!1)}function v(e){m(e,!0)}function m(e,t){var o,i=RED.nodes.workspace(e||a);i&&i.disabled!==t&&(o={disabled:i.disabled},i.disabled=t,$("#red-ui-tab-"+i.id.replace(".","-")).toggleClass("red-ui-workspace-disabled",!!i.disabled),e&&e!==a||$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!i.disabled),e={t:"edit",changes:o,node:i,dirty:RED.nodes.dirty()},i.changed=!0,RED.history.push(e),RED.events.emit("flows:change",i),RED.nodes.dirty(!0),RED.sidebar.config.refresh(),(e=RED.view.selection()).nodes||e.links||i.id!==a||RED.sidebar.info.refresh(i),o.hasOwnProperty("disabled")&&(RED.nodes.eachNode(function(e){e.z===i.id&&(e.dirty=!0)}),RED.view.redraw()))}function b(e){e?(n.contains(e.id)&&n.removeTab(e.id),e.id===a&&(a=0)):c(RED.nodes.workspace(a))}function y(e){var t=e.filter(function(e){return void 0!==RED.nodes.workspace(e)}),o=RED.nodes.getWorkspaceOrder();JSON.stringify(t)!==JSON.stringify(o)&&(RED.nodes.setWorkspaceOrder(t),RED.events.emit("flows:reorder",t)),n.order(e)}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",n.resize),RED.actions.add("core:show-next-tab",function(){var e=a;n.nextTab(),e!==a&&s(e)}),RED.actions.add("core:show-previous-tab",function(){var e=a;n.previousTab(),e!==a&&s(e)}),RED.menu.setAction("menu-item-workspace-delete",function(){c(RED.nodes.workspace(a))}),$(window).on("resize",function(){n.resize()}),RED.actions.add("core:add-flow",function(e){l(void 0,void 0,e?e.index:void 0)}),RED.actions.add("core:add-flow-to-right",function(e){l(void 0,void 0,n.activeIndex()+1)}),RED.actions.add("core:edit-flow",h),RED.actions.add("core:remove-flow",b),RED.actions.add("core:enable-flow",g),RED.actions.add("core:disable-flow",v),RED.actions.add("core:hide-flow",function(){var e=n.selection();0===e.length&&(e=[{id:a}]);var t=[];e.forEach(function(e){RED.workspaces.hide(e.id),i.pop(),t.push(e.id)}),0<t.length&&i.push(t),n.clearSelection()}),RED.actions.add("core:hide-other-flows",function(){var e=n.selection();0===e.length&&(e=[{id:a}]);var t=new Set(e.map(function(e){return e.id})),e=n.listTabs(),o=[];e.forEach(function(e){t.has(e)||(RED.workspaces.hide(e),i.pop(),o.push(e))}),0<o.length&&i.push(o)}),RED.actions.add("core:hide-all-flows",function(){var e=n.listTabs();e.forEach(function(e){RED.workspaces.hide(e),i.pop()}),0<e.length&&i.push(e),n.clearSelection()}),RED.actions.add("core:show-all-flows",function(){n.listTabs().forEach(function(e){RED.workspaces.show(e,null,!0)})}),RED.actions.add("core:show-last-hidden-flow",function(){var e,t=i.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-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<o&&(o===t.length&&t.push(a),RED.workspaces.show(t[--o],!0))}),RED.actions.add("core:go-to-next-location",function(){o<t.length-1&&RED.workspaces.show(t[++o],!0)}),f()},add:l,remove:b,delete:c,order:y,edit:h,contains:function(e){return n.contains(e)},count:function(){return p},active:function(){return a},selection:function(){return n.selection()},hide:function(e){var t;e=e||a,n.contains(e)&&(n.hideTab(e),(t=JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}"))[e]=!0,RED.settings.setLocal("hiddenTabs",JSON.stringify(t)))},isHidden:function(e){return i.includes(e)},show:function(e,t,o){if(!n.contains(e)){var i=RED.nodes.subflow(e);if(!i)return;l({type:"subflow",id:e,icon:"red/images/subflow_tab.svg",label:i.name,closeable:!0},null,n.activeIndex()+1),d(e)}o?n.showTab(e):(t||a===e||s(a),n.activateTab(e));t=JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}");delete t[e],RED.settings.setLocal("hiddenTabs",JSON.stringify(t))},refresh:function(){RED.nodes.eachWorkspace(function(e){n.renameTab(e.id,e.label)}),RED.nodes.eachSubflow(function(e){n.contains(e.id)&&n.renameTab(e.id,e.name)}),RED.sidebar.config.refresh()},resize:function(){n.resize()},enable:g,disable:v}}(),RED.statusBar=function(){var o,i,n={};return{init:function(){o=$('<span class="red-ui-statusbar-bucket red-ui-statusbar-bucket-left">').appendTo("#red-ui-workspace-footer"),i=$('<span class="red-ui-statusbar-bucket red-ui-statusbar-bucket-right">').appendTo("#red-ui-workspace-footer")},add:function(e){n[e.id]=e;var t=$('<span class="red-ui-statusbar-widget"></span>');e.element.appendTo(t),"left"===e.align?o.append(t):"right"===e.align&&i.prepend(t)}}}(),RED.view=function(){var E,D,R,u,x,_,m,o,a,n,r,s,d,k,l,c,p,T=5e3,C=5e3,h=.75,j=1,O=100,I=30,f=650,g=1e3,v=0,b=[],y=0,w={},L=20,S=!1,N=!1,P=null,A=[],M=[],z=[],B={},G=null,F=null,U=[],J={},V=null,q=null,W=null,K=null,H=null,X=0,Y=null,Z=[0,0],Q=null,ee=0,te=null,oe=null,ie=!1,ne=null,ae=null,re=0,se=0,de=[],le=null,ce=-1,ue=!1,pe=[],fe="",he={red:"#c00",green:"#5a8",yellow:"#F9DF31",blue:"#53A3F3",grey:"#d3d3d3",gray:"#d3d3d3"},ge=1,ve=0,me=(l=new Set,c=[],p={add:function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)p.add(e[t]);else l.has(e.id)||(c.push({n:e}),l.add(e.id))},remove:function(e,t){if(l.has(e.id))if(l.delete(e.id),void 0!==t&&c[t].n===e)c.splice(t,1);else for(var o=0;o<c.length;o++)if(c[o].n===e){c.splice(o,1);break}},clear:function(){l.clear(),c=[]},length:function(){return c.length},get:function(e){return c[e]},forEach:function(e){c.forEach(e)},nodes:function(){return c.map(function(e){return e.n})}});function t(){for(var e=[],t=0;t<T;t+=+L)e.push(t);o.selectAll("line.red-ui-workspace-chart-grid-h").remove(),o.selectAll("line.red-ui-workspace-chart-grid-h").data(e).enter().append("line").attr({class:"red-ui-workspace-chart-grid-h",x1:0,x2:T,y1:function(e){return e},y2:function(e){return e}}),o.selectAll("line.red-ui-workspace-chart-grid-v").remove(),o.selectAll("line.red-ui-workspace-chart-grid-v").data(e).enter().append("line").attr({class:"red-ui-workspace-chart-grid-v",y1:0,y2:T,x1:function(e){return e},x2:function(e){return e}})}function be(e){ce=-1;for(var t=0;t<e.length;t++){var o=e[t];o.el=n.append("svg:path").attr("class","red-ui-flow-drag-line"),("link out"===o.node.type&&o.portType===ve||"link in"===o.node.type&&o.portType===ge)&&(o.el.attr("class","red-ui-flow-link-link red-ui-flow-drag-line"),o.virtualLink=!0,ce=o.portType===ve?ge:ve),k.push(o)}-1!==ce&&A.forEach(function(e){"link in"!==e.type&&"link out"!==e.type||(e.dirty=!0)})}function ye(){for(-1!==ce&&A.forEach(function(e){"link in"!==e.type&&"link out"!==e.type||(e.dirty=!0)}),ce=-1;k.length;){var e=k.pop();e.el&&e.el.remove()}}function we(){var e=RED.workspaces.active();0!==e?((A=RED.nodes.filterNodes({z:e})).forEach(function(e,t){e._index=t}),M=RED.nodes.filterLinks({source:{z:e},target:{z:e}}),(U=RED.nodes.groups(e)||[]).forEach(function(e,t){e._index=t,e.g?(e._root=e.g,e._depth=1):(e._root=e.id,e._depth=0)})):(A=[],M=[],U=[]);for(var i=!1;i=!1,U.forEach(function(e){var t,o;!e.g||(t=RED.nodes.group(e.g))&&(o=t._depth,e._depth!==o+1&&(e._depth=o+1,i=!0),e._root!==t._root&&(e._root=t._root,i=!0))}),i;);U.sort(function(e,t){return e._root===t._root?e._depth-t._depth:e._index-t._index}),d.selectAll(".red-ui-flow-group").data(U,function(e){return e.id}).sort(function(e,t){return e._root===t._root?e._depth-t._depth:e._index-t._index})}function Ee(e,t,o,i,n){var a=i-t,r=o-e,s=Math.sqrt(a*a+r*r),d=h;if(0<r*n?s<O&&(d=.75-(O-s)/O*.75):d=.4-.2*Math.max(0,(O-Math.min(Math.abs(r),Math.abs(a)))/O),0<r*n)return"M "+e+" "+t+" C "+(e+n*(O*d))+" "+(t+0*I)+" "+(o-n*d*O)+" "+(i-0*I)+" "+o+" "+i;var l=Math.floor(o-r/2),c=Math.floor(i-a/2),u=I/2,p=(i+(c=0==a?i+I:c))/2,f=e+n*O*d,s=0<a?Math.min(p-a/2,t+u):Math.max(p-a/2,t-u),r=o-n*O*d,n=0<a?Math.max(p,i-u):Math.min(p,i+u),d=(e+f)/2,p=0<a?1:-1,d=[[d,t],[f,0<a?Math.max(t,s-u):Math.min(t,s+u)],[d,0<a?Math.min(c,s+u):Math.max(c,s-u)],[r,0<a?Math.max(c,n-u):Math.min(c,n+u)],[(o+r)/2,i]];return d[2][1]===s+p*u&&(Math.abs(a)<10*u&&(d[1][1]=s-p*u/2,d[3][1]=n-p*u/2),d[2][0]=f),"M "+e+" "+t+" C "+d[0][0]+" "+d[0][1]+" "+d[1][0]+" "+d[1][1]+" "+f+" "+s+" S "+d[2][0]+" "+d[2][1]+" "+l+" "+c+" S "+d[3][0]+" "+d[3][1]+" "+r+" "+n+" S "+d[4][0]+" "+d[4][1]+" "+o+" "+i}function De(e){var t=/^subflow:(.+)$/.exec(e);if(P&&t){if(t[1]===P.id)return void RED.notify(RED._("notification.error",{message:RED._("notification.errors.cannotAddSubflowToItself")}),"error");if(RED.nodes.subflowContains(t[1],P.id))return void RED.notify(RED._("notification.error",{message:RED._("notification.errors.cannotAddCircularReference")}),"error")}var o={id:RED.nodes.id(),z:RED.workspaces.active()};if(o.type=e,o._def=RED.nodes.getType(o.type),t){var i=RED.nodes.subflow(t[1]);o.name="",o.inputs=i.in.length,o.outputs=i.out.length}else{for(var n in o.inputs=o._def.inputs||0,o.outputs=o._def.outputs,o._def.defaults)o._def.defaults.hasOwnProperty(n)&&void 0!==o._def.defaults[n].value&&(o[n]=JSON.parse(JSON.stringify(o._def.defaults[n].value)));if(o._def.onadd)try{o._def.onadd.call(o)}catch(e){console.log("Definition error: "+o.type+".onadd:",e)}}o.changed=!0,o.moved=!0,o.w=O,o.h=Math.max(I,15*(o.outputs||0)),o.resize=!0;t={t:"add",nodes:[o.id],dirty:RED.nodes.dirty()};return!P||(i=RED.subflow.refresh(!0))&&(t.subflow={id:P.id,changed:P.changed,instances:i.instances}),{node:o,historyEvent:t}}function e(){var e,t;if(RED.view.DEBUG&&console.warn("canvasMouseDown",ee),ee!==RED.state.SELECTING_NODE){if(1===d3.event.button)return ee=RED.state.PANNING,Q=[d3.event.pageX,d3.event.pageY],void(de=[x.scrollLeft(),x.scrollTop()]);W||q||K||(V=null,Ie()),0===ee&&te&&(te.remove(),te=null),0!==ee&&ee!==RED.state.QUICK_JOINING||(d3.event.metaKey||d3.event.ctrlKey)&&(d3.event.stopPropagation(),Se(),t=Et((e=d3.mouse(this))[0],e[1]),Re({position:e,group:t=0<k.length?t||RED.nodes.group(k[0].node.g):t})),0!==ee||d3.event.metaKey||d3.event.ctrlKey||y||(e=d3.mouse(this),te=m.append("rect").attr("ox",e[0]).attr("oy",e[1]).attr("rx",1).attr("ry",1).attr("x",e[0]).attr("y",e[1]).attr("width",0).attr("height",0).attr("class","nr-ui-view-lasso"),d3.event.preventDefault())}else d3.event.stopPropagation()}function Re(e){var c=(e=e||{}).position||pe,u=e.splice,p=e.group,f=e.touchTrigger;p&&!p.active&&(mt(p,!1),bt(p),RED.view.redraw());var t=c[0],o=c[1];RED.settings.get("editor").view["view-snap-grid"]&&(c[0]=Math.round(c[0]/L)*L,c[1]=Math.round(c[1]/L)*L);var i,e=$("#red-ui-main-container").position();ee!==RED.state.QUICK_JOINING&&(ee=RED.state.QUICK_JOINING,$(window).on("keyup",Je)),oe&&oe.remove(),(oe=m.append("g").attr("transform","translate("+(c[0]-O/2)+","+(c[1]-I/2)+")")).append("rect").attr("class","red-ui-flow-node-placeholder").attr("rx",5).attr("ry",5).attr("width",O).attr("height",I).attr("fill","none"),0<k.length&&(i=k[0].virtualLink?{type:"link in"===k[0].node.type?"link out":"link in"}:k[0].portType===ve?{input:!0}:{output:!0},le={node:k[0].node,port:k[0].port,portType:k[0].portType},k[0].virtualLink&&(le.virtualLink=!0),ye()),u&&(i={input:!0,output:!0});function h(){var e,t,o;le&&(le.el||(le.el=n.append("svg:path").attr("class","red-ui-flow-drag-line")),e=le.portType===ve&&le.node.outputs||1,t=le.port,o=le.portType===ve?1:-1,le.el.attr("d",Ee(le.node.x+o*le.node.w/2,le.node.y+(-(e-1)/2*13+13*t),c[0]-o*O/2,c[1],o)))}var g,v;le&&h(),RED.typeSearch.show({x:d3.event.clientX-e.left-O/2-(t-c[0]),y:d3.event.clientY-e.top+I/2+5-(o-c[1]),disableFocus:f,filter:i,move:function(e,t){var o;oe&&(o=d3.transform(oe.attr("transform")).translate,oe.attr("transform","translate("+(o[0]+e)+","+(o[1]+t)+")"),c[0]+=e,c[1]+=t,h())},cancel:function(){le&&(le.el&&le.el.remove(),le=null),oe&&oe.remove(),Ue(),Ie(),ye(),kt()},add:function(e,t){f&&(t=!1,Ue());var o,i,n,a,r,s,d,l=De(e);l&&(t&&(ee=RED.state.QUICK_JOINING),o=l.node,d=l.historyEvent,o.x=c[0],o.y=c[1],void 0===(a=RED.utils.getMessageProperty(RED.settings.get("editor"),"view.view-node-show-label"))||o._def.hasOwnProperty("showLabel")&&!o._def.showLabel||o._def.defaults.hasOwnProperty("l")||(o.l=a),le?(e=null,(s=le).portType===ve&&(0<o.inputs||s.virtualLink)?(e=s.node,n=s.port,i=o):s.portType===ge&&(0<o.outputs||s.virtualLink)&&(e=o,i=s.node,n=0),null!==e?(s.virtualLink?(d={t:"multi",events:[d]},l=$.extend(!0,{},{v:e.links}).v,a=$.extend(!0,{},{v:i.links}).v,e.links.push(i.id),i.links.push(e.id),e.dirty=!0,i.dirty=!0,d.events.push({t:"edit",node:e,dirty:RED.nodes.dirty(),changed:e.changed,changes:{links:l}}),d.events.push({t:"edit",node:i,dirty:RED.nodes.dirty(),changed:i.changed,changes:{links:a}}),e.changed=!0,i.changed=!0):(RED.nodes.addLink(r={source:e,sourcePort:n,target:i}),d.links=[r]),t?(le.node=o,le.port=0):(le.el.remove(),le=null,ee===RED.state.QUICK_JOINING&&(s.portType===ve&&0<o.outputs?be([{node:o,port:0,portType:ve}]):!le&&s.portType===ge&&0<o.inputs?be([{node:o,port:0,portType:ge}]):Ue()))):(ye(),Ue())):t?0<o.outputs?le={node:o,port:0,portType:ve}:0<o.inputs?le={node:o,port:0,portType:ge}:Ue():ee===RED.state.QUICK_JOINING&&(0<o.outputs?be([{node:o,port:0,portType:ve}]):0<o.inputs?be([{node:o,port:0,portType:ge}]):Ue()),RED.nodes.add(o),RED.editor.validateNode(o),p&&(RED.group.addToGroup(p,o),(d="multi"!==d.t?{t:"multi",events:[d]}:d).events.push({t:"addToGroup",group:p,nodes:o})),u&&(Ue(),RED.nodes.removeLink(u),r={source:u.source,sourcePort:u.sourcePort,target:o},s={source:o,sourcePort:0,target:u.target},RED.nodes.addLink(r),RED.nodes.addLink(s),d.links=(d.links||[]).concat([r,s]),d.removedLinks=[u]),RED.history.push(d),RED.nodes.dirty(!0),Se(),o.selected=!0,p&&(mt(p,!1),bt(p)),me.add(o),we(),Ie(),kt(),void 0!==g&&(d=g+v/2,(d=o.x-o.w/2-d)!=2*L&&(o.x=o.x+2*L-d,o.dirty=!0,o.x=Math.ceil(o.x/L)*L,kt())),t?(void 0===g&&setTimeout(function(){RED.typeSearch.refresh({filter:{input:!0}})},100),g=o.x,v=o.w,c[0]=o.x+o.w/2+O/2+2*L,oe.attr("transform","translate("+(c[0]-O/2)+","+(c[1]-I/2)+")"),h()):oe.remove())}}),we(),Ie(),kt()}function xe(){var c;if(ee===RED.state.PANNING){var e=[d3.event.pageX,d3.event.pageY];d3.event.touches&&(e=[(i=d3.event.touches.item(0)).pageX,i.pageY]);var t=[Q[0]-e[0],Q[1]-e[1]];return x.scrollLeft(de[0]+t[0]),void x.scrollTop(de[1]+t[1])}if(Q=d3.touches(this)[0]||d3.mouse(this),te){var o=parseInt(te.attr("ox")),i=parseInt(te.attr("oy")),e=parseInt(te.attr("x")),t=parseInt(te.attr("y")),o=Q[0]<o?o-(e=Q[0]):Q[0]-e,i=Q[1]<i?i-(t=Q[1]):Q[1]-t;te.attr("x",e).attr("y",t).attr("width",o).attr("height",i)}else if(ee!==RED.state.SELECTING_NODE){if(ee==RED.state.QUICK_JOINING||ee==RED.state.IMPORT_DRAGGING||W||K||null!=V){if(ee==RED.state.JOINING||ee===RED.state.QUICK_JOINING){if(0===k.length&&null!==H){if(d3.event.shiftKey){var n=[],a=[];for(a=V&&(H===ve&&V.source===W&&V.sourcePort===X||H===ge&&V.target===W)?[V]:(p=H===ve?{source:W,sourcePort:X}:{target:W},RED.nodes.filterLinks(p)),w=0;w<a.length;w++){var r=a[w];RED.nodes.removeLink(r),n.push({link:r,node:H===ve?r.target:r.source,port:H===ve?0:r.sourcePort,portType:H===ve?ge:ve})}0===n.length?(Ue(),kt()):(be(n),ee=0,we(),kt(),ee=RED.state.JOINING)}else W&&!le&&be([{node:W,port:X,portType:H}]);V=null}for(f=Q,w=0;w<k.length;w++){var s=k[w],d=s.portType===ve&&s.node.outputs||1,l=s.port,u=s.portType===ve?1:-1;s.el.attr("d",Ee(s.node.x+u*s.node.w/2,s.node.y+(-(d-1)/2*13+13*l),f[0],f[1],u))}d3.event.preventDefault()}else if(ee==RED.state.MOVING){f=d3.mouse(document.body),isNaN(f[0])&&(f=d3.touches(document.body)[0]);var p=(Z[0]-f[0])*(Z[0]-f[0])+(Z[1]-f[1])*(Z[1]-f[1]);(3<p&&!ae||ae&&10<p)&&(ee=RED.state.MOVING_ACTIVE,se=0,N=!1,1===me.length()&&(c=me.get(0),N=c.n.hasOwnProperty("_def")&&(c.n.hasOwnProperty("inputs")&&0<c.n.inputs||!c.n.hasOwnProperty("inputs")&&0<c.n._def.inputs)&&(c.n.hasOwnProperty("outputs")&&0<c.n.outputs||!c.n.hasOwnProperty("outputs")&&0<c.n._def.outputs)&&0===RED.nodes.filterLinks({source:c.n}).length&&0===RED.nodes.filterLinks({target:c.n}).length))}else if(ee==RED.state.MOVING_ACTIVE||ee==RED.state.IMPORT_DRAGGING){for(var f=Q,h=0,g=0,v=T,m=C,b=0;b<me.length();b++)c=me.get(b),d3.event.shiftKey&&(c.n.ox=c.n.x,c.n.oy=c.n.y),c.n.x=f[0]+c.dx,c.n.y=f[1]+c.dy,c.n.dirty=!0,m="group"===c.n.type?(!1!==c.n.groupMoved&&(c.n.groupMoved=!0),RED.group.markDirty(c.n),h=Math.min(c.n.x-5,h),g=Math.min(c.n.y-5,g),v=Math.max(c.n.x+c.n.w+5,v),Math.max(c.n.y+c.n.h+5,m)):(h=Math.min(c.n.x-c.n.w/2-5,h),g=Math.min(c.n.y-c.n.h/2-5,g),v=Math.max(c.n.x+c.n.w/2+5,v),Math.max(c.n.y+c.n.h/2+5,m));if(0!==h||0!==g)for(w=0;w<me.length();w++)(c=me.get(w)).n.x-=h,c.n.y-=g;if(v!==T||m!==C)for(w=0;w<me.length();w++)(c=me.get(w)).n.x-=v-T,c.n.y-=m-C;var y=[0,0];if(S!=d3.event.shiftKey&&0<me.length()){for(var w=0;c=me.get(w++),w<me.length()&&"group"===c.n.type;);if("group"===c.n.type?(y[0]=c.n.x-L*Math.floor(c.n.x/L)-L/2,y[1]=c.n.y-L*Math.floor(c.n.y/L)-L/2):(y[0]=c.n.x-(L*Math.floor((c.n.x-c.n.w/2)/L)+c.n.w/2),y[1]=c.n.y-L*Math.floor(c.n.y/L)),0!==y[0]||0!==y[1])for(w=0;w<me.length();w++)(c=me.get(w)).n.x-=y[0],c.n.y-=y[1],c.n.x==c.n.ox&&c.n.y==c.n.oy&&(c.dirty=!1)}1===me.length()&&"group"!==me.get(0).n.type&&(c=me.get(0),N&&(D=D||setTimeout(function(){for(var e,t=[],o=1/0,i=null,n=c.n.x,a=c.n.y,t=_[0][0].getIntersectionList?((e=_[0][0].createSVGRect()).x=n*j,e.y=a*j,e.width=1,e.height=1,_[0][0].getIntersectionList(e,_[0][0])):RED.view.getLinksAtPoint(n*j,a*j),r=0;r<t.length;r++)if(d3.select(t[r]).classed("red-ui-flow-link-background"))for(var s=t[r].getTotalLength(),d=0;d<s;d+=10){var l=t[r].getPointAtLength(d),l=(l.x-n)*(l.x-n)+(l.y-a)*(l.y-a);l<200&&l<o&&(o=l,i=t[r])}E&&E!==i&&d3.select(E.parentNode).classed("red-ui-flow-link-splice",!1),i?d3.select(i.parentNode).classed("red-ui-flow-link-splice",!0):d3.select(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),E=i,D=null},100)),"subflow"!==c.n.type&&!c.n.g&&U&&(R=R||setTimeout(function(){F=Et(c.n.x,c.n.y);for(var e=0;e<U.length;e++){var t=U[e];t===F?(t.hovered=!0,t.dirty=!0):t.hovered&&(t.hovered=!1,t.dirty=!0)}R=null},50)))}0!==ee&&kt()}}else d3.event.stopPropagation()}function $e(){var o,i,n,a;if(pe=[d3.event.offsetX/j,d3.event.offsetY/j],RED.view.DEBUG&&console.warn("canvasMouseUp",ee),ee!==RED.state.PANNING)if(ee!==RED.state.SELECTING_NODE){if(ee!==RED.state.QUICK_JOINING){if(W&&ee==RED.state.JOINING){for(var e=[],t=0;t<k.length;t++)k[t].link&&e.push(k[t].link);0<e.length&&(p={t:"delete",links:e,dirty:RED.nodes.dirty()},RED.history.push(p),RED.nodes.dirty(!0)),ye()}if(te?(o=parseInt(te.attr("x")),i=parseInt(te.attr("y")),n=o+parseInt(te.attr("width")),a=i+parseInt(te.attr("height")),u=G,d3.event.shiftKey||(Se(),u&&o<u.x+u.w&&n>u.x&&i<u.y+u.h&&a>u.y&&(bt(u),G.selected=!0)),U.forEach(function(e){if(!e.selected&&e.x>o&&e.x+e.w<n&&e.y>i&&e.y+e.h<a&&(!G||RED.group.contains(G,e))){for(;e.g&&(!G||e.g!==G.id);)e=RED.nodes.group(e.g);e.selected||mt(e,!0)}}),A.forEach(function(e){if(!e.selected&&e.x>o&&e.x<n&&e.y>i&&e.y<a&&(!G||RED.group.contains(G,e)))if(!e.g||G&&e.g===G.id)e.selected=!0,e.dirty=!0,me.add(e);else{for(var t=RED.nodes.group(e.g);t.g&&(!G||t.g!==G.id);)t=RED.nodes.group(t.g);t.selected||mt(t,!0)}}),P&&(P.in.forEach(function(e){e.selected=e.x>o&&e.x<n&&e.y>i&&e.y<a,e.selected&&(e.dirty=!0,me.add(e))}),P.out.forEach(function(e){e.selected=e.x>o&&e.x<n&&e.y>i&&e.y<a,e.selected&&(e.dirty=!0,me.add(e))}),P.status&&(P.status.selected=P.status.x>o&&P.status.x<n&&P.status.y>i&&P.status.y<a,P.status.selected&&(P.status.dirty=!0,me.add(P.status)))),Ie(),te.remove(),te=null):ee!=RED.state.DEFAULT||null!=q||d3.event.ctrlKey||d3.event.metaKey||(Se(),Ie()),ee==RED.state.MOVING_ACTIVE&&0<me.length()){var r=null;if(F){for(var s=0;s<me.length();s++){var d=me.get(s);RED.group.addToGroup(F,d.n)}(r=F).hovered=!1,bt(F),G.selected=!0,F=null}for(var l,c,u,p,f=[],s=0;s<me.length();s++)(d=me.get(s)).ox===d.n.x&&d.oy===d.n.y||(f.push({n:d.n,ox:d.ox,oy:d.oy,moved:d.n.moved}),d.n.dirty=!0,d.n.moved=!0);0<f.length&&ee==RED.state.MOVING_ACTIVE&&(p={t:"move",nodes:f,dirty:RED.nodes.dirty()},E&&(l=d3.select(E).data()[0],RED.nodes.removeLink(l),c={source:l.source,sourcePort:l.sourcePort,target:me.get(0).n},u={source:me.get(0).n,sourcePort:0,target:l.target},RED.nodes.addLink(c),RED.nodes.addLink(u),p.links=[c,u],p.removedLinks=[l],we()),r&&(p.addToGroup=r),RED.nodes.dirty(!0),RED.history.push(p))}if(ee==RED.state.MOVING||ee==RED.state.MOVING_ACTIVE)for(t=0;t<me.length();t++){var h=me.get(t);delete h.ox,delete h.oy}ee==RED.state.IMPORT_DRAGGING&&(we(),RED.nodes.dirty(!0)),Ue(),kt()}}else d3.event.stopPropagation();else Ue()}function _e(){j<2&&Ce(j+.1)}function ke(){.3<j&&Ce(j-.1)}function Te(){Ce(1)}function Ce(e){var t=[x.width(),x.height()],o=[x.scrollLeft(),x.scrollTop()],i=[(o[0]+t[0]/2)/j,(o[1]+t[1]/2)/j];j=e;t=[(o[0]+t[0]/2)/j,(o[1]+t[1]/2)/j],i=[(t[0]-i[0])*j,(t[1]-i[1])*j];x.scrollLeft(o[0]-i[0]),x.scrollTop(o[1]-i[1]),RED.view.navigator.resize(),kt()}function je(){ee!==RED.state.MOVING&&ee!==RED.state.MOVING_ACTIVE&&(ee===RED.state.IMPORT_DRAGGING?(Se(),RED.history.pop(),ee=0):(G?yt:Se)(),kt())}function Le(){var e;ee===RED.state.SELECTING_NODE&&u.single||(G?(e=G,Se(),bt(e),RED.group.getNodes(e,!1).forEach(function(e){"group"===e.type?mt(e,!0,!0):(me.add(e),e.selected=!0,e.dirty=!0)}),G.selected=!0):(Se(),yt(),U.forEach(function(e){e.g?(e.selected=!1,e.dirty=!0):(mt(e,!0),e.selected||(e.selected=!0,e.dirty=!0))}),A.forEach(function(e){ee===RED.state.SELECTING_NODE&&u.filter&&!u.filter(e)||e.g||e.selected||(e.selected=!0,e.dirty=!0,me.add(e))}),ee!==RED.state.SELECTING_NODE&&P&&(P.in.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,me.add(e))}),P.out.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,me.add(e))}),P.status&&(P.status.selected||(P.status.selected=!0,P.status.dirty=!0,me.add(P.status))))),V=null,ee!==RED.state.SELECTING_NODE&&Ie(),kt())}function Se(){RED.view.DEBUG&&console.warn("clearSelection",ee,"movingSet.length():",me.length());for(var e=0;e<me.length();e++){var t=me.get(e);t.n.dirty=!0,t.n.selected=!1}me.clear(),V=null,G&&(G.active=!1,G.dirty=!0,G=null),U.forEach(function(e){e.selected=!1,e.dirty=!0})}var Oe=null;function Ie(){var e={},t=RED.workspaces.active(),o=RED.workspaces.selection();if(0!==t)if(0===o.length){e=St(),M=RED.nodes.filterLinks({source:{z:t},target:{z:t}});RED.nodes.getWorkspaceOrder();var i={};z=[],Object.keys(B).forEach(function(e){B[e].dirty=!0}),B={};for(var n=0;n<me.length();n++){var a,r,s=me.get(n);("link out"===s.n.type&&"return"!==s.n.mode||"link in"===s.n.type)&&s.n.z===t&&(a=s.n,B[a.id]=a,r={},a.links.forEach(function(e){e=RED.nodes.node(e);e&&("link out"===a.type?e.z===a.z?i[a.id+":"+e.id]||(M.push({source:a,sourcePort:0,target:e,link:!0}),i[a.id+":"+e.id]=!0,(B[e.id]=e).dirty=!0):(r[e.z]=r[e.z]||[],r[e.z].push(e)):e.z===a.z?i[e.id+":"+a.id]||(M.push({source:e,sourcePort:0,target:a,link:!0}),i[e.id+":"+a.id]=!0,(B[e.id]=e).dirty=!0):(r[e.z]=r[e.z]||[],r[e.z].push(e)))}),0<Object.keys(r).length&&z.push({refresh:Math.floor(1e4*Math.random()),node:a,links:r}))}0===z.length&&null!==V&&V.link&&(M.push(V),B[V.source.id]=V.source,V.source.dirty=!0,B[V.target.id]=V.target,V.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:t});o!==Oe&&(Oe=o,RED.events.emit("view:selection-changed",e))}function Ne(){var e;0<me.length()&&("subflow"===(e=me.get(0).n).type?RED.editor.editSubflow(P):"group"===e.type?RED.editor.editGroup(e):RED.editor.edit(e))}function Pe(){if(ee!==RED.state.SELECTING_NODE){He&&(He.remove(),He=null);var e=RED.workspaces.selection();if(0<e.length){var t=0;if(e.forEach(function(e){"tab"===e.type&&t++}),t!==RED.workspaces.count()){for(var o={t:"delete",dirty:RED.nodes.dirty(),nodes:[],links:[],groups:[],workspaces:[],subflows:[]},i=RED.nodes.getWorkspaceOrder().slice(0),n=0;n<e.length;n++){var a,r=e[n];r._index=i.indexOf(r.id),RED.workspaces.remove(r),"tab"===r.type?(o.workspaces.push(r),a=RED.nodes.removeWorkspace(r.id)):(a=RED.subflow.removeSubflow(r.id),o.subflows=o.subflows.concat(a.subflows)),o.nodes=o.nodes.concat(a.nodes),o.links=o.links.concat(a.links),o.groups=o.groups.concat(a.groups)}RED.history.push(o),RED.nodes.dirty(!0),we(),Ie(),kt()}}else if(0<me.length()||null!=V){var s,d,l=[],c=[],u=[],p=[],f=[],h=[],g=RED.nodes.dirty(),v=[];if(0<me.length()){for(n=0;n<me.length();n++)"group"===(y=me.get(n).n).type&&v.push(y);for(n=0;n<v.length;n++)v[n].nodes.forEach(function(e){"group"===e.type&&-1===v.indexOf(e)&&v.push(e)});for(var m,b,y,n=0;n<me.length();n++)(y=me.get(n).n).selected=!1,"group"!==y.type&&"subflow"!==y.type?(y.x<0&&(y.x=25),b=RED.nodes.remove(y.id),l.push(y),l=l.concat(b.nodes),c=c.concat(b.links),y.g&&(m=RED.nodes.group(y.g),-1===v.indexOf(m)&&(b=m.nodes.indexOf(y),m.nodes.splice(b,1),RED.group.markDirty(m)))):("out"===y.direction?p.push(y):"in"===y.direction?f.push(y):"status"===y.direction&&(s=y),y.dirty=!0);for(n=v.length-1;0<=n;n--){var w=v[n];u.push(w),RED.nodes.removeGroup(w)}0<p.length&&(d=RED.subflow.removeOutput(p))&&(c=c.concat(d.links)),1==f.length&&(d=RED.subflow.removeInput())&&(c=c.concat(d.links)),s&&(d=RED.subflow.removeStatus())&&(c=c.concat(d.links));var E=RED.subflow.refresh(!0);E&&(h=E.instances),me.clear(),(0<l.length||0<p.length||0<f.length||s||0<u.length)&&RED.nodes.dirty(!0)}V&&V.link?(d=V.source.id,E=V.target.id,d=V.target.links.indexOf(d),E=V.source.links.indexOf(E),o={t:"multi",events:[{t:"edit",node:V.source,changed:V.source.changed,changes:{links:$.extend(!0,{},{v:V.source.links}).v}},{t:"edit",node:V.target,changed:V.target.changed,changes:{links:$.extend(!0,{},{v:V.target.links}).v}}],dirty:RED.nodes.dirty()},RED.nodes.dirty(!0),V.source.changed=!0,V.target.changed=!0,V.target.links.splice(d,1),V.source.links.splice(E,1),V.source.dirty=!0,V.target.dirty=!0):(V&&(RED.nodes.removeLink(V),c.push(V)),RED.nodes.dirty(!0),o={t:"delete",nodes:l,links:c,groups:u,subflowOutputs:p,subflowInputs:f,subflow:{id:P?P.id:void 0,instances:h},dirty:g},s&&(o.subflow.status=s)),RED.history.push(o),V=null,we(),Ie(),kt()}}}function Ae(){if(ee!==RED.state.SELECTING_NODE){var t=[],e=RED.workspaces.selection();if(0<e.length?(t=[],e.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})))})):(e=RED.view.selection()).nodes&&e.nodes.forEach(function(e){t.push(e),"group"===e.type&&(t=t.concat(RED.group.getNodes(e,!0)))}),0<t.length){for(var o=[],i=0,n=0,a={},r=0;r<t.length;r++){var s=t[r];if(!a[s.id]&&(a[s.id]=!0,"subflow"!=s.type)){for(var d in"group"===s.type?n++:i++,s._def.defaults)s._def.defaults.hasOwnProperty(d)&&(!s._def.defaults[d].type||(d=RED.nodes.node(s[d]))&&d._def.exclusive&&o.push(RED.nodes.convertNode(d)));o.push(RED.nodes.convertNode(s))}}fe=JSON.stringify(o),RED.menu.setDisabled("menu-item-edit-paste",!1),0<i?RED.notify(RED._("clipboard.nodeCopied",{count:i}),{id:"clipboard"}):0<n&&RED.notify(RED._("clipboard.groupCopied",{count:n}),{id:"clipboard"})}}}function Me(e,t){for(var o=Fe(e),i=0,n=0;n<o.length;n++){var a=Ge(o[n],t)[0];i<a&&(i=a)}return{lines:o,width:i}}var ze={},Be={};function Ge(e,t){var o="!"+e;if(ze[t]){if(Be[t][o])return Be[t][o]}else ze[t]=document.createElement("span"),ze[t].className=t,ze[t].style.position="absolute",ze[t].style.top="-1000px",document.getElementById("red-ui-editor").appendChild(ze[t]),Be[t]={};ze[t].textContent=e||"";var i=ze[t].offsetWidth,e=ze[t].offsetHeight;return Be[t][o]=[i,e],Be[t][o]}function Fe(e){var t=[],o=e.split(/\\n /);if(1<o.length){for(var i=0,i=0;i<o.length-1;i++)/\\$/.test(o[i])?(t.push(o[i]+"\\n "+o[i+1]),i++):t.push(o[i]);i===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 Ue(){ee=0,E=H=q=Y=K=W=null,N=!1,F&&(F.hovered=!1,F=null),d3.select(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),D&&(clearTimeout(D),D=null),R&&(clearTimeout(R),R=null)}function Je(e){17!==e.keyCode&&"Meta"!==e.key&&91!==e.keyCode||(Ue(),ye(),kt(),$(window).off("keyup",Je))}function Ve(e,t,o,i){RED.view.DEBUG&&console.warn("portMouseDown",ee,e,t,o),1!==(i=i||d3.event)&&(ee!==RED.state.SELECTING_NODE?(W=e,H=t,X=o||0,ee!==RED.state.QUICK_JOINING&&(ee=RED.state.JOINING,document.body.style.cursor="crosshair",(i.ctrlKey||i.metaKey)&&(ee=RED.state.QUICK_JOINING,be([{node:W,port:X,portType:H}]),$(window).on("keyup",Je))),i.stopPropagation(),i.preventDefault()):i.stopPropagation())}function qe(e,i,n,t){if(RED.view.DEBUG&&console.warn("portMouseUp",ee,e,i,n),t=t||d3.event,ee!==RED.state.SELECTING_NODE){if(ee===RED.state.QUICK_JOINING&&0<k.length){if(k[0].node===e)return;if(k[0].virtualLink&&("link in"===k[0].node.type&&"link out"!==e.type||"link out"===k[0].node.type&&"link in"!==e.type))return}if(document.body.style.cursor="",ee==RED.state.JOINING||ee==RED.state.QUICK_JOINING){if("undefined"!=typeof TouchEvent&&t instanceof TouchEvent){var a=!1;if(RED.nodes.eachNode(function(e){var t,o;e.z==RED.workspaces.active()&&(t=e.w/2,o=e.h/2,e.x-t<Q[0]&&e.x+t>Q[0]&&e.y-o<Q[1]&&e.y+o>Q[1]&&(a=!0,i=0<(Y=e).inputs?ge:ve,n=0))}),!a&&P){var o=[];P.status&&o.push(P.status),P.in&&(o=o.concat(P.in)),P.out&&(o=o.concat(P.out));for(var r=0;r<o.length;r++){var s=o[r],d=s.w/2,l=s.h/2;if(s.x-d<Q[0]&&s.x+d>Q[0]&&s.y-l<Q[1]&&s.y+l>Q[1]){a=!0,i="in"===(Y=s).direction?ve:ge,n=0;break}}}}else Y=e;var c=[],u=[],p=[],f=null;for(r=0;r<k.length;r++)k[r].link&&u.push(k[r].link);var h,g,v,m,b,y,w,E,D,R=[];for(r=0;r<k.length;r++)i!=k[r].portType&&Y!==k[r].node&&((h=k[r]).portType===ve?(g=h.node,m=h.port,v=Y):h.portType===ge&&(g=Y,v=h.node,m=n),b={source:g,sourcePort:m,target:v},h.virtualLink?/^link (in|out)$/.test(g.type)&&/^link (in|out)$/.test(v.type)&&g.type!==v.type&&-1===g.links.indexOf(v.id)&&-1===v.links.indexOf(g.id)&&(y=$.extend(!0,{},{v:g.links}).v,w=$.extend(!0,{},{v:v.links}).v,g.links.push(v.id),v.links.push(g.id),g.dirty=!0,v.dirty=!0,p.push(g),p.push(v),b.link=!0,M.push(b),B[g.id]=g,B[v.id]=v,f=b,R.push({t:"edit",node:g,dirty:RED.nodes.dirty(),changed:g.changed,changes:{links:y}}),R.push({t:"edit",node:v,dirty:RED.nodes.dirty(),changed:v.changed,changes:{links:w}}),g.changed=!0,v.changed=!0):"link out"===e.type&&i===ve||"link in"===e.type&&i===ge||i===ve&&"subflow"!==Y.type&&0===Y.outputs||i===ge&&"subflow"!==Y.type&&0===Y.inputs||h.portType===ge&&"subflow"===Y.type&&("status"===Y.direction||"out"===Y.direction)||h.portType===ve&&"subflow"===Y.type&&"in"===Y.direction||0!==RED.nodes.filterLinks({source:g,target:v,sourcePort:m}).length||(RED.nodes.addLink(b),c.push(b)));if((0<c.length||0<u.length||0<p.length)&&(D=0<p.length?{t:"multi",events:R,dirty:RED.nodes.dirty()}:{t:"add",links:c,removedLinks:u,dirty:RED.nodes.dirty()},!P||(E=RED.subflow.refresh(!0))&&(D.subflow={id:P.id,changed:P.changed,instances:E.instances}),RED.history.push(D),we(),RED.nodes.dirty(!0)),ee===RED.state.QUICK_JOINING)return(0<c.length||0<p.length)&&(ye(),i===ge&&0<e.outputs?be([{node:e,port:0,portType:ve}]):i===ve&&0<e.inputs?be([{node:e,port:0,portType:ge}]):Ue(),(q=V=f)&&Ie()),void kt();Ue(),ye(),(q=V=f)&&Ie(),kt()}}else t.stopPropagation()}var We,Ke=null,He=null;function Xe(e){var t=d3.select(e);if("red-ui-workspace-chart-event-layer"===t.attr("class"))return[0,0];var o,i=[0,0];"g"===e.nodeName.toLowerCase()?(o=t.attr("transform"))&&(i=d3.transform(o).translate):i=[t.attr("x")||0,t.attr("y")||0];e=Xe(e.parentNode);return[i[0]+e[0],i[1]+e[1]]}function Ye(e,t,o,i){var n=m.append("g").attr("transform","translate("+e+","+t+")").attr("class","red-ui-flow-port-tooltip"),a=o.indexOf("\\n "),e=(o=-1<a&&"\\"!==o[a-1]?o.substring(0,a)+"...":o).split("\n"),r=6,s=12,d=[],l=0;e.forEach(function(e,t){e=Ge(e||"&nbsp;","red-ui-flow-port-tooltip-label");r=Math.max(r,e[0]+14),d.push(e[1]),0===t&&(l=e[1]),s+=e[1]});var c,u,p,t=r/2-5-2,a=s/2-5-2,o=s-4,f=-s/2;return"left"===i?(c="M0 0 l -5 -5 v -"+a+" q 0 -2 -2 -2 h -"+r+" q -2 0 -2 2 v "+o+" q 0 2 2 2 h "+r+" q 2 0 2 -2 v -"+a+" l 5 -5",u=-14,p="end"):"right"===i?(c="M0 0 l 5 -5 v -"+a+" q 0 -2 2 -2 h "+r+" q 2 0 2 2 v "+o+" q 0 2 -2 2 h -"+r+" q -2 0 -2 -2 v -"+a+" l -5 -5",u=14,p="start"):"top"===i&&(c="M0 0 l 5 -5 h "+t+" q 2 0 2 -2 v -"+s+" q 0 -2 -2 -2 h -"+(r-4)+" q -2 0 -2 2 v "+s+" q 0 2 2 2 h "+t+" l 5 5",u=-r/2+6,f=-s-l+12,p="start"),n.append("path").attr("d",c),e.forEach(function(e,t){f+=d[t],n.append("svg:text").attr("class","red-ui-flow-port-tooltip-label").attr("x",u).attr("y",f).attr("text-anchor",p).text(e||" ")}),n}function Ze(o,i,n,a){var e;ee!==RED.state.SELECTING_NODE?(clearTimeout(Ke),(e=ee!=RED.state.JOINING&&ee!=RED.state.QUICK_JOINING||0<k.length&&k[0].portType!==n&&(!k[0].virtualLink||"link in"===k[0].node.type&&"link out"===i.type||"link out"===k[0].node.type&&"link in"===i.type))&&(n===ge&&(i._def&&i._def.inputLabels||i.inputLabels)||n===ve&&(i._def&&i._def.outputLabels||i.outputLabels))&&(Ke=setTimeout(function(){var e,t=function(t,o,e){var i,n=o===ge?t.inputLabels:t.outputLabels;if(n&&n[e])return n[e];if("string"==typeof(n=o===ge?t._def.inputLabels:t._def.outputLabels))i=n;else if("function"==typeof n)try{i=n.call(t,e)}catch(e){console.log("Definition error: "+t.type+"."+(o===ge?"inputLabels":"outputLabels"),e),i=null}else $.isArray(n)&&(i=n[e]);return i}(i,n,a);t&&(e=Xe(o.node()),Ke=null,He=Ye(e[0]+(n===ge?-2:12),e[1]+5,t,n===ge?"left":"right"))},500)),o.classed("red-ui-flow-port-hovered",e)):d3.event.stopPropagation()}function Qe(e){ee!==RED.state.SELECTING_NODE?(clearTimeout(Ke),He&&(He.remove(),He=null),e.classed("red-ui-flow-port-hovered",!1)):d3.event.stopPropagation()}function et(e){for(ee=RED.state.MOVING,i=0;i<me.length();i++){var t=me.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]}Z=d3.mouse(document.body),isNaN(Z[0])&&(Z=d3.touches(document.body)[0])}function tt(e){if(RED.view.DEBUG&&console.warn("nodeMouseUp",ee,e),ee!==RED.state.SELECTING_NODE){if(ae&&W==e&&0<se&&se<f)return ee=RED.state.DEFAULT,"subflow"!=e.type?/^subflow:/.test(e.type)&&(d3.event.ctrlKey||d3.event.metaKey)?RED.workspaces.show(e.type.substring(8)):RED.editor.edit(e):RED.editor.editSubflow(P),se=0,void d3.event.stopPropagation();if(ee===RED.state.MOVING&&!ue&&!e.selected&&e.g&&RED.nodes.group(e.g).selected){Se(),mt(RED.nodes.group(e.g),!1),bt(RED.nodes.group(e.g)),W.selected=!0,me.add(W);var t=d3.touches(this)[0]||d3.mouse(this);return t[0]+=e.x-e.w/2,t[1]+=e.y-e.h/2,et(t),void Ie()}ue=!1;var o=e._def?0<e.inputs?1:0:"in"==e.direction?0:1,t=!1;ee!==RED.state.JOINING&&ee!==RED.state.QUICK_JOINING||(t=!0,0<k.length&&(k[0].virtualLink?"link in"===e.type?o=1:"link out"===e.type&&(o=0):o=1===k[0].portType?ve:ge)),qe(e,o,0),t&&d3.selectAll(".red-ui-flow-port-hovered").classed("red-ui-flow-port-hovered",!1)}else d3.event.stopPropagation()}function ot(e){if(RED.view.DEBUG&&console.warn("nodeMouseDown",ee,e),Ct(),1!==d3.event.button){if(ee==RED.state.IMPORT_DRAGGING){var t,o,i,n=RED.history.peek();if(E&&(t=d3.select(E).data()[0],RED.nodes.removeLink(t),o={source:t.source,sourcePort:t.sourcePort,target:me.get(0).n},i={source:me.get(0).n,sourcePort:0,target:t.target},RED.nodes.addLink(o),RED.nodes.addLink(i),n.links=[o,i],n.removedLinks=[t],we()),F){for(var a=0;a<me.length();a++){var r=me.get(a);RED.group.addToGroup(F,r.n)}(n.addedToGroup=F).hovered=!1,bt(F),G.selected=!0,F=null}return Ie(),RED.nodes.dirty(!0),kt(),Ue(),void d3.event.stopPropagation()}if(ee!=RED.state.QUICK_JOINING){if(ee===RED.state.SELECTING_NODE)return d3.event.stopPropagation(),u.single?void u.done(e):(e.selected?(e.selected=!1,me.remove(e)):u.filter&&!u.filter(e)||(e.selected=!0,me.add(e)),e.dirty=!0,void kt());W=e;n=Date.now();if(se=n-re,re=n,ae=ne==W&&(d3.event.touches||0===d3.event.button)&&!d3.event.shiftKey&&!d3.event.altKey&&se<f,ne=W,!e.selected&&e.g){var s,d=RED.nodes.group(e.g);if(d!==G&&(d3.event.ctrlKey||d3.event.metaKey))ue=(G&&d.g===G.id||yt(),!0),d.selected?wt(d):mt(d,!0);else if(d===G)if(d3.event.shiftKey){d3.event.ctrlKey||d3.event.metaKey||(c=G,Se(),bt(c),G.selected=!0),console.log(d3.event);for(var l=RED.nodes.getAllFlowNodes(W),r=0;r<l.length;r++)l[r].selected||(l[r].selected=!0,l[r].dirty=!0,me.add(l[r]))}else d3.event.ctrlKey||d3.event.metaKey||(c=G,Se(),wt(d),mt(d,!1,!1),c&&(bt(c),G.selected=!0)),W.selected=!0,me.add(W);else{ue=!d.selected;var c=G;d.selected||Se(),c?c!==d&&c.id!==d.g?(c.active=!1,c.dirty=!0):(G=c).active=!0:ae=!1,mt(d,!(G&&G===d),!!ue),G&&G===d&&(W.selected=!0,me.add(W))}2!=d3.event.button&&((s=d3.touches(this)[0]||d3.mouse(this))[0]+=e.x-e.w/2,s[1]+=e.y-e.h/2,et(s))}else if(e.selected&&(d3.event.ctrlKey||d3.event.metaKey))W.selected=!1,me.remove(W);else{if(d3.event.shiftKey){Se();d=d3.event.offsetX/j-W.x;l=W.w/2-Math.abs(d)<(30<W.w?25:8)?[W].concat(d<0?RED.nodes.getAllUpstreamNodes(W):RED.nodes.getAllDownstreamNodes(W)):RED.nodes.getAllFlowNodes(W);for(r=0;r<l.length;r++)l[r].selected=!0,l[r].dirty=!0,me.add(l[r])}else e.selected||((d3.event.ctrlKey||d3.event.metaKey?yt:Se)(),W.selected=!0,me.add(W));V=null,2!=d3.event.button&&(ee=RED.state.MOVING,(s=d3.touches(this)[0]||d3.mouse(this))[0]+=e.x-e.w/2,s[1]+=e.y-e.h/2,et(s))}e.dirty=!0,Ie(),kt(),d3.event.stopPropagation()}else d3.event.stopPropagation()}}function it(e){RED.view.DEBUG&&console.warn("nodeTouchStart",ee,e);var t=d3.select(this),o=d3.event.touches.item(0),i=[o.pageX,o.pageY];b=[o.pageX,o.pageY],v=0,y=setTimeout(function(){xt(t,i)},g),ot.call(this,e),d3.event.preventDefault()}function nt(e){RED.view.DEBUG&&console.warn("nodeTouchEnd",ee,e),d3.event.preventDefault(),clearTimeout(y),y=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():tt.call(this,e)}function at(o){var i,e,t;RED.view.DEBUG&&console.warn("nodeMouseOver",ee,o),0===ee||ee===RED.state.SELECTING_NODE?(ee===RED.state.SELECTING_NODE&&u&&u.filter&&!u.filter(o)||this.parentNode.classList.add("red-ui-flow-node-hovered"),clearTimeout(Ke),(o.hasOwnProperty("l")?o.l:"link in"!==o.type&&"link out"!==o.type)||(i=this.parentNode,Ke=setTimeout(function(){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=Xe(i),Ke=null,He=Ye(e[0]+o.w/2,e[1]-1,t,"top"))},500))):ee!==RED.state.JOINING&&ee!==RED.state.QUICK_JOINING||0<k.length&&(t=k[0].virtualLink&&k[0].portType===ge||k[0].portType===ve?(e=".red-ui-flow-port-input .red-ui-flow-port",ge):(e=".red-ui-flow-port-output .red-ui-flow-port",ve),Ze(d3.select(this.parentNode).selectAll(e),o,t,0))}function rt(e){var t;RED.view.DEBUG&&console.warn("nodeMouseOut",ee,e),this.parentNode.classList.remove("red-ui-flow-node-hovered"),clearTimeout(Ke),He&&(He.remove(),He=null),ee!==RED.state.JOINING&&ee!==RED.state.QUICK_JOINING||0<k.length&&(k[0].virtualLink&&k[0].portType===ge||k[0].portType===ve?t=".red-ui-flow-port-input .red-ui-flow-port":t=".red-ui-flow-port-output .red-ui-flow-port",Qe(d3.select(this.parentNode).selectAll(t)))}function st(e){Ve(this.__data__,this.__portType__,this.__portIndex__,e)}function dt(e){Ve(this.__data__,this.__portType__,this.__portIndex__,e),e.preventDefault()}function lt(e){qe(this.__data__,this.__portType__,this.__portIndex__,e)}function ct(e){qe(this.__data__,this.__portType__,this.__portIndex__,e),e.preventDefault()}function ut(e){Ze(d3.select(this),this.__data__,this.__portType__,this.__portIndex__)}function pt(e){Qe(d3.select(this),this.__data__,this.__portType__,this.__portIndex__)}function ft(e){var t;ee!==RED.state.SELECTING_NODE?(q=e,Se(),V=q,Ie(),kt(),Ct(),d3.event.stopPropagation(),(d3.event.metaKey||d3.event.ctrlKey)&&(d3.select(this).classed("red-ui-flow-link-splice",!0),e=Et((t=d3.mouse(this))[0],t[1]),Re({position:t,splice:V,group:e}))):d3.event.stopPropagation()}function ht(e){var t,o;ee!==RED.state.SELECTING_NODE?(q=e,Se(),V=q,Ie(),kt(),Ct(),d3.event.stopPropagation(),t=d3.select(document.body),e=d3.event.touches.item(0),o=[e.pageX,e.pageY],y=setTimeout(function(){y=null,xt(t,o)},g),d3.event.preventDefault()):d3.event.stopPropagation()}function gt(e){ae&&K==e&&0<se&&se<f&&(ee=RED.state.DEFAULT,RED.editor.editGroup(e),d3.event.stopPropagation())}function vt(e){var t,o=d3.touches(this.parentNode)[0]||d3.mouse(this.parentNode);Ct(),1!==d3.event.button&&(ee!=RED.state.QUICK_JOINING&&ee!==RED.state.SELECTING_NODE&&(K=e,t=Date.now(),se=t-re,re=t,ae=ne==e&&(d3.event.touches||0===d3.event.button)&&!d3.event.shiftKey&&!d3.event.metaKey&&!d3.event.altKey&&!d3.event.ctrlKey&&se<f,(ne=e).selected&&(d3.event.ctrlKey||d3.event.metaKey)?(e===G&&yt(),wt(e),d3.event.stopPropagation()):(e.selected?G&&e.g!==G.id&&yt():(d3.event.ctrlKey||d3.event.metaKey||(t=G,Se(),t&&e.g===t.id&&(bt(t),G.selected=!0)),G&&(RED.group.contains(G,e)||yt()),mt(e,!0)),2!=d3.event.button&&(e.nodes[0],et(o),K.dx=K.x-o[0],K.dy=K.y-o[1])),Ie(),kt()),d3.event.stopPropagation())}function mt(e,t,o){var i;e.selected||(e.selected=!0,e.dirty=!0),!1!==o&&me.add(e),t&&(i=new Set(me.nodes()),RED.group.getNodes(e,!0).forEach(function(e){i.has(e)||me.add(e),e.dirty=!0}))}function bt(e){G&&yt(),e.active=!0,e.dirty=!0,G=e,me.remove(e)}function yt(){G&&(G.active=!1,G.dirty=!0,wt(G),mt(G,!0),G=null)}function wt(e){e.selected&&(e.selected=!1,e.dirty=!0);var t=new Set(e.nodes);t.add(e);for(var o=me.length()-1;0<=o;--o){var i=me.get(o);!t.has(i.n)&&i.n!==e||(i.n.selected=!1,i.n.dirty=!0,me.remove(i.n,o))}}function Et(e,t){for(var o={},i=0;i<U.length;i++){var n=U[i];e>=n.x&&e<=n.x+n.w&&t>=n.y&&t<=n.y+n.h&&(o[n.id]=n)}var a=Object.keys(o);return 1<a.length&&(a.forEach(function(e){o[e]&&o[e].g&&delete o[o[e].g]}),a=Object.keys(o)),0===a.length?null:o[a[a.length-1]]}function Dt(e){var t=!0,o=RED.nodes.workspace(RED.workspaces.active());return!o||o.disabled||e.d?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 Rt(t){if(ee!==RED.state.SELECTING_NODE){var e=RED.workspaces.active(),e=RED.nodes.workspace(e);if(!e||e.disabled||t.d)P?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&&kt()}d3.event&&d3.event.preventDefault()}else d3.event&&d3.event.stopPropagation()}function xt(e,t){var o=W,i=[];i.push({name:"delete",disabled:0===me.length()&&null===V,onselect:function(){Pe()}}),i.push({name:"cut",disabled:0===me.length(),onselect:function(){Ae(),Pe()}}),i.push({name:"copy",disabled:0===me.length(),onselect:function(){Ae()}}),i.push({name:"paste",disabled:0===fe.length,onselect:function(){jt(fe,{generateIds:!0,touchImport:!0})}}),i.push({name:"edit",disabled:1!=me.length(),onselect:function(){RED.editor.edit(o)}}),i.push({name:"select",onselect:function(){Le()}}),i.push({name:"undo",disabled:0===RED.history.depth(),onselect:function(){RED.history.pop()}}),i.push({name:"add",onselect:function(){chartPos=x.offset(),Re({position:[t[0]-chartPos.left+x.scrollLeft(),t[1]-chartPos.top+x.scrollTop()],touchTrigger:!0})}}),RED.touch.radialMenu.show(e,t,i),Ue()}function $t(o,e,t){var i,n,a,r=null;0===o.indexOf("font-awesome/")&&(i=o.substr(13),(r=RED.nodes.fontAwesome.getIconUnicode(i))||(t=RED.utils.getDefaultNodeIcon(t._def,t),o=RED.settings.apiRootUrl+"icons/"+t.module+"/"+t.file)),r?e.append("text").attr("xlink:href",o).attr("class","fa-lg").attr("x",15).text(r):(n=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,e=a.width*(t=30<e?30/e:t),t=a.height*t,n.attr("width",e),n.attr("height",t),n.attr("x",15-e/2)),n.attr("xlink:href",o),n.style("display",null)})}function _t(e,t){var o;e.z===RED.workspaces.active()&&(t=t||document.getElementById(e.id))&&(ie&&e.status&&!0!==e.d?(t.__statusGroup__.style.display="inline",o=he[e.status.fill],null==e.status.shape&&null==o?(t.__statusShape__.style.display="none",t.__statusGroup__.setAttribute("transform","translate(-14,"+(e.h+3)+")")):(t.__statusGroup__.setAttribute("transform","translate(3,"+(e.h+3)+")"),o="red-ui-flow-node-status-"+(e.status.shape||"dot")+"-"+e.status.fill,t.__statusShape__.style.display="inline",t.__statusShape__.setAttribute("class","red-ui-flow-node-status "+o)),e.status.hasOwnProperty("text")?t.__statusLabel__.textContent=e.status.text:t.__statusLabel__.textContent=""):t.__statusGroup__.style.display="none",delete e.dirtyStatus)}function kt(){RED.view.DEBUG_SYNC_REDRAW?Tt():(We&&cancelAnimationFrame(We),We=requestAnimationFrame(Tt))}function Tt(){var R,e,t,x,o,i,n;m.attr("transform","scale("+j+")"),_.attr("width",T*j).attr("height",C*j),-1!==ce||ee!=RED.state.JOINING?(R={},P?((e=s.selectAll(".red-ui-flow-subflow-port-output").data(P.out,function(e,t){return e.id})).exit().remove(),(o=e.enter().insert("svg:g").attr("class","red-ui-flow-node red-ui-flow-subflow-port-output").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",tt).on("mousedown",ot).on("touchstart",it).on("touchend",nt),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){Ve(e,ge,0)}).on("touchstart",function(e,t){Ve(e,ge,0),d3.event.preventDefault()}).on("mouseup",function(e,t){qe(e,ge,0)}).on("touchend",function(e,t){qe(e,ge,0),d3.event.preventDefault()}).on("mouseover",function(e){Ze(d3.select(this),e,ge,0)}).on("mouseout",function(e){Qe(d3.select(this))}),o.append("svg:text").attr("class","red-ui-flow-port-label").attr("x",20).attr("y",12).style("font-size","10px").text("output"),o.append("svg:text").attr("class","red-ui-flow-port-label red-ui-flow-port-index").attr("x",20).attr("y",28).text(function(e,t){return t+1}),(i=s.selectAll(".red-ui-flow-subflow-port-input").data(P.in,function(e,t){return e.id})).exit().remove(),(t=i.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",tt).on("mousedown",ot).on("touchstart",it).on("touchend",nt),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){Ve(e,ve,t)}).on("touchstart",function(e,t){Ve(e,ve,t),d3.event.preventDefault()}).on("mouseup",function(e,t){qe(e,ve,t)}).on("touchend",function(e,t){qe(e,ve,t),d3.event.preventDefault()}).on("mouseover",function(e){Ze(d3.select(this),e,ve,0)}).on("mouseout",function(e){Qe(d3.select(this))}),t.append("svg:text").attr("class","red-ui-flow-port-label").attr("x",18).attr("y",20).style("font-size","10px").text("input"),(o=s.selectAll(".red-ui-flow-subflow-port-status").data(P.status?[P.status]:[],function(e,t){return e.id})).exit().remove(),(t=o.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}),t.append("rect").attr("class","red-ui-flow-subflow-port").attr("rx",8).attr("ry",8).attr("width",40).attr("height",40).on("mouseup",tt).on("mousedown",ot).on("touchstart",it).on("touchend",nt),t.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){Ve(e,ge,0)}).on("touchstart",function(e,t){Ve(e,ge,0),d3.event.preventDefault()}).on("mouseup",function(e,t){qe(e,ge,0)}).on("touchend",function(e,t){qe(e,ge,0),d3.event.preventDefault()}).on("mouseover",function(e){Ze(d3.select(this),e,ge,0)}).on("mouseout",function(e){Qe(d3.select(this))}),t.append("svg:text").attr("class","red-ui-flow-port-label").attr("x",22).attr("y",20).style("font-size","10px").text("status"),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.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)+")"}),(R[e.id]=e).dirty=!1)}),i.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)+")"}),(R[e.id]=e).dirty=!1)}),o.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)+")"}),(R[e.id]=e).dirty=!1)})):(s.selectAll(".red-ui-flow-subflow-port-output").remove(),s.selectAll(".red-ui-flow-subflow-port-input").remove(),s.selectAll(".red-ui-flow-subflow-port-status").remove()),(i=s.selectAll(".red-ui-flow-node-group").data(A,function(e){return e.id})).exit().each(function(e,t){RED.hooks.trigger("viewRemoveNode",{node:e,el:this})}).remove(),i.enter().insert("svg:g").attr("class","red-ui-flow-node red-ui-flow-node-group").classed("red-ui-flow-subflow",null!=P).each(function(e,t){this.__outputs__=[],this.__inputs__=[];var o=d3.select(this),i=document.createDocumentFragment(),n="link in"===e.type||"link out"===e.type,n=e.hasOwnProperty("l")?!e.l:n;o.attr("id",e.id),e.h=I,e.resize=!0,e._def.button&&((a=document.createElementNS("http://www.w3.org/2000/svg","g")).__data__=e,a.setAttribute("transform","translate("+("right"==e._def.align?94:-25)+",2)"),a.setAttribute("class","red-ui-flow-node-button"),o[0][0].__buttonGroup__=a,(r=document.createElementNS("http://www.w3.org/2000/svg","rect")).__data__=e,r.setAttribute("class","red-ui-flow-node-button-background"),r.setAttribute("rx",5),r.setAttribute("ry",5),r.setAttribute("width",32),r.setAttribute("height",I-4),a.appendChild(r),o[0][0].__buttonGroupBackground__=r,(r=document.createElementNS("http://www.w3.org/2000/svg","rect")).__data__=e,r.setAttribute("class","red-ui-flow-node-button-button"),r.setAttribute("x","right"==e._def.align?11:5),r.setAttribute("y",4),r.setAttribute("rx",4),r.setAttribute("ry",4),r.setAttribute("width",16),r.setAttribute("height",I-12),r.setAttribute("fill",RED.utils.getNodeColor(e.type,e._def)),d3.select(r).on("mousedown",function(e){!te&&Dt(e)&&(Ct(),d3.select(this).attr("fill-opacity",.2),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseup",function(e){!te&&Dt(e)&&(d3.select(this).attr("fill-opacity",.4),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseover",function(e){!te&&Dt(e)&&d3.select(this).attr("fill-opacity",.4)}).on("mouseout",function(e){var t;!te&&Dt(e)&&(t=1,e._def.button.toggle&&(t=e[e._def.button.toggle]?1:.2),d3.select(this).attr("fill-opacity",t))}).on("click",Rt).on("touchstart",function(e){Rt.call(this,e),d3.event.preventDefault()}),a.appendChild(r),o[0][0].__buttonGroupButton__=r,i.appendChild(a));var a,r=document.createElementNS("http://www.w3.org/2000/svg","rect");r.__data__=e,r.setAttribute("class","red-ui-flow-node "+("unknown"==e.type?"red-ui-flow-node-unknown":"")),r.setAttribute("rx",5),r.setAttribute("ry",5),r.setAttribute("fill",RED.utils.getNodeColor(e.type,e._def)),o[0][0].__mainRect__=r,d3.select(r).on("mouseup",tt).on("mousedown",ot).on("touchstart",it).on("touchend",nt).on("mouseover",at).on("mouseout",rt),i.appendChild(r),e._def.icon&&(a=RED.utils.getNodeIcon(e._def,e),(s=document.createElementNS("http://www.w3.org/2000/svg","g")).__data__=e,s.setAttribute("class","red-ui-flow-node-icon-group"+("right"==e._def.align?" red-ui-flow-node-icon-group-right":"")),s.setAttribute("x",0),s.setAttribute("y",0),s.style["pointer-events"]="none",o[0][0].__iconGroup__=s,(r=document.createElementNS("http://www.w3.org/2000/svg","rect")).setAttribute("x",0),r.setAttribute("y",0),r.setAttribute("class","red-ui-flow-node-icon-shade"),r.setAttribute("width",30),r.setAttribute("height",Math.min(50,e.h-4)),s.appendChild(r),o[0][0].__iconShade__=r,$t(a,d3.select(s),e),(a=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)),a.setAttribute("class","red-ui-flow-node-icon-shade-border"),s.appendChild(a),o[0][0].__iconShadeBorder__=a,i.appendChild(s));var s=document.createElementNS("http://www.w3.org/2000/svg","g");s.setAttribute("class","red-ui-flow-node-label"+(n?" hide":"")+(e._def.align?" red-ui-flow-node-label-"+e._def.align:"")),s.setAttribute("transform","translate(38,0)"),i.appendChild(s),o[0][0].__textGroup__=s;n=document.createElementNS("http://www.w3.org/2000/svg","g");n.setAttribute("class","red-ui-flow-node-status-group"),n.style.display="none",o[0][0].__statusGroup__=n;s=document.createElementNS("http://www.w3.org/2000/svg","rect");s.setAttribute("class","red-ui-flow-node-status"),s.setAttribute("x",6),s.setAttribute("y",1),s.setAttribute("width",9),s.setAttribute("height",9),s.setAttribute("rx",2),s.setAttribute("ry",2),s.setAttribute("stroke-width","3"),n.appendChild(s),o[0][0].__statusShape__=s;s=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),n.appendChild(s),o[0][0].__statusLabel__=s,i.appendChild(n),o[0][0].appendChild(i),RED.hooks.trigger("viewAddNode",{node:e,el:this})}),x=!1,i.each(function(t,e){if(t._reordered&&(x=!0,delete t._reordered),t.dirty){var o=this,i=d3.select(this),n="link in"===t.type||"link out"===t.type,a=t.hasOwnProperty("l")?!t.l:n;R[t.id]=t;var r,s=RED.utils.getNodeLabel(t,t.type);if(!t.resize&&this.__hideLabel__===a&&this.__label__===s&&this.__outputs__.length===t.outputs||((p=Me(s,"red-ui-flow-node-label")).lines.length===this.__labelLineCount__&&this.__label__===s||(t.resize=!0),this.__label__=s,this.__labelLineCount__=p.lines.length,t.h=a?Math.max(I,15*(t.outputs||0)):Math.max(6+24*p.lines.length,15*(t.outputs||0),30),this.__hideLabel__=a),t.resize&&(r=t.w,t.w=a?I:Math.max(O,20*Math.ceil((p.width+50+(0<t._def.inputs?7:0))/20)),void 0!==r&&(t.x+=(t.w-r)/2),t.resize=!1),t._colorChanged&&(r=RED.utils.getNodeColor(t.type,t._def),this.__mainRect__.setAttribute("fill",r),this.__buttonGroupButton__&&this.__buttonGroupButton__.settAttribute("fill",r),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),ee!=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),p){for(var d=p.lines,l=p.lines.length,c=this.__textGroup__.childNodes;c.length>l;)c[c.length-1].remove();for(var u,e=0;e<l;e++)e===c.length&&((u=document.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("class","red-ui-flow-node-label-text"),u.setAttribute("x",0),u.setAttribute("y",24*e),this.__textGroup__.appendChild(u)),c[e].textContent=d[e]}var p="";if(t._def.labelStyle){p=t._def.labelStyle;try{p=("function"==typeof p?p.call(t):p)||""}catch(e){console.log("Definition error: "+t.type+".labelStyle",e),p=""}p=" "+p}p="red-ui-flow-node-label"+(t._def.align?" red-ui-flow-node-label-"+t._def.align:"")+p+(a?" hide":""),this.__textGroup__.setAttribute("class",p);var p=t.h/2-this.__labelLineCount__/2*24+13;!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)+","+p+")")):(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,"+p+")"));p=i.selectAll(".red-ui-flow-port-input");n&&(-1!==ce||B[t.id])||0!==t.inputs||p.empty()?(n&&(ce===ge||B[t.id])||1===t.inputs)&&p.empty()&&(b=i.append("g").attr("class","red-ui-flow-port-input"),m="link in"===t.type?b.append("circle").attr("cx",-1).attr("cy",5).attr("r",5).attr("class","red-ui-flow-port red-ui-flow-link-port"):b.append("rect").attr("class","red-ui-flow-port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10),b[0][0].__port__=m[0][0],m[0][0].__data__=this.__data__,m[0][0].__portType__=ge,m[0][0].__portIndex__=0,m.on("mousedown",function(e){Ve(e,ge,0)}).on("touchstart",function(e){Ve(e,ge,0),d3.event.preventDefault()}).on("mouseup",function(e){qe(e,ge,0)}).on("touchend",function(e){qe(e,ge,0),d3.event.preventDefault()}).on("mouseover",function(e){Ze(d3.select(this),e,ge,0)}).on("mouseout",function(e){Qe(d3.select(this))}),RED.hooks.trigger("viewAddPort",{node:t,el:this,port:b[0][0],portType:"input",portIndex:0})):p.each(function(e,t){RED.hooks.trigger("viewRemovePort",{node:e,el:o,port:d3.select(this)[0][0],portType:"input",portIndex:0})}).remove();var f=t.outputs;n&&"link out"===t.type&&(f="return"===t.mode||ce!==ve&&!B[t.id]?0:1);for(t.h;this.__outputs__.length>f;){var h=this.__outputs__.pop();RED.hooks.trigger("viewRemovePort",{node:t,el:this,port:h,portType:"output",portIndex:this.__outputs__.length}),h.remove()}for(var g,v,m,b,y=0;y<f;y++){y===this.__outputs__.length?((v=document.createElementNS("http://www.w3.org/2000/svg","g")).setAttribute("class","red-ui-flow-port-output"),"link out"===t.type?((g=document.createElementNS("http://www.w3.org/2000/svg","circle")).setAttribute("cx",11),g.setAttribute("cy",5),g.setAttribute("r",5),g.setAttribute("class","red-ui-flow-port red-ui-flow-link-port")):((g=document.createElementNS("http://www.w3.org/2000/svg","rect")).setAttribute("rx",3),g.setAttribute("ry",3),g.setAttribute("width",10),g.setAttribute("height",10),g.setAttribute("class","red-ui-flow-port")),v.appendChild(g),(v.__port__=g).__data__=this.__data__,g.__portType__=ve,g.__portIndex__=y,g.addEventListener("mousedown",st),g.addEventListener("touchstart",dt),g.addEventListener("mouseup",lt),g.addEventListener("touchend",ct),g.addEventListener("mouseover",ut),g.addEventListener("mouseout",pt),this.appendChild(v),this.__outputs__.push(v),RED.hooks.trigger("viewAddPort",{node:t,el:this,port:v,portType:"output",portIndex:y})):v=this.__outputs__[y];var w=t.w-5,E=t.h/2-(f-1)/2*13;v.setAttribute("transform","translate("+w+","+(E+13*y-5)+")")}t._def.icon&&(m=i.select(".red-ui-flow-node-icon"),b=i.select(".fa-lg"),p=(m.empty()?b:m).attr("xlink:href"),(n=RED.utils.getNodeIcon(t._def,t))!==p&&((m.empty()?b:m).remove(),$t(n,i.select(".red-ui-flow-node-icon-group"),t),m=i.select(".red-ui-flow-node-icon"),b=i.select(".fa-lg")),m.attr("y",function(){return(t.h-d3.select(this).attr("height"))/2}),this.__iconShade__.setAttribute("height",t.h),this.__iconShadeBorder__.setAttribute("d","M "+(!t._def.align&&0!==t.inputs&&0===t.outputs||"right"===t._def.align?0:30)+" 1 l 0 "+(t.h-2)),b.attr("y",(t.h+13)/2)),i.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=Dt(t),this.__buttonGroup__.classList.toggle("red-ui-flow-node-button-disabled",!i),w="right"==t._def.align?t.w-6:-25,t._def.button.toggle&&!t[t._def.button.toggle]&&(w-="right"==t._def.align?8:-8),this.__buttonGroup__.setAttribute("transform","translate("+w+",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&&_t(t,this),t.dirty=!1,t.g&&!J[t.g])for(var D=t.g;D&&!J[D];)J[D]=RED.nodes.group(D),D=J[D].g}RED.hooks.trigger("viewRedrawNode",{node:t,el:this})}),x&&i.sort(function(e,t){return e._index-t._index}),(o=a.selectAll(".red-ui-flow-link").data(M,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 o=d3.select(this),i=document.createDocumentFragment();e.added=!0;var n=document.createElementNS("http://www.w3.org/2000/svg","path");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,i.appendChild(n),d3.select(n).on("mousedown",ft).on("touchstart",ht);n=document.createElementNS("http://www.w3.org/2000/svg","path");n.__data__=e,n.setAttribute("class","red-ui-flow-link-outline red-ui-flow-link-path"),this.__pathOutline__=n,i.appendChild(n);n=document.createElementNS("http://www.w3.org/2000/svg","path");n.__data__=e,n.setAttribute("class","red-ui-flow-link-line red-ui-flow-link-path"+(e.link?" red-ui-flow-link-link":P?" red-ui-flow-subflow-link":"")),this.__pathLine__=n,i.appendChild(n),o[0][0].appendChild(i)}),o.exit().remove(),o.each(function(e){var t;d3.select(this);(e.added||e===V||e.selected||R[e.source.id]||R[e.target.id])&&(t=-((e.source.outputs||1)-1)/2*13+13*(e.sourcePort||0),e.x1=e.source.x+e.source.w/2,e.y1=e.source.y+t,e.x2=e.target.x-e.target.w/2,e.y2=e.target.y,t=Ee(e.x1,e.y1,e.x2,e.y2,1),/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&&P)),this.classList.toggle("red-ui-flow-link-selected",!(e!==V&&!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}),(i=a.selectAll(".red-ui-flow-link-off-flow").data(z,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),i=1,n="start";"link in"===o.node.type&&(i=-1,n="end");var a=30*i,r=20*i,s=(t.append("svg:path").attr("class","red-ui-flow-link-link").attr("d","M 0 0 h "+a),o.links),s=Object.keys(s),d=RED.nodes.getWorkspaceOrder();s.sort(function(e,t){return d.indexOf(e)-d.indexOf(t)});var l=I,c=-(s.length-1)*l/2,s=t.selectAll(".red-ui-flow-link-group").data(s);s.enter().append("g").attr("class","red-ui-flow-link-group").on("mouseover",function(){0===ee&&d3.select(this).classed("red-ui-flow-link-group-active",!0)}).on("mouseout",function(){0===ee&&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===ee&&(d3.event.stopPropagation(),t=o.links[e],RED.workspaces.show(e),t.forEach(function(e){e.selected=!0,e.dirty=!0,me.add(e),1===t.length&&RED.view.reveal(e.id)}),Ie(),kt())}).each(function(e){var t=d3.select(this);t.append("svg:path").attr("class","red-ui-flow-link-link").attr("d","M "+a+" 0 C "+(a+1.7*r)+" 0 "+(a+.1*r)+" "+c+" "+(a+1.5*r)+" "+c+" "),t.append("svg:path").attr("class","red-ui-flow-link-port").attr("d","M "+(a+1.5*r+17*i)+" "+(c-12)+" h "+10*-i+" a 3 3 45 0 "+(1===i?"0":"1")+" "+-3*i+" 3 v 18 a 3 3 45 0 "+(1===i?"0":"1")+" "+3*i+" 3 h "+10*i),t.append("svg:path").attr("class","red-ui-flow-link-port").attr("d","M "+(a+1.5*r+20*i)+" "+(c-12)+" h "+30*i+" M "+(a+1.5*r+20*i)+" "+(c+12)+" h "+30*i).style("stroke-dasharray","12 3 8 4 3"),t.append("rect").attr("class","red-ui-flow-port red-ui-flow-link-port").attr("x",a+1.5*r-4+4*i).attr("y",c-4).attr("rx",2).attr("ry",2).attr("width",8).attr("height",8),t.append("rect").attr("x",a+1.5*r-(-1===i?O:0)).attr("y",c-12).attr("width",O).attr("height",24).style("stroke","none").style("fill","transparent");var o,e=RED.nodes.workspace(e);e&&(o=e.label||e.id),t.append("svg:text").attr("class","red-ui-flow-port-label").attr("x",a+1.5*r+15*i).attr("y",c+1).style("font-size","10px").style("text-anchor",n).text(o),c+=l}),s.exit().remove()}),i.exit().remove(),(i=a.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=d.selectAll(".red-ui-flow-group").data(U,function(e){return e.id})).exit().each(function(e,t){document.getElementById("group_select_"+e.id).remove()}).remove(),i=o.enter().insert("svg:g").attr("class","red-ui-flow-group"),n=!1,i.each(function(e,t){n=!0;var o=d3.select(this);o.attr("id",e.id);var i=r.append("g").attr("class","red-ui-flow-group").attr("id","group_select_"+e.id);i.append("rect").classed("red-ui-flow-group-outline-select",!0).classed("red-ui-flow-group-outline-select-background",!0).attr("rx",4).attr("ry",4).attr("x",-4).attr("y",-4),i.append("rect").classed("red-ui-flow-group-outline-select",!0).attr("rx",4).attr("ry",4).attr("x",-4).attr("y",-4),i.on("mousedown",function(){vt.call(o[0][0],e)}),i.on("mouseup",function(){gt.call(o[0][0],e)}),i.on("touchstart",function(){vt.call(o[0][0],e),d3.event.preventDefault()}),i.on("touchend",function(){gt.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",vt).on("mouseup",gt),o.on("touchstart",function(){vt.call(o[0][0],e),d3.event.preventDefault()}),o.on("touchend",function(){gt.call(o[0][0],e),d3.event.preventDefault()}),o.append("svg:text").attr("class","red-ui-flow-group-label"),e.dirty=!0}),n&&o.sort(function(e,t){return e._root===t._root?e._depth-t._depth:e._index-t._index}),o[0].reverse(),o.each(function(e,t){var o,i,n,a,r,s,d,l,c,u,p;e.resize&&(e.minWidth=0,delete e.resize),(e.dirty||J[e.id])&&(o=d3.select(this),i=!1,0<e.nodes.length?e.groupMoved?delete e.groupMoved:(n=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,s=r=0,e.nodes.forEach(function(e){s="group"!==e.type?(n=Math.min(n,e.x-e.w/2-26-(e._def.button&&"right"!==e._def.align?20:0)),a=Math.min(a,e.y-e.h/2-26),r=Math.max(r,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),a=Math.min(a,e.y-26),r=Math.max(r,e.x+e.w+26),Math.max(s,e.y+e.h+26))}),e.x=n,e.y=a,e.w=r-n,e.h=s-a,!(i=!0)===e.groupMoved&&delete e.groupMoved):(e.w=40,e.h=40,i=!0),i&&(e.minWidth||(e.style.label&&e.name?(p=Me(e.name||"","red-ui-flow-group-label"),e.minWidth=p.width+8,e.labels=p.lines):(e.minWidth=40,e.labels=[])),e.w=Math.max(e.minWidth,e.w),e.style.label&&0<e.labels.length&&(l=e.style["label-position"]||"nw",c=16*(e.labels.length-1),"s"===l[0]&&(c+=8),e.h+=c,"n"===l[0]&&0<e.nodes.length&&(e.y-=c))),o.attr("transform","translate("+e.x+","+e.y+")"),o.selectAll(".red-ui-flow-group-outline").attr("width",e.w).attr("height",e.h),(p=document.getElementById("group_select_"+e.id)).setAttribute("transform","translate("+e.x+","+e.y+")"),e.hovered?p.classList.add("red-ui-flow-group-hovered"):p.classList.remove("red-ui-flow-group-hovered"),(c=p.children[0]).setAttribute("width",e.w+8),c.setAttribute("height",e.h+8),c.style.strokeOpacity=e.active||e.selected||e.highlighted?.8:0,c.style.strokeDasharray=e.active?"10 4":"",(c=p.children[1]).setAttribute("width",e.w+8),c.setAttribute("height",e.h+8),c.style.strokeOpacity=e.active||e.selected||e.highlighted?.8:0,c.style.strokeDasharray=e.active?"10 4":"",e.highlighted?p.classList.add("red-ui-flow-node-highlighted"):p.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"]:""),(d=o.selectAll(".red-ui-flow-group-label")).classed("hide",!e.style.label),e.style.label&&(p="n"===(l=e.style["label-position"]||"nw")[p=c=0]?15:e.h-5-16*(e.labels.length-1),labelAnchor="w"===l[1]?(c=5,"start"):"e"===l[1]?(c=e.w-5,"end"):(c=e.w/2,"middle"),e.style.hasOwnProperty("color")?d.style("fill",e.style.color):d.style("fill",null),d.attr("transform","translate("+c+","+p+")").attr("text-anchor",labelAnchor),e.labels?(u=0,o.selectAll(".red-ui-flow-group-label-text").remove(),e.labels.forEach(function(e){d.append("tspan").classed("red-ui-flow-group-label-text",!0).text(e).attr("x",0).attr("y",u),u+=16})):o.selectAll(".red-ui-flow-group-label-text").remove()),delete J[e.id],delete e.dirty)})):a.selectAll(".red-ui-flow-link-selected").data(M,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 Ct(){try{var e=window.parent.window.scrollX,t=window.parent.window.scrollY;x.trigger("focus"),window.parent.window.scrollTo(e,t)}catch(e){x.trigger("focus")}}function jt(e,t){var o,i,n=(t=t||{addFlow:!1,touchImport:!1,generateIds:!1}).addFlow,a=t.touchImport;if(ee!==RED.state.SELECTING_NODE){if("string"==typeof e){if(""===e)return;try{o=JSON.parse(e)}catch(e){var r=new Error(RED._("clipboard.invalidFlow",{message:e.message}));throw r.code="NODE_RED",r}}else o=e;$.isArray(o)||(o=[o]);try{P&&(i=P.changed);var s=RED.nodes.import(o,{generateIds:t.generateIds,addFlow:n,importMap:t.importMap});if(s){var d=s.nodes,l=s.links,c=s.groups,u=s.workspaces,p=s.subflows,f=s.removedNodes,h=s.missingWorkspace;n&&h&&RED.workspaces.show(h.id);var g=(g=d.filter(function(e){return e.hasOwnProperty("x")&&e.hasOwnProperty("y")&&e.z==RED.workspaces.active()})).concat(c.filter(function(e){return e.z===RED.workspaces.active()})),v=d.map(function(e){return e.changed=!0,e.id});if(Se(),me.clear(),me.add(g),0<me.length()){var m,b=(Q=null==Q?[0,0]:Q)[0],y=Q[1];0<me.length()&&(b=(m=me.get(0).n).x,y=m.y);for(var w,E=0,D=0,R=me.length(),x=0;x<R;x++)(w=me.get(x)).n.selected=!0,w.n.changed=!0,w.n.moved=!0,w.n.x-=b-Q[0],w.n.y-=y-Q[1],w.n.w=O,w.n.h=I,w.n.resize=!0,w.dx=w.n.x-Q[0],w.dy=w.n.y-Q[1],D="group"===w.n.type?(w.n.groupMoved=!1,E=Math.min(w.n.x-5,E),Math.min(w.n.y-5,D)):(E=Math.min(w.n.x-O/2-5,E),Math.min(w.n.y-I/2-5,D));for(x=0;x<R;x++)if((w=me.get(x)).n.x-=E,w.n.y-=D,w.dx-=E,w.dy-=D,w.n._def.onadd)try{w.n._def.onadd.call(w.n)}catch(e){console.log("Definition error: "+w.n.type+".onadd:",e)}a||(ee=RED.state.IMPORT_DRAGGING,N=!1,1===me.length()&&(w=me.get(0),N=w.n.hasOwnProperty("_def")&&(w.n.hasOwnProperty("inputs")&&0<w.n.inputs||!w.n.hasOwnProperty("inputs")&&0<w.n._def.inputs)&&(w.n.hasOwnProperty("outputs")&&0<w.n.outputs||!w.n.hasOwnProperty("outputs")&&0<w.n._def.outputs)))}var _,k={t:"add",nodes:v,links:l,groups:c,workspaces:u,subflows:p,dirty:RED.nodes.dirty()};0===me.length()&&RED.nodes.dirty(!0),!P||(_=RED.subflow.refresh(!0))&&(k.subflow={id:P.id,changed:i,instances:_.instances}),f&&(k={t:"multi",events:[{t:"replace",config:f},k]}),RED.history.push(k),we(),kt();var T=[],C=0,j=0;d.forEach(function(e){e.hasOwnProperty("x")&&e.hasOwnProperty("y")?C++:j++});var L,S=c.length;0<u.length&&T.push(RED._("clipboard.flow",{count:u.length})),0<C&&T.push(RED._("clipboard.node",{count:C})),0<S&&T.push(RED._("clipboard.group",{count:S})),0<j&&T.push(RED._("clipboard.configNode",{count:j})),0<p.length&&T.push(RED._("clipboard.subflow",{count:p.length})),f&&0<f.length&&T.push(RED._("clipboard.replacedNodes",{count:f.length})),0<T.length&&(L="<ul><li>"+T.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 Lt(e){if(ee!==RED.state.SELECTING_NODE){var t=RED.workspaces.selection();if(!(0<t.length)&&0<me.length()){for(var o=[],i=0;i<me.length();i++){var n=me.get(i).n;"group"!==n.type&&"subflow"!==n.type&&e!=n.d&&(o.push({t:"edit",node:n,changed:n.changed,changes:{d:n.d}}),e?n.d=!0:delete n.d,n.dirty=!0,n.dirtyStatus=!0,n.changed=!0,RED.events.emit("nodes:change",n))}0<o.length&&(RED.history.push({t:"multi",events:o,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0))}RED.view.redraw()}}function St(){var e={},t=new Set;0<me.length()&&me.forEach(function(e){"group"!==e.n.type&&t.add(e.n)});var o=U.filter(function(e){return e.selected&&!e.active});return 0<o.length&&(1===o.length&&o[0].active||o.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)),null!=V&&(e.link=V),e}return{init:function(){x=$("#red-ui-workspace-chart"),_=d3.select("#red-ui-workspace-chart").append("svg:svg").attr("width",T).attr("height",C).attr("pointer-events","all").style("cursor","crosshair").style("touch-action","none").on("mousedown",function(){Ct()}).on("contextmenu",function(){d3.event.preventDefault()}),(m=_.append("svg:g").on("dblclick.zoom",null).append("svg:g").attr("class","red-ui-workspace-chart-event-layer").on("mousemove",xe).on("mousedown",e).on("mouseup",$e).on("mouseenter",function(){te?1!==d3.event.buttons&&(te.remove(),te=null):ee===RED.state.PANNING&&4!==d3.event.buttons&&Ue()}).on("touchend",function(){d3.event.preventDefault(),clearTimeout(y),y=null,RED.touch.radialMenu.active()||$e.call(this)}).on("touchcancel",function(){RED.view.DEBUG&&console.warn("eventLayer.touchcancel",ee),d3.event.preventDefault(),$e.call(this)}).on("touchstart",function(){var e,t,o,i,n,a,r,s;RED.view.DEBUG&&console.warn("eventLayer.touchstart",ee),1<d3.event.touches.length?(clearTimeout(y),y=null,d3.event.preventDefault(),e=d3.event.touches.item(0),t=d3.event.touches.item(1),o=e.pageY-t.pageY,i=e.pageX-t.pageX,n=x.offset(),a=[x.scrollLeft(),x.scrollTop()],b=[(t.pageX+i/2-n.left+a[0])/j,(t.pageY+o/2-n.top+a[1])/j],t.pageX,t.pageY,v=Math.sqrt(o*o+i*i)):(r=d3.select(document.body),s=[(e=d3.event.touches.item(0)).pageX,e.pageY],b=[e.pageX,e.pageY],v=0,d3.touches(this)[0],y=setTimeout(function(){y=null,xt(r,s)},g)),d3.event.preventDefault()}).on("touchmove",function(){var e,t,o,i,n;RED.touch.radialMenu.active()||(RED.view.DEBUG&&console.warn("eventLayer.touchmove",ee,W),d3.event.touches.length<2?(y?(e=(o=d3.event.touches.item(0)).pageX-b[0],t=o.pageY-b[1],64<Math.abs(e*e+t*t)&&(clearTimeout(y),y=null,W||K||(ee=RED.state.PANNING,Q=[o.pageX,o.pageY],de=[x.scrollLeft(),x.scrollTop()]))):te&&d3.event.preventDefault(),xe.call(this)):(o=d3.event.touches.item(0),i=d3.event.touches.item(1),n=o.pageY-i.pageY,e=o.pageX-i.pageX,x.offset(),t=[x.scrollLeft(),x.scrollTop()],o=Math.sqrt(n*n+e*e),i=[i.pageX+e/2,i.pageY+n/2],isNaN(o)||(oldScaleFactor=j,j=Math.min(2,Math.max(.3,j+Math.floor(100*o-100*v)/1e4)),n=[b[0]*(j-oldScaleFactor),b[1]*(j-oldScaleFactor)],v=o,x.scrollLeft(t[0]+n[0]),x.scrollTop(t[1]+n[1]),kt()))),d3.event.preventDefault()})).append("svg:rect").attr("class","red-ui-workspace-chart-background").attr("width",T).attr("height",C),o=m.append("g").attr("class","red-ui-workspace-chart-grid"),t(),d=m.append("g"),r=m.append("g"),a=m.append("g"),n=m.append("g"),s=m.append("g"),k=[],RED.events.on("workspace:change",function(e){0!==e.old&&(w[e.old]={left:x.scrollLeft(),top:x.scrollTop()});var t=x.scrollLeft(),o=x.scrollTop();P=RED.nodes.subflow(e.workspace),RED.menu.setDisabled("menu-item-workspace-edit",P||0===e.workspace),RED.menu.setDisabled("menu-item-workspace-delete",0===e.workspace||1==RED.workspaces.count()||P),w[e.workspace]?(x.scrollLeft(w[e.workspace].left),x.scrollTop(w[e.workspace].top)):(x.scrollLeft(0),x.scrollTop(0));t=x.scrollLeft()-t,o=x.scrollTop()-o;null!=Q&&(Q[0]+=t,Q[1]+=o),0===RED.workspaces.selection().length&&Se(),RED.nodes.eachNode(function(e){e.dirty=!0,e.dirtyStatus=!0}),Ie(),we(),kt()}),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",ke),RED.popover.tooltip($("#red-ui-view-zoom-out"),RED._("actions.zoom-out"),"core:zoom-out"),$("#red-ui-view-zoom-zero").on("click",Te),RED.popover.tooltip($("#red-ui-view-zoom-zero"),RED._("actions.zoom-reset"),"core:zoom-reset"),$("#red-ui-view-zoom-in").on("click",_e),RED.popover.tooltip($("#red-ui-view-zoom-in"),RED._("actions.zoom-in"),"core:zoom-in"),x.on("DOMMouseScroll mousewheel",function(e){e.altKey&&(e.preventDefault(),e.stopPropagation(),((-e.originalEvent.detail||e.originalEvent.wheelDelta)<=0?ke:_e)())}),x.droppable({accept:".red-ui-palette-node",drop:function(e,t){d3.event=e;var o,i,n,a=De($(t.draggable[0]).attr("data-palette-type"));a&&(o=a.historyEvent,i=a.node,void 0===(n=RED.utils.getMessageProperty(RED.settings.get("editor"),"view.view-node-show-label"))||i._def.hasOwnProperty("showLabel")&&!i._def.showLabel||i._def.defaults.hasOwnProperty("l")||(i.l=n),e=d3.touches(t.helper.get(0))[0]||d3.mouse(t.helper.get(0)),(a=d3.touches(this)[0]||d3.mouse(this))[1]+=this.scrollTop+(i.h/2-e[1]),a[0]+=this.scrollLeft+(i.w/2-e[0]),a[1]/=j,a[0]/=j,S&&(a[0]=L*Math.ceil(a[0]/L),a[1]=L*Math.ceil(a[1]/L)),i.x=a[0],i.y=a[1],(n=$(t.helper).data("splice"))&&(RED.nodes.removeLink(n),e={source:n.source,sourcePort:n.sourcePort,target:i},a={source:i,sourcePort:0,target:n.target},RED.nodes.addLink(e),RED.nodes.addLink(a),o.links=[e,a],o.removedLinks=[n]),RED.nodes.add(i),(t=$(t.helper).data("group"))&&(RED.group.addToGroup(t,i),(o={t:"multi",events:[o]}).events.push({t:"addToGroup",group:t,nodes:i})),RED.history.push(o),RED.editor.validateNode(i),RED.nodes.dirty(!0),yt(),Se(),i.selected=!0,me.add(i),t&&(mt(t,!1),bt(t),G=t),we(),Ie(),kt(),i._def.autoedit&&RED.editor.edit(i))}}),x.on("focus",function(){$("#red-ui-workspace-tabs").addClass("red-ui-workspace-focussed")}),x.on("blur",function(){$("#red-ui-workspace-tabs").removeClass("red-ui-workspace-focussed")}),RED.actions.add("core:copy-selection-to-internal-clipboard",Ae),RED.actions.add("core:cut-selection-to-internal-clipboard",function(){Ae(),Pe()}),RED.actions.add("core:paste-from-internal-clipboard",function(){jt(fe,{generateIds:!0})}),RED.events.on("view:selection-changed",function(e){var t=e.nodes&&0<e.nodes.length,e=t&&1<e.nodes.length;RED.menu.setDisabled("menu-item-edit-cut",!t),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",!t),RED.menu.setDisabled("menu-item-view-tools-move-to-front",!t),RED.menu.setDisabled("menu-item-view-tools-move-backwards",!t),RED.menu.setDisabled("menu-item-view-tools-move-forwards",!t),RED.menu.setDisabled("menu-item-view-tools-align-left",!e),RED.menu.setDisabled("menu-item-view-tools-align-center",!e),RED.menu.setDisabled("menu-item-view-tools-align-right",!e),RED.menu.setDisabled("menu-item-view-tools-align-top",!e),RED.menu.setDisabled("menu-item-view-tools-align-middle",!e),RED.menu.setDisabled("menu-item-view-tools-align-bottom",!e),RED.menu.setDisabled("menu-item-view-tools-distribute-horizontally",!e),RED.menu.setDisabled("menu-item-view-tools-distribute-veritcally",!e)}),RED.actions.add("core:delete-selection",Pe),RED.actions.add("core:edit-selected-node",Ne),RED.actions.add("core:go-to-selection",function(){var e;0<me.length()&&(e=me.get(0).n,/^subflow:/.test(e.type)?RED.workspaces.show(e.type.substring(8)):"group"===e.type&&(bt(e),kt()))}),RED.actions.add("core:undo",RED.history.pop),RED.actions.add("core:redo",RED.history.redo),RED.actions.add("core:select-all-nodes",Le),RED.actions.add("core:select-none",je),RED.actions.add("core:zoom-in",_e),RED.actions.add("core:zoom-out",ke),RED.actions.add("core:zoom-reset",Te),RED.actions.add("core:enable-selected-nodes",function(){Lt(!1)}),RED.actions.add("core:disable-selected-nodes",function(){Lt(!0)}),RED.actions.add("core:toggle-show-grid",function(e){void 0===e?RED.userSettings.toggle("view-show-grid"):e?o.style("visibility","visible"):o.style("visibility","hidden")}),RED.actions.add("core:toggle-snap-grid",function(e){void 0===e?RED.userSettings.toggle("view-snap-grid"):(S=e,kt())}),RED.actions.add("core:toggle-status",function(e){void 0===e?RED.userSettings.toggle("view-node-status"):(ie=e,RED.nodes.eachNode(function(e){e.dirtyStatus=!0,e.dirty=!0}),kt())}),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}})},state:function(e){if(null==e)return ee;ee=e},updateActive:we,redraw:function(e,t){e&&(we(),Ie()),(t?Tt:kt)()},focus:Ct,importNodes:jt,calculateTextWidth:function(e,t){for(var o=Fe(e),i=0,n=0;n<o.length;n++){var a=Ge(o[n],t)[0];i<a&&(i=a)}return i},select:function(e){var t;void 0!==e&&(Se(),"string"==typeof e?(t=RED.nodes.node(e))&&(t.selected=!0,t.dirty=!0,me.clear(),me.add(t)):e&&e.nodes&&(we(),me.clear(),e.nodes.forEach(function(e){"group"!==e.type?(e.selected=!0,e.dirty=!0,me.add(e)):mt(e,!0)}))),Ie(),kt()},selection:St,scale:function(){return j},getLinksAtPoint:function(e,t){for(var o=[],i=_.selectAll(".red-ui-flow-link-background")[0],n=0;n<i.length;n++){var a=i[n].getBBox();e>=a.x&&t>=a.y&&e<=a.x+a.width&&t<=a.y+a.height&&o.push(i[n])}return o},getGroupAtPoint:Et,getActiveGroup:function(){return G},reveal:function(e,t){var o,i,n,a,r,s;RED.nodes.workspace(e)||RED.nodes.subflow(e)?RED.workspaces.show(e):(o=RED.nodes.node(e)||RED.nodes.group(e))&&(!o.z||"group"!==o.type&&"config"===o._def.category?"config"===o._def.category&&RED.sidebar.config.show(e):(o.dirty=!0,RED.workspaces.show(o.z),a=[x.width()/j,x.height()/j],i=[x.scrollLeft()/j,x.scrollTop()/j],n=o.x,e=o.y,"group"===o.type&&(n+=o.w/2,e+=o.h/2),(n<i[0]||e<i[1]||a[0]+i[0]<n||a[1]+i[1]<e)&&(n="-="+(i[0]-n+a[0]/2)*j,a="-="+(i[1]-e+a[1]/2)*j,x.animate({scrollLeft:n,scrollTop:a},200)),!1!==t&&(o.highlighted=!0,o._flashing||(o._flashing=!0,r=22,(s=function(){r--,o.dirty=!0,0<=r?(o.highlighted=!o.highlighted,setTimeout(s,100)):(o.highlighted=!1,delete o._flashing),RED.view.redraw()})()))))},gridSize:function(e){if(void 0===e)return L;L=Math.max(5,e),t()},getActiveNodes:function(){return A},getSubflowPorts:function(){var o=[];return P&&(s.selectAll(".red-ui-flow-subflow-port-output").data(P.out,function(e,t){return e.id}).each(function(e,t){o.push(e)}),s.selectAll(".red-ui-flow-subflow-port-input").data(P.in,function(e,t){return e.id}).each(function(e,t){o.push(e)}),s.selectAll(".red-ui-flow-subflow-port-status").data(P.status?[P.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"),ee=RED.state.SELECTING_NODE,Se(),e.selected&&e.selected.forEach(function(e){e=RED.nodes.node(e);e&&(e.selected=!0,e.dirty=!0,me.add(e))}),kt();function t(){Se(),$("#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"),Ue(),o.close()}(u=e||{}).done=function(e){t(),u.onselect&&u.onselect(e)};e=[{text:RED._("common.label.cancel"),click:function(e){t(),u.oncancel&&u.oncancel()}}];u.single||e.push({text:RED._("common.label.done"),class:"primary",click:function(e){var t=me.nodes();u.done(t)}});var o=RED.notify(u.prompt||RED._("workspace.selectNodes"),{modal:!1,fixed:!0,type:"compact",buttons:e})},scroll:function(e,t){x.scrollLeft(x.scrollLeft()+e),x.scrollTop(x.scrollTop()+t)},clickNodeButton:function(e){e._def.button&&Rt(e)},clipboard:function(){return fe},redrawStatus:_t,showQuickAddDialog:Re,calculateNodeDimensions:function(t){var e=[O,I];try{var o="link in"===t.type||"link out"===t.type,i=t.hasOwnProperty("l")?!t.l:o,n=Me(RED.utils.getNodeLabel(t,t.type),"red-ui-flow-node-label");e[1]=i?Math.max(I,15*(t.outputs||0)):Math.max(6+24*n.lines.length,15*(t.outputs||0),30),e[0]=i?I:Math.max(O,20*Math.ceil((n.width+50+(0<t._def.inputs?7:0))/20))}catch(e){console.log("Error",t)}return e},getElementPosition:Xe,showTooltip:Ye}}(),RED.view.annotations=function(){var s,d,c={};function u(e,t){var o=c[e];t.el.__annotations__=t.el.__annotations__||[];var i=document.createElementNS("http://www.w3.org/2000/svg","g");i.setAttribute("class",o.class||""),t.el.__annotations__.push({id:e,element:i});var n,a,r,e=o.element(t.node);o.tooltip&&(e.addEventListener("mouseenter",(n=e,a=t.node,r=o.tooltip,function(){var o="function"==typeof r?r(a):r;o&&(clearTimeout(s),s=setTimeout(function(){var e=RED.view.getElementPosition(n),t=n.getBoundingClientRect();s=null,d=RED.view.showTooltip(e[0]+t.width/2,e[1],o,"top")},500))})),e.addEventListener("mouseleave",l)),i.appendChild(e),t.el.appendChild(i)}function l(){clearTimeout(s),d&&(d.remove(),d=null)}return{init:function(){RED.hooks.add("viewRedrawNode.annotations",function(e){try{e.node.__pendingAnnotation__&&(u(e.node.__pendingAnnotation__,e),delete e.node.__pendingAnnotation__);for(var t=0,o=0,i=0,n=e.el.__annotations__.length;i<n;i++){var a,r,s,d,l=e.el.__annotations__[i];c.hasOwnProperty(l.id)?(a=c[l.id],r=!0,s="badge"===a.type,void 0!==a.show&&(r="string"==typeof a.show?!!e.node[a.show]:"function"==typeof a.show?a.show(e.node):!!a.show,l.element.classList.toggle("hide",!r)),s?r&&(t+=(d=l.element.getBoundingClientRect()).width,l.element.setAttribute("transform","translate("+(e.node.w-3-t)+", -8)"),t+=4):r&&(d=l.element.getBoundingClientRect(),l.element.setAttribute("transform","translate("+(3+o)+", -12)"),o+=d.width+4)):(l.element.parentNode.removeChild(l.element),e.el.__annotations__.splice(i,1),i--,n--)}}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,i,n,a,r,s,d,l=25,c=5e3/l,u=5e3/l,p=!1;function f(){var e;p&&((e=i.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(),r=[$("#red-ui-workspace-chart").width(),$("#red-ui-workspace-chart").height()],n=[$("#red-ui-workspace-chart").scrollLeft(),$("#red-ui-workspace-chart").scrollTop()],o.attr("x",n[0]/l).attr("y",n[1]/l).attr("width",r[0]/l/a).attr("height",r[1]/l/a))}function v(){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",v),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(),r=[$("#red-ui-workspace-chart").width(),$("#red-ui-workspace-chart").height()],s=[r[0]/l/a,r[1]/l/a];var e=Math.max(0,Math.min(d3.event.offsetX+s[0]/2,c)-s[0]),t=Math.max(0,Math.min(d3.event.offsetY+s[1]/2,u)-s[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?(e=Math.max(0,Math.min(d3.event.offsetX+s[0]/2,c)-s[0]),t=Math.max(0,Math.min(d3.event.offsetY+s[1]/2,u)-s[1]),o.attr("x",e).attr("y",t),$("#red-ui-workspace-chart").scrollLeft(e*l*a),$("#red-ui-workspace-chart").scrollTop(t*l*a)):d=!1)}).on("mouseup",function(){d=!1}),o=t.append("rect").attr("class","red-ui-navigator-border"),i=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(),v()}),RED.popover.tooltip($("#red-ui-view-navigate"),RED._("actions.toggle-navigator"),"core:toggle-navigator")},refresh:f,resize:g,toggle:v}}(),RED.view.tools=function(){function e(o){var e=RED.view.selection(),i=new Set;e.nodes&&0<e.nodes.length&&(e.nodes.forEach(function(e){var t;i.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){i.add(e)}))}),RED.view.select({nodes:Array.from(i)}))}function t(){var i,e=RED.view.selection();e.nodes&&(i=[],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||(i.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<i.length&&(RED.history.push({t:"move",nodes:i,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0)))}var d=null,l=!1;function c(){if(l=!1,0<d.length){for(var e=[],t=0;t<d.length;t++)e.push({n:d[t].n,ox:d[t].ox,oy:d[t].oy,moved:d[t].moved}),d[t].n.moved=!0,d[t].n.dirty=!0,delete d[t].ox,delete d[t].oy;RED.view.redraw(),RED.history.push({t:"move",nodes:e,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),d=null}}function o(e,t){if(null===d){d=[];var o=RED.view.selection();if(o.nodes)for(;0<o.nodes.length;){var i=o.nodes.shift();d.push({n:i}),"group"===i.type&&(o.nodes=o.nodes.concat(i.nodes))}}if(d&&0<d.length){l||($(document).one("keyup",c),l=!0);for(var n,a=0,r=0,s=0;s<d.length;s++)null==(n=d[s]).ox&&null==n.oy&&(n.ox=n.n.x,n.oy=n.n.y,n.moved=n.n.moved),n.n.moved=!0,n.n.dirty=!0,n.n.x+=e,n.n.y+=t,n.n.dirty=!0,r="group"===n.n.type?(RED.group.markDirty(n.n),a=Math.min(n.n.x-5,a),Math.min(n.n.y-5,r)):(a=Math.min(n.n.x-n.n.w/2-5,a),Math.min(n.n.y-n.n.h/2-5,r));if(0!==a||0!==r)for(i=0;i<d.length;i++)(n=d[i]).n.x-=a,n.n.y-=r;RED.view.redraw()}else RED.view.scroll(10*e,10*t)}function i(n){var 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,i=!e._def.hasOwnProperty("showLabel")||e._def.showLabel;n?!1!==e.l&&(i||e.hasOwnProperty("l"))||(t=e.l=!0):(!i||e.hasOwnProperty("l")&&!0!==e.l)&&(i||!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 n(){var i={x:0,y:0},e=RED.view.getActiveGroup();e?(candidates=RED.group.getNodes(e,!1),i=e):candidates=RED.view.getActiveNodes();var n=[];candidates.forEach(function(e){var t=e.x-i.x,o=e.y-i.x;n.push({node:e,delta:o*o+t*t})}),0<n.length&&(n.sort(function(e,t){return e.delta-t.delta}),(e=n[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 r(e){return RED.nodes.filterLinks({target:e}).map(function(e){return e.source})}function s(e){var t=new Set;return r(e).forEach(function(e){a(e).forEach(function(e){t.add(e)})}),a(e).forEach(function(e){r(e).forEach(function(e){t.add(e)})}),t.delete(e),Array.from(t)}function u(r){var s,e,d,t,o=RED.view.selection();o.nodes&&1===o.nodes.length?(s=o.nodes[0],e=(e=RED.nodes.filterNodes({z:s.z})).concat(RED.view.getSubflowPorts()),d=[],e.forEach(function(e){if(e!==s){var t,o=e.x-s.x,i=e.y-s.y,n=i*i+o*o,a=180/Math.PI*Math.atan2(i,o);switch(a<0&&(a+=360),360<a&&(a-=360),r){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:n,w:t,delta:n*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 p(s){var d,l,e=RED.view.selection();e.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,i,n,a,r="group"===e.type;switch(s){case"top":t=e.x,o=l.minY+(r?0:e.h/2);break;case"bottom":t=e.x,o=l.maxY-(r?e.h:e.h/2);break;case"left":t=l.minX+(r?0:e.w/2),o=e.y;break;case"right":t=l.maxX-(r?e.w:e.w/2),o=e.y;break;case"middle":t=e.x,o=l.midY-(r?e.h/2:0);break;case"center":t=l.midX-(r?e.w/2:0),o=e.y}e.x===t&&e.y===o||(r?(i=RED.group.getNodes(e,!0),n=e.x-t,a=e.y-o,i.forEach(function(e){"group"!==e.type&&(d.push({n:e,ox:e.x,oy:e.y,moved:e.moved}),e.x=e.x-n,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 f(i){var e=RED.view.selection();if(e.nodes&&2<e.nodes.length){var t=[],n={minX:Number.MAX_SAFE_INTEGER,minY:Number.MAX_SAFE_INTEGER,maxX:Number.MIN_SAFE_INTEGER,maxY:Number.MIN_SAFE_INTEGER},a=[],r=[];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"===i?(t<n.minX&&(a=[],n.minX=t),t===n.minX&&a.push(e),t>n.maxX&&(r=[],n.maxX=t),t===n.maxX&&r.push(e)):(o<n.minY&&(a=[],n.minY=o),o===n.minY&&a.push(e),o>n.maxY&&(r=[],n.maxY=o),o===n.maxY&&r.push(e))});var o=a[0],s=r[0],d=0,l=e.nodes.filter(function(e){return e.id!==o.id&&e.id!==s.id&&(d+="h"===i?e.w:e.h,!0)}).sort(function(e,t){return"h"===i?e.x-t.x:e.y-t.y}),c=o.x+o.w/2,u=o.y+o.h/2;"group"===o.type&&(c=o.x+o.w,u=o.y+o.h);var p=s.x,e=s.y;"group"!==s.type&&(p-=s.w/2,e-=s.h/2);for(var f=("h"===i?p-c-d:e-u-d)/(l.length+1),h=c,g=u;0<l.length;){"h"===i?h+=f:g+=f;var v,m,b,y=l.shift(),w="group"===y.type,E=y.x,D=y.y;w||(h+=y.w/2,g+=y.h/2),("h"===i&&E!==h||"v"===i&&D!==g)&&(w?(v=RED.group.getNodes(y,!0),m="h"===i?E-h:0,b="v"===i?D-g:0,v.forEach(function(e){"group"!==e.type&&(t.push({n:e,ox:e.x,oy:e.y,moved:e.moved}),e.x=e.x-m,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"===i?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,i,n=RED.view.selection();n.nodes&&(t=[],n.nodes.forEach(function(e){"group"===e.type?t=t.concat(RED.group.getNodes(e,!0).filter(function(e){return"group"!==e.type})):"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&&(i=RED.nodes.getNodeOrder(o),RED.history.push({t:"reorder",nodes:{z:o,from:n,to:i},dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),RED.view.redraw(!0))))}return{init:function(){RED.actions.add("core:show-selected-node-labels",function(){i(!0)}),RED.actions.add("core:hide-selected-node-labels",function(){i(!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(){e("all")}),RED.actions.add("core:select-downstream-nodes",function(){e("down")}),RED.actions.add("core:select-upstream-nodes",function(){e("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&&n()}),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&&n()}),RED.actions.add("core:go-to-next-sibling",function(){var o,e;(e=RED.view.selection()).nodes&&1===e.nodes.length?0<(e=s(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&&n()}),RED.actions.add("core:go-to-previous-sibling",function(){var o,e;(e=RED.view.selection()).nodes&&1===e.nodes.length?0<(e=s(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&&n()}),RED.actions.add("core:go-to-nearest-node-on-left",function(){u("left")}),RED.actions.add("core:go-to-nearest-node-on-right",function(){u("right")}),RED.actions.add("core:go-to-nearest-node-above",function(){u("up")}),RED.actions.add("core:go-to-nearest-node-below",function(){u("down")}),RED.actions.add("core:align-selection-to-grid",t),RED.actions.add("core:align-selection-to-left",function(){p("left")}),RED.actions.add("core:align-selection-to-right",function(){p("right")}),RED.actions.add("core:align-selection-to-top",function(){p("top")}),RED.actions.add("core:align-selection-to-bottom",function(){p("bottom")}),RED.actions.add("core:align-selection-to-middle",function(){p("middle")}),RED.actions.add("core:align-selection-to-center",function(){p("center")}),RED.actions.add("core:distribute-selection-horizontally",function(){f("h")}),RED.actions.add("core:distribute-selection-vertically",function(){f("v")})},alignSelectionToGrid:t,moveSelection:o}}(),RED.sidebar=function(){var a,r={};var n={};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 s(e){(e=":first"===e?RED.settings.get("editor.sidebar.order",["info","help","version-control","debug"])[0]:e)&&(!o(e)&&r[e]&&a.addTab(r[e]),a.activateTab(e),RED.menu.isSelected("menu-item-sidebar")||RED.menu.setSelected("menu-item-sidebar",!0))}function o(e){return a.contains(e)}return n.dragging=!1,{init:function(){!function(){$("#red-ui-sidebar-separator").draggable({axis:"x",start:function(e,t){n.closing=!1,n.opening=!1;var o=$("#red-ui-editor").width();n.start=t.position.left,n.chartWidth=$("#red-ui-workspace").width(),n.chartRight=o-$("#red-ui-workspace").width()-$("#red-ui-workspace").offset().left-2,n.dragging=!0,RED.menu.isSelected("menu-item-sidebar")||(n.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")),n.width=$("#red-ui-sidebar").width()},drag:function(e,t){var o=t.position.left-n.start,i=n.width-o;n.opening&&(i-=3),150<i&&n.chartWidth+o<200&&(t.position.left=200+n.start-n.chartWidth,o=t.position.left-n.start,i=n.width-o),i<150?(n.closing||($("#red-ui-sidebar").addClass("closing"),n.closing=!0),n.opening||(t.position.left=n.width-((i=150)-n.start),o=t.position.left-n.start)):150<i&&(n.closing||n.opening)&&(n.closing=!1,$("#red-ui-sidebar").removeClass("closing"));o=n.chartRight-o;$("#red-ui-workspace").css("right",o),$("#red-ui-editor-stack").css("right",1+o),$("#red-ui-sidebar").width(i),a.resize(),RED.events.emit("sidebar:resize")},stop:function(e,t){n.dragging=!1,n.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")}});var e=$('<div class="red-ui-sidebar-control-right"><i class="fa fa-chevron-right"</div>').appendTo($("#red-ui-sidebar-separator"));e.on("click",function(){e.hide(),RED.menu.toggleSelected("menu-item-sidebar")}),$("#red-ui-sidebar-separator").on("mouseenter",function(){n.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(){n.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()},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"),s(),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,i){var n;"string"==typeof e?n={id:t.id,label:e,name:e,content:t,closeable:o,visible:i}:"object"==typeof e&&(n=e),delete n.closeable,n.wrapper=$("<div>",{style:"height:100%"}).appendTo("#red-ui-sidebar-content"),n.wrapper.append(n.content),n.wrapper.hide(),n.enableOnEdit||(n.shade=$("<div>",{class:"red-ui-sidebar-shade hide"}).appendTo(n.wrapper)),n.toolbar&&($("#red-ui-sidebar-footer").append(n.toolbar),$(n.toolbar).hide()),n.id,RED.menu.addItem("menu-item-view-menu",{id:"menu-item-view-menu-"+n.id,label:n.name,onselect:function(){s(n.id)},group:"sidebar-tabs"}),n.iconClass=n.iconClass||"fa fa-square-o",!1!==(r[n.id]=n).visible&&a.addTab(r[n.id])},removeTab:function(e){a.removeTab(e),$(r[e].wrapper).remove(),r[e].footer&&r[e].footer.remove(),delete r[e],RED.menu.removeItem("menu-item-view-menu-"+e)},show:s,containsTab:o,toggleSidebar:t}}(),RED.palette=function(){var i,E=["config","unknown","deprecated"],D=["subflows","common","function","network","input","output","sequence","parser","storage","analysis","social","advanced"],R={};function x(e,t,o,i){0===$("#red-ui-palette-base-category-"+t).length&&n(e,t,i+":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 n(e,t,o){var o=((o=RED._(o,{defaultValue:t}))||t).replace(/_/g," "),i=$('<div id="red-ui-palette-container-'+t+'" class="red-ui-palette-category hide"><div id="red-ui-palette-header-'+t+'" class="red-ui-palette-header"><i class="expanded fa fa-angle-down"></i><span>'+o+'</span></div><div class="red-ui-palette-content" id="red-ui-palette-base-category-'+t+'"><div id="red-ui-palette-'+t+'"></div><div id="red-ui-palette-'+t+'-input"></div><div id="red-ui-palette-'+t+'-output"></div><div id="red-ui-palette-'+t+'-function"></div></div></div>').appendTo("#red-ui-palette-container");i.data("category",e),i.data("label",o),R[t]={container:i,close:function(){i.removeClass("red-ui-palette-open"),i.addClass("red-ui-palette-closed"),$("#red-ui-palette-base-category-"+t).slideUp(),$("#red-ui-palette-header-"+t+" i").removeClass("expanded")},open:function(){i.addClass("red-ui-palette-open"),i.removeClass("red-ui-palette-closed"),$("#red-ui-palette-base-category-"+t).slideDown(),$("#red-ui-palette-header-"+t+" i").addClass("expanded")},toggle:function(){i.hasClass("red-ui-palette-open")?R[t].close():R[t].open()}},$("#red-ui-palette-header-"+t).on("click",function(e){R[t].toggle()})}function _(t,e,o,i){e.attr("data-palette-label",o);for(var n=(o=RED.utils.sanitize(o)).split(/([ -]|\\n )/),a=[],r="",s=0;s<n.length;s++){var d=n[s];if("\\n "!==d){var l=0==s?"":" ";if(RED.view.calculateTextWidth(r+l+d,"red-ui-palette-label")<82)r+=l+d;else for(0<s&&a.push(r);;){if(!(82<=RED.view.calculateTextWidth(d,"red-ui-palette-label"))){r=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}}}}else a.push(r),r=""}a.push(r);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="<p><b>"+RED.text.bidi.enforceTextDirectionWithUCC(o)+"</b></p>";(h=$("<div></div>").append($(g+(i||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()});var v,m,b=RED.nodes.getType(t);b&&(v="",b&&!/^subflow:/.test(t)&&(v=b.set.module+" : "),v+=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),m=t.replace(/'/g,"\\'"),$('<button type="button" onclick="RED.search.show(\'type:'+m+'\'); 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(v).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 k(e){return $(".red-ui-palette-node[data-palette-type='"+e+"']")}function T(e){return e.replace(/[ /.]/g,"_")}function a(o,i){if(!k(o).length){var e=i.category;if(-1===E.indexOf(e)){var t,n,a,r=T(e),s=r.split("-")[0],d=$("<div>",{class:"red-ui-palette-node"}).attr("data-palette-type",o).data("category",s),l=o;if(void 0!==i.paletteLabel)try{l=("function"==typeof i.paletteLabel?i.paletteLabel.call(i):i.paletteLabel)||""}catch(e){console.log("Definition error: "+o+".paletteLabel",e)}$("<div/>",{class:"red-ui-palette-label"+(!i.align&&0!==i.inputs&&0===i.outputs||"right"===i.align?" red-ui-palette-label-right":"")}).appendTo(d),i.icon&&(t=RED.utils.getNodeIcon(i),(n=$("<div/>",{class:"red-ui-palette-icon-container"+(!i.align&&0!==i.inputs&&0===i.outputs||"right"===i.align?" red-ui-palette-icon-container-right":"")}).appendTo(d)).attr("data-palette-icon",t),RED.utils.createIconElement(t,n,!0)),d.css("backgroundColor",RED.utils.getNodeColor(o,i)),0<i.outputs&&((a=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-output",d.append(a)),0<i.inputs&&((a=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-input",d.append(a)),x(e,s,r,-1!==D.indexOf(s)?"node-red":i.set.id),$("#red-ui-palette-"+r).append(d),d.on("mousedown",function(e){e.preventDefault()});e=RED.popover.create({target:d,trigger:"hover",interactive:!0,width:"300px",content:"hi",delay:{show:750,hide:50}});d.data("popover",e);var p,f,h,g,c,u,v,m,b,y=$("#red-ui-workspace-chart"),w=$("#red-ui-workspace-chart>svg").get(0);$(d).draggable({helper:"clone",appendTo:"#red-ui-editor",revert:"invalid",revertDuration:200,containment:"#red-ui-main-container",start:function(){m=$("#red-ui-palette").width(),b=$("#red-ui-palette").parent().position().top+$("#red-ui-palette-container").position().top,v=null,(u=RED.view.getActiveGroup())&&document.getElementById("group_select_"+u.id).classList.add("red-ui-flow-group-active-hovered"),RED.view.focus()},stop:function(){d3.select(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),v&&document.getElementById("group_select_"+v.id).classList.remove("red-ui-flow-group-hovered"),u&&document.getElementById("group_select_"+u.id).classList.remove("red-ui-flow-group-active-hovered"),g&&(clearTimeout(g),g=null),c&&(clearTimeout(c),c=null)},drag:function(e,u){var t=k(o);u.originalPosition.left=t.offset().left,f=u.position.left-m+u.helper.width()/2+y.scrollLeft(),h=u.position.top-b+u.helper.height()/2+y.scrollTop()+10,c=c||setTimeout(function(){var e=f/RED.view.scale(),t=h/RED.view.scale(),t=RED.view.getGroupAtPoint(e,t);t!==v&&(v&&document.getElementById("group_select_"+v.id).classList.remove("red-ui-flow-group-hovered"),t&&document.getElementById("group_select_"+t.id).classList.add("red-ui-flow-group-hovered"),(v=t)?$(u.helper).data("group",v):$(u.helper).removeData("group")),c=null},200),0<i.inputs&&0<i.outputs&&(g=g||setTimeout(function(){for(var e,t=[],o=1/0,i=null,t=w.getIntersectionList?((e=w.createSVGRect()).x=f,e.y=h,e.width=1,e.height=1,w.getIntersectionList(e,w)):RED.view.getLinksAtPoint(f,h),n=f/RED.view.scale(),a=h/RED.view.scale(),r=0;r<t.length;r++){var s=d3.select(t[r]);if(s.classed("red-ui-flow-link-background")&&!s.classed("red-ui-flow-link-link"))for(var d=t[r].getTotalLength(),l=0;l<d;l+=10){var c=t[r].getPointAtLength(l),c=(c.x-n)*(c.x-n)+(c.y-a)*(c.y-a);c<200&&c<o&&(o=c,i=t[r])}}p&&p!==i&&d3.select(p.parentNode).classed("red-ui-flow-link-splice",!1),i?d3.select(i.parentNode).classed("red-ui-flow-link-splice",!0):d3.select(".red-ui-flow-link-splice").classed("red-ui-flow-link-splice",!1),p!==i&&(i?$(u.helper).data("splice",d3.select(i).data()[0]):$(u.helper).removeData("splice")),p=i,g=null},200))}});var r=null;0===o.indexOf("subflow:")&&(d.on("dblclick",function(e){RED.workspaces.show(o.substring(8)),e.preventDefault()}),e=RED.nodes.subflow(o.substring(8)),r=RED.utils.renderMarkdown(e.info||"")),_(o,d,l,r),1===$("#red-ui-palette-container-"+s).find(".red-ui-palette-node").length&&R[s].open()}}}function r(e){var t=k(e),e=t.closest(".red-ui-palette-category");t.remove(),0===e.find(".red-ui-palette-node").length&&e.find("i").hasClass("expanded")&&(e.find(".red-ui-palette-content").slideToggle(),e.find("i").toggleClass("expanded"))}function s(e){e=k(e);e.hide();for(var e=e.closest(".red-ui-palette-category"),t=e.find(".red-ui-palette-node"),o=0,i=0;i<t.length;i++)"none"===$(t[i]).css("display")&&(o+=1);o===t.length&&e.hide()}function d(e){e=k(e);e.closest(".red-ui-palette-category").show(),e.show()}function l(e){var t=k("subflow:"+e.id),o=t.find(".red-ui-palette-port-input"),i=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?((n=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-input",t.append(n)):0!==o.length&&0===e.in.length&&o.remove(),0===i.length&&0<e.out.length?((a=document.createElement("div")).className="red-ui-palette-port red-ui-palette-port-output",t.append(a)):0!==i.length&&0===e.out.length&&i.remove();var n=t.attr("data-palette-label"),o=t.attr("data-palette-info");n===e.name&&o===e.info||(t.attr("data-palette-info",e.info),_(e.type+":"+e.id,t,e.name,RED.utils.renderMarkdown(e.info||""))),a=t,i=e,i=RED.utils.getNodeIcon(i._def),(a=a.find(".red-ui-palette-icon-container")).attr("data-palette-icon")!==i&&(a.attr("data-palette-icon",i),RED.utils.createIconElement(i,a,!0));var a,n=t.data("category"),o=e.category||"subflows";n!==o&&(x(o,i=T(o),i,"node-red"),a=t.closest(".red-ui-palette-category"),(n=$("#red-ui-palette-"+i)).append(t),1===n.find(".red-ui-palette-node").length&&R[i].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"))),t.css("backgroundColor",e.color)}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("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){r(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++){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("registry:node-set-removed",function(e){if(e.added)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("subflows:change",l),$("#red-ui-palette-search input").searchBox({delay:100,change:function(){!function(i){var e,n=new RegExp(i.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");""===i||n.test(t)||n.test(o)?$(this).show():$(this).hide()}),R)R.hasOwnProperty(e)&&(0===R[e].container.find(".red-ui-palette-node").filter(function(){return"none"!==$(this).css("display")}).length?(R[e].close(),R[e].container.slideUp()):(R[e].open(),R[e].container.show()))}($(this).val())}}),i=$('<div class="red-ui-sidebar-control-left"><i class="fa fa-chevron-left"></i></div>').appendTo($("#red-ui-palette")),RED.popover.tooltip(i,RED._("keyboard.togglePalette"),"core:toggle-palette"),i.on("click",function(){RED.menu.toggleSelected("menu-item-palette")}),$("#red-ui-palette").on("mouseenter",function(){i.toggle("slide",{direction:"left"},200)}),$("#red-ui-palette").on("mouseleave",function(){i.stop(!1,!0),i.hide()});var e=[];RED.settings.paletteCategories?e=RED.settings.paletteCategories:RED.settings.theme("palette.categories")&&(e=RED.settings.theme("palette.categories")),Array.isArray(e)||(e=[]);var t={};e.forEach(function(e){t[e]=!0,n(e,T(e),"palette.label."+T(e))}),D.forEach(function(e){t[e]||n(e,T(e),"palette.label."+T(e))});var o=$('<span class="button-group"></span>').appendTo("#red-ui-palette .red-ui-component-footer");(e=$('<button type="button" class="red-ui-footer-button"><i class="fa fa-angle-double-up"></i></button>').appendTo(o)).on("click",function(e){for(var t in e.preventDefault(),R)R.hasOwnProperty(t)&&R[t].close()}),RED.popover.tooltip(e,RED._("palette.actions.collapse-all")),(o=$('<button type="button" class="red-ui-footer-button"><i class="fa fa-angle-double-down"></i></button>').appendTo(o)).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"):function(e){e?($("#red-ui-main-container").removeClass("red-ui-palette-closed"),i.find("i").removeClass("fa-chevron-right").addClass("fa-chevron-left")):($("#red-ui-main-container").addClass("red-ui-palette-closed"),i.hide(),i.find("i").addClass("fa-chevron-right").removeClass("fa-chevron-left"));setTimeout(function(){$(window).trigger("resize")},200)}(e)})},add:a,remove:r,hide:s,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 i,n,w,a,E,D,R,x,_,r,s,k={property:!1};function d(){var e;n&&(e=$(i).parent().height()-r.outerHeight(),n.resize(e))}function l(){RED.sidebar.show("info")}function o(e){if(void 0!==e){$(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();else if(Array.isArray(e)){RED.sidebar.info.outliner.select(e),E.empty(),RED.utils.createNodeIcon({type:"_selection_"}).appendTo(E),D.text("Selection"),R.hide(),x.hide(),_=null;var i={nodes:0,flows:0,subflows:0,groups:0};e.forEach(function(e){"tab"===e.type?(i.flows++,i.nodes+=RED.nodes.filterNodes({z:e.id}).length):"subflow"===e.type?i.subflows++:"group"===e.type?i.groups++:i.nodes++});var n=$('<tr class="red-ui-help-info-row"><td>'+RED._("sidebar.info.selection")+"</td><td></td></tr>").appendTo(o),a=$("<div>").appendTo($(n.children()[1]));0<i.flows&&$("<div>").text(RED._("clipboard.flow",{count:i.flows})).appendTo(a),0<i.subflows&&$("<div>").text(RED._("clipboard.subflow",{count:i.subflows})).appendTo(a),0<i.nodes&&$("<div>").text(RED._("clipboard.node",{count:i.nodes})).appendTo(a),0<i.groups&&$("<div>").text(RED._("clipboard.group",{count:i.groups})).appendTo(a)}else{RED.sidebar.info.outliner.select(e);var r=/^subflow(:(.+))?$/.exec(e.type);r&&((b=r[2]?RED.nodes.subflow(r[2]):e).id,y=b.instances.length),E.empty(),RED.utils.createNodeIcon(e).appendTo(E);var s=RED.utils.getNodeLabel(e,e.type+": "+e.id),t=s.indexOf("\\n");-1<t&&(s=s.substring(0,t)+"..."),D.text(s),R.show(),_=e,n=$('<tr class="red-ui-help-info-row"><td></td><td></td></tr>').appendTo(o);s="node";if("subflow"===e.type||r?s="subflow":"tab"===e.type?s="flow":"group"===e.type&&(s="group"),$(n.children()[0]).text(RED._("sidebar.info."+s)),RED.utils.createObjectElement(e.id).appendTo(n.children()[1]),"tab"===e.type||"subflow"===e.type)x.hide();else if("group"===e.type){x.hide(),n=$('<tr class="red-ui-help-info-row"><td>&nbsp;</td><td></td></tr>').appendTo(o);var d={nodes:0,groups:0};RED.group.getNodes(e,!0).forEach(function(e){"group"===e.type?d.groups++:d.nodes++});a=$("<div>").appendTo($(n.children()[1]));0<d.nodes&&$("<div>").text(RED._("clipboard.node",{count:d.nodes})).appendTo(a),0<d.groups&&$("<div>").text(RED._("clipboard.group",{count:d.groups})).appendTo(a)}else{x.show(),r||(n=$('<tr class="red-ui-help-info-row"><td>'+RED._("sidebar.info.type")+"</td><td></td></tr>").appendTo(o),$(n.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($(n.children()[1])));var l=0;if(!r&&"subflow"!=e.type&&"group"!=e.type){var c,u,p,f,h,g,v,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,n=$('<tr class="red-ui-help-info-property-row'+(k.property?"":" hide")+'"><td>'+RED._("sidebar.info.module")+"</td><td></td></tr>").appendTo(o),$(n.children()[1]).text(RED.nodes.getType(e.type).set.module),l++),c)for(var m in c)"name"!=m&&"info"!=m&&c.hasOwnProperty(m)&&(u=e[m],l++,n=$('<tr class="red-ui-help-info-property-row'+(k.property?"":" hide")+'"><td></td><td></td></tr>').appendTo(o),$(n.children()[0]).text(m),c[m].type&&!c[m]._type.array?(p=RED.nodes.node(u))?(f=RED.utils.getNodeLabel(p,u),h=n.children()[1],v=$("<span>",{class:""}).appendTo(h),g=$("<div>",{class:"red-ui-palette-node red-ui-palette-node-small"}).appendTo(v),m=RED.utils.getNodeColor(p.type,p._def),v=RED.utils.getNodeIcon(p._def),g.css({backgroundColor:m,cursor:"pointer"}),m=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(g),$("<div/>",{class:"red-ui-palette-icon",style:"background-image: url("+v+")"}).appendTo(m),$("<span></span>").css({verticalAlign:"top",marginLeft:"6px"}).text(f).appendTo(h),g.on("dblclick",function(){RED.editor.editConfig("",p.type,p.id)})):RED.utils.createObjectElement(void 0).appendTo(n.children()[1]):RED.utils.createObjectElement(u).appendTo(n.children()[1]));0<l&&$('<a href="#" class="node-info-property-header'+(k.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&&r&&($('<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(b.name)+'">'+RED.utils.sanitize(b.name)+"</span></td></tr>").appendTo(o))}r&&(n=$('<tr class="red-ui-help-info-row"><td>'+RED._("subflow.category")+"</td><td></td></tr>").appendTo(o),r=b.category||"subflows",$(n.children()[1]).text(RED._("palette.label."+r,{defaultValue:r})),$('<tr class="node-info-subflow-row"><td>'+RED._("sidebar.info.instances")+"</td><td>"+y+"</td></tr>").appendTo(o),b.meta&&(n=$('<tr class="red-ui-help-info-row"><td>'+RED._("subflow.module")+"</td><td></td></tr>").appendTo(o),$(n.children()[1]).text(b.meta.module||""),n=$('<tr class="red-ui-help-info-row"><td>'+RED._("subflow.version")+"</td><td></td></tr>").appendTo(o),$(n.children()[1]).text(b.meta.version||"")));var b,y="";e._def&&e._def.info&&(b="function"==typeof(b=e._def.info)?b.call(e):b,y+=RED.utils.renderMarkdown(b)),e.info&&(y+=RED.utils.renderMarkdown(e.info||"")),function(e,t){t=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(e)+'">'+e+"</span></div>")).appendTo(t);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)})}(y,$("<div>").css("padding","0 6px 6px").appendTo(w)),$(".red-ui-sidebar-info-stack").scrollTop(0),$(".node-info-property-header").on("click",function(e){e.preventDefault(),k.property=!k.property,$(this).toggleClass("expanded",k.property),$(".red-ui-help-info-property-row").toggle(k.property)})}}else T()}var c,u,t,p,f,h=(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)?v:m)()}),{start:v,stop:m,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 i=RED.keyboard.getShortcut(e[2]);if(!i)return;o=o.replace(e[1],RED.keyboard.formatKey(i.key))}for(;e=/(\[([a-z]*?)\])/.exec(o);)o=o.replace(e[1],RED.keyboard.formatKey(e[2]));s.html(o).fadeIn(200),c&&(c=null,u=setInterval(g,p))}function g(){s.fadeOut(300,function(){e()})}function v(){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 m(){$(".red-ui-sidebar-info").removeClass("show-tips"),d(),clearInterval(u),clearTimeout(c),c=u=null}function T(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):(e=RED.workspaces.active(),(e=RED.nodes.workspace(e)||RED.nodes.subflow(e))?o(e):(e=RED.nodes.workspace(RED.workspaces.active()))&&e.info?o(e):o(null))}return RED.events.on("view:selection-changed",T),{init:function(){(i=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(i),t=$("<div>").css({overflow:"hidden",height:"calc(70%)"}).appendTo(e),o=$("<div>").css({overflow:"hidden",height:"100%",display:"flex","flex-direction":"column"}).appendTo(e);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),x=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-book"></button>').css({position:"absolute",top:"12px",right:"32px"}).on("click",function(e){e.preventDefault(),e.stopPropagation(),_&&RED.sidebar.help.show(_.type)}).appendTo(a),RED.popover.tooltip(x,RED._("sidebar.help.showHelp")),R=$('<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(),_&&(RED.sidebar.info.outliner.reveal(_),RED.view.reveal(_.id))}).appendTo(a),RED.popover.tooltip(R,RED._("sidebar.help.showInOutline")),w=$("<div>").css({flex:"1 1 auto","overflow-y":"scroll"}).appendTo(o),(n=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:i,pinned:!0,enableOnEdit:!0}),RED.events.on("sidebar:resize",d),$(window).on("resize",d),$(window).on("focus",d),r=$('<div class="red-ui-help-tips"></div>').appendTo(i),s=$('<div class="red-ui-help-tip"></div>').appendTo(r),t=$('<div class="red-ui-help-tips-buttons"></div>').appendTo(r),$('<a href="#" class="red-ui-footer-button"><i class="fa fa-refresh"></a>').appendTo(t).on("click",function(e){e.preventDefault(),h.next()}),$('<a href="#" class="red-ui-footer-button"><i class="fa fa-times"></a>').appendTo(t).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,r,i,n,s,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 s=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(n,t){var e,o,i=$("<div>",{class:"red-ui-info-outline-item-controls red-ui-info-outline-item-hover-controls"}).appendTo(t);"subflow"===n.type&&$('<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(n.instances.length).appendTo(i).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.search.show("type:subflow:"+n.id)}),"config"===n._def.category&&"group"!==n.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(n.users.length).appendTo(i).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.search.show("uses:"+n.id)}),RED.popover.tooltip(e,function(){return RED._("editor.nodesUse",{count:n.users.length})})),n._def.button&&(o=$('<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(i).on("click",function(e){e.preventDefault(),e.stopPropagation(),RED.view.clickNodeButton(n)}),RED.popover.tooltip(o,RED._("sidebar.info.triggerAction"))),"tab"===n.type&&$('<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(i).on("click",function(e){e.preventDefault(),e.stopPropagation();e=!t.hasClass("red-ui-info-outline-item-hidden");t.toggleClass("red-ui-info-outline-item-hidden",e),e?RED.workspaces.hide(n.id):RED.workspaces.show(n.id,null,!0)}),"subflow"!==n.type?(o=$('<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(i).on("click",function(e){var o,i,t;e.preventDefault(),e.stopPropagation(),"tab"===n.type?n.disabled?RED.workspaces.enable(n.id):RED.workspaces.disable(n.id):"group"===n.type?(t=RED.group.getNodes(n,!0),o={t:"multi",events:[],dirty:RED.nodes.dirty()},t.forEach(function(e){var t;"group"!==e.type&&(void 0===i&&(i=!e.d),!!e.d!==i&&(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())})):(t={t:"edit",node:n,changed:n.changed,changes:{d:n.d},dirty:RED.nodes.dirty()},n.d?delete n.d:n.d=!0,n.dirty=!0,n.dirtyStatus=!0,n.changed=!0,RED.events.emit("nodes:change",n),RED.history.push(t),RED.nodes.dirty(!0),RED.view.redraw())}),RED.popover.tooltip(o,function(){return"group"===n.type?RED._("common.label.enable")+" / "+RED._("common.label.disable"):RED._("common.label."+("tab"===n.type&&n.disabled||"tab"!==n.type&&n.d?"enable":"disable"))})):$('<div class="red-ui-info-outline-item-control-spacer">').appendTo(i),i.find("button").on("dblclick",function(e){e.preventDefault(),e.stopPropagation()})}function v(e){l={};var t,o=u();n.empty(),t=e,(e=$("<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(e).text(t.name),t=$("<div>",{class:"red-ui-info-outline-item-controls"}).appendTo(e),t=$('<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(t).on("click",function(e){e.preventDefault(),RED.projects.editProject()}),RED.popover.tooltip(t,RED._("sidebar.project.showProjectSettings")),e.appendTo(n),i.show(),a.treeList("data",o)}function m(){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,i,n,a;l[e.id]={id:e.id,element:(t=e,o=$("<div>",{class:"red-ui-info-outline-item red-ui-info-outline-item-flow"}),i=$("<div>",{class:"red-ui-search-result-description red-ui-info-outline-item-label"}).appendTo(o),n="string"==typeof t?t:t.label,-1<(a=n.indexOf("\\n"))&&(n=n.substring(0,a)+"..."),i.text(n),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)),s.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()}function E(e){var t=l[e.id],o=e.label||e.id,i=o.indexOf("\\n");-1<i&&(o=o.substring(0,i)+"..."),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),L()}function D(e){var o={};e.forEach(function(e,t){o[e]=t}),s.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__",i=RED.utils.getNodeLabel(e,e.name||e.type+": "+e.id);i?t.element.find(".red-ui-info-outline-item-label").text(i):t.element.find(".red-ui-info-outline-item-label").html("&nbsp;"),o!==(t.parent.id||t.parent.parent.flow)&&(i=t.parent,t.treeList.remove(!0),0===i.children.length&&(i.config?(i.treeList.remove(),delete d[i.parent.id||i.parent.parent.id].types[e.type],0===i.parent.children.length&&("__global__"===i.parent.id?i.parent.treeList.addChild(f(i.parent.id)):(delete d[i.parent.parent.id],i.parent.treeList.remove(),0===i.parent.parent.children.length&&i.parent.parent.treeList.addChild(f(i.parent.parent.id))))):i.treeList.addChild(f(i.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,o=l[e.id];o.treeList.remove(),delete l[e.id],/^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)),p[e.id]&&delete p[e.id];o=o.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]));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)&&(e=e.type.substring(8),l[e]&&l[e].element.find(".red-ui-info-outline-item-control-users").text(RED.nodes.subflow(e).instances.length)),L()}function L(){e&&clearTimeout(e),r&&(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){r=e;for(var o={},i=0,n=t.length;i<n;i++)o[t[i].node.id]=!0;a.treeList("filter",function(e){return 0===e.depth||e.id&&l[e.id]&&o[e.id]},!0)}else{r=null,a.treeList("filter",null);e=a.treeList("selected");e.id&&a.treeList("show",e.id)}},options:[{label:RED._("sidebar.info.search.configNodes"),value:"is:config"},{label:RED._("sidebar.info.search.unusedConfigNodes"),value:"is:config is:unused"},{label:RED._("sidebar.info.search.invalidNodes"),value:"is:invalid"},{label:RED._("sidebar.info.search.uknownNodes"),value:"type:unknown"},{label:RED._("sidebar.info.search.unusedSubflows"),value:"is:subflow is:unused"},{label:RED._("sidebar.info.search.hiddenFlows"),value:"is:hidden"}]}),i=$('<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),n=$("<span>").appendTo(i),(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);t&&("group"===t.type||"config"!==t._def.category||"config"===t._def.category&&RED.sidebar.info.refresh(t))}),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",v),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",m),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,n,a,r,t,s,d,e;function l(){var e=$(i).parent().height()-n.outerHeight();r.resize(e)}function c(){e=e||setTimeout(function(){e=null,function(){0;var i=RED.nodes.registry.getModuleList(),e=Object.keys(i);e.sort();var n={label:RED._("sidebar.help.nodeHelp"),children:[],expanded:!0},t=[{id:"changelog",label:"Node-RED v"+RED.settings.version,content:b},n],o=RED.nodes.registry.getNodeTypes().filter(function(e){return/subflow/.test(e)});0<o.length&&(n.children.push({label:RED._("menu.label.subflows"),children:[]}),o.forEach(function(e){var t=RED.nodes.getType(e);n.children[0].children.push({id:"node-type:"+e,nodeType:e,subflowLabel:t.label().toLowerCase(),element:h({_def:t,type:t.label()})})}));e.forEach(function(e){var t=i[e],o=[];Object.keys(t.sets).forEach(function(e){t.sets[e].types.forEach(function(e){$("script[data-help-name='"+e+"']").length&&o.push({id:"node-type:"+e,nodeType:e,element:h({_def:RED.nodes.getType(e),type:e})})})}),0<o.length&&(o.sort(function(e,t){return e.nodeType.localeCompare(t.nodeType)}),n.children.push({id:e,icon:"fa fa-cube",label:e,children:o}))}),s.treeList("data",t)}()},500)}function u(e){var t=s.treeList("get","node-type:subflow:"+e.id);t.subflowLabel=e._def.label().toLowerCase(),t.treeList.replaceElement(h({_def:e._def,type:e._def.label()}))}function p(){var e=$("#red-ui-sidebar-help-show-toc");e.hasClass("selected")&&(e.removeClass("selected"),t=r.ratio(),d.css({transition:"height 0.2s"}),r.ratio(0),setTimeout(function(){d.css({transition:""})},250))}function f(){var e=$("#red-ui-sidebar-help-show-toc");e.hasClass("selected")||(e.addClass("selected"),d.css({transition:"height 0.2s"}),r.ratio(Math.max(.3,Math.min(t,.7))),setTimeout(function(){d.css({transition:""});var e=s.treeList("selected");e.id&&s.treeList("show",e)},250))}function h(e){var t=$("<div>",{class:"red-ui-node-list-item"}),o=RED.utils.createNodeIcon(e).appendTo(t),i=e.name;if(!i&&e._def&&e._def.paletteLabel)try{i=("function"==typeof e._def.paletteLabel?e._def.paletteLabel.call(e._def):e._def.paletteLabel)||""}catch(e){}return i=i||e.type,$("<div>",{class:"red-ui-node-label"}).text(e.name||e.type).appendTo(o),t}function g(t){a.empty();var e=/^subflow(:(.+))?$/.exec(t);if(e&&e[2])var o=RED.nodes.subflow(e[2]),i=RED.utils.renderMarkdown(o.info||"")||'<span class="red-ui-help-info-none">'+RED._("sidebar.info.none")+"</span>",n=o.name||t;else{i=RED.nodes.getNodeHelp(t)||'<span class="red-ui-help-info-none">'+RED._("sidebar.info.none")+"</span>";o=RED.nodes.registry.getNodeType(t);if("function"==typeof(n=o&&o.paletteLabel?o.paletteLabel:t))try{n=o.paletteLabel.call(o)}catch(e){n=t}}m(n,i),.7<r.ratio()&&r.ratio(.7),s.treeList("show","node-type:"+t),s.treeList("select","node-type:"+t,!1)}function v(e,t){!1!==t&&RED.sidebar.show("help"),e&&g(e),l()}function m(e,t){a.empty(),e&&$("<h1>",{class:"red-ui-help-title"}).text(e).appendTo(a);t=$('<div class="red-ui-help"><span class="red-ui-text-bidi-aware" dir="'+RED.text.bidi.resolveBaseTextDir(t)+'">'+t+"</span></div>"),$(t).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")}),t=t.appendTo(a);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)}),a.parent().scrollTop(0)}function b(a){$.get("red/about",function(n){n=RED.utils.sanitize(n),RED.tourGuide.load("./tours/welcome.js",function(e,t){var o,i='<div><img width="50px" src="red/images/node-red-icon.svg" /></div>';t&&(o=RED.settings.version.split("."),(t=t.version.split("."))[0]===o[0]&&t[1]===o[1]&&(i='<div><button type="button" onclick="RED.actions.invoke(\'core:show-welcome-tour\')" class="red-ui-button">'+RED._("tourGuide.takeATour")+"</button></div>")),a('<div style="text-align:center;">'+i+"</div>"+RED.utils.renderMarkdown(n))})})}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&&g(e.type))}),RED.actions.add("core:show-about",function(){s.treeList("show","changelog"),s.treeList("select","changelog"),v()}),RED.actions.add("core:show-welcome-tour",function(o,i){i=i||function(){},RED.tourGuide.load("./tours/welcome.js",function(e,t){if(e)return console.warn("Failed to load welcome tour",e),void i();e=RED.settings.version.split("."),t=t.version.split(".");if(t[0]===e[0]&&t[1]===e[1]){if(o){if(o===RED.settings.version)return void i();t=o.split(".");if(e[0]<t[0]||e[0]===t[0]&&e[1]<t[1])return void i();if(e[0]===t[0]&&e[1]===t[1]){if(3===t.length&&3===e.length)return void i();if(4===e.length&&(3===t.length||e[3]<t[3]))return void i()}}RED.tourGuide.run("./tours/welcome.js",function(e){RED.settings.set("editor.tours.welcome",RED.settings.version),i()})}else i()})}),{init:function(){(i=document.createElement("div")).className="red-ui-sidebar-info",n=$("<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(n);var e=n.find("#red-ui-sidebar-help-show-toc");RED.popover.tooltip(e,RED._("sidebar.help.showTopics")),e.on("click",function(e){e.preventDefault(),($(this).hasClass("selected")?p:f)()});var t=$("<div>",{class:"red-ui-sidebar-help-stack"}).appendTo(i);d=$("<div>",{class:"red-ui-sidebar-help-toc"}).appendTo(t);var o,e=$("<div>").css({"overflow-y":"scroll"}).appendTo(t);(r=RED.panels.create({container:t})).ratio(.3),helpSearch=$('<input type="text" data-i18n="[placeholder]sidebar.help.search">').appendTo(n).searchBox({style:"compact",delay:100,change:function(){var e,t=$(this).val().toLowerCase();t?(f(),s.treeList("filter",function(e){return 0===e.depth||(e.nodeType&&-1<e.nodeType.indexOf(t)||e.subflowLabel&&-1<e.subflowLabel.indexOf(t))},!0)):(s.treeList("filter",null),(e=s.treeList("selected")).id&&s.treeList("show",e.id))}}),a=$("<div>",{class:"red-ui-help"}).css({padding:"6px"}).appendTo(e),$('<span class="red-ui-help-info-none">'+RED._("sidebar.help.noHelp")+"</span>").appendTo(a),(s=$("<div>").css({width:"100%"}).appendTo(d).treeList({data:[]})).on("treelistselect",function(e,t){(o=t).nodeType?g(t.nodeType):t.content&&(a.empty(),"string"==typeof t.content?m(t.label,t.content):"function"==typeof t.content&&(0===t.content.length?m(t.label,t.content()):(m(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&&(a.empty(),m(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(){l()}}),$(window).on("resize",l),$(window).on("focus",l),RED.events.on("registry:node-type-added",c),RED.events.on("registry:node-type-removed",c),RED.events.on("subflows:change",u),RED.actions.add("core:show-help-tab",v)},show:v,set:function(e,t){$(a).empty(),m(t,e),p(),v()}}}(),RED.sidebar.config=function(){var s=document.createElement("div");s.className="red-ui-sidebar-node-config",s.id="red-ui-sidebar-node-config",s.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(s);var e=$('<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>'),n=$("<div>").appendTo(s),a=$("<div>").appendTo(s),r=$("<div>").appendTo(s),i=!1,d={};function l(e,t,o){var i,n,a;return e=e.replace(/\./i,"-"),d[e]?d[e].label!==o&&(d[e].list.parent().find(".red-ui-palette-node-config-label").text(o),d[e].label=o):(i=$('<div class="red-ui-palette-category red-ui-sidebar-config-category" id="red-ui-sidebar-config-category-'+e+'"></div>').appendTo(t),t=$('<div class="red-ui-sidebar-config-tray-header red-ui-palette-header"><i class="fa fa-angle-down expanded"></i></div>').appendTo(i),(o?$('<span class="red-ui-palette-node-config-label"/>').text(o):$('<span class="red-ui-palette-node-config-label" data-i18n="sidebar.config.'+e+'">')).appendTo(t),$('<span class="red-ui-sidebar-node-config-filter-info"></span>').appendTo(t),category=$('<ul class="red-ui-palette-content red-ui-sidebar-node-config-list"></ul>').appendTo(i),category.on("click",function(e){$(s).find(".red-ui-palette-node").removeClass("selected")}),i.i18n(),n=t.find("i"),a={label:o,list:category,size:function(){return a.list.find("li:not(.red-ui-palette-node-config-none)").length},open:function(e){n.hasClass("expanded")||(n.addClass("expanded"),e?a.list.show():a.list.slideDown())},close:function(e){n.hasClass("expanded")&&(n.removeClass("expanded"),e?a.list.hide():a.list.slideUp())},isOpen:function(){return n.hasClass("expanded")}},t.on("click",function(e){a.isOpen()?a.close():a.open()}),d[e]=a),d[e]}function c(e,t){var a,o=l(e.replace(/\./i,"-")),r=o.list;t.sort(function(e,t){return e.type<t.type?-1:e.type>t.type?1:0}),i?(e=t.length,0<(e-=(t=t.filter(function(e){return!1!==e._def.hasUsers&&0===e.users.length})).length)?r.parent().find(".red-ui-sidebar-node-config-filter-info").text(RED._("sidebar.config.filtered",{count:e})).show():r.parent().find(".red-ui-sidebar-node-config-filter-info").hide()):r.parent().find(".red-ui-sidebar-node-config-filter-info").hide(),r.empty(),0===t.length?($('<li class="red-ui-palette-node-config-none" data-i18n="sidebar.config.none">NONE</li>').i18n().appendTo(r),o.close(!0)):(a="",t.forEach(function(t){var e=RED.utils.getNodeLabel(t,t.id);t.type!=a&&($('<li class="red-ui-palette-node-config-type">'+t.type+"</li>").appendTo(r),a=t.type);var o=$('<li class="red-ui-palette-node_id_'+t.id.replace(/\./g,"-")+'"></li>').appendTo(r),i=$('<div class="red-ui-palette-node-config red-ui-palette-node"></div>').appendTo(o);o.data("node",t.id);var e=$('<div class="red-ui-palette-label"></div>').text(e).appendTo(i);t.d&&(i.addClass("red-ui-palette-node-config-disabled"),$('<i class="fa fa-ban"></i>').prependTo(e)),!1!==t._def.hasUsers&&(e=$("<div/>",{class:"red-ui-palette-icon-container red-ui-palette-icon-container-right"}).appendTo(i),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&&i.addClass("red-ui-palette-node-config-unused")),i.on("click",function(e){e.stopPropagation(),RED.view.select(!1),e.metaKey?$(this).toggleClass("selected"):($(s).find(".red-ui-palette-node").removeClass("selected"),$(this).addClass("selected")),RED.sidebar.info.refresh(t)}),i.on("dblclick",function(e){e.stopPropagation(),RED.editor.editConfig("",t.type,t.id)});var n=t.users.map(function(e){return e.id});i.on("mouseover",function(e){RED.nodes.eachNode(function(e){-1!=n.indexOf(e.id)&&(e.highlighted=!0,e.dirty=!0)}),RED.view.redraw()}),i.on("mouseout",function(e){RED.nodes.eachNode(function(e){e.highlighted&&(e.highlighted=!1,e.dirty=!0)}),RED.view.redraw()})}),o.open(!0))}function t(){var t={global:!0};l("global",n),RED.nodes.eachWorkspace(function(e){t[e.id.replace(/\./g,"-")]=!0,l(e.id,a,e.label)}),RED.nodes.eachSubflow(function(e){t[e.id.replace(/\./g,"-")]=!0,l(e.id,r,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 d[e])});var e,o=[],i={};for(e in RED.nodes.eachConfig(function(e){e.z?(i[e.z.replace(/\./g,"-")]=i[e.z.replace(/\./g,"-")]||[],i[e.z.replace(/\./g,"-")].push(e)):e.z||o.push(e)}),t)t.hasOwnProperty(e)&&c(e,i[e]||[]);c("global",o)}return{init:function(){RED.sidebar.addTab({id:"config",label:RED._("sidebar.config.label"),name:RED._("sidebar.config.name"),content:s,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(){$(s).find(".red-ui-palette-node").addClass("selected")}),RED.actions.add("core:delete-config-selection",function(){var a,e=[];$(s).find(".red-ui-palette-node.selected").each(function(){e.push($(this).parent().data("node"))}),0<e.length&&(a={t:"delete",nodes:[],changes:{},dirty:RED.nodes.dirty()},e.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 i,n=t.users[o];for(i in a.changes[n.id]={changed:n.changed,valid:n.valid},n._def.defaults)n._def.defaults.hasOwnProperty(i)&&n[i]==e&&(a.changes[n.id][i]=e,n[i]="",n.changed=!0,n.dirty=!0);RED.editor.validateNode(n)}RED.nodes.remove(e)}),RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(a))}),RED.events.on("view:selection-changed",function(){$(s).find(".red-ui-palette-node").removeClass("selected")}),$("#red-ui-sidebar-config-collapse-all").on("click",function(e){for(var t in e.preventDefault(),d)d.hasOwnProperty(t)&&d[t].close()}),$("#red-ui-sidebar-config-expand-all").on("click",function(e){for(var t in e.preventDefault(),d)d.hasOwnProperty(t)&&0<d[t].size()&&d[t].open()}),$("#red-ui-sidebar-config-filter-all").on("click",function(e){e.preventDefault(),i&&($(this).addClass("selected"),$("#red-ui-sidebar-config-filter-unused").removeClass("selected"),i=!i,t())}),$("#red-ui-sidebar-config-filter-unused").on("click",function(e){e.preventDefault(),i||($(this).addClass("selected"),$("#red-ui-sidebar-config-filter-all").removeClass("selected"),i=!i,t())}),RED.popover.tooltip($("#red-ui-sidebar-config-filter-all"),RED._("sidebar.config.showAllUnusedConfigNodes")),RED.popover.tooltip($("#red-ui-sidebar-config-filter-unused"),RED._("sidebar.config.showAllUnusedConfigNodes"))},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 e=$(".red-ui-palette-node_id_"+s),t=e.position().top,o=e.height(),i=$(".red-ui-sidebar-node-config"),n=i.height();n<t+o?i.animate({scrollTop:"-="+(n-(t+o)-30)},150):t<0&&i.animate({scrollTop:"+="+(t-10)},150);var a=21,r=function(){a%2==0?e.removeClass("node_highlighted"):e.addClass("node_highlighted"),0<=--a&&setTimeout(r,100)};r()},100)),RED.sidebar.show("config")},refresh:t}}(),RED.sidebar.context=function(){var n,a,r,s,d,l,c,u,p;function f(e,t){u=e,t||s.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||r.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 a,p,f,h,g,i=e.table;o?(a=e,p=t,f=o,h=RED.settings.context.stores,g=a.table,$.getJSON(p,function(e){$(g).empty();var t,o={};for(t in e)if(e.hasOwnProperty(t))for(var i in e[t])e[t].hasOwnProperty(i)&&(o.hasOwnProperty(i)||(o[i]=[]),e[t][i].store=t,o[i].push(e[t][i]));var c=Object.keys(o);c.sort();for(var n=c.length,u=0;u<n;u++)o[c[u]].forEach(function(n){var a=c[u],r=(o[a].length,$('<tr class="red-ui-help-info-row"><td class="red-ui-sidebar-context-property"></td><td></td></tr>').appendTo(g));$(r.children()[0]).text(a);var s=$('<span class="button-group"></span>'),e=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-refresh"></i></button>').appendTo(s).on("click",function(e){e.preventDefault(),e.stopPropagation(),$.getJSON(p+"/"+a+"?store="+n.store,function(e){e.msg===d&&e.format===l||(d=e.msg,l=e.format,s.detach(),$(r.children()[1]).empty(),RED.utils.createObjectElement(RED.utils.decodeObject(d,l),{typeHint:e.format,sourceId:f+"."+a,tools:s,path:""}).appendTo(r.children()[1]))})});RED.popover.tooltip(e,RED._("sidebar.context.refrsh"));e=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-trash"></i></button>').appendTo(s).on("click",function(e){e.preventDefault(),e.stopPropagation();var i=RED.popover.create({trigger:"modal",target:r,direction:"left",content:function(){var e=$("<div>");$('<p data-i18n="sidebar.context.deleteConfirm"></p>').appendTo(e);var t=$("<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(),$.ajax({url:p+"/"+a+"?store="+n.store,type:"DELETE"}).done(function(e,t,o){$.getJSON(p+"/"+a+"?store="+n.store,function(e){"undefined"===e.format?(r.remove(),0===g.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(g).i18n()):(d=e.msg,l=e.format,s.detach(),$(r.children()[1]).empty(),RED.utils.createObjectElement(RED.utils.decodeObject(d,l),{typeHint:e.format,sourceId:f+"."+a,tools:s,path:""}).appendTo(r.children()[1]))})}).fail(function(e,t,o){})}),e.i18n()}});i.open()});RED.popover.tooltip(e,RED._("sidebar.context.delete"));var d=n.msg,l=n.format;RED.utils.createObjectElement(RED.utils.decodeObject(d,l),{typeHint:n.format,sourceId:f+"."+a,tools:s,path:""}).appendTo(r.children()[1]),1<h.length&&$("<span>",{class:"red-ui-sidebar-context-property-storename"}).text(n.store).appendTo($(r.children()[0]))});0===n&&$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.empty"></td></tr>').appendTo(g).i18n(),$(a.timestamp).text((new Date).toLocaleString())})):($(i).empty(),$('<tr class="red-ui-help-info-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.none"></td></tr>').appendTo(i).i18n())}function v(){RED.sidebar.show("context")}return{init:function(){(n=$("<div>").css({position:"relative",height:"100%"})).className="red-ui-sidebar-context";var e=$("<div></div>"),t=$("<div>",{class:"red-ui-sidebar-context-stack"}).appendTo(n);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);var o=$('<table class="red-ui-info-table"></table>').appendTo(d.content);d.table=$("<tbody>").appendTo(o);var i=$('<div style="float: right"></div>').appendTo(d.header),t=RED.settings.get("editor.context.nodeRefresh",!1);s=$('<input type="checkbox">').prop("checked",t).appendTo(i).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")),t=$('<button class="red-ui-button red-ui-button-small" style="margin-left: 5px"><i class="fa fa-refresh"></i></button>').appendTo(i).on("click",function(e){e.stopPropagation(),e.preventDefault(),f(u,!0)}),RED.popover.tooltip(t,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),o=$('<table class="red-ui-info-table"></table>').appendTo(l.content),l.table=$("<tbody>").appendTo(o),i=$('<div style="float: right"></div>').appendTo(l.header),t=RED.settings.get("editor.context.flowRefresh",!1),r=$('<input type="checkbox">').prop("checked",t).appendTo(i).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")),t=$('<button class="red-ui-button red-ui-button-small" style="margin-left: 5px"><i class="fa fa-refresh"></i></button>').appendTo(i).on("click",function(e){e.stopPropagation(),e.preventDefault(),h(p,!0)}),RED.popover.tooltip(t,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),o=$('<table class="red-ui-info-table"></table>').appendTo(c.content),c.table=$("<tbody>").appendTo(o),i=$('<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(i).on("click",function(e){e.stopPropagation(),e.preventDefault(),g(c,"context/global","global")}),RED.popover.tooltip(i,RED._("sidebar.context.refrsh")),RED.actions.add("core:show-context-tab",v),RED.sidebar.addTab({id:"context",label:RED._("sidebar.context.label"),name:RED._("sidebar.context.name"),iconClass:"fa fa-database",content:n,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 d,i,l,y,c,n,u=[],p=[],w={},E={},D={},t={},a="",o=/^(\d+)(\.(\d+))?(\.(\d+))?(-([0-9A-Za-z-]+))?(\.([0-9A-Za-z-.]+))?$/,r=/^\d+$/;function s(e){this.number=0,this.text=e,r.test(e)?(this.number=parseInt(e),this.type="N"):this.type=null==e||e.length<1?"E":"T"}function R(e){e=e.match(o);this.parts=[new s(e[1]),new s(e[3]),new s(e[5]),new s(e[7]),new s(e[9])]}function f(e,t){e=(e=Date.now()-e)<300?300:0;setTimeout(function(){t()},e)}function h(e,t,i,n){i.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){f(a,function(){i.hide(),n()})}).fail(function(e,t,o){f(a,function(){i.hide(),n(e)})})}function g(e,t,o,i){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){i()}).fail(function(e,t,o){i(e)})}function v(e){t.hasOwnProperty(e)||(t[e]=setTimeout(function(){delete t[e],m(e)},100))}function m(e){if(D.hasOwnProperty(e)){var t=D[e].info,o=D[e].elements;if(o){var i,n=0,a=0,r=0;for(i in o.errorList.empty(),D[e].totalUseCount=0,D[e].setUseCount={},t.sets)if(t.sets.hasOwnProperty(i)){var s,d=0,l=t.sets[i],c=o.sets[i];l.err&&(r++,s=l.err,l.err.message?s=l.err.message:l.err.code&&(s=l.err.code),$("<li>").text(s).appendTo(o.errorList)),l.enabled&&(n+=l.types.length),a+=l.types.length;for(var u=0;u<t.sets[i].types.length;u++){var p=t.sets[i].types[u];d+=E[p]||0;var f,h=c.swatches[p];!l.enabled||(f=RED.nodes.getType(p))&&f.color&&(h.css({background:RED.utils.getNodeColor(p,f)}),h.css({border:"1px solid "+function(e){if(i=/^rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)[,)]/.exec(e)){var t=parseInt(i[1]),o=parseInt(i[2]),i=parseInt(i[3]);if(160<(299*t+587*o+114*i)/1e3)return"rgb("+Math.floor(.8*t)+","+Math.floor(.8*o)+","+Math.floor(.8*i)+")"}return e}(h.css("backgroundColor"))}))}D[e].setUseCount[i]=d,D[e].totalUseCount+=d,0<d?(c.enableButton.text(RED._("palette.editor.inuse")),c.enableButton.addClass("disabled")):(c.enableButton.removeClass("disabled"),l.enabled?c.enableButton.text(RED._("palette.editor.disable")):c.enableButton.text(RED._("palette.editor.enable"))),c.setRow.toggleClass("red-ui-palette-module-set-disabled",!l.enabled)}0===r?o.errorRow.hide():o.errorRow.show(),o.setCount.text(RED._("palette.editor.nodeCount",{count:a,label:n===a?a:n+" / "+a})),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===n?o.enableButton.text(RED._("palette.editor.enableall")):o.enableButton.text(RED._("palette.editor.disableall")),o.container.toggleClass("disabled",0===n))}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)&&A&&(m=w[e].version,b=t.version,m=new R(m),b=new R(b),0<m.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,v=[e];for(g in D[e].info.sets)D[e].info.sets.hasOwnProperty(g)&&(v.push(g),v=v.concat(D[e].info.sets[g].types));D[e].index=v.join(",").toLowerCase(),y.editableList("addItem",D[e])}var m,b}s.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 b,x=[],_=!(R.prototype.compare=function(e){for(var t=0,o=0,i=this.parts.length;0==t&&o<i;o++)t=this.parts[o].compare(e.parts[o]);return t}),k=L;function T(e,t,o,i){x.push(e||i),e?_=!0:(i.modules&&(i.modules=i.modules.filter(function(e){return!!RED.utils.checkModuleAllowed(e.id,e.version,N,P)&&((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(),!0)}),u=u.concat(i.modules)),l.searchBox("count",u.length)),1<n&&$(".red-ui-palette-module-shade-status").html(RED._("palette.editor.loading")+"<br>"+x.length+"/"+n),x.length===n&&(_&&RED.notify(RED._("palette.editor.errors.catalogLoadFailed",{url:t}),"error",!1,8e3),t=250-(Date.now()-b),setTimeout(function(){$("#red-ui-palette-module-install-shade").hide()},Math.max(t,0)))}function C(){var e,t;0===u.length&&(u=[],w={},c.editableList("empty"),$(".red-ui-palette-module-shade-status").text(RED._("palette.editor.loading")),e=RED.settings.theme("palette.catalogues")||["https://catalogue.nodered.org/catalogue.json"],_=!(x=[]),n=e.length,1<e.length&&$(".red-ui-palette-module-shade-status").html(RED._("palette.editor.loading")+"<br>0/"+e.length),$("#red-ui-palette-module-install-shade").show(),b=Date.now(),t=0,e.forEach(function(i,e){$.getJSON(i,{_:(new Date).getTime()},function(e){T(null,i,0,e),function(){for(var e in D)D.hasOwnProperty(e)&&m(e)}()}).fail(function(e,t,o){console.warn("Error loading catalog",i,":",o),T(e,i)}).always(function(){++t===n&&l.searchBox("change")})}))}function j(){if(c.editableList("empty"),""!==l.searchBox("value").trim()){p.sort(k);for(var e=0;e<Math.min(10,p.length);e++)c.editableList("addItem",p[e]);0===p.length&&c.editableList("addItem",{}),10<p.length&&c.editableList("addItem",{start:10,more:p.length-10})}else c.editableList("addItem",{count:u.length})}function L(e,t){var o=l.searchBox("value").trim();if(""===o)return S(e,t);o=e.info.index.indexOf(o)-t.info.index.indexOf(o);return 0==o?S(e,t):o}function S(e,t){return e.info.id.localeCompare(t.info.id)}function O(e,t){return-1*(e.info.timestamp-t.info.timestamp)}var I,N=["*"],P=[],A=!0,M=["*"],z=[];function B(){return C(),d.activateTab("nodes"),I}function G(i,t,n){var e,a;!1!==RED.settings.get("externalModules.palette.allowInstall",!0)?(e=[{text:RED._("common.label.cancel"),click:function(){a.close()}}],i.url&&e.push({text:RED._("palette.editor.confirm.button.review"),class:"primary red-ui-palette-module-install-confirm-button-install",click:function(){var e=i.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 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.install")+" : "+i.id+" "+i.version),g(i.id,i.version,i.pkg_url,function(e){var t;o.remove(),e&&e.responseJSON&&(t=RED.notify(RED._("palette.editor.errors.installFailed",{module:i.id,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")}}]})),n(e)}),a.close()}}),a=RED.notify(RED._("palette.editor.confirm.install.body",{module:i.id}),{modal:!0,fixed:!0,buttons:e})):n(new Error("Palette not editable"))}return{init:function(){var e,t;!1!==RED.settings.get("externalModules.palette.allowInstall",!0)&&(e=RED.settings.get("externalModules.palette.allowList"),t=RED.settings.get("externalModules.palette.denyList"),(e||t)&&(N=e,P=t),N=RED.utils.parseModuleList(N),P=RED.utils.parseModuleList(P),e=RED.settings.get("externalModules.palette.allowUpdateList"),t=RED.settings.get("externalModules.palette.denyUpdateList"),(e||t)&&(M=e,z=t),M=RED.utils.parseModuleList(M),z=RED.utils.parseModuleList(z),A=RED.settings.get("externalModules.palette.allowUpdate",!0),function(){I=$('<div id="red-ui-settings-tab-palette"></div>');var t=$('<div id="red-ui-palette-editor"><ul id="red-ui-palette-editor-tabs"></ul></div>').appendTo(I);d=RED.tabs.create({element:I.find("#red-ui-palette-editor-tabs"),onchange:function(e){t.find(".red-ui-palette-editor-tab").hide(),e.content.show(),i&&i.searchBox("value",""),l&&l.searchBox("value",""),"install"===e.id?l&&l.trigger("focus"):i&&i.trigger("focus")},minimumActiveTabWidth:110}),function(e){var t=$("<div>",{class:"red-ui-palette-editor-tab"}).appendTo(e);d.addTab({id:"nodes",label:RED._("palette.editor.tab-nodes"),content:t});e=$("<div>",{class:"red-ui-palette-search"}).appendTo(t);i=$('<input type="text" data-i18n="[placeholder]palette.filter"></input>').appendTo(e).searchBox({delay:200,change:function(){!function(e){a=e.toLowerCase();var t=y.editableList("filter"),o=y.editableList("length");""===e?i.searchBox("count"):i.searchBox("count",t+" / "+o)}($(this).val())}}),y=$("<ol>",{id:"red-ui-palette-module-list",style:"position: absolute;top: 35px;bottom: 0;left: 0;right: 0px;"}).appendTo(t).editableList({addButton:!1,scrollOnAdd:!1,sort:function(e,t){return e.info.name.localeCompare(t.info.name)},filter:function(e){return""===a||(""===a||-1<e.index.indexOf(a))},addItem:function(o,e,r){var t,i,n,a,s,d,l,c,u,p,f=r.info;f?(s=$("<div>",{class:"red-ui-palette-module-header"}).appendTo(o),a=$('<div class="red-ui-palette-module-meta red-ui-palette-module-name"><i class="fa fa-cube"></i></div>').appendTo(s),$("<span>").text(f.name).appendTo(a),l=$('<div class="red-ui-palette-module-meta red-ui-palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(s),t=$("<span>").text(f.version).appendTo(l),i=$('<div class="red-ui-palette-module-meta red-ui-palette-module-errors"><i class="fa fa-warning"></i></div>').hide().appendTo(s),n=$('<ul class="red-ui-palette-module-error-list"></ul>').appendTo(i),d=$("<div>",{class:"red-ui-palette-module-meta"}).appendTo(s),p=$('<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(d),a=$("<span>").appendTo(p),l=$("<div>",{class:"red-ui-palette-module-button-group"}).appendTo(d),(s=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.update")).appendTo(l)).attr("id","up_"+Math.floor(1e9*Math.random())),s.on("click",function(e){var i,t,n,a,r,s;e.preventDefault(),$(this).hasClass("disabled")||(t=w[(i=f).name].version,n=w[f.name].pkg_url,a=o,!(r=function(e){})!==RED.settings.get("externalModules.palette.allowInstall",!0)?s=RED.notify(RED._("palette.editor.confirm.update.body",{module:i.name}),{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){s.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")+" : "+i.name+" "+t),g(i.name,t,n,function(e){var t;o.remove(),e&&e.responseJSON&&(t=RED.notify(RED._("palette.editor.errors.updateFailed",{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")}}]})),r(e)}),s.close()}}]}):r(new Error("Palette not editable")))}),(d=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.remove")).appendTo(l)).attr("id","up_"+Math.floor(1e9*Math.random())),d.on("click",function(e){var n,t,a;e.preventDefault(),n=f,t=o,!(e=function(e){})!==RED.settings.get("externalModules.palette.allowInstall",!0)?a=RED.notify(RED._("palette.editor.confirm.remove.body",{module:n.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 i,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")+" : "+n.name),e=n.name,i=function(e){var t;o.remove(),e&&e.responseJSON&&(t=RED.notify(RED._("palette.editor.errors.removeFailed",{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")}}]}))},$.ajax({url:"nodes/"+e,type:"DELETE"}).done(function(e,t,o){i()}).fail(function(e,t,o){i(e)}),a.close()}}]}):e(new Error("Palette not editable"))}),f.local||d.hide(),l=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.disableall")).appendTo(l),c=$("<div>",{class:"red-ui-palette-module-content"}).appendTo(o),u=$('<div class="red-ui-palette-module-shade hide"><img src="red/images/spin.svg" class="red-ui-palette-spinner"/></div>').appendTo(o),r.elements={updateButton:s,removeButton:d,enableButton:l,errorRow:i,errorList:n,setCount:a,container:o,shade:u,versionSpan:t,sets:{}},p.on("click",function(e){e.preventDefault(),o.hasClass("expanded")?(o.removeClass("expanded"),c.slideUp()):(o.addClass("expanded"),c.slideDown())}),(p=Object.keys(f.sets)).sort(function(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}),p.forEach(function(o){var i=f.sets[o],n=$("<div>",{class:"red-ui-palette-module-set"}).appendTo(c),e=$("<div>",{class:"red-ui-palette-module-set-button-group"}).appendTo(n),a={};i.types.forEach(function(e){var t=$("<div>",{class:"red-ui-palette-module-type"}).appendTo(n);a[e]=$("<span>",{class:"red-ui-palette-module-type-swatch"}).appendTo(t),$("<span>",{class:"red-ui-palette-module-type-node"}).text(e).appendTo(t)});e=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').appendTo(e);e.on("click",function(e){var t;e.preventDefault(),0===r.setUseCount[o]&&(e=RED.nodes.registry.getNodeSet(i.id),u.show(),t=!e.enabled,h(i.id,t,u,function(e){e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors."+(t?"enable":"disable")+"Failed",{module:id,message:e.responseJSON.message}))}))}),r.elements.sets[i.name]={setRow:n,enableButton:e,swatches:a}}),l.on("click",function(e){e.preventDefault(),0===r.totalUseCount&&h(f.name,o.hasClass("disabled"),u,function(e){e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors.installFailed",{module:id,message:e.responseJSON.message}))})}),v(f.name)):$("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(o)}})}(t),function(e){var t=$("<div>",{class:"red-ui-palette-editor-tab hide"}).appendTo(e);d.addTab({id:"install",label:RED._("palette.editor.tab-install"),content:t});var o=$("<div>",{class:"red-ui-palette-editor-toolbar"}).appendTo(t),i=$("<div>",{class:"red-ui-palette-search"}).appendTo(t);l=$('<input type="text" data-i18n="[placeholder]palette.search"></input>').appendTo(i).searchBox({delay:300,change:function(){var t=$(this).val().trim().toLowerCase();0<t.length?(p=u.filter(function(e){return-1<e.index.indexOf(t)}).map(function(e){return{info:e}}),j(),l.searchBox("count",p.length+" / "+u.length)):(l.searchBox("count",u.length),c.editableList("empty"),c.editableList("addItem",{count:u.length}))}}),$("<span>").text(RED._("palette.editor.sort")+" ").appendTo(o);var n=$('<span class="button-group"></span>').appendTo(o),e=$('<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(n),i=$('<a href="#" class="red-ui-palette-editor-install-sort-option red-ui-sidebar-header-button-toggle" data-i18n="palette.editor.sortAZ"></a>').appendTo(n),n=$('<a href="#" class="red-ui-palette-editor-install-sort-option red-ui-sidebar-header-button-toggle" data-i18n="palette.editor.sortRecent"></a>').appendTo(n);[{button:e,func:L},{button:i,func:S},{button:n,func:O}].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"),k=t.func,j())})});i=$("<span>").appendTo(o),n=$('<a href="#" class="red-ui-sidebar-header-button"><i class="fa fa-refresh"></i></a>').appendTo(i);{var a,r,s;n.on("click",function(e){e.preventDefault(),u=[],w={},C()}),RED.popover.tooltip(n,RED._("palette.editor.refresh")),c=$("<ol>",{style:"position: absolute;top: 79px;bottom: 0;left: 0;right: 0px;"}).appendTo(t).editableList({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");var 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(),c.editableList("removeItem",o);for(var t=o.start;t<Math.min(o.start+10,o.start+o.more);t++)c.editableList("addItem",p[t]);10<o.more&&c.editableList("addItem",{start:o.start+10,more:o.more-10})})}else if(o.info){var n=o.info,a=$("<div>",{class:"red-ui-palette-module-header"}).appendTo(t),i=$('<div class="red-ui-palette-module-meta red-ui-palette-module-name"><i class="fa fa-cube"></i></div>').appendTo(a);$("<span>").text(n.name||n.id).appendTo(i),$('<a target="_blank" class="red-ui-palette-module-link"><i class="fa fa-external-link"></i></a>').attr("href",n.url).appendTo(i);i=$('<div class="red-ui-palette-module-meta"></div>').appendTo(a);$("<div>",{class:"red-ui-palette-module-description"}).text(n.description).appendTo(i);i=$('<div class="red-ui-palette-module-meta"></div>').appendTo(a);$('<span class="red-ui-palette-module-version"><i class="fa fa-tag"></i> '+n.version+"</span>").appendTo(i),$('<span class="red-ui-palette-module-updated"><i class="fa fa-calendar"></i> '+function(e){new Date,new Date(e);var t=(Date.now()-new Date(e).getTime())/1e3;return t<60?RED._("palette.editor.times.seconds"):(t=Math.floor(t/60))<10?RED._("palette.editor.times.minutes"):t<60?RED._("palette.editor.times.minutesV",{count:t}):(t=Math.floor(t/60))<24?RED._("palette.editor.times.hoursV",{count:t}):(t=Math.floor(t/24))<7?RED._("palette.editor.times.daysV",{count:t}):(e=Math.floor(t/7))<4?RED._("palette.editor.times.weeksV",{count:e}):(t=Math.floor(e/4),e%=4,t<12?RED._("palette.editor.times.monthsV",{count:t}):(e=Math.floor(t/12),0===(t%=12)?RED._("palette.editor.times.yearsV",{count:e}):RED._("palette.editor.times.year"+(1<e?"s":"")+"MonthsV",{y:e,count:t})))}(n.updated_at)+"</span>").appendTo(i);var r=!1;if(n.types&&0<n.types.length)for(e=0;e<n.types.length;e++){var s=RED.nodes.registry.getNodeSetForType(n.types[e]);if(s){r=s.module;break}}a=$("<div>",{class:"red-ui-palette-module-meta"}).appendTo(a),a=$("<div>",{class:"red-ui-palette-module-button-group"}).appendTo(a),a=$('<a href="#" class="red-ui-button red-ui-button-small"></a>').text(RED._("palette.editor.install")).appendTo(a);a.on("click",function(e){e.preventDefault(),$(this).hasClass("disabled")||G(n,t,function(e){})}),D.hasOwnProperty(n.id)?(a.addClass("disabled"),a.text(RED._("palette.editor.installed"))):r&&(a.addClass("disabled"),a.text(RED._("palette.editor.conflict")),RED.popover.create({target:a,content:RED._("palette.editor.conflictTip",{module:r}),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)&&(i=$('<span class="button-group">').prependTo(o),n=$('<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(i),(a=n.find('input[type="file"]')).on("change",function(e){0<this.files.length&&(s.text(this.files[0].name),r.slideDown(200))}),r=$('<div class="red-ui-palette-editor-upload"></div>').appendTo(t),o=$("<div>").appendTo(r),i=$('<div class="placeholder-input"><i class="fa fa-upload"></i> </div>').appendTo(o),s=$("<span></span>").appendTo(i),o=$('<div class="red-ui-palette-editor-upload-buttons"></div>').appendTo(o),$('<button class="editor-button"></button>').text(RED._("common.label.cancel")).appendTo(o).on("click",function(e){e.preventDefault(),r.slideUp(200),a.val("")}),$('<button class="editor-button primary"></button>').text(RED._("common.label.upload")).appendTo(o).on("click",function(e){e.preventDefault();var i=RED.utils.addSpinnerOverlay(r,!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[0].files[0].name);e=new FormData;e.append("tarball",a[0].files[0]);var n=a[0].files[0].name;$.ajax({url:"nodes",data:e,cache:!1,contentType:!1,processData:!1,method:"POST"}).always(function(e,t,o){i.remove(),a.val(""),r.slideUp(200)}).fail(function(e,t,o){e.responseJSON&&(t=e.responseJSON.message);var i=RED.notify(RED._("palette.editor.errors.installFailed",{module:n,message:t}),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.close"),click:function(){i.close()}},{text:RED._("eventLog.view"),click:function(){i.close(),RED.actions.invoke("core:show-event-log")}}]});a.val(""),r.slideUp(200)})}),RED.popover.tooltip(n,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(t)}(t)}(),RED.userSettings.add({id:"palette",title:RED._("palette.editor.palette"),get:B,close:function(){I.detach()},focus:function(){d.resize(),setTimeout(function(){i.trigger("focus")},200)}}),RED.actions.add("core:manage-palette",function(){RED.userSettings.show("palette")}),RED.events.on("registry:module-updated",function(e){v(e.module)}),RED.events.on("registry:node-set-enabled",function(e){v(e.module)}),RED.events.on("registry:node-set-disabled",function(e){v(e.module)}),RED.events.on("registry:node-type-added",function(e){/^subflow:/.test(e)||v(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-type-removed",function(e){/^subflow:/.test(e)||v(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-set-added",function(e){v(e.module);for(var t=0;t<p.length;t++)if(p[t].info.id===e.module){var o=p[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<p.length;o++)if(p[o].info.id===e.module){var i=p[o].elements.installButton;i.removeClass("disabled"),i.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]&&v(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],v(RED.nodes.registry.getNodeSetForType(e.type).module)))}))},install:G}}(),RED.editor=function(){var l=[],c=!1,o={},v={},m={},u={};function w(e){var t,o,i,n,a=e.valid,r=e.changed;if(e.valid=!0,0===e.type.indexOf("subflow:"))o=(t=RED.nodes.subflow(e.type.substring(8))).valid,n=t.changed,void 0===o&&(o=w(t),n=t.changed),i=p(e,e._def.defaults,e),e.valid=o&&0===i.length,e.changed=e.changed||n,e.validationErrors=i;else if(e._def)i=p(e,e._def.defaults,e),e._def._creds&&(i=i.concat(p(e,e._def.credentials,e._def._creds))),e.valid=0===i.length,e.validationErrors=i;else if("subflow"==e.type){for(var s=RED.nodes.filterNodes({z:e.id}),d=0;d<s.length;d++)o=s[d].valid,n=s[d].changed,void 0===o&&(o=w(s[d]),n=s[d].changed),e.valid=e.valid&&o,e.changed=e.changed||n;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&&r===e.changed||(e.dirty=!0,(t=RED.nodes.subflow(e.z))&&w(t)),e.valid}function p(e,t,o){var i,n=[];for(i in t)t.hasOwnProperty(i)&&(a(e,t,i,o[i])||n.push(i));return n}function a(t,e,o,i){var n=!0;if(/^\$\([a-zA-Z_][a-zA-Z0-9_]*\)$/.test(i))return 1;if(/^\$\{[a-zA-Z_][a-zA-Z0-9_]*\}$/.test(i))return 1;if((n="required"in e[o]&&e[o].required?""!==i:n)&&"validate"in e[o])try{n=e[o].validate.call(t,i)}catch(e){console.log("Validation error:",t.type,t.id,"property: "+o,"value:",i,e)}return n=n&&e[o].type&&RED.nodes.getType(e[o].type)&&!("validate"in e[o])?i&&"_ADD_"!=i?(i=RED.nodes.node(i))&&(null==i.valid||i.valid):e[o].hasOwnProperty("required")&&!e[o].required:n}function b(e,t){for(var o in e._def.defaults)e._def.defaults.hasOwnProperty(o)&&i(e,e._def.defaults,o,t);if(e._def.credentials)for(o in e._def.credentials)e._def.credentials.hasOwnProperty(o)&&i(e,e._def.credentials,o,t)}function i(e,t,o,i){var n=$("#"+i+"-"+o);0<n.length&&(i=n.val(),t[o].hasOwnProperty("format")&&""!==t[o].format&&"DIV"===n[0].nodeName&&(i=n.text()),a(e,t,o,i)?n.removeClass("input-error"):n.addClass("input-error"))}function f(t,o){t.resize=!0,t.dirty=!0,t.dirtyStatus=!0;var i=[];o&&RED.nodes.eachLink(function(e){e.source===t&&o.hasOwnProperty(e.sourcePort)&&("-1"===o[e.sourcePort]?i.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===i.indexOf(e)&&i.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&&(i=i.concat(RED.nodes.filterLinks({target:t})));for(var e=0;e<i.length;e++)RED.nodes.removeLink(i[e]);return i}function y(e,t,o,i){o=$("#"+o+"-"+t);0!==o.length&&("checkbox"===o.attr("type")?o.prop("checked",e[t]):(null==(e=e[t])&&(e=""),void 0!==i&&i[t].hasOwnProperty("format")&&""!==i[t].format&&"DIV"===o[0].nodeName?(o.html(RED.text.format.getHtml(e,i[t].format,{},!1,"en")),RED.text.format.attach(o[0],i[t].format,{},!1,"en")):(o.val(e),"INPUT"!==o[0].nodeName&&"TEXTAREA"!==o[0].nodeName||RED.text.bidi.prepareInput(o))))}function E(t,e,o,i){var n=$("#"+i+"-"+o);void 0!==e&&"format"in e[o]&&""!==e[o].format&&"DIV"===n[0].nodeName?$("#"+i+"-"+o).on("change keyup",function(e){$(this).attr("skipValidation")||b(t,i)}):$("#"+i+"-"+o).on("change",function(e){$(this).attr("skipValidation")||b(t,i)})}function D(e,t,o,i){for(var n in t)t.hasOwnProperty(n)&&("password"==t[n].type?o[n]?$("#"+i+"-"+n).val(o[n]):o["has_"+n]?$("#"+i+"-"+n).val("__PWRD__"):$("#"+i+"-"+n).val(""):y(o,n,i,t),E(e,t,n,i))}function R(d,l,c,u,p,f,h){function t(){var e,t,o,i,n=$("<ul></ul>").appendTo(d),a=$("<div></div>").appendTo(d),r=RED.tabs.create({element:n,onchange:function(e){a.children().hide(),e.content.show(),e.onchange&&e.onchange.call(e),g&&RED.tray.resize()},collapsible:!0,menu:!1}),s=[];for(e in l=l.slice(),m)m.hasOwnProperty(e)&&m[e](c)&&l.push(e);for(o in l.forEach(function(t){try{var e,o,i=v[t];i?("function"==typeof i&&(i=i.call(i,c)),e=$("<div>",{class:"red-ui-tray-content"}).appendTo(a).hide(),i.create.call(i,e),o={id:t,label:i.label,name:i.name,iconClass:i.iconClass,content:e,onchange:function(){i.show&&i.show.call(i)}},r.addTab(o),s.push(i)):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,i,n){var a=$("#"+n+"-"+o);a.val(t[o]),a.attr("type","hidden");var e=$("<a>",{id:n+"-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){k(o,i,a.val()||"_ADD_",n,t),e.preventDefault()})}(c,o,u.defaults[o].type,p):function(t,o,i,n,e){var a,r,s,d=$("#"+n+"-"+o);0!==d.length&&(s=d.width(),a=d.attr("style"),s=null!==(a=/(^|\s|;)width\s*:\s*([^;]+)/i.exec(a))?a[2].trim():"70%",s=$("<div></div>").css({width:s,display:"inline-flex"}),r=$('<select id="'+n+"-"+o+'"></select>').appendTo(s),d.replaceWith(s),r.css({"flex-grow":1}),_(o,i,t[o],n,e),$('<a id="'+n+"-lookup-"+o+'" class="red-ui-button"><i class="fa fa-pencil"></i></a>').css({"margin-left":"10px"}).appendTo(s),$("#"+n+"-lookup-"+o).on("click",function(e){k(o,i,r.find(":selected").val(),n,t),e.preventDefault()}),e="",s=RED.nodes.node(t[o]),RED.nodes.getType(i),s&&(e=RED.utils.getNodeLabel(s,s.id)),d.val(e))}(c,o,u.defaults[o].type,p,u.defaults[o].filter):(console.log("Unknown type:",u.defaults[o].type),y(c,o,p,u.defaults))):y(c,o,p,u.defaults),E(c,u.defaults,o,p));if(/^subflow:/.test(u.type)||D(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)&&((i=$("#"+p+"-"+o)).attr("skipValidation",!0),void 0!==i.data("noderedTypedInput")?i.trigger("change",[i.typedInput("type"),i.typedInput("value")]):i.trigger("change"),i.removeAttr("skipValidation"));if(u.credentials)for(o in u.credentials)u.credentials.hasOwnProperty(o)&&((i=$("#"+p+"-"+o)).attr("skipValidation",!0),void 0!==i.data("noderedTypedInput")?i.trigger("change",[i.typedInput("type"),i.typedInput("value")]):i.trigger("change"),i.removeAttr("skipValidation"));b(c,p),g=!0,f&&r.activateTab(f),h&&h(s)}var e,o,i,n,a,g=!1;u.credentials||/^subflow:/.test(u.type)||"group"===c.type||"tab"===c.type?c.credentials?(D(c,u.credentials,c.credentials,p),t()):(o=c.type,/^subflow:/.test(o)&&(o="subflow"),e=o,o=c.id,i=function(e){e&&(c.credentials=e,c.credentials._=$.extend(!0,{},e)),t()},a=setTimeout(function(){n=RED.notify($('<p data-i18n="[prepend]editor.loadCredentials">  <img src="red/images/spin.svg"/></p>').i18n(),{fixed:!0})},800),o="credentials/"+e.replace(/\s+/g,"-")+"/"+o,$.ajax({url:o,dataType:"json",success:function(e){n&&(n.close(),n=null),clearTimeout(a),i(e)},error:function(e,t,o){n&&(n.close(),n=null),clearTimeout(a),RED.notify(RED._("editor.errors.credentialLoadFailed"),"error"),i(null)},timeout:3e4})):t()}function x(){for(var e=l.length-1;e<l.length;e++){var t=l[e];if(i=t.type,"group"===t.type)i=RED._("group.editGroup",{name:RED.utils.sanitize(t.name||t.id)});else if("_expression"===t.type)i=RED._("expressionEditor.title");else if("_js"===t.type)i=RED._("jsEditor.title");else if("_text"===t.type)i=RED._("textEditor.title");else if("_json"===t.type)i=RED._("jsonEditor.title");else if("_markdown"===t.type)i=RED._("markdownEditor.title");else if("_buffer"===t.type)i=RED._("bufferEditor.title");else if("subflow"===t.type)i=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)),i=RED._("subflow.editSubflowInstance",{name:RED.utils.sanitize(o.name)});else if(void 0!==t._def){if(void 0!==t._def.paletteLabel)try{i=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===l.length-1&&(i=RED.nodes.node(t.id)?RED._("editor.editNode",{type:RED.utils.sanitize(i)}):RED._("editor.addNewConfig",{type:RED.utils.sanitize(i)}))}}return i}function h(t,e){if(t._def.oneditsave){var o={};for(var i in t._def.defaults)t._def.defaults.hasOwnProperty(i)&&("string"==typeof t[i]||"number"==typeof t[i]?o[i]=t[i]:o[i]=$.extend(!0,{},{v:t[i]}).v);try{!0===t._def.oneditsave.call(t)&&(e.changed=!0)}catch(e){console.warn("oneditsave",t.id,t.type,e.toString())}for(i in t._def.defaults)t._def.defaults.hasOwnProperty(i)&&(null===o[i]||"string"==typeof o[i]||"number"==typeof o[i]?o[i]!==t[i]&&(e.changes[i]=o[i],e.changed=!0):"group"===t.type&&"nodes"===i||JSON.stringify(o[i])!==JSON.stringify(t[i])&&(e.changes[i]=o[i],e.changed=!0))}}function g(e,t){return e.__label__<t.__label__?-1:e.__label__>t.__label__?1:0}function _(e,o,t,i,n){if(i){var a=$("#"+i+"-edit-"+e);if(a.length)t?a.text(RED._("editor.configEdit")):a.text(RED._("editor.configAdd")),$("#"+i+"-"+e).val(t);else{var r=$("#"+i+"-"+e),i=RED.nodes.getType(o);r.children().remove();var s=(s=RED.nodes.workspace(RED.workspaces.active()))||RED.nodes.subflow(RED.workspaces.active()),d=[];"function"!=typeof n&&(n=null),RED.nodes.eachConfig(function(e){var t;e.type!=o||e.z&&e.z!==s.id||n&&!n.call(null,e)||(t=RED.utils.getNodeLabel(e,e.id),e.__label__=t+(e.d?" ["+RED._("workspace.disabled")+"]":""),d.push(e))});e=g;"function"==typeof i.sort&&(e=i.sort);try{d.sort(e)}catch(e){console.log("Definition error: "+i.type+".sort",e)}d.forEach(function(e){$('<option value="'+e.id+'"'+(t==e.id?" selected":"")+"></option>").text(RED.text.bidi.enforceTextDirectionWithUCC(e.__label__)).appendTo(r),delete e.__label__});e=o;if(void 0!==i.paletteLabel)try{e=RED.utils.sanitize(("function"==typeof i.paletteLabel?i.paletteLabel.call(i):i.paletteLabel)||o)}catch(e){console.log("Definition error: "+o+".paletteLabel",e)}r.append('<option value="_ADD_"'+(""===t?" selected":"")+">"+RED._("editor.addNewType",{type:e})+"</option>"),window.setTimeout(function(){r.trigger("change")},50)}}}function k(f,h,e,g,v){if(!c){c=!0;var m="_ADD_"==e,s=RED.nodes.getType(h),b=RED.nodes.node(e),y=[],t="",e=RED.nodes.subflow(RED.workspaces.active());if(e&&(t=e.id),null==b){for(var o in b={id:RED.nodes.id(),_def:s,type:h,z:t,users:[]},s.defaults)s.defaults[o].value&&(b[o]=JSON.parse(JSON.stringify(s.defaults[o].value)));b._=s._}l.push(b),RED.view.state(RED.state.EDITING);t={title:x(),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()};y.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,n){e.find(".red-ui-tray-header");var a=e.find(".red-ui-tray-body"),r=e.find(".red-ui-tray-footer"),e=$('<div class="red-ui-tray-footer-left"></div>').appendTo(r);$('<input id="node-config-input-node-disabled" type="checkbox">').prop("checked",!!b.d).appendTo(e).toggleButton({enabledIcon:"fa-circle-thin",disabledIcon:"fa-ban",invertState:!0}),!1!==s.hasUsers&&$('<span><i class="fa fa-info-circle"></i> <span id="red-ui-editor-config-user-count"></span></span>').css("margin-left","10px").appendTo(e),r.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>');e=["editor-tab-properties"];b._def.defaults&&b._def.defaults.hasOwnProperty("info")||e.push("editor-tab-description"),R(a,e,b,s,"node-config-input",null,function(e){y=e,b._def.exclusive?$("#red-ui-editor-config-scope").hide():$("#red-ui-editor-config-scope").show(),$("#red-ui-editor-config-scope-warning").hide();var o={};b.users.forEach(function(e){o[e.z]=!0});var t=Object.keys(o).length,i=$("#red-ui-editor-config-scope").empty();i.off("change"),i.append('<option value=""'+(b.z?"":" selected")+' data-i18n="sidebar.config.global"></option>'),i.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==b.z?" selected":"")+"></option>").text(t).appendTo(i)}),i.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==b.z?" selected":"")+"></option>").text(t).appendTo(i)}),0<t&&i.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!==s.hasUsers&&$("#red-ui-editor-config-user-count").text(RED._("editor.nodesUse",{count:b.users.length})).parent().show(),a.i18n(),r.i18n(),c=!1,n()})},close:function(){RED.workspaces.refresh(),y.forEach(function(e){e.close&&e.close.call(e)}),l.pop()},show:function(){b&&(RED.sidebar.info.refresh(b),RED.sidebar.help.show(h,!1))}};t.buttons=[{id:"node-config-dialog-cancel",text:RED._("common.label.cancel"),click:function(){var t=h,o=b.id,e=RED.nodes.getType(t);if(e.oneditcancel&&e.oneditcancel){var i=RED.nodes.node(o);if(i)try{e.oneditcancel.call(i,!1)}catch(e){console.log("oneditcancel",i.id,i.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:m?RED._("editor.configAdd"):RED._("editor.configUpdate"),class:"primary",click:function(){var e,t,o,i,n={changes:{},changed:!1,outputMap:null},a=f,r=(b.id,h),s=m,d=RED.nodes.getType(r);if(d.oneditsave)try{d.oneditsave.call(b)}catch(e){console.warn("oneditsave",b.id,b.type,e.toString())}for(e in d.defaults)!d.defaults.hasOwnProperty(e)||null!=(i="checkbox"===(o=$("#node-config-input-"+e)).attr("type")?o.prop("checked"):"format"in d.defaults[e]&&""!==d.defaults[e].format&&"DIV"===o[0].nodeName?o.text():o.val())&&i!==b[e]&&(b._def.defaults[e].type&&("_ADD_"==i&&(i=""),(t=RED.nodes.node(b[e]))&&((o=t.users).splice(o.indexOf(b),1),RED.events.emit("nodes:change",t)),(t=RED.nodes.node(i))&&(t.users.push(b),RED.events.emit("nodes:change",t))),b[e]=i);y.forEach(function(e){e.apply&&e.apply.call(e,n)}),b.label=d.label;var l=$("#red-ui-editor-config-scope").val();b.z=l,$("#node-config-input-node-disabled").prop("checked")?!0!==b.d&&(b.d=!0):!0===b.d&&delete b.d,l&&(b.users=b.users.filter(function(e){var t,o=!0;for(t in e._def.defaults)e._def.defaults.hasOwnProperty(t)&&e._def.defaults[t].type===b.type&&e[t]===b.id&&e.z!==l&&(o=!1,e[t]=null,e.dirty=!0,e.changed=!0,w(e));return o})),s&&RED.nodes.add(b),w(b);var c={};c[b.id]=!0;for(var u=b.users.slice();0<u.length;){var p=u.pop();c[p.id]||(c[p.id]=!0,p.users&&(u=u.concat(p.users)),w(p))}RED.nodes.dirty(!0),RED.view.redraw(!0),s||(RED.events.emit("editor:save",b),RED.events.emit("nodes:change",b)),RED.tray.close(function(){var e=null;v&&"function"==typeof v._def.defaults[a].filter&&(e=function(e){return v._def.defaults[a].filter.call(v,e)}),_(a,r,b.id,g,e)})}}],m||t.buttons.unshift({class:"leftButton",text:RED._("editor.configDelete"),click:function(){var t=f,e=b.id,o=h,i=RED.nodes.getType(o);try{i.ondelete&&(console.log("Deprecated API warning: config node type ",o," has an ondelete function - should be oneditdelete"),i.ondelete.call(b)),i.oneditdelete&&i.oneditdelete.call(b)}catch(e){console.log("oneditdelete",b.id,b.type,e.toString())}for(var n={t:"delete",nodes:[b],changes:{},dirty:RED.nodes.dirty()},a=0;a<b.users.length;a++){var r,s=b.users[a];for(r in n.changes[s.id]={changed:s.changed,valid:s.valid},s._def.defaults)s._def.defaults.hasOwnProperty(r)&&s[r]==e&&(n.changes[s.id][r]=e,s[r]="",s.changed=!0,s.dirty=!0);w(s)}RED.nodes.remove(e),RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(n),RED.tray.close(function(){var e=null;v&&"function"==typeof v._def.defaults[t].filter&&(e=function(e){return v._def.defaults[t].filter.call(v,e)}),_(t,o,"",g,e)})}}),RED.tray.show(t)}}function t(e,t){o.hasOwnProperty(e)?(0<l.length&&(t.parent=l[l.length-1].id),l.push({type:e}),t.title=t.title||x(),t.onclose=function(){l.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()},edit:function(r,n){var s,e,d,o,t,i;c||(s=r,e=!(c=!0),d=[],l.push(r),RED.view.state(RED.state.EDITING),o=r.type,"subflow:"==r.type.substring(0,8)&&(o="subflow"),t={title:x(),buttons:[{id:"node-dialog-delete",class:"leftButton",text:RED._("common.label.delete"),click:function(){var e=RED.nodes.dirty(),t=[],o=[],i=RED.nodes.remove(s.id);t.push(s);e={t:"delete",nodes:t=t.concat(i.nodes),links:o=o.concat(i.links),changes:{},dirty:e};RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(e),RED.tray.close()}},{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){if(s._def){if(s._def.oneditcancel)try{s._def.oneditcancel.call(s)}catch(e){console.log("oneditcancel",s.id,s.type,e.toString())}for(var e in s._def.defaults){var t;s._def.defaults.hasOwnProperty(e)&&(!(t=s._def.defaults[e]).type||(t=RED.nodes.getType(t.type))&&t.exclusive&&(""===(t=$("#node-input-"+e).val()||"")||s[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},e=RED.nodes.dirty();h(s,t),d.forEach(function(e){e.apply&&e.apply.call(e,t)});var o,i,n,a=f(s,t.outputMap);$("#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&&(n=s.changed,s.changed=!0,RED.nodes.dirty(!0),o=RED.nodes.subflow(RED.workspaces.active()),i=null,o&&(i=[],RED.nodes.eachNode(function(e){e.type=="subflow:"+RED.workspaces.active()&&(i.push({id:e.id,changed:e.changed}),e.changed=!0,e.dirty=!0,f(e))})),n={t:"edit",node:s,changes:t.changes,links:a,dirty:e,changed:n},t.outputMap&&(n.outputMap=t.outputMap),i&&(n.subflow={instances:i}),RED.history.push(n)),s.dirty=!0,w(s),RED.events.emit("editor:save",s),RED.events.emit("nodes:change",s),RED.tray.close()}}],resize:function(e){u[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()};d.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,t){s.hasOwnProperty("outputs")&&(s.__outputs=s.outputs);var o=e.find(".red-ui-tray-footer"),i=e.find(".red-ui-tray-body");i.parent().css("overflow","hidden");e=$('<div class="red-ui-tray-footer-left"></div>').appendTo(o);$('<input id="node-input-node-disabled" type="checkbox">').prop("checked",!!r.d).appendTo(e).toggleButton({enabledIcon:"fa-circle-thin",disabledIcon:"fa-ban",invertState:!0});e=["editor-tab-properties"];/^subflow:/.test(r.type)&&e.push("editor-tab-envProperties"),r._def.defaults&&r._def.defaults.hasOwnProperty("info")||e.push("editor-tab-description"),e.push("editor-tab-appearance"),R(i,e,r,r._def,"node-input",n,function(e){d=e,i.i18n(),o.i18n(),c=!1,t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),s&&!e&&RED.sidebar.info.refresh(s),RED.workspaces.refresh(),d.forEach(function(e){e.close&&e.close.call(e)}),RED.view.redraw(!0),l.pop()},show:function(){s&&(RED.sidebar.info.refresh(s),RED.sidebar.help.show(s.type,!1))}},u.hasOwnProperty(o)&&(t.width=u[o]),"subflow"===o&&(i=s.type.substring(8),t.buttons.unshift({class:"leftButton",text:RED._("subflow.edit"),click:function(){RED.workspaces.show(i),e=!0,$("#node-dialog-ok").trigger("click")}})),RED.tray.show(t))},editConfig:k,editFlow:function(n,a){var r,e;c||(c=!0,r=[],RED.view.state(RED.state.EDITING),e={title:RED._("workspace.editFlow",{name:RED.utils.sanitize(n.label)}),buttons:[{id:"node-dialog-delete",class:"leftButton"+(1===RED.workspaces.count()?" disabled":""),text:RED._("common.label.delete"),click:function(){RED.workspaces.delete(n),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();r.forEach(function(e){e.apply&&e.apply.call(e,t)});var o=$("#node-input-disabled").prop("checked");n.disabled!==o&&(t.changes.disabled=n.disabled,t.changed=!0,n.disabled=o,$("#red-ui-tab-"+n.id.replace(".","-")).toggleClass("red-ui-workspace-disabled",!!n.disabled),n.id===RED.workspaces.active()&&$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!n.disabled)),t.changed&&(e={t:"edit",changes:t.changes,node:n,dirty:e},n.changed=!0,RED.history.push(e),RED.nodes.dirty(!0),t.changes.hasOwnProperty("disabled")&&(RED.nodes.eachNode(function(e){e.z===n.id&&(e.dirty=!0)}),RED.view.redraw()),RED.workspaces.refresh(),RED.events.emit("flows:change",n)),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"),i=e.find(".red-ui-tray-body");i.parent().css("overflow","hidden");e=$('<div class="red-ui-tray-footer-left"></div>').appendTo(o);n.hasOwnProperty("disabled")||(n.disabled=!1),$('<input id="node-input-disabled" type="checkbox">').prop("checked",n.disabled).appendTo(e).toggleButton({enabledIcon:"fa-circle-thin",disabledIcon:"fa-ban",invertState:!0}),R(i,["editor-tab-flow-properties","editor-tab-envProperties"],n,{},"node-input",a,function(e){r=e,i.i18n(),o.i18n(),c=!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||n.id!==RED.workspaces.active()||RED.sidebar.info.refresh(n)}},RED.tray.show(e))},editSubflow:function(a,r){var s,d,e;c||(c=!0,s=a,d=[],l.push(a),RED.view.state(RED.state.EDITING),e={title:x(),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},e=RED.nodes.dirty();d.forEach(function(e){e.apply&&e.apply.call(e,t)});var o=$("#subflow-input-name").val();o!=s.name&&(t.changes.name=s.name,s.name=o,t.changed=!0);var i,n=s.env,a=RED.subflow.exportSubflowTemplateEnv($("#node-input-env-container").editableList("items"));a&&0<a.length&&a.forEach(function(e){"cred"===e.type&&(s.credentials=s.credentials||{_:{}},s.credentials[e.name]=e.value,s.credentials["has_"+e.name]=""!==e.value,"__PWRD__"!==e.value&&(t.changed=!0),delete e.value)}),o=a,JSON.stringify(n)!==JSON.stringify(o)&&(s.env=a,t.changes.env=s.env,t.changed=!0),t.changed&&(a=s.changed,s.changed=!0,w(s),i=[],RED.nodes.eachNode(function(e){e.type=="subflow:"+s.id&&(i.push({id:e.id,changed:e.changed}),e._def.color=s.color,e.changed=!0,e.dirty=!0,f(e),w(e))}),RED.events.emit("subflows:change",s),RED.nodes.dirty(!0),a={t:"edit",node:s,changes:t.changes,dirty:e,changed:a,subflow:{instances:i}},RED.history.push(a)),s.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"),i=$("<div/>",{class:"red-ui-tray-footer-left"}).appendTo(o),n=e.find(".red-ui-tray-body");n.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(i),s&&RED.sidebar.info.refresh(s);R(n,["editor-tab-properties","editor-tab-subflow-module","editor-tab-description","editor-tab-appearance"],a,a._def,"node-input",r,function(e){d=e,$("#subflow-input-name").val(a.name),RED.text.bidi.prepareInput($("#subflow-input-name")),n.i18n(),o.i18n(),c=!1,t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(s),RED.workspaces.refresh(),d.forEach(function(e){e.close&&e.close.call(e)}),l.pop(),s=null},show:function(){}},RED.tray.show(e))},editGroup:function(n,a){var i,r,e;c||(c=!0,i=n,l.push(n),RED.view.state(RED.state.EDITING),r=[],e={title:x(),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();h(i,t),r.forEach(function(e){e.apply&&e.apply.call(e,t)}),t.changed&&(e=i.changed,i.changed=!0,RED.nodes.dirty(!0),e={t:"edit",node:i,changes:t.changes,dirty:o,changed:e},RED.history.push(e),RED.events.emit("groups:change",i)),i.dirty=!0,RED.tray.close(),RED.view.redraw(!0)}}],resize:function(e){u.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()};r.forEach(function(e){e.resize&&e.resize.call(e,t)})},open:function(e,t){var o=e.find(".red-ui-tray-footer"),i=($("<div/>",{class:"red-ui-tray-footer-left"}).appendTo(o),e.find(".red-ui-tray-body"));i.parent().css("overflow","hidden");R(i,["editor-tab-properties","editor-tab-envProperties","editor-tab-description"],n,n._def,"node-input",a,function(e){r=e,i.i18n(),c=!1,t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(i),r.forEach(function(e){e.close&&e.close.call(e)}),l.pop(),i=null},show:function(){}},u.hasOwnProperty("group")&&(e.width=u.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)},buildEditForm:function(e,t,o,a,i){return(e=$('<form id="'+t+'" class="form-horizontal" autocomplete="off"></form>').appendTo(e)).html($("script[data-template-name='"+o+"']").html()),a=a||"node-red",e.find("[data-i18n]").each(function(){for(var e=$(this).attr("data-i18n").split(";"),t=0;t<e.length;t++){var o,i,n=e[t];-1===n.indexOf(":")&&(i="",0===n.indexOf("[")&&(i=(o=n.split("]"))[0]+"]",n=o[1]),e[t]=i+a+":"+n)}$(this).attr("data-i18n",e.join(";"))}),$('<span style="position: absolute; top: -2000px;"><input id="red-ui-trap-password" type="password"/></span>').prependTo(e),$('<span style="position: absolute; top: -2000px;"><input id="red-ui-trap-username"  type="text"/></span>').prependTo(e),$('<span style="position: absolute; top: -2000px;"><input id="red-ui-trap-user"  type="text"/></span>').prependTo(e),e.on("submit",function(e){e.preventDefault()}),e.find("input").attr("autocomplete","off"),e},validateNode:w,updateNodeProperties:f,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&&(m[e]=o),v[e]=t}}}(),function(){function y(e,t,o,i){var n,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),n=$("<input>",{type:"text",id:e,placeholder:i}).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(),n.val("")})),a}RED.editor.registerEditPane("editor-tab-appearance",function(n){return{label:RED._("editor-tab.appearance"),name:RED._("editor-tab.appearance"),iconClass:"fa fa-object-group",create:function(e){this.content=e,function(e,o){var t,e=$('<form class="dialog-form form-horizontal" autocomplete="off"></form>').appendTo(e);{var i;"subflow"===o.type&&(n=$("<div/>",{class:"form-row"}).appendTo(e),$("<label/>",{for:"subflow-appearance-input-category","data-i18n":"editor:subflow.category"}).appendTo(n),i=$("<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),(s=RED.palette.getCategories()).sort(function(e,t){return e.label.localeCompare(t.label)}),s.forEach(function(e){i.append($("<option/>").val(e.id).text(e.label))}),i.append($("<option/>").attr("disabled",!0).text("---")),i.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(o.category||"subflows"),o.id,$("#red-ui-editor-subflow-user-count").text(RED._("subflow.subflowInstances",{count:o.instances.length})).show())}$('<div class="form-row"><label for="node-input-show-label-btn" 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")}),o.hasOwnProperty("l")||(o.l=!o._def.hasOwnProperty("showLabel")||o._def.showLabel);$("#node-input-show-label").prop("checked",o.l).trigger("change"),"subflow"===o.type&&(d=o.color||"#DDAA99",l=$("<div/>",{class:"form-row"}).appendTo(e),$("<label/>").text(RED._("editor.color")).appendTo(l),RED.editor.colorPicker.create({id:"red-ui-editor-node-color",value:d,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(l),$("#red-ui-editor-node-color").on("change",function(e){var t=$(this).val();r.css("backgroundColor",t);var o=RED.utils.getDarkerColor(t);o!==t&&r.css("border-color",o)}));{var n,a,r,s,d,l,c;o._def.defaults&&o._def.defaults.hasOwnProperty("icon")||(n=$('<div class="form-row"></div>').appendTo(e),$('<label data-i18n="editor.settingIcon">').appendTo(n),a=$('<button type="button" class="red-ui-button red-ui-editor-node-appearance-button">').appendTo(n),$('<i class="fa fa-caret-down"></i>').appendTo(a),r=$("<div>",{class:"red-ui-search-result-node"}).appendTo(a),s=RED.utils.getNodeColor(o.type,o._def),d=RED.utils.getNodeIcon(o._def,o),r.css("backgroundColor",s),(l=RED.utils.getDarkerColor(s))!==s&&r.css("border-color",l),c=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(r),RED.utils.createIconElement(d,c,!0),a.on("click",function(e){e.preventDefault();var t=$("#red-ui-editor-node-icon").val()||"",e=t?RED.utils.separateIconPath(t):RED.utils.getDefaultNodeIcon(o._def,o),t=RED.utils.getNodeColor(o.type,o._def);"subflow"===o.type&&(t=$("#red-ui-editor-node-color").val()),RED.editor.iconPicker.show(a,t,e,!1,function(e){$("#red-ui-editor-node-icon").val(e||"");e=RED.utils.getNodeIcon(o._def,{type:o.type,icon:e});RED.utils.createIconElement(e,c,!0)})}),RED.popover.tooltip(a,function(){return $("#red-ui-editor-node-icon").val()||RED._("editor.default")}),$('<input type="hidden" id="red-ui-editor-node-icon">').val(o.icon).appendTo(n))}$('<div class="form-row"><span data-i18n="editor.portLabels"></span></div>').appendTo(e);var u=o.inputs||o._def.inputs||0,p=o.outputs||o._def.outputs||0;"subflow"===o.type&&(u=o.in.length,p=o.out.length);var f=o.inputLabels||[],h=o.outputLabels||[],g=o._def.inputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),v=o._def.outputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel");$('<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);var m=$("#red-ui-editor-node-label-form-inputs");if(0<u)for(t=0;t<u;t++)y("input",t,f[t],g).appendTo(m);else y().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 b=$("#red-ui-editor-node-label-form-outputs");if(0<p)for(t=0;t<p;t++)y("output",t,h[t],v).appendTo(b);else y().appendTo(b)}(this.content,n),"subflow"===n.type?this.defaultIcon="node-red/subflow.svg":(e=RED.utils.getDefaultNodeIcon(n._def,n),this.defaultIcon=e.module+"/"+e.file,n.icon&&n.icon!==this.defaultIcon?this.isDefaultIcon=!1:this.isDefaultIcon=!0)},resize:function(e){},close:function(){},show:function(){!function(e){var t,o=e._def.inputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),i=e._def.outputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),n=$("#red-ui-editor-node-label-form-inputs"),a=$("#red-ui-editor-node-label-form-outputs"),r=$("#node-input-inputs").val();void 0===r?t="subflow"===e.type?e.in.length:e.inputs||e._def.inputs||0:(t=Math.min(1,Math.max(0,parseInt(r))),isNaN(t)&&(t=0));var s,d,l=n.children(),c=l.length;1===c&&$(l[0]).hasClass("red-ui-editor-node-label-form-none")&&c--;if(c<t)for(0===c&&$(l[0]).remove(),d=c;d<t;d++)y("input",d,"",o).appendTo(n);else if(t<c){for(d=t;d<c;d++)$(l[d]).remove();0===t&&y().appendTo(n)}r=$("#node-input-outputs").val();{var u,p;void 0===r?"subflow"===e.type?s=e.out.length:t=e.outputs||e._def.outputs||0:isNaN(r)?(u=JSON.parse(r),e=Object.keys(u),l=a.children(),1===(c=l.length)&&$(l[0]).hasClass("red-ui-editor-node-label-form-none")&&c--,s=0,p=[],e.forEach(function(e){var t=$("#red-ui-editor-node-label-form-output-"+e).parent();0===t.length&&-1!==u[e]?(0===c&&($(l[0]).remove(),c=-1),t=y("output",e,"",i)):t.detach(),-1!==u[e]&&(s++,p.push({i:parseInt(u[e]),r:t}))}),p.sort(function(e,t){return e.i-t.i}),p.forEach(function(e,t){e.r.find("label").text(t+1+"."),e.r.appendTo(a)}),0===p.length&&y("output",d,"").appendTo(a)):s=Math.max(0,parseInt(r))}l=a.children(),1===(c=l.length)&&$(l[0]).hasClass("red-ui-editor-node-label-form-none")&&c--;if(c<s)for(0===c&&$(l[0]).remove(),d=c;d<s;d++)y("output",d,"").appendTo(a);else if(s<c){for(d=s;d<c;d++)$(l[d]).remove();0===s&&y().appendTo(a)}}((this.content,n))},apply:function(e){var t,o;!function(e,t,o){var i=$("#red-ui-editor-node-label-form-inputs").children().find("input"),n=$("#red-ui-editor-node-label-form-outputs").children().find("input"),a=!1,r=!1,s=i.map(function(){var e=$(this).val();return a=a||""!==e,e}).toArray().slice(0,e.inputs);(void 0===e.inputLabels&&a||void 0!==e.inputLabels&&JSON.stringify(s)!==JSON.stringify(e.inputLabels))&&(t.inputLabels=e.inputLabels,e.inputLabels=s,r=!0);a=!1,s=new Array(e.outputs),n.each(function(){var e,t=$(this).attr("id").substring("red-ui-editor-node-label-form-output-".length);o&&o.hasOwnProperty(t)&&-1===(t=parseInt(o[t]))||(e=$(this).val(),a=a||""!==e,s[t]=e)}),(void 0===e.outputLabels&&a||void 0!==e.outputLabels&&JSON.stringify(s)!==JSON.stringify(e.outputLabels))&&(t.outputLabels=e.outputLabels,e.outputLabels=s,r=!0);return r}(n,e.changes,e.outputMap)||(e.changed=!0),n._def.defaults&&n._def.defaults.hasOwnProperty("icon")||(t=$("#red-ui-editor-node-icon").val()||"",this.isDefaultIcon?""!==t&&t!==this.defaultIcon?(e.changes.icon=n.icon,n.icon=t,e.changed=!0):(o=(o=RED.utils.getDefaultNodeIcon(n._def,n)).module+"/"+o.file,this.defaultIcon!==o&&(e.changes.icon=n.icon,n.icon=o,e.changed=!0)):t!==n.icon&&(e.changes.icon=n.icon,n.icon=t,e.changed=!0)),"subflow"===n.type&&((i="subflows"===(i="_custom_"===(i=$("#subflow-appearance-input-category").val().trim())&&""===(i=$("#subflow-appearance-input-custom-category").val().trim())?n.category:i)?"":i)!=n.category&&(e.changes.category=n.category,n.category=i,e.changed=!0),n.color!==(i=$("#red-ui-editor-node-color").val())&&(e.changes.color=n.color,n.color=i,e.changed=!0,RED.utils.clearNodeColorCache(),"subflow"===n.type&&(RED.nodes.getType("subflow:"+n.id).color=i)));var i=!n._def.hasOwnProperty("showLabel")||n._def.showLabel;$("#node-input-show-label").prop("checked")?i?(n.hasOwnProperty("l")&&!n.l&&(e.changes.l=n.l,e.changed=!0),delete n.l):(n.l||(e.changes.l=n.l,e.changed=!0),n.l=!0):i?(!1!==n.l&&(e.changes.l=n.l,e.changed=!0),n.l=!1):(n.hasOwnProperty("l")&&n.l&&(e.changes.l=n.l,e.changed=!0),delete n.l)}}})}(),RED.editor.registerEditPane("editor-tab-description",function(i){return{label:RED._("editor-tab.description"),name:RED._("editor-tab.description"),iconClass:"fa fa-file-text-o",create:function(e){this.editor=function(e,t){var o=$('<form class="dialog-form form-horizontal" autocomplete="off"></form>').appendTo(e),e=($("<div></div>").appendTo(o),$('<div class="form-row node-text-editor-row" style="position:relative; padding-top: 4px; height: 100%"></div>').appendTo(o)),o="node-info-input-info-editor-"+Math.floor(1e3*Math.random());$('<div style="height: 100%" class="node-text-editor" id="'+o+'" ></div>').appendTo(e);o=RED.editor.createEditor({id:o,mode:"ace/mode/markdown",value:""});t.info&&o.getSession().setValue(t.info,-1);return t.infoEditor=o}(e,i),RED.e=this.editor},resize:function(e){this.editor.resize()},close:function(){this.editor.destroy(),this.editor=null},show:function(){this.editor.focus()},apply:function(e){var t=i.info,o=this.editor.getValue();t?""===o.trim()?(e.changed=!0,e.changes.info=t,delete i.info):o!==t&&(e.changed=!0,e.changes.info=t,i.info=o):""!==o.trim()&&(e.changed=!0,e.changes.info=void 0,i.info=o)}}}),RED.editor.registerEditPane("editor-tab-envProperties",function(n){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,n)},resize:function(e){this.list.editableList("height",e.height)},close:function(){},apply:function(t){var e,o=n.env,i=[];/^subflow:/.test(n.type)&&(i=RED.subflow.exportSubflowInstanceEnv(n)),this.list.editableList("items").each(function(e,t){var o,t=t.data("data");t.nameField&&t.valueField&&""!==(o={name:t.nameField.val(),value:t.valueField.typedInput("value"),type:t.valueField.typedInput("type")}).name.trim()&&i.push(o)}),i&&0<i.length&&i.forEach(function(e){"cred"===e.type&&(n.credentials=n.credentials||{_:{}},n.credentials[e.name]=e.value,n.credentials["has_"+e.name]=""!==e.value,"__PWRD__"!==e.value&&(t.changed=!0),delete e.value)}),e=i,JSON.stringify(o)!==JSON.stringify(e)&&(t.changes.env=n.env,0===i.length?delete n.env:n.env=i,t.changed=!0)}}}),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();o.label!=t&&(e.changes.label=o.label,e.changed=!0,o.label=t);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-ui-workspace").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=d.type;"subflow"===d.type?t="subflow-template":"subflow:"==d.type.substring(0,8)&&(t="subflow");var o="node-red"===d._def.set.module?"node-red":d._def.set.id,i="dialog-form";this.inputClass="node-input","config"===d._def.category&&"group"!==t&&(this.inputClass="node-config-input",i="node-config-dialog-edit-form"),RED.editor.buildEditForm(e,i,t,o,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,i;if(d._def.defaults)for(o in d._def.defaults)if(d._def.defaults.hasOwnProperty(o)){var n,a,r,s=$("#"+this.inputClass+"-"+o);if("checkbox"===s.attr("type")?e=s.prop("checked"):"select"===s.prop("nodeName")&&"multiple"===s.attr("multiple")?null==(e=s.val())&&(e=[]):e="format"in d._def.defaults[o]&&""!==d._def.defaults[o].format&&"DIV"===s[0].nodeName?s.text():s.val(),null!=e){if("outputs"===o){if(""===e.trim())continue;isNaN(e)?(t.outputMap=JSON.parse(e),n=0,a=!1,Object.keys(t.outputMap).forEach(function(e){isNaN(e)?(n++,delete t.outputMap[e]):(t.outputMap[e]=t.outputMap[e]+"","-1"!==t.outputMap[e]?(n++,t.outputMap[e]!==e?a=!0:delete t.outputMap[e]):a=!0)}),e=n,a&&(t.changed=!0)):e=parseInt(e)}d._def.defaults[o].type&&"_ADD_"==e&&(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&&(i=d._def.credentials,i=function(e,t,o){var i,n=!1;e.credentials?e.credentials._||(e.credentials._={}):e.credentials={_:{}};for(i in t)if(t.hasOwnProperty(i)){var a=$("#"+o+"-"+i);if(0<a.length){a=a.val();if("password"==t[i].type){if(e.credentials["has_"+i]=""!==a,"__PWRD__"==a)continue;n=!0}(e.credentials[i]=a)!=e.credentials._[i]&&(n=!0)}}return n}(d,i,this.inputClass),t.changed=t.changed||i)}}}),function(){function i(t,o){var i;t.on("change keyup paste",function(){i=i||setTimeout(function(){var e=o(t.val());t.toggleClass("input-error",!!e),i=null})})}RED.editor.registerEditPane("editor-tab-subflow-module",function(n){return{label:RED._("editor-tab.module"),name:RED._("editor-tab.module"),iconClass:"fa fa-cube",create:function(e){!function(e,t){$('<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);var o=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),i($("#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"}),i($("#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"});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"],t={types:e.map(function(e){return{value:e,label:"none"===e?RED._("editor:subflow.licenseNone"):e,hasValue:!1}})};t.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)}(e,n)},resize:function(e){},close:function(){},apply:function(e){var t,o,i=function(){var t,o={};["module","type","version","author","desc","keywords"].forEach(function(e){(t=$("#subflow-input-module-"+e).val().trim())&&(o[e]=t)});var e=$("#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=n.meta,o=i,JSON.stringify(t)!==JSON.stringify(o)&&(e.changes.meta=n.meta,n.meta=i,e.changed=!0)}}})}(),RED.editor.registerTypeEditor("_buffer",{show:function(e){var n=e.value,t=e.complete;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);var s,a,r=[],o={title:e.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){t(JSON.stringify(s)),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").height();a&&a.resize(t)},open:function(e){e.find(".red-ui-tray-body");var t,e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_buffer","editor");(r=RED.editor.createEditor({id:"red-ui-editor-type-buffer-str",value:"",mode:"ace/mode/text"})).getSession().setValue(n||"",-1),bufferBinEditor=RED.editor.createEditor({id:"red-ui-editor-type-buffer-bin",value:"",mode:"ace/mode/text",readOnly:!0});function i(e){for(var t=!0,o="string"==typeof e,i=[],n=0,a=(s=o?function(e){for(var t=[],o=0,i=e.length,o=0;o<i;o++){var n=e.charCodeAt(o);n<128?t.push(n):(n<2048?t.push(192|n>>6):(n<55296||57344<=n?t.push(224|n>>12):(o++,n=65536+((1023&n)<<10|1023&e.charAt(o)),t.push(240|n>>18),t.push(128|n>>12&63)),t.push(128|n>>6&63)),t.push(128|63&n))}return t}(e):e).length,n=0;n<a;n++){var r=parseInt(s[n]);if(!o&&(isNaN(r)||r<0||255<r)){t=!1;break}0<n&&(n%8==0?n%16==0?i.push("\n"):i.push("  "):i.push(" ")),i.push((r<16?"0":"")+r.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(i.join(""),1)),t}function o(){var e=r.getValue(),t=!1;if(/^[\s]*\[[\s\S]*\][\s]*$/.test(e)){t=!0;try{var o=JSON.parse(e),t=i(o)}catch(e){t=!1}}t||i(e)}r.getSession().on("change",function(){clearTimeout(t),t=setTimeout(o,200)}),o(),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");e-=$(o.children()[0]).outerHeight(!0);o=$(o.children()[1]);e-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#red-ui-editor-type-buffer-str").css("height",e-5+"px"),r.resize();e=$("#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(){e.onclose&&e.onclose(),r.destroy(),bufferBinEditor.destroy()},show:function(){}};RED.tray.show(o)}}),RED.editor.codeEditor=function(){const o="monaco",e={lib:"ace",options:{}};var i=null,n=!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.ace),n=i.init()}catch(e){i=null,console.warn("Problem initialising '"+t+"' code editor",e)}n||(i=RED.editor.codeEditor.ace,n=i.init())},get settings(){return RED.settings.get("codeEditor")||e},get editor(){return i},create:function(e){return e||(console.warn("createEditor() options are missing"),e={}),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)}}}(),RED.editor.colorPicker=RED.colorPicker={create:function(c){var e=c.value,t=c.id,u=c.palette||[],p=c.cellWidth||30,f=c.cellHeight||30,h=c.cellMargin||2,g=c.cellPerRow||6,o=$("<div>",{style:"display:inline-block"}),v=$("<input/>",{id:t,type:"hidden",value:e}).appendTo(o),m=$("<input/>",{id:t+"-opacity",type:"hidden",value:c.hasOwnProperty("opacity")?c.opacity:"1"}).appendTo(o),b=$('<button type="button" class="red-ui-button red-ui-editor-node-appearance-button">').appendTo(o);$('<i class="fa fa-caret-down"></i>').appendTo(b);var i=$("<div>",{class:"red-ui-search-result-node"}).appendTo(b);function y(e){var t,o;"none"===e?(n.addClass("red-ui-color-picker-cell-none").css({"background-color":"",opacity:1}),i.css({"border-color":""})):(t=parseFloat(m.val()),n.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="",i.css({"border-color":o})),c.hasOwnProperty("opacity")&&$(".red-ui-color-picker-opacity-slider-overlay").css({"background-image":"linear-gradient(90deg, transparent 0%, "+e+" 100%)"})}$("<div>",{class:"red-ui-color-picker-cell-none"}).appendTo(i);var n=$("<div>",{class:"red-ui-color-picker-swatch"}).appendTo(i);return b.on("click",function(e){var t=u.length,o=$("<div/>",{class:"red-ui-color-picker"}).css({width:(p+h+h)*g+"px",height:Math.ceil(t/g)*(f+h+h)+"+px"}),i=0,n=null;n=$("<div/>").appendTo(o);var a,r,s,d=$("<input>",{type:"text",value:v.val()}).appendTo(n),l=d;d.on("change",function(e){var t=d.val();v.val(t).trigger("change"),y(t)}),c.none&&(n=$("<div/>").appendTo(o),$("<button/>",{class:"red-ui-color-picker-cell red-ui-color-picker-cell-none"}).css({width:p+"px",height:f+"px",margin:h+"px"}).appendTo(n).on("click",function(e){e.preventDefault(),d.val("none"),d.trigger("change")})),u.forEach(function(t){i%g==0&&(n=$("<div/>").appendTo(o)),$("<button/>",{class:"red-ui-color-picker-cell"}).css({width:p+"px",height:f+"px",margin:h+"px",backgroundColor:t,"border-color":RED.utils.getDarkerColor(t)}).appendTo(n).on("click",function(e){e.preventDefault(),d.val(t),d.trigger("change")}),i++}),(c.none||c.hasOwnProperty("opacity"))&&(n=$("<div/>").appendTo(o),c.hasOwnProperty("opacity")&&((a=$("<div>",{class:"red-ui-color-picker-opacity-slider"}).appendTo(n)).on("mousedown",function(e){e.target!==r[0]&&(e=e.offsetX/a.width(),r.css({left:e*(a.width()-r.outerWidth())+"px"}),e=Math.floor(100*e),m.val(e/100),s.text(e+"%"),y(v.val()))}),$("<div>",{class:"red-ui-color-picker-opacity-slider-overlay"}).appendTo(a),r=$("<div>",{class:"red-ui-color-picker-opacity-slider-handle red-ui-button red-ui-button-small"}).appendTo(a).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);m.val((t=99===t?100:t)/100),s.text(t+"%"),y(v.val())}}),s=$("<small></small>").appendTo(n),setTimeout(function(){r.css({left:parseFloat(m.val())*(a.width()-r.outerWidth())+"px"}),s.text(Math.floor(100*m.val())+"%")},50)));t=RED.popover.panel(o);setTimeout(function(){y(v.val())},50),t.show({target:b,onclose:function(){b.focus()}}),l&&l.focus()}),setTimeout(function(){y(v.val())},50),o}},RED.editor.envVarList=function(){var p="en-US",f=["str","num","bool","json","bin","env"],h=["str","num","bool","json","bin","env","cred"];function g(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(l,c){var u="subflow"===c.type;l.css({"min-height":"150px","min-width":"450px"}).editableList({header:u?$('<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){u&&t.addClass("red-ui-editor-subflow-env-editable");var i=$("<div/>").appendTo(t),n=null,a=null,n=$("<input/>",{class:"node-input-env-name",type:"text",placeholder:RED._("common.label.name")}).attr("autocomplete","disable").appendTo(i).val(o.name);(a=$("<input/>",{style:"width:100%",class:"node-input-env-value",type:"text"}).attr("autocomplete","disable").appendTo(i)).typedInput({default:"str",types:u?f:h}),a.typedInput("type",o.type),"cred"!==o.type||o.value?a.typedInput("value",o.value):c.credentials&&c.credentials[o.name]?a.typedInput("value",c.credentials[o.name]):c.credentials&&c.credentials["has_"+o.name]?a.typedInput("value","__PWRD__"):a.typedInput("value",""),o.nameField=n,o.valueField=a;var r=$("<a/>",{href:"#",class:"red-ui-editableList-item-remove red-ui-button red-ui-button-small"}).appendTo(i);$("<i/>",{class:"fa "+(o.parent?"fa-reply":"fa-remove")}).appendTo(r);var s,d=RED.popover.tooltip(r,RED._("subflow.env.remove"));r.on("click",function(e){e.preventDefault(),d.close(),t.parent().addClass("red-ui-editableList-item-deleting"),t.fadeOut(300,function(){l.editableList("removeItem",o)})}),u&&("cred"===o.type?(o.ui=o.ui||{icon:"",type:"cred"},o.ui.type="cred"):o.ui=o.ui||{icon:"",type:"input",opts:{types:f}},o.ui.label=o.ui.label||{},o.ui.type=o.ui.type||"input",s=$("<div/>").appendTo(t).hide(),$('<a href="#"><i class="fa fa-angle-right"></a>').prependTo(i).on("click",function(e){e.preventDefault(),$(this).hasClass("expanded")?(s.slideUp(),$(this).removeClass("expanded")):(s.slideDown(),$(this).addClass("expanded"))}),function(e,r,t,i){e.addClass("red-ui-editor-subflow-env-ui-row");var o=$("<div></div>").appendTo(e);$("<div></div>").appendTo(o),$("<div>").text(RED._("editor.icon")).appendTo(o),$("<div>").text(RED._("editor.label")).appendTo(o),$("<div>").text(RED._("editor.inputType")).appendTo(o);o=$("<div></div>").appendTo(e);$('<div><i class="red-ui-editableList-item-handle fa fa-bars"></i></div>').appendTo(o);var n={input:{types:f},select:{opts:[]},spinner:{},cred:{}};r.opts?n[r.type]=r.opts:r.opts=n[r.type];var e=$("<div></div>").appendTo(o),a=$('<a href="#"></a>').appendTo(e);a.on("click",function(e){e.preventDefault();e=r.icon||"",e=e?RED.utils.separateIconPath(e):{};RED.editor.iconPicker.show(a,null,e,!0,function(e){a.empty();var t=e||"",e=RED.utils.separateIconPath(t);e&&$('<i class="fa"></i>').addClass(e.file).appendTo(a),r.icon=t})}),r.icon&&(s=RED.utils.separateIconPath(r.icon),$('<i class="fa '+s.file+'"></i>').appendTo(a));var e=$("<div></div>").appendTo(o),s=r.label&&r.label[p]||"",d=$('<input type="text">').val(s).appendTo(e);(r.labelField=d).on("change",function(e){r.label=r.label||{};var t=$(this).val().trim();""===t?delete r.label[p]:r.label[p]=t});e=$('<span class="red-ui-editor-subflow-env-lang-icon"><i class="fa fa-language"></i></span>').appendTo(e);RED.popover.tooltip(e,function(){var e=Object.keys(r.label),o=$("<div>");return-1===e.indexOf(p)&&(e.push(p),e.sort()),e.forEach(function(e){var t=$("<div>").appendTo(o);$("<span>").css({display:"inline-block",width:"120px"}).text(RED._("languages."+e)+(e===p?"*":"")).appendTo(t),$("<span>").text(r.label[e]||"").appendTo(t)}),o}),t.on("change",function(e){d.attr("placeholder",$(this).val())});var l,c,o=$("<div></div>").appendTo(o),u=$('<input type="text">').css("width","100%").appendTo(o);"input"===r.type&&u.val(r.opts.types.join(","));u.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:f,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"),c=$("<select></select>").appendTo(e),r.opts&&Array.isArray(r.opts.opts)&&r.opts.opts.forEach(function(e){var t=g(e.l,e.l["en-US"]||e.v,p);$("<option>").val(e.v).text(t).appendTo(c)}),c.on("change",function(e){var t=c.val();i.typedInput("value",t)}),c.val(i.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,i){var o=$("<div>").appendTo(e),n=g(i.l,"",p);i.label=$('<input type="text">').val(n).appendTo(o),i.label.on("keydown",function(e){13===e.keyCode&&(i.input.focus(),e.preventDefault())});o=$('<span class="red-ui-editor-subflow-env-lang-icon"><i class="fa fa-language"></i></span>').appendTo(o);RED.popover.tooltip(o,function(){return p}),i.input=$('<input type="text">').val(i.v).appendTo(e),i.input.on("keydown",function(e){var t,o;13===e.keyCode&&((o=a.editableList("indexOf",i))+1===a.editableList("length")?(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<r.opts.opts.length?r.opts.opts.forEach(function(e){a.editableList("addItem",$.extend(!0,{},e))}):a.editableList("addItem",{}),{onclose:function(){var e=a.editableList("items"),n=[];e.each(function(e,t){var o=t.data("data"),i=o.label.val().trim(),t=o.input.val();0<i.length&&(o.l=o.l||{},o.l[p]=i),o.v=t,(0<i.length||0<t.length)&&(o={l:o.l,v:o.v},n.push(o))}),r.opts.opts=n,u.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),(l=$('<input type="checkbox">').appendTo(e)).on("change",function(e){i.typedInput("value",$(this).prop("checked")?"true":"false")}),l.prop("checked","true"===i.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 o=$('<div class="red-ui-editor-subflow-env-input-type"></div>').appendTo(e),i=$('<div class="placeholder-input">').appendTo(o);$('<span><i class="fa fa-sort-numeric-asc"></i></span>').appendTo(i);var n=r.opts&&r.opts.min,e=r.opts&&r.opts.max,o="";void 0!==n&&void 0!==e?o=Math.min(n,e)+" - "+Math.max(n,e):void 0!==n?o="> "+n:void 0!==e&&(o="< "+e),$("<span>").css("margin-left","15px").text(o).appendTo(i)},expand:{icon:"fa-caret-down",content:function(e){var t=$('<div class="red-ui-editor-subflow-ui-edit-panel">').appendTo(e);t.css("padding","8px 5px");var o=r.opts.min,e=r.opts.max,i=$('<input type="number" style="margin-bottom:0; width:60px">');i.val(o);var n=$('<input type="number" style="margin-bottom:0; width:60px">');return n.val(e),$('<div class="form-row" style="margin-bottom:3px"><label>'+RED._("editor.spinner.min")+"</label></div>").append(i).appendTo(t),$('<div class="form-row" style="margin-bottom:0"><label>'+RED._("editor.spinner.max")+"</label></div>").append(n).appendTo(t),{onclose:function(){var e=i.val().trim(),t=n.val().trim();""!==e?r.opts.min=parseInt(e):delete r.opts.min,""!==t?r.opts.max=parseInt(t):delete r.opts.max,u.typedInput("value",Date.now())}}}}},{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(r.type=$(this).typedInput("type"),r.opts=n[r.type],"input"===r.type?u.typedInput("value",r.opts.types.join(",")):u.typedInput("value",Date.now()),r.type){case"input":i.typedInput("types",r.opts.types);break;case"select":i.typedInput("types",["str"]);break;case"checkbox":i.typedInput("types",["bool"]);break;case"spinner":i.typedInput("types",["num"]);break;case"cred":i.typedInput("types",["cred"]);break;default:i.typedInput("types",f)}"checkbox"===r.type?i.typedInput("type","bool"):"spinner"===r.type&&i.typedInput("type","num"),"checkbox"!==r.type&&(l=null)}).on("change",function(e,t){var o;"input"===r.type&&(o=u.typedInput("value"),r.opts.types=""===o?["str"]:o.split(","),i.typedInput("types",r.opts.types))}),i.on("change",function(e){l&&l.prop("checked","true"===$(this).typedInput("value"))}),u.typedInput("type",r.type)}(s,o.ui,n,a),n.trigger("change"))},sortable:".red-ui-editableList-item-handle",removable:!1});var e,o={},i=[];if(!/^subflow:/.test(c.type)||(e=RED.nodes.subflow(c.type.substring(8))).env&&e.env.forEach(function(e){var t={name:e.name,parent:{type:e.type,value:e.value,ui:e.ui}};i.push(t),o[e.name]=t}),c.env)for(var t=0;t<c.env.length;t++){var n=c.env[t];o.hasOwnProperty(n.name)?(o[n.name].type=n.type,o[n.name].value=n.value):i.push({name:n.name,type:n.type,value:n.value,ui:n.ui})}i.forEach(function(e){e.parent&&e.parent.ui&&"hide"===e.parent.ui.type||!u&&e.parent||l.editableList("addItem",JSON.parse(JSON.stringify(e)))})},setLocale:function(e,t){p=e,t&&t.editableList("items").each(function(e,t){var o=$(this).data("data"),i=o.ui.labelField;i.val(g(o.ui.label,"",p)),i.timeout&&(clearTimeout(i.timeout),delete i.timeout),i.addClass("input-updated"),i.timeout=setTimeout(function(){delete i.timeout,i.removeClass("input-updated")},3e3)})},lookupLabel:g,DEFAULT_ENV_TYPE_LIST:f,DEFAULT_ENV_TYPE_LIST_INC_CRED:h}}(),function(){var s={};RED.editor.registerTypeEditor("_expression",{show:function(e){var p,d,f,i,n=e.parent||"_",a=e.value,t=e.complete;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);var r={title:e.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){$("#red-ui-editor-type-expression-help").text(""),t(p.getValue()),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").height();i&&i.resize(t)},open:function(e){e.find(".red-ui-tray-body").addClass("red-ui-editor-type-expression");var e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_expression","editor"),l=$("#red-ui-editor-type-expression-func");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",options:{enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0}});var c=null,u=-1;p.getSession().setValue(a||"",-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,i=null;if((c=t)&&"keyword"===t.type)o=e.row,i=t;else for(var n=0,a=!1,r=t?("paren.rparen"===t.type&&(u=e.column,n=e.column-(t.start+t.value.length)),o=e.row,t.index):(o=e.row-1,-1);null===i&&-1<o;){var s=p.getSession().getTokens(o);for(-1===r&&(r=s.length-1);-1<r;){var d=s[r].type;if(a){if("keyword"===d){i=s[r];break}a=!1}"paren.lparen"===d?n-=s[r].value.length:"paren.rparen"===d&&(n+=s[r].value.length),n<0&&(a=!0,n=0),r--}i||o--}p.session.removeMarker(null),i&&l.val(i.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();var t,e=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")}),d=RED.editor.createEditor({id:"red-ui-editor-type-expression-test-data",value:s[n]||'{\n    "payload": "hello world"\n}',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"))});function o(){var e,t,o=d.getValue(),i=p.getValue(),n=!1,a=/(^|[^a-zA-Z0-9_'"])msg([^a-zA-Z0-9_'"]|$)/.test(i);$(".red-ui-editor-type-expression-legacy").toggle(a);try{(t=jsonata(i)).assign("flowContext",function(e){return n=!0,null}),t.assign("globalContext",function(e){return n=!0,null})}catch(e){return void f.setValue(RED._("expressionEditor.errors.invalid-expr",{message:e.message}),-1)}try{e=JSON.parse(o)}catch(e){return void f.setValue(RED._("expressionEditor.errors.invalid-msg",{message:e.toString()}))}try{var r,s=t.evaluate(a?{msg:e}:e);if(n)return void f.setValue(RED._("expressionEditor.errors.context-unsupported"),-1);r=void 0!==s?JSON.stringify(s,null,4):RED._("expressionEditor.noMatch"),f.setValue(r,-1)}catch(e){f.setValue(RED._("expressionEditor.errors.eval",{message:e.message}),-1)}}d.getSession().on("change",function(){clearTimeout(t),t=setTimeout(o,200),s[n]=d.getValue()}),p.getSession().on("change",function(){clearTimeout(t),t=setTimeout(o,200)}),f=RED.editor.createEditor({id:"red-ui-editor-type-expression-test-result",value:"",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");e-=$(o.children()[0]).outerHeight(!0);o=$(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"),d.resize(),$("#red-ui-editor-type-expression-test-result").css("height",t-25+"px"),f.resize()}}),$("#node-input-example-reformat").on("click",function(e){e.preventDefault();e=d.getValue()||"";try{e=JSON.stringify(JSON.parse(e),null,4)}catch(e){}d.getSession().setValue(e||"",-1)}),o()},close:function(){e.onclose&&e.onclose(),p.destroy(),d.destroy(),f.destroy()},show:function(){}};RED.tray.show(r)}})}(),RED.editor.iconPicker={show:function(e,r,s,i,d){var t=$('<div class="red-ui-icon-picker">'),o=$("<div>",{class:"red-ui-search-container"}).appendTo(t);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);var l=$('<div class="red-ui-icon-list">').appendTo(t),o=$('<div class="red-ui-icon-meta"></div>').appendTo(t),c=$("<span>").appendTo(o);$('<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)}),!r&&i&&l.addClass("red-ui-icon-list-dark"),setTimeout(function(){var o=RED.nodes.getIconSets();Object.keys(o).forEach(function(a){var e,t;i&&"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,o=$("<div>",{class:"red-ui-icon-list-icon"}).appendTo(l),i=$("<div>",{class:"red-ui-search-result-node"}).appendTo(o),n=RED.settings.apiRootUrl+"icons/"+a+"/"+e;o.data("icon",n),r&&(i.css({backgroundColor:r}),(t=RED.utils.getDarkerColor(r))!==r&&i.css("border-color",t));i=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(i);RED.utils.createIconElement(n,i,!0),s.module===a&&s.file===e&&o.addClass("selected"),o.on("mouseover",function(){c.text(e)}),o.on("mouseout",function(){c.html("&nbsp;")}),o.on("click",function(){u.hide(),d(a+"/"+e)})}))}),setTimeout(function(){n.remove()},50)},300);var n=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 n,o=t.value,e=t.complete;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);var i={title:t.title,width:t.width||"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){e(n.getValue(),n.getCursorPosition()),RED.tray.close()}}],resize:function(e){for(var t=$("#dialog-form>div:not(.node-text-editor-row)"),o=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),i=0;i<t.size();i++)o-=$(t[i]).outerHeight(!0);$(".node-text-editor").css("height",o+"px"),n.resize()},open:function(e){e.find(".red-ui-tray-body");e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_js","editor");n=RED.editor.createEditor({id:"node-input-js",mode:t.mode||"ace/mode/javascript",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}}),t.cursor&&n.gotoLine(t.cursor.row+1,t.cursor.column,!1),e.i18n(),setTimeout(function(){n.focus()},300)},close:function(){n.destroy(),t.onclose&&t.onclose()},show:function(){}};RED.tray.show(i)}}),function(){var u;function f(e,t,o){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{var n={};e.children.forEach(function(e){n[e.key]=!0});for(var a=2,r="item";n[r];)r="item-"+a++}o=h(r,i,e.depth+1,e);e.treeList.insertChildAt(o,t,!0),e.treeList.expand()}function h(e,t,o,i){var n,a,r,s={depth:o,type:typeof t},d=$('<span class="red-ui-editor-type-json-editor-label">');null!=e&&(n="string"==typeof(s.key=e)?'"'+e+'"':e,(a=$('<span class="red-ui-debug-msg-object-key red-ui-editor-type-json-editor-label-key">').text(n).appendTo(d)).addClass("red-ui-debug-msg-type-"+typeof e),i&&"array"===i.type&&a.addClass("red-ui-editor-type-json-editor-label-array-key"),a.on("click",function(e){var i;"array"!==s.parent.type&&(e.preventDefault(),e.stopPropagation(),e=Math.max(150,a.width()),i=$('<input type="text" class="red-ui-editor-type-json-editor-key">').css({width:e+"px"}).val(""+s.key).insertAfter(a).typedInput({types:["str"]}),$(document).on("mousedown.nr-ui-json-editor",function(e){for(var t=i.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=i.typedInput("value"),s.key=e,a.text("string"==typeof e?'"'+e+'"':e),i.remove(),a.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(),a.show(),$(document).off("mousedown.nr-ui-json-editor"),$(document).off("keydown.nr-ui-json-editor"))}),a.hide())}),$("<span>").text(" : ").appendTo(d)),Array.isArray(t)?(s.expanded=o<2,s.type="array",s.deferBuild=2<=o,s.children=function(e,t,o){for(var i=[],n=e.length,a=0;a<n;a++)i.push(h(a,e[a],t,o));return i}(t,o+1,s)):null!==t&&"object"===s.type?(s.expanded=o<2,s.children=function(e,t,o){var i,n=[];for(i in e)e.hasOwnProperty(i)&&n.push(h(i,e[i],t,o));return n}(t,o+1,s),s.deferBuild=2<=o):null===(s.value=t)&&(s.type="null");var l,c,u="";switch(s.type){case"string":r="str",u='"'+s.value+'"',l="red-ui-debug-msg-type-string";break;case"number":r="num",u=s.value,l="red-ui-debug-msg-type-number";break;case"boolean":r="bool",u=s.value,l="red-ui-debug-msg-type-other";break;case"null":r=s.type,u=s.type,l="red-ui-debug-msg-type-null";break;case"object":r=s.type,u=s.type,l="red-ui-debug-msg-type-meta";break;case"array":r=s.type,u=s.type+"["+s.children.length+"]",l="red-ui-debug-msg-type-meta"}var p=$('<span class="red-ui-editor-type-json-editor-label-value">').addClass(l).text(u).appendTo(d);return p.on("click",function(e){e.preventDefault(),e.stopPropagation(),"str"===r?u=u.substring(1,u.length-1):"array"!==r&&"object"!==r||(u="");var e=Math.max(150,p.width()),n=$('<input type="text" class="red-ui-editor-type-json-editor-value">').css({width:e+"px"}).val(""+u).insertAfter(p).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.png"},{value:"object",label:RED._("common.type.object"),hasValue:!1,icon:"red/images/typedInput/json.png"}],default:r});$(document).on("mousedown.nr-ui-json-editor",function(e){for(var t,o=n.next(".red-ui-typedInput-container")[0],i=e.target;"BODY"!==i.nodeName&&i!==o&&!$(i).hasClass("red-ui-typedInput-options");)i=i.parentElement;if("BODY"===i.nodeName){switch(r=n.typedInput("type"),u=n.typedInput("value"),"num"===r&&(u=u.trim(),isNaN(u)?r="str":""===u&&(u=0)),s.value=u,r){case"str":s.children&&(c=s.children),s.treeList.makeLeaf(!0),s.type="string",t="red-ui-debug-msg-type-string",u='"'+u+'"';break;case"num":s.children&&(c=s.children),s.treeList.makeLeaf(!0),s.type="number",t="red-ui-debug-msg-type-number";break;case"bool":s.children&&(c=s.children),s.treeList.makeLeaf(!0),s.type="boolean",t="red-ui-debug-msg-type-other",s.value="true"===u;break;case"null":s.children&&(c=s.children),s.treeList.makeLeaf(!0),s.type="null",t="red-ui-debug-msg-type-null",s.value=u="null";break;case"object":s.treeList.makeParent(c),s.type="object",t="red-ui-debug-msg-type-meta",s.value=u="object",s.children.forEach(function(e,t){var o,i;e.hasOwnProperty("_key")&&(e.key=e._key,delete e._key,(i=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+'"',i.addClass("red-ui-debug-msg-type-string"),i.removeClass("red-ui-debug-msg-type-number")):(o=e.key,i.removeClass("red-ui-debug-msg-type-string"),i.addClass("red-ui-debug-msg-type-number")),i.text(o))});break;case"array":s.treeList.makeParent(c),s.type="array",t="red-ui-debug-msg-type-meta",s.value=u="array["+s.children.length+"]",s.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")})}p.text(u).removeClass().addClass("red-ui-editor-type-json-editor-label-value "+t),n.remove(),p.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(),p.show(),"str"===r&&(u='"'+u+'"'),$(document).off("mousedown.nr-ui-json-editor"),$(document).off("keydown.nr-ui-json-editor"))}),p.hide()}),s.gutter=$('<span class="red-ui-editor-type-json-editor-item-gutter"></span>'),(i?$('<span class="red-ui-editor-type-json-editor-item-handle"><i class="fa fa-bars"></span>'):$("<span></span>")).appendTo(s.gutter),$('<button type="button" class="editor-button editor-button-small"><i class="fa fa-caret-down"></button>').appendTo(s.gutter).on("click",function(e){e.preventDefault(),e.stopPropagation(),function(e,r){var t=e.offset(),o=[];r.parent&&(o.push({id:"red-ui-editor-type-json-menu-insert-above",icon:"fa fa-toggle-up",label:RED._("jsonEditor.insertAbove"),onselect:function(){var e=r.parent.children.indexOf(r);f(r.parent,e,e)}}),o.push({id:"red-ui-editor-type-json-menu-insert-below",icon:"fa fa-toggle-down",label:RED._("jsonEditor.insertBelow"),onselect:function(){var e=r.parent.children.indexOf(r)+1;f(r.parent,e,e-1)}})),"array"!==r.type&&"object"!==r.type||o.push({id:"red-ui-editor-type-json-menu-add-child",icon:"fa fa-plus",label:RED._("jsonEditor.addItem"),onselect:function(){f(r,r.children.length,r.children.length-1)}}),r.parent&&(o.push({id:"red-ui-editor-type-json-menu-copy-path",icon:"fa fa-terminal",label:RED._("jsonEditor.copyPath"),onselect:function(){for(var e=r,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,r.element,"clipboard.copyMessagePath")}}),o.push({id:"red-ui-editor-type-json-menu-duplicate",icon:"fa fa-copy",label:RED._("jsonEditor.duplicate"),onselect:function(){var e=r.key;if("array"===r.parent.type)e=r.parent.children.length;else{var t=/^(.*?)(-(\d+))?$/.exec(e),o={};r.parent.children.forEach(function(e){o[e.key]=!0});var i=t[1],n=2;for(void 0!==t[3]&&(n=parseInt(t[3])),e=i;o[e];)e=i+"-"+n++}var a=h(e,g(r),r.parent.depth+1,r.parent),t=r.parent.children.indexOf(r)+1;r.parent.treeList.insertChildAt(a,t,!0),r.parent.treeList.expand()}}),o.push({id:"red-ui-editor-type-json-menu-delete",icon:"fa fa-times",label:RED._("common.label.delete"),onselect:function(){r.treeList.remove()}})),"array"!==r.type&&"object"!==r.type||(o.push(null),o.push({id:"red-ui-editor-type-json-menu-expand-children",icon:"fa fa-angle-double-down",label:RED._("jsonEditor.expandItems"),onselect:function(){r.treeList.expand(),r.children.forEach(function(e){e.treeList.expand()})}}),o.push({id:"red-ui-editor-type-json-menu-collapse-children",icon:"fa fa-angle-double-up",label:RED._("jsonEditor.collapseItems"),onselect:function(){r.treeList.collapse(),r.children.forEach(function(e){e.treeList.collapse()})}}));var i=RED.menu.init({id:"red-ui-editor-type-json-menu",options:o});i.css({position:"absolute"}),i.on("mouseleave",function(){$(this).hide()}),i.on("mouseup",function(){$(this).hide()}),i.appendTo("body");var n=t.top,e=i.height();(o=$(window).height())<n+e&&(n-=n+e-o+20),i.css({top:n+"px",left:t.left+"px"}),i.show()}($(this),s)}),s.element=d,s}function g(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]=g(e)});break;case"array":t=e.children.map(g)}return t}RED.editor.registerTypeEditor("_json",{show:function(o){var a,r,s=o.value,t=o.complete;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;"><button id="node-input-json-reformat" class="red-ui-button red-ui-button-small"><span data-i18n="jsonEditor.format"></span></button></div><div class="form-row node-text-editor-row"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-json"></div></div></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);function d(){var e=a.getValue();try{return JSON.parse(e),$("#node-dialog-ok").removeClass("disabled"),!0}catch(e){return $("#node-dialog-ok").addClass("disabled"),!1}}var l,c={title:o.title,width:o.width||700,buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){var e;o.requireValid&&!d()||("json-ui"===u?e=l?JSON.stringify(g(l),null,4):a.getValue():"json-raw"===u&&(e=a.getValue()),t&&t(e),RED.tray.close())}}],resize:function(e){var t=$(".red-ui-editor-type-json-tab-content").height();$(".node-text-editor").css("height",t-45+"px"),a.resize()},open:function(e){e.find(".red-ui-tray-body");var t=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_json","editor"),e=$("#red-ui-editor-type-json-tab-ui-container").css({height:"100%"}),i=$('<div class="red-ui-debug-msg-payload red-ui-editor-type-json-editor">').appendTo(e).treeList({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")})});(a=RED.editor.createEditor({id:"node-input-json",value:"",mode:"ace/mode/json"})).getSession().setValue(s||"",-1),o.requireValid&&(a.getSession().on("change",function(){clearTimeout(r),r=setTimeout(d,200)}),d()),$("#node-input-json-reformat").on("click",function(e){e.preventDefault();e=a.getValue()||"";try{e=JSON.stringify(JSON.parse(e),null,4)}catch(e){}a.getSession().setValue(e||"",-1)}),t.i18n();var n=!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(),n)if("json-raw"===e.id)l&&(t=JSON.stringify(g(l),null,4),a.getSession().setValue(t||"",-1));else if("json-ui"===e.id){var t=a.getValue().trim()||"{}";try{var o=JSON.parse(t);(l=h(null,o,0,null)).class="red-ui-editor-type-json-root-node",i.treeList("data",[l])}catch(e){l=null,i.treeList("data",[{label:RED._("jsonEditor.error.invalidJSON")+e.toString()}])}}e.content.show(),c.resize()}});t.addTab({id:"json-raw",label:RED._("jsonEditor.rawMode"),content:$("#red-ui-editor-type-json-tab-raw")}),t.addTab({id:"json-ui",label:RED._("jsonEditor.uiMode"),content:$("#red-ui-editor-type-json-tab-ui")}),n=!0},close:function(){o.onclose&&o.onclose(),a.destroy()},show:function(){}};RED.tray.show(c)}})}(),function(){var r;RED.editor.registerTypeEditor("_markdown",{show:function(i){var n,a=i.value,e=i.complete;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);var t={title:i.title,width:i.width||1/0,buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){e(n.getValue(),n.getCursorPosition()),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").width();r&&r.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");(n=RED.editor.createEditor({id:"red-ui-editor-type-markdown",value:a,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(n.getValue())),$(".red-ui-editor-type-markdown-panel-preview").scrollTop(e)},200)}),i.header&&i.header.appendTo(e.find("#red-ui-editor-type-markdown-title")),a&&$(".red-ui-editor-type-markdown-panel-preview").html(RED.utils.renderMarkdown(n.getValue())),(r=RED.panels.create({id:"red-ui-editor-type-markdown-panels",dir:"horizontal",resize:function(e,t){n.resize()}})).ratio(1),$('<span class="button-group" style="float:right"><button type="button" id="node-btn-markdown-preview" class="red-ui-button toggle single"><i class="fa fa-eye"></i></button></span>').appendTo(n.toolbar),$("#node-btn-markdown-preview").on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),r.ratio(1)):($(this).addClass("selected"),r.ratio(.5))}),RED.popover.tooltip($("#node-btn-markdown-preview"),RED._("markdownEditor.toggle-preview")),i.cursor&&n.gotoLine(i.cursor.row+1,i.cursor.column,!1),o.i18n()},close:function(){n.destroy(),i.onclose&&i.onclose()},show:function(){}};RED.tray.show(t)},buildToolbar:function(e,s){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:" * ",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 r=t[$(this).data("style")];$(this).on("click",function(e){e.preventDefault();var e=s.getSelectedText(),t=s.selection.getRange();if(r.newline)for(var o=0,i=((r.before||"").match(/\n/g)||[]).length,n=((r.after||"").match(/\n/g)||[]).length,a=t.start.row;a<=t.end.row+o;a++)r.before&&(s.session.insert({row:a,column:0},r.before),o+=i,a+=i),r.after&&(s.session.insert({row:a,column:1/0},r.after),o+=n,a+=n);else s.session.replace(s.selection.getRange(),(r.before||"")+e+(r.after||"")),""===e&&s.gotoLine(t.start.row+1,t.start.column+(r.before||"").length,!1);s.focus()}),r.tooltip&&RED.popover.tooltip($(this),r.tooltip)}),e}})}(),RED.editor.registerTypeEditor("_text",{show:function(t){var o,i=t.value,e=t.complete;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);var n={title:t.title,width:t.width||"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){e(o.getValue(),o.getCursorPosition()),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){e.find(".red-ui-tray-body"),RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_text","editor");(o=RED.editor.createEditor({id:"node-input-text",value:"",mode:"ace/mode/"+(t.mode||"text")})).getSession().setValue(i||"",-1),t.cursor&&o.gotoLine(t.cursor.row+1,t.cursor.column,!1)},close:function(){o.destroy(),t.onclose&&t.onclose()},show:function(){}};RED.tray.show(n)}}),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(e){var t=RED.editor.codeEditor.settings||{},o=e.element||$("#"+e.id)[0],i=$("<div>").appendTo(o),o=$("<div>").appendTo(o).addClass("red-ui-editor-text-container")[0],n=window.ace.edit(o);n.setTheme(t.theme||s.theme||"ace/theme/tomorrow");var a,r=n.getSession();return r.on("changeAnnotation",function(){for(var e=r.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&&r.setAnnotations(e)}),e.mode&&r.setMode(e.mode),e.foldStyle?r.setFoldStyle(e.foldStyle):r.setFoldStyle("markbeginend"),e.options?n.setOptions(e.options):n.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,tooltipFollowsMouse:!1}),e.readOnly&&(n.setOption("readOnly",e.readOnly),n.container.classList.add("ace_read-only")),e.hasOwnProperty("lineNumbers")&&n.renderer.setOption("showGutter",e.lineNumbers),n.$blockScrolling=1/0,e.value&&r.setValue(e.value,-1),e.globals&&setTimeout(function(){r.$worker&&r.$worker.send("setOptions",[{globals:e.globals,maxerr:1e3}])},100),"ace/mode/markdown"===e.mode&&($(o).addClass("red-ui-editor-text-container-toolbar"),n.toolbar=RED.editor.customEditTypes._markdown.buildToolbar(i,n),!1!==e.expandable&&(a=$('<button type="button" class="red-ui-button" style="float: right;"><i class="fa fa-expand"></i></button>').appendTo(n.toolbar),RED.popover.tooltip(a,RED._("markdownEditor.expand")),a.on("click",function(e){e.preventDefault();e=n.getValue();RED.editor.editMarkdown({value:e,width:"Infinity",cursor:n.getCursorPosition(),complete:function(e,t){n.setValue(e,-1),n.gotoLine(t.row+1,t.column,!1),setTimeout(function(){n.focus()},300)}})})),a=$('<button type="button" class="red-ui-editor-text-help red-ui-button red-ui-button-small"><i class="fa fa-question"></i></button>').appendTo($(o).parent()),RED.popover.create({target:a,trigger:"click",size:"small",direction:"left",content:RED._("markdownEditor.format"),autoClose:50}),r.setUseWrapMode(!0)),n._destroy=n.destroy,n.destroy=function(){try{this._destroy()}catch(e){}$(o).remove(),$(i).remove()},n.type="ace",n}}}(),RED.editor.codeEditor.monaco=function(){var n=!1;const v=["vs","vs-dark","hc-black"];let m;const b={assert:{package:"node",module:"assert",path:"node/assert.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"},constants:{package:"node",module:"constants",path:"node/constants.d.ts"},crypto:{package:"node",module:"crypto",path:"node/crypto.d.ts"},dgram:{package:"node",module:"dgram",path:"node/dgram.d.ts"},dns:{package:"node",module:"dns",path:"node/dns.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"},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"},string_decoder:{package:"node",module:"string_decoder",path:"node/string_decoder.d.ts"},timers:{package:"node",module:"timers",path:"node/timers.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"}},y=[b["node-red-util"],b["node-red-func"],b.globals,b.console,b.buffer],l={};function w(e,t,o,i){var n="object"==typeof e?e:b[e];if(n){const r=n.package,s=n.module,d=n.path;var a,e=l[d];e?(t||(o.JS[s]=monaco.languages.typescript.javascriptDefaults.addExtraLib(e,"file://types/"+r+"/"+s+"/index.d.ts")),i&&setTimeout(function(){i(null,n)},5)):(a="types/"+d,$.get(a).done(function(e){l[d]=e,t||(o.JS[s]=monaco.languages.typescript.javascriptDefaults.addExtraLib(e,"file://types/"+r+"/"+s+"/index.d.ts")),i&&i(null,n)}).fail(function(e){var t="Failed to load '"+a+"'";l[d]="/* "+t+" */\n",i&&i(e,n),console.warn(t)}))}}function E(e){return!(!e.offsetHeight&&!e.offsetWidth)&&"hidden"!==getComputedStyle(e).visibility}return{get type(){return"monaco"},get initialised(){return n},init:function(e){RED.events.on("editor:close",function(){var t=window.monaco?monaco.editor.getModels():null;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++){const o=t[e];o.isDisposed()||o.dispose()}}}),window.MonacoEnvironment=window.MonacoEnvironment||{},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 i=function(e,t){(t.rules&&Array.isArray(t.rules)||t.colors)&&(v.push(e),monaco.editor.defineTheme(e,t),monaco.editor.setTheme(e),m=e)};if(o.theme)if("object"==typeof o.theme&&RED.settings.editorTheme.theme){var t=o.theme.name||RED.settings.editorTheme.theme;i(t,o.theme)}else if("string"==typeof o.theme){let t=o.theme;v.includes(t)||$.get("vendor/monaco/dist/theme/"+t+".json",function(e){i(t,e)})}}catch(e){console.warn(e)}function a(e,t,o,i,n){return Array.isArray(o)&&(o=o.join("\n")),{label:e,kind:null==n?monaco.languages.CompletionItemKind.Snippet:n,documentation:{value:o},insertText:t,insertTextRules:monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:i}}return function(e){e.languages.registerCompletionItemProvider("javascript",{provideCompletionItems:function(e,t){var e=e.getWordUntilPosition(t),e={startLineNumber:t.lineNumber,endLineNumber:t.lineNumber,startColumn:e.startColumn,endColumn:e.endColumn};return{suggestions:[a("dowhile","do {\n\t${2}\n} while (${1:condition});","Do-While Statement (JavaScript Language Basics)",e=e),a("while","while (${1:condition}) {\n\t${2}\n}","While Statement (JavaScript Language Basics)",e),a("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),a("trycatch","try {\n\t${2}\n} catch (${1:error}) {\n\t\n};","Try-Catch Statement (JavaScript Language Basics)",e),a("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),a("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),a("forin","for (${1:prop} in ${2:obj}) {\n\tif (${2:obj}.hasOwnProperty(${1:prop})) {\n\t\t${3}\n\t}\n}","for in",e),a("forof","for (const ${1:iterator} of ${2:object}) {\n\t${3}\n}","for of",e),a("function","function ${1:methodName}(${2:arguments}) {\n\t${3}\n}","Function Declaration",e),a("func (anonymous function)","var ${1:fn} = function(${2:arguments}) {\n\t${3}\n}","Function Expression",e),a("pt (prototype)","${1:ClassName}.prototype.${2:methodName} = function(${3:arguments}) {\n\t${4}\n}","prototype",e),a("iife","(function(${1:arg}) {\n\t${1}\n})(${1:arg});","immediately-invoked function expression",e),a("call (function call)","${1:methodName}.call(${2:context}, ${3:arguments})","function call",e),a("apply (function apply)","${1:methodName}.apply(${2:context}, [${3:arguments}])","function apply",e),a("jsonparse","JSON.parse(${1:json});","JSON.parse",e),a("jsonstringify","JSON.stringify(${1:obj});","JSON.stringify",e),a("setinterval","setInterval(function() {\n\t${2}\n}, ${1:delay});","setInterval",e),a("settimeout","setTimeout(function() {\n\t${2}\n}, ${1:delay});","setTimeout",e),a("node.log",'node.log(${1:"info"});',"Write an info message to the console (not sent to sidebar)",e),a("node.warn",'node.warn(${1:"my warning"});',"Write a warning to the console and debug sidebar",e),a("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),a("node.send","node.send(${1:msg});","async send a msg to the next node",e),a("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),a("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),a("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),a("get (node context)",'context.get("${1:name}");',"Get a value from node context",e),a("set (node context)",'context.set("${1:name}", ${1:value});',"Set a value in node context",e),a("get (flow context)",'flow.get("${1:name}");',"Get a value from flow context",e),a("set (flow context)",'flow.set("${1:name}", ${1:value});',"Set a value in flow context",e),a("get (global context)",'global.get("${1:name}");',"Get a value from global context",e),a("set (global context)",'global.set("${1:name}", ${1:value});',"Set a value in global context",e),a("get (env)",'env.get("${1:name}");',"Get env variable value",e),a("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),a("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),a("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),a("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),a("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 t={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"]},o=RED.settings.get("codeEditor.monaco.languages.typescript.javascriptDefaults.compilerOptions")||{},t=Object.assign({},t,o);e.languages.typescript.javascriptDefaults.setCompilerOptions(t);var i={noSemanticValidation:!1,noSyntaxValidation:!1,diagnosticCodesToIgnore:[1108,1375,1378,2307,2322,2339,2345,7043,80001,80004]},n=RED.settings.get("codeEditor.monaco.languages.typescript.javascriptDefaults.diagnosticsOptions")||{},i=Object.assign({},i,n);e.languages.typescript.javascriptDefaults.setDiagnosticsOptions(i)}catch(e){console.warn("monaco - Error setting javascriptDefaults",e)}}(monaco),(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 o=e.getWordUntilPosition(t);if(o){e=o.startColumn;"$"!==o.word[0]&&1<t.column&&e--;var i={startLineNumber:t.lineNumber,endLineNumber:t.lineNumber,startColumn:e,endColumn:o.endColumn},e=Object.keys(jsonata.functions),o=e.map(function(e){var t=e+"("+RED._("jsonata:"+e+".args",{defaultValue:""})+")",o=RED._("jsonata:"+e+".desc",{defaultValue:""});return a(e,(jsonata.getFunctionSnippet(e)+"").trim(),{value:"`"+t+"`\n\n"+o},i,monaco.languages.CompletionItemKind.Function)});return e.sort(function(e,t){return t.length-e.length}),o.unshift(a("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",i)),{suggestions:o}}}}),o.languages.registerHoverProvider("jsonata",{provideHover:function(e,t){var o=e.getWordAtPosition(t),i=o&&o.word;if(i&&"$"!==i[0]&&1<t.column){i="$"+i,e=RED._("jsonata:"+i+".args",{defaultValue:""});if(e){e=i+"("+e+")",i=RED._("jsonata:"+i+".desc",{defaultValue:""});return{range:new monaco.Range(t.lineNumber,t.column,t.lineNumber,t.column+o.word.length),contents:[{value:"**`"+e+"`**"},{value:i}]}}}}}),function(e){try{var t=RED.settings.get("codeEditor.monaco.languages.json.jsonDefaults.diagnosticOptions"),o=RED.settings.get("codeEditor.monaco.languages.json.jsonDefaults.modeConfiguration"),t=Object.assign({},{validate:!0},t||{});e.languages.json.jsonDefaults.setDiagnosticsOptions(t),o&&e.languages.json.jsonDefaults.setModeConfiguration(o)}catch(e){console.warn("monaco - Error setting up json options",err)}}(monaco),function(e){try{var t=RED.settings.get("codeEditor.monaco.languages.css.cssDefaults.diagnosticsOptions"),o=RED.settings.get("codeEditor.monaco.languages.css.lessDefaults.diagnosticsOption"),i=RED.settings.get("codeEditor.monaco.languages.css.scssDefaults.diagnosticsOption"),n=RED.settings.get("codeEditor.monaco.languages.css.cssDefaults.modeConfiguration"),a=RED.settings.get("codeEditor.monaco.languages.css.lessDefaults.modeConfiguration"),r=RED.settings.get("codeEditor.monaco.languages.css.scssDefaults.modeConfiguration");t&&e.languages.css.cssDefaults.setDiagnosticsOptions(t),o&&e.languages.css.cssDefaults.setDiagnosticsOptions(o),i&&e.languages.css.cssDefaults.setDiagnosticsOptions(i),n&&e.languages.css.cssDefaults.setDiagnosticsOptions(n),a&&e.languages.css.cssDefaults.setDiagnosticsOptions(a),r&&e.languages.css.cssDefaults.setDiagnosticsOptions(r)}catch(e){console.warn("monaco - Error setting up CSS/SCSS/LESS options",err)}}(monaco),function(e){try{var t=RED.settings.get("codeEditor.monaco.languages.html.htmlDefaults.options"),o=RED.settings.get("codeEditor.monaco.languages.html.handlebarDefaults.options");t&&e.languages.html.htmlDefaults.setOptions(t),o&&e.languages.html.handlebarDefaults.setOptions(o)}catch(e){console.warn("monaco - Error setting up html options",err)}}(monaco),y.forEach(function(e){w(e,!0)}),n=!0},create:function(e){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":e="shell"}return e}var a,t=RED.editor.codeEditor.settings||{},u={JS:{},TS:{}},r=e.element||$("#"+e.id)[0],s=$("<div>").appendTo(r),r=$("<div>").appendTo(r).addClass("red-ui-editor-text-container")[0],o=$.extend({},t.options,e);o.language=c(e.mode),m&&(o.theme=m),"javascript"==o.language&&(o._language=o.language,o.language="text"),o.minimap||(o.minimap={enabled:!0,maxColumn:50,scale:1,showSlider:"mouseover",renderCharacters:!0}),!1===e.enableBasicAutocompletion&&(o.showSnippets=!1,o.quickSuggestions=!1,o.parameterHints={enabled:!1},o.suggestOnTriggerCharacters=!1,o.acceptSuggestionOnEnter="off",o.tabCompletion="off",o.wordBasedSuggestions=!1),!1===e.enableSnippets&&(o.showSnippets=!1),null==o.mouseWheelZoom&&(o.mouseWheelZoom=!0),null==o.suggestFontSize&&(o.suggestFontSize=12),null==o.formatOnPaste&&(o.formatOnPaste=!0),null==o.foldingHighlight&&(o.foldingHighlight=!0),null==o.foldStyle&&(o.foldStyle=!0),null!=o.readOnly&&(o.readOnly=o.readOnly),!1===o.lineNumbers&&(o.lineNumbers=!1),null==o.theme&&(o.theme=v[0]),null==o.mode&&(o.mode=c(e.mode)),null==o.automaticLayout&&(o.automaticLayout=!0),e.foldStyle&&"none"===e.foldStyle?(o.foldStyle=!1,o.foldingHighlight=!1):(o.foldStyle=!0,o.foldingHighlight=!0),o.roundedSelection=!1!==o.roundedSelection,o.contextmenu=!1!==o.contextmenu,o.snippetSuggestions=!1!==o.enableSnippets,o.value=e.value||"",o.wordSeparators||"jsonata"!=o.language&&"json"!=o.language&&"javascript"!=o.language||(o.wordSeparators="`~!@#%^&*()-=+[{]}|;:'\",.<>/?"),o.fixedOverflowWidgets=!1!==o.fixedOverflowWidgets;var i=RED.utils.getBrowserInfo();function n(t){var i=[],n=[];const a="extraModuleLibs/index.d.ts",r="file://types/extraModuleLibs/index.d.ts";if(t&&0!=t.length){var s=[];Array.prototype.push.apply(s,t);var o={};for(let e=0;e<t.length;e++){var d=t[e],l=d.var,d=d.module;l&&d&&(n.push("import "+l+"_import = require('"+d+"');\n"),i.push("var "+l+": typeof "+l+"_import;\n"));l=b[d];o[d]=l||{package:"other",module:d,path:"other/"+d+".d.ts"}}Object.values(o).forEach(function(e){w(e,!1,u,function(e,t){var o;0==(s=s.filter(function(e){return e.module!=t.module})).length&&(o=n.join("")+("\ndeclare global {\n"+i.join("")+"\n}"),setTimeout(function(){u.JS[a]=monaco.languages.typescript.javascriptDefaults.addExtraLib(o,r)},500))})})}else u.JS[a]=monaco.languages.typescript.javascriptDefaults.addExtraLib(" ",r)}(i.mobile||i.tablet)&&(o.minimap={enabled:!1},o.formatOnType=!1,o.formatOnPaste=!1,o.disableMonospaceOptimizations=!0,o.columnSelection=!1,o.matchBrackets="never",o.maxTokenizationLineLength=1e4,o.stopRenderingLineAfter=2e3,o.roundedSelection=!1,o.trimAutoWhitespace=!1,o.parameterHints={enabled:!1},o.suggestOnTriggerCharacters=!1,o.wordBasedSuggestions=!1,o.suggest={maxVisibleSuggestions:6},!o.accessibilitySupport&&i.android&&(o.accessibilitySupport="off")),t=!1,null==e.clientSideSuggestions&&(0<=(e.mode+"").indexOf("nrjavascript")||e.globals&&(e.globals.RED||e.globals.Buffer))&&(t=!0),i=monaco.languages.typescript.javascriptDefaults.getCompilerOptions(),t?(i.lib=["esnext"],y.forEach(function(e){w(e,!1,u)})):i.lib=["esnext","dom"],monaco.languages.typescript.javascriptDefaults.setCompilerOptions(i),n(o.extraLibs);var p=monaco.editor.create(r,o);try{p._standaloneKeybindingService.addDynamicKeybinding("-editor.action.insertLineAfter",null,()=>{})}catch(e){}p.nodered={refreshModuleLibs:n};for(var d,l=0;l<v.length;l++){var f=v[l];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}}}(f))}function h(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 g(e,t,o){e?"javascript"==p._mode&&"text"==p._tempMode&&(p._tempMode="",setTimeout(function(){o.parentElement&&p.setMode("javascript",void 0,!1)},t||50)):"javascript"==p._mode&&"text"!=p._tempMode&&o.parentElement&&(p.setMode("text",void 0,!1),p._tempMode="text")}return p.selection={},(p.session=p).renderer={},p.setMode=function(e,t,o){null==o&&(o=!0),e=c(e);var i,n=p.getModel(),a=p.getValue();if(n){var r=p.getScrollTop(),s=p.getScrollLeft(),d=p.getSelections(),l=p.getPosition(),a=n.getValue()||"";try{n.isDisposed()||n.dispose()}catch(e){}p.setModel(null),i=monaco.editor.createModel(a||"",e),p.setModel(i),p.setScrollTop(r,1),p.setScrollLeft(s,1),p.setPosition(l),p.setSelections(d)}else i=monaco.editor.createModel(a||"",e),p.setModel(i);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){h(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){h(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){let t=p.getContribution("snippetController2");t.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 i=Object.entries(u.TS);for(let e=0;e<i.length;e++)try{var n=i[e][0];u.TS[n].dispose(),u.TS[n]=null,delete u.TS[n]}catch(e){}}}catch(e){}try{var e=this.getModel();e&&!e.isDisposed()&&e.dispose(),this.setModel(null)}catch(e){}$(r).remove(),$(s).remove()},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(){var e=[];try{var n,a,r,s,t=p.getModel();null!==t&&(n=t.getModeId(),a=t._associatedResource.authority,r=t._associatedResource.path,s=t._associatedResource.scheme,e=(monaco.editor.getModelMarkers(t)||[]).filter(function(e){var t=e.resource.authority,o=e.resource.path,i=e.resource.scheme;return e.owner==n&&t===a&&o===r&&i===s}).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),m=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})},e.cursor&&(t=e.cursor.row||e.cursor.lineNumber,i=e.cursor.column||e.cursor.col,p.gotoLine(t,i)),e.focus&&p.focus(),p._mode=o.language,o._language&&(p._mode=o._language,p._tempMode=o.language),p.onDidBlurEditorWidget(function(){0==E(r)&&g(!1,0,r)}),p.onDidFocusEditorWidget(function(){g(!0,10,r)}),function(o,i){try{var e={root:$(o).closest("div.red-ui-tray-content")[0]||document,attributes:!0,childList:!0};new IntersectionObserver(function(e,t){e.forEach(function(e){i(0<e.intersectionRatio,5,e.target)})},e).observe(o)}catch(e){try{let t=E(r);a=setInterval(function(){var e=E(r);e!=t&&i(e,5,o),t=e},100)}catch(e){}}}(r,g),"markdown"===o.language&&($(r).addClass("red-ui-editor-text-container-toolbar"),p.toolbar=RED.editor.customEditTypes._markdown.buildToolbar(s,p),!1!==e.expandable&&(d=$('<button type="button" class="red-ui-button" style="float: right;"><i class="fa fa-expand"></i></button>').appendTo(p.toolbar),RED.popover.tooltip(d,RED._("markdownEditor.expand")),d.on("click",function(e){e.preventDefault();e=p.getValue();RED.editor.editMarkdown({value:e,width:"Infinity",cursor:p.getCursorPosition(),complete:function(e,t){p.setValue(e,-1),p.gotoLine(t.row+1,t.column,!1),setTimeout(function(){p.focus()},300)}})})),d=$('<button type="button" class="red-ui-editor-text-help red-ui-button red-ui-button-small"><i class="fa fa-question"></i></button>').appendTo($(r).parent()),RED.popover.create({target:d,trigger:"click",size:"small",direction:"left",content:RED._("markdownEditor.format"),autoClose:50})),p.type="monaco",p}}}(),RED.eventLog=function(){var n,i=[],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()),i=0;i<t.size();i++)o-=$(t[i]).outerHeight(!0);o-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",o+"px"),n.resize()},open:function(e){e.find(".red-ui-tray-body");e=RED.editor.buildEditForm(e.find(".red-ui-tray-body"),"dialog-form","_eventLog","editor");n=RED.editor.createEditor({mode:"ace/mode/shell",id:"red-ui-event-log-editor",value:i.join("\n"),lineNumbers:!1,readOnly:!0,options:{showPrintMargin:!1}}),setTimeout(function(){n.scrollToLine(n.getSession().getLength())},200),e.i18n()},close:function(){n.destroy(),n=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,i.push(e),500<i.length&&(i=i.slice(-500)),n&&(n.getSession().insert({row:n.getSession().getLength(),column:0},"\n"+e),n.scrollToLine(n.getSession().getLength()))})},startEvent:function(e){i.push(""),i.push("-----------------------------------------------------------"),i.push((new Date).toISOString()+" "+e),i.push("")}}}(),RED.tray=function(){var h,g=[],v=!1,o=!1;function i(e){var o=$('<div class="red-ui-tray"></div>'),t=$('<div class="red-ui-tray-header editor-tray-header"></div>').appendTo(o),i=$('<div class="red-ui-tray-body-wrapper"></div>').appendTo(o),n=$('<div class="red-ui-tray-body editor-tray-body"></div>').appendTo(i),a=$('<div class="red-ui-tray-footer"></div>').appendTo(o),r=$('<div class="red-ui-tray-resize-handle"></div>').appendTo(o);e.title&&((i=g.map(function(e){return e.options.title})).push(e.title),i='<ul class="red-ui-tray-breadcrumbs"><li>'+i.join("</li><li>")+"</li></ul>",$('<div class="red-ui-tray-titlebar">'+i+"</div>").appendTo(t)),e.width===1/0&&(e.maximized=!0,r.addClass("red-ui-tray-resize-maximised"));var s,d=$('<div class="red-ui-tray-toolbar"></div>').appendTo(t);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&&(s=c))}o.appendTo(h);var p={tray:o,header:t,body:n,footer:a,options:e,primaryButton:s};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(o.width(),500),e.maximized||n.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),o.width(e.width)):o.width(p.preferredWidth),p.width=o.width(),p.width>$("#red-ui-editor-stack").position().left-8&&(p.width=Math.max(0,$("#red-ui-editor-stack").position().left-8),o.width(p.width)),$("#red-ui-main-container").scrollLeft(0),o.css({right:-(o.width()+10)+"px",transition:"right 0.25s ease"}),m(),v=!0,setTimeout(function(){setTimeout(function(){e.width||o.width(Math.min(p.preferredWidth,$("#red-ui-editor-stack").position().left-8)),e.resize&&e.resize({width:o.width()}),e.show&&e.show(),setTimeout(function(){v=!1,b(),m()},200),n.find(":focusable:first").trigger("focus")},150),o.css({right:0})},0)}g.push(p),e.maximized||o.draggable({handle:r,axis:"x",start:function(e,t){o.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){o.width(-t.position.left),o.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(o),f()):e.open(o,f):f()}function m(){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 n(){$("#red-ui-editor-stack").css("zIndex","9")}return{init:function(){h=$("#red-ui-editor-stack"),$(window).on("resize",m),RED.events.on("sidebar:resize",m),$("#red-ui-editor-shade").on("click",function(){var e;v||(e=g[g.length-1])&&e.primaryButton&&e.primaryButton.click()})},show:function(e){if(n(),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(),i(e)},250)):(0<g.length&&g[g.length-1].tray.css("z-index",0),RED.events.emit("editor:open"),i(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;n(),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:m,close:function(t){var o;n(),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?(m(),e.options.show&&e.options.show()):(e.tray.appendTo("#red-ui-editor-stack"),setTimeout(function(){m(),e.tray.css({right:0}),e.options.show&&(b(),m(),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")},250))}}}(),RED.clipboard=function(){var p,f,o,n,c,u,s,h,e,t,a=!1,d={};function i(){p=$('<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")}},{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:text/plain;charset=utf-8"}),navigator.msSaveBlob(t,e)):((t=document.createElement("a")).setAttribute("href","data:text/plain;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")}},{id:"red-ui-clipboard-dialog-export",class:"primary",text:RED._("clipboard.export.copy"),click:function(){var e,t,o,i,n,a,r;"red-ui-clipboard-dialog-export-tab-clipboard"===s?(e=$("#red-ui-clipboard-dialog-export-text").val(),$(this).dialog("close"),w(e),RED.notify(RED._("clipboard.nodesExported"),{id:"clipboard"})):(t=$("#red-ui-clipboard-dialog-export-text").val(),(o=d[s].getSelected()).children||(o=o.parent),i=$("#red-ui-clipboard-dialog-tab-library-name").val().trim(),n=function(){$.ajax({url:"library/"+o.library+"/"+o.type+"/"+o.path+i,type:"POST",data:t,contentType:"application/json; charset=utf-8"}).done(function(){$(p).dialog("close"),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===i&&(a=!0)}),a?(p.dialog("close"),r=RED.notify(RED._("clipboard.export.exists",{file:RED.utils.sanitize(i)}),{type:"warning",fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){r.hideNotification(),p.dialog("open")}},{text:RED._("clipboard.export.overwrite"),click:function(){r.hideNotification(),n()}}]})):n()):n())}},{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"===s?E($("#red-ui-clipboard-dialog-import-text").val(),t):(e=d[s].getSelected()).path&&$.get("library/"+e.library+"/"+e.type+"/"+e.path,function(e){E(e,t)}),$(this).dialog("close")}},{id:"red-ui-clipboard-dialog-import-conflict",class:"primary",text:RED._("clipboard.import.importSelected"),click:function(){var t={};$('#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")}),h.importOptions.importMap=t;var e=h.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,h.importOptions),$(this).dialog("close")}}],open:function(e,t){RED.keyboard.disable()},close:function(e){RED.keyboard.enable(),c&&(c.close(!0),u=null)}}),f=p.children(".dialog-form"),o='<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="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% - 40px)"><textarea readonly id="red-ui-clipboard-dialog-export-text"></textarea></div><div class="form-row" style="text-align: right;"><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-small toggle" href="#" data-i18n="clipboard.export.compact"></a><a id="red-ui-clipboard-dialog-export-fmt-full" class="red-ui-button red-ui-button-small toggle" href="#" data-i18n="clipboard.export.formatted"></a></span></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>',n='<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 r(){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 l(){var e;"red-ui-clipboard-dialog-import-tab-clipboard"===s?(t&&clearTimeout(t),t=setTimeout(function(){var t=$("#red-ui-clipboard-dialog-import-text");if(""===(n=t.val().trim()))return c.close(!0),u=null,t.removeClass("input-error"),void $("#red-ui-clipboard-dialog-ok").button("disable");try{if(!/^\[[\s\S]*\]$/m.test(n))throw new Error(RED._("clipboard.import.errors.notArray"));for(var e=JSON.parse(n),o=0;o<e.length;o++){if("object"!=typeof e[o])throw new Error(RED._("clipboard.import.errors.itemNotObject",{index:o}));if(!e[o].hasOwnProperty("id"))throw new Error(RED._("clipboard.import.errors.missingId",{index:o}));if(!e[o].hasOwnProperty("type"))throw new Error(RED._("clipboard.import.errors.missingType",{index:o}))}u=null,c.close(!0),t.removeClass("input-error"),t.val(n),$("#red-ui-clipboard-dialog-ok").button("enable")}catch(e){if(""!==n){t.addClass("input-error");var i=e.toString();if(i!==u){var n,a=$('<div class="red-ui-clipboard-import-error"></div>').text(i),r=/at position (\d+)/i.exec(i);if(r)l=parseInt(r[1]);else if(r=/at line (\d+) column (\d+)/i.exec(i)){for(var s=parseInt(r[1])-1,t=parseInt(r[2])-1,d=n.split("\n"),l=0,o=0;o<s;o++)l+=d[o].length+1;l+=t}void 0!==l&&(n=n.replace(/\n/g,"↵"),parseInt(r[1]),r=$("<div>").appendTo(a),r=$("<pre>").appendTo(r),$("<span>").text(n.substring(l-12,l)).appendTo(r),$('<span class="error">').text(n.charAt(l)).appendTo(r),$("<span>").text(n.substring(l+1,l+12)).appendTo(r)),c.close(!0).setContent(a).open(),u=i}}else u=null;$("#red-ui-clipboard-dialog-ok").button("disable")}},100)):(e=d[s].getSelected())&&e.label&&!e.children?$("#red-ui-clipboard-dialog-ok").button("enable"):$("#red-ui-clipboard-dialog-ok").button("disable")}function g(e){var i,t;a||(e=e||"clipboard",f.empty(),f.append($(n)),(i=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(),s=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"):d[e.id].focus(),l()}})).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;i.addTab({id:t,label:RED._(e.label||e.id)});var o=$('<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")}});b(o,e),d[t]=o}),$("#red-ui-clipboard-dialog-tab-library-name").on("keyup",r),$("#red-ui-clipboard-dialog-tab-library-name").on("paste",function(){setTimeout(r,10)}),$("#red-ui-clipboard-dialog-export").button("enable"),f.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",l),$("#red-ui-clipboard-dialog-import-text").on("paste",function(){setTimeout(l,10)}),0===RED.workspaces.active()?($("#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),l()},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")}),i.activateTab("red-ui-clipboard-dialog-import-tab-"+e),"clipboard"===e&&setTimeout(function(){$("#red-ui-clipboard-dialog-import-text").trigger("focus")},100),t=400,(e=$(window).height())<600&&(t=400-(600-e)),$(".red-ui-clipboard-dialog-box").height(t),p.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 v(e){var i,n,t;a||(e=e||"clipboard",f.empty(),f.append($(o)),(i=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(),s=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(),d[s].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,i.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"),b(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),d[t]=o)}),$("#red-ui-clipboard-dialog-tab-library-name").on("keyup",r),$("#red-ui-clipboard-dialog-tab-library-name").on("paste",function(){setTimeout(r,10)}),$("#red-ui-clipboard-dialog-export").button("enable"),(t=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")}),t.addTab({id:"red-ui-clipboard-dialog-export-tab-clipboard-json",label:RED._("editor.types.json")}),$("#red-ui-clipboard-dialog-export-tab-clipboard-preview-list").css({position:"absolute",top:0,right:0,bottom:0,left:0}).treeList({data:[]}),m(),$("#red-ui-clipboard-dialog-tab-library-name").val("flows.json").select(),f.i18n(),n=RED.settings.flowFilePretty?"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;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<(t=$("#red-ui-clipboard-dialog-export-text").val()).length&&(e=JSON.parse(t),t="red-ui-clipboard-dialog-export-fmt-full"===(n=$(this).attr("id"))?JSON.stringify(e,null,4):JSON.stringify(e),$("#red-ui-clipboard-dialog-export-text").val(t),setTimeout(function(){$("#red-ui-clipboard-dialog-export-text").scrollTop(0)},50),$("#red-ui-clipboard-dialog-export-text").trigger("focus")))}),$("#red-ui-clipboard-dialog-export-rng-group > a").on("click",function(e){var t,o,i;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<(i=RED.workspaces.selection()).length?(o=[],i.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?(i=RED.workspaces.active(),o=(o=RED.nodes.groups(i)).concat(RED.nodes.filterNodes({z:i})),RED.nodes.eachConfig(function(e){e.z===RED.workspaces.active()&&!1===e._def.hasUsers&&o.push(e)}),i=RED.nodes.workspace(i)||RED.nodes.subflow(i),o.unshift(i),o=RED.nodes.createExportableNodeSet(o)):"full"===t&&(o=RED.nodes.createCompleteNodeSet(!1)),0<(e=null!==o?"red-ui-clipboard-dialog-export-fmt-full"===n?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),m(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").trigger("click")):0<RED.workspaces.selection().length||RED.view.selection().nodes?$("#red-ui-clipboard-dialog-export-rng-selected").trigger("click"):($("#red-ui-clipboard-dialog-export-rng-selected").addClass("disabled").removeClass("selected"),$("#red-ui-clipboard-dialog-export-rng-flow").trigger("click")),("red-ui-clipboard-dialog-export-fmt-full"===n?$("#red-ui-clipboard-dialog-export-fmt-full"):$("#red-ui-clipboard-dialog-export-fmt-mini")).trigger("click"),i.activateTab("red-ui-clipboard-dialog-export-tab-"+e),t=400,(e=$(window).height())<600&&(t=400-(600-e)),$(".red-ui-clipboard-dialog-box").height(t),p.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 m(t){var e=$("#red-ui-clipboard-dialog-export-text").val()||"[]",e=JSON.parse(e),o={},i={},n=[],a=[],r=[];e.forEach(function(e){"tab"===e.type?(o[e.id]={element:R(e),deferBuild:"flow"!==t,expanded:"flow"===t,children:[]},a.push(o[e.id])):"subflow"===e.type?(i[e.id]={element:x(e),deferBuild:!0,children:[]},r.push(i[e.id])):n.push(e)});var s=[],d=[];n.forEach(function(e){var t={element:x(e)};e.z?o[e.z]||i[e.z]?o[e.z]?o[e.z].children.push(t):i[e.z]&&i[e.z].children.push(t):d.push(t):s.push(t)});e=[];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<r.length&&e.push({label:RED._("menu.label.subflows"),deferBuild:10<r.length,expanded:r.length<=10,children:r}),0<s.length&&e.push({label:RED._("sidebar.info.globalConfig"),deferBuild:10<s.length,expanded:s.length<=10,children:s}),$("#red-ui-clipboard-dialog-export-tab-clipboard-preview-list").treeList("data",e)}function b(e,i){var t,o="fa fa-hdd-o";i.icon&&(o=("font-awesome"===(t=RED.utils.separateIconPath(i.icon)).module?"fa ":"")+t.file),e.data([{library:i.id,type:"flows",icon:o,label:RED._(i.label||i.id),path:"",expanded:!0,children:[{library:i.id,type:"flows",icon:"fa fa-cube",label:"flows",path:"",expanded:!0,children:function(t,o){RED.library.loadLibraryFolder(i.id,"flows","",function(e){o.children=e,t(e)})}}]}],!0)}function y(){$("#red-ui-drop-target").hide()}function w(e,t,o){var i=!1,n=document.activeElement;"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"),$("#red-ui-clipboard-hidden").val(e).focus().select();var a,e=document.execCommand("copy");return e&&t&&(a=RED.popover.create({target:t,direction:"left",size:"small",content:RED._(o)}),setTimeout(function(){a.close()},1e3),a.open()),$("#red-ui-clipboard-hidden").val(""),n&&$(n).focus(),e}function E(t,o){var i=t;if("string"==typeof t)try{if(0===(t=t.trim()).length)return;i=JSON.parse(t)}catch(e){t=new Error(RED._("clipboard.invalidFlow",{message:e.message}));throw t.code="NODE_RED",t}var n,a,r,s,o={generateIds:!1,addFlow:o};try{RED.view.importNodes(i,o)}catch(e){n=e.importConfig,a=i,r=o,s=RED.notify("<p>"+RED._("clipboard.import.conflictNotification1")+"</p>",{type:"info",fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){s.close()}},{text:RED._("clipboard.import.viewNodes"),click:function(){s.close(),function(i,e,t){var o,n;h={importConfig:i,importNodes:e,importOptions:t};var a,r=[],s=!1;for(o in i.subflows)i.subflows.hasOwnProperty(o)&&(s||(r.push({gutter:$('<span data-i18n="menu.label.subflows"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),s=!0),n=i.subflows[o],d=i.conflicted[n.id],c=D(n,d,l=!d),a={id:n.id,gutter:c.gutter.element,element:c.element,class:l?"":"disabled",deferBuild:!0,children:[]},r.push(a),i.zMap[o]&&i.zMap[o].forEach(function(e){var t=D(e,i.conflicted[e.id],l,c.gutter.cb);a.children.push({id:e.id,gutter:t.gutter.element,element:t.element,class:l?"":"disabled"})}));for(o in s=!1,i.tabs){var d,l,c;i.tabs.hasOwnProperty(o)&&(s||(r.push({gutter:$('<span data-i18n="menu.label.flows"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),s=!0),n=i.tabs[o],d=i.conflicted[n.id],c=D(n,d,l=!0),a={id:n.id,gutter:c.gutter.element,element:c.element,icon:"red-ui-icons red-ui-icons-flow",deferBuild:!0,class:l?"":"disabled",children:[]},r.push(a),i.zMap[o]&&i.zMap[o].forEach(function(e){var t=D(e,i.conflicted[e.id],l,c.gutter.cb);a.children.push({id:e.id,gutter:t.gutter.element,element:t.element,class:l?"":"disabled"})}))}s=!1;var u=[];i.all.forEach(function(e){var t,o;"tab"===e.type||"subflow"===e.type||i.tabs[e.z]||i.subflows[e.z]||(t=D(e,t=i.conflicted[e.id],o=!t||!i.configs[e.id]),o={id:e.id,gutter:t.gutter.element,element:t.element,class:o?"":"disabled"},i.configs[e.id]?u.push(o):(s||(r.push({gutter:$('<span data-i18n="menu.label.nodes"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),s=!0),r.push(o)))}),0<u.length&&(r.push({gutter:$('<span data-i18n="menu.label.displayConfig"></span>'),label:"",class:"red-ui-clipboard-dialog-import-conflicts-item-header"}),s=!0,r=r.concat(u));f.empty(),f.append($(importConflictsDialog));$("#red-ui-clipboard-dialog-import-conflicts-list").css({position:"absolute",top:0,right:0,bottom:0,left:0}).treeList({data:r});f.i18n();e=400,t=$(window).height();t<600&&(e=400-(600-t));$(".red-ui-clipboard-dialog-box").height(e),$("#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(),p.dialog("option","title",RED._("clipboard.importNodes")).dialog("option","width",500).dialog("open")}(n,a,r)}},{text:RED._("clipboard.import.importCopy"),click:function(){s.close(),r.generateIds=!0,RED.view.importNodes(a,r)}}]})}}function D(e,t,o,i){var n="tab"===e.type?R(e):x(e),a=$("<div>",{class:"red-ui-clipboard-dialog-import-conflicts-controls"}).appendTo(n);return a.on("click",function(e){e.stopPropagation()}),t&&!i&&(a=$("<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"))&&a.hide()),{element:n,gutter:function(e,t,o){var i=$("<label>",{class:"red-ui-clipboard-dialog-import-conflicts-gutter"}),t=$('<input data-node-id="'+e.id+'" type="checkbox" '+(t?"checked":"")+">").appendTo(i);o&&(t.attr("disabled",!0),o.addChild(t));i.on("click",function(e){e.stopPropagation()}),t.on("change",function(e){var t=this.checked;i.parent().toggleClass("disabled",!t),i.parent().find('.red-ui-clipboard-dialog-import-conflicts-controls  input[type="checkbox"]').attr("disabled",!t),n.forEach(function(e){e.attr("checked",t),e.trigger("change")})});var n=[];return{cb:{addChild:function(e){n.push(e)}},element:i}}(e,o,i)}}function R(e){(e=JSON.parse(JSON.stringify(e)))._def=RED.nodes.getType(e.type)||{},e._def&&(e._=e._def._);var t=$("<div>",{class:"red-ui-info-outline-item red-ui-info-outline-item-flow"}),o=$("<div>",{class:"red-ui-search-result-description red-ui-info-outline-item-label"}).appendTo(t),i="string"==typeof e?e:e.label,e=i.indexOf("\\n");return-1<e&&(i=i.substring(0,e)+"..."),o.text(i),t}function x(e){(e=JSON.parse(JSON.stringify(e)))._def=RED.nodes.getType(e.type)||{},e._def&&(e._=e._def._);var t=$("<div>",{class:"red-ui-node-list-item"});return RED.utils.createNodeIcon(e,!0).appendTo(t),t}return{init:function(){i(),$('<textarea type="text" id="red-ui-clipboard-hidden" tabIndex="-1">').appendTo("#red-ui-editor"),RED.actions.add("core:show-export-dialog",v),RED.actions.add("core:show-import-dialog",g),RED.actions.add("core:show-library-export-dialog",function(){v("library")}),RED.actions.add("core:show-library-import-dialog",function(){g("library")}),RED.actions.add("core:show-examples-import-dialog",function(){g("examples")}),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("actionList:open",function(){a=!0}),RED.events.on("actionList:close",function(){a=!1}),RED.events.on("type-search:open",function(){a=!0}),RED.events.on("type-search:close",function(){a=!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",y),$("#red-ui-workspace-chart").on("dragenter",function(e){-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)||e.preventDefault()}).on("dragleave",function(e){y()}).on("drop",function(e){try{var t,o,i,n;-1!=$.inArray("text/plain",e.originalEvent.dataTransfer.types)?E(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&&(i=o[0],(n=new FileReader).onload=function(e){E(e.target.result)},n.readAsText(i))}catch(e){}y(),e.preventDefault()})},import:g,export:v,copyText:w}}(),RED.library=function(){var a,c,r,u,e;function s(i,n,a,t){$.getJSON("library/"+i+"/"+n+"/"+a,function(e){e=e.map(function(e){return"string"==typeof e?{library:i,type:n,icon:"fa fa-folder",label:e,path:a+e+"/",children:function(t,o){s(i,n,a+e+"/",function(e){o.children=e,t(e)})}}:{library:i,type:n,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(){!function(){var e=u.elementPrefix||"node-input-",t=$("#"+e+"name").val().trim();""===t&&(t=RED._("library.unnamedType",{type:u.type}));var o=$("#red-ui-library-dialog-save-filename").val().trim(),i=c.getSelected();i.children||(i=i.parent);for(var n,a,r={},s=0;s<u.fields.length;s++){var d=u.fields[s];"name"===d?r.name=t:"object"==typeof d?r[d.name]=d.get():r[d]=$("#"+e+d).val()}function l(){$.ajax({url:"library/"+i.library+"/"+i.type+"/"+i.path+o,type:"POST",data:JSON.stringify(r),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")})}r.text=u.editor.getValue(),i.children?(n=!1,i.children.forEach(function(e){e.label===o&&(n=!0)}),n?($("#red-ui-library-dialog-save").dialog("close"),a=RED.notify(RED._("clipboard.export.exists",{file:RED.utils.sanitize(o)}),{type:"warning",fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){a.hideNotification(),$("#red-ui-library-dialog-save").dialog("open")}},{text:RED._("clipboard.export.overwrite"),click:function(){a.hideNotification(),l()}}]})):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,i=u.fields[t];"object"==typeof i?(o=selectedLibraryItem[i.name],i.set(o)):$("#"+e+i).val(selectedLibraryItem[i])}u.editor.setValue(r.getValue(),-1)}$(this).dialog("close")}}],open:function(e){RED.keyboard.disable(),$(this).parent().find(".ui-dialog-titlebar-close").hide(),r.resize()},close:function(e){RED.keyboard.enable(),r&&(r.destroy(),r=null)}}),a=RED.library.createBrowser({container:$("#red-ui-library-dialog-load-browser"),onselect:function(i){var n=$("#red-ui-library-dialog-load-preview-details-table").empty();selectedLibraryItem=i.props,i&&i.label&&!i.children?$.get("library/"+i.library+"/"+i.type+"/"+i.path,function(e){var t,o=$('<tr class="red-ui-help-info-row"><td>Type</td><td></td></tr>').appendTo(n);for(t in $(o.children()[1]).text(u.type),i.props.hasOwnProperty("name")&&(o=$('<tr class="red-ui-help-info-row"><td>Name</td><td>'+i.props.name+"</td></tr>").appendTo(n),$(o.children()[1]).text(i.props.name)),i.props)i.props.hasOwnProperty(t)&&"name"!==t&&"fn"!==t&&(o=$('<tr class="red-ui-help-info-row"><td></td><td></td></tr>').appendTo(n),$(o.children()[0]).text(t),RED.utils.createObjectElement(i.props[t]).appendTo(o.children()[1]));r.setValue(e,-1)}):r.setValue("",-1)}}),RED.panels.create({container:$("#red-ui-library-dialog-load-panes"),dir:"horizontal",resize:function(){r.resize()}}),RED.panels.create({container:$("#red-ui-library-dialog-load-preview"),dir:"vertical",resize:function(){r.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};(r=RED.editor.createEditor(e)).isACE&&(i.mode&&r.getSession().setMode(i.mode),r.setOptions({readOnly:!0,highlightActiveLine:!1,highlightGutterLine:!1}),r.renderer.$cursorLayer.element.style.opacity=0,r.$blockScrolling=1/0),u=i;var t=[];(RED.settings.libraries||[]).forEach(function(e){e.types&&-1===e.types.indexOf(i.url)||t.push({library:e.id,type:i.url,icon:e.icon||"fa fa-hdd-o",label:RED._(e.label||e.id),path:"",expanded:!0,writable:!1,children:[{library:e.id,type:i.url,icon:"fa fa-cube",label:i.type,path:"",expanded:!1,children:function(t,o){s(e.id,i.url,"",function(e){o.children=e,t(e)})}}]})}),a.data(t),setTimeout(function(){a.select(t[0].children[0])},200);var o=400,e=$(window).height();e<570&&(o=400-(570-e)),$("#red-ui-library-dialog-load .red-ui-library-dialog-box").height(o),$("#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,"-");""===e&&(e="unnamed-"+i.type),$("#red-ui-library-dialog-save-filename").attr("value",e+"."+(i.ext||"txt"));var t=[];(RED.settings.libraries||[]).forEach(function(e){e.types&&-1===e.types.indexOf(i.url)||t.push({library:e.id,type:i.url,icon:e.icon||"fa fa-hdd-o",label:RED._(e.label||e.id),path:"",expanded:!0,writable:!1,children:[{library:e.id,type:i.url,icon:"fa fa-cube",label:i.type,path:"",expanded:!1,children:function(t,o){s(e.id,i.url,"",function(e){o.children=e,t(e)})}}]})}),c.data(t),setTimeout(function(){c.select(t[0].children[0])},200);var o=400,e=$(window).height();e<570&&(o=400-(570-e)),$("#red-ui-library-dialog-save .red-ui-library-dialog-box").height(o),$("#red-ui-library-dialog-save").dialog("open")}}]})},createBrowser:function(o){var e=$('<div class="red-ui-library-browser"></div>').appendTo(o.container),i=$("<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)}),n=$("<div>").css({position:"absolute",bottom:"6px",right:"8px"}),a=$('<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 t=a.offset(),e=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",r={},s=i.treeList("selected");(s=!s.children?s.parent:s).treeList.expand(function(){s.children.forEach(function(e){/^new-folder/.test(e.label)&&(r[e.label]=!0)});for(var e=2;r[o];)o="new-folder-"+e++;s.treeList.expand();function t(){var e=n.val().trim();if(""!==e){for(var t=0;t<s.children.length;t++)if(s.children[t].label===e)return i(),0;a.treeList.remove();var o={library:s.library,type:s.type,icon:"fa fa-folder",children:[],label:e,path:a.path+e+"/"};s.treeList.addChild(o,!0)}else i()}function i(){a.treeList.remove()}var n=$('<input type="text" class="red-ui-treeList-input">').val(o),a={icon:"fa fa-folder-o",children:[],path:s.path,element:n};n.on("keydown",function(e){e.stopPropagation(),13===e.keyCode?t():27===e.keyCode&&i()}),n.on("blur",function(){t()}),s.treeList.addChild(a),setTimeout(function(){n.trigger("focus"),n.select()},400)})}}]}).on("mouseleave",function(){$(this).remove(),i.focus()}).on("mouseup",function(){var e=$(this);e.hide(),i.focus(),setTimeout(function(){e.remove()},100)}).appendTo("body");e.css({position:"absolute",top:t.top+"px",left:t.left-e.width()+20+"px"}).show()}).appendTo(n);return o.folderTools&&i.on("treelistselect",function(e,t){!1!==t.writable&&t.treeList&&n.appendTo(t.treeList.label)}),{select:function(e){i.treeList("select",e)},getSelected:function(){return i.treeList("selected")},focus:function(){i.focus()},data:function(e,t){i.treeList("data",e),t&&setTimeout(function(){i.treeList("select",e[0])},100)}}},export:function(){console.warn("Deprecated call to RED.library.export")},loadLibraryFolder:s}}(),RED.notifications=function(){var e,v,m={},b={show:function(){e++,$("#red-ui-full-shade").show()},hide:function(){0===--e&&$("#red-ui-full-shade").hide()}},y=[],w=e=0;function t(e,n,a,r){var s={};if(null!==n&&"object"==typeof n?(a=(s=n).fixed,r=s.timeout,n=s.type):(s.type=n,s.fixed=a,s.timeout=s.timeout),s.id&&m.hasOwnProperty(s.id))return m[s.id].update(e,s),m[s.id];if(s.modal&&b.show(),4<y.length)for(var t=y.length,o=0;4<t&&o<y.length;o+=1){var i=y[o];i.fixed||(window.clearTimeout(i.timeoutid),i.close(),--t)}var d,l,c,u,p,f,h,g=document.createElement("div");return g.id="red-ui-notification-"+w,g.className="red-ui-notification",g.options=s,g.fixed=a,n&&(g.className="red-ui-notification red-ui-notification-"+n),s.width&&(d=$("#red-ui-notifications").width(),s.width>d&&(d=-(s.width-d)/2,$(g).css({width:s.width+"px",marginLeft:d+"px"}))),g.style.display="none","string"==typeof e?(/<p>/i.test(e)||(e="<p>"+e+"</p>"),g.innerHTML=e):$(g).append(e),s.buttons&&(l=$('<div class="ui-dialog-buttonset"></div>').appendTo(g),s.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(g),RED.notifications.hide||$(g).slideDown(300),g.close=(c=g,function(){c.closed||(c.closed=!0,y.splice(y.indexOf(c),1),s.id&&(delete m[s.id],0===Object.keys(m).length&&v.hide()),RED.notifications.hide?c.parentNode.removeChild(c):$(c).slideUp(300,function(){c.parentNode.removeChild(c)}),c.options.modal&&b.hide())}),g.hideNotification=(u=g,function(){u.closed||(u.hidden=!0,RED.notifications.hide||$(u).slideUp(300))}),g.showNotification=(p=g,function(){!p.closed&&p.hidden&&(p.hidden=!1,RED.notifications.hide||$(p).slideDown(300))}),g.update=(f=g,function(e,t){var o,i;"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&&(!s.modal&&t.modal?(f.options.modal=!0,b.show()):s.modal&&!1===t.modal&&(f.options.modal=!1,b.hide()),(e=t.hasOwnProperty("type")?t.type:n)&&(g.className="red-ui-notification red-ui-notification-"+e),a&&!1!==t.fixed||(o=(t.hasOwnProperty("timeout")?t.timeout:r)||5e3),t.buttons&&(i=$('<div style="margin-top: 20px;" class="ui-dialog-buttonset"></div>').appendTo(f),t.buttons.forEach(function(e){var t=$("<button>").text(e.text).on("click",e.click).appendTo(i);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||($(g).on("click.red-ui-notification-close",(h=g,function(){h.close(),window.clearTimeout(h.timeoutid)})),g.timeoutid=window.setTimeout(g.close,r||5e3)),y.push(g),s.id&&(m[s.id]=g,s.fixed&&v.show()),w+=1,g}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(){!function(){for(var e in m)m.hasOwnProperty(e)&&m[e].showNotification()}()})},notify:RED.notify=t}}(),RED.search=function(){var t,r,o,n=!1,a=null,s=-1,d=!1,v={},l=[];function c(e){(t=RED.utils.getNodeLabel(e))&&(t=(""+t).toLowerCase(),v[t]=v[t]||{},v[t][e.id]={node:e,label:t});var t=t||e.label||e.name||e.id||"",o=["id","type","name","label","info"];e._def&&e._def.defaults&&(o=o.concat(Object.keys(e._def.defaults)));for(var i=0;i<o.length;i++)e.hasOwnProperty(o[i])&&("group"===e.type&&"nodes"===o[i]||!function t(o,i,e){if("string"==typeof e||"number"==typeof e)e=(""+e).toLowerCase(),v[e]=v[e]||{},v[e][o.id]={node:o,label:i};else if(Array.isArray(e))e.forEach(function(e){t(o,i,e)});else if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t(o,i,e[n])}(e,t,e[o[i]]))}function m(e,t,o){var i=new RegExp("(?:^| )is:"+t+"(?: |$)");return i.exec(e)&&(e=e.replace(i," ").trim(),o[t]=!0),e}function u(e){var t,o=[],i=[],n=/(?:^| )type:([^ ]+)/.exec(e);n&&(e=e.replace(/(?:^| )type:[^ ]+/,""),t=n[1]);var a={};e=m(e,"invalid",a),e=m(e,"unused",a),e=m(e,"config",a),e=m(e,"subflow",a),e=function(e,t,o){for(var i,n=new RegExp("(?:^| )"+t+":([^ ]+)(?: |$)");i=n.exec(e);)e=e.replace(n," ").trim(),o[t]=o[t]||[],o[t].push(i[1]);return e}(e=m(e,"hidden",a),"uses",a);n=0<Object.keys(a).length;if(0<(e=e.trim()).length||t||n){e=e.toLowerCase();for(var r=[],s={},i=a.uses||Object.keys(v),d=0;d<i.length;d++){var l=i[d],c=i[d].indexOf(e);if(-1<c)for(var u=Object.keys(v[l]),p=0;p<u.length;p++){var f=v[l][u[p]],h="config"===f.node._def.category&&"group"!==f.node.type;if(!a.uses||l!==f.node.id){if(a.hasOwnProperty("invalid")){var g=!f.node.hasOwnProperty("valid")||f.node.valid;if(a.invalid===g)continue}if(!(a.hasOwnProperty("config")&&a.config!==h||a.hasOwnProperty("subflow")&&a.subflow!==("subflow"===f.node.type))){if(a.hasOwnProperty("hidden")){if("tab"!==f.node.type)continue;if(!RED.workspaces.isHidden(f.node.id))continue}if(a.hasOwnProperty("unused")){h="subflow"===f.node.type&&0===f.node.instances.length||h&&0===f.node.users.length;if(a.unused!==h)continue}t&&f.node.type!==t||(s[f.node.id]=s[f.node.id]={node:f.node,label:f.label},s[f.node.id].index=Math.min(s[f.node.id].index||1/0,c))}}}}for((r=Object.keys(s)).sort(function(e,t){return s[e].index-s[t].index}),d=0;d<r.length;d++)o.push(s[r[d]])}return o}function p(){var e,t,o,i=r.find("li.selected");1===i.length&&(t=(e=r.parent()).height(),e.scrollTop(),t<(o=i.position().top)+(i=i.height())?e.animate({scrollTop:"-="+(t-(o+i)-10)},50):o<0&&e.animate({scrollTop:"+="+(o-10)},50))}function f(e){h(),RED.view.reveal(e.id)}function e(e){n||(d||(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&&function(){a=$("<div>",{id:"red-ui-search",class:"red-ui-search"}).appendTo("#red-ui-main-container");var e=$("<div>",{class:"red-ui-search-container"}).appendTo(a);t=$('<input type="text" data-i18n="[placeholder]menu.label.searchInput">').appendTo(e).searchBox({delay:200,change:function(){if(r.editableList("empty"),s=-1,0<(l=u($(this).val())).length){for(i=0;i<Math.min(l.length,25);i++)r.editableList("addItem",l[i]);25<l.length&&r.editableList("addItem",{more:{results:l,start:25}})}else r.editableList("addItem",{})}}),$('<button type="button" class="red-ui-button red-ui-button-small"><i class="fa fa-caret-right"></button>').appendTo(e).on("click",function(e){e.preventDefault(),RED.sidebar.info.outliner.search(t.val()),h()}),t.on("keydown",function(e){var t;if(0<l.length)if(40===e.keyCode)t=r.children(),s<t.length-1&&(-1<s&&$(t[s]).removeClass("selected"),s++),$(t[s]).addClass("selected"),p(),e.preventDefault();else if(38===e.keyCode)t=r.children(),0<s&&(s<t.length&&$(t[s]).removeClass("selected"),s--),$(t[s]).addClass("selected"),p(),e.preventDefault();else if(13===e.keyCode)if(t=r.children(),$(t[s]).hasClass("red-ui-search-more")){var o=$(t[s]).find(".red-ui-editableList-item-content").data("data");if(o){for(r.editableList("removeItem",o),i=o.more.start;i<Math.min(l.length,o.more.start+25);i++)r.editableList("addItem",l[i]);l.length>o.more.start+25&&r.editableList("addItem",{more:{results:l,start:o.more.start+25}})}}else 0<l.length&&f(l[Math.max(0,s)].node)}),t.i18n(),e=$("<div>",{class:"red-ui-search-results-container"}).appendTo(a),r=$("<ol>",{style:"position: absolute;top: 5px;bottom: 5px;left: 5px;right: 5px;"}).appendTo(e).editableList({addButton:!1,addItem:function(e,t,o){var i,n,a=o.node;o.more?(e.parent().addClass("red-ui-search-more"),(i=$("<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})),i.on("click",function(e){for(e.preventDefault(),r.editableList("removeItem",o),t=o.more.start;t<Math.min(l.length,o.more.start+25);t++)r.editableList("addItem",l[t]);l.length>o.more.start+25&&r.editableList("addItem",{more:{results:l,start:o.more.start+25}})})):void 0===a?$("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(e):(a._def,i=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),RED.utils.createNodeIcon(a).appendTo(i),n=$("<div>",{class:"red-ui-search-result-node-description"}).appendTo(i),a.z&&(e=(e=RED.nodes.workspace(a.z))?"flow:"+e.label:"subflow:"+(e=RED.nodes.subflow(a.z)).name,$("<div>",{class:"red-ui-search-result-node-flow"}).text(e).appendTo(n)),$("<div>",{class:"red-ui-search-result-node-label"}).text(o.label||a.id).appendTo(n),$("<div>",{class:"red-ui-search-result-node-type"}).text(a.type).appendTo(n),$("<div>",{class:"red-ui-search-result-node-id"}).text(a.id).appendTo(n),i.on("click",function(e){e.preventDefault(),f(a)}))},scrollOnAdd:!1})}(),a.slideDown(300),t.searchBox("value",e),RED.events.emit("search:open"),d=!0),t.trigger("focus"))}function h(){d&&(d=!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(){t.searchBox("value","")}),RED.events.emit("search:close"),o&&($(o).trigger("focus"),o=null))}function g(){v={}}function b(e){c(e)}function y(e){for(var t=Object.keys(v),o=0,i=t.length;o<i;o++)delete v[t[o]][e.id],0===Object.keys(v[t[o]]).length&&delete v[t[o]]}function w(e){y(e),b(e)}return{init:function(){RED.actions.add("core:search",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",h),$("#red-ui-header-shade").on("mousedown",h),$("#red-ui-editor-shade").on("mousedown",h),$("#red-ui-palette-shade").on("mousedown",h),$("#red-ui-sidebar-shade").on("mousedown",h),RED.events.on("workspace:clear",g),RED.events.on("flows:add",b),RED.events.on("flows:remove",y),RED.events.on("flows:change",w),RED.events.on("subflows:add",b),RED.events.on("subflows:remove",y),RED.events.on("subflows:change",w),RED.events.on("nodes:add",b),RED.events.on("nodes:remove",y),RED.events.on("nodes:change",w),RED.events.on("groups:add",b),RED.events.on("groups:remove",y),RED.events.on("groups:change",w)},show:e,hide:h,search:u}}(),RED.actionList=function(){var o,n,i,a=!1,r=null,s=!1,d="",l=[];function c(){var e,t,o,i=n.find("li.selected");1===i.length&&(t=(e=n.parent()).height(),e.scrollTop(),t<(o=i.position().top)+(i=i.height())?e.animate({scrollTop:"-="+(t-(o+i)-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||(s||(i=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===r&&function(){r=$("<div>",{id:"red-ui-actionList",class:"red-ui-search"}).appendTo("#red-ui-main-container");var e=$("<div>",{class:"red-ui-search-container"}).appendTo(r);(o=$('<input type="text" data-i18n="[placeholder]keyboard.filterActions">').appendTo(e).searchBox({change:function(){d=$(this).val().trim(),l=d.split(" "),n.editableList("filter"),n.find("li.selected").removeClass("selected");var e=n.children(":visible");e.length&&$(e[0]).addClass("selected")}})).on("keydown",function(e){var t,o,i;40===e.keyCode?((o=n.find("li.selected")).length?(i=o.nextAll(":visible").first()).length&&(o.removeClass("selected"),i.addClass("selected")):(t=n.children(":visible")).length&&$(t[0]).addClass("selected"),c(),e.preventDefault()):38===e.keyCode?((i=(o=n.find("li.selected")).prevAll(":visible").first()).length&&(o.removeClass("selected"),i.addClass("selected")),c(),e.preventDefault()):13===e.keyCode&&(o=n.find("li.selected"),u(n.editableList("getItem",o)))}),o.i18n(),e=$("<div>",{class:"red-ui-search-results-container"}).appendTo(r),n=$("<ol>",{style:"position: absolute;top: 5px;bottom: 5px;left: 5px;right: 5px;"}).appendTo(e).editableList({addButton:!1,addItem:function(e,t,o){var i;void 0===o.id?$("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(e):(i=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),e=$("<div>",{class:"red-ui-search-result-action"}).appendTo(i),$("<div>").text(o.label).appendTo(e),o.key&&$("<div>",{class:"red-ui-search-result-action-key"}).html(RED.keyboard.formatKey(o.key)).appendTo(e),i.on("click",function(e){e.preventDefault(),u(o)}))},scrollOnAdd:!1,filter:function(e){if(""===d)return!0;for(var t=0,o=0;o<l.length;o++){var i=e._label.indexOf(l[o],t);if(!(-1<i))return!1;t=i}return!0}})}(),r.slideDown(300),o.searchBox("value",e),n.editableList("empty"),results=[],(t=RED.actions.list()).sort(function(e,t){return e.id.localeCompare(t.id)}),t.forEach(function(e){e.label=e.id.replace(/:/,": ").replace(/-/g," ").replace(/(^| )./g,function(){return arguments[0].toUpperCase()}),e._label=e.label.toLowerCase(),n.editableList("addItem",e)}),RED.events.emit("actionList:open"),s=!0),o.trigger("focus"),(t=n.children(":visible")).length&&$(t[0]).addClass("selected"))}function t(){s&&(s=!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!==r&&r.slideUp(200,function(){o.searchBox("value","")}),RED.events.emit("actionList:close"),i&&($(i).trigger("focus"),i=null))}return{init:function(){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,t,n,o,i,a=null,c=-1,r=!1,s="",u={};function p(){var e,t,o,i=l.find("li.selected");1===i.length&&(t=(e=l.parent()).height(),e.scrollTop(),t<(o=i.position().top)+(i=i.height())?e.animate({scrollTop:"-="+(t-(o+i)-10)},50):o<0&&e.animate({scrollTop:"+="+(o-10)},50))}function f(e,t){var o=a.position();o.top=o.top+t+"px",o.left=o.left+e+"px",a.css(o),i(e,t)}function h(){a=$("<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(a);(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(),s=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,i=l.children(":visible");40===e.keyCode&&e.shiftKey?(e.preventDefault(),f(0,10)):38===e.keyCode&&e.shiftKey?(e.preventDefault(),f(0,-10)):39===e.keyCode&&e.shiftKey?(e.preventDefault(),f(10,0)):37===e.keyCode&&e.shiftKey?(e.preventDefault(),f(-10,0)):0<i.length?40===e.keyCode?(c<i.length-1&&(-1<c&&$(i[c]).removeClass("selected"),c++),$(i[c]).addClass("selected"),p(),e.preventDefault()):38===e.keyCode?(0<c&&(c<i.length&&$(i[c]).removeClass("selected"),c--),$(i[c]).addClass("selected"),p(),e.preventDefault()):(e.metaKey||e.ctrlKey)&&13===e.keyCode?(e.preventDefault(),(o=Math.max(0,c))<i.length&&(t=$(i[o]).find(".red-ui-editableList-item-content").data("data"),u[t.type]=Date.now(),0===t.def.outputs?g(t):n(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))<i.length&&g($(i[o]).find(".red-ui-editableList-item-content").data("data"))):13===e.keyCode&&(e.stopPropagation(),e.preventDefault())}),t=$("<div>",{class:"red-ui-search-results-container"}).appendTo(a),l=$("<ol>",{style:"position: absolute;top: 0;bottom: 0;left: 0;right: 0;"}).appendTo(t).editableList({addButton:!1,filter:function(e){return""===s||!e.recent&&!e.common&&(""===s||-1<e.index.indexOf(s))},sort:function(e,t){if(""===s)return e.i-t.i;var o=e.index.indexOf(s),i=t.index.indexOf(s);return-1===o?1:-1===i?-1:o===i?y(e,t):o-i},addItem:function(e,t,o){var i=o.def;o.index=o.type.toLowerCase(),o.separator&&e.addClass("red-ui-search-result-separator");var n=$("<div>",{class:"red-ui-search-result"}).appendTo(e),a=$("<div>",{class:"red-ui-search-result-node"}).appendTo(n),r=RED.utils.getNodeColor(o.type,i),e=RED.utils.getNodeIcon(i);a.css("backgroundColor",r);r=$("<div/>",{class:"red-ui-palette-icon-container"}).appendTo(a);RED.utils.createIconElement(e,r,!1),0<i.inputs&&$("<div/>",{class:"red-ui-search-result-node-port"}).appendTo(a),0<i.outputs&&$("<div/>",{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(a);i=$("<div>",{class:"red-ui-search-result-description"}).appendTo(n),a=o.label;o.index+="|"+a.toLowerCase(),$("<div>",{class:"red-ui-search-result-node-label"}).text(a).appendTo(i),n.on("click",function(e){e.preventDefault(),g(o)})},scrollOnAdd:!1})}function g(e){m(),u[e.type]=Date.now(),n(e.type)}function v(e){if(r){for(var t=$(e.target);"body"!==t.prop("nodeName").toLowerCase();){if("red-ui-type-search"===t.attr("id"))return;t=t.parent()}m(!0),o&&o()}}function m(e){r&&(r=!1,null!==a&&t.slideUp(e?50:200,function(){a.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 b(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 y(e,t){e=e.label.toLowerCase(),t=t.label.toLowerCase();return e<t?-1:e===t?0:1}function w(e,t,o){return!e||(!e.type||t===e.type)&&(!e.input||0<o.inputs)&&(!e.output||0<o.outputs)}function E(t){l.editableList("empty"),d.searchBox("value","").focus(),c=-1;var o=["inject","debug","function","change","switch"].filter(function(e){return w(t.filter,e,RED.nodes.getType(e))});(e=Object.keys(u)).sort(function(e,t){return u[t]-u[e]});var e=e.filter(function(e){return w(t.filter,e,RED.nodes.getType(e))&&-1===o.indexOf(e)}),i=[];RED.nodes.registry.getNodeTypes().forEach(function(e){var t=RED.nodes.getType(e);"config"!==t.category&&"unknown"!==e&&"tab"!==e&&i.push({type:e,def:t,label:b(e,t)})}),i.sort(y);for(var n,a=0,r=0;r<o.length;r++){var s=RED.nodes.getType(o[r]);s&&((n={type:o[r],common:!0,def:s,i:a++}).label=b(n.type,n.def),r===o.length-1&&(n.separator=!0),l.editableList("addItem",n))}for(r=0;r<Math.min(5,e.length);r++)(n={type:e[r],def:RED.nodes.getType(e[r]),recent:!0,i:a++}).label=b(n.type,n.def),r===e.length-1&&(n.separator=!0),l.editableList("addItem",n);for(r=0;r<i.length;r++)w(t.filter,i[r].type,i[r].def)&&(i[r].i=a++,l.editableList("addItem",i[r]));setTimeout(function(){c=0,l.children(":first").addClass("selected")},100)}return{show:function(e){r?(a.hide(),t.hide()):(null===a&&(h(),RED.keyboard.add("red-ui-type-search","escape",function(){m(),o&&o()})),r=!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",v),$(document).on("mouseup.red-ui-type-search",v),$(document).on("click.red-ui-type-search",v),$(document).on("touchstart.red-ui-type-search",v)},200),E(e),n=e.add,o=e.cancel,i=e.move,RED.events.emit("type-search:open"),$("#red-ui-main-container").height()-e.y-150<0&&(e.y=e.y-235),a.css({left:e.x+"px",top:e.y+"px"}).show(),t.slideDown(300),setTimeout(function(){t.find(".red-ui-editableList-container").scrollTop(0),e.disableFocus||d.trigger("focus")},200)},refresh:E,hide:m}}(),RED.subflow=function(){function r(e,t){var o={x:50,y:30};t||(o.x+=110);var i=[].concat(e.out).concat(e.in);e.status&&i.push(e.status),i.sort(function(e,t){return e.x-t.x});for(var n=0;n<i.length;n++){var a=i[n];a.x==o.x&&a.y==o.y&&(o.x+=55)}return o}function n(){var t=RED.nodes.subflow(RED.workspaces.active());if(0!==t.in.length){var o=t.in[0],i=[];return RED.nodes.eachLink(function(e){("subflow"==e.source.type&&e.source.z==t.id&&e.source.i==o.i||e.target.type=="subflow:"+t.id)&&i.push(e)}),i.forEach(function(e){RED.nodes.removeLink(e)}),t.in=[],$("#red-ui-subflow-input-add").removeClass("active"),$("#red-ui-subflow-input-remove").addClass("active"),t.changed=!0,RED.events.emit("subflows:change",t),{subflowInputs:[o],links:i}}}function s(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];t.out.splice(n.i,1);var a=[],r=[];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&&r.push(e))}),a.forEach(function(e){RED.nodes.removeLink(e)}),r.forEach(function(e){e.sourcePort--});for(var o=o.concat(a),s=n.i;s<t.out.length;s++)t.out[s].i--,t.out[s].dirty=!0}return t.changed=!0,RED.events.emit("subflows:change",t),{subflowOutputs:e,links:o}}}function d(){var t=RED.nodes.subflow(RED.workspaces.active());if(t.status){var o=[];return RED.nodes.eachLink(function(e){"subflow"==e.target.type&&e.target.z==t.id&&"status"==e.target.direction&&o.push(e)}),o.forEach(function(e){RED.nodes.removeLink(e)}),delete t.status,$("#red-ui-subflow-status").prop("checked",!!t.status),$("#red-ui-subflow-status").parent().parent().toggleClass("active",!!t.status),{links:o}}}function l(t){var o=RED.nodes.subflow(RED.workspaces.active());c(o);var i=[];if(o)return RED.nodes.filterNodes({type:"subflow:"+o.id}).forEach(function(e){i.push({id:e.id,changed:e.changed}),t&&(e.changed=!0),e.inputs=o.in.length,e.outputs=o.out.length,e.resize=!0,e.dirty=!0,RED.editor.updateNodeProperties(e)}),RED.editor.validateNode(o),{instances:i}}function c(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 t(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=RED.nodes.dirty(),o=a.changed,i=s();i&&(e=l(!0),RED.history.push({t:"delete",links:i.links,subflowOutputs:i.subflowOutputs,changed:o,dirty:t,subflow:{instances:e.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0))}),$("#red-ui-subflow-output-add").on("click",function(e){var t,o,i;e.preventDefault(),t=RED.nodes.subflow(RED.workspaces.active()),o=r(t,!1),i={type:"subflow",direction:"out",z:t.id,i:t.out.length,x:o.x,y:o.y,id:RED.nodes.id()},e=t.out.length,t.out.push(i),t.dirty=!0,o=RED.nodes.dirty(),i=t.changed,t.changed=!0,e={t:"edit",node:t,dirty:o,changed:i,subflow:{outputCount:e,instances:l(!0).instances}},RED.history.push(e),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#red-ui-subflow-output .spinner-value").text(t.out.length),RED.events.emit("subflows:change",t)}),$("#red-ui-subflow-input-add").on("click",function(e){var t,o,i;e.preventDefault(),1!==(i=RED.nodes.subflow(RED.workspaces.active())).in.length&&(t=r(i,!0),o={type:"subflow",direction:"in",z:i.id,i:i.in.length,x:t.x,y:t.y,id:RED.nodes.id()},e=i.in.length,i.in.push(o),i.dirty=!0,t=RED.nodes.dirty(),o=i.changed,i.changed=!0,e={t:"edit",node:i,dirty:t,changed:o,subflow:{inputCount:e,instances:l(!0).instances}},RED.history.push(e),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",i))}),$("#red-ui-subflow-input-remove").on("click",function(e){e.preventDefault();var t=RED.nodes.dirty(),o=a.changed;a.changed=!0;var i=n();i&&(e=l(!0),RED.history.push({t:"delete",links:i.links,changed:o,subflowInputs:i.subflowInputs,dirty:t,subflow:{instances:e.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0))}),$("#red-ui-subflow-status").on("change",function(e){var t,o,i,n;this.checked?(n=RED.nodes.subflow(RED.workspaces.active())).status||(o=r(n,!1),i={type:"subflow",direction:"status",z:n.id,x:o.x,y:o.y,id:RED.nodes.id()},n.status=i,n.dirty=!0,o=RED.nodes.dirty(),i=n.changed,l(n.changed=!0),RED.history.push({t:"edit",node:n,dirty:o,changed:i,subflow:{status:!0}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),RED.events.emit("subflows:change",n),$("#red-ui-subflow-status").prop("checked",!!n.status),$("#red-ui-subflow-status").parent().parent().toggleClass("active",!!n.status)):(t=a.status,o=a.changed,(i=d())&&(a.changed=!0,n=RED.nodes.dirty(),RED.history.push({t:"delete",links:i.links,changed:o,dirty:n,subflow:{id:a.id,status:t}}),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();var t,o=RED.nodes.subflow(RED.workspaces.active());function i(){var e=RED.nodes.dirty(),t=u(RED.workspaces.active());t.t="delete",t.dirty=e,RED.history.push(t)}0<o.instances.length?(e=$("<div>"),$("<p>").text(RED._("subflow.subflowInstances",{count:o.instances.length})).appendTo(e),$("<p>").text(RED._("subflow.confirmDelete")).appendTo(e),t=RED.notify(e,{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.close()}},{text:RED._("workspace.confirmDelete"),class:"primary",click:function(){t.close(),i()}}]})):i()}),c(a),$("#red-ui-workspace-chart").css({"margin-top":"40px"}),$("#red-ui-workspace-toolbar").show()}function u(t,o){var i=[],e=[],n=[],a=RED.nodes.subflow(t);RED.nodes.eachNode(function(e){o||e.type!="subflow:"+t||i.push(e),e.z==t&&i.push(e)}),RED.nodes.eachConfig(function(e){e.z==t&&i.push(e)}),RED.nodes.groups(t).forEach(function(e){n.push(e)});for(var r=[],s=0;s<i.length;s++)var d=RED.nodes.remove(i[s].id),e=e.concat(d.links),r=r.concat(d.nodes);for(i=i.concat(r),n=RED.nodes.groups(t).filter(function(e){return!e.g}),s=0;s<n.length;s++)n[s].nodes.forEach(function(e){"group"===e.type&&n.push(e)});for(s=n.length-1;0<=s;s--)RED.nodes.removeGroup(n[s]);return RED.nodes.removeSubflow(a),RED.workspaces.remove(a),RED.nodes.dirty(!0),RED.view.redraw(),{nodes:i,links:e,groups:n,subflows:[a]}}function e(){var t=0;RED.nodes.eachSubflow(function(e){e=new RegExp("^Subflow (\\d+)$").exec(e.name);e&&(t=Math.max(t,e[1]))});var e="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 o(){var e=RED.view.selection();if(e.nodes){for(var i,t=new Set,o=e.nodes.slice(),n=new Set;0<o.length;)"group"===(i=o.shift()).type&&(n.add(i.id),o=o.concat(i.nodes)),t.add(i);for(var a=(t=Array.from(t))[0].g,r=[],s=0;s<t.length;s++)if(t[s].g&&!n.has(t[s].g)&&a!==t[s].g)return void RED.notify("Cannot create subflow across multiple groups","error");var a=a&&RED.nodes.group(a),d={},l=[],c=[],u=[],p=[],f={},h=[t[0].x,t[0].y,t[0].x,t[0].y];for(s=0;s<t.length;s++)i=t[s],d[i.id]={n:i,outputs:{}},h=[Math.min(h[0],i.x),Math.min(h[1],i.y),Math.max(h[2],i.x),Math.max(h[3],i.y)];var g=R(h[0]-200),v=R(h[1]-80),m=[R((h[2]+h[0])/2),R((h[3]+h[1])/2)];RED.nodes.eachLink(function(e){d[e.source.id]&&d[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))});var b={};if((p=p.filter(function(e){return b[e.source.id+":"+e.sourcePort]?(b[e.source.id+":"+e.sourcePort].targets.push(e.target),!1):(e.targets=[],e.targets.push(e.target),b[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 y=0;RED.nodes.eachSubflow(function(e){e=new RegExp("^Subflow (\\d+)$").exec(e.name);e&&(y=Math.max(y,e[1]))});var e="Subflow "+(y+1),w=RED.nodes.id(),E={type:"subflow",id:w,name:e,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-v),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-v),z:w,i:t,id:RED.nodes.id(),wires:[{id:e.source.id,port:e.sourcePort}]}})};RED.nodes.addSubflow(E);var D={id:RED.nodes.id(),type:"subflow:"+E.id,x:m[0],y:m[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),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),r.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:RED.nodes.node(e.id)};l.push(e),RED.nodes.addLink(e)})}),E.out.forEach(function(t,e){t.wires.forEach(function(e){e={source:RED.nodes.node(e.id),sourcePort:e.port,target:t};l.push(e),RED.nodes.addLink(e)})}),s=0;s<c.length;s++)RED.nodes.removeLink(c[s]);for(s=0;s<t.length;s++)i=t[s],/^link /.test(i.type)&&(i.links=i.links.filter(function(e){var t,o=d.hasOwnProperty(e);return o||(t=RED.nodes.node(e))&&t.links&&(-1<(e=t.links.indexOf(i.id))&&t.links.splice(e,1)),o})),i.x-=g,i.y-=v,RED.nodes.moveNodeToTab(i,E.id);m={t:"createSubflow",nodes:[D.id],links:l,subflow:{subflow:E,offsetX:g,offsetY:v},activeWorkspace:RED.workspaces.active(),removedLinks:c,dirty:RED.nodes.dirty()};a&&((m={t:"multi",events:[m]}).events.push({t:"addToGroup",group:a,nodes:[D]}),m.events.push({t:"removeFromGroup",group:a,nodes:r,reparent:!1})),RED.history.push(m),RED.editor.validateNode(E),RED.nodes.dirty(!0),RED.view.updateActive(),RED.view.select(null)}}else RED.notify(RED._("subflow.errors.noNodesSelected"),"error")}function a(e,t,o){e.empty();for(var i=0;i<t.length;i++){var n=t[i];n.ui&&"hide"===n.ui.type||function(e,t,o,i){o.label=o.label||{},("cred"===t.type||t.parent&&"cred"===t.parent.type)&&!o.type?(o.type="cred",o.opts={}):o.type?o.opts||(o.opts="select"===o.type?{opts:[]}:{}):(o.type="input",o.opts={types:RED.editor.envVarList.DEFAULT_ENV_TYPE_LIST});var n=o.label||{},a=RED.i18n.lang(),r=RED.editor.envVarList.lookupLabel(n,n["en-US"]||t.name,a),s=$("<label>").appendTo(e);$("<span>&nbsp;</span>").appendTo(e);var d,l=$("<span></span>").appendTo(s);!o.icon||(d=RED.utils.separateIconPath(o.icon))&&$("<i class='fa "+d.file+"'/>").appendTo(l),"checkbox"!==o.type&&(d=o.icon?{"padding-left":"5px"}:{},$("<span>").css(d).text(r).appendTo(s),"none"===o.type&&s.width("100%"));var c={value:"",type:"str"};switch(t.parent&&(c.value=t.parent.value,c.type=t.parent.type),t.hasOwnProperty("value")&&(c.value=t.value),t.hasOwnProperty("type")&&(c.type=t.type),o.type){case"input":var u,p=$('<input type="text">').css("width","70%").appendTo(e);o.opts.types&&0<o.opts.types.length?(u=c.type,-1===o.opts.types.indexOf(u)&&(u=o.opts.types[0]),p.typedInput({types:o.opts.types,default:u}),p.typedInput("value",c.value)):p.val(c.value);break;case"select":p=$("<select>").css("width","70%").appendTo(e),o.opts.opts&&o.opts.opts.forEach(function(e){$("<option>").val(e.v).text(RED.editor.envVarList.lookupLabel(e.l,e.l["en-US"]||e.v,a)).appendTo(p)}),p.val(c.value);break;case"checkbox":s.css("cursor","default");var f=$("<label>").css("width","70%").appendTo(e);p=$('<input type="checkbox">').css({marginTop:0,width:"auto",height:"34px"}).appendTo(f),l.css({"padding-left":"5px"}).appendTo(f),$("<span>").css({"padding-left":"5px"}).text(r).appendTo(f);f=!1,f="bool"===c.type?"true"===c.value:"num"===c.type?"0"!==c.value:""!==c.value;p.prop("checked",f);break;case"spinner":p=$("<input>").css("width","70%").appendTo(e);f={};o.opts.hasOwnProperty("min")&&(f.min=o.opts.min),o.opts.hasOwnProperty("max")&&(f.max=o.opts.max),p.spinner(f).parent().width("70%"),p.val(c.value);break;case"cred":p=$('<input type="password">').css("width","70%").appendTo(e),i.credentials?i.credentials[t.name]?p.val(i.credentials[t.name]):i.credentials["has_"+t.name]?p.val("__PWRD__"):p.val(""):p.val(""),p.typedInput({types:["cred"],default:"cred"})}p&&p.attr("id",h(t.name))}($("<div/>",{class:"form-row"}).appendTo(e),n,n.ui||{},o)}}function p(e,s){if(e){var d=[];return 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 i=t.valueField,n=i.typedInput("value"),i=i.typedInput("type");if(s||!t.parent||t.parent.value!==n||t.parent.type!==i){var a={name:o,type:i,value:n};if(t.ui){var r={icon:t.ui.icon,label:$.extend(!0,{},t.ui.label),type:t.ui.type,opts:$.extend(!0,{},t.ui.opts)};switch(r.icon||delete r.icon,$.isEmptyObject(r.label)&&delete r.label,r.type){case"input":JSON.stringify(r.opts)===JSON.stringify({types:RED.editor.envVarList.DEFAULT_ENV_TYPE_LIST})&&(delete r.type,delete r.opts);break;case"cred":"cred"===a.type&&delete r.type,delete r.opts;break;case"select":r.opts&&$.isEmptyObject(r.opts.opts)&&delete r.opts;break;case"spinner":$.isEmptyObject(r.opts)&&delete r.opts;break;default:delete r.opts}$.isEmptyObject(r)||(a.ui=r)}d.push(a)}}}),d}return null}function f(a){var o={},r=[];if(/^subflow:/.test(a.type)){var e=RED.nodes.subflow(a.type.substring(8));if(e.env&&e.env.forEach(function(e){var t={name:e.name,parent:{type:e.type,value:e.value},ui:$.extend(!0,{},e.ui)};r.push(t),o[e.name]=t}),a.env)for(var t=0;t<a.env.length;t++){var i=a.env[t];o.hasOwnProperty(i.name)&&(o[i.name].type=i.type,o[i.name].value=i.value)}}else a._def.subflowModule&&Object.keys(a._def.defaults).forEach(function(e){if("name"!==e){var t,o=a._def.defaults[e],i=a[e],n=i;if(o.ui&&"cred"===o.ui.type)t="cred";else switch(typeof i){case"string":t="str";break;case"number":t="num";break;case"boolean":t="bool",n=i?"true":"false";break;default:t=i.type,n=i.value}o={name:e,type:t,value:n,parent:{type:o.type,value:o.value},ui:$.extend(!0,{},o.ui)};r.push(o)}});return r}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?t(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.menu.setDisabled("menu-item-subflow-convert",!1):RED.menu.setDisabled("menu-item-subflow-convert",!0)}),RED.actions.add("core:create-subflow",e),RED.actions.add("core:convert-to-subflow",o),$('<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:o,removeSubflow:u,refresh:l,removeInput:n,removeOutput:s,removeStatus:d,buildEditForm:function(e,t){"subflow-template"===e?(function(t,o){var e=RED.tabs.create({id:"subflow-env-tabs",onchange:function(e){"subflow-env-tab-preview"===e.id&&a($("#subflow-input-ui"),p(t.editableList("items"),!0),o),$("#subflow-env-tabs-content").children().hide(),$("#"+e.id).show()}});e.addTab({id:"subflow-env-tab-edit",label:RED._("editor-tab.envProperties")}),e.addTab({id:"subflow-env-tab-preview",label:RED._("editor-tab.preview")}),e=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"));var i=$("#subflow-input-env-locale");e.forEach(function(e){var t={value:e.val};"en-US"===e.val&&(t.selected=""),$("<option/>",t).text(e.text).appendTo(i)}),e=RED.i18n.lang(),i.val(e),i.on("change",function(){RED.editor.envVarList.setLocale($(this).val(),$("#node-input-env-container"))}),RED.editor.envVarList.setLocale(e)}($("#node-input-env-container"),t),RED.editor.envVarList.create($("#node-input-env-container"),t)):"subflow"===e&&a($("#subflow-input-ui"),f(t),t)},exportSubflowTemplateEnv:p,exportSubflowInstanceEnv:function(e){var n=[];return f(e).forEach(function(e){var t,o=e.ui||{};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});var i=$("#"+h(e.name));if(i.length||"cred"===o.type){switch(t={name:e.name},o.type){case"input":o.opts.types&&0<o.opts.types.length?(t.value=i.typedInput("value"),t.type=i.typedInput("type")):(t.value=i.val(),t.type="str");break;case"cred":t.value=i.val(),t.type="cred";break;case"spinner":t.value=i.val(),t.type="num";break;case"select":t.value=i.val(),t.type="str";break;case"checkbox":t.type="bool",t.value=""+i.prop("checked")}"cred"!==o.type&&t.type===e.parent.type&&t.value===e.parent.value||n.push(t)}}),n}}}(),RED.group=function(){for(var t=["#ff0000","#ffC000","#ffff00","#92d04f","#0070c0","#001f60","#6f2fa0","#000000","#777777"],o=t.length,e=0,i=3*t.length;e<i;e++){var n=e%o,a=Math.floor(e/o)+1,r=t[n],s=parseInt(r.substring(1,3),16),d=parseInt(r.substring(3,5),16),l=parseInt(r.substring(5,7),16),c=(255-d)/(3+(n==o-1?0:1)),r=(255-l)/(3+(n==o-1?0:1)),l=(((s=Math.min(255,Math.floor(s+a*((255-s)/(3+(n==o-1?0:1))))))<<16)+((d=Math.min(255,Math.floor(d+a*c)))<<8)+(l=Math.min(255,Math.floor(l+a*r)))).toString(16);t.push("#"+"000000".slice(0,6-l.length)+l)}var u,p={label:!0,"label-position":"nw"};function f(e){var t=/^rgb\((\d+), (\d+), (\d+)\)$/.exec(e);if(t){t=((parseInt(t[1])<<16)+(parseInt(t[2])<<8)+parseInt(t[3])).toString(16);return"#"+"000000".slice(0,6-t.length)+t}return e}function h(e){var t=[],o=RED.nodes.group(e.g);return 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):RED.events.emit("nodes:change",e)}),RED.nodes.removeGroup(e),t}function g(e){if(0!==e.length){if(!(0<e.filter(function(e){return"subflow"===e.type}).length)){var t={id:RED.nodes.id(),type:"group",nodes:[],style:JSON.parse(JSON.stringify(p)),x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY,w:0,h:0,_def:RED.group.def};t.z=e[0].z,RED.nodes.addGroup(t);try{v(t,e)}catch(e){return void RED.notify(e,"error")}return t}RED.notify(RED._("group.errors.cannotAddSubflowPorts"),"error")}}function v(e,t){var o,i,n,a,r;for(Array.isArray(t)||(t=[t]),o=0;o<t.length;o++){if(!(r=t[o]).z)throw new Error("Cannot add node without a z property to a group");if(i){if(i!==r.z)throw new Error("Cannot add nooes with different z properties")}else i=r.z;if(r.g&&!n){if(0!==o)throw new Error(RED._("group.errors.cannotCreateDiffGroups"));n=r.g}if(n!==r.g)throw new Error(RED._("group.errors.cannotCreateDiffGroups"))}for(n&&((n=RED.nodes.group(n)).nodes.push(e),n.dirty=!0,e.g=n.id),o=0;o<t.length;o++)"subflow"!==(r=t[o]).type&&(!n||r.g!==n.id||-1<(a=n.nodes.indexOf(r))&&n.nodes.splice(a,1),r.g=e.id,r.dirty=!0,e.nodes.push(r),e.x=Math.min(e.x,r.x-r.w/2-25-(r._def.button&&"right"!==r._def.align?20:0)),e.y=Math.min(e.y,r.y-r.h/2-25),e.w=Math.max(e.w,r.x+r.w/2+25+(r._def.button&&"right"==r._def.align?20:0)-e.x),e.h=Math.max(e.h,r.y+r.h/2+25-e.y),"group"===r.type?RED.events.emit("groups:change",r):RED.events.emit("nodes:change",r));n&&RED.events.emit("groups:change",e),b(e)}function m(e,t,o){var i;Array.isArray(t)||(t=[t]);for(var n=0;n<t.length;n++)if(t[n].g!==e.id)return;for(var a=RED.nodes.group(e.g),n=0;n<t.length;n++){(i=t[n]).dirty=!0;var r=e.nodes.indexOf(i);e.nodes.splice(r,1),o&&e.g?(i.g=e.g,a.nodes.push(i)):delete i.g,"group"===i.type?RED.events.emit("groups:change",i):RED.events.emit("nodes:change",i)}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=this.style||{};RED.editor.colorPicker.create({id:"node-input-style-stroke",value:e.stroke||p.stroke||"#a4a4a4",palette:t,cellPerRow:o,cellWidth:16,cellHeight:16,cellMargin:3,none:!0,opacity:e.hasOwnProperty("stroke-opacity")?e["stroke-opacity"]:p.hasOwnProperty("stroke-opacity")?p["stroke-opacity"]:1}).appendTo("#node-input-row-style-stroke"),RED.editor.colorPicker.create({id:"node-input-style-fill",value:e.fill||p.fill||"none",palette:t,cellPerRow:o,cellWidth:16,cellHeight:16,cellMargin:3,none:!0,opacity:e.hasOwnProperty("fill-opacity")?e["fill-opacity"]:p.hasOwnProperty("fill-opacity")?p["fill-opacity"]:1}).appendTo("#node-input-row-style-fill"),function(e){var 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);function p(){var e=c.val();o.removeClass().addClass("red-ui-group-layout-picker-cell-text red-ui-group-layout-text-pos-"+e)}var 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);return u.on("click",function(e){var t,o=$("<div/>",{class:"red-ui-group-layout-picker"}).css({width:"126px"});$("<div/>").appendTo(o);for(var i=0;i<2;i++)for(var n="ns"[i],a=$("<div/>").appendTo(o),r=0;r<3;r++){var s=n+["w","","e"][r],d=$("<button/>",{class:"red-ui-search-result-node red-ui-button","data-pos":s}).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-"+s}).appendTo(d),s===c.val()&&(t=d)}p();var l=RED.popover.panel(o);l.show({target:u,onclose:function(){u.focus()}}),t&&t.focus()}),p(),t}({id:"node-input-style-label-position",value:e["label-position"]||"nw"}).appendTo("#node-input-row-style-label-position"),RED.editor.colorPicker.create({id:"node-input-style-color",value:e.color||p.color||"#a4a4a4",palette:t,cellPerRow:o,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]===p[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,i=!1,n=!1,a=!1;t&&(a=1===e.nodes.length&&"group"===e.nodes[0].type,e.nodes.forEach(function(e){"group"===e.type&&(o=!0),e.g&&(n=!0)}),o&&(i=1<e.nodes.length)),RED.menu.setDisabled("menu-item-group-group",!t),RED.menu.setDisabled("menu-item-group-ungroup",!o),RED.menu.setDisabled("menu-item-group-merge",!i),RED.menu.setDisabled("menu-item-group-remove",!n),RED.menu.setDisabled("menu-item-edit-copy-group-style",!a),RED.menu.setDisabled("menu-item-edit-paste-group-style",!o)}),RED.actions.add("core:group-selection",function(){var e,t;RED.view.state()===RED.state.DEFAULT&&(!(t=RED.view.selection()).nodes||(e=g(t.nodes))&&(t={t:"createGroup",groups:[e],dirty:RED.nodes.dirty()},RED.history.push(t),RED.view.select({nodes:[e]}),RED.nodes.dirty(!0)))}),RED.actions.add("core:ungroup-selection",function(){var e,t,o;RED.view.state()!==RED.state.DEFAULT||(e=RED.view.selection()).nodes&&(t=[],groups=e.nodes.filter(function(e){return"group"===e.type}),o={t:"ungroup",groups:[],dirty:RED.nodes.dirty()},RED.history.push(o),groups.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.actions.add("core:merge-selection-to-group",function(){!function(){if(RED.view.state()===RED.state.DEFAULT){var e=RED.view.selection();if(e.nodes){for(var t,o,i,n=[],a={t:"multi",events:[]},r={t:"ungroup",groups:[]},s=0;s<e.nodes.length;s++)if(t=e.nodes[s],0===s)o=t.g;else if(t.g!==o)return RED.notify(RED._("group.errors.cannotCreateDiffGroups"),"error");for(s=0;s<e.nodes.length;s++)"group"===(t=e.nodes[s]).type?(i=i||t,r.groups.push(t),n=n.concat(h(t))):n.push(t),t.dirty=!0;0<r.groups.length&&a.events.push(r);var d=g(n);d&&(i&&(d.style=i.style,d.name=i.name),RED.view.select({nodes:[d]})),a.events.push({t:"createGroup",groups:[d],dirty:RED.nodes.dirty()}),RED.history.push(a),RED.nodes.dirty(!0)}}}()}),RED.actions.add("core:remove-selection-from-group",function(){!function(){if(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{m(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 RED.notify(e,"error")}RED.view.select({nodes:e.nodes})}}}()}),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.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]);p={stroke:f(t.stroke),"stroke-opacity":t.strokeOpacity,fill:f(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]),p.color=f(t.fill),e.remove()},createGroup:g,ungroup:h,addToGroup:v,removeFromGroup:m,getNodes:function t(e,o){var i=[];return e.nodes.forEach(function(e){i.push(e),o&&"group"===e.type&&(i=i.concat(t(e,o)))}),i},contains:function e(t,o){if(o.g===t.id)return!0;for(var i=0;i<t.nodes.length;i++)if("group"===t.nodes[i].type&&e(t.nodes[i],o))return!0;return!1},markDirty:b}}(),RED.userSettings=function(){var t=700,o=!1,a=[];function e(e){a.push(e)}function r(n){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 t=e.find(".red-ui-tray-body"),e=$("<div></div>").appendTo(t),t=$("<div></div>",{class:"red-ui-settings-tabs-container"}).appendTo(e);$("<ul></ul>",{id:"user-settings-tabs"}).appendTo(t);var 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);a.forEach(function(e){o.addTab({id:"red-ui-settings-tab-"+e.id,label:e.title,pane:e}),e.get().hide().appendTo(i)}),e.i18n(),o.activateTab("red-ui-settings-tab-"+(n||"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 i(e){var t=RED._("languages."+e);return{text:t||e,val:e}}function n(e,t){return e.text.localeCompare(t.text)}var s=[{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(i).sort(n)))}}]},{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 n=$('<div id="red-ui-settings-tab-view" class="red-ui-help"></div>'),a=RED.settings.get("editor")||{};return a.view=a.view||{},s.forEach(function(e){e.title&&$("<h3></h3>").text(RED._(e.title)).appendTo(n),e.options.forEach(function(e){var i,t=e.local?localStorage.getItem(e.setting):a.view[e.setting],o=$('<div class="red-ui-settings-row"></div>').appendTo(n);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),i=$('<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(i)})}),i.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))})}),n}function c(e,t){var o=d[e];o.local?localStorage.setItem(o.setting,t):((e=RED.settings.get("editor")||{}).view=e.view||{},e.view[o.setting]=t,RED.settings.set("editor",e),(e="string"==typeof(e=o.onchange)?RED.actions.get(e):e)&&e.call(o,t))}return{init:function(){RED.actions.add("core:show-user-settings",r),RED.actions.add("core:show-help",function(){r("keyboard")}),e({id:"view",title:RED._("menu.label.view.view"),get:l,close:function(){s.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 i=RED.settings.get("editor")||{};i.view=i.view||{};var n=!1;s.forEach(function(e){e.options.forEach(function(e){var t,o;e.local?d[e.setting]=e:(!e.oldSetting||null!=(o=RED.settings.get(e.oldSetting))&&(i.view[e.setting]=o,n=!0,RED.settings.remove(e.oldSetting)),d[e.setting]=e,null==(t=i.view[e.setting])&&e.hasOwnProperty("default")&&(t=e.default,i.view[e.setting]=t,n=!0),!e.onchange||(o="string"==typeof(o=e.onchange)?RED.actions.get(o):o)&&o.call(e,t))})}),n&&RED.settings.set("editor",i)},toggle:function(e){var t=d[e],o=RED.settings.get("editor")||{};o.view=o.view||{},c(e,!o.view[t.setting])},show:r,add:e}}(),RED.projects=function(){var B,n,G;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 b=$('<div class="red-ui-projects-dialog-screen-start-hero"></div>');$('<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(b),$("<hr>").appendTo(b);var R,x,_,k,T,C,j,L,S,O,I,N,d,r,s,y,w,E,D,P,A,M,z,f,h,l,c,g={};a={welcome:{content:function(e){var t=$('<div class="red-ui-projects-dialog-screen-start"></div>');b.appendTo(t);var o=$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.welcome.hello")).appendTo(o),$("<p>").text(RED._("projects.welcome.desc0")).appendTo(o),$("<p>").text(RED._("projects.welcome.desc1")).appendTo(o),$("<p>").text(RED._("projects.welcome.desc2")).appendTo(o);var i=$('<div style="text-align: center"></div>').appendTo(o),o=$('<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(i),i=$('<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(i);return o.on("click",function(e){e.preventDefault(),g={action:"create"},u("git-config")}),i.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){var t=!1,o=RED.settings.get("git");o&&o.user?o=o.user:RED.settings.git&&RED.settings.git.globalUser&&(t=!0,o=RED.settings.git.globalUser);function i(){var e=l.val().trim(),t=c.val().trim(),t=0<e.length&&0<t.length;$("#red-ui-projects-dialog-git-config").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)}var n=$('<div class="red-ui-projects-dialog-screen-start"></div>');b.appendTo(n);var a=$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(n);$("<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),t&&$("<p>").text(RED._("projects.git-config.desc2")).appendTo(a),$("<p>").text(RED._("projects.git-config.desc3")).appendTo(a);t=$('<div class="form-row"></div>').appendTo(a);return $('<label for="">'+RED._("projects.git-config.username")+"</label>").appendTo(t),(l=$('<input type="text">').val(o&&o.name||"").appendTo(t)).on("change keyup paste",i),t=$('<div class="form-row"></div>').appendTo(a),$('<label for="">'+RED._("projects.git-config.email")+"</label>").appendTo(t),(c=$('<input type="text">').val(o&&o.email||"").appendTo(t)).on("change keyup paste",i),setTimeout(function(){l.trigger("focus"),i()},50),n},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=null,i=!1;$.getJSON("projects",function(e){o={},e.projects.forEach(function(e){o[e]=!0,i&&(i=!1,a())})});var t=$('<div class="red-ui-projects-dialog-screen-start"></div>');b.appendTo(t);var n=$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.project-details.create")).appendTo(n),$("<p>").text(RED._("projects.project-details.desc0")).appendTo(n),$("<p>").text(RED._("projects.project-details.desc1")).appendTo(n),$("<p>").text(RED._("projects.project-details.desc2")).appendTo(n);var a=function(){var e=f.val(),t=!0;if(u){if(null===o)return void(i=!0);c.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||o[e]?(f.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(c),t=d=!1,o[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")),d=!0),p=e}t=d,$("#red-ui-projects-dialog-create-name").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)},r=$('<div class="form-row"></div>').appendTo(n);$('<label for="red-ui-projects-dialog-screen-create-project-name">'+RED._("projects.project-details.project-name")+"</label>").appendTo(r);var s=$('<div style="position:relative;"></div>').appendTo(r);f=$('<input id="red-ui-projects-dialog-screen-create-project-name" type="text"></input>').val(g.name||"").appendTo(s);var d,l,c=$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(s),u=!1,p="";return f.on("change keyup paste",function(){if(u=f.val()!==p,l)clearTimeout(l);else if(u&&(c.empty(),$('<img src="red/images/spin.svg"/>').appendTo(c),""===f.val()))return void a();l=setTimeout(function(){a(),l=null},300)}),projectNameSublabel=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.project-details.must-contain")+"</small></label>").appendTo(r).find("small"),r=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(n),$('<label for="red-ui-projects-dialog-screen-create-project-desc">'+RED._("projects.project-details.desc")+"</label>").appendTo(r),h=$('<input id="red-ui-projects-dialog-screen-create-project-desc" type="text">').val(g.summary||"").appendTo(r),$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.project-details.opt")+"</small></label>").appendTo(r),setTimeout(function(){f.trigger("focus"),f.trigger("change")},50),t},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 t=$('<div class="red-ui-projects-dialog-screen-start"></div>');b.appendTo(t);var o=$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.clone-project.clone")).appendTo(o),$("<p>").text(RED._("projects.clone-project.desc0")).appendTo(o);var i=null,n=!1;$.getJSON("projects",function(e){i={},e.projects.forEach(function(e){i[e]=!0,n&&(n=!1,a())})});var a=function(){var e=y.val(),t=!0;if(u){if(null===i)return void(n=!0);c.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||i[e]?(y.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(c),t=d=!1,i[e]?A.text(RED._("projects.clone-project.already-exists")):A.text(RED._("projects.clone-project.must-contain"))):(y.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(c),A.text(RED._("projects.clone-project.must-contain")),d=!0),p=e}var t=d,o=E.val(),e=0<o.length&&!/\s/.test(o);/^https?:\/\/[^/]+@/i.test(o)&&($("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.no-info-in-url")),e=!1),e?E.removeClass("input-error"):(h&&E.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()),$("#red-ui-projects-dialog-clone-project").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)},r=$('<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(o);$('<label for="red-ui-projects-dialog-screen-create-project-name">'+RED._("projects.clone-project.project-name")+"</label>").appendTo(r);var s=$('<div style="position:relative;"></div>').appendTo(r);y=$('<input id="red-ui-projects-dialog-screen-create-project-name" type="text"></input>').appendTo(s);var d,l,c=$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(s),u=!1,p="",f="";y.on("change keyup paste",function(){if(u=y.val()!==p,l)clearTimeout(l);else if(u&&(c.empty(),$('<img src="red/images/spin.svg"/>').appendTo(c),""===y.val()))return void a();l=setTimeout(function(){a(),l=null},300)}),A=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.clone-project.must-contain")+"</small></label>").appendTo(r).find("small"),r=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(o),$('<label for="red-ui-projects-dialog-screen-create-project-repo">'+RED._("projects.clone-project.git-url")+"</label>").appendTo(r),E=$('<input id="red-ui-projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(r),$('<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(r);var h=!1,g="";E.on("change keyup paste",function(){h=!0;var e=$(this).val();g!==e&&$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.protocols")),g=e;var t=/\/([^/]+?)(?:\.git)?$/.exec(e);t&&(""!==(e=y.val())&&e!==f||(f=t[1],y.val(f),y.trigger("change"))),a()});var v=$('<div class="red-ui-projects-dialog-screen-create-row"></div>').appendTo(o);r=$('<div class="form-row red-ui-projects-dialog-screen-create-row-auth-error"></div>').hide().appendTo(v),$('<div><i class="fa fa-warning"></i> '+RED._("projects.clone-project.auth-failed")+"</div>").appendTo(r),r=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row-creds"></div>').hide().appendTo(v);s=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(r);$('<label for="red-ui-projects-dialog-screen-create-project-repo-user">'+RED._("projects.clone-project.username")+"</label>").appendTo(s),D=$('<input id="red-ui-projects-dialog-screen-create-project-repo-user" type="text"></input>').appendTo(s),s=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(r),$('<label for="red-ui-projects-dialog-screen-create-project-repo-pass">'+RED._("projects.clone-project.passwd")+"</label>").appendTo(s),(P=$('<input style="width:100%" id="red-ui-projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(s)).typedInput({type:"cred"}),r=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-sshkey"></div>').hide().appendTo(v),s=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(r),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.ssh-key")+"</label>").appendTo(s),M=$("<select>",{style:"width: 100%"}).appendTo(s),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){M.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(M.addClass("input-error"),M.attr("disabled",!0),m.show()):(M.removeClass("input-error"),M.attr("disabled",!1),m.hide())}),s=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(r),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.passphrase")+"</label>").appendTo(s),(z=$('<input id="red-ui-projects-dialog-screen-create-project-repo-passphrase" type="password"></input>').appendTo(s)).typedInput({type:"cred"}),s=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-sshkey"></div>').appendTo(v);var m=$('<div class="red-ui-projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(s);return $('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.clone-project.ssh-key-desc")+"</div>").appendTo(m),s=$('<div style="text-align: center">').appendTo(m),$('<button class="red-ui-button red-ui-projects-dialog-button">'+RED._("projects.clone-project.ssh-key-add")+"</button>").appendTo(s).on("click",function(e){e.preventDefault(),B.dialog("close"),RED.userSettings.show("gitconfig"),setTimeout(function(){$("#user-settings-gitconfig-add-key").trigger("click")},500)}),r=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(o),$("<label>"+RED._("projects.clone-project.credential-key")+"</label>").appendTo(r),(w=$('<input style="width: 100%" type="password"></input>').appendTo(r)).typedInput({type:"cred"}),t},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:y.val()};e.credentialSecret=w.val();var t=E.val();if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(t)){var o=M.val();if(!o)return void console.log(RED._("projects.clone-project.cant-get-ssh-key"));e.git={remotes:{origin:{url:t,keyFile:o,passphrase:z.val()}}}}else e.git={remotes:{origin:{url:t,username:D.val(),password:P.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")),D.removeClass("input-error"),P.removeClass("input-error"),M.removeClass("input-error"),z.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(e.name),F({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(e){B.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){E.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){E.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){E.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(),D.addClass("input-error"),P.addClass("input-error"),M.addClass("input-error"),z.addClass("input-error")},missing_flow_file:function(e){B.dialog("close")},missing_package_file:function(e){B.dialog("close")},project_empty:function(e){B.dialog("close")},credentials_load_failed:function(e){B.dialog("close")},"*":function(e){p(e),$(B).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){var t=$('<div class="red-ui-projects-dialog-screen-start"></div>');b.appendTo(t);var o=$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.default-files.create")).appendTo(o),$("<p>").text(RED._("projects.default-files.desc0")).appendTo(o),$("<p>").text(RED._("projects.default-files.desc1")).appendTo(o),!e.existingProject&&RED.settings.files&&$("<p>").text(RED._("projects.default-files.desc2")).appendTo(o);function i(){var e=!0,t=r.val();""!==t&&/\.json$/.test(t)?(r.hasClass("input-error")&&(r.removeClass("input-error"),r.next().empty()),s.hasClass("input-error")&&(s.removeClass("input-error"),s.next().empty()),s.text(t.substring(0,t.length-5)+"_cred.json")):(e=!1,r.hasClass("input-error")||(r.addClass("input-error"),r.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>')),s.text(""),s.hasClass("input-error")||(s.addClass("input-error"),s.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 n=$('<div class="form-row"></div>').appendTo(o);$('<label for="red-ui-projects-dialog-screen-create-project-file">'+RED._("projects.default-files.flow-file")+"</label>").appendTo(n);var a=$('<div style="position:relative;"></div>').appendTo(n),e=g.files&&g.files.flow||RED.settings.files&&RED.settings.files.flow||"flow.json";r=$('<input id="red-ui-projects-dialog-screen-create-project-file" type="text">').val(e).on("change keyup paste",i).appendTo(a),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(a),$('<label class="red-ui-projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(n);e=g.files&&g.files.credentials||RED.settings.files&&RED.settings.files.credentials||"flow_cred.json",n=$('<div class="form-row"></div>').appendTo(o);return $('<label for="red-ui-projects-dialog-screen-create-project-credfile">'+RED._("projects.default-files.credentials-file")+"</label>").appendTo(n),a=$('<div style="position:relative;"></div>').appendTo(n),s=$('<div style="width: 100%" class="uneditable-input" id="red-ui-projects-dialog-screen-create-project-credentials">').text(e).appendTo(a),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(a),setTimeout(function(){r.trigger("focus"),i()},50),t},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:r.val(),credentials:s.text()},e.existingProject||(g.migrateFiles=!0),u("encryption-config",e)}}]}},"encryption-config":{content:function(e){var t=$('<div class="red-ui-projects-dialog-screen-start"></div>');b.appendTo(t);var o=$('<div class="red-ui-projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.encryption-config.setup")).appendTo(o),e.existingProject?($("<p>").text(RED._("projects.encryption-config.desc0")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc1")).appendTo(o)):"disabled"===RED.settings.flowEncryptionType?($("<p>").text(RED._("projects.encryption-config.desc2")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc3")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc4")).appendTo(o)):("user"===RED.settings.flowEncryptionType?$("<p>").text(RED._("projects.encryption-config.desc5")).appendTo(o):"system"===RED.settings.flowEncryptionType&&$("<p>").text(RED._("projects.encryption-config.desc6")).appendTo(o),$("<p>").text(RED._("projects.encryption-config.desc7")).appendTo(o));function i(){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)}e=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(o);$("<label>"+RED._("projects.encryption-config.credentials")+"</label>").appendTo(e);var o=$('<div class="red-ui-projects-dialog-credentials-box">').appendTo(e),n=$('<div class="red-ui-projects-dialog-credentials-box-right">').appendTo(o),a=$('<div class="red-ui-projects-dialog-credentials-box-left">').appendTo(o),r=$('<div class="form-row red-ui-projects-dialog-credentials-box-enabled"></div>').appendTo(a);$('<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(r);var 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(s),a.find("input[name=projects-encryption-type]").on("click",function(e){var t,o;"enabled"===$(this).val()?(t=r,o=s,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&d.trigger("focus")):(o=r,t=s,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.removeClass("disabled"),o.addClass("disabled"),i()}),e=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(n),$('<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(n),$('<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(n),(d=$('<input disabled type="password" style="margin-left: 25px; width: calc(100% - 30px);"></input>').appendTo(e)).typedInput({type:"cred"}),d.on("change keyup paste",i),e=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(n),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.encryption-config.desc8")+"</div>").appendTo(e),n.find("input[name=projects-encryption-key]").on("click",function(){var e=$(this).val();d.attr("disabled","default"===e),"custom"===e&&d.trigger("focus"),i()}),setTimeout(function(){a.find("input[name=projects-encryption-type][value=enabled]").trigger("click"),("user"!==RED.settings.flowEncryptionType?n.find("input[name=projects-encryption-key][value=custom]"):n.find("input[name=projects-encryption-key][value=default]")).trigger("click"),i()},100),t},buttons:function(i){return[{text:RED._("common.label.back"),click:function(){u("default-files",i)}},{id:"red-ui-projects-dialog-create-encryption",text:RED._(i.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";i.existingProject&&(g.initialise=!0,e="PUT",t="projects/"+G.name);var o=this;F({url:t,type:e,requireCleanWorkspace:!0,handleAuthFail:!1,responses:{200:function(e){g={},i.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),$(B).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>');b.appendTo(t);var o=$('<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 n=null;N=null;var a=!1;$.getJSON("projects",function(e){n={},e.projects.forEach(function(e){n[e]=!0,a&&(a=!1,i())})});var t=$('<div class="red-ui-projects-dialog-screen-create"></div>'),i=function(){var e=R.val(),t=!0;if(f){if(null===n)return void(a=!0);p.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||n[e]?(R.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(p),t=c=!1,n[e]?S.text(RED._("projects.create.already-exists")):S.text(RED._("projects.create.must-contain"))):(R.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(p),S.text(RED._("projects.create.must-contain")),c=!0),h=e}var o,t=c,i=$(".red-ui-projects-dialog-screen-create-type.selected").data("type");"copy"===i?t=!1:"clone"===i?(e=0<(o=T.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")),e=!1),e?T.removeClass("input-error"):(w&&T.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"===i?(""!==(o=_.val())&&/\.json$/.test(o)?_.hasClass("input-error")&&(_.removeClass("input-error"),_.next().empty()):(t=!1,_.hasClass("input-error")||(_.addClass("input-error"),_.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&&""!==C.val())):"open"===i&&(t=!!N),$("#red-ui-projects-dialog-create").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)},o=$('<div class="form-row button-group"></div>').appendTo(t),r=$('<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(o),s=$('<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(o),d=$('<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(o);o.find(".red-ui-projects-dialog-screen-create-type").on("click",function(e){switch(e.preventDefault(),t.find(".red-ui-projects-dialog-screen-create-type").removeClass("selected"),$(this).addClass("selected"),t.find(".red-ui-projects-dialog-screen-create-row").hide(),t.find(".red-ui-projects-dialog-screen-create-row-"+$(this).data("type")).show(),i(),R.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"))}}),o=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-open"></div>').hide().appendTo(t),function(r){r=r||{};var i,e=$("<div></div>",{class:"red-ui-projects-dialog-project-list-container"}),t="",o=$("<div>",{class:"red-ui-search-container"}).appendTo(e),s=$('<input id="red-ui-projects-dialog-project-list-search" type="text" placeholder="'+RED._("projects.create-project-list.search")+'">').appendTo(o).searchBox({delay:200,change:function(){t=$(this).val().toLowerCase(),l.editableList("filter"),i&&!i.is(":visible")&&i.children().children().removeClass("selected"),(i=l.children(":visible").first()).children().children().addClass("selected"),r.select&&r.select(i.children().data("data")),d()}});s.on("keydown",function(e){if(40===e.keyCode){e.preventDefault();var t=i;if(i){for(;0!==(t=t.next()).length&&!t.is(":visible"););if(0===t.length)return;i.children().children().removeClass("selected")}else t=l.children(":visible").first();(i=t).children().children().addClass("selected"),r.select&&r.select(i.children().data("data")),d()}else if(38===e.keyCode){e.preventDefault();var o=i;if(i){for(;0!==(o=o.prev()).length&&!o.is(":visible"););if(0===o.length)return;i.children().children().removeClass("selected")}else o=l.children(":visible").first();(i=o).children().children().addClass("selected"),r.select&&r.select(i.children().data("data")),d()}else 13===e.keyCode&&(e.preventDefault(),i&&r.dblclick&&r.dblclick(i.children().data("data")))}),s.i18n();var d=function(){var e,t,o,i=l.find(".red-ui-projects-dialog-project-list-entry.selected").parent().parent();1===i.length&&(t=(e=n).height(),e.scrollTop(),t<(o=i.position().top)+(i=i.height())?e.animate({scrollTop:"-="+(t-o-i)},50):o<0&&e.animate({scrollTop:"+="+o},50))},n=$("<div></div>",{class:"red-ui-projects-dialog-project-list-inner-container"}).appendTo(e),l=$("<ol>",{class:"red-ui-projects-dialog-project-list"}).appendTo(n).editableList({addButton:!1,height:"auto",scrollOnAdd:!1,addItem:function(n,e,a){var t,o=$("<div></div>",{class:"red-ui-projects-dialog-project-list-entry"}).appendTo(n);$('<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),G&&G.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===r.canSelectActive)||(o.addClass("selectable"),t=$('<div class="red-ui-projects-dialog-project-list-entry-tools"></div>').appendTo(o),$('<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,i;e.stopPropagation(),e.preventDefault(),e=n,t=a.name,o=function(e){e||n.fadeOut(300,function(){l.editableList("removeItem",a),r.delete&&r.delete(a)})},i=$('<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(i),$('<button class="red-ui-button red-ui-projects-dialog-button">'+RED._("common.label.cancel")+"</button>").appendTo(i).on("click",function(e){e.stopPropagation(),i.remove(),o(!0)}),$('<button class="red-ui-button red-ui-projects-dialog-button primary">'+RED._("common.label.delete")+"</button>").appendTo(i).on("click",function(e){e.stopPropagation(),i.remove(),F({url:"projects/"+t,type:"DELETE",responses:{200:function(e){o(!1)},400:{unexpected_error:function(e){i.remove(),o(!0)}}}})}),setTimeout(function(){i.css("left",0)},50)}),n.on("click",function(e){$(".red-ui-projects-dialog-project-list-entry").removeClass("selected"),o.addClass("selected"),i=n.parent(),r.select&&r.select(a),d(),s.trigger("focus")}),r.dblclick&&n.on("dblclick",function(e){e.preventDefault(),r.dblclick(a)}))},filter:function(e){return""===t||-1!==e.name.toLowerCase().indexOf(t)}});return $.getJSON("projects",function(e){e.projects.forEach(function(e){l.editableList("addItem",{name:e})})}),e}({canSelectActive:!1,dblclick:function(e){N=e,$("#red-ui-projects-dialog-create").trigger("click")},select:function(e){N=e,i()},delete:function(e){n&&delete n[e.name],N=null,i()}}).appendTo(o),o=$('<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(t),$('<label for="red-ui-projects-dialog-screen-create-project-name">'+RED._("projects.create.project-name")+"</label>").appendTo(o);var l=$('<div style="position:relative;"></div>').appendTo(o);R=$('<input id="red-ui-projects-dialog-screen-create-project-name" type="text"></input>').appendTo(l);var c,u,p=$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(l),f=!1,h="",g="";R.on("change keyup paste",function(){if(f=R.val()!==h,u)clearTimeout(u);else if(f&&(p.empty(),$('<img src="red/images/spin.svg"/>').appendTo(p),""===R.val()))return void i();u=setTimeout(function(){i(),u=null},300)}),S=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.create.must-contain")+"</small></label>").appendTo(o).find("small"),o=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(t),$('<label for="red-ui-projects-dialog-screen-create-project-desc">'+RED._("projects.create.desc")+"</label>").appendTo(o),x=$('<input id="red-ui-projects-dialog-screen-create-project-desc" type="text">').appendTo(o),$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.create.opt")+"</small></label>").appendTo(o),o=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(t),$('<label for="red-ui-projects-dialog-screen-create-project-file">'+RED._("projects.create.flow-file")+"</label>").appendTo(o),l=$('<div style="position:relative;"></div>').appendTo(o),_=$('<input id="red-ui-projects-dialog-screen-create-project-file" type="text">').val("flow.json").on("change keyup paste",i).appendTo(l),$('<div class="red-ui-projects-dialog-screen-input-status"></div>').appendTo(l),$('<label class="red-ui-projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(o),o=$('<div class="form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-empty"></div>').appendTo(t),$("<label>"+RED._("projects.create.credentials")+"</label>").appendTo(o);var v=$('<div class="red-ui-projects-dialog-credentials-box">').appendTo(o),m=$('<div class="red-ui-projects-dialog-credentials-box-right">').appendTo(v),v=$('<div class="red-ui-projects-dialog-credentials-box-left">').appendTo(v),b=$('<div class="form-row red-ui-projects-dialog-credentials-box-enabled"></div>').appendTo(v);$('<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(b);var y=$('<div class="form-row red-ui-projects-dialog-credentials-box-disabled disabled"></div>').appendTo(v);$('<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(y),v.find("input[name=projects-encryption-type]").on("click",function(e){var t,o;"enabled"===$(this).val()?(t=b,o=y,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&C.trigger("focus")):(o=b,t=y,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.removeClass("disabled"),o.addClass("disabled"),i()}),o=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(m),$('<label class="red-ui-projects-edit-form-inline-label">'+RED._("projects.create.encryption-key")+"</label>").appendTo(o),(C=$('<input type="password"></input>').appendTo(o)).typedInput({type:"cred"}),C.on("change keyup paste",i),$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("projects.create.desc0")+"</small></label>").appendTo(o),o=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(m),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.create.desc1")+"</div>").appendTo(o),m.find("input[name=projects-encryption-key]").on("click",function(){var e=$(this).val();C.attr("disabled","default"===e),"custom"===e&&C.trigger("focus"),i()}),o=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(t),$('<label for="red-ui-projects-dialog-screen-create-project-repo">'+RED._("projects.create.git-url")+"</label>").appendTo(o),T=$('<input id="red-ui-projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(o),$('<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(o);var w=!1,E="";T.on("change keyup paste",function(){w=!0;var e=$(this).val();E!==e&&$("#red-ui-projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.protocols")),E=e;var t=/\/([^/]+?)(?:\.git)?$/.exec(e);t&&(""!==(e=R.val())&&e!==g||(g=t[1],R.val(g),R.trigger("change"))),i()});m=$('<div class="hide red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').hide().appendTo(t);o=$('<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.create.auth-failed")+"</div>").appendTo(o),o=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row-creds"></div>').hide().appendTo(m);l=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(o);$('<label for="red-ui-projects-dialog-screen-create-project-repo-user">'+RED._("projects.create.username")+"</label>").appendTo(l),j=$('<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(o),$('<label for="red-ui-projects-dialog-screen-create-project-repo-pass">'+RED._("projects.create.password")+"</label>").appendTo(l),(L=$('<input style="width:100%" id="red-ui-projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(l)).typedInput({type:"cred"}),o=$('<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(o),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.ssh-key")+"</label>").appendTo(l),O=$("<select>",{style:"width: 100%"}).appendTo(l),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){O.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(O.addClass("input-error"),O.attr("disabled",!0),D.show()):(O.removeClass("input-error"),O.attr("disabled",!1),D.hide())}),l=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(o),$('<label for="red-ui-projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.passphrase")+"</label>").appendTo(l),(I=$('<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);var D=$('<div class="red-ui-projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(l);switch($('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.create.desc2")+"</div>").appendTo(D),l=$('<div style="text-align: center">').appendTo(D),$('<button class="red-ui-button red-ui-projects-dialog-button">'+RED._("projects.create.add-ssh-key")+"</button>").appendTo(l).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)}),o=$('<div class="hide form-row red-ui-projects-dialog-screen-create-row red-ui-projects-dialog-screen-create-row-clone"></div>').appendTo(t),$("<label>"+RED._("projects.create.credentials-encryption-key")+"</label>").appendTo(o),(k=$('<input style="width:100%" type="password"></input>').appendTo(o)).typedInput({type:"cred"}),e.screen||"empty"){case"empty":s.trigger("click");break;case"open":r.trigger("click");break;case"clone":d.trigger("click")}return setTimeout(function(){("open"!==(e.screen||"empty")?R:$("#red-ui-projects-dialog-project-list-search")).trigger("focus")},50),t},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"),i={name:R.val()};if("empty"===e){i.summary=x.val(),i.files={flow:_.val()};var n=$("input[name=projects-encryption-type]:checked").val();i.credentialSecret="enabled"===n&&C.val()}else if("copy"===e)i.copy=(void 0).name;else if("clone"===e){i.credentialSecret=k.val();var a=T.val();if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(a)){n=O.val();if(!n)return void console.log(RED._("projects.create.cant-get-ssh-key-path"));i.git={remotes:{origin:{url:a,keyFile:n,passphrase:I.val()}}}}else i.git={remotes:{origin:{url:a,username:j.val(),password:L.val()}}}}else if("open"===e)return t=N.name,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 F({url:"projects/"+t,type:"PUT",responses:{200:function(e){o(null,e)},400:{credentials_load_failed:function(e){B.dialog("close"),RED.events.emit("project:change",{name:t}),o(null,e)},"*":o}}},{active:!0}).then(function(){B.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")),j.removeClass("input-error"),L.removeClass("input-error"),O.removeClass("input-error"),I.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(i.name),F({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(e){B.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){T.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){T.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){T.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(),j.addClass("input-error"),L.addClass("input-error"),O.addClass("input-error"),I.addClass("input-error")},missing_flow_file:function(e){B.dialog("close")},missing_package_file:function(e){B.dialog("close")},project_empty:function(e){B.dialog("close")},credentials_load_failed:function(e){B.dialog("close")},"*":function(e){p(e),$(B).dialog("close")}}}},i).then(function(){RED.events.emit("project:change",{name:name})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}}}}function u(e,t){B||RED.projects.init();var o=a[e],i=o.content(t||{});n.empty();e=o.buttons;"function"==typeof e&&(e=e(t||{})),B.dialog("option","buttons",e),n.append(i);e=590,i=$(window).height();i<750&&(e=590-(750-i)),$(".red-ui-projects-dialog-box").height(e),$(".red-ui-projects-dialog-project-list-inner-container").height(Math.max(500,e)-180),B.dialog("option","title",o.title||""),B.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 F(l,c){var t,o;if(l.requireCleanWorkspace&&RED.nodes.dirty())return e(function(e){e?l.cancel&&(l.cancel(),o&&o()):(delete l.requireCleanWorkspace,F(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}};var u,p,i=Date.now();return $(".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 i;if(l.responses&&l.responses[o.status]){if("function"==typeof(i=l.responses[o.status]))return void(p={error:(u=i).statusText});if(!1===l.handleAuthFail||"git_auth_failed"!==o.responseJSON.code&&"git_host_key_verification_failed"!==o.responseJSON.code){if(i[o.responseJSON.code])return u=i[o.responseJSON.code],void(p=o.responseJSON);if(i["*"])return u=i["*"],void(p=o.responseJSON)}else{if("git_auth_failed"===o.responseJSON.code){var n,a=G.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>"),s=!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)&&(s=!0,a=$('<div class="form-row"></div>').appendTo(r),$('<label for="projects-user-auth-key">SSH Key</label>').appendTo(a),n=$('<select id="projects-user-auth-key">').width("70%").appendTo(a),$.getJSON("settings/user/keys",function(e){e.keys.forEach(function(e){n.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"}));var 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||{};var e={};s?(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());function t(e){e?(console.log(RED._("projects.send-req.update-failed")),console.log(e)):(F(l,c),d.close())}F({url:"projects/"+G.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})}}]});return}if("git_host_key_verification_failed"===o.responseJSON.code){r=$('<div><div class="form-row">'+RED._("projects.send-req.host-key-verify-failed")+"</div></div>"),d=RED.notify(r,{type:"error",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.close"),click:function(){d.close()}}]});return}}}console.log(i),console.log(RED._("projects.send-req.unhandled")+":"),console.log(o),console.log(e),console.log(t)}).always(function(){var e=Date.now()-i,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(i){var n,a="",r=new Set,s=[],d="",l=$('<div class="red-ui-projects-branch-list">').appendTo(i.container),c=$('<input type="text">').attr("placeholder",i.placeholder).appendTo(l).searchBox({delay:200,change:function(){a=$(this).val();var e=!1,t=!1,o=/^([^/]+)\/[^/.~*?\[]/.exec(a);o&&-1<s.indexOf(o[1])&&(t=e=!0),!e&&/(\.\.|\/\.|[?*[~^: \\]|\/\/|\/.$|\/$)/.test(a)?(n.hasClass("input-error")||(n.addClass("input-error"),n.find("i").addClass("fa-warning").removeClass("fa-code-fork")),n.find("span").text(RED._("projects.create-branch-list.invalid")+": "+(t?"":d)+a)):(n.hasClass("input-error")&&(n.removeClass("input-error"),n.find("i").removeClass("fa-warning").addClass("fa-code-fork")),n.find("span").text(RED._("projects.create-branch-list.create")+":"),n.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(i.currentLabel||RED._("projects.create-branch-list.current")).appendTo(e))):(n=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")||(t={},o.hasOwnProperty("commit")?($(this).hasClass("selected")&&(t.current=!0),t.name=o.name):(t.name=c.val(),t.create=!0,i.remotes&&((e=/^([^/]+)\/[^/.~*?\[]/.exec(t.name))&&-1!==s.indexOf(e[1])||(t.name=s[0]+"/"+t.name))),i.onselect&&i.onselect(t))})},filter:function(e){var t,o=!e.hasOwnProperty("commit"),i=a;return 0<s.length&&(t=/^([^/]+)\/[^/.~*?\[]/.exec(i),""===i||t&&-1!=s.indexOf(t[1])||(i=s[0]+"/"+i)),o&&""!==i&&!r.has(i)||!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");i.remotes?(s=i.remotes(),d=s[0]+"/"):(d="",s=[]),r=new Set,F({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),r.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 i(){createProjectOptions={},G?u("create",{screen:"empty"}):u("welcome")}return{init:function(){B=$('<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"}}),n=B.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:F,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||i()}):void i();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(!G)throw new Error(RED._("projects.create-default-file-set.no-active"));if(!G.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(G.name),F({url:"projects/"+G.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){$(B).dialog("close")},"*":function(e){p(e),$(B).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){G=e,RED.events.emit("projects:load",G),RED.sidebar.versionControl.refresh(!0),t&&t(G)}):t&&t(null)})},editProject:function(){RED.projects.settings.show()},getActiveProject:function(){return G}}}(),RED.projects.settings=function(){var B,G,t=700,o=!1,r=[];function i(e){r.push(e)}function s(i,n){RED.editor.editMarkdown({title:RED._("sidebar.project.editDescription"),header:$('<span><i class="fa fa-book"></i> README.md</span>'),value:i.description,complete:function(o){n.empty();function t(e,t){if(e)return s(i,n);i.description=o,d(i,n)}var e=G.addSpinnerOverlay(n);G.sendRequest({url:"projects/"+i.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();var 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>")}function f(a,r,s,d,l){var c=s.prev();c.hide(),s.empty(),l.empty();var e=$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').appendTo(s),u=$('<input type="text" style="width: calc(100% - 150px); margin-right: 10px;">').val(r||"").appendTo(s),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,s),g(a.version,l),c.show()}),$('<button class="red-ui-button">'+RED._("common.label.save")+"</button>").appendTo(e).on("click",function(e){e.preventDefault();var o=u.val(),i=p.val();h(o,s),g(i,l);function t(e,t){if(e)return n.remove(),f(a,r,s,d,l);a.summary=o,a.version=i,n.remove(),h(a.summary,s),g(a.version,l),c.show()}var n=G.addSpinnerOverlay(s).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:i})})}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 n(t){var e=$('<div id="red-ui-project-settings-tab-main" class="red-ui-project-settings-tab-pane red-ui-help"></div>');$("<h1>").text(t.name).appendTo(e);var o=$('<div style="position: relative">').appendTo(e),i=$("<div></div>").appendTo(o),n=$("<div></div>").addClass("red-ui-help-info-none").appendTo(o);h(t.summary,i),g(t.version,n),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,i,t.version,n)}),$("<hr>").appendTo(e);var o=$('<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(),s(t,a)}),e}function l(e,t){t.editableList("empty");var o,i=0;for(n in b)b.hasOwnProperty(n)&&(t.editableList("addItem",{id:b[n].module,version:b[n].version,count:b[n].count,known:e.dependencies.hasOwnProperty(n),installed:!0}),i++,0===b[n].count&&0,e.dependencies.hasOwnProperty(n)||0);if(e.dependencies)for(var n in e.dependencies)e.dependencies.hasOwnProperty(n)&&!b.hasOwnProperty(n)&&(o=!!RED.nodes.registry.getModule(n),t.editableList("addItem",{id:n,version:e.dependencies[n],count:0,known:!0,installed:o}),i++,o?0:0);0===i&&t.editableList("addItem",{index:0,label:RED._("sidebar.project.projectSettings.none")})}function c(e,t,o,i){function n(e,t){if(r.remove(),e)return i(e);a.dependencies=o,RED.sidebar.versionControl.refresh(!0),i()}var a=RED.projects.getActiveProject(),r=G.addSpinnerOverlay(t).addClass("red-ui-component-spinner-contain");G.sendRequest({url:"projects/"+a.name,type:"PUT",responses:{0:function(e){n(e)},200:function(e){RED.sidebar.versionControl.refresh(!0),n(null)},400:{"*":function(e){n(e)}}}},{dependencies:o})}function a(s){var t=$('<div id="red-ui-project-settings-tab-deps" class="red-ui-project-settings-tab-pane red-ui-help"></div>');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 i(n,e,a,r){e=e||JSON.stringify(n.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){return e?i(n,t,a,r):(n.dependencies=o,void l(n,r))})}catch(e){i(n,t,a,r)}}})}(s,null,t,d)});var 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 i,n,a,r=$("<div>",{class:"red-ui-palette-module-header"}).appendTo(t);o.label?(0===o.index?r.addClass("red-ui-search-empty"):t.parent().addClass("red-ui-palette-module-section"),r.text(o.label)):(r.addClass("red-ui-palette-module-header"),o.installed?0===o.count?r.addClass("red-ui-palette-module-unused"):o.known||r.addClass("red-ui-palette-module-unknown"):r.addClass("red-ui-palette-module-not-installed"),o.element=r,n=$('<div class="red-ui-palette-module-meta red-ui-palette-module-name"></div>').appendTo(r),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),n=$('<div class="red-ui-palette-module-meta red-ui-palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(r),$("<span>").text(o.version).appendTo(n),n=$('<div class="red-ui-palette-module-meta"></div>').appendTo(r),a=$('<div class="red-ui-palette-module-button-group"></div>').appendTo(n),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,{},s.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,{},s.dependencies);e[o.id]=b[o.id].version,c(0,t,e,function(e){e?console.log(e):(a.remove(),r.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(m),RED.nodes.eachConfig(m),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(s,d),t}function F(e,t,i,a,r){var s=$('<div class="red-ui-projects-file-listing-container"></div>',{style:"position: relative; min-height: 175px; height: 175px;"}).hide().appendTo(e),d=G.addSpinnerOverlay(s);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={};e.sort(),e.forEach(function(e){e.split("/").reduce(function(e,t,o,i){if(t)return o<i.length-1?e[t]=e[t]||{}:e[t]=!0,e[t]},o)});var n=function(e,t,o){var i={name:e||"/",path:o+(o?"/":"")+e};return!0===t?i.type="f":(i.type="d",i.children=[],i.path=i.path,Object.keys(t).forEach(function(e){i.children.push(n(e,t[e],i.path))}),i.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)})),i},o=n("",o,"");!function a(e,t,r,s,d,o){o=o||"";var i=$("<ol>",{class:"red-ui-projects-dialog-file-list",style:o}).appendTo(e).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,o){var i,n=$("<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(n),0<o.children.length&&(i=$("<div></div>",{style:"padding-left: 20px;"}).appendTo(e),0===r.indexOf(o.path+"/")?n.addClass("expanded"):i.hide(),a(i,o.children,r,s,d),n.addClass("selectable"),n.on("click",function(e){$(this).hasClass("expanded")?($(this).removeClass("expanded"),i.slideUp(200)):($(this).addClass("expanded"),i.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",n.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(n),s(o)?(n.addClass("selectable"),o.path===r&&n.addClass("selected"),n.on("click",function(e){$(".red-ui-projects-dialog-file-list-entry.selected").removeClass("selected"),$(this).addClass("selected"),d(o.path,!0)}),n.on("dblclick",function(e){e.preventDefault(),d(o.path,!0)})):n.addClass("unselectable")),$('<span class="red-ui-projects-dialog-file-list-entry-name" style=""></span>').text(o.name).appendTo(n)}});o||i.parent().css("overflow-y","");t.forEach(function(e){i.editableList("addItem",e)})}(s,o.children,i,a,r,"height: 175px"),d.remove()}),s}function u(a,e){var t,o=$("<h3></h3>").text(RED._("sidebar.project.projectSettings.files")).appendTo(e),i=$('<div class="red-ui-settings-section"></div>').appendTo(e);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(),A.show(),t.hide(),a.files.package||(l.find(".red-ui-projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.packageCreate")),l.show()),d.show(),f.hide(),g.show(),v.show(),h(),D.addClass("uneditable-input"),$(".red-ui-settings-row-credentials").show(),D.css("height","auto"),k.hide(),R.show()})),c=$('<div class="red-ui-settings-row"></div>').appendTo(i),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.package")).appendTo(c);var n=$('<div class="uneditable-input" style="padding:0">').appendTo(c),r=$('<span style="display:inline-block;  padding: 6px">').text(a.files.package||"package.json").appendTo(n),s=$('<input type="hidden">').val(a.files.package||"package.json").appendTo(n),d=$('<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(n).on("click",function(e){var t;$(this).hasClass("selected")?($(this).removeClass("selected"),n.find(".red-ui-projects-file-listing-container").slideUp(200,function(){$(this).remove(),n.css("height","")}),n.css("color","")):($(this).addClass("selected"),n.css("color","inherit"),t=F(n,a,s.val(),function(e){return e.children||/package\.json$/.test(e.path)},function(e,t){e&&(s.val(e),r.text(e),e=e.substring(0,e.length-12),p.text(e),b.text(e),h(),l.hide()),t&&$(d).trigger("click"),E()}),n.css("height","auto"),setTimeout(function(){t.slideDown(200)},50))});RED.popover.tooltip(d,RED._("sidebar.project.projectSettings.selectFile"));var l=$('<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(c).hide();a.files.package||(l.find(".red-ui-projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.fileNotExist")),l.show());var e=a.files.package||"package.json",o=e.substring(0,e.length-12),c=$('<div class="red-ui-settings-row"></div>').appendTo(i);$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.flow")).appendTo(c);var u=$('<div class="uneditable-input" style="padding:0">').appendTo(c),p=$('<span style="display:inline-block; padding: 6px 0 6px 6px">').text(o).appendTo(u),e="flows.json";a.files.flow&&(e=0===a.files.flow.indexOf(o)?a.files.flow.substring(o.length):a.files.flow);var f=$('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(e).appendTo(u),h=function(){g.css({width:"calc(100% - "+(v.width()+p.width())+"px)"})},g=$('<input type="text" style="padding-left:1px; margin-top: -2px; margin-bottom: 0;border: none;">').val(e).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,i,n;$(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=s.val(),o=t.substring(0,t.length-12),i=new RegExp("^"+o+".*.json$"),n=F(u,a,g.val(),function(e){return!/package.json$/.test(e.path)&&i.test(e.path)&&!/_cred\.json$/.test(e.path)},function(e,t){e&&g.val(e.substring(o.length)),t&&$(v).trigger("click"),E()}),u.css("height","auto"),setTimeout(function(){n.slideDown(200)},50))});RED.popover.tooltip(v,RED._("sidebar.project.projectSettings.selectFile")),c=$('<div class="red-ui-settings-row"></div>').appendTo(i),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.credentials")).appendTo(c);var m="flows_cred.json";a.files.credentials&&(m=0===a.files.flow.indexOf(o)?a.files.credentials.substring(o.length):a.files.credentials);var e=$('<div class="uneditable-input" style="padding:0">').appendTo(c),b=$('<span style="display:inline-block;padding: 6px 0 6px 6px">').text(o).appendTo(e),y=$('<span style="display:inline-block; padding: 6px 6px 6px 0">').text(m).appendTo(e),w=$('<input type="hidden">').val(m).insertAfter(e),E=function(){var e=g.val(),t=/^(.+?)(\.[^.]*)?$/.exec(e);t?y.text(t[1]+"_cred"+(t[2]||".json")):""===e&&y.text(""),w.val(y.text());t=""===e||/\.\./.test(e)||/\/$/.test(e),e=t||""===y.text();L.is(":visible")&&(S.toggleClass("input-error",""===S.val()),e=e||""===S.val()),O.is(":visible")&&(N.toggleClass("input-error",""===N.val()),e=e||""===N.val()),g.toggleClass("input-error",t),M.toggleClass("disabled",e),M.prop("disabled",e)};g.on("change keyup paste",E),c=$('<div class="red-ui-settings-row"></div>').appendTo(i),$("<label></label>").appendTo(c);var D=$('<span><i class="user-settings-credentials-state-icon fa"></i> <span class="user-settings-credentials-state"></span></span>').appendTo(c),R=$('<span class="button-group" style="margin-left: -72px;">').hide().appendTo(c);D.css("color","#666"),R.css("vertical-align","top");var x=$('<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(R).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),k.hide()):(N.val(""),L.hide(),O.show(),$(this).addClass("selected"),_.removeClass("selected"),j.show(),P.show(),T.hide(),C.hide(),k.show()),E()});RED.popover.tooltip(x,RED._("sidebar.project.projectSettings.resetTheEncryptionKey"));var _=$('<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(R).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),k.hide()):(S.val(""),N.val(""),a.settings.credentialSecretInvalid||!a.settings.credentialsEncrypted?(T.show(),C.hide(),L.hide()):(L.show(),T.hide(),C.show()),O.show(),_.addClass("selected"),x.removeClass("selected"),j.hide(),P.hide(),k.show()),E()});RED.popover.tooltip(_,RED._("sidebar.project.projectSettings.changeTheEncryptionKey")),$('<div class="red-ui-settings-row red-ui-settings-row-credentials"></div>').hide().appendTo(i);var k=$("<div>",{style:"margin-top:10px"}).hide().appendTo(D),T=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.setTheEncryptionKey")+"</div>").hide().appendTo(k),C=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.changeTheEncryptionKey")+"</div>").hide().appendTo(k),j=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.resetTheEncryptionKey")+"</div>").hide().appendTo(k),L=$('<div class="red-ui-settings-row red-ui-settings-row-credentials"></div>').appendTo(k);$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.currentKey")).appendTo(L);var S=$('<input type="text">').appendTo(L).typedInput({type:"cred"}).on("change keyup paste",function(){B&&(B.close(),B=null),E()}),O=$('<div class="red-ui-settings-row red-ui-settings-row-credentials"></div>').appendTo(k);$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.newKey")).appendTo(O);function I(){t.show(),A.hide(),d.hide(),f.show(),g.hide(),v.hide(),D.removeClass("uneditable-input"),D.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(),k.hide(),R.hide(),x.removeClass("selected"),_.removeClass("selected")}var N=$('<input type="text">').appendTo(O).typedInput({type:"cred"}).on("change keyup paste",E),P=$('<div class="form-tips form-warning" style="margin: 10px;"><i class="fa fa-warning"></i>'+RED._("sidebar.project.projectSettings.credentialsAlert")+"</div>").hide().appendTo(k),A=$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').hide().appendTo(i);$('<button type="button" class="red-ui-button">'+RED._("common.label.cancel")+"</button>").appendTo(A).on("click",function(e){e.preventDefault();e=a.files.package||"package.json",e=e.substring(0,e.length-12);p.text(e),b.text(e),r.text(a.files.package||"package.json"),a.files.package?l.hide():(l.find(".red-ui-projects-edit-form-sublabel-text").text(RED._("sidebar.project.projectSettings.fileNotExist")),l.show()),g.val(f.text()),y.text(m),I()});var M=$('<button type="button" class="red-ui-button">'+RED._("common.label.save")+"</button>").appendTo(A).on("click",function(e){e.preventDefault();function t(e){o.remove(),e?G.reportUnexpectedError(e):(f.text(g.val()),y.text(w.val()),l.hide(),I())}var o=G.addSpinnerOverlay(i),e=(e=s.val()).substring(0,e.length-12),e={files:{package:s.val(),flow:e+g.val(),credentials:e+w.val()}};x.hasClass("selected")&&(e.resetCredentialSecret=!0),(x.hasClass("selected")||_.hasClass("selected"))&&(e.credentialSecret=N.val(),L.is(":visible")&&(e.currentCredentialSecret=S.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){S.addClass("input-error"),B=RED.popover.create({target:S,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?(D.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-warning"),D.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.invalidEncryptionKey"))):a.settings.credentialsEncrypted?(D.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-lock"),D.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionEnabled"))):(D.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-unlock"),D.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionDisabled"))),x.toggleClass("disabled",!a.settings.credentialSecretInvalid&&!a.settings.credentialsEncrypted),x.prop("disabled",!a.settings.credentialSecretInvalid&&!a.settings.credentialsEncrypted)};E(),z()}function p(a,e){$("<h3></h3>").text(RED._("sidebar.project.projectSettings.versionControl")).appendTo(e),function(r,e){e=$('<div class="red-ui-settings-section"></div>').appendTo(e),$("<h4></h4>").text(RED._("sidebar.project.projectSettings.branches")).appendTo(e);var e=$('<div class="red-ui-settings-row red-ui-projects-dialog-list"></div>').appendTo(e),s=$("<ol>").appendTo(e).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(n,e,a){var t=$('<div class="red-ui-projects-dialog-list-entry">').appendTo(n);if(a.empty)return t.addClass("red-ui-search-empty"),void t.text(RED._("sidebar.project.projectSettings.noBranches"));a.current&&t.addClass("current"),$('<span class="entry-icon"><i class="fa fa-code-fork"></i></span>').appendTo(t);var o=$("<span>").appendTo(t),i=$("<div>").appendTo(o);$('<span class="entry-name">').text(a.name).appendTo(i),a.commit&&$('<span class="entry-detail">').text(a.commit.sha).appendTo(i),a.remote&&(o=$("<div>").appendTo(o),$('<span class="entry-detail entry-remote-name">').text(a.remote||"").appendTo(o),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(o)),a.current||(t=$('<span class="entry-tools">').appendTo(t),$('<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 o=G.addSpinnerOverlay(n).addClass("red-ui-component-spinner-contain"),i=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(),i.close()}},{text:"Delete branch",click:function(){i.close();var t={url:"projects/"+r.name+"/branches/"+a.name,type:"DELETE",responses:{200:function(e){n.fadeOut(200,function(){s.editableList("removeItem",a),o.remove()})},400:{git_delete_branch_unmerged:function(e){i=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(),i.close()}},{text:RED._("sidebar.project.projectSettings.deleteUnmergedBranch"),click:function(){t.url+="?force=true",i.close(),G.sendRequest(t)}}]})},"*":function(e){G.reportUnexpectedError(e),o.remove()}}}};G.sendRequest(t)}}]})}))}});$.getJSON("projects/"+r.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){s.editableList("addItem",e)})):s.editableList("addItem",{empty:!0}))})}(a,e);var 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),i.slideDown(200,function(){i[0].scrollIntoView(),s?(p.val("origin"),h.trigger("focus")):p.trigger("focus"),l()})}),r={empty:!0},s=!0,e=$('<div class="red-ui-settings-row"></div>').appendTo(t),i=$('<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),d=$("<ol>").appendTo(e);d.editableList({addButton:!1,height:"auto",addItem:function(i,e,n){var t,o=$('<div class="red-ui-projects-dialog-list-entry">').appendTo(i);n.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(n.name).appendTo(t),n.urls.fetch===n.urls.push?$('<div class="entry-detail">').text(n.urls.fetch).appendTo(t):($('<div class="entry-detail">').text("fetch: "+n.urls.fetch).appendTo(t),$('<div class="entry-detail">').text("push: "+n.urls.push).appendTo(t)),o=$('<span class="entry-tools">').appendTo(o),$('<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 t=G.addSpinnerOverlay(i).addClass("red-ui-component-spinner-contain"),o=RED.notify(RED._("sidebar.project.projectSettings.deleteRemoteConfrim",{name:n.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(n.name+"/")&&delete a.git.branches.remote,a.git.branches.remoteAlt&&0===a.git.branches.remoteAlt.indexOf(n.name+"/")&&delete a.git.branches.remoteAlt;var e="projects/"+a.name+"/remotes/"+n.name;G.sendRequest({url:e,type:"DELETE",responses:{200:function(e){i.fadeOut(200,function(){d.editableList("removeItem",n),setTimeout(t.remove,100),0===e.remotes.length?(delete a.git.remotes,s=!0,d.editableList("addItem",r)):(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()}}}})}}]})}))}});var n,l=function(){var e=/^[a-zA-Z0-9\-_]+$/.test(p.val()),t=h.val(),o=0<t.length&&!/\s/.test(t);/^https?:\/\/[^/]+@/i.test(t)?(g.text(RED._("sidebar.project.projectSettings.urlRule2")),o=!1):g.text(RED._("sidebar.project.projectSettings.urlRule")),v.attr("disabled",!e||!o),p.toggleClass("input-error",c&&!e),h.toggleClass("input-error",u&&!o),n&&(n.close(),n=null)},c=!1,u=!1;$('<div class="red-ui-projects-dialog-list-dialog-header">').text(RED._("sidebar.project.projectSettings.addRemote2")).appendTo(i),e=$('<div class="red-ui-settings-row"></div>').appendTo(i),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.remoteName")).appendTo(e);var p=$('<input type="text">').appendTo(e).on("change keyup paste",function(){c=!0,l()});$('<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(i),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.url")).appendTo(e);function f(){o.attr("disabled",!1),i.hide(),p.val(""),h.val(""),n&&(n.close(),n=null)}var h=$('<input type="text">').appendTo(e).on("change keyup paste",function(){u=!0,l()}),g=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("sidebar.project.projectSettings.urlRule")+"</small></label>").appendTo(e).find("small"),e=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(i);$('<button class="red-ui-button">'+RED._("common.label.cancel")+"</button>").appendTo(e).on("click",function(e){e.preventDefault(),f()});var v=$('<button class="red-ui-button">'+RED._("sidebar.project.projectSettings.addRemote2")+"</button>").appendTo(e).on("click",function(e){e.preventDefault();function t(e){o.remove(),e||f()}var o=G.addSpinnerOverlay(i).addClass("red-ui-component-spinner-contain"),e={name:p.val(),url:h.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}),m(),RED.sidebar.versionControl.refresh(),t()},400:{git_remote_already_exists:function(e){n=RED.popover.create({target:p,direction:"right",size:"small",content:"Remote already exists",autoClose:6e3}).open(),p.addClass("input-error"),t(e)},"*":function(e){G.reportUnexpectedError(e),t(e)}}}},e)}),m=function(){d.editableList("empty");var e=0;if(a.git.hasOwnProperty("remotes"))for(var t in a.git.remotes)a.git.remotes.hasOwnProperty(t)&&(e++,d.editableList("addItem",{name:t,urls:a.git.remotes[t]}));(s=0===e)&&d.editableList("addItem",r)};m()}function v(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 m(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,i({id:"main",title:RED._("sidebar.project.name"),get:n,close:function(){}}),i({id:"deps",title:RED._("sidebar.project.dependencies"),get:a,close:function(){}}),i({id:"settings",title:RED._("sidebar.project.settings"),get:v,close:function(){B&&(B.close(),B=null)}}),RED.events.on("nodes:add",m),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(),o=e.find(".red-ui-tray-body"),e=$("<div></div>").appendTo(o),o=$("<div></div>",{class:"red-ui-settings-tabs-container"}).appendTo(e);$("<ul></ul>",{id:"user-settings-tabs"}).appendTo(o);var i=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);r.forEach(function(e){i.addTab({id:"red-ui-project-settings-tab-"+e.id,label:e.title,pane:e}),e.get(t).hide().appendTo(n)}),e.i18n(),i.activateTab("red-ui-project-settings-tab-"+(a||"main")),$("#red-ui-sidebar-shade").show()},close:function(){o=!1,r.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,m,b;function r(e){$("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.sshKeys")).appendTo(e);function t(){var e=/^[a-zA-Z0-9\-_]+$/.test(d.val());d.toggleClass("input-error",s&&!e);var t=c.val(),o=0===t.length||8<=t.length;c.toggleClass("input-error",!o),o?0===t.length?u.text(RED._("editor:sidebar.project.userSettings.optional")):u.text(""):u.text(RED._("editor:sidebar.project.userSettings.passphraseShort")),p.attr("disabled",!(e=e&&o)),i&&(i.close(),i=null)}var i,o=$('<div class="red-ui-settings-section"></div>').appendTo(e),n=$('<div class="red-ui-settings-section-description"></div>').appendTo(o).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(n).on("click",function(e){a.attr("disabled",!0),p.attr("disabled",!0),r.slideDown(200),d.trigger("focus")}),e=$('<div class="red-ui-settings-row"></div>').appendTo(o),r=$('<div class="red-ui-projects-dialog-list-dialog"></div>').hide().appendTo(e);$('<div class="red-ui-projects-dialog-list-dialog-header">').text(RED._("editor:sidebar.project.userSettings.addSshKey")).appendTo(r);n=$("<div>").appendTo(r),e=$('<div class="red-ui-settings-row"></div>').appendTo(n);$('<div class="red-ui-settings-section-description"></div>').appendTo(e).text(RED._("editor:sidebar.project.userSettings.addSshKeyTip")),e=$('<div class="red-ui-settings-row"></div>').appendTo(n),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.name")).appendTo(e);var s=!1,d=$('<input type="text">').appendTo(e).on("change keyup paste",function(){s=!0,t()});$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.nameRule")+"</small></label>").appendTo(e).find("small");n=$("<div>").appendTo(n);e=$('<div class="red-ui-settings-row"></div>').appendTo(n),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.passphrase")).appendTo(e);function l(){a.attr("disabled",!1),r.hide(),d.val(""),s=!1,c.val(""),i&&(i.close(),i=null)}var c=$('<input type="password">').appendTo(e).on("change keyup paste",t),u=$('<label class="red-ui-projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.optional")+"</small></label>").appendTo(e).find("small"),n=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(r);$('<button class="red-ui-button">'+RED._("editor:sidebar.project.userSettings.cancel")+"</button>").appendTo(n).on("click",function(e){e.preventDefault(),l()});var p=$('<button class="red-ui-button">'+RED._("editor:sidebar.project.userSettings.generate")+"</button>").appendTo(n).on("click",function(e){e.preventDefault();var t=b.addSpinnerOverlay(r).addClass("red-ui-component-spinner-contain"),o={name:d.val(),type:"generate"};o.comment=m.val(),o.password=c.val(),o.size=4096;function i(e){t.remove(),e||l()}RED.deploy.setDeployInflight(!0),b.sendRequest({url:"settings/user/keys",type:"POST",responses:{0:function(e){i(e)},200:function(e){v(o.name),i()},400:{unexpected_error:function(e){console.log(e),i(e)}}}},o)});e=$('<div class="red-ui-settings-row red-ui-projects-dialog-list"></div>').appendTo(o);function f(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),i=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),i.remove()},400:{unexpected_error:function(e){console.log(e),i.remove()}}}};return b.sendRequest(t),t=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(e),$('<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 h={empty:!0},g=$('<ol class="red-ui-projects-dialog-ssh-key-list">').appendTo(e).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(i,e,n){var t=$('<div class="red-ui-projects-dialog-list-entry">').appendTo(i);if(n.empty)return t.addClass("red-ui-search-empty"),void t.text(RED._("editor:sidebar.project.userSettings.noSshKeys"));var o=$('<div class="red-ui-projects-dialog-ssh-key-header">').appendTo(t);$('<span class="entry-icon"><i class="fa fa-key"></i></span>').appendTo(o),$('<span class="entry-name">').text(n.name).appendTo(o);var a,r=$('<span class="button-row entry-tools">').appendTo(o);o.on("click",function(e){a?a.slideUp(200,function(){a.remove(),a=null}):a=f(t,n)}),n.system||$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-trash"></i></button>').appendTo(r).on("click",function(e){e.stopPropagation();var t=b.addSpinnerOverlay(i).addClass("red-ui-component-spinner-contain"),o=RED.notify(RED._("editor:sidebar.project.userSettings.deleteConfirm",{name:n.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/"+n.name;b.sendRequest({url:e,type:"DELETE",responses:{200:function(e){i.fadeOut(200,function(){g.editableList("removeItem",n),setTimeout(t.remove,100),0===g.editableList("length")&&g.editableList("addItem",h)})},400:{unexpected_error:function(e){console.log(e),t.remove()}}}})}}]})}),n.expand&&(a=f(t,n))}}),v=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))})};v()}function t(e){var t,o,i,n=$('<div id="red-ui-settings-tab-gitconfig" class="project-settings-tab-pane red-ui-help"></div>');return function(e){var t=RED.settings.get("git")||{};t.user=t.user||{},$("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.committerDetail")).appendTo(e);var o=$('<div class="red-ui-settings-section"></div>').appendTo(e);$('<div class="red-ui-settings-section-description"></div>').appendTo(o).text(RED._("editor:sidebar.project.userSettings.committerTip")),e=$('<div class="red-ui-settings-row"></div>').appendTo(o),$('<label for="user-settings-gitconfig-username"></label>').text(RED._("editor:sidebar.project.userSettings.userName")).appendTo(e),(a=$('<input type="text" id="user-settings-gitconfig-username">').appendTo(e)).val(t.user.name||""),e=$('<div class="red-ui-settings-row"></div>').appendTo(o),$('<label for="user-settings-gitconfig-email"></label>').text(RED._("editor:sidebar.project.userSettings.email")).appendTo(e),(m=$('<input type="text" id="user-settings-gitconfig-email">').appendTo(e)).val(t.user.email||"")}(n),t=n,o=RED.settings.theme("projects.workflow.mode","manual"),(i=RED.settings.get("git")||{}).workflow=i.workflow||{},i.workflow.mode=i.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="'+i.workflow.mode+'"]').prop("checked",!0),r(n),n}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=m.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,I,r,N,P,A,M={};function z(t,a,e,r){t.addClass("red-ui-sidebar-vc-change-entry");var i=$("<div>").appendTo(t);if(a.label)return t.addClass("red-ui-help-info-none"),i.text(a.label),void(a.button&&(i.css({display:"inline-block",maxWidth:"300px",textAlign:"left"}),c=$('<div style="float: right; margin: 5px; height: 50px;"></div>').appendTo(i),$('<button class="red-ui-button red-ui-button-small"></button>').text(a.button.label).appendTo(c).on("click",a.button.click)));var n,o,s=$('<i class=""></i>').appendTo(i),d=$('<a href="#">').appendTo(i).on("click",function(e){var o,i,n;e.preventDefault(),o=a,i=r,n=RED.projects.getActiveProject(),N.sendRequest({url:"projects/"+n.name+"/diff/"+("staged"===i?"index":"tree")+"/"+encodeURIComponent(o.file),type:"GET",responses:{0:function(e){console.log(e)},200:function(e){var t="unstaged"===i?RED._("sidebar.project.versionControl.unstagedChanges")+" : "+o.file:"staged"===i?RED._("sidebar.project.versionControl.stagedChanges")+" : "+o.file:RED._("sidebar.project.versionControl.resolveConflicts")+" : "+o.file,t={diff:e.diff,title:t,unmerged:"unmerged"===i,project:n};"unstaged"==i?(t.oldRevTitle=" "===o.indexStatus?RED._("sidebar.project.versionControl.head"):RED._("sidebar.project.versionControl.staged"),t.newRevTitle=RED._("sidebar.project.versionControl.unstaged"),t.oldRev=" "===o.indexStatus?"@":":0",t.newRev="_"):"staged"===i?(t.oldRevTitle=RED._("sidebar.project.versionControl.head"),t.newRevTitle=RED._("sidebar.project.versionControl.staged"),t.oldRev="@",t.newRev=":0"):(t.oldRevTitle=RED._("sidebar.project.versionControl.local"),t.newRevTitle=RED._("sidebar.project.versionControl.remote"),t.commonRev=":1",t.oldRev=":2",t.newRev=":3",t.onresolve=function(e){N.sendRequest({url:"projects/"+n.name+"/resolve/"+encodeURIComponent(o.file),type:"POST",responses:{0:function(e){console.log(e)},200:function(e){J(!0)},400:{unexpected_error:function(e){console.log(e)}}}},{resolutions:e.resolutions[o.file]})}),RED.diff.showUnifiedDiff(t)},400:{unexpected_error:function(e){console.log(e)}}}})}),l=$("<span>").appendTo(d),c=$('<div class="red-ui-sidebar-vc-change-entry-tools">').appendTo(t);"unstaged"===r&&(o=$('<span class="button-group" style="margin-right: 5px;"></span>').appendTo(c),n=$('<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=N.addSpinnerOverlay(i).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),N.sendRequest(e).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]})}),RED.popover.tooltip(n,RED._("sidebar.project.versionControl.revertChanges"))),o=$('<span class="button-group"></span>').appendTo(c),"unmerged"!==r&&(o=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-'+("unstaged"===r?"plus":"minus")+'"></i></button>').appendTo(o).on("click",function(e){e.preventDefault();e=RED.projects.getActiveProject();a.spinner=N.addSpinnerOverlay(t).addClass("projects-version-control-spinner-sidebar"),N.sendRequest({url:"projects/"+e.name+"/stage/"+encodeURIComponent(a.file),type:"unstaged"===r?"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(o,RED._("sidebar.project.versionControl."+("unstaged"===r?"stage":"unstage")+"Change"))),a["update"+("unstaged"===r?"Unstaged":"Staged")]=function(e,t){i.removeClass();var o="",o="A"===t?(i.addClass("red-ui-diff-state-added"),"fa-plus-square"):"?"===t?(i.addClass("red-ui-diff-state-unchanged"),"fa-question-circle-o"):"D"===t?(i.addClass("red-ui-diff-state-deleted"),"fa-minus-square"):"M"===t?(i.addClass("red-ui-diff-state-changed"),"fa-square"):"R"===t?(i.addClass("red-ui-diff-state-changed"),"fa-toggle-right"):("U"===t&&i.addClass("red-ui-diff-state-conflicted"),"fa-exclamation-triangle");l.empty(),$("<span>").text(e.file.replace(/\\(.)/g,"$1")).appendTo(l),e.oldName&&($('<i class="fa fa-long-arrow-right"></i>').prependTo(l),$("<span>").text(e.oldName.replace(/\\(.)/g,"$1")).prependTo(l)),s.removeClass(),s.addClass("fa "+o),e.spinner&&(e.spinner.remove(),delete e.spinner),n&&n.toggle("?"!==t),d.toggleClass("disabled","D"===t||"?"===t)},a["update"+("unstaged"===r?"Unstaged":"Staged")](a,e)}function B(e){var t=Date.now()/1e3-e,o=Math.floor(t/86400);if(30<o)return new Date(1e3*e).toLocaleDateString();if(0<o)return RED._("sidebar.project.versionControl.daysAgo",{count:o});o=Math.floor(t/3600);if(0<o)return RED._("sidebar.project.versionControl.hoursAgo",{count:o});t=Math.floor(t/60);return 0<t?RED._("sidebar.project.versionControl.minsAgo",{count:t}):RED._("sidebar.project.versionControl.secondsAgo")}function G(e,t){var o=RED.projects.getActiveProject();(a=t?N.addSpinnerOverlay(x.parent()):N.addSpinnerOverlay(k.parent())).addClass("red-ui-component-spinner-sidebar"),N.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)}}}},t?{files:e}:void 0)}var n=!1;function F(i,n,e,a,t){var r=N.addSpinnerOverlay(e),e=i+"?limit="+(a||20);t&&(e+="&before="+t),N.sendRequest({url:e,type:"GET",responses:{0:function(e){console.log(e)},200:function(e){var t;e.commits.forEach(function(e){n.editableList("addItem",e),t=e.sha}),n.loadMoreItem&&(n.editableList("removeItem",n.loadMoreItem),delete n.loadMoreItem);var o=n.editableList("length");o<e.total&&(n.loadMoreItem={totalKnown:o,total:e.total,url:i,before:t+"~1",limit:a},n.editableList("addItem",n.loadMoreItem)),r.remove()},400:{unexpected_error:function(e){console.log(e)}}}})}function U(e){var i=e.files;a&&(a.remove(),a=null),(r=!!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);var t=Object.keys(i).filter(function(e){return"f"===i[e].type});t.sort();var n=Date.now()+Math.floor(100*Math.random());t.forEach(function(e){var t=i[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=n,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!==n&&(x.editableList("removeItem",M[e]),k.editableList("removeItem",M[e]),delete M[e])});var o=k.editableList("length"),e=x.editableList("length"),t=j.editableList("length");L.prop("disabled",r&&0<t||!r&&0===o),_.prop("disabled",0===e),T.prop("disabled",0===o),0===o&&k.editableList("addItem",P),0===e&&x.editableList("addItem",P),0===t&&j.editableList("addItem",A)}function J(e,t){var i;n||(e&&(M={},x.editableList("empty"),k.editableList("empty"),j.editableList("empty")),RED.user.hasPermission("projects.write")&&(n=!0,function(){O.editableList("empty");var e=RED.projects.getActiveProject();e&&F("projects/"+e.name+"/commits",O,O.parent())}(),(i=RED.projects.getActiveProject())?(e="projects/"+i.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;i.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")?V(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(),n=!1,$(".red-ui-sidebar-vc-shade").hide()}).fail(function(){n=!1})):($(".red-ui-sidebar-vc-shade").show(),x.editableList("empty"),k.editableList("empty"),j.editableList("empty"))))}function V(e,t){$("#red-ui-sidebar-vc-commits-ahead").text(e),$("#red-ui-sidebar-vc-commits-behind").text(t),r?($("#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(){J(),RED.sidebar.show("version-control")}return{init:function(e){N=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)?J(!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(){J(!0)}),D=$("<div>",{class:"red-ui-sidebar-vc"});var t=$("<div>",{class:"red-ui-sidebar-vc-stack"}).appendTo(D);R=RED.stack.create({container:t,fill:!0,singleExpanded:!0}),(S=R.add({title:RED._("sidebar.project.versionControl.localChanges"),collapsible:!0})).expand(),S.content.css({height:"100%"});var o=$('<div style="float: right"></div>').appendTo(S.header),e=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-refresh"></i></button>').appendTo(o).on("click",function(e){e.preventDefault(),e.stopPropagation(),J(!0)});RED.popover.tooltip(e,RED._("sidebar.project.versionControl.refreshChanges")),P={label:RED._("sidebar.project.versionControl.none")},A={label:RED._("sidebar.project.versionControl.conflictResolve")};var i=$('<div class="red-ui-sidebar-vc-change-container"></div>').appendTo(S.content),t=$('<div class="red-ui-sidebar-vc-change-header">'+RED._("sidebar.project.versionControl.localFiles")+"</div>").appendTo(i);_=$('<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(t).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(i)).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);var t=$('<div class="red-ui-sidebar-vc-change-header">'+RED._("sidebar.project.versionControl.unmergedChanges")+"</div>").appendTo(C),o=$('<div style="position: absolute; right: 5px; top: 5px;"></div>').appendTo(t),n=$('<button class="red-ui-button red-ui-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.abortMerge")+"</button>").appendTo(o).on("click",function(e){e.preventDefault(),e.stopPropagation();var t=N.addSpinnerOverlay(C),e=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),N.sendRequest({url:"projects/"+e.name+"/merge",type:"DELETE",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),J(!0)},400:{unexpected_error:function(e){console.log(e)}}}}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})});(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)}});var a=$('<div class="red-ui-sidebar-vc-change-container"></div>').appendTo(S.content);t=$('<div class="red-ui-sidebar-vc-change-header">'+RED._("sidebar.project.versionControl.changeToCommit")+"</div>").appendTo(a),o=$('<div style="position: absolute; right: 5px; top: 5px;"></div>').appendTo(t);var r=function(){s.val(""),l.prop("disabled",!0),i.css("height","30px"),C.is(":visible")?(C.css("height","30px"),a.css("height","calc(100% - 60px - 175px)")):a.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),n.prop("disabled",!0),s.trigger("focus")};L=$('<button class="red-ui-button red-ui-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.commit")+"</button>").appendTo(o).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(o).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(a)).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);var s=$("<textarea></textarea>").attr("placeholder",RED._("sidebar.project.versionControl.commitPlaceholder")).appendTo(commitBox).on("change keyup paste",function(){l.prop("disabled",""===$(this).val().trim())}),t=$('<div class="red-ui-sidebar-vc-slide-box-toolbar button-group">').appendTo(commitBox),d=$('<button class="red-ui-button">'+RED._("sidebar.project.versionControl.cancelCapital")+"</button>").appendTo(t).on("click",function(e){e.preventDefault(),s.val(""),i.css("height",""),C.css("height",""),a.css("height",""),commitBox.css("height",0),setTimeout(function(){commitBox.hide()},200),_.prop("disabled",!1),T.prop("disabled",!1),L.prop("disabled",!1),n.prop("disabled",!1)}),l=$('<button class="red-ui-button">'+RED._("sidebar.project.versionControl.commitCapital")+"</button>").appendTo(t).on("click",function(e){e.preventDefault();var t=N.addSpinnerOverlay(l).addClass("red-ui-component-spinner-sidebar"),e=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),N.sendRequest({url:"projects/"+e.name+"/commit",type:"POST",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),d.trigger("click"),J(!0)},400:{"*":function(e){N.reportUnexpectedError(e)}}}},{message:s.val()}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}),t=R.add({title:RED._("sidebar.project.versionControl.commitHistory"),collapsible:!0});o=$('<div style="float: right"></div>').appendTo(t.header),e=$('<button class="red-ui-button red-ui-button-small"><i class="fa fa-refresh"></i></button>').appendTo(o).on("click",function(e){e.preventDefault(),e.stopPropagation(),J(!0,!0)}),RED.popover.tooltip(e,RED._("sidebar.project.versionControl.refreshCommitHistory"));var e=$('<div class="red-ui-sidebar-vc-change-header" style="text-align: right;"></div>').appendTo(t.content),c=$('<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")?p():(v(),I.show(),$(this).addClass("selected"),e=RED.projects.getActiveProject(),h.refresh("projects/"+e.name+"/branches"),f.show(),setTimeout(function(){f.css("height","215px"),h.focus()},100))});RED.popover.tooltip(c,RED._("sidebar.project.versionControl.changeLocalBranch"));var u=$('<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():(p(),I.show(),$(this).addClass("selected"),e=RED.projects.getActiveProject(),$("#red-ui-sidebar-vc-repo-toolbar-set-upstream-row").toggle(!!e.git.branches.remoteAlt),g.show(),setTimeout(function(){g.css("height","265px")},100))});RED.popover.tooltip(u,RED._("sidebar.project.versionControl.manageRemoteBranch")),O=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0px; right:0; left:0;"}).appendTo(t.content),I=$('<div class="red-ui-shade" style="z-Index: 3"></div>').css("top","30px").hide().appendTo(t.content),O.editableList({addButton:!1,scrollOnAdd:!1,addItem:function(t,e,o){var i,n;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=o.sha+"~1",e.newRev=o.sha,e.oldRevTitle=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)})}),i=$("<div>").appendTo(t),$('<div class="red-ui-sidebar-vc-commit-subject">').text(o.subject).appendTo(i),o.refs&&(n=$('<div class="red-ui-sidebar-vc-commit-refs">').appendTo(i),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(n)}),t.addClass("red-ui-sidebar-vc-commit-head")),$('<div class="red-ui-sidebar-vc-commit-sha">').text(o.sha.substring(0,7)).appendTo(i),$('<div class="red-ui-sidebar-vc-commit-date">').text(B(parseInt(o.date))).appendTo(i))}});var p=function(e){c.removeClass("selected"),f.css("height","0"),I.hide(),setTimeout(function(){f.hide(),e&&e()},200)},f=$('<div class="red-ui-sidebar-vc-slide-box red-ui-sidebar-vc-slide-box-top" style="top:30px;"></div>').hide().appendTo(t.content);$('<div class="red-ui-sidebar-vc-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.changeLocalBranch")).appendTo(f);var h=N.createBranchList({placeholder:RED._("sidebar.project.versionControl.createBranchPlaceholder"),container:f,onselect:function(e){if(e.current)return p();var t=N.addSpinnerOverlay(f),o=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),N.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){p(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)})}}),g=$('<div class="red-ui-sidebar-vc-slide-box red-ui-sidebar-vc-slide-box-top" style="top:30px"></div>').hide().appendTo(t.content),v=function(){$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("checked",!1),u.removeClass("selected"),g.css("height","0"),I.hide(),setTimeout(function(){g.hide(),m()},200)},m=function(e){b.hasClass("selected")&&(b.removeClass("selected"),y.height(0),g.css("height","265px"),setTimeout(function(){y.hide(),e&&e()},200))};$('<div class="red-ui-sidebar-vc-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.manageRemoteBranch")).appendTo(g);var e=$('<div style="margin-bottom: 5px;"></div>').appendTo(g),b=$('<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(e).on("click",function(e){e.preventDefault(),$(this).hasClass("selected")?m():($(this).addClass("selected"),e=RED.projects.getActiveProject(),w.refresh("projects/"+e.name+"/branches/remote"),y.show(),setTimeout(function(){y.height(180),g.css("height","445px"),w.focus()},100))});$('<div id="red-ui-sidebar-vc-repo-toolbar-message" class="red-ui-sidebar-vc-slide-box-header" style="min-height: 100px;"></div>').appendTo(g),t=$('<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(g),$('<div style="margin-top: 10px;"><i class="fa fa-warning"></i> '+RED._("sidebar.project.versionControl.unableToAccess")+"</div>").appendTo(t),t=$('<div style="margin: 10px 30px; text-align: center"></div>').appendTo(t),$('<button class="red-ui-button" style="width: 80%;"><i class="fa fa-refresh"></i> '+RED._("sidebar.project.versionControl.retry")+"</button>").appendTo(t).on("click",function(e){e.preventDefault();var e=RED.projects.getActiveProject(),t=N.addSpinnerOverlay(g).addClass("red-ui-component-spinner-contain");N.sendRequest({url:"projects/"+e.name+"/branches/remote",type:"GET",responses:{0:function(e){console.log(e)},200:function(e){J(!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(g);var y=$('<div style="height: 0;overflow:hidden; transition: height 0.2s ease-in-out;"></div>').hide().appendTo(e),w=N.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:y,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 i=RED.projects.getActiveProject();i.git.branches.remote===e.name?delete i.git.branches.remoteAlt:i.git.branches.remoteAlt=e.name,$("#red-ui-sidebar-vc-repo-toolbar-set-upstream-row").toggle(!!i.git.branches.remoteAlt),m(function(){var t,o;e.create?(i.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=N.addSpinnerOverlay($("#red-ui-sidebar-vc-repo-toolbar-message")).addClass("red-ui-component-spinner-contain"),$.getJSON("projects/"+i.name+"/branches/remote/"+e.name+"/status",function(e){setTimeout(function(){V(e.commits.ahead,e.commits.behind),o.remove()},Math.max(400-(Date.now()-t),0))}))})}}),e=$('<div style="margin-bottom: 5px;"></div>').appendTo(g);function E(o){o=o||{};var e=N.addSpinnerOverlay(g).addClass("red-ui-component-spinner-contain"),t=$('<div style="position: relative; bottom: 60px;"></div>').appendTo(e);$('<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")});var i=RED.projects.getActiveProject();RED.eventLog.startEvent("Pull changes"+(i.git.branches.remoteAlt?" : "+i.git.branches.remoteAlt:"")),t="projects/"+i.name+"/pull",i.git.branches.remoteAlt&&(t+="/"+i.git.branches.remoteAlt),(o.setUpstream||o.allowUnrelatedHistories)&&(t+="?"),o.setUpstream&&(t+="setUpstream=true",o.allowUnrelatedHistories&&(t+="&")),o.allowUnrelatedHistories&&(t+="allowUnrelatedHistories=true"),N.sendRequest({url:t,type:"POST",responses:{0:function(e){console.log(e)},200:function(e){o.setUpstream&&i.git.branches.remoteAlt&&(i.git.branches.remote=i.git.branches.remoteAlt,delete i.git.branches.remoteAlt),J(!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){J(!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,E(o)}}]})},"*":function(e){N.reportUnexpectedError(e)}}}},{}).always(function(){e.remove()})}$('<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=N.addSpinnerOverlay(g).addClass("red-ui-component-spinner-contain"),e=$('<div style="position: relative; bottom: 60px;"></div>').appendTo(t);$('<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")});var o=RED.projects.getActiveProject();RED.eventLog.startEvent("Push changes"+(o.git.branches.remoteAlt?" : "+o.git.branches.remoteAlt:""));e="projects/"+o.name+"/push";o.git.branches.remoteAlt&&(e+="/"+o.git.branches.remoteAlt);var i=$("#red-ui-sidebar-vc-repo-toolbar-set-upstream").prop("checked");i&&(e+="?u=true"),N.sendRequest({url:e,type:"POST",responses:{0:function(e){console.log(e)},200:function(e){i&&o.git.branches.remoteAlt&&(o.git.branches.remote=o.git.branches.remoteAlt,delete o.git.branches.remoteAlt),J(!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(),E({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:J,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 i=(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"}),r=[],o=t.length,n=Math.max(Math.PI/(o-1),Math.PI/4),s=Math.PI,d=0;d<o;d++){var l=Math.floor(80*Math.cos(s)),c=Math.floor(80*Math.sin(s));t[d].name&&function(e,t,o){o.el=i.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,r.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]),s+=n}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]],i=0;i<r.length;i++){var n=r[i];n.disabled||(o[0]>n.x-30&&o[0]<n.x+30&&o[1]>n.y-30&&o[1]<n.y+30?n!==g&&(n.el.classed("selected",!0),g=n):(n===g&&(g=null),n.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 u,p,f,h,g,v,m=[],i={};function t(t,o){i[t]?o(null,i[t]):import(t).then(function(e){i[t]=e.default,o(null,i[t])}).catch(function(e){o(e)})}function b(){var e,t;g&&(v?p.css({left:$(window).width()/2+"px",top:$(window).height()/2+"px",width:"0px",height:"0px"}):(e=g[0].getBoundingClientRect(),t=Math.max(50,1.5*Math.max(e.width,e.height)),p.css({left:e.left+e.width/2+"px",top:e.top+e.height/2+"px",width:2*t+"px",height:2*t+"px"}),p[0].offsetHeight,p.addClass("transition"),p.css({width:t+"px",height:t+"px"})),f&&f.move({target:g}))}function y(e,t,o){function i(){m.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)}),m=[],setTimeout(function(){o()},0)}if(e.complete){if(0!==e.complete.length)return f&&(f.element.hide(),v||(v=!0,b())),void e.complete.call(t,function(){f&&f.element.show(),i()});e.complete.call(t)}i()}function w(e){if("string"==typeof e)return e;var t=RED.i18n.lang()||"en-US",o=Object.keys(e);return e[t]||e["en-US"]||e[o[0]]}return{load:t,run:function(e,o){o=o||function(e){e&&console.error(e)},t(e,function(e,t){e?console.warn("Error loading tour:",e):function(o,t){u=$('<div class="red-ui-tourGuide-shade"></div>').appendTo(document.body),p=$('<div class="red-ui-tourGuide-shade-focus"></div>').appendTo(u),$(window).on("resize.red-ui-tourGuide",function(){b()});var i=0,n={index:0,count:o.steps.length};function a(e){$(window).off("resize.red-ui-tourGuide"),$(document).off("keydown.red-ui-tourGuide"),f&&f.close(),f=h=null,u.remove(),u=null,t(e)}!function e(t){if(!1!==t)if(i!==o.steps.length){n.index=i;try{d=o.steps[i++],l=n,c=e,u.fadeIn(),function(e,t,o){if(e.prepare){if(0!==e.prepare.length)return f&&(f.element.hide(),v||(v=!0,b())),e.prepare.call(t,function(){f&&f.element.show(),o()});e.prepare.call(t)}o()}(d,l,function(){var e,t=d.direction||"bottom";if(v=!1,"string"==typeof d.element?g=$(d.element):"function"==typeof d.element?g=d.element.call(l):d.element?g=d.element:(g=$(".red-ui-editor"),v=!0,t="inset"),0===g.length)throw g=null,u.hide(),new Error("Element not found");$(window).width()<400&&(g=$(".red-ui-editor"),v=!0,t="inset"),e=g.css("z-index"),v||!d.interactive&&!d.wait||g.css("z-index",2002),b(),h?h.empty():h=$('<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(h).click(function(e){e.preventDefault(),y(d,l,function(){c(!1)})});var o=$('<div class="red-ui-tourGuide-popover-description"></div>').appendTo(h);d.titleIcon&&$('<h2><i class="'+d.titleIcon+'"></i></h2>').appendTo(o),d.title&&$("<h2>").text(w(d.title)).appendTo(o),$("<div>").css("text-align","left").html(w(d.description)).appendTo(o);var i,n=$("<div>",{class:"red-ui-tourGuide-toolbar"}).appendTo(h);$("<small>").text(l.index+1+"/"+l.count).appendTo(n),!v&&d.wait||(i=$('<button type="button" class="red-ui-button" style="position: absolute; right:0;bottom:0;"></button>').appendTo(n).one("click",function(e){e.preventDefault(),s()}),l.index===l.count-1?$("<span></span>").text(RED._("common.label.close")).appendTo(i):0===l.index?($("<span>start</span>").text(RED._("tourGuide.start")).appendTo(i),$('<span style="margin-left: 6px"><i class="fa fa-chevron-right"></i></span>').appendTo(i)):l.index<l.count-1&&($("<span></span>").text(RED._("tourGuide.next")).appendTo(i),$('<span style="margin-left: 6px"><i class="fa fa-chevron-right"></i></span>').appendTo(i))),o=d.width,v&&(o=500),n=Math.min($(window).width()-10,Math.max(o||0,300)),f=f||RED.popover.create({target:g,width:o||"auto",maxWidth:n+"px",direction:t,class:"red-ui-tourGuide-popover"+(v?" ":""),trigger:"manual",content:h}).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(),y(d,l,function(){c(!1)}))}),f.element.toggleClass("red-ui-tourGuide-popover-full",!!v),f.move({target:g,width:o||"auto",maxWidth:n+"px",direction:t}),setTimeout(function(){f.element.position().left<0&&f.element.css({left:0})},100),i&&setTimeout(function(){i.focus()},100);var a=g[0]instanceof SVGElement;d.fallback&&p.one("mouseenter",function(e){setTimeout(function(){var e=g[0].getBoundingClientRect(),e=Math.max(50,1.5*Math.max(e.width,e.height));p.css({width:4*e+"px",height:4*e+"px"}),u.fadeOut(),f.move({target:$(".red-ui-editor"),direction:d.fallback,offset:10,transition:!0})},a?0:500)});var r,s=function(){p.removeClass("transition"),g.css("z-index",e),y(d,l,c)};d.wait&&("dom-event"===d.wait.type?(t=g,d.wait.element&&("string"==typeof d.wait.element?t=$(d.wait.element):"function"==typeof d.wait.element&&(t=d.wait.element.call(l))),r={type:d.wait.type,target:t,event:d.wait.event,listener:function(){s()},opts:{once:!0}},m.push(r),t[0].addEventListener(r.event,r.listener,r.opts)):"nr-event"===d.wait.type&&(r={type:d.wait.type,event:d.wait.event,listener:function(){d.wait.filter&&!d.wait.filter.apply(l,arguments)||s()}},m.push(r),RED.events.on(r.event,r.listener)))})}catch(e){return void a(e)}var d,l,c}else a();else a(!1)}()}(t,o)})},reset:function(){RED.settings.set("editor.tours.welcome","")}}}();

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.052 ]--