/** * 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.palette = (function() { var exclusion = ['config','unknown','deprecated']; var core = ['subflows', 'input', 'output', 'function', 'social', 'storage', 'analysis', 'advanced']; function createCategoryContainer(category){ var escapedCategory = category.replace(" ","_"); var catDiv = $("#palette-container").append('
'); $("#palette-header-"+category).on('click', function(e) { $(this).next().slideToggle(); $(this).children("i").toggleClass("expanded"); }); } function setLabel(type, el,label) { var nodeWidth = 80; 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"+label+"
"; if (label != type) { l = ""+label+"
"+type+"
no information available
").trim()) .filter(function(n) { return this.nodeType == 1 || (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 console.log("Error generating pop-over label for '"+type+"'."); console.log(err.toString()); popOverContent = ""+label+"
no information available
"; } el.data('popover').options.content = 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; if (typeof def.paletteLabel === "undefined") { label = /^(.*?)([ -]in|[ -]out)?$/.exec(nt)[1]; } else { label = (typeof def.paletteLabel === "function" ? def.paletteLabel.call(def) : def.paletteLabel)||""; } d.innerHTML = ''; d.className="palette_node"; if (def.icon) { d.style.backgroundImage = "url(icons/"+def.icon+")"; d.style.backgroundSize = "18px 27px"; if (def.align == "right") { d.style.backgroundPosition = "95% 50%"; } else if (def.inputs > 0) { d.style.backgroundPosition = "10% 50%"; } } 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) { createCategoryContainer(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(); }; $(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 help = '