cloud-red
Version:
Harnessing Serverless for your cloud integration needs
16 lines • 579 kB
JavaScript
/**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* 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.
**/
jQuery.propHooks.disabled={set:function(e,t){e.disabled!==t&&((e.disabled=t)?$(e).trigger("disabled"):$(e).trigger("enabled"))}};var RED=function(){function s(e,a){a=a||function(){};var i,t=/<!-- --- \[red-module:(\S+)\] --- -->/.exec(e.trim());i=t?t[1]:"unknown";try{var s=!1,r=$("<div>"+e+"</div>"),o=r.find("script"),l=o.length;o.each(function(e,t){var o=$(t).attr("src");if(o&&!/^\s*(https?:|\/|\.)/.test(o)){$(t).remove();var n=document.createElement("script");n.onload=function(){0===--l&&($("body").append(r),a())},$("body").append(n),n.src=RED.settings.apiRootUrl+o,s=!0}else(/\/ace.js$/.test(o)||/\/ext-language_tools.js$/.test(o))&&(console.warn("Blocked attempt to load",o,"by",i),$(t).remove()),l--}),s||($("body").append(r),a())}catch(e){RED.notify(RED._("notification.errors.failedToAppendNode",{module:i,error:e.toString()}),{type:"error",timeout:1e4}),console.log("["+i+"] "+e.toString()),a()}}function r(t){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"icons",success:function(e){RED.nodes.setIconSets(e),t&&t()}})}function t(){$.ajax({headers:{Accept:"text/html"},cache:!1,url:"nodes",success:function(e){var t=e.trim().split(/(?=<!-- --- \[red-module:\S+\] --- -->)/),o=function(){0===t.length?($("body").i18n(),$("#palette > .palette-spinner").hide(),$(".palette-scroll").removeClass("hide"),$("#palette-search").removeClass("hide"),l(function(){RED.settings.theme("projects.enabled",!1)?RED.projects.refresh(function(e){RED.sidebar.info.refresh(),e||(RED.menu.setDisabled("menu-item-projects-open",!0),RED.menu.setDisabled("menu-item-projects-settings",!0),!1===e||RED.projects.showStartup()),n()}):(RED.sidebar.info.refresh(),n())})):s(t.shift(),o)};o()}})}function l(o){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"flows",success:function(e){if(e){var t=window.location.hash;RED.nodes.version(e.rev),RED.nodes.import(e.flows),RED.nodes.dirty(!1),RED.view.redraw(!0),/^#flow\/.+$/.test(t)&&RED.workspaces.show(t.substring(6))}o()}})}function n(){var i={};RED.comms.subscribe("notification/#",function(e,o){var t=e.split("/")[1];if("runtime-deploy"!==t&&"node"!==t){if("project-update"===t)return RED.nodes.clear(),RED.history.clear(),RED.view.redraw(!0),void RED.projects.refresh(function(){l(function(){var e=RED.projects.getActiveProject(),t={"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:o.project}),updated:RED._("notification.project.updated",{project:o.project}),pull:RED._("notification.project.pull",{project:o.project}),revert:RED._("notification.project.revert",{project:o.project}),"merge-complete":RED._("notification.project.merge-complete")}[o.action];RED.notify("<p>"+t+"</p>"),RED.sidebar.info.refresh()})});if(o.text){o.default=o.text;var n=RED._(o.text,o),a={type:o.type,fixed:void 0===o.timeout,timeout:o.timeout,id:t};"runtime-state"===t&&("safe-mode"===o.error?a.buttons=[{text:RED._("common.label.close"),click:function(){i[t].hideNotification()}}]:"missing-types"===o.error?(n+="<ul><li>"+o.types.map(RED.utils.sanitize).join("</li><li>")+"</li></ul>",RED.projects.getActiveProject()?a.buttons=[{text:RED._("notification.label.manage-project-dep"),click:function(){i[t].hideNotification(),RED.projects.settings.show("deps")}}]:a.buttons=[{text:RED._("common.label.close"),click:function(){i[t].hideNotification()}}]):"credentials_load_failed"===o.error?RED.settings.theme("projects.enabled",!1)?RED.user.hasPermission("projects.write")&&(a.buttons=[{text:RED._("notification.project.setupCredentials"),click:function(){i[t].hideNotification(),RED.projects.showCredentialsPrompt()}}]):a.buttons=[{text:RED._("common.label.close"),click:function(){i[t].hideNotification()}}]:"missing_flow_file"===o.error?RED.user.hasPermission("projects.write")&&(a.buttons=[{text:RED._("notification.project.setupProjectFiles"),click:function(){i[t].hideNotification(),RED.projects.showFilesPrompt()}}]):"missing_package_file"===o.error?RED.user.hasPermission("projects.write")&&(a.buttons=[{text:RED._("notification.project.setupProjectFiles"),click:function(){i[t].hideNotification(),RED.projects.showFilesPrompt()}}]):"project_empty"===o.error?RED.user.hasPermission("projects.write")&&(a.buttons=[{text:RED._("notification.project.no"),click:function(){i[t].hideNotification()}},{text:RED._("notification.project.createDefault"),click:function(){i[t].hideNotification(),RED.projects.createDefaultFileSet()}}]):"git_merge_conflict"===o.error&&(RED.nodes.clear(),RED.sidebar.versionControl.refresh(!0),RED.user.hasPermission("projects.write")&&(a.buttons=[{text:RED._("notification.project.mergeConflict"),click:function(){i[t].hideNotification(),RED.sidebar.versionControl.showLocalChanges()}}]))),i.hasOwnProperty(t)?i[t].update(n,a):i[t]=RED.notify(n,a)}else i.hasOwnProperty(t)&&(i[t].close(),delete i[t])}}),RED.comms.subscribe("status/#",function(e,t){var o=e.split("/"),n=RED.nodes.node(o[1]);n&&(t.hasOwnProperty("text")&&/^[a-zA-Z]/.test(t.text)&&(t.text=n._(t.text.toString(),{defaultValue:t.text.toString()})),n.status=t,n.dirty=!0,RED.view.redraw())}),RED.comms.subscribe("notification/node/#",function(e,t){var o,n,a;if("notification/node/added"==e){var i=[];t.forEach(function(e){var t=e.id;RED.nodes.addNodeSet(e),i=i.concat(e.types),RED.i18n.loadNodeCatalog(t,function(){$.get("nodes/"+t,function(e){s(e)})})}),i.length&&(a="<ul><li>"+i.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:i.length})+a,"success")),r()}else if("notification/node/removed"==e){for(o=0;o<t.length;o++)n=t[o],RED.nodes.removeNodeSet(n.id).added&&(a="<ul><li>"+n.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeRemoved",{count:n.types.length})+a,"success"));r()}else"notification/node/enabled"==e?t.types&&(RED.nodes.getNodeSet(t.id).added?(RED.nodes.enableNodeSet(t.id),a="<ul><li>"+t.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeEnabled",{count:t.types.length})+a,"success")):$.get("nodes/"+t.id,function(e){s(e),a="<ul><li>"+t.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:t.types.length})+a,"success")})):"notification/node/disabled"==e?t.types&&(RED.nodes.disableNodeSet(t.id),a="<ul><li>"+t.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeDisabled",{count:t.types.length})+a,"success")):"notification/node/upgraded"==e&&(RED.notify(RED._("palette.event.nodeUpgraded",{module:t.module,version:t.version}),"success"),RED.nodes.registry.setModulePendingUpdated(t.module,t.version));RED.library.loadFlowLibrary()}),RED.comms.subscribe("event-log/#",function(e,t){var o=e.substring(9);RED.eventLog.log(o,t)})}function o(){$.get("red/about",function(e){RED.sidebar.info.set('<div style="text-align:center;"><img width="50px" src="red/images/node-red-icon.svg" /></div>'+marked(e)),RED.sidebar.info.show()})}function a(){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-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"},null]}),e.push(null),e.push({id:"menu-item-import",label:RED._("menu.label.import"),options:[{id:"menu-item-import-clipboard",label:RED._("menu.label.clipboard"),onselect:"core:show-import-dialog"},{id:"menu-item-import-library",label:RED._("menu.label.library"),options:[]}]}),e.push({id:"menu-item-export",label:RED._("menu.label.export"),options:[{id:"menu-item-export-clipboard",label:RED._("menu.label.clipboard"),onselect:"core:show-export-dialog"},{id:"menu-item-export-library",label:RED._("menu.label.library"),disabled:!0,onselect:"core:library-export"}]}),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(null),!1!==RED.settings.theme("palette.editable")&&(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),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"}),RED.view.init(),RED.userSettings.init(),RED.user.init(),RED.library.init(),RED.keyboard.init(),RED.palette.init(),RED.eventLog.init(),console.log("eventlog init"),!1!==RED.settings.theme("palette.editable")?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.workspaces.init(),RED.clipboard.init(),RED.search.init(),RED.editor.init(),RED.diff.init(),RED.menu.init({id:"btn-sidemenu",options:e}),RED.deploy.init(RED.settings.theme("deployButton",null)),RED.notifications.init(),RED.actions.add("core:show-about",o),RED.nodes.init(),RED.comms.connect(),$("#main-container").show(),$(".header-toolbar").show(),$.ajax({headers:{Accept:"application/json"},cache:!1,url:"nodes",success:function(e){RED.nodes.setNodeList(e),RED.i18n.loadNodeCatalogs(function(){r(t)})}})}var i=!1;return{init:function(e){if(i)throw new Error("RED already initialised");i=!0,ace.require("ace/ext/language_tools"),(e=e||{}).apiRootUrl=e.apiRootUrl||"",e.apiRootUrl&&!/\/$/.test(e.apiRootUrl)&&(e.apiRootUrl=e.apiRootUrl+"/"),RED.i18n.init(e,function(){RED.settings.init(e,a)})}}}();RED.events=function(){var a={};return{on:function(e,t){a[e]=a[e]||[],a[e].push(t)},off:function(e,t){var o=a[e];if(o)for(var n=0;n<o.length;n++)if(o[n]===t)return void o.splice(n,1)},emit:function(t,e){if(a[t])for(var o=0;o<a[t].length;o++)try{a[t][o](e)}catch(e){console.log("RED.events.emit error: ["+t+"] "+e.toString()),console.log(e)}}}}(),RED.i18n=function(){var i;return{init:function(e,t){i=e.apiRootUrl||"",i18n.init({resGetPath:i+"locales/__ns__?lng=__lng__",dynamicLoad:!1,load:"current",ns:{namespaces:["editor","node-red","jsonata","infotips"],defaultNs:"editor"},fallbackLng:["en-US"],useCookie:!1,returnObjectTrees:!0},function(){t()}),RED._=function(){var e=i18n.t.apply(null,arguments);return"string"==typeof e?e:arguments[0]}},loadNodeCatalog:function(o,n){var e=i18n.functions.toLanguages(i18n.detectLanguage()),a=e.length;e.forEach(function(t){$.ajax({headers:{Accept:"application/json"},cache:!1,url:i+"nodes/"+o+"/messages?lng="+t,success:function(e){i18n.addResourceBundle(t,o,e),0===--a&&n()}})})},loadNodeCatalogs:function(e){var t=i18n.functions.toLanguages(i18n.detectLanguage()),n=t.length;t.forEach(function(o){$.ajax({headers:{Accept:"application/json"},cache:!1,url:i+"nodes/messages?lng="+o,success:function(t){Object.keys(t).forEach(function(e){i18n.addResourceBundle(o,e,t[e])}),0===--n&&e()}})})}}}(),RED.settings=function(){var e,o={},n={},a=function(){try{return"localStorage"in window&&null!==window.localStorage}catch(e){return!1}},i=function(n){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings",success:function(e){!function(e){for(var t in o)o.hasOwnProperty(t)&&RED.settings.hasOwnProperty(t)&&delete RED.settings[t];for(t in e)e.hasOwnProperty(t)&&(RED.settings[t]=e[t]);o=e}(e),RED.settings.user&&!RED.settings.user.anonymous||RED.settings.remove("auth-tokens"),console.log("Node-RED: "+e.version),t(n)},error:function(e,t,o){401===e.status?(/[?&]access_token=(.*?)(?:$|&)/.test(window.location.search)&&(window.location.search=""),RED.user.login(function(){i(n)})):console.log("Unexpected error loading settings:",e.status,t)}})};function t(t){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings/user",success:function(e){n=e,t()},error:function(e,t,o){console.log("Unexpected error loading user settings:",e.status,t)}})}function s(){RED.user.hasPermission("settings.write")&&(e&&clearTimeout(e),e=setTimeout(function(){e=null,$.ajax({method:"POST",contentType:"application/json",url:"settings/user",data:JSON.stringify(n),success:function(e){},error:function(e,t,o){console.log("Unexpected error saving user settings:",e.status,t)}})},300))}return{init:function(n,e){var t=/[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search);if(t){var o=t[1];RED.settings.set("auth-tokens",{access_token:o}),window.location.search=""}RED.settings.apiRootUrl=n.apiRootUrl,$.ajaxSetup({beforeSend:function(e,t){if(!/^\s*(https?:|\/|\.)/.test(t.url)){n.apiRootUrl&&(t.url=n.apiRootUrl+t.url);var o=RED.settings.get("auth-tokens");o&&e.setRequestHeader("Authorization","Bearer "+o.access_token),e.setRequestHeader("Node-RED-API-Version","v2")}}}),i(e)},load:i,loadUserSettings:t,set:function(e,t){a()&&("auth-tokens"===e?localStorage.setItem(e,JSON.stringify(t)):(n[e]=t,s()))},get:function(e){if(a())return"auth-tokens"===e?JSON.parse(localStorage.getItem(e)):n[e]},remove:function(e){a()&&("auth-tokens"===e?localStorage.removeItem(e):(delete n[e],s()))},theme:function(e,t){if(!RED.settings.editorTheme)return t;var o=e.split("."),n=RED.settings.editorTheme;try{for(var a=0;a<o.length;a++)n=n[o[a]];return void 0===n?t:n}catch(e){return t}},getAWSEnvprofiles:function(t){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings/aws/creds",success:function(e){awsEnvProfiles=e,t()},error:function(e,t,o){console.log("Unexpected error loading user settings:",e.status,t)}})},setAWSEnvprofiles:function(){RED.user.hasPermission("settings.write")&&(e&&clearTimeout(e),e=setTimeout(function(){e=null,$.ajax({method:"POST",contentType:"application/json",url:"settings/aws/creds",data:JSON.stringify(awsEnvProfileInput),success:function(e){},error:function(e,t,o){console.log("Unexpected error saving user settings:",e.status,t)}})},300))}}}(),RED.user=function(){function p(){$("#btn-usermenu-submenu li").remove(),RED.settings.user.anonymous?RED.menu.addItem("btn-usermenu",{id:"usermenu-item-login",label:RED._("menu.label.login"),onselect:function(){RED.user.login({cancelable:!0},function(){RED.settings.load(function(){RED.notify(RED._("user.loggedInAs",{name:RED.settings.user.username}),"success"),p(),RED.events.emit("login",RED.settings.user.username)})})}}):(RED.menu.addItem("btn-usermenu",{id:"usermenu-item-username",label:"<b>"+RED.settings.user.username+"</b>"}),RED.menu.addItem("btn-usermenu",{id:"usermenu-item-logout",label:RED._("menu.label.logout"),onselect:function(){RED.user.logout()}}))}var a=/^((.+)\.)?read$/,i=/^((.+)\.)?write$/;return{init:function(){if(RED.settings.user&&(!RED.settings.editorTheme||!RED.settings.editorTheme.hasOwnProperty("userMenu"))){var e=$('<li><a id="btn-usermenu" class="button hide" data-toggle="dropdown" href="#"></a></li>').prependTo(".header-toolbar");RED.settings.user.image?$('<span class="user-profile"></span>').css({backgroundImage:"url("+RED.settings.user.image+")"}).appendTo(e.find("a")):$('<i class="fa fa-user"></i>').appendTo(e.find("a")),RED.menu.init({id:"btn-usermenu",options:[]}),p()}},login:function(l,d){"function"==typeof l&&(d=l,l={});var c=$('<div id="node-dialog-login" class="hide"><div style="display: inline-block;width: 250px; vertical-align: top; margin-right: 10px; margin-bottom: 20px;"><img id="node-dialog-login-image" src=""/></div><div style="display: inline-block; width: 250px; vertical-align: bottom; margin-left: 10px; margin-bottom: 20px;"><form id="node-dialog-login-fields" class="form-horizontal" style="margin-bottom: 0px;"></form></div></div>');c.dialog({autoOpen:!1,dialogClass:"ui-dialog-no-close",modal:!0,closeOnEscape:!!l.cancelable,width:600,resizable:!1,draggable:!1}),$("#node-dialog-login-fields").empty(),$.ajax({dataType:"json",url:"auth/login",success:function(a){var e=0;if("credentials"==a.type){for(;e<a.prompts.length;e++){var t=a.prompts[e],o=$("<div/>",{class:"form-row"});$('<label for="node-dialog-login-'+t.id+'">'+RED._(t.label)+":</label><br/>").appendTo(o);var n=$('<input style="width: 100%" id="node-dialog-login-'+t.id+'" type="'+t.type+'" tabIndex="'+(e+1)+'"/>').appendTo(o);e<a.prompts.length-1&&n.keypress(function(){var t=o;return function(e){13==e.keyCode&&(t.next("div").find("input").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;" 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" style="margin-right: 20px;" tabIndex="'+(e+1)+'">'+RED._("common.label.cancel")+"</a>":"")+'<input type="submit" id="node-dialog-login-submit" 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").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<a.prompts.length;o++){var n=a.prompts[o];t[n.id]=$("#node-dialog-login-"+n.id).val()}$.ajax({url:"auth/token",type:"POST",data:t}).done(function(e,t,o){RED.settings.set("auth-tokens",e),$("#node-dialog-login").dialog("destroy").remove(),l.updateMenu&&p(),d()}).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"==a.type)for(e=0;e<a.prompts.length;e++){t=a.prompts[e],o=$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields");var i=$('<a href="#"></a>',{style:"padding: 10px"}).appendTo(o).click(function(){document.location=t.url});if(t.image)$("<img>",{src:t.image}).appendTo(i);else if(t.label){var s=$("<span></span>").text(t.label);t.icon&&($("<i></i>",{class:"fa fa-2x "+t.icon,style:"vertical-align: middle"}).appendTo(i),s.css({verticalAlign:"middle",marginLeft:"8px"})),s.appendTo(i)}i.button()}l.cancelable&&$("#node-dialog-login-cancel").button().click(function(e){$("#node-dialog-login").dialog("destroy").remove()});var r=a.image||"red/images/node-red-256.png";$("#node-dialog-login-image").load(function(){c.dialog("open")}).attr("src",r)}})},logout:function(){var e=RED.settings.get("auth-tokens"),t=e?e.access_token:"";$.ajax({url:"auth/revoke",type:"POST",data:{token:t}}).done(function(e,t,o){RED.settings.remove("auth-tokens"),e&&e.redirect?document.location.href=e.redirect:document.location.reload(!0)}).fail(function(e,t,o){401===e.status?document.location.reload(!0):console.log(t)})},hasPermission:function(e){return""===e||!RED.settings.user||function e(t,o){if(""===o)return!0;var n;if(Array.isArray(o)){for(n=0;n<o.length;n++)if(!e(t,o[n]))return!1;return!0}if(Array.isArray(t)){if(0===t.length)return!1;for(n=0;n<t.length;n++)if(e(t[n],o))return!0;return!1}return"*"===t||t===o||("read"===t||"*.read"===t?a.test(o):("write"===t||"*.write"===t)&&i.test(o))}(RED.settings.user.permissions||"",e)}}}(),RED.comms=function(){var i,s=null,d=null,c=null,p=10,u={},f=!1,h=0,g=!1;return{connect:function r(){var e;if(g=!0,RED.settings.apiRootUrl){var t=/^(https?):\/\/(.*)$/.exec(RED.settings.apiRootUrl);t&&(console.log(t),e="ws"+("https"===t[1]?"s":"")+"://"+t[2]+"comms")}else{var o=location.hostname,n=location.port;0!==n.length&&(o=o+":"+n),o=(o+=document.location.pathname)+("/"==o.slice(-1)?"":"/")+"comms",e="ws"+("https:"==document.location.protocol?"s":"")+"://"+o}var a=RED.settings.get("auth-tokens");function l(){for(var e in u)u.hasOwnProperty(e)&&i.send(JSON.stringify({subscribe:e}))}f=null!=a,(i=new WebSocket(e)).onopen=function(){h=0,s&&(d=setTimeout(function(){s.close(),s=null},1e3)),f?i.send(JSON.stringify({auth:a.access_token})):l()},i.onmessage=function(e){var t=JSON.parse(e.data);if(t.auth)f&&"ok"===t.auth?(f=!1,l()):"fail"===t.auth&&(g=!1,RED.user.login({updateMenu:!0},function(){r()}));else for(var o=0;o<t.length;o++){var n=t[o];if(n.topic)for(var a in u)if(u.hasOwnProperty(a)&&new RegExp("^"+a.replace(/([\[\]\?\(\)\\\\$\^\*\.|])/g,"\\$1").replace(/\+/g,"[^/]+").replace(/\/#$/,"(/.*)?")+"$").test(n.topic)){var i=u[a];if(i)for(var s=0;s<i.length;s++)i[s](n.topic,n.data)}}},i.onclose=function(){g&&(d&&(clearTimeout(d),d=null),++h<10?(setTimeout(r,1e3),5<h&&null==s&&(s=RED.notify(RED._("notification.errors.lostConnection"),"error",!0))):h<20?setTimeout(r,2e3):(p=60,c=setInterval(function(){if(0==--p)s.update(RED._("notification.errors.lostConnection")),clearInterval(c),r();else{var e=RED._("notification.errors.lostConnectionReconnect",{time:p})+' <a href="#">'+RED._("notification.errors.lostConnectionTry")+"</a>";s.update(e,{silent:!0}),$(s).find("a").click(function(e){e.preventDefault(),s.update(RED._("notification.errors.lostConnection"),{silent:!0}),clearInterval(c),r()})}},1e3)))}},subscribe:function(e,t){null==u[e]&&(u[e]=[]),u[e].push(t),i&&1==i.readyState&&i.send(JSON.stringify({subscribe:e}))},unsubscribe:function(e,t){if(u[e]){for(var o=0;o<u[e].length;o++)if(u[e][o]===t){u[e].splice(o,1);break}0===u[e].length&&delete u[e]}}}}(),RED.text={},RED.text.bidi=function(){var t="";function o(e){return"auto"==t?function(e){for(var t,o,n=e.length,a=0;a<n;a++){if(1488<=(o=e.charCodeAt(a))&&o<=1535||1536<=o&&o<=1631||1642<=o&&o<=1775||1786<=o&&o<=2047||64285<=o&&o<=65023||65136<=o&&o<=65276)return!0;if(64<(t=e.charCodeAt(a))&&t<91||96<t&&t<123)return!1}return!1}(e)?"rtl":"ltr":t}function n(){$(this).attr("dir",o($(this).val()))}return{setTextDirection:function(e){t=e,RED.nodes.eachNode(function(e){e.dirty=!0}),RED.view.redraw(),RED.palette.refresh(),$("#workspace").find("span.bidiAware").each(function(){$(this).attr("dir",o($(this).html()))}),$("#sidebar").find("span.bidiAware").each(function(){$(this).attr("dir",o($(this).text()))})},enforceTextDirectionWithUCC:function(e){if(e){var t=o(e);if("ltr"==t)return""+e+"";if("rtl"==t)return""+e+""}return e},resolveBaseTextDir:o,prepareInput:function(e){e.on("keyup",n).on("paste",n).on("cut",n),n.call(e)}}}(),RED.text.format=function(){var f=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])},l=function(){function p(e){if(!e)return!1;void 0===e.start&&(e.start=""),void 0===e.end&&(e.end=""),void 0!==e.startAfter?(e.start=e.startAfter,e.after=!0):e.after=!1,void 0!==e.endBefore?(e.end=e.endBefore,e.before=!0):e.before=!1;var t=parseInt(e.startPos,10);isNaN(t)?e.usePos=!1:e.usePos=!0;var o=parseInt(e.length,10);return isNaN(o)?e.useLength=!1:e.useLength=!0,e.loops=void 0===e.loops||!!e.loops,!0}function u(e,t){var o={};for(var n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);var a=e.content,i=o.usePos&&o.startPos<a.length;i&&(o.start="",o.loops=!1),o.bStart=i?o.startPos:0<o.start.length?a.indexOf(o.start):0;var s=o.useLength&&0<o.length&&o.bStart+o.length<a.length;return s&&(o.end=""),o.bEnd=s?o.bStart+o.length:0<o.end.length?a.indexOf(o.end,o.bStart+o.start.length)+1:a.length,o.after||(o.start=""),o.before||(o.end=""),o}return{handleSubcontents:function(e,t,o,n,a){if(!o.content||"string"!=typeof o.content||0===o.content.length)return e;var i=!0;void 0!==o.loops&&(i=!!o.loops);for(var s=0;!(s>=e.length);s++)if(!(e[s].isParsed||e.keep||e[s].isSeparator)){var r=e[s].content,l=r.indexOf(o.content);if(!(l<0)){var d,c=0;if(o.continued)for(;c++,0===(d=r.indexOf(o.content,l+c*o.content.length)););else c=1;if(d=l+c*o.content.length,e.splice(s,1),0<l&&(e.splice(s,0,new f({content:r.substring(0,l),localGui:t.dir,keep:!0})),s++),e.splice(s,0,new f({content:r.substring(l,d),textDirection:o.subDir,localGui:t.dir})),d<r.length&&e.splice(s+1,0,new f({content:r.substring(d,r.length),localGui:t.dir,keep:!0})),!i)break}}},handleBounds:function(e,t,o,n,a){for(var i=0;i<o.length;i++)if(p(o[i]))for(var s=0;!(s>=e.length);s++)if(!(e[s].isParsed||e[s].inBounds||e.keep||e[s].isSeparator)){var r=u(e[s],o[i]),l=r.bStart,d=r.bEnd;if(!(l<0||d<0)){var c=e[s].content;if(e.splice(s,1),0<l&&(e.splice(s,0,new f({content:c.substring(0,l),localGui:t.dir,keep:!0})),s++),r.start&&(e.splice(s,0,new f({content:r.start,localGui:t.dir,isSeparator:!0})),s++),e.splice(s,0,new f({content:c.substring(l+r.start.length,d-r.end.length),textDirection:r.subDir,localGui:t.dir,inBounds:!0})),r.end&&(s++,e.splice(s,0,new f({content:r.end,localGui:t.dir,isSeparator:!0}))),d+r.end.length<c.length&&e.splice(s+1,0,new f({content:c.substring(d+r.end.length,c.length),localGui:t.dir,keep:!0})),!r.loops)break}}for(i=0;i<e.length;i++)e[i].inBounds=!1;return e},handleCases:function(e,t,o,n,a){if(0===o.length)return e;var i={};for(var s in t)t.hasOwnProperty(s)&&(i[s]=t[s]);for(var r=0;r<o.length;r++)o[r].handler&&"function"==typeof o[r].handler.handle||(o[r].handler=t.commonHandler),o[r].args?(i.cases=o[r].args.cases,i.points=o[r].args.points,i.bounds=o[r].args.bounds,i.subs=o[r].args.subs):(i.cases=[],i.points=[],i.bounds=[],i.subs={}),o[r].handler.handle(n,e,i,a);return e},handlePoints:function(e,t,o,n,a){for(var i=0;i<o.length;i++)for(var s=0;!(s>=e.length);s++)if(!(e[s].isParsed||e[s].keep||e[s].isSeparator)){var r=e[s].content,l=r.indexOf(o[i]);0<=l&&(e.splice(s,1),0<l&&(e.splice(s,0,new f({content:r.substring(0,l),textDirection:t.subDir,localGui:t.dir,inPoints:!0})),s++),e.splice(s,0,new f({content:o[i],localGui:t.dir,isSeparator:!0})),l+o[i].length+1<=r.length&&e.splice(s+1,0,new f({content:r.substring(l+o[i].length),textDirection:t.subDir,localGui:t.dir,inPoints:!0})))}for(i=0;i<e.length;i++)e[i].keep?e[i].keep=!1:e[i].inPoints&&(e[i].isParsed=!0,e[i].inPoints=!1);return e}}}(),r={handle:function(e,t,o,n){var a=[];Array.isArray(o.cases)&&(a=o.cases);var i=[];void 0!==o.points&&(Array.isArray(o.points)?i=o.points:"string"==typeof o.points&&(i=o.points.split("")));var s={};"object"==typeof o.subs&&(s=o.subs);var r=[];return Array.isArray(o.bounds)&&(r=o.bounds),l.handleBounds(t,o,r,e,n),l.handleSubcontents(t,o,s,e,n),l.handleCases(t,o,a,e,n),l.handlePoints(t,o,i,e,n),t}},p={LRE:"",RLE:"",PDF:"",LRM:"",RLM:"",LRO:"",RLO:"",getLocaleDetails:function(e){if(e||(e="undefined"==typeof navigator?"":navigator.language||navigator.userLanguage||""),e=e.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,n=e.split("-");return{lang:n[0],country:n[1]?n[1]:""}},removeUcc:function(e){return e?e.replace(/[\u200E\u200F\u202A-\u202E]/g,""):e},removeTags:function(e){return e?e.replace(/<[^<]*>/g,""):e},getDirection:function(e,t,o,n){if("auto"!==t&&/^(rtl|ltr)$/i.test(t))return t;o=/^(rtl|ltr)$/i.test(o)?o:"ltr";var a=n?e.split("").reverse().join(""):e,i=/[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(a);return i?i[0]<="z"?"ltr":"rtl":o},hasArabicChar:function(e){return!!/[\u0600-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(e)},showMarks:function(e,t){for(var o="",n=0;n<e.length;n++){var a=""+e.charAt(n);switch(a){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+=a}}var i=void 0!==t&&/^(rtl|ltr)$/i.test(t)?"rtl"===t?"":"":"";return i+o+(""===i?"":"")},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,"")}},d=function(){var e={};function s(e,t){var o=Array.isArray(e)?e[0]:e;return o.guiDir||(o.guiDir="ltr"),o.dir||(o.dir=o.guiDir),t&&(void 0===o.points&&(o.points=[]),o.cases||(o.cases=[]),o.bounds||(o.bounds=[]),o.commonHandler=r),o}function a(e,t,o){if(!e||!t)return new f({content:""});var n=s(t,!0),a=[new f({content:e,actual:e,localGui:n.dir})],i=r.handle;return n.handler&&"function"==typeof n.handler&&(i=n.handler.handle),i(e,a,n,o),a}function i(e,t,o){var n=s(t,!1);return o?function(e,t,o){for(var n="",a="",i=0;i<e.length;i++)if(e[i].isVisible){var s=e[i].textDirection,r=e[i].localGui;if(""!==r&&""===a?n+="<bdi dir='"+("rtl"===r?"rtl":"ltr")+"'>":""===a||""!==r&&r===a&&!stop||(n+="</bdi>"+(i==e.length-1&&""!==r?"":"<span style='unicode-bidi: embed; direction: "+("rtl"===t.dir?"rtl":"ltr")+";'></span>"),""!==r&&(n+="<bdi dir='"+("rtl"===r?"rtl":"ltr")+"'>")),"auto"===s&&(s=p.getDirection(e[i].content,s,t.guiDir)),/^(rtl|ltr)$/i.test(s)?(n+="<bdi dir='"+("rtl"===s?"rtl":"ltr")+"'>"+e[i].content+"</bdi>",s):(n+=e[i].content,p.getDirection(e[i].content,s,t.guiDir,!0)),i<e.length-1){var l=r&&e[i+1].localGui?r:t.dir;n+="<span style='unicode-bidi: embed; direction: "+("rtl"===l?"rtl":"ltr")+";'></span>"}else""!==a&&(n+="</bdi>");a=r,stop=!1}else stop=!0;var d="auto"===t.dir?p.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;d!==t.guiDir&&(n="<bdi dir='"+("rtl"===d?"rtl":"ltr")+"'>"+n+"</bdi>");return n}(e,n):function(e,t,o){for(var n="",a="",i=!1,s=0;s<e.length;s++)if(e[s].isVisible){var r=e[s].textDirection,l=e[s].localGui;if(""!==l&&""===a?n+="rtl"===l?p.RLE:p.LRE:""===a||""!==l&&l===a&&!i||(n+=p.PDF+(s==e.length-1&&""!==l?"":"rtl"===t.dir?p.RLM:p.LRM),""!==l&&(n+="rtl"===l?p.RLE:p.LRE)),"auto"===r&&(r=p.getDirection(e[s].content,r,t.guiDir)),/^(rtl|ltr)$/i.test(r)?(n+=("rtl"===r?p.RLE:p.LRE)+e[s].content+p.PDF,r):(n+=e[s].content,p.getDirection(e[s].content,r,t.guiDir,!0)),s<e.length-1){var d=l&&e[s+1].localGui?l:t.dir;n+="rtl"===d?p.RLM:p.LRM}else""!==a&&(n+=p.PDF);a=l,i=!1}else i=!0;var c="auto"===t.dir?p.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;c!==t.guiDir&&(n=("rtl"===c?p.RLE:p.LRE)+n+p.PDF);return n}(e,n)}return e.parseAndDisplayStructure=function(e,t,o,n){return e&&t?i(a(e,t,n),t,o):e},e.parseStructure=a,e.displayStructure=i,e.restore=function(e,t){return e},e}(),t={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:t.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 i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},o={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:"ltr",points:","};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},n={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:function(e,t){if("ar"!==p.getLocaleDetails(t).lang)return"ltr";var o=e.indexOf("@");return 0<o&&o<e.length-1&&p.hasArabicChar(e.substring(o+1))?"rtl":"ltr"}(e,a),points:"<>.:,;@",cases:[{handler:r,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"(",endBefore:")"}],points:""}}]};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},a={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:"ltr",points:"/\\:."};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},i={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:"ltr",points:" /%^&[]<>=!?~:.,|()+-*{}"};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},s={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:"ltr",points:"\t!#%&()*+,-./:;<=>?|[]{}",cases:[{handler:r,args:{bounds:[{startAfter:"/*",endBefore:"*/"},{startAfter:"--",end:"\n"},{startAfter:"--"}]}},{handler:r,args:{subs:{content:" ",continued:!0}}},{handler:r,args:{bounds:[{startAfter:"'",endBefore:"'"},{startAfter:'"',endBefore:'"'}]}}]};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},c={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:"ltr",points:"_"};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},u={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:"ltr",points:":?#/@.[]="};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},h={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:t.dir?t.dir:o?"rtl":"ltr",points:" ,.!?;:"};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},g={format:function(e,t,o,n,a,i){var s={guiDir:o?"rtl":"ltr",dir:"ltr",points:" /[]<>=!:@.|()+-*",cases:[{handler:r,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"'",endBefore:"'"}],points:""}}]};return i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},v={format:function(e,t,o,n,a,i){var s={},r="",l=Array.isArray(t)?t[0]:t;for(r in l)l.hasOwnProperty(r)&&(s[r]=l[r]);return s.guiDir=o?"rtl":"ltr",s.dir=s.dir?s.dir:s.guiDir,i?d.parseStructure(e,s,!!n,a):d.parseAndDisplayStructure(e,s,!!n,a)}},b=(function(){var e={msgLang:"en",msgDir:"",phLang:"",phDir:"",phPacking:["{","}"],phStt:{type:"none",args:{}},guiDir:""},t=!1;function o(e){return"he"===e||"iw"===e||"ar"===e?"rtl":"ltr"}function n(e){0===e.msgDir.length&&(e.msgDir=o(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:o(e.phLang)),e.phDir="ltr"!==e.phDir&&"rtl"!==e.phDir&&"auto"!=e.phDir?"ltr":e.phDir,"string"==typeof e.phPacking&&(e.phPacking=e.phPacking.split("")),e.phPacking.length<2&&(e.phPacking=["{","}"])}}(),null);function m(e){switch(e){case"breadcrumb":return t;case"comma":return o;case"email":return n;case"filepath":return a;case"formula":return i;case"sql":return s;case"underscore":return c;case"url":return u;case"word":return h;case"xpath":return g;default:return v}}function y(t,e,o,n,a){if(!t||1!=t.nodeType)return!1;b||(b=document.createEvent("Event")).initEvent("TF",!0,!0),t.setAttribute("data-tf-type",e);var i="undefined"===o?"{}":JSON.stringify(Array.isArray(o)?o[0]:o);t.setAttribute("data-tf-args",i);var s="ltr";if("undefined"===n&&(t.dir?s=t.dir:t.style&&t.style.direction&&(s=t.style.direction),n="rtl"===s.toLowerCase()),t.setAttribute("data-tf-dir",n),t.setAttribute("data-tf-locale",p.getLocaleDetails(a).lang),function(e){var t=window.navigator.userAgent;if(0<=t.indexOf("MSIE")||0<=t.indexOf("Trident")||0<=t.indexOf("Edge"))return!1;var o=document.createElement(e.tagName);o.contentEditable=!0;var n="oninput"in o;return n||(o.setAttribute("oninput","return;"),n="function"==typeof o.oninput),o=null,n}(t)){t.oninput;t.oninput=function(e){w(e.target)}}else t.onkeyup=function(e){w(e.target),t.dispatchEvent(b)},t.onmouseup=function(e){w(e.target),t.dispatchEvent(b)};return w(t),!0}function w(e){var t=e.textContent||"",o=document.getSelection();if(0===t.length||!o||o.rangeCount<=0)e.dispatchEvent(b);else{var n,a,i=o.getRangeAt(0),s=i.cloneRange();n=i.startContainer,a=i.startOffset;var r=0;3===n.nodeType&&(r+=a),s.setStart(e,0),s.setEndBefore(n);var l=document.createElement("div");l.appendChild(s.cloneContents()),r+=l.textContent.length,e.innerHTML=m(e.getAttribute("data-tf-type")).format(t,JSON.parse(e.getAttribute("data-tf-args")),"true"===e.getAttribute("data-tf-dir"),!0,e.getAttribute("data-tf-locale"));var d=e,c=e,p=0,u=!1;for(o.removeAllRanges(),i.setStart(e,0),i.setEnd(e,0);c;){if(3===c.nodeType){if(p+c.nodeValue.length>=r){i.setStart(c,r-p);break}p+=c.nodeValue.length,c=c.nextSibling}else{if(c.hasChildNodes()){c=(d=c).firstChild;continue}c=c.nextSibling}for(;!c;){if(d===e){u=!0;break}c=d.nextSibling,d=d.parentNode}if(u)break}o.addRange(i),e.dispatchEvent(b)}}return{getHtml:function(e,t,o,n,a){return m(t).format(e,o,n,!0,a)},attach:function(e,t,o,n,a){return y(e,t,o,n,a)}}}(),RED.state={DEFAULT:0,MOVING:1,JOINING:2,MOVING_ACTIVE:3,ADDING:4,EDITING:5,EXPORT:6,IMPORT:7,IMPORT_DRAGGING:8,QUICK_JOINING:9,PANNING:10},RED.nodes=function(){var W,K,p=[],H={},u=[],Y={},s=[],r={},t=null,o=!1;var X=function(){var a={},i=[],s={},r={},o={},t={};o.tab={defaults:{label:{value:""},disabled:{value:!1},info:{value:""}}};var n={setModulePendingUpdated:function(e,t){a[e].pending_version=t,RED.events.emit("registry:module-updated",{module:e,version:t})},getModule:function(e){return a[e]},getNodeSetForType:function(e){return n.getNodeSet(r[e])},getModuleList:function(){return a},getNodeList:function(){return i},getNodeTypes:function(){return Object.keys(o)},setNodeList:function(e){i=[];for(var t=0;t<e.length;t++){var o=e[t];n.addNodeSet(o)}},addNodeSet:function(e){e.added=!1,s[e.id]=e;for(var t=0;t<e.types.length;t++)r[e.types[t]]=e.id;i.push(e),a[e.module]=a[e.module]||{name:e.module,version:e.version,local:e.local,sets:{}},e.pending_version&&(a[e.module].pending_version=e.pending_version),a[e.module].sets[e.name]=e,RED.events.emit("registry:node-set-added",e)},removeNodeSet:function(e){for(var t=s[e],o=0;o<t.types.length;o++)delete r[t.types[o]];delete s[e];for(var n=0;n<i.length;n++)if(i[n].id===e){i.splice(n,1);break}return delete a[t.module].sets[t.name],0===Object.keys(a[t.module].sets).length&&delete a[t.module],RED.events.emit("registry:node-set-removed",t),t},getNodeSet:function(e){return s[e]},enableNodeSet:function(e){var t=s[e];t.enabled=!0,RED.events.emit("registry:node-set-enabled",t)},disableNodeSet:function(e){var t=s[e];t.enabled=!1,RED.events.emit("registry:node-set-disabled",t)},registerNodeType:function(e,t){var n;"subflow:"!=((o[e]=t).type=e).substring(0,8)&&(t.set=s[r[e]],s[r[e]].added=!0,s[r[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===e[0]&&(o=t),o});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 o[e],RED.events.emit("registry:node-type-removed",e)},getNodeType:function(e){return o[e]},setIconSets:function(e){(t=e)["font-awesome"]=RED.nodes.fontAwesome.getIconList()},getIconSets:function(){return t}};return n}();function Q(){return(1+4294967295*Math.random()).toString(16)}function Z(e){if(0!==e.type.indexOf("subflow")?e._=e._def._:e._=RED._,"config"==e._def.category)H[e.id]=e;else{if(e.ports=[],e.wires&&e.wires.length>e.outputs&&(e.outputs=e.wires.length),e.outputs)for(var t=0;t<e.outputs;t++)e.ports.push(t);if(e.dirty=!0,a(e),"subflows"==e._def.category&&void 0===e.i){var o=0;RED.nodes.eachNode(function(e){o=Math.max(o,e.i||0)}),e.i=o+1}p.push(e)}RED.events.emit("nodes:add",e)}function ee(e){u.push(e)}function f(e){if(e in H)return H[e];for(var t in p)if(p[t].id==e)return p[t];return null}function h(e){var t,o=[],a=[];if(e in H)t=H[e],delete H[e],RED.events.emit("nodes:remove",t),RED.workspaces.refresh();else if(t=f(e)){p.splice(p.indexOf(t),1),(o=u.filter(function(e){return e.source===t||e.target===t})).forEach(function(e){u.splice(u.indexOf(e),1)});var i=!1;for(var s in t._def.defaults)if(t._def.defaults.hasOwnProperty(s)){var r=t._def.defaults[s];if(r.type){var l=X.getNodeType(r.type);if(l&&"config"==l.category){var d=H[t[s]];if(d)if(i=!0,d._def.exclusive)h(t[s]),a.push(d);else{var c=d.users;c.splice(c.indexOf(t),1)}}}}i&&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:a}}function l(e){var t=u.indexOf(e);-1!=t&&u.splice(t,1)}function te(e,t){(Y[e.id]=e)._def=RED.nodes.getType("tab"),void 0===t?s.push(e.id):s.splice(t,0,e.id)}function oe(t,e){if(e){var o=Object.keys(r).map(function(e){return r[e].name});o.sort();var n=1,a=t.name;o.forEach(function(e){a==e&&(n++,a=t.name+" ("+n+")")}),t.name=a}r[t.id]=t,RED.nodes.registerType("subflow:"+t.id,{defaults:{name:{value:""},env:{value:[]}},icon:function(){return t.icon||"subflow.png"},category:t.category||"subflows",inputs:t.in.length,outputs:t.out.length,color:"#da9",label:function(){return this.name||RED.nodes.subflow(t.id).name},labelStyle:function(){return this.name?"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},oneditresize:function(e){for(var t=$("#dialog-form>div:not(.node-input-env-container-row)"),o=e.height,n=0;n<t.size();n++)o-=$(t[n]).outerHeight(!0);var a=$("#dialog-form>div.node-input-env-container-row");o-=parseInt(a.css("marginTop"))+parseInt(a.css("marginBottom")),$("#node-input-env-container").editableList("height",o-80)},set:{module:"node-red"}}),t._def=RED.nodes.getType("subflow:"+t.id)}function ne(e){return r[e]}function ae(e,t){for(var o=0;o<p.length;o++){var n=p[o];if(n.z===e){var a=/^subflow:(.+)$/.exec(n.type);if(a){if(a[1]===t)return!0;if(ae(a[1],t))return!0}}}return!1}function g(e){var t={};for(var o in t.id=e.id,t.type=e.type,e._def.defaults)e._def.defaults.hasOwnProperty(o)&&(t[o]=e[o]);return t}function d(t,e){if("tab"===t.type)return g(t);e=e||!1;var o={};if(o.id=t.id,o.type=t.type,o.z=t.z,"unknown"==o.type)for(var n in t._orig)t._orig.hasOwnProperty(n)&&(o[n]=t._orig[n]);else{for(var a in t._def.defaults)t._def.defaults.hasOwnProperty(a)&&(o[a]=t[a]);if(e&&t.credentials){var i={};for(var s in o.credentials={},t._def.credentials)t._def.credentials.hasOwnProperty(s)&&("password"==t._def.credentials[s].type?(!t.credentials._||t.credentials["has_"+s]!=t.credentials._["has_"+s]||t.credentials["has_"+s]&&t.credentials[s])&&(i[s]=t.credentials[s]):null==t.credentials[s]||t.credentials._&&t.credentials[s]==t.credentials._[s]||(i[s]=t.credentials[s]));0<Object.keys(i).length&&(o.credentials=i)}}if("config"!=t._def.category){o.x=t.x,o.y=t.y,o.wires=[];for(var r=0;r<t.outputs;r++)o.wires.push([]);for(var l=u.filter(function(e){return e.source===t}),d=0;d<l.length;d++){var c=l[d];"subflow"!=c.target.type&&c.sourcePort<o.wires.length&&o.wires[c.sourcePort].push(c.target.id)}if(0<t.inputs&&t.inputLabels&&!/^\s*$/.test(t.inputLabels.join(""))&&(o.inputLabels=t.inputLabels.slice()),0<t.outputs&&t.outputLabels&&!/^\s*$/.test(t.outputLabels.join(""))&&(o.outputLabels=t.outputLabels.slice()),(!t._def.defaults||!t._def.defaults.hasOwnProperty("icon"))&&t.icon){var p=RED.utils.getDefaultNodeIcon(t._def,t);t.icon!==p.module+"/"+p.file&&(o.icon=t.icon)}if((!t._def.defaults||!t._def.defaults.hasOwnProperty("l"))&&t.hasOwnProperty("l"))/^link (in|out)$/.test(o.type)==t.l&&(o.l=t.l)}return t.info&&(o.info=t.info),o}function v(a){var s={};return s.id=a.id,s.type=a.type,s.name=a.name,s.info=a.info,s.category=a.category,s.in=[],s.out=[],s.env=a.env,a.in.forEach(function(t){for(var e={x:t.x,y:t.y,wires:[]},o=u.filter(function(e){return e.source===t}),n=0;n<o.length;n++){var a=o[n];"subflow"!=a.target.type&&e.wires.push({id:a.target.id})}s.in.push(e)}),a.out.forEach(function(t,e){var o={x:t.x,y:t.y,wires:[]},n=u.filter(function(e){return e.target===t});for(i=0;i<n.length;i++)"subflow"!=n[i].source.type?o.wires.push({id:n[i].source.id,port:n[i].sourcePort}):o.wires.push({id:a.id,port:0});s.out.push(o)}),0<s.in.length&&a.inputLabels&&!/^\s*$/.test(a.inputLabels.join(""))&&(s.inputLabels=a.inputLabels.slice()),0<s.out.length&&a.outputLabels&&!/^\s*$/.test(a.outputLabels.join(""))&&(s.outputLabels=a.outputLabels.slice()),a.icon&&"node-red/subflow.png"!==a.icon&&(s.icon=a.icon),a.status&&(s.status={x:a.status.x,y:a.status.y,wires:[]},u.forEach(function(e){e.target===a.status&&("subflow"!=e.source.type?s.status.wires.push({id:e.source.id,port:e.sourcePort}):s.status.wires.push({id:a.id,port:0}))})),s}function b(e,t,o){var n=[];o=o||{},t=t||{};for(var a=0;a<e.length;a++){var i=e[a];if("subflow:"==i.type.substring(0,8)){var s=i.type.substring(8);if(!t[s]){t[s]=!0;var r=[ne(s)];RED.nodes.eachNode(function(e){e.z==s&&r.push(e)}),n=b(r,t,o).concat(n)}}if("subflow"!=i.type){var l=RED.nodes.convertNode(i);for(var d in i._def.defaults)if(i._def.defaults[d].type&&i[d]in H){var c=H[i[d]],p=X.getNodeType(i._def.defaults[d].type).exportable;null==p||p?i[d]in o||(o[i[d]]=!0,e.push(c)):l[d]=""}n.push(l)}else{var u=v(i);n.push(u)}}return n}function ie(s,r){var l;r=r||[];var d=null;return RED.nodes.eachSubflow(function(e){if(e.name==s.name&&e.info==s.info&&e.in.length==s.in.length&&e.out.length==s.out.length){var t=RED.nodes.filterNodes({z:e.id});if(t.length==r.length){var o=[s].concat(r),n=[e].concat(t),a=JSON.stringify(o),i=JSON.stringify(b(n));for(l=0;l<t.length;l++)a=a.replace(new RegExp('"'+r[l].id+'"',"g"),'"'+t[l].id+'"');if((a=a.replace(new RegExp('"'+s.id+'"',"g"),'"'+e.id+'"'))===i)return d=e,!1}}}),d}function se(e,t,o){if(o&&e.id!=t.id)return!1;if(e.type!=t.type)return!1;var n=e._def;for(var a in n.defaults)if(n.defaults.hasOwnProperty(a)){var i=e[a],s=t[a];if(typeof i!=typeof s)return!1;if(null===i||"string"==typeof i||"number"==typeof i){if(i!==s)return!1}else if(JSON.stringify(i)!==JSON.stringify(s))return!1}return!0}function c(e,t,o){var n,a,i,s={};if("string"==typeof e){if(""===e)return;try{i=JSON.parse(e)}catch(g){var r=new Error(RED._("clipboard.invalidFlow",{message:g.message}));throw r.code="NODE_RED",r}}else i=e;$.isArray(i)||(i=[i]);var l={};i=i.filter(function(e){return!l[e.id]&&(l[e.id]=!0)});var d=!1;K||(d=!0,K=JSON.parse(JSON.stringify(i)));var c=[];for(n=0;n<i.length;n++)"workspace"==(a=i[n]).type||"tab"==a.type||"subflow"==a.type||X.getNodeType(a.type)||"subflow:"==a.type.substring(0,8)||-1!=c.indexOf(a.type)||c.push(a.type),a.z&&(s[a.z]=s[a.z]||[],s[a.z].push(a));if(!d&&0<c.length){var p="<ul><li>"+c.join("</li><li>")+"</li></ul>";RED.notify("<p>"+RED._("clipboard.importUnrecognised",{count:c.length})+"</p>"+p,"error",!1,1e4)}var u=RED.workspaces.active(),f=ne(u);for(n=0;n<i.length;n++){var h=/^subflow:(.+)$/.exec(i[n].type);if(h){var g,v=h[1],b=ne(i[n].z||u);if(b)if(v===b.id&&(g=new Error(RED._("notification.errors.cannotAddSubflowToItself"))),ae(v,b.id)&&(g=new Error(RED._("notification.errors.cannotAddCircularReference"))),g)throw g.code="NODE_RED",g}}var m,y,w,D,E=[],R={},x=[],k={},T={},_={},j=[],C=[],S=null;for(n=0;n<i.length;n++)if("workspace"===(a=i[n]).type||"tab"===a.type)"workspace"===a.type&&(a.type="tab"),null==W&&(W=a),t&&(m=Q(),R[a.id]=m,a.id=m),te(a),RED.workspaces.add(a),E.push(a);else if("subflow"===a.type){var O=ie(a,s[a.id]);O?T[a.id]=O:(k[a.id]=a,t&&(m=Q(),a.id=m),a.in.forEach(function(e,t){e.type="subflow",e.direction="in",e.z=a.id,e.i=t,e.id=Q()}),a.out.forEach(function(e,t){e.type="subflow",e.direction="out",e.z=a.id,e.i=t,e.id=Q()}),a.status&&(a.status.type="subflow",a.status.direction="status",a.status.z=a.id,a.status.id=Q()),x.push(a),oe(a,t))}for(null==W&&(te(W={type:"tab",id:Q(),disabled:!1,info:"",label:RED._("workspace.defaultName",{number:1})}),RED.workspaces.add(W),E.push(W),u=RED.workspaces.active()),n=0;n<i.length;n++)if(a=i[n],(y=X.getNodeType(a.type))&&"config"==y.category){var L=null;if(t){if(a.z){if(T[a.z])continue;k[a.z]?a.z=k[a.z].id:(a.z=R[a.z],Y[a.z]||(o?(null===S&&(S=RED.workspaces.add(null,!0),E.push(S)),a.z=S.id):a.z=u))}if((L=RED.nodes.node(a.id))&&a.z&&L.z!==a.z)for(var P in L=null,H)if(H.hasOwnProperty(P)&&H[P].z===a.z&&se(H[P],a,!1)){L=H[P],_[a.id]=H[P];break}}if(!L||L._def.exclusive){for(D in w={id:a.id,z:a.z,type:a.type,info:a.info,users:[],_config:{}},y.defaults)y.defaults.hasOwnProperty(D)&&(w[D]=a[D],w._config[D]=JSON.stringify(a[D]));i