Skip to content

Commit c4e43fc

Browse files
authored
Merge pull request #445 from canjs/fix-search
Fix search
2 parents 84d9ab9 + 94c804b commit c4e43fc

File tree

3 files changed

+56
-31
lines changed

3 files changed

+56
-31
lines changed

templates/search-results.stache

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,23 @@
1414

1515
{{#if numResults}}
1616
<ul>
17-
{{#each results as result}}
17+
{{#each(results)}}
1818
<li>
19-
<a href="{{docUrl(result.url)}}" title="{{result.name}}" class="result-name">
20-
{{#if result.title}}{{result.title}}{{else}}{{result.name}}{{/if}}
21-
22-
23-
{{#if result.title}}
24-
{{^eq result.name result.title}}
19+
<a href="{{docUrl(url)}}" title="{{name}}" class="result-name">
20+
{{#if title}}
21+
{{title}}
22+
{{^eq name title}}
2523
<span class="name">
26-
{{result.name}}
24+
{{name}}
2725
</span>
2826
{{/eq}}
27+
{{else}}
28+
{{name}}
2929
{{/if}}
3030

31-
{{#if result.description}}
32-
<div class="result-description" title="{{result.description}}">
33-
{{{addTargetToExternalURLs(result.description, docUrl(result.url))}}}
31+
{{#if description}}
32+
<div class="result-description" title="{{description}}">
33+
{{{addTargetToExternalURLs(description, docUrl(url))}}}
3434
</div>
3535
{{/if}}
3636
</a>

test/search.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<!doctype html>
2+
<title>bit-docs-html-canjs</title>
3+
<script>
4+
FuncUnit = { frameMode: true };
5+
</script>
6+
<script src="../node_modules/steal/steal.js" main="test/search"></script>
7+
<div id="qunit-fixture"></div>

test/search.js

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
var QUnit = require('steal-qunit');
22
var SearchControl = require('../static/search');
33
var searchLogic = require('../static/search-logic');
4+
var searchBarTemplate = require('../templates/search-bar.mustache!steal-stache');
5+
var searchResultsTemplate = require('../templates/search-results.mustache!steal-stache');
46

57
/* Helper function for finding a specific result */
68
var indexOfPageInResults = function(pageName, results) {
@@ -14,28 +16,45 @@ var indexOfPageInResults = function(pageName, results) {
1416
/* Clear local storage */
1517
window.localStorage.clear();
1618

17-
/* Create the search bar element */
18-
var searchBar = document.createElement('div');
19-
searchBar.id = 'search-bar';
20-
document.body.appendChild(searchBar);
19+
/* Render the search templates into the page */
20+
var qunitFixture = document.getElementById('qunit-fixture');
21+
qunitFixture.appendChild(searchBarTemplate());
22+
qunitFixture.appendChild(searchResultsTemplate());
2123

2224
/* Create a new instance of the search control */
23-
var search = new SearchControl('#search-bar', {
25+
var search = new SearchControl('.search-bar', {
2426
pathPrefix: '../doc'
2527
});
2628

2729
/* Tests */
2830
QUnit.module('search control');
2931

30-
var readyToSearch = function() {
31-
return search.searchEnginePromise.then(function(searchMap) {
32-
searchLogic.indexData(search.convertSearchMapToIndexableItems(searchMap));
32+
var setUpSearchControl = search.searchEnginePromise.then(function(searchMap) {
33+
return new Promise(function(resolve) {
34+
// Wait for the search worker to be set up
35+
setTimeout(function() {
36+
resolve(searchLogic.indexData(search.convertSearchMapToIndexableItems(searchMap)));
37+
}, 1000);
3338
});
34-
};
39+
});
40+
41+
QUnit.test('Search results render', function(assert) {
42+
var done = assert.async();
43+
setUpSearchControl.then(function() {
44+
search.search('can-');
45+
setTimeout(function() {
46+
var searchResultLis = document.querySelectorAll('.search-results li');
47+
assert.equal(searchResultLis.length > 1, true, 'got more than 1 result');
48+
var firstResultText = searchResultLis[0].querySelector('a').textContent.trim();
49+
assert.notEqual(firstResultText, '', 'first result has text');
50+
done();
51+
}, 1000);
52+
});
53+
});
3554

3655
QUnit.test('Search for “about”', function(assert) {
3756
var done = assert.async();
38-
readyToSearch().then(function() {
57+
setUpSearchControl.then(function() {
3958
var results = searchLogic.search('about');
4059
assert.equal(results.length > 1, true, 'got more than 1 result');
4160
assert.equal(indexOfPageInResults('about', results), 0, 'first result is the About page');
@@ -45,7 +64,7 @@ QUnit.test('Search for “about”', function(assert) {
4564

4665
QUnit.test('Search for “can-component”', function(assert) {
4766
var done = assert.async();
48-
readyToSearch().then(function() {
67+
setUpSearchControl.then(function() {
4968
var results = searchLogic.search('can-component');
5069
assert.equal(results.length > 1, true, 'got more than 1 result');
5170
assert.equal(indexOfPageInResults('can-component', results), 0, 'first result is the can-component page');
@@ -55,7 +74,7 @@ QUnit.test('Search for “can-component”', function(assert) {
5574

5675
QUnit.test('Search for “can-connect”', function(assert) {
5776
var done = assert.async();
58-
readyToSearch().then(function() {
77+
setUpSearchControl.then(function() {
5978
var results = searchLogic.search('can-connect');
6079
assert.equal(results.length > 1, true, 'got more than 1 result');
6180
assert.equal(indexOfPageInResults('can-connect', results), 0, 'first result is the can-connect page');
@@ -65,7 +84,7 @@ QUnit.test('Search for “can-connect”', function(assert) {
6584

6685
QUnit.test('Search for “helpers/', function(assert) {
6786
var done = assert.async();
68-
readyToSearch().then(function() {
87+
setUpSearchControl.then(function() {
6988
var results = searchLogic.search('helpers/');
7089
assert.equal(results.length > 1, true, 'got more than 1 result');
7190
done();
@@ -74,7 +93,7 @@ QUnit.test('Search for “helpers/', function(assert) {
7493

7594
QUnit.test('Search for “Live Binding”', function(assert) {
7695
var done = assert.async();
77-
readyToSearch().then(function() {
96+
setUpSearchControl.then(function() {
7897
var results = searchLogic.search('Live Binding');
7998
assert.equal(results.length > 1, true, 'got more than 1 result');
8099
assert.equal(indexOfPageInResults('can-stache.Binding', results) < 2, true, 'first result is the can-stache Live Binding page');
@@ -84,7 +103,7 @@ QUnit.test('Search for “Live Binding”', function(assert) {
84103

85104
QUnit.test('Search for “Play”', function(assert) {
86105
var done = assert.async();
87-
readyToSearch().then(function() {
106+
setUpSearchControl.then(function() {
88107
var results = searchLogic.search('Play');
89108
assert.equal(results.length > 0, true, 'got results');
90109
assert.equal(indexOfPageInResults('guides/recipes/playlist-editor', results), 0, 'first result is the “Playlist Editor (Advanced)” guide');
@@ -94,7 +113,7 @@ QUnit.test('Search for “Play”', function(assert) {
94113

95114
QUnit.test('Search for “stache”', function(assert) {
96115
var done = assert.async();
97-
readyToSearch().then(function() {
116+
setUpSearchControl.then(function() {
98117
var results = searchLogic.search('stache');
99118
assert.equal(results.length > 1, true, 'got more than 1 result');
100119
assert.equal(indexOfPageInResults('can-stache', results), 0, 'first result is the can-stache page');
@@ -104,7 +123,7 @@ QUnit.test('Search for “stache”', function(assert) {
104123

105124
QUnit.test('Search for “%special”', function(assert) {
106125
var done = assert.async();
107-
readyToSearch().then(function() {
126+
setUpSearchControl.then(function() {
108127
var results = searchLogic.search('%special');
109128
assert.equal(results.length > 0, true, 'got results');
110129
assert.equal(indexOfPageInResults('can-stache/keys/special', results), 0, 'first result is the can-stache/keys/special page');
@@ -114,18 +133,17 @@ QUnit.test('Search for “%special”', function(assert) {
114133

115134
QUnit.test('Search for “define/map”', function(assert) {
116135
var done = assert.async();
117-
readyToSearch().then(function() {
136+
setUpSearchControl.then(function() {
118137
var results = searchLogic.search('define/map');
119138
assert.equal(results.length > 1, true, 'got more than 1 result');
120139
assert.equal(indexOfPageInResults('can-define/map/map', results), 0, 'first result is the can-define/map/map page');
121140
done();
122141
});
123142
});
124143

125-
126144
QUnit.test('Speed while searching for can-*', function(assert) {
127145
var done = assert.async();
128-
readyToSearch().then(function() {
146+
setUpSearchControl.then(function() {
129147
var startTime = new Date();
130148
var results = searchLogic.search('can-zone');
131149
var totalTime = new Date() - startTime;

0 commit comments

Comments
 (0)