1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00
2018-08-04 22:23:06 +01:00

16 lines
482 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

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

/**
* Copyright 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=function(){function s(e,i){i=i||function(){};var t,n=/<!-- --- \[red-module:(\S+)\] --- -->/.exec(e.trim());t=n?n[1]:"unknown";try{var a=!1,s=$("<div>"+e+"</div>");s.find("script").each(function(e,t){var n=$(t).attr("src");if(n&&!/^\s*(https?:|\/|\.)/.test(n)){$(t).remove();var o=document.createElement("script");o.onload=function(){$("body").append(s),i()},$("body").append(o),o.src=RED.settings.apiRootUrl+n,a=!0}}),a||($("body").append(s),i())}catch(e){RED.notify(RED._("notification.errors.failedToAppendNode",{module:t,error:e.toString()}),{type:"error",timeout:1e4}),console.log("["+t+"] "+e.toString()),i()}}function r(t){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"icons",success:function(e){RED.nodes.setIconSets(e),t&&t()}})}function t(){$.ajax({headers:{Accept:"text/html"},cache:!1,url:"nodes",success:function(e){var t=e.trim().split(/(?=<!-- --- \[red-module:\S+\] --- -->)/),n=function(){0===t.length?($("body").i18n(),$("#palette > .palette-spinner").hide(),$(".palette-scroll").removeClass("hide"),$("#palette-search").removeClass("hide"),d(function(){RED.settings.theme("projects.enabled",!1)?RED.projects.refresh(function(e){RED.sidebar.info.refresh(),e||(RED.menu.setDisabled("menu-item-projects-open",!0),RED.menu.setDisabled("menu-item-projects-settings",!0),!1===e||RED.projects.showStartup()),o()}):(RED.sidebar.info.refresh(),o())})):s(t.shift(),n)};n()}})}function d(n){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"flows",success:function(e){if(e){var t=window.location.hash;RED.nodes.version(e.rev),RED.nodes.import(e.flows),RED.nodes.dirty(!1),RED.view.redraw(!0),/^#flow\/.+$/.test(t)&&RED.workspaces.show(t.substring(6))}n()}})}function o(){var a={};RED.comms.subscribe("notification/#",function(e,n){var t=e.split("/")[1];if("runtime-deploy"!==t&&"node"!==t){if("project-update"===t)return RED.nodes.clear(),RED.history.clear(),RED.view.redraw(!0),void RED.projects.refresh(function(){d(function(){var e=RED.projects.getActiveProject(),t={"change-branch":RED._("notification.project.change-branch",{project:e.git.branches.local}),"merge-abort":RED._("notification.project.merge-abort"),loaded:RED._("notification.project.loaded",{project:n.project}),updated:RED._("notification.project.updated",{project:n.project}),pull:RED._("notification.project.pull",{project:n.project}),revert:RED._("notification.project.revert",{project:n.project}),"merge-complete":RED._("notification.project.merge-complete")}[n.action];RED.notify("<p>"+t+"</p>"),RED.sidebar.info.refresh()})});if(n.text){n.default=n.text;var o=RED._(n.text,n),i={type:n.type,fixed:void 0===n.timeout,timeout:n.timeout,id:t};"runtime-state"===t&&("missing-types"===n.error?(o+="<ul><li>"+n.types.join("</li><li>")+"</li></ul>",RED.projects.getActiveProject()?i.buttons=[{text:RED._("notification.label.manage-project-dep"),click:function(){a[t].hideNotification(),RED.projects.settings.show("deps")}}]:i.buttons=[{text:RED._("common.label.close"),click:function(){a[t].hideNotification()}}]):"credentials_load_failed"===n.error?RED.settings.theme("projects.enabled",!1)?RED.user.hasPermission("projects.write")&&(i.buttons=[{text:"Setup credentials",click:function(){a[t].hideNotification(),RED.projects.showCredentialsPrompt()}}]):i.buttons=[{text:"Close",click:function(){a[t].hideNotification()}}]:"missing_flow_file"===n.error?RED.user.hasPermission("projects.write")&&(i.buttons=[{text:"Setup project files",click:function(){a[t].hideNotification(),RED.projects.showFilesPrompt()}}]):"missing_package_file"===n.error?RED.user.hasPermission("projects.write")&&(i.buttons=[{text:"Create default package file",click:function(){a[t].hideNotification(),RED.projects.createDefaultPackageFile()}}]):"project_empty"===n.error?RED.user.hasPermission("projects.write")&&(i.buttons=[{text:"No thanks",click:function(){a[t].hideNotification()}},{text:"Create default project files",click:function(){a[t].hideNotification(),RED.projects.createDefaultFileSet()}}]):"git_merge_conflict"===n.error&&(RED.nodes.clear(),RED.sidebar.versionControl.refresh(!0),RED.user.hasPermission("projects.write")&&(i.buttons=[{text:"Show merge conflicts",click:function(){a[t].hideNotification(),RED.sidebar.versionControl.showLocalChanges()}}]))),a.hasOwnProperty(t)?a[t].update(o,i):a[t]=RED.notify(o,i)}else a.hasOwnProperty(t)&&(a[t].close(),delete a[t])}}),RED.comms.subscribe("status/#",function(e,t){var n=e.split("/"),o=RED.nodes.node(n[1]);o&&(t.hasOwnProperty("text")&&"."!==t.text[0]&&(t.text=o._(t.text.toString(),{defaultValue:t.text.toString()})),o.status=t,o.dirty=!0,RED.view.redraw())}),RED.comms.subscribe("notification/node/#",function(e,t){var n,o,i;if("notification/node/added"==e){var a=[];t.forEach(function(e){var t=e.id;RED.nodes.addNodeSet(e),a=a.concat(e.types),RED.i18n.loadNodeCatalog(t,function(){$.get("nodes/"+t,function(e){s(e)})})}),a.length&&(i="<ul><li>"+a.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:a.length})+i,"success")),r()}else if("notification/node/removed"==e){for(n=0;n<t.length;n++)o=t[n],RED.nodes.removeNodeSet(o.id).added&&(i="<ul><li>"+o.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeRemoved",{count:o.types.length})+i,"success"));r()}else"notification/node/enabled"==e?t.types&&(RED.nodes.getNodeSet(t.id).added?(RED.nodes.enableNodeSet(t.id),i="<ul><li>"+t.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeEnabled",{count:t.types.length})+i,"success")):$.get("nodes/"+t.id,function(e){s(e),i="<ul><li>"+t.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeAdded",{count:t.types.length})+i,"success")})):"notification/node/disabled"==e?t.types&&(RED.nodes.disableNodeSet(t.id),i="<ul><li>"+t.types.join("</li><li>")+"</li></ul>",RED.notify(RED._("palette.event.nodeDisabled",{count:t.types.length})+i,"success")):"node/upgraded"==e&&(RED.notify(RED._("palette.event.nodeUpgraded",{module:t.module,version:t.version}),"success"),RED.nodes.registry.setModulePendingUpdated(t.module,t.version));RED.library.loadFlowLibrary()})}function n(){$.get("red/about",function(e){RED.sidebar.info.set('<div style="text-align:center;"><img width="50px" src="red/images/node-red-icon.svg" /></div>'+marked(e)),RED.sidebar.info.show()})}function i(){var e=[];RED.settings.theme("projects.enabled",!1)&&e.push({id:"menu-item-projects-menu",label:"Projects",options:[{id:"menu-item-projects-new",label:"New",disabled:!1,onselect:"core:new-project"},{id:"menu-item-projects-open",label:"Open",disabled:!1,onselect:"core:open-project"},{id:"menu-item-projects-settings",label:"Project Settings",disabled:!1,onselect:"core:show-project-settings"}]}),e.push({id:"menu-item-view-menu",label:RED._("menu.label.view.view"),options:[{id:"menu-item-sidebar",label:RED._("menu.label.sidebar.show"),toggle:!0,onselect:"core:toggle-sidebar",selected:!0},null]}),e.push(null),e.push({id:"menu-item-import",label:RED._("menu.label.import"),options:[{id:"menu-item-import-clipboard",label:RED._("menu.label.clipboard"),onselect:"core:show-import-dialog"},{id:"menu-item-import-library",label:RED._("menu.label.library"),options:[]}]}),e.push({id:"menu-item-export",label:RED._("menu.label.export"),options:[{id:"menu-item-export-clipboard",label:RED._("menu.label.clipboard"),onselect:"core:show-export-dialog"},{id:"menu-item-export-library",label:RED._("menu.label.library"),disabled:!0,onselect:"core:library-export"}]}),e.push(null),e.push({id:"menu-item-search",label:RED._("menu.label.search"),onselect:"core:search"}),e.push(null),e.push({id:"menu-item-config-nodes",label:RED._("menu.label.displayConfig"),onselect:"core:show-config-tab"}),e.push({id:"menu-item-workspace",label:RED._("menu.label.flows"),options:[{id:"menu-item-workspace-add",label:RED._("menu.label.add"),onselect:"core:add-flow"},{id:"menu-item-workspace-edit",label:RED._("menu.label.rename"),onselect:"core:edit-flow"},{id:"menu-item-workspace-delete",label:RED._("menu.label.delete"),onselect:"core:remove-flow"}]}),e.push({id:"menu-item-subflow",label:RED._("menu.label.subflows"),options:[{id:"menu-item-subflow-create",label:RED._("menu.label.createSubflow"),onselect:"core:create-subflow"},{id:"menu-item-subflow-convert",label:RED._("menu.label.selectionToSubflow"),disabled:!0,onselect:"core:convert-to-subflow"}]}),e.push(null),!1!==RED.settings.theme("palette.editable")&&(e.push({id:"menu-item-edit-palette",label:RED._("menu.label.editPalette"),onselect:"core:manage-palette"}),e.push(null)),e.push({id:"menu-item-user-settings",label:RED._("menu.label.settings"),onselect:"core:show-user-settings"}),e.push(null),e.push({id:"menu-item-keyboard-shortcuts",label:RED._("menu.label.keyboardShortcuts"),onselect:"core:show-help"}),e.push({id:"menu-item-help",label:RED.settings.theme("menu.menu-item-help.label",RED._("menu.label.help")),href:RED.settings.theme("menu.menu-item-help.url","http://nodered.org/docs")}),e.push({id:"menu-item-node-red-version",label:"v"+RED.settings.version,onselect:"core:show-about"}),RED.view.init(),RED.userSettings.init(),RED.user.init(),RED.library.init(),RED.keyboard.init(),RED.palette.init(),!1!==RED.settings.theme("palette.editable")?RED.palette.editor.init():console.log("Palette editor disabled"),RED.sidebar.init(),RED.settings.theme("projects.enabled",!1)?RED.projects.init():console.log("Projects disabled"),RED.subflow.init(),RED.workspaces.init(),RED.clipboard.init(),RED.search.init(),RED.editor.init(),RED.diff.init(),RED.menu.init({id:"btn-sidemenu",options:e}),RED.deploy.init(RED.settings.theme("deployButton",null)),RED.notifications.init(),RED.actions.add("core:show-about",n),RED.nodes.init(),RED.comms.connect(),$("#main-container").show(),$(".header-toolbar").show(),$.ajax({headers:{Accept:"application/json"},cache:!1,url:"nodes",success:function(e){RED.nodes.setNodeList(e),RED.i18n.loadNodeCatalogs(function(){r(t)})}})}var a=!1;return{init:function(e){if(a)throw new Error("RED already initialised");a=!0,ace.require("ace/ext/language_tools"),(e=e||{}).apiRootUrl=e.apiRootUrl||"",e.apiRootUrl&&!/\/$/.test(e.apiRootUrl)&&(e.apiRootUrl=e.apiRootUrl+"/"),RED.i18n.init(e,function(){RED.settings.init(e,i)})}}}();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=function(){var a;return{init:function(e,t){a=e.apiRootUrl||"",i18n.init({resGetPath:a+"locales/__ns__?lng=__lng__",dynamicLoad:!1,load:"current",ns:{namespaces:["editor","node-red","jsonata","infotips"],defaultNs:"editor"},fallbackLng:["en-US"],useCookie:!1},function(){t()}),RED._=function(){return i18n.t.apply(null,arguments)}},loadNodeCatalog: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:a+"nodes/"+n+"/messages?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:a+"nodes/messages?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(o,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=""}RED.settings.apiRootUrl=o.apiRootUrl,$.ajaxSetup({beforeSend:function(e,t){if(!/^\s*(https?:|\/|\.)/.test(t.url)){o.apiRootUrl&&(t.url=o.apiRootUrl+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 a,s=null,l=null,c=null,p=10,u={},f=!1,h=0,g=!1;return{connect:function r(){var e;if(g=!0,RED.settings.apiRootUrl){var t=/^(https?):\/\/(.*)$/.exec(RED.settings.apiRootUrl);t&&(console.log(t),e="ws"+("https"===t[1]?"s":"")+"://"+t[2]+"comms")}else{var n=location.hostname,o=location.port;0!==o.length&&(n=n+":"+o),n=(n+=document.location.pathname)+("/"==n.slice(-1)?"":"/")+"comms",e="ws"+("https:"==document.location.protocol?"s":"")+"://"+n}var i=RED.settings.get("auth-tokens");function d(){for(var e in u)u.hasOwnProperty(e)&&a.send(JSON.stringify({subscribe:e}))}f=null!=i,(a=new WebSocket(e)).onopen=function(){h=0,s&&(l=setTimeout(function(){s.close(),s=null},1e3)),f?a.send(JSON.stringify({auth:i.access_token})):d()},a.onmessage=function(e){for(var t=JSON.parse(e.data),n=0;n<t.length;n++){var o=t[n];if(f&&o.auth)"ok"===o.auth?(f=!1,d()):"fail"===o.auth&&(g=!1,RED.user.login({updateMenu:!0},function(){r()}));else if(o.topic)for(var i in u)if(u.hasOwnProperty(i)&&new RegExp("^"+i.replace(/([\[\]\?\(\)\\\\$\^\*\.|])/g,"\\$1").replace(/\+/g,"[^/]+").replace(/\/#$/,"(/.*)?")+"$").test(o.topic)){var a=u[i];if(a)for(var s=0;s<a.length;s++)a[s](o.topic,o.data)}}},a.onclose=function(){g&&(l&&(clearTimeout(l),l=null),++h<10?(setTimeout(r,1e3),5<h&&null==s&&(s=RED.notify(RED._("notification.errors.lostConnection"),"error",!0))):h<20?setTimeout(r,2e3):(p=60,c=setInterval(function(){if(0==--p)s.update(RED._("notification.errors.lostConnection")),clearInterval(c),r();else{var e=RED._("notification.errors.lostConnectionReconnect",{time:p})+' <a href="#">'+RED._("notification.errors.lostConnectionTry")+"</a>";s.update(e),$(s).find("a").click(function(e){e.preventDefault(),s.update(RED._("notification.errors.lostConnection")),clearInterval(c),r()})}},1e3)))}},subscribe:function(e,t){null==u[e]&&(u[e]=[]),u[e].push(t),a&&1==a.readyState&&a.send(JSON.stringify({subscribe:e}))},unsubscribe:function(e,t){if(u[e]){for(var n=0;n<u[e].length;n++)if(u[e][n]===t){u[e].splice(n,1);break}0===u[e].length&&delete u[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(),(o=(n=e)?n.split("-")[0]:"")&&!(o.length<2)&&["iw","he","ar","fa","ur"].some(function(e){return e===o})){var t=e.split("-");return{lang:t[0],country:t[1]?t[1]:""}}var n,o;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,"")}},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)}},m=(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 b(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;m||(m=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(m)},t.onmouseup=function(e){w(e.target),t.dispatchEvent(m)};return w(t),!0}function w(e){var t=e.textContent||"",n=document.getSelection();if(0===t.length||!n||n.rangeCount<=0)e.dispatchEvent(m);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=b(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(m)}}return{getHtml:function(e,t,n,o,i){return b(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 m(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=m(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(m(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 m,b,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&&(m=Y(),E[i.id]=m,i.id=m),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&&(m=Y(),i.id=m),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],(b=X.getNodeType(i.type))&&"config"==b.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]||(n?(null===C&&(C=RED.workspaces.add(null,!0),D.push(C)),i.z=C.id):i.z=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:{}},b.defaults)b.defaults.hasOwnProperty(w)&&(y[w]=i[w],y._config[w]=JSON.stringify(i[w]));if(b.hasOwnProperty("credentials")&&i.hasOwnProperty("credentials"))for(w in y.credentials={},b.credentials)b.credentials.hasOwnProperty(w)&&i.credentials.hasOwnProperty(w)&&(y.credentials[w]=i.credentials[w]);y.label=b.label,y._def=b,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&&(!(b=X.getNodeType(i.type))||"config"!=b.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]||(n?(null===C&&(C=RED.workspaces.add(null,!0),D.push(C)),P.z=C.id):P.z=p)),P.id=Y()}else P.id=i.id,null!=P.z&&(K[P.z]||x[P.z])||(n?(null===C&&(C=RED.workspaces.add(null,!0),D.push(C)),P.z=C.id):P.z=p);if(P.type=i.type,P._def=b,"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 U=i.wires[B]instanceof Array?i.wires[B]:[i.wires[B]],J=0;J<U.length;J++)if(_.hasOwnProperty(U[J]))if(i.z===_[U[J]].z){var V={source:i,sourcePort:B,target:_[U[J]]};Z(V),j.push(V)}else console.log("Warning: dropping link that crosses tabs:",i.id,"->",_[U[J]].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:m,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?"config-":"")+"input-"+n).val()||this[n];if("json"===t)try{return JSON.parse(e),!0}catch(e){return!1}else{if("msg"===t||"flow"===t||"global"===t)return RED.utils.validatePropertyExpression(e);if("num"===t)return/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/.test(e)}return!0}}},RED.utils=function(){function P(e){return e.replace(/\r?\n/g,"&crarr;").replace(/\t/g,"&rarr;")}function N(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function I(e){var t;if(Array.isArray(e))t=$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("array["+e.length+"]");else if(null===e)t=$('<span class="debug-message-object-value debug-message-type-null">null</span>');else if("object"==typeof e)t=e.hasOwnProperty("type")&&"Buffer"===e.type&&e.hasOwnProperty("data")?$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("buffer["+e.length+"]"):e.hasOwnProperty("type")&&"array"===e.type&&e.hasOwnProperty("data")?$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("array["+e.length+"]"):e.hasOwnProperty("type")&&"function"===e.type?$('<span class="debug-message-object-value debug-message-type-meta"></span>').text("function"):e.hasOwnProperty("type")&&"number"===e.type?$('<span class="debug-message-object-value debug-message-type-number"></span>').text(e.data):$('<span class="debug-message-object-value debug-message-type-meta">object</span>');else if("string"==typeof e){var n;n=30<e.length?N(e.substring(0,30))+"&hellip;":N(e),t=$('<span class="debug-message-object-value debug-message-type-string"></span>').html('"'+P(n)+'"')}else t="number"==typeof e?$('<span class="debug-message-object-value debug-message-type-number"></span>').text(""+e):$('<span class="debug-message-object-value debug-message-type-other"></span>').text(""+e);return t}function A(n,o,i,e){n.addClass("debug-message-expandable"),n.prop("toggle",function(){return function(e){var t=n.parent();if(t.hasClass("collapsed")){if(e)return o&&!t.hasClass("built")&&(o(),t.addClass("built")),t.removeClass("collapsed"),!0}else if(!e)return t.addClass("collapsed"),!0;return!1}}),n.click(function(e){var t=!$(this).parent().hasClass("collapsed");$(this).prop("toggle")(!t)&&i&&i(!t),e.preventDefault()}),e&&n.click()}var z={},r={};function M(e,t,n,o){if(t&&0<t.length){if(""===e&&void 0===n)return!0;for(var i=0;i<t.length;i++){var a=t[i];if(0===a.indexOf(e)&&("."===a[e.length]||"["===a[e.length])){if(void 0===n||"["!==a[e.length])return!0;var s=a.substring(e.length),r=/\[(\d+)\]/.exec(s);if(r){var d=parseInt(r[1]);return n<=d&&d<=o}}}}return!1}function B(e,t,n,o,i,a){var s=r[n]&&r[n][o]&&r[n][o].number||a||"dec";i?(s="dec"===s?13===t.toString().length&&t<=2147483647e3?"dateMS":10===t.toString().length&&t<=2147483647?"dateS":"hex":"dateMS"===s||"dateS"==s?"hex":"dec",r[n]=r[n]||{},r[n][o]=r[n][o]||{},r[n][o].number=s):void 0!==a&&(r[n]=r[n]||{},r[n][o]=r[n][o]||{},r[n][o].number=s),"dec"===s?e.text(""+t):"dateMS"===s?e.text(new Date(t).toISOString()):"dateS"===s?e.text(new Date(1e3*t).toISOString()):"hex"===s&&e.text("0x"+t.toString(16))}function U(e,t,n,o,i){var a=r[n]&&r[n][o]&&r[n][o].buffer||"raw";i&&(a="raw"===a?"string":"raw",r[n]=r[n]||{},r[n][o]=r[n][o]||{},r[n][o].buffer=a),"raw"===a?(t.text("raw"),e.removeClass("debug-message-buffer-string").addClass("debug-message-buffer-raw")):"string"===a&&(t.text("string"),e.addClass("debug-message-buffer-string").removeClass("debug-message-buffer-raw"))}function J(e){var t=e.length;if(0===t)throw new Error("Invalid property expression: zero-length");for(var n,o,i=[],a=0,s=!1,r=!1,d=0;d<t;d++){var l=e[d];if(s){if(l===n){if(d-a==0)throw new Error("Invalid property expression: zero-length string at position "+a);if(i.push(e.substring(a,d)),r&&!/\]/.test(e[d+1]))throw new Error("Invalid property expression: unexpected array expression at position "+a);if(!r&&d+1!==t&&!/[\[\.]/.test(e[d+1]))throw new Error("Invalid property expression: unexpected "+e[d+1]+" expression at position "+(d+1));a=d+1,s=!1}}else if("'"===l||'"'===l){if(d!=a)throw new Error("Invalid property expression: unexpected "+l+" at position "+d);s=!0,n=l,a=d+1}else if("."===l){if(0===d)throw new Error("Invalid property expression: unexpected . at position 0");if(a!=d&&(o=e.substring(a,d),/^\d+$/.test(o)?i.push(parseInt(o)):i.push(o)),d===t-1)throw new Error("Invalid property expression: unterminated expression");if(!/[a-z0-9\$\_]/i.test(e[d+1]))throw new Error("Invalid property expression: unexpected "+e[d+1]+" at position "+(d+1));a=d+1}else if("["===l){if(0===d)throw new Error("Invalid property expression: unexpected "+l+" at position "+d);if(a!=d&&i.push(e.substring(a,d)),d===t-1)throw new Error("Invalid property expression: unterminated expression");if(!/["'\d]/.test(e[d+1]))throw new Error("Invalid property expression: unexpected "+e[d+1]+" at position "+(d+1));a=d+1,r=!0}else if("]"===l){if(!r)throw new Error("Invalid property expression: unexpected "+l+" at position "+d);if(a!=d){if(o=e.substring(a,d),!/^\d+$/.test(o))throw new Error("Invalid property expression: unexpected array expression at position "+a);i.push(parseInt(o))}a=d+1,r=!1}else if(" "===l)throw new Error("Invalid property expression: unexpected ' ' at position "+d)}if(r||s)throw new Error("Invalid property expression: unterminated expression");return a<t&&i.push(e.substring(a)),i}function V(e,t){var n,o=null;return"string"==typeof t?(0===t.indexOf("msg.")&&(t=t.substring(4)),n=J(t)):n=t,n.reduce(function(e,t){return void 0===(o=void 0!==e[t]?e[t]:void 0)&&e.hasOwnProperty("type")&&e.hasOwnProperty("data")&&e.hasOwnProperty("length")&&(o=void 0!==e.data[t]?e.data[t]:void 0),o},e),o}function i(e){var t={module:"",file:""};if(e){var n=e.indexOf("/");-1!==n?(t.module=e.slice(0,n),t.file=e.slice(n+1)):t.file=e}return t}function o(t,e){var n;if(e&&"subflow"===e.type)n="node-red/subflow.png";else if("function"==typeof t.icon)try{n=t.icon.call(e)}catch(e){console.log("Definition error: "+t.type+".icon",e),n="arrow-in.png"}else n=t.icon;var o=i(n);return o.module||(t.set?o.module=t.set.module:o.module="node-red"),o}function a(e){var t=RED.nodes.getIconSets()[e.module];return!(!t||-1===t.indexOf(e.file))}var d={};return{createObjectElement:function r(n,e){var d,t,o,l,c,p,u=(e=e||{}).key,f=e.typeHint,i=e.hideKey,h=e.path,g=e.sourceId,v=e.rootPath,m=e.expandPaths,b=e.ontoggle,y=e.exposeApi,w={};void 0!==h&&void 0!==v&&(p=h.substring(v.length+("."===h[v.length]?1:0)));var D=$('<span class="debug-message-element"></span>');if(D.collapse=function(){D.find(".debug-message-expandable").parent().addClass("collapsed")},l=$('<span class="debug-message-row"></span>').appendTo(D),g&&function(n,o,t,i,e,a){z.hasOwnProperty(o)||(z[o]={});var s=$('<span class="debug-message-tools"></span>').appendTo(n),r=$('<span class="debug-message-tools-copy button-group"></span>').appendTo(s);if(t)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(t,d,"clipboard.copyMessagePath")});var l=$('<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(i,l,"clipboard.copyMessageValue")});if(void 0!==a&&""!==a){var c=z[o].hasOwnProperty(a);$('<button class="editor-button editor-button-small debug-message-tools-pin"><i class="fa fa-map-pin"></i></button>').appendTo(s).click(function(e){if(e.preventDefault(),e.stopPropagation(),z[o].hasOwnProperty(a))delete z[o][a],$(this).removeClass("selected"),n.removeClass("debug-message-row-pinned");else{var t="$"+("["===a[0]?"":".")+a;z[o][a]=J(t),$(this).addClass("selected"),n.addClass("debug-message-row-pinned")}}).toggleClass("selected",c),n.toggleClass("debug-message-row-pinned",c)}}(l,g,h,n,0,p),u)i||($('<span class="debug-message-object-key"></span>').text(u).appendTo(l),$("<span>: </span>").appendTo(l));else if(D.addClass("debug-message-top-level"),g){var a=z[g];if(m=[],a){for(var s in a)if(a.hasOwnProperty(s))try{void 0!==V({$:n},a[s])&&m.push(s)}catch(e){}m.sort()}D.clearPinned=function(){D.find(".debug-message-row-pinned").removeClass("debug-message-row-pinned"),z[g]={}}}o=$('<span class="debug-message-object-value"></span>').appendTo(l);var E=Array.isArray(n),R=!1;if(n&&"object"==typeof n&&n.hasOwnProperty("type")&&n.hasOwnProperty("data")&&(n.__enc__&&"array"===n.type||"Buffer"===n.type)&&(R=E=!0),null==n)$('<span class="debug-message-type-null">'+n+"</span>").appendTo(o);else if(n.__enc__&&"number"===n.type)t=$('<span class="debug-message-type-number debug-message-object-header"></span>').text(n.data).appendTo(o);else if("function"===f||n.__enc__&&"function"===n.type)t=$('<span class="debug-message-type-meta debug-message-object-header"></span>').text("function").appendTo(o);else if("internal"===f||n.__enc__&&"internal"===n.type)t=$('<span class="debug-message-type-meta debug-message-object-header"></span>').text("[internal]").appendTo(o);else if("string"==typeof n)/[\t\n\r]/.test(n)&&(D.addClass("collapsed"),$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(l),A(l,function(){$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').text(f||"string").appendTo(l);var e=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(D);$('<pre class="debug-message-type-string"></pre>').text(n).appendTo(e)},function(e){b&&b(h,e)},M(p,m))),t=$('<span class="debug-message-type-string debug-message-object-header"></span>').html('"'+P(N(n))+'"').appendTo(o),/^#[0-9a-f]{6}$/i.test(n)&&$('<span class="debug-message-type-string-swatch"></span>').css("backgroundColor",n).appendTo(t);else if("number"==typeof n)t=$('<span class="debug-message-type-number"></span>').appendTo(o),Number.isInteger(n)&&0<=n&&(t.addClass("debug-message-type-number-toggle"),t.click(function(e){e.preventDefault(),B($(this),n,g,h,!0)})),B(t,n,g,h,!1,"hex"===f?"hex":void 0);else if(E){D.addClass("collapsed");var x=n.length;if(f){var T=/\[(\d+)\]/.exec(f);T&&(x=parseInt(T[1]))}var _=n,k="array";R?(_=n.data,void 0===x&&(x=_.length),_.__enc__&&(_=_.data),k=n.type.toLowerCase()):/buffer/.test(f)&&(k="buffer");var j=_.length;if(0<x){$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(l);var C=$('<div class="debug-message-array-rows"></div>').appendTo(D);D.addClass("debug-message-buffer-raw")}if(u)c=$('<span class="debug-message-type-meta"></span>').text(f||k+"["+x+"]").appendTo(o);else{c=$('<span class="debug-message-object-header"></span>').appendTo(o),$("<span>[ </span>").appendTo(c);var S=Math.min(x,10);for(d=0;d<S;d++)I(_[d]).appendTo(c),d<S-1&&$("<span>, </span>").appendTo(c);S<x&&$("<span> &hellip;</span>").appendTo(c),0===S&&$('<span class="debug-message-type-meta">empty</span>').appendTo(c),$("<span> ]</span>").appendTo(c)}0<x&&A(l,function(){if(u||(c=$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').text(f||k+"["+x+"]").appendTo(l)),"buffer"===k){var e=$('<div class="debug-message-string-rows"></div>').appendTo(D),t=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(e),n="";try{n=String.fromCharCode.apply(null,new Uint16Array(_))}catch(e){console.log(e)}$('<pre class="debug-message-type-string"></pre>').text(n).appendTo(t);var o=$('<span class="debug-message-buffer-opts"></span>').appendTo(c),i=$('<a href="#"></a>').addClass("selected").text("raw").appendTo(o).click(function(e){e.preventDefault(),e.stopPropagation(),U(D,$(this),g,h,!0)});U(D,i,g,h,!1)}var a;if(j<=10)for(d=0;d<j;d++)a=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(C),w[h+"["+d+"]"]=r(_[d],{key:""+d,typeHint:"buffer"===k&&"hex",hideKey:!1,path:h+"["+d+"]",sourceId:g,rootPath:v,expandPaths:m,ontoggle:b,exposeApi:y}).appendTo(a);else{for(d=0;d<j;d+=10){var s=d;a=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(C),l=$("<span></span>").appendTo(a),$('<i class="fa fa-caret-right debug-message-object-handle"></i> ').appendTo(l),A(l,function(){var n=s,o=Math.min(j-1,s+9),i=a;return function(){for(var e=n;e<=o;e++){var t=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(i);w[h+"["+e+"]"]=r(_[e],{key:""+e,typeHint:"buffer"===k&&"hex",hideKey:!1,path:h+"["+e+"]",sourceId:g,rootPath:v,expandPaths:m,ontoggle:b,exposeApi:y}).appendTo(t)}}}(),function(){var t=t+"["+d+"]";return function(e){b&&b(t,e)}}(),M(p,m,s,Math.min(j-1,s+9))),$('<span class="debug-message-object-key"></span>').html("["+s+" &hellip; "+Math.min(j-1,s+9)+"]").appendTo(l)}j<x&&$('<div class="debug-message-object-entry collapsed"><span class="debug-message-object-key">['+j+" &hellip; "+x+"]</span></div>").appendTo(C)}},function(e){b&&b(h,e)},M(p,m))}else if("object"==typeof n){D.addClass("collapsed");var O=Object.keys(n);if((u||0<O.length)&&($('<i class="fa fa-caret-right debug-message-object-handle"></i> ').prependTo(l),A(l,function(){for(u||$('<span class="debug-message-type-meta debug-message-object-type-header"></span>').text("object").appendTo(l),d=0;d<O.length;d++){var e=$('<div class="debug-message-object-entry collapsed"></div>').appendTo(D),t=h;void 0!==t&&(/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(O[d])?t+=(0<t.length?".":"")+O[d]:t+='["'+O[d].replace(/"/,'\\"')+'"]'),w[t]=r(n[O[d]],{key:O[d],typeHint:!1,hideKey:!1,path:t,sourceId:g,rootPath:v,expandPaths:m,ontoggle:b,exposeApi:y}).appendTo(e)}0===O.length&&$('<div class="debug-message-object-entry debug-message-type-meta collapsed"></div>').text("empty").appendTo(D)},function(e){b&&b(h,e)},M(p,m))),u)$('<span class="debug-message-type-meta"></span>').text("object").appendTo(o);else{c=$('<span class="debug-message-object-header"></span>').appendTo(o),$("<span>{ </span>").appendTo(c);var L=Math.min(O.length,5);for(d=0;d<L;d++)$('<span class="debug-message-object-key"></span>').text(O[d]).appendTo(c),$("<span>: </span>").appendTo(c),I(n[O[d]]).appendTo(c),d<L-1&&$("<span>, </span>").appendTo(c);O.length>L&&$("<span> &hellip;</span>").appendTo(c),0===L&&$('<span class="debug-message-type-meta">empty</span>').appendTo(c),$("<span> }</span>").appendTo(c)}}else $('<span class="debug-message-type-other"></span>').text(""+n).appendTo(o);return y&&D.prop("expand",function(){return function(e,t){if(h===e)l.prop("toggle")&&l.prop("toggle")(t);else if(w[e]&&w[e].prop("expand"))w[e].prop("expand")(e,t);else for(var n in w)if(w.hasOwnProperty(n)&&0===e.indexOf(n)){w[n].prop("expand")&&w[n].prop("expand")(e,t);break}}}),D},getMessageProperty:V,normalisePropertyExpression:J,validatePropertyExpression:function(e){try{return J(e),!0}catch(e){return!1}},separateIconPath:i,getDefaultNodeIcon:o,getNodeIcon:function(e,t){if("config"===e.category)return RED.settings.apiRootUrl+"icons/node-red/cog.png";if(t&&"tab"===t.type)return RED.settings.apiRootUrl+"icons/node-red/subflow.png";if(t&&"unknown"===t.type)return RED.settings.apiRootUrl+"icons/node-red/alert.png";if(t&&t.icon&&a(n=i(t.icon)))return RED.settings.apiRootUrl+"icons/"+t.icon;var n=o(e,t);return"subflows"!==e.category||a(n)?RED.settings.apiRootUrl+"icons/"+n.module+"/"+n.file:RED.settings.apiRootUrl+"icons/node-red/subflow.png"},getNodeLabel:function(t,n){var o;if(n=n||"","tab"===t.type)o=t.label||n;else{o=t._def.label;try{o=("function"==typeof o?o.call(t):o)||n}catch(e){console.log("Definition error: "+t.type+".label",e),o=n}}return RED.text.bidi.enforceTextDirectionWithUCC(o)},getNodeColor:function(e,t){var n=t.color,o=RED.settings.theme("palette.theme")||[];if(0<o.length){if(!d.hasOwnProperty(e))for(var i=o.length,a=0;a<i;a++){var s=o[a];if((!s.hasOwnProperty("category")||(s.hasOwnProperty("_category")||(s._category=new RegExp(s.category)),s._category.test(t.category)))&&(!s.hasOwnProperty("type")||(s.hasOwnProperty("_type")||(s._type=new RegExp(s.type)),s._type.test(e)))){d[e]=s.color||t.color;break}}n=d[e]}return n},addSpinnerOverlay:function(e,t){var n=$('<div class="projects-dialog-spinner "><img src="red/images/spin.svg"/></div>').appendTo(e);return t&&n.addClass("projects-dialog-spinner-contain"),n},decodeObject:function(e,t){if("number"===t&&"NaN"===e)e=Number.NaN;else if("number"===t&&"Infinity"===e)e=1/0;else if("number"===t&&"-Infinity"===e)e=-1/0;else if("Object"===t||/^array/.test(t)||"boolean"===t||"number"===t)e=JSON.parse(e);else if(/error/i.test(t))e=((e=JSON.parse(e)).name?e.name+": ":"")+e.message;else if("null"===t)e=null;else if("undefined"===t)e=void 0;else if(/^buffer/.test(t)){var n=e;e=[];for(var o=0;o<n.length;o+=2)e.push(parseInt(n.substr(o,2),16))}return e},parseContextKey:function(e){var t={},n=/^#:\((\S+?)\)::(.*)$/.exec(e);return n?(t.store=n[1],t.key=n[2]):(t.key=e,RED.settings.context&&(t.store=RED.settings.context.default)),t}}}(),function(r){r.widget("nodered.editableList",{_create:function(){var e,n=this;(this.element.addClass("red-ui-editableList-list"),this.uiWidth=this.element.width(),this.uiContainer=this.element.wrap("<div>").parent(),this.options.header?(this.options.header.addClass("red-ui-editableList-header"),this.borderContainer=this.uiContainer.wrap("<div>").parent(),this.borderContainer.prepend(this.options.header),this.topContainer=this.borderContainer.wrap("<div>").parent()):this.topContainer=this.uiContainer.wrap("<div>").parent(),this.topContainer.addClass("red-ui-editableList"),this.options.class&&this.topContainer.addClass(this.options.class),!1!==this.options.addButton)&&(e="string"==typeof this.options.addButton?this.options.addButton:RED&&RED._?RED._("editableList.add"):"add",r('<a href="#" class="editor-button editor-button-small red-ui-editableList-addButton" style="margin-top: 4px;"><i class="fa fa-plus"></i> '+e+"</a>").appendTo(this.topContainer).click(function(e){e.preventDefault(),n.addItem({})}));"absolute"===this.element.css("position")&&(["top","left","bottom","right"].forEach(function(e){var t=n.element.css(e);"auto"!==t&&""!==t&&(n.topContainer.css(e,t),n.uiContainer.css(e,"0"),n.element.css(e,"auto"))}),this.element.css("position","static"),this.topContainer.css("position","absolute"),this.uiContainer.css("position","absolute")),this.options.header?this.borderContainer.addClass("red-ui-editableList-border"):this.uiContainer.addClass("red-ui-editableList-border"),this.uiContainer.addClass("red-ui-editableList-container"),this.uiHeight=this.element.height(),this.activeFilter=this.options.filter||null,this.activeSort=this.options.sort||null,this.scrollOnAdd=this.options.scrollOnAdd,void 0===this.scrollOnAdd&&(this.scrollOnAdd=!0);var t=this.element.css("minHeight");"0px"!==t&&(this.uiContainer.css("minHeight",t),this.element.css("minHeight",0));var o=this.element.css("maxHeight");"0px"!==o&&(this.uiContainer.css("maxHeight",o),this.element.css("maxHeight",null)),"auto"!==this.options.height&&(this.uiContainer.css("overflow-y","scroll"),isNaN(this.options.height)||(this.uiHeight=this.options.height)),this.element.height("auto");var i,a=this.element.attr("style");if(null!==(i=/width\s*:\s*(\d+%)/i.exec(a))&&(this.element.width("100%"),this.uiContainer.width(i[1])),this.options.sortable){var s={axis:"y",update:function(e,t){n.options.sortItems&&n.options.sortItems(n.items())},handle:"string"==typeof this.options.sortable?this.options.sortable:".red-ui-editableList-item-handle",cursor:"move",tolerance:"pointer",forcePlaceholderSize:!0,placeholder:"red-ui-editabelList-item-placeholder",start:function(e,t){t.placeholder.height(t.item.height()-4)}};this.options.connectWith&&(s.connectWith=this.options.connectWith),this.element.sortable(s)}this._resize()},_resize:function(){var e=this.topContainer.height()-this.uiContainer.height();if(0!==this.uiHeight&&this.uiContainer.height(this.uiHeight-e),this.options.resize&&this.options.resize(),this.options.resizeItem){var t=this;this.element.children().each(function(e){t.options.resizeItem(r(this).find(".red-ui-editableList-item-content"),e)})}},_destroy:function(){},_refreshFilter:function(){var o=this,i=0;return this.activeFilter?(this.items().each(function(e,t){var n=t.data("data");try{o.activeFilter(n)?(t.parent().show(),i++):t.parent().hide()}catch(e){console.log(e),t.parent().show(),i++}}),i):this.element.children().show()},_refreshSort:function(){if(this.activeSort){var e=this.element.children(),n=this;e.sort(function(e,t){return n.activeSort(r(e).find(".red-ui-editableList-item-content").data("data"),r(t).find(".red-ui-editableList-item-content").data("data"))}),r.each(e,function(e,t){n.element.append(t)})}},width:function(e){this.uiWidth=e,this._resize()},height:function(e){this.uiHeight=e,this._resize()},addItem:function(o){var i=this;o=o||{};var a=r("<li>"),s=!1;if(this.activeSort){this.items().each(function(e,t){if(!s){var n=t.data("data");i.activeSort(o,n)<0&&(a.insertBefore(t.closest("li")),s=!0)}})}s||a.appendTo(this.element);var n=r("<div/>").addClass("red-ui-editableList-item-content").appendTo(a);if(n.data("data",o),!0===this.options.sortable&&(r('<i class="red-ui-editableList-item-handle fa fa-bars"></i>').appendTo(a),a.addClass("red-ui-editableList-item-sortable")),this.options.removable){var e=r("<a/>",{href:"#",class:"red-ui-editableList-item-remove editor-button editor-button-small"}).appendTo(a);r("<i/>",{class:"fa fa-remove"}).appendTo(e),a.addClass("red-ui-editableList-item-removable"),e.click(function(e){e.preventDefault();var t=n.data("data");a.addClass("red-ui-editableList-item-deleting"),a.fadeOut(300,function(){r(this).remove(),i.options.removeItem&&i.options.removeItem(t)})})}if(this.options.addItem){var t=i.element.children().length-1;setTimeout(function(){if(i.options.addItem(n,t,o),i.activeFilter)try{i.activeFilter(o)||a.hide()}catch(e){}!i.activeSort&&i.scrollOnAdd&&setTimeout(function(){i.uiContainer.scrollTop(i.element.height())},0)},0)}},addItems:function(e){for(var t=0;t<e.length;t++)this.addItem(e[t])},removeItem:function(t){this.element.children().filter(function(e){return t===r(this).find(".red-ui-editableList-item-content").data("data")}).remove(),this.options.removeItem&&this.options.removeItem(t)},items:function(){return this.element.children().map(function(e){return r(this).find(".red-ui-editableList-item-content")})},empty:function(){this.element.empty()},filter:function(e){return void 0!==e&&(this.activeFilter=e),this._refreshFilter()},sort:function(e){return void 0!==e&&(this.activeSort=e),this._refreshSort()},length:function(){return this.element.children().length}})}(jQuery),function(t){t.widget("nodered.checkboxSet",{_create:function(){var n=this;this.uiElement=this.element.wrap("<span>").parent(),this.uiElement.addClass("red-ui-checkboxSet"),this.options.parent&&(this.parent=this.options.parent,this.parent.checkboxSet("addChild",this.element)),this.children=[],this.partialFlag=!1,this.stateValue=0;var e=this.element.prop("checked");this.options=[t('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-square-o"></i></span>').appendTo(this.uiElement),t('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-check-square-o"></i></span>').appendTo(this.uiElement),t('<span class="red-ui-checkboxSet-option hide"><i class="fa fa-minus-square-o"></i></span>').appendTo(this.uiElement)],e?this.options[1].show():this.options[0].show(),this.element.change(function(){this.checked?(n.options[0].hide(),n.options[1].show()):(n.options[1].hide(),n.options[0].show()),n.options[2].hide();var t=this.checked;n.children.forEach(function(e){e.checkboxSet("state",t,!1,!0)})}),this.uiElement.click(function(e){e.stopPropagation(),n.state(!1===n.state())}),this.parent&&this.parent.checkboxSet("updateChild",this)},_destroy:function(){this.parent&&this.parent.checkboxSet("removeChild",this.element)},addChild:function(e){this.children.push(e)},removeChild:function(e){var t=this.children.indexOf(e);-1<t&&this.children.splice(t,1)},updateChild:function(e){var n=0;this.children.forEach(function(e,t){!0===e.checkboxSet("state")&&n++}),0===n?this.state(!1,!0):n===this.children.length?this.state(!0,!0):this.state(null,!0)},disable:function(){this.uiElement.addClass("disabled")},state:function(e,t,n){if(0===arguments.length)return this.partialFlag?null:this.element.is(":checked");this.partialFlag=null===e;var o=this.partialFlag||e;this.element.prop("checked",o),!0===e?(this.options[0].hide(),this.options[1].show(),this.options[2].hide()):!1===e?(this.options[2].hide(),this.options[1].hide(),this.options[0].show()):null===e&&(this.options[0].hide(),this.options[1].hide(),this.options[2].show()),t||this.element.trigger("change",null),!n&&this.parent&&this.parent.checkboxSet("updateChild",this)}})}(jQuery),RED.menu=function(){var d={};function l(i){var e,t;if(null!==i&&i.id&&!1===RED.settings.theme("menu."+i.id))return null;if(null===i)e=$('<li class="divider"></li>');else{e=$("<li></li>"),i.group&&e.addClass("menu-group-"+i.group);var n="<a "+(i.id?'id="'+i.id+'" ':"")+'tabindex="-1" href="#">';i.toggle&&(n+='<i class="fa fa-square pull-left"></i>',n+='<i class="fa fa-check-square pull-left"></i>'),void 0!==i.icon&&(/\.png/.test(i.icon)?n+='<img src="'+i.icon+'"/> ':n+='<i class="'+(i.icon?i.icon:'" style="display: inline-block;"')+'"></i> '),i.sublabel?n+='<span class="menu-label-container"><span class="menu-label">'+i.label+'</span><span class="menu-sublabel">'+i.sublabel+"</span></span>":n+='<span class="menu-label">'+i.label+"</span>",n+="</a>";var o=$(n).appendTo(e);if((d[i.id]=i).onselect?(o.click(function(e){if(e.preventDefault(),!$(this).parent().hasClass("disabled"))if(i.toggle){var t=p(i.id);if("string"==typeof i.toggle){if(!t){for(var n in d)if(d.hasOwnProperty(n)){var o=d[n];o.id!=i.id&&i.toggle==o.toggle&&u(o.id,!1)}u(i.id,!0)}}else u(i.id,!t)}else c(i.id)}),i.toggle&&(t=RED.settings.get("menu-"+i.id),i.setting&&(null!==t?(RED.settings.set(i.setting,t),RED.settings.remove("menu-"+i.id)):t=RED.settings.get(i.setting)),t?(o.addClass("active"),c(i.id,!0)):!1===t?(o.removeClass("active"),c(i.id,!1)):i.hasOwnProperty("selected")&&(i.selected?o.addClass("active"):o.removeClass("active"),c(i.id,i.selected)))):i.href?o.attr("target","_blank").attr("href",i.href):i.options||(e.addClass("disabled"),o.click(function(e){e.preventDefault()})),i.options){e.addClass("dropdown-submenu pull-left");for(var a=$('<ul id="'+i.id+'-submenu" class="dropdown-menu"></ul>').appendTo(e),s=0;s<i.options.length;s++){var r=l(i.options[s]);r&&r.appendTo(a)}}i.disabled&&e.addClass("disabled")}return e}function c(e,t){var n=d[e],o=n.onselect;"string"==typeof n.onselect&&(o=RED.actions.get(n.onselect)),o?o.call(n,t):console.log("No callback for",e,n.onselect)}function p(e){return $("#"+e).hasClass("active")}function u(e,t){if(p(e)!=t){var n=d[e];t?$("#"+e).addClass("active"):$("#"+e).removeClass("active"),n&&n.onselect&&c(n.id,t),RED.settings.set(n.setting||"menu-"+n.id,t)}}return{init:function(e){var t=$("#"+e.id),n=$("<ul/>",{id:e.id+"-submenu",class:"dropdown-menu pull-right"});1===t.length&&n.insertAfter(t);for(var o=!1,i=0;i<e.options.length;i++){var a=e.options[i];if(null!==a||!o){var s=l(a);s&&(s.appendTo(n),o=null===a)}}return n},setSelected:u,isSelected:p,toggleSelected:function(e){u(e,!p(e))},setDisabled:function(e,t){t?$("#"+e).parent().addClass("disabled"):$("#"+e).parent().removeClass("disabled")},addItem:function(e,t){var n=l(t);if(t.group){var o=$("#"+e+"-submenu").children(".menu-group-"+t.group);if(0===o.length)n.appendTo("#"+e+"-submenu");else{for(var i=0;i<o.length;i++){var a=o[i],s=$(a).find(".menu-label").html();if(t.label<s){$(a).before(n);break}}i===o.length&&n.appendTo("#"+e+"-submenu")}}else n.appendTo("#"+e+"-submenu")},removeItem:function(e){$("#"+e).parent().remove()},setAction:function(e,t){var n=d[e];n&&(n.onselect=t)}}}(),RED.panels={create:function(a){var s=a.container||$("#"+a.id),r=s.children();if(2!==r.length)throw new Error("Container must have exactly two children");s.addClass("red-ui-panels");var d,l,e=$('<div class="red-ui-panels-separator"></div>').insertAfter(r[0]),c=[],o=!1;return e.draggable({axis:"y",containment:s,scroll:!1,start:function(e,t){s.height(),d=t.position.top,c=[$(r[0]).height(),$(r[1]).height()]},drag:function(e,t){var n=s.height(),o=t.position.top-d,i=[c[0]+o,c[1]-o];$(r[0]).height(i[0]),$(r[1]).height(i[1]),a.resize&&a.resize(i[0],i[1]),t.position.top-=o,l=i[0]/n},stop:function(e,t){o=!0}}),{resize:function(e){var t=[$(r[0]).height(),$(r[1]).height()];if(s.height(e),o){var n=l*e;t=[n,e-n-48],$(r[0]).height(t[0]),$(r[1]).height(t[1])}a.resize&&a.resize(t[0],t[1])}}}},RED.popover=function(){var g={default:{top:10,leftRight:17,leftLeft:25,leftBottom:8},small:{top:5,leftRight:17,leftLeft:16,leftBottom:3}};return{create:function(e){var r=e.target,d=e.direction||"right",t=e.trigger,l=e.content,n=e.delay,o=e.autoClose,c=e.width||"auto",p=e.size||"default";if(!g[p])throw new Error("Invalid RED.popover size value:",p);var u,f,i=null,a=function(e){if(u){if(f=$('<div class="red-ui-popover red-ui-popover-'+d+'"></div>'),"default"!==p&&f.addClass("red-ui-popover-size-"+p),"function"==typeof l){var t=l.call(h);if(null===t)return;"string"==typeof t?f.text(t):f.append(t)}else f.html(l);"auto"!==c&&f.width(c),f.appendTo("body");var n=r.offset(),o=r.outerWidth(),i=r.outerHeight(),a=f.height(),s=f.width();"right"===d?f.css({top:n.top+i/2-a/2-g[p].top,left:n.left+o+g[p].leftRight}):"left"===d?f.css({top:n.top+i/2-a/2-g[p].top,left:n.left-g[p].leftLeft-s}):"bottom"===d&&f.css({top:n.top+i+g[p].top,left:n.left+o/2-s/2-g[p].leftBottom}),e?f.show():f.fadeIn("fast")}},s=function(e){u||f&&(e?$(this).remove():f.fadeOut("fast",function(){$(this).remove()}),f=null)};"hover"===t?(r.on("mouseenter",function(e){clearTimeout(i),u=!0,i=setTimeout(a,n.show)}),r.on("mouseleave",function(e){i&&clearTimeout(i),u=!1,setTimeout(s,n.hide)})):"click"===t?r.click(function(e){e.preventDefault(),e.stopPropagation(),(u=!u)?a():s()}):o&&setTimeout(function(){u=!1,s()},o);var h={setContent:function(e){return l=e,h},open:function(e){return u=!0,a(e),h},close:function(e){return u=!1,s(e),h}};return h},tooltip:function(e,t){RED.popover.create({target:e,trigger:"hover",size:"small",direction:"bottom",content:t,delay:{show:550,hide:10}})}}}(),function(n){n.widget("nodered.searchBox",{_create:function(){var t=this;this.currentTimeout=null,this.lastSent="",this.element.val(""),this.uiContainer=this.element.wrap("<div>").parent(),this.uiContainer.addClass("red-ui-searchBox-container"),n('<i class="fa fa-search"></i>').prependTo(this.uiContainer),this.clearButton=n('<a href="#"><i class="fa fa-times"></i></a>').appendTo(this.uiContainer),this.clearButton.on("click",function(e){e.preventDefault(),t.element.val(""),t._change("",!0),t.element.focus()}),this.resultCount=n("<span>",{class:"red-ui-searchBox-resultCount hide"}).appendTo(this.uiContainer),this.element.val(""),this.element.on("keydown",function(e){27===e.keyCode&&t.element.val("")}),this.element.on("keyup",function(e){t._change(n(this).val())}),this.element.on("focus",function(){n("body").one("mousedown",function(){t.element.blur()})})},_change:function(e,t){var n=!1;""===e?(this.clearButton.hide(),n=!0):(this.clearButton.show(),n=e.length>=(this.options.minimumLength||0));var o=this.element.val();if(n=n&&o!==this.lastSent)if(!t&&0<this.options.delay){clearTimeout(this.currentTimeout);var i=this;this.currentTimeout=setTimeout(function(){i.lastSent=i.element.val(),i._trigger("change")},this.options.delay)}else this._trigger("change")},value:function(e){if(void 0===e)return this.element.val();this.element.val(e),this._change(e)},count:function(e){null==e||""===e?this.resultCount.text("").hide():this.resultCount.text(e).show()},change:function(){this._trigger("change")}})}(jQuery),RED.tabs=function(){var E="fa fa-lemon-o";return{create:function(l){var s,c,o,i,p={},u=0,r=0,f=l.element||$("#"+l.id),d=f.wrap("<div>").parent(),h=f.wrap("<div>").parent();if(d.addClass("red-ui-tabs"),l.vertical&&d.addClass("red-ui-tabs-vertical"),l.addButton&&"function"==typeof l.addButton&&(d.addClass("red-ui-tabs-add"),$('<div class="red-ui-tab-button"><a href="#"><i class="fa fa-plus"></i></a></div>').appendTo(d).find("a").click(function(e){e.preventDefault(),l.addButton()})),l.scrollable&&(d.addClass("red-ui-tabs-scrollable"),h.addClass("red-ui-tabs-scroll-container"),h.scroll(m),(o=$('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-left"><a href="#" style="display:none;"><i class="fa fa-caret-left"></i></a></div>').appendTo(d).find("a")).on("mousedown",function(e){t(e,"-=150")}).on("click",function(e){e.preventDefault()}),(i=$('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-right"><a href="#" style="display:none;"><i class="fa fa-caret-right"></i></a></div>').appendTo(d).find("a")).on("mousedown",function(e){t(e,"+=150")}).on("click",function(e){e.preventDefault()})),l.collapsible){d.addClass("red-ui-tabs-collapsible");var g=$('<div class="red-ui-tab-link-buttons"></div>').appendTo(d),n=$('<a href="#"><i class="fa fa-caret-down"></i></a>').appendTo(g);n.addClass("red-ui-tab-link-button-menu"),n.click(function(e){if(e.preventDefault(),!c){var i=[],a=[];f.children().each(function(e,t){var n=$(t).data("tabId"),o={id:"red-ui-tabs-menu-option-"+n,icon:p[n].iconClass||E,label:p[n].name,onselect:function(){y(n)}};p[n].pinned?i.push(o):a.push(o)}),a=i.concat(a),(c=RED.menu.init({id:"debug-message-option-menu",options:a})).css({position:"absolute"}),c.on("mouseleave",function(){$(this).hide()}),c.on("mouseup",function(){$(this).hide()}),c.appendTo("body")}var t=n.offset();c.css({top:t.top+n.height()-20+"px",left:t.left-c.width()+n.width()+"px"}),c.toggle()})}function t(e,t){if(e.preventDefault(),!$(this).hasClass("disabled")){var n=h.scrollLeft();h.animate({scrollLeft:t},100);var o=setInterval(function(){var e=h.scrollLeft();e!==n?(n=e,h.animate({scrollLeft:t},100)):clearInterval(o)},100);$(this).one("mouseup",function(){clearInterval(o)})}}function v(){return l.onclick&&l.onclick(p[$(this).attr("href").slice(1)]),y($(this)),!1}function m(){if(0!==f.children().length){var e=h.scrollLeft(),t=h.width(),n=f.width();0===e?o.hide():o.show(),e===n-t?i.hide():i.show()}}function b(){return l.ondblclick&&l.ondblclick(p[$(this).attr("href").slice(1)]),!1}function y(e){if("string"==typeof e&&(e=f.find("a[href='#"+e+"']")),0!==e.length&&!e.parent().hasClass("active")){f.children().removeClass("active"),f.children().css({transition:"width 100ms"}),e.parent().addClass("active");var t=e.parent().attr("id");if(d.find(".red-ui-tab-link-button").removeClass("active selected"),$("#"+t+"-link-button").addClass("active selected"),l.scrollable){var n=e.parent().position().left;n-21<0?h.animate({scrollLeft:"+="+(n-50)},300):n+120>h.width()&&h.animate({scrollLeft:"+="+(n+140-h.width())},300)}l.onchange&&l.onchange(p[e.attr("href").slice(1)]),w(),setTimeout(function(){f.children().css({transition:""})},100)}}function w(){if(!l.vertical){var e=f.find("li.red-ui-tab"),t=d.width(),n=e.size();if(l.collapsible){if((i=t-g.width()-10)<198){for(var o=g.find("a:last").prev();o.is(":not(:visible)");)o=o.prev();o.hasClass("red-ui-tab-link-button-pinned")||o.hide(),i=t-g.width()-10}else 40<t-198-g.width()&&(g.find("a:not(:visible):first").show(),i=t-g.width()-10);e.css({width:i})}else{var i;if(r=(s=100*(i=(t-12-6*n)/n)/t+"%")+"%",l.scrollable){i=Math.max(i,140),s=i+"px",r=0;var a=Math.max(d.width(),12+(i+6)*n);f.width(a),m()}else l.hasOwnProperty("minimumActiveTabWidth")&&(i<l.minimumActiveTabWidth?(n-=1,i=(t-12-l.minimumActiveTabWidth-6*n)/n,s=100*i/t+"%",r=l.minimumActiveTabWidth+"px"):r=0);l.collapsible&&console.log(s),e.css({width:s}),i<50?(f.find(".red-ui-tab-close").hide(),f.find(".red-ui-tab-icon").hide(),f.find(".red-ui-tab-label").css({paddingLeft:Math.min(12,Math.max(0,i-38))+"px"})):(f.find(".red-ui-tab-close").show(),f.find(".red-ui-tab-icon").show(),f.find(".red-ui-tab-label").css({paddingLeft:""})),0!==r&&(f.find("li.red-ui-tab.active").css({width:l.minimumActiveTabWidth}),f.find("li.red-ui-tab.active .red-ui-tab-close").show(),f.find("li.red-ui-tab.active .red-ui-tab-icon").show(),f.find("li.red-ui-tab.active .red-ui-tab-label").css({paddingLeft:""}))}}}function D(e){var t=f.find("a[href='#"+e+"']").parent();if(t.hasClass("active")){var n=t.prev();0===n.size()&&(n=t.next()),y(n.find("a"))}t.remove(),p[e].pinned&&u--,l.onremove&&l.onremove(p[e]),delete p[e],w(),c=null}return f.children().first().addClass("active"),f.children().addClass("red-ui-tab"),f.find("li.red-ui-tab a").on("click",v).on("dblclick",b),setTimeout(function(){w()},0),{addTab:function(t){p[t.id]=t;var n=$("<li/>",{class:"red-ui-tab"}).appendTo(f);n.attr("id","red-ui-tab-"+t.id.replace(".","-")),n.data("tabId",t.id),l.maximumTabWidth&&n.css("maxWidth",l.maximumTabWidth+"px");var e=$("<a/>",{href:"#"+t.id,class:"red-ui-tab-label"}).appendTo(n);if(t.icon?$('<img src="'+t.icon+'" class="red-ui-tab-icon"/>').appendTo(e):t.iconClass&&$("<i>",{class:"red-ui-tab-icon "+t.iconClass}).appendTo(e),$("<span/>",{class:"bidiAware"}).text(t.label).appendTo(e).attr("dir",RED.text.bidi.resolveBaseTextDir(t.label)),l.collapsible){n.addClass("red-ui-tab-pinned");var o=$('<a href="#'+t.id+'" class="red-ui-tab-link-button"></a>');t.pinned?0===u?o.prependTo(g):o.insertAfter(g.find("a.red-ui-tab-link-button-pinned:last")):o.insertBefore(g.find("a:last")),o.attr("id",n.attr("id")+"-link-button"),t.iconClass?$("<i>",{class:t.iconClass}).appendTo(o):$("<i>",{class:E}).appendTo(o),o.click(function(e){e.preventDefault(),y(t.id)}),t.pinned&&(o.addClass("red-ui-tab-link-button-pinned"),u++),RED.popover.tooltip($(o),t.name)}if(e.on("click",v),e.on("dblclick",b),t.closeable){var i=$("<a/>",{href:"#",class:"red-ui-tab-close"}).appendTo(n);i.append('<i class="fa fa-times" />'),i.on("click",function(e){e.preventDefault(),D(t.id)})}if(l.onadd&&l.onadd(t),e.attr("title",t.label),1==f.find("li.red-ui-tab").size()&&y(e),l.onreorder){var a,s,r,d=[];n.draggable({axis:"x",distance:20,start:function(e,t){a=[],d=[],f.children().each(function(e){d[e]={el:$(this),text:$(this).text(),left:$(this).position().left,width:$(this).width()},$(this).is(n)&&(r=s=e),a.push($(this).data("tabId"))}),f.children().each(function(e){e!==s&&$(this).css({position:"absolute",left:d[e].left+"px",width:d[e].width+2,transition:"left 0.3s"})}),n.hasClass("active")||n.css({zIndex:1})},drag:function(e,t){t.position.left+=d[s].left+h.scrollLeft();for(var n=t.position.left+d[s].width/2-h.scrollLeft(),o=0;o<d.length;o++)if(o!==s&&n>d[o].left&&n<d[o].left+d[o].width){o<s?(d[o].left+=d[s].width+8,d[s].el.detach().insertBefore(d[o].el)):(d[o].left-=d[s].width+8,d[s].el.detach().insertAfter(d[o].el)),d[o].el.css({left:d[o].left+"px"}),d.splice(o,0,d.splice(s,1)[0]),s=o;break}},stop:function(e,t){f.children().css({position:"relative",left:"",transition:""}),n.hasClass("active")||n.css({zIndex:""}),w(),r!==s&&l.onreorder(a,$.makeArray(f.children().map(function(){return $(this).data("tabId")}))),y(d[s].el.data("tabId"))}})}setTimeout(function(){w()},10),c=null},removeTab:D,activateTab:y,nextTab:function(){var e=f.find("li.active").next();0<e.length&&y(e.find("a"))},previousTab:function(){var e=f.find("li.active").prev();0<e.length&&y(e.find("a"))},resize:w,count:function(){return f.find("li.red-ui-tab").size()},contains:function(e){return 0<f.find("a[href='#"+e+"']").length},renameTab:function(e,t){p[e].label=t;var n=f.find("a[href='#"+e+"']");n.attr("title",t),n.find("span.bidiAware").text(t).attr("dir",RED.text.bidi.resolveBaseTextDir(t)),w()},order:function(e){var t=$.makeArray(f.children().map(function(){return $(this).data("tabId")}));if(t.length===e.length){var n,o=!0;for(n=0;n<e.length;n++)if(e[n]!==t[n]){o=!1;break}if(!o){var i={};for(f.children().detach().each(function(){i[$(this).data("tabId")]=$(this)}),n=0;n<e.length;n++)i[e[n]].appendTo(f)}}}}}}}(),RED.stack={create:function(o){var i=o.container;i.addClass("red-ui-stack");var a=0,s=[],r=!0,d=function(){if(0<s.length){var t=0;s.forEach(function(e){t+=e.header.outerHeight()});var e=i.innerHeight();a=e-t-(s.length-1),s.forEach(function(e){e.contentWrap.height(a)})}};return o.fill&&o.singleExpanded&&($(window).resize(d),$(window).focus(d)),{add:function(t){s.push(t),t.container=$('<div class="palette-category">').appendTo(i),r||t.container.hide();var e=$('<div class="palette-header"></div>').appendTo(t.container);if(t.header=e,t.contentWrap=$("<div></div>",{style:"position:relative"}).appendTo(t.container),o.fill&&t.contentWrap.css("height",a),t.content=$("<div></div>").appendTo(t.contentWrap),!1!==t.collapsible){e.click(function(){if(o.singleExpanded){if(!t.isExpanded()){for(var e=0;e<s.length;e++)s[e].isExpanded()&&s[e].collapse();t.expand()}}else t.toggle()});var n=$('<i class="fa fa-angle-down"></i>').appendTo(e);t.expanded?(t.container.addClass("palette-category-expanded"),n.addClass("expanded")):t.contentWrap.hide()}else $('<i style="opacity: 0.5;" class="fa fa-angle-down expanded"></i>').appendTo(e),e.css("cursor","default");return t.title=$("<span></span>").html(t.title).appendTo(e),t.toggle=function(){return t.isExpanded()?(t.collapse(),!1):(t.expand(),!0)},t.expand=function(){if(!t.isExpanded())return t.onexpand&&t.onexpand.call(t),o.singleExpanded&&s.forEach(function(e){e!==t&&e.collapse()}),n.addClass("expanded"),t.container.addClass("palette-category-expanded"),t.contentWrap.slideDown(200),!0},t.collapse=function(){if(t.isExpanded())return n.removeClass("expanded"),t.container.removeClass("palette-category-expanded"),t.contentWrap.slideUp(200),!0},t.isExpanded=function(){return t.container.hasClass("palette-category-expanded")},o.fill&&o.singleExpanded&&d(),t},hide:function(){return r=!1,s.forEach(function(e){e.container.hide()}),this},show:function(){return r=!0,s.forEach(function(e){e.container.show()}),this},resize:function(){d()}}}},function(c){var e=function(e){var t=RED.utils.parseContextKey(e);return{option:t.store,value:t.key}},t=function(e,t){if(!t)return e;var n="string"==typeof t?t:t.value;return n!==RED.settings.context.default?"#:("+n+")::"+e:e},s={msg:{value:"msg",label:"msg.",validate:RED.utils.validatePropertyExpression},flow:{value:"flow",label:"flow.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:e,export:t},global:{value:"global",label:"global.",hasValue:!0,options:[],validate:RED.utils.validatePropertyExpression,parse:e,export:t},str:{value:"str",label:"string",icon:"red/images/typedInput/az.png"},num:{value:"num",label:"number",icon:"red/images/typedInput/09.png",validate:/^[+-]?[0-9]*\.?[0-9]*([eE][-+]?[0-9]+)?$/},bool:{value:"bool",label:"boolean",icon:"red/images/typedInput/bool.png",options:["true","false"]},json:{value:"json",label:"JSON",icon:"red/images/typedInput/json.png",validate:function(e){try{return JSON.parse(e),!0}catch(e){return!1}},expand:function(){var n=this,e=this.value();try{e=JSON.stringify(JSON.parse(e),null,4)}catch(e){}RED.editor.editJSON({value:e,complete:function(e){var t=e;try{t=JSON.stringify(JSON.parse(e))}catch(e){}n.value(t)}})}},re:{value:"re",label:"regular expression",icon:"red/images/typedInput/re.png"},date:{value:"date",label:"timestamp",hasValue:!1},jsonata:{value:"jsonata",label:"expression",icon:"red/images/typedInput/expr.png",validate:function(e){try{return jsonata(e),!0}catch(e){return!1}},expand:function(){var t=this;RED.editor.editExpression({value:this.value().replace(/\t/g,"\n"),complete:function(e){t.value(e.replace(/\n/g,"\t"))}})}},bin:{value:"bin",label:"buffer",icon:"red/images/typedInput/bin.png",expand:function(){var t=this;RED.editor.editBuffer({value:this.value(),complete:function(e){t.value(e)}})}},env:{value:"env",label:"env variable",icon:"red/images/typedInput/env.png"}},r=!1;c.widget("nodered.typedInput",{_create:function(){try{if(!r&&RED&&RED._){for(var e in s)s.hasOwnProperty(e)&&(s[e].label=RED._("typedInput.type."+e,{defaultValue:s[e].label}));var t=RED.settings.context.stores.map(function(e){return{value:e,label:e,icon:'<i class="red-ui-typedInput-icon fa fa-database" style="color: #'+("memory"===e?"ddd":"777")+'"></i>'}});t.length<2?(s.flow.options=[],s.global.options=[]):(s.flow.options=t,s.global.options=t)}r=!0;var n=this;this.disarmClick=!1,this.input=c('<input type="text"></input>'),this.input.insertAfter(this.element),this.input.val(this.element.val()),this.element.addClass("red-ui-typedInput"),this.uiWidth=this.element.outerWidth(),this.elementDiv=this.input.wrap("<div>").parent().addClass("red-ui-typedInput-input"),this.uiSelect=this.elementDiv.wrap("<div>").parent();var o,i=this.element.attr("style");if(null!==(o=/width\s*:\s*(calc\s*\(.*\)|\d+(%|px))/i.exec(i))?(this.input.css("width","100%"),this.uiSelect.width(o[1]),this.uiWidth=null):this.uiSelect.width(this.uiWidth),["Right","Left"].forEach(function(e){var t=n.element.css("margin"+e);n.uiSelect.css("margin"+e,t),n.input.css("margin"+e,0)}),this.uiSelect.addClass("red-ui-typedInput-container"),this.element.attr("type","hidden"),this.options.types=this.options.types||Object.keys(s),this.selectTrigger=c('<button tabindex="0"></button>').prependTo(this.uiSelect),c('<i class="red-ui-typedInput-icon fa fa-sort-desc"></i>').toggle(1<this.options.types.length).appendTo(this.selectTrigger),this.selectLabel=c('<span class="red-ui-typedInput-type-label"></span>').appendTo(this.selectTrigger),this.types(this.options.types),this.options.typeField){this.typeField=c(this.options.typeField).hide();var a=this.typeField.val();a&&this.typeMap[a]&&(this.options.default=a)}else this.typeField=c("<input>",{type:"hidden"}).appendTo(this.uiSelect);this.input.on("focus",function(){n.uiSelect.addClass("red-ui-typedInput-focus")}),this.input.on("blur",function(){n.uiSelect.removeClass("red-ui-typedInput-focus")}),this.input.on("change",function(){n.validate(),n.element.val(n.value()),n.element.trigger("change",n.propertyType,n.value())}),this.selectTrigger.click(function(e){e.preventDefault(),n._showTypeMenu()}),this.selectTrigger.on("keydown",function(e){40===e.keyCode&&n._showTypeMenu()}).on("focus",function(){n.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionSelectTrigger=c('<button tabindex="0" class="red-ui-typedInput-option-trigger" style="display:inline-block"><span class="red-ui-typedInput-option-caret"><i class="red-ui-typedInput-icon fa fa-sort-desc"></i></span></button>').appendTo(this.uiSelect),this.optionSelectLabel=c('<span class="red-ui-typedInput-option-label"></span>').prependTo(this.optionSelectTrigger),RED.popover.tooltip(this.optionSelectLabel,function(){return n.optionValue}),this.optionSelectTrigger.click(function(e){e.preventDefault(),n._showOptionSelectMenu()}).on("keydown",function(e){40===e.keyCode&&n._showOptionSelectMenu()}).on("blur",function(){n.uiSelect.removeClass("red-ui-typedInput-focus")}).on("focus",function(){n.uiSelect.addClass("red-ui-typedInput-focus")}),this.optionExpandButton=c('<button tabindex="0" class="red-ui-typedInput-option-expand" style="display:inline-block"><i class="red-ui-typedInput-icon fa fa-ellipsis-h"></i></button>').appendTo(this.uiSelect),this.type(this.options.default||this.typeList[0].value)}catch(e){console.log(e.stack)}},_showTypeMenu:function(){1<this.typeList.length?(this._showMenu(this.menu,this.selectTrigger),this.menu.find("[value='"+this.propertyType+"']").focus()):this.input.focus()},_showOptionSelectMenu:function(){if(this.optionMenu){this.optionMenu.css({minWidth:this.optionSelectLabel.width()}),this._showMenu(this.optionMenu,this.optionSelectTrigger);var e=this.optionMenu.find("[value='"+this.optionValue+"']");0===e.length&&(e=this.optionMenu.children(":first")),e.focus()}},_hideMenu:function(e){c(document).off("mousedown.close-property-select"),e.hide(),this.elementDiv.is(":visible")?this.input.focus():this.optionSelectTrigger.is(":visible")?this.optionSelectTrigger.focus():this.selectTrigger.focus()},_createMenu:function(e,n){var o=this,i=c("<div>").addClass("red-ui-typedInput-options");return e.forEach(function(t){"string"==typeof t&&(t={value:t,label:t});var e=c('<a href="#"></a>').attr("value",t.value).appendTo(i);t.label&&e.text(t.label),t.icon?0===t.icon.indexOf("<")?c(t.icon).prependTo(e):-1!==t.icon.indexOf("/")?c("<img>",{src:t.icon,style:"margin-right: 4px; height: 18px;"}).prependTo(e):c("<i>",{class:"red-ui-typedInput-icon "+t.icon}).prependTo(e):e.css({paddingLeft:"18px"}),t.icon||t.label||e.text(t.value),e.click(function(e){e.preventDefault(),n(t.value),o._hideMenu(i)})}),i.css({display:"none"}),i.appendTo(document.body),i.on("keydown",function(e){40===e.keyCode?c(this).children(":focus").next().focus():38===e.keyCode?c(this).children(":focus").prev().focus():27===e.keyCode&&o._hideMenu(i)}),i},_showMenu:function(t,n){if(this.disarmClick)this.disarmClick=!1;else{var o=this,e=n.offset(),i=n.height(),a=t.height(),s=i+e.top-3;s+a>c(window).height()&&(s-=s+a-c(window).height()+5),t.css({top:s+"px",left:2+e.left+"px"}),t.slideDown(100),this._delay(function(){o.uiSelect.addClass("red-ui-typedInput-focus"),c(document).on("mousedown.close-property-select",function(e){c(e.target).closest(t).length||o._hideMenu(t),c(e.target).closest(n).length&&(o.disarmClick=!0,e.preventDefault())})})}},_getLabelWidth:function(e){var t=e.outerWidth();if(0===t){var n=c('<div class="red-ui-typedInput-container"></div>').css({position:"absolute",top:0,left:-1e3}).appendTo(document.body);t=e.clone().appendTo(n).outerWidth(),n.remove()}return t},_resize:function(){null!==this.uiWidth&&this.uiSelect.width(this.uiWidth);var e=this.typeMap[this.propertyType];if(e&&!1===e.hasValue)this.selectTrigger.addClass("red-ui-typedInput-full-width");else{this.selectTrigger.removeClass("red-ui-typedInput-full-width");var t=this._getLabelWidth(this.selectTrigger);if(this.elementDiv.css("left",t+"px"),this.optionExpandButton.is(":visible")?this.elementDiv.css("right","22px"):(this.elementDiv.css("right","0"),this.input.css({"border-top-right-radius":"4px","border-bottom-right-radius":"4px"})),this.optionSelectTrigger)if(e&&e.options&&!0===e.hasValue){this.optionSelectLabel.css({left:"auto"});var n=this._getLabelWidth(this.optionSelectLabel);this.optionSelectTrigger.css({width:23+n+"px"}),this.elementDiv.css("right",23+n+"px"),this.input.css({"border-top-right-radius":0,"border-bottom-right-radius":0})}else this.optionSelectLabel.css({left:"0"}),this.optionSelectTrigger.css({width:"calc( 100% - "+t+"px )"}),this.optionExpandButton.is(":visible")||(this.elementDiv.css({right:0}),this.input.css({"border-top-right-radius":"4px","border-bottom-right-radius":"4px"}))}},_updateOptionSelectLabel:function(e){var t=this.typeMap[this.propertyType];this.optionSelectLabel.empty(),e.icon?0===e.icon.indexOf("<")?c(e.icon).prependTo(this.optionSelectLabel):-1!==e.icon.indexOf("/")?c("<img>",{src:e.icon,style:"height: 18px;"}).prependTo(this.optionSelectLabel):c("<i>",{class:"red-ui-typedInput-icon "+e.icon}).prependTo(this.optionSelectLabel):e.label?this.optionSelectLabel.text(e.label):this.optionSelectLabel.text(e.value),t.hasValue&&(this.optionValue=e.value,this._resize(),this.input.trigger("change",this.propertyType,this.value()))},_destroy:function(){this.optionMenu&&this.optionMenu.remove(),this.menu.remove()},types:function(e){var n=this,t=this.type();this.typeMap={},this.typeList=e.map(function(e){var t;return t="string"==typeof e?s[e]:e,n.typeMap[t.value]=t}),this.selectTrigger.toggleClass("disabled",1===this.typeList.length),this.selectTrigger.find(".fa-sort-desc").toggle(1<this.typeList.length),this.menu&&this.menu.remove(),this.menu=this._createMenu(this.typeList,function(e){n.type(e)}),t&&!this.typeMap.hasOwnProperty(t)?this.type(this.typeList[0].value):(this.propertyType=null,this.type(t)),setTimeout(function(){n._resize()},0)},width:function(e){this.uiWidth=e,this._resize()},value:function(e){if(!arguments.length){var t=this.input.val();return this.typeMap[this.propertyType].export&&(t=this.typeMap[this.propertyType].export(t,this.optionValue)),t}var n;if(this.typeMap[this.propertyType].options){for(var o=0;o<this.typeMap[this.propertyType].options.length;o++){var i=this.typeMap[this.propertyType].options[o];if("string"==typeof i){if(i===e){n=this.activeOptions[i];break}}else if(i.value===e){n=i;break}}n||(n={value:""}),this._updateOptionSelectLabel(n)}this.input.val(e),this.input.trigger("change",this.type(),e)},type:function(e){if(!arguments.length)return this.propertyType;var t=this,n=this.typeMap[e];if(n&&this.propertyType!==e){var o,i;if(this.propertyType=e,this.typeField&&this.typeField.val(e),this.selectLabel.empty(),n.icon?((o=new Image).name=n.icon,o.src=n.icon,c("<img>",{src:n.icon,style:"margin-right: 4px;height: 18px;"}).prependTo(this.selectLabel)):this.selectLabel.text(n.label),n.options){if(this.optionExpandButton&&this.optionExpandButton.hide(),this.optionSelectTrigger)if(this.optionSelectTrigger.show(),n.hasValue?this.elementDiv.show():this.elementDiv.hide(),this.activeOptions={},n.options.forEach(function(e){"string"==typeof e?t.activeOptions[e]={label:e,value:e}:t.activeOptions[e.value]=e}),t.activeOptions.hasOwnProperty(t.optionValue)||(t.optionValue=null),this.optionMenu=this._createMenu(n.options,function(e){t._updateOptionSelectLabel(t.activeOptions[e]),n.hasValue||t.value(t.activeOptions[e].value)}),n.hasValue){var a=this.optionValue||n.options[0];if(n.parse){var s=n.parse(this.input.val());s.option&&(a=s.option,this.activeOptions.hasOwnProperty(a)||(s.option=Object.keys(this.activeOptions)[0],a=s.option)),this.input.val(s.value),n.export&&this.element.val(n.export(s.value,s.option||a))}"string"==typeof a?(this.optionValue=a,this.activeOptions.hasOwnProperty(a)||(a=Object.keys(this.activeOptions)[0]),a?this._updateOptionSelectLabel(this.activeOptions[a]):this.optionSelectTrigger.hide()):a?(this.optionValue=a.value,this._updateOptionSelectLabel(a)):this.optionSelectTrigger.hide()}else{for(var r=this.input.val(),d=!1,l=0;l<n.options.length;l++){if("string"==typeof(i=n.options[l])&&i===r){t._updateOptionSelectLabel({value:r}),d=!0;break}if(i.value===r){t._updateOptionSelectLabel(i),d=!0;break}}d||("string"==typeof(i=n.options[0])?(this.value(i),t._updateOptionSelectLabel({value:i})):(this.value(i.value),t._updateOptionSelectLabel(i)))}}else this.optionMenu&&(this.optionMenu.remove(),this.optionMenu=null),this.optionSelectTrigger&&this.optionSelectTrigger.hide(),!1===n.hasValue?(this.oldValue=this.input.val(),this.input.val(""),this.elementDiv.hide()):(void 0!==this.oldValue&&(this.input.val(this.oldValue),delete this.oldValue),this.elementDiv.show()),this.optionExpandButton&&(n.expand&&"function"==typeof n.expand?(this.optionExpandButton.show(),this.optionExpandButton.off("click"),this.optionExpandButton.on("click",function(e){e.preventDefault(),n.expand.call(t)})):this.optionExpandButton.hide()),this.input.trigger("change",this.propertyType,this.value());o?(o.onload=function(){t._resize()},o.onerror=function(){t._resize()}):this._resize()}},validate:function(){var e,t=this.value(),n=this.type();if(this.typeMap[n]&&this.typeMap[n].validate){var o=this.typeMap[n].validate;e="function"==typeof o?o(t):o.test(t)}else e=!0;return e?this.uiSelect.removeClass("input-error"):this.uiSelect.addClass("input-error"),e},show:function(){this.uiSelect.show(),this._resize()},hide:function(){this.uiSelect.hide()}})}(jQuery),RED.actions=function(){var o={};return{add:function(e,t){o[e]=t},remove:function(e){delete o[e]},get:function(e){return o[e]},invoke:function(e){o.hasOwnProperty(e)&&o[e]()},list:function(){var n=[];return Object.keys(o).forEach(function(e){var t=RED.keyboard.getShortcut(e);n.push({id:e,scope:t?t.scope:void 0,key:t?t.key:void 0,user:t?t.user:void 0})}),n}}}(),RED.deploy=function(){var t={full:{img:"red/images/deploy-full-o.png"},nodes:{img:"red/images/deploy-nodes-o.png"},flows:{img:"red/images/deploy-flows-o.png"}},g={unknown:!1,unusedConfig:!1,invalid:!1},v="full",m=!1,l=null;function a(e){v=e,$("#btn-deploy-icon").attr("src",t[e].img)}function b(e){var t="";if(e.z){var n=RED.nodes.workspace(e.z);t=n?n.label:(n=RED.nodes.subflow(e.z)).name}var o=RED.utils.getNodeLabel(e,e.id);return{tab:t,type:e.type,label:o}}function y(e,t){return e.tab<t.tab?-1:e.tab>t.tab?1:e.type<t.type?-1:e.type>t.type?1:e.name<t.name?-1:e.name>t.name?1:0}function w(e,t){var n=$("<div>");$('<p data-i18n="deploy.confirm.conflict"></p>').appendTo(n);var o=$('<div id="node-dialog-confirm-deploy-conflict-checking" class="node-dialog-confirm-conflict-row"><img src="red/images/spin.svg"/><div data-i18n="deploy.confirm.conflictChecking"></div></div>').appendTo(n),i=$('<div class="node-dialog-confirm-conflict-row"><i style="color: #3a3;" class="fa fa-check"></i><div data-i18n="deploy.confirm.conflictAutoMerge"></div></div>').hide().appendTo(n),a=$('<div id="node-dialog-confirm-deploy-conflict-manual-merge" class="node-dialog-confirm-conflict-row"><i style="color: #999;" class="fa fa-exclamation"></i><div data-i18n="deploy.confirm.conflictManualMerge"></div></div>').hide().appendTo(n);n.i18n(),l=null;var s=[{text:RED._("common.label.cancel"),click:function(){r.close()}},{id:"node-dialog-confirm-deploy-review",text:RED._("deploy.confirm.button.review"),class:"primary disabled",click:function(){$("#node-dialog-confirm-deploy-review").hasClass("disabled")||(RED.diff.showRemoteDiff(),r.close())}},{id:"node-dialog-confirm-deploy-merge",text:RED._("deploy.confirm.button.merge"),class:"primary disabled",click:function(){$("#node-dialog-confirm-deploy-merge").hasClass("disabled")||(RED.diff.mergeDiff(l),r.close())}}];t&&s.push({id:"node-dialog-confirm-deploy-overwrite",text:RED._("deploy.confirm.button.overwrite"),class:"primary",click:function(){E(!0,t),r.close()}});var r=RED.notify(n,{modal:!0,fixed:!0,width:600,buttons:s}),d=Date.now();RED.diff.getRemoteDiff(function(e){var t=Math.max(1e3-(Date.now()-d),0);l=e,setTimeout(function(){o.hide(),0===Object.keys(e.conflicts).length?(i.show(),$("#node-dialog-confirm-deploy-merge").removeClass("disabled")):a.show(),$("#node-dialog-confirm-deploy-review").removeClass("disabled")},t)})}function D(e){if(5<e.length){var t=e.length-5;(e=e.slice(0,5)).push(RED._("deploy.confirm.plusNMore",{count:t}))}return e}function E(e,t){if(!$("#btn-deploy").hasClass("disabled")){if(!RED.user.hasPermission("flows.write"))return void RED.notify(RED._("user.errors.deploy"),"error");if(!e){var n,o=!1,i=!1,a=[],s=[];RED.nodes.eachNode(function(e){o=o||!e.valid,e.valid||s.push(b(e)),"unknown"===e.type&&-1==a.indexOf(e.name)&&a.push(e.name)}),n=0<a.length;var r=[];RED.nodes.eachConfig(function(e){0===e.users.length&&!1!==e._def.hasUsers&&(r.push(b(e)),i=!0)});var d,l,c=!1,p=[];if(n&&!g.unknown?(c=!0,d="<p>"+RED._("deploy.confirm.unknown")+'</p><ul class="node-dialog-configm-deploy-list"><li>'+D(a).join("</li><li>")+"</li></ul><p>"+RED._("deploy.confirm.confirm")+"</p>",p=[{id:"node-dialog-confirm-deploy-deploy",text:RED._("deploy.confirm.button.confirm"),class:"primary",click:function(){E(!0),l.close()}}]):o&&!g.invalid&&(c=!0,s.sort(y),d="<p>"+RED._("deploy.confirm.improperlyConfigured")+'</p><ul class="node-dialog-configm-deploy-list"><li>'+D(s.map(function(e){return(e.tab?"["+e.tab+"] ":"")+e.label+" ("+e.type+")"})).join("</li><li>")+"</li></ul><p>"+RED._("deploy.confirm.confirm")+"</p>",p=[{id:"node-dialog-confirm-deploy-deploy",text:RED._("deploy.confirm.button.confirm"),class:"primary",click:function(){E(!0),l.close()}}]),c)return p.unshift({text:RED._("common.label.cancel"),click:function(){l.close()}}),void(l=RED.notify(d,{modal:!0,fixed:!0,buttons:p}))}var u=RED.nodes.createCompleteNodeSet(),f=Date.now();$(".deploy-button-content").css("opacity",0),$(".deploy-button-spinner").show(),$("#btn-deploy").addClass("disabled");var h={flows:u};t||(h.rev=RED.nodes.version()),m=!0,$("#header-shade").show(),$("#editor-shade").show(),$("#palette-shade").show(),$("#sidebar-shade").show(),$.ajax({url:"flows",type:"POST",data:JSON.stringify(h),contentType:"application/json; charset=utf-8",headers:{"Node-RED-Deployment-Type":v}}).done(function(e,t,n){RED.nodes.dirty(!1),RED.nodes.version(e.rev),RED.nodes.originalFlow(u),i?RED.notify("<p>"+RED._("deploy.successfulDeploy")+"</p><p>"+RED._("deploy.unusedConfigNodes")+' <a href="#" onclick="RED.sidebar.config.show(true); return false;">'+RED._("deploy.unusedConfigNodesLink")+"</a></p>","success",!1,6e3):RED.notify("<p>"+RED._("deploy.successfulDeploy")+"</p>","success"),RED.nodes.eachNode(function(e){e.changed&&(e.dirty=!0,e.changed=!1),e.moved&&(e.dirty=!0,e.moved=!1),e.credentials&&delete e.credentials}),RED.nodes.eachConfig(function(e){e.changed=!1,e.credentials&&delete e.credentials}),RED.nodes.eachSubflow(function(e){e.changed=!1}),RED.nodes.eachWorkspace(function(e){e.changed=!1}),RED.history.markAllDirty(),RED.view.redraw(),RED.events.emit("deploy")}).fail(function(e,t,n){RED.nodes.dirty(!0),$("#btn-deploy").removeClass("disabled"),401===e.status?RED.notify(RED._("deploy.deployFailed",{message:RED._("user.notAuthorized")}),"error"):409===e.status?w(0,!0):e.responseText?RED.notify(RED._("deploy.deployFailed",{message:e.responseText}),"error"):RED.notify(RED._("deploy.deployFailed",{message:RED._("deploy.errors.noResponse")}),"error")}).always(function(){m=!1;var e=Math.max(0,300-(Date.now()-f));setTimeout(function(){$(".deploy-button-content").css("opacity",1),$(".deploy-button-spinner").hide(),$("#header-shade").hide(),$("#editor-shade").hide(),$("#palette-shade").hide(),$("#sidebar-shade").hide()},e)})}}return{init:function(e){var i,t=(e=e||{}).type||"default";if("default"==t)$('<li><span class="deploy-button-group button-group"><a id="btn-deploy" class="deploy-button disabled" href="#"><span class="deploy-button-content"><img id="btn-deploy-icon" src="red/images/deploy-full-o.png"> <span>'+RED._("deploy.deploy")+'</span></span><span class="deploy-button-spinner hide"><img src="red/images/spin.svg"/></span></a><a id="btn-deploy-options" data-toggle="dropdown" class="deploy-button" href="#"><i class="fa fa-caret-down"></i></a></span></li>').prependTo(".header-toolbar"),RED.menu.init({id:"btn-deploy-options",options:[{id:"deploymenu-item-full",toggle:"deploy-type",icon:"red/images/deploy-full.png",label:RED._("deploy.full"),sublabel:RED._("deploy.fullDesc"),selected:!0,onselect:function(e){e&&a("full")}},{id:"deploymenu-item-flow",toggle:"deploy-type",icon:"red/images/deploy-flows.png",label:RED._("deploy.modifiedFlows"),sublabel:RED._("deploy.modifiedFlowsDesc"),onselect:function(e){e&&a("flows")}},{id:"deploymenu-item-node",toggle:"deploy-type",icon:"red/images/deploy-nodes.png",label:RED._("deploy.modifiedNodes"),sublabel:RED._("deploy.modifiedNodesDesc"),onselect:function(e){e&&a("nodes")}}]});else if("simple"==t){var n=e.label||RED._("deploy.deploy"),o="red/images/deploy-full-o.png";e.hasOwnProperty("icon")&&(o=e.icon),$('<li><span class="deploy-button-group button-group"><a id="btn-deploy" class="deploy-button disabled" href="#"><span class="deploy-button-content">'+(o?'<img id="btn-deploy-icon" src="'+o+'"> ':"")+"<span>"+n+'</span></span><span class="deploy-button-spinner hide"><img src="red/images/spin.svg"/></span></a></span></li>').prependTo(".header-toolbar")}$("#btn-deploy").click(function(e){e.preventDefault(),E()}),RED.actions.add("core:deploy-flows",E),RED.events.on("nodes:change",function(e){e.dirty?(window.onbeforeunload=function(){return RED._("deploy.confirm.undeployedChanges")},$("#btn-deploy").removeClass("disabled")):(window.onbeforeunload=null,$("#btn-deploy").addClass("disabled"))}),RED.comms.subscribe("notification/runtime-deploy",function(e,t){if(!i){var n=RED.nodes.version();if(null===n||m||n===t.revision)return;var o=$("<p>").text(RED._("deploy.confirm.backgroundUpdate"));i=RED.notify(o,{modal:!0,fixed:!0,buttons:[{text:RED._("deploy.confirm.button.ignore"),click:function(){i.close(),i=null}},{text:RED._("deploy.confirm.button.review"),class:"primary",click:function(){i.close(),w(RED.nodes.createCompleteNodeSet(),!1),i=null}}]})}})},setDeployInflight:function(e){m=e}}}(),RED.diff=function(){var c=!1;function R(e,t,n){var o=$('<div class="node-dialog-view-diff-panel"></div>').appendTo(e),i=$('<div class="node-dialog-view-diff-headers"></div>').appendTo(o);"merge"===n.mode&&o.addClass("node-dialog-view-diff-panel-merge");var a,O,s,r=(a=o,O=t,(s=$('<ol class="node-dialog-view-diff-diff"></ol>').appendTo(a)).editableList({addButton:!1,height:"auto",scrollOnAdd:!1,addItem:function(e,t,n){var o=n.diff,i=n.remoteDiff,a=n.tab.n,s=n.def,r=O.conflicts,d=$("<div>",{class:"node-diff-tab"}).appendTo(e);d.addClass("collapsed");var l,c,p=$("<div>",{class:"node-diff-tab-title"}).appendTo(d),u=$("<div>").appendTo(d),f=$("<div>",{class:"node-diff-node-entry-cell"}).appendTo(p),h=$("<div>",{class:"node-diff-node-entry-cell node-diff-node-local"}).appendTo(p);i&&(l=$("<div>",{class:"node-diff-node-entry-cell node-diff-node-remote"}).appendTo(p)),$('<span class="node-diff-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(f),L(a,s).appendTo(f);var g=(n.newTab||n.tab).n,v=$("<span>",{class:"node-diff-tab-title-meta"}).appendTo(f);"tab"===g.type?v.text(g.label||g.id):"subflow"===a.type?v.text(g.name||g.id):v.text(RED._("diff.globalNodes"));var m={local:{addedCount:0,deletedCount:0,changedCount:0,unchangedCount:0},remote:{addedCount:0,deletedCount:0,changedCount:0,unchangedCount:0},conflicts:0};if(n.newTab||n.remoteTab){var b,y={node:o.newConfig.all[a.id],all:o.newConfig.all,diff:o};if(i&&(b={node:i.newConfig.all[a.id]||null,all:i.newConfig.all,diff:i}),void 0!==a.type){var w,D=$("<div>",{class:"node-diff-node-entry node-diff-node-props collapsed"}).appendTo(u),E=$("<div>",{class:"node-diff-node-entry-header"}).appendTo(D),R=$("<div>",{class:"node-diff-node-entry-cell"}).appendTo(E),x=$("<div>",{class:"node-diff-node-entry-cell node-diff-node-local"}).appendTo(E);o.newConfig.all[a.id]?o.added[a.id]?(x.addClass("node-diff-node-added"),$('<span class="node-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>').appendTo(x)):o.changed[a.id]?(x.addClass("node-diff-node-changed"),$('<span class="node-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>').appendTo(x)):(x.addClass("node-diff-node-unchanged"),$('<span class="node-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(x)):x.addClass("node-diff-empty"),i&&(w=$("<div>",{class:"node-diff-node-entry-cell node-diff-node-remote"}).appendTo(E),i.newConfig.all[a.id]?i.added[a.id]?(w.addClass("node-diff-node-added"),$('<span class="node-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>').appendTo(w)):i.changed[a.id]?(w.addClass("node-diff-node-changed"),$('<span class="node-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>').appendTo(w)):(w.addClass("node-diff-node-unchanged"),$('<span class="node-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(w)):(w.addClass("node-diff-empty"),i.deleted[a.id])),$('<span class="node-diff-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(R),$("<span>").text(RED._("diff.flowProperties")).appendTo(R),E.click(function(e){e.preventDefault(),$(this).parent().toggleClass("collapsed")}),N(s,a,y,b).appendTo(D),c="",r[a.id]?(m.conflicts++,x.hasClass("node-diff-empty")||$('<span class="node-diff-node-conflict"><span class="node-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(x),w.hasClass("node-diff-empty")||$('<span class="node-diff-node-conflict"><span class="node-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(w),D.addClass("node-diff-node-entry-conflict")):c=O.resolutions[a.id],I(a,D,x,w,!0,!r[a.id],c,O)}}var T=0,_=0,k={};if(n.tab.nodes.forEach(function(e){k[e.id]=!0,P(e,m,O).appendTo(u)}),n.newTab&&(T=n.newTab.nodes.length,n.newTab.nodes.forEach(function(e){k[e.id]||(k[e.id]=!0,P(e,m,O).appendTo(u))})),n.remoteTab&&(_=n.remoteTab.nodes.length,n.remoteTab.nodes.forEach(function(e){k[e.id]||P(e,m,O).appendTo(u)})),p.click(function(e){p.parent().toggleClass("collapsed"),$(this).parent().hasClass("collapsed")&&($(this).parent().find(".node-diff-node-entry").addClass("collapsed"),$(this).parent().find(".debug-message-element").addClass("collapsed"))}),o.deleted[a.id])$('<span class="node-diff-node-deleted"><span class="node-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.flowDeleted"></span></span></span>').appendTo(h);else if(n.newTab)if(o.added[a.id])$('<span class="node-diff-node-added"><span class="node-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.flowAdded"></span></span></span>').appendTo(h);else{a.id&&(o.changed[a.id]?m.local.changedCount++:m.local.unchangedCount++);var j=$("<span>",{class:"node-diff-tab-stats"}).appendTo(h);$('<span class="node-diff-status"></span>').text(RED._("diff.nodeCount",{count:T})).appendTo(j),0<m.conflicts+m.local.addedCount+m.local.changedCount+m.local.deletedCount&&($('<span class="node-diff-status"> [ </span>').appendTo(j),0<m.conflicts&&$('<span class="node-diff-node-conflict"><span class="node-diff-status"><i class="fa fa-exclamation"></i> '+m.conflicts+"</span></span>").appendTo(j),0<m.local.addedCount&&$('<span class="node-diff-node-added"><span class="node-diff-status"><i class="fa fa-plus-square"></i> '+m.local.addedCount+"</span></span>").appendTo(j),0<m.local.changedCount&&$('<span class="node-diff-node-changed"><span class="node-diff-status"><i class="fa fa-square"></i> '+m.local.changedCount+"</span></span>").appendTo(j),0<m.local.deletedCount&&$('<span class="node-diff-node-deleted"><span class="node-diff-status"><i class="fa fa-minus-square"></i> '+m.local.deletedCount+"</span></span>").appendTo(j),$('<span class="node-diff-status"> ] </span>').appendTo(j))}else h.addClass("node-diff-empty");if(i){if(i.deleted[a.id])$('<span class="node-diff-node-deleted"><span class="node-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.flowDeleted"></span></span></span>').appendTo(l);else if(n.remoteTab)if(i.added[a.id])$('<span class="node-diff-node-added"><span class="node-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.flowAdded"></span></span></span>').appendTo(l);else{a.id&&(i.changed[a.id]?m.remote.changedCount++:m.remote.unchangedCount++);var C=$("<span>",{class:"node-diff-tab-stats"}).appendTo(l);$('<span class="node-diff-status"></span>').text(RED._("diff.nodeCount",{count:_})).appendTo(C),0<m.conflicts+m.remote.addedCount+m.remote.changedCount+m.remote.deletedCount&&($('<span class="node-diff-status"> [ </span>').appendTo(C),0<m.conflicts&&$('<span class="node-diff-node-conflict"><span class="node-diff-status"><i class="fa fa-exclamation"></i> '+m.conflicts+"</span></span>").appendTo(C),0<m.remote.addedCount&&$('<span class="node-diff-node-added"><span class="node-diff-status"><i class="fa fa-plus-square"></i> '+m.remote.addedCount+"</span></span>").appendTo(C),0<m.remote.changedCount&&$('<span class="node-diff-node-changed"><span class="node-diff-status"><i class="fa fa-square"></i> '+m.remote.changedCount+"</span></span>").appendTo(C),0<m.remote.deletedCount&&$('<span class="node-diff-node-deleted"><span class="node-diff-status"><i class="fa fa-minus-square"></i> '+m.remote.deletedCount+"</span></span>").appendTo(C),$('<span class="node-diff-status"> ] </span>').appendTo(C))}else l.addClass("node-diff-empty");if(c="",0<m.conflicts?p.addClass("node-diff-node-entry-conflict"):c=O.resolutions[a.id],a.id){var S=!(0<m.conflicts&&(o.deleted[a.id]||i.deleted[a.id]));I(a,p,h,l,!1,S,c,O)}}0===d.find(".node-diff-node-entry").length&&d.addClass("node-diff-tab-empty"),e.i18n()}}),s),d=t.localDiff,l=t.remoteDiff,c=(t.conflicts,d.currentConfig),p=d.newConfig;if(void 0!==l){o.addClass("node-diff-three-way");var u=n.oldRevTitle||RED._("diff.local"),f=n.newRevTitle||RED._("diff.remote");$("<div></div>").text(u).appendTo(i),$("<div></div>").text(f).appendTo(i)}else o.removeClass("node-diff-three-way");return{list:r,finish:function(){var e={diff:d,def:{category:"config",color:"#f0f0f0"},tab:{n:{},nodes:c.globals},newTab:{n:{},nodes:p.globals}};void 0!==l&&(e.remoteTab={n:{},nodes:l.newConfig.globals},e.remoteDiff=l),r.editableList("addItem",e);var t,o={};for(t in c.tabOrder.forEach(function(e){var t=c.tabs[e],n={diff:d,def:RED.nodes.getType("tab"),tab:t};p.tabs.hasOwnProperty(e)&&(n.newTab=p.tabs[e]),void 0!==l&&(n.remoteTab=l.newConfig.tabs[e],n.remoteDiff=l),o[e]=!0,r.editableList("addItem",n)}),p.tabOrder.forEach(function(e){if(!o[e]){o[e]=!0;var t=p.tabs[e],n={diff:d,def:RED.nodes.getType("tab"),tab:t,newTab:t};void 0!==l&&(n.remoteDiff=l),r.editableList("addItem",n)}}),void 0!==l&&l.newConfig.tabOrder.forEach(function(e){if(!o[e]){var t=l.newConfig.tabs[e],n={diff:d,remoteDiff:l,def:RED.nodes.getType("tab"),tab:t,remoteTab:t};r.editableList("addItem",n)}}),c.subflows)c.subflows.hasOwnProperty(t)&&(o[t]=!0,e={diff:d,def:{defaults:{},icon:"subflow.png",category:"subflows",color:"#da9"},tab:c.subflows[t]},p.subflows.hasOwnProperty(t)&&(e.newTab=p.subflows[t]),void 0!==l&&(e.remoteTab=l.newConfig.subflows[t],e.remoteDiff=l),r.editableList("addItem",e));for(t in p.subflows)p.subflows.hasOwnProperty(t)&&!o[t]&&(o[t]=!0,e={diff:d,def:{defaults:{},icon:"subflow.png",category:"subflows",color:"#da9"},tab:p.subflows[t],newTab:p.subflows[t]},void 0!==l&&(e.remoteDiff=l),r.editableList("addItem",e));if(void 0!==l)for(t in l.newConfig.subflows)l.newConfig.subflows.hasOwnProperty(t)&&!o[t]&&(e={diff:d,remoteDiff:l,def:{defaults:{},icon:"subflow.png",category:"subflows",color:"#da9"},tab:l.newConfig.subflows[t],remoteTab:l.newConfig.subflows[t]},r.editableList("addItem",e))}}}function E(e,i){var t=$("<div>",{class:"node-diff-property-wires"}),a=$("<ol></ol>"),s=0;return e.forEach(function(e,t){var n=$("<li>").appendTo(a);if(e&&0<e.length){$("<span>").text(t+1).appendTo(n);var o=$("<ul>").appendTo(n);e.forEach(function(e){s++;var t=$("<li>").appendTo(o),n=i[e];n?w(n,RED.nodes.getType(n.type)||{}).appendTo(t):t.text(e)})}else n.text("none")}),0===s?t.text("none"):a.appendTo(t),t}function L(e,t){var n=$("<div>",{class:"node-diff-node-entry-node"}),o=RED.utils.getNodeColor(e.type,t),i=RED.utils.getNodeIcon(t,e);"tab"===e.type&&(o="#C0DEED"),n.css("backgroundColor",o);var a=$("<div/>",{class:"palette_icon_container"}).appendTo(n);return $("<div/>",{class:"palette_icon",style:"background-image: url("+i+")"}).appendTo(a),n}function w(e,t){var n=$("<div>",{class:"node-diff-node-entry-title"});L(e,t).appendTo(n);var o=$("<div>",{class:"node-diff-node-description"}).appendTo(n),i=e.label||e.name||e.id;return $("<span>",{class:"node-diff-node-label"}).text(i).appendTo(o),n}function P(e,t,n){var o=n.localDiff,i=n.remoteDiff,a=n.conflicts[e.id],s=!0;o.added[e.id]&&(t.local.addedCount++,s=!1),i&&i.added[e.id]&&(t.remote.addedCount++,s=!1),o.deleted[e.id]&&(t.local.deletedCount++,s=!1),i&&i.deleted[e.id]&&(t.remote.deletedCount++,s=!1),o.changed[e.id]&&(t.local.changedCount++,s=!!0),i&&i.changed[e.id]&&(t.remote.changedCount++,s=!!0);var r=RED.nodes.getType(e.type);void 0===r&&(r=/^subflow:/.test(e.type)?{icon:"subflow.png",category:"subflows",color:"#da9",defaults:{name:{value:""}}}:{});var d,l=$("<div>",{class:"node-diff-node-entry collapsed"}),c=$("<div>",{class:"node-diff-node-entry-header"}).appendTo(l),p=$("<div>",{class:"node-diff-node-entry-cell"}).appendTo(c),u=$("<div>",{class:"node-diff-node-entry-cell node-diff-node-local"}).appendTo(c);if(i&&(d=$("<div>",{class:"node-diff-node-entry-cell node-diff-node-remote"}).appendTo(c)),$('<span class="node-diff-chevron"><i class="fa fa-angle-down"></i></span>').appendTo(p),s)t.local.unchangedCount++,w(e,r).appendTo(p),u.addClass("node-diff-node-unchanged"),$('<span class="node-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(u),i&&(t.remote.unchangedCount++,d.addClass("node-diff-node-unchanged"),$('<span class="node-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(d)),l.addClass("node-diff-node-unchanged");else if(o.added[e.id])u.addClass("node-diff-node-added"),d&&d.addClass("node-diff-empty"),$('<span class="node-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>').appendTo(u),w(e,r).appendTo(p);else if(i&&i.added[e.id])u.addClass("node-diff-empty"),d.addClass("node-diff-node-added"),$('<span class="node-diff-status"><i class="fa fa-plus-square"></i> <span data-i18n="diff.type.added"></span></span>').appendTo(d),w(e,r).appendTo(p);else{if(w(e,r).appendTo(p),o.moved[e.id]){var f=o.newConfig.all[e.id];if(o.deleted[e.z]||e.z===f.z||""===e.z||o.newConfig.all[e.z]){u.addClass("node-diff-node-moved");var h="";h=e.z===f.z?RED._("diff.type.movedFrom",{id:o.currentConfig.all[e.id].z||"global"}):RED._("diff.type.movedTo",{id:f.z||"global"}),$('<span class="node-diff-status"><i class="fa fa-caret-square-o-right"></i> '+h+"</span>").appendTo(u)}else u.addClass("node-diff-empty");!0}else o.deleted[e.z]?(u.addClass("node-diff-empty"),!0):o.deleted[e.id]?(u.addClass("node-diff-node-deleted"),$('<span class="node-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.deleted"></span></span>').appendTo(u),!0):o.changed[e.id]?o.newConfig.all[e.id].z!==e.z?u.addClass("node-diff-empty"):(u.addClass("node-diff-node-changed"),$('<span class="node-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>').appendTo(u),!0):o.newConfig.all[e.id].z!==e.z?u.addClass("node-diff-empty"):(t.local.unchangedCount++,u.addClass("node-diff-node-unchanged"),$('<span class="node-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(u));if(i)if(i.moved[e.id]){var g=i.newConfig.all[e.id];if(i.deleted[e.z]||e.z===g.z||""===e.z||i.newConfig.all[e.z]){d.addClass("node-diff-node-moved");var v="";v=e.z===g.z?RED._("diff.type.movedFrom",{id:i.currentConfig.all[e.id].z||"global"}):RED._("diff.type.movedTo",{id:g.z||"global"}),$('<span class="node-diff-status"><i class="fa fa-caret-square-o-right"></i> '+v+"</span>").appendTo(d)}else d.addClass("node-diff-empty")}else i.deleted[e.z]?d.addClass("node-diff-empty"):i.deleted[e.id]?(d.addClass("node-diff-node-deleted"),$('<span class="node-diff-status"><i class="fa fa-minus-square"></i> <span data-i18n="diff.type.deleted"></span></span>').appendTo(d)):i.changed[e.id]?i.newConfig.all[e.id].z!==e.z?d.addClass("node-diff-empty"):(d.addClass("node-diff-node-changed"),$('<span class="node-diff-status"><i class="fa fa-square"></i> <span data-i18n="diff.type.changed"></span></span>').appendTo(d)):i.newConfig.all[e.id].z!==e.z?d.addClass("node-diff-empty"):(t.remote.unchangedCount++,d.addClass("node-diff-node-unchanged"),$('<span class="node-diff-status"><i class="fa fa-square-o"></i> <span data-i18n="diff.type.unchanged"></span></span>').appendTo(d))}var m,b={node:o.newConfig.all[e.id],all:o.newConfig.all,diff:o};i&&(m={node:i.newConfig.all[e.id]||null,all:i.newConfig.all,diff:i}),N(r,e,b,m).appendTo(l);var y="";return a?(t.conflicts++,u.hasClass("node-diff-empty")||$('<span class="node-diff-node-conflict"><span class="node-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(u),d.hasClass("node-diff-empty")||$('<span class="node-diff-node-conflict"><span class="node-diff-status"><i class="fa fa-exclamation"></i></span></span>').prependTo(d),l.addClass("node-diff-node-entry-conflict")):y=n.resolutions[e.id],I(e,l,u,d,!1,!a,y,n),c.click(function(e){$(this).parent().toggleClass("collapsed")}),l}function N(t,o,i,a){var s,r={},d=i.node;a&&(s=a.node);var e=$("<div>",{class:"node-diff-node-entry-properties"}),n=$("<table>").appendTo(e),l=$("<colgroup><col/><col/></colgroup>").appendTo(n);void 0!==s&&$("<col/>").appendTo(l);var c,p,u,f,h,g,v,m=$("<tbody>").appendTo(n),b=!1,y=!1,w=!1;c=$("<tr>").appendTo(m),$("<td>",{class:"node-diff-property-cell-label"}).text("id").appendTo(c),p=$("<td>",{class:"node-diff-property-cell node-diff-node-local"}).appendTo(c),d?(p.addClass("node-diff-node-unchanged"),$('<span class="node-diff-status"></span>').appendTo(p),f=$('<span class="node-diff-element"></span>').appendTo(p),r["local.id"]=RED.utils.createObjectElement(d.id).appendTo(f)):p.addClass("node-diff-empty"),void 0!==s&&((u=$("<td>",{class:"node-diff-property-cell node-diff-node-remote"}).appendTo(c)).addClass("node-diff-node-unchanged"),s?($('<span class="node-diff-status"></span>').appendTo(u),f=$('<span class="node-diff-element"></span>').appendTo(u),r["remote.id"]=RED.utils.createObjectElement(s.id).appendTo(f)):u.addClass("node-diff-empty")),o.hasOwnProperty("x")&&(d&&(d.x===o.x&&d.y===o.y||(b=!0,0)),s&&(s.x===o.x&&s.y===o.y||(y=!0,0)),(y&&b&&(d.x!==s.x||d.y!==s.y)||!b&&y&&i.diff.deleted[o.id]||b&&!y&&a.diff.deleted[o.id])&&(w=!0),c=$("<tr>").appendTo(m),$("<td>",{class:"node-diff-property-cell-label"}).text("position").appendTo(c),p=$("<td>",{class:"node-diff-property-cell node-diff-node-local"}).appendTo(c),d?(p.addClass("node-diff-node-"+(b?"changed":"unchanged")),$('<span class="node-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(p),f=$('<span class="node-diff-element"></span>').appendTo(p),r["local.position"]=RED.utils.createObjectElement({x:d.x,y:d.y},{path:"position",exposeApi:!0,ontoggle:function(e,t){r["remote."+e]&&r["remote."+e].prop("expand")(e,t)}}).appendTo(f)):p.addClass("node-diff-empty"),void 0!==s&&((u=$("<td>",{class:"node-diff-property-cell node-diff-node-remote"}).appendTo(c)).addClass("node-diff-node-"+(y?"changed":"unchanged")),s?($('<span class="node-diff-status">'+(y?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(u),f=$('<span class="node-diff-element"></span>').appendTo(u),r["remote.position"]=RED.utils.createObjectElement({x:s.x,y:s.y},{path:"position",exposeApi:!0,ontoggle:function(e,t){r["local."+e]&&r["local."+e].prop("expand")(e,t)}}).appendTo(f)):u.addClass("node-diff-empty"))),b=y=w=!1,o.hasOwnProperty("wires")&&(h=JSON.stringify(o.wires),d&&(g=JSON.stringify(d.wires),h!==g&&(b=!0,0)),s&&(v=JSON.stringify(s.wires),h!==v&&(y=!0,0)),(y&&b&&g!==v||!b&&y&&i.diff.deleted[o.id]||b&&!y&&a.diff.deleted[o.id])&&(w=!0),c=$("<tr>").appendTo(m),$("<td>",{class:"node-diff-property-cell-label"}).text("wires").appendTo(c),p=$("<td>",{class:"node-diff-property-cell node-diff-node-local"}).appendTo(c),d?(w?(p.addClass("node-diff-node-conflict"),$('<span class="node-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(p)):(p.addClass("node-diff-node-"+(b?"changed":"unchanged")),$('<span class="node-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(p)),E(d.wires,i.all).appendTo(p)):p.addClass("node-diff-empty"),void 0!==s&&(u=$("<td>",{class:"node-diff-property-cell node-diff-node-remote"}).appendTo(c),s?(w?(u.addClass("node-diff-node-conflict"),$('<span class="node-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(u)):(u.addClass("node-diff-node-"+(y?"changed":"unchanged")),$('<span class="node-diff-status">'+(y?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(u)),E(s.wires,a.all).appendTo(u)):u.addClass("node-diff-empty")));var D=Object.keys(o).filter(function(e){return!("inputLabels"==e||"outputLabels"==e||"z"==e||"wires"==e||"x"===e||"y"===e||"id"===e||"type"===e||t.defaults&&t.defaults.hasOwnProperty(e))});return t.defaults&&(D=D.concat(Object.keys(t.defaults))),"tab"!==o.type&&(D=D.concat(["inputLabels","outputLabels"])),D.forEach(function(n){w=y=b=!1,h=JSON.stringify(o[n]),d&&(g=JSON.stringify(d[n]),h!==g&&(b=!0,0)),s&&(v=JSON.stringify(s[n]),h!==v&&(y=!0,0)),(y&&b&&g!==v||!b&&y&&i.diff.deleted[o.id]||b&&!y&&a.diff.deleted[o.id])&&(w=!0),c=$("<tr>").appendTo(m);var e=$("<td>",{class:"node-diff-property-cell-label"}).text(n).appendTo(c);p=$("<td>",{class:"node-diff-property-cell node-diff-node-local"}).appendTo(c),d?(w?(p.addClass("node-diff-node-conflict"),$('<span class="node-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(p)):(p.addClass("node-diff-node-"+(b?"changed":"unchanged")),$('<span class="node-diff-status">'+(b?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(p)),f=$('<span class="node-diff-element"></span>').appendTo(p),r["local."+n]=RED.utils.createObjectElement(d[n],{path:n,exposeApi:!0,ontoggle:function(e,t){r["remote."+n]&&r["remote."+n].prop("expand")(e,t)}}).appendTo(f)):p.addClass("node-diff-empty"),void 0!==s&&(u=$("<td>",{class:"node-diff-property-cell node-diff-node-remote"}).appendTo(c),s?(w?(u.addClass("node-diff-node-conflict"),$('<span class="node-diff-status"><i class="fa fa-exclamation"></i></span>').appendTo(u)):(u.addClass("node-diff-node-"+(y?"changed":"unchanged")),$('<span class="node-diff-status">'+(y?'<i class="fa fa-square"></i>':"")+"</span>").appendTo(u)),f=$('<span class="node-diff-element"></span>').appendTo(u),r["remote."+n]=RED.utils.createObjectElement(s[n],{path:n,exposeApi:!0,ontoggle:function(e,t){r["local."+n]&&r["local."+n].prop("expand")(e,t)}}).appendTo(f)):u.addClass("node-diff-empty")),d&&s&&"string"==typeof d[n]&&(/\n/.test(d[n])||/\n/.test(s[n]))&&$('<button class="editor-button editor-button-small node-diff-text-diff-button"><i class="fa fa-file-o"> <i class="fa fa-caret-left"></i> <i class="fa fa-caret-right"></i> <i class="fa fa-file-o"></i></button>').click(function(){k(d[n],s[n])}).appendTo(e)}),e}function I(i,a,e,t,s,n,o,r){var d="node-diff-selectbox-"+i.id.replace(/\./g,"-")+(s?"-props":""),l="";(i.z||s)&&(l="node-diff-selectbox-tab-"+(s?i.id:i.z).replace(/\./g,"-"));var c=!s&&("tab"===i.type||"subflow"===i.type),p=function(e){var t;if(void 0===i.type);else if(c)t="node-diff-selectbox-tab-"+i.id.replace(/\./g,"-"),$("."+t+"-"+this.value).prop("checked",!0),"local"===this.value?($("."+t+"-"+this.value).closest(".node-diff-node-entry").addClass("node-diff-select-local"),$("."+t+"-"+this.value).closest(".node-diff-node-entry").removeClass("node-diff-select-remote")):($("."+t+"-"+this.value).closest(".node-diff-node-entry").removeClass("node-diff-select-local"),$("."+t+"-"+this.value).closest(".node-diff-node-entry").addClass("node-diff-select-remote"));else{var n="node-diff-selectbox-"+(s?i.id:i.z).replace(/\./g,"-");$("#"+n+"-local").prop("checked",!1),$("#"+n+"-remote").prop("checked",!1);var o=$("#"+n+"-local").closest(".node-diff-tab").find(".node-diff-tab-title");o.removeClass("node-diff-select-local"),o.removeClass("node-diff-select-remote")}"local"===this.value?(a.removeClass("node-diff-select-remote"),a.addClass("node-diff-select-local")):"remote"===this.value&&(a.addClass("node-diff-select-remote"),a.removeClass("node-diff-select-local")),x(r)},u=$("<label>",{class:"node-diff-selectbox",for:d+"-local"}).click(function(e){e.stopPropagation()}).appendTo(e),f=$("<input>",{id:d+"-local",type:"radio",value:"local",name:d,class:l+"-local"+(c?"":" node-diff-select-node")}).data("node-id",i.id).change(p).appendTo(u),h=$("<label>",{class:"node-diff-selectbox",for:d+"-remote"}).click(function(e){e.stopPropagation()}).appendTo(t),g=$("<input>",{id:d+"-remote",type:"radio",value:"remote",name:d,class:l+"-remote"+(c?"":" node-diff-select-node")}).data("node-id",i.id).change(p).appendTo(h);"local"===o?f.prop("checked",!0):"remote"===o&&g.prop("checked",!0),(n||e.hasClass("node-diff-empty")||t.hasClass("node-diff-empty"))&&(u.hide(),h.hide())}function x(e){var t=0;$(".node-diff-selectbox>input:checked").each(function(){e.conflicts[$(this).data("node-id")]&&t++,e.resolutions[$(this).data("node-id")]=$(this).val()});var n=Object.keys(e.conflicts).length;n-t==0?$("#node-diff-toolbar-resolved-conflicts").html('<span class="node-diff-node-added"><span class="node-diff-status"><i class="fa fa-check"></i></span></span> '+RED._("diff.unresolvedCount",{count:n-t})):$("#node-diff-toolbar-resolved-conflicts").html('<span class="node-diff-node-conflict"><span class="node-diff-status"><i class="fa fa-exclamation"></i></span></span> '+RED._("diff.unresolvedCount",{count:n-t})),n===t&&($("#node-diff-view-diff-merge").removeClass("disabled"),$("#node-diff-view-resolve-diff").removeClass("disabled"))}function t(s){$.ajax({headers:{Accept:"application/json"},cache:!1,url:"flows",success:function(e){var t=RED.nodes.createCompleteNodeSet(),n=RED.nodes.originalFlow(),o=e.flows,i=T(n,t),a=T(n,o);a.rev=e.rev,s(_(i,a))}})}function n(e){void 0===e?t(n):function(i,a){if(c)return;(a=a||{}).mode,i.localDiff;var s=i.remoteDiff,r=i.conflicts,e={title:a.title||RED._("diff.reviewChanges"),width:1/0,overlay:!0,buttons:[{text:RED._("merge"===a.mode?"common.label.cancel":"common.label.close"),click:function(){RED.tray.close()}}],resize:function(e){},open:function(e){var t=e.find(".editor-tray-body"),n=($('<div class="node-diff-toolbar"><span><span id="node-diff-toolbar-resolved-conflicts"></span></span> </div>').prependTo(t),$('<div class="node-diff-container"></div>').appendTo(t)),o=R(n,i,a);o.list.hide(),s?($("#node-diff-view-diff-merge").show(),0===Object.keys(r).length?$("#node-diff-view-diff-merge").removeClass("disabled"):$("#node-diff-view-diff-merge").addClass("disabled")):$("#node-diff-view-diff-merge").hide(),x(i),setTimeout(function(){o.finish(),o.list.show()},300),$("#sidebar-shade").show()},close:function(){c=!1,$("#sidebar-shade").hide()},show:function(){}};"merge"===a.mode&&e.buttons.push({id:"node-diff-view-diff-merge",text:RED._("deploy.confirm.button.merge"),class:"primary disabled",click:function(){$("#node-diff-view-diff-merge").hasClass("disabled")||(x(i),o(i),RED.tray.close())}});RED.tray.show(e)}(e,{mode:"merge"})}function d(e){var t=[],n={},o={},i=[],a={};return e.forEach(function(e){"tab"===(a[e.id]=e).type?(t.push(e.id),n[e.id]={n:e,nodes:[]}):"subflow"===e.type&&(o[e.id]={n:e,nodes:[]})}),e.forEach(function(e){"tab"!==e.type&&"subflow"!==e.type&&(n[e.z]?n[e.z].nodes.push(e):o[e.z]?o[e.z].nodes.push(e):i.push(e))}),{all:a,tabOrder:t,tabs:n,subflows:o,globals:i}}function T(e,t){var n=d(e),o=d(t),i={},a={},s={},r={};return Object.keys(n.all).forEach(function(e){RED.nodes.workspace(e)||RED.nodes.subflow(e)||RED.nodes.node(e);o.all.hasOwnProperty(e)?JSON.stringify(n.all[e])!==JSON.stringify(o.all[e])&&(s[e]=!0,n.all[e].z!==o.all[e].z&&(r[e]=!0)):a[e]=!0}),Object.keys(o.all).forEach(function(e){n.all.hasOwnProperty(e)||(i[e]=!0)}),{currentConfig:n,newConfig:o,added:i,deleted:a,changed:s,moved:r}}function _(e,t){var n,o,i={},a={},s={localDiff:e,remoteDiff:t,conflicts:i,resolutions:a},r={};for(n in e.currentConfig.all)if(e.currentConfig.all.hasOwnProperty(n)){r[n]=!0;var d=e.newConfig.all[n];if(e.changed[n]&&t.deleted[n])i[n]=!0;else if(e.deleted[n]&&t.changed[n])i[n]=!0;else if(e.changed[n]&&t.changed[n]){var l=t.newConfig.all[n];JSON.stringify(d)!==JSON.stringify(l)&&(i[n]=!0)}i[n]||(t.added[n]||t.changed[n]||t.deleted[n]?a[n]="remote":a[n]="local")}for(n in e.added)e.added.hasOwnProperty(n)&&(o=e.newConfig.all[n],t.deleted[o.z]?i[n]=!0:a[n]="local");for(n in t.added)t.added.hasOwnProperty(n)&&(o=t.newConfig.all[n],e.deleted[o.z]?i[n]=!0:a[n]="remote");return s}function s(e){e.localDiff.currentConfig;var t,n=e.localDiff,o=e.remoteDiff,i=e.conflicts,a=e.resolutions;for(t in i)if(i.hasOwnProperty(t)&&!a.hasOwnProperty(t))throw console.log(e),new Error("No resolution for conflict on node",t);var s,r=[],d={},l={};for(t in n.newConfig.all)n.newConfig.all.hasOwnProperty(t)&&(s=RED.nodes.node(t),"local"===a[t]?(s&&(d[t]=s.changed),r.push(n.newConfig.all[t])):"remote"===a[t]?!o.deleted[t]&&o.newConfig.all.hasOwnProperty(t)&&(s&&(d[t]=s.changed),l[t]=!0,r.push(o.newConfig.all[t])):console.log("Unresolved",t));for(t in o.added)o.added.hasOwnProperty(t)&&((s=RED.nodes.node(t))&&(d[t]=s.changed),n.added.hasOwnProperty(t)||(l[t]=!0,r.push(o.newConfig.all[t])));return{config:r,nodeChangedStates:d,localChangedStates:l}}function o(e){var t=s(e),n=t.config,o=t.nodeChangedStates,i=t.localChangedStates,a={t:"replace",config:RED.nodes.createCompleteNodeSet(),changed:o,dirty:RED.nodes.dirty(),rev:RED.nodes.version()};RED.history.push(a),RED.nodes.clear(),RED.nodes.import(n)[0].forEach(function(e){(o[e.id]||i[e.id])&&(e.changed=!0)}),RED.nodes.version(e.remoteDiff.rev),RED.view.redraw(!0),RED.palette.refresh(),RED.workspaces.refresh(),RED.sidebar.config.refresh()}function k(y,w){var e={title:RED._("diff.compareChanges"),width:1/0,overlay:!0,buttons:[{text:RED._("common.label.close"),click:function(){RED.tray.close()}}],resize:function(e){},open:function(e){var t=e.find(".editor-tray-body"),n=$('<div class="node-text-diff"></div>').appendTo(t),o=$("<table>",{class:"node-text-diff-content"}).appendTo(n);$('<colgroup><col width="50"><col width="50%"><col width="50"><col width="50%"></colgroup>').appendTo(o);for(var i,a=$("<tbody>").appendTo(o),s=function(e,t,n){var o,i,a=e.split(/\r?\n/),s=t.split(/\r?\n/),r=a.length,d=s.length,l={a:[],b:[]},c=[];for(o=0;o<r+1;o++)for(c[o]=[],i=0;i<d+1;i++)c[o][i]=0;for(o=r-1;0<=o;o--)for(i=d-1;0<=i;i--)0,1!==C(a[o],s[i],n)?c[o][i]=c[o+1][i+1]+1:c[o][i]=Math.max(c[o+1][i],c[o][i+1]);i=o=0;for(;o<r&&i<d;){var p=C(a[o],s[i],n);if(1!==p){var u=0;0===p?u=0:2==p&&(u=3),l.a.push({i:o+1,j:i+1,line:a[o],type:u}),l.b.push({i:i+1,j:o+1,line:s[i],type:u}),o++,i++}else c[o+1][i]>=c[o][i+1]?(l.a.push({i:o+1,line:a[o],type:1}),o++):(l.b.push({i:i+1,line:s[i],type:4}),i++)}for(;o<r||i<d;)o==r?(l.b.push({i:i+1,line:s[i],type:4}),i++):i==d&&(l.a.push({i:o+1,line:a[o],type:1}),o++);return l}(y||"",w||""),r=0,d=0,l=Math.max(s.a.length,s.b.length),c=[],p=[],u=0,f=0,h=0;h<l;h++){s[h];var g=r<s.a.length?s.a[r]:{type:2,line:""},v=d<s.b.length?s.b[d]:{type:2,line:""};0===g.type&&0!==v.type?(g={type:2,line:""},d++):0===v.type&&0!==g.type?(v={type:2,line:""},r++):(r++,d++),c.push({a:g,b:v}),void 0===i?(i={start:h,end:h},f=(u=0)===g.type&&0===v.type?0:1):0===g.type&&0===v.type?0===f?(i.end=h,u++):1===f?(i.end=h,f=2,u=0):2===f&&(i.end=h,8===++u&&(i.end-=5,p.push(i),i={start:h-5,end:h-5},u=f=0)):(i.end=h,u++,0===f?(3<i.end&&(i.end-=3,i.empty=!0,p.push(i),i={start:h-3,end:h-3}),f=1):2===f&&(f=1))}0===f&&(i.empty=!0),i.end=l,p.push(i);for(var m=0;m<p.length;m++)if((i=p[m]).empty)D(i.start,i.end,c).appendTo(a);else for(h=i.start;h<i.end;h++){var b=j(c[h]).appendTo(a);h===i.start?b.addClass("start-block"):h===i.end-1&&b.addClass("end-block")}},close:function(){c=!1},show:function(){}};RED.tray.show(e)}function D(i,a,s){diffRow=$('<tr class="node-text-diff-header node-text-diff-expand">');var e=$('<td colspan="4"> <i class="fa fa-arrows-v"></i> </td>').appendTo(diffRow),r=$("<span></span>").appendTo(e);return a<s.length-1&&r.text("@@ -"+(s[a-1].a.i+1)+" +"+(s[a-1].b.i+1)),diffRow.click(function(e){if(20<a-i){var t=$(this).offset();if(0<i){for(var n=i;n<i+10;n++)j(s[n]).addClass("unchanged").insertBefore($(this));i+=10}if(a<s.length-1){for(n=a-1;a-11<n;n--)j(s[n]).addClass("unchanged").insertAfter($(this));a-=10}a<s.length-1&&r.text("@@ -"+(s[a-1].a.i+1)+" +"+(s[a-1].b.i+1));var o=$(this).offset().top-t.top;$(".node-text-diff").scrollTop($(".node-text-diff").scrollTop()+o)}else{for(n=i;n<a;n++)j(s[n]).addClass("unchanged").insertBefore($(this));$(this).remove()}}),diffRow}function j(e){var t=$("<tr>"),n=e.a,o=e.b,i=$('<td class="lineno">').text(2===n.type?"":n.i).appendTo(t),a=$('<td class="linetext">').text(n.line).appendTo(t);return 2===n.type?(i.addClass("blank"),a.addClass("blank")):4===n.type?(i.addClass("added"),a.addClass("added")):1===n.type&&(i.addClass("removed"),a.addClass("removed")),i=$('<td class="lineno">').text(2===o.type?"":o.i).appendTo(t),a=$('<td class="linetext">').text(o.line).appendTo(t),2===o.type?(i.addClass("blank"),a.addClass("blank")):4===o.type?(i.addClass("added"),a.addClass("added")):1===o.type&&(i.addClass("removed"),a.addClass("removed")),t}function C(e,t,n){return n?e===t?0:e.trim()===t.trime()?2:1:e===t?0:1}function p(e,E){var g=$("<div></div>");return e.forEach(function(v){var e=v.hunks,t=v.binary,n=$("<table>",{class:"node-text-diff-content"}).appendTo(g);$('<colgroup><col width="50"><col width="50"><col width="100%"></colgroup>').appendTo(n);var m=$("<tbody>").appendTo(n),o=$('<tr class="node-text-diff-file-header">').appendTo(m),i=$('<td colspan="3"></td>').appendTo(o);$('<i class="node-diff-chevron fa fa-angle-down"></i>').appendTo(i);o.click(function(e){o.toggleClass("collapsed");var t=o.hasClass("collapsed");o.nextUntil(".node-text-diff-file-header").toggle(!t)});$('<span class="filename"></span>').text(v.file).appendTo(i);var b,y=0,w=0,D={};if(E.project.files&&E.project.files.flow===v.file){E.unmerged&&$('<span style="float: right;"><span id="node-diff-toolbar-resolved-conflicts"></span></span>').appendTo(i);var a=$('<tr class="node-text-diff-header">').appendTo(m),l=$('<td class="flow-diff" colspan="3"></td>').appendTo(a),s=E.project.name,c=E.project.files.flow,p="projects/"+s+"/files/"+E.commonRev+"/"+c,u="projects/"+s+"/files/"+E.oldRev+"/"+c,r="projects/"+s+"/files/"+E.newRev+"/"+c,d=[$.Deferred(),$.Deferred(),$.Deferred()];if(E.commonRev){p="projects/"+s+"/files/"+E.commonRev+"/"+c;$.ajax({dataType:"json",url:p}).then(function(e){d[0].resolve(e)}).fail(function(){d[0].resolve(null)})}else d[0].resolve(null);$.ajax({dataType:"json",url:u}).then(function(e){d[1].resolve(e)}).fail(function(){d[1].resolve({content:"[]"})}),$.ajax({dataType:"json",url:r}).then(function(e){d[2].resolve(e)}).fail(function(){d[2].resolve({content:"[]"})}),$.when.apply($,d).always(function(e,t,n){var o,i,a;if(e)try{o=JSON.parse(e.content||"[]")}catch(e){return console.log(RED._("diff.commonVersionError"),p),void console.log(e)}try{i=JSON.parse(t.content||"[]")}catch(e){return console.log(RED._("diff.oldVersionError"),u),void console.log(e)}o||(o=i);try{a=JSON.parse(n.content||"[]")}catch(e){return console.log(RED._("diff.newVersionError"),a),void console.log(e)}var s=T(o,i),r=T(o,a);E.currentDiff=_(s,r);var d=R(l,E.currentDiff,{title:c,mode:E.commonRev?"merge":"view",oldRevTitle:E.oldRevTitle,newRevTitle:E.newRevTitle});d.list.hide(),x(E.currentDiff),setTimeout(function(){d.finish(),d.list.show()},300)})}else if(t){var f=$('<tr class="node-text-diff-header">').appendTo(m),h=$('<td colspan="3"></td>').appendTo(f);$("<span></span>").text(RED._("diff.noBinaryFileShowed")).appendTo(h)}else E.unmerged&&(b=$('<span style="float: right;">'+RED._("diff.conflictHeader",{resolved:w,unresolved:y})+"</span>").appendTo(i)),e.forEach(function(u){var e=$('<tr class="node-text-diff-header">').appendTo(m),t=$('<td colspan="3"></td>').appendTo(e),f=($("<span></span>").text(u.header).appendTo(t),u.conflict),h=u.localStartLine,g=u.remoteStartLine;f&&y++,u.lines.forEach(function(e,t){var n,o=u.diffStart+t,i=f&&/^\+\+(<<<<<<<|=======$|>>>>>>>)/.test(e),a=$("<tr>").appendTo(m),s=$('<td class="lineno">').appendTo(a);i?s.attr("colspan",2):n=$('<td class="lineno">').appendTo(a);var r=$('<td class="linetext">').appendTo(a),d=1;if(f&&(d=2),i){if(a.addClass("mergeHeader"),/^\+\+=======$/.test(e))u.changeSeparator=o,a.addClass("mergeHeader-separator");else{var l=/^..<<<<<<</.test(e);l?($("<span>").text("<<<<<<< Local Changes").appendTo(r),u.localChangeStart=o):(u.remoteChangeEnd=o,$("<span>").text(">>>>>>> Remote Changes").appendTo(r)),a.addClass("mergeHeader-"+(l?"ours":"theirs")),$('<button class="editor-button editor-button-small" style="float: right; margin-right: 20px;"><i class="fa fa-angle-double-'+(l?"down":"up")+'"></i> use '+(l?"local":"remote")+" changes</button>").appendTo(r).click(function(e){var t,n;e.preventDefault(),w++,l?((n=(t=a.nextUntil(".mergeHeader-separator")).last().next()).nextUntil(".mergeHeader").remove(),n.next().remove()):((n=(t=a.prevUntil(".mergeHeader-separator")).last().prev()).prevUntil(".mergeHeader").remove(),n.prev().remove()),n.remove(),a.remove(),t.find(".linetext").addClass("added"),b.empty(),$("<span>"+RED._("diff.conflictHeader",{resolved:w,unresolved:y})+"</span>").appendTo(b),D[v.file]=D[v.file]||{},D[v.file][u.localChangeStart]={changeStart:u.localChangeStart,separator:u.changeSeparator,changeEnd:u.remoteChangeEnd,selection:l?"A":"B"},E.resolveConflict&&E.resolveConflict({conflicts:y,resolved:w,resolutions:D})})}}else{var c=e[0];f&&!E.unmerged&&" "===c&&(c=e[1]),$('<span class="prefix">').text(c).appendTo(r);var p=!1;f&&E.unmerged?($('<span class="prefix">').text(e[1]).appendTo(r),"+"===e[0]&&(s.text(h++),p=!0),"+"===e[1]&&(n.text(g++),p=!0)):"+"===e[0]||f&&"+"===e[1]?(s.addClass("added"),n.addClass("added"),r.addClass("added"),n.text(g++),p=!0):("-"===e[0]||f&&"-"===e[1])&&(s.addClass("removed"),n.addClass("removed"),r.addClass("removed"),s.text(h++),p=!0),p||(r.addClass("unchanged"),0<h&&"\\"!==e[0]&&""!==e&&s.text(h++),0<g&&"\\"!==e[0]&&""!==e&&n.text(g++)),$("<span>").text(e.substring(d)).appendTo(r)}})})}),g}function r(e){var t;t=Array.isArray(e)?e:e.split("\n");for(var n,o,i=/^diff (?:(?:--git a\/(.*) b\/(.*))|(?:--cc (.*)))$/,a=/^\+\+\+ b\/(.*)\t?/,s=/^Binary files /,r=/^@@ -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @@ ?(.*)$/,d=/^@+ -((\d+)(,(\d+))?) -((\d+)(,(\d+))?) \+((\d+)(,(\d+))?) @+/,l=[],c=0;c<t.length;c++){var p=t[c],u=i.exec(p);if(u)o&&(n.hunks.push(o),l.push(n)),o=null,n={file:u[1]||u[3],hunks:[]};else if(s.test(p))n&&(n.binary=!0);else{var f=a.exec(p);if(f)n.file=f[1];else{var h=r.exec(p);if(h){o&&n.hunks.push(o),o={header:p,localStartLine:h[2],localLength:h[4]||1,remoteStartLine:h[6],remoteLength:h[8]||1,lines:[],conflict:!1};continue}if(h=d.exec(p)){o&&n.hunks.push(o),o={header:p,localStartLine:h[2],localLength:h[4]||1,remoteStartLine:h[6],remoteLength:h[8]||1,diffStart:parseInt(h[10]),lines:[],conflict:!0};continue}o&&o.lines.push(p)}}}return o&&n.hunks.push(o),l.push(n),l}return{init:function(){RED.actions.add("core:show-remote-diff",n)},getRemoteDiff:t,showRemoteDiff:n,showUnifiedDiff:function(o){var t,e=o.diff,n=o.title,i=r(e);o.unmerged&&(o.resolveConflict=function(e){(t=e).conflicts===e.resolved&&$("#node-diff-view-resolve-diff").removeClass("disabled")});var a={title:n||RED._("diff.compareChanges"),width:1/0,overlay:!0,buttons:[{text:RED._(o.unmerged?"common.label.cancel":"common.label.close"),click:function(){o.oncancel&&o.oncancel(),RED.tray.close()}}],resize:function(e){},open:function(e){var t=e.find(".editor-tray-body"),n=$('<div class="node-text-diff"></div>').appendTo(t);p(i,o).appendTo(n)},close:function(){c=!1},show:function(){}};o.unmerged&&a.buttons.push({id:"node-diff-view-resolve-diff",text:RED._("diff.saveConflict"),class:"primary disabled",click:function(){if(!$("#node-diff-view-resolve-diff").hasClass("disabled")){if(o.currentDiff){var e=s(o.currentDiff);(t={resolutions:{}}).resolutions[o.project.files.flow]=JSON.stringify(e.config,"",4)}o.onresolve&&o.onresolve(t),RED.tray.close()}}}),RED.tray.show(a)},showCommitDiff:function(d){var l=function(e){for(var t={},n=e.split("\n"),o=[],i=0;i<n.length;i++)if(/^commit /.test(n[i]))t.sha=n[i].substring(7);else if(/^Author: /.test(n[i])){t.author=n[i].substring(8);var a=/^(.*) <(.*)>$/.exec(t.author);a&&(t.authorName=a[1],t.authorEmail=a[2])}else if(/^Date: /.test(n[i]))t.date=n[i].substring(8);else if(/^ /.test(n[i]))t.title?(4!==n[i].length||0<o.length)&&o.push(n[i].substring(4)):t.title=n[i].substring(4);else if(/^diff /.test(n[i])){t.files=r(n.slice(i));break}return t.comment=o.join("\n"),t}(d.commit),e={title:RED._("diff.viewCommitDiff"),width:1/0,overlay:!0,buttons:[{text:RED._("common.label.close"),click:function(){RED.tray.close()}}],resize:function(e){},open:function(e){var t=e.find(".editor-tray-body"),n=$('<div class="node-text-diff"></div>').appendTo(t),o=$("<table>",{class:"node-text-diff-content"}).appendTo(n);$('<colgroup><col width="50"><col width="50"><col width="100%"></colgroup>').appendTo(o);var i=$("<tbody>").appendTo(o),a=$('<tr class="node-text-diff-commit-header">').appendTo(i),s=$('<td colspan="3"></td>').appendTo(a);$("<h3>").text(l.title).appendTo(s),$('<div class="commit-body"></div>').text(l.comment).appendTo(s);var r=$('<div class="commit-summary"></div>').appendTo(s);$('<div style="float: right">').text("Commit "+l.sha).appendTo(r),$("<div>").text((l.authorName||l.author)+" - "+d.date).appendTo(r),l.files&&p(l.files,d).appendTo(n)},close:function(){c=!1},show:function(){}};RED.tray.show(e)},mergeDiff:o}}(),RED.keyboard=function(){var s,n=/Mac/i.test(window.navigator.platform),p={},a={left:37,up:38,right:39,down:40,escape:27,enter:13,backspace:8,delete:46,space:32,";":186,"=":187,",":188,"-":189,".":190,"/":191,"\\":220,"'":222,"?":191},t={16:!0,17:!0,18:!0,91:!0,93:!0},u={},r={},d={59:186,61:187,173:189};function f(e){for(var t,n=e.toLowerCase().split("-"),o={},i=0;i<n.length;i++)switch(n[i]){case"ctrl":case"cmd":o.ctrl=!0,o.meta=!0;break;case"alt":o.alt=!0;break;case"shift":o.shift=!0;break;case"":0,t=a["-"];break;default:if(a.hasOwnProperty(n[i]))t=a[n[i]];else{if(1<n[i].length)return null;t=n[i].toUpperCase().charCodeAt(0)}}return[t,o]}function l(e,t,n,o){var i=n,a=o;"function"!=typeof n&&"string"!=typeof n||(i={},a=n);var s=[],r=0;if("string"==typeof t){"string"==typeof a&&(u[a]={scope:e,key:t},"boolean"==typeof o&&(u[a].user=o));var d=t.split(" ");for(r=0;r<d.length;r++){var l=f(d[r]);if(!l)return;s.push(l)}}else s.push([t,i]);var c=p;for(r=0;r<s.length;r++)t=s[r][0],(i=s[r][1]).ctrl&&(c.ctrl=c.ctrl||{},c=c.ctrl),i.shift&&(c.shift=c.shift||{},c=c.shift),i.alt&&(c.alt=c.alt||{},c=c.alt),c[t]=c[t]||{},c=c[t];c.scope=e,c.ondown=a}function o(e,t){var n=t||{},o=[],i=0;if("string"==typeof e){var a=e.split(" ");for(i=0;i<a.length;i++){var s=f(a[i]);if(!s)return void console.log("Unrecognised key specifier:",e);o.push(s)}}else o.push([e,n]);var r=p;for(i=0;i<o.length;i++){if(e=o[i][0],(n=o[i][1]).ctrl&&(r=r.ctrl),r&&n.shift&&(r=r.shift),r&&n.alt&&(r=r.alt),!r[e])return;r=r[e]}"string"==typeof r.ondown&&("boolean"==typeof t&&t?u[r.ondown]={user:t}:delete u[r.ondown]),delete r.scope,delete r.ondown}d3.select(window).on("keydown",function(){if(!t[d3.event.keyCode]){var e=function e(t){var n=s||p;(t.ctrlKey||t.metaKey)&&(n=n.ctrl),n&&t.shiftKey&&(n=n.shift),n&&t.altKey&&(n=n.alt);var o=d[t.keyCode]||t.keyCode;if(n&&n[o]){var i=n[o];if(!i.scope)return s?(s=null,e(t)):(0<Object.keys(i).length&&(s=i,t.preventDefault()),null);if(i.scope&&"*"!==i.scope){for(var a=t.target;"BODY"!==a.nodeName&&a.id!==i.scope;)a=a.parentElement;"BODY"===a.nodeName&&(i=null)}return s=null,i}if(s)return s=null,e(t)}(d3.event);e&&e.ondown&&("string"==typeof e.ondown?RED.actions.invoke(e.ondown):e.ondown(),d3.event.preventDefault())}});function c(e){e.preventDefault();var a=$(this),s=a.data("data");if(!a.hasClass("keyboard-shortcut-entry-expanded")){h();var t=a.find(".keyboard-shortcut-entry-key"),n=a.find(".keyboard-shortcut-entry-scope");a.addClass("keyboard-shortcut-entry-expanded");var o=$('<input type="text">').attr("placeholder",RED._("keyboard.unassigned")).val(s.key||"").appendTo(t);o.on("keyup",function(e){if(13===e.keyCode)return h();var t=$(this).val(),n=""===(t=t.trim())||RED.keyboard.validateKey(t);$(this).toggleClass("input-error",!n)});var i=$('<select><option value="*" data-i18n="keyboard.global"></option><option value="workspace" data-i18n="keyboard.workspace"></option></select>').appendTo(n);i.i18n(),i.val(s.scope||"*");var r=$('<div class="keyboard-shortcut-edit button-group-vertical"></div>').appendTo(n),d=$('<button class="editor-button editor-button-small"><i class="fa fa-check"></i></button>').appendTo(r),l=$('<button class="editor-button editor-button-small"><i class="fa fa-reply"></i></button>').appendTo(r);d.click(function(e){e.stopPropagation(),h()}),l.click(function(e){e.stopPropagation(),RED.keyboard.revertToDefault(s.id),a.empty(),a.removeClass("keyboard-shortcut-entry-expanded");var t=RED.keyboard.getShortcut(s.id),n=RED.settings.get("keymap")||{},o=RED.settings.get("editor")||{};(n=o.keymap||{})[s.id]=null,o.keymap=n,RED.settings.set("editor",o);var i={id:s.id,scope:t?t.scope:void 0,key:t?t.key:void 0,user:t?t.user:void 0};g(a,i)}),o.focus()}}function h(e){var t=$(".keyboard-shortcut-entry-expanded");if(1===t.length){var n=t.data("data"),o=t.find(".keyboard-shortcut-entry-key input"),i=t.find(".keyboard-shortcut-entry-scope select");if(!e){var a=o.val().trim(),s=i.val();if(""===a||RED.keyboard.validateKey(a)){var r=RED.keyboard.getShortcut(n.id);if(!r&&a||r&&(r.scope!==s||r.key!==a)){var d=t.find(".keyboard-shortcut-entry-key"),l=t.find(".keyboard-shortcut-entry-scope");d.empty(),l.empty(),n.key&&RED.keyboard.remove(n.key,!0),t.find(".keyboard-shortcut-entry-text i").css("opacity",1),""===a?(d.parent().addClass("keyboard-shortcut-entry-unassigned"),d.append($("<span>").text(RED._("keyboard.unassigned"))),delete n.key,delete n.scope):(d.parent().removeClass("keyboard-shortcut-entry-unassigned"),d.append(RED.keyboard.formatKey(a)),$("<span>").text(s).appendTo(l),n.key=a,n.scope=s,RED.keyboard.add(n.scope,n.key,n.id,!0));var c=RED.settings.get("editor")||{},p=c.keymap||{};p[n.id]=RED.keyboard.getShortcut(n.id),c.keymap=p,RED.settings.set("editor",c)}}}o.remove(),i.remove(),$(".keyboard-shortcut-edit").remove(),t.removeClass("keyboard-shortcut-entry-expanded")}}function g(e,t){var n=$('<div class="keyboard-shortcut-entry">').appendTo(e);e.data("data",t);var o=t.id.replace(/(^.+:([a-z]))|(-([a-z]))/g,function(){return 0===arguments[5]?arguments[2].toUpperCase():" "+arguments[4].toUpperCase()}),i=$("<div>").addClass("keyboard-shortcut-entry-text").text(o).appendTo(n),a=$('<i class="fa fa-user"></i>').prependTo(i);t.user||a.css("opacity",0);var s=$('<div class="keyboard-shortcut-entry-key">').appendTo(n);t.key?s.append(RED.keyboard.formatKey(t.key)):(n.addClass("keyboard-shortcut-entry-unassigned"),s.append($("<span>").text(RED._("keyboard.unassigned"))));var r=$('<div class="keyboard-shortcut-entry-scope">').appendTo(n);$("<span>").text("*"===t.scope?"global":t.scope||"").appendTo(r),e.click(c)}function e(){var e=$('<div id="user-settings-tab-keyboard"></div>');$('<div class="keyboard-shortcut-entry keyboard-shortcut-list-header"><div class="keyboard-shortcut-entry-key keyboard-shortcut-entry-text"><input id="user-settings-tab-keyboard-filter" type="text" data-i18n="[placeholder]keyboard.filterActions"></div><div class="keyboard-shortcut-entry-key" data-i18n="keyboard.shortcut"></div><div class="keyboard-shortcut-entry-scope" data-i18n="keyboard.scope"></div></div>').appendTo(e),e.find("input").searchBox({delay:100,change:function(){var t=$(this).val().trim();""===t?n.editableList("filter",null):(t=t.replace(/\s/g,""),n.editableList("filter",function(e){return-1<e.id.toLowerCase().replace(/^.*:/,"").replace("-","").indexOf(t)}))}});var n=$('<ol class="keyboard-shortcut-list"></ol>').css({position:"absolute",top:"32px",bottom:"0",left:"0",right:"0"}).appendTo(e).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){g(e,n)}}),t=RED.actions.list();return t.sort(function(e,t){var n=e.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase(),o=t.id.replace(/^.*:/,"").replace(/[ -]/g,"").toLowerCase();return n.localeCompare(o)}),t.forEach(function(e){n.editableList("addItem",e)}),e}return{init:function(){!function(){if("localStorage"in window&&null!==window.localStorage){var e=localStorage.getItem("keymap");if(null!==e){localStorage.removeItem("keymap");var t=RED.settings.get("editor")||{};t.keymap=JSON.parse(e),RED.settings.set("editor",t)}}}();var s=(RED.settings.get("editor")||{}).keymap||{};$.getJSON("red/keymap.json",function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];for(var o in n)n.hasOwnProperty(o)&&(s.hasOwnProperty(n[o])||l(t,o,n[o],!1),r[n[o]]={scope:t,key:o,user:!1})}for(var i in s)if(s.hasOwnProperty(i)){var a=s[i];a.hasOwnProperty("key")&&l(a.scope,a.key,i,!0)}}),RED.userSettings.add({id:"keyboard",title:RED._("keyboard.keyboard"),get:e,focus:function(){setTimeout(function(){$("#user-settings-tab-keyboard-filter").focus()},200)}})},add:l,remove:o,getShortcut:function(e){return u[e]},revertToDefault:function(e){var t=u[e];if(t&&o(t.key),r.hasOwnProperty(e)){var n=r[e];l(n.scope,n.key,e,!1)}},formatKey:function(e){var t=n?e.replace(/ctrl-?/,"&#8984;"):e;return'<span class="help-key-block"><span class="help-key">'+(t=(t=(t=(t=(t=(t=n?t.replace(/alt-?/,"&#8997;"):e).replace(/shift-?/,"&#8679;")).replace(/left/,"&#x2190;")).replace(/up/,"&#x2191;")).replace(/right/,"&#x2192;")).replace(/down/,"&#x2193;")).split(" ").join('</span> <span class="help-key">')+"</span></span>"},validateKey:function(e){var t=(e=e.trim()).split(" ");for(i=0;i<t.length;i++)if(!f(t[i]))return!1;return!0}}}(),RED.workspaces=function(){var l,n=0,o=0;function i(e,t){if(e)l.addTab(e),l.resize();else{for(var n=RED.nodes.id();o+=1,0!==$("#workspace-tabs a[title='"+RED._("workspace.defaultName",{number:o})+"']").size(););e={type:"tab",id:n,disabled:!1,info:"",label:RED._("workspace.defaultName",{number:o})},RED.nodes.addWorkspace(e),l.addTab(e),l.activateTab(n),t||(RED.history.push({t:"add",workspaces:[e],dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0))}return RED.view.focus(),e}function a(e){if(1!==s){c(e);var t=RED.nodes.removeWorkspace(e.id);t.t="delete",t.dirty=RED.nodes.dirty(),t.workspaces=[e],RED.history.push(t),RED.nodes.dirty(!0),RED.sidebar.config.refresh()}}function t(e){var r,d=RED.nodes.workspace(e);RED.view.state(RED.state.EDITING);var t={title:RED._("workspace.editFlow",{name:d.label}),buttons:[{id:"node-dialog-delete",class:"leftButton"+(1===s?" disabled":""),text:RED._("common.label.delete"),click:function(){a(d),RED.tray.close()}},{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",class:"primary",text:RED._("common.label.done"),click:function(){var e=$("#node-input-name").val(),t=!1,n={};d.label!=e&&(n.label=d.label,t=!0,d.label=e,l.renameTab(d.id,e));var o=$("#node-input-disabled").prop("checked");d.disabled!==o&&(n.disabled=d.disabled,t=!0,d.disabled=o);var i=r.getValue();if(d.info!==i&&(n.info=d.info,t=!0,d.info=i),$("#red-ui-tab-"+d.id.replace(".","-")).toggleClass("workspace-disabled",d.disabled),t){var a={t:"edit",changes:n,node:d,dirty:RED.nodes.dirty()};d.changed=!0,RED.history.push(a),RED.nodes.dirty(!0),RED.sidebar.config.refresh();var s=RED.view.selection();s.nodes||s.links||RED.sidebar.info.refresh(d)}RED.tray.close()}}],resize:function(e){for(var t=$("#dialog-form>div:not(.node-text-editor-row)"),n=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),o=0;o<t.size();o++)n-=$(t[o]).outerHeight(!0);n-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),n-=28,$(".node-text-editor").css("height",n+"px"),r.resize()},open:function(e){var t=e.find(".editor-tray-body"),n=$('<form id="dialog-form" class="form-horizontal"></form>').appendTo(t);$('<div class="form-row"><label for="node-input-name" data-i18n="[append]editor:common.label.name"><i class="fa fa-tag"></i> </label><input type="text" id="node-input-name"></div>').appendTo(n),$('<div class="form-row"><label for="node-input-disabled-btn" data-i18n="editor:workspace.status"></label><button id="node-input-disabled-btn" class="editor-button"><i class="fa fa-toggle-on"></i> <span id="node-input-disabled-label"></span></button> <input type="checkbox" id="node-input-disabled" style="display: none;"/></div>').appendTo(n),$('<div class="form-row node-text-editor-row"><label for="node-input-info" data-i18n="editor:workspace.info" style="width:300px;"></label><div style="height:250px;" class="node-text-editor" id="node-input-info"></div></div>').appendTo(n),r=RED.editor.createEditor({id:"node-input-info",mode:"ace/mode/markdown",value:""}),$('<div class="form-tips" data-i18n="editor:workspace.tip"></div>').appendTo(n),n.find("#node-input-disabled-btn").on("click",function(e){var t=$(this).find("i");t.hasClass("fa-toggle-off")?(t.addClass("fa-toggle-on"),t.removeClass("fa-toggle-off"),$("#node-input-disabled").prop("checked",!1),$("#node-input-disabled-label").text(RED._("editor:workspace.enabled"))):(t.addClass("fa-toggle-off"),t.removeClass("fa-toggle-on"),$("#node-input-disabled").prop("checked",!0),$("#node-input-disabled-label").text(RED._("editor:workspace.disabled")))}),d.hasOwnProperty("disabled")?($("#node-input-disabled").prop("checked",d.disabled),d.disabled?(n.find("#node-input-disabled-btn i").removeClass("fa-toggle-on").addClass("fa-toggle-off"),$("#node-input-disabled-label").text(RED._("editor:workspace.disabled"))):$("#node-input-disabled-label").text(RED._("editor:workspace.enabled"))):(d.disabled=!1,$("#node-input-disabled-label").text(RED._("editor:workspace.enabled"))),$('<input type="text" style="display: none;" />').prependTo(n),n.submit(function(e){e.preventDefault()}),$("#node-input-name").val(d.label),RED.text.bidi.prepareInput($("#node-input-name")),r.getSession().setValue(d.info||"",-1),n.i18n()},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(d),r.destroy()}};RED.tray.show(t)}var s=0;function e(){l=RED.tabs.create({id:"workspace-tabs",onchange:function(e){var t={old:n};n=e.id,t.workspace=n,RED.events.emit("workspace:change",t),window.location.hash="flow/"+e.id,RED.sidebar.config.refresh(),RED.view.focus()},onclick:function(e){RED.view.focus()},ondblclick:function(e){"subflow"!=e.type?t(e.id):RED.editor.editSubflow(RED.nodes.subflow(e.id))},onadd:function(e){"tab"===e.type&&s++,$('<span class="workspace-disabled-icon"><i class="fa fa-ban"></i> </span>').prependTo("#red-ui-tab-"+e.id.replace(".","-")+" .red-ui-tab-label"),e.disabled&&$("#red-ui-tab-"+e.id.replace(".","-")).addClass("workspace-disabled"),RED.menu.setDisabled("menu-item-workspace-delete",s<=1),1===s&&($("#workspace .red-ui-tabs").show(),$("#chart").show(),$("#workspace-footer").children().show())},onremove:function(e){"tab"===e.type&&s--,RED.menu.setDisabled("menu-item-workspace-delete",s<=1),0===s&&r()},onreorder:function(e,t){RED.history.push({t:"reorder",order:e,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0),p(t)},minimumActiveTabWidth:150,scrollable:!0,addButton:function(){i()}}),s=0}function r(){$("#workspace .red-ui-tabs").hide(),$("#chart").hide(),$("#workspace-footer").children().hide()}function d(e){t(e||n)}function c(e){e?l.contains(e.id)&&l.removeTab(e.id):a(RED.nodes.workspace(n)),e.id===n&&(n=0)}function p(e){RED.nodes.setWorkspaceOrder(e.filter(function(e){return void 0!==RED.nodes.workspace(e)})),l.order(e)}return{init:function(){e(),RED.events.on("sidebar:resize",l.resize),RED.actions.add("core:show-next-tab",l.nextTab),RED.actions.add("core:show-previous-tab",l.previousTab),RED.menu.setAction("menu-item-workspace-delete",function(){a(RED.nodes.workspace(n))}),$(window).resize(function(){l.resize()}),RED.actions.add("core:add-flow",i),RED.actions.add("core:edit-flow",d),RED.actions.add("core:remove-flow",c),r()},add:i,remove:c,order:p,edit:d,contains:function(e){return l.contains(e)},count:function(){return s},active:function(){return n},show:function(e){if(!l.contains(e)){var t=RED.nodes.subflow(e);if(!t)return;i({type:"subflow",id:e,icon:"red/images/subflow_tab.png",label:t.name,closeable:!0})}l.activateTab(e)},refresh:function(){RED.nodes.eachWorkspace(function(e){l.renameTab(e.id,e.label)}),RED.nodes.eachSubflow(function(e){l.contains(e.id)&&l.renameTab(e.id,e.name)}),RED.sidebar.config.refresh()},resize:function(){l.resize()}}}(),RED.view=function(){var x,T,_=5e3,k=5e3,w=.75,c=1,D=100,E=30,g=1e3,v=0,m=[],b=0,a={},j=20,C=!1,S=!1,R=null,r=[],d=[],l=[],O=null,f=null,L=null,P=null,N=0,h=null,I=[0,0],A=null,z=0,M=[],B=null,U=!1,p=null,u=null,y=0,J=0,V=[],F=!1,G=null,s="",q={red:"#c00",green:"#5a8",yellow:"#F9DF31",blue:"#53A3F3",grey:"#d3d3d3"},W=1,H=0,K=$("#chart"),X=d3.select("#chart").append("svg:svg").attr("width",_).attr("height",k).attr("pointer-events","all").style("cursor","crosshair").on("mousedown",function(){Pe()}).on("contextmenu",function(){d3.event.preventDefault()}),Y=X.append("svg:g").on("dblclick.zoom",null).append("svg:g").attr("class","innerCanvas").on("mousemove",ie).on("mousedown",function(){var l;if(1===d3.event.button)return z=RED.state.PANNING,A=[d3.event.pageX,d3.event.pageY],void(V=[K.scrollLeft(),K.scrollTop()]);L||f||(O=null,pe());0===z&&B&&(B.remove(),B=null);if((0===z||z===RED.state.QUICK_JOINING)&&(d3.event.metaKey||d3.event.ctrlKey)){l=d3.mouse(this),d3.event.stopPropagation();var e=$("#main-container").position();z!==RED.state.QUICK_JOINING&&(z=RED.state.QUICK_JOINING,$(window).on("keyup",De)),F=!0,RED.typeSearch.show({x:d3.event.clientX-e.left-D/2,y:d3.event.clientY-e.top-E/2,cancel:function(){F=!1,we()},add:function(e){F=!1;var t=oe(e);if(t){var n=t.node,o=t.historyEvent;if(n.x=l[0],n.y=l[1],z===RED.state.QUICK_JOINING||G){if(G||0<Q.length){var i,a,s=G||Q[0],r=null;if(s.portType===H&&0<n.inputs?(r=s.node,a=s.port,i=n):s.portType===W&&0<n.outputs&&(r=n,i=s.node,a=0),null!==r){var d={source:r,sourcePort:a,target:i};RED.nodes.addLink(d),o.links=[d],ee(),!G&&s.portType===H&&0<n.outputs?Z([{node:n,port:0,portType:H}]):!G&&s.portType===W&&0<n.inputs?Z([{node:n,port:0,portType:W}]):we()}else ee(),we()}else 0<n.outputs?Z([{node:n,port:0,portType:H}]):0<n.inputs?Z([{node:n,port:0,portType:W}]):we();G=null}RED.history.push(o),RED.nodes.add(n),RED.editor.validateNode(n),RED.nodes.dirty(!0),le(),n.selected=!0,M.push({n:n}),te(),pe(),Le()}}}),te(),pe(),Le()}0!==z||d3.event.metaKey||d3.event.ctrlKey||b||(l=d3.mouse(this),B=Y.append("rect").attr("ox",l[0]).attr("oy",l[1]).attr("rx",1).attr("ry",1).attr("x",l[0]).attr("y",l[1]).attr("width",0).attr("height",0).attr("class","lasso"),d3.event.preventDefault())}).on("mouseup",i).on("mouseenter",function(){B?1!==d3.event.buttons&&(B.remove(),B=null):z===RED.state.PANNING&&4!==d3.event.buttons&&we()}).on("touchend",function(){clearTimeout(b),b=null,RED.touch.radialMenu.active()||(B&&e.attr("fill","#fff"),i.call(this))}).on("touchcancel",i).on("touchstart",function(){var e;if(1<d3.event.touches.length){clearTimeout(b),b=null,d3.event.preventDefault(),e=d3.event.touches.item(0);var t=d3.event.touches.item(1),n=e.pageY-t.pageY,o=e.pageX-t.pageX,i=$("#chart").offset(),a=[$("#chart").scrollLeft(),$("#chart").scrollTop()];m=[(t.pageX+o/2-i.left+a[0])/c,(t.pageY+n/2-i.top+a[1])/c],[t.pageX+o/2,t.pageY+n/2],v=Math.sqrt(n*n+o*o)}else{var s=d3.select(document.body),r=[(e=d3.event.touches.item(0)).pageX,e.pageY];m=[e.pageX,e.pageY],v=0;d3.touches(this)[0];b=setTimeout(function(){b=null,Oe(s,r)},g)}}).on("touchmove",function(){var e;if(RED.touch.radialMenu.active())d3.event.preventDefault();else if(d3.event.touches.length<2){if(b){var t=(e=d3.event.touches.item(0)).pageX-m[0],n=e.pageY-m[1];64<Math.abs(t*t+n*n)&&(clearTimeout(b),b=null)}else B&&d3.event.preventDefault();ie.call(this)}else{e=d3.event.touches.item(0);var o=d3.event.touches.item(1),i=e.pageY-o.pageY,a=e.pageX-o.pageX,s=($("#chart").offset(),[$("#chart").scrollLeft(),$("#chart").scrollTop()]),r=Math.sqrt(i*i+a*a),d=[o.pageX+a/2,o.pageY+i/2];if(!isNaN(r)){oldScaleFactor=c,c=Math.min(2,Math.max(.3,c+Math.floor(100*r-100*v)/1e4));var l=[m[0]*(c-oldScaleFactor),m[1]*(c-oldScaleFactor)];v=r,d,$("#chart").scrollLeft(s[0]+l[0]),$("#chart").scrollTop(s[1]+l[1]),Le()}}}),e=Y.append("svg:rect").attr("width",_).attr("height",k).attr("fill","#fff"),n=Y.append("g");function t(){for(var e=[],t=0;t<_;t+=+j)e.push(t);n.selectAll("line.horizontal").remove(),n.selectAll("line.horizontal").data(e).enter().append("line").attr({class:"horizontal",x1:0,x2:_,y1:function(e){return e},y2:function(e){return e},fill:"none","shape-rendering":"crispEdges",stroke:"#eee","stroke-width":"1px"}),n.selectAll("line.vertical").remove(),n.selectAll("line.vertical").data(e).enter().append("line").attr({class:"vertical",y1:0,y2:_,x1:function(e){return e},x2:function(e){return e},fill:"none","shape-rendering":"crispEdges",stroke:"#eee","stroke-width":"1px"})}t();var o=Y.append("g"),Q=[];function Z(e){for(var t=0;t<e.length;t++){var n=e[t];n.el=o.append("svg:path").attr("class","drag_line"),Q.push(n)}}function ee(){for(;Q.length;){var e=Q.pop();e.el&&e.el.remove()}}function te(){var e=RED.workspaces.active();r=RED.nodes.filterNodes({z:e}),d=RED.nodes.filterLinks({source:{z:e},target:{z:e}})}function ne(e,t,n,o,i){var a=o-t,s=n-e,r=Math.sqrt(a*a+s*s),d=w;if(0<s*i?r<D&&(d=.75-(D-r)/D*.75):d=.4-.2*Math.max(0,(D-Math.min(Math.abs(s),Math.abs(a)))/D),0<s*i)return"M "+e+" "+t+" C "+(e+i*(D*d))+" "+(t+0*E)+" "+(n-i*d*D)+" "+(o-0*E)+" "+n+" "+o;var l=Math.floor(n-s/2),c=Math.floor(o-a/2);0===a&&(c=o+E);var p=E/2,u=(o+c)/2,f=e+i*D*d,h=0<a?Math.min(u-a/2,t+p):Math.max(u-a/2,t-p),g=n-i*D*d,v=0<a?Math.max(u,o-p):Math.min(u,o+p),m=(e+f)/2,b=0<a?1:-1,y=[[m,t],[f,0<a?Math.max(t,h-p):Math.min(t,h+p)],[m,0<a?Math.min(c,h+p):Math.max(c,h-p)],[g,0<a?Math.max(c,v-p):Math.min(c,v+p)],[(n+g)/2,o]];return y[2][1]===h+b*p&&(Math.abs(a)<10*p&&(y[1][1]=h-b*p/2,y[3][1]=v-b*p/2),y[2][0]=f),"M "+e+" "+t+" C "+y[0][0]+" "+y[0][1]+" "+y[1][0]+" "+y[1][1]+" "+f+" "+h+" S "+y[2][0]+" "+y[2][1]+" "+l+" "+c+" S "+y[3][0]+" "+y[3][1]+" "+g+" "+v+" S "+y[4][0]+" "+y[4][1]+" "+n+" "+o}function oe(e,t,n){var o=/^subflow:(.+)$/.exec(e);if(R&&o){if(o[1]===R.id)return void RED.notify(RED._("notification.error",{message:RED._("notification.errors.cannotAddSubflowToItself")}),"error");if(RED.nodes.subflowContains(o[1],R.id))return void RED.notify(RED._("notification.error",{message:RED._("notification.errors.cannotAddCircularReference")}),"error")}var i={id:RED.nodes.id(),z:RED.workspaces.active()};if(i.type=e,i._def=RED.nodes.getType(i.type),o){var a=RED.nodes.subflow(o[1]);i.name="",i.inputs=a.in.length,i.outputs=a.out.length}else{for(var s in i.inputs=i._def.inputs||0,i.outputs=i._def.outputs,i._def.defaults)i._def.defaults.hasOwnProperty(s)&&void 0!==i._def.defaults[s].value&&(i[s]=JSON.parse(JSON.stringify(i._def.defaults[s].value)));if(i._def.onadd)try{i._def.onadd.call(i)}catch(e){console.log("Definition error: "+i.type+".onadd:",e)}}i.changed=!0,i.moved=!0,i.w=D,i.h=Math.max(E,15*(i.outputs||0));var r={t:"add",nodes:[i.id],dirty:RED.nodes.dirty()};if(R){var d=RED.subflow.refresh(!0);d&&(r.subflow={id:R.id,changed:R.changed,instances:d.instances})}return{node:i,historyEvent:r}}function ie(){var e,p;if(z===RED.state.PANNING){var t=[d3.event.pageX,d3.event.pageY],n=[A[0]-t[0],A[1]-t[1]];return K.scrollLeft(V[0]+n[0]),void K.scrollTop(V[1]+n[1])}if(A=d3.touches(this)[0]||d3.mouse(this),B){var o,i,a=parseInt(B.attr("ox")),s=parseInt(B.attr("oy")),r=parseInt(B.attr("x")),d=parseInt(B.attr("y"));return o=A[0]<a?a-(r=A[0]):A[0]-r,i=A[1]<s?s-(d=A[1]):A[1]-d,void B.attr("x",r).attr("y",d).attr("width",o).attr("height",i)}if(z==RED.state.QUICK_JOINING||z==RED.state.IMPORT_DRAGGING||L||null!=O){var l;if(z==RED.state.JOINING||z===RED.state.QUICK_JOINING){if(0===Q.length&&null!==P){if(d3.event.shiftKey){var c,u=[],f=[];if(O&&(P===H&&O.source===L&&O.sourcePort===N||P===W&&O.target===L))f=[O];else c=P===H?{source:L,sourcePort:N}:{target:L},f=RED.nodes.filterLinks(c);for(e=0;e<f.length;e++){var h=f[e];RED.nodes.removeLink(h),u.push({link:h,node:P===H?h.target:h.source,port:P===H?0:h.sourcePort,portType:P===H?W:H})}0===u.length?(we(),Le()):(Z(u),z=0,te(),Le(),z=RED.state.JOINING)}else L&&Z([{node:L,port:N,portType:P}]);O=null}for(l=A,e=0;e<Q.length;e++){var g=Q[e],v=-((g.portType===H&&g.node.outputs||1)-1)/2*13+13*g.port,m=g.portType===H?1:-1;g.el.attr("d",ne(g.node.x+m*g.node.w/2,g.node.y+v,l[0],l[1],m))}d3.event.preventDefault()}else if(z==RED.state.MOVING){l=d3.mouse(document.body),isNaN(l[0])&&(l=d3.touches(document.body)[0]),3<(I[0]-l[0])*(I[0]-l[0])+(I[1]-l[1])*(I[1]-l[1])&&(z=RED.state.MOVING_ACTIVE,J=0,S=!1,1===M.length&&(p=M[0],S=p.n.hasOwnProperty("_def")&&0<p.n._def.inputs&&0<p.n._def.outputs&&0===RED.nodes.filterLinks({source:p.n}).length&&0===RED.nodes.filterLinks({target:p.n}).length))}else if(z==RED.state.MOVING_ACTIVE||z==RED.state.IMPORT_DRAGGING){l=A;for(var b=0,y=0,w=_,D=k,E=0;E<M.length;E++)p=M[E],d3.event.shiftKey&&(p.n.ox=p.n.x,p.n.oy=p.n.y),p.n.x=l[0]+p.dx,p.n.y=l[1]+p.dy,p.n.dirty=!0,b=Math.min(p.n.x-p.n.w/2-5,b),y=Math.min(p.n.y-p.n.h/2-5,y),w=Math.max(p.n.x+p.n.w/2+5,w),D=Math.max(p.n.y+p.n.h/2+5,D);if(0!==b||0!==y)for(e=0;e<M.length;e++)(p=M[e]).n.x-=b,p.n.y-=y;if(w!==_||D!==k)for(e=0;e<M.length;e++)(p=M[e]).n.x-=w-_,p.n.y-=D-k;if(C!=d3.event.shiftKey&&0<M.length){var R=[0,0];if(p=M[0],R[0]=p.n.x-(j*Math.floor((p.n.x-p.n.w/2)/j)+p.n.w/2),R[1]=p.n.y-j*Math.floor(p.n.y/j),0!==R[0]||0!==R[1])for(e=0;e<M.length;e++)(p=M[e]).n.x-=R[0],p.n.y-=R[1],p.n.x==p.n.ox&&p.n.y==p.n.oy&&(p.dirty=!1)}z!=RED.state.MOVING_ACTIVE&&z!=RED.state.IMPORT_DRAGGING||1!==M.length||(p=M[0],S&&(T||(T=setTimeout(function(){var e=[],t=1/0,n=null,o=p.n.x,i=p.n.y;if(X[0][0].getIntersectionList){var a=X[0][0].createSVGRect();a.x=o,a.y=i,a.width=1,a.height=1,e=X[0][0].getIntersectionList(a,X[0][0])}else e=RED.view.getLinksAtPoint(o,i);for(var s=0;s<e.length;s++)if(d3.select(e[s]).classed("link_background"))for(var r=e[s].getTotalLength(),d=0;d<r;d+=10){var l=e[s].getPointAtLength(d),c=(l.x-o)*(l.x-o)+(l.y-i)*(l.y-i);c<200&&c<t&&(t=c,n=e[s])}x&&x!==n&&d3.select(x.parentNode).classed("link_splice",!1),n?d3.select(n.parentNode).classed("link_splice",!0):d3.select(".link_splice").classed("link_splice",!1),x=n,T=null},100))))}0!==z&&Le()}}function i(){var e,t;if(z!==RED.state.PANNING){if(z!==RED.state.QUICK_JOINING){if(L&&z==RED.state.JOINING){var n=[];for(e=0;e<Q.length;e++)Q[e].link&&n.push(Q[e].link);t={t:"delete",links:n,dirty:RED.nodes.dirty()},RED.history.push(t),ee()}if(B){var o=parseInt(B.attr("x")),i=parseInt(B.attr("y")),a=o+parseInt(B.attr("width")),s=i+parseInt(B.attr("height"));d3.event.ctrlKey||le(),RED.nodes.eachNode(function(e){e.z!=RED.workspaces.active()||e.selected||(e.selected=e.x>o&&e.x<a&&e.y>i&&e.y<s,e.selected&&(e.dirty=!0,M.push({n:e})))}),R&&(R.in.forEach(function(e){e.selected=e.x>o&&e.x<a&&e.y>i&&e.y<s,e.selected&&(e.dirty=!0,M.push({n:e}))}),R.out.forEach(function(e){e.selected=e.x>o&&e.x<a&&e.y>i&&e.y<s,e.selected&&(e.dirty=!0,M.push({n:e}))})),pe(),B.remove(),B=null}else z!=RED.state.DEFAULT||null!=f||d3.event.ctrlKey||d3.event.metaKey||(le(),pe());if(z==RED.state.MOVING_ACTIVE&&0<M.length){for(var r=[],d=0;d<M.length;d++){var l=M[d];l.ox===l.n.x&&l.oy===l.n.y||(r.push({n:l.n,ox:l.ox,oy:l.oy,moved:l.n.moved}),l.n.dirty=!0,l.n.moved=!0)}if(0<r.length){if(t={t:"move",nodes:r,dirty:RED.nodes.dirty()},x){var c=d3.select(x).data()[0];RED.nodes.removeLink(c);var p={source:c.source,sourcePort:c.sourcePort,target:M[0].n},u={source:M[0].n,sourcePort:0,target:c.target};RED.nodes.addLink(p),RED.nodes.addLink(u),t.links=[p,u],t.removedLinks=[c],te()}RED.nodes.dirty(!0),RED.history.push(t)}}if(z==RED.state.MOVING||z==RED.state.MOVING_ACTIVE)for(e=0;e<M.length;e++)delete M[e].ox,delete M[e].oy;z==RED.state.IMPORT_DRAGGING&&(RED.keyboard.remove("escape"),te(),RED.nodes.dirty(!0)),we(),Le()}}else we()}function ae(){c<2&&(c+=.1,RED.view.navigator.resize(),Le())}function se(){.3<c&&(c-=.1,RED.view.navigator.resize(),Le())}function re(){c=1,RED.view.navigator.resize(),Le()}function de(){RED.nodes.eachNode(function(e){e.z==RED.workspaces.active()&&(e.selected||(e.selected=!0,e.dirty=!0,M.push({n:e})))}),R&&(R.in.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,M.push({n:e}))}),R.out.forEach(function(e){e.selected||(e.selected=!0,e.dirty=!0,M.push({n:e}))})),O=null,pe(),Le()}function le(){for(var e=0;e<M.length;e++){var t=M[e];t.n.dirty=!0,t.n.selected=!1}M=[],O=null}var ce=null;function pe(){var e={};0<M.length&&(e.nodes=M.map(function(e){return e.n})),null!=O&&(e.link=O);var t=RED.workspaces.active();d=RED.nodes.filterLinks({source:{z:t},target:{z:t}});RED.nodes.getWorkspaceOrder();var n={};l=[];for(var o=0;o<M.length;o++)if("link out"===M[o].n.type||"link in"===M[o].n.type){var i=M[o].n,a={};i.links.forEach(function(e){var t=RED.nodes.node(e);t&&("link out"===i.type?t.z===i.z?n[i.id+":"+t.id]||(d.push({source:i,sourcePort:0,target:t,link:!0}),n[i.id+":"+t.id]=!0):(a[t.z]=a[t.z]||[],a[t.z].push(t)):t.z===i.z?n[t.id+":"+i.id]||(d.push({source:t,sourcePort:0,target:i,link:!0}),n[t.id+":"+i.id]=!0):(a[t.z]=a[t.z]||[],a[t.z].push(t)))}),0<Object.keys(a).length&&l.push({refresh:Math.floor(1e4*Math.random()),node:i,links:a})}var s=t+":"+JSON.stringify(e,function(e,t){return"nodes"===e?t.map(function(e){return e.id}):"link"===e?t.source.id+":"+t.sourcePort+":"+t.target.id:t});s!==ce&&(ce=s,RED.events.emit("view:selection-changed",e))}function ue(){if(fe=!1,0<M.length){for(var e=[],t=0;t<M.length;t++)e.push({n:M[t].n,ox:M[t].ox,oy:M[t].oy,moved:M[t].n.moved}),M[t].n.moved=!0,M[t].n.dirty=!0,delete M[t].ox,delete M[t].oy;Le(),RED.history.push({t:"move",nodes:e,dirty:RED.nodes.dirty()}),RED.nodes.dirty(!0)}}var fe=!1;function he(e,t){if(0<M.length){fe||($(document).one("keyup",ue),fe=!0);for(var n,o=0,i=0,a=0;a<M.length;a++)(n=M[a]).n.moved=!0,n.n.dirty=!0,null==n.ox&&null==n.oy&&(n.ox=n.n.x,n.oy=n.n.y),n.n.x+=e,n.n.y+=t,n.n.dirty=!0,o=Math.min(n.n.x-n.n.w/2-5,o),i=Math.min(n.n.y-n.n.h/2-5,i);if(0!==o||0!==i)for(var s=0;s<M.length;s++)(n=M[s]).n.x-=o,n.n.y-=i;Le()}}function ge(){if(0<M.length){var e=M[0].n;"subflow"===e.type?RED.editor.editSubflow(R):RED.editor.edit(e)}}function ve(){if(0<M.length||null!=O){var e,t=[],n=[],o=[],i=[],a=[],s=RED.nodes.dirty();if(0<M.length){for(var r=0;r<M.length;r++){var d=M[r].n;if(d.selected=!1,"subflow"!=d.type){d.x<0&&(d.x=25);var l=RED.nodes.remove(d.id);t.push(d),t=t.concat(l.nodes),n=n.concat(l.links)}else"out"===d.direction?o.push(d):"in"===d.direction&&i.push(d),d.dirty=!0}0<o.length&&(e=RED.subflow.removeOutput(o))&&(n=n.concat(e.links)),1==i.length&&(e=RED.subflow.removeInput())&&(n=n.concat(e.links));var c=RED.subflow.refresh(!0);c&&(a=c.instances),M=[],(0<t.length||0<o.length||0<i.length)&&RED.nodes.dirty(!0)}O&&(RED.nodes.removeLink(O),n.push(O),RED.nodes.dirty(!0));var p={t:"delete",nodes:t,links:n,subflowOutputs:o,subflowInputs:i,subflow:{instances:a},dirty:s};RED.history.push(p),O=null,te(),pe(),Le()}}function me(){if(0<M.length){for(var e=[],t=0;t<M.length;t++){var n=M[t].n;if("subflow"!=n.type){for(var o in n._def.defaults)if(n._def.defaults.hasOwnProperty(o)&&n._def.defaults[o].type){var i=RED.nodes.node(n[o]);i&&i._def.exclusive&&e.push(RED.nodes.convertNode(i))}e.push(RED.nodes.convertNode(n))}}s=JSON.stringify(e),RED.notify(RED._("clipboard.nodeCopied",{count:e.length}))}}function be(e,t,n){return ye(e,t,n,0)[0]}function ye(e,t,n,o){var i=document.createElement("span");i.className=t,i.style.position="absolute",i.style.top="-1000px",i.textContent=e||"",document.body.appendChild(i);var a=i.offsetWidth,s=i.offsetHeight;return document.body.removeChild(i),[n+a,o+s]}function we(){z=0,x=P=f=h=L=null,S=!1,d3.select(".link_splice").classed("link_splice",!1),T&&(clearTimeout(T),T=null)}function De(e){17!==e.keyCode&&"Meta"!==e.key&&91!==e.keyCode||(F&&0<Q.length&&(G=Q[0]),we(),ee(),Le(),$(window).off("keyup",De))}function Ee(e,t,n){1!==d3.event.button&&(L=e,P=t,N=n||0,z!==RED.state.QUICK_JOINING&&(z=RED.state.JOINING,document.body.style.cursor="crosshair",(d3.event.ctrlKey||d3.event.metaKey)&&(z=RED.state.QUICK_JOINING,Z([{node:L,port:N,portType:P}]),$(window).on("keyup",De))),d3.event.stopPropagation(),d3.event.preventDefault())}function Re(e,o,i){var t;if(!(z===RED.state.QUICK_JOINING&&0<Q.length&&Q[0].node===e)&&(document.body.style.cursor="",z==RED.state.JOINING||z==RED.state.QUICK_JOINING)){"undefined"!=typeof TouchEvent&&d3.event instanceof TouchEvent?RED.nodes.eachNode(function(e){if(e.z==RED.workspaces.active()){var t=e.w/2,n=e.h/2;e.x-t<A[0]&&e.x+t>A[0]&&e.y-n<A[1]&&e.y+n>A[1]&&(o=0<(h=e).inputs?W:H,i=0)}}):h=e;var n=[],a=[];for(t=0;t<Q.length;t++)Q[t].link&&a.push(Q[t].link);for(t=0;t<Q.length;t++)if(o!=Q[t].portType&&h!==Q[t].node){var s,r,d,l=Q[t];if(l.portType===H?(s=l.node,d=l.port,r=h):l.portType===W&&(s=h,r=l.node,d=i),!(0!==RED.nodes.filterLinks({source:s,target:r,sourcePort:d}).length)){var c={source:s,sourcePort:d,target:r};RED.nodes.addLink(c),n.push(c)}}if(0<n.length||0<a.length){var p={t:"add",links:n,removedLinks:a,dirty:RED.nodes.dirty()};if(R){var u=RED.subflow.refresh(!0);u&&(p.subflow={id:R.id,changed:R.changed,instances:u.instances})}RED.history.push(p),te(),RED.nodes.dirty(!0)}if(z===RED.state.QUICK_JOINING)return 0<n.length&&(ee(),o===W&&0<e.outputs?Z([{node:e,port:0,portType:H}]):o===H&&0<e.inputs?Z([{node:e,port:0,portType:W}]):we()),void Le();we(),ee(),O=null,Le()}}var $e=null,xe=null;function Te(l,c,p,u){clearTimeout($e);var e=z!=RED.state.JOINING||0<Q.length&&Q[0].portType!==p;e&&(p===W&&(c._def&&c._def.inputLabels||c.inputLabels)||p===H&&(c._def&&c._def.outputLabels||c.outputLabels))&&($e=setTimeout(function(){var e=function(t,n,e){var o,i=n===W?t.inputLabels:t.outputLabels;if(i&&i[e])return i[e];var a=n===W?t._def.inputLabels:t._def.outputLabels;if("string"==typeof a)o=a;else if("function"==typeof a)try{o=a.call(t,e)}catch(e){console.log("Definition error: "+t.type+"."+(n===W?"inputLabels":"outputLabels"),e),o=null}else $.isArray(a)&&(o=a[e]);return o}(c,p,u);if(e){var t=function e(t){var n=d3.select(t);if("innerCanvas"===n.attr("class"))return[0,0];var o=[0,0];if("g"===t.nodeName.toLowerCase()){var i=n.attr("transform");i&&(o=d3.transform(i).translate)}else o=[n.attr("x")||0,n.attr("y")||0];var a=e(t.parentNode);return[o[0]+a[0],o[1]+a[1]]}(l.node());$e=null,xe=Y.append("g").attr("transform","translate("+(t[0]+(p===W?-2:12))+","+(t[1]+5)+")").attr("class","port_tooltip");var n=e.split("\n"),o=0,i=4,a=[];n.forEach(function(e){var t=ye(e,"port_tooltip_label",8,0);o=Math.max(o,t[0]),a.push(.8*t[1]),i+=.8*t[1]});var s=i/2-5-2,r=i-4;xe.append("path").attr("d",p===W?"M0 0 l -5 -5 v -"+s+" q 0 -2 -2 -2 h -"+o+" q -2 0 -2 2 v "+r+" q 0 2 2 2 h "+o+" q 2 0 2 -2 v -"+s+" l 5 -5":"M0 0 l 5 -5 v -"+s+" q 0 -2 2 -2 h "+o+" q 2 0 2 2 v "+r+" q 0 2 -2 2 h -"+o+" q -2 0 -2 -2 v -"+s+" l -5 -5");var d=-i/2-2;n.forEach(function(e,t){d+=a[t],xe.append("svg:text").attr("class","port_tooltip_label").attr("x",p===W?-10:10).attr("y",d).attr("text-anchor",p===W?"end":"start").text(e)})}},500)),l.classed("port_hovered",e)}function _e(e,t,n,o){clearTimeout($e),xe&&(xe.remove(),xe=null),e.classed("port_hovered",!1)}function ke(e){if(u&&L==e&&0<J&&J<750)return z=RED.state.DEFAULT,"subflow"!=e.type?RED.editor.edit(e):RED.editor.editSubflow(R),J=0,void d3.event.stopPropagation();Re(e,e._def?0<e.inputs?1:0:"in"==e.direction?0:1,0)}function je(e){if(Pe(),1!==d3.event.button){if(z==RED.state.IMPORT_DRAGGING){if(RED.keyboard.remove("escape"),x){var t=d3.select(x).data()[0];RED.nodes.removeLink(t);var n={source:t.source,sourcePort:t.sourcePort,target:M[0].n},o={source:M[0].n,sourcePort:0,target:t.target};RED.nodes.addLink(n),RED.nodes.addLink(o);var i=RED.history.peek();i.links=[n,o],i.removedLinks=[t],te()}return pe(),RED.nodes.dirty(!0),Le(),we(),void d3.event.stopPropagation()}if(z!=RED.state.QUICK_JOINING){L=e;var a,s=Date.now();if(J=s-y,y=s,u=!(p!=L||1!==d3.event.buttons||d3.event.shiftKey||d3.event.metaKey||d3.event.altKey||d3.event.ctrlKey),p=L,e.selected&&(d3.event.ctrlKey||d3.event.metaKey)){for(L.selected=!1,a=0;a<M.length;a+=1)if(M[a].n===L){M.splice(a,1);break}}else{if(d3.event.shiftKey){le();for(var r=RED.nodes.getAllFlowNodes(L),d=0;d<r.length;d++)r[d].selected=!0,r[d].dirty=!0,M.push({n:r[d]})}else e.selected||(d3.event.ctrlKey||d3.event.metaKey||le(),L.selected=!0,M.push({n:L}));if(O=null,2!=d3.event.button){z=RED.state.MOVING;var l=d3.touches(this)[0]||d3.mouse(this);for(l[0]+=e.x-e.w/2,l[1]+=e.y-e.h/2,a=0;a<M.length;a++)M[a].ox=M[a].n.x,M[a].oy=M[a].n.y,M[a].dx=M[a].n.x-l[0],M[a].dy=M[a].n.y-l[1];I=d3.mouse(document.body),isNaN(I[0])&&(I=d3.touches(document.body)[0])}}e.dirty=!0,pe(),Le(),d3.event.stopPropagation()}else d3.event.stopPropagation()}}function Ce(e){var t=!0;return e._def.button.hasOwnProperty("enabled")&&(t="function"==typeof e._def.button.enabled?e._def.button.enabled.call(e):e._def.button.enabled),t}function Se(t){if(R)RED.notify(RED._("notification.warning",{message:RED._("notification.warnings.nodeActionDisabled")}),"warning");else{if(t._def.button.toggle&&(t[t._def.button.toggle]=!t[t._def.button.toggle],t.dirty=!0),t._def.button.onclick)try{t._def.button.onclick.call(t)}catch(e){console.log("Definition error: "+t.type+".onclick",e)}t.dirty&&Le()}d3.event.preventDefault()}function Oe(e,t){var n=L,o=[];o.push({name:"delete",disabled:0===M.length&&null===O,onselect:function(){ve()}}),o.push({name:"cut",disabled:0===M.length,onselect:function(){me(),ve()}}),o.push({name:"copy",disabled:0===M.length,onselect:function(){me()}}),o.push({name:"paste",disabled:0===s.length,onselect:function(){Ne(s,!1,!0)}}),o.push({name:"edit",disabled:1!=M.length,onselect:function(){RED.editor.edit(n)}}),o.push({name:"select",onselect:function(){de()}}),o.push({name:"undo",disabled:0===RED.history.depth(),onselect:function(){RED.history.pop()}}),RED.touch.radialMenu.show(e,t,o),we()}function Le(){if(Y.attr("transform","scale("+c+")"),X.attr("width",_*c).attr("height",k*c),z!=RED.state.JOINING){var w={};if(R){var e=Y.selectAll(".subflowoutput").data(R.out,function(e,t){return e.id});e.exit().remove();var t=e.enter().insert("svg:g").attr("class","node subflowoutput").attr("transform",function(e){return"translate("+(e.x-20)+","+(e.y-20)+")"});t.each(function(e,t){e.w=40,e.h=40}),t.append("rect").attr("class","subflowport").attr("rx",8).attr("ry",8).attr("width",40).attr("height",40).on("mouseup",ke).on("mousedown",je).on("touchstart",function(e){var t=d3.select(this),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];m=[n.pageX,n.pageY],v=0,b=setTimeout(function(){Oe(t,o)},g),je.call(this,e)}).on("touchend",function(e){clearTimeout(b),b=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():ke.call(this,e)}),t.append("g").attr("transform","translate(-5,15)").append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e,t){Ee(e,W,0)}).on("touchstart",function(e,t){Ee(e,W,0)}).on("mouseup",function(e,t){Re(e,W,0)}).on("touchend",function(e,t){Re(e,W,0)}).on("mouseover",function(e){Te(d3.select(this),e,W,0)}).on("mouseout",function(e){_e(d3.select(this))}),t.append("svg:text").attr("class","port_label").attr("x",20).attr("y",8).style("font-size","10px").text("output"),t.append("svg:text").attr("class","port_label port_index").attr("x",20).attr("y",24).text(function(e,t){return t+1});var n=Y.selectAll(".subflowinput").data(R.in,function(e,t){return e.id});n.exit().remove();var o=n.enter().insert("svg:g").attr("class","node subflowinput").attr("transform",function(e){return"translate("+(e.x-20)+","+(e.y-20)+")"});o.each(function(e,t){e.w=40,e.h=40}),o.append("rect").attr("class","subflowport").attr("rx",8).attr("ry",8).attr("width",40).attr("height",40).on("mouseup",ke).on("mousedown",je).on("touchstart",function(e){var t=d3.select(this),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];m=[n.pageX,n.pageY],v=0,b=setTimeout(function(){Oe(t,o)},g),je.call(this,e)}).on("touchend",function(e){clearTimeout(b),b=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():ke.call(this,e)}),o.append("g").attr("transform","translate(35,15)").append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e,t){Ee(e,H,t)}).on("touchstart",function(e,t){Ee(e,H,t)}).on("mouseup",function(e,t){Re(e,H,t)}).on("touchend",function(e,t){Re(e,H,t)}).on("mouseover",function(e){Te(d3.select(this),e,H,0)}).on("mouseout",function(e){_e(d3.select(this))}),o.append("svg:text").attr("class","port_label").attr("x",18).attr("y",20).style("font-size","10px").text("input"),e.each(function(e,t){if(e.dirty){var n=d3.select(this);n.selectAll(".subflowport").classed("node_selected",function(e){return e.selected}),n.selectAll(".port_index").text(function(e){return e.i+1}),n.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),(w[e.id]=e).dirty=!1}}),n.each(function(e,t){if(e.dirty){var n=d3.select(this);n.selectAll(".subflowport").classed("node_selected",function(e){return e.selected}),n.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),(w[e.id]=e).dirty=!1}})}else Y.selectAll(".subflowoutput").remove(),Y.selectAll(".subflowinput").remove();var i=Y.selectAll(".nodegroup").data(r,function(e){return e.id});i.exit().remove(),i.enter().insert("svg:g").attr("class","node nodegroup").classed("node_subflow",function(e){return null!=R}).classed("node_link",function(e){return"link in"===e.type||"link out"===e.type}).each(function(e,t){var n=d3.select(this),o="link in"===e.type||"link out"===e.type;n.attr("id",e.id);var i=RED.utils.getNodeLabel(e);if(e.w=o?E:Math.max(D,20*Math.ceil((be(i,"node_label",50)+(0<e._def.inputs?7:0))/20)),e.h=Math.max(E,15*(e.outputs||0)),e._def.badge){var a=n.append("svg:g").attr("class","node_badge_group"),s=a.append("rect").attr("class","node_badge").attr("rx",5).attr("ry",5).attr("width",40).attr("height",15);a.append("svg:text").attr("class","node_badge_label").attr("x",35).attr("y",11).attr("text-anchor","end").text(e._def.badge()),e._def.onbadgeclick&&s.attr("cursor","pointer").on("click",function(e){e._def.onbadgeclick.call(e),d3.event.preventDefault()})}if(e._def.button){var r=n.append("svg:g").attr("transform",function(e){return"translate("+("right"==e._def.align?94:-25)+",2)"}).attr("class",function(e){return"node_button "+("right"==e._def.align?"node_right_button":"node_left_button")});r.append("rect").attr("rx",5).attr("ry",5).attr("width",32).attr("height",E-4).attr("fill","#eee"),r.append("rect").attr("class","node_button_button").attr("x",function(e){return"right"==e._def.align?11:5}).attr("y",4).attr("rx",4).attr("ry",4).attr("width",16).attr("height",E-12).attr("fill",function(e){return RED.utils.getNodeColor(e.type,e._def)}).attr("cursor","pointer").on("mousedown",function(e){!B&&Ce(e)&&(Pe(),d3.select(this).attr("fill-opacity",.2),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseup",function(e){!B&&Ce(e)&&(d3.select(this).attr("fill-opacity",.4),d3.event.preventDefault(),d3.event.stopPropagation())}).on("mouseover",function(e){!B&&Ce(e)&&d3.select(this).attr("fill-opacity",.4)}).on("mouseout",function(e){if(!B&&Ce(e)){var t=1;e._def.button.toggle&&(t=e[e._def.button.toggle]?1:.2),d3.select(this).attr("fill-opacity",t)}}).on("click",Se).on("touchstart",Se)}n.append("rect").attr("class","node").classed("node_unknown",function(e){return"unknown"==e.type}).attr("rx",5).attr("ry",5).attr("fill",function(e){return RED.utils.getNodeColor(e.type,e._def)}).on("mouseup",ke).on("mousedown",je).on("touchstart",function(e){var t=d3.select(this),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];m=[n.pageX,n.pageY],v=0,b=setTimeout(function(){Oe(t,o)},g),je.call(this,e)}).on("touchend",function(e){clearTimeout(b),b=null,RED.touch.radialMenu.active()?d3.event.stopPropagation():ke.call(this,e)}).on("mouseover",function(e){0===z&&d3.select(this).classed("node_hovered",!0)}).on("mouseout",function(e){d3.select(this).classed("node_hovered",!1)});if(e._def.icon){var d=RED.utils.getNodeIcon(e._def,e),l=n.append("g").attr("class","node_icon_group").attr("x",0).attr("y",0),c=(l.append("rect").attr("x",0).attr("y",0).attr("class","node_icon_shade").attr("width","30").attr("stroke","none").attr("fill","#000").attr("fill-opacity","0.05").attr("height",function(e){return Math.min(50,e.h-4)}),l.append("image").attr("xlink:href",d).attr("class","node_icon").attr("x",0).attr("width","30").attr("height","30")),p=l.append("path").attr("d",function(e){return"M 30 1 l 0 "+(e.h-2)}).attr("class","node_icon_shade_border").attr("stroke-opacity","0.1").attr("stroke","#000").attr("stroke-width","1");"right"==e._def.align&&(l.attr("class","node_icon_group node_icon_group_"+e._def.align),p.attr("d",function(e){return"M 0 1 l 0 "+(e.h-2)}));var u=new Image;u.src=d,u.onload=function(){c.attr("width",Math.min(u.width,30)),c.attr("height",Math.min(u.height,30)),c.attr("x",15-Math.min(u.width,30)/2)},l.style("pointer-events","none")}if(!o){var f=n.append("svg:text").attr("class","node_label").attr("x",38).attr("dy",".35em").attr("text-anchor","start");e._def.align&&(f.attr("class","node_label node_label_"+e._def.align),"right"===e._def.align&&f.attr("text-anchor","end"));var h=n.append("svg:g").attr("class","node_status_group").style("display","none");h.append("rect").attr("class","node_status").attr("x",6).attr("y",1).attr("width",9).attr("height",9).attr("rx",2).attr("ry",2).attr("stroke-width","3"),h.append("svg:text").attr("class","node_status_label").attr("x",20).attr("y",9)}n.append("image").attr("class","node_error hidden").attr("xlink:href","icons/node-red/node-error.png").attr("x",0).attr("y",-6).attr("width",10).attr("height",9),n.append("image").attr("class","node_changed hidden").attr("xlink:href","icons/node-red/node-changed.png").attr("x",12).attr("y",-6).attr("width",10).attr("height",10)}),i.each(function(e,t){if(e.dirty){var n="link in"===e.type||"link out"===e.type;if(w[e.id]=e,!n&&e.resize){var o=RED.utils.getNodeLabel(e),i=e.w;e.w=Math.max(D,20*Math.ceil((be(o,"node_label",50)+(0<e._def.inputs?7:0))/20)),e.h=Math.max(E,15*(e.outputs||0)),e.x+=(e.w-i)/2,e.resize=!1}var a=d3.select(this);if(a.attr("transform",function(e){return"translate("+(e.x-e.w/2)+","+(e.y-e.h/2)+")"}),z!=RED.state.MOVING_ACTIVE){a.selectAll(".node").attr("width",function(e){return e.w}).attr("height",function(e){return e.h}).classed("node_selected",function(e){return e.selected}).classed("node_highlighted",function(e){return e.highlighted}),a.selectAll(".node_icon_group_right").attr("transform",function(e){return"translate("+(e.w-30)+",0)"}),a.selectAll(".node_label_right").attr("x",function(e){return e.w-38});var s=a.selectAll(".port_input");if(0!==e.inputs||s.empty()){if(1===e.inputs&&s.empty()){a.append("g").attr("class","port_input").append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",function(e){Ee(e,W,0)}).on("touchstart",function(e){Ee(e,W,0)}).on("mouseup",function(e){Re(e,W,0)}).on("touchend",function(e){Re(e,W,0)}).on("mouseover",function(e){Te(d3.select(this),e,W,0)}).on("mouseout",function(e){_e(d3.select(this))})}}else s.remove();var r=e.outputs,d=e.h/2-(r-1)/2*13;if(e.ports=e.ports||d3.range(r),e._ports=a.selectAll(".port_output").data(e.ports),e._ports.enter().append("g").attr("class","port_output").append("rect").attr("class","port").attr("rx",3).attr("ry",3).attr("width",10).attr("height",10).on("mousedown",(y=e,function(e,t){Ee(y,H,t)})).on("touchstart",(b=e,function(e,t){Ee(b,H,t)})).on("mouseup",(m=e,function(e,t){Re(m,H,t)})).on("touchend",(v=e,function(e,t){Re(v,H,t)})).on("mouseover",(g=e,function(e,t){Te(d3.select(this),g,H,t)})).on("mouseout",function(e,t){_e(d3.select(this))}),e._ports.exit().remove(),e._ports){r=e.outputs||1,d=e.h/2-(r-1)/2*13;var l=e.w-5;e._ports.each(function(e,t){d3.select(this).attr("transform",function(e){return"translate("+l+","+(d+13*t-5)+")"})})}if(a.selectAll("text.node_label").text(function(t,e){var n="";if(t._def.label){n=t._def.label;try{n=("function"==typeof n?n.call(t):n)||"",n=RED.text.bidi.enforceTextDirectionWithUCC(n)}catch(e){console.log("Definition error: "+t.type+".label",e),n=t.type}}return n}).attr("y",function(e){return e.h/2-1}).attr("class",function(t){var n="";if(t._def.labelStyle){n=t._def.labelStyle;try{n=("function"==typeof n?n.call(t):n)||""}catch(e){console.log("Definition error: "+t.type+".labelStyle",e),n=""}n=" "+n}return"node_label"+(t._def.align?" node_label_"+t._def.align:"")+n}),e._def.icon){icon=a.select(".node_icon");var c=icon.attr("xlink:href"),p=RED.utils.getNodeIcon(e._def,e);if(p!==c){icon.attr("xlink:href",p);var u=new Image;u.src=p,u.onload=function(){icon.attr("width",Math.min(u.width,30)),icon.attr("height",Math.min(u.height,30)),icon.attr("x",15-Math.min(u.width,30)/2)}}}a.selectAll(".node_tools").attr("x",function(e){return e.w-35}).attr("y",function(e){return e.h-20}),a.selectAll(".node_changed").attr("x",function(e){return e.w-10}).classed("hidden",function(e){return!(e.changed||e.moved)}),a.selectAll(".node_error").attr("x",function(e){return e.w-10-(e.changed||e.moved?13:0)}).classed("hidden",function(e){return e.valid}),a.selectAll(".port_input").each(function(e,t){d3.select(this).attr("transform",function(e){return"translate(-5,"+(e.h/2-5)+")"})}),a.selectAll(".node_icon").attr("y",function(e){return(e.h-d3.select(this).attr("height"))/2}),a.selectAll(".node_icon_shade").attr("height",function(e){return e.h}),a.selectAll(".node_icon_shade_border").attr("d",function(e){return"M "+("right"==e._def.align?0:30)+" 1 l 0 "+(e.h-2)}),a.selectAll(".node_button").attr("opacity",function(e){return R||!Ce(e)?.4:1}),a.selectAll(".node_button_button").attr("cursor",function(e){return R||!Ce(e)?"":"pointer"}),a.selectAll(".node_right_button").attr("transform",function(e){var t=e.w-6;return e._def.button.toggle&&!e[e._def.button.toggle]&&(t-=8),"translate("+t+",2)"}),a.selectAll(".node_right_button rect").attr("fill-opacity",function(e){return e._def.button.toggle?e[e._def.button.toggle]?1:.2:1}),a.selectAll(".node_badge_group").attr("transform",function(e){return"translate("+(e.w-40)+","+(e.h+3)+")"}),a.selectAll("text.node_badge_label").text(function(t,e){if(t._def.badge){if("function"!=typeof t._def.badge)return t._def.badge;try{return t._def.badge.call(t)}catch(e){return console.log("Definition error: "+t.type+".badge",e),""}}return""})}if(U&&e.status){a.selectAll(".node_status_group").style("display","inline").attr("transform","translate(3,"+(e.h+3)+")");var f,h=q[e.status.fill];if(null==e.status.shape&&null==h)a.selectAll(".node_status").style("display","none");else null==e.status.shape||"dot"==e.status.shape?f={display:"inline",fill:h,stroke:h}:"ring"==e.status.shape&&(f={display:"inline",fill:"#fff",stroke:h}),a.selectAll(".node_status").style(f);e.status.text?a.selectAll(".node_status_label").text(e.status.text):a.selectAll(".node_status_label").text("")}else a.selectAll(".node_status_group").style("display","none");e.dirty=!1}var g,v,m,b,y});var a=Y.selectAll(".link").data(d,function(e){return e.source.id+":"+e.sourcePort+":"+e.target.id+":"+e.target.i});a.enter().insert("g",".node").attr("class","link").each(function(e,t){var n=d3.select(this);e.added=!0,n.append("svg:path").attr("class","link_background link_path").on("mousedown",function(e){f=e,le(),O=f,pe(),Le(),Pe(),d3.event.stopPropagation()}).on("touchstart",function(e){f=e,le(),O=f,pe(),Le(),Pe(),d3.event.stopPropagation();var t=d3.select(document.body),n=d3.event.touches.item(0),o=[n.pageX,n.pageY];b=setTimeout(function(){b=null,Oe(t,o)},g)}),n.append("svg:path").attr("class","link_outline link_path"),n.append("svg:path").attr("class","link_line link_path").classed("link_link",function(e){return e.link}).classed("link_subflow",function(e){return!e.link&&R})}),a.exit().remove(),Y.selectAll(".link_path").each(function(e){var t=d3.select(this);(e.added||e===O||e.selected||w[e.source.id]||w[e.target.id])&&t.attr("d",function(e){var t=-((e.source.outputs||1)-1)/2*13+13*(e.sourcePort||0);return e.x1=e.source.x+e.source.w/2,e.y1=e.source.y+t,e.x2=e.target.x-e.target.w/2,e.y2=e.target.y,ne(e.x1,e.y1,e.x2,e.y2,1)})}),a.classed("link_selected",function(e){return e===O||e.selected}),a.classed("link_unknown",function(e){return delete e.added,"unknown"==e.target.type||"unknown"==e.source.type});var s=Y.selectAll(".link_flow_link_g").data(l,function(e){return e.node.id+":"+e.refresh});s.enter().insert("g",".node").attr("class","link_flow_link_g").each(function(n,e){var t=d3.select(this),i=1,a="start";"link in"===n.node.type&&(i=-1,a="end");var s=30*i,r=20*i,o=(t.append("svg:path").attr("class","link_flow_link").attr("class","link_link").attr("d","M 0 0 h "+s),n.links),d=Object.keys(o),l=RED.nodes.getWorkspaceOrder();d.sort(function(e,t){return l.indexOf(e)-l.indexOf(t)});var c=E,p=-(d.length-1)*c/2,u=t.selectAll(".link_group").data(d);u.enter().append("g").attr("class","link_group").on("mouseover",function(){d3.select(this).classed("link_group_active",!0)}).on("mouseout",function(){d3.select(this).classed("link_group_active",!1)}).on("mousedown",function(){d3.event.preventDefault(),d3.event.stopPropagation()}).on("mouseup",function(e){d3.event.stopPropagation();var t=n.links[e];RED.workspaces.show(e),t.forEach(function(e){e.selected=!0,e.dirty=!0,M.push({n:e})}),pe(),Le()}).each(function(e){var t=d3.select(this);t.append("svg:path").attr("class","link_flow_link").attr("class","link_link").attr("d","M "+s+" 0 C "+(s+1.7*r)+" 0 "+(s+.1*r)+" "+p+" "+(s+1.5*r)+" "+p+" "),t.append("svg:path").attr("class","link_port").attr("d","M "+(s+1.5*r+17*i)+" "+(p-12)+" h "+10*-i+" a 3 3 45 0 "+(1===i?"0":"1")+" "+-3*i+" 3 v 18 a 3 3 45 0 "+(1===i?"0":"1")+" "+3*i+" 3 h "+10*i),t.append("svg:path").attr("class","link_port").attr("d","M "+(s+1.5*r+20*i)+" "+(p-12)+" h "+30*i+" M "+(s+1.5*r+20*i)+" "+(p+12)+" h "+30*i).style("stroke-dasharray","12 3 8 4 3"),t.append("rect").attr("class","port link_port").attr("x",s+1.5*r-4+4*i).attr("y",p-4).attr("rx",2).attr("ry",2).attr("width",8).attr("height",8),t.append("rect").attr("x",s+1.5*r-(-1===i?D:0)).attr("y",p-12).attr("width",D).attr("height",24).style("stroke","none").style("fill","transparent");var n,o=RED.nodes.workspace(e);o&&(n=o.label||o.id),t.append("svg:text").attr("class","port_label").attr("x",s+1.5*r+15*i).attr("y",p+1).style("font-size","10px").style("text-anchor",a).text(n),p+=c}),u.exit().remove()}),s.exit().remove(),(s=Y.selectAll(".link_flow_link_g")).each(function(e){var t=1;"link in"===e.node.type&&(t=-1),d3.select(this).attr("transform",function(e){return"translate("+(e.node.x+t*e.node.w/2)+","+e.node.y+")"})})}else Y.selectAll(".link_selected").data(d,function(e){return e.source.id+":"+e.sourcePort+":"+e.target.id+":"+e.target.i}).classed("link_selected",!1);RED.view.navigator.refresh(),d3.event&&d3.event.preventDefault()}function Pe(){try{var e=window.parent.window.scrollX,t=window.parent.window.scrollY;$("#chart").focus(),window.parent.window.scrollTo(e,t)}catch(e){$("#chart").focus()}}function Ne(e,t,n){try{var o;R&&(o=R.changed);var i=RED.nodes.import(e,!0,t);if(i){var a=i[0],s=i[1],r=i[2],d=i[3],l=i[4];t&&l&&RED.workspaces.show(l.id);var c=a.filter(function(e){return e.hasOwnProperty("x")&&e.hasOwnProperty("y")&&e.z==RED.workspaces.active()}).map(function(e){return{n:e}}),p=a.map(function(e){return e.id});if(0<c.length){var u=c[0].n,f=u.x,h=u.y;null==A&&(A=[0,0]);var g,v,m=0,b=0;for(g=0;g<c.length;g++)(v=c[g]).n.selected=!0,v.n.changed=!0,v.n.moved=!0,v.n.x-=f-A[0],v.n.y-=h-A[1],v.dx=v.n.x-A[0],v.dy=v.n.y-A[1],m=Math.min(v.n.x-D/2-5,m),b=Math.min(v.n.y-E/2-5,b);for(g=0;g<c.length;g++)if((v=c[g]).n.x-=m,v.n.y-=b,v.dx-=m,v.dy-=b,v.n._def.onadd)try{v.n._def.onadd.call(v.n)}catch(e){console.log("Definition error: "+v.n.type+".onadd:",e)}n||(z=RED.state.IMPORT_DRAGGING,S=!1,1===c.length&&(v=c[0],S=v.n.hasOwnProperty("_def")&&0<v.n._def.inputs&&0<v.n._def.outputs)),RED.keyboard.add("*","escape",function(){RED.keyboard.remove("escape"),le(),RED.history.pop(),z=0}),le(),M=c}var y={t:"add",nodes:p,links:s,workspaces:r,subflows:d,dirty:RED.nodes.dirty()};if(0===c.length&&RED.nodes.dirty(!0),R){var w=RED.subflow.refresh(!0);w&&(y.subflow={id:R.id,changed:o,instances:w.instances})}RED.history.push(y),te(),Le()}}catch(e){"NODE_RED"!=e.code?(console.log(e.stack),RED.notify(RED._("notification.error",{message:e.toString()}),"error")):RED.notify(RED._("notification.error",{message:e.message}),"error")}}return{init:function(){RED.events.on("workspace:change",function(e){0!==e.old&&(a[e.old]={left:K.scrollLeft(),top:K.scrollTop()});var t=K.scrollLeft(),n=K.scrollTop();R=RED.nodes.subflow(e.workspace),RED.menu.setDisabled("menu-item-workspace-edit",R),RED.menu.setDisabled("menu-item-workspace-delete",1==RED.workspaces.count()||R),a[e.workspace]?(K.scrollLeft(a[e.workspace].left),K.scrollTop(a[e.workspace].top)):(K.scrollLeft(0),K.scrollTop(0));var o=K.scrollLeft()-t,i=K.scrollTop()-n;null!=A&&(A[0]+=o,A[1]+=i),le(),RED.nodes.eachNode(function(e){e.dirty=!0}),pe(),te(),Le()}),RED.view.navigator.init(),$("#btn-zoom-out").click(function(){se()}),$("#btn-zoom-zero").click(function(){re()}),$("#btn-zoom-in").click(function(){ae()}),$("#chart").on("DOMMouseScroll mousewheel",function(e){e.altKey&&(e.preventDefault(),e.stopPropagation(),(-e.originalEvent.detail||e.originalEvent.wheelDelta)<=0?se():ae())}),$("#chart").droppable({accept:".palette_node",drop:function(e,t){d3.event=e;var n=oe(t.draggable[0].type);if(n){var o=n.historyEvent,i=n.node,a=d3.touches(t.helper.get(0))[0]||d3.mouse(t.helper.get(0)),s=d3.touches(this)[0]||d3.mouse(this);s[1]+=this.scrollTop+(i.h/2-a[1]),s[0]+=this.scrollLeft+(i.w/2-a[0]),s[1]/=c,s[0]/=c,C&&(s[0]=j*Math.ceil(s[0]/j),s[1]=j*Math.ceil(s[1]/j)),i.x=s[0],i.y=s[1];var r=$(t.helper).data("splice");if(r){RED.nodes.removeLink(r);var d={source:r.source,sourcePort:r.sourcePort,target:i},l={source:i,sourcePort:0,target:r.target};RED.nodes.addLink(d),RED.nodes.addLink(l),o.links=[d,l],o.removedLinks=[r]}RED.history.push(o),RED.nodes.add(i),RED.editor.validateNode(i),RED.nodes.dirty(!0),le(),i.selected=!0,M.push({n:i}),te(),pe(),Le(),i._def.autoedit&&RED.editor.edit(i)}}}),$("#chart").focus(function(){$("#workspace-tabs").addClass("workspace-focussed")}),$("#chart").blur(function(){$("#workspace-tabs").removeClass("workspace-focussed")}),RED.actions.add("core:copy-selection-to-internal-clipboard",me),RED.actions.add("core:cut-selection-to-internal-clipboard",function(){me(),ve()}),RED.actions.add("core:paste-from-internal-clipboard",function(){Ne(s)}),RED.actions.add("core:delete-selection",ve),RED.actions.add("core:edit-selected-node",ge),RED.actions.add("core:undo",RED.history.pop),RED.actions.add("core:select-all-nodes",de),RED.actions.add("core:zoom-in",ae),RED.actions.add("core:zoom-out",se),RED.actions.add("core:zoom-reset",re),RED.actions.add("core:toggle-show-grid",function(e){void 0===e?RED.userSettings.toggle("view-show-grid"):e?n.style("visibility","visible"):n.style("visibility","hidden")}),RED.actions.add("core:toggle-snap-grid",function(e){void 0===e?RED.userSettings.toggle("view-snap-grid"):(C=e,Le())}),RED.actions.add("core:toggle-status",function(e){void 0===e?RED.userSettings.toggle("view-node-status"):(U=e,RED.nodes.eachNode(function(e){e.dirty=!0}),Le())}),RED.actions.add("core:move-selection-up",function(){he(0,-1)}),RED.actions.add("core:step-selection-up",function(){he(0,-20)}),RED.actions.add("core:move-selection-right",function(){he(1,0)}),RED.actions.add("core:step-selection-right",function(){he(20,0)}),RED.actions.add("core:move-selection-down",function(){he(0,1)}),RED.actions.add("core:step-selection-down",function(){he(0,20)}),RED.actions.add("core:move-selection-left",function(){he(-1,0)}),RED.actions.add("core:step-selection-left",function(){he(-20,0)})},state:function(e){if(null==e)return z;z=e},redraw:function(e){e&&(te(),pe()),Le()},focus:Pe,importNodes:Ne,calculateTextWidth:be,select:function(e){if(void 0!==e&&(le(),"string"==typeof e)){var t=RED.nodes.node(e);t&&(t.selected=!0,t.dirty=!0,M=[{n:t}])}pe(),Le()},selection:function(){var e={};return 0<M.length&&(e.nodes=M.map(function(e){return e.n})),null!=O&&(e.link=O),e},scale:function(){return c},getLinksAtPoint:function(e,t){for(var n=[],o=X.selectAll(".link_background")[0],i=0;i<o.length;i++){var a=o[i].getBBox();e>=a.x&&t>=a.y&&e<=a.x+a.width&&t<=a.y+a.height&&n.push(o[i])}return n},reveal:function(e){if(RED.nodes.workspace(e)||RED.nodes.subflow(e))RED.workspaces.show(e);else{var t=RED.nodes.node(e);if("config"!==t._def.category&&t.z){t.highlighted=!0,t.dirty=!0,RED.workspaces.show(t.z);var n=[$("#chart").width(),$("#chart").height()],o=[$("#chart").scrollLeft(),$("#chart").scrollTop()];if(t.x<o[0]||t.y<o[1]||t.x>n[0]+o[0]||t.y>n[1]+o[1]){var i="-="+(o[0]-t.x+n[0]/2),a="-="+(o[1]-t.y+n[1]/2);$("#chart").animate({scrollLeft:i,scrollTop:a},200)}if(!t._flashing){t._flashing=!0;var s=22,r=function(){s--,t.dirty=!0,0<=s?(t.highlighted=!t.highlighted,setTimeout(r,100)):(t.highlighted=!1,delete t._flashing),RED.view.redraw()};r()}}else"config"===t._def.category&&RED.sidebar.config.show(e)}},gridSize:function(e){if(void 0===e)return j;j=Math.max(5,e),t()},getActiveNodes:function(){return r}}}(),RED.view.navigator=function(){var t,e,n,o,i,a,s,r,d,l=25,c=5e3/l,p=5e3/l,u=!1;function f(){if(u){var e=o.selectAll(".navnode").data(RED.view.getActiveNodes(),function(e){return e.id});e.exit().remove(),e.enter().insert("rect").attr("class","navnode").attr("pointer-events","none"),e.each(function(e){d3.select(this).attr("x",function(e){return(e.x-e.w/2)/l}).attr("y",function(e){return(e.y-e.h/2)/l}).attr("width",function(e){return Math.max(9,e.w/l)}).attr("height",function(e){return Math.max(3,e.h/l)}).attr("fill",function(e){return RED.utils.getNodeColor(e.type,e._def)})})}}function h(){d||g()}function g(){n&&(a=RED.view.scale(),s=[$("#chart").width(),$("#chart").height()],i=[$("#chart").scrollLeft(),$("#chart").scrollTop()],n.attr("x",i[0]/l).attr("y",i[1]/l).attr("width",s[0]/l/a).attr("height",s[1]/l/a))}return{init:function(){$(window).resize(g),RED.events.on("sidebar:resize",g),t=$("<div>").css({position:"absolute",bottom:$("#workspace-footer").height(),right:0,zIndex:1}).appendTo("#workspace").hide(),(e=d3.select(t[0]).append("svg:svg").attr("width",c).attr("height",p).attr("pointer-events","all").style({position:"absolute",bottom:0,right:0,zIndex:101,"border-left":"1px solid #ccc","border-top":"1px solid #ccc",background:"rgba(245,245,245,0.5)","box-shadow":"-1px 0 3px rgba(0,0,0,0.1)"})).append("rect").attr("x",0).attr("y",0).attr("width",c).attr("height",p).style({fill:"none",stroke:"none",pointerEvents:"all"}).on("mousedown",function(){a=RED.view.scale(),s=[$("#chart").width(),$("#chart").height()],r=[s[0]/l/a,s[1]/l/a];var e=Math.max(0,Math.min(d3.event.offsetX+r[0]/2,c)-r[0]),t=Math.max(0,Math.min(d3.event.offsetY+r[1]/2,p)-r[1]);n.attr("x",e).attr("y",t),d=!0,$("#chart").scrollLeft(e*l*a),$("#chart").scrollTop(t*l*a)}).on("mousemove",function(){if(d)if(0!==d3.event.buttons){var e=Math.max(0,Math.min(d3.event.offsetX+r[0]/2,c)-r[0]),t=Math.max(0,Math.min(d3.event.offsetY+r[1]/2,p)-r[1]);n.attr("x",e).attr("y",t),$("#chart").scrollLeft(e*l*a),$("#chart").scrollTop(t*l*a)}else d=!1}).on("mouseup",function(){d=!1}),n=e.append("rect").attr("stroke-dasharray","5,5").attr("pointer-events","none").style({stroke:"#999",strokeWidth:1,fill:"white"}),o=e.append("svg:g"),$("#btn-navigate").click(function(e){e.preventDefault(),u?(u=!1,t.fadeOut(100),$("#chart").off("scroll",h),$("#btn-navigate").removeClass("selected")):(u=!0,$("#btn-navigate").addClass("selected"),g(),f(),$("#chart").on("scroll",h),t.fadeIn(200))})},refresh:f,resize:g}}(),RED.sidebar=function(){var a=RED.tabs.create({id:"sidebar-tabs",onchange:function(e){$("#sidebar-content").children().hide(),$("#sidebar-footer").children().hide(),e.onchange&&e.onchange.call(e),$(e.wrapper).show(),e.toolbar&&$(e.toolbar).show()},onremove:function(e){$(e.wrapper).hide(),e.onremove&&e.onremove.call(e)},collapsible:!0}),s={};var r={};function t(e){e?($("#main-container").removeClass("sidebar-closed"),a.resize()):$("#main-container").addClass("sidebar-closed"),RED.events.emit("sidebar:resize")}function d(e){e&&(n(e)||a.addTab(s[e]),a.activateTab(e),RED.menu.isSelected("menu-item-sidebar")||RED.menu.setSelected("menu-item-sidebar",!0))}function n(e){return a.contains(e)}return $("#sidebar-separator").draggable({axis:"x",start:function(e,t){r.closing=!1,r.opening=!1;var n=$(window).width();if(r.start=t.position.left,r.chartWidth=$("#workspace").width(),r.chartRight=n-$("#workspace").width()-$("#workspace").offset().left-2,!RED.menu.isSelected("menu-item-sidebar")){r.opening=!0;$("#sidebar").addClass("closing"),$("#workspace").css("right",7),$("#editor-stack").css("right",8),$("#sidebar").width(0),RED.menu.setSelected("menu-item-sidebar",!0),RED.events.emit("sidebar:resize")}r.width=$("#sidebar").width()},drag:function(e,t){var n=t.position.left-r.start,o=r.width-n;r.opening&&(o-=3),150<o&&r.chartWidth+n<200&&(t.position.left=200+r.start-r.chartWidth,n=t.position.left-r.start,o=r.width-n),o<150?(r.closing||($("#sidebar").addClass("closing"),r.closing=!0),r.opening||(o=150,t.position.left=r.width-(150-r.start),n=t.position.left-r.start)):150<o&&(r.closing||r.opening)&&(r.closing=!1,$("#sidebar").removeClass("closing"));var i=r.chartRight-n;$("#workspace").css("right",i),$("#editor-stack").css("right",i+1),$("#sidebar").width(o),a.resize(),RED.events.emit("sidebar:resize")},stop:function(e,t){r.closing&&($("#sidebar").removeClass("closing"),RED.menu.setSelected("menu-item-sidebar",!1),$("#sidebar").width()<180&&($("#sidebar").width(180),$("#workspace").css("right",187),$("#editor-stack").css("right",188))),$("#sidebar-separator").css("left","auto"),$("#sidebar-separator").css("right",$("#sidebar").width()+2+"px"),RED.events.emit("sidebar:resize")}}),{init:function(){RED.actions.add("core:toggle-sidebar",function(e){void 0===e?RED.menu.toggleSelected("menu-item-sidebar"):t(e)}),d(),RED.sidebar.info.init(),RED.sidebar.config.init(),RED.sidebar.context.init(),$(window).width()<600&&RED.menu.setSelected("menu-item-sidebar",!1)},addTab:function(e,t,n,o){var i;"string"==typeof e?i={id:t.id,label:e,name:e,content:t,closeable:n,visible:o}:"object"==typeof e&&(i=e),delete i.closeable,i.wrapper=$("<div>",{style:"height:100%"}).appendTo("#sidebar-content"),i.wrapper.append(i.content),i.wrapper.hide(),i.enableOnEdit||(i.shade=$("<div>",{class:"sidebar-shade hide"}).appendTo(i.wrapper)),i.toolbar&&($("#sidebar-footer").append(i.toolbar),$(i.toolbar).hide()),i.id,RED.menu.addItem("menu-item-view-menu",{id:"menu-item-view-menu-"+i.id,label:i.name,onselect:function(){d(i.id)},group:"sidebar-tabs"}),i.iconClass=i.iconClass||"fa fa-square-o",!1!==(s[i.id]=i).visible&&a.addTab(s[i.id])},removeTab:function(e){a.removeTab(e),$(s[e].wrapper).remove(),s[e].footer&&s[e].footer.remove(),delete s[e],RED.menu.removeItem("menu-item-view-menu-"+e)},show:d,containsTab:n,toggleSidebar:t}}(),RED.palette=function(){var E=["config","unknown","deprecated"],R=["subflows","input","output","function","social","mobile","storage","analysis","advanced"],x={};function T(e,t,n,o){0===$("#palette-base-category-"+t).length&&i(e,t,o+":palette.label."+t),$("#palette-container-"+t).show(),0===$("#palette-"+n).length&&$("#palette-base-category-"+t).append('<div id="palette-'+n+'"></div>')}function i(e,t,n){var o=RED._(n,{defaultValue:t});o=(o||t).replace(/_/g," ");var i=$('<div id="palette-container-'+t+'" class="palette-category palette-close hide"><div id="palette-header-'+t+'" class="palette-header"><i class="expanded fa fa-angle-down"></i><span>'+o+'</span></div><div class="palette-content" id="palette-base-category-'+t+'"><div id="palette-'+t+'-input"></div><div id="palette-'+t+'-output"></div><div id="palette-'+t+'-function"></div></div></div>').appendTo("#palette-container");i.data("category",e),i.data("label",o),x[t]={container:i,close:function(){i.removeClass("palette-open"),i.addClass("palette-closed"),$("#palette-base-category-"+t).slideUp(),$("#palette-header-"+t+" i").removeClass("expanded")},open:function(){i.addClass("palette-open"),i.removeClass("palette-closed"),$("#palette-base-category-"+t).slideDown(),$("#palette-header-"+t+" i").addClass("expanded")},toggle:function(){i.hasClass("palette-open")?x[t].close():x[t].open()}},$("#palette-header-"+t).on("click",function(e){x[t].toggle()})}function _(t,e,n,o){for(var i=n.split(/[ -]/),a=[],s=i[0],r=(RED.view.calculateTextWidth(s,"palette_label",0),1);r<i.length;r++){var d=RED.view.calculateTextWidth(s+" "+i[r],"palette_label",0);d<82?(s+=" "+i[r],d):(a.push(s),s=i[r],RED.view.calculateTextWidth(s,"palette_label",0))}a.push(s);var l,c=a.join("<br/>"),p=8+20*a.length;e.css({height:p+"px"}),e.find(".palette_label").html(c).attr("dir",RED.text.bidi.resolveBaseTextDir(c)),e.find(".palette_port").css({top:p/2-5+"px"});try{var u="<p><b>"+RED.text.bidi.enforceTextDirectionWithUCC(n)+"</b></p>";n!=t&&(u="<p><b>"+RED.text.bidi.enforceTextDirectionWithUCC(n)+"</b><br/><i>"+t+"</i></p>"),l=$(u+(o||($("script[data-help-name='"+t+"']").html()||"<p>"+RED._("palette.noInfo")+"</p>")).trim()).filter(function(e){return 1==this.nodeType&&"P"==this.nodeName||3==this.nodeType&&0<this.textContent.trim().length}).slice(0,2)}catch(e){console.log("Error generating pop-over label for ",t),console.log(e.toString()),l="<p><b>"+n+"</b></p><p>"+RED._("palette.noInfo")+"</p>"}e.data("popover").setContent(l)}function k(e){return e.replace(" ","_").replace(".","_").replace(":","_")}function n(t,n){var e=k(t);if(!$("#palette_node_"+e).length&&-1===E.indexOf(n.category)){n.category;var o=n.category.replace(/ /g,"_"),i=o.split("-")[0],a=document.createElement("div");a.id="palette_node_"+e,a.type=t;var s=/^(.*?)([ -]in|[ -]out)?$/.exec(t)[1];if(void 0!==n.paletteLabel)try{s=("function"==typeof n.paletteLabel?n.paletteLabel.call(n):n.paletteLabel)||""}catch(e){console.log("Definition error: "+t+".paletteLabel",e)}if($("<div/>",{class:"palette_label"+("right"==n.align?" palette_label_right":"")}).appendTo(a),a.className="palette_node",n.icon){var r=RED.utils.getNodeIcon(n),d=$("<div/>",{class:"palette_icon_container"+("right"==n.align?" palette_icon_container_right":"")}).appendTo(a);$("<div/>",{class:"palette_icon",style:"background-image: url("+r+")"}).appendTo(d)}if(a.style.backgroundColor=RED.utils.getNodeColor(t,n),0<n.outputs){var l=document.createElement("div");l.className="palette_port palette_port_output",a.appendChild(l)}if(0<n.inputs){var c=document.createElement("div");c.className="palette_port palette_port_input",a.appendChild(c)}T(n.category,i,o,-1!==R.indexOf(i)?"node-red":n.set.id),$("#palette-"+o).append(a),$(a).data("category",i),a.onmousedown=function(e){e.preventDefault()};var p=RED.popover.create({target:$(a),trigger:"hover",width:"300px",content:"hi",delay:{show:750,hide:50}});$(a).data("popover",p),$(a).click(function(){var e;RED.view.focus(),e=0===t.indexOf("subflow:")?marked(RED.nodes.subflow(t.substring(8)).info||"")||'<span class="node-info-none">'+RED._("sidebar.info.none")+"</span>":$("script[data-help-name='"+a.type+"']").html()||'<span class="node-info-none">'+RED._("sidebar.info.none")+"</span>",RED.sidebar.info.set(e,RED._("sidebar.info.nodeHelp"))});var u,f,h,g,v,m,b=$("#chart"),y=b.offset(),w=$("#chart>svg").get(0);$(a).draggable({helper:"clone",appendTo:"body",revert:!0,revertDuration:50,containment:"#main-container",start:function(){v=$("#palette").width(),m=$("#palette").parent().position().top+$("#palette-container").position().top,RED.view.focus()},stop:function(){d3.select(".link_splice").classed("link_splice",!1),g&&(clearTimeout(g),g=null)},drag:function(e,l){l.position.left+=17.5,0<n.inputs&&0<n.outputs&&(f=l.position.left-v+l.helper.width()/2-y.left+b.scrollLeft(),h=l.position.top-m+l.helper.height()/2-y.top+b.scrollTop(),g||(g=setTimeout(function(){var e=[],t=1/0,n=null;if(w.getIntersectionList){var o=w.createSVGRect();o.x=f,o.y=h,o.width=1,o.height=1,e=w.getIntersectionList(o,w),f/=RED.view.scale(),h/=RED.view.scale()}else f/=RED.view.scale(),h/=RED.view.scale(),e=RED.view.getLinksAtPoint(f,h);for(var i=0;i<e.length;i++)if(d3.select(e[i]).classed("link_background"))for(var a=e[i].getTotalLength(),s=0;s<a;s+=10){var r=e[i].getPointAtLength(s),d=(r.x-f)*(r.x-f)+(r.y-h)*(r.y-h);d<200&&d<t&&(t=d,n=e[i])}u&&u!==n&&d3.select(u.parentNode).classed("link_splice",!1),n?d3.select(n.parentNode).classed("link_splice",!0):d3.select(".link_splice").classed("link_splice",!1),u!==n&&(n?$(l.helper).data("splice",d3.select(n).data()[0]):$(l.helper).removeData("splice")),u=n,g=null},200)))}});var D=null;0===t.indexOf("subflow:")&&($(a).dblclick(function(e){RED.workspaces.show(t.substring(8)),e.preventDefault()}),D=marked(n.info||"")),_(t,$(a),s,D),1===$("#palette-container-"+o).find(".palette_node").length&&x[o].open()}}function o(e){var t=k(e),n=$("#palette_node_"+t),o=n.closest(".palette-category");n.remove(),0===o.find(".palette_node").length&&o.find("i").hasClass("expanded")&&(o.find(".palette-content").slideToggle(),o.find("i").toggleClass("expanded"))}function a(e){var t=k(e),n=$("#palette_node_"+t);n.hide();for(var o=n.closest(".palette-category"),i=o.find(".palette_node"),a=0,s=0;s<i.length;s++)"none"===$(i[s]).css("display")&&(a+=1);a===i.length&&o.hide()}function s(e){var t=k(e),n=$("#palette_node_"+t);n.closest(".palette-category").show(),n.show()}return{init:function(){RED.events.on("registry:node-type-added",function(e){var t=RED.nodes.getType(e);n(e,t),t.onpaletteadd&&"function"==typeof t.onpaletteadd&&t.onpaletteadd.call(t)}),RED.events.on("registry:node-type-removed",function(e){o(e)}),RED.events.on("registry:node-set-enabled",function(e){for(var t=0;t<e.types.length;t++){s(e.types[t]);var n=RED.nodes.getType(e.types[t]);n&&n.onpaletteadd&&"function"==typeof n.onpaletteadd&&n.onpaletteadd.call(n)}}),RED.events.on("registry:node-set-disabled",function(e){for(var t=0;t<e.types.length;t++){a(e.types[t]);var n=RED.nodes.getType(e.types[t]);n&&n.onpaletteremove&&"function"==typeof n.onpaletteremove&&n.onpaletteremove.call(n)}}),RED.events.on("registry:node-set-removed",function(e){if(e.added)for(var t=0;t<e.types.length;t++){o(e.types[t]);var n=RED.nodes.getType(e.types[t]);n&&n.onpaletteremove&&"function"==typeof n.onpaletteremove&&n.onpaletteremove.call(n)}}),$("#palette > .palette-spinner").show(),$("#palette-search input").searchBox({delay:100,change:function(){!function(o){var i=new RegExp(o.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"i");for(var e in $("#palette-container .palette_node").each(function(e,t){var n=$(t).find(".palette_label").text();""===o||i.test(t.id)||i.test(n)?$(this).show():$(this).hide()}),x)x.hasOwnProperty(e)&&(0===x[e].container.find(".palette_node").filter(function(){return"none"!==$(this).css("display")}).length?x[e].close():x[e].open())}($(this).val())}});var e=R;RED.settings.paletteCategories?e=RED.settings.paletteCategories:RED.settings.theme("palette.categories")&&(e=RED.settings.theme("palette.categories")),Array.isArray(e)||(e=R),e.forEach(function(e){i(e,e,"palette.label."+e)}),$("#palette-collapse-all").on("click",function(e){for(var t in e.preventDefault(),x)x.hasOwnProperty(t)&&x[t].close()}),$("#palette-expand-all").on("click",function(e){for(var t in e.preventDefault(),x)x.hasOwnProperty(t)&&x[t].open()})},add:n,remove:o,hide:a,show:s,refresh:function(){RED.nodes.eachSubflow(function(e){var t,n,o,i=$("#palette_node_subflow_"+e.id.replace(".","_")),a=i.find(".palette_port_input"),s=i.find(".palette_port_output");if(0===a.length&&0<e.in.length){var r=document.createElement("div");r.className="palette_port palette_port_input",i.append(r)}else 0!==a.length&&0===e.in.length&&a.remove();if(0===s.length&&0<e.out.length){var d=document.createElement("div");d.className="palette_port palette_port_output",i.append(d)}else 0!==s.length&&0===e.out.length&&s.remove();_(e.type+":"+e.id,i,e.name,marked(e.info||"")),t=e,n=i.find(".palette_icon"),o=RED.utils.getNodeIcon(t._def,t),n.attr("style","background-image: url("+o+")");var l=i.data("category"),c=e.category||"subflows";if(l!==c){var p=c.replace(/ /g,"_");T(c,p,p,"node-red");var u=i.closest(".palette-category"),f=$("#palette-"+p);f.append(i),1===f.find(".palette_node").length&&x[p].open(),i.data("category",c),0===u.find(".palette_node").length&&u.find("i").hasClass("expanded")&&(u.find(".palette-content").slideToggle(),u.find("i").toggleClass("expanded"))}})},getCategories:function(){var n=[];return $("#palette-container .palette-category").each(function(e,t){n.push({id:$(t).data("category"),label:$(t).data("label")})}),n}}}(),RED.sidebar.info=function(){var o,T,_,k,l;marked.setOptions({renderer:new marked.Renderer,gfm:!0,tables:!0,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1});var j={property:!1};function i(){RED.sidebar.show("info")}function a(e){if(void 0!==e){var t;T.show(),$(_.content).empty(),$(k.content).empty();var n,o,i=$('<table class="node-info"></table>').appendTo(_.content),a=$("<tbody>").appendTo(i),s=RED.projects.getActiveProject();if(s&&(t=$('<tr class="node-info-node-row"><td>Project</td><td></td></tr>').appendTo(a),$(t.children()[1]).text(s.name||""),$('<tr class="node-info-property-expand blank"><td colspan="2"></td></tr>').appendTo(a),$('<button class="editor-button editor-button-small" style="position:absolute;right:2px;"><i class="fa fa-ellipsis-h"></i></button>').appendTo(t.children()[1]).click(function(e){e.preventDefault(),RED.projects.editProject()})),k.container.show(),null!==e)if(Array.isArray(e))k.container.hide(),t=$('<tr class="node-info-node-row"><td>'+RED._("sidebar.info.selection")+"</td><td></td></tr>").appendTo(a),$(t.children()[1]).text(RED._("sidebar.info.nodes",{count:e.length}));else{var r=/^subflow(:(.+))?$/.exec(e.type);if(r){n=r[2]?RED.nodes.subflow(r[2]):e,o=0;var d="subflow:"+n.id;RED.nodes.eachNode(function(e){e.type===d&&o++})}if("tab"===e.type||"subflow"===e.type){if(t=$('<tr class="node-info-node-row"><td>'+RED._("sidebar.info."+("tab"===e.type?"flow":"subflow"))+"</td><td></td></tr>").appendTo(a),RED.utils.createObjectElement(e.id).appendTo(t.children()[1]),t=$('<tr class="node-info-node-row"><td>'+RED._("sidebar.info.tabName")+"</td><td></td></tr>").appendTo(a),$(t.children()[1]).text(e.label||e.name||""),"tab"===e.type)t=$('<tr class="node-info-node-row"><td>'+RED._("sidebar.info.status")+"</td><td></td></tr>").appendTo(a),$(t.children()[1]).text(e.disabled?RED._("sidebar.info.disabled"):RED._("sidebar.info.enabled"));else if("subflow"===e.type){t=$('<tr class="node-info-node-row"><td>'+RED._("subflow.category")+"</td><td></td></tr>").appendTo(a);var l=e.category||"subflows";$(t.children()[1]).text(RED._("palette.label."+l,{defaultValue:l}))}}else{var c;if(t=$('<tr class="node-info-node-row"><td>'+RED._("sidebar.info.node")+"</td><td></td></tr>").appendTo(a),RED.utils.createObjectElement(e.id).appendTo(t.children()[1]),"subflow"!==e.type&&"unknown"!==e.type&&e.name&&(t=$('<tr class="node-info-node-row"><td>'+RED._("common.label.name")+"</td><td></td></tr>").appendTo(a),$('<span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(e.name)+'"></span>').text(e.name).appendTo(t.children()[1])),r||(t=$('<tr class="node-info-node-row"><td>'+RED._("sidebar.info.type")+"</td><td></td></tr>").appendTo(a),$(t.children()[1]).text("unknown"===e.type?e._orig.type:e.type),"unknown"===e.type&&$('<span style="float: right; font-size: 0.8em"><i class="fa fa-warning"></i></span>').prependTo($(t.children()[1]))),!r&&"subflow"!=e.type&&"comment"!=e.type)if("unknown"===e.type?(c={},Object.keys(e._orig).forEach(function(e){"type"!==e&&(c[e]={})})):e._def&&(c=e._def.defaults),c){var p=0;for(var u in c)if("name"!=u&&c.hasOwnProperty(u)){var f=e[u];if(p++,t=$('<tr class="node-info-property-row'+(j.property?"":" hide")+'"><td>'+u+"</td><td></td></tr>").appendTo(a),c[u].type){var h=RED.nodes.node(f);if(h){var g=RED.utils.getNodeLabel(h,f),v=t.children()[1],m=$("<span>",{class:""}).appendTo(v),b=$("<div>",{class:"palette_node palette_node_small"}).appendTo(m),y=RED.utils.getNodeColor(h.type,h._def),w=RED.utils.getNodeIcon(h._def);b.css({backgroundColor:y,cursor:"pointer"});var D=$("<div/>",{class:"palette_icon_container"}).appendTo(b);$("<div/>",{class:"palette_icon",style:"background-image: url("+w+")"}).appendTo(D);$("<span></span>").css({verticalAlign:"top",marginLeft:"6px"}).text(g).appendTo(v);b.on("dblclick",function(){RED.editor.editConfig("",h.type,h.id)})}else RED.utils.createObjectElement(void 0).appendTo(t.children()[1])}else RED.utils.createObjectElement(f).appendTo(t.children()[1])}0<p&&$('<tr class="node-info-property-expand blank"><td colspan="2"><a href="#" class=" node-info-property-header'+(j.property?" expanded":"")+'"><span class="node-info-property-show-more">'+RED._("sidebar.info.showMore")+'</span><span class="node-info-property-show-less">'+RED._("sidebar.info.showLess")+'</span> <i class="fa fa-caret-down"></i></a></td></tr>').appendTo(a)}"tab"!==e.type&&r&&($('<tr class="blank"><th colspan="2">'+RED._("sidebar.info.subflow")+"</th></tr>").appendTo(a),$('<tr class="node-info-subflow-row"><td>'+RED._("common.label.name")+'</td><td><span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(n.name)+'">'+n.name+"</span></td></tr>").appendTo(a))}if(r){t=$('<tr class="node-info-node-row"><td>'+RED._("subflow.category")+"</td><td></td></tr>").appendTo(a);l=n.category||"subflows";$(t.children()[1]).text(RED._("palette.label."+l,{defaultValue:l})),$('<tr class="node-info-subflow-row"><td>'+RED._("sidebar.info.instances")+"</td><td>"+o+"</td></tr>").appendTo(a)}var E="";if(n||"comment"===e.type||"tab"===e.type)"tab"===e.type&&(k.title.text(RED._("sidebar.info.flowDesc")),E=marked(e.info||"")||'<span class="node-info-none">'+RED._("sidebar.info.none")+"</span>");else k.title.text(RED._("sidebar.info.nodeHelp")),E=$("script[data-help-name='"+e.type+"']").html()||'<span class="node-info-none">'+RED._("sidebar.info.none")+"</span>";if(n)E+=marked(n.info||"")||'<span class="node-info-none">'+RED._("sidebar.info.none")+"</span>",k.title.text(RED._("sidebar.info.subflowDesc"));else if(e._def&&e._def.info){k.title.text(RED._("sidebar.info.nodeHelp"));var R=e._def.info,x="function"==typeof R?R.call(e):R;E+=marked(x)}E&&C(E),$(".node-info-property-header").click(function(e){e.preventDefault(),j.property=!j.property,$(this).toggleClass("expanded",j.property),$(".node-info-property-row").toggle(j.property)})}}else S()}function C(e){var t,n=(t=$('<div class="node-help"><span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(e)+'">'+e+"</span></div>"),$(t).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")}),t).appendTo(k.content);n.find(".bidiAware").contents().filter(function(){return 3===this.nodeType&&""!==this.textContent.trim()}).wrap("<span></span>");n.find("H3").wrapInner('<a class="node-info-header expanded" href="#"></a>').find("a").prepend('<i class="fa fa-angle-right">').click(function(e){e.preventDefault();for(var t=$(this).hasClass("expanded"),n=$(this).parent().next();1===n.length&&"H3"!==n[0].nodeName;)n.toggle(!t),n=n.next();$(this).toggleClass("expanded",!t)})}var s=function(){var i,a,t=!0,s=15e3,r=-1;function e(){for(var e,t=Math.floor(Math.random()*r),n=RED._("infotips:info.tip"+t);e=/({{(.*?)}})/.exec(n);){var o=RED.keyboard.getShortcut(e[2]);if(!o)return;n=n.replace(e[1],RED.keyboard.formatKey(o.key))}for(;e=/(\[(.*?)\])/.exec(n);)n=n.replace(e[1],RED.keyboard.formatKey(e[2]));l.html(n).fadeIn(200),i&&(i=null,a=setInterval(d,s))}function d(){l.fadeOut(300,function(){e()})}function n(){if($(".sidebar-node-info").addClass("show-tips"),t&&!i&&!a){if(-1===r)for(;r++,RED._("infotips:info.tip"+r)!=="infotips:info.tip"+r;);i=setTimeout(e,1e3)}}function o(){$(".sidebar-node-info").removeClass("show-tips"),clearInterval(a),clearTimeout(i),i=a=null}return RED.actions.add("core:toggle-show-tips",function(e){void 0===e?RED.userSettings.toggle("view-show-tips"):(t=e)?n():o()}),{start:n,stop:o,next:function(){clearInterval(a),i=!0,e()},enabled:function(){return t}}}();function S(e){if(void 0===e&&(e=RED.view.selection()),e.nodes)if(1==e.nodes.length){var t=e.nodes[0];"subflow"===t.type&&t.direction?a(RED.nodes.subflow(t.z)):a(t)}else a(e.nodes);else{var n=RED.workspaces.active(),o=RED.nodes.workspace(n)||RED.nodes.subflow(n);if(o)a(o);else{var i=RED.nodes.workspace(RED.workspaces.active());i&&i.info?a(i):a(null)}}}return RED.events.on("view:selection-changed",S),{init:function(){(o=document.createElement("div")).className="sidebar-node-info",RED.actions.add("core:show-info-tab",i);var e=$("<div>",{class:"sidebar-node-info-stack"}).appendTo(o);T=RED.stack.create({container:e}).hide(),(_=T.add({title:RED._("sidebar.info.info"),collapsible:!0})).expand(),(k=T.add({title:RED._("sidebar.info.nodeHelp"),collapsible:!0})).expand(),k.content.css("padding","6px"),k.container.css("border-bottom","none");var t=$('<div class="node-info-tips"></div>').appendTo(o);l=$('<div class="node-info-tip"></div>').appendTo(t);var n=$('<div class="node-info-tips-buttons"></div>').appendTo(t);$('<a href="#" class="workspace-footer-button"><i class="fa fa-refresh"></a>').appendTo(n).click(function(e){e.preventDefault(),s.next()}),$('<a href="#" class="workspace-footer-button"><i class="fa fa-times"></a>').appendTo(n).click(function(e){e.preventDefault(),RED.actions.invoke("core:toggle-show-tips"),RED.notify(RED._("sidebar.info.showTips"))}),RED.sidebar.addTab({id:"info",label:RED._("sidebar.info.label"),name:RED._("sidebar.info.name"),iconClass:"fa fa-info",content:o,pinned:!0,enableOnEdit:!0}),s.enabled()?s.start():s.stop()},show:i,refresh:a,clear:function(){a(null)},set:function(e,t){k.title.text(t||""),a(null),$(k.content).empty(),C(e),$(".sidebar-node-info-stack").scrollTop(0)}}}(),RED.sidebar.config=function(){var e=document.createElement("div");e.className="sidebar-node-config",$('<div class="button-group sidebar-header"><a class="sidebar-header-button-toggle selected" id="workspace-config-node-filter-all" href="#"><span data-i18n="sidebar.config.filterAll"></span></a><a class="sidebar-header-button-toggle" id="workspace-config-node-filter-unused" href="#"><span data-i18n="sidebar.config.filterUnused"></span></a> </div>').appendTo(e);var t=$('<div><a class="sidebar-footer-button" id="workspace-config-node-collapse-all" href="#"><i class="fa fa-angle-double-up"></i></a> <a class="sidebar-footer-button" id="workspace-config-node-expand-all" href="#"><i class="fa fa-angle-double-down"></i></a></div>'),i=$("<div>").appendTo(e),a=$("<div>").appendTo(e),s=$("<div>").appendTo(e),r=!1,d={};function l(e,t,n){if(e=e.replace(/\./i,"-"),d[e])d[e].label!==n&&(d[e].list.parent().find(".config-node-label").text(n),d[e].label=n);else{var o=$('<div class="palette-category workspace-config-node-category" id="workspace-config-node-category-'+e+'"></div>').appendTo(t),i=$('<div class="workspace-config-node-tray-header palette-header"><i class="fa fa-angle-down expanded"></i></div>').appendTo(o);n?$('<span class="config-node-label"/>').text(n).appendTo(i):$('<span class="config-node-label" data-i18n="sidebar.config.'+e+'">').appendTo(i),$('<span class="config-node-filter-info"></span>').appendTo(i),category=$('<ul class="palette-content config-node-list"></ul>').appendTo(o),o.i18n();var a=i.find("i"),s={label:n,list:category,size:function(){return s.list.find("li:not(.config_node_none)").length},open:function(e){a.hasClass("expanded")||(a.addClass("expanded"),e?s.list.show():s.list.slideDown())},close:function(e){a.hasClass("expanded")&&(a.removeClass("expanded"),e?s.list.hide():s.list.slideUp())},isOpen:function(){return a.hasClass("expanded")}};i.on("click",function(e){s.isOpen()?s.close():s.open()}),d[e]=s}return d[e]}function c(e,t){var n=l(e.replace(/\./i,"-")),i=n.list;if(t.sort(function(e,t){return e.type<t.type?-1:e.type>t.type?1:0}),r){var o=t.length;0<(o-=(t=t.filter(function(e){return!1!==e._def.hasUsers&&0===e.users.length})).length)?i.parent().find(".config-node-filter-info").text(RED._("sidebar.config.filtered",{count:o})).show():i.parent().find(".config-node-filter-info").hide()}else i.parent().find(".config-node-filter-info").hide();if(i.empty(),0===t.length)$('<li class="config_node_none" data-i18n="sidebar.config.none">NONE</li>').i18n().appendTo(i),n.close(!0);else{var a="";t.forEach(function(t){var e=RED.utils.getNodeLabel(t,t.id);t.type!=a&&($('<li class="config_node_type">'+t.type+"</li>").appendTo(i),a=t.type);var n=$('<li class="palette_node config_node palette_node_id_'+t.id.replace(/\./g,"-")+'"></li>').appendTo(i);if($('<div class="palette_label"></div>').text(e).appendTo(n),!1!==t._def.hasUsers){$("<div/>",{class:"palette_icon_container palette_icon_container_right"}).text(t.users.length).appendTo(n);0===t.users.length&&n.addClass("config_node_unused")}n.on("click",function(e){RED.sidebar.info.refresh(t)}),n.on("dblclick",function(e){RED.editor.editConfig("",t.type,t.id)});var o=t.users.map(function(e){return e.id});n.on("mouseover",function(e){RED.nodes.eachNode(function(e){-1!=o.indexOf(e.id)&&(e.highlighted=!0,e.dirty=!0)}),RED.view.redraw()}),n.on("mouseout",function(e){RED.nodes.eachNode(function(e){e.highlighted&&(e.highlighted=!1,e.dirty=!0)}),RED.view.redraw()})}),n.open(!0)}}function n(){var t={global:!0};l("global",i),RED.nodes.eachWorkspace(function(e){t[e.id.replace(/\./g,"-")]=!0,l(e.id,a,e.label)}),RED.nodes.eachSubflow(function(e){t[e.id.replace(/\./g,"-")]=!0,l(e.id,s,e.name)}),$(".workspace-config-node-category").each(function(){var e=$(this).attr("id").substring("workspace-config-node-category-".length);t[e]||($(this).remove(),delete d[e])});var n=[],o={};for(var e in RED.nodes.eachConfig(function(e){e.z?(o[e.z.replace(/\./g,"-")]=o[e.z.replace(/\./g,"-")]||[],o[e.z.replace(/\./g,"-")].push(e)):e.z||n.push(e)}),t)t.hasOwnProperty(e)&&c(e,o[e]||[]);c("global",n)}return{init:function(){RED.sidebar.addTab({id:"config",label:RED._("sidebar.config.label"),name:RED._("sidebar.config.name"),content:e,toolbar:t,iconClass:"fa fa-cog",onchange:function(){n()}}),RED.actions.add("core:show-config-tab",function(){RED.sidebar.show("config")}),$("#workspace-config-node-collapse-all").on("click",function(e){for(var t in e.preventDefault(),d)d.hasOwnProperty(t)&&d[t].close()}),$("#workspace-config-node-expand-all").on("click",function(e){for(var t in e.preventDefault(),d)d.hasOwnProperty(t)&&0<d[t].size()&&d[t].open()}),$("#workspace-config-node-filter-all").on("click",function(e){e.preventDefault(),r&&($(this).addClass("selected"),$("#workspace-config-node-filter-unused").removeClass("selected"),r=!r,n())}),$("#workspace-config-node-filter-unused").on("click",function(e){e.preventDefault(),r||($(this).addClass("selected"),$("#workspace-config-node-filter-all").removeClass("selected"),r=!r,n())})},show:function(r){"boolean"==typeof r&&(r?$("#workspace-config-node-filter-unused").click():$("#workspace-config-node-filter-all").click()),n(),"string"==typeof r&&($("#workspace-config-node-filter-all").click(),r=r.replace(/\./g,"-"),setTimeout(function(){var e=$(".palette_node_id_"+r),t=e.position().top,n=e.height(),o=$(".sidebar-node-config"),i=o.height();i<t+n?o.animate({scrollTop:"-="+(i-(t+n)-30)},150):t<0&&o.animate({scrollTop:"+="+(t-10)},150);var a=21,s=function(){a%2==0?e.removeClass("node_highlighted"):e.addClass("node_highlighted"),0<=--a&&setTimeout(s,100)};s()},100)),RED.sidebar.show("config")},refresh:n}}(),RED.sidebar.context=function(){var i,a,s,r,d,l,c;function p(e,t){l=e,t?e?f(s,"context/node/"+e.id,e.id):f(s):($(s.table).empty(),e?$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.refresh"></td></tr>').appendTo(s.table).i18n():$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.none"></td></tr>').appendTo(s.table).i18n(),s.timestamp.html("&nbsp;"))}function u(e){(c=e)?f(r,"context/flow/"+e.id,e.id):f(r)}function f(e,t,n){var i,c,p,u,f,o=e.table;n?(i=e,c=t,p=n,u=RED.settings.context.stores,f=i.table,$.getJSON(c,function(e){$(f).empty();var r={};for(var t in e)if(e.hasOwnProperty(t))for(var n in e[t])e[t].hasOwnProperty(n)&&(r.hasOwnProperty(n)||(r[n]=[]),e[t][n].store=t,r[n].push(e[t][n]));var d=Object.keys(r);d.sort();for(var o=d.length,l=0;l<o;l++)r[d[l]].forEach(function(t){var o=d[l],i=(r[o].length,$('<tr class="node-info-node-row"><td class="sidebar-context-property"></td><td></td></tr>').appendTo(f)),e=$(i.children()[0]);e.text(o);var n=$('<span class="debug-message-tools button-group"></span>').appendTo(e),a=($('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(n).click(function(e){e.preventDefault(),e.stopPropagation(),$.getJSON(c+"/"+o+"?store="+t.store,function(e){$(i.children()[1]).empty();var t=e.msg,n=e.format;t=RED.utils.decodeObject(t,n),RED.utils.createObjectElement(t,{typeHint:e.format,sourceId:p+"."+o}).appendTo(i.children()[1])})}),t.msg),s=t.format;a=RED.utils.decodeObject(a,s),RED.utils.createObjectElement(a,{typeHint:t.format,sourceId:p+"."+o}).appendTo(i.children()[1]),1<u.length&&$("<span>",{class:"sidebar-context-property-storename"}).text(t.store).appendTo($(i.children()[0]))});0===o&&$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.empty"></td></tr>').appendTo(f).i18n(),$(i.timestamp).text((new Date).toLocaleString())})):($(o).empty(),$('<tr class="node-info-node-row red-ui-search-empty blank" colspan="2"><td data-i18n="sidebar.context.none"></td></tr>').appendTo(o).i18n())}function h(){RED.sidebar.show("context")}return{init:function(){(i=$("<div>").css({position:"relative",height:"100%"})).className="sidebar-context";var e=$("<div></div>"),t=$("<div>",{class:"sidebar-context-stack"}).appendTo(i);a=RED.stack.create({container:t}),(s=a.add({title:RED._("sidebar.context.node"),collapsible:!0})).expand(),s.content.css({height:"100%"}),s.timestamp=$('<div class="sidebar-context-updated">&nbsp;</div>').appendTo(s.content);var n=$('<table class="node-info"></table>').appendTo(s.content);s.table=$("<tbody>").appendTo(n);var o=$('<div style="float: right"></div>').appendTo(s.header);$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(o).click(function(e){e.stopPropagation(),e.preventDefault(),p(l,!0)}),(r=a.add({title:RED._("sidebar.context.flow"),collapsible:!0})).expand(),r.content.css({height:"100%"}),r.timestamp=$('<div class="sidebar-context-updated">&nbsp;</div>').appendTo(r.content),n=$('<table class="node-info"></table>').appendTo(r.content),r.table=$("<tbody>").appendTo(n),o=$('<div style="float: right"></div>').appendTo(r.header),$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(o).click(function(e){e.stopPropagation(),e.preventDefault(),u(c)}),(d=a.add({title:RED._("sidebar.context.global"),collapsible:!0})).expand(),d.content.css({height:"100%"}),d.timestamp=$('<div class="sidebar-context-updated">&nbsp;</div>').appendTo(d.content),n=$('<table class="node-info"></table>').appendTo(d.content),d.table=$("<tbody>").appendTo(n),o=$('<div style="float: right"></div>').appendTo(d.header),$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(o).click(function(e){e.stopPropagation(),e.preventDefault(),f(d,"context/global","global")}),RED.actions.add("core:show-context-tab",h),RED.sidebar.addTab({id:"context",label:RED._("sidebar.context.label"),name:RED._("sidebar.context.name"),iconClass:"fa fa-database",content:i,toolbar:e,enableOnEdit:!1}),RED.events.on("view:selection-changed",function(e){p(e.nodes&&1===e.nodes.length&&e.nodes[0])}),RED.events.on("workspace:change",function(e){u(RED.nodes.workspace(e.workspace))}),f(d,"context/global","global")}}}(),RED.palette.editor=function(){var c,p,u,m,f,a,h=[],g=[],w={},b={},y={},t={},v="";function s(e,t){var n=Date.now()-e;n=n<300?300:0,setTimeout(function(){t()},n)}function D(e,t,o,i){o.show();var a=Date.now();$.ajax({url:"nodes/"+e,type:"PUT",data:JSON.stringify({enabled:t}),contentType:"application/json; charset=utf-8"}).done(function(e,t,n){s(a,function(){o.hide(),i()})}).fail(function(e,t,n){s(a,function(){o.hide(),i(e)})})}function E(e,t,o){var n={module:e};t&&(n.version=t),$.ajax({url:"nodes",type:"POST",data:JSON.stringify(n),contentType:"application/json; charset=utf-8"}).done(function(e,t,n){o()}).fail(function(e,t,n){o(e)})}function R(e){t.hasOwnProperty(e)||(t[e]=setTimeout(function(){delete t[e],n(e)},100))}function x(e){var t=/^rgba?\(\s*(\d+),\s*(\d+),\s*(\d+)[,)]/.exec(e);if(t){var n=parseInt(t[1]),o=parseInt(t[2]),i=parseInt(t[3]);if(160<(299*n+587*o+114*i)/1e3)return"rgb("+(n=Math.floor(.8*n))+","+(o=Math.floor(.8*o))+","+(i=Math.floor(.8*i))+")"}return e}function n(e){if(y.hasOwnProperty(e)){var t=y[e].info,n=y[e].elements;if(n){var o=0,i=0,a=0;for(var s in n.errorList.empty(),y[e].totalUseCount=0,y[e].setUseCount={},t.sets)if(t.sets.hasOwnProperty(s)){var r=0,d=t.sets[s],l=n.sets[s];d.err&&(a++,$("<li>").text(d.err).appendTo(n.errorList)),d.enabled&&(o+=d.types.length),i+=d.types.length;for(var c=0;c<t.sets[s].types.length;c++){var p=t.sets[s].types[c];r+=b[p]||0;var u=l.swatches[p];if(d.enabled){var f=RED.nodes.getType(p);f&&f.color?(u.css({background:RED.utils.getNodeColor(p,f)}),u.css({border:"1px solid "+x(u.css("backgroundColor"))})):u.css({background:"#eee",border:"1px dashed #999"})}else u.css({background:"#eee",border:"1px dashed #999"})}y[e].setUseCount[s]=r,y[e].totalUseCount+=r,0<r?(l.enableButton.text(RED._("palette.editor.inuse")),l.enableButton.addClass("disabled")):(l.enableButton.removeClass("disabled"),d.enabled?l.enableButton.text(RED._("palette.editor.disable")):l.enableButton.text(RED._("palette.editor.enable"))),l.setRow.toggleClass("palette-module-set-disabled",!d.enabled)}0===a?n.errorRow.hide():n.errorRow.show();var h=o===i?i:o+" / "+i;n.setCount.text(RED._("palette.editor.nodeCount",{count:i,label:h})),0<y[e].totalUseCount?(n.enableButton.text(RED._("palette.editor.inuse")),n.enableButton.addClass("disabled"),n.removeButton.hide()):(n.enableButton.removeClass("disabled"),t.local&&n.removeButton.css("display","inline-block"),0===o?n.enableButton.text(RED._("palette.editor.enableall")):n.enableButton.text(RED._("palette.editor.disableall")),n.container.toggleClass("disabled",0===o))}t.pending_version?(n.versionSpan.html(t.version+' <i class="fa fa-long-arrow-right"></i> '+t.pending_version).appendTo(n.metaRow),n.updateButton.text(RED._("palette.editor.updated")).addClass("disabled").show()):w.hasOwnProperty(e)&&1===function(e,t){for(var n=e.split(".").map(function(e){return parseInt(e)}),o=t.split(".").map(function(e){return parseInt(e)}),i=0;i<3;i++){var a=n[i]-o[i];if(a<0)return-1;if(0<a)return 1}return 0}(w[e].version,t.version)?(n.updateButton.show(),n.updateButton.text(RED._("palette.editor.update",{version:w[e].version}))):n.updateButton.hide()}else{y[e]={info:RED.nodes.registry.getModule(e)};var g=[e];for(var v in y[e].info.sets)y[e].info.sets.hasOwnProperty(v)&&(g.push(v),g=g.concat(y[e].info.sets[v].types));y[e].index=g.join(",").toLowerCase(),m.editableList("addItem",y[e])}}var r,T,d=[],l=!1,_=C;function i(e,t,n,o){if(d.push(e||o),e?l=!0:(o.modules&&(o.modules.forEach(function(e){(w[e.id]=e).index=[e.id],e.keywords&&(e.index=e.index.concat(e.keywords)),e.updated_at?e.timestamp=new Date(e.updated_at).getTime():e.timestamp=0,e.index=e.index.join(",").toLowerCase()}),h=h.concat(o.modules)),u.searchBox("count",h.length)),1<a&&$(".palette-module-shade-status").html(RED._("palette.editor.loading")+"<br>"+d.length+"/"+a),d.length===a){l&&RED.notify(RED._("palette.editor.errors.catalogLoadFailed",{url:t}),"error",!1,8e3);var i=250-(Date.now()-r);setTimeout(function(){$("#palette-module-install-shade").hide()},Math.max(i,0))}}function k(){if(0===h.length){h=[],w={},f.editableList("empty"),$(".palette-module-shade-status").text(RED._("palette.editor.loading"));var e=RED.settings.theme("palette.catalogues")||["https://catalogue.nodered.org/catalogue.json"];l=!(d=[]),a=e.length,1<e.length&&$(".palette-module-shade-status").html(RED._("palette.editor.loading")+"<br>0/"+e.length),$("#palette-module-install-shade").show(),r=Date.now();var t=0;e.forEach(function(o,e){$.getJSON(o,{_:(new Date).getTime()},function(e){i(null,o,0,e),function(){for(var e in y)y.hasOwnProperty(e)&&n(e)}()}).fail(function(e,t,n){i(e,o)}).always(function(){++t===a&&u.searchBox("change")})})}}function j(){if(f.editableList("empty"),""!==u.searchBox("value").trim()){g.sort(_);for(var e=0;e<Math.min(10,g.length);e++)f.editableList("addItem",g[e]);0===g.length&&f.editableList("addItem",{}),10<g.length&&f.editableList("addItem",{start:10,more:g.length-10})}else f.editableList("addItem",{count:h.length})}function C(e,t){return e.info.id.localeCompare(t.info.id)}function S(e,t){return-1*(e.info.timestamp-t.info.timestamp)}function e(){return k(),c.activateTab("nodes"),T}function O(n,e,o){if(!1!==RED.settings.theme("palette.editable")){var t=[{text:RED._("common.label.cancel"),click:function(){i.close()}}];n.url&&t.push({text:RED._("palette.editor.confirm.button.review"),class:"primary palette-module-install-confirm-button-install",click:function(){var e=n.url||"";window.open(e)}}),t.push({text:RED._("palette.editor.confirm.button.install"),class:"primary palette-module-install-confirm-button-install",click:function(){var t=RED.utils.addSpinnerOverlay(e,!0);E(n.id,n.version,function(e){t.remove(),e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors.installFailed",{module:n.id,message:e.responseJSON.message})),o(e)}),i.close()}});var i=RED.notify(RED._("palette.editor.confirm.install.body",{module:n.id}),{modal:!0,fixed:!0,buttons:t})}else o(new Error("Palette not editable"))}return{init:function(){!1!==RED.settings.theme("palette.editable")&&(function(){T=$('<div id="user-settings-tab-palette"></div>');var t=$('<div id="palette-editor"><ul id="palette-editor-tabs"></ul></div>').appendTo(T);c=RED.tabs.create({element:T.find("#palette-editor-tabs"),onchange:function(e){t.find(".palette-editor-tab").hide(),e.content.show(),p&&p.searchBox("value",""),u&&u.searchBox("value",""),"install"===e.id?u&&u.focus():p&&p.focus()},minimumActiveTabWidth:110});var e=$("<div>",{class:"palette-editor-tab"}).appendTo(t);c.addTab({id:"nodes",label:RED._("palette.editor.tab-nodes"),content:e});var n=$("<div>",{class:"palette-search"}).appendTo(e);p=$('<input type="text" data-i18n="[placeholder]palette.filter"></input>').appendTo(n).searchBox({delay:200,change:function(){!function(e){v=e.toLowerCase();var t=m.editableList("filter"),n=m.editableList("length");""===e?p.searchBox("count"):p.searchBox("count",t+" / "+n)}($(this).val())}}),m=$("<ol>",{id:"palette-module-list",style:"position: absolute;top: 35px;bottom: 0;left: 0;right: 0px;"}).appendTo(e).editableList({addButton:!1,scrollOnAdd:!1,sort:function(e,t){return e.info.name.localeCompare(t.info.name)},filter:function(e){return""===v||""===v||-1<e.index.indexOf(v)},addItem:function(t,e,s){var r=s.info;if(r){var n=$("<div>",{class:"palette-module-header"}).appendTo(t),o=$('<div class="palette-module-meta palette-module-name"><i class="fa fa-cube"></i></div>').appendTo(n);$("<span>").text(r.name).appendTo(o);var i=$('<div class="palette-module-meta palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(n),a=$("<span>").text(r.version).appendTo(i),d=$('<div class="palette-module-meta palette-module-errors"><i class="fa fa-warning"></i></div>').hide().appendTo(n),l=$('<ul class="palette-module-error-list"></ul>').appendTo(d),c=$("<div>",{class:"palette-module-meta"}).appendTo(n),p=$('<a href="#" class="editor-button editor-button-small palette-module-set-button"><i class="fa fa-angle-right palette-module-node-chevron"></i> </a>').appendTo(c),u=$("<span>").appendTo(p),f=$("<div>",{class:"palette-module-button-group"}).appendTo(c),h=$('<a href="#" class="editor-button editor-button-small"></a>').text(RED._("palette.editor.update")).appendTo(f);h.attr("id","up_"+Math.floor(1e9*Math.random())),h.click(function(e){e.preventDefault(),$(this).hasClass("disabled")||function(n,e,o,i){if(!1===RED.settings.theme("palette.editable"))return i(new Error("Palette not editable"));var a=RED.notify(RED._("palette.editor.confirm.update.body",{module:n.name}),{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){a.close()}},{text:RED._("palette.editor.confirm.button.update"),class:"primary palette-module-install-confirm-button-update",click:function(){var t=RED.utils.addSpinnerOverlay(o,!0);E(n.name,e,function(e){t.remove(),e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors.updateFailed",{module:n.name,message:e.responseJSON.message})),i(e)}),a.close()}}]})}(r,w[r.name].version,t,function(e){})});var g=$('<a href="#" class="editor-button editor-button-small"></a>').text(RED._("palette.editor.remove")).appendTo(f);g.attr("id","up_"+Math.floor(1e9*Math.random())),g.click(function(e){e.preventDefault(),function(n,i,e){if(!1===RED.settings.theme("palette.editable"))return e(new Error("Palette not editable"));var a=RED.notify(RED._("palette.editor.confirm.remove.body",{module:n.name}),{modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){a.close()}},{text:RED._("palette.editor.confirm.button.remove"),class:"primary palette-module-install-confirm-button-remove",click:function(){var e,o,t=RED.utils.addSpinnerOverlay(i,!0);e=n.name,o=function(e){t.remove(),e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors.removeFailed",{module:n.name,message:e.responseJSON.message}))},$.ajax({url:"nodes/"+e,type:"DELETE"}).done(function(e,t,n){o()}).fail(function(e,t,n){o(e)}),a.close()}}]})}(r,t,function(e){})}),r.local||g.hide();var v=$('<a href="#" class="editor-button editor-button-small"></a>').text(RED._("palette.editor.disableall")).appendTo(f),m=$("<div>",{class:"palette-module-content"}).appendTo(t),b=$('<div class="palette-module-shade hide"><img src="red/images/spin.svg" class="palette-spinner"/></div>').appendTo(t);s.elements={updateButton:h,removeButton:g,enableButton:v,errorRow:d,errorList:l,setCount:u,container:t,shade:b,versionSpan:a,sets:{}},p.click(function(e){e.preventDefault(),t.hasClass("expanded")?(t.removeClass("expanded"),m.slideUp()):(t.addClass("expanded"),m.slideDown())});var y=Object.keys(r.sets);y.sort(function(e,t){return e.toLowerCase().localeCompare(t.toLowerCase())}),y.forEach(function(o){var i=r.sets[o],n=$("<div>",{class:"palette-module-set"}).appendTo(m),e=$("<div>",{class:"palette-module-set-button-group"}).appendTo(n),a={};i.types.forEach(function(e){var t=$("<div>",{class:"palette-module-type"}).appendTo(n);a[e]=$("<span>",{class:"palette-module-type-swatch"}).appendTo(t),$("<span>",{class:"palette-module-type-node"}).text(e).appendTo(t)});var t=$('<a href="#" class="editor-button editor-button-small"></a>').appendTo(e);t.click(function(e){if(e.preventDefault(),0===s.setUseCount[o]){var t=RED.nodes.registry.getNodeSet(i.id);b.show();var n=!t.enabled;D(i.id,n,b,function(e){e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors."+(n?"enable":"disable")+"Failed",{module:id,message:e.responseJSON.message}))})}}),s.elements.sets[i.name]={setRow:n,enableButton:t,swatches:a}}),v.click(function(e){e.preventDefault(),0===s.totalUseCount&&D(r.name,t.hasClass("disabled"),b,function(e){e&&e.responseJSON&&RED.notify(RED._("palette.editor.errors.installFailed",{module:id,message:e.responseJSON.message}))})}),R(r.name)}else $("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(t)}});var o=$("<div>",{class:"palette-editor-tab hide"}).appendTo(t);c.addTab({id:"install",label:RED._("palette.editor.tab-install"),content:o});var i=$("<div>",{class:"palette-editor-toolbar"}).appendTo(o),a=$("<div>",{class:"palette-search"}).appendTo(o);u=$('<input type="text" data-i18n="[placeholder]palette.search"></input>').appendTo(a).searchBox({delay:300,change:function(){var t=$(this).val().trim().toLowerCase();0<t.length?(g=h.filter(function(e){return-1<e.index.indexOf(t)}).map(function(e){return{info:e}}),j(),u.searchBox("count",g.length+" / "+h.length)):(u.searchBox("count",h.length),f.editableList("empty"),f.editableList("addItem",{count:h.length}))}}),$("<span>").text(RED._("palette.editor.sort")+" ").appendTo(i);var s=$('<span class="button-group"></span>').appendTo(i),r=$('<a href="#" class="sidebar-header-button-toggle selected" data-i18n="palette.editor.sortAZ"></a>').appendTo(s),d=$('<a href="#" class="sidebar-header-button-toggle" data-i18n="palette.editor.sortRecent"></a>').appendTo(s);r.click(function(e){e.preventDefault(),$(this).hasClass("selected")||($(this).addClass("selected"),d.removeClass("selected"),_=C,j())}),d.click(function(e){e.preventDefault(),$(this).hasClass("selected")||($(this).addClass("selected"),r.removeClass("selected"),_=S,j())});var l=$("<span>").appendTo(i);$('<a href="#" class="sidebar-header-button"><i class="fa fa-refresh"></i></a>').appendTo(l).click(function(e){e.preventDefault(),h=[],w={},k()}),f=$("<ol>",{style:"position: absolute;top: 78px;bottom: 0;left: 0;right: 0px;"}).appendTo(o).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(t,e,n){if(n.count)$("<div>",{class:"red-ui-search-empty"}).text(RED._("palette.editor.moduleCount",{count:n.count})).appendTo(t);else if(n.more){t.addClass("palette-module-more");var o=$("<div>",{class:"palette-module-header palette-module"}).appendTo(t),i=$('<a href="#"></a>').text(RED._("palette.editor.more",{count:n.more})).appendTo(o);i.click(function(e){e.preventDefault(),f.editableList("removeItem",n);for(var t=n.start;t<Math.min(n.start+10,n.start+n.more);t++)f.editableList("addItem",g[t]);10<n.more&&f.editableList("addItem",{start:n.start+10,more:n.more-10})})}else if(n.info){var a=n.info,s=$("<div>",{class:"palette-module-header"}).appendTo(t),r=$('<div class="palette-module-meta"><i class="fa fa-cube"></i></div>').appendTo(s);$("<span>",{class:"palette-module-name"}).text(a.name||a.id).appendTo(r),$('<a target="_blank" class="palette-module-link"><i class="fa fa-external-link"></i></a>').attr("href",a.url).appendTo(r);var d=$('<div class="palette-module-meta"></div>').appendTo(s);$("<div>",{class:"palette-module-description"}).text(a.description).appendTo(d);var l=$('<div class="palette-module-meta"></div>').appendTo(s);$('<span class="palette-module-version"><i class="fa fa-tag"></i> '+a.version+"</span>").appendTo(l),$('<span class="palette-module-updated"><i class="fa fa-calendar"></i> '+function(e){new Date,new Date(e);var t=(Date.now()-new Date(e).getTime())/1e3;if(t<60)return RED._("palette.editor.times.seconds");if((t=Math.floor(t/60))<10)return RED._("palette.editor.times.minutes");if(t<60)return RED._("palette.editor.times.minutesV",{count:t});if((t=Math.floor(t/60))<24)return RED._("palette.editor.times.hoursV",{count:t});if((t=Math.floor(t/24))<7)return RED._("palette.editor.times.daysV",{count:t});var n=Math.floor(t/7);if(n<4)return RED._("palette.editor.times.weeksV",{count:n});var o=Math.floor(n/4);if(n%=4,o<12)return RED._("palette.editor.times.monthsV",{count:o});var i=Math.floor(o/12);return 0==(o%=12)?RED._("palette.editor.times.yearsV",{count:i}):RED._("palette.editor.times.year"+(1<i?"s":"")+"MonthsV",{y:i,count:o})}(a.updated_at)+"</span>").appendTo(l);var c=$("<div>",{class:"palette-module-meta"}).appendTo(s),p=$("<div>",{class:"palette-module-button-group"}).appendTo(c),u=$('<a href="#" class="editor-button editor-button-small"></a>').text(RED._("palette.editor.install")).appendTo(p);u.click(function(e){e.preventDefault(),$(this).hasClass("disabled")||O(a,t,function(e){})}),y.hasOwnProperty(a.id)&&(u.addClass("disabled"),u.text(RED._("palette.editor.installed"))),n.elements={installButton:u}}else $("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(t)}}),$('<div id="palette-module-install-shade" class="palette-module-shade hide"><div class="palette-module-shade-status"></div><img src="red/images/spin.svg" class="palette-spinner"/></div>').appendTo(o)}(),RED.userSettings.add({id:"palette",title:RED._("palette.editor.palette"),get:e,close:function(){T.detach()},focus:function(){c.resize(),setTimeout(function(){p.focus()},200)}}),RED.actions.add("core:manage-palette",function(){RED.userSettings.show("palette")}),RED.events.on("registry:module-updated",function(e){R(e.module)}),RED.events.on("registry:node-set-enabled",function(e){R(e.module)}),RED.events.on("registry:node-set-disabled",function(e){R(e.module)}),RED.events.on("registry:node-type-added",function(e){/^subflow:/.test(e)||R(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-type-removed",function(e){/^subflow:/.test(e)||R(RED.nodes.registry.getNodeSetForType(e).module)}),RED.events.on("registry:node-set-added",function(e){R(e.module);for(var t=0;t<g.length;t++)if(g[t].info.id===e.module){var n=g[t].elements.installButton;n.addClass("disabled"),n.text(RED._("palette.editor.installed"));break}}),RED.events.on("registry:node-set-removed",function(e){if(!RED.nodes.registry.getModule(e.module)){var t=y[e.module];if(t){m.editableList("removeItem",t),delete y[e.module];for(var n=0;n<g.length;n++)if(g[n].info.id===e.module){var o=g[n].elements.installButton;o.removeClass("disabled"),o.text(RED._("palette.editor.install"));break}}}}),RED.events.on("nodes:add",function(e){/^subflow:/.test(e.type)||(b[e.type]=(b[e.type]||0)+1,1===b[e.type]&&R(RED.nodes.registry.getNodeSetForType(e.type).module))}),RED.events.on("nodes:remove",function(e){b.hasOwnProperty(e.type)&&(b[e.type]--,0===b[e.type]&&(delete b[e.type],R(RED.nodes.registry.getNodeSetForType(e.type).module)))}))},install:O}}(),RED.editor=function(){var r=[],n={};function T(e){var t,n,o,i=e.valid,a=e.changed;if(e.valid=!0,0===e.type.indexOf("subflow:"))n=(t=RED.nodes.subflow(e.type.substring(8))).valid,o=t.changed,void 0===n&&(n=T(t),o=t.changed),e.valid=n&&c(e,e._def.defaults,e),e.changed=e.changed||o;else if(e._def)e.valid=c(e,e._def.defaults,e),e._def._creds&&(e.valid=e.valid&&c(e,e._def.credentials,e._def._creds));else if("subflow"==e.type){for(var s=RED.nodes.filterNodes({z:e.id}),r=0;r<s.length;r++)n=s[r].valid,o=s[r].changed,void 0===n&&(n=T(s[r]),o=s[r].changed),e.valid=e.valid&&n,e.changed=e.changed||o;var d=RED.nodes.filterNodes({type:"subflow:"+e.id}),l={};for(r=0;r<d.length;r++)d[r].valid=e.valid,d[r].changed=d[r].changed||e.changed,d[r].dirty=!0,l[d[r].z]=!0;Object.keys(l).forEach(function(e){var t=RED.nodes.subflow(e);t&&T(t)})}return i===e.valid&&a===e.changed||(e.dirty=!0,(t=RED.nodes.subflow(e.z))&&T(t)),e.valid}function c(e,t,n){var o=!0;for(var i in t)t.hasOwnProperty(i)&&(s(e,t,i,n[i])||(o=!1));return o}function s(t,e,n,o){var i=!0;if(/^\$\([a-zA-Z_][a-zA-Z0-9_]*\)$/.test(o))return!0;if("required"in e[n]&&e[n].required&&(i=""!==o),i&&"validate"in e[n])try{i=e[n].validate.call(t,o)}catch(e){console.log("Validation error:",t.type,t.id,"property: "+n,"value:",o,e)}if(i&&e[n].type&&RED.nodes.getType(e[n].type)&&!("validate"in e[n]))if(o&&"_ADD_"!=o){var a=RED.nodes.node(o);i=null!==a&&(null==a.valid||a.valid)}else i=e[n].hasOwnProperty("required")&&!e[n].required;return i}function l(e,t){for(var n in e._def.defaults)e._def.defaults.hasOwnProperty(n)&&o(e,e._def.defaults,n,t);if(e._def.credentials)for(n in e._def.credentials)e._def.credentials.hasOwnProperty(n)&&o(e,e._def.credentials,n,t)}function o(e,t,n,o){var i=$("#"+o+"-"+n);if(0<i.length){var a=i.val();t[n].hasOwnProperty("format")&&""!==t[n].format&&"DIV"===i[0].nodeName&&(a=i.text()),s(e,t,n,a)?i.removeClass("input-error"):i.addClass("input-error")}}function _(t,n){t.resize=!0,t.dirty=!0;var o=[];if(t.ports)if(n&&RED.nodes.eachLink(function(e){e.source===t&&n.hasOwnProperty(e.sourcePort)&&("-1"===n[e.sourcePort]?o.push(e):e.sourcePort=n[e.sourcePort])}),t.outputs<t.ports.length){for(;t.outputs<t.ports.length;)t.ports.pop();RED.nodes.eachLink(function(e){e.source===t&&e.sourcePort>=t.outputs&&-1===o.indexOf(e)&&o.push(e)})}else if(t.outputs>t.ports.length)for(;t.outputs>t.ports.length;)t.ports.push(t.ports.length);0===t.inputs&&o.concat(RED.nodes.filterLinks({target:t}));for(var e=0;e<o.length;e++)RED.nodes.removeLink(o[e]);return o}function p(e,t,n,o){var i=$("#"+o+"-"+t);if(0!==i.length){var a,s=i.width(),r=i.attr("style");s=null!==(a=/width\s*:\s*(\d+(%|[a-z]+))/i.exec(r))?a[1]:"70%";var d=$("<div></div>").css({display:"inline-block",position:"relative"}),l=$("<div></div>").css({position:"absolute",left:0,right:"40px"}).appendTo(d),c=$('<select id="'+o+"-"+t+'"></select>').appendTo(l);d.width(s).height(i.height()),0===d.width()&&d.width("70%"),i.replaceWith(d),c.attr("style","width:100%"),R(t,n,e[t],o),$('<a id="'+o+"-lookup-"+t+'" class="editor-button"><i class="fa fa-pencil"></i></a>').css({position:"absolute",right:0,top:0}).appendTo(d),$("#"+o+"-lookup-"+t).click(function(e){m(t,n,c.find(":selected").val(),o),e.preventDefault()});var p="",u=RED.nodes.node(e[t]);RED.nodes.getType(n);u&&(p=RED.utils.getNodeLabel(u,u.id)),i.val(p)}}function u(e,t,n,o){var i=$("#"+o+"-"+t);i.val(e[t]),i.attr("type","hidden");var a=$("<a>",{id:o+"-edit-"+t,class:"editor-button"});i.after(a),e[t]?a.text(RED._("editor.configEdit")):a.text(RED._("editor.configAdd")),a.click(function(e){m(t,n,i.val()||"_ADD_",o),e.preventDefault()})}function f(e,t,n,o){var i=$("#"+n+"-"+t);if(0!==i.length)if("checkbox"===i.attr("type"))i.prop("checked",e[t]);else{var a=e[t];null==a&&(a=""),void 0!==o&&o[t].hasOwnProperty("format")&&""!==o[t].format&&"DIV"===i[0].nodeName?(i.html(RED.text.format.getHtml(a,o[t].format,{},!1,"en")),RED.text.format.attach(i[0],o[t].format,{},!1,"en")):(i.val(a),"INPUT"!==i[0].nodeName&&"TEXTAREA"!==i[0].nodeName||RED.text.bidi.prepareInput(i))}}function h(n,e,t,o){var i=$("#"+o+"-"+t);void 0!==e&&"format"in e[t]&&""!==e[t].format&&"DIV"===i[0].nodeName?$("#"+o+"-"+t).on("change keyup",function(e,t){t||l(n,o)}):$("#"+o+"-"+t).change(function(e,t){t||l(n,o)})}function g(e,t,n,o){var i;for(i in t)t.hasOwnProperty(i)&&("password"==t[i].type?n[i]?$("#"+o+"-"+i).val(n[i]):n["has_"+i]?$("#"+o+"-"+i).val("__PWRD__"):$("#"+o+"-"+i).val(""):f(n,i,o,t),h(e,t,i,o))}function k(e,t,n){var o=!1;for(var i in e.credentials||(e.credentials={_:{}}),t)if(t.hasOwnProperty(i)){var a=$("#"+n+"-"+i).val();if("password"==t[i].type){if(e.credentials["has_"+i]=""!==a,"__PWRD__"==a)continue;o=!0}(e.credentials[i]=a)!=e.credentials._[i]&&(o=!0)}return o}function b(t,n,o,i){for(var e in n.defaults)if(n.defaults.hasOwnProperty(e)){if(n.defaults[e].type){var a=RED.nodes.getType(n.defaults[e].type);a?a.exclusive?u(t,e,n.defaults[e].type,o):p(t,e,n.defaults[e].type,o):(console.log("Unknown type:",n.defaults[e].type),f(t,e,o,n.defaults))}else f(t,e,o,n.defaults);h(t,n.defaults,e,o)}var s,r,d=function(){if(n.oneditprepare)try{n.oneditprepare.call(t)}catch(e){console.log("oneditprepare",t.id,t.type,e.toString())}for(var e in n.defaults)n.defaults.hasOwnProperty(e)&&$("#"+o+"-"+e).trigger("change",[!0]);if(n.credentials)for(e in n.credentials)n.credentials.hasOwnProperty(e)&&$("#"+o+"-"+e).trigger("change",[!0]);l(t,o),i&&i()};n.credentials?t.credentials?(g(t,n.credentials,t.credentials,o),d()):$.getJSON((s=t.type,r=t.id,"credentials/"+s.replace(/\s+/g,"-")+"/"+r),function(e){t.credentials=e,t.credentials._=$.extend(!0,{},e),g(t,n.credentials,t.credentials,o),d()}):d()}function y(){for(var e,t=r.length-1;t<r.length;t++){var n=r[t];if(e=n.type,"_expression"===n.type)e=RED._("expressionEditor.title");else if("_js"===n.type)e=RED._("jsEditor.title");else if("_json"===n.type)e=RED._("jsonEditor.title");else if("_markdown"===n.type)e=RED._("markdownEditor.title");else if("_buffer"===n.type)e=RED._("bufferEditor.title");else if("subflow"===n.type)e=RED._("subflow.editSubflow",{name:n.name});else if(0===n.type.indexOf("subflow:")){var o=RED.nodes.subflow(n.type.substring(8));e=RED._("subflow.editSubflow",{name:o.name})}else{if(void 0!==n._def.paletteLabel)try{e=("function"==typeof n._def.paletteLabel?n._def.paletteLabel.call(n._def):n._def.paletteLabel)||""}catch(e){console.log("Definition error: "+n.type+".paletteLabel",e)}t===r.length-1&&(e=RED.nodes.node(n.id)?RED._("editor.editNode",{type:e}):RED._("editor.addNewConfig",{type:e}))}"<li>"+e+"</li>"}return"</ul>",e}function w(e,t,n,a){var o=$('<form id="'+t+'" class="form-horizontal" autocomplete="off"></form>').appendTo(e);return o.html($("script[data-template-name='"+n+"']").html()),a=a||"node-red",o.find("[data-i18n]").each(function(){for(var e=$(this).attr("data-i18n").split(";"),t=0;t<e.length;t++){var n=e[t];if(-1===n.indexOf(":")){var o="";if(0===n.indexOf("[")){var i=n.split("]");o=i[0]+"]",n=i[1]}e[t]=o+a+":"+n}}$(this).attr("data-i18n",e.join(";"))}),$('<input type="password" style="display: none;" />').prependTo(o),$('<input type="text" style="display: none;" />').prependTo(o),o.submit(function(e){e.preventDefault()}),o}function D(e,t,n,o){var i=$("<div>",{class:"node-label-form-row"});if(void 0===e)$("<span>").text(RED._("editor.noDefaultLabel")).appendTo(i),i.addClass("node-label-form-none");else{i.addClass("");var a="node-label-form-"+e+"-"+t;$("<label>",{for:a}).text(t+1+".").appendTo(i);var s=$("<input>",{type:"text",id:a,placeholder:o}).val(n).appendTo(i);$('<button class="editor-button editor-button-small"><i class="fa fa-times"></i></button>').appendTo(i).click(function(e){e.preventDefault(),s.val("")})}return i}function v(e,o){var t=$('<form class="dialog-form form-horizontal" autocomplete="off"></form>').appendTo(e),n=o.inputs||o._def.inputs||0,i=o.outputs||o._def.outputs||0;"subflow"===o.type&&(n=o.in.length,i=o.out.length);var a,s=o.inputLabels||[],r=o.outputLabels||[],d=o._def.inputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),l=o._def.outputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel");$('<div class="form-row"><span data-i18n="editor.labelInputs"></span><div id="node-label-form-inputs"></div></div>').appendTo(t);var c=$("#node-label-form-inputs");if(0<n)for(a=0;a<n;a++)D("input",a,s[a],d).appendTo(c);else D().appendTo(c);$('<div class="form-row"><span data-i18n="editor.labelOutputs"></span><div id="node-label-form-outputs"></div></div>').appendTo(t);var p=$("#node-label-form-outputs");if(0<i)for(a=0;a<i;a++)D("output",a,r[a],l).appendTo(p);else D().appendTo(p);if(!o._def.defaults||!o._def.defaults.hasOwnProperty("icon")){$("<hr>").appendTo(t);var u=$('<div class="form-row"></div>').appendTo(t);$('<label style="width: 50px" data-i18n="editor.settingIcon">').appendTo(u);var f=$('<button class="editor-button">').appendTo(u),h=$("<div>",{class:"red-ui-search-result-node"}).appendTo(f),g=RED.utils.getNodeColor(o.type,o._def),v=RED.utils.getNodeIcon(o._def,o);h.css("backgroundColor",g);var m=$("<div/>",{class:"palette_icon_container"}).appendTo(h),b=$("<div/>",{class:"palette_icon",style:"background-image: url("+v+")"}).appendTo(m);f.click(function(e){var t;e.preventDefault();var n=$("#node-settings-icon").text()||"";t=n?RED.utils.separateIconPath(n):RED.utils.getDefaultNodeIcon(o._def,o),function(e,r,d,l){var t=e.offset(),n=$("<div>").css({position:"absolute",top:0,bottom:0,left:0,right:0,zIndex:20}).appendTo("body"),o=t.top-30;o+280>$(window).height()&&(o=$(window).height()-280);var i=$('<div class="red-ui-icon-picker">').css({top:o+"px",left:t.left+"px"}).appendTo("body"),c=function(){n.remove(),i.remove(),RED.keyboard.remove("escape")};RED.keyboard.add("*","escape",function(){c()}),n.on("mousedown",c);var a=$("<div>",{class:"red-ui-search-container"}).appendTo(i);searchInput=$('<input type="text">').attr("placeholder",RED._("editor.searchIcons")).appendTo(a).searchBox({delay:50,change:function(){var n=$(this).val().trim();""===n?(p.find(".red-ui-icon-list-module").show(),p.find(".red-ui-icon-list-icon").show()):(p.find(".red-ui-icon-list-module").hide(),p.find(".red-ui-icon-list-icon").each(function(e,t){-1===$(t).data("icon").indexOf(n)?$(t).hide():$(t).show()}))}}),$("<div>").appendTo(i);var p=$('<div class="red-ui-icon-list">').appendTo(i),s=$('<div class="red-ui-icon-meta"></div>').appendTo(i),u=$("<span>").appendTo(s),f=($('<button class="editor-button editor-button-small">'+RED._("editor.useDefault")+"</button>").appendTo(s).click(function(e){e.preventDefault(),c(),l(null)}),RED.nodes.getIconSets());Object.keys(f).forEach(function(s){var e=f[s];if(0<e.length){var t=$('<div class="red-ui-icon-list-module"></div>').text(s).appendTo(p);$('<i class="fa fa-cube"></i>').prependTo(t),e.forEach(function(e){var t=$("<div>",{class:"red-ui-icon-list-icon"}).appendTo(p),n=$("<div>",{class:"red-ui-search-result-node"}).appendTo(t),o=RED.utils.getNodeColor(r.type,r._def),i="icons/"+s+"/"+e;t.data("icon",i),n.css("backgroundColor",o);var a=$("<div/>",{class:"palette_icon_container"}).appendTo(n);$("<div/>",{class:"palette_icon",style:"background-image: url("+i+")"}).appendTo(a),d.module===s&&d.file===e&&t.addClass("selected"),t.on("mouseover",function(){u.text(e)}),t.on("mouseout",function(){u.html("&nbsp;")}),t.click(function(){c(),l(s+"/"+e)})})}}),i.slideDown(100),searchInput.focus()}(u,o,t,function(e){$("#node-settings-icon").text(e||"");var t=RED.utils.getNodeIcon(o._def,{type:o.type,icon:e});b.css("backgroundImage","url("+t+")")})}),$('<div class="uneditable-input" id="node-settings-icon">').text(o.icon).appendTo(u)}}function j(e,t,n){var o=$("#node-label-form-inputs").children().find("input"),i=$("#node-label-form-outputs").children().find("input"),a=!1,s=!1,r=o.map(function(){var e=$(this).val();return a=a||""!==e,e}).toArray().slice(0,e.inputs);return(void 0===e.inputLabels&&a||void 0!==e.inputLabels&&JSON.stringify(r)!==JSON.stringify(e.inputLabels))&&(t.inputLabels=e.inputLabels,e.inputLabels=r,s=!0),a=!1,r=new Array(e.outputs),i.each(function(){var e=$(this).attr("id").substring(23);if(!n||!n.hasOwnProperty(e)||-1!==(e=parseInt(n[e]))){var t=$(this).val();a=a||""!==t,r[e]=t}}),(void 0===e.outputLabels&&a||void 0!==e.outputLabels&&JSON.stringify(r)!==JSON.stringify(e.outputLabels))&&(t.outputLabels=e.outputLabels,e.outputLabels=r,s=!0),s}function m(f,h,e,g){var n,v="_ADD_"==e,s=RED.nodes.getType(h),m=RED.nodes.node(e);n="node-red"===s.set.module?"node-red":s.set.id;var t="",o=RED.nodes.subflow(RED.workspaces.active());if(o&&(t=o.id),null==m){for(var i in m={id:RED.nodes.id(),_def:s,type:h,z:t,users:[]},s.defaults)s.defaults[i].value&&(m[i]=JSON.parse(JSON.stringify(s.defaults[i].value)));m._=s._}r.push(m),RED.view.state(RED.state.EDITING);var a={title:y(),resize:function(){if(m&&m._def.oneditresize){var e=$("#node-config-dialog-edit-form");try{m._def.oneditresize.call(m,{width:e.width(),height:e.height()})}catch(e){console.log("oneditresize",m.id,m.type,e.toString())}}},open:function(e,i){e.find(".editor-tray-header");var t=e.find(".editor-tray-footer");!1!==s.hasUsers&&t.prepend('<div id="node-config-dialog-user-count"><i class="fa fa-info-circle"></i> <span></span></div>'),t.append('<span id="node-config-dialog-scope-container"><span id="node-config-dialog-scope-warning" data-i18n="[title]editor.errors.scopeChange"><i class="fa fa-warning"></i></span><select id="node-config-dialog-scope"></select></span>');var a=w(e.find(".editor-tray-body"),"node-config-dialog-edit-form",h,n);b(m,s,"node-config-input",function(){m._def.exclusive?$("#node-config-dialog-scope").hide():$("#node-config-dialog-scope").show(),$("#node-config-dialog-scope-warning").hide();var n={};m.users.forEach(function(e){n[e.z]=!0});var t=Object.keys(n).length,o=$("#node-config-dialog-scope").empty();o.off("change"),o.append('<option value=""'+(m.z?"":" selected")+' data-i18n="sidebar.config.global"></option>'),o.append('<option disabled data-i18n="sidebar.config.flows"></option>'),RED.nodes.eachWorkspace(function(e){var t=e.label;n[e.id]&&(t="* "+t),o.append('<option value="'+e.id+'"'+(e.id==m.z?" selected":"")+">"+t+"</option>")}),o.append('<option disabled data-i18n="sidebar.config.subflows"></option>'),RED.nodes.eachSubflow(function(e){var t=e.name;n[e.id]&&(t="* "+t),o.append('<option value="'+e.id+'"'+(e.id==m.z?" selected":"")+">"+t+"</option>")}),0<t&&o.on("change",function(){var e=$(this).val();""===e?$("#node-config-dialog-scope-warning").hide():!n[e]||1<t?$("#node-config-dialog-scope-warning").show():$("#node-config-dialog-scope-warning").hide()}),o.i18n(),a.i18n(),!1!==s.hasUsers&&$("#node-config-dialog-user-count").find("span").text(RED._("editor.nodesUse",{count:m.users.length})).parent().show(),i()})},close:function(){RED.workspaces.refresh(),r.pop()},show:function(){m&&RED.sidebar.info.refresh(m)}};a.buttons=[{id:"node-config-dialog-cancel",text:RED._("common.label.cancel"),click:function(){var t=h,n=m.id,e=RED.nodes.getType(t);if(e.oneditcancel&&e.oneditcancel){var o=RED.nodes.node(n);if(o)try{e.oneditcancel.call(o,!1)}catch(e){console.log("oneditcancel",o.id,o.type,e.toString())}else try{e.oneditcancel.call({id:n},!0)}catch(e){console.log("oneditcancel",n,t,e.toString())}}RED.tray.close()}},{id:"node-config-dialog-ok",text:v?RED._("editor.configAdd"):RED._("editor.configUpdate"),class:"primary",click:function(){var e,t,n=f,o=(m.id,h),i=v,a=RED.nodes.getType(o),s=$("#node-config-dialog-scope").val();if(a.oneditsave)try{a.oneditsave.call(m)}catch(e){console.log("oneditsave",m.id,m.type,e.toString())}for(e in a.defaults){var r;if(a.defaults.hasOwnProperty(e))if(null!=(r="checkbox"===(t=$("#node-config-input-"+e)).attr("type")?t.prop("checked"):"format"in a.defaults[e]&&""!==a.defaults[e].format&&"DIV"===t[0].nodeName?t.text():t.val())&&r!==m[e]){if(m._def.defaults[e].type){"_ADD_"==r&&(r="");var d=RED.nodes.node(m[e]);if(d){var l=d.users;l.splice(l.indexOf(m),1)}(d=RED.nodes.node(r))&&d.users.push(m)}m[e]=r}}m.label=a.label,(m.z=s)&&(m.users=m.users.filter(function(e){var t=!0;for(var n in e._def.defaults)e._def.defaults.hasOwnProperty(n)&&e._def.defaults[n].type===m.type&&e[n]===m.id&&e.z!==s&&(t=!1,e[n]=null,e.dirty=!0,e.changed=!0,T(e));return t})),i&&RED.nodes.add(m),a.credentials&&k(m,a.credentials,"node-config-input"),T(m);var c={};c[m.id]=!0;for(var p=m.users.slice();0<p.length;){var u=p.pop();c[u.id]||(c[u.id]=!0,u.users&&(p=p.concat(u.users)),T(u))}RED.nodes.dirty(!0),RED.view.redraw(!0),i||RED.events.emit("editor:save",m),RED.tray.close(function(){R(n,o,m.id,g)})}}],v||a.buttons.unshift({class:"leftButton",text:RED._("editor.configDelete"),click:function(){var e=f,t=m.id,n=h,o=RED.nodes.getType(n);try{o.ondelete&&(console.log("Deprecated API warning: config node type ",n," has an ondelete function - should be oneditdelete"),o.ondelete.call(m)),o.oneditdelete&&o.oneditdelete.call(m)}catch(e){console.log("oneditdelete",m.id,m.type,e.toString())}for(var i={t:"delete",nodes:[m],changes:{},dirty:RED.nodes.dirty()},a=0;a<m.users.length;a++){var s=m.users[a];for(var r in i.changes[s.id]={changed:s.changed,valid:s.valid},s._def.defaults)s._def.defaults.hasOwnProperty(r)&&s[r]==t&&(i.changes[s.id][r]=t,s[r]="",s.changed=!0,s.dirty=!0);T(s)}RED.nodes.remove(t),RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(i),RED.tray.close(function(){R(e,n,"",g)})}}),RED.tray.show(a)}function E(e,t){return e.__label__<t.__label__?-1:e.__label__>t.__label__?1:0}function R(e,n,t,o){if(o){var i=$("#"+o+"-edit-"+e);if(i.length)t?i.text(RED._("editor.configEdit")):i.text(RED._("editor.configAdd")),$("#"+o+"-"+e).val(t);else{var a=$("#"+o+"-"+e),s=RED.nodes.getType(n);a.children().remove();var r=RED.nodes.workspace(RED.workspaces.active());r||(r=RED.nodes.subflow(RED.workspaces.active()));var d=[];RED.nodes.eachConfig(function(e){if(e.type==n&&(!e.z||e.z===r.id)){var t=RED.utils.getNodeLabel(e,e.id);e.__label__=t,d.push(e)}});var l=E;"function"==typeof s.sort&&(l=s.sort);try{d.sort(l)}catch(e){console.log("Definition error: "+s.type+".sort",e)}d.forEach(function(e){a.append('<option value="'+e.id+'"'+(t==e.id?" selected":"")+">"+RED.text.bidi.enforceTextDirectionWithUCC(e.__label__)+"</option>"),delete e.__label__}),a.append('<option value="_ADD_"'+(""===t?" selected":"")+">"+RED._("editor.addNewType",{type:n})+"</option>"),window.setTimeout(function(){a.change()},50)}}}function t(e,t){RED.editor.types.hasOwnProperty(e)?(0<r.length&&(t.parent=r[r.length-1].id),r.push({type:e}),t.title=t.title||y(),t.onclose=function(){r.pop()},RED.editor.types[e].show(t)):console.log("Unknown type editor:",e)}return{init:function(){for(var e in RED.tray.init(),RED.actions.add("core:confirm-edit-tray",function(){$("#node-dialog-ok").click(),$("#node-config-dialog-ok").click()}),RED.actions.add("core:cancel-edit-tray",function(){$("#node-dialog-cancel").click(),$("#node-config-dialog-cancel").click()}),RED.editor.types)RED.editor.types.hasOwnProperty(e)&&RED.editor.types[e].init()},types:{},edit:function(d){var E,R,x=d;r.push(d),RED.view.state(RED.state.EDITING);var l=d.type;"subflow:"==d.type.substring(0,8)&&(l="subflow");var e={title:y(),buttons:[{id:"node-dialog-delete",class:"leftButton",text:RED._("common.label.delete"),click:function(){var e=RED.nodes.dirty(),t=[],n=[],o=RED.nodes.remove(x.id);t.push(x);var i={t:"delete",nodes:t=t.concat(o.nodes),links:n=n.concat(o.links),changes:{},dirty:e};RED.nodes.dirty(!0),RED.view.redraw(!0),RED.history.push(i),RED.tray.close()}},{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){if(x._def){if(x._def.oneditcancel)try{x._def.oneditcancel.call(x)}catch(e){console.log("oneditcancel",x.id,x.type,e.toString())}for(var e in x._def.defaults)if(x._def.defaults.hasOwnProperty(e)){var t=x._def.defaults[e];if(t.type){var n=RED.nodes.getType(t.type);if(n&&n.exclusive){var o=$("#node-input-"+e).val()||"";""===o||x[e]||RED.nodes.remove(o)}}}}RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){var e,t,n,o={},i=!1,a=RED.nodes.dirty();if(x._def.oneditsave){var s={};for(e in x._def.defaults)x._def.defaults.hasOwnProperty(e)&&("string"==typeof x[e]||"number"==typeof x[e]?s[e]=x[e]:s[e]=$.extend(!0,{},{v:x[e]}).v);try{!0===x._def.oneditsave.call(x)&&(i=!0)}catch(e){console.log("oneditsave",x.id,x.type,e.toString())}for(e in x._def.defaults)x._def.defaults.hasOwnProperty(e)&&(null===s[e]||"string"==typeof s[e]||"number"==typeof s[e]?s[e]!==x[e]&&(o[e]=s[e],i=!0):JSON.stringify(s[e])!==JSON.stringify(x[e])&&(o[e]=s[e],i=!0))}if(x._def.defaults)for(e in x._def.defaults)if(x._def.defaults.hasOwnProperty(e)){var r=$("#node-input-"+e);if(null!=(n="checkbox"===r.attr("type")?r.prop("checked"):"format"in x._def.defaults[e]&&""!==x._def.defaults[e].format&&"DIV"===r[0].nodeName?r.text():r.val())){if("outputs"===e){if(""===n.trim())continue;if(isNaN(n)){t=JSON.parse(n);var d=0,l=!1;Object.keys(t).forEach(function(e){isNaN(e)?(d++,delete t[e]):(t[e]=t[e]+"","-1"!==t[e]?(d++,t[e]!==e?l=!0:delete t[e]):l=!0)}),n=d,l&&(i=!0)}else n=parseInt(n)}if(x[e]!=n){if(x._def.defaults[e].type){"_ADD_"==n&&(n="");var c=RED.nodes.node(x[e]);if(c){var p=c.users;p.splice(p.indexOf(x),1)}(c=RED.nodes.node(n))&&c.users.push(x)}o[e]=x[e],x[e]=n,i=!0}}}if(x._def.credentials){var u=x._def.credentials,f=k(x,u,"node-input");i=i||f}var h=_(x,t);if(j(x,o,t)&&(i=!0),!x._def.defaults||!x._def.defaults.hasOwnProperty("icon")){var g=$("#node-settings-icon").text()||"";if(E)if(g!==R)o.icon=x.icon,x.icon=g,i=!0;else{var v=RED.utils.getDefaultNodeIcon(x._def,x),m=v.module+"/"+v.file;R!==m&&(o.icon=x.icon,x.icon=m,i=!0)}else g!==x.icon&&(o.icon=x.icon,x.icon=g,i=!0)}if(i){var b=x.changed;x.changed=!0,RED.nodes.dirty(!0);var y=RED.nodes.subflow(RED.workspaces.active()),w=null;y&&(w=[],RED.nodes.eachNode(function(e){e.type=="subflow:"+RED.workspaces.active()&&(w.push({id:e.id,changed:e.changed}),e.changed=!0,e.dirty=!0,_(e))}));var D={t:"edit",node:x,changes:o,links:h,dirty:a,changed:b};t&&(D.outputMap=t),w&&(D.subflow={instances:w}),RED.history.push(D)}x.dirty=!0,T(x),RED.events.emit("editor:save",x),RED.tray.close()}}],resize:function(e){n[l]=e.width,$(".editor-tray-content").height(e.height-78);var t=$(".editor-tray-content form").height(e.height-78-40);if(x&&x._def.oneditresize)try{x._def.oneditresize.call(x,{width:t.width(),height:t.height()})}catch(e){console.log("oneditresize",x.id,x.type,e.toString())}},open:function(e,t){e.find(".editor-tray-footer");var n=e.find(".editor-tray-body");n.parent().css("overflow","hidden");var o=RED.stack.create({container:n,singleExpanded:!0}),i=o.add({title:RED._("editor.nodeProperties"),expanded:!0});i.content.addClass("editor-tray-content");var a,s=o.add({title:RED._("editor.portLabels"),onexpand:function(){!function(e,t){var n,o,i=t._def.inputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),a=t._def.outputLabels?RED._("editor.defaultLabel"):RED._("editor.noDefaultLabel"),s=$("#node-label-form-inputs"),r=$("#node-label-form-outputs"),d=t.inputs||t._def.inputs||0,l=s.children(),c=l.length;if(1===c&&$(l[0]).hasClass("node-label-form-none")&&c--,c<d)for(0===c&&$(l[0]).remove(),o=c;o<d;o++)D("input",o,"",i).appendTo(s);else if(d<c){for(o=d;o<c;o++)$(l[o]).remove();0===n&&D().appendTo(s)}var p=$("#node-input-outputs").val();if(void 0===p)n=t.outputs||t._def.outputs||0;else if(isNaN(p)){var u=JSON.parse(p),f=Object.keys(u);l=r.children(),1===(c=l.length)&&$(l[0]).hasClass("node-label-form-none")&&c--,n=0;var h=[];f.forEach(function(e){var t=$("#node-label-form-output-"+e).parent();0===t.length&&-1!==u[e]?(0===c&&($(l[0]).remove(),c=-1),t=D("output",e,"",a)):t.detach(),-1!==u[e]&&(n++,h.push({i:parseInt(u[e]),r:t}))}),h.sort(function(e,t){return e.i-t.i}),h.forEach(function(e,t){e.r.find("label").text(t+1+"."),e.r.appendTo(r)}),0===h.length&&D("output",o,"").appendTo(r)}else n=Math.max(0,parseInt(p));if(l=r.children(),1===(c=l.length)&&$(l[0]).hasClass("node-label-form-none")&&c--,c<n)for(0===c&&$(l[0]).remove(),o=c;o<n;o++)D("output",o,"").appendTo(r);else if(n<c){for(o=n;o<c;o++)$(l[o]).remove();0===n&&D().appendTo(r)}}(this.content,d)}});s.content.addClass("editor-tray-content"),x&&RED.sidebar.info.refresh(x),a="node-red"===d._def.set.module?"node-red":d._def.set.id;var r=RED.utils.getDefaultNodeIcon(d._def,d);R=r.module+"/"+r.file,E=!d.icon||d.icon===R,w(i.content,"dialog-form",l,a),v(s.content,d),b(d,d._def,"node-input",function(){n.i18n(),t()})},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),x&&RED.sidebar.info.refresh(x),RED.workspaces.refresh(),RED.view.redraw(!0),r.pop()},show:function(){x&&RED.sidebar.info.refresh(x)}};if(n.hasOwnProperty(l)&&(e.width=n[l]),"subflow"===l){var t=x.type.substring(8);e.buttons.unshift({class:"leftButton",text:RED._("subflow.edit"),click:function(){RED.workspaces.show(t),$("#node-dialog-ok").click()}})}RED.tray.show(e)},editConfig:m,editSubflow:function(d){var c,p=d;r.push(d),RED.view.state(RED.state.EDITING);var e={title:y(),buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",class:"primary",text:RED._("common.label.done"),click:function(){var e={},t=!1,n=RED.nodes.dirty(),o=$("#subflow-input-name").val();o!=p.name&&(e.name=p.name,p.name=o,t=!0);var i=c.getValue();i!=p.info&&(e.info=p.info,p.info=i,t=!0),j(p,e,null)&&(t=!0);var a=$("#node-settings-icon").text()||"";(void 0===p.icon&&"node-red/subflow.png"!==a||void 0!==p.icon&&p.icon!==a)&&(e.icon=p.icon,p.icon=a,t=!0);var s=$("#subflow-input-category").val().trim();if("_custom_"===s&&""===(s=$("#subflow-input-custom-category").val().trim())&&(s=p.category),"subflows"===s&&(s=""),s!=p.category&&(e.category=p.category,p.category=s,t=!0),RED.palette.refresh(),t){var r=p.changed;p.changed=!0,T(p);var d=[];RED.nodes.eachNode(function(e){e.type=="subflow:"+p.id&&(d.push({id:e.id,changed:e.changed}),e.changed=!0,e.dirty=!0,_(e),T(e))}),RED.nodes.dirty(!0);var l={t:"edit",node:p,changes:e,dirty:n,changed:r,subflow:{instances:d}};RED.history.push(l)}p.dirty=!0,RED.tray.close()}}],resize:function(e){$(".editor-tray-content").height(e.height-78),$(".editor-tray-content form").height(e.height-78-40);for(var t=$("#dialog-form>div:not(.node-text-editor-row)"),n=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),o=0;o<t.size();o++)n-=$(t[o]).outerHeight(!0);n-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",n+"px"),c.resize()},open:function(e){e.find(".editor-tray-footer");var t=e.find(".editor-tray-body");t.parent().css("overflow","hidden");var n=RED.stack.create({container:t,singleExpanded:!0}),o=n.add({title:RED._("editor.nodeProperties"),expanded:!0});o.content.addClass("editor-tray-content");var i=n.add({title:RED._("editor.portLabels")});i.content.addClass("editor-tray-content"),p&&RED.sidebar.info.refresh(p),w(o.content,"dialog-form","subflow-template"),c=RED.editor.createEditor({id:"subflow-input-info-editor",mode:"ace/mode/markdown",value:""}),$("#subflow-input-name").val(d.name),RED.text.bidi.prepareInput($("#subflow-input-name")),$("#subflow-input-category").empty();var a=RED.palette.getCategories();a.sort(function(e,t){return e.label.localeCompare(t.label)}),a.forEach(function(e){$("#subflow-input-category").append($("<option></option>").val(e.id).text(e.label))}),$("#subflow-input-category").append($("<option></option>").attr("disabled",!0).text("---")),$("#subflow-input-category").append($("<option></option>").val("_custom_").text(RED._("palette.addCategory"))),$("#subflow-input-category").change(function(){"_custom_"===$(this).val()?($("#subflow-input-category").width(120),$("#subflow-input-custom-category").show()):($("#subflow-input-category").width(250),$("#subflow-input-custom-category").hide())}),$("#subflow-input-category").val(d.category||"subflows"),c.getSession().setValue(d.info||"",-1);var s=0,r="subflow:"+p.id;RED.nodes.eachNode(function(e){e.type===r&&s++}),$("#subflow-dialog-user-count").text(RED._("subflow.subflowInstances",{count:s})).show(),v(i.content,d),t.i18n()},close:function(){RED.view.state()!=RED.state.IMPORT_DRAGGING&&RED.view.state(RED.state.DEFAULT),RED.sidebar.info.refresh(p),RED.workspaces.refresh(),c.destroy(),r.pop(),p=null},show:function(){}};RED.tray.show(e)},editJavaScript:function(e){t("_js",e)},editExpression:function(e){t("_expression",e)},editJSON:function(e){t("_json",e)},editMarkdown:function(e){t("_markdown",e)},editBuffer:function(e){t("_buffer",e)},buildEditForm:w,validateNode:T,updateNodeProperties:_,createEditor:function(e){var t=ace.edit(e.id||e.element);t.setTheme("ace/theme/tomorrow");var o=t.getSession();return o.on("changeAnnotation",function(){for(var e=o.getAnnotations()||[],t=e.length,n=e.length;t--;)/doctype first\. Expected/.test(e[t].text)?e.splice(t,1):/Unexpected End of file\. Expected/.test(e[t].text)&&e.splice(t,1);n>e.length&&o.setAnnotations(e)}),e.mode&&o.setMode(e.mode),e.foldStyle?o.setFoldStyle(e.foldStyle):o.setFoldStyle("markbeginend"),e.options?t.setOptions(e.options):t.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0}),e.readOnly&&(t.setOption("readOnly",e.readOnly),t.container.classList.add("ace_read-only")),e.hasOwnProperty("lineNumbers")&&t.renderer.setOption("showGutter",e.lineNumbers),t.$blockScrolling=1/0,e.value&&o.setValue(e.value,-1),e.globals&&setTimeout(function(){o.$worker&&o.$worker.send("setOptions",[{globals:e.globals,esversion:6,sub:!0,asi:!0,maxerr:1e3}])},100),t}}}(),RED.editor.types._buffer={init:function(){$('<script type="text/x-red" data-template-name="_buffer"><div id="node-input-buffer-panels"><div id="node-input-buffer-panel-str" class="red-ui-panel"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><span class="node-input-buffer-type"><i class="fa fa-exclamation-circle"></i> <span id="node-input-buffer-type-string" data-i18n="bufferEditor.modeString"></span><span id="node-input-buffer-type-array" data-i18n="bufferEditor.modeArray"></span></span></div><div class="form-row node-text-editor-row"><div class="node-text-editor" id="node-input-buffer-str"></div></div></div><div id="node-input-buffer-panel-bin" class="red-ui-panel"><div class="form-row node-text-editor-row" style="margin-top: 10px"><div class="node-text-editor" id="node-input-buffer-bin"></div></div></div></div><\/script>').appendTo(document.body)},show:function(e){var a=e.value,t=e.complete;RED.view.state(RED.state.EDITING);var r,s,d=[],n={title:e.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){t(JSON.stringify(r)),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").height();s&&s.resize(t)},open:function(e){e.find(".editor-tray-body");var t,n=RED.editor.buildEditForm(e.find(".editor-tray-body"),"dialog-form","_buffer","editor");(d=RED.editor.createEditor({id:"node-input-buffer-str",value:"",mode:"ace/mode/text"})).getSession().setValue(a||"",-1),bufferBinEditor=RED.editor.createEditor({id:"node-input-buffer-bin",value:"",mode:"ace/mode/text",readOnly:!0});var o=function(e){var t=!0,n="string"==typeof e,o=[],i=0,a=(r=n?function(e){var t=[],n=0,o=e.length;for(n=0;n<o;n++){var i=e.charCodeAt(n);i<128?t.push(i):(i<2048?t.push(192|i>>6):(i<55296||57344<=i?t.push(224|i>>12):(n++,i=65536+((1023&i)<<10|1023&e.charAt(n)),t.push(240|i>>18),t.push(128|i>>12&63)),t.push(128|i>>6&63)),t.push(128|63&i))}return t}(e):e).length;for(i=0;i<a;i++){var s=parseInt(r[i]);if(!n&&(isNaN(s)||s<0||255<s)){t=!1;break}0<i&&(i%8==0?i%16==0?o.push("\n"):o.push(" "):o.push(" ")),o.push((s<16?"0":"")+s.toString(16).toUpperCase())}return t&&($("#node-input-buffer-type-string").toggle(n),$("#node-input-buffer-type-array").toggle(!n),bufferBinEditor.setValue(o.join(""),1)),t},i=function(){var e=d.getValue(),t=!1;if(/^[\s]*\[[\s\S]*\][\s]*$/.test(e)){t=!0;try{var n=JSON.parse(e);t=o(n)}catch(e){t=!1}}t||o(e)};d.getSession().on("change",function(){clearTimeout(t),t=setTimeout(i,200)}),i(),n.i18n(),s=RED.panels.create({id:"node-input-buffer-panels",resize:function(e,t){var n=$("#node-input-buffer-panel-str");e-=$(n.children()[0]).outerHeight(!0);var o=$(n.children()[1]);e-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#node-input-buffer-str").css("height",e-5+"px"),d.resize();var i=$("#node-input-buffer-panel-bin");o=$(i.children()[0]),t-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#node-input-buffer-bin").css("height",t-5+"px"),bufferBinEditor.resize()}}),$(".node-input-buffer-type").click(function(e){e.preventDefault(),RED.sidebar.info.set(RED._("bufferEditor.modeDesc")),RED.sidebar.info.show()})},close:function(){e.onclose&&e.onclose(),d.destroy(),bufferBinEditor.destroy()},show:function(){}};RED.tray.show(n)}},RED.editor.types._expression=function(){var g={};return{init:function(){$('<script type="text/x-red" data-template-name="_expression"><div id="node-input-expression-panels"><div id="node-input-expression-panel-expr" class="red-ui-panel"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><span class="node-input-expression-legacy"><i class="fa fa-exclamation-circle"></i> <span data-i18n="expressionEditor.compatMode"></span></span><button id="node-input-expression-reformat" class="editor-button editor-button-small"><span data-i18n="expressionEditor.format"></span></button></div><div class="form-row node-text-editor-row"><div class="node-text-editor" id="node-input-expression"></div></div></div><div id="node-input-expression-panel-info" class="red-ui-panel"><div class="form-row"><ul id="node-input-expression-tabs"></ul><div id="node-input-expression-tab-help" class="node-input-expression-tab-content hide"><div><select id="node-input-expression-func"></select><button id="node-input-expression-func-insert" class="editor-button" data-i18n="expressionEditor.insert"></button></div><div id="node-input-expression-help"></div></div><div id="node-input-expression-tab-test" class="node-input-expression-tab-content hide"><div><span style="display: inline-block; width: calc(50% - 5px);"><span data-i18n="expressionEditor.data"></span><button style="float: right; margin-right: 5px;" id="node-input-example-reformat" class="editor-button editor-button-small"><span data-i18n="jsonEditor.format"></span></button></span><span style="display: inline-block; width: calc(50% - 5px);" data-i18n="expressionEditor.result"></span></div><div style="display: inline-block; width: calc(50% - 5px);" class="node-text-editor" id="node-input-expression-test-data"></div><div style="display: inline-block; width: calc(50% - 5px);" class="node-text-editor" id="node-input-expression-test-result"></div></div></div></div></div><\/script>').appendTo(document.body)},show:function(e){var u,d,f,a,s=e.parent||"_",r=e.value,t=e.complete;RED.view.state(RED.state.EDITING);var h={title:e.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){$("#node-input-expression-help").text(""),t(u.getValue()),RED.tray.close()}}],resize:function(e){var t=$("#dialog-form").height();a&&a.resize(t)},open:function(e){e.find(".editor-tray-body").addClass("node-input-expression-editor");var t=RED.editor.buildEditForm(e.find(".editor-tray-body"),"dialog-form","_expression","editor"),l=$("#node-input-expression-func");Object.keys(jsonata.functions).forEach(function(e){l.append($("<option></option>").val(e).text(e))}),l.change(function(e){var t=$(this).val(),n="<h5>"+t+"("+RED._("jsonata:"+t+".args",{defaultValue:""})+")</h5>",o=marked(RED._("jsonata:"+t+".desc",{defaultValue:""}));$("#node-input-expression-help").html(n+"<p>"+o+"</p>")}),u=RED.editor.createEditor({id:"node-input-expression",value:"",mode:"ace/mode/jsonata",options:{enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0}});var c=null,p=-1;u.getSession().setValue(r||"",-1),u.on("changeSelection",function(){var e=u.getCursorPosition(),t=u.getSession().getTokenAt(e.row,e.column);if(t!==c||t&&/paren/.test(t.type)&&e.column!==p){var n,o,i=null;if((c=t)&&"keyword"===t.type)n=e.row,i=t;else{var a=0,s=!1;for(t?("paren.rparen"===t.type&&(p=e.column,a=e.column-(t.start+t.value.length)),n=e.row,o=t.index):(n=e.row-1,o=-1);null===i&&-1<n;){var r=u.getSession().getTokens(n);for(-1===o&&(o=r.length-1);-1<o;){var d=r[o].type;if(s){if("keyword"===d){i=r[o];break}s=!1}"paren.lparen"===d?a-=r[o].value.length:"paren.rparen"===d&&(a+=r[o].value.length),a<0&&(s=!0,a=0),o--}i||n--}}u.session.removeMarker(null),i&&l.val(i.value).change()}}),t.i18n(),$("#node-input-expression-func-insert").click(function(e){e.preventDefault();u.getCursorPosition();var t=l.val(),n=jsonata.getFunctionSnippet(t);u.insertSnippet(n),u.focus()}),$("#node-input-expression-reformat").click(function(e){e.preventDefault();var t=u.getValue()||"";try{t=jsonata.format(t)}catch(e){}u.getSession().setValue(t||"",-1)});var n,o=RED.tabs.create({element:$("#node-input-expression-tabs"),onchange:function(e){$(".node-input-expression-tab-content").hide(),e.content.show(),h.resize()}});o.addTab({id:"expression-help",label:RED._("expressionEditor.functionReference"),content:$("#node-input-expression-tab-help")}),o.addTab({id:"expression-tests",label:RED._("expressionEditor.test"),content:$("#node-input-expression-tab-test")}),d=RED.editor.createEditor({id:"node-input-expression-test-data",value:g[s]||'{\n "payload": "hello world"\n}',mode:"ace/mode/json",lineNumbers:!1}),$(".node-input-expression-legacy").click(function(e){e.preventDefault(),RED.sidebar.info.set(RED._("expressionEditor.compatModeDesc")),RED.sidebar.info.show()});var i=function(){var e,t,n=d.getValue(),o=u.getValue(),i=!1,a=/(^|[^a-zA-Z0-9_'"])msg([^a-zA-Z0-9_'"]|$)/.test(o);$(".node-input-expression-legacy").toggle(a);try{(t=jsonata(o)).assign("flowContext",function(e){return i=!0,null}),t.assign("globalContext",function(e){return i=!0,null})}catch(e){return void f.setValue(RED._("expressionEditor.errors.invalid-expr",{message:e.message}),-1)}try{e=JSON.parse(n)}catch(e){return void f.setValue(RED._("expressionEditor.errors.invalid-msg",{message:e.toString()}))}try{var s,r=t.evaluate(a?{msg:e}:e);if(i)return void f.setValue(RED._("expressionEditor.errors.context-unsupported"),-1);s=void 0!==r?JSON.stringify(r,null,4):RED._("expressionEditor.noMatch"),f.setValue(s,-1)}catch(e){f.setValue(RED._("expressionEditor.errors.eval",{message:e.message}),-1)}};d.getSession().on("change",function(){clearTimeout(n),n=setTimeout(i,200),g[s]=d.getValue()}),u.getSession().on("change",function(){clearTimeout(n),n=setTimeout(i,200)}),f=RED.editor.createEditor({id:"node-input-expression-test-result",value:"",mode:"ace/mode/json",lineNumbers:!1,readOnly:!0}),a=RED.panels.create({id:"node-input-expression-panels",resize:function(e,t){var n=$("#node-input-expression-panel-expr");e-=$(n.children()[0]).outerHeight(!0);var o=$(n.children()[1]);e-=parseInt(o.css("marginTop"))+parseInt(o.css("marginBottom")),$("#node-input-expression").css("height",e-5+"px"),u.resize(),t-=$("#node-input-expression-panel-info > .form-row > div:first-child").outerHeight(!0)+20,$(".node-input-expression-tab-content").height(t),$("#node-input-expression-test-data").css("height",t-5+"px"),d.resize(),$("#node-input-expression-test-result").css("height",t-5+"px"),f.resize()}}),$("#node-input-example-reformat").click(function(e){e.preventDefault();var t=d.getValue()||"";try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){}d.getSession().setValue(t||"",-1)}),i()},close:function(){e.onclose&&e.onclose(),u.destroy(),d.destroy()},show:function(){}};RED.tray.show(h)}}}(),RED.editor.types._js={init:function(){$('<script type="text/x-red" data-template-name="_js"><div class="form-row node-text-editor-row" style="width: 700px"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-js"></div></div><\/script>').appendTo(document.body)},show:function(n){var i,o=n.value,e=n.complete;RED.view.state(RED.state.EDITING);var t={title:n.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){e(i.getValue(),i.getCursorPosition()),RED.tray.close()}}],resize:function(e){for(var t=$("#dialog-form>div:not(.node-text-editor-row)"),n=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),o=0;o<t.size();o++)n-=$(t[o]).outerHeight(!0);n-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",n+"px"),i.resize()},open:function(e){e.find(".editor-tray-body");var t=RED.editor.buildEditForm(e.find(".editor-tray-body"),"dialog-form","_js","editor");i=RED.editor.createEditor({id:"node-input-js",mode:"ace/mode/javascript",value:o,globals:{msg:!0,context:!0,RED:!0,util:!0,flow:!0,global:!0,console:!0,Buffer:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0}}),n.cursor&&i.gotoLine(n.cursor.row+1,n.cursor.column,!1),t.i18n()},close:function(){i.destroy(),n.onclose&&n.onclose()},show:function(){}};RED.tray.show(t)}},RED.editor.types._json={init:function(){$('<script type="text/x-red" data-template-name="_json"><div class="form-row" style="margin-bottom: 3px; text-align: right;"><button id="node-input-json-reformat" class="editor-button editor-button-small"><span data-i18n="jsonEditor.format"></span></button></div><div class="form-row node-text-editor-row"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-json"></div></div><\/script>').appendTo(document.body)},show:function(n){var i,o,a=n.value,e=n.complete;RED.view.state(RED.state.EDITING);var s=function(){var e=i.getValue();try{return JSON.parse(e),$("#node-dialog-ok").removeClass("disabled"),!0}catch(e){return $("#node-dialog-ok").addClass("disabled"),!1}},t={title:n.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){n.requireValid&&!s()||(e(i.getValue()),RED.tray.close())}}],resize:function(e){for(var t=$("#dialog-form>div:not(.node-text-editor-row)"),n=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),o=0;o<t.size();o++)n-=$(t[o]).outerHeight(!0);n-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",n+"px"),i.resize()},open:function(e){e.find(".editor-tray-body");var t=RED.editor.buildEditForm(e.find(".editor-tray-body"),"dialog-form","_json","editor");(i=RED.editor.createEditor({id:"node-input-json",value:"",mode:"ace/mode/json"})).getSession().setValue(a||"",-1),n.requireValid&&(i.getSession().on("change",function(){clearTimeout(o),o=setTimeout(s,200)}),s()),$("#node-input-json-reformat").click(function(e){e.preventDefault();var t=i.getValue()||"";try{t=JSON.stringify(JSON.parse(t),null,4)}catch(e){}i.getSession().setValue(t||"",-1)}),t.i18n()},close:function(){i.destroy(),n.onclose&&n.onclose()},show:function(){}};RED.tray.show(t)}},RED.editor.types._markdown={init:function(){$('<script type="text/x-red" data-template-name="_markdown"><div class="form-row" id="node-input-markdown-title" style="margin-bottom: 3px; text-align: right;"></div><div class="form-row node-text-editor-row"><div style="height: 200px;min-height: 150px;" class="node-text-editor" id="node-input-markdown"></div></div><\/script>').appendTo(document.body)},show:function(n){var i,o=n.value,e=n.complete;RED.view.state(RED.state.EDITING);var t={title:n.title,width:"inherit",buttons:[{id:"node-dialog-cancel",text:RED._("common.label.cancel"),click:function(){RED.tray.close()}},{id:"node-dialog-ok",text:RED._("common.label.done"),class:"primary",click:function(){e(i.getValue()),RED.tray.close()}}],resize:function(e){for(var t=$("#dialog-form>div:not(.node-text-editor-row)"),n=($("#dialog-form>div.node-text-editor-row"),$("#dialog-form").height()),o=0;o<t.size();o++)n-=$(t[o]).outerHeight(!0);n-=parseInt($("#dialog-form").css("marginTop"))+parseInt($("#dialog-form").css("marginBottom")),$(".node-text-editor").css("height",n+"px"),i.resize()},open:function(e){e.find(".editor-tray-body");var t=RED.editor.buildEditForm(e.find(".editor-tray-body"),"dialog-form","_markdown","editor");i=RED.editor.createEditor({id:"node-input-markdown",value:o,mode:"ace/mode/markdown"}),n.header&&n.header.appendTo(e.find("#node-input-markdown-title")),t.i18n()},close:function(){i.destroy(),n.onclose&&n.onclose()},show:function(){}};RED.tray.show(t)}},RED.tray=function(){var v=[],m=$("#editor-stack"),b=!1;function n(e){var n=$('<div class="editor-tray"></div>'),t=$('<div class="editor-tray-header"></div>').appendTo(n),o=$('<div class="editor-tray-body-wrapper"></div>').appendTo(n),i=$('<div class="editor-tray-body"></div>').appendTo(o),a=$('<div class="editor-tray-footer"></div>').appendTo(n),s=$('<div class="editor-tray-resize-handle"></div>').appendTo(n);if(e.title){var r=v.map(function(e){return e.options.title});r.push(e.title);var d='<ul class="editor-tray-breadcrumbs"><li>'+r.join("</li><li>")+"</li></ul>";$('<div class="editor-tray-titlebar">'+d+"</div>").appendTo(t)}e.width===1/0&&(e.maximized=!0,s.addClass("editor-tray-resize-maximised"));var l,c=$('<div class="editor-tray-toolbar"></div>').appendTo(t);if(e.buttons)for(var p=0;p<e.buttons.length;p++){var u=e.buttons[p],f=$("<button>").button().appendTo(c);u.id&&f.attr("id",u.id),u.text&&f.text(u.text),u.click&&f.click(function(t){return function(e){$(this).hasClass("disabled")||t(e)}}(u.click)),u.class&&(f.addClass(u.class),"primary"===u.class&&(l=u))}n.appendTo(m);var h={tray:n,header:t,body:i,footer:a,options:e,primaryButton:l};function g(){$("#header-shade").show(),$("#editor-shade").show(),$("#palette-shade").show(),$(".sidebar-shade").show(),h.preferredWidth=Math.max(n.width(),500),e.maximized||i.css({minWidth:h.preferredWidth-40}),e.width?(e.width>$("#editor-stack").position().left-8&&(e.width=$("#editor-stack").position().left-8),n.width(e.width)):n.width(h.preferredWidth),h.width=n.width(),h.width>$("#editor-stack").position().left-8&&(h.width=Math.max(0,$("#editor-stack").position().left-8),n.width(h.width)),n.css({right:-(n.width()+10)+"px",transition:"right 0.25s ease"}),$("#workspace").scrollLeft(0),y(),b=!0,setTimeout(function(){setTimeout(function(){e.width||n.width(Math.min(h.preferredWidth,$("#editor-stack").position().left-8)),e.resize&&e.resize({width:n.width()}),e.show&&e.show(),setTimeout(function(){b=!1},200),i.find(":focusable:first").focus()},150),n.css({right:0})},0)}v.push(h),e.maximized||n.draggable({handle:s,axis:"x",start:function(e,t){n.width("auto")},drag:function(e,t){var n=m.position().left+t.position.left;n<7?t.position.left+=7-n:t.position.left>-h.preferredWidth-1&&(t.position.left=-Math.min(m.position().left-7,h.preferredWidth-1)),h.options.resize&&setTimeout(function(){h.options.resize({width:-t.position.left})},0),h.width=-t.position.left},stop:function(e,t){n.width(-t.position.left),n.css({left:""}),h.options.resize&&h.options.resize({width:-t.position.left}),h.width=-t.position.left}}),e.open?1===e.open.length?(e.open(n),g()):e.open(n,g):g()}function y(){if(0<v.length){var e=v[v.length-1],t=e.tray.height()-e.header.outerHeight()-e.footer.outerHeight();e.body.height(t),e.options.maximized||e.width>$("#editor-stack").position().left-8?(e.width=$("#editor-stack").position().left-8,e.tray.width(e.width)):e.width<e.preferredWidth&&(e.width=Math.min($("#editor-stack").position().left-8,e.preferredWidth),e.tray.width(e.width)),e.options.resize&&e.options.resize({width:e.width,height:t})}}return{init:function(){$(window).resize(y),RED.events.on("sidebar:resize",y),$("#editor-shade").click(function(){if(!b){var e=v[v.length-1];e&&e.primaryButton&&e.primaryButton.click()}})},show:function(e){if(0<v.length&&!e.overlay){var t=v[v.length-1];"inherit"===e.width&&(e.width=t.tray.width()),t.tray.css({right:-(t.tray.width()+10)+"px"}),setTimeout(function(){t.tray.detach(),n(e)},250)}else RED.events.emit("editor:open"),n(e)},close:function(t){if(0<v.length){var n=v.pop();n.tray.css({right:-(n.tray.width()+10)+"px"}),setTimeout(function(){if(n.options.close&&n.options.close(),n.tray.remove(),0<v.length){var e=v[v.length-1];e.options.overlay?(y(),e.options.show&&e.options.show()):(e.tray.appendTo("#editor-stack"),setTimeout(function(){y(),e.tray.css({right:0}),e.options.show&&e.options.show()},0))}t&&t(),0===v.length&&($("#header-shade").hide(),$("#editor-shade").hide(),$("#palette-shade").hide(),$(".sidebar-shade").hide(),RED.events.emit("editor:close"),RED.view.focus())},250)}}}}(),RED.clipboard=function(){var e,t,n,o,i=!1;function a(){var t=$("#clipboard-import"),n=t.val();n=n.substring(n.indexOf("["),n.lastIndexOf("]")+1);try{JSON.parse(n),t.removeClass("input-error"),t.val(n),$("#clipboard-dialog-ok").button("enable")}catch(e){""!==n&&t.addClass("input-error"),$("#clipboard-dialog-ok").button("disable")}}function s(){i||(t.empty(),t.append($(o)),t.i18n(),$("#clipboard-dialog-ok").show(),$("#clipboard-dialog-cancel").show(),$("#clipboard-dialog-close").hide(),$("#clipboard-dialog-copy").hide(),$("#clipboard-dialog-ok").button("disable"),$("#clipboard-import").keyup(a),$("#clipboard-import").on("paste",function(){setTimeout(a,10)}),$("#import-tab > a").click(function(e){e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected")||($(this).parent().children().removeClass("selected"),$(this).addClass("selected"))}),e.dialog("option","title",RED._("clipboard.importNodes")).dialog("open"))}function r(){if(!i){t.empty(),t.append($(n)),t.i18n();var r=RED.settings.flowFilePretty?"export-format-full":"export-format-mini";$("#export-format-group > a").click(function(e){if(e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected"))$("#clipboard-export").focus();else{$(this).parent().children().removeClass("selected"),$(this).addClass("selected");var t=$("#clipboard-export").val();if(0<t.length){var n=JSON.parse(t);t="export-format-full"===(r=$(this).attr("id"))?JSON.stringify(n,null,4):JSON.stringify(n),$("#clipboard-export").val(t),$("#clipboard-export").focus()}}}),$("#export-range-group > a").click(function(e){if(e.preventDefault(),$(this).hasClass("disabled")||$(this).hasClass("selected"))$("#clipboard-export").focus();else{$(this).parent().children().removeClass("selected"),$(this).addClass("selected");var t=$(this).attr("id"),n="",o=null;if("export-range-selected"===t){var i=RED.view.selection();o=RED.nodes.createExportableNodeSet(i.nodes.filter(function(e){return"subflow"!==e.type}))}else if("export-range-flow"===t){var a=RED.workspaces.active();o=RED.nodes.filterNodes({z:a});var s=RED.nodes.workspace(a)||RED.nodes.subflow(a);o.unshift(s),o=RED.nodes.createExportableNodeSet(o)}else"export-range-full"===t&&(o=RED.nodes.createCompleteNodeSet(!1));null!==o&&(n="export-format-full"===r?JSON.stringify(o,null,4):JSON.stringify(o)),0<n.length?$("#export-copy").removeClass("disabled"):$("#export-copy").addClass("disabled"),$("#clipboard-export").val(n),$("#clipboard-export").focus()}}),$("#clipboard-dialog-ok").hide(),$("#clipboard-dialog-cancel").hide(),$("#clipboard-dialog-copy").hide(),$("#clipboard-dialog-close").hide(),RED.view.selection().nodes?$("#export-range-selected").click():($("#export-range-selected").addClass("disabled").removeClass("selected"),$("#export-range-flow").click()),"export-format-full"===r?$("#export-format-full").click():$("#export-format-mini").click(),$("#clipboard-export").focus(function(){var e=$(this);e.select(),e.mouseup(function(){return e.unbind("mouseup"),!1})}),e.dialog("option","title",RED._("clipboard.exportNodes")).dialog("open"),$("#clipboard-export").focus(),document.queryCommandSupported("copy")?($("#clipboard-dialog-cancel").show(),$("#clipboard-dialog-copy").show()):($("#clipboard-dialog-cancel").hide(),$("#clipboard-dialog-close").show())}}function d(){$("#dropTarget").hide(),RED.keyboard.remove("escape")}return{init:function(){e=$('<div id="clipboard-dialog" class="hide node-red-dialog"><form class="dialog-form form-horizontal"></form></div>').appendTo("body").dialog({modal:!0,autoOpen:!1,width:500,resizable:!1,buttons:[{id:"clipboard-dialog-cancel",text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{id:"clipboard-dialog-close",class:"primary",text:RED._("common.label.close"),click:function(){$(this).dialog("close")}},{id:"clipboard-dialog-copy",class:"primary",text:RED._("clipboard.export.copy"),click:function(){$("#clipboard-export").select(),document.execCommand("copy"),document.getSelection().removeAllRanges(),RED.notify(RED._("clipboard.nodesExported")),$(this).dialog("close")}},{id:"clipboard-dialog-ok",class:"primary",text:RED._("common.label.import"),click:function(){RED.view.importNodes($("#clipboard-import").val(),"import-tab-new"===$("#import-tab > a.selected").attr("id")),$(this).dialog("close")}}],open:function(e){$(this).parent().find(".ui-dialog-titlebar-close").hide()},close:function(e){}}),t=e.children(".dialog-form"),n='<div class="form-row"><label style="width:auto;margin-right: 10px;" data-i18n="clipboard.export.copy"></label><span id="export-range-group" class="button-group"><a id="export-range-selected" class="editor-button toggle" href="#" data-i18n="clipboard.export.selected"></a><a id="export-range-flow" class="editor-button toggle" href="#" data-i18n="clipboard.export.current"></a><a id="export-range-full" class="editor-button toggle" href="#" data-i18n="clipboard.export.all"></a></span></div><div class="form-row"><textarea readonly style="resize: none; width: 100%; border-radius: 4px;font-family: monospace; font-size: 12px; background:#f3f3f3; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-export" rows="5"></textarea></div><div class="form-row" style="text-align: right;"><span id="export-format-group" class="button-group"><a id="export-format-mini" class="editor-button editor-button-small toggle" href="#" data-i18n="clipboard.export.compact"></a><a id="export-format-full" class="editor-button editor-button-small toggle" href="#" data-i18n="clipboard.export.formatted"></a></span></div>',o='<div class="form-row"><textarea style="resize: none; width: 100%; border-radius: 0px;font-family: monospace; font-size: 12px; background:#eee; padding-left: 0.5em; box-sizing:border-box;" id="clipboard-import" rows="5" placeholder="'+RED._("clipboard.pasteNodes")+'"></textarea></div><div class="form-row"><label style="width:auto;margin-right: 10px;" data-i18n="clipboard.import.import"></label><span id="import-tab" class="button-group"><a id="import-tab-current" class="editor-button toggle selected" href="#" data-i18n="clipboard.export.current"></a><a id="import-tab-new" class="editor-button toggle" href="#" data-i18n="clipboard.import.newFlow"></a></span></div>',$('<input type="text" id="clipboard-hidden">').appendTo("body"),RED.actions.add("core:show-export-dialog",r),RED.actions.add("core:show-import-dialog",s),RED.events.on("editor:open",function(){i=!0}),RED.events.on("editor:close",function(){i=!1}),RED.events.on("search:open",function(){i=!0}),RED.events.on("search:close",function(){i=!1}),RED.events.on("type-search:open",function(){i=!0}),RED.events.on("type-search:close",function(){i=!1}),$("#chart").on("dragenter",function(e){-1==$.inArray("text/plain",e.originalEvent.dataTransfer.types)&&-1==$.inArray("Files",e.originalEvent.dataTransfer.types)||($("#dropTarget").css({display:"table"}),RED.keyboard.add("*","escape",d))}),$("#dropTarget").on("dragover",function(e){-1==$.inArray("text/plain",e.originalEvent.dataTransfer.types)&&-1==$.inArray("Files",e.originalEvent.dataTransfer.types)||e.preventDefault()}).on("dragleave",function(e){d()}).on("drop",function(e){if(-1!=$.inArray("text/plain",e.originalEvent.dataTransfer.types)){var t=e.originalEvent.dataTransfer.getData("text/plain");t=t.substring(t.indexOf("["),t.lastIndexOf("]")+1),RED.view.importNodes(t)}else if(-1!=$.inArray("Files",e.originalEvent.dataTransfer.types)){var n=e.originalEvent.dataTransfer.files;if(1===n.length){var o=n[0],i=new FileReader;i.onload=function(e){RED.view.importNodes(e.target.result)},i.readAsText(o)}}d(),e.preventDefault()})},import:s,export:r,copyText:function(e,t,n){var o=!1;"string"!=typeof e&&(e=JSON.stringify(e,function(e,t){if(null!==t&&"object"==typeof t&&t.__enc__){if(t.hasOwnProperty("data")&&t.hasOwnProperty("length"))return o=t.data.length!==t.length,t.data;if("function"===t.type||"internal"===t.type)return;if("number"===t.type)return null}return t})),o&&(n+="_truncated"),$("#clipboard-hidden").val(e).select();var i=document.execCommand("copy");if(i&&t){var a=RED.popover.create({target:t,direction:"left",size:"small",content:RED._(n)});setTimeout(function(){a.close()},1e3),a.open()}return i}}}(),RED.library=function(){var t,p="node-input-";function e(){$.getJSON("library/flows",function(e){var t,r=function(e,t){var n,o,i,a=document.createElement("ul");if(""===t&&(a.id="menu-item-import-library-submenu"),a.className="dropdown-menu",e.d)for(n in e.d)if(e.d.hasOwnProperty(n)){(o=document.createElement("li")).className="dropdown-submenu pull-left",(i=document.createElement("a")).href="#";var s=n.replace(/^@.*\//,"").replace(/^node-red-contrib-/,"").replace(/^node-red-node-/,"").replace(/-/," ").replace(/_/," ");i.innerHTML=s,o.appendChild(i),o.appendChild(r(e.d[n],t+(""!==t?"/":"")+n)),a.appendChild(o)}if(e.f)for(n in e.f)e.f.hasOwnProperty(n)&&(o=document.createElement("li"),(i=document.createElement("a")).href="#",i.innerHTML=e.f[n],i.flowName=t+(""!==t?"/":"")+e.f[n],i.onclick=function(){$.get("library/flows/"+this.flowName,function(e){RED.view.importNodes(e)})},o.appendChild(i),a.appendChild(o));return a};e.d&&e.d._examples_&&(t=e.d._examples_,delete e.d._examples_);var n=r(e,"");$("#menu-item-import-examples").remove(),t&&(RED.menu.addItem("menu-item-import",{id:"menu-item-import-examples",label:RED._("menu.label.examples"),options:[]}),$("#menu-item-import-examples-submenu").replaceWith(r(t,"_examples_"))),$("#menu-item-import-library-submenu").replaceWith(n)})}function n(){var e=RED.nodes.createExportableNodeSet(RED.view.selection().nodes);$("#node-input-library-filename").attr("nodes",JSON.stringify(e)),t.dialog("open")}return{init:function(){$('<div id="node-dialog-library-save" class="hide"><form class="form-horizontal"><div class="form-row"><label for="node-dialog-library-save-folder" data-i18n="[append]library.folder"><i class="fa fa-folder-open"></i> </label><input type="text" id="node-dialog-library-save-folder" data-i18n="[placeholder]library.folderPlaceholder"></div><div class="form-row"><label for="node-dialog-library-save-filename" data-i18n="[append]library.filename"><i class="fa fa-file"></i> </label><input type="text" id="node-dialog-library-save-filename" data-i18n="[placeholder]library.filenamePlaceholder"></div></form></div>').appendTo(document.body),$('<div id="node-dialog-library-save-confirm" class="hide"><form class="form-horizontal"><div style="text-align: center; padding-top: 30px;" id="node-dialog-library-save-content"></div></form></div>').appendTo(document.body),$('<div id="node-dialog-library-lookup" class="hide"><form class="form-horizontal"><div class="form-row"><ul id="node-dialog-library-breadcrumbs" class="breadcrumb"><li class="active"><a href="#" data-i18n="[append]library.breadcrumb"></a></li></ul></div><div class="form-row"><div style="vertical-align: top; display: inline-block; height: 100%; width: 30%; padding-right: 20px;"><div id="node-select-library" style="border: 1px solid #999; width: 100%; height: 100%; overflow:scroll;"><ul></ul></div></div><div style="vertical-align: top; display: inline-block;width: 65%; height: 100%;"><div style="height: 100%; width: 95%;" class="node-text-editor" id="node-select-library-text" ></div></div></div></form></div>').appendTo(document.body),RED.actions.add("core:library-export",n),RED.events.on("view:selection-changed",function(e){e.nodes?RED.menu.setDisabled("menu-item-export-library",!1):RED.menu.setDisabled("menu-item-export-library",!0)}),!1!==RED.settings.theme("menu.menu-item-import-library")&&e(),(t=$('<div id="library-dialog" class="hide"><form class="dialog-form form-horizontal"></form></div>').appendTo("body").dialog({modal:!0,autoOpen:!1,width:500,resizable:!1,title:RED._("library.exportToLibrary"),buttons:[{id:"library-dialog-cancel",text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{id:"library-dialog-ok",class:"primary",text:RED._("common.label.export"),click:function(){var e=$("#node-input-library-filename").val();/^\s*$/.test(e)||$.ajax({url:"library/flows/"+e,type:"POST",data:$("#node-input-library-filename").attr("nodes"),contentType:"application/json; charset=utf-8"}).done(function(){RED.library.loadFlowLibrary(),RED.notify(RED._("library.savedNodes"),"success")}).fail(function(e,t,n){401===e.status?RED.notify(RED._("library.saveFailed",{message:RED._("user.notAuthorized")}),"error"):RED.notify(RED._("library.saveFailed",{message:e.responseText}),"error")}),$(this).dialog("close")}}],open:function(e){$(this).parent().find(".ui-dialog-titlebar-close").hide()},close:function(e){}})).children(".dialog-form").append($('<div class="form-row"><label for="node-input-library-filename" data-i18n="[append]editor:library.filename"><i class="fa fa-file"></i> </label><input type="text" id="node-input-library-filename" data-i18n="[placeholder]editor:library.fullFilenamePlaceholder"><input type="text" style="display: none;" /></div>'))},create:function(d){var s=null,r=null;function l(e){var t=document.createElement("li");return t.onmouseover=function(e){$(this).addClass("list-hover")},t.onmouseout=function(e){$(this).removeClass("list-hover")},t}function c(i,e){for(var t,n=document.createElement("ul"),o=0;o<e.length;o++){var a=e[o];"string"==typeof a?((t=l()).onclick=function(){var o=a;return function(e){var t=$('<li class="active"><span class="divider">/</span> <a href="#">'+o+"</a></li>");$("a",t).click(function(e){$(this).parent().nextAll().remove(),$.getJSON("library/"+d.url+i+o,function(e){$("#node-select-library").children().first().replaceWith(c(i+o+"/",e))}),e.stopPropagation()});var n=$("#node-dialog-library-breadcrumbs");$(".active",n).removeClass("active"),n.append(t),$.getJSON("library/"+d.url+i+o,function(e){$("#node-select-library").children().first().replaceWith(c(i+o+"/",e))})}}(),t.innerHTML='<i class="fa fa-folder"></i> '+a+"</i>"):((t=l()).innerHTML=a.name,t.onclick=function(){var t=a;return function(e){$(".list-selected",n).removeClass("list-selected"),$(this).addClass("list-selected"),$.get("library/"+d.url+i+t.fn,function(e){s=t,r.setValue(e,-1)})}}()),n.appendChild(t)}return n}function e(e){var t=$("#"+p+"name").val().replace(/(^\s*)|(\s*$)/g,"");""===t&&(t=RED._("library.unnamedType",{type:d.type}));var n=$("#node-dialog-library-save-filename").val().replace(/(^\s*)|(\s*$)/g,""),o=$("#node-dialog-library-save-folder").val().replace(/(^\s*)|(\s*$)/g,"");if(""!==n&&/.+\.js$/.test(n)){for(var i=o+(""===o?"":"/")+n,a={},s=0;s<d.fields.length;s++){var r=d.fields[s];"name"==r?a.name=t:a[r]=$("#"+p+r).val()}a.text=d.editor.getValue(),$.ajax({url:"library/"+d.url+"/"+i,type:"POST",data:JSON.stringify(a),contentType:"application/json; charset=utf-8"}).done(function(e,t,n){RED.notify(RED._("library.savedType",{type:d.type}),"success")}).fail(function(e,t,n){401===e.status?RED.notify(RED._("library.saveFailed",{message:RED._("user.notAuthorized")}),"error"):RED.notify(RED._("library.saveFailed",{message:e.responseText}),"error")})}else RED.notify(RED._("library.invalidFilename"),"warning")}p=d.elementPrefix||"node-input-",d.editor.setText&&(d.editor.setValue=function(e,t){d.editor.setText.call(d.editor,e)}),d.editor.getText&&(d.editor.getValue=d.editor.getText),$("#"+p+"name").css("width","calc(100% - 52px)").after('<div class="btn-group" style="margin-left:5px;"><a id="node-input-'+d.type+'-lookup" class="editor-button" data-toggle="dropdown"><i class="fa fa-book"></i> <i class="fa fa-caret-down"></i></a><ul class="dropdown-menu pull-right" role="menu"><li><a id="node-input-'+d.type+'-menu-open-library" tabindex="-1" href="#">'+RED._("library.openLibrary")+'</a></li><li><a id="node-input-'+d.type+'-menu-save-library" tabindex="-1" href="#">'+RED._("library.saveToLibrary")+"</a></li></ul></div>"),$("#node-input-"+d.type+"-menu-open-library").click(function(e){$("#node-select-library").children().remove(),$("#node-dialog-library-breadcrumbs").children().first().nextAll().remove(),r.setValue("",-1),$.getJSON("library/"+d.url,function(t){$("#node-select-library").append(c("/",t)),$("#node-dialog-library-breadcrumbs a").click(function(e){$(this).parent().nextAll().remove(),$("#node-select-library").children().first().replaceWith(c("/",t)),e.stopPropagation()}),$("#node-dialog-library-lookup").dialog("open")}),e.preventDefault()}),$("#node-input-"+d.type+"-menu-save-library").click(function(e){var t=$("#"+p+"name").val().replace(/(^\s*)|(\s*$)/g,"");$("#node-dialog-library-save-folder").attr("value","");var n=t.replace(/[^\w-]/g,"-");""===n&&(n="unnamed-"+d.type),$("#node-dialog-library-save-filename").attr("value",n+".js"),$("#node-dialog-library-save").dialog("open"),e.preventDefault()}),(r=ace.edit("node-select-library-text")).setTheme("ace/theme/tomorrow"),d.mode&&r.getSession().setMode(d.mode),r.setOptions({readOnly:!0,highlightActiveLine:!1,highlightGutterLine:!1}),r.renderer.$cursorLayer.element.style.opacity=0,r.$blockScrolling=1/0,$("#node-dialog-library-lookup").dialog({title:RED._("library.typeLibrary",{type:d.type}),modal:!0,autoOpen:!1,width:800,height:450,buttons:[{text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{text:RED._("common.label.load"),class:"primary",click:function(){if(s){for(var e=0;e<d.fields.length;e++){var t=d.fields[e];$("#"+p+t).val(s[t])}d.editor.setValue(r.getValue(),-1)}$(this).dialog("close")}}],open:function(e){var t=$("form",this);t.height(t.parent().height()-30),$("#node-select-library-text").height("100%"),$(".form-row:last-child",t).children().height(t.height()-60)},resize:function(e){var t=$("form",this);t.height(t.parent().height()-30),$(".form-row:last-child",t).children().height(t.height()-60)}}),$("#node-dialog-library-save-confirm").dialog({title:RED._("library.saveToLibrary"),modal:!0,autoOpen:!1,width:530,height:230,buttons:[{text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{text:RED._("common.label.save"),class:"primary",click:function(){e(),$(this).dialog("close")}}]}),$("#node-dialog-library-save").dialog({title:RED._("library.saveToLibrary"),modal:!0,autoOpen:!1,width:530,height:230,buttons:[{text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{text:RED._("common.label.save"),class:"primary",click:function(){e(),$(this).dialog("close")}}]})},loadFlowLibrary:e,export:n}}(),RED.notifications=function(){var m,b={},y=[],w=0;function e(e,t,n,o){var i={};if(null!==t&&"object"==typeof t&&(n=(i=t).fixed,o=i.timeout,t=i.type),i.modal&&$("#full-shade").show(),4<y.length)for(var a=y.length,s=0;4<a&&s<y.length;s+=1){var r=y[s];r.fixed||(window.clearTimeout(r.timeoutid),r.close(),a-=1)}var d,l,c,p,u,f=document.createElement("div");if(f.id="red-notification-"+w,f.className="notification",f.fixed=n,t&&(f.className="notification notification-"+t),i.width){var h=$("#notifications").width();if(i.width>h){var g=-(i.width-h)/2;$(f).css({width:i.width+"px",marginLeft:g+"px"})}}if(f.style.display="none","string"==typeof e?(/<p>/i.test(e)||(e="<p>"+e+"</p>"),f.innerHTML=e):$(f).append(e),i.buttons){var v=$('<div style="margin-top: 20px;" class="ui-dialog-buttonset"></div>').appendTo(f);i.buttons.forEach(function(e){var t=$("<button>").html(e.text).click(e.click).appendTo(v);e.id&&t.attr("id",e.id),e.class&&t.addClass(e.class)})}return $("#notifications").append(f),$(f).slideDown(300),f.close=(d=f,function(){d.closed||(d.closed=!0,y.splice(y.indexOf(d),1),i.id&&(delete b[i.id],0===Object.keys(b).length&&m.hide()),$(d).slideUp(300,function(){d.parentNode.removeChild(d)}),i.modal&&$("#full-shade").hide())}),f.hideNotification=(l=f,function(){l.closed||(l.hidden=!0,$(l).slideUp(300))}),f.showNotification=(c=f,function(){!c.closed&&c.hidden&&(c.hidden=!1,$(c).slideDown(300))}),f.update=(p=f,function(e,t){var n;if("string"==typeof e?(/<p>/i.test(e)||(e="<p>"+e+"</p>"),p.innerHTML=e):$(p).empty().append(e),"number"==typeof t)n=t;else if(void 0!==t&&(n=t.timeout,t.buttons)){var o=$('<div style="margin-top: 20px;" class="ui-dialog-buttonset"></div>').appendTo(p);t.buttons.forEach(function(e){var t=$("<button>").text(e.text).click(e.click).appendTo(o);e.id&&t.attr("id",e.id),e.class&&t.addClass(e.class)})}void 0!==n&&0<n?(window.clearTimeout(p.timeoutid),p.timeoutid=window.setTimeout(p.close,n)):window.clearTimeout(p.timeoutid),p.hidden&&p.showNotification()}),n||($(f).click((u=f,function(){u.close(),window.clearTimeout(u.timeoutid)})),f.timeoutid=window.setTimeout(f.close,o||5e3)),y.push(f),i.id&&(b[i.id]=f,m.show()),w+=1,f}return{init:function(){m=$('<li><a id="btn-notifications" class="button" href="#"><i class="fa fa-warning"></i></a></li>').prependTo(".header-toolbar").hide(),$("#btn-notifications").click(function(){!function(){for(var e in b)b.hasOwnProperty(e)&&b[e].showNotification()}()})},notify:RED.notify=e}}(),RED.search=function(){var n,d,e=!1,o=null,l=-1,t=!1,c={},p=[],u=[];function i(t,n,e){if("string"==typeof e||"number"==typeof e)e=(""+e).toLowerCase(),c[e]=c[e]||{},c[e][t.id]={node:t,label:n};else if(Array.isArray(e))e.forEach(function(e){i(t,n,e)});else if("object"==typeof e)for(var o in e)e.hasOwnProperty(o)&&i(t,n,e[o])}function a(e){var t=RED.utils.getNodeLabel(e);t&&(t=(""+t).toLowerCase(),c[t]=c[t]||{},c[t][e.id]={node:e,label:t}),t=t||e.label||e.name||e.id||"";var n=["id","type","name","label","info"];e._def&&e._def.defaults&&(n=n.concat(Object.keys(e._def.defaults)));for(var o=0;o<n.length;o++)e.hasOwnProperty(n[o])&&i(e,t,e[n[o]])}function s(){var e=d.find("li.selected");if(1===e.length){var t=d.parent(),n=t.height(),o=(t.scrollTop(),e.position().top),i=e.height();n<o+i?t.animate({scrollTop:"-="+(n-(o+i)-10)},50):o<0&&t.animate({scrollTop:"+="+(o-10)},50)}}function r(){o=$("<div>",{id:"red-ui-search",class:"red-ui-search"}).appendTo("#main-container");var e=$("<div>",{class:"red-ui-search-container"}).appendTo(o);(n=$('<input type="text" data-i18n="[placeholder]menu.label.searchInput">').appendTo(e).searchBox({delay:200,change:function(){!function(e){if(d.editableList("empty"),l=-1,u=[],0<e.length){var t,n;e=e.toLowerCase();var o=[],i={};for(t=0;t<p.length;t++){var a=p[t],s=p[t].indexOf(e);if(-1<s)for(n=0;n<c[a].length;n++){var r=c[a][n];i[r.node.id]=i[r.node.id]=r,i[r.node.id].index=Math.min(i[r.node.id].index||1/0,s)}}for((o=Object.keys(i)).sort(function(e,t){return i[e].index-i[t].index}),t=0;t<o.length;t++)u.push(i[o[t]]);if(0<u.length)for(t=0;t<Math.min(u.length,25);t++)d.editableList("addItem",u[t]);else d.editableList("addItem",{})}}($(this).val())}})).on("keydown",function(e){var t;0<u.length&&(40===e.keyCode?(t=d.children(),l<t.length-1&&(-1<l&&$(t[l]).removeClass("selected"),l++),$(t[l]).addClass("selected"),s(),e.preventDefault()):38===e.keyCode?(t=d.children(),0<l&&(l<t.length&&$(t[l]).removeClass("selected"),l--),$(t[l]).addClass("selected"),s(),e.preventDefault()):13===e.keyCode&&0<u.length&&f(u[Math.max(0,l)].node))}),n.i18n();var t=$("<div>",{class:"red-ui-search-results-container"}).appendTo(o);d=$("<ol>",{id:"search-result-list",style:"position: absolute;top: 5px;bottom: 5px;left: 5px;right: 5px;"}).appendTo(t).editableList({addButton:!1,addItem:function(e,t,n){var o=n.node;if(void 0===o)$("<div>",{class:"red-ui-search-empty"}).text(RED._("search.empty")).appendTo(e);else{var i=o._def,a=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),s=$("<div>",{class:"red-ui-search-result-node"}).appendTo(a),r=RED.utils.getNodeColor(o.type,i),d=RED.utils.getNodeIcon(i,o);"tab"===o.type&&(r="#C0DEED"),s.css("backgroundColor",r);var l=$("<div/>",{class:"palette_icon_container"}).appendTo(s);$("<div/>",{class:"palette_icon",style:"background-image: url("+d+")"}).appendTo(l);var c=$("<div>",{class:"red-ui-search-result-description"}).appendTo(a);if(o.z){var p=RED.nodes.workspace(o.z);p=p?"flow:"+p.label:"subflow:"+(p=RED.nodes.subflow(o.z)).name,$("<div>",{class:"red-ui-search-result-node-flow"}).text(p).appendTo(c)}$("<div>",{class:"red-ui-search-result-node-label"}).text(n.label||o.id).appendTo(c),$("<div>",{class:"red-ui-search-result-node-type"}).text(o.type).appendTo(c),$("<div>",{class:"red-ui-search-result-node-id"}).text(o.id).appendTo(c),a.click(function(e){e.preventDefault(),f(o)})}},scrollOnAdd:!1})}function f(e){g(),RED.view.reveal(e.id)}function h(){e||(t||(RED.keyboard.add("*","escape",function(){g()}),$("#header-shade").show(),$("#editor-shade").show(),$("#palette-shade").show(),$("#sidebar-shade").show(),$("#sidebar-separator").hide(),c={},RED.nodes.eachWorkspace(a),RED.nodes.eachSubflow(a),RED.nodes.eachConfig(a),RED.nodes.eachNode(a),(p=Object.keys(c)).sort(),p.forEach(function(t){c[t]=Object.keys(c[t]).map(function(e){return c[t][e]})}),null===o&&r(),o.slideDown(300),RED.events.emit("search:open"),t=!0),n.focus())}function g(){t&&(RED.keyboard.remove("escape"),t=!1,$("#header-shade").hide(),$("#editor-shade").hide(),$("#palette-shade").hide(),$("#sidebar-shade").hide(),$("#sidebar-separator").show(),null!==o&&o.slideUp(200,function(){n.searchBox("value","")}),RED.events.emit("search:close"))}return{init:function(){RED.actions.add("core:search",h),RED.events.on("editor:open",function(){e=!0}),RED.events.on("editor:close",function(){e=!1}),RED.events.on("type-search:open",function(){e=!0}),RED.events.on("type-search:close",function(){e=!1}),$("#header-shade").on("mousedown",g),$("#editor-shade").on("mousedown",g),$("#palette-shade").on("mousedown",g),$("#sidebar-shade").on("mousedown",g)},show:h,hide:g}}(),RED.typeSearch=function(){var r,d,t,n,o,i=null,l=-1,a=!1,s="",c={};function p(){var e=d.find("li.selected");if(1===e.length){var t=d.parent(),n=t.height(),o=(t.scrollTop(),e.position().top),i=e.height();n<o+i?t.animate({scrollTop:"-="+(n-(o+i)-10)},50):o<0&&t.animate({scrollTop:"+="+(o-10)},50)}}function u(){i=$("<div>",{id:"red-ui-type-search",class:"red-ui-search red-ui-type-search"}).appendTo("#main-container");var e=$("<div>",{class:"red-ui-search-container"}).appendTo(i);(r=$('<input type="text">').attr("placeholder",RED._("search.addNode")).appendTo(e).searchBox({delay:50,change:function(){var e;e=$(this).val(),s=e.toLowerCase(),d.editableList("filter"),d.editableList("sort"),setTimeout(function(){l=0,d.children().removeClass("selected"),d.children(":visible:first").addClass("selected")},100)}})).on("keydown",function(e){var t=d.children(":visible");if(0<t.length)if(40===e.keyCode)l<t.length-1&&(-1<l&&$(t[l]).removeClass("selected"),l++),$(t[l]).addClass("selected"),p(),e.preventDefault();else if(38===e.keyCode)0<l&&(l<t.length&&$(t[l]).removeClass("selected"),l--),$(t[l]).addClass("selected"),p(),e.preventDefault();else if(13===e.keyCode){var n=Math.max(0,l);n<t.length&&f($(t[n]).find(".red-ui-editableList-item-content").data("data"))}}),t=$("<div>",{class:"red-ui-search-results-container"}).appendTo(i),d=$("<ol>",{id:"search-result-list",style:"position: absolute;top: 0;bottom: 0;left: 0;right: 0;"}).appendTo(t).editableList({addButton:!1,filter:function(e){return""===s||!e.recent&&!e.common&&(""===s||-1<e.index.indexOf(s))},sort:function(e,t){if(""===s)return e.i-t.i;var n=e.index.indexOf(s),o=t.index.indexOf(s);return-1===n?1:-1===o?-1:n===o?m(e,t):n-o},addItem:function(e,t,n){var o=n.def;n.index=n.type.toLowerCase(),n.separator&&e.addClass("red-ui-search-result-separator");var i=$("<a>",{href:"#",class:"red-ui-search-result"}).appendTo(e),a=$("<div>",{class:"red-ui-search-result-node"}).appendTo(i),s=RED.utils.getNodeColor(n.type,o),r=RED.utils.getNodeIcon(o);a.css("backgroundColor",s);var d=$("<div/>",{class:"palette_icon_container"}).appendTo(a);$("<div/>",{class:"palette_icon",style:"background-image: url("+r+")"}).appendTo(d),0<o.inputs&&$("<div/>",{class:"red-ui-search-result-node-port"}).appendTo(a),0<o.outputs&&$("<div/>",{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(a);var l=$("<div>",{class:"red-ui-search-result-description"}).appendTo(i),c=n.label;n.index+="|"+c.toLowerCase(),$("<div>",{class:"red-ui-search-result-node-label"}).text(c).appendTo(l),i.click(function(e){e.preventDefault(),f(n)})},scrollOnAdd:!1})}function f(e){g(),c[e.type]=Date.now(),n(e.type)}function h(e){if(a){for(var t=$(e.target);"body"!==t.prop("nodeName").toLowerCase();){if("red-ui-type-search"===t.attr("id"))return;t=t.parent()}g(!0),o&&o()}}function g(e){a&&(RED.keyboard.remove("escape"),a=!1,null!==i&&t.slideUp(e?50:200,function(){i.hide(),r.searchBox("value","")}),RED.events.emit("type-search:close"),RED.view.focus(),$(document).off("mousedown.type-search"),$(document).off("mouseup.type-search"),$(document).off("click.type-search"))}function v(t,e){var n=t;if(void 0!==e.paletteLabel)try{n=("function"==typeof e.paletteLabel?e.paletteLabel.call(e):e.paletteLabel)||"",n+=" ("+t+")"}catch(e){console.log("Definition error: "+t+".paletteLabel",e)}return n}function m(e,t){var n=e.label.toLowerCase(),o=t.label.toLowerCase();return n<o?-1:n===o?0:1}return{show:function(e){a?(i.hide(),t.hide()):(RED.keyboard.add("*","escape",function(){g(),o&&o()}),null===i&&u(),a=!0,setTimeout(function(){$(document).on("mousedown.type-search",h),$(document).on("mouseup.type-search",h),$(document).on("click.type-search",h)},200)),function(){var e;d.editableList("empty"),r.searchBox("value",""),l=-1;var t=["inject","debug","function","change","switch"],n=Object.keys(c);n.sort(function(e,t){return c[t]-c[e]}),n=n.filter(function(e){return-1===t.indexOf(e)});var o=[];RED.nodes.registry.getNodeTypes().forEach(function(e){var t=RED.nodes.getType(e);"config"!==t.category&&"unknown"!==e&&"tab"!==e&&o.push({type:e,def:t,label:v(e,t)})}),o.sort(m);var i,a=0;for(e=0;e<t.length;e++){var s=RED.nodes.getType(t[e]);s&&((i={type:t[e],common:!0,def:s,i:a++}).label=v(i.type,i.def),e===t.length-1&&(i.separator=!0),d.editableList("addItem",i))}for(e=0;e<Math.min(5,n.length);e++)(i={type:n[e],def:RED.nodes.getType(n[e]),recent:!0,i:a++}).label=v(i.type,i.def),e===n.length-1&&(i.separator=!0),d.editableList("addItem",i);for(e=0;e<o.length;e++)o[e].i=a++,d.editableList("addItem",o[e]);setTimeout(function(){l=0,d.children(":first").addClass("selected")},100)}(),n=e.add,closeCallback=e.close,RED.events.emit("type-search:open"),i.css({left:e.x+"px",top:e.y+"px"}).show(),t.slideDown(300),setTimeout(function(){t.find(".red-ui-editableList-container").scrollTop(0),r.focus()},100)},hide:g}}(),RED.subflow=function(){function d(e,t){var n={x:50,y:30};t||(n.x+=110);for(var o=0;o<e.out.length+e.in.length;o++){var i;(i=o<e.out.length?e.out[o]:e.in[o-e.out.length]).x==n.x&&i.y==n.y&&(n.x+=55,o=0)}return n}function s(){var t=RED.nodes.subflow(RED.workspaces.active());if(0!==t.in.length){var n=t.in[0],o=[];return RED.nodes.eachLink(function(e){"subflow"==e.source.type&&e.source.z==t.id&&e.source.i==n.i?o.push(e):e.target.type=="subflow:"+t.id&&o.push(e)}),o.forEach(function(e){RED.nodes.removeLink(e)}),t.in=[],$("#workspace-subflow-input-add").removeClass("active"),$("#workspace-subflow-input-remove").addClass("active"),t.changed=!0,{subflowInputs:[n],links:o}}}function r(e){var t=RED.nodes.subflow(RED.workspaces.active());if(0!==t.out.length){void 0===e&&(e=[t.out[t.out.length-1]]);var n=[];for(e.sort(function(e,t){return t.i-e.i}),i=0;i<e.length;i++){var o=e[i];t.out.splice(o.i,1);var a=[],s=[];RED.nodes.eachLink(function(e){"subflow"==e.target.type&&e.target.z==t.id&&e.target.i==o.i&&a.push(e),e.source.type=="subflow:"+t.id&&(e.sourcePort==o.i?a.push(e):e.sourcePort>o.i&&s.push(e))}),a.forEach(function(e){RED.nodes.removeLink(e)}),s.forEach(function(e){e.sourcePort--}),n=n.concat(a);for(var r=o.i;r<t.out.length;r++)t.out[r].i--,t.out[r].dirty=!0}return t.changed=!0,{subflowOutputs:e,links:n}}}function l(t){var n=RED.nodes.subflow(RED.workspaces.active());c(n);var o=[];if(n)return RED.nodes.filterNodes({type:"subflow:"+n.id}).forEach(function(e){for(o.push({id:e.id,changed:e.changed}),t&&(e.changed=!0),e.inputs=n.in.length,e.outputs=n.out.length;e.outputs<e.ports.length;)e.ports.pop();e.resize=!0,e.dirty=!0,RED.editor.updateNodeProperties(e)}),RED.editor.validateNode(n),{instances:o}}function c(e){e&&($("#workspace-subflow-input-add").toggleClass("active",0!==e.in.length),$("#workspace-subflow-input-remove").toggleClass("active",0===e.in.length),$("#workspace-subflow-output .spinner-value").text(e.out.length))}function n(a){var e=$("#workspace-toolbar");e.empty(),$('<a class="button" id="workspace-subflow-edit" href="#" data-i18n="[append]subflow.editSubflowProperties"><i class="fa fa-pencil"></i> </a>').appendTo(e),$('<span style="margin-left: 5px;" data-i18n="subflow.input"></span> <div style="display: inline-block;" class="button-group"><a id="workspace-subflow-input-remove" class="button active" href="#">0</a><a id="workspace-subflow-input-add" class="button" href="#">1</a></div>').appendTo(e),$('<span style="margin-left: 5px;" data-i18n="subflow.output"></span> <div id="workspace-subflow-output" style="display: inline-block;" class="button-group spinner-group"><a id="workspace-subflow-output-remove" class="button" href="#"><i class="fa fa-minus"></i></a><div class="spinner-value">3</div><a id="workspace-subflow-output-add" class="button" href="#"><i class="fa fa-plus"></i></a></div>').appendTo(e),$('<a class="button" id="workspace-subflow-delete" href="#" data-i18n="[append]subflow.deleteSubflow"><i class="fa fa-trash"></i> </a>').appendTo(e),e.i18n(),$("#workspace-subflow-output-remove").click(function(e){e.preventDefault();var t=RED.nodes.dirty(),n=a.changed,o=r();if(o){var i=l(!0);RED.history.push({t:"delete",links:o.links,subflowOutputs:o.subflowOutputs,changed:n,dirty:t,subflow:{instances:i.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0)}}),$("#workspace-subflow-output-add").click(function(e){e.preventDefault(),function(e){var t=RED.nodes.subflow(RED.workspaces.active()),n=d(t,!1),o={type:"subflow",direction:"out",z:t.id,i:t.out.length,x:n.x,y:n.y,id:RED.nodes.id()},i=t.out.length;t.out.push(o),t.dirty=!0;var a=RED.nodes.dirty(),s=t.changed;t.changed=!0;var r={t:"edit",node:t,dirty:a,changed:s,subflow:{outputCount:i,instances:l(!0).instances}};RED.history.push(r),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#workspace-subflow-output .spinner-value").text(t.out.length)}()}),$("#workspace-subflow-input-add").click(function(e){e.preventDefault(),function(){var e=RED.nodes.subflow(RED.workspaces.active());if(1!==e.in.length){var t=d(e,!0),n={type:"subflow",direction:"in",z:e.id,i:e.in.length,x:t.x,y:t.y,id:RED.nodes.id()},o=e.in.length;e.in.push(n),e.dirty=!0;var i=RED.nodes.dirty(),a=e.changed;e.changed=!0;var s={t:"edit",node:e,dirty:i,changed:a,subflow:{inputCount:o,instances:l(!0).instances}};RED.history.push(s),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(),$("#workspace-subflow-input-add").addClass("active"),$("#workspace-subflow-input-remove").removeClass("active")}}()}),$("#workspace-subflow-input-remove").click(function(e){e.preventDefault();var t=RED.nodes.dirty(),n=a.changed;a.changed=!0;var o=s();if(o){var i=l(!0);RED.history.push({t:"delete",links:o.links,changed:n,subflowInputs:o.subflowInputs,dirty:t,subflow:{instances:i.instances}}),RED.view.select(),RED.nodes.dirty(!0),RED.view.redraw(!0)}}),$("#workspace-subflow-edit").click(function(e){RED.editor.editSubflow(RED.nodes.subflow(RED.workspaces.active())),e.preventDefault()}),$("#workspace-subflow-delete").click(function(e){e.preventDefault();var t=RED.nodes.dirty(),n=o(RED.workspaces.active());n.t="delete",n.dirty=t,RED.history.push(n)}),c(a),$("#chart").css({"margin-top":"40px"}),$("#workspace-toolbar").show()}function o(e){var t=[],n=[],o=RED.nodes.subflow(e);RED.nodes.eachNode(function(e){e.type=="subflow:"+o.id&&t.push(e),e.z==o.id&&t.push(e)}),RED.nodes.eachConfig(function(e){e.z==o.id&&t.push(e)});for(var i=[],a=0;a<t.length;a++){var s=RED.nodes.remove(t[a].id);n=n.concat(s.links),i=i.concat(s.nodes)}return t=t.concat(i),RED.nodes.removeSubflow(o),RED.workspaces.remove(o),RED.nodes.dirty(!0),RED.view.redraw(),{nodes:t,links:n,subflow:{subflow:o}}}function e(){var n=0;RED.nodes.eachSubflow(function(e){var t=new RegExp("^Subflow (\\d+)$").exec(e.name);t&&(n=Math.max(n,t[1]))});var e="Subflow "+(n+1),t=RED.nodes.id(),o={type:"subflow",id:t,name:e,info:"",in:[],out:[]};RED.nodes.addSubflow(o),RED.history.push({t:"createSubflow",subflow:{subflow:o},dirty:RED.nodes.dirty()}),RED.workspaces.show(t),RED.nodes.dirty(!0)}function t(){var e=RED.view.selection();if(e.nodes){var t,i,a={},o=[],n=[],s=[],r=[],d={},l=[e.nodes[0].x,e.nodes[0].y,e.nodes[0].x,e.nodes[0].y];for(t=0;t<e.nodes.length;t++)i=e.nodes[t],a[i.id]={n:i,outputs:{}},l=[Math.min(l[0],i.x),Math.min(l[1],i.y),Math.max(l[2],i.x),Math.max(l[3],i.y)];var c=[(l[2]+l[0])/2,(l[3]+l[1])/2];RED.nodes.eachLink(function(e){a[e.source.id]&&a[e.target.id],a[e.source.id]&&!a[e.target.id]&&(r.push(e),n.push(e)),!a[e.source.id]&&a[e.target.id]&&(s.push(e),d[e.target.id]=e.target,n.push(e))});var p={};if((r=r.filter(function(e){return p[e.source.id+":"+e.sourcePort]?(p[e.source.id+":"+e.sourcePort].targets.push(e.target),!1):(e.targets=[],e.targets.push(e.target),p[e.source.id+":"+e.sourcePort]=e,!0)})).sort(function(e,t){return e.source.y-t.source.y}),1<Object.keys(d).length)RED.notify(RED._("subflow.errors.multipleInputsToSelection"),"error");else{var u=0;RED.nodes.eachSubflow(function(e){var t=new RegExp("^Subflow (\\d+)$").exec(e.name);t&&(u=Math.max(u,t[1]))});var f="Subflow "+(u+1),h=RED.nodes.id(),g={type:"subflow",id:h,name:f,info:"",in:Object.keys(d).map(function(e,t){var n=t;return{type:"subflow",direction:"in",x:d[e].x-d[e].w/2-80,y:d[e].y,z:h,i:n,id:RED.nodes.id(),wires:[{id:d[e].id}]}}),out:r.map(function(e,t){var n=t;return{type:"subflow",direction:"in",x:e.source.x+e.source.w/2+80,y:e.source.y,z:h,i:n,id:RED.nodes.id(),wires:[{id:e.source.id,port:e.sourcePort}]}})};RED.nodes.addSubflow(g);var v={id:RED.nodes.id(),type:"subflow:"+g.id,x:c[0],y:c[1],z:RED.workspaces.active(),inputs:g.in.length,outputs:g.out.length,h:Math.max(30,15*(g.out.length||0)),changed:!0};for(v._def=RED.nodes.getType(v.type),RED.editor.validateNode(v),RED.nodes.add(v),s.forEach(function(e){var t={source:e.source,sourcePort:e.sourcePort,target:v};o.push(t),RED.nodes.addLink(t)}),r.forEach(function(e,n){e.targets.forEach(function(e){var t={source:v,sourcePort:n,target:e};o.push(t),RED.nodes.addLink(t)})}),g.in.forEach(function(n){n.wires.forEach(function(e){var t={source:n,sourcePort:0,target:RED.nodes.node(e.id)};o.push(t),RED.nodes.addLink(t)})}),g.out.forEach(function(n,e){n.wires.forEach(function(e){var t={source:RED.nodes.node(e.id),sourcePort:e.port,target:n};o.push(t),RED.nodes.addLink(t)})}),t=0;t<n.length;t++)RED.nodes.removeLink(n[t]);for(t=0;t<e.nodes.length;t++)i=e.nodes[t],/^link /.test(i.type)&&(i.links=i.links.filter(function(e){var t=a.hasOwnProperty(e);if(!t){var n=RED.nodes.node(e);if(n&&n.links){var o=n.links.indexOf(i.id);-1<o&&n.links.splice(o,1)}}return t})),i.z=g.id;RED.history.push({t:"createSubflow",nodes:[v.id],links:o,subflow:{subflow:g},activeWorkspace:RED.workspaces.active(),removedLinks:n,dirty:RED.nodes.dirty()}),RED.view.select(null),RED.editor.validateNode(g),RED.nodes.dirty(!0),RED.view.redraw(!0)}}else RED.notify(RED._("subflow.errors.noNodesSelected"),"error")}return{init:function(){RED.events.on("workspace:change",function(e){var t=RED.nodes.subflow(e.workspace);t?n(t):($("#workspace-toolbar").hide().empty(),$("#chart").css({"margin-top":"0"}))}),RED.events.on("view:selection-changed",function(e){e.nodes?RED.menu.setDisabled("menu-item-subflow-convert",!1):RED.menu.setDisabled("menu-item-subflow-convert",!0)}),RED.actions.add("core:create-subflow",e),RED.actions.add("core:convert-to-subflow",t),$('<script type="text/x-red" data-template-name="subflow"><div class="form-row"><label for="node-input-name" data-i18n="[append]editor:common.label.name"><i class="fa fa-tag"></i> </label><input type="text" id="node-input-name"></div><\/script>').appendTo(document.body),$('<script type="text/x-red" data-template-name="subflow-template"><div class="form-row"><i class="fa fa-tag"></i><label for="subflow-input-name" data-i18n="common.label.name"></label><input type="text" id="subflow-input-name"></div><div class="form-row" style="margin-bottom: 0px;"><label for="subflow-input-info" data-i18n="editor:subflow.info"></label><a href="https://help.github.com/articles/markdown-basics/" style="font-size: 0.8em; float: right;" data-i18n="[html]subflow.format"></a></div><div class="form-row node-text-editor-row"><div style="height: 250px;" class="node-text-editor" id="subflow-input-info-editor"></div></div><div class="form-row form-tips" id="subflow-dialog-user-count"></div><\/script>').appendTo(document.body)},createSubflow:e,convertToSubflow:t,removeSubflow:o,refresh:l,removeInput:s,removeOutput:r}}(),RED.userSettings=function(){var t=700,n=!1,r=[];function e(e){r.push(e)}function o(s){if(!n)if(RED.user.hasPermission("settings.write")){n=!0;var e={title:RED._("menu.label.userSettings"),buttons:[{id:"node-dialog-ok",text:RED._("common.label.close"),class:"primary",click:function(){RED.tray.close()}}],resize:function(e){t=e.width},open:function(e){var t=e.find(".editor-tray-body"),n=$("<div></div>").appendTo(t),o=$("<div></div>",{id:"user-settings-tabs-container"}).appendTo(n);$("<ul></ul>",{id:"user-settings-tabs"}).appendTo(o);var i=RED.tabs.create({id:"user-settings-tabs",vertical:!0,onchange:function(e){setTimeout(function(){$("#user-settings-tabs-content").children().hide(),$("#"+e.id).show(),e.pane.focus&&e.pane.focus()},50)}}),a=$("<div></div>",{id:"user-settings-tabs-content"}).appendTo(n);r.forEach(function(e){i.addTab({id:"user-settings-tab-"+e.id,label:e.title,pane:e}),e.get().hide().appendTo(a)}),n.i18n(),i.activateTab("user-settings-tab-"+(s||"view")),$("#sidebar-shade").show()},close:function(){n=!1,r.forEach(function(e){e.close&&e.close()}),$("#sidebar-shade").hide()},show:function(){}};null!==t&&(e.width=t),RED.tray.show(e)}else RED.notify(RED._("user.errors.settings"),"error")}var s=[{title:"menu.label.view.grid",options:[{setting:"view-show-grid",oldSetting:"menu-menu-item-view-show-grid",label:"menu.label.view.showGrid",toggle:!0,onchange:"core:toggle-show-grid"},{setting:"view-snap-grid",oldSetting:"menu-menu-item-view-snap-grid",label:"menu.label.view.snapGrid",toggle:!0,onchange:"core:toggle-snap-grid"},{setting:"view-grid-size",label:"menu.label.view.gridSize",type:"number",default:20,onchange:RED.view.gridSize}]},{title:"menu.label.nodes",options:[{setting:"view-node-status",oldSetting:"menu-menu-item-status",label:"menu.label.displayStatus",default:!0,toggle:!0,onchange:"core:toggle-status"}]},{title:"menu.label.other",options:[{setting:"view-show-tips",oldSettings:"menu-menu-item-show-tips",label:"menu.label.showTips",toggle:!0,default:!0,onchange:"core:toggle-show-tips"}]}],d={};function l(){var o=$('<div id="user-settings-tab-view" class="node-help"></div>'),i=RED.settings.get("editor")||{};return i.view=i.view||{},s.forEach(function(e){$("<h3></h3>").text(RED._(e.title)).appendTo(o),e.options.forEach(function(e){var t=i.view[e.setting],n=$('<div class="user-settings-row"></div>').appendTo(o);e.toggle?$('<label for="user-settings-'+e.setting+'"><input id="user-settings-'+e.setting+'" type="checkbox"> '+RED._(e.label)+"</label>").appendTo(n).find("input").prop("checked",t):($('<label for="user-settings-'+e.setting+'">'+RED._(e.label)+"</label>").appendTo(n),$('<input id="user-settings-'+e.setting+'" type="'+(e.type||"text")+'">').appendTo(n).val(t))})}),o}function c(e,t){var n=d[e],o=RED.settings.get("editor")||{};o.view=o.view||{},o.view[n.setting]=t,RED.settings.set("editor",o);var i=n.onchange;"string"==typeof i&&(i=RED.actions.get(i)),i&&i.call(n,t)}return{init:function(){RED.actions.add("core:show-user-settings",o),RED.actions.add("core:show-help",function(){o("keyboard")}),e({id:"view",title:RED._("menu.label.view.view"),get:l,close:function(){s.forEach(function(e){e.options.forEach(function(e){var t=$("#user-settings-"+e.setting);e.toggle?c(e.setting,t.prop("checked")):c(e.setting,t.val())})})}});var i=RED.settings.get("editor")||{};i.view=i.view||{};var a=!1;s.forEach(function(e){e.options.forEach(function(e){if(e.oldSetting){var t=RED.settings.get(e.oldSetting);null!=t&&(i.view[e.setting]=t,a=!0,RED.settings.remove(e.oldSetting))}if((d[e.setting]=e).onchange){var n=i.view[e.setting];null==n&&e.hasOwnProperty("default")&&(n=e.default,i.view[e.setting]=n,a=!0);var o=e.onchange;"string"==typeof o&&(o=RED.actions.get(o)),o&&o.call(e,n)}})}),a&&RED.settings.set("editor",i)},toggle:function(e){var t=d[e],n=RED.settings.get("editor")||{};n.view=n.view||{},c(e,!n.view[t.setting])},show:o,add:e}}(),RED.projects=function(){var u,a,B;function v(e){var t;"git_missing_user"===e.error?t=RED.notify("<p>"+RED._("projects.errors.no-username-email")+"</p>",{fixed:!0,type:"error",buttons:[{text:RED._("common.label.cancel"),click:function(){t.close()}},{text:RED._("projects.config-git"),click:function(){RED.userSettings.show("gitconfig"),t.close()}}]}):(console.log(e),t=RED.notify("<p>"+RED._("projects.errors.unexpected")+":</p><p>"+e.message+"</p><small>"+RED._("projects.errors.code")+": "+e.error+"</small>",{fixed:!0,modal:!0,type:"error",buttons:[{text:RED._("common.label.close"),click:function(){t.close()}}]}))}var s={};function t(){var b=$('<div class="projects-dialog-screen-start-hero"></div>');$('<span><i class="fa fa-files-o fa-2x"></i> &nbsp; &nbsp; <i class="fa fa-long-arrow-right fa-2x"></i> &nbsp; &nbsp; <i class="fa fa-archive fa-2x"></i></span>').appendTo(b),$("<hr>").appendTo(b);var T,_,k,j,C,S,O,L,P,N,I,A,c,d,l,y,w,D,E,R,x,z,M,f,h,r,p,g={};s={welcome:{content:function(e){var t=$('<div class="projects-dialog-screen-start"></div>');b.appendTo(t);var n=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.welcome.hello")).appendTo(n),$("<p>").text(RED._("projects.welcome.desc0")).appendTo(n),$("<p>").text(RED._("projects.welcome.desc1")).appendTo(n),$("<p>").text(RED._("projects.welcome.desc2")).appendTo(n);var o=$('<div style="text-align: center"></div>').appendTo(n),i=$('<button data-type="empty" class="editor-button projects-dialog-screen-create-type"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-asterisk"></i><br/>'+RED._("projects.welcome.create")+"</button>").appendTo(o),a=$('<button data-type="clone" class="editor-button projects-dialog-screen-create-type"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-git"></i><br/>'+RED._("projects.welcome.clone")+"</button>").appendTo(o);return i.click(function(e){e.preventDefault(),g={action:"create"},m("git-config")}),a.click(function(e){e.preventDefault(),g={action:"clone"},m("git-config")}),t},buttons:[{text:RED._("projects.welcome.not-right-now"),click:function(){g={},$(this).dialog("close")}}]},"git-config":{content:function(e){var t=!1,n=RED.settings.get("git");n&&n.user?n=n.user:RED.settings.git&&RED.settings.git.globalUser&&(t=!0,n=RED.settings.git.globalUser);var o=function(){var e=r.val().trim(),t=p.val().trim(),n=0<e.length&&0<t.length;$("#projects-dialog-git-config").prop("disabled",!n).toggleClass("disabled ui-button-disabled ui-state-disabled",!n)},i=$('<div class="projects-dialog-screen-start"></div>');b.appendTo(i);var a=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(i);$("<p>").text(RED._("projects.git-config.setup")).appendTo(a),$("<p>").text(RED._("projects.git-config.desc0")).appendTo(a),$("<p>").text(RED._("projects.git-config.desc1")).appendTo(a),t&&$("<p>").text(RED._("projects.git-config.desc2")).appendTo(a),$("<p>").text(RED._("projects.git-config.desc3")).appendTo(a);var s=$('<div class="form-row"></div>').appendTo(a);return $('<label for="">'+RED._("projects.git-config.username")+"</label>").appendTo(s),(r=$('<input type="text">').val(n&&n.name||"").appendTo(s)).on("change keyup paste",o),s=$('<div class="form-row"></div>').appendTo(a),$('<label for="">'+RED._("projects.git-config.email")+"</label>").appendTo(s),(p=$('<input type="text">').val(n&&n.email||"").appendTo(s)).on("change keyup paste",o),setTimeout(function(){r.focus(),o()},50),i},buttons:[{text:RED._("common.label.back"),click:function(){m("welcome")}},{id:"projects-dialog-git-config",text:RED._("common.label.next"),class:"primary",click:function(){var e=RED.settings.get("git")||{};e.user=e.user||{},e.user.name=r.val(),e.user.email=p.val(),RED.settings.set("git",e),"create"===g.action?m("project-details"):"clone"===g.action&&m("clone-project")}}]},"project-details":{content:function(e){var n=null,o=!1;$.getJSON("projects",function(e){n={},e.projects.forEach(function(e){n[e]=!0,o&&(o=!1,a())})});var t=$('<div class="projects-dialog-screen-start"></div>');b.appendTo(t);var i=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.project-details.create")).appendTo(i),$("<p>").text(RED._("projects.project-details.desc0")).appendTo(i),$("<p>").text(RED._("projects.project-details.desc1")).appendTo(i),$("<p>").text(RED._("projects.project-details.desc2")).appendTo(i);var a=function(){var e=f.val(),t=!0;if(p){if(null===n)return void(o=!0);c.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||n[e]?(f.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(c),t=d=!1,n[e]?projectNameSublabel.text(RED._("projects.project-details.already-exists")):projectNameSublabel.text(RED._("projects.project-details.must-contain"))):(f.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(c),projectNameSublabel.text(RED._("projects.project-details.must-contain")),d=!0),u=e}t=d,$("#projects-dialog-create-name").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)},s=$('<div class="form-row"></div>').appendTo(i);$('<label for="projects-dialog-screen-create-project-name">'+RED._("projects.project-details.project-name")+"</label>").appendTo(s);var r=$('<div style="position:relative;"></div>').appendTo(s);f=$('<input id="projects-dialog-screen-create-project-name" type="text"></input>').val(g.name||"").appendTo(r);var d,l,c=$('<div class="projects-dialog-screen-input-status"></div>').appendTo(r),p=!1,u="";return f.on("change keyup paste",function(){if(p=f.val()!==u,l)clearTimeout(l);else if(p&&(c.empty(),$('<img src="red/images/spin.svg"/>').appendTo(c),""===f.val()))return void a();l=setTimeout(function(){a(),l=null},300)}),projectNameSublabel=$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.project-details.must-contain")+"</small></label>").appendTo(s).find("small"),s=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(i),$('<label for="projects-dialog-screen-create-project-desc">'+RED._("projects.project-details.desc")+"</label>").appendTo(s),h=$('<input id="projects-dialog-screen-create-project-desc" type="text">').val(g.summary||"").appendTo(s),$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.project-details.opt")+"</small></label>").appendTo(s),setTimeout(function(){f.focus(),f.change()},50),t},buttons:function(e){return[{text:RED._("common.label.back"),click:function(){m("git-config")}},{id:"projects-dialog-create-name",disabled:!0,text:RED._("common.label.next"),class:"primary disabled",click:function(){g.name=f.val(),g.summary=h.val(),m("default-files",e)}}]}},"clone-project":{content:function(e){var t=$('<div class="projects-dialog-screen-start"></div>');b.appendTo(t);var n=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.clone-project.clone")).appendTo(n),$("<p>").text(RED._("projects.clone-project.desc0")).appendTo(n);var i=null,a=!1;$.getJSON("projects",function(e){i={},e.projects.forEach(function(e){i[e]=!0,a&&(a=!1,s())})});var o,s=function(){var e=y.val(),t=!0;if(p){if(null===i)return void(a=!0);c.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||i[e]?(y.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(c),t=d=!1,i[e]?x.text(RED._("projects.clone-project.already-exists")):x.text(RED._("projects.clone-project.must-contain"))):(y.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(c),x.text(RED._("projects.clone-project.must-contain")),d=!0),u=e}t=d;var n=D.val(),o=0<n.length&&!/\s/.test(n);/^https?:\/\/[^/]+@/i.test(n)&&($("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.no-info-in-url")),o=!1),o?D.removeClass("input-error"):(h&&D.addClass("input-error"),t=!1),/^https?:\/\//.test(n)?($(".projects-dialog-screen-create-row-creds").show(),$(".projects-dialog-screen-create-row-sshkey").hide()):/^(?:ssh|[\S]+?@[\S]+?):(?:\/\/)?/.test(n)?($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").show()):($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").hide()),$("#projects-dialog-clone-project").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)};o=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty projects-dialog-screen-create-row-clone"></div>').appendTo(n),$('<label for="projects-dialog-screen-create-project-name">'+RED._("projects.clone-project.project-name")+"</label>").appendTo(o);var r=$('<div style="position:relative;"></div>').appendTo(o);y=$('<input id="projects-dialog-screen-create-project-name" type="text"></input>').appendTo(r);var d,l,c=$('<div class="projects-dialog-screen-input-status"></div>').appendTo(r),p=!1,u="",f="";y.on("change keyup paste",function(){if(p=y.val()!==u,l)clearTimeout(l);else if(p&&(c.empty(),$('<img src="red/images/spin.svg"/>').appendTo(c),""===y.val()))return void s();l=setTimeout(function(){s(),l=null},300)}),x=$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.clone-project.must-contain")+"</small></label>").appendTo(o).find("small"),o=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(n),$('<label for="projects-dialog-screen-create-project-repo">'+RED._("projects.clone-project.git-url")+"</label>").appendTo(o),D=$('<input id="projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(o),$('<label id="projects-dialog-screen-create-project-repo-label" class="projects-edit-form-sublabel"><small>'+RED._("projects.clone-project.protocols")+"</small></label>").appendTo(o);var h=!1,g="";D.on("change keyup paste",function(){h=!0;var e=$(this).val();g!==e&&$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.protocols"));var t=/\/([^/]+?)(?:\.git)?$/.exec(g=e);if(t){var n=y.val();""!==n&&n!==f||(f=t[1],y.val(f),y.change())}s()});var v=$('<div class="projects-dialog-screen-create-row"></div>').appendTo(n);o=$('<div class="form-row projects-dialog-screen-create-row-auth-error"></div>').hide().appendTo(v),$('<div><i class="fa fa-warning"></i> '+RED._("projects.clone-project.auth-failed")+"</div>").appendTo(o),o=$('<div class="hide form-row projects-dialog-screen-create-row-creds"></div>').hide().appendTo(v),r=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(o),$('<label for="projects-dialog-screen-create-project-repo-user">'+RED._("projects.clone-project.username")+"</label>").appendTo(r),E=$('<input id="projects-dialog-screen-create-project-repo-user" type="text"></input>').appendTo(r),r=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(o),$('<label for="projects-dialog-screen-create-project-repo-pass">'+RED._("projects.clone-project.passwd")+"</label>").appendTo(r),R=$('<input id="projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(r),o=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').hide().appendTo(v),r=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(o),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.ssh-key")+"</label>").appendTo(r),z=$("<select>",{style:"width: 100%"}).appendTo(r),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){z.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(z.addClass("input-error"),z.attr("disabled",!0),m.show()):(z.removeClass("input-error"),z.attr("disabled",!1),m.hide())}),r=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(o),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.clone-project.passphrase")+"</label>").appendTo(r),M=$('<input id="projects-dialog-screen-create-project-repo-passphrase" type="password"></input>').appendTo(r),r=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').appendTo(v);var m=$('<div class="projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(r);return $('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.clone-project.ssh-key-desc")+"</div>").appendTo(m),r=$('<div style="text-align: center">').appendTo(m),$('<button class="editor-button">'+RED._("projects.clone-project.ssh-key-add")+"</button>").appendTo(r).click(function(e){e.preventDefault(),$("#projects-dialog-cancel").click(),RED.userSettings.show("gitconfig"),setTimeout(function(){$("#user-settings-gitconfig-add-key").click()},500)}),o=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(n),$("<label>"+RED._("projects.clone-project.credential-key")+"</label>").appendTo(o),w=$('<input type="password"></input>').appendTo(o),t},buttons:function(e){return[{text:RED._("common.label.back"),click:function(){m("git-config")}},{id:"projects-dialog-clone-project",disabled:!0,text:RED._("common.label.clone"),class:"primary disabled",click:function(){$(".projects-dialog-screen-create-type.selected").data("type");var e={name:y.val()};e.credentialSecret=w.val();var t=D.val();if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(t)){var n=z.val();if(!n)return void console.log(RED._("projects.clone-project.cant-get-ssh-key"));e.git={remotes:{origin:{url:t,keyFile:n,passphrase:M.val()}}}}else e.git={remotes:{origin:{url:t,username:E.val(),password:R.val()}}};$(".projects-dialog-screen-create-row-auth-error").hide(),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.protocols")),E.removeClass("input-error"),R.removeClass("input-error"),z.removeClass("input-error"),M.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(e.name),U({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(e){u.dialog("close")},400:{project_exists:function(e){console.log(RED._("projects.clone-project.already-exists2"))},git_error:function(e){console.log(RED._("projects.clone-project.git-error"),e)},git_connection_failed:function(e){D.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.connection-failed"))},git_not_a_repository:function(e){D.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.not-git-repo"))},git_repository_not_found:function(e){D.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.clone-project.repo-not-found"))},git_auth_failed:function(e){$(".projects-dialog-screen-create-row-auth-error").show(),E.addClass("input-error"),R.addClass("input-error"),z.addClass("input-error"),M.addClass("input-error")},missing_flow_file:function(e){u.dialog("close")},project_empty:function(e){u.dialog("close")},credentials_load_failed:function(e){u.dialog("close")},"*":function(e){v(e),$(u).dialog("close")}}}},e).then(function(){RED.events.emit("project:change",{name:name})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}},"default-files":{content:function(e){var t=$('<div class="projects-dialog-screen-start"></div>');b.appendTo(t);var n=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.default-files.create")).appendTo(n),$("<p>").text(RED._("projects.default-files.desc0")).appendTo(n),$("<p>").text(RED._("projects.default-files.desc1")).appendTo(n),!e.existingProject&&RED.settings.files&&$("<p>").text(RED._("projects.default-files.desc2")).appendTo(n);var o=function(){var e=!0,t=d.val();""!==t&&/\.json$/.test(t)?(d.hasClass("input-error")&&(d.removeClass("input-error"),d.next().empty()),l.hasClass("input-error")&&(l.removeClass("input-error"),l.next().empty()),l.text(t.substring(0,t.length-5)+"_cred.json")):(e=!1,d.hasClass("input-error")||(d.addClass("input-error"),d.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>')),l.text(""),l.hasClass("input-error")||(l.addClass("input-error"),l.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>'))),$("#projects-dialog-create-default-files").prop("disabled",!e).toggleClass("disabled ui-button-disabled ui-state-disabled",!e)},i=$('<div class="form-row"></div>').appendTo(n);$('<label for="projects-dialog-screen-create-project-file">'+RED._("projects.default-files.flow-file")+"</label>").appendTo(i);var a=$('<div style="position:relative;"></div>').appendTo(i),s=g.files&&g.files.flow||RED.settings.files&&RED.settings.files.flow||"flow.json";d=$('<input id="projects-dialog-screen-create-project-file" type="text">').val(s).on("change keyup paste",o).appendTo(a),$('<div class="projects-dialog-screen-input-status"></div>').appendTo(a),$('<label class="projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(i);var r=g.files&&g.files.credentials||RED.settings.files&&RED.settings.files.credentials||"flow_cred.json";return i=$('<div class="form-row"></div>').appendTo(n),$('<label for="projects-dialog-screen-create-project-credfile">'+RED._("projects.default-files.credentials-file")+"</label>").appendTo(i),a=$('<div style="position:relative;"></div>').appendTo(i),l=$('<div style="width: 100%" class="uneditable-input" id="projects-dialog-screen-create-project-credentials">').text(r).appendTo(a),$('<div class="projects-dialog-screen-input-status"></div>').appendTo(a),setTimeout(function(){d.focus(),o()},50),t},buttons:function(e){return[{text:RED._(e.existingProject?"common.label.cancel":"common.label.back"),click:function(){e.existingProject?$(this).dialog("close"):m("project-details",e)}},{id:"projects-dialog-create-default-files",text:RED._("common.label.next"),class:"primary",click:function(){g.files={flow:d.val(),credentials:l.text()},e.existingProject||(g.migrateFiles=!0),m("encryption-config",e)}}]}},"encryption-config":{content:function(e){var t=$('<div class="projects-dialog-screen-start"></div>');b.appendTo(t);var n=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(t);$("<p>").text(RED._("projects.encryption-config.setup")).appendTo(n),e.existingProject?($("<p>").text(RED._("projects.encryption-config.desc0")).appendTo(n),$("<p>").text(RED._("projects.encryption-config.desc1")).appendTo(n)):"disabled"===RED.settings.flowEncryptionType?($("<p>").text(RED._("projects.encryption-config.desc2")).appendTo(n),$("<p>").text(RED._("projects.encryption-config.desc3")).appendTo(n),$("<p>").text(RED._("projects.encryption-config.desc4")).appendTo(n)):("user"===RED.settings.flowEncryptionType?$("<p>").text(RED._("projects.encryption-config.desc5")).appendTo(n):"system"===RED.settings.flowEncryptionType&&$("<p>").text(RED._("projects.encryption-config.desc6")).appendTo(n),$("<p>").text(RED._("projects.encryption-config.desc7")).appendTo(n));var o=function(){var e=!0;"enabled"===$("input[name=projects-encryption-type]:checked").val()&&"custom"===$("input[name=projects-encryption-key]:checked").val()&&(e=e&&""!==c.val()),$("#projects-dialog-create-encryption").prop("disabled",!e).toggleClass("disabled ui-button-disabled ui-state-disabled",!e)},i=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(n);$("<label>"+RED._("projects.encryption-config.credentials")+"</label>").appendTo(i);var a=$('<div style="width: 550px">').appendTo(i),s=$('<div style="min-height:150px; box-sizing: border-box; float: right; vertical-align: top; width: 331px; margin-left: -1px; padding: 15px; margin-top: -15px; border: 1px solid #ccc; border-radius: 3px; display: inline-block">').appendTo(a),r=$('<div style="vertical-align: top; width: 220px; display: inline-block">').appendTo(a),d=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid #ccc;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: white;"></div>').appendTo(r);$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="enabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-lock"></i> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.enable")+"</span></label>").appendTo(d);var l=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid white;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: #ccc; "></div>').appendTo(r);return $('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="disabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-unlock"></i> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.disable")+"</span></label>").appendTo(l),r.find("input[name=projects-encryption-type]").click(function(e){var t,n;"enabled"===$(this).val()?(t=d,n=l,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&c.focus()):(n=d,t=l,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.css({borderColor:"#ccc",borderRightColor:"white"}),n.css({borderColor:"white",borderRightColor:"#ccc"}),o()}),i=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(s),$('<label class="projects-edit-form-inline-label '+("user"!==RED.settings.flowEncryptionType?"disabled":"")+'" style="margin-left: 5px"><input '+("user"!==RED.settings.flowEncryptionType?RED._("projects.encryption-config.disabled"):"")+' type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" value="default" name="projects-encryption-key"> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.copy")+"</span></label>").appendTo(i),i=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(s),$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" value="custom" name="projects-encryption-key"> <span style="vertical-align: middle;">'+RED._("projects.encryption-config.use-custom")+"</span></label>").appendTo(i),i=$('<div class="projects-encryption-enabled-row"></div>').appendTo(s),(c=$('<input disabled type="password" style="margin-left: 25px; width: calc(100% - 30px);"></input>').appendTo(i)).on("change keyup paste",o),i=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(s),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.encryption-config.desc8")+"</div>").appendTo(i),s.find("input[name=projects-encryption-key]").click(function(){var e=$(this).val();c.attr("disabled","default"===e),"custom"===e&&c.focus(),o()}),setTimeout(function(){r.find("input[name=projects-encryption-type][value=enabled]").click(),"user"!==RED.settings.flowEncryptionType?s.find("input[name=projects-encryption-key][value=custom]").click():s.find("input[name=projects-encryption-key][value=default]").click(),o()},100),t},buttons:function(o){return[{text:RED._("common.label.back"),click:function(){m("default-files",o)}},{id:"projects-dialog-create-encryption",text:RED._(o.existingProject?"projects.encryption-config.create-project-files":"projects.encryption-config.create-project"),class:"primary disabled",disabled:!0,click:function(){"enabled"===$("input[name=projects-encryption-type]:checked").val()?"custom"===$("input[name=projects-encryption-key]:checked").val()&&(g.credentialSecret=c.val()):g.credentialSecret=!1,RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(g.name);var e="POST",t="projects";o.existingProject&&(g.initialise=!0,e="PUT",t="projects/"+B.name);var n=this;U({url:t,type:e,requireCleanWorkspace:!0,handleAuthFail:!1,responses:{200:function(e){g={},o.existingProject?$(n).dialog("close"):(m("create-success"),RED.menu.setDisabled("menu-item-projects-open",!1),RED.menu.setDisabled("menu-item-projects-settings",!1))},400:{project_exists:function(e){console.log(RED._("projects.encryption-config.already-exists"))},git_error:function(e){console.log(RED._("projects.encryption-config.git-error"),e)},git_connection_failed:function(e){projectRepoInput.addClass("input-error")},git_auth_failed:function(e){projectRepoUserInput.addClass("input-error"),projectRepoPasswordInput.addClass("input-error"),console.log(RED._("projects.encryption-config.git-auth-error"),e)},"*":function(e){v(e),$(u).dialog("close")}}}},g).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}},"create-success":{content:function(e){var t=$('<div class="projects-dialog-screen-start"></div>');b.appendTo(t);var n=$('<div class="projects-dialog-screen-start-body"></div>').appendTo(t);return $("<p>").text(RED._("projects.create-success.success")).appendTo(n),$("<p>").text(RED._("projects.create-success.desc0")).appendTo(n),$("<p>").text(RED._("projects.create-success.desc1")).appendTo(n),$("<p>").text(RED._("projects.create-success.desc2")).appendTo(n),t},buttons:[{text:RED._("common.label.done"),click:function(){$(this).dialog("close")}}]},create:{title:RED._("projects.create.projects"),content:function(e){var s=null;A=null;var r=!1;$.getJSON("projects",function(e){s={},e.projects.forEach(function(e){s[e]=!0,r&&(r=!1,o())})});var t,n=$('<div class="projects-dialog-screen-create"></div>'),o=function(){var e=T.val(),t=!0;if(f){if(null===s)return void(r=!0);u.empty(),!/^[a-zA-Z0-9\-_]+$/.test(e)||s[e]?(T.addClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>').appendTo(u),t=c=!1,s[e]?P.text(RED._("projects.create.already-exists")):P.text(RED._("projects.create.must-contain"))):(T.removeClass("input-error"),$('<i style="margin-top: 8px;" class="fa fa-check"></i>').appendTo(u),P.text(RED._("projects.create.must-contain")),c=!0),h=e}t=c;var n=$(".projects-dialog-screen-create-type.selected").data("type");if("copy"===n)t=!1;else if("clone"===n){var o=C.val(),i=0<o.length&&!/\s/.test(o);/^https?:\/\/[^/]+@/i.test(o)&&($("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.no-info-in-url")),i=!1),i?C.removeClass("input-error"):(D&&C.addClass("input-error"),t=!1),/^https?:\/\//.test(o)?($(".projects-dialog-screen-create-row-creds").show(),$(".projects-dialog-screen-create-row-sshkey").hide()):/^(?:ssh|[\S]+?@[\S]+?):(?:\/\/)?/.test(o)?($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").show()):($(".projects-dialog-screen-create-row-creds").hide(),$(".projects-dialog-screen-create-row-sshkey").hide())}else if("empty"===n){var a=k.val();""!==a&&/\.json$/.test(a)?k.hasClass("input-error")&&(k.removeClass("input-error"),k.next().empty()):(t=!1,k.hasClass("input-error")||(k.addClass("input-error"),k.next().empty().append('<i style="margin-top: 8px;" class="fa fa-exclamation-triangle"></i>'))),"enabled"===$("input[name=projects-encryption-type]:checked").val()&&"custom"===$("input[name=projects-encryption-key]:checked").val()&&(t=t&&""!==S.val())}else"open"===n&&(t=!!A);$("#projects-dialog-create").prop("disabled",!t).toggleClass("disabled ui-button-disabled ui-state-disabled",!t)};t=$('<div class="form-row button-group"></div>').appendTo(n);var i=$('<button data-type="open" class="editor-button projects-dialog-screen-create-type toggle"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-folder-open"></i><br/>'+RED._("projects.create.open")+"</button>").appendTo(t),a=$('<button data-type="empty" class="editor-button projects-dialog-screen-create-type toggle"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-asterisk"></i><br/>'+RED._("projects.create.create")+"</button>").appendTo(t),d=$('<button data-type="clone" class="editor-button projects-dialog-screen-create-type toggle"><i class="fa fa-archive fa-2x"></i><i style="position: absolute;" class="fa fa-git"></i><br/>'+RED._("projects.create.clone")+"</button>").appendTo(t);t.find(".projects-dialog-screen-create-type").click(function(e){switch(e.preventDefault(),n.find(".projects-dialog-screen-create-type").removeClass("selected"),$(this).addClass("selected"),n.find(".projects-dialog-screen-create-row").hide(),n.find(".projects-dialog-screen-create-row-"+$(this).data("type")).show(),o(),T.focus(),$(this).data("type")){case"open":$("#projects-dialog-create").text(RED._("projects.create.open"));break;case"empty":$("#projects-dialog-create").text(RED._("projects.create.create"));break;case"clone":$("#projects-dialog-create").text(RED._("projects.create.clone"))}}),t=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-open"></div>').hide().appendTo(n),function(r){(r=r||{}).height;var o,e=$("<div></div>",{class:"projects-dialog-project-list-container"}),t="",n=$("<div>",{class:"red-ui-search-container"}).appendTo(e),i=$('<input id="projects-dialog-project-list-search" type="text" placeholder="'+RED._("projects.create-project-list.search")+'">').appendTo(n).searchBox({delay:200,change:function(){t=$(this).val().toLowerCase(),l.editableList("filter"),o&&!o.is(":visible")&&o.children().children().removeClass("selected"),(o=l.children(":visible").first()).children().children().addClass("selected"),r.select&&r.select(o.children().data("data")),d()}});i.on("keydown",function(e){if(40===e.keyCode){e.preventDefault();var t=o;if(o){for(;0!==(t=t.next()).length&&!t.is(":visible"););if(0===t.length)return;o.children().children().removeClass("selected")}else t=l.children(":visible").first();(o=t).children().children().addClass("selected"),r.select&&r.select(o.children().data("data")),d()}else if(38===e.keyCode){e.preventDefault();var n=o;if(o){for(;0!==(n=n.prev()).length&&!n.is(":visible"););if(0===n.length)return;o.children().children().removeClass("selected")}else n=l.children(":visible").first();(o=n).children().children().addClass("selected"),r.select&&r.select(o.children().data("data")),d()}else 13===e.keyCode&&(e.preventDefault(),o&&r.dblclick&&r.dblclick(o.children().data("data")))}),i.i18n();var d=function(){var e=l.find(".projects-dialog-project-list-entry.selected").parent().parent();if(1===e.length){var t=a,n=t.height(),o=(t.scrollTop(),e.position().top),i=e.height();n<o+i?t.animate({scrollTop:"-="+(n-o-i)},50):o<0&&t.animate({scrollTop:"+="+o},50)}},a=$("<div></div>",{class:"projects-dialog-project-list-inner-container"}).appendTo(e),l=$("<ol>",{class:"projects-dialog-project-list"}).appendTo(a).editableList({addButton:!1,height:"auto",scrollOnAdd:!1,addItem:function(a,e,s){var t=$("<div></div>",{class:"projects-dialog-project-list-entry"}).appendTo(a);if($('<span class="projects-dialog-project-list-entry-icon"><i class="fa fa-archive"></i></span>').appendTo(t),$('<span class="projects-dialog-project-list-entry-name" style=""></span>').text(s.name).appendTo(t),!B||B.name!==s.name||(t.addClass("projects-list-entry-current"),$('<span class="projects-dialog-project-list-entry-current">'+RED._("projects.create-project-list.current")+"</span>").appendTo(t),!1!==r.canSelectActive)){t.addClass("selectable");var n=$('<div class="projects-dialog-project-list-entry-tools"></div>').appendTo(t);$('<button class="editor-button editor-button-small" style="float: right;"><i class="fa fa-trash"></i></button>').appendTo(n).click(function(e){var t,n,o,i;e.stopPropagation(),e.preventDefault(),t=a,n=s.name,o=function(e){e||a.fadeOut(300,function(){l.editableList("removeItem",s),r.delete&&r.delete(s)})},i=$("<div>").css({background:"white",position:"absolute",top:0,right:0,bottom:0,left:"100%",overflow:"hidden",padding:"5px 20px",transition:"left 0.4s",whitespace:"nowrap",width:"1000px"}).click(function(e){e.stopPropagation()}).appendTo(t),$("<span>").css({lineHeight:"40px"}).text(RED._("projects.delete.confirm")).appendTo(i),$('<button style="margin-left:20px" class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(i).click(function(e){e.stopPropagation(),i.remove(),o(!0)}),$('<button style="margin-left:20px" class="editor-button primary">'+RED._("common.label.delete")+"</button>").appendTo(i).click(function(e){e.stopPropagation(),i.remove(),U({url:"projects/"+n,type:"DELETE",responses:{200:function(e){o(!1)},400:{unexpected_error:function(e){i.remove(),o(!0)}}}})}),setTimeout(function(){i.css("left",0)},50)}),a.click(function(e){$(".projects-dialog-project-list-entry").removeClass("selected"),t.addClass("selected"),o=a.parent(),r.select&&r.select(s),d(),i.focus()}),r.dblclick&&a.dblclick(function(e){e.preventDefault(),r.dblclick(s)})}},filter:function(e){return""===t||-1!==e.name.toLowerCase().indexOf(t)}});return $.getJSON("projects",function(e){e.projects.forEach(function(e){l.editableList("addItem",{name:e})})}),e}({canSelectActive:!1,dblclick:function(e){A=e,$("#projects-dialog-create").click()},select:function(e){A=e,o()},delete:function(e){s&&delete s[e.name],A=null,o()}}).appendTo(t),t=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty projects-dialog-screen-create-row-clone"></div>').appendTo(n),$('<label for="projects-dialog-screen-create-project-name">'+RED._("projects.create.project-name")+"</label>").appendTo(t);var l=$('<div style="position:relative;"></div>').appendTo(t);T=$('<input id="projects-dialog-screen-create-project-name" type="text"></input>').appendTo(l);var c,p,u=$('<div class="projects-dialog-screen-input-status"></div>').appendTo(l),f=!1,h="",g="";T.on("change keyup paste",function(){if(f=T.val()!==h,p)clearTimeout(p);else if(f&&(u.empty(),$('<img src="red/images/spin.svg"/>').appendTo(u),""===T.val()))return void o();p=setTimeout(function(){o(),p=null},300)}),P=$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.create.must-contain")+"</small></label>").appendTo(t).find("small"),t=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(n),$('<label for="projects-dialog-screen-create-project-desc">'+RED._("projects.create.desc")+"</label>").appendTo(t),_=$('<input id="projects-dialog-screen-create-project-desc" type="text">').appendTo(t),$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.create.opt")+"</small></label>").appendTo(t),t=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(n),$('<label for="projects-dialog-screen-create-project-file">'+RED._("projects.create.flow-file")+"</label>").appendTo(t),l=$('<div style="position:relative;"></div>').appendTo(t),k=$('<input id="projects-dialog-screen-create-project-file" type="text">').val("flow.json").on("change keyup paste",o).appendTo(l),$('<div class="projects-dialog-screen-input-status"></div>').appendTo(l),$('<label class="projects-edit-form-sublabel"><small>*.json</small></label>').appendTo(t),t=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-empty"></div>').appendTo(n),$("<label>"+RED._("projects.create.credentials")+"</label>").appendTo(t);var v=$('<div style="width: 550px">').appendTo(t),m=$('<div style="min-height:150px; box-sizing: border-box; float: right; vertical-align: top; width: 331px; margin-left: -1px; padding: 15px; margin-top: -15px; border: 1px solid #ccc; border-radius: 3px; display: inline-block">').appendTo(v),b=$('<div style="vertical-align: top; width: 220px; display: inline-block">').appendTo(v),y=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid #ccc;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: white;"></div>').appendTo(b);$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" checked style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="enabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-lock"></i> <span style="vertical-align: middle;">'+RED._("projects.create.enable-encryption")+"</span></label>").appendTo(y);var w=$('<div class="form-row" style="padding: 7px 8px 3px 8px;border: 1px solid white;border-radius: 4px;border-top-right-radius: 0;border-bottom-right-radius: 0;border-right-color: #ccc; "></div>').appendTo(b);$('<label class="projects-edit-form-inline-label" style="margin-left: 5px"><input type="radio" style="vertical-align: middle; margin-top:0; margin-right: 10px;" name="projects-encryption-type" value="disabled"> <i style="font-size: 1.4em; margin-right: 8px; vertical-align: middle; color: #888;" class="fa fa-unlock"></i> <span style="vertical-align: middle;">'+RED._("projects.create.disable-encryption")+"</span></label>").appendTo(w),b.find("input[name=projects-encryption-type]").click(function(e){var t,n;"enabled"===$(this).val()?(t=y,n=w,$(".projects-encryption-enabled-row").show(),$(".projects-encryption-disabled-row").hide(),"custom"===$("input[name=projects-encryption-key]:checked").val()&&S.focus()):(n=y,t=w,$(".projects-encryption-enabled-row").hide(),$(".projects-encryption-disabled-row").show()),t.css({borderColor:"#ccc",borderRightColor:"white"}),n.css({borderColor:"white",borderRightColor:"#ccc"}),o()}),t=$('<div class="form-row projects-encryption-enabled-row"></div>').appendTo(m),$('<label class="projects-edit-form-inline-label">'+RED._("projects.create.encryption-key")+"</label>").appendTo(t),(S=$('<input type="password"></input>').appendTo(t)).on("change keyup paste",o),$('<label class="projects-edit-form-sublabel"><small>'+RED._("projects.create.desc0")+"</small></label>").appendTo(t),t=$('<div class="form-row projects-encryption-disabled-row"></div>').hide().appendTo(m),$('<div class="" style="padding: 5px 20px;"><i class="fa fa-warning"></i> '+RED._("projects.create.desc1")+"</div>").appendTo(t),m.find("input[name=projects-encryption-key]").click(function(){var e=$(this).val();S.attr("disabled","default"===e),"custom"===e&&S.focus(),o()}),t=$('<div class="hide form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(n),$('<label for="projects-dialog-screen-create-project-repo">'+RED._("projects.create.git-url")+"</label>").appendTo(t),C=$('<input id="projects-dialog-screen-create-project-repo" type="text" placeholder="https://git.example.com/path/my-project.git"></input>').appendTo(t),$('<label id="projects-dialog-screen-create-project-repo-label" class="projects-edit-form-sublabel"><small>'+RED._("projects.create.protocols")+"</small></label>").appendTo(t);var D=!1,E="";C.on("change keyup paste",function(){D=!0;var e=$(this).val();E!==e&&$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.protocols"));var t=/\/([^/]+?)(?:\.git)?$/.exec(E=e);if(t){var n=T.val();""!==n&&n!==g||(g=t[1],T.val(g),T.change())}o()});var R=$('<div class="hide projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').hide().appendTo(n);t=$('<div class="form-row projects-dialog-screen-create-row-auth-error"></div>').hide().appendTo(R),$('<div><i class="fa fa-warning"></i> '+RED._("projects.create.auth-failed")+"</div>").appendTo(t),t=$('<div class="hide form-row projects-dialog-screen-create-row-creds"></div>').hide().appendTo(R),l=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(t),$('<label for="projects-dialog-screen-create-project-repo-user">'+RED._("projects.create.username")+"</label>").appendTo(l),O=$('<input id="projects-dialog-screen-create-project-repo-user" type="text"></input>').appendTo(l),l=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(t),$('<label for="projects-dialog-screen-create-project-repo-pass">'+RED._("projects.create.password")+"</label>").appendTo(l),L=$('<input id="projects-dialog-screen-create-project-repo-pass" type="password"></input>').appendTo(l),t=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').hide().appendTo(R),l=$('<div style="width: calc(50% - 10px); display:inline-block;"></div>').appendTo(t),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.ssh-key")+"</label>").appendTo(l),N=$("<select>",{style:"width: 100%"}).appendTo(l),$.getJSON("settings/user/keys",function(e){var t=0;e.keys.forEach(function(e){N.append($("<option></option>").val(e.name).text(e.name)),t++}),0===t?(N.addClass("input-error"),N.attr("disabled",!0),x.show()):(N.removeClass("input-error"),N.attr("disabled",!1),x.hide())}),l=$('<div style="width: calc(50% - 10px); margin-left: 20px; display:inline-block;"></div>').appendTo(t),$('<label for="projects-dialog-screen-create-project-repo-passphrase">'+RED._("projects.create.passphrase")+"</label>").appendTo(l),I=$('<input id="projects-dialog-screen-create-project-repo-passphrase" type="password"></input>').appendTo(l),l=$('<div class="form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-sshkey"></div>').appendTo(R);var x=$('<div class="projects-dialog-screen-create-row-auth-error-no-keys"></div>').hide().appendTo(l);switch($('<div class="form-row"><i class="fa fa-warning"></i> '+RED._("projects.create.desc2")+"</div>").appendTo(x),l=$('<div style="text-align: center">').appendTo(x),$('<button class="editor-button">'+RED._("projects.create.add-ssh-key")+"</button>").appendTo(l).click(function(e){e.preventDefault(),$("#projects-dialog-cancel").click(),RED.userSettings.show("gitconfig"),setTimeout(function(){$("#user-settings-gitconfig-add-key").click()},500)}),t=$('<div class="hide form-row projects-dialog-screen-create-row projects-dialog-screen-create-row-clone"></div>').appendTo(n),$("<label>"+RED._("projects.create.credentials-encryption-key")+"</label>").appendTo(t),j=$('<input type="password"></input>').appendTo(t),e.screen||"empty"){case"empty":a.click();break;case"open":i.click();break;case"clone":d.click()}return setTimeout(function(){"open"!==(e.screen||"empty")?T.focus():$("#projects-dialog-project-list-search").focus()},50),n},buttons:function(e){var t;switch(e.screen||"empty"){case"open":t=RED._("projects.create.open");break;case"empty":t=RED._("projects.create.create");break;case"clone":t=RED._("projects.create.clone")}return[{id:"projects-dialog-cancel",text:RED._("common.label.cancel"),click:function(){$(this).dialog("close")}},{id:"projects-dialog-create",text:t,class:"primary disabled",disabled:!0,click:function(){var e,t,n=$(".projects-dialog-screen-create-type.selected").data("type"),o={name:T.val()};if("empty"===n){o.summary=_.val(),o.files={flow:k.val()};var i=$("input[name=projects-encryption-type]:checked").val();o.credentialSecret="enabled"===i&&S.val()}else if("copy"===n)o.copy=(void 0).name;else if("clone"===n){o.credentialSecret=j.val();var a=C.val();if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(a)){var s=N.val();if(!s)return void console.log(RED._("projects.create.cant-get-ssh-key-path"));o.git={remotes:{origin:{url:a,keyFile:s,passphrase:I.val()}}}}else o.git={remotes:{origin:{url:a,username:O.val(),password:L.val()}}}}else if("open"===n)return e=A.name,t=function(e,t){u.dialog("close"),e&&"credentials_load_failed"!==e.error&&console.log(RED._("projects.create.unexpected_error"),e)},RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(e),void U({url:"projects/"+e,type:"PUT",requireCleanWorkspace:!0,responses:{200:function(e){t(null,e)},400:{"*":t}}},{active:!0}).then(function(){RED.events.emit("project:change",{name:e})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)});$(".projects-dialog-screen-create-row-auth-error").hide(),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.protocols")),O.removeClass("input-error"),L.removeClass("input-error"),N.removeClass("input-error"),I.removeClass("input-error"),RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(o.name),U({url:"projects",type:"POST",handleAuthFail:!1,responses:{200:function(e){u.dialog("close")},400:{project_exists:function(e){console.log(RED._("projects.create.already-exists-2"))},git_error:function(e){console.log(RED._("projects.create.git-error"),e)},git_connection_failed:function(e){C.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.con-failed"))},git_not_a_repository:function(e){C.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.not-git"))},git_repository_not_found:function(e){C.addClass("input-error"),$("#projects-dialog-screen-create-project-repo-label small").text(RED._("projects.create.no-resource"))},git_auth_failed:function(e){$(".projects-dialog-screen-create-row-auth-error").show(),O.addClass("input-error"),L.addClass("input-error"),N.addClass("input-error"),I.addClass("input-error")},missing_flow_file:function(e){u.dialog("close")},project_empty:function(e){u.dialog("close")},credentials_load_failed:function(e){u.dialog("close")},"*":function(e){v(e),$(u).dialog("close")}}}},o).then(function(){RED.events.emit("project:change",{name:name})}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]}}}}function m(e,t){u||RED.projects.init();var n=s[e],o=n.content(t||{});a.empty();var i=n.buttons;"function"==typeof i&&(i=i(t||{})),u.dialog("option","buttons",i),a.append(o),u.dialog("option","title",n.title||""),u.dialog("open"),u.dialog({position:{my:"center top",at:"center top+10%",of:window}})}function e(e){if(RED.nodes.dirty())var t=RED._("projects.require-clean.confirm"),n=RED.notify(t,{type:"info",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){n.close(),e(!0)}},{text:RED._("common.label.cont"),click:function(){n.close(),e(!1)}}]})}function U(c,p){var t,n;if(c.requireCleanWorkspace&&RED.nodes.dirty())return e(function(e){e?c.cancel&&(c.cancel(),n&&n()):(delete c.requireCleanWorkspace,U(c,p).then(function(){t&&t()}).always(function(){n&&n()}))}),{then:function(e){return t=e,{always:function(e){n=e}}},always:function(e){n=e}};var u,f,o=Date.now();return $(".projects-dialog-spinner").show(),$("#projects-dialog").parent().find(".ui-dialog-buttonset").children().css("visibility","hidden"),p&&(c.data=JSON.stringify(p),c.contentType="application/json; charset=utf-8"),$.ajax(c).done(function(e,t,n){c.responses&&c.responses[200]&&(u=c.responses[200],f=e)}).fail(function(n,e,t){if(c.responses&&c.responses[n.status]){var o=c.responses[n.status];if("function"==typeof o)return void(f={error:(u=o).statusText});if(!1!==c.handleAuthFail&&"git_auth_failed"===n.responseJSON.error){var i=B.git.remotes[n.responseJSON.remote||c.remote||"origin"].fetch,a=$('<div><div class="form-row">'+RED._("projects.send-req.auth-req")+':</div><div class="form-row"><div style="margin-left: 20px;">'+i+"</div></div></div>"),s=!1;if(/^https?:\/\//.test(i))$('<div class="form-row"><label for="projects-user-auth-username">'+RED._("projects.send-req.username")+'</label><input id="projects-user-auth-username" type="text"></input></div><div class="form-row"><label for=projects-user-auth-password">'+RED._("projects.send-req.password")+'</label><input id="projects-user-auth-password" type="password"></input></div>').appendTo(a);else if(/^(?:ssh|[\d\w\.\-_]+@[\w\.]+):(?:\/\/)?/.test(i)){s=!0;var r=$('<div class="form-row"></div>').appendTo(a);$('<label for="projects-user-auth-key">SSH Key</label>').appendTo(r);var d=$('<select id="projects-user-auth-key">').width("70%").appendTo(r);$.getJSON("settings/user/keys",function(e){e.keys.forEach(function(e){d.append($("<option></option>").val(e.name).text(e.name)),0})}),r=$('<div class="form-row"></div>').appendTo(a),$('<label for="projects-user-auth-passphrase">'+RED._("projects.send-req.passphrase")+"</label>").appendTo(r),$('<input id="projects-user-auth-passphrase" type="password"></input>').appendTo(r)}var l=RED.notify(a,{type:"error",fixed:!0,modal:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){l.close()}},{text:'<span><i class="fa fa-refresh"></i> '+RED._("projects.send-req.retry")+"</span>",click:function(){p=p||{};var e={};s?(e.keyFile=$("#projects-user-auth-key").val(),e.passphrase=$("#projects-user-auth-passphrase").val()):(e.username=$("#projects-user-auth-username").val(),e.password=$("#projects-user-auth-password").val());var t=function(e){e?(console.log(RED._("projects.send-req.update-failed")),console.log(e)):(U(c,p),l.close())};U({url:"projects/"+B.name+"/remotes/"+(n.responseJSON.remote||c.remote||"origin"),type:"PUT",responses:{0:function(e){t(e)},200:function(e){t(null)},400:{unexpected_error:function(e){t(e)}}}},{auth:e})}}]});return}if(o[n.responseJSON.error])return u=o[n.responseJSON.error],void(f=n.responseJSON);if(o["*"])return u=o["*"],void(f=n.responseJSON)}console.log(RED._("projects.send-req.unhandled")+":"),console.log(n),console.log(e),console.log(t)}).always(function(){var e=Date.now()-o;e=Math.max(0,500-e),setTimeout(function(){$(".projects-dialog-spinner").hide(),$("#projects-dialog").parent().find(".ui-dialog-buttonset").children().css("visibility",""),u&&u(f)},e)})}function n(i){var a,n="",o=[],s="",r=$('<div class="projects-branch-list">').appendTo(i.container),d=$('<input type="text">').attr("placeholder",i.placeholder).appendTo(r).searchBox({delay:200,change:function(){n=$(this).val(),/(\.\.|\/\.|[?*[~^: \\]|\/\/|\/.$|\/$)/.test(n)?(a.hasClass("input-error")||(a.addClass("input-error"),a.find("i").addClass("fa-warning").removeClass("fa-code-fork")),a.find("span").text(RED._("projects.create-branch-list.invalid")+": "+s+n)):(a.hasClass("input-error")&&(a.removeClass("input-error"),a.find("i").removeClass("fa-warning").addClass("fa-code-fork")),a.find(".sidebar-version-control-branch-list-entry-create-name").text(s+n)),l.editableList("filter")}}),l=$("<ol>",{style:"height: 130px;"}).appendTo(r);return l.editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){var o=$('<div class="sidebar-version-control-branch-list-entry">').appendTo(e);n.hasOwnProperty("commit")?($('<i class="fa fa-code-fork"></i>').appendTo(o),$("<span>").text(n.name).appendTo(o),n.current&&(o.addClass("selected"),$('<span class="current"></span>').text(i.currentLabel||RED._("projects.create-branch-list.current")).appendTo(o))):(a=o,$('<i class="fa fa-code-fork"></i>').appendTo(o),$("<span>").text(RED._("projects.create-branch-list.create")+":").appendTo(o),$('<div class="sidebar-version-control-branch-list-entry-create-name" style="margin-left: 10px;">').text(n.name).appendTo(o)),o.click(function(e){if(e.preventDefault(),!$(this).hasClass("input-error")){var t={};n.hasOwnProperty("commit")?($(this).hasClass("selected")&&(t.current=!0),t.name=n.name):(t.name=d.val(),t.create=!0,i.remote&&(t.name=i.remote()+"/"+t.name)),i.onselect&&i.onselect(t)}})},filter:function(e){var t=!e.hasOwnProperty("commit");return t&&""!==n&&-1===o.indexOf(s+n)||!t&&-1!==e.name.indexOf(n)}}),{refresh:function(e){d.searchBox("value",""),l.editableList("empty");var t=Date.now(),n=c(r).addClass("projects-dialog-spinner-contain");s=i.remote?i.remote()+"/":"",U({url:e,type:"GET",responses:{0:function(e){console.log(e)},200:function(e){o=e.branches,e.branches.forEach(function(e){l.editableList("addItem",e)}),l.editableList("addItem",{}),setTimeout(function(){n.remove()},Math.max(300-(Date.now()-t),0))},400:{git_connection_failed:function(e){RED.notify(e.message,"error")},git_not_a_repository:function(e){RED.notify(e.message,"error")},git_repository_not_found:function(e){RED.notify(e.message,"error")},unexpected_error:function(e){v(e)}}}})},filter:function(){l.editableList("filter")},focus:function(){d.focus()}}}function c(e){return $('<div class="projects-dialog-spinner"><img src="red/images/spin.svg"/></div>').appendTo(e)}function o(){createProjectOptions={},B?m("create",{screen:"empty"}):m("welcome")}return{init:function(){u=$('<div id="projects-dialog" class="hide node-red-dialog projects-edit-form"><form class="form-horizontal"></form><div class="projects-dialog-spinner hide"><img src="red/images/spin.svg"/></div></div>').appendTo("body").dialog({modal:!0,autoOpen:!1,width:600,resizable:!1,open:function(e){$(this).parent().find(".ui-dialog-titlebar-close").hide()},close:function(e){}}),a=u.find("form"),RED.actions.add("core:new-project",RED.projects.newProject),RED.actions.add("core:open-project",RED.projects.selectProject),RED.actions.add("core:show-project-settings",RED.projects.settings.show);var e={sendRequest:U,createBranchList:n,addSpinnerOverlay:c,reportUnexpectedError:v};RED.projects.settings.init(e),RED.projects.userSettings.init(e),RED.sidebar.versionControl.init(e),t()},showStartup:function(){RED.user.hasPermission("projects.write")?m("welcome"):RED.notify(RED._("user.errors.notAuthorized"),"error")},newProject:function(){if(RED.user.hasPermission("projects.write"))return RED.nodes.dirty()?e(function(e){e||o()}):void o();RED.notify(RED._("user.errors.notAuthorized"),"error")},selectProject:function(){RED.user.hasPermission("projects.write")?m("create",{screen:"open"}):RED.notify(RED._("user.errors.notAuthorized"),"error")},showCredentialsPrompt:function(){RED.user.hasPermission("projects.write")?RED.projects.settings.show("settings"):RED.notify(RED._("user.errors.notAuthorized"),"error")},showFilesPrompt:function(){RED.user.hasPermission("projects.write")?RED.projects.settings.show("settings"):RED.notify(RED._("user.errors.notAuthorized"),"error")},showProjectDependencies:function(){RED.projects.settings.show("deps")},createDefaultFileSet:function(){if(!B)throw new Error(RED._("projects.create-default-file-set.no-active"));if(!B.empty)throw new Error(RED._("projects.create-default-file-set.no-empty"));RED.user.hasPermission("projects.write")?(createProjectOptions={},m("default-files",{existingProject:!0})):RED.notify(RED._("user.errors.notAuthorized"),"error")},createDefaultPackageFile:function(){RED.deploy.setDeployInflight(!0),RED.projects.settings.switchProject(B.name),U({url:"projects/"+B.name,type:"PUT",requireCleanWorkspace:!0,handleAuthFail:!1,responses:{200:function(e){},400:{git_error:function(e){console.log(RED._("projects.create-default-file-set.git-error"),e)},missing_flow_file:function(e){$(u).dialog("close")},"*":function(e){v(e),$(u).dialog("close")}}}},{initialise:!0}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})},refresh:function(t){$.getJSON("projects",function(e){e.active?$.getJSON("projects/"+e.active,function(e){B=e,RED.sidebar.versionControl.refresh(!0),t&&t(B)}):t&&t(null)})},editProject:function(){RED.projects.settings.show()},getActiveProject:function(){return B}}}(),RED.projects.settings=function(){var S,O,t=700,n=!1,d=[];function o(e){d.push(e)}function s(e,t){var n,o;t.empty(),n=e.description?marked(e.description):'<span class="node-info-none">No description available</span>',(o=$('<span class="bidiAware" dir="'+RED.text.bidi.resolveBaseTextDir(n)+'">'+n+"</span>"),$(o).find("a").each(function(e){var t=$(this).attr("href");/^https?:/.test(t)&&$(this).attr("target","_blank")}),o).appendTo(t).find(".bidiAware").contents().filter(function(){return 3===this.nodeType&&""!==this.textContent.trim()}).wrap("<span></span>")}function c(e,t){t.empty(),e?t.text(e).removeClass("node-info-node"):t.text(RED._("sidebar.project.projectSettings.noSummaryAvailable")).addClass("node-info-none")}function i(t){var e=$('<div id="project-settings-tab-main" class="project-settings-tab-pane node-help"></div>');$("<h1>").text(t.name).appendTo(e);var n=$('<div style="position: relative">').appendTo(e),o=$("<div></div>",{style:"color: #999"}).appendTo(n);c(t.summary,o),RED.user.hasPermission("projects.write")&&$('<button class="editor-button editor-button-small" style="float: right;">'+RED._("sidebar.project.editDescription")+"</button>").prependTo(n).click(function(e){e.preventDefault(),function i(a,s,r){var d=r.prev();d.hide(),r.empty();var e=$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').appendTo(r),l=$('<input type="text" style="width: calc(100% - 150px); margin-right: 10px;">').val(s||"").appendTo(r);$('<button class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(e).click(function(e){e.preventDefault(),c(a.summary,r),d.show()}),$('<button class="editor-button">'+RED._("common.label.save")+"</button>").appendTo(e).click(function(e){e.preventDefault();var n=l.val();c(n,r);var o=O.addSpinnerOverlay(r),t=function(e,t){if(e)return o.remove(),i(a,s,r);a.summary=n,o.remove(),c(a.summary,r),d.show()};O.sendRequest({url:"projects/"+a.name,type:"PUT",responses:{0:function(e){t(e)},200:function(e){RED.sidebar.versionControl.refresh(!0),t(null)},400:{"*":function(e){O.reportUnexpectedError(e),t(e)}}}},{summary:n})})}(t,t.summary,o)}),$("<hr>").appendTo(e);var i=$('<div class="node-help" style="position: relative"></div>').appendTo(e),a=$("<div>",{style:"min-height: 200px"}).appendTo(i);return s(t,a),RED.user.hasPermission("projects.write")&&$('<button class="editor-button editor-button-small" style="float: right;">'+RED._("sidebar.project.editReadme")+"</button>").prependTo(i).click(function(e){e.preventDefault(),function o(i,a){RED.editor.editMarkdown({title:RED._("sidebar.project.editDescription"),header:$('<span><i class="fa fa-book"></i> README.md</span>'),value:i.description,complete:function(n){a.empty();var e=O.addSpinnerOverlay(a),t=function(e,t){if(e)return o(i,a);i.description=n,s(i,a)};O.sendRequest({url:"projects/"+i.name,type:"PUT",responses:{0:function(e){t(e)},200:function(e){t(null),RED.sidebar.versionControl.refresh(!0)},400:{"*":function(e){O.reportUnexpectedError(e),t(e)}}}},{description:n}).always(function(){e.remove()})}})}(t,a)}),e}function r(e,t){t.editableList("empty");var n=0;for(var o in h)h.hasOwnProperty(o)&&(t.editableList("addItem",{id:h[o].module,version:h[o].version,count:h[o].count,known:e.dependencies.hasOwnProperty(o),installed:!0}),n++,0===h[o].count&&0,e.dependencies.hasOwnProperty(o)||0);if(e.dependencies)for(var o in e.dependencies)if(e.dependencies.hasOwnProperty(o)&&!h.hasOwnProperty(o)){var i=!!RED.nodes.registry.getModule(o);t.editableList("addItem",{id:o,version:e.dependencies[o],count:0,known:!0,installed:i}),n++,i?0:0}0===n&&t.editableList("addItem",{index:0,label:RED._("sidebar.project.projectSettings.none")})}function p(e,t,n,o){var i=RED.projects.getActiveProject(),a=O.addSpinnerOverlay(t).addClass("projects-dialog-spinner-contain"),s=function(e,t){if(a.remove(),e)return o(e);i.dependencies=n,RED.sidebar.versionControl.refresh(!0),o()};O.sendRequest({url:"projects/"+i.name,type:"PUT",responses:{0:function(e){s(e)},200:function(e){RED.sidebar.versionControl.refresh(!0),s(null)},400:{"*":function(e){s(e)}}}},{dependencies:n})}function a(l){var t=$('<div id="project-settings-tab-deps" class="project-settings-tab-pane node-help"></div>');RED.user.hasPermission("projects.write")&&$('<button class="editor-button editor-button-small" style="margin-top:10px;float: right;">'+RED._("sidebar.project.projectSettings.edit")+"</button>").appendTo(t).click(function(e){e.preventDefault(),function o(i,e,a,s){var t=e||JSON.stringify(i.dependencies||{},"",4);"{}"===t&&(t="{\n\n}"),RED.editor.editJSON({title:RED._("sidebar.project.editDependencies"),value:t,requireValid:!0,complete:function(t){try{var n=JSON.parse(t);p(0,a,n,function(e){if(e)return o(i,t,a,s);i.dependencies=n,r(i,s)})}catch(e){o(i,t,a,s)}}})}(l,null,t,c)});var c=$("<ol>",{style:"position: absolute;top: 60px;bottom: 20px;left: 20px;right: 20px;"}).appendTo(t);return c.editableList({addButton:!1,addItem:function(n,e,o){var i=$("<div>",{class:"palette-module-header"}).appendTo(n);if(o.label)0===o.index?i.addClass("red-ui-search-empty"):n.parent().addClass("palette-module-section"),i.text(o.label);else{i.addClass("palette-module-header"),o.installed?0===o.count?i.addClass("palette-module-unused"):o.known||i.addClass("palette-module-unknown"):i.addClass("palette-module-not-installed"),o.element=i;var t=$('<div class="palette-module-meta palette-module-name"></div>').appendTo(i),a="fa-cube";o.installed||(a="fa-warning");var s=$('<i class="fa '+a+'"></i>').appendTo(t);o.icon=s,$("<span>").text(o.id).appendTo(t);var r=$('<div class="palette-module-meta palette-module-version"><i class="fa fa-tag"></i></div>').appendTo(i);$("<span>").text(o.version).appendTo(r);r=$('<div class="palette-module-meta"></div>').appendTo(i);var d=$('<div class="palette-module-button-group"></div>').appendTo(r);RED.user.hasPermission("projects.write")&&(o.installed||!1===RED.settings.theme("palette.editable")?o.known&&0===o.count?$('<a href="#" class="editor-button editor-button-small">'+RED._("sidebar.project.projectSettings.removeFromProject")+"</a>").appendTo(d).click(function(e){e.preventDefault();var t=$.extend(!0,{},l.dependencies);delete t[o.id],p(0,n,t,function(e){e?console.log(e):n.fadeOut(200,function(){c.editableList("removeItem",o)})})}):o.known||$('<a href="#" class="editor-button editor-button-small">'+RED._("sidebar.project.projectSettings.addToProject")+"</a>").appendTo(d).click(function(e){e.preventDefault();var t=$.extend(!0,{},l.dependencies);t[o.id]=h[o.id].version,p(0,n,t,function(e){e?console.log(e):(d.remove(),i.removeClass("palette-module-unknown"))})}):$('<a href="#" class="editor-button editor-button-small">'+RED._("sidebar.project.projectSettings.install")+"</a>").appendTo(d).click(function(e){e.preventDefault(),RED.palette.editor.install(o,n,function(e){if(!e){o.installed=!0;RED.utils.addSpinnerOverlay(n,!0);setTimeout(function(){c.editableList("removeItem",o),h={},RED.nodes.eachNode(f),RED.nodes.eachConfig(f),o.count=h[o.id].count,c.editableList("addItem",o)},500)}})}))}},sort:function(e,t){return e.id.localeCompare(t.id)}}),r(l,c),t}function L(e,t,o,a,s){var r=$('<div class="project-file-listing-container"></div>',{style:"position: relative; min-height: 175px; height: 175px;"}).hide().appendTo(e),d=O.addSpinnerOverlay(r);return $.getJSON("projects/"+t.name+"/files",function(t){var e=Object.keys(t);e=e.filter(function(e){return!t[e].status||!/D/.test(t[e].status)});var n={};e.sort(),e.forEach(function(e){e.split("/").reduce(function(e,t,n,o){if(t)return n<o.length-1?e[t]=e[t]||{}:e[t]=!0,e[t]},n)});var i=function(e,t,n){var o={name:e||"/",path:n+(n?"/":"")+e};return!0===t?o.type="f":(o.type="d",o.children=[],o.path=o.path,Object.keys(t).forEach(function(e){o.children.push(i(e,t[e],o.path))}),o.children.sort(function(e,t){return e.hasOwnProperty("children")&&!t.hasOwnProperty("children")?-1:!e.hasOwnProperty("children")&&t.hasOwnProperty("children")?1:e.name.localeCompare(t.name)})),o};n=i("",n,"");!function s(e,t,r,d,l,n){n=n||"";var o=$("<ol>",{class:"projects-dialog-file-list",style:n}).appendTo(e).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){var o=$("<div></div>",{class:"projects-dialog-file-list-entry"}).appendTo(e);if(n.children){if($('<span class="projects-dialog-file-list-entry-folder"><i class="fa fa-angle-right"></i> <i class="fa fa-folder-o"></i></span>').appendTo(o),0<n.children.length){var i=$("<div></div>",{style:"padding-left: 20px;"}).appendTo(e);0===r.indexOf(n.path+"/")?o.addClass("expanded"):i.hide(),s(i,n.children,r,d,l),o.addClass("selectable"),o.click(function(e){$(this).hasClass("expanded")?($(this).removeClass("expanded"),i.slideUp(200)):($(this).addClass("expanded"),i.slideDown(200))})}}else{var a="fa-file-o";/\.json$/i.test(n.name)?a="fa-file-code-o":/\.md$/i.test(n.name)?a="fa-book":/^\.git/i.test(n.name)&&(a="fa-code-fork",o.addClass("projects-dialog-file-list-entry-file-type-git")),$('<span class="projects-dialog-file-list-entry-file"> <i class="fa '+a+'"></i></span>').appendTo(o),d.test(n.name)?(o.addClass("selectable"),n.path===r&&o.addClass("selected"),o.click(function(e){$(".projects-dialog-file-list-entry.selected").removeClass("selected"),$(this).addClass("selected"),l(n.path)}),o.dblclick(function(e){e.preventDefault(),l(n.path,!0)})):o.addClass("unselectable")}$('<span class="projects-dialog-file-list-entry-name" style=""></span>').text(n.name).appendTo(o)}});n||o.parent().css("overflow-y","");t.forEach(function(e){o.editableList("addItem",e)})}(r,n.children,o,a,s,"height: 175px"),d.remove()}),r}function l(s,e){$("<h3></h3>").text(RED._("sidebar.project.projectSettings.versionControl")).appendTo(e),function(d,e){var t=$('<div class="user-settings-section"></div>').appendTo(e);$("<h4></h4>").text(RED._("sidebar.project.projectSettings.branches")).appendTo(t);var n=$('<div class="user-settings-row projects-dialog-list"></div>').appendTo(t),l=$("<ol>").appendTo(n).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(i,e,a){var t=$('<div class="projects-dialog-list-entry">').appendTo(i);if(a.empty)return t.addClass("red-ui-search-empty"),void t.text(RED._("sidebar.project.projectSettings.noBranches"));a.current&&t.addClass("current"),$('<span class="entry-icon"><i class="fa fa-code-fork"></i></span>').appendTo(t);var n=$("<span>").appendTo(t),o=$("<div>").appendTo(n);if($('<span class="entry-name">').text(a.name).appendTo(o),a.commit&&$('<span class="entry-detail">').text(a.commit.sha).appendTo(o),a.remote){var s=$("<div>").appendTo(n);$('<span class="entry-detail entry-remote-name">').text(a.remote||"").appendTo(s),0<a.status.ahead+a.status.behind&&$('<span class="entry-detail"><i class="fa fa-long-arrow-up"></i> <span>'+a.status.ahead+'</span> <i class="fa fa-long-arrow-down"></i> <span>'+a.status.behind+"</span></span>").appendTo(s)}if(!a.current){var r=$('<span class="entry-tools">').appendTo(t);$('<button class="editor-button editor-button-small"><i class="fa fa-trash"></i></button>').appendTo(r).click(function(e){e.preventDefault();var n=O.addSpinnerOverlay(i).addClass("projects-dialog-spinner-contain"),o=RED.notify(RED._("sidebar.project.projectSettings.deleteConfirm",{name:a.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){n.remove(),o.close()}},{text:"Delete branch",click:function(){o.close();var t={url:"projects/"+d.name+"/branches/"+a.name,type:"DELETE",responses:{200:function(e){i.fadeOut(200,function(){l.editableList("removeItem",a),n.remove()})},400:{git_delete_branch_unmerged:function(e){o=RED.notify(RED._("sidebar.project.projectSettings.unmergedConfirm",{name:a.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){n.remove(),o.close()}},{text:RED._("sidebar.project.projectSettings.deleteUnmergedBranch"),click:function(){t.url+="?force=true",o.close(),O.sendRequest(t)}}]})},"*":function(e){O.reportUnexpectedError(e),n.remove()}}}};O.sendRequest(t)}}]})})}}});$.getJSON("projects/"+d.name+"/branches",function(e){e.branches&&(0<e.branches.length?(e.branches.sort(function(e,t){return e.current?-1:t.current?1:e.name.localeCompare(t.name)}),e.branches.forEach(function(e){l.editableList("addItem",e)})):l.editableList("addItem",{empty:!0}))})}(s,e);var t=$('<div class="user-settings-section"></div>').appendTo(e),n=$("<h4></h4>").text(RED._("sidebar.project.projectSettings.gitRemotes")).appendTo(t),o=$('<button class="editor-button editor-button-small" style="float: right; margin-right: 10px;">'+RED._("sidebar.project.projectSettings.addRemote")+"</button>").appendTo(n).click(function(e){o.attr("disabled",!0),a.slideDown(200,function(){a[0].scrollIntoView(),d?(h.val("origin"),g.focus()):h.focus(),p()})}),r={empty:!0},d=!0,i=$('<div class="user-settings-row"></div>').appendTo(t),a=$('<div class="projects-dialog-list-dialog"></div>').hide().appendTo(i);i=$('<div class="user-settings-row projects-dialog-list"></div>').appendTo(t);var l=$("<ol>").appendTo(i);l.editableList({addButton:!1,height:"auto",addItem:function(o,e,i){var t=$('<div class="projects-dialog-list-entry">').appendTo(o);if(i.empty)return t.addClass("red-ui-search-empty"),void t.text(RED._("sidebar.project.projectSettings.noRemotes"));$('<span class="entry-icon"><i class="fa fa-globe"></i></span>').appendTo(t);var n=$("<span>").appendTo(t);$('<div class="entry-name">').text(i.name).appendTo(n),i.urls.fetch===i.urls.push?$('<div class="entry-detail">').text(i.urls.fetch).appendTo(n):($('<div class="entry-detail">').text("fetch: "+i.urls.fetch).appendTo(n),$('<div class="entry-detail">').text("push: "+i.urls.push).appendTo(n));var a=$('<span class="entry-tools">').appendTo(t);$('<button class="editor-button editor-button-small"><i class="fa fa-trash"></i></button>').appendTo(a).click(function(e){e.preventDefault();var t=O.addSpinnerOverlay(o).addClass("projects-dialog-spinner-contain"),n=RED.notify(RED._("sidebar.project.projectSettings.deleteRemoteConfrim",{name:i.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.remove(),n.close()}},{text:RED._("sidebar.project.projectSettings.deleteRemote"),click:function(){n.close(),s.git.branches.remote&&0===s.git.branches.remote.indexOf(i.name+"/")&&delete s.git.branches.remote,s.git.branches.remoteAlt&&0===s.git.branches.remoteAlt.indexOf(i.name+"/")&&delete s.git.branches.remoteAlt;var e={url:"projects/"+s.name+"/remotes/"+i.name,type:"DELETE",responses:{200:function(e){o.fadeOut(200,function(){l.editableList("removeItem",i),setTimeout(t.remove,100),0===e.remotes.length?(delete s.git.remotes,d=!0,l.editableList("addItem",r)):(s.git.remotes={},e.remotes.forEach(function(e){var t=e.name;delete e.name,s.git.remotes[t]=e})),delete s.git.branches.remoteAlt,RED.sidebar.versionControl.refresh()})},400:{"*":function(e){O.reportUnexpectedError(e),t.remove()}}}};O.sendRequest(e)}}]})})}});var c,p=function(){var e=/^[a-zA-Z0-9\-_]+$/.test(h.val()),t=g.val(),n=0<t.length&&!/\s/.test(t);/^https?:\/\/[^/]+@/i.test(t)?(v.text(RED._("sidebar.project.projectSettings.urlRule2")),n=!1):v.text(RED._("sidebar.project.projectSettings.urlRule")),y.attr("disabled",!e||!n),h.toggleClass("input-error",u&&!e),g.toggleClass("input-error",f&&!n),c&&(c.close(),c=null)},u=!1,f=!1;$('<div class="projects-dialog-list-dialog-header">').text(RED._("sidebar.project.projectSettings.addRemote2")).appendTo(a),i=$('<div class="user-settings-row"></div>').appendTo(a),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.remoteName")).appendTo(i);var h=$('<input type="text">').appendTo(i).on("change keyup paste",function(){u=!0,p()});$('<label class="projects-edit-form-sublabel"><small>'+RED._("sidebar.project.projectSettings.nameRule")+"</small></label>").appendTo(i).find("small"),i=$('<div class="user-settings-row"></div>').appendTo(a),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.url")).appendTo(i);var g=$('<input type="text">').appendTo(i).on("change keyup paste",function(){f=!0,p()}),v=$('<label class="projects-edit-form-sublabel"><small>'+RED._("sidebar.project.projectSettings.urlRule")+"</small></label>").appendTo(i).find("small"),m=function(){o.attr("disabled",!1),a.hide(),h.val(""),g.val(""),c&&(c.close(),c=null)},b=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(a);$('<button class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(b).click(function(e){e.preventDefault(),m()});var y=$('<button class="editor-button">'+RED._("sidebar.project.projectSettings.addRemote2")+"</button>").appendTo(b).click(function(e){e.preventDefault();var t=O.addSpinnerOverlay(a).addClass("projects-dialog-spinner-contain"),n={name:h.val(),url:g.val()},o=function(e){t.remove(),e||m()};RED.deploy.setDeployInflight(!0),O.sendRequest({url:"projects/"+s.name+"/remotes",type:"POST",responses:{0:function(e){o(e)},200:function(e){s.git.remotes={},e.remotes.forEach(function(e){var t=e.name;delete e.name,s.git.remotes[t]=e}),w(),RED.sidebar.versionControl.refresh(),o()},400:{git_remote_already_exists:function(e){c=RED.popover.create({target:h,direction:"right",size:"small",content:"Remote already exists",autoClose:6e3}).open(),h.addClass("input-error"),o(e)},"*":function(e){O.reportUnexpectedError(e),o(e)}}}},n)}),w=function(){l.editableList("empty");var e=0;if(s.git.hasOwnProperty("remotes"))for(var t in s.git.remotes)s.git.remotes.hasOwnProperty(t)&&(e++,l.editableList("addItem",{name:t,urls:s.git.remotes[t]}));(d=0===e)&&l.editableList("addItem",r)};w()}function u(e){var t=$('<div id="project-settings-tab-settings" class="project-settings-tab-pane node-help"></div>');return function(i,e){var t,n=$("<h3></h3>").text(RED._("sidebar.project.projectSettings.files")).appendTo(e),a=$('<div class="user-settings-section"></div>').appendTo(e);if(RED.user.hasPermission("projects.write"))var o=$('<button class="editor-button editor-button-small" style="float: right;">'+RED._("sidebar.project.projectSettings.edit")+"</button>").appendTo(n).click(function(e){e.preventDefault(),k.show(),o.hide(),r.hide(),d.show(),l.show(),c.hide(),p.show(),d.focus(),f.addClass("uneditable-input"),$(".user-settings-row-credentials").show(),f.css("height","auto"),m.hide(),h.show()});t=$('<div class="user-settings-row"></div>').appendTo(a),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.flow")).appendTo(t);var s=$('<div class="uneditable-input" style="padding:0">').appendTo(t),r=$('<span style="display:inline-block; padding: 6px">').text(i.files.flow).appendTo(s),d=$('<input id="" type="text" style="margin-bottom: 0;width: 100%; border: none;">').val(i.files.flow).hide().appendTo(s),l=$('<button class="editor-button" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; width: 36px; height: 34px; position: absolute; top: -1px; right: -1px;"><i class="fa fa-folder-open-o"></i></button>').hide().appendTo(s).click(function(e){if($(this).hasClass("selected"))$(this).removeClass("selected"),s.find(".project-file-listing-container").slideUp(200,function(){$(this).remove(),s.css("height","")}),s.css("color","");else{$(this).addClass("selected"),s.css("color","inherit");var t=L(s,i,d.val(),/.*\.json$/,function(e,t){e&&d.val(e),t&&$(l).click(),u()});s.css("height","auto"),setTimeout(function(){t.slideDown(200)},50)}});t=$('<div class="user-settings-row"></div>').appendTo(a),$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.credentials")).appendTo(t);var c=$('<div class="uneditable-input">').text(i.files.credentials).appendTo(t),p=$('<div class="uneditable-input">').text(i.files.credentials).hide().insertAfter(c),u=function(){var e,t=d.val(),n=/^(.+?)(\.[^.]*)?$/.exec(t);n?p.text(n[1]+"_cred"+(n[2]||".json")):""===t&&p.text("");var o=""===t||/\.\./.test(t)||/\/$/.test(t);e=o||""===p.text(),E.is(":visible")&&(E.toggleClass("input-error",""===E.val()),e=e||""===E.val()),x.is(":visible")&&(x.toggleClass("input-error",""===x.val()),e=e||""===x.val()),d.toggleClass("input-error",o),p.toggleClass("input-error",""===p.text()),j.toggleClass("disabled",e),j.prop("disabled",e)};d.on("change keyup paste",u),i.files.flow||$('<span class="form-warning"><i class="fa fa-warning"></i> Missing</span>').appendTo(r),i.files.credentials||$('<span class="form-warning"><i class="fa fa-warning"></i> Missing</span>').appendTo(c),t=$('<div class="user-settings-row"></div>').appendTo(a),$("<label></label>").appendTo(t);var f=$('<span><i class="user-settings-credentials-state-icon fa"></i> <span class="user-settings-credentials-state"></span></span>').appendTo(t),h=$('<span class="button-group" style="margin-left: -72px;">').hide().appendTo(t);f.css("color","#666"),h.css("vertical-align","top");var g=$('<button class="editor-button" style="vertical-align: top; width: 36px; margin-bottom: 10px"><i class="fa fa-trash-o"></i></button>').appendTo(h).click(function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),m.hide()):(x.val(""),D.hide(),R.show(),$(this).addClass("selected"),v.removeClass("selected"),w.show(),T.show(),b.hide(),y.hide(),m.show()),u()}),v=$('<button class="editor-button" style="border-top-right-radius: 4px; border-bottom-right-radius: 4px; vertical-align: top; width: 36px; margin-bottom: 10px"><i class="fa fa-pencil"></i></button>').appendTo(h).click(function(e){e.preventDefault(),$(this).hasClass("selected")?($(this).removeClass("selected"),m.hide()):(E.val(""),x.val(""),i.settings.credentialSecretInvalid||!i.settings.credentialsEncrypted?(b.show(),y.hide(),D.hide()):(D.show(),b.hide(),y.show()),R.show(),v.addClass("selected"),g.removeClass("selected"),w.hide(),T.hide(),m.show()),u()});t=$('<div class="user-settings-row user-settings-row-credentials"></div>').hide().appendTo(a);var m=$("<div>",{style:"margin-top:10px"}).hide().appendTo(f),b=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.setTheEncryptionKey")+"</div>").hide().appendTo(m),y=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.changeTheEncryptionKey")+"</div>").hide().appendTo(m),w=$('<div style="margin: 20px 0 10px 5px;">'+RED._("sidebar.project.projectSettings.resetTheEncryptionKey")+"</div>").hide().appendTo(m),D=$('<div class="user-settings-row user-settings-row-credentials"></div>').appendTo(m);$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.currentKey")).appendTo(D);var E=$('<input type="password">').appendTo(D).on("change keyup paste",function(){S&&(S.close(),S=null),u()}),R=$('<div class="user-settings-row user-settings-row-credentials"></div>').appendTo(m);$('<label for=""></label>').text(RED._("sidebar.project.projectSettings.newKey")).appendTo(R);var x=$('<input type="password">').appendTo(R).on("change keyup paste",u),T=$('<div class="form-tips form-warning" style="margin: 10px;"><i class="fa fa-warning"></i>'+RED._("sidebar.project.projectSettings.credentialsAlert")+"</div>").hide().appendTo(m),_=function(){o.show(),k.hide(),r.show(),d.hide(),l.hide(),c.show(),p.hide(),f.removeClass("uneditable-input"),f.css("height",""),l.removeClass("selected"),s.find(".project-file-listing-container").remove(),s.css("height",""),s.css("color",""),$(".user-settings-row-credentials").hide(),m.hide(),h.hide(),g.removeClass("selected"),v.removeClass("selected")},k=$('<span class="button-row" style="position: relative; float: right; margin-right:0;"></span>').hide().appendTo(a);$('<button class="editor-button">'+RED._("common.label.cancel")+"</button>").appendTo(k).click(function(e){e.preventDefault(),_()});var j=$('<button class="editor-button">'+RED._("common.label.save")+"</button>").appendTo(k).click(function(e){e.preventDefault();var t=O.addSpinnerOverlay(a),n=function(e){t.remove(),e?O.reportUnexpectedError(e):(r.text(d.val()),c.text(p.text()),_())},o={files:{flow:d.val(),credentials:p.text()}};g.hasClass("selected")&&(o.resetCredentialSecret=!0),(g.hasClass("selected")||v.hasClass("selected"))&&(o.credentialSecret=x.val(),E.is(":visible")&&(o.currentCredentialSecret=E.val())),RED.deploy.setDeployInflight(!0),O.sendRequest({url:"projects/"+i.name,type:"PUT",responses:{0:function(e){n(e)},200:function(e){i=e,RED.sidebar.versionControl.refresh(!0),C(),n()},400:{credentials_load_failed:function(e){n(e)},missing_current_credential_key:function(e){E.addClass("input-error"),S=RED.popover.create({target:E,direction:"right",size:"small",content:"Incorrect key",autoClose:3e3}).open(),n(e)},"*":function(e){n(e)}}}},o).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}),C=function(){i.settings.credentialSecretInvalid?(f.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-warning"),f.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.invalidEncryptionKey"))):i.settings.credentialsEncrypted?(f.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-lock"),f.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionEnabled"))):(f.find(".user-settings-credentials-state-icon").removeClass().addClass("user-settings-credentials-state-icon fa fa-unlock"),f.find(".user-settings-credentials-state").text(RED._("sidebar.project.projectSettings.encryptionDisabled"))),g.toggleClass("disabled",!i.settings.credentialSecretInvalid&&!i.settings.credentialsEncrypted),g.prop("disabled",!i.settings.credentialSecretInvalid&&!i.settings.credentialsEncrypted)};u(),C()}(e,t),l(e,t),t}function f(e){if(!/^subflow:/.test(e.type)){var t=RED.nodes.registry.getNodeSetForType(e.type).module;"node-red"!==t&&(h.hasOwnProperty(t)||(h[t]={module:t,version:RED.nodes.registry.getModule(t).version,count:0,known:!1}),h[t].count++)}}var h={};return{init:function(e){O=e,o({id:"main",title:RED._("sidebar.project.name"),get:i,close:function(){}}),o({id:"deps",title:RED._("sidebar.project.dependencies"),get:a,close:function(){}}),o({id:"settings",title:RED._("sidebar.project.settings"),get:u,close:function(){S&&(S.close(),S=null)}}),RED.events.on("nodes:add",f),RED.events.on("nodes:remove",function(e){if(!/^subflow:/.test(e.type)){var t=RED.nodes.registry.getNodeSetForType(e.type).module;"node-red"!==t&&h.hasOwnProperty(t)&&(h[t].count--,0===h[t].count&&(h[t].known||delete h[t]))}})},show:function(r){if(!n)if(RED.user.hasPermission("projects.write")){n=!0;var e={title:RED._("menu.label.userSettings"),buttons:[{id:"node-dialog-ok",text:RED._("common.label.close"),class:"primary",click:function(){RED.tray.close()}}],resize:function(e){t=e.width},open:function(e){var t=RED.projects.getActiveProject(),n=e.find(".editor-tray-body"),o=$("<div></div>").appendTo(n),i=$("<div></div>",{id:"user-settings-tabs-container"}).appendTo(o);$("<ul></ul>",{id:"user-settings-tabs"}).appendTo(i);var a=RED.tabs.create({id:"user-settings-tabs",vertical:!0,onchange:function(e){setTimeout(function(){$("#user-settings-tabs-content").children().hide(),$("#"+e.id).show(),e.pane.focus&&e.pane.focus()},50)}}),s=$("<div></div>",{id:"user-settings-tabs-content"}).appendTo(o);d.forEach(function(e){a.addTab({id:"project-settings-tab-"+e.id,label:e.title,pane:e}),e.get(t).hide().appendTo(s)}),o.i18n(),a.activateTab("project-settings-tab-"+(r||"main")),$("#sidebar-shade").show()},close:function(){n=!1,d.forEach(function(e){e.close&&e.close()}),$("#sidebar-shade").hide()},show:function(){}};null!==t&&(e.width=t),RED.tray.show(e)}else RED.notify(RED._("user.errors.notAuthorized"),"error")},switchProject:function(e){h={}}}}(),RED.projects.userSettings=function(){var i,D,E;function t(e){var t=$('<div id="user-settings-tab-gitconfig" class="project-settings-tab-pane node-help"></div>');return function(e){var t=RED.settings.get("git")||{};t.user=t.user||{},$("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.committerDetail")).appendTo(e);var n=$('<div class="user-settings-section"></div>').appendTo(e);$('<div style="color:#aaa;"></div>').appendTo(n).text(RED._("editor:sidebar.project.userSettings.committerTip"));var o=$('<div class="user-settings-row"></div>').appendTo(n);$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.userName")).appendTo(o),(i=$('<input type="text">').appendTo(o)).val(t.user.name||""),o=$('<div class="user-settings-row"></div>').appendTo(n),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.email")).appendTo(o),(D=$('<input type="text">').appendTo(o)).val(t.user.email||"")}(t),function(e){var o,t=$('<div class="user-settings-section"></div>').appendTo(e),n=($("<h3></h3>").text(RED._("editor:sidebar.project.userSettings.sshKeys")).appendTo(t),$('<div style="color:#aaa;"></div>').appendTo(t).text(RED._("editor:sidebar.project.userSettings.sshKeysTip"))),i=$('<button id="user-settings-gitconfig-add-key" class="editor-button editor-button-small" style="float: right; margin-right: 10px;">'+RED._("editor:sidebar.project.userSettings.add")+"</button>").appendTo(n).click(function(e){i.attr("disabled",!0),v.attr("disabled",!0),r.slideDown(200),c.focus()}),a=function(){var e=/^[a-zA-Z0-9\-_]+$/.test(c.val());c.toggleClass("input-error",l&&!e);var t=u.val(),n=0===t.length||8<=t.length;u.toggleClass("input-error",!n),n?0===t.length?f.text(RED._("editor:sidebar.project.userSettings.optional")):f.text(""):f.text(RED._("editor:sidebar.project.userSettings.passphraseShort")),e=e&&n,v.attr("disabled",!e),o&&(o.close(),o=null)},s=$('<div class="user-settings-row"></div>').appendTo(t),r=$('<div class="projects-dialog-list-dialog"></div>').hide().appendTo(s);$('<div class="projects-dialog-list-dialog-header">').text(RED._("editor:sidebar.project.userSettings.addSshKey")).appendTo(r);var d=$("<div>").appendTo(r);s=$('<div class="user-settings-row"></div>').appendTo(d),$('<div style="color:#aaa;"></div>').appendTo(s).text(RED._("editor:sidebar.project.userSettings.addSshKeyTip")),s=$('<div class="user-settings-row"></div>').appendTo(d),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.name")).appendTo(s);var l=!1,c=$('<input type="text">').appendTo(s).on("change keyup paste",function(){l=!0,a()});$('<label class="projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.nameRule")+"</small></label>").appendTo(s).find("small");var p=$("<div>").appendTo(d);s=$('<div class="user-settings-row"></div>').appendTo(p),$('<label for=""></label>').text(RED._("editor:sidebar.project.userSettings.passphrase")).appendTo(s);var u=$('<input type="password">').appendTo(s).on("change keyup paste",a),f=$('<label class="projects-edit-form-sublabel"><small>'+RED._("editor:sidebar.project.userSettings.optional")+"</small></label>").appendTo(s).find("small"),h=function(){i.attr("disabled",!1),r.hide(),c.val(""),l=!1,u.val(""),o&&(o.close(),o=null)},g=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(r);$('<button class="editor-button">'+RED._("editor:sidebar.project.userSettings.cancel")+"</button>").appendTo(g).click(function(e){e.preventDefault(),h()});var v=$('<button class="editor-button">'+RED._("editor:sidebar.project.userSettings.generate")+"</button>").appendTo(g).click(function(e){e.preventDefault();var t=E.addSpinnerOverlay(r).addClass("projects-dialog-spinner-contain"),n={name:c.val(),type:"generate"};n.comment=D.val(),n.password=u.val(),n.size=4096;var o=function(e){t.remove(),e||h()};RED.deploy.setDeployInflight(!0),E.sendRequest({url:"settings/user/keys",type:"POST",responses:{0:function(e){o(e)},200:function(e){w(n.name),o()},400:{unexpected_error:function(e){console.log(e),o(e)}}}},n)});s=$('<div class="user-settings-row projects-dialog-list"></div>').appendTo(t);var m={empty:!0},b=function(e,t){var n=$('<div class="projects-dialog-ssh-public-key">',{style:"position:relative"}).appendTo(e),o=$("<pre>",{style:"min-height: 80px"}).appendTo(n),i=E.addSpinnerOverlay(o).addClass("projects-dialog-spinner-contain"),a={url:"settings/user/keys/"+t.name,type:"GET",responses:{200:function(e){o.text(e.publickey),i.remove()},400:{unexpected_error:function(e){console.log(e),i.remove()}}}};E.sendRequest(a);var s=$('<span class="button-row" style="position: relative; float: right; margin: 10px;"></span>').appendTo(n);return $('<button class="editor-button editor-button-small">'+RED._("editor:sidebar.project.userSettings.copyPublicKey")+"</button>").appendTo(s).click(function(e){try{e.stopPropagation(),e.preventDefault(),document.getSelection().selectAllChildren(o[0]),document.execCommand("copy"),document.getSelection().empty()}catch(e){}}),n},y=$('<ol class="projects-dialog-ssh-key-list">').appendTo(s).editableList({height:"auto",addButton:!1,scrollOnAdd:!1,addItem:function(o,e,i){var t=$('<div class="projects-dialog-list-entry">').appendTo(o);if(i.empty)return t.addClass("red-ui-search-empty"),void t.text(RED._("editor:sidebar.project.userSettings.noSshKeys"));var n=$('<div class="projects-dialog-ssh-key-header">').appendTo(t);$('<span class="entry-icon"><i class="fa fa-key"></i></span>').appendTo(n),$('<span class="entry-name">').text(i.name).appendTo(n);var a,s=$('<span class="button-row entry-tools">').appendTo(n);n.click(function(e){a?a.slideUp(200,function(){a.remove(),a=null}):a=b(t,i)}),i.system||$('<button class="editor-button editor-button-small"><i class="fa fa-trash"></i></button>').appendTo(s).click(function(e){e.stopPropagation();var t=E.addSpinnerOverlay(o).addClass("projects-dialog-spinner-contain"),n=RED.notify(RED._("editor:sidebar.project.userSettings.deleteConfirm",{name:i.name}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.remove(),n.close()}},{text:RED._("editor:sidebar.project.userSettings.delete"),click:function(){n.close();var e={url:"settings/user/keys/"+i.name,type:"DELETE",responses:{200:function(e){o.fadeOut(200,function(){y.editableList("removeItem",i),setTimeout(t.remove,100),0===y.editableList("length")&&y.editableList("addItem",m)})},400:{unexpected_error:function(e){console.log(e),t.remove()}}}};E.sendRequest(e)}}]})}),i.expand&&(a=b(t,i))}}),w=function(t){$.getJSON("settings/user/keys",function(e){e.keys&&(e.keys.sort(function(e,t){return e.name.localeCompare(t.name)}),y.editableList("empty"),e.keys.forEach(function(e){e.name===t&&(e.expand=!0),y.editableList("addItem",e)}),0===y.editableList("length")&&y.editableList("addItem",m))})};w()}(t),t}return{init:function(e){E=e,RED.userSettings.add({id:"gitconfig",title:RED._("editor:sidebar.project.userSettings.gitConfig"),get:t,close:function(){var e=RED.settings.get("git")||{};e.user=e.user||{},e.user.name=i.val(),e.user.email=D.val(),RED.settings.set("git",e)}})}}}(),RED.sidebar.versionControl=function(){var S,O,L,P,N,I,r,A,z,M,B,U,J,d,V,F,G,q={};function W(n,s,e,r){n.addClass("sidebar-version-control-change-entry");var o=$("<div>").appendTo(n);if(s.label){if(n.addClass("node-info-none"),o.text(s.label),s.button){o.css({display:"inline-block",maxWidth:"300px",textAlign:"left"});var t=$('<div style="float: right; margin: 5px; height: 50px;"></div>').appendTo(o);$('<button class="editor-button editor-button-small"></button>').text(s.button.label).appendTo(t).click(s.button.click)}}else{var i,a,d=$('<i class=""></i>').appendTo(o),l=$('<a href="#">').appendTo(o).click(function(e){var o,i,a,t;e.preventDefault(),o=s,i=r,a=RED.projects.getActiveProject(),t="staged"===i?"index":"tree",V.sendRequest({url:"projects/"+a.name+"/diff/"+t+"/"+encodeURIComponent(o.file),type:"GET",responses:{0:function(e){console.log(e)},200:function(e){var t;t="unstaged"===i?RED._("sidebar.project.versionControl.unstagedChanges")+" : "+o.file:"staged"===i?RED._("sidebar.project.versionControl.stagedChanges")+" : "+o.file:RED._("sidebar.project.versionControl.resolveConflicts")+" : "+o.file;var n={diff:e.diff,title:t,unmerged:"unmerged"===i,project:a};"unstaged"==i?(n.oldRevTitle=" "===o.indexStatus?RED._("sidebar.project.versionControl.head"):RED._("sidebar.project.versionControl.staged"),n.newRevTitle=RED._("sidebar.project.versionControl.unstaged"),n.oldRev=" "===o.indexStatus?"@":":0",n.newRev="_"):"staged"===i?(n.oldRevTitle=RED._("sidebar.project.versionControl.head"),n.newRevTitle=RED._("sidebar.project.versionControl.staged"),n.oldRev="@",n.newRev=":0"):(n.oldRevTitle=RED._("sidebar.project.versionControl.local"),n.newRevTitle=RED._("sidebar.project.versionControl.remote"),n.commonRev=":1",n.oldRev=":2",n.newRev=":3",n.onresolve=function(e){V.sendRequest({url:"projects/"+a.name+"/resolve/"+encodeURIComponent(o.file),type:"POST",responses:{0:function(e){console.log(e)},200:function(e){Q(!0)},400:{unexpected_error:function(e){console.log(e)}}}},{resolutions:e.resolutions[o.file]})}),RED.diff.showUnifiedDiff(n)},400:{unexpected_error:function(e){console.log(e)}}}})}),c=$("<span>").appendTo(l),p=$('<div class="sidebar-version-control-change-entry-tools">').appendTo(n);"unstaged"===r&&(i=$('<span class="button-group" style="margin-right: 5px;"></span>').appendTo(p),a=$('<button class="editor-button editor-button-small"><i class="fa fa-reply"></i></button>').appendTo(i).click(function(e){e.preventDefault();var t=V.addSpinnerOverlay(o).addClass("projects-dialog-spinner-contain"),n=RED.notify(RED._("sidebar.project.versionControl.revert",{file:s.file}),{type:"warning",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.remove(),n.close()}},{text:RED._("sidebar.project.versionControl.revertChanges"),click:function(){n.close();var e={url:"projects/"+RED.projects.getActiveProject().name+"/files/_/"+s.file,type:"DELETE",responses:{200:function(e){t.remove()},400:{unexpected_error:function(e){t.remove(),console.log(e)}}}};RED.deploy.setDeployInflight(!0),V.sendRequest(e).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}]})})),i=$('<span class="button-group"></span>').appendTo(p),"unmerged"!==r&&$('<button class="editor-button editor-button-small"><i class="fa fa-'+("unstaged"===r?"plus":"minus")+'"></i></button>').appendTo(i).click(function(e){e.preventDefault();var t=RED.projects.getActiveProject();s.spinner=V.addSpinnerOverlay(n).addClass("projects-version-control-spinner-sidebar"),V.sendRequest({url:"projects/"+t.name+"/stage/"+encodeURIComponent(s.file),type:"unstaged"===r?"POST":"DELETE",responses:{0:function(e){console.log(e)},200:function(e){Y(e)},400:{unexpected_error:function(e){console.log(e)}}}},{})}),s["update"+("unstaged"===r?"Unstaged":"Staged")]=function(e,t){o.removeClass();var n="";"A"===t?(o.addClass("node-diff-added"),n="fa-plus-square"):"?"===t?(o.addClass("node-diff-unchanged"),n="fa-question-circle-o"):"D"===t?(o.addClass("node-diff-deleted"),n="fa-minus-square"):"M"===t?(o.addClass("node-diff-changed"),n="fa-square"):"R"===t?(o.addClass("node-diff-changed"),n="fa-toggle-right"):("U"===t&&o.addClass("node-diff-conflicted"),n="fa-exclamation-triangle"),c.empty(),$("<span>").text(e.file.replace(/\\(.)/g,"$1")).appendTo(c),e.oldName&&($('<i class="fa fa-long-arrow-right"></i>').prependTo(c),$("<span>").text(e.oldName.replace(/\\(.)/g,"$1")).prependTo(c)),d.removeClass(),d.addClass("fa "+n),e.spinner&&(e.spinner.remove(),delete e.spinner),a&&a.toggle("?"!==t),l.toggleClass("disabled","D"===t||"?"===t)},s["update"+("unstaged"===r?"Unstaged":"Staged")](s,e)}}function H(e){var t=Date.now()/1e3-e,n=Math.floor(t/86400);if(30<n)return new Date(1e3*e).toLocaleDateString();if(0<n)return RED._("sidebar.project.versionControl.daysAgo",{count:n});var o=Math.floor(t/3600);if(0<o)return RED._("sidebar.project.versionControl.hoursAgo",{count:o});var i=Math.floor(t/60);return 0<i?RED._("sidebar.project.versionControl.minsAgo",{count:i}):RED._("sidebar.project.versionControl.secondsAgo")}function K(e,t){var n=RED.projects.getActiveProject();(r=t?V.addSpinnerOverlay(L.parent()):V.addSpinnerOverlay(N.parent())).addClass("projects-dialog-spinner-sidebar");var o=t?{files:e}:void 0;V.sendRequest({url:"projects/"+n.name+"/stage",type:t?"POST":"DELETE",responses:{0:function(e){console.log(e)},200:function(e){Y(e)},400:{unexpected_error:function(e){console.log(e)}}}},o)}var i=!1;function X(o,i,e,a,t){var s=V.addSpinnerOverlay(e),n=o+"?limit="+(a||20);t&&(n+="&before="+t),V.sendRequest({url:n,type:"GET",responses:{0:function(e){console.log(e)},200:function(e){var t;e.commits.forEach(function(e){i.editableList("addItem",e),t=e.sha}),i.loadMoreItem&&(i.editableList("removeItem",i.loadMoreItem),delete i.loadMoreItem);var n=i.editableList("length");n<e.total&&(i.loadMoreItem={totalKnown:n,total:e.total,url:o,before:t+"~1",limit:a},i.editableList("addItem",i.loadMoreItem)),s.remove()},400:{unexpected_error:function(e){console.log(e)}}}})}function Y(e){var o=e.files;r&&(r.remove(),r=null),(d=!!e.merging)?(S.addClass("sidebar-version-control-merging"),A.show()):(S.removeClass("sidebar-version-control-merging"),A.hide()),L.editableList("removeItem",F),N.editableList("removeItem",F),z.editableList("removeItem",G);var t=Object.keys(o).filter(function(e){return"f"===o[e].type});t.sort();var i=Date.now()+Math.floor(100*Math.random());t.forEach(function(e){var t=o[e],n=!1;t.status&&(t.file=e,t.indexStatus=t.status[0],t.treeStatus=t.status[1],("A"===t.indexStatus&&/[AU]/.test(t.treeStatus)||"U"===t.indexStatus&&/[DAU]/.test(t.treeStatus)||"D"===t.indexStatus&&/[DU]/.test(t.treeStatus))&&(t.unmerged=!0),q[e]?(q[e].unmerged&&!t.unmerged?(z.editableList("removeItem",q[e]),n=!0):!q[e].unmerged&&t.unmerged&&(L.editableList("removeItem",q[e]),N.editableList("removeItem",q[e])),q[e].status!==t.status&&(" "!==q[e].treeStatus?" "===t.treeStatus?L.editableList("removeItem",q[e]):t.treeStatus!==q[e].treeStatus&&q[e].updateUnstaged(t,t.treeStatus):n=!0," "!==q[e].indexStatus&&"?"!==q[e].indexStatus?" "===t.indexStatus||"?"===t.indexStatus?N.editableList("removeItem",q[e]):t.indexStatus!==q[e].indexStatus&&q[e].updateStaged(t,t.indexStatus):n=!0),q[e].status=t.status,q[e].indexStatus=t.indexStatus,q[e].treeStatus=t.treeStatus,q[e].oldName=t.oldName,q[e].unmerged=t.unmerged):(n=!0,q[e]=t),q[e].updateIndex=i,n&&(t.unmerged?z.editableList("addItem",q[e]):(" "!==t.treeStatus&&L.editableList("addItem",q[e])," "!==t.indexStatus&&"?"!==t.indexStatus&&N.editableList("addItem",q[e]))))}),Object.keys(q).forEach(function(e){q[e].updateIndex!==i&&(L.editableList("removeItem",q[e]),N.editableList("removeItem",q[e]),delete q[e])});var n=N.editableList("length"),a=L.editableList("length"),s=z.editableList("length");M.attr("disabled",d&&0<s||!d&&0===n),P.attr("disabled",0===a),I.attr("disabled",0===n),0===n&&N.editableList("addItem",F),0===a&&L.editableList("addItem",F),0===s&&z.editableList("addItem",G)}function Q(e,t){if(!i&&(e&&(q={},L.editableList("empty"),N.editableList("empty"),z.editableList("empty")),RED.user.hasPermission("projects.write"))){i=!0,function(){U.editableList("empty");var e=RED.projects.getActiveProject();e&&X("projects/"+e.name+"/commits",U,U.parent())}();var o=RED.projects.getActiveProject();if(o){var n="projects/"+o.name+"/status";t&&(n+="?remote=true"),$.getJSON(n,function(e){Y(e),$("#sidebar-version-control-local-branch").text(e.branches.local),$("#sidebar-version-control-remote-branch").text(e.branches.remote||RED._("sidebar.project.versionControl.none"));var t=e.commits.ahead||0,n=e.commits.behind||0;o.git.hasOwnProperty("remotes")?e.branches.hasOwnProperty("remoteError")&&"git_remote_gone"!==e.branches.remoteError.code?($("#sidebar-version-control-repo-status-auth-issue").show(),$("#sidebar-version-control-repo-status-stats").hide(),$("#sidebar-version-control-repo-branch").attr("disabled",!0),$("#sidebar-version-control-repo-pull").attr("disabled",!0),$("#sidebar-version-control-repo-push").attr("disabled",!0),$("#sidebar-version-control-repo-toolbar-message").hide(),$("#sidebar-version-control-repo-toolbar-error-message").show()):($("#sidebar-version-control-repo-toolbar-message").show(),$("#sidebar-version-control-repo-toolbar-error-message").hide(),$("#sidebar-version-control-repo-status-auth-issue").hide(),$("#sidebar-version-control-repo-status-stats").show(),$("#sidebar-version-control-repo-branch").attr("disabled",!1),$("#sidebar-version-control-repo-status-button").show(),e.branches.hasOwnProperty("remote")?Z(t,n):($("#sidebar-version-control-commits-ahead").text(""),$("#sidebar-version-control-commits-behind").text(""),$("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.notTracking")),$("#sidebar-version-control-repo-pull").attr("disabled",!0),$("#sidebar-version-control-repo-push").attr("disabled",!0))):$("#sidebar-version-control-repo-status-button").hide(),i=!1,$(".sidebar-version-control-shade").hide()}).fail(function(){i=!1})}else $(".sidebar-version-control-shade").show(),L.editableList("empty"),N.editableList("empty"),z.editableList("empty")}}function Z(e,t){$("#sidebar-version-control-commits-ahead").text(e),$("#sidebar-version-control-commits-behind").text(t),d?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.statusUnmergedChanged")),$("#sidebar-version-control-repo-pull").attr("disabled",!0),$("#sidebar-version-control-repo-push").attr("disabled",!0)):0<e&&0===t?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsAhead",{count:e})),$("#sidebar-version-control-repo-pull").attr("disabled",!0),$("#sidebar-version-control-repo-push").attr("disabled",!1)):0===e&&0<t?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsBehind",{count:t})),$("#sidebar-version-control-repo-pull").attr("disabled",!1),$("#sidebar-version-control-repo-push").attr("disabled",!0)):0<e&&0<t?($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.commitsAheadAndBehind1",{count:t})+RED._("sidebar.project.versionControl.commitsAheadAndBehind2",{count:e})+RED._("sidebar.project.versionControl.commitsAheadAndBehind3",{count:t})),$("#sidebar-version-control-repo-pull").attr("disabled",!1),$("#sidebar-version-control-repo-push").attr("disabled",!0)):0===e&&0===t&&($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.repositoryUpToDate")),$("#sidebar-version-control-repo-pull").attr("disabled",!0),$("#sidebar-version-control-repo-push").attr("disabled",!0))}function ee(){Q(),RED.sidebar.show("version-control")}return{init:function(e){V=e,RED.actions.add("core:show-version-control-tab",ee),RED.events.on("deploy",function(){var e=RED.projects.getActiveProject();e&&(q={},L.editableList("empty"),N.editableList("empty"),z.editableList("empty"),$.getJSON("projects/"+e.name+"/status",function(e){Y(e)}))}),RED.events.on("login",function(){Q(!0)}),S=$("<div>",{class:"sidebar-version-control"});var t=$("<div>",{class:"sidebar-version-control-stack"}).appendTo(S);O=RED.stack.create({container:t,fill:!0,singleExpanded:!0}),(B=O.add({title:RED._("sidebar.project.versionControl.localChanges"),collapsible:!0})).expand(),B.content.css({height:"100%"});var n=$('<div style="float: right"></div>').appendTo(B.header);$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(n).click(function(e){e.preventDefault(),Q(!0)}),F={label:RED._("sidebar.project.versionControl.none")},G={label:RED._("sidebar.project.versionControl.conflictResolve")};var o=$('<div class="sidebar-version-control-change-container"></div>').appendTo(B.content),i=$('<div class="sidebar-version-control-change-header">'+RED._("sidebar.project.versionControl.localFiles")+"</div>").appendTo(o);P=$('<button class="editor-button editor-button-small" style="float: right"><i class="fa fa-plus"></i> '+RED._("sidebar.project.versionControl.all")+"</button>").appendTo(i).click(function(e){e.preventDefault(),e.stopPropagation(),K(Object.keys(q).filter(function(e){return" "!==q[e].treeStatus}),!0)}),(L=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(o)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){W(e,n,n.treeStatus,"unstaged")},sort:function(e,t){return"?"===e.treeStatus&&"?"!==t.treeStatus?1:"?"!==e.treeStatus&&"?"===t.treeStatus?-1:e.file.localeCompare(t.file)}}),A=$('<div class="sidebar-version-control-change-container"></div>').appendTo(B.content),i=$('<div class="sidebar-version-control-change-header">'+RED._("sidebar.project.versionControl.unmergedChanges")+"</div>").appendTo(A),n=$('<div style="float: right"></div>').appendTo(i);var a=$('<button class="editor-button editor-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.abortMerge")+"</button>").appendTo(n).click(function(e){e.preventDefault(),e.stopPropagation();var t=V.addSpinnerOverlay(A),n=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),V.sendRequest({url:"projects/"+n.name+"/merge",type:"DELETE",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),Q(!0)},400:{unexpected_error:function(e){console.log(e)}}}}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})});(z=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(A)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){n===G&&(n.button={label:RED._("sidebar.project.versionControl.commit"),click:function(e){e.preventDefault(),e.stopPropagation(),r()}}),W(e,n,n.treeStatus,"unmerged")},sort:function(e,t){return"?"===e.treeStatus&&"?"!==t.treeStatus?1:"?"!==e.treeStatus&&"?"===t.treeStatus?-1:e.file.localeCompare(t.file)}});var s=$('<div class="sidebar-version-control-change-container"></div>').appendTo(B.content);i=$('<div class="sidebar-version-control-change-header">'+RED._("sidebar.project.versionControl.changeToCommit")+"</div>").appendTo(s),n=$('<div style="float: right"></div>').appendTo(i);var r=function(){d.val(""),p.attr("disabled",!0),o.css("height","30px"),A.is(":visible")?(A.css("height","30px"),s.css("height","calc(100% - 60px - 175px)")):s.css("height","calc(100% - 30px - 175px)"),commitBox.show(),setTimeout(function(){commitBox.css("height","175px")},10),P.attr("disabled",!0),I.attr("disabled",!0),M.attr("disabled",!0),a.attr("disabled",!0),d.focus()};M=$('<button class="editor-button editor-button-small" style="margin-right: 5px;">'+RED._("sidebar.project.versionControl.commit")+"</button>").appendTo(n).click(function(e){e.preventDefault(),e.stopPropagation(),r()}),I=$('<button class="editor-button editor-button-small"><i class="fa fa-minus"></i> '+RED._("sidebar.project.versionControl.all")+"</button>").appendTo(n).click(function(e){e.preventDefault(),e.stopPropagation(),K(Object.keys(q).filter(function(e){return" "!==q[e].indexStatus&&"?"!==q[e].indexStatus}),!1)}),(N=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0; right:0; left:0;"}).appendTo(s)).editableList({addButton:!1,scrollOnAdd:!1,addItem:function(e,t,n){W(e,n,n.indexStatus,"staged")},sort:function(e,t){return e.file.localeCompare(t.file)}}),commitBox=$('<div class="sidebar-version-control-slide-box sidebar-version-control-slide-box-bottom"></div>').hide().appendTo(B.content);var d=$("<textarea placeholder="+RED._("sidebar.project.versionControl.commitPlaceholder")+"></textarea>").appendTo(commitBox).on("change keyup paste",function(){p.attr("disabled",""===$(this).val().trim())}),l=$('<div class="sidebar-version-control-slide-box-toolbar button-group">').appendTo(commitBox),c=$('<button class="editor-button">'+RED._("sidebar.project.versionControl.cancelCapital")+"</button>").appendTo(l).click(function(e){e.preventDefault(),d.val(""),o.css("height",""),A.css("height",""),s.css("height",""),commitBox.css("height",0),setTimeout(function(){commitBox.hide()},200),P.attr("disabled",!1),I.attr("disabled",!1),M.attr("disabled",!1),a.attr("disabled",!1)}),p=$('<button class="editor-button">'+RED._("sidebar.project.versionControl.commitCapital")+"</button>").appendTo(l).click(function(e){e.preventDefault();var t=V.addSpinnerOverlay(p).addClass("projects-dialog-spinner-sidebar"),n=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),V.sendRequest({url:"projects/"+n.name+"/commit",type:"POST",responses:{0:function(e){console.log(e)},200:function(e){t.remove(),c.click(),Q(!0)},400:{"*":function(e){V.reportUnexpectedError(e)}}}},{message:d.val()}).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}),u=O.add({title:RED._("sidebar.project.versionControl.commitHistory"),collapsible:!0});n=$('<div style="float: right"></div>').appendTo(u.header),$('<button class="editor-button editor-button-small"><i class="fa fa-refresh"></i></button>').appendTo(n).click(function(e){e.preventDefault(),Q(!0,!0)});var f=$('<div class="sidebar-version-control-change-header" style="text-align: right;"></div>').appendTo(u.content),h=$('<button class="editor-button editor-button-small"><i class="fa fa-code-fork"></i> '+RED._("sidebar.project.versionControl.branch")+' <span id="sidebar-version-control-local-branch"></span></button>').appendTo(f).click(function(e){if(e.preventDefault(),$(this).hasClass("selected"))v();else{w(),J.show(),$(this).addClass("selected");var t=RED.projects.getActiveProject();b.refresh("projects/"+t.name+"/branches"),m.show(),setTimeout(function(){m.css("height","215px"),b.focus()},100)}}),g=$('<button class="editor-button editor-button-small" style="margin-left: 10px;" id="sidebar-version-control-repo-status-button"><span id="sidebar-version-control-repo-status-stats"><i class="fa fa-long-arrow-up"></i> <span id="sidebar-version-control-commits-ahead"></span> <i class="fa fa-long-arrow-down"></i> <span id="sidebar-version-control-commits-behind"></span></span><span id="sidebar-version-control-repo-status-auth-issue"><i class="fa fa-warning"></i></span></button>').appendTo(f).click(function(e){if(e.preventDefault(),$(this).hasClass("selected"))w();else{v(),J.show(),$(this).addClass("selected");var t=RED.projects.getActiveProject();$("#sidebar-version-control-repo-toolbar-set-upstream-row").toggle(!!t.git.branches.remoteAlt),y.show(),setTimeout(function(){y.css("height","265px")},100)}});U=$("<ol>",{style:"position: absolute; top: 30px; bottom: 0px; right:0; left:0;"}).appendTo(u.content),J=$('<div class="component-shade" style="z-Index: 3"></div>').css("top","30px").hide().appendTo(u.content),U.editableList({addButton:!1,scrollOnAdd:!1,addItem:function(t,e,n){if(t.addClass("sidebar-version-control-commit-entry"),n.url)t.addClass("sidebar-version-control-commit-more"),t.text("+ "+(n.total-n.totalKnown)+RED._("sidebar.project.versionControl.moreCommits")),t.click(function(e){e.preventDefault(),X(n.url,U,t,n.limit,n.before)});else{t.click(function(e){var t=RED.projects.getActiveProject();t&&$.getJSON("projects/"+t.name+"/commits/"+n.sha,function(e){e.project=t,e.parents=n.parents,e.oldRev=n.sha+"~1",e.newRev=n.sha,e.oldRevTitle=RED._("sidebar.project.versionControl.commitCapital")+" "+n.sha.substring(0,7)+"~1",e.newRevTitle=RED._("sidebar.project.versionControl.commitCapital")+" "+n.sha.substring(0,7),e.date=H(parseInt(n.date)),RED.diff.showCommitDiff(e)})});var o=$("<div>").appendTo(t);if($('<div class="sidebar-version-control-commit-subject">').text(n.subject).appendTo(o),n.refs){var i=$('<div class="sidebar-version-control-commit-refs">').appendTo(o);n.refs.forEach(function(e){var t=e;/HEAD -> /.test(e)&&(t=e.substring(8)),$('<span class="sidebar-version-control-commit-ref">').text(t).appendTo(i)}),t.addClass("sidebar-version-control-commit-head")}$('<div class="sidebar-version-control-commit-sha">').text(n.sha.substring(0,7)).appendTo(o),$('<div class="sidebar-version-control-commit-date">').text(H(parseInt(n.date))).appendTo(o)}}});var v=function(e){h.removeClass("selected"),m.css("height","0"),J.hide(),setTimeout(function(){m.hide(),e&&e()},200)},m=$('<div class="sidebar-version-control-slide-box sidebar-version-control-slide-box-top" style="top:30px;"></div>').hide().appendTo(u.content);$('<div class="sidebar-version-control-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.changeLocalBranch")).appendTo(m);var b=V.createBranchList({placeholder:RED._("sidebar.project.versionControl.createBranchPlaceholder"),container:m,onselect:function(e){if(e.current)return v();var t=V.addSpinnerOverlay(m),n=RED.projects.getActiveProject();RED.deploy.setDeployInflight(!0),V.sendRequest({url:"projects/"+n.name+"/branches",type:"POST",requireCleanWorkspace:!0,cancel:function(){t.remove()},responses:{0:function(e){t.remove(),console.log(e)},200:function(e){v(function(){t.remove()})},400:{git_local_overwrite:function(e){t.remove(),RED.notify(RED._("sidebar.project.versionControl.localOverwrite"),{type:"error",timeout:8e3})},unexpected_error:function(e){t.remove(),console.log(e)}}}},e).always(function(){setTimeout(function(){RED.deploy.setDeployInflight(!1)},500)})}}),y=$('<div class="sidebar-version-control-slide-box sidebar-version-control-slide-box-top" style="top:30px"></div>').hide().appendTo(u.content),w=function(){$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked",!1),g.removeClass("selected"),y.css("height","0"),J.hide(),setTimeout(function(){y.hide(),D()},200)},D=function(e){R.hasClass("selected")&&(R.removeClass("selected"),_.height(0),y.css("height","265px"),setTimeout(function(){_.hide(),e&&e()},200))};$('<div class="sidebar-version-control-slide-box-header"></div>').text(RED._("sidebar.project.versionControl.manageRemoteBranch")).appendTo(y);var E=$('<div style="margin-bottom: 5px;"></div>').appendTo(y),R=$('<button id="sidebar-version-control-repo-branch" class="sidebar-version-control-repo-action editor-button"><i class="fa fa-code-fork"></i> '+RED._("sidebar.project.versionControl.remote")+': <span id="sidebar-version-control-remote-branch"></span></button>').appendTo(E).click(function(e){if(e.preventDefault(),$(this).hasClass("selected"))D();else{$(this).addClass("selected");var t=RED.projects.getActiveProject();k.refresh("projects/"+t.name+"/branches/remote"),_.show(),setTimeout(function(){_.height(180),y.css("height","445px"),k.focus()},100)}});$('<div id="sidebar-version-control-repo-toolbar-message" class="sidebar-version-control-slide-box-header" style="min-height: 100px;"></div>').appendTo(y);var x=$('<div id="sidebar-version-control-repo-toolbar-error-message" class="sidebar-version-control-slide-box-header" style="min-height: 100px;"></div>').hide().appendTo(y);$('<div style="margin-top: 10px;"><i class="fa fa-warning"></i> '+RED._("sidebar.project.versionControl.unableToAccess")+"</div>").appendTo(x);var T=$('<div style="margin: 10px 30px; text-align: center"></div>').appendTo(x);$('<button class="editor-button" style="width: 80%;"><i class="fa fa-refresh"></i> '+RED._("sidebar.project.versionControl.retry")+"</button>").appendTo(T).click(function(e){e.preventDefault();var t=RED.projects.getActiveProject(),n=V.addSpinnerOverlay(y).addClass("projects-dialog-spinner-contain");V.sendRequest({url:"projects/"+t.name+"/branches/remote",type:"GET",responses:{0:function(e){console.log(e)},200:function(e){Q(!0)},400:{git_connection_failed:function(e){RED.notify(e.message,"error")},git_not_a_repository:function(e){RED.notify(e.message,"error")},git_repository_not_found:function(e){RED.notify(e.message,"error")},unexpected_error:function(e){console.log(e)}}}}).always(function(){n.remove()})}),$('<div class="sidebar-version-control-slide-box-header" style="height: 20px;"><label id="sidebar-version-control-repo-toolbar-set-upstream-row" for="sidebar-version-control-repo-toolbar-set-upstream" class="hide"><input type="checkbox" id="sidebar-version-control-repo-toolbar-set-upstream"> '+RED._("sidebar.project.versionControl.setUpstreamBranch")+"</label></div>").appendTo(y);var _=$('<div style="height: 0;overflow:hidden; transition: height 0.2s ease-in-out;"></div>').hide().appendTo(E),k=V.createBranchList({placeholder:RED._("sidebar.project.versionControl.createRemoteBranchPlaceholder"),currentLabel:RED._("sidebar.project.versionControl.upstream"),remote:function(){var e=RED.projects.getActiveProject();return Object.keys(e.git.remotes)[0]},container:_,onselect:function(e){$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked",!1),$("#sidebar-version-control-repo-toolbar-set-upstream").prop("disabled",!1),$("#sidebar-version-control-remote-branch").text(e.name+(e.create?" *":""));var o=RED.projects.getActiveProject();o.git.branches.remote===e.name?delete o.git.branches.remoteAlt:o.git.branches.remoteAlt=e.name,$("#sidebar-version-control-repo-toolbar-set-upstream-row").toggle(!!o.git.branches.remoteAlt),D(function(){if(e.create)o.git.branches.remote?$("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.selectUpstreamBranch")):($("#sidebar-version-control-repo-toolbar-message").text(RED._("sidebar.project.versionControl.trackedUpstreamBranch")),$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked",!0),$("#sidebar-version-control-repo-toolbar-set-upstream").prop("disabled",!0)),$("#sidebar-version-control-repo-pull").attr("disabled",!0),$("#sidebar-version-control-repo-push").attr("disabled",!1);else{var t=Date.now(),n=V.addSpinnerOverlay($("#sidebar-version-control-repo-toolbar-message")).addClass("projects-dialog-spinner-contain");$.getJSON("projects/"+o.name+"/branches/remote/"+e.name+"/status",function(e){setTimeout(function(){Z(e.commits.ahead,e.commits.behind),n.remove()},Math.max(400-(Date.now()-t),0))})}})}}),j=$('<div style="margin-bottom: 5px;"></div>').appendTo(y);$('<button id="sidebar-version-control-repo-push" class="sidebar-version-control-repo-sub-action editor-button"><i class="fa fa-long-arrow-up"></i> <span data-i18n="sidebar.project.versionControl.push"></span></button>').appendTo(j).click(function(e){e.preventDefault();var t=V.addSpinnerOverlay(y).addClass("projects-dialog-spinner-contain"),n=RED.projects.getActiveProject(),o="projects/"+n.name+"/push";n.git.branches.remoteAlt&&(o+="/"+n.git.branches.remoteAlt);var i=$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked");i&&(o+="?u=true"),V.sendRequest({url:o,type:"POST",responses:{0:function(e){console.log(e)},200:function(e){i&&n.git.branches.remoteAlt&&(n.git.branches.remote=n.git.branches.remoteAlt,delete n.git.branches.remoteAlt),Q(!0),w()},400:{git_push_failed:function(e){RED.notify(RED._("sidebar.project.versionControl.pushFailed"),"error")},unexpected_error:function(e){console.log(e)}}}},{}).always(function(){t.remove()})});var C=function(n){n=n||{};var e=V.addSpinnerOverlay(y).addClass("projects-dialog-spinner-contain"),t=RED.projects.getActiveProject(),o="projects/"+t.name+"/pull";t.git.branches.remoteAlt&&(o+="/"+t.git.branches.remoteAlt),(n.setUpstream||n.allowUnrelatedHistories)&&(o+="?"),n.setUpstream&&(o+="setUpstream=true",n.allowUnrelatedHistories&&(o+="&")),n.allowUnrelatedHistories&&(o+="allowUnrelatedHistories=true"),V.sendRequest({url:o,type:"POST",responses:{0:function(e){console.log(e)},200:function(e){n.setUpstream&&t.git.branches.remoteAlt&&(t.git.branches.remote=t.git.branches.remoteAlt,delete t.git.branches.remoteAlt),Q(!0),w()},400:{git_local_overwrite:function(e){RED.notify(RED._("sidebar.project.versionControl.unablePull")+'<p><a href="#" onclick="RED.sidebar.versionControl.showLocalChanges(); return false;">'+RED._("sidebar.project.versionControl.showUnstagedChanges")+"</a></p>","error",!1,1e7)},git_pull_merge_conflict:function(e){Q(!0),w()},git_connection_failed:function(e){RED.notify(RED._("sidebar.project.versionControl.connectionFailed")+e.toString(),"warning")},git_pull_unrelated_history:function(e){var t=RED.notify(RED._("sidebar.project.versionControl.pullUnrelatedHistory"),{type:"error",modal:!0,fixed:!0,buttons:[{text:RED._("common.label.cancel"),click:function(){t.close()}},{text:RED._("sidebar.project.versionControl.pullChanges"),click:function(){t.close(),n.allowUnrelatedHistories=!0,C(n)}}]})},"*":function(e){V.reportUnexpectedError(e)}}}},{}).always(function(){e.remove()})};$('<button id="sidebar-version-control-repo-pull" class="sidebar-version-control-repo-sub-action editor-button"><i class="fa fa-long-arrow-down"></i> <span data-i18n="sidebar.project.versionControl.pull"></span></button>').appendTo(j).click(function(e){e.preventDefault(),C({setUpstream:$("#sidebar-version-control-repo-toolbar-set-upstream").prop("checked")})}),$('<div class="component-shade sidebar-version-control-shade">').appendTo(S),RED.sidebar.addTab({id:"version-control",label:RED._("sidebar.project.versionControl.history"),name:"Project History",content:S,enableOnEdit:!1,pinned:!0,iconClass:"fa fa-code-fork",onchange:function(){setTimeout(function(){O.resize()},10)}})},show:ee,refresh:Q,showLocalChanges:function(){RED.sidebar.show("version-control"),B.expand()}}}(),RED.touch=RED.touch||{},RED.touch.radialMenu=function(){var f=null,h=!1,g=!1,v=null;return{show:function(e,a,t){h=!0;try{$("body").width(),$("body").height();for(var o=(f=d3.select("body").append("div").style({position:"absolute",top:0,left:0,bottom:0,right:0,"z-index":1e3}).on("touchstart",function(){u(),d3.event.preventDefault()})).append("div").style({position:"absolute",top:a[1]-80+"px",left:a[0]-80+"px","border-radius":"80px",width:"160px",height:"160px",background:"rgba(255,255,255,0.6)",border:"1px solid #666"}),s=[],n=function(e,t,n){n.el=o.append("div").style({position:"absolute",top:t+80-25+"px",left:e+80-25+"px","border-radius":"20px",width:"50px",height:"50px",background:"#fff",border:"2px solid #666","text-align":"center","line-height":"50px"}),n.el.html(n.name),n.disabled&&n.el.style({"border-color":"#ccc",color:"#ccc"}),n.x=e,n.y=t,s.push(n),n.el.on("touchstart",function(){n.el.style("background","#999"),d3.event.preventDefault(),d3.event.stopPropagation()}),n.el.on("touchend",function(){u(),n.onselect(),d3.event.preventDefault(),d3.event.stopPropagation()})},i=t.length,r=Math.max(Math.PI/(i-1),Math.PI/4),d=Math.PI,l=0;l<i;l++){var c=Math.floor(80*Math.cos(d)),p=Math.floor(80*Math.sin(d));t[l].name&&n(c,p,t[l]),d+=r}var u=function(){h=!1,v=null,f.remove(),f=null};e.on("touchend.radial",function(){if(e.on("touchend.radial",null),e.on("touchmenu.radial",null),v){try{v.onselect()}catch(e){RED._debug(e)}u()}else g&&u()}),e.on("touchmove.radial",function(){try{for(var e=d3.event.touches.item(0),t=[e.pageX-a[0],e.pageY-a[1]],n=0;n<s.length;n++){var o=s[n];o.disabled||(t[0]>o.x-30&&t[0]<o.x+30&&t[1]>o.y-30&&t[1]<o.y+30?o!==v&&(o.el.style("background","#999"),v=o):o===v?(o.el.style("background","#fff"),v=null):o.el.style("background","#fff"))}if(!v){var i=Math.abs(t[0]*t[0]+t[1]*t[1]);g=6400<i}}catch(e){RED._debug(e)}})}catch(e){RED._debug(e)}},active:function(){return h}}}();