wip fix script
This commit is contained in:
parent
651dd39f06
commit
f9e5f9389d
|
|
@ -6,6 +6,5 @@
|
||||||
"**/CVS": true,
|
"**/CVS": true,
|
||||||
"**/.DS_Store": true,
|
"**/.DS_Store": true,
|
||||||
"**/Thumbs.db": true
|
"**/Thumbs.db": true
|
||||||
},
|
}
|
||||||
"hide-files.files": []
|
|
||||||
}
|
}
|
||||||
|
|
@ -12,6 +12,7 @@ import { EdPopCode } from "./panel/popup/code/code";
|
||||||
import { EdPopCompGroup } from "./panel/popup/comp/comp-group";
|
import { EdPopCompGroup } from "./panel/popup/comp/comp-group";
|
||||||
import { EdPopSite } from "./panel/popup/site/site";
|
import { EdPopSite } from "./panel/popup/site/site";
|
||||||
import { EdScriptInit } from "./panel/script/monaco/init";
|
import { EdScriptInit } from "./panel/script/monaco/init";
|
||||||
|
import { EdPopScript } from "./panel/popup/script/script";
|
||||||
|
|
||||||
export const EdBase = () => {
|
export const EdBase = () => {
|
||||||
const p = useGlobal(EDGlobal, "EDITOR");
|
const p = useGlobal(EDGlobal, "EDITOR");
|
||||||
|
|
@ -47,6 +48,7 @@ export const EdBase = () => {
|
||||||
</div>
|
</div>
|
||||||
<>
|
<>
|
||||||
<EdPopCode />
|
<EdPopCode />
|
||||||
|
<EdPopScript />
|
||||||
<EdPopSite />
|
<EdPopSite />
|
||||||
<EdPopCompGroup />
|
<EdPopCompGroup />
|
||||||
<EdScriptInit />
|
<EdScriptInit />
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,10 @@ export const EDGlobal = {
|
||||||
show_log: false,
|
show_log: false,
|
||||||
list: {} as Record<string, string>,
|
list: {} as Record<string, string>,
|
||||||
},
|
},
|
||||||
|
script: {
|
||||||
|
open: false,
|
||||||
|
mode: "js" as "js" | "css" | "html",
|
||||||
|
},
|
||||||
site: null as null | ((site_id: string) => void | Promise<void>),
|
site: null as null | ((site_id: string) => void | Promise<void>),
|
||||||
site_form: null as null | {
|
site_form: null as null | {
|
||||||
group_id: string;
|
group_id: string;
|
||||||
|
|
|
||||||
|
|
@ -67,8 +67,8 @@ const EdPaneResize = (arg: {
|
||||||
<div className={cx("relative")}>
|
<div className={cx("relative")}>
|
||||||
<div
|
<div
|
||||||
className={cx(
|
className={cx(
|
||||||
"w-[4px] absolute inset-0 z-50 -mx-[2px] cursor-ew-resize hover:bg-blue-800 transition-all duration-700",
|
"w-[4px] absolute inset-0 -mx-[2px] cursor-ew-resize hover:bg-blue-800 transition-all duration-700",
|
||||||
local.dragging && "bg-blue-800"
|
local.dragging && "z-40 bg-blue-800"
|
||||||
)}
|
)}
|
||||||
onDoubleClick={() => {
|
onDoubleClick={() => {
|
||||||
arg.onResize(local.default);
|
arg.onResize(local.default);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
import type { Editor as MonacoEditor, OnMount } from "@monaco-editor/react";
|
||||||
|
import { jscript } from "../../../../../utils/script/jscript";
|
||||||
|
|
||||||
|
export type MonacoEditor = Parameters<OnMount>[0];
|
||||||
|
export const ScriptMonaco = () => {
|
||||||
|
const Editor = jscript.editor;
|
||||||
|
if (!Editor) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Editor
|
||||||
|
options={{
|
||||||
|
minimap: { enabled: false },
|
||||||
|
wordWrap: "wordWrapColumn",
|
||||||
|
autoClosingBrackets: "always",
|
||||||
|
autoIndent: "full",
|
||||||
|
formatOnPaste: true,
|
||||||
|
formatOnType: true,
|
||||||
|
tabSize: 2,
|
||||||
|
useTabStops: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,94 @@
|
||||||
|
import { useGlobal } from "web-utils";
|
||||||
|
import { jscript } from "../../../../../utils/script/jscript";
|
||||||
|
import { Loading } from "../../../../../utils/ui/loading";
|
||||||
|
import { Modal } from "../../../../../utils/ui/modal";
|
||||||
|
import { EDGlobal } from "../../../logic/ed-global";
|
||||||
|
import { ScriptMonaco } from "./monaco";
|
||||||
|
import { ScriptWorkbench } from "./workbench";
|
||||||
|
|
||||||
|
export const EdPopScript = () => {
|
||||||
|
const p = useGlobal(EDGlobal, "EDITOR");
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Modal
|
||||||
|
open={p.ui.popup.script.open}
|
||||||
|
onOpenChange={(open) => {
|
||||||
|
if (!open) {
|
||||||
|
p.ui.popup.script.open = false;
|
||||||
|
p.render();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div className={cx("bg-white select-none flex fixed inset-[50px]")}>
|
||||||
|
<div
|
||||||
|
className={cx(
|
||||||
|
"flex flex-1 relative",
|
||||||
|
css`
|
||||||
|
.monaco-editor {
|
||||||
|
.mtk9 {
|
||||||
|
color: #022f62;
|
||||||
|
}
|
||||||
|
.mtk1 {
|
||||||
|
color: #022f62;
|
||||||
|
}
|
||||||
|
.mtk22 {
|
||||||
|
color: #015cc5;
|
||||||
|
}
|
||||||
|
.mtk8 {
|
||||||
|
color: #015cc5;
|
||||||
|
}
|
||||||
|
.mtk5 {
|
||||||
|
color: #55bb8a;
|
||||||
|
}
|
||||||
|
.monaco-editor.showUnused .squiggly-inline-unnecessary {
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
|
.jsx-expression-braces {
|
||||||
|
color: #7c3813;
|
||||||
|
}
|
||||||
|
.jsx-tag-angle-bracket {
|
||||||
|
color: #619ac3;
|
||||||
|
}
|
||||||
|
.jsx-tag-name {
|
||||||
|
color: #619ac3;
|
||||||
|
}
|
||||||
|
.jsx-tag-order-1 {
|
||||||
|
color: #23863a;
|
||||||
|
}
|
||||||
|
.jsx-tag-order-2 {
|
||||||
|
color: #4e7ca1;
|
||||||
|
}
|
||||||
|
.jsx-tag-order-3 {
|
||||||
|
color: #020360;
|
||||||
|
}
|
||||||
|
.jsx-tag-attribute-key {
|
||||||
|
color: #6f42c1;
|
||||||
|
}
|
||||||
|
.jsx-text {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{(!jscript.editor || !jscript.build) && (
|
||||||
|
<>
|
||||||
|
{!jscript.editor && !jscript.build && (
|
||||||
|
<Loading note={"js-code"} backdrop={false} />
|
||||||
|
)}
|
||||||
|
{!jscript.editor && jscript.build && (
|
||||||
|
<Loading note={"js-editor"} backdrop={false} />
|
||||||
|
)}
|
||||||
|
{!jscript.build && jscript.editor && (
|
||||||
|
<Loading note={"js-build"} backdrop={false} />
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{jscript.editor && jscript.build && <ScriptWorkbench />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
import { useGlobal } from "web-utils";
|
||||||
|
import { ScriptMonaco } from "./monaco";
|
||||||
|
import { EDGlobal } from "../../../logic/ed-global";
|
||||||
|
|
||||||
|
export const ScriptWorkbench = () => {
|
||||||
|
const p = useGlobal(EDGlobal, "EDITOR");
|
||||||
|
return (
|
||||||
|
<div className="flex flex-1 items-stretch">
|
||||||
|
<div className="flex flex-1 flex-col ">
|
||||||
|
<div className="flex p-2 border-b space-x-2">
|
||||||
|
{[
|
||||||
|
{ type: "js", color: "#e9522c" },
|
||||||
|
{ type: "css", color: "#188228" },
|
||||||
|
{ type: "html", color: "#2c3e83" },
|
||||||
|
].map((e) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={cx(
|
||||||
|
css`
|
||||||
|
color: ${e.color};
|
||||||
|
border: 1px solid ${e.color};
|
||||||
|
`,
|
||||||
|
"uppercase text-white text-[12px] cursor-pointer transition-all hover:opacity-100 w-[40px] text-center",
|
||||||
|
p.ui.popup.script.mode === e.type
|
||||||
|
? css`
|
||||||
|
background: ${e.color};
|
||||||
|
color: white;
|
||||||
|
`
|
||||||
|
: "opacity-30"
|
||||||
|
)}
|
||||||
|
onClick={() => {
|
||||||
|
p.ui.popup.script.mode = e.type as any;
|
||||||
|
p.render();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{e.type}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
<div className="relative flex flex-1">
|
||||||
|
<ScriptMonaco />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import { NodeModel, RenderParams } from "@minoru/react-dnd-treeview";
|
import { NodeModel, RenderParams } from "@minoru/react-dnd-treeview";
|
||||||
import { EdMeta } from "../../../../logic/ed-global";
|
import { EDGlobal, EdMeta } from "../../../../logic/ed-global";
|
||||||
|
import { useGlobal } from "web-utils";
|
||||||
|
|
||||||
export const EdTreeAction = ({
|
export const EdTreeAction = ({
|
||||||
node,
|
node,
|
||||||
|
|
@ -8,5 +9,40 @@ export const EdTreeAction = ({
|
||||||
node: NodeModel<EdMeta>;
|
node: NodeModel<EdMeta>;
|
||||||
prm: RenderParams;
|
prm: RenderParams;
|
||||||
}) => {
|
}) => {
|
||||||
return <></>;
|
const p = useGlobal(EDGlobal, "EDITOR");
|
||||||
|
const item = node.data?.item;
|
||||||
|
if (!item) return null;
|
||||||
|
return (
|
||||||
|
<div className="flex items-center pr-2">
|
||||||
|
<div
|
||||||
|
className={cx(
|
||||||
|
"border rounded-sm text-[9px] flex w-[20px] h-[15px] items-center cursor-pointer justify-center uppercase",
|
||||||
|
item.adv?.js || item.adv?.css || item.adv?.html
|
||||||
|
? `opacity-100`
|
||||||
|
: cx(
|
||||||
|
`opacity-0 action-script transition-all`,
|
||||||
|
css`
|
||||||
|
&:hover {
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
),
|
||||||
|
!(item.adv?.js || item.adv?.css || item.adv?.html) &&
|
||||||
|
`bg-orange-100 border-orange-200 hover:border-orange-500 hover:text-orange-900 hover:bg-orange-300`,
|
||||||
|
item.adv?.js &&
|
||||||
|
`bg-orange-100 border-orange-200 hover:border-orange-500 hover:text-orange-900 hover:bg-orange-300`,
|
||||||
|
item.adv?.css &&
|
||||||
|
`bg-green-100 border-green-200 hover:border-green-500 hover:text-green-900 hover:bg-green-300`,
|
||||||
|
item.adv?.html &&
|
||||||
|
`bg-blue-100 border-blue-200 hover:border-blue-500 hover:text-blue-900 hover:bg-blue-300`
|
||||||
|
)}
|
||||||
|
onClick={() => {
|
||||||
|
p.ui.popup.script.open = true;
|
||||||
|
p.render();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{"</>"}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,11 @@ export const nodeRender: NodeRender<EdMeta> = (node, prm) => {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&:hover {
|
||||||
|
.action-script {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
active.item_id === item.id
|
active.item_id === item.id
|
||||||
? ["bg-blue-100"]
|
? ["bg-blue-100"]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue