aboutsummaryrefslogtreecommitdiffstats
path: root/tiddlers/plugin-org-gtd-parser.tid
diff options
context:
space:
mode:
authorshu <nvcsadjkojf@outlook.com>2026-07-28 19:16:16 +0800
committershu <nvcsadjkojf@outlook.com>2026-07-28 19:16:16 +0800
commit8efba22ed34b6eeb28b5f410177e5a1545b5d798 (patch)
treeb4e751ec9a0940659bc50651974e96c57f6a66d8 /tiddlers/plugin-org-gtd-parser.tid
parent1e2031e8850fa91ed9e3b5cd11f7a5b01bbd999e (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.tid76
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;
+
+})();