@@ -65,7 +65,9 @@ var RED = (function() { | |||
if (node && (node.outputs > 0 || node._def.inputs > 0)) { | |||
cpp += n.type + " "; | |||
for (var j=n.type.length; j<24; j++) cpp += " "; | |||
cpp += n.id + "; "; | |||
var name = (n.name ? n.name : n.id); | |||
name = name.replace(" ", "_").replace("+", "_").replace("-", "_"); | |||
cpp += name + "; "; | |||
for (var j=n.id.length; j<14; j++) cpp += " "; | |||
cpp += "//xy=" + n.x + "," + n.y + "\n"; | |||
} | |||
@@ -115,18 +117,17 @@ var RED = (function() { | |||
//console.log(cpp); | |||
RED.view.state(RED.state.EXPORT); | |||
$("#dialog-form").html($("script[data-template-name='export-clipboard-dialog']").html()); | |||
$("#node-input-export").val(cpp); | |||
$("#node-input-export").focus(function() { | |||
RED.view.getForm('dialog-form', 'export-clipboard-dialog', function (d, f) { | |||
$("#node-input-export").val(cpp).focus(function() { | |||
var textarea = $(this); | |||
textarea.select(); | |||
textarea.mouseup(function() { | |||
textarea.unbind("mouseup"); | |||
return false; | |||
}); | |||
}); | |||
}).focus(); | |||
$( "#dialog" ).dialog("option","title","Export to Arduino").dialog( "open" ); | |||
$("#node-input-export").focus(); | |||
}); | |||
//RED.view.dirty(false); | |||
} | |||
} | |||
@@ -169,10 +170,6 @@ var RED = (function() { | |||
} | |||
function loadNodes() { | |||
//$.get('list.html', function(data) { | |||
//$("body").append(data); | |||
//setTimeout(function() { | |||
$(".palette-spinner").hide(); | |||
$(".palette-scroll").show(); | |||
$("#palette-search").show(); | |||
RED.storage.load(); | |||
@@ -185,11 +182,8 @@ var RED = (function() { | |||
// if the query string has ?info=className, populate info tab | |||
var info = getQueryVariable("info"); | |||
if (info) { | |||
$("#tab-info").html('<div class="node-help">' | |||
+($("script[data-help-name|='"+info+"']").html()||"")+"</div>"); | |||
RED.sidebar.info.setHelpContent('', info); | |||
} | |||
//}, 100); | |||
//}, "html"); | |||
} | |||
$('#btn-node-status').click(function() {toggleStatus();}); | |||
@@ -220,8 +214,21 @@ var RED = (function() { | |||
} | |||
$(function() { | |||
$(".palette-spinner").show(); | |||
$.ajaxSetup({beforeSend: function(xhr){ | |||
if (xhr.overrideMimeType) { | |||
xhr.overrideMimeType("application/json"); | |||
} | |||
}}); | |||
$.getJSON( "resources/nodes_def.json", function( data ) { | |||
var nodes = data["nodes"]; | |||
$.each(nodes, function(key, val) { | |||
RED.nodes.registerType(val["type"], val["data"]); | |||
}); | |||
RED.keyboard.add(/* ? */ 191,{shift:true},function(){showHelp();d3.event.preventDefault();}); | |||
loadNodes(); | |||
$(".palette-spinner").hide(); | |||
}) | |||
}); | |||
return { |
@@ -20,7 +20,7 @@ RED.nodes = (function() { | |||
var nodes = []; | |||
var configNodes = {}; | |||
var links = []; | |||
var defaultWorkspace; | |||
//var defaultWorkspace; | |||
var workspaces = {}; | |||
function registerType(nt,def) { | |||
@@ -87,7 +87,7 @@ RED.nodes = (function() { | |||
if (n._def.defaults.hasOwnProperty(d)) { | |||
var property = n._def.defaults[d]; | |||
if (property.type) { | |||
var type = getType(property.type) | |||
var type = getType(property.type); | |||
if (type && type.category == "config") { | |||
var configNode = configNodes[n[d]]; | |||
if (configNode) { | |||
@@ -106,9 +106,11 @@ RED.nodes = (function() { | |||
function addLink(l) { | |||
links.push(l); | |||
} | |||
/* | |||
function addConfig(c) { | |||
configNodes[c.id] = c; | |||
} | |||
*/ | |||
function getNode(id) { | |||
if (id in configNodes) { | |||
@@ -140,7 +142,7 @@ RED.nodes = (function() { | |||
if (node._def.defaults.hasOwnProperty(d)) { | |||
var property = node._def.defaults[d]; | |||
if (property.type) { | |||
var type = getType(property.type) | |||
var type = getType(property.type); | |||
if (type && type.category == "config") { | |||
var configNode = configNodes[node[d]]; | |||
if (configNode) { | |||
@@ -315,17 +317,14 @@ RED.nodes = (function() { | |||
*/ | |||
function cppToJSON(newNodesStr) { | |||
var data = ""; | |||
var nodes = []; | |||
var skipped = []; | |||
var cables = []; | |||
const CODE_START = "// GUItool: begin automatically generated code"; | |||
const CODE_END = "// GUItool: end automatically generated code"; | |||
const NODE_COMMENT = "//"; | |||
const NODE_AC = "AudioConnection"; | |||
const NODE_AI_I2S = "AudioInputI2S"; | |||
const NODE_AM_4 = "AudioMixer4"; | |||
const NODE_AC_SGTL = "AudioControlSGTL5000"; | |||
var parseLine = function(line) { | |||
var parts = line.match(/^(\S+)\s(.*)/).slice(1); | |||
@@ -368,7 +367,12 @@ RED.nodes = (function() { | |||
"z": 0, | |||
"wires": [] | |||
}); | |||
// first solution: skip existing id | |||
if (!RED.nodes.node(node.id)) { | |||
nodes.push(node); | |||
} else { | |||
skipped.push(node.id); | |||
} | |||
break; | |||
} | |||
}; | |||
@@ -422,6 +426,7 @@ RED.nodes = (function() { | |||
} | |||
}; | |||
/* | |||
var readCode = function() { | |||
var fileImport = $("#importInput")[0]; | |||
@@ -440,11 +445,16 @@ RED.nodes = (function() { | |||
alert("Please upload a valid INO or text file."); | |||
} | |||
}; | |||
*/ | |||
traverseLines(newNodesStr); | |||
linkCables(cables); | |||
return JSON.stringify(nodes); | |||
return { | |||
count: nodes.length, | |||
skipped: skipped.length, | |||
data: count > 0 ? JSON.stringify(nodes) : "" | |||
}; | |||
} | |||
function importNodes(newNodesObj,createNewIds) { |
@@ -434,7 +434,7 @@ RED.editor = (function() { | |||
$("#"+prefix+"-"+d).change(); | |||
} | |||
} | |||
} | |||
}; | |||
if (definition.credentials) { | |||
if (node.credentials) { | |||
@@ -456,9 +456,11 @@ RED.editor = (function() { | |||
function showEditDialog(node) { | |||
editing_node = node; | |||
RED.view.state(RED.state.EDITING); | |||
$("#dialog-form").html($("script[data-template-name='"+node.type+"']").html()); | |||
prepareEditDialog(node,node._def,"node-input"); | |||
$( "#dialog" ).dialog("option","title","Edit "+node.type+" node").dialog( "open" ); | |||
//$("#dialog-form").html(RED.view.getForm(node.type)); | |||
RED.view.getForm("dialog-form", node.type, function (d, f) { | |||
prepareEditDialog(node,node._def,"node-input"); | |||
$( "#dialog" ).dialog("option","title","Edit "+node.type+" node").dialog( "open" ); | |||
}); | |||
} | |||
function showEditConfigNodeDialog(name,type,id) { | |||
@@ -471,7 +473,7 @@ RED.editor = (function() { | |||
id: (1+Math.random()*4294967295).toString(16), | |||
_def: node_def, | |||
type: type | |||
} | |||
}; | |||
for (var d in node_def.defaults) { | |||
if (node_def.defaults[d].value) { | |||
configNode[d] = node_def.defaults[d].value; | |||
@@ -479,7 +481,9 @@ RED.editor = (function() { | |||
} | |||
} | |||
$("#dialog-config-form").html($("script[data-template-name='"+type+"']").html()); | |||
//$("#dialog-config-form").html(RED.view.getForm(type)); | |||
RED.view.getForm("dialog-config-form", type, function (d, f) { | |||
prepareEditDialog(configNode,node_def,"node-config-input"); | |||
var buttons = $( "#node-config-dialog" ).dialog("option","buttons"); | |||
@@ -533,6 +537,7 @@ RED.editor = (function() { | |||
.dialog("option","node-type",type) | |||
.dialog("option","title",(adding?"Add new ":"Edit ")+type+" config node") | |||
.dialog( "open" ); | |||
}); | |||
} | |||
function updateConfigNodeSelect(name,type,value) { |
@@ -86,21 +86,13 @@ RED.palette = (function() { | |||
} | |||
$("#palette-"+def.category).append(d); | |||
d.onmousedown = function(e) { e.preventDefault(); } | |||
d.onmousedown = function(e) { e.preventDefault(); }; | |||
setTooltipContent('', nt, d); | |||
$(d).popover({ | |||
title:d.type, | |||
placement:"right", | |||
trigger: "hover", | |||
delay: { show: 750, hide: 50 }, | |||
html: true, | |||
container:'body', | |||
content: $(($("script[data-help-name|='"+nt+"']").html()||"<h2>empty</h2><p>no information available</p>").trim())[2] // TODO: how to use jQuery to always select the first <p> within the html? | |||
}); | |||
$(d).click(function() { | |||
RED.nodes.selectNode(d.type); | |||
var help = '<div class="node-help">'+($("script[data-help-name|='"+d.type+"']").html()||"")+"</div>"; | |||
$("#tab-info").html(help); | |||
RED.sidebar.info.setHelpContent('', d.type); | |||
}); | |||
$(d).draggable({ | |||
helper: 'clone', | |||
@@ -113,7 +105,35 @@ RED.palette = (function() { | |||
$(this).next().slideToggle(); | |||
$(this).children("i").toggleClass("expanded"); | |||
}); | |||
} | |||
} | |||
function setTooltipContent(prefix, key, elem) { | |||
// server test switched off - test purposes only | |||
var patt = new RegExp(/^[http|https]/); | |||
var server = false && patt.test(location.protocol); | |||
var options = { | |||
title: elem.type, | |||
placement: "right", | |||
trigger: "hover", | |||
delay: { show: 750, hide: 50 }, | |||
html: true, | |||
container:'body', | |||
content : "" | |||
}; | |||
if (!server) { | |||
data = $("script[data-help-name|='" + key + "']").html(); | |||
var firstP = $("<div/>").append(data).children("p").first().html(); | |||
options.content = firstP; | |||
$(elem).popover(options); | |||
} else { | |||
$.get( "resources/help/" + key + ".html", function( data ) { | |||
var firstP = $("<div/>").append(data).children("p").first().html(); | |||
options.content = firstP; | |||
$(elem).popover(options); | |||
}); | |||
} | |||
} | |||
@@ -78,14 +78,33 @@ RED.sidebar.info = (function() { | |||
} | |||
} | |||
table += "</tbody></table><br/>"; | |||
table += '<div class="node-help">'+($("script[data-help-name|='"+node.type+"']").html()||"")+"</div>"; | |||
$("#tab-info").html(table); | |||
this.setHelpContent(table, node.type); | |||
} | |||
function setHelpContent(prefix, key) { | |||
// server test switched off - test purposes only | |||
var patt = new RegExp(/^[http|https]/); | |||
var server = false && patt.test(location.protocol); | |||
prefix = prefix == "" ? "<h3>" + key + "</h3>" : prefix; | |||
if (!server) { | |||
data = $("script[data-help-name|='" + key + "']").html(); | |||
$("#tab-info").html(prefix + '<div class="node-help">' + data + '</div>'); | |||
} else { | |||
$.get( "resources/help/" + key + ".html", function( data ) { | |||
$("#tab-info").html(prefix + '<h2>' + key + '</h2><div class="node-help">' + data + '</div>'); | |||
}).fail(function () { | |||
$("#tab-info").html(prefix); | |||
}); | |||
} | |||
} | |||
return { | |||
refresh:refresh, | |||
clear: function() { | |||
$("#tab-info").html(""); | |||
} | |||
}, | |||
setHelpContent: setHelpContent | |||
} | |||
})(); |
@@ -60,7 +60,7 @@ RED.view = (function() { | |||
"yellow": "#F9DF31", | |||
"blue": "#53A3F3", | |||
"grey": "#d3d3d3" | |||
} | |||
}; | |||
var outer = d3.select("#chart") | |||
.append("svg:svg") | |||
@@ -108,7 +108,7 @@ RED.view = (function() { | |||
moveTouchCenter = [ | |||
touch1['pageX']+(b/2), | |||
touch1['pageY']+(a/2) | |||
] | |||
]; | |||
startTouchDistance = Math.sqrt((a*a)+(b*b)); | |||
} else { | |||
var obj = d3.select(document.body); | |||
@@ -568,6 +568,10 @@ RED.view = (function() { | |||
nn.type = selected_tool; | |||
nn._def = RED.nodes.getType(nn.type); | |||
nn.id = RED.nodes.cppName(nn); | |||
nn._def.defaults = nn._def.defaults ? nn._def.defaults : {}; | |||
nn._def.defaults.name = { value: nn.id }; | |||
nn.outputs = nn._def.outputs; | |||
nn.changed = true; | |||
@@ -729,8 +733,8 @@ RED.view = (function() { | |||
node.x = 25 | |||
} | |||
var rmlinks = RED.nodes.remove(node.id); | |||
for (var i=0; i < rmlinks.length; i++) { | |||
var link = rmlinks[i]; | |||
for (var j=0; j < rmlinks.length; j++) { | |||
var link = rmlinks[j]; | |||
//console.log("delete link: " + link.source.id + ":" + link.sourcePort | |||
// + " -> " + link.target.id + ":" + link.targetPort); | |||
if (link.source == node) { | |||
@@ -760,7 +764,7 @@ RED.view = (function() { | |||
.on("mouseup", (function(d,n){return function(d){portMouseUp(d,1,n);}})(rect, n)) | |||
.on("touchend", (function(d,n){return function(d){portMouseUp(d,1,n);}})(rect, n)) | |||
.on("mouseover",function(d) { var port = d3.select(this); port.classed("port_hovered",(mouse_mode!=RED.state.JOINING || mousedown_port_type != 1 ));}) | |||
.on("mouseout",function(d) { var port = d3.select(this); port.classed("port_hovered",false);}) | |||
.on("mouseout",function(d) { var port = d3.select(this); port.classed("port_hovered",false);}); | |||
RED.nodes.removeLink(selected_link); | |||
removedLinks.push(selected_link); | |||
setDirty(true); | |||
@@ -1003,7 +1007,7 @@ RED.view = (function() { | |||
node.attr("id",d.id); | |||
//var l = d._def.label; | |||
//l = (typeof l === "function" ? l.call(d) : l)||""; | |||
var l = d.id; | |||
var l = d.name ? d.name : d.id; | |||
d.w = Math.max(node_width,calculateTextWidth(l)+(d._def.inputs>0?7:0) ); | |||
d.h = Math.max(node_height,(Math.max(d.outputs,d._def.inputs)||0) * 15); | |||
@@ -1123,7 +1127,7 @@ RED.view = (function() { | |||
if ("right" == d._def.align) { | |||
icon_group.attr('class','node_icon_group node_icon_group_'+d._def.align); | |||
icon_shade_border.attr("d",function(d) { return "M 0 1 l 0 "+(d.h-2)}) | |||
icon_shade_border.attr("d",function(d) { return "M 0 1 l 0 "+(d.h-2)}); | |||
//icon.attr('class','node_icon node_icon_'+d._def.align); | |||
//icon.attr('class','node_icon_shade node_icon_shade_'+d._def.align); | |||
//icon.attr('class','node_icon_shade_border node_icon_shade_border_'+d._def.align); | |||
@@ -1149,7 +1153,7 @@ RED.view = (function() { | |||
// icon_shade.attr("x",function(d){return d.w-30}); | |||
// icon_shade_border.attr("d",function(d){return "M "+(d.w-30)+" 1 l 0 "+(d.h-2);}); | |||
//} | |||
} | |||
}; | |||
//icon.style("pointer-events","none"); | |||
icon_group.style("pointer-events","none"); | |||
@@ -1225,7 +1229,7 @@ RED.view = (function() { | |||
if (d.resize) { | |||
//var l = d._def.label; | |||
//l = (typeof l === "function" ? l.call(d) : l)||""; | |||
var l = d.id; | |||
var l = d.name ? d.name : d.id; | |||
d.w = Math.max(node_width,calculateTextWidth(l)+(d._def.inputs>0?7:0) ); | |||
d.h = Math.max(node_height,(Math.max(d.outputs,d._def.inputs)||0) * 15); | |||
} | |||
@@ -1277,8 +1281,9 @@ RED.view = (function() { | |||
return d._def.label; | |||
} | |||
} | |||
return ""; */ | |||
return d.id; | |||
return "n.a."; | |||
*/ | |||
return d.name ? d.name : d.id; | |||
}) | |||
.attr('y', function(d){return (d.h/2)-1;}) | |||
.attr('class',function(d){ | |||
@@ -1337,7 +1342,7 @@ RED.view = (function() { | |||
} | |||
} | |||
return ""; */ | |||
return d.id; | |||
return d.name ? d.name : d.id; | |||
}); | |||
if (!showStatus || !d.status) { | |||
thisNode.selectAll('.node_status_group').style("display","none"); | |||
@@ -1404,7 +1409,7 @@ RED.view = (function() { | |||
link.exit().remove(); | |||
var links = vis.selectAll(".link_path") | |||
var links = vis.selectAll(".link_path"); | |||
links.attr("d",function(d){ | |||
var numOutputs = d.source.outputs || 1; | |||
var sourcePort = d.sourcePort || 0; | |||
@@ -1438,7 +1443,7 @@ RED.view = (function() { | |||
" C "+(d.x1+scale*node_width)+" "+(d.y1+scaleY*node_height)+" "+ | |||
(d.x2-scale*node_width)+" "+(d.y2-scaleY*node_height)+" "+ | |||
(d.x2)+" "+d.y2; | |||
}) | |||
}); | |||
link.classed("link_selected", function(d) { return d === selected_link || d.selected; }); | |||
link.classed("link_unknown",function(d) { return d.target.type == "unknown" || d.source.type == "unknown"}); | |||
@@ -1477,17 +1482,26 @@ RED.view = (function() { | |||
function importNodes(newNodesStr,touchImport) { | |||
var createNewIds = true; | |||
// TODO: solve this more elegant as the system expects | |||
var useStorage = false; | |||
if ($("#node-input-arduino").prop('checked') === true) { | |||
newNodesStr = RED.nodes.cppToJSON(newNodesStr); | |||
nodesJSON = RED.nodes.cppToJSON(newNodesStr); | |||
if (nodesJSON.count <= 0 || nodesJSON.skipped > 0) { | |||
var note = "No (or not all) nodes imported, because some IDs existed already!"; | |||
RED.notify("<strong>Note</strong>: " + note, "warning"); | |||
} | |||
newNodesStr = nodesJSON.data; | |||
createNewIds = false; | |||
if (useStorage) { | |||
RED.storage.clear(); | |||
localStorage.setItem("audio_library_guitool", newNodesStr); | |||
RED.storage.load(); | |||
redraw(); | |||
return; | |||
} | |||
} | |||
try { | |||
var result = RED.nodes.import(newNodesStr,createNewIds); | |||
@@ -1560,33 +1574,37 @@ RED.view = (function() { | |||
function showExportNodesDialog() { | |||
mouse_mode = RED.state.EXPORT; | |||
var nns = RED.nodes.createExportableNodeSet(moving_set); | |||
$("#dialog-form").html($("script[data-template-name='export-clipboard-dialog']").html()); | |||
$("#node-input-export").val(JSON.stringify(nns)); | |||
$("#node-input-export").focus(function() { | |||
//$("#dialog-form").html(getForm("dialog-form", "export-clipboard-dialog")); | |||
var frm = getForm("dialog-form", "export-clipboard-dialog", function (d, f) { | |||
$("#node-input-export").val(JSON.stringify(nns)).focus(function() { | |||
var textarea = $(this); | |||
textarea.select(); | |||
textarea.mouseup(function() { | |||
textarea.unbind("mouseup"); | |||
return false; | |||
}); | |||
}); | |||
}).focus(); | |||
$( "#dialog" ).dialog("option","title","Export nodes to clipboard").dialog( "open" ); | |||
$("#node-input-export").focus(); | |||
}); | |||
} | |||
function showExportNodesLibraryDialog() { | |||
mouse_mode = RED.state.EXPORT; | |||
var nns = RED.nodes.createExportableNodeSet(moving_set); | |||
$("#dialog-form").html($("script[data-template-name='export-library-dialog']").html()); | |||
//$("#dialog-form").html(this.getForm('export-library-dialog')); | |||
getForm("dialog-form", "export-library-dialog", function(d, f) { | |||
$("#node-input-filename").attr('nodes',JSON.stringify(nns)); | |||
$( "#dialog" ).dialog("option","title","Export nodes to library").dialog( "open" ); | |||
}); | |||
} | |||
function showImportNodesDialog() { | |||
mouse_mode = RED.state.IMPORT; | |||
$("#dialog-form").html($("script[data-template-name='import-dialog']").html()); | |||
//$("#dialog-form").html(this.getForm('import-dialog')); | |||
getForm("dialog-form", "import-dialog", function(d, f) { | |||
$("#node-input-import").val(""); | |||
$( "#dialog" ).dialog("option","title","Import nodes").dialog( "open" ); | |||
}); | |||
} | |||
function showRenameWorkspaceDialog(id) { | |||
@@ -1607,6 +1625,20 @@ RED.view = (function() { | |||
$( "#node-dialog-rename-workspace" ).dialog("open"); | |||
} | |||
function getForm(formId, key, callback) { | |||
var form = $("<h2>No form found.</h2>"); | |||
var frmPlugin = "resources/form/" + key + ".html"; | |||
$.get(frmPlugin, function(data) { | |||
form = $("#" + formId); | |||
$(form).empty(); | |||
$(form).append(data); | |||
if(typeof callback == 'function') { | |||
callback.call(this, form); | |||
} | |||
}); | |||
return form; | |||
} | |||
$("#node-dialog-rename-workspace form" ).submit(function(e) { e.preventDefault();}); | |||
$( "#node-dialog-rename-workspace" ).dialog({ | |||
modal: true, | |||
@@ -1726,6 +1758,7 @@ RED.view = (function() { | |||
RED.nodes.eachNode(function(n) { n.dirty = true;}); | |||
//TODO: subscribe/unsubscribe here | |||
redraw(); | |||
} | |||
}, | |||
getForm: getForm | |||
}; | |||
})(); |
@@ -0,0 +1,43 @@ | |||
{"nodes":[ | |||
{"type":"AudioInputI2S","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2s","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioInputAnalog","data":{"defaults":{"name":{"value":"new"}},"shortName":"adc","inputs":0,"outputs":1,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioInputI2Sslave","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2ss","inputs":0,"outputs":2,"category":"input-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioOutputI2S","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2s","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioOutputSPDIF","data":{"defaults":{"name":{"value":"new"}},"shortName":"spdif","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioOutputAnalog","data":{"defaults":{"name":{"value":"new"}},"shortName":"dac","inputs":1,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioOutputPWM","data":{"defaults":{"name":{"value":"new"}},"shortName":"pwm","inputs":1,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioOutputI2Sslave","data":{"defaults":{"name":{"value":"new"}},"shortName":"i2ss","inputs":2,"outputs":0,"category":"output-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioMixer4","data":{"defaults":{"name":{"value":"new"}},"shortName":"mixer","inputs":4,"outputs":1,"category":"mixer-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioPlayMemory","data":{"defaults":{"name":{"value":"new"}},"shortName":"playMem","inputs":0,"outputs":1,"category":"play-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioPlaySdWav","data":{"defaults":{"name":{"value":"new"}},"shortName":"playSdWav","inputs":0,"outputs":2,"category":"play-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioPlaySdRaw","data":{"defaults":{"name":{"value":"new"}},"shortName":"playSdRaw","inputs":0,"outputs":1,"category":"play-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioPlaySerialflashRaw","data":{"defaults":{"name":{"value":"new"}},"shortName":"playFlashRaw","inputs":0,"outputs":1,"category":"play-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioPlayQueue","data":{"defaults":{"name":{"value":"new"}},"shortName":"queue","inputs":0,"outputs":1,"category":"play-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioRecordQueue","data":{"defaults":{"name":{"value":"new"}},"shortName":"queue","inputs":1,"outputs":0,"category":"record-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioSynthWaveformSine","data":{"defaults":{"name":{"value":"new"}},"shortName":"sine","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioSynthWaveformSineModulated","data":{"defaults":{"name":{"value":"new"}},"shortName":"sine_fm","inputs":1,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioSynthWaveform","data":{"defaults":{"name":{"value":"new"}},"shortName":"waveform","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioSynthToneSweep","data":{"defaults":{"name":{"value":"new"}},"shortName":"tonesweep","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioSynthWaveformDc","data":{"defaults":{"name":{"value":"new"}},"shortName":"dc","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioSynthNoiseWhite","data":{"defaults":{"name":{"value":"new"}},"shortName":"noise","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioSynthNoisePink","data":{"defaults":{"name":{"value":"new"}},"shortName":"pink","inputs":0,"outputs":1,"category":"synth-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectFade","data":{"defaults":{"name":{"value":"new"}},"shortName":"fade","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectChorus","data":{"defaults":{"name":{"value":"new"}},"shortName":"chorus","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectFlange","data":{"defaults":{"name":{"value":"new"}},"shortName":"flange","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectEnvelope","data":{"defaults":{"name":{"value":"new"}},"shortName":"envelope","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectMultiply","data":{"defaults":{"name":{"value":"new"}},"shortName":"multiply","inputs":2,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectDelay","data":{"defaults":{"name":{"value":"new"}},"shortName":"delay","inputs":1,"outputs":8,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectDelayExternal","data":{"defaults":{"name":{"value":"new"}},"shortName":"delayExt","inputs":1,"outputs":8,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioEffectBitcrusher","data":{"shortName":"bitcrusher","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioFilterBiquad","data":{"defaults":{"name":{"value":"new"}},"shortName":"biquad","inputs":1,"outputs":1,"category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioFilterFIR","data":{"defaults":{"name":{"value":"new"}},"shortName":"fir","inputs":1,"outputs":1,"category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioFilterStateVariable","data":{"defaults":{"name":{"value":"new"}},"shortName":"filter","inputs":2,"outputs":3,"category":"filter-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioAnalyzePeak","data":{"defaults":{"name":{"value":"new"}},"shortName":"peak","inputs":1,"outputs":0,"category":"analyze-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioAnalyzeFFT256","data":{"defaults":{"name":{"value":"new"}},"shortName":"fft256","inputs":1,"outputs":0,"category":"analyze-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioAnalyzeFFT1024","data":{"defaults":{"name":{"value":"new"}},"shortName":"fft1024","inputs":1,"outputs":0,"category":"analyze-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioAnalyzeToneDetect","data":{"defaults":{"name":{"value":"new"}},"shortName":"tone","inputs":1,"outputs":0,"category":"analyze-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioAnalyzePrint","data":{"defaults":{"name":{"value":"new"}},"shortName":"print","inputs":1,"outputs":0,"category":"analyze-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioControlSGTL5000","data":{"defaults":{"name":{"value":"new"}},"shortName":"sgtl5000","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioControlWM8731","data":{"defaults":{"name":{"value":"new"}},"shortName":"wm8731","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}}, | |||
{"type":"AudioControlWM8731master","data":{"defaults":{"name":{"value":"new"}},"shortName":"wm8731m","inputs":0,"outputs":0,"category":"control-function","color":"#E6E0F8","icon":"arrow-in.png"}} | |||
]} |
@@ -97,7 +97,7 @@ a.brand img { | |||
#palette { | |||
background: #f3f3f3; | |||
width: 140px; | |||
width: 160px; | |||
text-align: center; | |||
-webkit-user-select: none; | |||
-khtml-user-select: none; | |||
@@ -220,7 +220,7 @@ a.brand img { | |||
border: 2px solid #999; | |||
background-position: 5% 50%; | |||
background-repeat: no-repeat; | |||
width: 90px; | |||
width: 110px; | |||
background-size: contain; | |||
position: relative; | |||
} | |||
@@ -241,7 +241,7 @@ a.brand img { | |||
border: 1px solid #999; | |||
} | |||
.palette_port_output { | |||
left:85px; | |||
left:105px; | |||
} | |||
.palette_node:hover .palette_port { |