@@ -5,6 +5,51 @@ import {
55 Plugin ,
66} from "obsidian" ;
77
8+ enum TaskType {
9+ TODO ,
10+ DONE ,
11+ DOING ,
12+ LATER ,
13+ CANCELED ,
14+ UNKNOWN ,
15+ }
16+
17+ const VERSION = "0.0.2" ;
18+
19+ function parseTaskType ( content : string ) : TaskType | null {
20+ if ( content . startsWith ( "DONE " ) ) {
21+ return TaskType . DONE ;
22+ } else if ( content . startsWith ( "TODO " ) ) {
23+ return TaskType . TODO ;
24+ } else if ( content . startsWith ( "DOING " ) ) {
25+ return TaskType . DOING ;
26+ } else if ( content . startsWith ( "LATER " ) ) {
27+ return TaskType . LATER ;
28+ } else if ( content . startsWith ( "CANCELED " ) ) {
29+ return TaskType . CANCELED ;
30+ } else {
31+ return TaskType . UNKNOWN ;
32+ }
33+ }
34+
35+ function removeTimestamps ( content : string ) : string {
36+ return content
37+ . replace ( / d o i n g : : (?: \d { 13 } ) / gms, "" )
38+ . replace ( / d o n e : : (?: \d { 13 } ) / gms, "" )
39+ . replace ( / t o d o : : (?: \d { 13 } ) / gms, "" )
40+ . replace ( / d o i n g : : (?: \d { 13 } ) / gms, "" )
41+ . replace ( / l a t e r : : (?: \d { 13 } ) / gms, "" )
42+ . replace ( / c a n c e l e d : : (?: \d { 13 } ) / gms, "" )
43+ . replace ( / c o l l a p s e d : : (?: t r u e | f a l s e ) / gms, "" )
44+ . replace ( "<br>" , "" ) ;
45+ }
46+
47+ const blockTest = new RegExp ( / \# \+ B E G I N _ ( W A R N I N G | I M P O R T A N T | Q U O T E | C A U T I O N ) / gms) ;
48+
49+ function isBlock ( content : string ) : boolean {
50+ return blockTest . test ( content ) ;
51+ }
52+
853export default class LogSeqPlugin extends Plugin {
954 static postprocessor : MarkdownPostProcessor = (
1055 el : HTMLElement ,
@@ -13,43 +58,57 @@ export default class LogSeqPlugin extends Plugin {
1358 const entries = el . querySelectorAll ( "li[data-line]" ) ;
1459
1560 entries . forEach ( ( entry ) => {
16- const contents = entry . textContent ;
17- if ( contents . startsWith ( "DONE" ) ) {
18- const replacedHTML = entry . innerHTML
19- . replace ( "DONE" , "" )
20- . replace ( / d o i n g : : (?: \d { 13 } ) / , "" )
21- . replace ( / d o n e : : (?: \d { 13 } ) / , "" )
22- . replace ( / t o d o : : (?: \d { 13 } ) / , "" )
23- . replace ( "<br>" , "" ) ;
24- entry . innerHTML = `<span class="logseq-done-task"><input type="checkbox" checked> ${ replacedHTML } </span>` ;
25- } else if ( contents . startsWith ( "TODO" ) ) {
26- const replacedHTML = entry . innerHTML
27- . replace ( "TODO" , "" )
28- . replace ( / t o d o : : (?: \d { 13 } ) / , "" ) ;
61+ const taskType = parseTaskType ( entry . textContent ) ;
2962
30- entry . innerHTML = `<input type="checkbox"> <span class="logseq-status-task">TODO</span> ${ replacedHTML } ` ;
31- } else if ( contents . startsWith ( "DOING" ) ) {
32- const replacedHTML = entry . innerHTML
33- . replace ( "DOING" , "" )
34- . replace ( / d o i n g : : (?: \d { 13 } ) / , "" )
35- . replace ( / t o d o : : (?: \d { 13 } ) / , "" ) ;
63+ // Check if the entry is a org-mode block
64+ if ( isBlock ( entry . innerHTML ) ) {
65+ let replacedBlock = entry . innerHTML . replace (
66+ / \# \+ B E G I N _ ( W A R N I N G | I M P O R T A N T | Q U O T E | C A U T I O N ) / ,
67+ "<blockquote> ☟"
68+ ) ;
69+ replacedBlock = replacedBlock . replace (
70+ / \# \+ E N D _ ( W A R N I N G | I M P O R T A N T | Q U O T E | C A U T I O N ) / ,
71+ "</blockquote>"
72+ ) ;
73+ entry . innerHTML = replacedBlock ;
74+ }
3675
76+ if ( taskType == TaskType . DONE ) {
77+ const replacedHTML = removeTimestamps (
78+ entry . innerHTML . replace ( "DONE" , "" )
79+ ) ;
80+ entry . innerHTML = `<span class="logseq-done-task"><input type="checkbox" checked> ${ replacedHTML } </span>` ;
81+ } else if ( taskType == TaskType . TODO ) {
82+ const replacedHTML = removeTimestamps (
83+ entry . innerHTML . replace ( "TODO" , "" )
84+ ) ;
85+ entry . innerHTML = `<input type="checkbox"> <span class="logseq-status-task">TODO</span> ${ replacedHTML } ` ;
86+ } else if ( taskType == TaskType . DOING ) {
87+ const replacedHTML = removeTimestamps (
88+ entry . innerHTML . replace ( "DOING" , "" )
89+ ) ;
3790 entry . innerHTML = `<input type="checkbox"> <span class="logseq-status-task">DOING</span> ${ replacedHTML } ` ;
38- } else if ( contents . startsWith ( "LATER" ) ) {
39- const replacedHTML = entry . innerHTML . replace ( "LATER" , "" ) ;
40-
91+ } else if ( taskType == TaskType . LATER ) {
92+ const replacedHTML = removeTimestamps (
93+ entry . innerHTML . replace ( "LATER" , "" )
94+ ) ;
4195 entry . innerHTML = `<input type="checkbox"> <span class="logseq-status-task">LATER</span> ${ replacedHTML } ` ;
96+ } else if ( taskType == TaskType . CANCELED ) {
97+ const replacedHTML = removeTimestamps (
98+ entry . innerHTML . replace ( "CANCELED" , "" )
99+ ) ;
100+ entry . innerHTML = `<span class="logseq-done-task">${ replacedHTML } </span>` ;
42101 }
43102 } ) ;
44103 } ;
45104
46105 onload ( ) {
47- console . log ( "loading LogSeq plugin" ) ;
106+ console . log ( `Loading LogSeq plugin ${ VERSION } ` ) ;
48107 MarkdownPreviewRenderer . registerPostProcessor ( LogSeqPlugin . postprocessor ) ;
49108 }
50109
51110 onunload ( ) {
52- console . log ( " unloading LogSeq plugin" ) ;
111+ console . log ( ` unloading LogSeq plugin ${ VERSION } ` ) ;
53112 MarkdownPreviewRenderer . unregisterPostProcessor ( LogSeqPlugin . postprocessor ) ;
54113 }
55114}
0 commit comments