Merge remote-tracking branch 'origin/stable'

# Conflicts:
#	src/services/search/services/search.js
This commit is contained in:
zadam 2021-02-13 12:27:10 +01:00
commit 5eb850bf59
3 changed files with 48 additions and 41 deletions

View File

@ -40,44 +40,49 @@ function initAttributeNameAutocomplete({ $el, attributeType, open }) {
}
async function initLabelValueAutocomplete({ $el, open, nameCallback }) {
if (!$el.hasClass("aa-input")) {
const attributeName = nameCallback();
if (attributeName.trim() === "") {
return;
}
const attributeValues = (await server.get('attributes/values/' + encodeURIComponent(attributeName)))
.map(attribute => ({ value: attribute }));
if (attributeValues.length === 0) {
return;
}
$el.autocomplete({
appendTo: document.querySelector('body'),
hint: false,
openOnFocus: true,
minLength: 0,
tabAutocomplete: false
}, [{
displayKey: 'value',
source: function (term, cb) {
term = term.toLowerCase();
const filtered = attributeValues.filter(attr => attr.value.toLowerCase().includes(term));
cb(filtered);
}
}]);
$el.on('autocomplete:opened', () => {
if ($el.attr("readonly")) {
$el.autocomplete('close');
}
})
if ($el.hasClass("aa-input")) {
// we reinit everytime because autocomplete seems to have a bug where it retains state from last
// open even though the value was resetted
$el.autocomplete('destroy');
}
const attributeName = nameCallback();
if (attributeName.trim() === "") {
return;
}
const attributeValues = (await server.get('attributes/values/' + encodeURIComponent(attributeName)))
.map(attribute => ({ value: attribute }));
if (attributeValues.length === 0) {
return;
}
$el.autocomplete({
appendTo: document.querySelector('body'),
hint: false,
openOnFocus: false, // handled manually
minLength: 0,
tabAutocomplete: false
}, [{
displayKey: 'value',
cache: false,
source: async function (term, cb) {
term = term.toLowerCase();
const filtered = attributeValues.filter(attr => attr.value.toLowerCase().includes(term));
cb(filtered);
}
}]);
$el.on('autocomplete:opened', () => {
if ($el.attr("readonly")) {
$el.autocomplete('close');
}
});
if (open) {
$el.autocomplete("open");
}

View File

@ -248,6 +248,8 @@ export default class AttributeDetailWidget extends TabAwareWidget {
this.$rowValue = this.$widget.find('.attr-row-value');
this.$inputValue = this.$widget.find('.attr-input-value');
this.$inputValue.on('keyup', () => this.userEditedAttribute());
this.$inputValue.on('change', () => this.userEditedAttribute());
this.$inputValue.on('autocomplete:closed', () => this.userEditedAttribute());
this.$inputValue.on('focus', () => {
attributeAutocompleteService.initLabelValueAutocomplete({
$el: this.$inputValue,

View File

@ -197,18 +197,18 @@ function highlightSearchResults(searchResults, highlightedTokens) {
result.highlightedNotePathTitle = result.notePathTitle.replace('/[<\{\}]/g', '');
if (highlightedTokens.find(token => note.type.includes(token))) {
result.highlightedNotePathTitle += ` <type: ${note.type}>`;
result.highlightedNotePathTitle += ` "type: ${note.type}'`;
}
if (highlightedTokens.find(token => note.mime.includes(token))) {
result.highlightedNotePathTitle += ` <mime: ${note.mime}>`;
result.highlightedNotePathTitle += ` "mime: ${note.mime}'`;
}
for (const attr of note.attributes) {
if (highlightedTokens.find(token => attr.name.toLowerCase().includes(token)
|| attr.value.toLowerCase().includes(token))) {
result.highlightedNotePathTitle += ` <${formatAttribute(attr)}>`;
result.highlightedNotePathTitle += ` "${formatAttribute(attr)}'`;
}
}
}
@ -223,8 +223,8 @@ function highlightSearchResults(searchResults, highlightedTokens) {
for (const result of searchResults) {
result.highlightedNotePathTitle = result.highlightedNotePathTitle
.replace(/</g, "<small>")
.replace(/>/g, "</small>")
.replace(/"/g, "<small>")
.replace(/'/g, "</small>")
.replace(/{/g, "<b>")
.replace(/}/g, "</b>");
}