mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 19:49:01 +01:00 
			
		
		
		
	saving attributes
This commit is contained in:
		
							parent
							
								
									8fe6a9353a
								
							
						
					
					
						commit
						231c245c87
					
				| @ -2,19 +2,38 @@ | ||||
| 
 | ||||
| const attributesDialog = (function() { | ||||
|     const dialogEl = $("#attributes-dialog"); | ||||
|     const attributesModel = new AttributesModel(); | ||||
| 
 | ||||
|     function AttributesModel(attributes) { | ||||
|         const model = this; | ||||
|     function AttributesModel() { | ||||
|         const self = this; | ||||
| 
 | ||||
|         this.attributes = ko.observableArray(attributes); | ||||
|         this.attributes = ko.observableArray(); | ||||
| 
 | ||||
|         this.loadAttributes = async function() { | ||||
|             const noteId = noteEditor.getCurrentNoteId(); | ||||
| 
 | ||||
|             const attributes = await server.get('notes/' + noteId + '/attributes'); | ||||
| 
 | ||||
|             this.attributes(attributes); | ||||
|         }; | ||||
| 
 | ||||
|         this.addNewRow = function() { | ||||
|             model.attributes.push({ | ||||
|             self.attributes.push({ | ||||
|                 attribute_id: '', | ||||
|                 name: '', | ||||
|                 value: '' | ||||
|             }); | ||||
|         } | ||||
|         }; | ||||
| 
 | ||||
|         this.save = async function() { | ||||
|             const noteId = noteEditor.getCurrentNoteId(); | ||||
| 
 | ||||
|             const attributes = await server.put('notes/' + noteId + '/attributes', this.attributes()); | ||||
| 
 | ||||
|             self.attributes(attributes); | ||||
| 
 | ||||
|             showMessage("Attributes have been saved."); | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     async function showDialog() { | ||||
| @ -26,11 +45,7 @@ const attributesDialog = (function() { | ||||
|             height: 700 | ||||
|         }); | ||||
| 
 | ||||
|         const noteId = noteEditor.getCurrentNoteId(); | ||||
| 
 | ||||
|         const attributes = await server.get('notes/' + noteId + '/attributes'); | ||||
| 
 | ||||
|         ko.applyBindings(new AttributesModel(attributes)); | ||||
|         attributesModel.loadAttributes(); | ||||
|     } | ||||
| 
 | ||||
|     $(document).bind('keydown', 'alt+a', e => { | ||||
| @ -39,6 +54,8 @@ const attributesDialog = (function() { | ||||
|         e.preventDefault(); | ||||
|     }); | ||||
| 
 | ||||
|     ko.applyBindings(attributesModel); | ||||
| 
 | ||||
|     return { | ||||
|         showDialog | ||||
|     }; | ||||
|  | ||||
| @ -4,6 +4,8 @@ const express = require('express'); | ||||
| const router = express.Router(); | ||||
| const sql = require('../../services/sql'); | ||||
| const auth = require('../../services/auth'); | ||||
| const sync_table = require('../../services/sync_table'); | ||||
| const utils = require('../../services/utils'); | ||||
| const wrap = require('express-promise-wrap').wrap; | ||||
| 
 | ||||
| router.get('/:noteId/attributes', auth.checkApiAuth, wrap(async (req, res, next) => { | ||||
| @ -12,4 +14,35 @@ router.get('/:noteId/attributes', auth.checkApiAuth, wrap(async (req, res, next) | ||||
|     res.send(await sql.getAll("SELECT * FROM attributes WHERE note_id = ? ORDER BY date_created", [noteId])); | ||||
| })); | ||||
| 
 | ||||
| router.put('/:noteId/attributes', auth.checkApiAuth, wrap(async (req, res, next) => { | ||||
|     const noteId = req.params.noteId; | ||||
|     const attributes = req.body; | ||||
|     const now = utils.nowDate(); | ||||
| 
 | ||||
|     await sql.doInTransaction(async () => { | ||||
|         for (const attr of attributes) { | ||||
|             if (attr.attribute_id) { | ||||
|                 await sql.execute("UPDATE attributes SET name = ?, value = ?, date_modified = ? WHERE attribute_id = ?", | ||||
|                     [attr.name, attr.value, now, attr.attribute_id]); | ||||
|             } | ||||
|             else { | ||||
|                 attr.attribute_id = utils.newAttributeId(); | ||||
| 
 | ||||
|                 await sql.insert("attributes", { | ||||
|                    attribute_id: attr.attribute_id, | ||||
|                    note_id: noteId, | ||||
|                    name: attr.name, | ||||
|                    value: attr.value, | ||||
|                    date_created: now, | ||||
|                    date_modified: now | ||||
|                 }); | ||||
|             } | ||||
| 
 | ||||
|             await sync_table.addAttributeSync(attr.attribute_id); | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
|     res.send(await sql.getAll("SELECT * FROM attributes WHERE note_id = ? ORDER BY date_created", [noteId])); | ||||
| })); | ||||
| 
 | ||||
| module.exports = router; | ||||
| @ -341,28 +341,34 @@ | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="attributes-dialog" title="Note attributes" style="display: none; padding: 20px;"> | ||||
|       <button class="btn-small" data-bind="click: addNewRow">Add new attribute</button> | ||||
|       <div style="display: flex; justify-content: space-between; padding: 15px; padding-top: 0;"> | ||||
|         <button class="btn-default" data-bind="click: addNewRow">Add new attribute</button> | ||||
| 
 | ||||
|       <table id="attributes-table" class="table"> | ||||
|         <thead> | ||||
|           <tr> | ||||
|             <th>ID</th> | ||||
|             <th>Name</th> | ||||
|             <th>Value</th> | ||||
|           </tr> | ||||
|         </thead> | ||||
|         <tbody data-bind="foreach: attributes"> | ||||
|           <tr> | ||||
|             <td data-bind="text: attribute_id"></td> | ||||
|             <td> | ||||
|               <input type="text" data-bind="value: name"/> | ||||
|             </td> | ||||
|             <td> | ||||
|               <input type="text" data-bind="value: value"/> | ||||
|             </td> | ||||
|           </tr> | ||||
|         </tbody> | ||||
|       </table> | ||||
|         <button class="btn-primary" data-bind="click: save">Save</button> | ||||
|       </div> | ||||
| 
 | ||||
|       <div style="height: 97%; overflow: auto"> | ||||
|         <table id="attributes-table" class="table"> | ||||
|           <thead> | ||||
|             <tr> | ||||
|               <th>ID</th> | ||||
|               <th>Name</th> | ||||
|               <th>Value</th> | ||||
|             </tr> | ||||
|           </thead> | ||||
|           <tbody data-bind="foreach: attributes"> | ||||
|             <tr> | ||||
|               <td data-bind="text: attribute_id"></td> | ||||
|               <td> | ||||
|                 <input type="text" data-bind="value: name"/> | ||||
|               </td> | ||||
|               <td> | ||||
|                 <input type="text" data-bind="value: value" style="width: 300px"/> | ||||
|               </td> | ||||
|             </tr> | ||||
|           </tbody> | ||||
|         </table> | ||||
|       </div> | ||||
|     </div> | ||||
| 
 | ||||
|     <div id="tooltip" style="display: none;"></div> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 azivner
						azivner