Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
夜猫逐梦
1024程序员开源挑战赛
提交
43b80ef7
1
1024程序员开源挑战赛
项目概览
夜猫逐梦
/
1024程序员开源挑战赛
与 Fork 源项目一致
Fork自
GitCode / 1024程序员开源挑战赛(10.23-11.14)
通知
3
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
1
1024程序员开源挑战赛
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
43b80ef7
编写于
10月 26, 2021
作者:
B
baiy
提交者:
ninecents
10月 23, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
diff 重构
上级
7e6b93ba
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
206 addition
and
121 deletion
+206
-121
package-lock.json
package-lock.json
+1
-6
package.json
package.json
+0
-1
src/views/tool/components/diffEditor.vue
src/views/tool/components/diffEditor.vue
+119
-0
src/views/tool/diffs.vue
src/views/tool/diffs.vue
+86
-114
未找到文件。
package-lock.json
浏览文件 @
43b80ef7
{
"name"
:
"c-tool"
,
"version"
:
"1.
7.1
0"
,
"version"
:
"1.
8.
0"
,
"lockfileVersion"
:
1
,
"requires"
:
true
,
"dependencies"
:
{
...
...
@@ -4505,11 +4505,6 @@
"integrity"
:
"sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw=="
,
"dev"
:
true
},
"diff"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
,
"integrity"
:
"sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
},
"diffie-hellman"
:
{
"version"
:
"5.0.3"
,
"resolved"
:
"https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz"
,
...
...
package.json
浏览文件 @
43b80ef7
...
...
@@ -19,7 +19,6 @@
"
cron-parser
"
:
"
^2.16.3
"
,
"
cronstrue
"
:
"
^1.122.0
"
,
"
crypto-js
"
:
"
^3.3.0
"
,
"
diff
"
:
"
^4.0.2
"
,
"
file
"
:
"
^0.2.2
"
,
"
http-build-query
"
:
"
^0.7.0
"
,
"
ipinyinjs
"
:
"
^1.0.0
"
,
...
...
src/views/tool/components/diffEditor.vue
0 → 100644
浏览文件 @
43b80ef7
<
template
>
<div
ref=
"container"
class=
"diff-editor"
:style=
"`height:$
{containerHeight};width:${width}`">
</div>
</
template
>
<
script
>
import
*
as
monaco
from
'
monaco-editor/esm/vs/editor/editor.api
'
;
export
default
{
name
:
'
diffEditor
'
,
props
:
{
value
:
{
type
:
Object
},
language
:
{
type
:
String
,
default
:
""
},
autoHeight
:
{
type
:
Number
,
default
:
0
},
theme
:
{
type
:
String
,
default
:
'
vs
'
},
roundedSelection
:
{
type
:
Boolean
,
default
:
true
},
height
:
{
type
:
String
,
default
:
"
350px
"
},
width
:
{
type
:
String
,
default
:
"
100%
"
},
},
watch
:
{
value
(
newValue
)
{
if
(
this
.
editor
!==
null
&&
(
this
.
original
.
getValue
()
!==
newValue
[
'
original
'
]
||
this
.
modified
.
getValue
()
!==
newValue
[
'
modified
'
]
))
{
this
.
original
.
setValue
(
newValue
[
'
original
'
])
this
.
modified
.
setValue
(
newValue
[
'
modified
'
])
}
},
language
(
newValue
)
{
if
(
this
.
editor
!==
null
)
{
monaco
.
editor
.
setModelLanguage
(
this
.
editor
.
getOriginalEditor
().
getModel
(),
newValue
)
monaco
.
editor
.
setModelLanguage
(
this
.
editor
.
getModifiedEditor
().
getModel
(),
newValue
)
}
},
theme
(
newValue
)
{
if
(
this
.
editor
!==
null
)
{
monaco
.
editor
.
setTheme
(
newValue
)
}
}
},
created
()
{
if
(
this
.
autoHeight
>
0
)
{
this
.
containerHeight
=
(
window
.
innerHeight
-
this
.
autoHeight
)
+
"
px
"
}
else
{
this
.
containerHeight
=
this
.
height
}
},
mounted
()
{
this
.
initEditor
()
},
data
()
{
return
{
editor
:
null
,
original
:
null
,
modified
:
null
,
containerHeight
:
""
}
},
methods
:
{
initEditor
()
{
this
.
$refs
.
container
.
innerHTML
=
''
this
.
editor
=
monaco
.
editor
.
createDiffEditor
(
this
.
$refs
.
container
,
{
theme
:
this
.
theme
,
roundedSelection
:
this
.
roundedSelection
,
automaticLayout
:
true
,
renderSideBySide
:
true
})
this
.
original
=
monaco
.
editor
.
createModel
(
this
.
value
[
'
original
'
],
this
.
language
)
this
.
modified
=
monaco
.
editor
.
createModel
(
this
.
value
[
'
modified
'
],
this
.
language
)
this
.
editor
.
setModel
({
original
:
this
.
original
,
modified
:
this
.
modified
})
this
.
editor
.
getOriginalEditor
().
updateOptions
({
readOnly
:
false
})
this
.
original
.
onDidChangeContent
(()
=>
{
if
(
this
.
value
.
original
!==
this
.
original
.
getValue
())
{
this
.
value
.
original
=
this
.
original
.
getValue
()
this
.
$emit
(
'
input
'
,
this
.
value
)
}
})
this
.
modified
.
onDidChangeContent
(()
=>
{
if
(
this
.
value
.
modified
!==
this
.
modified
.
getValue
())
{
this
.
value
.
modified
=
this
.
modified
.
getValue
()
this
.
$emit
(
'
input
'
,
this
.
value
)
}
})
},
// 行内模式
inline
(
value
)
{
if
(
this
.
editor
)
{
value
=
!!
value
;
this
.
editor
.
updateOptions
({
renderSideBySide
:
!!
value
})
this
.
editor
.
getOriginalEditor
().
updateOptions
({
readOnly
:
!
value
})
this
.
editor
.
getModifiedEditor
().
updateOptions
({
readOnly
:
!
value
})
}
}
}
};
</
script
>
src/views/tool/diffs.vue
浏览文件 @
43b80ef7
<
template
>
<div>
<Tabs
v-model=
"current.operation"
>
<TabPane
label=
"对比内容"
name=
"input"
>
<Row
:gutter=
"16"
>
<Col
span=
"12"
>
<Input
v-model=
"current.source"
:rows=
"14"
type=
"textarea"
placeholder=
"内容"
></Input>
</Col>
<Col
span=
"12"
>
<Input
v-model=
"current.target"
:rows=
"14"
type=
"textarea"
placeholder=
"内容"
></Input>
</Col>
</Row>
</TabPane>
<TabPane
label=
"对比结果"
name=
"result"
>
<RadioGroup
v-model=
"current.type"
type=
"button"
>
<Radio
:label=
"k"
v-for=
"(v,k) in type"
:key=
"k"
>
<span>
{{
v
}}
</span>
</Radio>
</RadioGroup>
<div
class=
"diff-block"
>
<diff-block
:diff=
"diff"
></diff-block>
</div>
</TabPane>
</Tabs>
<div
style=
"border: 1px solid #dcdee2; border-radius: 4px"
>
<diffEditor
ref=
"editor"
v-model=
"current.diff"
:language=
"current.language"
:auto-height=
"220"
/>
</div>
<option-block>
<FormItem>
<ButtonGroup>
<Button
:type=
"current.language !== item.id ? 'primary' : 'warning'"
@
click=
"setLanguage(item.id)"
v-for=
"item in buttonLang"
:key=
"item.id"
>
{{
item
.
name
}}
</Button>
</ButtonGroup>
</FormItem>
<FormItem>
<Select
placeholder=
"更多语言"
@
on-change=
"(value)=>
{setLanguage(value)}">
<Option
v-for=
"item in allLang"
:value=
"item.id"
:key=
"item.id"
>
{{
item
.
name
}}
</Option>
</Select>
</FormItem>
<FormItem>
<Checkbox
@
on-change=
"(value)=>inline(value)"
>
行内对比
</Checkbox>
</FormItem>
</option-block>
</div>
</
template
>
<
script
>
const
jsDiff
=
require
(
'
diff
'
);
export
default
{
components
:
{
"
diff-block
"
:
{
render
:
function
(
createElement
)
{
let
e
=
[];
let
diff
=
this
.
diff
;
import
diffEditor
from
"
./components/diffEditor
"
;
import
*
as
monaco
from
'
monaco-editor/esm/vs/editor/editor.api
'
;
for
(
let
i
=
0
;
i
<
diff
.
length
;
i
++
)
{
if
(
diff
[
i
].
added
&&
diff
[
i
+
1
]
&&
diff
[
i
+
1
].
removed
)
{
let
swap
=
diff
[
i
];
diff
[
i
]
=
diff
[
i
+
1
];
diff
[
i
+
1
]
=
swap
;
}
if
(
diff
[
i
].
removed
){
e
.
push
(
createElement
(
'
del
'
,
diff
[
i
].
value
))
}
else
if
(
diff
[
i
].
added
){
e
.
push
(
createElement
(
'
ins
'
,
diff
[
i
].
value
))
}
else
{
e
.
push
(
diff
[
i
].
value
)
}
}
return
createElement
(
'
pre
'
,
e
)
},
props
:
{
diff
:
{
type
:
Array
,
default
:
[]
}
}
},
let
allLang
=
{}
for
(
let
lang
of
monaco
.
languages
.
getLanguages
())
{
allLang
[
lang
.
id
]
=
{
id
:
lang
.
id
,
name
:
lang
.
id
===
"
plaintext
"
?
"
纯文本
"
:
lang
.
aliases
[
0
]
}
}
const
COMMON_LANG
=
[
"
plaintext
"
,
"
javascript
"
,
"
html
"
,
"
css
"
,
"
json
"
,
"
python
"
,
"
java
"
,
"
php
"
]
export
default
{
components
:
{
diffEditor
,
},
computed
:
{
allLang
()
{
return
Object
.
values
(
allLang
)
},
computed
:
{
diff
()
{
let
beginTime
=
new
Date
();
console
.
log
(
"
开始对比
"
+
this
.
current
.
type
);
let
diff
=
jsDiff
[
this
.
current
.
type
](
this
.
current
.
source
,
this
.
current
.
target
);
this
.
$saveToolData
(
this
.
current
);
console
.
log
(
"
结束对比 用时:
"
+
((
new
Date
())
-
beginTime
)
+
"
ms
"
+
this
.
current
.
type
);
return
diff
;
buttonLang
()
{
let
data
=
COMMON_LANG
.
map
((
item
)
=>
{
return
allLang
[
item
]
});
if
(
this
.
current
.
language
&&
!
COMMON_LANG
.
includes
(
this
.
current
.
language
))
{
data
.
push
(
allLang
[
this
.
current
.
language
])
}
return
data
;
}
},
created
()
{
this
.
current
=
Object
.
assign
(
this
.
current
,
this
.
$getToolData
())
},
methods
:
{
setLanguage
(
lang
)
{
this
.
current
.
language
=
lang
;
},
created
()
{
this
.
current
=
Object
.
assign
(
this
.
current
,
this
.
$getToolData
())
},
methods
:
{
// handle(type) {
// this.current.diff = JsDiff[type](this.current.source, this.current.target)
// this.current.operation = "result";
// this.$saveToolData(this.current);
// },
},
data
()
{
return
{
current
:
{
source
:
""
,
target
:
""
,
type
:
"
diffLines
"
,
operation
:
"
input
"
,
},
type
:
{
"
diffLines
"
:
"
行
"
,
"
diffWords
"
:
"
单词
"
,
"
diffCss
"
:
"
css
"
,
"
diffJson
"
:
"
json
"
,
"
diffArrays
"
:
"
js数组(性能不好)
"
,
"
diffChars
"
:
"
字符(性能不好)
"
,
inline
(
value
){
this
.
$refs
.
editor
.
inline
(
!
value
)
}
},
watch
:
{
current
:{
handler
(
newVal
){
if
(
newVal
.
diff
.
original
&&
newVal
.
diff
.
modified
){
this
.
$saveToolData
(
this
.
current
);
}
},
deep
:
true
}
},
data
()
{
return
{
current
:
{
diff
:
{
original
:
""
,
modified
:
""
},
language
:
""
}
}
}
}
</
script
>
<
style
>
.diff-block
del
{
text-decoration
:
none
;
color
:
#b30000
;
background
:
#fadad7
;
}
.diff-block
ins
{
background
:
#eaf2c2
;
color
:
#406619
;
text-decoration
:
none
;
}
.diff-block
pre
{
background
:
#f5f2f0
;
padding
:
1em
;
margin
:
.5em
0
;
overflow
:
auto
;
}
</
style
>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录