- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次) - .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…), 目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪 - .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/) - .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*) - .gitignore 补:备份件(*.bak-*) - 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
53 lines
2.4 KiB
JavaScript
53 lines
2.4 KiB
JavaScript
// @dsh-local/workspace-scoped-picker — client half(档案 18 v3 收尾 · 2026-09-11)
|
||
//
|
||
// 目的:让用户在「选择工作区目录」对话框里**看不到"改路径"输入口**(官方对话框的
|
||
// crumbEditZone / crumbEditGlyph),从而无法通过手输 `/` 或 `..` 跳出自己的目录。
|
||
// 手段:纯 CSS 覆盖(不改官方包、不替换官方 UI)——dsh client bundle 以普通脚本执行并向
|
||
// window.__ModuleLoader__ 注册 factory,这里只导出 apply + inject(**绝不 exports.default**,红线 R3)。
|
||
//
|
||
// 说明:越界本身已由 host 面(@dsh-local/workspace-scoped-picker 的 list/createDirectory)
|
||
// 拒绝;本 CSS 只是**从界面上消除这个入口**,属 defense-in-depth + 体验收敛。
|
||
|
||
window.__ModuleLoader__.load({
|
||
id: "@dsh-local/workspace-scoped-picker",
|
||
factory: (require) => {
|
||
var module = { exports: {} };
|
||
var exports = module.exports;
|
||
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
||
|
||
var STYLE_ID = "wsp-hide-path-edit";
|
||
|
||
/** 注入一次样式:隐藏路径编辑区/编辑图标(含 CSS-module 哈希类名的模糊匹配)。 */
|
||
function hidePathEditZone() {
|
||
if (typeof document === "undefined") return;
|
||
if (document.getElementById(STYLE_ID) !== null) return;
|
||
var style = document.createElement("style");
|
||
style.id = STYLE_ID;
|
||
style.textContent = [
|
||
/* 「选择工作区目录」对话框顶部的可编辑路径框与其铅笔图标 */
|
||
'[class*="crumbEditZone"]{display:none !important}',
|
||
'[class*="crumbEditGlyph"]{display:none !important}',
|
||
'[class*="crumbEditSource"]{display:none !important}',
|
||
/* 兜底:任何以 crumbEdit 开头的类(防官方改名/加类) */
|
||
'[class^="crumbEdit"],[class*=" crumbEdit"]{display:none !important}',
|
||
].join("\n");
|
||
(document.head || document.documentElement).appendChild(style);
|
||
}
|
||
|
||
function apply() {
|
||
hidePathEditZone();
|
||
// 对话框可能是懒挂载的:监听一次 DOM 变化,出现即注入(样式是幂等的)。
|
||
if (typeof MutationObserver !== "undefined" && typeof document !== "undefined") {
|
||
var observer = new MutationObserver(function () {
|
||
hidePathEditZone();
|
||
});
|
||
observer.observe(document.documentElement, { childList: true, subtree: true });
|
||
}
|
||
}
|
||
|
||
exports.apply = apply;
|
||
exports.inject = []; // 不需要任何 slot,纯副作用
|
||
return module.exports;
|
||
},
|
||
});
|