mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	new "iconClass" property on note_short, now together with cssClass respecting template relationship, #707
This commit is contained in:
		| @@ -4,37 +4,66 @@ const sql = require('../../services/sql'); | ||||
| const optionService = require('../../services/options'); | ||||
| const protectedSessionService = require('../../services/protected_session'); | ||||
| const noteCacheService = require('../../services/note_cache'); | ||||
| const log = require('../../services/log'); | ||||
|  | ||||
| async function getNotes(noteIds) { | ||||
|     // we return also deleted notes which have been specifically asked for | ||||
|     const notes = await sql.getManyRows(` | ||||
|       SELECT  | ||||
|              noteId,  | ||||
|              title,  | ||||
|              isProtected,  | ||||
|              type,  | ||||
|              mime, | ||||
|              isDeleted | ||||
|       FROM notes  | ||||
|       WHERE noteId IN (???)`, noteIds); | ||||
|         SELECT  | ||||
|           noteId, | ||||
|           title, | ||||
|           isProtected,  | ||||
|           type, | ||||
|           mime, | ||||
|           isDeleted | ||||
|         FROM notes | ||||
|         WHERE noteId IN (???)`, noteIds); | ||||
|  | ||||
|     const cssClassLabels = await sql.getManyRows(` | ||||
|       SELECT noteId, value FROM attributes WHERE isDeleted = 0 AND type = 'label'  | ||||
|                                              AND name = 'cssClass' AND noteId IN (???)`, noteIds); | ||||
|     const noteMap = new Map(notes.map(note => [note.noteId, note])); | ||||
|  | ||||
|     for (const label of cssClassLabels) { | ||||
|         // FIXME: inefficient! | ||||
|         const note = notes.find(note => note.noteId === label.noteId); | ||||
|     const templateClassLabels = await sql.getManyRows(` | ||||
|         SELECT  | ||||
|           templAttr.noteId,  | ||||
|           attr.name,  | ||||
|           attr.value  | ||||
|         FROM attributes templAttr | ||||
|         JOIN attributes attr ON attr.noteId = templAttr.value | ||||
|         WHERE  | ||||
|           templAttr.isDeleted = 0  | ||||
|           AND templAttr.type = 'relation' | ||||
|           AND templAttr.name = 'template' | ||||
|           AND templAttr.noteId IN (???) | ||||
|           AND attr.isDeleted = 0 | ||||
|           AND attr.type = 'label' | ||||
|           AND attr.name IN ('cssClass', 'iconClass')`, noteIds); | ||||
|  | ||||
|         if (!note) { | ||||
|             continue; | ||||
|         } | ||||
|     const noteClassLabels = await sql.getManyRows(` | ||||
|         SELECT  | ||||
|            noteId, name, value  | ||||
|         FROM attributes  | ||||
|         WHERE  | ||||
|            isDeleted = 0  | ||||
|            AND type = 'label'  | ||||
|            AND name IN ('cssClass', 'iconClass')  | ||||
|            AND noteId IN (???)`, noteIds); | ||||
|  | ||||
|         if (note.cssClass) { | ||||
|             note.cssClass += " " + label.value; | ||||
|         } | ||||
|         else { | ||||
|             note.cssClass = label.value; | ||||
|     // first template ones, then on the note itself so that note class label have priority | ||||
|     // over template ones for iconClass (which can be only one) | ||||
|     const allClassLabels = templateClassLabels.concat(noteClassLabels); | ||||
|  | ||||
|     for (const label of allClassLabels) { | ||||
|         const note = noteMap.get(label.noteId); | ||||
|  | ||||
|         if (note) { | ||||
|             if (label.name === 'cssClass') { | ||||
|                 note.cssClass = note.cssClass ? `${note.cssClass} ${label.value}` : label.value; | ||||
|             } | ||||
|             else if (label.name === 'iconClass') { | ||||
|                 note.iconClass = label.value; | ||||
|             } | ||||
|             else { | ||||
|                 log.error(`Unrecognized label name ${label.name}`); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user