mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
83 lines
2.5 KiB
JavaScript
83 lines
2.5 KiB
JavaScript
|
/* eslint-disable
|
||
|
camelcase,
|
||
|
handle-callback-err,
|
||
|
max-len,
|
||
|
no-return-assign,
|
||
|
no-undef,
|
||
|
*/
|
||
|
// TODO: This file was created by bulk-decaffeinate.
|
||
|
// Fix any style issues and re-enable lint.
|
||
|
/*
|
||
|
* decaffeinate suggestions:
|
||
|
* DS101: Remove unnecessary use of Array.from
|
||
|
* DS102: Remove unnecessary code created because of implicit returns
|
||
|
* DS207: Consider shorter variations of null checks
|
||
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
||
|
*/
|
||
|
define(['base', 'services/algolia-search'], App =>
|
||
|
App.controller('SearchWikiController', function($scope, algoliaSearch, _) {
|
||
|
$scope.hits = []
|
||
|
|
||
|
$scope.clearSearchText = function() {
|
||
|
$scope.searchQueryText = ''
|
||
|
return updateHits([])
|
||
|
}
|
||
|
|
||
|
$scope.safeApply = function(fn) {
|
||
|
const phase = $scope.$root.$$phase
|
||
|
if (phase === '$apply' || phase === '$digest') {
|
||
|
return $scope.$eval(fn)
|
||
|
} else {
|
||
|
return $scope.$apply(fn)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const buildHitViewModel = function(hit) {
|
||
|
const page_underscored = hit.pageName.replace(/\s/g, '_')
|
||
|
const section_underscored = hit.sectionName.replace(/\s/g, '_')
|
||
|
let content = hit._highlightResult.content.value
|
||
|
// Replace many new lines
|
||
|
content = content.replace(/\n\n+/g, '\n\n')
|
||
|
const lines = content.split('\n')
|
||
|
// Only show the lines that have a highlighted match
|
||
|
const matching_lines = []
|
||
|
for (let line of Array.from(lines)) {
|
||
|
if (!/^\[edit\]/.test(line)) {
|
||
|
content += line + '\n'
|
||
|
if (/<em>/.test(line)) {
|
||
|
matching_lines.push(line)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
content = matching_lines.join('\n...\n')
|
||
|
const result = {
|
||
|
name:
|
||
|
hit._highlightResult.pageName.value +
|
||
|
' - ' +
|
||
|
hit._highlightResult.sectionName.value,
|
||
|
url: `/learn/${page_underscored}#${section_underscored}`,
|
||
|
content
|
||
|
}
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
var updateHits = hits => $scope.safeApply(() => ($scope.hits = hits))
|
||
|
|
||
|
return ($scope.search = function() {
|
||
|
const query = $scope.searchQueryText
|
||
|
if (query == null || query.length === 0) {
|
||
|
updateHits([])
|
||
|
return
|
||
|
}
|
||
|
|
||
|
return algoliaSearch.searchWiki(query, function(err, response) {
|
||
|
if (response.hits.length === 0) {
|
||
|
return updateHits([])
|
||
|
} else {
|
||
|
const hits = _.map(response.hits, buildHitViewModel)
|
||
|
return updateHits(hits)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
}))
|