|
- /** 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.
- **/
- RED.library = (function() {
-
-
- function loadFlowLibrary() {
- $.getJSON("library/flows",function(data) {
- //console.log(data);
-
- var buildMenu = function(data,root) {
- var i;
- var li;
- var a;
- var ul = document.createElement("ul");
- ul.className = "dropdown-menu";
- if (data.d) {
- for (i in data.d) {
- if (data.d.hasOwnProperty(i)) {
- li = document.createElement("li");
- li.className = "dropdown-submenu pull-left";
- a = document.createElement("a");
- a.href="#";
- a.innerHTML = i;
- li.appendChild(a);
- li.appendChild(buildMenu(data.d[i],root+(root!==""?"/":"")+i));
- ul.appendChild(li);
- }
- }
- }
- if (data.f) {
- for (i in data.f) {
- if (data.f.hasOwnProperty(i)) {
- li = document.createElement("li");
- a = document.createElement("a");
- a.href="#";
- a.innerHTML = data.f[i];
- a.flowName = root+(root!==""?"/":"")+data.f[i];
- a.onclick = function() {
- $.get('library/flows/'+this.flowName, function(data) {
- RED.view.importNodes(data);
- });
- };
- li.appendChild(a);
- ul.appendChild(li);
- }
- }
- }
- return ul;
- };
- var menu = buildMenu(data,"");
- $("#flow-menu-parent>ul").replaceWith(menu);
- });
- }
- loadFlowLibrary();
-
-
-
- function createUI(options) {
- var libraryData = {};
- var selectedLibraryItem = null;
- var libraryEditor = null;
-
- function buildFileListItem(item) {
- var li = document.createElement("li");
- li.onmouseover = function(e) { $(this).addClass("list-hover"); };
- li.onmouseout = function(e) { $(this).removeClass("list-hover"); };
- return li;
- }
-
- function buildFileList(root,data) {
- var ul = document.createElement("ul");
- var li;
- for (var i=0;i<data.length;i++) {
- var v = data[i];
- if (typeof v === "string") {
- // directory
- li = buildFileListItem(v);
- li.onclick = (function () {
- var dirName = v;
- return function(e) {
- var bcli = $('<li class="active"><span class="divider">/</span> <a href="#">'+dirName+'</a></li>');
- $("a",bcli).click(function(e) {
- $(this).parent().nextAll().remove();
- $.getJSON("library/"+options.url+root+dirName,function(data) {
- $("#node-select-library").children().first().replaceWith(buildFileList(root+dirName+"/",data));
- });
- e.stopPropagation();
- });
- var bc = $("#node-dialog-library-breadcrumbs");
- $(".active",bc).removeClass("active");
- bc.append(bcli);
- $.getJSON("library/"+options.url+root+dirName,function(data) {
- $("#node-select-library").children().first().replaceWith(buildFileList(root+dirName+"/",data));
- });
- }
- })();
- li.innerHTML = '<i class="icon-folder-close"></i> '+v+"</i>";
- ul.appendChild(li);
- } else {
- // file
- li = buildFileListItem(v);
- li.innerHTML = v.name;
- li.onclick = (function() {
- var item = v;
- return function(e) {
- $(".list-selected",ul).removeClass("list-selected");
- $(this).addClass("list-selected");
- $.get("library/"+options.url+root+item.fn, function(data) {
- console.log(data);
- selectedLibraryItem = item;
- libraryEditor.setText(data);
- });
- }
- })();
- ul.appendChild(li);
- }
- }
- return ul;
- }
-
- $('#node-input-name').addClass('input-append-left').css("width","65%").after(
- '<div class="btn-group" style="margin-left: -5px;">'+
- '<button id="node-input-'+options.type+'-lookup" class="btn input-append-right" data-toggle="dropdown"><i class="icon-book"></i> <span class="caret"></span></button>'+
- '<ul class="dropdown-menu pull-right" role="menu">'+
- '<li><a id="node-input-'+options.type+'-menu-open-library" tabindex="-1" href="#">Open Library...</a></li>'+
- '<li><a id="node-input-'+options.type+'-menu-save-library" tabindex="-1" href="#">Save to Library...</a></li>'+
- '</ul></div>'
- );
-
-
-
- $('#node-input-'+options.type+'-menu-open-library').click(function(e) {
- $("#node-select-library").children().remove();
- var bc = $("#node-dialog-library-breadcrumbs");
- bc.children().first().nextAll().remove();
- libraryEditor.setText('');
-
- $.getJSON("library/"+options.url,function(data) {
- $("#node-select-library").append(buildFileList("/",data));
- $("#node-dialog-library-breadcrumbs a").click(function(e) {
- $(this).parent().nextAll().remove();
- $("#node-select-library").children().first().replaceWith(buildFileList("/",data));
- e.stopPropagation();
- });
- $( "#node-dialog-library-lookup" ).dialog( "open" );
- });
-
- e.preventDefault();
- });
-
- $('#node-input-'+options.type+'-menu-save-library').click(function(e) {
- //var found = false;
- var name = $("#node-input-name").val().replace(/(^\s*)|(\s*$)/g,"");
-
- //var buildPathList = function(data,root) {
- // var paths = [];
- // if (data.d) {
- // for (var i in data.d) {
- // var dn = root+(root==""?"":"/")+i;
- // var d = {
- // label:dn,
- // files:[]
- // };
- // for (var f in data.d[i].f) {
- // d.files.push(data.d[i].f[f].fn.split("/").slice(-1)[0]);
- // }
- // paths.push(d);
- // paths = paths.concat(buildPathList(data.d[i],root+(root==""?"":"/")+i));
- // }
- // }
- // return paths;
- //};
- $("#node-dialog-library-save-folder").attr("value","");
-
- var filename = name.replace(/[^\w-]/g,"-");
- if (filename === "") {
- filename = "unnamed-"+options.type;
- }
- $("#node-dialog-library-save-filename").attr("value",filename+".js");
-
- //var paths = buildPathList(libraryData,"");
- //$("#node-dialog-library-save-folder").autocomplete({
- // minLength: 0,
- // source: paths,
- // select: function( event, ui ) {
- // $("#node-dialog-library-save-filename").autocomplete({
- // minLength: 0,
- // source: ui.item.files
- // });
- // }
- //});
-
- $( "#node-dialog-library-save" ).dialog( "open" );
- e.preventDefault();
- });
-
- require(["orion/editor/edit"], function(edit) {
- libraryEditor = edit({
- parent:document.getElementById('node-select-library-text'),
- lang:"js",
- readonly: true
- });
- });
-
-
- $( "#node-dialog-library-lookup" ).dialog({
- title: options.type+" library",
- modal: true,
- autoOpen: false,
- width: 800,
- height: 450,
- buttons: [
- {
- text: "Ok",
- click: function() {
- if (selectedLibraryItem) {
- for (var i=0;i<options.fields.length;i++) {
- var field = options.fields[i];
- $("#node-input-"+field).val(selectedLibraryItem[field]);
- }
- options.editor.setText(libraryEditor.getText());
- }
- $( this ).dialog( "close" );
- }
- },
- {
- text: "Cancel",
- click: function() {
- $( this ).dialog( "close" );
- }
- }
- ],
- open: function(e) {
- var form = $("form",this);
- form.height(form.parent().height()-30);
- $("#node-select-library-text").height("100%");
- $(".form-row:last-child",form).children().height(form.height()-60);
- },
- resize: function(e) {
- var form = $("form",this);
- form.height(form.parent().height()-30);
- $(".form-row:last-child",form).children().height(form.height()-60);
- }
- });
-
- function saveToLibrary(overwrite) {
- var name = $("#node-input-name").val().replace(/(^\s*)|(\s*$)/g,"");
- if (name === "") {
- name = "Unnamed "+options.type;
- }
- var filename = $("#node-dialog-library-save-filename").val().replace(/(^\s*)|(\s*$)/g,"");
- var pathname = $("#node-dialog-library-save-folder").val().replace(/(^\s*)|(\s*$)/g,"");
- if (filename === "" || !/.+\.js$/.test(filename)) {
- RED.notify("Invalid filename","warning");
- return;
- }
- var fullpath = pathname+(pathname===""?"":"/")+filename;
- if (!overwrite) {
- //var pathnameParts = pathname.split("/");
- //var exists = false;
- //var ds = libraryData;
- //for (var pnp in pathnameParts) {
- // if (ds.d && pathnameParts[pnp] in ds.d) {
- // ds = ds.d[pathnameParts[pnp]];
- // } else {
- // ds = null;
- // break;
- // }
- //}
- //if (ds && ds.f) {
- // for (var f in ds.f) {
- // if (ds.f[f].fn == fullpath) {
- // exists = true;
- // break;
- // }
- // }
- //}
- //if (exists) {
- // $("#node-dialog-library-save-type").html(options.type);
- // $("#node-dialog-library-save-name").html(fullpath);
- // $("#node-dialog-library-save-confirm").dialog( "open" );
- // return;
- //}
- }
- var queryArgs = [];
- for (var i=0;i<options.fields.length;i++) {
- var field = options.fields[i];
- if (field == "name") {
- queryArgs.push("name="+encodeURIComponent(name));
- } else {
- queryArgs.push(encodeURIComponent(field)+"="+encodeURIComponent($("#node-input-"+field).val()));
- }
- }
- var queryString = queryArgs.join("&");
-
- var text = options.editor.getText();
- $.post("library/"+options.url+'/'+fullpath+"?"+queryString,text,function() {
- RED.notify("Saved "+options.type,"success");
- });
- }
- $( "#node-dialog-library-save-confirm" ).dialog({
- title: "Save to library",
- modal: true,
- autoOpen: false,
- width: 530,
- height: 230,
- buttons: [
- {
- text: "Ok",
- click: function() {
- saveToLibrary(true);
- $( this ).dialog( "close" );
- }
- },
- {
- text: "Cancel",
- click: function() {
- $( this ).dialog( "close" );
- }
- }
- ]
- });
- $( "#node-dialog-library-save" ).dialog({
- title: "Save to library",
- modal: true,
- autoOpen: false,
- width: 530,
- height: 230,
- buttons: [
- {
- text: "Ok",
- click: function() {
- saveToLibrary(false);
- $( this ).dialog( "close" );
- }
- },
- {
- text: "Cancel",
- click: function() {
- $( this ).dialog( "close" );
- }
- }
- ]
- });
-
- }
-
- return {
- create: createUI,
- loadFlowLibrary: loadFlowLibrary
- }
- })();
-
|