mirror of
https://github.com/simon987/sist2.git
synced 2025-04-19 10:16:42 +00:00
Re-enable path autocomplete #54
This commit is contained in:
parent
13fdbd9e69
commit
27b4e6403e
@ -10,6 +10,7 @@
|
|||||||
"path": {
|
"path": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
"analyzer": "path_analyzer",
|
"analyzer": "path_analyzer",
|
||||||
|
"copy_to": "suggest-path",
|
||||||
"fielddata": true,
|
"fielddata": true,
|
||||||
"fields": {
|
"fields": {
|
||||||
"nGram": {
|
"nGram": {
|
||||||
@ -22,6 +23,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"suggest-path": {
|
||||||
|
"type": "completion",
|
||||||
|
"analyzer": "case_insensitive_kw_analyzer"
|
||||||
|
},
|
||||||
"mime": {
|
"mime": {
|
||||||
"type": "keyword"
|
"type": "keyword"
|
||||||
},
|
},
|
||||||
|
File diff suppressed because one or more lines are too long
@ -22,7 +22,7 @@
|
|||||||
#define EPILOG "Made by simon987 <me@simon987.net>. Released under GPL-3.0"
|
#define EPILOG "Made by simon987 <me@simon987.net>. Released under GPL-3.0"
|
||||||
|
|
||||||
|
|
||||||
static const char *const Version = "2.3.3";
|
static const char *const Version = "2.4.0";
|
||||||
static const char *const usage[] = {
|
static const char *const usage[] = {
|
||||||
"sist2 scan [OPTION]... PATH",
|
"sist2 scan [OPTION]... PATH",
|
||||||
"sist2 index [OPTION]... INDEX",
|
"sist2 index [OPTION]... INDEX",
|
||||||
|
4
src/static/css/autocomplete.min.css
vendored
Normal file
4
src/static/css/autocomplete.min.css
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.autocomplete-suggestions { text-align: left; cursor: default; border: 1px solid #ccc; border-top: 0; background: #fff; box-shadow: -1px 1px 3px rgba(0,0,0,.1); position: absolute; display: none; z-index: 9999; max-height: 254px; overflow: hidden; overflow-y: auto; box-sizing: border-box; }
|
||||||
|
.autocomplete-suggestion { position: relative; padding: 0 .6em; line-height: 23px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 1.02em; color: #333; }
|
||||||
|
.autocomplete-suggestion b { font-weight: normal; color: #1f8dd6; }
|
||||||
|
.autocomplete-suggestion.selected { background: #f0f0f0; }
|
3
src/static/js/auto-complete.min.js
vendored
Normal file
3
src/static/js/auto-complete.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -74,6 +74,41 @@ function showEsError() {
|
|||||||
|
|
||||||
window.onload = () => {
|
window.onload = () => {
|
||||||
CONF.load();
|
CONF.load();
|
||||||
|
new autoComplete({
|
||||||
|
selector: '#pathBar',
|
||||||
|
minChars: 1,
|
||||||
|
delay: 400,
|
||||||
|
renderItem: function (item) {
|
||||||
|
return '<div class="autocomplete-suggestion" data-val="' + item + '">' + item + '</div>';
|
||||||
|
},
|
||||||
|
source: async function (term, suggest) {
|
||||||
|
|
||||||
|
if (!CONF.options.suggestPath) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
term = term.toLowerCase();
|
||||||
|
|
||||||
|
const choices = await getPathChoices();
|
||||||
|
|
||||||
|
let matches = [];
|
||||||
|
for (let i = 0; i < choices.length; i++) {
|
||||||
|
if (~choices[i].toLowerCase().indexOf(term)) {
|
||||||
|
matches.push(choices[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
suggest(matches.sort());
|
||||||
|
},
|
||||||
|
onSelect: function () {
|
||||||
|
searchDebounced();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
searchBar.addEventListener("keyup", searchDebounced);
|
||||||
|
pathBar.addEventListener("keyup", e => {
|
||||||
|
if (e.key === "Enter") {
|
||||||
|
searchDebounced();
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function toggleFuzzy() {
|
function toggleFuzzy() {
|
||||||
@ -105,10 +140,7 @@ $.jsonPost("i").then(resp => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function getDocumentInfo(id) {
|
function getDocumentInfo(id) {
|
||||||
return $.getJSON("d/" + id).fail(e => {
|
return $.getJSON("d/" + id).fail(showEsError)
|
||||||
console.log(e);
|
|
||||||
showEsError();
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleTreeClick(tree) {
|
function handleTreeClick(tree) {
|
||||||
@ -399,8 +431,6 @@ function search(after = null) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(q)
|
|
||||||
|
|
||||||
$.jsonPost("es", q).then(searchResult => {
|
$.jsonPost("es", q).then(searchResult => {
|
||||||
let hits = searchResult["hits"]["hits"];
|
let hits = searchResult["hits"]["hits"];
|
||||||
if (hits) {
|
if (hits) {
|
||||||
@ -443,8 +473,6 @@ let searchDebounced = _.debounce(function () {
|
|||||||
search()
|
search()
|
||||||
}, 500);
|
}, 500);
|
||||||
|
|
||||||
searchBar.addEventListener("keyup", searchDebounced);
|
|
||||||
pathBar.addEventListener("keyup", searchDebounced);
|
|
||||||
|
|
||||||
//Size slider
|
//Size slider
|
||||||
$("#sizeSlider").ionRangeSlider({
|
$("#sizeSlider").ionRangeSlider({
|
||||||
@ -609,7 +637,8 @@ function createPathTree(target) {
|
|||||||
let pathTree = new InspireTree({
|
let pathTree = new InspireTree({
|
||||||
data: function (node, resolve, reject) {
|
data: function (node, resolve, reject) {
|
||||||
return getNextDepth(node);
|
return getNextDepth(node);
|
||||||
}
|
},
|
||||||
|
sort: "text"
|
||||||
});
|
});
|
||||||
|
|
||||||
selectedIndices.forEach(index => {
|
selectedIndices.forEach(index => {
|
||||||
@ -629,3 +658,19 @@ function createPathTree(target) {
|
|||||||
pathTree.on("node.click", handlePathTreeClick(pathTree));
|
pathTree.on("node.click", handlePathTreeClick(pathTree));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPathChoices() {
|
||||||
|
return new Promise(getPaths => {
|
||||||
|
$.jsonPost("es", {
|
||||||
|
suggest: {
|
||||||
|
path: {
|
||||||
|
prefix: pathBar.value,
|
||||||
|
completion: {
|
||||||
|
field: "suggest-path",
|
||||||
|
skip_duplicates: true,
|
||||||
|
size: 10000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).then(resp => getPaths(resp["suggest"]["path"][0]["options"].map(opt => opt["_source"]["path"])));
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -100,6 +100,7 @@ const _defaults = {
|
|||||||
treemapGroupingDepth: 3,
|
treemapGroupingDepth: 3,
|
||||||
treemapColor: "PuBuGn",
|
treemapColor: "PuBuGn",
|
||||||
treemapSize: "large",
|
treemapSize: "large",
|
||||||
|
suggestPath: true
|
||||||
};
|
};
|
||||||
|
|
||||||
function loadSettings() {
|
function loadSettings() {
|
||||||
@ -114,6 +115,7 @@ function loadSettings() {
|
|||||||
$("#settingTreemapColor").val(CONF.options.treemapColor);
|
$("#settingTreemapColor").val(CONF.options.treemapColor);
|
||||||
$("#settingTreemapSize").val(CONF.options.treemapSize);
|
$("#settingTreemapSize").val(CONF.options.treemapSize);
|
||||||
$("#settingTreemapType").val(CONF.options.treemapType);
|
$("#settingTreemapType").val(CONF.options.treemapType);
|
||||||
|
$("#settingSuggestPath").prop("checked", CONF.options.suggestPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Settings() {
|
function Settings() {
|
||||||
@ -155,6 +157,7 @@ function updateSettings() {
|
|||||||
CONF.options.treemapColor = $("#settingTreemapColor").val();
|
CONF.options.treemapColor = $("#settingTreemapColor").val();
|
||||||
CONF.options.treemapSize = $("#settingTreemapSize").val();
|
CONF.options.treemapSize = $("#settingTreemapSize").val();
|
||||||
CONF.options.treemapType = $("#settingTreemapType").val();
|
CONF.options.treemapType = $("#settingTreemapType").val();
|
||||||
|
CONF.options.suggestPath = $("#settingSuggestPath").prop("checked");
|
||||||
CONF.save();
|
CONF.save();
|
||||||
|
|
||||||
if (typeof searchDebounced !== "undefined") {
|
if (typeof searchDebounced !== "undefined") {
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
<nav class="navbar navbar-expand-lg">
|
<nav class="navbar navbar-expand-lg">
|
||||||
<a class="navbar-brand" href="/">sist2</a>
|
<a class="navbar-brand" href="/">sist2</a>
|
||||||
<span class="badge badge-pill version">2.3.3</span>
|
<span class="badge badge-pill version">2.4.0</span>
|
||||||
<span class="tagline">Lightning-fast file system indexer and search tool </span>
|
<span class="tagline">Lightning-fast file system indexer and search tool </span>
|
||||||
<a class="btn ml-auto" href="/stats">Stats</a>
|
<a class="btn ml-auto" href="/stats">Stats</a>
|
||||||
<button class="btn" type="button" data-toggle="modal" data-target="#settings" onclick="loadSettings()">Settings</button>
|
<button class="btn" type="button" data-toggle="modal" data-target="#settings" onclick="loadSettings()">Settings</button>
|
||||||
@ -192,6 +192,11 @@
|
|||||||
<label class="custom-control-label" for="settingSearchInPath">Enable matching query against document path</label>
|
<label class="custom-control-label" for="settingSearchInPath">Enable matching query against document path</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="settingSuggestPath">
|
||||||
|
<label class="custom-control-label" for="settingSuggestPath">Enable auto-complete in path filter bar</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<label for="settingDisplay">Display</label>
|
<label for="settingDisplay">Display</label>
|
||||||
<select id="settingDisplay" class="form-control form-control-sm">
|
<select id="settingDisplay" class="form-control form-control-sm">
|
||||||
<option value="grid">Grid</option>
|
<option value="grid">Grid</option>
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<nav class="navbar navbar-expand-lg">
|
<nav class="navbar navbar-expand-lg">
|
||||||
<a class="navbar-brand" href="/">sist2</a>
|
<a class="navbar-brand" href="/">sist2</a>
|
||||||
<span class="badge badge-pill version">2.3.0</span>
|
<span class="badge badge-pill version">2.4.0</span>
|
||||||
<span class="tagline">Lightning-fast file system indexer and search tool </span>
|
<span class="tagline">Lightning-fast file system indexer and search tool </span>
|
||||||
<a style="margin-left: auto" class="btn" href="/">Back</a>
|
<a style="margin-left: auto" class="btn" href="/">Back</a>
|
||||||
<button class="btn" type="button" data-toggle="modal" data-target="#settings"
|
<button class="btn" type="button" data-toggle="modal" data-target="#settings"
|
||||||
@ -71,6 +71,11 @@
|
|||||||
<label class="custom-control-label" for="settingFuzzy">Set fuzzy search by default</label>
|
<label class="custom-control-label" for="settingFuzzy">Set fuzzy search by default</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="settingSuggestPath">
|
||||||
|
<label class="custom-control-label" for="settingSuggestPath">Enable auto-complete in path filter bar</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="custom-control custom-checkbox">
|
<div class="custom-control custom-checkbox">
|
||||||
<input type="checkbox" class="custom-control-input" id="settingSearchInPath">
|
<input type="checkbox" class="custom-control-input" id="settingSearchInPath">
|
||||||
<label class="custom-control-label" for="settingSearchInPath">Enable matching query against document
|
<label class="custom-control-label" for="settingSearchInPath">Enable matching query against document
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user