@langadventurellc/task-trellis-mcp 2.3.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/http/__tests__/editCreateHandlers.test.js +2 -2
- package/dist/http/__tests__/editCreateHandlers.test.js.map +1 -1
- package/dist/http/__tests__/fileHandler.test.d.ts +2 -0
- package/dist/http/__tests__/fileHandler.test.d.ts.map +1 -0
- package/dist/http/__tests__/fileHandler.test.js +83 -0
- package/dist/http/__tests__/fileHandler.test.js.map +1 -0
- package/dist/http/__tests__/projectTreePage.test.js +3 -0
- package/dist/http/__tests__/projectTreePage.test.js.map +1 -1
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +1 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/projectTreePage/__tests__/renderDetailView.test.d.ts +2 -0
- package/dist/http/projectTreePage/__tests__/renderDetailView.test.d.ts.map +1 -0
- package/dist/http/projectTreePage/__tests__/renderDetailView.test.js +58 -0
- package/dist/http/projectTreePage/__tests__/renderDetailView.test.js.map +1 -0
- package/dist/http/projectTreePage/__tests__/renderEditForm.test.d.ts +2 -0
- package/dist/http/projectTreePage/__tests__/renderEditForm.test.d.ts.map +1 -0
- package/dist/http/projectTreePage/__tests__/renderEditForm.test.js +27 -0
- package/dist/http/projectTreePage/__tests__/renderEditForm.test.js.map +1 -0
- package/dist/http/projectTreePage/__tests__/renderMarkdown.test.d.ts +2 -0
- package/dist/http/projectTreePage/__tests__/renderMarkdown.test.d.ts.map +1 -0
- package/dist/http/projectTreePage/__tests__/renderMarkdown.test.js +49 -0
- package/dist/http/projectTreePage/__tests__/renderMarkdown.test.js.map +1 -0
- package/dist/http/projectTreePage/createTopSubmitHandler.d.ts.map +1 -1
- package/dist/http/projectTreePage/createTopSubmitHandler.js +13 -3
- package/dist/http/projectTreePage/createTopSubmitHandler.js.map +1 -1
- package/dist/http/projectTreePage/detailViewHandler.d.ts.map +1 -1
- package/dist/http/projectTreePage/detailViewHandler.js +5 -2
- package/dist/http/projectTreePage/detailViewHandler.js.map +1 -1
- package/dist/http/projectTreePage/editFormHandler.d.ts.map +1 -1
- package/dist/http/projectTreePage/editFormHandler.js +2 -0
- package/dist/http/projectTreePage/editFormHandler.js.map +1 -1
- package/dist/http/projectTreePage/editSubmitHandler.d.ts.map +1 -1
- package/dist/http/projectTreePage/editSubmitHandler.js +5 -2
- package/dist/http/projectTreePage/editSubmitHandler.js.map +1 -1
- package/dist/http/projectTreePage/fileHandler.d.ts +4 -0
- package/dist/http/projectTreePage/fileHandler.d.ts.map +1 -0
- package/dist/http/projectTreePage/fileHandler.js +48 -0
- package/dist/http/projectTreePage/fileHandler.js.map +1 -0
- package/dist/http/projectTreePage/index.d.ts +1 -0
- package/dist/http/projectTreePage/index.d.ts.map +1 -1
- package/dist/http/projectTreePage/index.js +3 -1
- package/dist/http/projectTreePage/index.js.map +1 -1
- package/dist/http/projectTreePage/renderCreateTopForm.d.ts +1 -0
- package/dist/http/projectTreePage/renderCreateTopForm.d.ts.map +1 -1
- package/dist/http/projectTreePage/renderCreateTopForm.js +5 -0
- package/dist/http/projectTreePage/renderCreateTopForm.js.map +1 -1
- package/dist/http/projectTreePage/renderDetailView.d.ts +1 -1
- package/dist/http/projectTreePage/renderDetailView.d.ts.map +1 -1
- package/dist/http/projectTreePage/renderDetailView.js +29 -3
- package/dist/http/projectTreePage/renderDetailView.js.map +1 -1
- package/dist/http/projectTreePage/renderEditForm.d.ts +2 -0
- package/dist/http/projectTreePage/renderEditForm.d.ts.map +1 -1
- package/dist/http/projectTreePage/renderEditForm.js +8 -0
- package/dist/http/projectTreePage/renderEditForm.js.map +1 -1
- package/dist/http/projectTreePage/renderMarkdown.d.ts +2 -0
- package/dist/http/projectTreePage/renderMarkdown.d.ts.map +1 -0
- package/dist/http/projectTreePage/renderMarkdown.js +18 -0
- package/dist/http/projectTreePage/renderMarkdown.js.map +1 -0
- package/dist/http/styles.css +175 -0
- package/dist/models/TrellisObject.d.ts +1 -0
- package/dist/models/TrellisObject.d.ts.map +1 -1
- package/dist/models/TrellisObjectSummary.d.ts +1 -0
- package/dist/models/TrellisObjectSummary.d.ts.map +1 -1
- package/dist/repositories/local/LocalRepository.d.ts +1 -0
- package/dist/repositories/local/LocalRepository.d.ts.map +1 -1
- package/dist/repositories/local/LocalRepository.js +9 -0
- package/dist/repositories/local/LocalRepository.js.map +1 -1
- package/dist/services/TaskTrellisService.d.ts +2 -2
- package/dist/services/TaskTrellisService.d.ts.map +1 -1
- package/dist/services/local/LocalTaskTrellisService.d.ts +2 -2
- package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -1
- package/dist/services/local/LocalTaskTrellisService.js +4 -4
- package/dist/services/local/LocalTaskTrellisService.js.map +1 -1
- package/dist/services/local/__tests__/createObject.test.js +20 -0
- package/dist/services/local/__tests__/createObject.test.js.map +1 -1
- package/dist/services/local/__tests__/listObjects.test.js +16 -0
- package/dist/services/local/__tests__/listObjects.test.js.map +1 -1
- package/dist/services/local/__tests__/updateObject.test.js +46 -0
- package/dist/services/local/__tests__/updateObject.test.js.map +1 -1
- package/dist/services/local/createObject.d.ts +1 -1
- package/dist/services/local/createObject.d.ts.map +1 -1
- package/dist/services/local/createObject.js +14 -9
- package/dist/services/local/createObject.js.map +1 -1
- package/dist/services/local/listObjects.d.ts.map +1 -1
- package/dist/services/local/listObjects.js +1 -0
- package/dist/services/local/listObjects.js.map +1 -1
- package/dist/services/local/updateObject.d.ts +1 -1
- package/dist/services/local/updateObject.d.ts.map +1 -1
- package/dist/services/local/updateObject.js +20 -9
- package/dist/services/local/updateObject.js.map +1 -1
- package/dist/tools/__tests__/createObjectTool.test.js +8 -8
- package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
- package/dist/tools/__tests__/updateObjectTool.test.js +6 -6
- package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
- package/dist/tools/createObjectTool.d.ts +5 -1
- package/dist/tools/createObjectTool.d.ts.map +1 -1
- package/dist/tools/createObjectTool.js +9 -3
- package/dist/tools/createObjectTool.js.map +1 -1
- package/dist/tools/listObjectsTool.d.ts +1 -1
- package/dist/tools/listObjectsTool.js +1 -1
- package/dist/tools/listObjectsTool.js.map +1 -1
- package/dist/tools/updateObjectTool.d.ts +5 -1
- package/dist/tools/updateObjectTool.d.ts.map +1 -1
- package/dist/tools/updateObjectTool.js +7 -2
- package/dist/tools/updateObjectTool.js.map +1 -1
- package/dist/utils/__tests__/deserializeTrellisObject.test.js +40 -0
- package/dist/utils/__tests__/deserializeTrellisObject.test.js.map +1 -1
- package/dist/utils/__tests__/serializeTrellisObject.test.js +45 -0
- package/dist/utils/__tests__/serializeTrellisObject.test.js.map +1 -1
- package/dist/utils/deserializeTrellisObject.d.ts.map +1 -1
- package/dist/utils/deserializeTrellisObject.js +3 -0
- package/dist/utils/deserializeTrellisObject.js.map +1 -1
- package/dist/utils/serializeTrellisObject.d.ts.map +1 -1
- package/dist/utils/serializeTrellisObject.js +3 -0
- package/dist/utils/serializeTrellisObject.js.map +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detailViewHandler.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/detailViewHandler.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"detailViewHandler.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/detailViewHandler.ts"],"names":[],"mappings":";;AAMA,8CAqBC;AA1BD,8CAA2C;AAC3C,yCAAsC;AACtC,yDAAsD;AAEtD,mFAAmF;AAC5E,KAAK,UAAU,iBAAiB,CACrC,IAAqB,EACrB,GAAmB,EACnB,MAA8B;IAE9B,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAA,mBAAQ,EAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,sBAAsB,IAAA,uBAAU,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;KAC/B,CAAC,CAAC;IACH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,GAAG,CAAC,GAAG,CAAC,MAAM,IAAA,mCAAgB,EAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editFormHandler.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/editFormHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,wFAAwF;AACxF,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"editFormHandler.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/editFormHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAKjE,wFAAwF;AACxF,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -21,6 +21,8 @@ async function editFormHandler(_req, res, params) {
|
|
|
21
21
|
priority: obj.priority,
|
|
22
22
|
body: obj.body,
|
|
23
23
|
prerequisites: obj.prerequisites.join(", "),
|
|
24
|
+
externalIssueId: obj.externalIssueId,
|
|
25
|
+
isTopLevel: obj.parent === null,
|
|
24
26
|
}));
|
|
25
27
|
}
|
|
26
28
|
//# sourceMappingURL=editFormHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editFormHandler.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/editFormHandler.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"editFormHandler.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/editFormHandler.ts"],"names":[],"mappings":";;AAMA,0CA2BC;AAhCD,8CAA2C;AAC3C,yCAAsC;AACtC,qDAAkD;AAElD,wFAAwF;AACjF,KAAK,UAAU,eAAe,CACnC,IAAqB,EACrB,GAAmB,EACnB,MAA8B;IAE9B,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAA,mBAAQ,EAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,sBAAsB,IAAA,uBAAU,EAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,GAAG,CAAC,GAAG,CACL,IAAA,+BAAc,EAAC,GAAG,EAAE,EAAE,EAAE;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3C,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,UAAU,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI;KAChC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editSubmitHandler.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/editSubmitHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"editSubmitHandler.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/editSubmitHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA2BjE,oFAAoF;AACpF,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuEf"}
|
|
@@ -17,6 +17,7 @@ function parseEditFields(form, obj) {
|
|
|
17
17
|
body: form.get("body") ?? "",
|
|
18
18
|
prereqsRaw: form.get("prerequisites") ?? "",
|
|
19
19
|
logEntry: form.get("log_entry") ?? "",
|
|
20
|
+
externalIssueId: form.get("externalIssueId") ?? undefined,
|
|
20
21
|
};
|
|
21
22
|
}
|
|
22
23
|
/** Handles PUT /projects/:key/issues/:id — validates prereqs and saves the edit. */
|
|
@@ -30,7 +31,7 @@ async function editSubmitHandler(req, res, params) {
|
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
33
|
const form = await (0, readFormBody_1.readFormBody)(req);
|
|
33
|
-
const { title, status, priority, body, prereqsRaw, logEntry } = parseEditFields(form, obj);
|
|
34
|
+
const { title, status, priority, body, prereqsRaw, logEntry, externalIssueId, } = parseEditFields(form, obj);
|
|
34
35
|
const prereqs = (0, parsePrereqs_1.parsePrereqs)(prereqsRaw);
|
|
35
36
|
for (const prereqId of prereqs) {
|
|
36
37
|
const found = await repo.getObjectById(prereqId);
|
|
@@ -43,11 +44,13 @@ async function editSubmitHandler(req, res, params) {
|
|
|
43
44
|
body,
|
|
44
45
|
prerequisites: prereqsRaw,
|
|
45
46
|
log_entry: logEntry,
|
|
47
|
+
externalIssueId,
|
|
48
|
+
isTopLevel: obj.parent === null,
|
|
46
49
|
}, `Unknown prerequisite ID: ${(0, escapeHtml_1.escapeHtml)(prereqId)}`));
|
|
47
50
|
return;
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
|
-
await (0, updateObject_1.updateObject)(repo, makeRepo_1.SERVER_CONFIG, id, title, priority, prereqs, body, status, true);
|
|
53
|
+
await (0, updateObject_1.updateObject)(repo, makeRepo_1.SERVER_CONFIG, id, title, priority, prereqs, body, status, true, externalIssueId);
|
|
51
54
|
if (logEntry.trim()) {
|
|
52
55
|
await (0, appendObjectLog_1.appendObjectLog)(repo, id, logEntry.trim());
|
|
53
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editSubmitHandler.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/editSubmitHandler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"editSubmitHandler.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/editSubmitHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
|
+
/** Handles GET /projects/:key/issues/:id/file — streams the raw issue markdown file. */
|
|
3
|
+
export declare function fileHandler(_req: IncomingMessage, res: ServerResponse, params: Record<string, string>): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=fileHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileHandler.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/fileHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAUjE,wFAAwF;AACxF,wBAAsB,WAAW,CAC/B,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fileHandler = fileHandler;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const promises_1 = require("node:fs/promises");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const resolveDataDir_1 = require("../../configuration/resolveDataDir");
|
|
8
|
+
const makeRepo_1 = require("./makeRepo");
|
|
9
|
+
function send404(res) {
|
|
10
|
+
res.writeHead(404, { "Content-Type": "text/plain" });
|
|
11
|
+
res.end("404 Not Found");
|
|
12
|
+
}
|
|
13
|
+
/** Handles GET /projects/:key/issues/:id/file — streams the raw issue markdown file. */
|
|
14
|
+
async function fileHandler(_req, res, params) {
|
|
15
|
+
const { key, id } = params;
|
|
16
|
+
const projectRoot = (0, node_path_1.join)((0, resolveDataDir_1.resolveDataDir)(), "projects", key);
|
|
17
|
+
if (!(0, node_fs_1.existsSync)(projectRoot)) {
|
|
18
|
+
send404(res);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const repo = (0, makeRepo_1.makeRepo)(key);
|
|
22
|
+
const filePath = await repo.getObjectFilePath(id);
|
|
23
|
+
if (!filePath) {
|
|
24
|
+
send404(res);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!filePath.startsWith(projectRoot)) {
|
|
28
|
+
send404(res);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
await (0, promises_1.stat)(filePath);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
send404(res);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });
|
|
39
|
+
const stream = (0, node_fs_1.createReadStream)(filePath);
|
|
40
|
+
stream.on("error", () => {
|
|
41
|
+
if (!res.headersSent) {
|
|
42
|
+
res.writeHead(500, { "Content-Type": "text/plain" });
|
|
43
|
+
res.end("500 Internal Server Error");
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
stream.pipe(res);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=fileHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileHandler.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/fileHandler.ts"],"names":[],"mappings":";;AAaA,kCA0CC;AAvDD,qCAAuD;AACvD,+CAAwC;AAExC,yCAAiC;AACjC,uEAAoE;AACpE,yCAAsC;AAEtC,SAAS,OAAO,CAAC,GAAmB;IAClC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;IACrD,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC3B,CAAC;AAED,wFAAwF;AACjF,KAAK,UAAU,WAAW,CAC/B,IAAqB,EACrB,GAAmB,EACnB,MAA8B;IAE9B,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;IAE3B,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,IAAA,+BAAc,GAAE,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAA,oBAAU,EAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,IAAA,mBAAQ,EAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAElD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAA,eAAI,EAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -7,6 +7,7 @@ export { deleteFormHandler } from "./deleteFormHandler";
|
|
|
7
7
|
export { deleteSubmitHandler } from "./deleteSubmitHandler";
|
|
8
8
|
export { detailViewHandler } from "./detailViewHandler";
|
|
9
9
|
export { editFormHandler } from "./editFormHandler";
|
|
10
|
+
export { fileHandler } from "./fileHandler";
|
|
10
11
|
export { editSubmitHandler } from "./editSubmitHandler";
|
|
11
12
|
export { projectTreeHandler } from "./projectTreeHandler";
|
|
12
13
|
export { searchHandler } from "./searchHandler";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.searchHandler = exports.projectTreeHandler = exports.editSubmitHandler = exports.editFormHandler = exports.detailViewHandler = exports.deleteSubmitHandler = exports.deleteFormHandler = exports.createTopSubmitHandler = exports.createTopFormHandler = exports.createChildSubmitHandler = exports.createChildFormHandler = exports.attachmentHandler = void 0;
|
|
3
|
+
exports.searchHandler = exports.projectTreeHandler = exports.editSubmitHandler = exports.fileHandler = exports.editFormHandler = exports.detailViewHandler = exports.deleteSubmitHandler = exports.deleteFormHandler = exports.createTopSubmitHandler = exports.createTopFormHandler = exports.createChildSubmitHandler = exports.createChildFormHandler = exports.attachmentHandler = void 0;
|
|
4
4
|
var attachmentHandler_1 = require("./attachmentHandler");
|
|
5
5
|
Object.defineProperty(exports, "attachmentHandler", { enumerable: true, get: function () { return attachmentHandler_1.attachmentHandler; } });
|
|
6
6
|
var createChildFormHandler_1 = require("./createChildFormHandler");
|
|
@@ -19,6 +19,8 @@ var detailViewHandler_1 = require("./detailViewHandler");
|
|
|
19
19
|
Object.defineProperty(exports, "detailViewHandler", { enumerable: true, get: function () { return detailViewHandler_1.detailViewHandler; } });
|
|
20
20
|
var editFormHandler_1 = require("./editFormHandler");
|
|
21
21
|
Object.defineProperty(exports, "editFormHandler", { enumerable: true, get: function () { return editFormHandler_1.editFormHandler; } });
|
|
22
|
+
var fileHandler_1 = require("./fileHandler");
|
|
23
|
+
Object.defineProperty(exports, "fileHandler", { enumerable: true, get: function () { return fileHandler_1.fileHandler; } });
|
|
22
24
|
var editSubmitHandler_1 = require("./editSubmitHandler");
|
|
23
25
|
Object.defineProperty(exports, "editSubmitHandler", { enumerable: true, get: function () { return editSubmitHandler_1.editSubmitHandler; } });
|
|
24
26
|
var projectTreeHandler_1 = require("./projectTreeHandler");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA;AACjC,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/index.ts"],"names":[],"mappings":";;;AAAA,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA;AACjC,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,mEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
|
|
@@ -5,6 +5,7 @@ type CreateTopFields = {
|
|
|
5
5
|
priority?: string;
|
|
6
6
|
body?: string;
|
|
7
7
|
prerequisites?: string;
|
|
8
|
+
externalIssueId?: string;
|
|
8
9
|
};
|
|
9
10
|
/** Renders the data-view="create" form fragment for a new top-level issue. */
|
|
10
11
|
export declare function renderCreateTopForm(key: string, fields?: CreateTopFields, error?: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderCreateTopForm.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderCreateTopForm.ts"],"names":[],"mappings":"AAKA,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"renderCreateTopForm.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderCreateTopForm.ts"],"names":[],"mappings":"AAKA,KAAK,eAAe,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAiBF,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,eAAoB,EAC5B,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAuDR"}
|
|
@@ -27,6 +27,10 @@ function renderCreateTopForm(key, fields = {}, error) {
|
|
|
27
27
|
: "";
|
|
28
28
|
const status = fields.status ?? models_1.TrellisObjectStatus.DRAFT;
|
|
29
29
|
const priority = fields.priority ?? models_1.TrellisObjectPriority.MEDIUM;
|
|
30
|
+
const externalIdField = `<div class="fld">
|
|
31
|
+
<label for="top-external-id">External issue ID <span style="color:var(--text-subtle);font-weight:400;text-transform:none;letter-spacing:0;">(optional)</span></label>
|
|
32
|
+
<input id="top-external-id" type="text" name="externalIssueId" value="${(0, escapeHtml_1.escapeHtml)(fields.externalIssueId ?? "")}" placeholder="e.g., JIRA-42" />
|
|
33
|
+
</div>`;
|
|
30
34
|
return `<div data-view="create">
|
|
31
35
|
${errorBanner}
|
|
32
36
|
<form class="form-card" hx-post="/projects/${keyEsc}/issues" hx-target="#detail" hx-swap="innerHTML">
|
|
@@ -61,6 +65,7 @@ function renderCreateTopForm(key, fields = {}, error) {
|
|
|
61
65
|
<label for="top-prereqs">Prerequisites</label>
|
|
62
66
|
<input id="top-prereqs" type="text" name="prerequisites" value="${(0, escapeHtml_1.escapeHtml)(fields.prerequisites ?? "")}" placeholder="Comma-separated issue IDs (optional)" />
|
|
63
67
|
</div>
|
|
68
|
+
${externalIdField}
|
|
64
69
|
</div>
|
|
65
70
|
<div class="form-footer">
|
|
66
71
|
<div class="left"></div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderCreateTopForm.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderCreateTopForm.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"renderCreateTopForm.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderCreateTopForm.ts"],"names":[],"mappings":";;AA+BA,kDA2DC;AA1FD,yCAA0E;AAC1E,8CAA2C;AAC3C,qDAAkD;AAClD,iDAA8C;AAY9C,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO;QACL,CAAC,SAAS,EAAE,SAAS,CAAC;QACtB,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,SAAS,EAAE,SAAS,CAAC;QACtB,CAAC,MAAM,EAAE,MAAM,CAAC;KACjB;SACE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;QACtB,MAAM,EAAE,GAAG,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,OAAO,2BAA2B,EAAE,wBAAwB,KAAK,IAAI,OAAO,yBAAyB,EAAE,KAAK,KAAK,UAAU,CAAC;IAC9H,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,SAAgB,mBAAmB,CACjC,GAAW,EACX,SAA0B,EAAE,EAC5B,KAAc;IAEd,MAAM,MAAM,GAAG,IAAA,uBAAU,EAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,WAAW,GAAG,KAAK;QACvB,CAAC,CAAC,6LAA6L,IAAA,uBAAU,EAAC,KAAK,CAAC,QAAQ;QACxN,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,4BAAmB,CAAC,KAAK,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,8BAAqB,CAAC,MAAM,CAAC;IACjE,MAAM,eAAe,GAAG;;4EAEkD,IAAA,uBAAU,EAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;SAC3G,CAAC;IACR,OAAO;IACL,WAAW;+CACgC,MAAM;;;0BAG3B,MAAM;;;;;2BAKL,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;;;;gEAIQ,IAAA,uBAAU,EAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;;;;;6BAKjE,IAAA,2BAAY,EAAC,MAAM,EAAE,IAAI,CAAC;;;;6BAI1B,IAAA,+BAAc,EAAC,QAAQ,EAAE,IAAI,CAAC;;;;;8CAKb,IAAA,uBAAU,EAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;;;;0EAID,IAAA,uBAAU,EAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;;QAExG,eAAe;;;;;;;;;OAShB,CAAC;AACR,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TrellisObject } from "../../models";
|
|
2
2
|
import type { Repository } from "../../repositories/Repository";
|
|
3
3
|
/** Renders the detail pane HTML fragment for a Trellis object. */
|
|
4
|
-
export declare function renderDetailView(key: string, obj: TrellisObject, repo: Repository, attachments?: string[]): Promise<string>;
|
|
4
|
+
export declare function renderDetailView(key: string, obj: TrellisObject, repo: Repository, attachments?: string[], filePath?: string | null): Promise<string>;
|
|
5
5
|
//# sourceMappingURL=renderDetailView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderDetailView.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderDetailView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"renderDetailView.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderDetailView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AA+DhE,kEAAkE;AAClE,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,UAAU,EAChB,WAAW,GAAE,MAAM,EAAO,EAC1B,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC7B,OAAO,CAAC,MAAM,CAAC,CA6HjB"}
|
|
@@ -4,6 +4,7 @@ exports.renderDetailView = renderDetailView;
|
|
|
4
4
|
const models_1 = require("../../models");
|
|
5
5
|
const escapeHtml_1 = require("../escapeHtml");
|
|
6
6
|
const priorityCssClass_1 = require("./priorityCssClass");
|
|
7
|
+
const renderMarkdown_1 = require("./renderMarkdown");
|
|
7
8
|
const statusCssClass_1 = require("./statusCssClass");
|
|
8
9
|
const statusLabels_1 = require("./statusLabels");
|
|
9
10
|
const typeLabel_1 = require("./typeLabel");
|
|
@@ -51,7 +52,7 @@ async function buildPrerequisites(obj, repo) {
|
|
|
51
52
|
return `<ul class="prereq-list">${items.join("")}</ul>`;
|
|
52
53
|
}
|
|
53
54
|
/** Renders the detail pane HTML fragment for a Trellis object. */
|
|
54
|
-
async function renderDetailView(key, obj, repo, attachments = []) {
|
|
55
|
+
async function renderDetailView(key, obj, repo, attachments = [], filePath = null) {
|
|
55
56
|
const [breadcrumbs, prerequisites] = await Promise.all([
|
|
56
57
|
buildBreadcrumbs(key, obj, repo),
|
|
57
58
|
buildPrerequisites(obj, repo),
|
|
@@ -82,10 +83,14 @@ async function renderDetailView(key, obj, repo, attachments = []) {
|
|
|
82
83
|
<span class="badge kind">${(0, escapeHtml_1.escapeHtml)((0, typeLabel_1.typeLabel)(obj.type))}</span>
|
|
83
84
|
<span class="badge status-${(0, escapeHtml_1.escapeHtml)(statusClass)}"><span class="mini-dot"></span>${(0, escapeHtml_1.escapeHtml)(statusLabel(obj.status))}</span>
|
|
84
85
|
<span class="badge priority ${(0, escapeHtml_1.escapeHtml)(priorityClass)}">${(0, escapeHtml_1.escapeHtml)(priorityLabel(obj.priority))}</span>
|
|
85
|
-
<span class="id-chip"
|
|
86
|
+
<span class="id-chip" role="button" tabindex="0" title="Click to copy ID"
|
|
87
|
+
data-copy="${idEsc}"
|
|
88
|
+
onclick="navigator.clipboard && navigator.clipboard.writeText(this.dataset.copy).then(()=>{const p=this.dataset.prev||this.textContent;this.dataset.prev=p;this.style.minWidth=this.offsetWidth+'px';this.textContent='Copied!';setTimeout(()=>{this.textContent=p;this.style.minWidth='';},1200);})"
|
|
89
|
+
onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();this.click();}"
|
|
90
|
+
>${idEsc}</span>
|
|
86
91
|
</div>`;
|
|
87
92
|
const description = obj.body
|
|
88
|
-
? `<div class="
|
|
93
|
+
? `<div class="markdown">${(0, renderMarkdown_1.renderMarkdown)(obj.body)}</div>`
|
|
89
94
|
: `<p class="empty">No description.</p>`;
|
|
90
95
|
const log = obj.log.length > 0
|
|
91
96
|
? `<ul class="log-list">${obj.log
|
|
@@ -106,14 +111,35 @@ async function renderDetailView(key, obj, repo, attachments = []) {
|
|
|
106
111
|
.join("")}</ul>
|
|
107
112
|
</div>`
|
|
108
113
|
: "";
|
|
114
|
+
const externalIssueIdSection = obj.parent === null && obj.externalIssueId
|
|
115
|
+
? `<div class="field-group">
|
|
116
|
+
<div class="field-label">External issue ID</div>
|
|
117
|
+
<div class="prose">${(0, escapeHtml_1.escapeHtml)(obj.externalIssueId)}</div>
|
|
118
|
+
</div>`
|
|
119
|
+
: "";
|
|
120
|
+
const fileSection = filePath
|
|
121
|
+
? `<div class="field-group">
|
|
122
|
+
<div class="field-label">File</div>
|
|
123
|
+
<div class="file-path-row">
|
|
124
|
+
<code class="file-path" role="button" tabindex="0" title="Click to copy path"
|
|
125
|
+
data-copy="${(0, escapeHtml_1.escapeHtml)(filePath)}"
|
|
126
|
+
onclick="navigator.clipboard && navigator.clipboard.writeText(this.dataset.copy).then(()=>{const p=this.dataset.prev||this.textContent;this.dataset.prev=p;this.textContent='Copied!';setTimeout(()=>{this.textContent=p;},1200);})"
|
|
127
|
+
onkeydown="if(event.key==='Enter'||event.key===' '){event.preventDefault();this.click();}"
|
|
128
|
+
>${(0, escapeHtml_1.escapeHtml)(filePath)}</code>
|
|
129
|
+
<a class="file-raw-link" href="/projects/${keyEsc}/issues/${idEsc}/file" target="_blank" rel="noopener">Open raw</a>
|
|
130
|
+
</div>
|
|
131
|
+
</div>`
|
|
132
|
+
: "";
|
|
109
133
|
return `<div data-view="view">
|
|
110
134
|
${breadcrumbs}
|
|
111
135
|
${titleRow}
|
|
112
136
|
${badgesRow}
|
|
137
|
+
${fileSection}
|
|
113
138
|
<div class="field-group">
|
|
114
139
|
<div class="field-label">Description</div>
|
|
115
140
|
${description}
|
|
116
141
|
</div>
|
|
142
|
+
${externalIssueIdSection}
|
|
117
143
|
${attachmentsList}
|
|
118
144
|
<div class="field-group">
|
|
119
145
|
<div class="field-label">Prerequisites</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderDetailView.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderDetailView.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"renderDetailView.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderDetailView.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ type EditFields = {
|
|
|
5
5
|
body: string;
|
|
6
6
|
prerequisites: string;
|
|
7
7
|
log_entry?: string;
|
|
8
|
+
externalIssueId?: string;
|
|
9
|
+
isTopLevel: boolean;
|
|
8
10
|
};
|
|
9
11
|
/** Renders the data-view="edit" form fragment for an issue. */
|
|
10
12
|
export declare function renderEditForm(key: string, id: string, fields: EditFields, error?: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderEditForm.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderEditForm.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"renderEditForm.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderEditForm.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CA4DR"}
|
|
@@ -11,6 +11,13 @@ function renderEditForm(key, id, fields, error) {
|
|
|
11
11
|
const errorBanner = error
|
|
12
12
|
? `<div class="error-banner" style="padding:10px 12px;margin-bottom:12px;border:1px solid var(--danger);background:var(--danger-tint);color:var(--danger);border-radius:6px;font-size:13px;">${(0, escapeHtml_1.escapeHtml)(error)}</div>`
|
|
13
13
|
: "";
|
|
14
|
+
const externalIdField = fields.isTopLevel
|
|
15
|
+
? `<div class="fld">
|
|
16
|
+
<label for="f-external-id">External issue ID <span style="color:var(--text-subtle);font-weight:400;text-transform:none;letter-spacing:0;">(optional)</span></label>
|
|
17
|
+
<input id="f-external-id" type="text" name="externalIssueId" value="${(0, escapeHtml_1.escapeHtml)(fields.externalIssueId ?? "")}" placeholder="e.g., JIRA-42" />
|
|
18
|
+
<div class="hint">Only available on top-level issues. Leave empty and save to clear.</div>
|
|
19
|
+
</div>`
|
|
20
|
+
: "";
|
|
14
21
|
return `<div data-view="edit">
|
|
15
22
|
${errorBanner}
|
|
16
23
|
<form class="form-card" hx-put="/projects/${keyEsc}/issues/${idEsc}" hx-target="#detail" hx-swap="innerHTML">
|
|
@@ -43,6 +50,7 @@ function renderEditForm(key, id, fields, error) {
|
|
|
43
50
|
<input id="f-prereqs" type="text" name="prerequisites" value="${(0, escapeHtml_1.escapeHtml)(fields.prerequisites)}" placeholder="Comma-separated issue IDs" />
|
|
44
51
|
<div class="hint">Comma-separated list of prerequisite issue IDs.</div>
|
|
45
52
|
</div>
|
|
53
|
+
${externalIdField}
|
|
46
54
|
<div class="fld">
|
|
47
55
|
<label for="f-log">Add log entry <span style="color:var(--text-subtle);font-weight:400;text-transform:none;letter-spacing:0;">(optional)</span></label>
|
|
48
56
|
<input id="f-log" type="text" name="log_entry" value="${(0, escapeHtml_1.escapeHtml)(fields.log_entry ?? "")}" placeholder="What changed?" />
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderEditForm.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderEditForm.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"renderEditForm.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderEditForm.ts"],"names":[],"mappings":";;AAgBA,wCAiEC;AAjFD,8CAA2C;AAC3C,qDAAkD;AAClD,iDAA8C;AAa9C,+DAA+D;AAC/D,SAAgB,cAAc,CAC5B,GAAW,EACX,EAAU,EACV,MAAkB,EAClB,KAAc;IAEd,MAAM,MAAM,GAAG,IAAA,uBAAU,EAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAA,uBAAU,EAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK;QACvB,CAAC,CAAC,6LAA6L,IAAA,uBAAU,EAAC,KAAK,CAAC,QAAQ;QACxN,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU;QACvC,CAAC,CAAC;;8EAEwE,IAAA,uBAAU,EAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;;aAEzG;QACT,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;IACL,WAAW;8CAC+B,MAAM,WAAW,KAAK;;;0BAG1C,KAAK;;;;;8DAK+B,IAAA,uBAAU,EAAC,MAAM,CAAC,KAAK,CAAC;;;;;6BAKzD,IAAA,2BAAY,EAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;;;;6BAIhC,IAAA,+BAAc,EAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC;;;;;4CAKrB,IAAA,uBAAU,EAAC,MAAM,CAAC,IAAI,CAAC;;;;;wEAKK,IAAA,uBAAU,EAAC,MAAM,CAAC,aAAa,CAAC;;;QAGhG,eAAe;;;gEAGyC,IAAA,uBAAU,EAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;;;;;;8DAMpC,MAAM,WAAW,KAAK;;;;;OAK7E,CAAC;AACR,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderMarkdown.d.ts","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderMarkdown.ts"],"names":[],"mappings":"AAWA,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.renderMarkdown = renderMarkdown;
|
|
7
|
+
const markdown_it_1 = __importDefault(require("markdown-it"));
|
|
8
|
+
const md = new markdown_it_1.default({
|
|
9
|
+
html: false,
|
|
10
|
+
linkify: false,
|
|
11
|
+
breaks: false,
|
|
12
|
+
typographer: false,
|
|
13
|
+
});
|
|
14
|
+
md.disable(["autolink"]);
|
|
15
|
+
function renderMarkdown(src) {
|
|
16
|
+
return md.render(src);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=renderMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderMarkdown.js","sourceRoot":"","sources":["../../../src/http/projectTreePage/renderMarkdown.ts"],"names":[],"mappings":";;;;;AAWA,wCAEC;AAbD,8DAAqC;AAErC,MAAM,EAAE,GAAG,IAAI,qBAAU,CAAC;IACxB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;IACb,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC;AAEH,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAEzB,SAAgB,cAAc,CAAC,GAAW;IACxC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC"}
|
package/dist/http/styles.css
CHANGED
|
@@ -687,6 +687,7 @@ a {
|
|
|
687
687
|
.id-chip {
|
|
688
688
|
display: inline-flex;
|
|
689
689
|
align-items: center;
|
|
690
|
+
justify-content: center;
|
|
690
691
|
gap: 4px;
|
|
691
692
|
font-family: var(--font-mono);
|
|
692
693
|
font-size: 10px;
|
|
@@ -696,11 +697,17 @@ a {
|
|
|
696
697
|
border-radius: 3px;
|
|
697
698
|
background: var(--gray-50);
|
|
698
699
|
margin-left: 2px;
|
|
700
|
+
cursor: pointer;
|
|
701
|
+
user-select: all;
|
|
699
702
|
}
|
|
700
703
|
.id-chip:hover {
|
|
701
704
|
background: var(--gray-100);
|
|
702
705
|
color: var(--text);
|
|
703
706
|
}
|
|
707
|
+
.id-chip:focus-visible {
|
|
708
|
+
outline: 2px solid var(--accent);
|
|
709
|
+
outline-offset: 1px;
|
|
710
|
+
}
|
|
704
711
|
|
|
705
712
|
/* ----- Field blocks ----- */
|
|
706
713
|
.field-group {
|
|
@@ -724,6 +731,45 @@ a {
|
|
|
724
731
|
font-size: var(--text-sm);
|
|
725
732
|
}
|
|
726
733
|
|
|
734
|
+
/* File path row (click-to-copy + open-raw link) */
|
|
735
|
+
.file-path-row {
|
|
736
|
+
display: flex;
|
|
737
|
+
align-items: center;
|
|
738
|
+
gap: var(--sp-3);
|
|
739
|
+
flex-wrap: wrap;
|
|
740
|
+
}
|
|
741
|
+
.file-path {
|
|
742
|
+
font-family: var(--font-mono);
|
|
743
|
+
font-size: var(--text-sm);
|
|
744
|
+
color: var(--text);
|
|
745
|
+
background: var(--bg-sunken);
|
|
746
|
+
border: 1px solid var(--border);
|
|
747
|
+
border-radius: var(--radius);
|
|
748
|
+
padding: 4px 8px;
|
|
749
|
+
cursor: pointer;
|
|
750
|
+
user-select: all;
|
|
751
|
+
word-break: break-all;
|
|
752
|
+
flex: 1;
|
|
753
|
+
min-width: 0;
|
|
754
|
+
}
|
|
755
|
+
.file-path:hover {
|
|
756
|
+
background: var(--accent-tint);
|
|
757
|
+
border-color: var(--accent-border);
|
|
758
|
+
}
|
|
759
|
+
.file-path:focus-visible {
|
|
760
|
+
outline: 2px solid var(--accent);
|
|
761
|
+
outline-offset: 1px;
|
|
762
|
+
}
|
|
763
|
+
.file-raw-link {
|
|
764
|
+
font-size: var(--text-sm);
|
|
765
|
+
color: var(--accent);
|
|
766
|
+
text-decoration: none;
|
|
767
|
+
white-space: nowrap;
|
|
768
|
+
}
|
|
769
|
+
.file-raw-link:hover {
|
|
770
|
+
text-decoration: underline;
|
|
771
|
+
}
|
|
772
|
+
|
|
727
773
|
/* Description body (markdown-ish) */
|
|
728
774
|
.prose {
|
|
729
775
|
background: var(--bg-sunken);
|
|
@@ -758,6 +804,135 @@ a {
|
|
|
758
804
|
margin-bottom: 0;
|
|
759
805
|
}
|
|
760
806
|
|
|
807
|
+
/* Rendered markdown body */
|
|
808
|
+
.markdown {
|
|
809
|
+
background: var(--bg-sunken);
|
|
810
|
+
border: 1px solid var(--border);
|
|
811
|
+
border-radius: var(--radius);
|
|
812
|
+
padding: var(--sp-4) var(--sp-5);
|
|
813
|
+
font-size: var(--text-md);
|
|
814
|
+
line-height: 1.6;
|
|
815
|
+
color: var(--gray-800);
|
|
816
|
+
}
|
|
817
|
+
.markdown > :first-child {
|
|
818
|
+
margin-top: 0;
|
|
819
|
+
}
|
|
820
|
+
.markdown > :last-child {
|
|
821
|
+
margin-bottom: 0;
|
|
822
|
+
}
|
|
823
|
+
.markdown p {
|
|
824
|
+
margin: 0 0 10px;
|
|
825
|
+
}
|
|
826
|
+
.markdown h1,
|
|
827
|
+
.markdown h2,
|
|
828
|
+
.markdown h3,
|
|
829
|
+
.markdown h4,
|
|
830
|
+
.markdown h5,
|
|
831
|
+
.markdown h6 {
|
|
832
|
+
margin: 18px 0 8px;
|
|
833
|
+
font-weight: 600;
|
|
834
|
+
line-height: 1.3;
|
|
835
|
+
}
|
|
836
|
+
.markdown h1 {
|
|
837
|
+
font-size: 1.5em;
|
|
838
|
+
border-bottom: 1px solid var(--border);
|
|
839
|
+
padding-bottom: 4px;
|
|
840
|
+
}
|
|
841
|
+
.markdown h2 {
|
|
842
|
+
font-size: 1.3em;
|
|
843
|
+
border-bottom: 1px solid var(--border);
|
|
844
|
+
padding-bottom: 3px;
|
|
845
|
+
}
|
|
846
|
+
.markdown h3 {
|
|
847
|
+
font-size: 1.15em;
|
|
848
|
+
}
|
|
849
|
+
.markdown h4 {
|
|
850
|
+
font-size: 1em;
|
|
851
|
+
}
|
|
852
|
+
.markdown h5,
|
|
853
|
+
.markdown h6 {
|
|
854
|
+
font-size: 0.95em;
|
|
855
|
+
color: var(--text-subtle);
|
|
856
|
+
}
|
|
857
|
+
.markdown ul,
|
|
858
|
+
.markdown ol {
|
|
859
|
+
margin: 0 0 10px;
|
|
860
|
+
padding-left: 24px;
|
|
861
|
+
}
|
|
862
|
+
.markdown li {
|
|
863
|
+
margin: 2px 0;
|
|
864
|
+
}
|
|
865
|
+
.markdown li > ul,
|
|
866
|
+
.markdown li > ol {
|
|
867
|
+
margin: 2px 0;
|
|
868
|
+
}
|
|
869
|
+
.markdown a {
|
|
870
|
+
color: var(--accent);
|
|
871
|
+
text-decoration: underline;
|
|
872
|
+
}
|
|
873
|
+
.markdown code {
|
|
874
|
+
font-family: var(--font-mono);
|
|
875
|
+
font-size: 0.9em;
|
|
876
|
+
background: var(--gray-200);
|
|
877
|
+
padding: 1px 5px;
|
|
878
|
+
border-radius: 3px;
|
|
879
|
+
}
|
|
880
|
+
.markdown pre {
|
|
881
|
+
margin: 0 0 10px;
|
|
882
|
+
padding: 10px 12px;
|
|
883
|
+
background: var(--gray-200);
|
|
884
|
+
border: 1px solid var(--border);
|
|
885
|
+
border-radius: var(--radius);
|
|
886
|
+
overflow-x: auto;
|
|
887
|
+
font-size: 0.9em;
|
|
888
|
+
line-height: 1.5;
|
|
889
|
+
}
|
|
890
|
+
.markdown pre code {
|
|
891
|
+
padding: 0;
|
|
892
|
+
background: transparent;
|
|
893
|
+
border-radius: 0;
|
|
894
|
+
font-size: 1em;
|
|
895
|
+
}
|
|
896
|
+
.markdown blockquote {
|
|
897
|
+
margin: 0 0 10px;
|
|
898
|
+
padding: 2px 12px;
|
|
899
|
+
border-left: 3px solid var(--border);
|
|
900
|
+
color: var(--text-subtle);
|
|
901
|
+
}
|
|
902
|
+
.markdown blockquote > :last-child {
|
|
903
|
+
margin-bottom: 0;
|
|
904
|
+
}
|
|
905
|
+
.markdown hr {
|
|
906
|
+
border: 0;
|
|
907
|
+
border-top: 1px solid var(--border);
|
|
908
|
+
margin: 16px 0;
|
|
909
|
+
}
|
|
910
|
+
.markdown img {
|
|
911
|
+
max-width: 100%;
|
|
912
|
+
height: auto;
|
|
913
|
+
}
|
|
914
|
+
.markdown table {
|
|
915
|
+
border-collapse: collapse;
|
|
916
|
+
margin: 0 0 10px;
|
|
917
|
+
font-size: 0.95em;
|
|
918
|
+
}
|
|
919
|
+
.markdown th,
|
|
920
|
+
.markdown td {
|
|
921
|
+
border: 1px solid var(--border);
|
|
922
|
+
padding: 6px 10px;
|
|
923
|
+
text-align: left;
|
|
924
|
+
}
|
|
925
|
+
.markdown th {
|
|
926
|
+
background: var(--gray-200);
|
|
927
|
+
font-weight: 600;
|
|
928
|
+
}
|
|
929
|
+
.markdown em {
|
|
930
|
+
font-style: italic;
|
|
931
|
+
}
|
|
932
|
+
.markdown strong {
|
|
933
|
+
font-weight: 600;
|
|
934
|
+
}
|
|
935
|
+
|
|
761
936
|
/* Prereq + log lists */
|
|
762
937
|
.prereq-list,
|
|
763
938
|
.log-list {
|