mirror of
https://github.com/zadam/trilium.git
synced 2025-06-06 18:08:33 +02:00
refactorings of search actions to bulk actions
This commit is contained in:
parent
4211d0feda
commit
88fa51a34e
@ -1,27 +1,27 @@
|
|||||||
import server from "./server.js";
|
import server from "./server.js";
|
||||||
import ws from "./ws.js";
|
import ws from "./ws.js";
|
||||||
import MoveNoteSearchAction from "../widgets/search_actions/move_note.js";
|
import MoveNoteBulkAction from "../widgets/bulk_actions/move_note.js";
|
||||||
import DeleteNoteSearchAction from "../widgets/search_actions/delete_note.js";
|
import DeleteNoteBulkAction from "../widgets/bulk_actions/delete_note.js";
|
||||||
import DeleteNoteRevisionsSearchAction from "../widgets/search_actions/delete_note_revisions.js";
|
import DeleteNoteRevisionsBulkAction from "../widgets/bulk_actions/delete_note_revisions.js";
|
||||||
import DeleteLabelSearchAction from "../widgets/search_actions/delete_label.js";
|
import DeleteLabelBulkAction from "../widgets/bulk_actions/delete_label.js";
|
||||||
import DeleteRelationSearchAction from "../widgets/search_actions/delete_relation.js";
|
import DeleteRelationBulkAction from "../widgets/bulk_actions/delete_relation.js";
|
||||||
import RenameLabelSearchAction from "../widgets/search_actions/rename_label.js";
|
import RenameLabelBulkAction from "../widgets/bulk_actions/rename_label.js";
|
||||||
import RenameRelationSearchAction from "../widgets/search_actions/rename_relation.js";
|
import RenameRelationBulkAction from "../widgets/bulk_actions/rename_relation.js";
|
||||||
import SetLabelValueSearchAction from "../widgets/search_actions/set_label_value.js";
|
import SetLabelValueBulkAction from "../widgets/bulk_actions/set_label_value.js";
|
||||||
import SetRelationTargetSearchAction from "../widgets/search_actions/set_relation_target.js";
|
import SetRelationTargetSearchAction from "../widgets/bulk_actions/set_relation_target.js";
|
||||||
import ExecuteScriptSearchAction from "../widgets/search_actions/execute_script.js";
|
import ExecuteScriptBulkAction from "../widgets/bulk_actions/execute_script.js";
|
||||||
|
|
||||||
const ACTION_CLASSES = [
|
const ACTION_CLASSES = [
|
||||||
MoveNoteSearchAction,
|
MoveNoteBulkAction,
|
||||||
DeleteNoteSearchAction,
|
DeleteNoteBulkAction,
|
||||||
DeleteNoteRevisionsSearchAction,
|
DeleteNoteRevisionsBulkAction,
|
||||||
DeleteLabelSearchAction,
|
DeleteLabelBulkAction,
|
||||||
DeleteRelationSearchAction,
|
DeleteRelationBulkAction,
|
||||||
RenameLabelSearchAction,
|
RenameLabelBulkAction,
|
||||||
RenameRelationSearchAction,
|
RenameRelationBulkAction,
|
||||||
SetLabelValueSearchAction,
|
SetLabelValueBulkAction,
|
||||||
SetRelationTargetSearchAction,
|
SetRelationTargetSearchAction,
|
||||||
ExecuteScriptSearchAction
|
ExecuteScriptBulkAction
|
||||||
];
|
];
|
||||||
|
|
||||||
async function addAction(noteId, actionName) {
|
async function addAction(noteId, actionName) {
|
||||||
@ -65,4 +65,4 @@ export default {
|
|||||||
addAction,
|
addAction,
|
||||||
parseActions,
|
parseActions,
|
||||||
ACTION_CLASSES
|
ACTION_CLASSES
|
||||||
};
|
};
|
||||||
|
@ -3,7 +3,7 @@ import ws from "../../services/ws.js";
|
|||||||
import Component from "../component.js";
|
import Component from "../component.js";
|
||||||
import utils from "../../services/utils.js";
|
import utils from "../../services/utils.js";
|
||||||
|
|
||||||
export default class AbstractSearchAction {
|
export default class AbstractBulkAction {
|
||||||
constructor(attribute, actionDef) {
|
constructor(attribute, actionDef) {
|
||||||
this.attribute = attribute;
|
this.attribute = attribute;
|
||||||
this.actionDef = actionDef;
|
this.actionDef = actionDef;
|
65
src/public/app/widgets/bulk_actions/add_label.js
Normal file
65
src/public/app/widgets/bulk_actions/add_label.js
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
|
const TPL = `
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<div style="display: flex; align-items: center">
|
||||||
|
<div style="margin-right: 10px;" class="text-nowrap">Set label</div>
|
||||||
|
|
||||||
|
<input type="text"
|
||||||
|
class="form-control label-name"
|
||||||
|
placeholder="label name"
|
||||||
|
pattern="[\\p{L}\\p{N}_:]+"
|
||||||
|
title="Alphanumeric characters, underscore and colon are allowed characters."/>
|
||||||
|
|
||||||
|
<div style="margin-right: 10px; margin-left: 10px;" class="text-nowrap">to value</div>
|
||||||
|
|
||||||
|
<input type="text" class="form-control label-value" placeholder="new value"/>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td class="button-column">
|
||||||
|
<div class="dropdown help-dropdown">
|
||||||
|
<span class="bx bx-help-circle icon-action" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span>
|
||||||
|
<div class="dropdown-menu dropdown-menu-right p-4">
|
||||||
|
<p>On all matched notes:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>create given label if note doesn't have one yet</li>
|
||||||
|
<li>or change value of the existing label</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>You can also call this method without value, in such case label will be assigned to the note without value.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="bx bx-x icon-action action-conf-del"></span>
|
||||||
|
</td>
|
||||||
|
</tr>`;
|
||||||
|
|
||||||
|
export default class AddLabelBulkAction extends AbstractBulkAction {
|
||||||
|
static get actionName() { return "setLabelValue"; }
|
||||||
|
static get actionTitle() { return "Set label value"; }
|
||||||
|
|
||||||
|
doRender() {
|
||||||
|
const $action = $(TPL);
|
||||||
|
|
||||||
|
const $labelName = $action.find('.label-name');
|
||||||
|
$labelName.val(this.actionDef.labelName || "");
|
||||||
|
|
||||||
|
const $labelValue = $action.find('.label-value');
|
||||||
|
$labelValue.val(this.actionDef.labelValue || "");
|
||||||
|
|
||||||
|
const spacedUpdate = new SpacedUpdate(async () => {
|
||||||
|
await this.saveAction({
|
||||||
|
labelName: $labelName.val(),
|
||||||
|
labelValue: $labelValue.val()
|
||||||
|
});
|
||||||
|
}, 1000)
|
||||||
|
|
||||||
|
$labelName.on('input', () => spacedUpdate.scheduleUpdate());
|
||||||
|
$labelValue.on('input', () => spacedUpdate.scheduleUpdate());
|
||||||
|
|
||||||
|
return $action;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -18,7 +18,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class DeleteLabelSearchAction extends AbstractSearchAction {
|
export default class DeleteLabelBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "deleteLabel"; }
|
static get actionName() { return "deleteLabel"; }
|
||||||
static get actionTitle() { return "Delete label"; }
|
static get actionTitle() { return "Delete label"; }
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -12,7 +12,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class DeleteNoteSearchAction extends AbstractSearchAction {
|
export default class DeleteNoteBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "deleteNote"; }
|
static get actionName() { return "deleteNote"; }
|
||||||
static get actionTitle() { return "Delete note"; }
|
static get actionTitle() { return "Delete note"; }
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -19,7 +19,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class DeleteNoteRevisionsSearchAction extends AbstractSearchAction {
|
export default class DeleteNoteRevisionsBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "deleteNoteRevisions"; }
|
static get actionName() { return "deleteNoteRevisions"; }
|
||||||
static get actionTitle() { return "Delete note revisions"; }
|
static get actionTitle() { return "Delete note revisions"; }
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -20,7 +20,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class DeleteRelationSearchAction extends AbstractSearchAction {
|
export default class DeleteRelationBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "deleteRelation"; }
|
static get actionName() { return "deleteRelation"; }
|
||||||
static get actionTitle() { return "Delete relation"; }
|
static get actionTitle() { return "Delete relation"; }
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -33,7 +33,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class ExecuteScriptSearchAction extends AbstractSearchAction {
|
export default class ExecuteScriptBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "executeScript"; }
|
static get actionName() { return "executeScript"; }
|
||||||
static get actionTitle() { return "Execute script"; }
|
static get actionTitle() { return "Execute script"; }
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
import noteAutocompleteService from "../../services/note_autocomplete.js";
|
import noteAutocompleteService from "../../services/note_autocomplete.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
@ -33,7 +33,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class MoveNoteSearchAction extends AbstractSearchAction {
|
export default class MoveNoteBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "moveNote"; }
|
static get actionName() { return "moveNote"; }
|
||||||
static get actionTitle() { return "Move note"; }
|
static get actionTitle() { return "Move note"; }
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -27,7 +27,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class RenameLabelSearchAction extends AbstractSearchAction {
|
export default class RenameLabelBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "renameLabel"; }
|
static get actionName() { return "renameLabel"; }
|
||||||
static get actionTitle() { return "Rename label"; }
|
static get actionTitle() { return "Rename label"; }
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -27,7 +27,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class RenameRelationSearchAction extends AbstractSearchAction {
|
export default class RenameRelationBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "renameRelation"; }
|
static get actionName() { return "renameRelation"; }
|
||||||
static get actionTitle() { return "Rename relation"; }
|
static get actionTitle() { return "Rename relation"; }
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<tr>
|
<tr>
|
||||||
@ -37,7 +37,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class SetLabelValueSearchAction extends AbstractSearchAction {
|
export default class SetLabelValueBulkAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "setLabelValue"; }
|
static get actionName() { return "setLabelValue"; }
|
||||||
static get actionTitle() { return "Set label value"; }
|
static get actionTitle() { return "Set label value"; }
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import SpacedUpdate from "../../services/spaced_update.js";
|
import SpacedUpdate from "../../services/spaced_update.js";
|
||||||
import AbstractSearchAction from "./abstract_search_action.js";
|
import AbstractBulkAction from "./abstract_bulk_action.js";
|
||||||
import noteAutocompleteService from "../../services/note_autocomplete.js";
|
import noteAutocompleteService from "../../services/note_autocomplete.js";
|
||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
@ -39,7 +39,7 @@ const TPL = `
|
|||||||
</td>
|
</td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
|
|
||||||
export default class SetRelationTargetSearchAction extends AbstractSearchAction {
|
export default class SetRelationTargetSearchAction extends AbstractBulkAction {
|
||||||
static get actionName() { return "setRelationTarget"; }
|
static get actionName() { return "setRelationTarget"; }
|
||||||
static get actionTitle() { return "Set relation target"; }
|
static get actionTitle() { return "Set relation target"; }
|
||||||
|
|
@ -8,7 +8,7 @@ const {sleep} = utils;
|
|||||||
|
|
||||||
const TPL = `
|
const TPL = `
|
||||||
<div class="canvas-widget note-detail-canvas note-detail-printable note-detail">
|
<div class="canvas-widget note-detail-canvas note-detail-printable note-detail">
|
||||||
<style type="text/css">
|
<style>
|
||||||
.excalidraw .App-menu_top .buttonList {
|
.excalidraw .App-menu_top .buttonList {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ document.addEventListener("DOMContentLoaded", function() {
|
|||||||
header += `<script src="../../node_modules/react/umd/react.production.min.js"></script>`;
|
header += `<script src="../../node_modules/react/umd/react.production.min.js"></script>`;
|
||||||
header += `<script src="../../node_modules/react-dom/umd/react-dom.production.min.js"></script>`;
|
header += `<script src="../../node_modules/react-dom/umd/react-dom.production.min.js"></script>`;
|
||||||
header += `<script src="../../node_modules/@excalidraw/excalidraw/dist/excalidraw.production.min.js"></script>`;
|
header += `<script src="../../node_modules/@excalidraw/excalidraw/dist/excalidraw.production.min.js"></script>`;
|
||||||
header += `<style type="text/css">
|
header += `<style>
|
||||||
|
|
||||||
.excalidraw-wrapper {
|
.excalidraw-wrapper {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
<style>
|
<style>
|
||||||
#bulk-available-action-list button {
|
#bulk-available-action-list button {
|
||||||
font-size: small;
|
|
||||||
padding: 2px 7px;
|
padding: 2px 7px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user