UNPKG

node-red

Version:

A visual tool for wiring the Internet of Things

16 lines 481 kB
/** * 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. **/ var RED={};RED.events=function(){var i={};return{on:function(e,t){i[e]=i[e]||[],i[e].push(t)},off:function(e,t){var n=i[e];if(n)for(var o=0;o<n.length;o++)if(n[o]===t)return void n.splice(o,1)},emit:function(t,e){if(i[t])for(var n=0;n<i[t].length;n++)try{i[t][n](e)}catch(e){console.log("RED.events.emit error: ["+t+"] "+e.toString()),console.log(e)}}}}(),RED.i18n={init:function(e){i18n.init({resGetPath:"locales/__ns__?lng=__lng__",dynamicLoad:!1,load:"current",ns:{namespaces:["editor","node-red","jsonata","infotips"],defaultNs:"editor"},fallbackLng:["en-US"],useCookie:!1},function(){e()}),RED._=function(){return i18n.t.apply(null,arguments)}},loadCatalog:function(n,o){var e=i18n.functions.toLanguages(i18n.detectLanguage()),i=e.length;e.forEach(function(t){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"locales/"+n+"?lng="+t,success:function(e){i18n.addResourceBundle(t,n,e),0==--i&&o()}})})},loadNodeCatalogs:function(e){var t=i18n.functions.toLanguages(i18n.detectLanguage()),o=t.length;t.forEach(function(n){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"locales/nodes?lng="+n,success:function(t){Object.keys(t).forEach(function(e){i18n.addResourceBundle(n,e,t[e])}),0==--o&&e()}})})}},RED.settings=function(){var e,n={},o={},i=function(){try{return"localStorage"in window&&null!==window.localStorage}catch(e){return!1}},a=function(o){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings",success:function(e){!function(e){for(var t in n)n.hasOwnProperty(t)&&RED.settings.hasOwnProperty(t)&&delete RED.settings[t];for(t in e)e.hasOwnProperty(t)&&(RED.settings[t]=e[t]);n=e}(e),RED.settings.user&&!RED.settings.user.anonymous||RED.settings.remove("auth-tokens"),console.log("Node-RED: "+e.version),t(o)},error:function(e,t,n){401===e.status?(/[?&]access_token=(.*?)(?:$|&)/.test(window.location.search)&&(window.location.search=""),RED.user.login(function(){a(o)})):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){o=e,t()},error:function(e,t,n){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(o),success:function(e){},error:function(e,t,n){console.log("Unexpected error saving user settings:",e.status,t)}})},300))}return{init:function(e){var t=/[?&]access_token=(.*?)(?:$|&)/.exec(window.location.search);if(t){var n=t[1];RED.settings.set("auth-tokens",{access_token:n}),window.location.search=""}$.ajaxSetup({beforeSend:function(e,t){if(!/^\s*(https?:|\/|\.)/.test(t.url)){var n=RED.settings.get("auth-tokens");n&&e.setRequestHeader("Authorization","Bearer "+n.access_token),e.setRequestHeader("Node-RED-API-Version","v2")}}}),a(e)},load:a,loadUserSettings:t,set:function(e,t){i()&&("auth-tokens"===e?localStorage.setItem(e,JSON.stringify(t)):(o[e]=t,s()))},get:function(e){if(i())return"auth-tokens"===e?JSON.parse(localStorage.getItem(e)):o[e]},remove:function(e){i()&&("auth-tokens"===e?localStorage.removeItem(e):(delete o[e],s()))},theme:function(e,t){if(!RED.settings.editorTheme)return t;var n=e.split("."),o=RED.settings.editorTheme;try{for(var i=0;i<n.length;i++)o=o[n[i]];return void 0===o?t:o}catch(e){return t}}}}(),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 i=/^((.+)\.)?read$/,a=/^((.+)\.)?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(d,l){"function"==typeof d&&(l=d,d={});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:!!d.cancelable,width:600,resizable:!1,draggable:!1}),$("#node-dialog-login-fields").empty(),$.ajax({dataType:"json",url:"auth/login",success:function(i){var e=0;if("credentials"==i.type){for(;e<i.prompts.length;e++){var t=i.prompts[e],n=$("<div/>",{class:"form-row"});$('<label for="node-dialog-login-'+t.id+'">'+RED._(t.label)+":</label><br/>").appendTo(n);var o=$('<input style="width: 100%" id="node-dialog-login-'+t.id+'" type="'+t.type+'" tabIndex="'+(e+1)+'"/>').appendTo(n);e<i.prompts.length-1&&o.keypress(function(){var t=n;return function(e){13==e.keyCode&&(t.next("div").find("input").focus(),e.preventDefault())}}()),n.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"/>'+(d.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:""},n=0;n<i.prompts.length;n++){var o=i.prompts[n];t[o.id]=$("#node-dialog-login-"+o.id).val()}$.ajax({url:"auth/token",type:"POST",data:t}).done(function(e,t,n){RED.settings.set("auth-tokens",e),$("#node-dialog-login").dialog("destroy").remove(),d.updateMenu&&p(),l()}).fail(function(e,t,n){RED.settings.remove("auth-tokens"),$("#node-dialog-login-failed").show()}).always(function(){$("#node-dialog-login-submit").button("option","disabled",!1),$(".login-spinner").hide()}),e.preventDefault()})}else if("strategy"==i.type)for(e=0;e<i.prompts.length;e++){t=i.prompts[e],n=$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields");var a=$('<a href="#"></a>',{style:"padding: 10px"}).appendTo(n).click(function(){document.location=t.url});if(t.image)$("<img>",{src:t.image}).appendTo(a);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(a),s.css({verticalAlign:"middle",marginLeft:"8px"})),s.appendTo(a)}a.button()}d.cancelable&&$("#node-dialog-login-cancel").button().click(function(e){$("#node-dialog-login").dialog("destroy").remove()});var r=i.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,n){RED.settings.remove("auth-tokens"),e&&e.redirect?document.location.href=e.redirect:document.location.reload(!0)}).fail(function(e,t,n){401===e.status?document.location.reload(!0):console.log(t)})},hasPermission:function(e){return""===e||!RED.settings.user||function e(t,n){if(""===n)return!0;var o;if(Array.isArray(n)){for(o=0;o<n.length;o++)if(!e(t,n[o]))return!1;return!0}if(Array.isArray(t)){if(0===t.length)return!1;for(o=0;o<t.length;o++)if(e(t[o],n))return!0;return!1}return"*"===t||t===n||("read"===t||"*.read"===t?i.test(n):("write"===t||"*.write"===t)&&a.test(n))}(RED.settings.user.permissions||"",e)}}}(),RED.comms=function(){var o,i=null,a=null,s=null,l=10,c={},p=!1,u=0,f=!1;return{connect:function r(){f=!0;var e=location.hostname,t=location.port;0!==t.length&&(e=e+":"+t),e=(e+=document.location.pathname)+("/"==e.slice(-1)?"":"/")+"comms",e="ws"+("https:"==document.location.protocol?"s":"")+"://"+e;var n=RED.settings.get("auth-tokens");function d(){for(var e in c)c.hasOwnProperty(e)&&o.send(JSON.stringify({subscribe:e}))}p=null!=n,(o=new WebSocket(e)).onopen=function(){u=0,i&&(a=setTimeout(function(){i.close(),i=null},1e3)),p?o.send(JSON.stringify({auth:n.access_token})):d()},o.onmessage=function(e){for(var t=JSON.parse(e.data),n=0;n<t.length;n++){var o=t[n];if(p&&o.auth)"ok"===o.auth?(p=!1,d()):"fail"===o.auth&&(f=!1,RED.user.login({updateMenu:!0},function(){r()}));else if(o.topic)for(var i in c)if(c.hasOwnProperty(i)&&new RegExp("^"+i.replace(/([\[\]\?\(\)\\\\$\^\*\.|])/g,"\\$1").replace(/\+/g,"[^/]+").replace(/\/#$/,"(/.*)?")+"$").test(o.topic)){var a=c[i];if(a)for(var s=0;s<a.length;s++)a[s](o.topic,o.data)}}},o.onclose=function(){f&&(a&&(clearTimeout(a),a=null),++u<10?(setTimeout(r,1e3),5<u&&null==i&&(i=RED.notify(RED._("notification.errors.lostConnection"),"error",!0))):u<20?setTimeout(r,2e3):(l=60,s=setInterval(function(){if(0==--l)i.update(RED._("notification.errors.lostConnection")),clearInterval(s),r();else{var e=RED._("notification.errors.lostConnectionReconnect",{time:l})+' <a href="#">'+RED._("notification.errors.lostConnectionTry")+"</a>";i.update(e),$(i).find("a").click(function(e){e.preventDefault(),i.update(RED._("notification.errors.lostConnection")),clearInterval(s),r()})}},1e3)))}},subscribe:function(e,t){null==c[e]&&(c[e]=[]),c[e].push(t),o&&1==o.readyState&&o.send(JSON.stringify({subscribe:e}))},unsubscribe:function(e,t){if(c[e]){for(var n=0;n<c[e].length;n++)if(c[e][n]===t){c[e].splice(n,1);break}0===c[e].length&&delete c[e]}}}}(),RED.text={},RED.text.bidi=function(){var t="";function n(e){return"auto"==t?function(e){for(var t,n,o=e.length,i=0;i<o;i++){if(1488<=(n=e.charCodeAt(i))&&n<=1535||1536<=n&&n<=1631||1642<=n&&n<=1775||1786<=n&&n<=2047||64285<=n&&n<=65023||65136<=n&&n<=65276)return!0;if(64<(t=e.charCodeAt(i))&&t<91||96<t&&t<123)return!1}return!1}(e)?"rtl":"ltr":t}function o(){$(this).attr("dir",n($(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",n($(this).html()))}),$("#sidebar").find("span.bidiAware").each(function(){$(this).attr("dir",n($(this).text()))})},enforceTextDirectionWithUCC:function(e){if(e){var t=n(e);if("ltr"==t)return"‪"+e+"‬";if("rtl"==t)return"‫"+e+"‬"}return e},resolveBaseTextDir:n,prepareInput:function(e){e.on("keyup",o).on("paste",o).on("cut",o),o.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])},d=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 n=parseInt(e.length,10);return isNaN(n)?e.useLength=!1:e.useLength=!0,e.loops=void 0===e.loops||!!e.loops,!0}function u(e,t){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);var i=e.content,a=n.usePos&&n.startPos<i.length;a&&(n.start="",n.loops=!1),n.bStart=a?n.startPos:0<n.start.length?i.indexOf(n.start):0;var s=n.useLength&&0<n.length&&n.bStart+n.length<i.length;return s&&(n.end=""),n.bEnd=s?n.bStart+n.length:0<n.end.length?i.indexOf(n.end,n.bStart+n.start.length)+1:i.length,n.after||(n.start=""),n.before||(n.end=""),n}return{handleSubcontents:function(e,t,n,o,i){if(!n.content||"string"!=typeof n.content||0===n.content.length)return e;var a=!0;void 0!==n.loops&&(a=!!n.loops);for(var s=0;!(s>=e.length);s++)if(!(e[s].isParsed||e.keep||e[s].isSeparator)){var r=e[s].content,d=r.indexOf(n.content);if(!(d<0)){var l,c=0;if(n.continued)for(;c++,0===(l=r.indexOf(n.content,d+c*n.content.length)););else c=1;if(l=d+c*n.content.length,e.splice(s,1),0<d&&(e.splice(s,0,new f({content:r.substring(0,d),localGui:t.dir,keep:!0})),s++),e.splice(s,0,new f({content:r.substring(d,l),textDirection:n.subDir,localGui:t.dir})),l<r.length&&e.splice(s+1,0,new f({content:r.substring(l,r.length),localGui:t.dir,keep:!0})),!a)break}}},handleBounds:function(e,t,n,o,i){for(var a=0;a<n.length;a++)if(p(n[a]))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],n[a]),d=r.bStart,l=r.bEnd;if(!(d<0||l<0)){var c=e[s].content;if(e.splice(s,1),0<d&&(e.splice(s,0,new f({content:c.substring(0,d),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(d+r.start.length,l-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}))),l+r.end.length<c.length&&e.splice(s+1,0,new f({content:c.substring(l+r.end.length,c.length),localGui:t.dir,keep:!0})),!r.loops)break}}for(a=0;a<e.length;a++)e[a].inBounds=!1;return e},handleCases:function(e,t,n,o,i){if(0===n.length)return e;var a={};for(var s in t)t.hasOwnProperty(s)&&(a[s]=t[s]);for(var r=0;r<n.length;r++)n[r].handler&&"function"==typeof n[r].handler.handle||(n[r].handler=t.commonHandler),n[r].args?(a.cases=n[r].args.cases,a.points=n[r].args.points,a.bounds=n[r].args.bounds,a.subs=n[r].args.subs):(a.cases=[],a.points=[],a.bounds=[],a.subs={}),n[r].handler.handle(o,e,a,i);return e},handlePoints:function(e,t,n,o,i){for(var a=0;a<n.length;a++)for(var s=0;!(s>=e.length);s++)if(!(e[s].isParsed||e[s].keep||e[s].isSeparator)){var r=e[s].content,d=r.indexOf(n[a]);0<=d&&(e.splice(s,1),0<d&&(e.splice(s,0,new f({content:r.substring(0,d),textDirection:t.subDir,localGui:t.dir,inPoints:!0})),s++),e.splice(s,0,new f({content:n[a],localGui:t.dir,isSeparator:!0})),d+n[a].length+1<=r.length&&e.splice(s+1,0,new f({content:r.substring(d+n[a].length),textDirection:t.subDir,localGui:t.dir,inPoints:!0})))}for(a=0;a<e.length;a++)e[a].keep?e[a].keep=!1:e[a].inPoints&&(e[a].isParsed=!0,e[a].inPoints=!1);return e}}}(),r={handle:function(e,t,n,o){var i=[];Array.isArray(n.cases)&&(i=n.cases);var a=[];void 0!==n.points&&(Array.isArray(n.points)?a=n.points:"string"==typeof n.points&&(a=n.points.split("")));var s={};"object"==typeof n.subs&&(s=n.subs);var r=[];return Array.isArray(n.bounds)&&(r=n.bounds),d.handleBounds(t,n,r,e,o),d.handleSubcontents(t,n,s,e,o),d.handleCases(t,n,i,e,o),d.handlePoints(t,n,a,e,o),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(),!(n=(t=e)?t.split("-")[0]:"")||n.length<2||!["iw","he","ar","fa","ur"].some(function(e){return e===n}))return{lang:"not-bidi"};var t,n,o=e.split("-");return{lang:o[0],country:o[1]?o[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,n,o){if("auto"!==t&&/^(rtl|ltr)$/i.test(t))return t;n=/^(rtl|ltr)$/i.test(n)?n:"ltr";var i=o?e.split("").reverse().join(""):e,a=/[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(i);return a?a[0]<="z"?"ltr":"rtl":n},hasArabicChar:function(e){return!!/[\u0600-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(e)},showMarks:function(e,t){for(var n="",o=0;o<e.length;o++){var i=""+e.charAt(o);switch(i){case"‎":n+="<LRM>";break;case"‏":n+="<RLM>";break;case"‪":n+="<LRE>";break;case"‫":n+="<RLE>";break;case"‭":n+="<LRO>";break;case"‮":n+="<RLO>";break;case"‬":n+="<PDF>";break;default:n+=i}}var a=void 0!==t&&/^(rtl|ltr)$/i.test(t)?"rtl"===t?"‮":"‭":"";return a+n+(""===a?"":"‬")},hideMarks:function(e){return e.replace(/<LRM>/g,this.LRM).replace(/<RLM>/g,this.RLM).replace(/<LRE>/g,this.LRE).replace(/<RLE>/g,this.RLE).replace(/<LRO>/g,this.LRO).replace(/<RLO>/g,this.RLO).replace(/<PDF>/g,this.PDF)},showTags:function(e){return"<xmp>"+e+"</xmp>"},hideTags:function(e){return e.replace(/<xmp>/g,"").replace(/<\/xmp>/g,"")}},l=function(){var e={};function s(e,t){var n=Array.isArray(e)?e[0]:e;return n.guiDir||(n.guiDir="ltr"),n.dir||(n.dir=n.guiDir),t&&(void 0===n.points&&(n.points=[]),n.cases||(n.cases=[]),n.bounds||(n.bounds=[]),n.commonHandler=r),n}function i(e,t,n){if(!e||!t)return new f({content:""});var o=s(t,!0),i=[new f({content:e,actual:e,localGui:o.dir})],a=r.handle;return o.handler&&"function"==typeof o.handler&&(a=o.handler.handle),a(e,i,o,n),i}function a(e,t,n){var o=s(t,!1);return n?function(e,t,n){for(var o="",i="",a=0;a<e.length;a++)if(e[a].isVisible){var s=e[a].textDirection,r=e[a].localGui;if(""!==r&&""===i?o+="<bdi dir='"+("rtl"===r?"rtl":"ltr")+"'>":""===i||""!==r&&r===i&&!stop||(o+="</bdi>"+(a==e.length-1&&""!==r?"":"<span style='unicode-bidi: embed; direction: "+("rtl"===t.dir?"rtl":"ltr")+";'></span>"),""!==r&&(o+="<bdi dir='"+("rtl"===r?"rtl":"ltr")+"'>")),"auto"===s&&(s=p.getDirection(e[a].content,s,t.guiDir)),/^(rtl|ltr)$/i.test(s)?(o+="<bdi dir='"+("rtl"===s?"rtl":"ltr")+"'>"+e[a].content+"</bdi>",s):(o+=e[a].content,p.getDirection(e[a].content,s,t.guiDir,!0)),a<e.length-1){var d=r&&e[a+1].localGui?r:t.dir;o+="<span style='unicode-bidi: embed; direction: "+("rtl"===d?"rtl":"ltr")+";'></span>"}else""!==i&&(o+="</bdi>");i=r,stop=!1}else stop=!0;var l="auto"===t.dir?p.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;l!==t.guiDir&&(o="<bdi dir='"+("rtl"===l?"rtl":"ltr")+"'>"+o+"</bdi>");return o}(e,o):function(e,t,n){for(var o="",i="",a=!1,s=0;s<e.length;s++)if(e[s].isVisible){var r=e[s].textDirection,d=e[s].localGui;if(""!==d&&""===i?o+="rtl"===d?p.RLE:p.LRE:""===i||""!==d&&d===i&&!a||(o+=p.PDF+(s==e.length-1&&""!==d?"":"rtl"===t.dir?p.RLM:p.LRM),""!==d&&(o+="rtl"===d?p.RLE:p.LRE)),"auto"===r&&(r=p.getDirection(e[s].content,r,t.guiDir)),/^(rtl|ltr)$/i.test(r)?(o+=("rtl"===r?p.RLE:p.LRE)+e[s].content+p.PDF,r):(o+=e[s].content,p.getDirection(e[s].content,r,t.guiDir,!0)),s<e.length-1){var l=d&&e[s+1].localGui?d:t.dir;o+="rtl"===l?p.RLM:p.LRM}else""!==i&&(o+=p.PDF);i=d,a=!1}else a=!0;var c="auto"===t.dir?p.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;c!==t.guiDir&&(o=("rtl"===c?p.RLE:p.LRE)+o+p.PDF);return o}(e,o)}return e.parseAndDisplayStructure=function(e,t,n,o){return e&&t?a(i(e,t,o),t,n):e},e.parseStructure=i,e.displayStructure=a,e.restore=function(e,t){return e},e}(),t={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:t.dir?t.dir:n?"rtl":"ltr",subs:{content:">",continued:!0,subDir:n?"rtl":"ltr"},cases:[{args:{subs:{content:"<",continued:!0,subDir:n?"ltr":"rtl"}}}]};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},n={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:","};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},o={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:function(e,t){if("ar"!==p.getLocaleDetails(t).lang)return"ltr";var n=e.indexOf("@");return 0<n&&n<e.length-1&&p.hasArabicChar(e.substring(n+1))?"rtl":"ltr"}(e,i),points:"<>.:,;@",cases:[{handler:r,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"(",endBefore:")"}],points:""}}]};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},i={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:"/\\:."};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},a={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:" /%^&[]<>=!?~:.,|()+-*{}"};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},s={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:"\t!#%&()*+,-./:;<=>?|[]{}",cases:[{handler:r,args:{bounds:[{startAfter:"/*",endBefore:"*/"},{startAfter:"--",end:"\n"},{startAfter:"--"}]}},{handler:r,args:{subs:{content:" ",continued:!0}}},{handler:r,args:{bounds:[{startAfter:"'",endBefore:"'"},{startAfter:'"',endBefore:'"'}]}}]};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},c={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:"_"};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},u={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:":?#/@.[]="};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},h={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:t.dir?t.dir:n?"rtl":"ltr",points:" ,.!?;:"};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},g={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:" /[]<>=!:@.|()+-*",cases:[{handler:r,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"'",endBefore:"'"}],points:""}}]};return a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},v={format:function(e,t,n,o,i,a){var s={},r="",d=Array.isArray(t)?t[0]:t;for(r in d)d.hasOwnProperty(r)&&(s[r]=d[r]);return s.guiDir=n?"rtl":"ltr",s.dir=s.dir?s.dir:s.guiDir,a?l.parseStructure(e,s,!!o,i):l.parseAndDisplayStructure(e,s,!!o,i)}},b=(function(){var e={msgLang:"en",msgDir:"",phLang:"",phDir:"",phPacking:["{","}"],phStt:{type:"none",args:{}},guiDir:""},t=!1;function n(e){return"he"===e||"iw"===e||"ar"===e?"rtl":"ltr"}function o(e){0===e.msgDir.length&&(e.msgDir=n(e.msgLang)),e.msgDir="ltr"!==e.msgDir&&"rtl"!==e.msgDir&&"auto"!=e.msgDir?"ltr":e.msgDir,0===e.guiDir.length&&(e.guiDir=e.msgDir),e.guiDir="rtl"!==e.guiDir?"ltr":"rtl",0===e.phDir.length&&(e.phDir=0===e.phLang.length?e.msgDir:n(e.phLang)),e.phDir="ltr"!==e.phDir&&"rtl"!==e.phDir&&"auto"!=e.phDir?"ltr":e.phDir,"string"==typeof e.phPacking&&(e.phPacking=e.phPacking.split("")),e.phPacking.length<2&&(e.phPacking=["{","}"])}}(),null);function m(e){switch(e){case"breadcrumb":return t;case"comma":return n;case"email":return o;case"filepath":return i;case"formula":return a;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,n,o,i){if(!t||1!=t.nodeType)return!1;b||(b=document.createEvent("Event")).initEvent("TF",!0,!0),t.setAttribute("data-tf-type",e);var a="undefined"===n?"{}":JSON.stringify(Array.isArray(n)?n[0]:n);t.setAttribute("data-tf-args",a);var s="ltr";if("undefined"===o&&(t.dir?s=t.dir:t.style&&t.style.direction&&(s=t.style.direction),o="rtl"===s.toLowerCase()),t.setAttribute("data-tf-dir",o),t.setAttribute("data-tf-locale",p.getLocaleDetails(i).lang),function(e){var t=window.navigator.userAgent;if(0<=t.indexOf("MSIE")||0<=t.indexOf("Trident")||0<=t.indexOf("Edge"))return!1;var n=document.createElement(e.tagName);n.contentEditable=!0;var o="oninput"in n;return o||(n.setAttribute("oninput","return;"),o="function"==typeof n.oninput),n=null,o}(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||"",n=document.getSelection();if(0===t.length||!n||n.rangeCount<=0)e.dispatchEvent(b);else{var o,i,a=n.getRangeAt(0),s=a.cloneRange();o=a.startContainer,i=a.startOffset;var r=0;3===o.nodeType&&(r+=i),s.setStart(e,0),s.setEndBefore(o);var d=document.createElement("div");d.appendChild(s.cloneContents()),r+=d.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 l=e,c=e,p=0,u=!1;for(n.removeAllRanges(),a.setStart(e,0),a.setEnd(e,0);c;){if(3===c.nodeType){if(p+c.nodeValue.length>=r){a.setStart(c,r-p);break}p+=c.nodeValue.length,c=c.nextSibling}else{if(c.hasChildNodes()){c=(l=c).firstChild;continue}c=c.nextSibling}for(;!c;){if(l===e){u=!0;break}c=l.nextSibling,l=l.parentNode}if(u)break}n.addRange(a),e.dispatchEvent(b)}}return{getHtml:function(e,t,n,o,i){return m(t).format(e,n,o,!0,i)},attach:function(e,t,n,o,i){return y(e,t,n,o,i)}}}(),RED.state={DEFAULT:0,MOVING:1,JOINING:2,MOVING_ACTIVE:3,ADDING:4,EDITING:5,EXPORT:6,IMPORT:7,IMPORT_DRAGGING:8,QUICK_JOINING:9,PANNING:10},RED.nodes=function(){var q,W,p=[],H={},u=[],K={},s=[],a={},t=null,o=!1;var X=function(){var i={},a=[],s={},r={},n={},t={};n.tab={defaults:{label:{value:""},disabled:{value:!1},info:{value:""}}};var o={setModulePendingUpdated:function(e,t){i[e].pending_version=t,RED.events.emit("registry:module-updated",{module:e,version:t})},getModule:function(e){return i[e]},getNodeSetForType:function(e){return o.getNodeSet(r[e])},getModuleList:function(){return i},getNodeList:function(){return a},getNodeTypes:function(){return Object.keys(n)},setNodeList:function(e){a=[];for(var t=0;t<e.length;t++){var n=e[t];o.addNodeSet(n)}},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;a.push(e),i[e.module]=i[e.module]||{name:e.module,version:e.version,local:e.local,sets:{}},e.pending_version&&(i[e.module].pending_version=e.pending_version),i[e.module].sets[e.name]=e,RED.events.emit("registry:node-set-added",e)},removeNodeSet:function(e){for(var t=s[e],n=0;n<t.types.length;n++)delete r[t.types[n]];delete s[e];for(var o=0;o<a.length;o++)if(a[o].id===e){a.splice(o,1);break}return delete i[t.module].sets[t.name],0===Object.keys(i[t.module].sets).length&&delete i[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 o;"subflow:"!=((n[e]=t).type=e).substring(0,8)&&(t.set=s[r[e]],s[r[e]].added=!0,s[r[e]].enabled=!0,o="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]=o+":"+e[0]);var n=RED._.apply(null,e);return n===e[0]&&(n=t),n});RED.events.emit("registry:node-type-added",e)},removeNodeType:function(e){if("subflow:"!=e.substring(0,8))throw new Error("this api is subflow only. called with:",e);delete n[e],RED.events.emit("registry:node-type-removed",e)},getNodeType:function(e){return n[e]},setIconSets:function(e){t=e},getIconSets:function(){return t}};return o}();function Y(){return(1+4294967295*Math.random()).toString(16)}function Q(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,l(e),"subflows"==e._def.category&&void 0===e.i){var n=0;RED.nodes.eachNode(function(e){n=Math.max(n,e.i||0)}),e.i=n+1}p.push(e)}RED.events.emit("nodes:add",e)}function Z(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=[],i=[];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 a=!1;for(var s in t._def.defaults)if(t._def.defaults.hasOwnProperty(s)){var r=t._def.defaults[s];if(r.type){var d=X.getNodeType(r.type);if(d&&"config"==d.category){var l=H[t[s]];if(l)if(a=!0,l._def.exclusive)h(t[s]),i.push(l);else{var c=l.users;c.splice(c.indexOf(t),1)}}}}a&&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 ee(e){(K[e.id]=e)._def=RED.nodes.getType("tab"),s.push(e.id)}function te(t,e){if(e){var n=Object.keys(a).map(function(e){return a[e].name});n.sort();var o=1,i=t.name;n.forEach(function(e){i==e&&(o++,i=t.name+" ("+o+")")}),t.name=i}a[t.id]=t,RED.nodes.registerType("subflow:"+t.id,{defaults:{name:{value:""}},info:t.info,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},set:{module:"node-red"}}),t._def=RED.nodes.getType("subflow:"+t.id)}function ne(e){return a[e]}function oe(e,t){for(var n=0;n<p.length;n++){var o=p[n];if(o.z===e){var i=/^subflow:(.+)$/.exec(o.type);if(i){if(i[1]===t)return!0;if(oe(i[1],t))return!0}}}return!1}function g(e){var t={};for(var n in t.id=e.id,t.type=e.type,e._def.defaults)e._def.defaults.hasOwnProperty(n)&&(t[n]=e[n]);return t}function r(t,e){if("tab"===t.type)return g(t);e=e||!1;var n={};if(n.id=t.id,n.type=t.type,n.z=t.z,"unknown"==n.type)for(var o in t._orig)t._orig.hasOwnProperty(o)&&(n[o]=t._orig[o]);else{for(var i in t._def.defaults)t._def.defaults.hasOwnProperty(i)&&(n[i]=t[i]);if(e&&t.credentials){var a={};for(var s in n.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])&&(a[s]=t.credentials[s]):null==t.credentials[s]||t.credentials._&&t.credentials[s]==t.credentials._[s]||(a[s]=t.credentials[s]));0<Object.keys(a).length&&(n.credentials=a)}}if("config"!=t._def.category){n.x=t.x,n.y=t.y,n.wires=[];for(var r=0;r<t.outputs;r++)n.wires.push([]);for(var d=u.filter(function(e){return e.source===t}),l=0;l<d.length;l++){var c=d[l];"subflow"!=c.target.type&&c.sourcePort<n.wires.length&&n.wires[c.sourcePort].push(c.target.id)}if(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){var p=RED.utils.getDefaultNodeIcon(t._def,t);t.icon!==p.module+"/"+p.file&&(n.icon=t.icon)}}return n}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=[],a.in.forEach(function(t){for(var e={x:t.x,y:t.y,wires:[]},n=u.filter(function(e){return e.source===t}),o=0;o<n.length;o++){var i=n[o];"subflow"!=i.target.type&&e.wires.push({id:i.target.id})}s.in.push(e)}),a.out.forEach(function(t,e){var n={x:t.x,y:t.y,wires:[]},o=u.filter(function(e){return e.target===t});for(i=0;i<o.length;i++)"subflow"!=o[i].source.type?n.wires.push({id:o[i].source.id,port:o[i].sourcePort}):n.wires.push({id:a.id,port:0});s.out.push(n)}),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),s}function b(e,t,n){var o=[];n=n||{},t=t||{};for(var i=0;i<e.length;i++){var a=e[i];if("subflow:"==a.type.substring(0,8)){var s=a.type.substring(8);if(!t[s]){t[s]=!0;var r=[ne(s)];RED.nodes.eachNode(function(e){e.z==s&&r.push(e)}),o=b(r,t,n).concat(o)}}if("subflow"!=a.type){var d=RED.nodes.convertNode(a);for(var l in a._def.defaults)if(a._def.defaults[l].type&&a[l]in H){var c=H[a[l]],p=X.getNodeType(a._def.defaults[l].type).exportable;null==p||p?a[l]in n||(n[a[l]]=!0,e.push(c)):d[l]=""}o.push(d)}else{var u=v(a);o.push(u)}}return o}function ie(s,r){var d,l=null;try{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 n=[s].concat(r),o=[e].concat(t),i=JSON.stringify(n),a=JSON.stringify(b(o));for(d=0;d<t.length;d++)i=i.replace(new RegExp('"'+r[d].id+'"',"g"),'"'+t[d].id+'"');if((i=i.replace(new RegExp('"'+s.id+'"',"g"),'"'+e.id+'"'))===a)throw l=e,new Error}}})}catch(e){console.log(e.stack)}return l}function ae(e,t,n){if(n&&e.id!=t.id)return!1;if(e.type!=t.type)return!1;var o=e._def;for(var i in o.defaults)if(o.defaults.hasOwnProperty(i)){var a=e[i],s=t[i];if(typeof a!=typeof s)return!1;if(null===a||"string"==typeof a||"number"==typeof a){if(a!==s)return!1}else if(JSON.stringify(a)!==JSON.stringify(s))return!1}return!0}function d(e,t,n){var o,i,a,s={};if("string"==typeof e){if(""===e)return;try{a=JSON.parse(e)}catch(h){var r=new Error(RED._("clipboard.invalidFlow",{message:h.message}));throw r.code="NODE_RED",r}}else a=e;$.isArray(a)||(a=[a]);var d=!1;W||(d=!0,W=JSON.parse(JSON.stringify(a)));var l=[];for(o=0;o<a.length;o++)"workspace"==(i=a[o]).type||"tab"==i.type||"subflow"==i.type||X.getNodeType(i.type)||"subflow:"==i.type.substring(0,8)||-1!=l.indexOf(i.type)||l.push(i.type),i.z&&(s[i.z]=s[i.z]||[],s[i.z].push(i));if(!d&&0<l.length){var c="<ul><li>"+l.join("</li><li>")+"</li></ul>";l.length;RED.notify("<p>"+RED._("clipboard.importUnrecognised",{count:l.length})+"</p>"+c,"error",!1,1e4)}var p=RED.workspaces.active(),u=ne(p);for(o=0;o<a.length;o++){var f=/^subflow:(.+)$/.exec(a[o].type);if(f){var h,g=f[1],v=ne(a[o].z||p);if(v)if(g===v.id&&(h=new Error(RED._("notification.errors.cannotAddSubflowToItself"))),oe(g,v.id)&&(h=new Error(RED._("notification.errors.cannotAddCircularReference"))),h)throw h.code="NODE_RED",h}}var b,m,y,w,D=[],E={},R=[],x={},T={},_={},k=[],j=[],C=null;for(o=0;o<a.length;o++)if("workspace"===(i=a[o]).type||"tab"===i.type)"workspace"===i.type&&(i.type="tab"),null==q&&(q=i),t&&(b=Y(),E[i.id]=b,i.id=b),ee(i),RED.workspaces.add(i),D.push(i);else if("subflow"===i.type){var S=ie(i,s[i.id]);S?T[i.id]=S:(x[i.id]=i,t&&(b=Y(),i.id=b),i.in.forEach(function(e,t){e.type="subflow",e.direction="in",e.z=i.id,e.i=t,e.id=Y()}),i.out.forEach(function(e,t){e.type="subflow",e.direction="out",e.z=i.id,e.i=t,e.id=Y()}),R.push(i),te(i,t))}for(null==q&&(ee(q={type:"tab",id:Y(),disabled:!1,info:"",label:RED._("workspace.defaultName",{number:1})}),RED.workspaces.add(q),D.push(q),p=RED.workspaces.active()),o=0;o<a.length;o++)if(i=a[o],(m=X.getNodeType(i.type))&&"config"==m.category){var O=null;if(t){if(i.z){if(T[i.z])continue;x[i.z]?i.z=x[i.z].id:(i.z=E[i.z],K[i.z]||(i.z=n?(null===C&&(C=RED.workspaces.add(null,!0),D.push(C)),C.id):p))}if((O=RED.nodes.node(i.id))&&i.z&&O.z!==i.z)for(var L in O=null,H)if(H.hasOwnProperty(L)&&H[L].z===i.z&&ae(H[L],i,!1)){O=H[L],_[i.id]=H[L];break}}if(!O||O._def.exclusive){for(w in y={id:i.id,z:i.z,type:i.type,users:[],_config:{}},m.defaults)m.defaults.hasOwnProperty(w)&&(y[w]=i[w],y._config[w]=JSON.stringify(i[w]));if(m.hasOwnProperty("credentials")&&i.hasOwnProperty("credentials"))for(w in y.credentials={},m.credentials)m.credentials.hasOwnProperty(w)&&i.credentials.hasOwnProperty(w)&&(y.credentials[w]=i.credentials[w]);y.label=m.label,y._def=m,t&&(y.id=Y()),_[i.id]=y,k.push(y),RED.nodes.add(y)}}for(o=0;o<a.length;o++)if("workspace"!==(i=a[o]).type&&"tab"!==i.type&&"subflow"!==i.type&&(!(m=X.getNodeType(i.type))||"config"!=m.category)){var P={x:i.x,y:i.y,z:i.z,type:0,wires:i.wires,inputLabels:i.inputLabels,outputLabels:i.outputLabels,icon:i.icon,changed:!1,_config:{}};if(t){if(T[i.z])continue;x[P.z]?P.z=x[P.z].id:(P.z=E[P.z],K[P.z]||(P.z=n?(null===C&&(C=RED.workspaces.add(null,!0),D.push(C)),C.id):p)),P.id=Y()}else P.id=i.id,null!=P.z&&(K[P.z]||x[P.z])||(P.z=n?(null===C&&(C=RED.workspaces.add(null,!0),D.push(C)),C.id):p);if(P.type=i.type,P._def=m,"subflow"===i.type.substring(0,7)){var N=i.type.split(":")[1],I=T[N]||x[N]||ne(N);t&&(N=I.id,P.type="subflow:"+N,P._def=X.getNodeType(P.type),delete P.i),P.name=i.name,P.outputs=I.out.length,P.inputs=I.in.length}else{if(!P._def){P.x&&P.y?P._def={color:"#fee",defaults:{},label:"unknown: "+i.type,labelStyle:"node_label_italic",outputs:i.outputs||i.wires.length,set:X.getNodeSet("node-red/unknown")}:(P._def={category:"config",set:X.getNodeSet("node-red/unknown")},P.users=[],delete P.x,delete P.y,delete P.wires,delete P.inputLabels,delete P.outputLabels);var A={};for(var z in i)i.hasOwnProperty(z)&&"x"!=z&&"y"!=z&&"z"!=z&&"id"!=z&&"wires"!=z&&(A[z]=i[z]);P._orig=A,P.name=i.type,P.type="unknown"}if("config"!=P._def.category){for(w in i.hasOwnProperty("inputs")?(P.inputs=i.inputs,P._config.inputs=JSON.stringify(i.inputs)):P.inputs=P._def.inputs,i.hasOwnProperty("outputs")?(P.outputs=i.outputs,P._config.outputs=JSON.stringify(i.outputs)):P.outputs=P._def.outputs,P.hasOwnProperty("wires")&&P.wires.length>P.outputs&&(P._def.defaults.hasOwnProperty("outputs")&&isNaN(parseInt(i.outputs))?P.outputs=P.wires.length:(console.log("Warning: node.wires longer than node.outputs - trimming wires:",P.id," wires:",P.wires.length," outputs:",P.outputs),P.wires=P.wires.slice(0,P.outputs))),P._def.defaults)P._def.defaults.hasOwnProperty(w)&&"inputs"!==w&&"outputs"!==w&&(P[w]=i[w],P._config[w]=JSON.stringify(i[w]));if(P._config.x=P.x,P._config.y=P.y,P._def.hasOwnProperty("credentials")&&i.hasOwnProperty("credentials"))for(w in P.credentials={},P._def.credentials)P._def.credentials.hasOwnProperty(w)&&i.credentials.hasOwnProperty(w)&&(P.credentials[w]=i.credentials[w])}}Q(P),RED.editor.validateNode(P),"unknown"!==(_[i.id]=P).type&&"config"===P._def.category||k.push(P)}var M={catch:"scope",status:"scope","link in":"links","link out":"links"};for(o=0;o<k.length;o++){if((i=k[o]).wires){for(var B=0;B<i.wires.length;B++)for(var J=i.wires[B]instanceof Array?i.wires[B]:[i.wires[B]],U=0;U<J.length;U++)if(_.hasOwnProperty(J[U]))if(i.z===_[J[U]].z){var V={source:i,sourcePort:B,target:_[J[U]]};Z(V),j.push(V)}else console.log("Warning: dropping link that crosses tabs:",i.id,"->",_[J[U]].id);delete i.wires}for(var F in i._def.defaults)if(i._def.defaults.hasOwnProperty(F))if(i._def.defaults[F].type&&_[i[F]])i[F]=_[i[F]].id,(y=RED.nodes.node(i[F]))&&-1===y.users.indexOf(i)&&y.users.push(i);else if(M.hasOwnProperty(i.type)&&M[i.type]===F&&void 0!==i[F]&&null!==i[F])for(var G=0;G<i[F].length;G++)_[i[F][G]]&&(i[F][G]=_[i[F][G]].id);u&&/^link /.test(i.type)&&i.links&&(i.links=i.links.filter(function(e){var t=RED.nodes.node(e);return t&&t.z===p})),RED.editor.validateNode(i)}for(o=0;o<R.length;o++)(i=R[o]).in.forEach(function(n){n.wires.forEach(function(e){var t={source:n,sourcePort:0,target:_[e.id]};Z(t),j.push(t)}),delete n.wires}),i.out.forEach(function(n){n.wires.forEach(function(e){var t;Z(t=x[e.id]&&x[e.id].id==i.id?{source:i.in[e.port],sourcePort:e.port,target:n}:{source:_[e.id]||x[e.id],sourcePort:e.port,target:n}),j.push(t)}),delete n.wires});return RED.workspaces.refresh(),[k,j,D,R,C]}function l(e){for(var t in e._def.defaults)if(e._def.defaults.hasOwnProperty(t)){var n=e._def.defaults[t];if(n.type){var o=X.getNodeType(n.type);if(o&&"config"==o.category){var i=H[e[t]];i&&-1===i.users.indexOf(e)&&i.users.push(e)}}}}return{init:function(){RED.events.on("registry:node-type-added",function(t){X.getNodeType(t);var n=[];if(RED.nodes.eachNode(function(e){"unknown"===e.type&&e.name===t&&n.push(e)}),RED.nodes.eachConfig(function(e){"unknown"===e.type&&e.name===t&&n.push(e)}),0<n.length){var o=[];n.forEach(function(e){H.hasOwnProperty(e.id)?delete H[e.id]:p.splice(p.indexOf(e),1),o.push(r(e))}),RED.view.redraw(!0);var e=d(o,!1),i={};e[0].forEach(function(e){i[e.id]=e}),RED.nodes.eachLink(function(e){i.hasOwnProperty(e.source.id)&&(e.source=i[e.source.id]),i.hasOwnProperty(e.target.id)&&(e.target=i[e.target.id])}),RED.view.redraw(!0)}})},registry:X,setNodeList:X.setNodeList,getNodeSet:X.getNodeSet,addNodeSet:X.addNodeSet,removeNodeSet:X.removeNodeSet,enableNodeSet:X.enableNodeSet,disableNodeSet:X.disableNodeSet,setIconSets:X.setIconSets,getIconSets:X.getIconSets,registerType:X.registerNodeType,getType:X.getNodeType,convertNode:r,add:Q,remove:h,clear:function(){p=[],u=[],H={},s=[],Object.keys(a).forEach(function(e){RED.subflow.removeSubflow(e)}),Object.keys(K).forEach(function(e){RED.workspaces.remove(K[e])}),W=q=null,RED.nodes.dirty(!1),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.sidebar.config.refresh(),RED.sidebar.info.refresh()},addLink:Z,removeLink:function(e){var t=u.indexOf(e);-1!=t&&u.splice(t,1)},addWorkspace:ee,removeWorkspace:function(e){delete K[e],s.splice(s.indexOf(e),1);var t,n,o=[],i=[];for(t=0;t<p.length;t++)(n=p[t]).z==e&&o.push(n);for(t in H)H.hasOwnProperty(t)&&(n=H[t]).z==e&&o.push(n);for(t=0;t<o.length;t++){var a=h(o[t].id);i=i.concat(a.links)}return{nodes:o,links:i}},getWorkspaceOrder:function(){return s},setWorkspaceOrder:function(e){s=e},workspace:function(e){return K[e]},addSubflow:te,removeSubflow:function(e){delete a[e.id],X.removeNodeType("subflow:"+e.id)},subflow:ne,subflowContains:oe,eachNode:function(e){for(var t=0;t<p.length;t++)e(p[t])},eachLink:function(e){for(var t=0;t<u.length;t++)e(u[t])},eachConfig:function(e){for(var t in H)H.hasOwnProperty(t)&&e(H[t])},eachSubflow:function(e){for(var t in a)a.hasOwnProperty(t)&&e(a[t])},eachWorkspace:function(e){for(var t=0;t<s.length;t++)e(K[s[t]])},node:f,version:function(e){if(void 0===e)return t;t=e},originalFlow:function(e){if(void 0===e)return W;W=e},filterNodes:function(e){for(var t=[],n=0;n<p.length;n++){var o=p[n];e.hasOwnProperty("z")&&o.z!==e.z||e.hasOwnProperty("type")&&o.type!==e.type||t.push(o)}return t},filterLinks:function(e){for(var t=[],n=0;n<u.length;n++){var o=u[n];if(e.source){if(e.source.hasOwnProperty("id")&&o.source.id!==e.source.id)continue;if(e.source.hasOwnProperty("z")&&o.source.z!==e.source.z)continue}if(e.target){if(e.target.hasOwnProperty("id")&&o.target.id!==e.target.id)continue;if(e.target.hasOwnProperty("z")&&o.target.z!==e.target.z)continue}e.hasOwnProperty("sourcePort")&&o.sourcePort!==e.sourcePort||t.push(o)}return t},import:d,getAllFlowNodes:function(e){var t={};t[e.id]=!0;for(var n=[e],o=[e];0!==o.length;)for(var i=o.shift(),a=u.filter(function(e){return e.source===i||e.target===i}),s=0;s<a.length;s++){var r=a[s].source===i?a[s].target:a[s].source,d=r.id;d||(d=r.direction+":"+r.i),t[d]||(t[d]=!0,n.push(r),o.push(r))}return n},createExportableNodeSet:b,createCompleteNodeSet:function(e){void 0===e&&(e=!0);var t,n=[];for(t=0;t<s.length;t++)"tab"==K[s[t]].type&&n.push(g(K[s[t]]));for(t in a)a.hasOwnProperty(t)&&n.push(v(a[t]));for(t in H)H.hasOwnProperty(t)&&n.push(r(H[t],e));for(t=0;t<p.length;t++){var o=p[t];n.push(r(o,e))}return n},updateConfigNodeUsers:l,id:Y,dirty:function(e){if(null==e)return o;o=e,RED.events.emit("nodes:change",{dirty:o})}}}(),RED.history=function(){var t=[];return{markAllDirty:function(){for(var e=0;e<t.length;e++)t[e].dirty=!0},list:function(){return t},depth:function(){return t.length},push:function(e){t.push(e)},pop:function(){!function e(t){var n,o,i,a={};if(t){if("multi"==t.t)for(n=t.events.length-1;0<=n;n--)e(t.events[n]);else if("replace"==t.t)RED.nodes.clear(),RED.nodes.import(t.config)[0].forEach(function(e){t.changed[e.id]&&(e.changed=!0)}),RED.nodes.version(t.rev);else if("add"==t.t){if(t.nodes)for(n=0;n<t.nodes.length;n++)(o=RED.nodes.node(t.nodes[n])).z&&(a[o.z]=!0),RED.nodes.remove(t.nodes[n]);if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.removeLink(t.links[n]);if(t.workspaces)for(n=0;n<t.workspaces.length;n++)RED.nodes.removeWorkspace(t.workspaces[n].id),RED.workspaces.remove(t.workspaces[n]);if(t.subflows)for(n=0;n<t.subflows.length;n++)RED.nodes.removeSubflow(t.subflows[n]),RED.workspaces.remove(t.subflows[n]);if(t.subflow&&(t.subflow.instances&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),t.subflow.hasOwnProperty("changed")&&(i=RED.nodes.subflow(t.subflow.id))&&(i.changed=t.subflow.changed)),t.removedLinks)for(n=0;n<t.removedLinks.length;n++)RED.nodes.addLink(t.removedLinks[n])}else if("delete"==t.t){if(t.workspaces)for(n=0;n<t.workspaces.length;n++)RED.nodes.addWorkspace(t.workspaces[n]),RED.workspaces.add(t.workspaces[n]);if(t.subflow&&t.subflow.subflow&&RED.nodes.addSubflow(t.subflow.subflow),t.subflowInputs&&0<t.subflowInputs.length&&((i=RED.nodes.subflow(t.subflowInputs[0].z)).in.push(t.subflowInputs[0]),i.in[0].dirty=!0),t.subflowOutputs&&0<t.subflowOutputs.length)for(i=RED.nodes.subflow(t.subflowOutputs[0].z),t.subflowOutputs.sort(function(e,t){return e.i-t.i}),n=0;n<t.subflowOutputs.length;n++){var s=t.subflowOutputs[n];i.out.splice(s.i,0,s);for(var r=s.i+1;r<i.out.length;r++)i.out[r].i++,i.out[r].dirty=!0;RED.nodes.eachLink(function(e){e.source.type=="subflow:"+i.id&&e.sourcePort>=s.i&&e.sourcePort++})}if(t.subflow&&t.subflow.hasOwnProperty("instances")&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),i&&RED.nodes.filterNodes({type:"subflow:"+i.id}).forEach(function(e){for(e.inputs=i.in.length,e.outputs=i.out.length;e.outputs>e.ports.length;)e.ports.push(e.ports.length);e.resize=!0,e.dirty=!0}),t.nodes)for(n=0;n<t.nodes.length;n++)RED.nodes.add(t.nodes[n]),a[t.nodes[n].z]=!0;if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.addLink(t.links[n]);if(t.changes)for(n in t.changes)if(t.changes.hasOwnProperty(n)&&(o=RED.nodes.node(n))){for(var d in t.changes[n])t.changes[n].hasOwnProperty(d)&&(o[d]=t.changes[n][d]);o.dirty=!0}}else if("move"==t.t){for(n=0;n<t.nodes.length;n++){var l=t.nodes[n];l.n.x=l.ox,l.n.y=l.oy,l.n.dirty=!0,l.n.moved=l.moved}if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.removeLink(t.links[n]);if(t.removedLinks)for(n=0;n<t.removedLinks.length;n++)RED.nodes.addLink(t.removedLinks[n])}else if("edit"==t.t){for(n in t.changes)if(t.changes.hasOwnProperty(n)){if(t.node._def.defaults&&t.node._def.defaults[n]&&t.node._def.defaults[n].type){var c=RED.nodes.node(t.node[n]);c&&c.users.splice(c.users.indexOf(t.node),1);var p=RED.nodes.node(t.changes[n]);p&&p.users.push(t.node)}t.node[n]=t.changes[n]}if(t.subflow)t.subflow.hasOwnProperty("inputCount")&&(t.node.in.length>t.subflow.inputCount?t.node.in.splice(t.subflow.inputCount):0<t.subflow.inputs.length&&(t.node.in=t.node.in.concat(t.subflow.inputs))),t.subflow.hasOwnProperty("outputCount")&&(t.node.out.length>t.subflow.outputCount?t.node.out.splice(t.subflow.outputCount):0<t.subflow.outputs.length&&(t.node.out=t.node.out.concat(t.subflow.outputs))),t.subflow.hasOwnProperty("instances")&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),RED.editor.validateNode(t.node),RED.nodes.filterNodes({type:"subflow:"+t.node.id}).forEach(function(e){e.inputs=t.node.in.length,e.outputs=t.node.out.length,RED.editor.updateNodeProperties(e),RED.editor.validateNode(e)});else{var u;if(t.outputMap)for(var f in u={},t.outputMap)t.outputMap.hasOwnProperty(f)&&"-1"!==t.outputMap[f]&&(u[t.outputMap[f]]=f);RED.editor.updateNodeProperties(t.node,u),RED.editor.validateNode(t.node)}if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.addLink(t.links[n]);t.node.dirty=!0,t.node.changed=t.changed}else if("createSubflow"==t.t){if(t.nodes)for(RED.nodes.filterNodes({z:t.subflow.subflow.id}).forEach(function(e){e.z=t.activeWorkspace,e.dirty=!0}),n=0;n<t.nodes.length;n++)RED.nodes.remove(t.nodes[n]);if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.removeLink(t.links[n]);if(RED.nodes.removeSubflow(t.subflow.subflow),RED.workspaces.remove(t.subflow.subflow),t.removedLinks)for(n=0;n<t.removedLinks.length;n++)RED.nodes.addLink(t.removedLinks[n])}else"reorder"==t.t&&t.order&&RED.workspaces.order(t.order);Object.keys(a).forEach(function(e){var t=RED.nodes.subflow(e);t&&RED.editor.validateNode(t)}),RED.nodes.dirty(t.dirty),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.sidebar.config.refresh()}}(t.pop())},peek:function(){return t[t.length-1]},clear:function(){t=[]}}}(),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(n,o){return function(e){var t=$("#node-"+(o?"