UNPKG

@awearsolutions/node-red

Version:

A visual tool for wiring the Internet of Things

16 lines 310 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 e={};return{on:function(t,n){e[t]=e[t]||[],e[t].push(n)},off:function(t,n){var o=e[t];if(o)for(var i=0;i<o.length;i++)if(o[i]===n)return void o.splice(i,1)},emit:function(t,n){if(e[t])for(var o=0;o<e[t].length;o++)try{e[t][o](n)}catch(e){console.log("RED.events.emit error: ["+t+"] "+e.toString()),console.log(e)}}}}(),RED.i18n={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(e,t){var n=i18n.functions.toLanguages(i18n.detectLanguage()),o=n.length;n.forEach(function(n){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"locales/"+e+"?lng="+n,success:function(i){i18n.addResourceBundle(n,e,i),0==--o&&t()}})})},loadNodeCatalogs:function(e){var t=i18n.functions.toLanguages(i18n.detectLanguage()),n=t.length;t.forEach(function(t){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"locales/nodes?lng="+t,success:function(o){Object.keys(o).forEach(function(e){i18n.addResourceBundle(t,e,o[e])}),0==--n&&e()}})})}},RED.settings=function(){var e={},t=function(){try{return"localStorage"in window&&null!==window.localStorage}catch(e){return!1}},n=function(t){for(var n in e)e.hasOwnProperty(n)&&RED.settings.hasOwnProperty(n)&&delete RED.settings[n];for(n in t)t.hasOwnProperty(n)&&(RED.settings[n]=t[n]);e=t},o=function(e){$.ajax({headers:{Accept:"application/json"},dataType:"json",cache:!1,url:"settings",success:function(t){n(t),RED.settings.user&&!RED.settings.user.anonymous||RED.settings.remove("auth-tokens"),console.log("Node-RED: "+t.version),e()},error:function(t,n,i){401===t.status?(/[?&]access_token=(.*?)(?:$|&)/.test(window.location.search)&&(window.location.search=""),RED.user.login(function(){o(e)})):console.log("Unexpected error:",t.status,n)}})};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")}}}),o(e)},load:o,set:function(e,n){t()&&localStorage.setItem(e,JSON.stringify(n))},get:function(e){if(t())return JSON.parse(localStorage.getItem(e))},remove:function(e){t()&&localStorage.removeItem(e)},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 e(){$("#btn-usermenu-submenu li").remove(),RED.settings.user.anonymous?RED.menu.addItem("btn-usermenu",{id:"usermenu-item-login",label:RED._("menu.label.login"),onselect:function(){RED.user.login({cancelable:!0},function(){RED.settings.load(function(){RED.notify(RED._("user.loggedInAs",{name:RED.settings.user.username}),"success"),e()})})}}):(RED.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()}}))}return{init:function(){if(RED.settings.user&&(!RED.settings.editorTheme||!RED.settings.editorTheme.hasOwnProperty("userMenu"))){var t=$('<li><a id="btn-usermenu" class="button hide" data-toggle="dropdown" href="#"></a></li>').prependTo(".header-toolbar");RED.settings.user.image?$('<span class="user-profile"></span>').css({backgroundImage:"url("+RED.settings.user.image+")"}).appendTo(t.find("a")):$('<i class="fa fa-user"></i>').appendTo(t.find("a")),RED.menu.init({id:"btn-usermenu",options:[]}),e()}},login:function(t,n){"function"==typeof t&&(n=t,t={});var o=$('<div id="node-dialog-login" class="hide"><div style="display: inline-block;width: 250px; vertical-align: top; margin-right: 10px; margin-bottom: 20px;"><img id="node-dialog-login-image" src=""/></div><div style="display: inline-block; width: 250px; vertical-align: bottom; margin-left: 10px; margin-bottom: 20px;"><form id="node-dialog-login-fields" class="form-horizontal" style="margin-bottom: 0px;"></form></div></div>');o.dialog({autoOpen:!1,dialogClass:"ui-dialog-no-close",modal:!0,closeOnEscape:!!t.cancelable,width:600,resizable:!1,draggable:!1}),$("#node-dialog-login-fields").empty(),$.ajax({dataType:"json",url:"auth/login",success:function(i){var a=0;if("credentials"==i.type){for(;a<i.prompts.length;a++){var s=i.prompts[a],r=$("<div/>",{class:"form-row"});$('<label for="node-dialog-login-'+s.id+'">'+s.label+":</label><br/>").appendTo(r);var d=$('<input style="width: 100%" id="node-dialog-login-'+s.id+'" type="'+s.type+'" tabIndex="'+(a+1)+'"/>').appendTo(r);a<i.prompts.length-1&&d.keypress(function(){var e=r;return function(t){13==t.keyCode&&(e.next("div").find("input").focus(),t.preventDefault())}}()),r.appendTo("#node-dialog-login-fields")}$('<div class="form-row" style="text-align: right; margin-top: 10px;"><span id="node-dialog-login-failed" style="line-height: 2em;float:left;" class="hide">'+RED._("user.loginFailed")+'</span><img src="red/images/spin.svg" style="height: 30px; margin-right: 10px; " class="login-spinner hide"/>'+(t.cancelable?'<a href="#" id="node-dialog-login-cancel" style="margin-right: 20px;" tabIndex="'+(a+1)+'">'+RED._("common.label.cancel")+"</a>":"")+'<input type="submit" id="node-dialog-login-submit" style="width: auto;" tabIndex="'+(a+2)+'" value="'+RED._("user.login")+'"></div>').appendTo("#node-dialog-login-fields"),$("#node-dialog-login-submit").button(),$("#node-dialog-login-fields").submit(function(o){$("#node-dialog-login-submit").button("option","disabled",!0),$("#node-dialog-login-failed").hide(),$(".login-spinner").show();for(var a={client_id:"node-red-editor",grant_type:"password",scope:""},s=0;s<i.prompts.length;s++){var r=i.prompts[s];a[r.id]=$("#node-dialog-login-"+r.id).val()}$.ajax({url:"auth/token",type:"POST",data:a}).done(function(o,i,a){RED.settings.set("auth-tokens",o),$("#node-dialog-login").dialog("destroy").remove(),t.updateMenu&&e(),n()}).fail(function(e,t,n){RED.settings.remove("auth-tokens"),$("#node-dialog-login-failed").show()}).always(function(){$("#node-dialog-login-submit").button("option","disabled",!1),$(".login-spinner").hide()}),o.preventDefault()})}else if("strategy"==i.type)for(a=0;a<i.prompts.length;a++){var s=i.prompts[a],r=$("<div/>",{class:"form-row",style:"text-align: center"}).appendTo("#node-dialog-login-fields"),l=$('<a href="#"></a>',{style:"padding: 10px"}).appendTo(r).click(function(){document.location=s.url});if(s.image)$("<img>",{src:s.image}).appendTo(l);else if(s.label){var c=$("<span></span>").text(s.label);s.icon&&($("<i></i>",{class:"fa fa-2x "+s.icon,style:"vertical-align: middle"}).appendTo(l),c.css({verticalAlign:"middle",marginLeft:"8px"})),c.appendTo(l)}l.button()}t.cancelable&&$("#node-dialog-login-cancel").button().click(function(e){$("#node-dialog-login").dialog("destroy").remove()});var p=i.image||"red/images/node-red-256.png";$("#node-dialog-login-image").load(function(){o.dialog("open")}).attr("src",p)}})},logout:function(){var e=RED.settings.get("auth-tokens"),t=e?e.access_token:"";$.ajax({url:"auth/revoke",type:"POST",data:{token:t}}).done(function(e,t,n){RED.settings.remove("auth-tokens"),e&&e.redirect?document.location.href=e.redirect:document.location.reload(!0)}).fail(function(e,t,n){401===e.status?document.location.reload(!0):console.log(t)})}}}(),RED.comms=function(){function e(){function c(){for(var e in s)s.hasOwnProperty(e)&&t.send(JSON.stringify({subscribe:e}))}l=!0;var p;if(RED.settings.disableWebSockets)p=(p=document.location.pathname)+("/"==p.slice(-1)?"":"/")+"comms";else{p=location.hostname;var u=location.port;0!==u.length&&(p=p+":"+u),p=(p+=document.location.pathname)+("/"==p.slice(-1)?"":"/")+"comms",p="ws"+("https:"==document.location.protocol?"s":"")+"://"+p}var f=RED.settings.get("auth-tokens");r=null!=f,(t=RED.settings.disableWebSockets?new SockJS(p):new WebSocket(p)).onopen=function(){d=0,n&&(o=setTimeout(function(){n.close(),n=null},1e3)),r?t.send(JSON.stringify({auth:f.access_token})):c()},t.onmessage=function(t){var n=JSON.parse(t.data);if(r&&n.auth)"ok"===n.auth?(r=!1,c()):"fail"===n.auth&&(l=!1,RED.user.login({updateMenu:!0},function(){e()}));else if(n.topic)for(var o in s)if(s.hasOwnProperty(o)&&new RegExp("^"+o.replace(/([\[\]\?\(\)\\\\$\^\*\.|])/g,"\\$1").replace(/\+/g,"[^/]+").replace(/\/#$/,"(/.*)?")+"$").test(n.topic)){var i=s[o];if(i)for(var a=0;a<i.length;a++)i[a](n.topic,n.data)}},t.onclose=function(){l&&(o&&(clearTimeout(o),o=null),++d<10?(setTimeout(e,1e3),d>5&&null==n&&(n=RED.notify(RED._("notification.errors.lostConnection"),"error",!0))):d<20?setTimeout(e,2e3):(a=60,i=setInterval(function(){if(0==--a)n.update(RED._("notification.errors.lostConnection")),clearInterval(i),e();else{var t=RED._("notification.errors.lostConnectionReconnect",{time:a})+' <a href="#">'+RED._("notification.errors.lostConnectionTry")+"</a>";n.update(t),$(n).find("a").click(function(t){t.preventDefault(),n.update(RED._("notification.errors.lostConnection")),clearInterval(i),e()})}},1e3)))}}var t,n=null,o=null,i=null,a=10,s={},r=!1,d=0,l=!1;return{connect:e,subscribe:function(e,n){null==s[e]&&(s[e]=[]),s[e].push(n),t&&1==t.readyState&&t.send(JSON.stringify({subscribe:e}))},unsubscribe:function(e,t){if(s[e]){for(var n=0;n<s[e].length;n++)if(s[e][n]===t){s[e].splice(n,1);break}0===s[e].length&&delete s[e]}}}}(),RED.text={},RED.text.bidi=function(){function e(e){for(var o=e.length,i=0;i<o;i++){if(t(e.charCodeAt(i)))return!0;if(n(e.charCodeAt(i)))return!1}return!1}function t(e){return e>=1488&&e<=1535||e>=1536&&e<=1631||e>=1642&&e<=1775||e>=1786&&e<=2047||e>=64285&&e<=65023||e>=65136&&e<=65276}function n(e){return e>64&&e<91||e>96&&e<123}function o(t){return"auto"==s?e(t)?"rtl":"ltr":s}function i(){$(this).attr("dir",o($(this).val()))}function a(){$("#workspace").find("span.bidiAware").each(function(){$(this).attr("dir",o($(this).html()))}),$("#sidebar").find("span.bidiAware").each(function(){$(this).attr("dir",o($(this).text()))})}var s="",r="‪",d="‫",l="‬";return{setTextDirection:function(e){s=e,RED.nodes.eachNode(function(e){e.dirty=!0}),RED.view.redraw(),RED.palette.refresh(),a()},enforceTextDirectionWithUCC:function(e){if(e){var t=o(e);if("ltr"==t)return r+e+l;if("rtl"==t)return d+e+l}return e},resolveBaseTextDir:o,prepareInput:function(e){e.on("keyup",i).on("paste",i).on("cut",i),i.call(e)}}}(),RED.text.format=function(){function e(e){switch(e){case"breadcrumb":return l;case"comma":return c;case"email":return p;case"filepath":return u;case"formula":return f;case"sql":return h;case"underscore":return g;case"url":return v;case"word":return m;case"xpath":return b;default:return y}}function t(e){var t=window.navigator.userAgent;if(t.indexOf("MSIE")>=0||t.indexOf("Trident")>=0||t.indexOf("Edge")>=0)return!1;var n=document.createElement(e.tagName);n.contentEditable=!0;var o="oninput"in n;return o||(n.setAttribute("oninput","return;"),o="function"==typeof n.oninput),n=null,o}function n(e,n,i,a,s){if(!e||1!=e.nodeType)return!1;w||(w=document.createEvent("Event")).initEvent("TF",!0,!0),e.setAttribute("data-tf-type",n);var d="undefined"===i?"{}":JSON.stringify(Array.isArray(i)?i[0]:i);e.setAttribute("data-tf-args",d);var l="ltr";if("undefined"===a&&(e.dir?l=e.dir:e.style&&e.style.direction&&(l=e.style.direction),a="rtl"===l.toLowerCase()),e.setAttribute("data-tf-dir",a),e.setAttribute("data-tf-locale",r.getLocaleDetails(s).lang),t(e)){e.oninput;e.oninput=function(e){o(e.target)}}else e.onkeyup=function(t){o(t.target),e.dispatchEvent(w)},e.onmouseup=function(t){o(t.target),e.dispatchEvent(w)};return o(e),!0}function o(t){var n=t.textContent||"",o=document.getSelection();if(0===n.length||!o||o.rangeCount<=0)t.dispatchEvent(w);else{var i,a,s=o.getRangeAt(0),r=s.cloneRange();i=s.startContainer,a=s.startOffset;var d=0;3===i.nodeType&&(d+=a),r.setStart(t,0),r.setEndBefore(i);var l=document.createElement("div");l.appendChild(r.cloneContents()),d+=l.textContent.length,t.innerHTML=e(t.getAttribute("data-tf-type")).format(n,JSON.parse(t.getAttribute("data-tf-args")),"true"===t.getAttribute("data-tf-dir"),!0,t.getAttribute("data-tf-locale"));var c=t,p=t,u=0,f=!1;for(o.removeAllRanges(),s.setStart(t,0),s.setEnd(t,0);p;){if(3===p.nodeType){if(u+p.nodeValue.length>=d){s.setStart(p,d-u);break}u+=p.nodeValue.length,p=p.nextSibling}else{if(p.hasChildNodes()){p=(c=p).firstChild;continue}p=p.nextSibling}for(;!p;){if(c===t){f=!0;break}p=c.nextSibling,c=c.parentNode}if(f)break}o.addRange(s),t.dispatchEvent(w)}}var i=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])},a=function(){function e(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 t(e,t){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);var i=e.content,a=n.usePos&&n.startPos<i.length;a&&(n.start="",n.loops=!1),n.bStart=a?n.startPos:n.start.length>0?i.indexOf(n.start):0;var s=n.useLength&&n.length>0&&n.bStart+n.length<i.length;return s&&(n.end=""),n.bEnd=s?n.bStart+n.length:n.end.length>0?i.indexOf(n.end,n.bStart+n.start.length)+1:i.length,n.after||(n.start=""),n.before||(n.end=""),n}return{handleSubcontents:function(e,t,n,o,a){if(!n.content||"string"!=typeof n.content||0===n.content.length)return e;var s=!0;void 0!==n.loops&&(s=!!n.loops);for(var r=0;!0&&!(r>=e.length);r++)if(!(e[r].isParsed||e.keep||e[r].isSeparator)){var d=e[r].content,l=d.indexOf(n.content);if(!(l<0)){var c,p=0;if(n.continued)do{p++,c=d.indexOf(n.content,l+p*n.content.length)}while(0===c);else p=1;if(c=l+p*n.content.length,e.splice(r,1),l>0&&(e.splice(r,0,new i({content:d.substring(0,l),localGui:t.dir,keep:!0})),r++),e.splice(r,0,new i({content:d.substring(l,c),textDirection:n.subDir,localGui:t.dir})),c<d.length&&e.splice(r+1,0,new i({content:d.substring(c,d.length),localGui:t.dir,keep:!0})),!s)break}}},handleBounds:function(n,o,a,s,r){for(var d=0;d<a.length;d++)if(e(a[d]))for(var l=0;!0&&!(l>=n.length);l++)if(!(n[l].isParsed||n[l].inBounds||n.keep||n[l].isSeparator)){var c=t(n[l],a[d]),p=c.bStart,u=c.bEnd;if(!(p<0||u<0)){var f=n[l].content;if(n.splice(l,1),p>0&&(n.splice(l,0,new i({content:f.substring(0,p),localGui:o.dir,keep:!0})),l++),c.start&&(n.splice(l,0,new i({content:c.start,localGui:o.dir,isSeparator:!0})),l++),n.splice(l,0,new i({content:f.substring(p+c.start.length,u-c.end.length),textDirection:c.subDir,localGui:o.dir,inBounds:!0})),c.end&&(l++,n.splice(l,0,new i({content:c.end,localGui:o.dir,isSeparator:!0}))),u+c.end.length<f.length&&n.splice(l+1,0,new i({content:f.substring(u+c.end.length,f.length),localGui:o.dir,keep:!0})),!c.loops)break}}for(d=0;d<n.length;d++)n[d].inBounds=!1;return n},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,a){for(var s=0;s<n.length;s++)for(var r=0;!0&&!(r>=e.length);r++)if(!(e[r].isParsed||e[r].keep||e[r].isSeparator)){var d=e[r].content,l=d.indexOf(n[s]);l>=0&&(e.splice(r,1),l>0&&(e.splice(r,0,new i({content:d.substring(0,l),textDirection:t.subDir,localGui:t.dir,inPoints:!0})),r++),e.splice(r,0,new i({content:n[s],localGui:t.dir,isSeparator:!0})),l+n[s].length+1<=d.length&&e.splice(r+1,0,new i({content:d.substring(l+n[s].length),textDirection:t.subDir,localGui:t.dir,inPoints:!0})))}for(s=0;s<e.length;s++)e[s].keep?e[s].keep=!1:e[s].inPoints&&(e[s].isParsed=!0,e[s].inPoints=!1);return e}}}(),s={handle:function(e,t,n,o){var i=[];Array.isArray(n.cases)&&(i=n.cases);var s=[];void 0!==n.points&&(Array.isArray(n.points)?s=n.points:"string"==typeof n.points&&(s=n.points.split("")));var r={};"object"==typeof n.subs&&(r=n.subs);var d=[];return Array.isArray(n.bounds)&&(d=n.bounds),a.handleBounds(t,n,d,e,o),a.handleSubcontents(t,n,r,e,o),a.handleCases(t,n,i,e,o),a.handlePoints(t,n,s,e,o),t}},r=function(){var e=function(e){var t=e?e.split("-")[0]:"";return!(!t||t.length<2)&&["iw","he","ar","fa","ur"].some(function(e){return e===t})};return{LRE:"‪",RLE:"‫",PDF:"‬",LRM:"‎",RLM:"‏",LRO:"‭",RLO:"‮",getLocaleDetails:function(t){if(t||(t="undefined"==typeof navigator?"":navigator.language||navigator.userLanguage||""),t=t.toLowerCase(),e(t)){var n=t.split("-");return{lang:n[0],country:n[1]?n[1]:""}}return{lang:"not-bidi"}},removeUcc:function(e){return e?e.replace(/[\u200E\u200F\u202A-\u202E]/g,""):e},removeTags:function(e){return e?e.replace(/<[^<]*>/g,""):e},getDirection:function(e,t,n,o){if("auto"!==t&&/^(rtl|ltr)$/i.test(t))return t;n=/^(rtl|ltr)$/i.test(n)?n:"ltr";var i=o?e.split("").reverse().join(""):e,a=/[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(i);return a?a[0]<="z"?"ltr":"rtl":n},hasArabicChar:function(e){return!!/[\u0600-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(e)},showMarks:function(e,t){for(var n="",o=0;o<e.length;o++){var i=""+e.charAt(o);switch(i){case"‎":n+="<LRM>";break;case"‏":n+="<RLM>";break;case"‪":n+="<LRE>";break;case"‫":n+="<RLE>";break;case"‭":n+="<LRO>";break;case"‮":n+="<RLO>";break;case"‬":n+="<PDF>";break;default:n+=i}}var a=void 0!==t&&/^(rtl|ltr)$/i.test(t)?"rtl"===t?"‮":"‭":"";return a+n+(""===a?"":"‬")},hideMarks:function(e){return e.replace(/<LRM>/g,this.LRM).replace(/<RLM>/g,this.RLM).replace(/<LRE>/g,this.LRE).replace(/<RLE>/g,this.RLE).replace(/<LRO>/g,this.LRO).replace(/<RLO>/g,this.RLO).replace(/<PDF>/g,this.PDF)},showTags:function(e){return"<xmp>"+e+"</xmp>"},hideTags:function(e){return e.replace(/<xmp>/g,"").replace(/<\/xmp>/g,"")}}}(),d=function(){function e(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=s,n):n}function t(t,n,o){if(!t||!n)return new i({content:""});var a=e(n,!0),r=[new i({content:t,actual:t,localGui:a.dir})],d=s.handle;return a.handler&&"function"==typeof a.handler&&(d=a.handler.handle),d(t,r,a,o),r}function n(t,n,i){var s=e(n,!1);return i?a(t,s):o(t,s)}function o(e,t,n){for(var o="",i="",a=!1,s=0;s<e.length;s++)if(e[s].isVisible){var d=e[s].textDirection,l=e[s].localGui;""!==l&&""===i?o+="rtl"===l?r.RLE:r.LRE:""===i||""!==l&&l===i&&!a||(o+=r.PDF+(s==e.length-1&&""!==l?"":"rtl"===t.dir?r.RLM:r.LRM),""!==l&&(o+="rtl"===l?r.RLE:r.LRE)),"auto"===d&&(d=r.getDirection(e[s].content,d,t.guiDir)),/^(rtl|ltr)$/i.test(d)?(o+=("rtl"===d?r.RLE:r.LRE)+e[s].content+r.PDF,d):(o+=e[s].content,r.getDirection(e[s].content,d,t.guiDir,!0)),s<e.length-1?o+="rtl"===(l&&e[s+1].localGui?l:t.dir)?r.RLM:r.LRM:""!==i&&(o+=r.PDF),i=l,a=!1}else a=!0;var c="auto"===t.dir?r.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;return c!==t.guiDir&&(o=("rtl"===c?r.RLE:r.LRE)+o+r.PDF),o}function a(e,t,n){for(var o="",i="",a=0;a<e.length;a++)if(e[a].isVisible){var s=e[a].textDirection,d=e[a].localGui;""!==d&&""===i?o+="<bdi dir='"+("rtl"===d?"rtl":"ltr")+"'>":""===i||""!==d&&d===i&&!stop||(o+="</bdi>"+(a==e.length-1&&""!==d?"":"<span style='unicode-bidi: embed; direction: "+("rtl"===t.dir?"rtl":"ltr")+";'></span>"),""!==d&&(o+="<bdi dir='"+("rtl"===d?"rtl":"ltr")+"'>")),"auto"===s&&(s=r.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,r.getDirection(e[a].content,s,t.guiDir,!0)),a<e.length-1?o+="<span style='unicode-bidi: embed; direction: "+("rtl"===(d&&e[a+1].localGui?d:t.dir)?"rtl":"ltr")+";'></span>":""!==i&&(o+="</bdi>"),i=d,stop=!1}else stop=!0;var l="auto"===t.dir?r.getDirection(e[0].actual,t.dir,t.guiDir):t.dir;return l!==t.guiDir&&(o="<bdi dir='"+("rtl"===l?"rtl":"ltr")+"'>"+o+"</bdi>"),o}var d={};return d.parseAndDisplayStructure=function(e,o,i,a){return e&&o?n(t(e,o,a),o,i):e},d.parseStructure=t,d.displayStructure=n,d.restore=function(e,t){return e},d}(),l={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?d.parseStructure(e,s,!!o,i):d.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?d.parseStructure(e,s,!!o,i):d.parseAndDisplayStructure(e,s,!!o,i)}},p=function(){function e(e,t){if("ar"!==r.getLocaleDetails(t).lang)return"ltr";var n=e.indexOf("@");return n>0&&n<e.length-1&&r.hasArabicChar(e.substring(n+1))?"rtl":"ltr"}return{format:function(t,n,o,i,a,r){var l={guiDir:o?"rtl":"ltr",dir:e(t,a),points:"<>.:,;@",cases:[{handler:s,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"(",endBefore:")"}],points:""}}]};return r?d.parseStructure(t,l,!!i,a):d.parseAndDisplayStructure(t,l,!!i,a)}}}(),u={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:"/\\:."};return a?d.parseStructure(e,s,!!o,i):d.parseAndDisplayStructure(e,s,!!o,i)}},f={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:" /%^&[]<>=!?~:.,|()+-*{}"};return a?d.parseStructure(e,s,!!o,i):d.parseAndDisplayStructure(e,s,!!o,i)}},h={format:function(e,t,n,o,i,a){var r={guiDir:n?"rtl":"ltr",dir:"ltr",points:"\t!#%&()*+,-./:;<=>?|[]{}",cases:[{handler:s,args:{bounds:[{startAfter:"/*",endBefore:"*/"},{startAfter:"--",end:"\n"},{startAfter:"--"}]}},{handler:s,args:{subs:{content:" ",continued:!0}}},{handler:s,args:{bounds:[{startAfter:"'",endBefore:"'"},{startAfter:'"',endBefore:'"'}]}}]};return a?d.parseStructure(e,r,!!o,i):d.parseAndDisplayStructure(e,r,!!o,i)}},g={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:"_"};return a?d.parseStructure(e,s,!!o,i):d.parseAndDisplayStructure(e,s,!!o,i)}},v={format:function(e,t,n,o,i,a){var s={guiDir:n?"rtl":"ltr",dir:"ltr",points:":?#/@.[]="};return a?d.parseStructure(e,s,!!o,i):d.parseAndDisplayStructure(e,s,!!o,i)}},m={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?d.parseStructure(e,s,!!o,i):d.parseAndDisplayStructure(e,s,!!o,i)}},b={format:function(e,t,n,o,i,a){var r={guiDir:n?"rtl":"ltr",dir:"ltr",points:" /[]<>=!:@.|()+-*",cases:[{handler:s,args:{bounds:[{startAfter:'"',endBefore:'"'},{startAfter:"'",endBefore:"'"}],points:""}}]};return a?d.parseStructure(e,r,!!o,i):d.parseAndDisplayStructure(e,r,!!o,i)}},y={format:function(e,t,n,o,i,a){var s={},r="",l=Array.isArray(t)?t[0]:t;for(r in l)l.hasOwnProperty(r)&&(s[r]=l[r]);return s.guiDir=n?"rtl":"ltr",s.dir=s.dir?s.dir:s.guiDir,a?d.parseStructure(e,s,!!o,i):d.parseAndDisplayStructure(e,s,!!o,i)}},w=(function(){function e(e){return"he"===e||"iw"===e||"ar"===e?"rtl":"ltr"}function t(t){0===t.msgDir.length&&(t.msgDir=e(t.msgLang)),t.msgDir="ltr"!==t.msgDir&&"rtl"!==t.msgDir&&"auto"!=t.msgDir?"ltr":t.msgDir,0===t.guiDir.length&&(t.guiDir=t.msgDir),t.guiDir="rtl"!==t.guiDir?"ltr":"rtl",0===t.phDir.length&&(t.phDir=0===t.phLang.length?t.msgDir:e(t.phLang)),t.phDir="ltr"!==t.phDir&&"rtl"!==t.phDir&&"auto"!=t.phDir?"ltr":t.phDir,"string"==typeof t.phPacking&&(t.phPacking=t.phPacking.split("")),t.phPacking.length<2&&(t.phPacking=["{","}"])}var n={msgLang:"en",msgDir:"",phLang:"",phDir:"",phPacking:["{","}"],phStt:{type:"none",args:{}},guiDir:""},o=!1}(),null);return{getHtml:function(t,n,o,i,a){return e(n).format(t,o,i,!0,a)},attach:function(e,t,o,i,a){return n(e,t,o,i,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},RED.nodes=function(){function e(e){O=e,RED.events.emit("nodes:change",{dirty:O})}function t(){return(1+4294967295*Math.random()).toString(16)}function o(e){if(0!==e.type.indexOf("subflow")?e._=e._def._:e._=RED._,"config"==e._def.category)R[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,y(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}E.push(e)}RED.events.emit("nodes:add",e)}function a(e){k.push(e)}function s(e){if(e in R)return R[e];for(var t in E)if(E[t].id==e)return E[t];return null}function r(e){var t,o=[],i=[];if(e in R)t=R[e],delete R[e],RED.events.emit("nodes:remove",t),RED.workspaces.refresh();else if(t=s(e)){E.splice(E.indexOf(t),1),(o=k.filter(function(e){return e.source===t||e.target===t})).forEach(function(e){k.splice(k.indexOf(e),1)});var a=!1;for(var d in t._def.defaults)if(t._def.defaults.hasOwnProperty(d)){var l=t._def.defaults[d];if(l.type){var c=S.getNodeType(l.type);if(c&&"config"==c.category){var p=R[t[d]];if(p)if(a=!0,p._def.exclusive)r(t[d]),i.push(p);else{var u=p.users;u.splice(u.indexOf(t),1)}}}}a&&RED.workspaces.refresh(),RED.events.emit("nodes:remove",t)}return t&&t._def.onremove&&t._def.onremove.call(n),{links:o,nodes:i}}function d(e){x[e.id]=e,e._def={defaults:{label:{value:""},disabled:{value:!1},info:{value:""}}},_.push(e.id)}function l(e,t){if(t){var n=Object.keys(T).map(function(e){return T[e].name});n.sort();var o=1,i=e.name;n.forEach(function(t){i==t&&(o++,i=e.name+" ("+o+")")}),e.name=i}T[e.id]=e,RED.nodes.registerType("subflow:"+e.id,{defaults:{name:{value:""}},info:e.info,icon:"subflow.png",category:"subflows",inputs:e.in.length,outputs:e.out.length,color:"#da9",label:function(){return this.name||RED.nodes.subflow(e.id).name},labelStyle:function(){return this.name?"node_label_italic":""},paletteLabel:function(){return RED.nodes.subflow(e.id).name},inputLabels:function(t){return e.inputLabels?e.inputLabels[t]:null},outputLabels:function(t){return e.outputLabels?e.outputLabels[t]:null},set:{module:"node-red"}}),e._def=RED.nodes.getType("subflow:"+e.id)}function c(e){return T[e]}function p(e,t){for(var n=0;n<E.length;n++){var o=E[n];if(o.z===e){var i=/^subflow:(.+)$/.exec(o.type);if(i){if(i[1]===t)return!0;if(p(i[1],t))return!0}}}return!1}function u(e){var t={};t.id=e.id,t.type=e.type;for(var n in e._def.defaults)e._def.defaults.hasOwnProperty(n)&&(t[n]=e[n]);return t}function f(e,t){if("tab"===e.type)return u(e);t=t||!1;var n={};if(n.id=e.id,n.type=e.type,n.z=e.z,"unknown"==n.type)for(var o in e._orig)e._orig.hasOwnProperty(o)&&(n[o]=e._orig[o]);else{for(var i in e._def.defaults)e._def.defaults.hasOwnProperty(i)&&(n[i]=e[i]);if(t&&e.credentials){var a={};n.credentials={};for(var s in e._def.credentials)e._def.credentials.hasOwnProperty(s)&&("password"==e._def.credentials[s].type?(!e.credentials._||e.credentials["has_"+s]!=e.credentials._["has_"+s]||e.credentials["has_"+s]&&e.credentials[s])&&(a[s]=e.credentials[s]):null==e.credentials[s]||e.credentials._&&e.credentials[s]==e.credentials._[s]||(a[s]=e.credentials[s]));Object.keys(a).length>0&&(n.credentials=a)}}if("config"!=e._def.category){n.x=e.x,n.y=e.y,n.wires=[];for(var r=0;r<e.outputs;r++)n.wires.push([]);for(var d=k.filter(function(t){return t.source===e}),l=0;l<d.length;l++){var c=d[l];"subflow"!=c.target.type&&n.wires[c.sourcePort].push(c.target.id)}e.inputs>0&&e.inputLabels&&!/^\s*$/.test(e.inputLabels.join(""))&&(n.inputLabels=e.inputLabels.slice()),e.outputs>0&&e.outputLabels&&!/^\s*$/.test(e.outputLabels.join(""))&&(n.outputLabels=e.outputLabels.slice())}return n}function h(e){var t={};return t.id=e.id,t.type=e.type,t.name=e.name,t.info=e.info,t.in=[],t.out=[],e.in.forEach(function(e){for(var n={x:e.x,y:e.y,wires:[]},o=k.filter(function(t){return t.source===e}),i=0;i<o.length;i++){var a=o[i];"subflow"!=a.target.type&&n.wires.push({id:a.target.id})}t.in.push(n)}),e.out.forEach(function(n,o){var a={x:n.x,y:n.y,wires:[]},s=k.filter(function(e){return e.target===n});for(i=0;i<s.length;i++)"subflow"!=s[i].source.type?a.wires.push({id:s[i].source.id,port:s[i].sourcePort}):a.wires.push({id:e.id,port:0});t.out.push(a)}),t.in.length>0&&e.inputLabels&&!/^\s*$/.test(e.inputLabels.join(""))&&(t.inputLabels=e.inputLabels.slice()),t.out.length>0&&e.outputLabels&&!/^\s*$/.test(e.outputLabels.join(""))&&(t.outputLabels=e.outputLabels.slice()),t}function g(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=[c(s)];RED.nodes.eachNode(function(e){e.z==s&&r.push(e)}),o=g(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 R){var p=R[a[l]],u=S.getNodeType(a._def.defaults[l].type).exportable;null==u||u?a[l]in n||(n[a[l]]=!0,e.push(p)):d[l]=""}o.push(d)}else{var f=h(a);o.push(f)}}return o}function v(e,t){var n,o=null;try{RED.nodes.eachSubflow(function(i){if(i.name==e.name&&i.info==e.info&&i.in.length==e.in.length&&i.out.length==e.out.length){var a=RED.nodes.filterNodes({z:i.id});if(a.length==t.length){var s=[e].concat(t),r=[i].concat(a),d=JSON.stringify(s),l=JSON.stringify(g(r));for(n=0;n<a.length;n++)d=d.replace(new RegExp('"'+t[n].id+'"',"g"),'"'+a[n].id+'"');if((d=d.replace(new RegExp('"'+e.id+'"',"g"),'"'+i.id+'"'))===l)throw o=i,new Error}}})}catch(e){console.log(e.stack)}return o}function m(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 b(e,n,i){var s,r,u,f={};if("string"==typeof e){if(""===e)return;try{u=JSON.parse(e)}catch(C){var h=new Error(RED._("clipboard.invalidFlow",{message:C.message}));throw h.code="NODE_RED",h}}else u=e;$.isArray(u)||(u=[u]),D||(D=JSON.parse(JSON.stringify(u)));var g=[];for(s=0;s<u.length;s++)"workspace"==(r=u[s]).type||"tab"==r.type||"subflow"==r.type||S.getNodeType(r.type)||"subflow:"==r.type.substring(0,8)||-1!=g.indexOf(r.type)||g.push(r.type),r.z&&(f[r.z]=f[r.z]||[],f[r.z].push(r));if(g.length>0){var b="<ul><li>"+g.join("</li><li>")+"</li></ul>";g.length;RED.notify("<strong>"+RED._("clipboard.importUnrecognised",{count:g.length})+"</strong>"+b,"error",!1,1e4)}var y=RED.workspaces.active(),E=c(y);for(s=0;s<u.length;s++){var k=/^subflow:(.+)$/.exec(u[s].type);if(k){var _=k[1],T=c(u[s].z||y);if(T){var C;if(_===T.id&&(C=new Error(RED._("notification.errors.cannotAddSubflowToItself"))),p(_,T.id)&&(C=new Error(RED._("notification.errors.cannotAddCircularReference"))),C)throw C.code="NODE_RED",C}}}var O,L,N,I,P=[],z={},A=[],M={},j={},B={},J=[],G=[],V=null;for(s=0;s<u.length;s++)if("workspace"===(r=u[s]).type||"tab"===r.type)"workspace"===r.type&&(r.type="tab"),null==w&&(w=r),n&&(O=t(),z[r.id]=O,r.id=O),d(r),RED.workspaces.add(r),P.push(r);else if("subflow"===r.type){var F=v(r,f[r.id]);F?j[r.id]=F:(M[r.id]=r,n&&(O=t(),r.id=O),r.in.forEach(function(e,n){e.type="subflow",e.direction="in",e.z=r.id,e.i=n,e.id=t()}),r.out.forEach(function(e,n){e.type="subflow",e.direction="out",e.z=r.id,e.i=n,e.id=t()}),A.push(r),l(r,n))}for(null==w&&(d(w={type:"tab",id:t(),label:RED._("workspace.defaultName",{number:1})}),RED.workspaces.add(w),P.push(w),y=RED.workspaces.active()),s=0;s<u.length;s++)if(r=u[s],(L=S.getNodeType(r.type))&&"config"==L.category){var W=null;if(n){if(r.z){if(j[r.z])continue;M[r.z]?r.z=M[r.z].id:(r.z=z[r.z],x[r.z]||(i?(null===V&&(V=RED.workspaces.add(null,!0),P.push(V)),r.z=V.id):r.z=y))}if((W=RED.nodes.node(r.id))&&r.z&&W.z!==r.z){W=null;for(var U in R)if(R.hasOwnProperty(U)&&R[U].z===r.z&&m(R[U],r,!1)){W=R[U],B[r.id]=R[U];break}}}if(!W){N={id:r.id,z:r.z,type:r.type,users:[],_config:{}};for(I in L.defaults)L.defaults.hasOwnProperty(I)&&(N[I]=r[I],N._config[I]=JSON.stringify(r[I]));if(L.hasOwnProperty("credentials")&&r.hasOwnProperty("credentials")){N.credentials={};for(I in L.credentials)L.credentials.hasOwnProperty(I)&&r.credentials.hasOwnProperty(I)&&(N.credentials[I]=r.credentials[I])}N.label=L.label,N._def=L,n&&(N.id=t()),B[r.id]=N,J.push(N),RED.nodes.add(N)}}for(s=0;s<u.length;s++)if("workspace"!==(r=u[s]).type&&"tab"!==r.type&&"subflow"!==r.type&&(!(L=S.getNodeType(r.type))||"config"!=L.category)){var q={x:r.x,y:r.y,z:r.z,type:0,wires:r.wires,inputLabels:r.inputLabels,outputLabels:r.outputLabels,changed:!1,_config:{}};if(n){if(j[r.z])continue;M[q.z]?q.z=M[q.z].id:(q.z=z[q.z],x[q.z]||(i?(null===V&&(V=RED.workspaces.add(null,!0),P.push(V)),q.z=V.id):q.z=y)),q.id=t()}else q.id=r.id,null!=q.z&&(x[q.z]||M[q.z])||(i?(null===V&&(V=RED.workspaces.add(null,!0),P.push(V)),q.z=V.id):q.z=y);if(q.type=r.type,q._def=L,"subflow"===r.type.substring(0,7)){var K=r.type.split(":")[1],H=j[K]||M[K]||c(K);n&&(K=H.id,q.type="subflow:"+K,q._def=S.getNodeType(q.type),delete q.i),q.name=r.name,q.outputs=H.out.length,q.inputs=H.in.length}else{if(!q._def){q.x&&q.y?q._def={color:"#fee",defaults:{},label:"unknown: "+r.type,labelStyle:"node_label_italic",outputs:r.outputs||r.wires.length,set:S.getNodeSet("node-red/unknown")}:(q._def={category:"config",set:S.getNodeSet("node-red/unknown")},q.users=[]);var X={};for(var Y in r)r.hasOwnProperty(Y)&&"x"!=Y&&"y"!=Y&&"z"!=Y&&"id"!=Y&&"wires"!=Y&&(X[Y]=r[Y]);q._orig=X,q.name=r.type,q.type="unknown"}if("config"!=q._def.category){q.inputs=r.inputs||q._def.inputs,q.outputs=r.outputs||q._def.outputs;for(I in q._def.defaults)q._def.defaults.hasOwnProperty(I)&&(q[I]=r[I],q._config[I]=JSON.stringify(r[I]));if(q._config.x=q.x,q._config.y=q.y,q._def.hasOwnProperty("credentials")&&r.hasOwnProperty("credentials")){q.credentials={};for(I in q._def.credentials)q._def.credentials.hasOwnProperty(I)&&r.credentials.hasOwnProperty(I)&&(q.credentials[I]=r.credentials[I])}}}o(q),RED.editor.validateNode(q),B[r.id]=q,"config"!=q._def.category&&J.push(q)}var Q={catch:"scope",status:"scope","link in":"links","link out":"links"};for(s=0;s<J.length;s++){if((r=J[s]).wires){for(var Z=0;Z<r.wires.length;Z++)for(var ee=r.wires[Z]instanceof Array?r.wires[Z]:[r.wires[Z]],te=0;te<ee.length;te++)if(B.hasOwnProperty(ee[te]))if(r.z===B[ee[te]].z){var ne={source:r,sourcePort:Z,target:B[ee[te]]};a(ne),G.push(ne)}else console.log("Warning: dropping link that crosses tabs:",r.id,"->",B[ee[te]].id);delete r.wires}for(var oe in r._def.defaults)if(r._def.defaults.hasOwnProperty(oe))if(r._def.defaults[oe].type&&B[r[oe]])r[oe]=B[r[oe]].id,(N=RED.nodes.node(r[oe]))&&-1===N.users.indexOf(r)&&N.users.push(r);else if(Q.hasOwnProperty(r.type)&&Q[r.type]===oe&&void 0!==r[oe]&&null!==r[oe])for(var ie=0;ie<r[oe].length;ie++)B[r[oe][ie]]&&(r[oe][ie]=B[r[oe][ie]].id);E&&/^link /.test(r.type)&&r.links&&(r.links=r.links.filter(function(e){var t=RED.nodes.node(e);return t&&t.z===y})),RED.editor.validateNode(r)}for(s=0;s<A.length;s++)(r=A[s]).in.forEach(function(e){e.wires.forEach(function(t){var n={source:e,sourcePort:0,target:B[t.id]};a(n),G.push(n)}),delete e.wires}),r.out.forEach(function(e){e.wires.forEach(function(t){var n;a(n=M[t.id]&&M[t.id].id==r.id?{source:r.in[t.port],sourcePort:t.port,target:e}:{source:B[t.id]||M[t.id],sourcePort:t.port,target:e}),G.push(n)}),delete e.wires});return RED.workspaces.refresh(),[J,G,P,A,V]}function y(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=S.getNodeType(n.type);if(o&&"config"==o.category){var i=R[e[t]];i&&-1===i.users.indexOf(e)&&i.users.push(e)}}}}var w,D,E=[],R={},k=[],x={},_=[],T={},C=null,O=!1,S=function(){var e={},t=[],n={},o={},i={},a={setModulePendingUpdated:function(t,n){e[t].pending_version=n,RED.events.emit("registry:module-updated",{module:t,version:n})},getModule:function(t){return e[t]},getNodeSetForType:function(e){return a.getNodeSet(o[e])},getModuleList:function(){return e},getNodeList:function(){return t},getNodeTypes:function(){return Object.keys(i)},setNodeList:function(e){t=[];for(var n=0;n<e.length;n++){var o=e[n];a.addNodeSet(o)}},addNodeSet:function(i){i.added=!1,n[i.id]=i;for(var a=0;a<i.types.length;a++)o[i.types[a]]=i.id;t.push(i),e[i.module]=e[i.module]||{name:i.module,version:i.version,local:i.local,sets:{}},i.pending_version&&(e[i.module].pending_version=i.pending_version),e[i.module].sets[i.name]=i,RED.events.emit("registry:node-set-added",i)},removeNodeSet:function(i){for(var a=n[i],s=0;s<a.types.length;s++)delete o[a.types[s]];delete n[i];for(var r=0;r<t.length;r++)if(t[r].id===i){t.splice(r,1);break}return delete e[a.module].sets[a.name],0===Object.keys(e[a.module].sets).length&&delete e[a.module],RED.events.emit("registry:node-set-removed",a),a},getNodeSet:function(e){return n[e]},enableNodeSet:function(e){var t=n[e];t.enabled=!0,RED.events.emit("registry:node-set-enabled",t)},disableNodeSet:function(e){var t=n[e];t.enabled=!1,RED.events.emit("registry:node-set-disabled",t)},registerNodeType:function(e,t){if(i[e]=t,t.type=e,"subflows"!=t.category){t.set=n[o[e]],n[o[e]].added=!0,n[o[e]].enabled=!0;var a;a="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]=a+":"+e[0]);var n=RED._.apply(null,e);return n===e[0]&&(n=t),n}}RED.events.emit("registry:node-type-added",e)},removeNodeType:function(e){if("subflow:"!=e.substring(0,8))throw new Error("this api is subflow only. called with:",e);delete i[e],RED.events.emit("registry:node-type-removed",e)},getNodeType:function(e){return i[e]}};return a}();return{init:function(){RED.events.on("registry:node-type-added",function(e){S.getNodeType(e);var t=[];if(RED.nodes.eachNode(function(n){"unknown"===n.type&&n.name===e&&t.push(n)}),RED.nodes.eachConfig(function(n){"unknown"===n.type&&n.name===e&&t.push(n)}),t.length>0){var n=[];t.forEach(function(e){R.hasOwnProperty(e.id)?delete R[e.id]:E.splice(E.indexOf(e),1),n.push(f(e))}),RED.view.redraw(!0);var o={};b(n,!1)[0].forEach(function(e){o[e.id]=e}),RED.nodes.eachLink(function(e){o.hasOwnProperty(e.source.id)&&(e.source=o[e.source.id]),o.hasOwnProperty(e.target.id)&&(e.target=o[e.target.id])}),RED.view.redraw(!0)}})},registry:S,setNodeList:S.setNodeList,getNodeSet:S.getNodeSet,addNodeSet:S.addNodeSet,removeNodeSet:S.removeNodeSet,enableNodeSet:S.enableNodeSet,disableNodeSet:S.disableNodeSet,registerType:S.registerNodeType,getType:S.getNodeType,convertNode:f,add:o,remove:r,clear:function(){E=[],k=[],R={},_=[],Object.keys(T).forEach(function(e){RED.subflow.removeSubflow(e)}),Object.keys(x).forEach(function(e){RED.workspaces.remove(x[e])}),w=null,RED.nodes.dirty(!0),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.sidebar.config.refresh()},addLink:a,removeLink:function(e){var t=k.indexOf(e);-1!=t&&k.splice(t,1)},addWorkspace:d,removeWorkspace:function(e){delete x[e],_.splice(_.indexOf(e),1);var t,n,o=[],i=[];for(t=0;t<E.length;t++)(n=E[t]).z==e&&o.push(n);for(t in R)R.hasOwnProperty(t)&&(n=R[t]).z==e&&o.push(n);for(t=0;t<o.length;t++){var a=r(o[t].id);i=i.concat(a.links)}return{nodes:o,links:i}},getWorkspaceOrder:function(){return _},setWorkspaceOrder:function(e){_=e},workspace:function(e){return x[e]},addSubflow:l,removeSubflow:function(e){delete T[e.id],S.removeNodeType("subflow:"+e.id)},subflow:c,subflowContains:p,eachNode:function(e){for(var t=0;t<E.length;t++)e(E[t])},eachLink:function(e){for(var t=0;t<k.length;t++)e(k[t])},eachConfig:function(e){for(var t in R)R.hasOwnProperty(t)&&e(R[t])},eachSubflow:function(e){for(var t in T)T.hasOwnProperty(t)&&e(T[t])},eachWorkspace:function(e){for(var t=0;t<_.length;t++)e(x[_[t]])},node:s,version:function(e){if(void 0===e)return C;C=e},originalFlow:function(e){if(void 0===e)return D;D=e},filterNodes:function(e){for(var t=[],n=0;n<E.length;n++){var o=E[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<k.length;n++){var o=k[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:b,getAllFlowNodes:function(e){var t={};t[e.id]=!0;for(var n=[e],o=[e];0!==o.length;)for(var i=o.shift(),a=k.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:g,createCompleteNodeSet:function(e){void 0===e&&(e=!0);var t,n=[];for(t=0;t<_.length;t++)"tab"==x[_[t]].type&&n.push(u(x[_[t]]));for(t in T)T.hasOwnProperty(t)&&n.push(h(T[t]));for(t in R)R.hasOwnProperty(t)&&n.push(f(R[t],e));for(t=0;t<E.length;t++){var o=E[t];n.push(f(o,e))}return n},updateConfigNodeUsers:y,id:t,dirty:function(t){if(null==t)return O;e(t)}}}(),RED.history=function(){function e(t){var n,o,i,a={};if(t){if("multi"==t.t)for(n=t.events.length-1;n>=0;n--)e(t.events[n]);else if("replace"==t.t)RED.nodes.clear(),RED.nodes.import(t.config)[0].forEach(function(e){t.changed[e.id]&&(e.changed=!0)}),RED.nodes.version(t.rev);else if("add"==t.t){if(t.nodes)for(n=0;n<t.nodes.length;n++)(o=RED.nodes.node(t.nodes[n])).z&&(a[o.z]=!0),RED.nodes.remove(t.nodes[n]);if(t.links)for(n=0;n<t.links.length;n++)RED.nodes.removeLink(t.links[n]);if(t.workspaces)for(n=0;n<t.workspaces.length;n++)RED.nodes.removeWorkspace(t.workspaces[n].id),RED.workspaces.remove(t.workspaces[n]);if(t.subflows)for(n=0;n<t.subflows.length;n++)RED.nodes.removeSubflow(t.subflows[n]),RED.workspaces.remove(t.subflows[n]);if(t.subflow&&(t.subflow.instances&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),t.subflow.hasOwnProperty("changed")&&(i=RED.nodes.subflow(t.subflow.id))&&(i.changed=t.subflow.changed)),t.removedLinks)for(n=0;n<t.removedLinks.length;n++)RED.nodes.addLink(t.removedLinks[n])}else if("delete"==t.t){if(t.workspaces)for(n=0;n<t.workspaces.length;n++)RED.nodes.addWorkspace(t.workspaces[n]),RED.workspaces.add(t.workspaces[n]);if(t.subflow&&t.subflow.subflow&&RED.nodes.addSubflow(t.subflow.subflow),t.subflowInputs&&t.subflowInputs.length>0&&((i=RED.nodes.subflow(t.subflowInputs[0].z)).in.push(t.subflowInputs[0]),i.in[0].dirty=!0),t.subflowOutputs&&t.subflowOutputs.length>0)for(i=RED.nodes.subflow(t.subflowOutputs[0].z),t.subflowOutputs.sort(function(e,t){return e.i-t.i}),n=0;n<t.subflowOutputs.length;n++){var s=t.subflowOutputs[n];i.out.splice(s.i,0,s);for(var r=s.i+1;r<i.out.length;r++)i.out[r].i++,i.out[r].dirty=!0;RED.nodes.eachLink(function(e){e.source.type=="subflow:"+i.id&&e.sourcePort>=s.i&&e.sourcePort++})}if(t.subflow&&t.subflow.hasOwnProperty("instances")&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),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[n]&&t.node._def.defaults[n].type){var c=RED.nodes.node(t.node[n]);c&&c.users.splice(c.users.indexOf(t.node),1);var p=RED.nodes.node(t.changes[n]);p&&p.users.push(t.node)}t.node[n]=t.changes[n]}if(t.subflow)t.subflow.hasOwnProperty("inputCount")&&(t.node.in.length>t.subflow.inputCount?t.node.in.splice(t.subflow.inputCount):t.subflow.inputs.length>0&&(t.node.in=t.node.in.concat(t.subflow.inputs))),t.subflow.hasOwnProperty("outputCount")&&(t.node.out.length>t.subflow.outputCount?t.node.out.splice(t.subflow.outputCount):t.subflow.outputs.length>0&&(t.node.out=t.node.out.concat(t.subflow.outputs))),t.subflow.hasOwnProperty("instances")&&t.subflow.instances.forEach(function(e){var t=RED.nodes.node(e.id);t&&(t.changed=e.changed,t.dirty=!0)}),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)});else{var u;if(t.outputMap){u={};for(var f in 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()}}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(){e(t.pop())},peek:function(){return t[t.length-1]}}}(),RED.validators={number:function(e){return function(t){return e&&(""===t||void 0===t)||""!==t&&!isNaN(t)}},regex:function(e){return function(t){return e.test(t)}},typedInput:function(e,t){return function(n){var o=$("#node-"+(t?"config-":"")+"input-"+e).val()||this[e];if("json"===o)try{return JSON.parse(n),!0}catch(e){return!1}else{if("msg"===o||"flow"===o||"global"===o)return RED.utils.validatePropertyExpression(n);if("num"===o)return/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/.test(n)}return!0}}},RED.utils=function(){function e(e){return e.replace(/\r?\n/g,"&crarr;").replace(/\t/g,"&rarr;")}function t(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function n(n){var o;if(Array.isArray(n))o=$('<span class="debug-message-object-value debug-message-type-meta"></span>').html("array["+n.length+"]");else if(null===n)o=$('<span class="debug-message-object-value debug-message-type-null">null</span>');else if("object"==typeof n)o=n.hasOwnProperty("type")&&"Buffer"===n.type&&n.hasOwnProperty("data")?$('<span class="debug-message-object-value debug-message-type-meta"></span>').html("buffer["+n.length+"]"):n.hasOwnProperty("type")&&"array"===n.type&&n.hasOwnProperty("data")?$('<span class="debug-message-object-value debug-message-type-meta"></span>').html("array["+n.length+"]"):$('<span class="debug-message-object-value debug-message-type-meta">object</span>');else if("string"==typeof n){var i;i=n.length>30?t(n.substring(0,30))+"&hellip;":t(n),o=$('<span class="debug-message-object-value debug-message-type-string"></span>').html('"'+e(i)+'"')}else o=$('<span class="debug-message-object-value debug-message-type-other"></span>').text(""+n);return o}function o(e,t,n){e.addClass("debug-message-expandable"),e.click(function(e){var n=$(this).parent();n.hasClass("collapsed")?(t&&!n.hasClass("built")&&(t(),n.addClass("built")),n.removeClass("collapsed")):n.addClass("collapsed"),e.preventDefault()}),n&&e.click()}function i(e,t,n,o,i,a){p.hasOwnProperty(t)||(p[t]={});var s=$('<span class="debug-message-tools"></span>').appendTo(e),r=$('<span class="debug-message-tools-copy button-group"></span>').appendTo(s);if(n)var d=$('<button class="editor-button editor-button-small"><i class="fa fa-terminal"></i></button>').appendTo(r).click(function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(n,d,"clipboard.copyMessagePath")});var c=$('<button class="editor-button editor-button-small"><i class="fa fa-clipboard"></i></button>').appendTo(r).click(function(e){e.preventDefault(),e.stopPropagation(),RED.clipboard.copyText(o,c,"clipboard.copyMessageValue")});if(""!==a){var u=p[t].h