/** * Copyright 2013, 2016 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.palette = (function() { var exclusion = ['config','unknown','deprecated']; var coreCategories = ['subflows', 'input', 'output', 'function', 'social', 'mobile', 'storage', 'analysis', 'advanced']; var categoryContainers = {}; function createCategoryContainer(category, label){ label = label || category.replace("_", " "); var catDiv = $('
').appendTo("#palette-container"); categoryContainers[category] = { container: catDiv, close: function() { catDiv.removeClass("palette-open"); catDiv.addClass("palette-closed"); $("#palette-base-category-"+category).slideUp(); $("#palette-header-"+category+" i").removeClass("expanded"); }, open: function() { catDiv.addClass("palette-open"); catDiv.removeClass("palette-closed"); $("#palette-base-category-"+category).slideDown(); $("#palette-header-"+category+" i").addClass("expanded"); }, toggle: function() { if (catDiv.hasClass("palette-open")) { categoryContainers[category].close(); } else { categoryContainers[category].open(); } } }; $("#palette-header-"+category).on('click', function(e) { categoryContainers[category].toggle(); }); } function setLabel(type, el,label, info) { var nodeWidth = 82; var nodeHeight = 25; var lineHeight = 20; var portHeight = 10; var words = label.split(/[ -]/); var displayLines = []; var currentLine = words[0]; var currentLineWidth = RED.view.calculateTextWidth(currentLine, "palette_label", 0); for (var i=1;i"+RED.bidi.applyBidiSupport(label,RED.bidi.flags.BTD & RED.bidi.flags.NS)+"
"; if (label != type) { l = ""+RED.bidi.applyBidiSupport(label,RED.bidi.flags.BTD & RED.bidi.flags.NS)+"
"+type+"
"+RED._("palette.noInfo")+"
").trim()) .filter(function(n) { return (this.nodeType == 1 && this.nodeName == "P") || (this.nodeType == 3 && this.textContent.trim().length > 0) }).slice(0,2); } catch(err) { // Malformed HTML may cause errors. TODO: need to understand what can break // NON-NLS: internal debug console.log("Error generating pop-over label for ",type); console.log(err.toString()); popOverContent = ""+label+"
"+RED._("palette.noInfo")+"
"; } el.data('popover').setContent(popOverContent); } function escapeNodeType(nt) { return nt.replace(" ","_").replace(".","_").replace(":","_"); } function addNodeType(nt,def) { var nodeTypeId = escapeNodeType(nt); if ($("#palette_node_"+nodeTypeId).length) { return; } if (exclusion.indexOf(def.category)===-1) { var category = def.category.replace(" ","_"); var rootCategory = category.split("-")[0]; var d = document.createElement("div"); d.id = "palette_node_"+nodeTypeId; d.type = nt; var label = /^(.*?)([ -]in|[ -]out)?$/.exec(nt)[1]; if (typeof def.paletteLabel !== "undefined") { try { label = (typeof def.paletteLabel === "function" ? def.paletteLabel.call(def) : def.paletteLabel)||""; } catch(err) { console.log("Definition error: "+nt+".paletteLabel",err); } } $('',{class:"palette_label"+(def.align=="right"?" palette_label_right":"")}).appendTo(d); d.className="palette_node"; if (def.icon) { var icon_url = "arrow-in.png"; try { icon_url = (typeof def.icon === "function" ? def.icon.call({}) : def.icon); } catch(err) { console.log("Definition error: "+nt+".icon",err); } var iconContainer = $('',{class:"palette_icon_container"+(def.align=="right"?" palette_icon_container_right":"")}).appendTo(d); $('',{class:"palette_icon",style:"background-image: url(icons/"+icon_url+")"}).appendTo(iconContainer); } d.style.backgroundColor = def.color; if (def.outputs > 0) { var portOut = document.createElement("div"); portOut.className = "palette_port palette_port_output"; d.appendChild(portOut); } if (def.inputs > 0) { var portIn = document.createElement("div"); portIn.className = "palette_port palette_port_input"; d.appendChild(portIn); } if ($("#palette-base-category-"+rootCategory).length === 0) { if(coreCategories.indexOf(rootCategory) !== -1){ createCategoryContainer(rootCategory, RED._("node-red:palette.label."+rootCategory, {defaultValue:rootCategory})); } else { var ns = def.set.id; createCategoryContainer(rootCategory, RED._(ns+":palette.label."+rootCategory, {defaultValue:rootCategory})); } } $("#palette-container-"+rootCategory).show(); if ($("#palette-"+category).length === 0) { $("#palette-base-category-"+rootCategory).append(''); } $("#palette-"+category).append(d); d.onmousedown = function(e) { e.preventDefault(); }; RED.popover.create({ target:$(d), content: "hi", delay: { show: 750, hide: 50 } }); // $(d).popover({ // title:d.type, // placement:"right", // trigger: "hover", // delay: { show: 750, hide: 50 }, // html: true, // container:'body' // }); $(d).click(function() { RED.view.focus(); var helpText; if (nt.indexOf("subflow:") === 0) { helpText = marked(RED.nodes.subflow(nt.substring(8)).info||""); } else { helpText = $("script[data-help-name$='"+d.type+"']").html()||""; } var help = '