mirror of
https://github.com/tidys/cc-inspector-chrome
synced 2025-04-19 08:28:41 +00:00
实现灵活控制控制台颜色的输出
This commit is contained in:
parent
a0947d6e0b
commit
b29e39a612
@ -49,7 +49,7 @@ const manifest: CocosPluginManifest = {
|
|||||||
view_devtools: "src/views/devtools/index.ts",
|
view_devtools: "src/views/devtools/index.ts",
|
||||||
view_options: "src/views/options/index.ts",
|
view_options: "src/views/options/index.ts",
|
||||||
view_popup: "src/views/popup/index.ts",
|
view_popup: "src/views/popup/index.ts",
|
||||||
script_background: "src/scripts/background.ts",
|
script_background: "src/scripts/background/index.ts",
|
||||||
script_content: "src/scripts/content.ts",
|
script_content: "src/scripts/content.ts",
|
||||||
script_inject: "src/scripts/inject/index.ts",
|
script_inject: "src/scripts/inject/index.ts",
|
||||||
},
|
},
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import { Chunk } from "../scripts/terminal";
|
||||||
|
|
||||||
export enum Page {
|
export enum Page {
|
||||||
None = "None",
|
None = "None",
|
||||||
Inject = "Inject",
|
Inject = "Inject",
|
||||||
@ -106,7 +108,15 @@ export class PluginEvent {
|
|||||||
static finish(event: PluginEvent) {
|
static finish(event: PluginEvent) {
|
||||||
event.source = event.target = null;
|
event.source = event.target = null;
|
||||||
}
|
}
|
||||||
|
toChunk(): Chunk[] {
|
||||||
|
return [
|
||||||
|
new Chunk(this.msg).color("white").background("black").margin('0 0 0 5px').padding("0 6px"),
|
||||||
|
new Chunk(this.source).color('white').background("red").padding('0 4px').margin('0 0 0 0px'),
|
||||||
|
new Chunk('=>').color('black').background("yellow").bold(),
|
||||||
|
new Chunk(this.target, true).color("white").background("green").padding('0 4px'),
|
||||||
|
new Chunk(JSON.stringify(this.data))
|
||||||
|
];
|
||||||
|
}
|
||||||
constructor(source: Page, target: Page, msg: Msg, data?: any) {
|
constructor(source: Page, target: Page, msg: Msg, data?: any) {
|
||||||
if (PageInclude(target)) {
|
if (PageInclude(target)) {
|
||||||
this.source = source;
|
this.source = source;
|
||||||
|
@ -24,7 +24,7 @@ class CCInspector {
|
|||||||
}
|
}
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
private terminal = new Terminal('Inject ', 'blue', 'gray');
|
private terminal = new Terminal('Inject ');
|
||||||
init() {
|
init() {
|
||||||
console.log(...this.terminal.init());
|
console.log(...this.terminal.init());
|
||||||
this.watchIsCocosGame();
|
this.watchIsCocosGame();
|
||||||
|
@ -1,3 +1,59 @@
|
|||||||
|
export class Chunk {
|
||||||
|
/**
|
||||||
|
* 显示的值
|
||||||
|
*/
|
||||||
|
value: string = "";
|
||||||
|
/**
|
||||||
|
* 是否换行
|
||||||
|
*/
|
||||||
|
private newline: boolean = false;
|
||||||
|
/**
|
||||||
|
* 显示的样式
|
||||||
|
*/
|
||||||
|
style: string[] = [];
|
||||||
|
constructor(v: string, newline: boolean = false) {
|
||||||
|
this.value = v
|
||||||
|
this.newline = newline
|
||||||
|
}
|
||||||
|
color(c: string) {
|
||||||
|
this.style.push(`color:${c}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
background(c: string) {
|
||||||
|
this.style.push(`background:${c}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
padding(c: string) {
|
||||||
|
this.style.push(`padding:${c}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
fontwight(c: string) {
|
||||||
|
this.style.push(`font-weight:${c}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
bold() {
|
||||||
|
return this.fontwight("bold");
|
||||||
|
}
|
||||||
|
margin(c: string) {
|
||||||
|
this.style.push(`margin:${c}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
marginLeft(c: string) {
|
||||||
|
this.style.push(`margin-left:${c}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
marginRight(c: string) {
|
||||||
|
this.style.push(`margin-right:${c}`);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
toValue() {
|
||||||
|
return `%c${this.value}${this.newline ? '\n' : ''}`
|
||||||
|
}
|
||||||
|
toStyle() {
|
||||||
|
return this.style.join(';')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class Terminal {
|
export class Terminal {
|
||||||
/**
|
/**
|
||||||
* 标签
|
* 标签
|
||||||
@ -10,7 +66,7 @@ export class Terminal {
|
|||||||
/**
|
/**
|
||||||
* 标签的颜色
|
* 标签的颜色
|
||||||
*/
|
*/
|
||||||
tagColor = 'red';
|
tagColor = 'blue';
|
||||||
/**
|
/**
|
||||||
* 标签的背景色
|
* 标签的背景色
|
||||||
*/
|
*/
|
||||||
@ -19,24 +75,50 @@ export class Terminal {
|
|||||||
* 日志文本的颜色
|
* 日志文本的颜色
|
||||||
*/
|
*/
|
||||||
txtColor = 'black';
|
txtColor = 'black';
|
||||||
|
private chunks: Chunk[] = [];
|
||||||
constructor(tag: string, tagColor: string = 'red', tagBackground: string = 'yellow') {
|
constructor(tag: string) {
|
||||||
this.tagColor = tagColor;
|
|
||||||
this.tagBackground = tagBackground;
|
|
||||||
this.tag = tag;
|
this.tag = tag;
|
||||||
}
|
}
|
||||||
init(): string[] {
|
init(): string[] {
|
||||||
this.txtColor = 'black';
|
this.txtColor = 'black';
|
||||||
this.subTag = "init";
|
this.subTag = "init";
|
||||||
return this.log(``);
|
return this.log();
|
||||||
}
|
}
|
||||||
public log(message: string, newline: boolean = false): string[] {
|
|
||||||
return [
|
public log(message: string = "", newline: boolean = false): string[] {
|
||||||
`*%c${this.tag}%c${this.subTag}%c${newline ? '\n' : ''}${message}`,
|
const txt = new Chunk(message).color(this.txtColor).background('#e6e6e6').marginLeft("5px")
|
||||||
`color:${this.tagColor};background:${this.tagBackground};padding:0 4px`,
|
return this.doChunk(newline, [txt]);
|
||||||
`color:white;background:black;padding:0 3px`,
|
}
|
||||||
`color:${this.txtColor};background:#e6e6e6;margin-left:5px`
|
public chunk(chunk: Chunk[]) {
|
||||||
];
|
this.subTag = "message";
|
||||||
|
return this.doChunk(false, chunk)
|
||||||
|
}
|
||||||
|
private doChunk(newline: boolean = false, chunks: Chunk[]) {
|
||||||
|
this.chunks = [];
|
||||||
|
const tag = new Chunk(this.tag).color(this.tagColor).background(this.tagBackground).padding("0 4px")
|
||||||
|
this.chunks.push(tag);
|
||||||
|
|
||||||
|
const subTag = new Chunk(this.subTag, newline).color(this.tagBackground).background(this.tagColor).padding("0 3px")
|
||||||
|
this.chunks.push(subTag);
|
||||||
|
|
||||||
|
chunks.forEach((c) => {
|
||||||
|
this.chunks.push(c);
|
||||||
|
})
|
||||||
|
|
||||||
|
let head = '*';
|
||||||
|
for (let i = 0; i < this.chunks.length; i++) {
|
||||||
|
const chunk = this.chunks[i];
|
||||||
|
head += chunk.toValue();
|
||||||
|
}
|
||||||
|
const ret = [head];
|
||||||
|
this.chunks.forEach((chunk) => {
|
||||||
|
ret.push(chunk.toStyle());
|
||||||
|
})
|
||||||
|
this.reset();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
private reset() {
|
||||||
|
this.subTag = "";
|
||||||
}
|
}
|
||||||
public blue(message: string): string[] {
|
public blue(message: string): string[] {
|
||||||
this.txtColor = 'blue';
|
this.txtColor = 'blue';
|
||||||
|
@ -15,6 +15,10 @@ export class ConfigData {
|
|||||||
* 刷新间隔时间,单位ms
|
* 刷新间隔时间,单位ms
|
||||||
*/
|
*/
|
||||||
refreshTime: number = 500;
|
refreshTime: number = 500;
|
||||||
|
/**
|
||||||
|
* 展开测试的section
|
||||||
|
*/
|
||||||
|
expandTest: boolean = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const appStore = defineStore("app", () => {
|
export const appStore = defineStore("app", () => {
|
||||||
@ -26,6 +30,7 @@ export const appStore = defineStore("app", () => {
|
|||||||
const data = profile.load(`${pluginConfig.manifest.name}.json`) as ConfigData;
|
const data = profile.load(`${pluginConfig.manifest.name}.json`) as ConfigData;
|
||||||
config.value.refreshType = data.refreshType || RefreshType.Manual;
|
config.value.refreshType = data.refreshType || RefreshType.Manual;
|
||||||
config.value.refreshTime = data.refreshTime || 500;
|
config.value.refreshTime = data.refreshTime || 500;
|
||||||
|
config.value.expandTest = !!data.expandTest;
|
||||||
},
|
},
|
||||||
save() {
|
save() {
|
||||||
const cfg = toRaw(config.value);
|
const cfg = toRaw(config.value);
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="show" class="test">
|
<div v-if="show" class="test">
|
||||||
<CCSection name="功能测试" :expand="false">
|
<CCSection name="功能测试" :expand="config.expandTest" @change="onExpandTest">
|
||||||
<CCButton @click="onClickHasCocosGame">Has CocosGame</CCButton>
|
<CCButton @click="onClickHasCocosGame">Has CocosGame</CCButton>
|
||||||
<CCButton @click="onClickNoCocosGame">No CocosGame</CCButton>
|
<CCButton @click="onClickNoCocosGame">No CocosGame</CCButton>
|
||||||
<CCButton @click="onTestTree">init tree data</CCButton>
|
<CCButton @click="onTestTree">init tree data</CCButton>
|
||||||
<CCButton @click="onFrames">test frame</CCButton>
|
<CCButton @click="onFrames">test frame</CCButton>
|
||||||
<CCButton @click="onTestNodeInfo">test node info</CCButton>
|
<CCButton @click="onTestNodeInfo">test node info</CCButton>
|
||||||
<CCButton @click="onNull">test null</CCButton>
|
<CCButton @click="onNull">test null</CCButton>
|
||||||
|
<CCButton @click="onTerminal">onTerminal</CCButton>
|
||||||
</CCSection>
|
</CCSection>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -16,8 +17,11 @@ import { ITreeData } from "@xuyanfeng/cc-ui/types/cc-tree/const";
|
|||||||
import { defineComponent, ref } from "vue";
|
import { defineComponent, ref } from "vue";
|
||||||
import { Msg, Page, PluginEvent } from "../../../core/types";
|
import { Msg, Page, PluginEvent } from "../../../core/types";
|
||||||
import { bridge } from "../bridge";
|
import { bridge } from "../bridge";
|
||||||
|
import { appStore, RefreshType } from "../store";
|
||||||
|
import { storeToRefs } from "pinia";
|
||||||
import { FrameDetails, Group, Info, InvalidData, NodeInfoData, TreeData } from "../data";
|
import { FrameDetails, Group, Info, InvalidData, NodeInfoData, TreeData } from "../data";
|
||||||
import { testServer, TestServer } from "./server";
|
import { testServer, TestServer } from "./server";
|
||||||
|
import { Terminal } from "../../../scripts/terminal";
|
||||||
const { CCButton, CCSection } = ccui.components;
|
const { CCButton, CCSection } = ccui.components;
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "test",
|
name: "test",
|
||||||
@ -27,6 +31,7 @@ export default defineComponent({
|
|||||||
isCocosGame: { type: Boolean, default: false },
|
isCocosGame: { type: Boolean, default: false },
|
||||||
},
|
},
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
|
const { config } = storeToRefs(appStore());
|
||||||
const show = ref(__DEV__);
|
const show = ref(__DEV__);
|
||||||
// 测试发送的是纯数据
|
// 测试发送的是纯数据
|
||||||
const testData = {
|
const testData = {
|
||||||
@ -55,13 +60,32 @@ export default defineComponent({
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
return {
|
return {
|
||||||
|
config,
|
||||||
show,
|
show,
|
||||||
|
onExpandTest(v: boolean) {
|
||||||
|
console.log(v);
|
||||||
|
config.value.expandTest = v;
|
||||||
|
appStore().save();
|
||||||
|
},
|
||||||
onClickHasCocosGame() {
|
onClickHasCocosGame() {
|
||||||
emit("validGame", true);
|
emit("validGame", true);
|
||||||
},
|
},
|
||||||
onClickNoCocosGame() {
|
onClickNoCocosGame() {
|
||||||
emit("validGame", false);
|
emit("validGame", false);
|
||||||
},
|
},
|
||||||
|
onTerminal() {
|
||||||
|
const t = new Terminal("flag");
|
||||||
|
const event = new PluginEvent(Page.Background, Page.Background, Msg.NodeInfo, "");
|
||||||
|
console.log(...t.message("1"));
|
||||||
|
console.log(...t.log("newline", true));
|
||||||
|
console.log(...t.log("oneline", false));
|
||||||
|
console.log(...t.disconnect("disconnect"));
|
||||||
|
console.log(...t.connect("connect"));
|
||||||
|
console.log(...t.red("red"));
|
||||||
|
console.log(...t.green("green"));
|
||||||
|
console.log(...t.blue("blue"));
|
||||||
|
console.log(...t.chunk(event.toChunk()));
|
||||||
|
},
|
||||||
onTestTree() {
|
onTestTree() {
|
||||||
const data: TreeData = {
|
const data: TreeData = {
|
||||||
id: "1",
|
id: "1",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user