|
- /** Modified from original Node-Red source, for audio system visualization
- * vim: set ts=4:
- * 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() {
-
- $('#btn-keyboard-shortcuts').click(function(){showHelp();});
-
- 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) {
- RED.storage.update();
-
- if (RED.nodes.hasIO()) {
- var nns = RED.nodes.createCompleteNodeSet();
- // sort by horizontal position, plus slight vertical position,
- // for well defined update order that follows signal flow
- nns.sort(function(a,b){ return (a.x + a.y/250) - (b.x + b.y/250); });
- //console.log(JSON.stringify(nns));
-
- var cpp = "#include <Audio.h>\n#include <Wire.h>\n"
- + "#include <SPI.h>\n#include <SD.h>\n#include <SerialFlash.h>\n\n"
- + "// GUItool: begin automatically generated code\n";
- // generate code for all audio processing nodes
- for (var i=0; i<nns.length; i++) {
- var n = nns[i];
- var node = RED.nodes.node(n.id);
- if (node && (node.outputs > 0 || node._def.inputs > 0)) {
- cpp += n.type + " ";
- for (var j=n.type.length; j<24; j++) cpp += " ";
- 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";
- }
- }
- // generate code for all connections (aka wires or links)
- var cordcount = 1;
- for (var i=0; i<nns.length; i++) {
- var n = nns[i];
- if (n.wires) {
- for (var j=0; j<n.wires.length; j++) {
- var wires = n.wires[j];
- if (!wires) continue;
- for (var k=0; k<wires.length; k++) {
- var wire = n.wires[j][k];
- if (wire) {
- var parts = wire.split(":");
- if (parts.length == 2) {
- cpp += "AudioConnection patchCord" + cordcount + "(";
- var src = RED.nodes.node(n.id);
- var dst = RED.nodes.node(parts[0]);
- if (j == 0 && parts[1] == 0 && src && src.outputs == 1 && dst && dst._def.inputs == 1) {
- cpp += n.id + ", " + parts[0];
- } else {
- cpp += n.id + ", " + j + ", " + parts[0] + ", " + parts[1];
- }
- cpp += ");\n";
- cordcount++;
- }
- }
- }
- }
- }
- }
- // generate code for all control nodes (no inputs or outputs)
- for (var i=0; i<nns.length; i++) {
- var n = nns[i];
- var node = RED.nodes.node(n.id);
- 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 + "; ";
- for (var j=n.id.length; j<14; j++) cpp += " ";
- cpp += "//xy=" + n.x + "," + n.y + "\n";
- }
- }
- cpp += "// GUItool: end automatically generated code\n";
- //console.log(cpp);
-
- RED.view.state(RED.state.EXPORT);
- 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" );
- });
- //RED.view.dirty(false);
- } else {
- $( "#node-dialog-error-deploy" ).dialog({
- title: "Error exporting data to Arduino IDE",
- modal: true,
- autoOpen: false,
- width: 410,
- height: 245,
- buttons: [{
- text: "Ok",
- click: function() {
- $( this ).dialog( "close" );
- }
- }]
- }).dialog("open");
- }
- }
-
- $('#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" );
- }
- }
- ]
- });
-
- // from http://css-tricks.com/snippets/javascript/get-url-variables/
- function getQueryVariable(variable) {
- var query = window.location.search.substring(1);
- var vars = query.split("&");
- for (var i=0;i<vars.length;i++) {
- var pair = vars[i].split("=");
- if(pair[0] == variable){return pair[1];}
- }
- return(false);
- }
-
- function loadNodes() {
- $(".palette-scroll").show();
- $("#palette-search").show();
- RED.storage.load();
- RED.view.redraw();
- setTimeout(function() {
- $("#btn-deploy").removeClass("disabled").addClass("btn-danger");
- $("#btn-import").removeClass("disabled").addClass("btn-success");
- }, 1500);
- $('#btn-deploy').click(function() { save(); });
- // if the query string has ?info=className, populate info tab
- var info = getQueryVariable("info");
- if (info) {
- RED.sidebar.info.setHelpContent('', info);
- }
- }
-
- $('#btn-node-status').click(function() {toggleStatus();});
-
- var statusEnabled = false;
- function toggleStatus() {
- var btnStatus = $("#btn-node-status");
- statusEnabled = btnStatus.toggleClass("active").hasClass("active");
- 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() {
- $(".palette-spinner").show();
-
- // server test switched off - test purposes only
- var patt = new RegExp(/^[http|https]/);
- var server = false && patt.test(location.protocol);
-
- if (!server) {
- var data = $.parseJSON($("script[data-container-name|='NodeDefinitions']").html());
- 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();
- } else {
- $.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 {
- };
- })();
|