改造成ts

This commit is contained in:
xuyanfeng
2021-04-01 17:47:56 +08:00
parent fafe320805
commit 38c74e44d6
15 changed files with 6470 additions and 5692 deletions

View File

@@ -1,7 +1,7 @@
const PluginMsg = require("./plugin-msg");
module.exports = {
id: "event-mgr",
testInit(name) {
chrome.runtime.connect({name: name})
}
}
// const PluginMsg = require("./plugin-msg");
// module.exports = {
// id: "event-mgr",
// testInit(name) {
// chrome.runtime.connect({name: name})
// }
// }

View File

@@ -7,7 +7,6 @@ import ui_prop from './ui/ui-prop.vue'
import NodeBaseProperty from './ccType/NodeBaseProperty.vue'
import SceneProperty from './ccType/SceneProperty.vue'
import ComponentsProperty from './ccType/ComponentsProperty'
import ColorPicker from './ui/colorPicker'
Vue.component('ui-prop', ui_prop);

View File

@@ -1,229 +0,0 @@
<template lang="html">
<div class="m-colorPicker" ref="colorPicker" v-on:click="event => { event.stopPropagation() }">
<!-- 颜色显示小方块 -->
<div class="colorBtn"
v-bind:style="`background-color: ${showColor}`"
v-on:click="openStatus = !disabled"
v-bind:class="{ disabled: disabled }"
></div>
<!-- 用以激活HTML5颜色面板 -->
<input type="color"
ref="html5Color"
v-model="html5Color"
v-on:change="updataValue(html5Color)">
<!-- 颜色色盘 -->
<div class="box" v-bind:class="{ open: openStatus }">
<div class="hd">
<div class="colorView" v-bind:style="`background-color: ${showPanelColor}`"></div>
<div class="defaultColor"
v-on:click="handleDefaultColor"
v-on:mouseover="hoveColor = defaultColor"
v-on:mouseout="hoveColor = null"
>默认颜色</div>
</div>
<div class="bd">
<h3>主题颜色</h3>
<ul class="tColor">
<li
v-for="color of tColor"
v-bind:style="{ backgroundColor: color }"
v-on:mouseover="hoveColor = color"
v-on:mouseout="hoveColor = null"
v-on:click="updataValue(color)"
></li>
</ul>
<ul class="bColor">
<li v-for="item of colorPanel">
<ul>
<li
v-for="color of item"
v-bind:style="{ backgroundColor: color }"
v-on:mouseover="hoveColor = color"
v-on:mouseout="hoveColor = null"
v-on:click="updataValue(color)"
></li>
</ul>
</li>
</ul>
<h3>标准颜色</h3>
<ul class="tColor">
<li
v-for="color of bColor"
v-bind:style="{ backgroundColor: color }"
v-on:mouseover="hoveColor = color"
v-on:mouseout="hoveColor = null"
v-on:click="updataValue(color)"
></li>
</ul>
<h3 v-on:click="triggerHtml5Color">更多颜色...</h3>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'colorPicker',
props: {
// 当前颜色值
value: {
type: String,
required: true
},
// 默认颜色
defaultColor: {
type: String,
default: '#000'
},
// 禁用状态
disabled: {
type: Boolean,
default: false
}
},
data () {
return {
// 面板打开状态
openStatus: false,
// 鼠标经过的颜色块
hoveColor: null,
// 主题颜色
tColor: ['#000', '#fff', '#eeece1', '#1e497b', '#4e81bb', '#e2534d', '#9aba60', '#8165a0', '#47acc5', '#f9974c'],
// 颜色面板
colorConfig: [
['#7f7f7f', '#f2f2f2'],
['#0d0d0d', '#808080'],
['#1c1a10', '#ddd8c3'],
['#0e243d', '#c6d9f0'],
['#233f5e', '#dae5f0'],
['#632623', '#f2dbdb'],
['#4d602c', '#eaf1de'],
['#3f3150', '#e6e0ec'],
['#1e5867', '#d9eef3'],
['#99490f', '#fee9da']
],
// 标准颜色
bColor: ['#c21401', '#ff1e02', '#ffc12a', '#ffff3a', '#90cf5b', '#00af57', '#00afee', '#0071be', '#00215f', '#72349d'],
html5Color: this.value
}
},
computed: {
// 显示面板颜色
showPanelColor () {
if (this.hoveColor) {
return this.hoveColor
} else {
return this.showColor
}
},
// 显示颜色
showColor () {
if (this.value) {
return this.value
} else {
return this.defaultColor
}
},
// 颜色面板
colorPanel () {
let colorArr = []
for (let color of this.colorConfig) {
colorArr.push(this.gradient(color[1], color[0], 5))
}
return colorArr
}
},
methods: {
triggerHtml5Color () {
this.$refs.html5Color.click()
},
// 更新组件的值 value
updataValue (value) {
this.$emit('input', value)
this.$emit('change', value)
this.openStatus = false
},
// 设置默认颜色
handleDefaultColor () {
this.updataValue(this.defaultColor)
},
// 格式化 hex 颜色值
parseColor (hexStr) {
if (hexStr.length === 4) {
hexStr = '#' + hexStr[1] + hexStr[1] + hexStr[2] + hexStr[2] + hexStr[3] + hexStr[3]
} else {
return hexStr
}
},
// RGB 颜色 转 HEX 颜色
rgbToHex (r, g, b) {
let hex = ((r << 16) | (g << 8) | b).toString(16)
return '#' + new Array(Math.abs(hex.length - 7)).join('0') + hex
},
// HEX 转 RGB 颜色
hexToRgb (hex) {
hex = this.parseColor(hex)
let rgb = []
for (let i = 1; i < 7; i += 2) {
rgb.push(parseInt('0x' + hex.slice(i, i + 2)))
}
return rgb
},
// 计算渐变过渡颜色
gradient (startColor, endColor, step) {
// 讲 hex 转换为 rgb
let sColor = this.hexToRgb(startColor)
let eColor = this.hexToRgb(endColor)
// 计算R\G\B每一步的差值
let rStep = (eColor[0] - sColor[0]) / step
let gStep = (eColor[1] - sColor[1]) / step
let bStep = (eColor[2] - sColor[2]) / step
let gradientColorArr = []
// 计算每一步的hex值
for (let i = 0; i < step; i++) {
gradientColorArr.push(this.rgbToHex(parseInt(rStep * i + sColor[0]), parseInt(gStep * i + sColor[1]), parseInt(bStep * i + sColor[2])))
}
return gradientColorArr
}
},
mounted () {
// 点击页面上其他地方,关闭弹窗
document.onclick = (e) => {
this.openStatus = false
}
}
}
</script>
<style lang="scss" scoped>
.m-colorPicker{
position: relative; text-align: left; font-size: 14px; display: inline-block;
ul,li,ol{ list-style: none; margin: 0; padding: 0; }
input{ display: none; }
.colorBtn{ width: 15px; height: 15px; }
.colorBtn.disabled{ cursor: no-drop; }
.box{
position: absolute; width: 190px; background: #fff; border: 1px solid #ddd; visibility: hidden; border-radius: 2px; margin-top: 2px; padding: 10px; padding-bottom: 5px; box-shadow: 0 0 5px rgba(0,0,0,.15); opacity: 0; transition: all .3s ease;
h3{ margin: 0; font-size: 14px; font-weight: normal; margin-top: 10px; margin-bottom: 5px; line-height: 1; }
}
.box.open{ visibility: visible; opacity: 1; }
.hd{
overflow: hidden; line-height: 29px;
.colorView{ width: 100px; height: 30px; float: left; transition: background-color .3s ease; }
.defaultColor{ width: 80px; float: right; text-align: center; border: 1px solid #ddd; cursor: pointer; }
}
.tColor{
li{ width: 15px; height: 15px; display: inline-block; margin: 0 2px; transition: all .3s ease; }
li:hover{ box-shadow: 0 0 5px rgba(0,0,0,.4); transform: scale(1.3); }
}
.bColor{
li{
width: 15px; display: inline-block; margin: 0 2px;
li{ display: block; width: 15px; height: 15px; transition: all .3s ease; margin: 0; }
li:hover{ box-shadow: 0 0 5px rgba(0,0,0,.4); transform: scale(1.3); }
}
}
}
</style>

View File

@@ -6,7 +6,7 @@
class="noselect">
<span onselectstart="return false;" class="noselect font"
style="line-height: 30px;color: #bdbdbd;font-size: 12px;margin: 3px;">
{{name}}
{{ name }}
</span>
</div>
<div style=" float:left;background-color: #4a4a4a;width: 80%;height:100%;text-align: left;">
@@ -18,62 +18,59 @@
</template>
<script>
export default {
name: "app",
data() {
return {
clientX: 0,
};
export default {
name: 'app',
data () {
return {
clientX: 0,
};
},
methods: {
changePositionMouseAction (event) {
document.addEventListener('mousemove', this._onMouseMove);
document.addEventListener('mouseup', this._onMouseUp);
document.addEventListener('onselectstart', this._onSelect);
},
methods: {
changePositionMouseAction(event) {
document.addEventListener("mousemove", this._onMouseMove);
document.addEventListener("mouseup", this._onMouseUp);
document.addEventListener("onselectstart", this._onSelect);
},
_onSelect() {
return false;
},
_onMouseMove(event) {
let x = event.clientX;
let calcStep = parseFloat(this.step) || 1;// 默认值为1
// console.log("curentX: " + x);
// console.log("clientX: " + this.clientX);
if (x > this.clientX) {
calcStep = Math.abs(calcStep);
} else {
calcStep = -Math.abs(calcStep);
}
// console.log(calcStep);
this.$emit("movestep", calcStep);
this.clientX = x;
},
_onMouseUp(event) {
document.removeEventListener('mousemove', this._onMouseMove);
document.removeEventListener("mouseup", this._onMouseUp);
document.removeEventListener("onselectstart", this._onSelect);
},
_onSelect () {
return false;
},
props: [
'name',
'step',
]
}
_onMouseMove (event) {
let x = event.clientX;
let calcStep = parseFloat(this.step) || 1;// 默认值为1
if (x > this.clientX) {
calcStep = Math.abs(calcStep);
} else {
calcStep = -Math.abs(calcStep);
}
this.$emit('movestep', calcStep);
this.clientX = x;
},
_onMouseUp (event) {
document.removeEventListener('mousemove', this._onMouseMove);
document.removeEventListener('mouseup', this._onMouseUp);
document.removeEventListener('onselectstart', this._onSelect);
},
},
props: [
'name',
'step',
]
};
</script>
<style scoped>
.font {
font-family: BlinkMacSystemFont, 'Helvetica Neue', Helvetica, 'Lucida Grande', 'Segoe UI', Ubuntu, Cantarell, 'SourceHanSansCN-Normal', Arial, sans-serif
}
.font {
font-family: BlinkMacSystemFont, 'Helvetica Neue', Helvetica, 'Lucida Grande', 'Segoe UI', Ubuntu, Cantarell, 'SourceHanSansCN-Normal', Arial, sans-serif
}
.noselect {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Chrome/Safari/Opera */
-khtml-user-select: none; /* Konqueror */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none;
/* Non-prefixed version, currently
not supported by any browser */
}
.noselect {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Chrome/Safari/Opera */
-khtml-user-select: none; /* Konqueror */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none;
/* Non-prefixed version, currently
not supported by any browser */
}
</style>

View File

@@ -0,0 +1,16 @@
.layout {
display: flex;
.vertical {
flex-direction: column;
}
.horizontal {
flex-direction: row;
}
}
.flex1 {
flex: 1;
}

View File

@@ -1,10 +1,10 @@
import Vue from 'vue';
import index from './index.vue';
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI);
import index from './index.vue';
new Vue({
el: '#app',
render: h => h(index)

View File

@@ -1,7 +1,7 @@
<template>
<div style="width: auto;">
<div id="popup">
<div style="display: flex;flex-direction: row;align-items: center;">
<h3>{{title}}</h3>
<h3 v-show="false"> title </h3>
<div style="flex: 1"></div>
<el-button size="mini" @click="onClickOptions">设置</el-button>
<el-button size="mini" @click="onMsgToBg">To-Bg</el-button>
@@ -21,79 +21,97 @@
<span style="font-size: 14px;float: left;text-align: center;line-height: 30px;color: #6d6d6d;">联系方式:</span>
<div style="height: 100%;float: right;margin-right: 10px;">
<a href="https://github.com/tidys/CocosCreatorPlugins/tree/master/CocosCreatorInspector" target="_blank">
<img src="./res/github.png" style="height: 100%;">
<img v-show="false" src="./res/github.png" style="height: 100%;">
</a>
</div>
<div style="height: 100%;float: right;margin-right: 10px;">
<a href="https://jq.qq.com/?_wv=1027&k=5SdPdy2" target="_blank">
<img src="./res/qq.png" style="height: 100%;">
<img v-show="false" src="./res/qq.png" style="height: 100%;">
</a>
</div>
<div style="height: 100%;float: right;margin-right: 10px;">
<a href="http://forum.cocos.com/t/chrome-creator/55669" target="_blank">
<img src="./res/tiezi.png" style="height: 100%;">
<img v-show="false" src="./res/tiezi.png" style="height: 100%;">
</a>
</div>
</div>
</div>
</template>
<script>
import Vue from 'vue'
import 'vue-awesome/icons/flag'
import 'vue-awesome/icons'
import Icon from 'vue-awesome/components/Icon'
<script lang="ts">
import Vue from 'vue'
import 'vue-awesome/icons/flag'
import 'vue-awesome/icons'
import Icon from 'vue-awesome/components/Icon'
import {Component} from 'vue-property-decorator'
import chrome from 'chrome'
import {Button} from 'element-ui'
Vue.component('icon', Icon);
export default {
data() {
return {
title: "cc-inspector",
isShowMoneyPng: true,
}
},
created() {
this._initLongConn();
},
methods: {
onBtnClickGitHub() {
console.log("onBtnClickGitHub");
},
onClickOptions() {
chrome.tabs.create({url: 'pages/options.html'})
},
_initLongConn() {
if (!this.longConn) {
console.log("[popup] 初始化长连接");
this.longConn = chrome.runtime.connect({name: "popup"});
this.longConn.onMessage.addListener(function (data, sender) {
this._onLongConnMsg(data, sender);
}.bind(this))
}
},
_onLongConnMsg(data, sender) {
console.log(this.title);
},
onMsgToBg() {
// 因为webpack的原因,这种方式可能拿不到里面的function, var
// chrome.extension.getBackgroundPage();
// 发送消息到background.js
chrome.runtime.sendMessage('content msg', function (data) {
console.log(data);
});
},
onSendMsg() {
if (this.longConn) {
this.longConn.postMessage({send: "hello"});
}
},
},
@Component({
components: {
Icon,
Button,
}
})
export default class Index extends Vue {
longConn: chrome.runtime.Port = false
// data() {
// return {
// title: "cc-inspector",
// isShowMoneyPng: true,
// }
// }
//
// created() {
// this._initLongConn();
// }
//
// onBtnClickGitHub() {
// console.log("onBtnClickGitHub");
// }
//
// onClickOptions() {
// chrome.tabs.create({url: 'pages/options.html'})
// }
//
// _initLongConn() {
// if (!this.longConn) {
// console.log("[popup] 初始化长连接");
// this.longConn = chrome.runtime.connect({name: "popup"});
// this.longConn.onMessage.addListener(function (data, sender) {
// this._onLongConnMsg(data, sender);
// }.bind(this))
// }
// }
//
// _onLongConnMsg(data, sender) {
// // console.log(this.title);
// }
//
// onMsgToBg() {
// // 因为webpack的原因,这种方式可能拿不到里面的function, var
// // chrome.extension.getBackgroundPage();
//
// // 发送消息到background.js
// chrome.runtime.sendMessage('content msg', function (data) {
// console.log(data);
// });
// }
//
// onSendMsg() {
// if (this.longConn) {
// this.longConn.postMessage({send: "hello"});
// //@import "../index.less";
// //#popup{
// // width: auto;
// //}
// }
// }
}
</script>
<style scoped>
<style scoped lang="less">
</style>

View File

@@ -0,0 +1,13 @@
import Vue, { VNode } from 'vue';
declare global {
namespace JSX {
// tslint:disable no-empty-interface
interface Element extends VNode {}
// tslint:disable no-empty-interface
interface ElementClass extends Vue {}
interface IntrinsicElements {
[elem: string]: any;
}
}
}

View File

@@ -0,0 +1,4 @@
declare module '*.vue' {
import Vue from 'vue';
export default Vue;
}

View File

@@ -0,0 +1,8 @@
import Vue from 'vue';
import index from './index.vue';
new Vue({
el: '#app',
render: h => h(index)
});

View File

@@ -0,0 +1,15 @@
<template>
<div>
111
</div>
</template>
<script lang="ts">
import Vue from 'vue'
export default class index extends Vue {
name: string = 'test-index'
}
</script>
<style>
</style>

View File

@@ -1,18 +1,18 @@
let path = require('path');
const Path = require('path');
let webpack = require('webpack');
let HtmlWebpackPlugin = require('html-webpack-plugin');
let CleanWebpackPlugin = require('clean-webpack-plugin');
let CopyWebpackPlugin = require('copy-webpack-plugin');
let ChromeManifest = require("./core/chrome-manifest");
const VueLoaderPlugin = require('vue-loader/lib/plugin');
let ChromeManifest = require('./core/chrome-manifest');
if (process.env.NODE_ENV === 'production') {
}
let resolve = function (dir) {
return path.join(__dirname, dir);
}
return Path.join(__dirname, dir);
};
let htmlPage = function (title, filename, chunks, template) {
return new HtmlWebpackPlugin({
@@ -21,20 +21,22 @@ let htmlPage = function (title, filename, chunks, template) {
cache: true,
inject: 'body',
filename: './pages/' + filename + '.html',
template: template || path.resolve(__dirname, 'core/page.ejs'),
template: template || Path.resolve(__dirname, 'core/page.ejs'),
appMountId: 'app',
chunks
});
}
};
module.exports = {
mode: 'development',
entry: {
popup: resolve("popup"),
devtools: resolve("devtools"),
devtools_panel:resolve("devtools/panel"),
background: resolve("background"),
test: resolve('test'),
popup: resolve('popup'),
devtools: resolve('devtools'),
devtools_panel: resolve('devtools/panel'),
background: resolve('background'),
options: resolve('options'),
content: resolve("content"),
content: resolve('content'),
inject: resolve('content/inject'),
// devInspector: path.resolve(__dirname, './src/dev/devInspector/main.js'),
@@ -46,11 +48,12 @@ module.exports = {
// injectScript: path.resolve(__dirname, './src/dev/injectScript.js'),
},
output: {
path: path.resolve(__dirname, 'build'),
path: Path.resolve(__dirname, 'build'),
publicPath: '/',
filename: 'js/[name].js'
},
plugins: [
new VueLoaderPlugin(),
// new webpack.HotModuleReplacementPlugin(),
// webpack 执行之前删除dist下的文件
new CleanWebpackPlugin(['./build/*'], {
@@ -59,14 +62,15 @@ module.exports = {
dry: false,//启用删除文件
}),
htmlPage("popup", 'popup', ['popup']),
htmlPage("devtools", 'devtools', ['devtools']),
htmlPage("devtools_panel", 'devtools_panel', ['devtools_panel']),
htmlPage("options", 'options', ['options']),
htmlPage('test', 'test', ['test']),
htmlPage('popup', 'popup', ['popup']),
htmlPage('devtools', 'devtools', ['devtools']),
htmlPage('devtools_panel', 'devtools_panel', ['devtools_panel']),
htmlPage('options', 'options', ['options']),
htmlPage('background', 'background', ['background']),
new ChromeManifest({
outFile: path.join(__dirname, "build/manifest.json"),
manifest: path.join(__dirname, "manifest.js")
outFile: Path.join(__dirname, 'build/manifest.json'),
manifest: Path.join(__dirname, 'manifest.js')
}),
//index.html
// new HtmlWebpackPlugin({
@@ -95,7 +99,7 @@ module.exports = {
// 拷贝静态资源(manifest.json)
new CopyWebpackPlugin([{
from: path.resolve(__dirname, 'icon'),
from: Path.resolve(__dirname, 'icon'),
to: 'icon',
force: true,
// ignore: ['.*']
@@ -118,12 +122,18 @@ module.exports = {
module: {
rules: [
{
test: /\.(less|css)$/,
test: /\.(css)$/,
use: [
'vue-style-loader',
'css-loader'
],
},
{
test: /\.less$/,
use: [
'less-loader'
],
},
{
test: /\.vue$/,
loader: 'vue-loader',
@@ -131,6 +141,7 @@ module.exports = {
loaders: {
scss: 'style-loader!css-loader!sass-loader',
sass: 'style-loader!css-loader!sass-loader?indentedSyntax',
less: 'less-loader'
}
// other vue-loader options go here
}
@@ -140,6 +151,11 @@ module.exports = {
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.ts$/,
loader: 'ts-loader',
exclude: /node_modules/
},
// {
// test: /\.(png|jpg|gif|svg|ttf|woff|woff2|eot)$/,
// loader: 'file-loader',
@@ -169,10 +185,10 @@ module.exports = {
alias: {
'vue$': 'vue/dist/vue.esm.js'
},
extensions: ['*', '.js', '.vue', '.json']
extensions: ['*', '.js', '.vue', '.json', '.ts', '.tsx']
},
devServer: {
contentBase: "./dist",//本地服务器所加载的页面所在的目录
contentBase: './dist',//本地服务器所加载的页面所在的目录
historyApiFallback: true,//不跳转
noInfo: true,
inline: true,//实时刷新