Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
5048011f
提交
5048011f
authored
11月 03, 2018
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
多项UI组件升级到最新版本
上级
25f5ac3e
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
218 行增加
和
143 行删除
+218
-143
XXL-JOB官方文档.md
doc/XXL-JOB官方文档.md
+2
-2
anyword-hint.js
...rces/static/plugins/codemirror/addon/hint/anyword-hint.js
+1
-1
show-hint.css
...ources/static/plugins/codemirror/addon/hint/show-hint.css
+0
-2
show-hint.js
...sources/static/plugins/codemirror/addon/hint/show-hint.js
+42
-55
codemirror.css
...in/resources/static/plugins/codemirror/lib/codemirror.css
+30
-22
codemirror.js
...ain/resources/static/plugins/codemirror/lib/codemirror.js
+0
-0
clike.js
...n/resources/static/plugins/codemirror/mode/clike/clike.js
+0
-0
javascript.js
...s/static/plugins/codemirror/mode/javascript/javascript.js
+0
-0
php.js
.../main/resources/static/plugins/codemirror/mode/php/php.js
+2
-2
powershell.js
...s/static/plugins/codemirror/mode/powershell/powershell.js
+1
-1
python.js
...resources/static/plugins/codemirror/mode/python/python.js
+104
-35
shell.js
...n/resources/static/plugins/codemirror/mode/shell/shell.js
+36
-23
echarts.common.min.js
...in/resources/static/plugins/echarts/echarts.common.min.js
+0
-0
没有找到文件。
doc/XXL-JOB官方文档.md
浏览文件 @
5048011f
...
...
@@ -1343,7 +1343,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
10、命令行任务:原生提供通用命令行任务Handler(Bean任务,"CommandJobHandler");业务方只需要提供命令行即可;
-
11、项目依赖升级 groovy 至较新稳定版本;pom清理;
-
12、子任务失败重试重试逻辑优化,子任务失败时将会按照其预设的失败重试次数主动进行重试
-
13、多项UI组件升级到最新版本,如:layer/pace/jquery.validate;
-
13、多项UI组件升级到最新版本,如:layer/pace/jquery.validate
/echarts/CodeMirror
;
-
14、
[
迭代中
]
docker镜像,并且推送docker镜像到中央仓库,更进一步实现产品开箱即用;
...
...
@@ -1366,7 +1366,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
16、Cron TimeZone 自定义;
-
17、忙碌转移优化,全部机器忙碌时不再直接失败;
-
18、流程任务等,透传动态参数;
-
19、任务支持切换执行器;
-
19、任务支持切换执行器
,quartz job group固定
;
-
20、任务自动注册;待考虑,因为任务自动注册将会导致任务难以管理控制;
-
21、批量触发支持,添加参数 "org.quartz.scheduler.batchTriggerAcquisitionMaxCount: 50";
-
22、失败重试间隔;
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js
浏览文件 @
5048011f
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// Distributed under an MIT license: http
s
://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"object"
&&
typeof
module
==
"object"
)
// CommonJS
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css
浏览文件 @
5048011f
...
...
@@ -25,8 +25,6 @@
margin
:
0
;
padding
:
0
4px
;
border-radius
:
2px
;
max-width
:
19em
;
overflow
:
hidden
;
white-space
:
pre
;
color
:
black
;
cursor
:
pointer
;
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js
浏览文件 @
5048011f
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// Distributed under an MIT license: http
s
://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"object"
&&
typeof
module
==
"object"
)
// CommonJS
...
...
@@ -98,7 +98,7 @@
var
pos
=
this
.
cm
.
getCursor
(),
line
=
this
.
cm
.
getLine
(
pos
.
line
);
if
(
pos
.
line
!=
this
.
startPos
.
line
||
line
.
length
-
pos
.
ch
!=
this
.
startLen
-
this
.
startPos
.
ch
||
pos
.
ch
<
this
.
startPos
.
ch
||
this
.
cm
.
somethingSelected
()
||
(
pos
.
ch
&&
this
.
options
.
closeCharacters
.
test
(
line
.
charAt
(
pos
.
ch
-
1
))))
{
(
!
pos
.
ch
||
this
.
options
.
closeCharacters
.
test
(
line
.
charAt
(
pos
.
ch
-
1
))))
{
this
.
close
();
}
else
{
var
self
=
this
;
...
...
@@ -108,15 +108,11 @@
},
update
:
function
(
first
)
{
if
(
this
.
tick
==
null
)
return
;
if
(
!
this
.
options
.
hint
.
async
)
{
this
.
finishUpdate
(
this
.
options
.
hint
(
this
.
cm
,
this
.
options
),
first
);
}
else
{
var
myTick
=
++
this
.
tick
,
self
=
this
;
this
.
options
.
hint
(
this
.
cm
,
function
(
data
)
{
if
(
self
.
tick
==
myTick
)
self
.
finishUpdate
(
data
,
first
);
},
this
.
options
);
}
if
(
this
.
tick
==
null
)
return
var
self
=
this
,
myTick
=
++
this
.
tick
fetchHints
(
this
.
options
.
hint
,
this
.
cm
,
this
.
options
,
function
(
data
)
{
if
(
self
.
tick
==
myTick
)
self
.
finishUpdate
(
data
,
first
)
})
},
finishUpdate
:
function
(
data
,
first
)
{
...
...
@@ -125,7 +121,6 @@
var
picked
=
(
this
.
widget
&&
this
.
widget
.
picked
)
||
(
first
&&
this
.
options
.
completeSingle
);
if
(
this
.
widget
)
this
.
widget
.
close
();
if
(
data
&&
this
.
data
&&
isNewCompletion
(
this
.
data
,
data
))
return
;
this
.
data
=
data
;
if
(
data
&&
data
.
list
.
length
)
{
...
...
@@ -139,11 +134,6 @@
}
};
function
isNewCompletion
(
old
,
nw
)
{
var
moved
=
CodeMirror
.
cmpPos
(
nw
.
from
,
old
.
from
)
return
moved
>
0
&&
old
.
to
.
ch
-
old
.
from
.
ch
!=
nw
.
to
.
ch
-
nw
.
from
.
ch
}
function
parseOptions
(
cm
,
pos
,
options
)
{
var
editor
=
cm
.
options
.
hintOptions
;
var
out
=
{};
...
...
@@ -210,7 +200,8 @@
var
widget
=
this
,
cm
=
completion
.
cm
;
var
hints
=
this
.
hints
=
document
.
createElement
(
"ul"
);
hints
.
className
=
"CodeMirror-hints"
;
var
theme
=
completion
.
cm
.
options
.
theme
;
hints
.
className
=
"CodeMirror-hints "
+
theme
;
this
.
selectedHint
=
data
.
selectedHint
||
0
;
var
completions
=
data
.
list
;
...
...
@@ -233,6 +224,9 @@
var
winH
=
window
.
innerHeight
||
Math
.
max
(
document
.
body
.
offsetHeight
,
document
.
documentElement
.
offsetHeight
);
(
completion
.
options
.
container
||
document
.
body
).
appendChild
(
hints
);
var
box
=
hints
.
getBoundingClientRect
(),
overlapY
=
box
.
bottom
-
winH
;
var
scrolls
=
hints
.
scrollHeight
>
hints
.
clientHeight
+
1
var
startScroll
=
cm
.
getScrollInfo
();
if
(
overlapY
>
0
)
{
var
height
=
box
.
bottom
-
box
.
top
,
curTop
=
pos
.
top
-
(
pos
.
bottom
-
box
.
top
);
if
(
curTop
-
height
>
0
)
{
// Fits above cursor
...
...
@@ -257,6 +251,8 @@
}
hints
.
style
.
left
=
(
left
=
pos
.
left
-
overlapX
)
+
"px"
;
}
if
(
scrolls
)
for
(
var
node
=
hints
.
firstChild
;
node
;
node
=
node
.
nextSibling
)
node
.
style
.
paddingRight
=
cm
.
display
.
nativeBarWidth
+
"px"
cm
.
addKeyMap
(
this
.
keyMap
=
buildKeyMap
(
completion
,
{
moveFocus
:
function
(
n
,
avoidWrap
)
{
widget
.
changeActive
(
widget
.
selectedHint
+
n
,
avoidWrap
);
},
...
...
@@ -274,7 +270,6 @@
cm
.
on
(
"focus"
,
this
.
onFocus
=
function
()
{
clearTimeout
(
closingOnBlur
);
});
}
var
startScroll
=
cm
.
getScrollInfo
();
cm
.
on
(
"scroll"
,
this
.
onScroll
=
function
()
{
var
curScroll
=
cm
.
getScrollInfo
(),
editor
=
cm
.
getWrapperElement
().
getBoundingClientRect
();
var
newTop
=
top
+
startScroll
.
top
-
curScroll
.
top
;
...
...
@@ -302,7 +297,7 @@
setTimeout
(
function
(){
cm
.
focus
();},
20
);
});
CodeMirror
.
signal
(
data
,
"select"
,
completions
[
0
],
hints
.
firstChild
);
CodeMirror
.
signal
(
data
,
"select"
,
completions
[
this
.
selectedHint
],
hints
.
childNodes
[
this
.
selectedHint
]
);
return
true
;
}
...
...
@@ -339,7 +334,7 @@
i
=
avoidWrap
?
0
:
this
.
data
.
list
.
length
-
1
;
if
(
this
.
selectedHint
==
i
)
return
;
var
node
=
this
.
hints
.
childNodes
[
this
.
selectedHint
];
node
.
className
=
node
.
className
.
replace
(
" "
+
ACTIVE_HINT_ELEMENT_CLASS
,
""
);
if
(
node
)
node
.
className
=
node
.
className
.
replace
(
" "
+
ACTIVE_HINT_ELEMENT_CLASS
,
""
);
node
=
this
.
hints
.
childNodes
[
this
.
selectedHint
=
i
];
node
.
className
+=
" "
+
ACTIVE_HINT_ELEMENT_CLASS
;
if
(
node
.
offsetTop
<
this
.
hints
.
scrollTop
)
...
...
@@ -362,40 +357,31 @@
return
result
}
function
fetchHints
(
hint
,
cm
,
options
,
callback
)
{
if
(
hint
.
async
)
{
hint
(
cm
,
callback
,
options
)
}
else
{
var
result
=
hint
(
cm
,
options
)
if
(
result
&&
result
.
then
)
result
.
then
(
callback
)
else
callback
(
result
)
}
}
function
resolveAutoHints
(
cm
,
pos
)
{
var
helpers
=
cm
.
getHelpers
(
pos
,
"hint"
),
words
if
(
helpers
.
length
)
{
var
async
=
false
,
resolved
for
(
var
i
=
0
;
i
<
helpers
.
length
;
i
++
)
if
(
helpers
[
i
].
async
)
async
=
true
if
(
async
)
{
resolved
=
function
(
cm
,
callback
,
options
)
{
var
app
=
applicableHelpers
(
cm
,
helpers
)
function
run
(
i
,
result
)
{
if
(
i
==
app
.
length
)
return
callback
(
null
)
var
helper
=
app
[
i
]
if
(
helper
.
async
)
{
helper
(
cm
,
function
(
result
)
{
if
(
result
)
callback
(
result
)
else
run
(
i
+
1
)
},
options
)
}
else
{
var
result
=
helper
(
cm
,
options
)
if
(
result
)
callback
(
result
)
else
run
(
i
+
1
)
}
}
run
(
0
)
}
resolved
.
async
=
true
}
else
{
resolved
=
function
(
cm
,
options
)
{
var
app
=
applicableHelpers
(
cm
,
helpers
)
for
(
var
i
=
0
;
i
<
app
.
length
;
i
++
)
{
var
cur
=
app
[
i
](
cm
,
options
)
if
(
cur
&&
cur
.
list
.
length
)
return
cur
}
var
resolved
=
function
(
cm
,
callback
,
options
)
{
var
app
=
applicableHelpers
(
cm
,
helpers
);
function
run
(
i
)
{
if
(
i
==
app
.
length
)
return
callback
(
null
)
fetchHints
(
app
[
i
],
cm
,
options
,
function
(
result
)
{
if
(
result
&&
result
.
list
.
length
>
0
)
callback
(
result
)
else
run
(
i
+
1
)
})
}
run
(
0
)
}
resolved
.
async
=
true
resolved
.
supportsSelection
=
true
return
resolved
}
else
if
(
words
=
cm
.
getHelper
(
cm
.
getCursor
(),
"hintWords"
))
{
...
...
@@ -412,12 +398,13 @@
});
CodeMirror
.
registerHelper
(
"hint"
,
"fromList"
,
function
(
cm
,
options
)
{
var
cur
=
cm
.
getCursor
(),
token
=
cm
.
getTokenAt
(
cur
)
;
var
t
o
=
CodeMirror
.
Pos
(
cur
.
line
,
token
.
end
);
if
(
token
.
st
ring
&&
/
\w
/
.
test
(
token
.
string
[
token
.
string
.
length
-
1
]
))
{
var
term
=
token
.
string
,
from
=
CodeMirror
.
Pos
(
cur
.
line
,
token
.
start
);
var
cur
=
cm
.
getCursor
(),
token
=
cm
.
getTokenAt
(
cur
)
var
t
erm
,
from
=
CodeMirror
.
Pos
(
cur
.
line
,
token
.
start
),
to
=
cur
if
(
token
.
st
art
<
cur
.
ch
&&
/
\w
/
.
test
(
token
.
string
.
charAt
(
cur
.
ch
-
token
.
start
-
1
)
))
{
term
=
token
.
string
.
substr
(
0
,
cur
.
ch
-
token
.
start
)
}
else
{
var
term
=
""
,
from
=
to
;
term
=
""
from
=
cur
}
var
found
=
[];
for
(
var
i
=
0
;
i
<
options
.
words
.
length
;
i
++
)
{
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css
浏览文件 @
5048011f
...
...
@@ -5,6 +5,7 @@
font-family
:
monospace
;
height
:
300px
;
color
:
black
;
direction
:
ltr
;
}
/* PADDING */
...
...
@@ -52,13 +53,18 @@
}
.cm-fat-cursor
.CodeMirror-cursor
{
width
:
auto
;
border
:
0
;
border
:
0
!important
;
background
:
#7e7
;
}
.cm-fat-cursor
div
.CodeMirror-cursors
{
z-index
:
1
;
}
.cm-fat-cursor-mark
{
background-color
:
rgba
(
20
,
255
,
20
,
0.5
);
-webkit-animation
:
blink
1.06s
steps
(
1
)
infinite
;
-moz-animation
:
blink
1.06s
steps
(
1
)
infinite
;
animation
:
blink
1.06s
steps
(
1
)
infinite
;
}
.cm-animate-fat-cursor
{
width
:
auto
;
border
:
0
;
...
...
@@ -88,8 +94,14 @@
.cm-tab
{
display
:
inline-block
;
text-decoration
:
inherit
;
}
.CodeMirror-rulers
{
position
:
absolute
;
left
:
0
;
right
:
0
;
top
:
-50px
;
bottom
:
-20px
;
overflow
:
hidden
;
}
.CodeMirror-ruler
{
border-left
:
1px
solid
#ccc
;
top
:
0
;
bottom
:
0
;
position
:
absolute
;
}
...
...
@@ -113,7 +125,7 @@
.cm-s-default
.cm-property
,
.cm-s-default
.cm-operator
{}
.cm-s-default
.cm-variable-2
{
color
:
#05a
;}
.cm-s-default
.cm-variable-3
{
color
:
#085
;}
.cm-s-default
.cm-variable-3
,
.cm-s-default
.cm-type
{
color
:
#085
;}
.cm-s-default
.cm-comment
{
color
:
#a50
;}
.cm-s-default
.cm-string
{
color
:
#a11
;}
.cm-s-default
.cm-string-2
{
color
:
#f50
;}
...
...
@@ -133,8 +145,8 @@
/* Default styles for common addons */
div
.CodeMirror
span
.CodeMirror-matchingbracket
{
color
:
#0
f
0
;}
div
.CodeMirror
span
.CodeMirror-nonmatchingbracket
{
color
:
#
f
22
;}
div
.CodeMirror
span
.CodeMirror-matchingbracket
{
color
:
#0
b
0
;}
div
.CodeMirror
span
.CodeMirror-nonmatchingbracket
{
color
:
#
a
22
;}
.CodeMirror-matchingtag
{
background
:
rgba
(
255
,
150
,
0
,
.3
);
}
.CodeMirror-activeline-background
{
background
:
#e8f2ff
;}
...
...
@@ -200,9 +212,6 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
display
:
inline-block
;
vertical-align
:
top
;
margin-bottom
:
-30px
;
/* Hack to make IE7 behave */
*
zoom
:
1
;
*
display
:
inline
;
}
.CodeMirror-gutter-wrapper
{
position
:
absolute
;
...
...
@@ -220,11 +229,8 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
cursor
:
default
;
z-index
:
4
;
}
.CodeMirror-gutter-wrapper
{
-webkit-user-select
:
none
;
-moz-user-select
:
none
;
user-select
:
none
;
}
.CodeMirror-gutter-wrapper
::selection
{
background-color
:
transparent
}
.CodeMirror-gutter-wrapper
::-moz-selection
{
background-color
:
transparent
}
.CodeMirror-lines
{
cursor
:
text
;
...
...
@@ -246,8 +252,8 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
position
:
relative
;
overflow
:
visible
;
-webkit-tap-highlight-color
:
transparent
;
-webkit-font-variant-ligatures
:
none
;
font-variant-ligatures
:
none
;
-webkit-font-variant-ligatures
:
contextual
;
font-variant-ligatures
:
contextual
;
}
.CodeMirror-wrap
pre
{
word-wrap
:
break-word
;
...
...
@@ -264,11 +270,13 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
.CodeMirror-linewidget
{
position
:
relative
;
z-index
:
2
;
overflow
:
auto
;
padding
:
0.1px
;
/* Force widget margins to stay inside of the container */
}
.CodeMirror-widget
{}
.CodeMirror-rtl
pre
{
direction
:
rtl
;
}
.CodeMirror-code
{
outline
:
none
;
}
...
...
@@ -291,7 +299,10 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
visibility
:
hidden
;
}
.CodeMirror-cursor
{
position
:
absolute
;
}
.CodeMirror-cursor
{
position
:
absolute
;
pointer-events
:
none
;
}
.CodeMirror-measure
pre
{
position
:
static
;
}
div
.CodeMirror-cursors
{
...
...
@@ -314,13 +325,10 @@ div.CodeMirror-dragcursors {
.CodeMirror-line
::-moz-selection
,
.CodeMirror-line
>
span
::-moz-selection
,
.CodeMirror-line
>
span
>
span
::-moz-selection
{
background
:
#d7d4f0
;
}
.cm-searching
{
background
:
#ffa
;
background
:
rgba
(
255
,
255
,
0
,
.4
);
background
-color
:
#ffa
;
background
-color
:
rgba
(
255
,
255
,
0
,
.4
);
}
/* IE7 hack to prevent it from returning funny offsetTops on the spans */
.CodeMirror
span
{
*
vertical-align
:
text-bottom
;
}
/* Used to force a border model for a node */
.cm-force-border
{
padding-right
:
.1px
;
}
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js
浏览文件 @
5048011f
差异被折叠。
点击展开。
xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js
浏览文件 @
5048011f
差异被折叠。
点击展开。
xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js
浏览文件 @
5048011f
差异被折叠。
点击展开。
xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js
浏览文件 @
5048011f
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// Distributed under an MIT license: http
s
://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"object"
&&
typeof
module
==
"object"
)
// CommonJS
...
...
@@ -151,7 +151,7 @@
};
CodeMirror
.
defineMode
(
"php"
,
function
(
config
,
parserConfig
)
{
var
htmlMode
=
CodeMirror
.
getMode
(
config
,
"text/html"
);
var
htmlMode
=
CodeMirror
.
getMode
(
config
,
(
parserConfig
&&
parserConfig
.
htmlMode
)
||
"text/html"
);
var
phpMode
=
CodeMirror
.
getMode
(
config
,
phpConfig
);
function
dispatch
(
stream
,
state
)
{
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js
浏览文件 @
5048011f
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// Distributed under an MIT license: http
s
://codemirror.net/LICENSE
(
function
(
mod
)
{
'use strict'
;
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js
浏览文件 @
5048011f
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// Distributed under an MIT license: http
s
://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"object"
&&
typeof
module
==
"object"
)
// CommonJS
...
...
@@ -41,10 +41,11 @@
CodeMirror
.
defineMode
(
"python"
,
function
(
conf
,
parserConf
)
{
var
ERRORCLASS
=
"error"
;
var
singleDelimiters
=
parserConf
.
singleDelimiters
||
/^
[\(\)\[\]\{\}
@,:`=;
\.]
/
;
var
doubleOperators
=
parserConf
.
doubleOperators
||
/^
([
!<>
]
==|<>|<<|>>|
\/\/
|
\*\*)
/
;
var
doubleDelimiters
=
parserConf
.
doubleDelimiters
||
/^
(\+
=|
\-
=|
\*
=|%=|
\/
=|&=|
\|
=|
\^
=
)
/
;
var
tripleDelimiters
=
parserConf
.
tripleDelimiters
||
/^
(\/\/
=|>>=|<<=|
\*\*
=
)
/
;
var
delimiters
=
parserConf
.
delimiters
||
parserConf
.
singleDelimiters
||
/^
[\(\)\[\]\{\}
@,:`=;
\.\\]
/
;
// (Backwards-compatiblity with old, cumbersome config system)
var
operators
=
[
parserConf
.
singleOperators
,
parserConf
.
doubleOperators
,
parserConf
.
doubleDelimiters
,
parserConf
.
tripleDelimiters
,
parserConf
.
operators
||
/^
([
-+*
/
%
\/
&|^
]
=
?
|
[
<>=
]
+|
\/\/
=
?
|
\*\*
=
?
|!=|
[
~!@
])
/
]
for
(
var
i
=
0
;
i
<
operators
.
length
;
i
++
)
if
(
!
operators
[
i
])
operators
.
splice
(
i
--
,
1
)
var
hangingIndent
=
parserConf
.
hangingIndent
||
conf
.
indentUnit
;
...
...
@@ -58,13 +59,11 @@
var
py3
=
!
(
parserConf
.
version
&&
Number
(
parserConf
.
version
)
<
3
)
if
(
py3
)
{
// since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator
var
singleOperators
=
parserConf
.
singleOperators
||
/^
[\+\-\*\/
%&|
\^
~<>!@
]
/
;
var
identifiers
=
parserConf
.
identifiers
||
/^
[
_A-Za-z
\u
00A1-
\u
FFFF
][
_A-Za-z0-9
\u
00A1-
\u
FFFF
]
*/
;
myKeywords
=
myKeywords
.
concat
([
"nonlocal"
,
"False"
,
"True"
,
"None"
,
"async"
,
"await"
]);
myBuiltins
=
myBuiltins
.
concat
([
"ascii"
,
"bytes"
,
"exec"
,
"print"
]);
var
stringPrefixes
=
new
RegExp
(
"^(([rbuf]|(br))?('{3}|
\"
{3}|['
\"
]))"
,
"i"
);
var
stringPrefixes
=
new
RegExp
(
"^(([rbuf]|(br)
|(fr)
)?('{3}|
\"
{3}|['
\"
]))"
,
"i"
);
}
else
{
var
singleOperators
=
parserConf
.
singleOperators
||
/^
[\+\-\*\/
%&|
\^
~<>!
]
/
;
var
identifiers
=
parserConf
.
identifiers
||
/^
[
_A-Za-z
][
_A-Za-z0-9
]
*/
;
myKeywords
=
myKeywords
.
concat
([
"exec"
,
"print"
]);
myBuiltins
=
myBuiltins
.
concat
([
"apply"
,
"basestring"
,
"buffer"
,
"cmp"
,
"coerce"
,
"execfile"
,
...
...
@@ -77,9 +76,10 @@
// tokenizers
function
tokenBase
(
stream
,
state
)
{
if
(
stream
.
sol
())
state
.
indent
=
stream
.
indentation
()
var
sol
=
stream
.
sol
()
&&
state
.
lastToken
!=
"
\
\"
if (sol) state.indent = stream.indentation()
// Handle scope changes
if
(
s
tream
.
sol
()
&&
top
(
state
).
type
==
"py"
)
{
if (s
ol
&& top(state).type == "
py
") {
var scopeOffset = top(state).offset;
if (stream.eatSpace()) {
var lineOffset = stream.indentation();
...
...
@@ -101,13 +101,8 @@
function tokenBaseInner(stream, state) {
if (stream.eatSpace()) return null;
var
ch
=
stream
.
peek
();
// Handle Comments
if
(
ch
==
"#"
)
{
stream
.
skipToEnd
();
return
"comment"
;
}
if (stream.match(/^#.*/)) return "
comment
";
// Handle Number Literals
if (stream.match(/^[0-9
\
.]/, false)) {
...
...
@@ -147,19 +142,20 @@
// Handle Strings
if (stream.match(stringPrefixes)) {
state
.
tokenize
=
tokenStringFactory
(
stream
.
current
());
return
state
.
tokenize
(
stream
,
state
);
var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;
if (!isFmtString) {
state.tokenize = tokenStringFactory(stream.current());
return state.tokenize(stream, state);
} else {
state.tokenize = formatStringFactory(stream.current(), state.tokenize);
return state.tokenize(stream, state);
}
}
// Handle operators and Delimiters
if
(
stream
.
match
(
tripleDelimiters
)
||
stream
.
match
(
doubleDelimiters
))
return
"punctuation"
;
if
(
stream
.
match
(
doubleOperators
)
||
stream
.
match
(
singleOperators
))
return
"operator"
;
for (var i = 0; i < operators.length; i++)
if (stream.match(operators[i])) return "
operator
"
if
(
stream
.
match
(
singleDelimiters
))
return
"punctuation"
;
if (stream.match(delimiters)) return "
punctuation
";
if (state.lastToken == "
.
" && stream.match(identifiers))
return "
property
";
...
...
@@ -184,6 +180,77 @@
return ERRORCLASS;
}
function formatStringFactory(delimiter, tokenOuter) {
while ("
rubf
".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)
delimiter = delimiter.substr(1);
var singleline = delimiter.length == 1;
var OUTCLASS = "
string
";
function tokenFString(stream, state) {
// inside f-str Expression
if (stream.match(delimiter)) {
// expression ends pre-maturally, but very common in editing
// Could show error to remind users to close brace here
state.tokenize = tokenString
return OUTCLASS;
} else if (stream.match('{')) {
// starting brace, if not eaten below
return "
punctuation
";
} else if (stream.match('}')) {
// return to regular inside string state
state.tokenize = tokenString
return "
punctuation
";
} else {
// use tokenBaseInner to parse the expression
return tokenBaseInner(stream, state);
}
}
function tokenString(stream, state) {
while (!stream.eol()) {
stream.eatWhile(/[^'"
\
{
\
}
\\
]
/
);
if
(
stream
.
eat
(
"
\
\"
)) {
stream.next();
if (singleline && stream.eol())
return OUTCLASS;
} else if (stream.match(delimiter)) {
state.tokenize = tokenOuter;
return OUTCLASS;
} else if (stream.match('{{')) {
// ignore {{ in f-str
return OUTCLASS;
} else if (stream.match('{', false)) {
// switch to nested mode
state.tokenize = tokenFString
if (stream.current()) {
return OUTCLASS;
} else {
// need to return something, so eat the starting {
stream.next();
return "
punctuation
";
}
} else if (stream.match('}}')) {
return OUTCLASS;
} else if (stream.match('}')) {
// single } in f-string is an error
return ERRORCLASS;
} else {
stream.eat(/['"
]
/
);
}
}
if
(
singleline
)
{
if
(
parserConf
.
singleLineStringErrors
)
return
ERRORCLASS
;
else
state
.
tokenize
=
tokenOuter
;
}
return
OUTCLASS
;
}
tokenString
.
isString
=
true
;
return
tokenString
;
}
function
tokenStringFactory
(
delimiter
)
{
while
(
"rubf"
.
indexOf
(
delimiter
.
charAt
(
0
).
toLowerCase
())
>=
0
)
delimiter
=
delimiter
.
substr
(
1
);
...
...
@@ -264,14 +331,16 @@
if
(
current
==
":"
&&
!
state
.
lambda
&&
top
(
state
).
type
==
"py"
)
pushPyScope
(
state
);
var
delimiter_index
=
current
.
length
==
1
?
"[({"
.
indexOf
(
current
)
:
-
1
;
if
(
delimiter_index
!=
-
1
)
pushBracketScope
(
stream
,
state
,
"])}"
.
slice
(
delimiter_index
,
delimiter_index
+
1
));
if
(
current
.
length
==
1
&&
!
/string|comment/
.
test
(
style
))
{
var
delimiter_index
=
"[({"
.
indexOf
(
current
);
if
(
delimiter_index
!=
-
1
)
pushBracketScope
(
stream
,
state
,
"])}"
.
slice
(
delimiter_index
,
delimiter_index
+
1
));
delimiter_index
=
"])}"
.
indexOf
(
current
);
if
(
delimiter_index
!=
-
1
)
{
if
(
top
(
state
).
type
==
current
)
state
.
indent
=
state
.
scopes
.
pop
().
offset
-
hangingIndent
else
return
ERRORCLASS
;
delimiter_index
=
"])}"
.
indexOf
(
current
);
if
(
delimiter_index
!=
-
1
)
{
if
(
top
(
state
).
type
==
current
)
state
.
indent
=
state
.
scopes
.
pop
().
offset
-
hangingIndent
else
return
ERRORCLASS
;
}
}
if
(
state
.
dedent
>
0
&&
stream
.
eol
()
&&
top
(
state
).
type
==
"py"
)
{
if
(
state
.
scopes
.
length
>
1
)
state
.
scopes
.
pop
();
...
...
@@ -332,8 +401,8 @@
CodeMirror
.
defineMIME
(
"text/x-cython"
,
{
name
:
"python"
,
extra_keywords
:
words
(
"by cdef cimport cpdef ctypedef enum except"
+
"extern gil include nogil property public"
+
extra_keywords
:
words
(
"by cdef cimport cpdef ctypedef enum except
"
+
"extern gil include nogil property public
"
+
"readonly struct union DEF IF ELIF ELSE"
)
});
...
...
xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js
浏览文件 @
5048011f
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
// Distributed under an MIT license: http
s
://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"object"
&&
typeof
module
==
"object"
)
// CommonJS
...
...
@@ -14,26 +14,27 @@
CodeMirror
.
defineMode
(
'shell'
,
function
()
{
var
words
=
{};
function
define
(
style
,
string
)
{
var
split
=
string
.
split
(
' '
);
for
(
var
i
=
0
;
i
<
split
.
length
;
i
++
)
{
words
[
split
[
i
]]
=
style
;
function
define
(
style
,
dict
)
{
for
(
var
i
=
0
;
i
<
dict
.
length
;
i
++
)
{
words
[
dict
[
i
]]
=
style
;
}
};
// Atoms
define
(
'atom'
,
'true false'
);
var
commonAtoms
=
[
"true"
,
"false"
];
var
commonKeywords
=
[
"if"
,
"then"
,
"do"
,
"else"
,
"elif"
,
"while"
,
"until"
,
"for"
,
"in"
,
"esac"
,
"fi"
,
"fin"
,
"fil"
,
"done"
,
"exit"
,
"set"
,
"unset"
,
"export"
,
"function"
];
var
commonCommands
=
[
"ab"
,
"awk"
,
"bash"
,
"beep"
,
"cat"
,
"cc"
,
"cd"
,
"chown"
,
"chmod"
,
"chroot"
,
"clear"
,
"cp"
,
"curl"
,
"cut"
,
"diff"
,
"echo"
,
"find"
,
"gawk"
,
"gcc"
,
"get"
,
"git"
,
"grep"
,
"hg"
,
"kill"
,
"killall"
,
"ln"
,
"ls"
,
"make"
,
"mkdir"
,
"openssl"
,
"mv"
,
"nc"
,
"nl"
,
"node"
,
"npm"
,
"ping"
,
"ps"
,
"restart"
,
"rm"
,
"rmdir"
,
"sed"
,
"service"
,
"sh"
,
"shopt"
,
"shred"
,
"source"
,
"sort"
,
"sleep"
,
"ssh"
,
"start"
,
"stop"
,
"su"
,
"sudo"
,
"svn"
,
"tee"
,
"telnet"
,
"top"
,
"touch"
,
"vi"
,
"vim"
,
"wall"
,
"wc"
,
"wget"
,
"who"
,
"write"
,
"yes"
,
"zsh"
];
// Keywords
define
(
'keyword'
,
'if then do else elif while until for in esac fi fin '
+
'fil done exit set unset export function'
);
CodeMirror
.
registerHelper
(
"hintWords"
,
"shell"
,
commonAtoms
.
concat
(
commonKeywords
,
commonCommands
));
// Commands
define
(
'builtin'
,
'ab awk bash beep cat cc cd chown chmod chroot clear cp '
+
'curl cut diff echo find gawk gcc get git grep kill killall ln ls make '
+
'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh '
+
'shopt shred source sort sleep ssh start stop su sudo tee telnet top '
+
'touch vi vim wall wc wget who write yes zsh'
);
define
(
'atom'
,
commonAtoms
);
define
(
'keyword'
,
commonKeywords
);
define
(
'builtin'
,
commonCommands
);
function
tokenBase
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
return
null
;
...
...
@@ -84,29 +85,38 @@ CodeMirror.defineMode('shell', function() {
function
tokenString
(
quote
,
style
)
{
var
close
=
quote
==
"("
?
")"
:
quote
==
"{"
?
"}"
:
quote
return
function
(
stream
,
state
)
{
var
next
,
e
nd
=
false
,
e
scaped
=
false
;
var
next
,
escaped
=
false
;
while
((
next
=
stream
.
next
())
!=
null
)
{
if
(
next
===
close
&&
!
escaped
)
{
end
=
true
;
state
.
tokens
.
shift
()
;
break
;
}
if
(
next
===
'$'
&&
!
escaped
&&
quote
!==
"'"
)
{
}
else
if
(
next
===
'$'
&&
!
escaped
&&
quote
!==
"'"
&&
stream
.
peek
()
!=
close
)
{
escaped
=
true
;
stream
.
backUp
(
1
);
state
.
tokens
.
unshift
(
tokenDollar
);
break
;
}
if
(
!
escaped
&&
next
===
quote
&&
quote
!==
close
)
{
}
else
if
(
!
escaped
&&
quote
!==
close
&&
next
===
quote
)
{
state
.
tokens
.
unshift
(
tokenString
(
quote
,
style
))
return
tokenize
(
stream
,
state
)
}
else
if
(
!
escaped
&&
/
[
'"
]
/
.
test
(
next
)
&&
!
/
[
'"
]
/
.
test
(
quote
))
{
state
.
tokens
.
unshift
(
tokenStringStart
(
next
,
"string"
));
stream
.
backUp
(
1
);
break
;
}
escaped
=
!
escaped
&&
next
===
'
\
\'
;
}
if (end || !escaped) state.tokens.shift();
return style;
};
};
function tokenStringStart(quote, style) {
return function(stream, state) {
state.tokens[0] = tokenString(quote, style)
stream.next()
return tokenize(stream, state)
}
}
var tokenDollar = function(stream, state) {
if (state.tokens.length > 1) stream.eat('
$
');
var ch = stream.next()
...
...
@@ -135,5 +145,8 @@ CodeMirror.defineMode('shell', function() {
});
CodeMirror
.
defineMIME
(
'text/x-sh'
,
'shell'
);
// Apache uses a slightly different Media Type for Shell scripts
// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
CodeMirror
.
defineMIME
(
'application/x-sh'
,
'shell'
);
});
xxl-job-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js
浏览文件 @
5048011f
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论