2018-08-07 04:29:03 +08:00
|
|
|
import server from "./server.js";
|
2018-08-17 03:02:42 +08:00
|
|
|
import noteDetailService from "./note_detail.js";
|
|
|
|
|
|
|
|
async function autocompleteSource(request, response) {
|
|
|
|
const result = await server.get('autocomplete'
|
|
|
|
+ '?query=' + encodeURIComponent(request.term)
|
|
|
|
+ '¤tNoteId=' + noteDetailService.getCurrentNoteId());
|
|
|
|
|
|
|
|
if (result.length > 0) {
|
|
|
|
response(result.map(row => {
|
|
|
|
return {
|
|
|
|
label: row.label,
|
|
|
|
value: row.label + ' (' + row.value + ')'
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
response([{
|
|
|
|
label: "No results",
|
|
|
|
value: "No results"
|
|
|
|
}]);
|
|
|
|
}
|
|
|
|
}
|
2018-08-07 04:29:03 +08:00
|
|
|
|
|
|
|
async function initNoteAutocomplete($el) {
|
|
|
|
if (!$el.hasClass("ui-autocomplete-input")) {
|
|
|
|
const $showRecentNotesButton = $("<span>")
|
|
|
|
.addClass("input-group-addon show-recent-notes-button")
|
|
|
|
.prop("title", "Show recent notes");
|
|
|
|
|
|
|
|
$el.after($showRecentNotesButton);
|
|
|
|
|
|
|
|
$showRecentNotesButton.click(() => $el.autocomplete("search", ""));
|
|
|
|
|
|
|
|
await $el.autocomplete({
|
|
|
|
appendTo: $el.parent().parent(),
|
2018-08-17 03:02:42 +08:00
|
|
|
source: autocompleteSource,
|
2018-08-07 04:29:03 +08:00
|
|
|
minLength: 0,
|
|
|
|
change: function (event, ui) {
|
|
|
|
$el.trigger("change");
|
|
|
|
},
|
|
|
|
select: function (event, ui) {
|
|
|
|
if (ui.item.value === 'No results') {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ko.bindingHandlers.noteAutocomplete = {
|
|
|
|
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
|
|
|
|
initNoteAutocomplete($(element));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default {
|
2018-08-17 03:02:42 +08:00
|
|
|
initNoteAutocomplete,
|
|
|
|
autocompleteSource
|
2018-08-07 04:29:03 +08:00
|
|
|
}
|