mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 13:01:31 +08: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) { | ||||||
|  | |||||||
| @ -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
	 zadam
						zadam