|
36 | 36 | categories[suggestion._tags[0]].push(suggestion) |
37 | 37 | }); |
38 | 38 |
|
39 | | - categories = $.map(Object.keys(categories).sort(), function(categoryName) { |
40 | | - var items = categories[categoryName]; |
41 | | - items[0].isCategoryHeader = true; |
42 | | - items[0].categoryName = capitalize(categoryName); |
| 39 | + var categoriesWithSubCategories = {} |
| 40 | + $.each(categories, function(categoryName, suggestions) { |
| 41 | + var subCategories = {} |
| 42 | + suggestions.forEach(function(suggestion) { |
| 43 | + var highlight = suggestion._highlightResult || {}; |
| 44 | + var title = (highlight.title || {}).value |
| 45 | + title = title || suggestion.title |
| 46 | + title = title || categoryName |
| 47 | + subCategories[title] = subCategories[title] || [] |
| 48 | + subCategories[title].push(suggestion) |
| 49 | + }); |
| 50 | + categoriesWithSubCategories[categoryName] = subCategories; |
| 51 | + }); |
| 52 | + |
| 53 | + var suggestionsSorted = [] |
| 54 | + Object.keys(categoriesWithSubCategories).sort().forEach(function(categoryName) { |
| 55 | + var subCategories = categoriesWithSubCategories[categoryName]; |
| 56 | + var firstInCategory = true; |
| 57 | + Object.keys(subCategories).sort().forEach(function(subCategoryName) { |
| 58 | + var items = subCategories[subCategoryName]; |
| 59 | + items[0].isSubCategoryHeader = true; |
| 60 | + items[0].subCategoryName = capitalize(subCategoryName); |
| 61 | + |
| 62 | + if(firstInCategory) { |
| 63 | + items[0].isCategoryHeader = true; |
| 64 | + items[0].categoryName = capitalize(categoryName); |
| 65 | + firstInCategory = false; |
| 66 | + } |
43 | 67 |
|
44 | | - return items; |
| 68 | + suggestionsSorted = suggestionsSorted.concat(items); |
| 69 | + }); |
45 | 70 | }); |
46 | | - callback(categories); |
| 71 | + |
| 72 | + callback(suggestionsSorted); |
47 | 73 | }); |
48 | 74 | }, |
49 | 75 | name: 'a', |
|
54 | 80 | if(suggestion.isCategoryHeader) { |
55 | 81 | html.push('<div class="suggestion-category">' + suggestion.categoryName + '</div>'); |
56 | 82 | } |
| 83 | + if(suggestion.isSubCategoryHeader) { |
| 84 | + html.push('<div class="suggestion-subcategory">' + suggestion.subCategoryName + '</div>'); |
| 85 | + } else { |
| 86 | + html.push('<div class="suggestion-empty-subcategory"> </div>'); |
| 87 | + } |
57 | 88 |
|
58 | 89 | var highlight = suggestion._highlightResult || {}; |
59 | 90 | var snippet = suggestion._snippetResult || {}; |
60 | | - var title = highlight.title.value; |
61 | 91 | var text = ''; |
62 | 92 | for(var i = 0 ; i < ATTRIBUTES.length ; i++) { |
63 | 93 | if(highlight[ATTRIBUTES[i]] !== undefined) { |
|
68 | 98 | } |
69 | 99 |
|
70 | 100 | html.push(' <div class="suggestion-content">'); |
71 | | - html.push(' <div class="suggestion-title">' + title + '</div>'); |
72 | 101 | html.push(' <div class="suggestion-text">' + text + '</div>'); |
73 | 102 | html.push(' </div>'); |
74 | 103 | return html.join(' '); |
|
0 commit comments