From fa9a7e725be27b388fee3253f0d70d901c8174ab Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Tue, 22 Nov 2016 22:57:05 +0000 Subject: [PATCH] Sort quick-add types and add most-recent used type section --- editor/js/ui/typeSearch.js | 140 +++++++++++++++++++++++-------------- editor/sass/search.scss | 23 +++++- 2 files changed, 107 insertions(+), 56 deletions(-) diff --git a/editor/js/ui/typeSearch.js b/editor/js/ui/typeSearch.js index 7ce14e810..d9b02338e 100644 --- a/editor/js/ui/typeSearch.js +++ b/editor/js/ui/typeSearch.js @@ -13,6 +13,8 @@ RED.typeSearch = (function() { var activeFilter = ""; var addCallback; + var typesUsed = {}; + function search(val) { activeFilter = val.toLowerCase(); var visible = searchResults.editableList('filter'); @@ -93,12 +95,17 @@ RED.typeSearch = (function() { if (activeFilter === "" ) { return true; } - + if (data.recent) { + return false; + } return (activeFilter==="")||(data.index.indexOf(activeFilter) > -1); }, addItem: function(container,i,object) { var def = object.def; object.index = object.type.toLowerCase(); + if (object.separator) { + container.addClass("red-ui-search-result-separator") + } var div = $('',{href:'#',class:"red-ui-search-result"}).appendTo(container); var nodeDiv = $('
',{class:"red-ui-search-result-node"}).appendTo(div); @@ -118,19 +125,17 @@ RED.typeSearch = (function() { var iconContainer = $('
',{class:"palette_icon_container"}).appendTo(nodeDiv); $('
',{class:"palette_icon",style:"background-image: url(icons/"+icon_url+")"}).appendTo(iconContainer); - var contentDiv = $('
',{class:"red-ui-search-result-description"}).appendTo(div); - - var label = object.type; - if (typeof def.paletteLabel !== "undefined") { - try { - label = (typeof def.paletteLabel === "function" ? def.paletteLabel.call(def) : def.paletteLabel)||""; - label += " ("+object.type+")"; - object.index += "|"+label.toLowerCase(); - } catch(err) { - console.log("Definition error: "+object.type+".paletteLabel",err); - } + if (def.inputs > 0) { + $('
',{class:"red-ui-search-result-node-port"}).appendTo(nodeDiv); + } + if (def.outputs > 0) { + $('
',{class:"red-ui-search-result-node-port red-ui-search-result-node-output"}).appendTo(nodeDiv); } + var contentDiv = $('
',{class:"red-ui-search-result-description"}).appendTo(div); + + var label = object.label; + object.index += "|"+label.toLowerCase(); $('
',{class:"red-ui-search-result-node-label"}).html(label).appendTo(contentDiv); @@ -145,6 +150,7 @@ RED.typeSearch = (function() { } function confirm(def) { hide(); + typesUsed[def.type] = Date.now(); addCallback(def.type); } @@ -205,41 +211,83 @@ RED.typeSearch = (function() { $(document).off('click.type-search'); } } + + function getTypeLabel(type, def) { + var label = type; + if (typeof def.paletteLabel !== "undefined") { + try { + label = (typeof def.paletteLabel === "function" ? def.paletteLabel.call(def) : def.paletteLabel)||""; + label += " ("+type+")"; + } catch(err) { + console.log("Definition error: "+type+".paletteLabel",err); + } + } + return label; + } + function refreshTypeList() { + var i; searchResults.editableList('empty'); searchInput.searchBox('value',''); selected = -1; - var common = { - "debug" : false, - "inject" : false, - "function": false - }; - var nodeTypes = RED.nodes.registry.getNodeTypes().filter(function(n) { - if (common.hasOwnProperty(n)) { - common[n] = true; - return false; - } - return true; + var common = [ + 'debug','inject','function','change','switch' + ]; + + var recentlyUsed = Object.keys(typesUsed); + recentlyUsed.sort(function(a,b) { + return typesUsed[b]-typesUsed[a]; + }); + recentlyUsed = recentlyUsed.filter(function(t) { + return common.indexOf(t) === -1; }); - // Just in case a core node has been disabled - if (common["function"]) { - nodeTypes.unshift("function"); - } - if (common["inject"]) { - nodeTypes.unshift("inject"); - } - if (common["debug"]) { - nodeTypes.unshift("debug"); - } - - var i; - for (i=0;i