52 lines
2.4 KiB
JavaScript
52 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;
|
|||
|
|
},
|
|||
|
|
});
|