mirror of
https://github.com/zadam/trilium.git
synced 2025-02-22 22:13:07 +08:00
added relation name autocomplete to relation map connection creation
This commit is contained in:
parent
8dc32e581e
commit
144e814b02
4 changed files with 28 additions and 8 deletions
|
@ -236,7 +236,7 @@ async function showDialog() {
|
|||
$dialog.on('focus', '.attribute-name', function (e) {
|
||||
attributeAutocompleteService.initAttributeNameAutocomplete({
|
||||
$el: $(this),
|
||||
attrTypeFunc: () => {
|
||||
attributeType: () => {
|
||||
const attribute = attributesModel.getTargetAttribute(this);
|
||||
return (attribute().type === 'relation' || attribute().type === 'relation-definition') ? 'relation' : 'label';
|
||||
},
|
||||
|
|
|
@ -4,19 +4,28 @@ const $answer = $("#prompt-dialog-answer");
|
|||
const $form = $("#prompt-dialog-form");
|
||||
|
||||
let resolve;
|
||||
let shownCb;
|
||||
|
||||
function ask(message, defaultValue = '') {
|
||||
function ask({ message, defaultValue, shown }) {
|
||||
glob.activeDialog = $dialog;
|
||||
|
||||
shownCb = shown;
|
||||
|
||||
$question.text(message);
|
||||
$answer.val(defaultValue);
|
||||
$answer.val(defaultValue || "");
|
||||
|
||||
$dialog.modal();
|
||||
|
||||
return new Promise((res, rej) => { resolve = res; });
|
||||
}
|
||||
|
||||
$dialog.on('shown.bs.modal', () => $answer.focus().select());
|
||||
$dialog.on('shown.bs.modal', () => {
|
||||
if (shownCb) {
|
||||
shownCb({ $dialog, $question, $answer, $form });
|
||||
}
|
||||
|
||||
$answer.focus().select();
|
||||
});
|
||||
|
||||
$dialog.on("hidden.bs.modal", () => {
|
||||
if (resolve) {
|
||||
|
|
|
@ -2,10 +2,10 @@ import server from "./server.js";
|
|||
|
||||
/**
|
||||
* @param $el - element on which to init autocomplete
|
||||
* @param attrTypeFunc - callback providing "relation" or "label" as a type of autocompleted attributes
|
||||
* @param attributeType - "relation" or "label" or callback providing one of those values as a type of autocompleted attributes
|
||||
* @param open - should the autocomplete be opened after init?
|
||||
*/
|
||||
function initAttributeNameAutocomplete({ $el, attrTypeFunc, open }) {
|
||||
function initAttributeNameAutocomplete({ $el, attributeType, open }) {
|
||||
if (!$el.hasClass("aa-input")) {
|
||||
$el.autocomplete({
|
||||
appendTo: document.querySelector('body'),
|
||||
|
@ -16,7 +16,9 @@ function initAttributeNameAutocomplete({ $el, attrTypeFunc, open }) {
|
|||
}, [{
|
||||
displayKey: 'name',
|
||||
source: async (term, cb) => {
|
||||
const names = await server.get('attributes/names/?type=' + attrTypeFunc() + '&query=' + encodeURIComponent(term));
|
||||
const type = typeof attributeType === "function" ? attributeType() : attributeType;
|
||||
|
||||
const names = await server.get(`attributes/names/?type=${type}&query=${encodeURIComponent(term)}`);
|
||||
const result = names.map(name => {
|
||||
return {name};
|
||||
});
|
||||
|
|
|
@ -5,6 +5,7 @@ import libraryLoader from "./library_loader.js";
|
|||
import treeService from "./tree.js";
|
||||
import contextMenuWidget from "./context_menu.js";
|
||||
import infoService from "./info.js";
|
||||
import attributeAutocompleteService from "./attribute_autocomplete.js";
|
||||
import promptDialog from "../dialogs/prompt.js";
|
||||
import infoDialog from "../dialogs/info.js";
|
||||
|
||||
|
@ -260,7 +261,15 @@ async function connectionCreatedHandler(info, originalEvent) {
|
|||
return;
|
||||
}
|
||||
|
||||
const name = await promptDialog.ask("Specify new relation name:");
|
||||
const name = await promptDialog.ask({
|
||||
message: "Specify new relation name:",
|
||||
shown: ({ $answer }) =>
|
||||
attributeAutocompleteService.initAttributeNameAutocomplete({
|
||||
$el: $answer,
|
||||
attributeType: "relation",
|
||||
open: true
|
||||
})
|
||||
});
|
||||
|
||||
if (!name || !name.trim()) {
|
||||
jsPlumbInstance.deleteConnection(connection);
|
||||
|
|
Loading…
Reference in a new issue