diff options
| author | shu <nvcsadjkojf@outlook.com> | 2026-07-28 19:16:16 +0800 |
|---|---|---|
| committer | shu <nvcsadjkojf@outlook.com> | 2026-07-28 19:16:16 +0800 |
| commit | 8efba22ed34b6eeb28b5f410177e5a1545b5d798 (patch) | |
| tree | b4e751ec9a0940659bc50651974e96c57f6a66d8 /tiddlers/plugin-org-gtd-parser.tid | |
| parent | 1e2031e8850fa91ed9e3b5cd11f7a5b01bbd999e (diff) | |
用 Org GTD 工作流替换事情看板
注册 text/x-org 内容类型和 CodeMirror 编辑器,支持 TODO 状态流转、层级调整、子树移动与折叠。
新增 Org 文档解析、Agenda 日期分组、源任务定位、侧栏入口和响应式样式,并补充中文使用说明。
快捷键改为仅在 Org 编辑器中按配置加载,默认不绑定;无效 JSON 或键名只禁用自定义键位,不影响编辑器启动。
移除旧事情看板的字段模板、组件、样式和默认入口,统一使用 Org GTD 工作流。
Diffstat (limited to 'tiddlers/plugin-org-gtd-parser.tid')
| -rw-r--r-- | tiddlers/plugin-org-gtd-parser.tid | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tiddlers/plugin-org-gtd-parser.tid b/tiddlers/plugin-org-gtd-parser.tid new file mode 100644 index 0000000..4aa4bd4 --- /dev/null +++ b/tiddlers/plugin-org-gtd-parser.tid @@ -0,0 +1,76 @@ +title: $:/plugins/local/org-gtd/parser.js +type: application/javascript +module-type: parser + +/*\ +title: $:/plugins/local/org-gtd/parser.js +type: application/javascript +module-type: parser +\*/ +(function() { +"use strict"; + +var org = require("$:/plugins/local/org-gtd/library.js"); + +function attr(value) { + return {type: "string",value: String(value)}; +} + +function text(value) { + return {type: "text",text: String(value)}; +} + +function element(tag,className,children,attributes) { + var attrs = attributes || {}; + if(className) { + attrs["class"] = attr(className); + } + return { + type: "element", + tag: tag, + attributes: attrs, + children: children || [], + isBlock: tag !== "span" + }; +} + +function headingNode(heading) { + var children = [], + level = Math.min(heading.level,6), + classes = "tc-org-heading tc-org-level-" + heading.level; + if(heading.state) { + classes += " tc-org-heading-" + heading.state.toLowerCase(); + children.push(element("span","tc-org-state tc-org-state-" + heading.state.toLowerCase(),[text(heading.state)])); + children.push(text(" ")); + } + children.push(text(heading.title)); + if(heading.tags.length) { + children.push(text(" ")); + children.push(element("span","tc-org-tags",[text(":" + heading.tags.join(":") + ":")])); + } + return element("h" + level,classes,children,{"data-org-line": attr(heading.sourceLine)}); +} + +function OrgParser(type,source,options) { + var parsed = org.parse(source || ""), + headingsByLine = Object.create(null), + tree = []; + parsed.headings.forEach(function(heading) { + headingsByLine[heading.line] = heading; + }); + parsed.lines.forEach(function(line,index) { + var heading = headingsByLine[index]; + if(heading) { + tree.push(headingNode(heading)); + } else if(/^\s*(?:SCHEDULED|DEADLINE):/.test(line)) { + tree.push(element("div","tc-org-planning",[text(line.trim())])); + } else if(line.trim()) { + tree.push(element("div","tc-org-body-line",[text(line)])); + } + }); + this.tree = options.parseAsInline ? [text(source || "")] : [element("div","tc-org-document",tree)]; +} + +exports["text/x-org"] = OrgParser; + +})(); |
