/** * Copyright JS Foundation and other contributors, http://js.foundation * * 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', 'common', 'function', 'network', 'input', 'output', 'sequence', 'parser', 'storage', 'analysis', 'social', 'advanced' ]; var categoryContainers = {}; var sidebarControls; function createCategory(originalCategory,rootCategory,category,ns) { if ($("#red-ui-palette-base-category-"+rootCategory).length === 0) { createCategoryContainer(originalCategory,rootCategory, ns+":palette.label."+rootCategory); } $("#red-ui-palette-container-"+rootCategory).show(); if ($("#red-ui-palette-"+category).length === 0) { $("#red-ui-palette-base-category-"+rootCategory).append('
'); } } function createCategoryContainer(originalCategory,category, labelId) { var label = RED._(labelId, {defaultValue:category}); label = (label || category).replace(/_/g, " "); var catDiv = $(' ').appendTo("#red-ui-palette-container"); catDiv.data('category',originalCategory); catDiv.data('label',label); categoryContainers[category] = { container: catDiv, close: function() { catDiv.removeClass("red-ui-palette-open"); catDiv.addClass("red-ui-palette-closed"); $("#red-ui-palette-base-category-"+category).slideUp(); $("#red-ui-palette-header-"+category+" i").removeClass("expanded"); }, open: function() { catDiv.addClass("red-ui-palette-open"); catDiv.removeClass("red-ui-palette-closed"); $("#red-ui-palette-base-category-"+category).slideDown(); $("#red-ui-palette-header-"+category+" i").addClass("expanded"); }, toggle: function() { if (catDiv.hasClass("red-ui-palette-open")) { categoryContainers[category].close(); } else { categoryContainers[category].open(); } } }; $("#red-ui-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; el.attr("data-palette-label",label); label = RED.utils.sanitize(label); var words = label.split(/([ -]|\\n )/); var displayLines = []; var currentLine = ""; for (var i=0;i"+RED.text.bidi.enforceTextDirectionWithUCC(label)+"
"; popOverContent = $('').append($(l+(info?info:RED.nodes.getNodeHelp(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)); popOverContent.find("a").each(function(){ var linkText = $(this).text(); $(this).before(linkText); $(this).remove(); }); var typeInfo = RED.nodes.getType(type); if (typeInfo) { var metaData = ""; if (typeInfo && !/^subflow:/.test(type)) { metaData = typeInfo.set.module+" : "; } metaData += type; const safeType = type.replace(/'/g,"\\'"); const searchType = type.indexOf(' ') > -1 ? '"' + type + '"' : type if (/^subflow:/.test(type)) { $('').appendTo(popOverContent) } $('').appendTo(popOverContent) $('').appendTo(popOverContent) $('',{style:"font-size: 0.8em"}).text(metaData).appendTo(popOverContent); } } 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 setIcon(element,sf) { var icon_url = RED.utils.getNodeIcon(sf._def); var iconContainer = element.find(".red-ui-palette-icon-container"); var currentIcon = iconContainer.attr("data-palette-icon"); if (currentIcon !== icon_url) { iconContainer.attr("data-palette-icon", icon_url); RED.utils.createIconElement(icon_url, iconContainer, true); } } function getPaletteNode(type) { return $(".red-ui-palette-node[data-palette-type='"+type+"']"); } function escapeCategory(category) { return category.replace(/[\x00-\x2c\x2e-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]/g,"_"); } function addNodeType(nt,def) { if (getPaletteNode(nt).length) { return; } var nodeCategory = def.category; if (exclusion.indexOf(nodeCategory)===-1) { var originalCategory = nodeCategory; var category = escapeCategory(nodeCategory); var rootCategory = category.split("-")[0]; var d = $('