mirror of
https://github.com/google/pebble.git
synced 2025-07-18 03:56:39 -04:00
Import the pebble dev site into devsite/
This commit is contained in:
parent
3b92768480
commit
527858cf4c
1359 changed files with 265431 additions and 0 deletions
148
devsite/source/assets/js/search.js
Normal file
148
devsite/source/assets/js/search.js
Normal file
|
@ -0,0 +1,148 @@
|
|||
/**
|
||||
* Copyright 2025 Google LLC
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/* export SearchResults */
|
||||
/* export Search */
|
||||
|
||||
function SearchResults(results, type, limit) {
|
||||
this.results = results;
|
||||
this.type = type;
|
||||
this.limit = limit;
|
||||
};
|
||||
|
||||
SearchResults.prototype.render = function($container) {
|
||||
this.results.hits.splice(this.limit, this.results.hits.length);
|
||||
this.results.hits.forEach(processResult.bind(this));
|
||||
var $resultGroup = $(Handlebars.templates['quicksearch-result-group']({
|
||||
title: this.type.title,
|
||||
results: this.results.hits
|
||||
}));
|
||||
$container.append($resultGroup);
|
||||
};
|
||||
|
||||
function processResult(result) {
|
||||
if (result._snippetResult && result._snippetResult.content) {
|
||||
result.summary = result._snippetResult.content.value;
|
||||
}
|
||||
else if (result._snippetResult && result._snippetResult.summary) {
|
||||
result.summary = result._snippetResult.summary.value;
|
||||
}
|
||||
if (this.type.section) {
|
||||
result.section = this.type.section(result).join(' · ');
|
||||
}
|
||||
else {
|
||||
result.section = '';
|
||||
}
|
||||
}
|
||||
|
||||
function Search(config) {
|
||||
this.client = new AlgoliaSearch(config.appId, config.apiKey);
|
||||
this.prefix = config.prefix;
|
||||
this.searchNumber = 0;
|
||||
this.lastQuery = null;
|
||||
this.searchOptions = config.options;
|
||||
}
|
||||
|
||||
heir.inherit(Search, EventEmitter);
|
||||
|
||||
Search.indexes = {
|
||||
'guides': {
|
||||
title: 'Guides',
|
||||
cssClass: 'guides',
|
||||
section: function (hit) {
|
||||
var section = [ hit.group ];
|
||||
if (hit.subgroup && hit.subgroup.length) {
|
||||
section.push(hit.subgroup);
|
||||
}
|
||||
return section;
|
||||
}
|
||||
},
|
||||
'documentation': {
|
||||
title: 'Documentation',
|
||||
cssClass: 'docs',
|
||||
section: function (hit) {
|
||||
return [ hit.language ]
|
||||
}
|
||||
},
|
||||
'blog-posts': {
|
||||
title: 'Blog Posts',
|
||||
cssClass: 'more',
|
||||
section: function (hit) {
|
||||
var dateString = hit.posted.split(" ")[0];
|
||||
if (!dateString) return "Invalid Date";
|
||||
|
||||
return [ moment(dateString).format('MMM DD YYYY')];
|
||||
}
|
||||
},
|
||||
'examples': {
|
||||
title: 'Examples',
|
||||
cssClass: 'more',
|
||||
},
|
||||
'community-resources': {
|
||||
title: 'Community Resources',
|
||||
cssClass: 'community',
|
||||
section: function (hit) {
|
||||
switch(hit.resourceType) {
|
||||
case 'community_tools':
|
||||
return ['Tool'];
|
||||
case 'community_apps':
|
||||
return ['App'];
|
||||
case 'community_libraries':
|
||||
return ['Library']
|
||||
}
|
||||
return [];
|
||||
}
|
||||
},
|
||||
'other': {
|
||||
title: 'Other',
|
||||
cssClass: 'other'
|
||||
}
|
||||
};
|
||||
|
||||
Search.prototype.search = function (query) {
|
||||
if (query === this.lastQuery) {
|
||||
return;
|
||||
}
|
||||
if (query.length <= 2) {
|
||||
this.emitEvent('clear');
|
||||
return;
|
||||
}
|
||||
this.searchNumber += 1;
|
||||
var thisNumber = this.searchNumber;
|
||||
this.client.startQueriesBatch();
|
||||
Object.keys(Search.indexes).forEach(function (type) {
|
||||
this.client.addQueryInBatch(this.prefix + type, query, this.searchOptions);
|
||||
}.bind(this));
|
||||
this.client.sendQueriesBatch(function (success, content) {
|
||||
if (thisNumber !== this.searchNumber) {
|
||||
return;
|
||||
}
|
||||
if (! success) {
|
||||
this.emitEvent('error', new Error('Algolia responded with a failure event.'));
|
||||
}
|
||||
if (! content.results) {
|
||||
this.emitEvent('error', new Error('No results returned from Algolia.'));
|
||||
}
|
||||
var results = {};
|
||||
content.results.forEach(function (result) {
|
||||
if (result.hits.length > 0) {
|
||||
var index = result.index.replace(this.prefix, '');
|
||||
results[index] = result;
|
||||
}
|
||||
}.bind(this));
|
||||
this.emitEvent('results', [ results ]);
|
||||
}.bind(this));
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue