/** * Copyright 2013 IBM Corp. * * 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 hideDropTarget() { $("#dropTarget").hide(); RED.keyboard.remove(/* ESCAPE */ 27); } $('#chart').on("dragenter",function(event) { if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1) { $("#dropTarget").css({display:'table'}); RED.keyboard.add(/* ESCAPE */ 27,hideDropTarget); } }); $('#dropTarget').on("dragover",function(event) { if ($.inArray("text/plain",event.originalEvent.dataTransfer.types) != -1) { event.preventDefault(); } }) .on("dragleave",function(event) { hideDropTarget(); }) .on("drop",function(event) { var data = event.originalEvent.dataTransfer.getData("text/plain"); hideDropTarget(); RED.view.importNodes(data); event.preventDefault(); }); function save(force) { if (RED.view.dirty()) { //$("#debug-tab-clear").click(); // uncomment this to auto clear debug on deploy if (!force) { var invalid = false; var unknownNodes = []; RED.nodes.eachNode(function(node) { invalid = invalid || !node.valid; if (node.type === "unknown") { if (unknownNodes.indexOf(node.name) == -1) { unknownNodes.push(node.name); } invalid = true; } }); if (invalid) { if (unknownNodes.length > 0) { $( "#node-dialog-confirm-deploy-config" ).hide(); $( "#node-dialog-confirm-deploy-unknown" ).show(); var list = "
  • "+unknownNodes.join("
  • ")+"
  • "; $( "#node-dialog-confirm-deploy-unknown-list" ).html(list); } else { $( "#node-dialog-confirm-deploy-config" ).show(); $( "#node-dialog-confirm-deploy-unknown" ).hide(); } $( "#node-dialog-confirm-deploy" ).dialog( "open" ); return; } } var nns = RED.nodes.createCompleteNodeSet(); $("#btn-icn-deploy").removeClass('fa-download'); $("#btn-icn-deploy").addClass('spinner'); RED.view.dirty(false); $.ajax({ url:"flows", type: "POST", data: JSON.stringify(nns), contentType: "application/json; charset=utf-8" }).done(function(data,textStatus,xhr) { RED.notify("Successfully deployed","success"); RED.nodes.eachNode(function(node) { if (node.changed) { node.dirty = true; node.changed = false; } if(node.credentials) { delete node.credentials; } }); RED.nodes.eachConfig(function (confNode) { if (confNode.credentials) { delete confNode.credentials; } }); // Once deployed, cannot undo back to a clean state RED.history.markAllDirty(); RED.view.redraw(); }).fail(function(xhr,textStatus,err) { RED.view.dirty(true); if (xhr.responseText) { RED.notify("Error: "+xhr.responseText,"error"); } else { RED.notify("Error: no response from server","error"); } }).always(function() { $("#btn-icn-deploy").removeClass('spinner'); $("#btn-icn-deploy").addClass('fa-download'); }); } } $('#btn-deploy').click(function() { save(); }); $( "#node-dialog-confirm-deploy" ).dialog({ title: "Confirm deploy", modal: true, autoOpen: false, width: 530, height: 230, buttons: [ { text: "Confirm deploy", click: function() { save(true); $( this ).dialog( "close" ); } }, { text: "Cancel", click: function() { $( this ).dialog( "close" ); } } ] }); function loadSettings() { $.get('settings', function(data) { RED.settings = data; console.log("Node-RED: "+data.version); loadNodeList(); }); } function loadNodeList() { $.ajax({ headers: { "Accept":"application/json" }, cache: false, url: 'nodes', success: function(data) { RED.nodes.setNodeList(data); loadNodes(); } }); } function loadNodes() { $.ajax({ headers: { "Accept":"text/html" }, cache: false, url: 'nodes', success: function(data) { $("body").append(data); $(".palette-spinner").hide(); $(".palette-scroll").show(); $("#palette-search").show(); loadFlows(); } }); } function loadFlows() { $.ajax({ headers: { "Accept":"application/json" }, cache: false, url: 'flows', success: function(nodes) { RED.nodes.import(nodes); RED.view.dirty(false); RED.view.redraw(); RED.comms.subscribe("status/#",function(topic,msg) { var parts = topic.split("/"); var node = RED.nodes.node(parts[1]); if (node) { node.status = msg; if (statusEnabled) { node.dirty = true; RED.view.redraw(); } } }); RED.comms.subscribe("node/#",function(topic,msg) { var i,m; var typeList; var info; if (topic == "node/added") { var addedTypes = []; for (i=0;i
  • ")+"
  • "; RED.notify("Node"+(addedTypes.length!=1 ? "s":"")+" added to palette:"+typeList,"success"); } } else if (topic == "node/removed") { for (i=0;i
  • ")+"
  • "; RED.notify("Node"+(m.types.length!=1 ? "s":"")+" removed from palette:"+typeList,"success"); } } } else if (topic == "node/enabled") { if (msg.types) { info = RED.nodes.getNodeSet(msg.id); if (info.added) { RED.nodes.enableNodeSet(msg.id); typeList = ""; RED.notify("Node"+(msg.types.length!=1 ? "s":"")+" enabled:"+typeList,"success"); } else { $.get('nodes/'+msg.id, function(data) { $("body").append(data); typeList = ""; RED.notify("Node"+(msg.types.length!=1 ? "s":"")+" added to palette:"+typeList,"success"); }); } } } else if (topic == "node/disabled") { if (msg.types) { RED.nodes.disableNodeSet(msg.id); typeList = ""; RED.notify("Node"+(msg.types.length!=1 ? "s":"")+" disabled:"+typeList,"success"); } } }); } }); } var statusEnabled = false; function toggleStatus(state) { statusEnabled = state; RED.view.status(statusEnabled); } function showHelp() { var dialog = $('#node-help'); //$("#node-help").draggable({ // handle: ".modal-header" //}); dialog.on('show',function() { RED.keyboard.disable(); }); dialog.on('hidden',function() { RED.keyboard.enable(); }); dialog.modal(); } $(function() { RED.menu.init({id:"btn-sidemenu", options: [ {id:"btn-sidebar",icon:"fa fa-columns",label:"Sidebar",toggle:true,onselect:RED.sidebar.toggleSidebar}, null, {id:"btn-node-status",icon:"fa fa-info",label:"Node Status",toggle:true,onselect:toggleStatus}, null, {id:"btn-import-menu",icon:"fa fa-sign-in",label:"Import...",options:[ {id:"btn-import-clipboard",icon:"fa fa-clipboard",label:"Clipboard...",onselect:RED.view.showImportNodesDialog}, {id:"btn-import-library",icon:"fa fa-book",label:"Library",options:[]} ]}, {id:"btn-export-menu",icon:"fa fa-sign-out",label:"Export...",disabled:true,options:[ {id:"btn-export-clipboard",icon:"fa fa-clipboard",label:"Clipboard...",disabled:true,onselect:RED.view.showExportNodesDialog}, {id:"btn-export-library",icon:"fa fa-book",label:"Library...",disabled:true,onselect:RED.view.showExportNodesLibraryDialog} ]}, null, {id:"btn-config-nodes",icon:"fa fa-th-list",label:"Configuration nodes...",onselect:RED.sidebar.config.show}, null, {id:"btn-workspace-menu",icon:"fa fa-th-large",label:"Workspaces",options:[ {id:"btn-workspace-add",icon:"fa fa-plus",label:"Add"}, {id:"btn-workspace-edit",icon:"fa fa-pencil",label:"Rename"}, {id:"btn-workspace-delete",icon:"fa fa-minus",label:"Delete"}, null ]}, null, {id:"btn-keyboard-shortcuts",icon:"fa fa-keyboard-o",label:"Keyboard Shortcuts",onselect:showHelp}, {id:"btn-help",icon:"fa fa-question",label:"Help...", href:"http://nodered.org/docs"} ] }); RED.keyboard.add(/* ? */ 191,{shift:true},function(){showHelp();d3.event.preventDefault();}); loadSettings(); RED.comms.connect(); }); return { }; })();