自定义小部件
可以在三个可以显示自定义内容的位置创建自定义窗口小部件。
位置是:
- 左窗格
- 中央窗格
- 右窗格
示例-字数小部件
创建类型为JS frontend的代码笔记,并为其添加widget
标签。
/* * This defines a custom widget which displays number of words and characters in a current text note. * To be activated for a given note, add label 'wordCount' to the note, you can also make it inheritable and thus activate it for the whole subtree. * * See it in action in "Books" and its subtree. */const TPL = `<div style="padding: 10px; border-top: 1px solid var(--main-border-color); contain: none;"> <strong>Word count: </strong> <span class="word-count"></span>
<strong>Character count: </strong> <span class="character-count"></span></div`;
class WordCountWidget extends api.NoteContextAwareWidget { get position() { return 100; } // higher value means position towards the bottom/right
get parentWidget() { return 'center-pane'; }
isEnabled() { return super.isEnabled() && this.note.type === 'text' && this.note.hasLabel('wordCount'); }
doRender() { this.$widget = $(TPL); this.$wordCount = this.$widget.find('.word-count'); this.$characterCount = this.$widget.find('.character-count'); return this.$widget; }
async refreshWithNote(note) { const {content} = await note.getNoteComplement();
const text = $(content).text(); // get plain text only
const counts = this.getCounts(text);
this.$wordCount.text(counts.words); this.$characterCount.text(counts.characters); }
getCounts(text) { const chunks = text .split(/[\s-+:,/\\]+/) .filter(chunk => chunk !== '');
let words;
if (chunks.length === 1 && chunks[0] === '') { words = 0; } else { words = chunks.length; }
const characters = chunks.join('').length;
return {words, characters}; }
async entitiesReloadedEvent({loadResults}) { if (loadResults.isNoteContentReloaded(this.noteId)) { this.refresh(); } }}
module.exports = new WordCountWidget();
进行更改后,必须重新启动Trilium,以便可以重新构建布局。
示例截图
在底部,您可以看到生成的小部件: