Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE3
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
5
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
1b01e6b7
authored
Jul 27, 2022
by
Karsa Zoltán István
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
prism init
parent
d1030b90
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
37 additions
and
3 deletions
+37
-3
circle/circle/settings/base.py
+2
-0
circle/dashboard/static/dashboard/js/prism.js
+7
-0
circle/dashboard/static/dashboard/vm-details.js
+12
-0
circle/dashboard/templates/dashboard/_ci-data-help.html
+3
-0
circle/vm/models/instance.py
+13
-3
No files found.
circle/circle/settings/base.py
View file @
1b01e6b7
...
...
@@ -198,6 +198,7 @@ PIPELINE = {
"network/network.less"
,
"autocomplete_light/vendor/select2/dist/css/select2.css"
,
"autocomplete_light/select2.css"
,
"dashboard/prism.css"
),
"output_filename"
:
"all.css"
,
}
...
...
@@ -239,6 +240,7 @@ PIPELINE = {
"output_filename"
:
"all.js"
,
},
"vm-detail"
:
{
"source_filenames"
:
(
"dashboard/js/prism.js"
,
"clipboard/dist/clipboard.min.js"
,
"dashboard/vm-details.js"
,
"no-vnc/include/util.js"
,
...
...
circle/dashboard/static/dashboard/js/prism.js
0 → 100644
View file @
1b01e6b7
/* PrismJS 1.28.0
https://prismjs.com/download.html#themes=prism&languages=markup+django+markup-templating+yaml */
var
_self
=
"undefined"
!=
typeof
window
?
window
:
"undefined"
!=
typeof
WorkerGlobalScope
&&
self
instanceof
WorkerGlobalScope
?
self
:{},
Prism
=
function
(
e
){
var
n
=
/
(?:
^|
\s)
lang
(?:
uage
)?
-
([\w
-
]
+
)(?=\s
|$
)
/i
,
t
=
0
,
r
=
{},
a
=
{
manual
:
e
.
Prism
&&
e
.
Prism
.
manual
,
disableWorkerMessageHandler
:
e
.
Prism
&&
e
.
Prism
.
disableWorkerMessageHandler
,
util
:{
encode
:
function
e
(
n
){
return
n
instanceof
i
?
new
i
(
n
.
type
,
e
(
n
.
content
),
n
.
alias
):
Array
.
isArray
(
n
)?
n
.
map
(
e
):
n
.
replace
(
/&/g
,
"&"
).
replace
(
/</g
,
"<"
).
replace
(
/
\u
00a0/g
,
" "
)},
type
:
function
(
e
){
return
Object
.
prototype
.
toString
.
call
(
e
).
slice
(
8
,
-
1
)},
objId
:
function
(
e
){
return
e
.
__id
||
Object
.
defineProperty
(
e
,
"__id"
,{
value
:
++
t
}),
e
.
__id
},
clone
:
function
e
(
n
,
t
){
var
r
,
i
;
switch
(
t
=
t
||
{},
a
.
util
.
type
(
n
)){
case
"Object"
:
if
(
i
=
a
.
util
.
objId
(
n
),
t
[
i
])
return
t
[
i
];
for
(
var
l
in
r
=
{},
t
[
i
]
=
r
,
n
)
n
.
hasOwnProperty
(
l
)
&&
(
r
[
l
]
=
e
(
n
[
l
],
t
));
return
r
;
case
"Array"
:
return
i
=
a
.
util
.
objId
(
n
),
t
[
i
]?
t
[
i
]:(
r
=
[],
t
[
i
]
=
r
,
n
.
forEach
((
function
(
n
,
a
){
r
[
a
]
=
e
(
n
,
t
)})),
r
);
default
:
return
n
}},
getLanguage
:
function
(
e
){
for
(;
e
;){
var
t
=
n
.
exec
(
e
.
className
);
if
(
t
)
return
t
[
1
].
toLowerCase
();
e
=
e
.
parentElement
}
return
"none"
},
setLanguage
:
function
(
e
,
t
){
e
.
className
=
e
.
className
.
replace
(
RegExp
(
n
,
"gi"
),
""
),
e
.
classList
.
add
(
"language-"
+
t
)},
currentScript
:
function
(){
if
(
"undefined"
==
typeof
document
)
return
null
;
if
(
"currentScript"
in
document
)
return
document
.
currentScript
;
try
{
throw
new
Error
}
catch
(
r
){
var
e
=
(
/at
[^
(
\r\n]
*
\((
.*
)
:
[^
:
]
+:
[^
:
]
+
\)
$/i
.
exec
(
r
.
stack
)
||
[])[
1
];
if
(
e
){
var
n
=
document
.
getElementsByTagName
(
"script"
);
for
(
var
t
in
n
)
if
(
n
[
t
].
src
==
e
)
return
n
[
t
]}
return
null
}},
isActive
:
function
(
e
,
n
,
t
){
for
(
var
r
=
"no-"
+
n
;
e
;){
var
a
=
e
.
classList
;
if
(
a
.
contains
(
n
))
return
!
0
;
if
(
a
.
contains
(
r
))
return
!
1
;
e
=
e
.
parentElement
}
return
!!
t
}},
languages
:{
plain
:
r
,
plaintext
:
r
,
text
:
r
,
txt
:
r
,
extend
:
function
(
e
,
n
){
var
t
=
a
.
util
.
clone
(
a
.
languages
[
e
]);
for
(
var
r
in
n
)
t
[
r
]
=
n
[
r
];
return
t
},
insertBefore
:
function
(
e
,
n
,
t
,
r
){
var
i
=
(
r
=
r
||
a
.
languages
)[
e
],
l
=
{};
for
(
var
o
in
i
)
if
(
i
.
hasOwnProperty
(
o
)){
if
(
o
==
n
)
for
(
var
s
in
t
)
t
.
hasOwnProperty
(
s
)
&&
(
l
[
s
]
=
t
[
s
]);
t
.
hasOwnProperty
(
o
)
||
(
l
[
o
]
=
i
[
o
])}
var
u
=
r
[
e
];
return
r
[
e
]
=
l
,
a
.
languages
.
DFS
(
a
.
languages
,(
function
(
n
,
t
){
t
===
u
&&
n
!=
e
&&
(
this
[
n
]
=
l
)})),
l
},
DFS
:
function
e
(
n
,
t
,
r
,
i
){
i
=
i
||
{};
var
l
=
a
.
util
.
objId
;
for
(
var
o
in
n
)
if
(
n
.
hasOwnProperty
(
o
)){
t
.
call
(
n
,
o
,
n
[
o
],
r
||
o
);
var
s
=
n
[
o
],
u
=
a
.
util
.
type
(
s
);
"Object"
!==
u
||
i
[
l
(
s
)]?
"Array"
!==
u
||
i
[
l
(
s
)]
||
(
i
[
l
(
s
)]
=!
0
,
e
(
s
,
t
,
o
,
i
)):(
i
[
l
(
s
)]
=!
0
,
e
(
s
,
t
,
null
,
i
))}}},
plugins
:{},
highlightAll
:
function
(
e
,
n
){
a
.
highlightAllUnder
(
document
,
e
,
n
)},
highlightAllUnder
:
function
(
e
,
n
,
t
){
var
r
=
{
callback
:
t
,
container
:
e
,
selector
:
'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'
};
a
.
hooks
.
run
(
"before-highlightall"
,
r
),
r
.
elements
=
Array
.
prototype
.
slice
.
apply
(
r
.
container
.
querySelectorAll
(
r
.
selector
)),
a
.
hooks
.
run
(
"before-all-elements-highlight"
,
r
);
for
(
var
i
,
l
=
0
;
i
=
r
.
elements
[
l
++
];)
a
.
highlightElement
(
i
,
!
0
===
n
,
r
.
callback
)},
highlightElement
:
function
(
n
,
t
,
r
){
var
i
=
a
.
util
.
getLanguage
(
n
),
l
=
a
.
languages
[
i
];
a
.
util
.
setLanguage
(
n
,
i
);
var
o
=
n
.
parentElement
;
o
&&
"pre"
===
o
.
nodeName
.
toLowerCase
()
&&
a
.
util
.
setLanguage
(
o
,
i
);
var
s
=
{
element
:
n
,
language
:
i
,
grammar
:
l
,
code
:
n
.
textContent
};
function
u
(
e
){
s
.
highlightedCode
=
e
,
a
.
hooks
.
run
(
"before-insert"
,
s
),
s
.
element
.
innerHTML
=
s
.
highlightedCode
,
a
.
hooks
.
run
(
"after-highlight"
,
s
),
a
.
hooks
.
run
(
"complete"
,
s
),
r
&&
r
.
call
(
s
.
element
)}
if
(
a
.
hooks
.
run
(
"before-sanity-check"
,
s
),(
o
=
s
.
element
.
parentElement
)
&&
"pre"
===
o
.
nodeName
.
toLowerCase
()
&&!
o
.
hasAttribute
(
"tabindex"
)
&&
o
.
setAttribute
(
"tabindex"
,
"0"
),
!
s
.
code
)
return
a
.
hooks
.
run
(
"complete"
,
s
),
void
(
r
&&
r
.
call
(
s
.
element
));
if
(
a
.
hooks
.
run
(
"before-highlight"
,
s
),
s
.
grammar
)
if
(
t
&&
e
.
Worker
){
var
c
=
new
Worker
(
a
.
filename
);
c
.
onmessage
=
function
(
e
){
u
(
e
.
data
)},
c
.
postMessage
(
JSON
.
stringify
({
language
:
s
.
language
,
code
:
s
.
code
,
immediateClose
:
!
0
}))}
else
u
(
a
.
highlight
(
s
.
code
,
s
.
grammar
,
s
.
language
));
else
u
(
a
.
util
.
encode
(
s
.
code
))},
highlight
:
function
(
e
,
n
,
t
){
var
r
=
{
code
:
e
,
grammar
:
n
,
language
:
t
};
if
(
a
.
hooks
.
run
(
"before-tokenize"
,
r
),
!
r
.
grammar
)
throw
new
Error
(
'The language "'
+
r
.
language
+
'" has no grammar.'
);
return
r
.
tokens
=
a
.
tokenize
(
r
.
code
,
r
.
grammar
),
a
.
hooks
.
run
(
"after-tokenize"
,
r
),
i
.
stringify
(
a
.
util
.
encode
(
r
.
tokens
),
r
.
language
)},
tokenize
:
function
(
e
,
n
){
var
t
=
n
.
rest
;
if
(
t
){
for
(
var
r
in
t
)
n
[
r
]
=
t
[
r
];
delete
n
.
rest
}
var
a
=
new
s
;
return
u
(
a
,
a
.
head
,
e
),
o
(
e
,
a
,
n
,
a
.
head
,
0
),
function
(
e
){
for
(
var
n
=
[],
t
=
e
.
head
.
next
;
t
!==
e
.
tail
;)
n
.
push
(
t
.
value
),
t
=
t
.
next
;
return
n
}(
a
)},
hooks
:{
all
:{},
add
:
function
(
e
,
n
){
var
t
=
a
.
hooks
.
all
;
t
[
e
]
=
t
[
e
]
||
[],
t
[
e
].
push
(
n
)},
run
:
function
(
e
,
n
){
var
t
=
a
.
hooks
.
all
[
e
];
if
(
t
&&
t
.
length
)
for
(
var
r
,
i
=
0
;
r
=
t
[
i
++
];)
r
(
n
)}},
Token
:
i
};
function
i
(
e
,
n
,
t
,
r
){
this
.
type
=
e
,
this
.
content
=
n
,
this
.
alias
=
t
,
this
.
length
=
0
|
(
r
||
""
).
length
}
function
l
(
e
,
n
,
t
,
r
){
e
.
lastIndex
=
n
;
var
a
=
e
.
exec
(
t
);
if
(
a
&&
r
&&
a
[
1
]){
var
i
=
a
[
1
].
length
;
a
.
index
+=
i
,
a
[
0
]
=
a
[
0
].
slice
(
i
)}
return
a
}
function
o
(
e
,
n
,
t
,
r
,
s
,
g
){
for
(
var
f
in
t
)
if
(
t
.
hasOwnProperty
(
f
)
&&
t
[
f
]){
var
h
=
t
[
f
];
h
=
Array
.
isArray
(
h
)?
h
:[
h
];
for
(
var
d
=
0
;
d
<
h
.
length
;
++
d
){
if
(
g
&&
g
.
cause
==
f
+
","
+
d
)
return
;
var
v
=
h
[
d
],
p
=
v
.
inside
,
m
=!!
v
.
lookbehind
,
y
=!!
v
.
greedy
,
k
=
v
.
alias
;
if
(
y
&&!
v
.
pattern
.
global
){
var
x
=
v
.
pattern
.
toString
().
match
(
/
[
imsuy
]
*$/
)[
0
];
v
.
pattern
=
RegExp
(
v
.
pattern
.
source
,
x
+
"g"
)}
for
(
var
b
=
v
.
pattern
||
v
,
w
=
r
.
next
,
A
=
s
;
w
!==
n
.
tail
&&!
(
g
&&
A
>=
g
.
reach
);
A
+=
w
.
value
.
length
,
w
=
w
.
next
){
var
E
=
w
.
value
;
if
(
n
.
length
>
e
.
length
)
return
;
if
(
!
(
E
instanceof
i
)){
var
P
,
L
=
1
;
if
(
y
){
if
(
!
(
P
=
l
(
b
,
A
,
e
,
m
))
||
P
.
index
>=
e
.
length
)
break
;
var
S
=
P
.
index
,
O
=
P
.
index
+
P
[
0
].
length
,
j
=
A
;
for
(
j
+=
w
.
value
.
length
;
S
>=
j
;)
j
+=
(
w
=
w
.
next
).
value
.
length
;
if
(
A
=
j
-=
w
.
value
.
length
,
w
.
value
instanceof
i
)
continue
;
for
(
var
C
=
w
;
C
!==
n
.
tail
&&
(
j
<
O
||
"string"
==
typeof
C
.
value
);
C
=
C
.
next
)
L
++
,
j
+=
C
.
value
.
length
;
L
--
,
E
=
e
.
slice
(
A
,
j
),
P
.
index
-=
A
}
else
if
(
!
(
P
=
l
(
b
,
0
,
E
,
m
)))
continue
;
S
=
P
.
index
;
var
N
=
P
[
0
],
_
=
E
.
slice
(
0
,
S
),
M
=
E
.
slice
(
S
+
N
.
length
),
W
=
A
+
E
.
length
;
g
&&
W
>
g
.
reach
&&
(
g
.
reach
=
W
);
var
z
=
w
.
prev
;
if
(
_
&&
(
z
=
u
(
n
,
z
,
_
),
A
+=
_
.
length
),
c
(
n
,
z
,
L
),
w
=
u
(
n
,
z
,
new
i
(
f
,
p
?
a
.
tokenize
(
N
,
p
):
N
,
k
,
N
)),
M
&&
u
(
n
,
w
,
M
),
L
>
1
){
var
I
=
{
cause
:
f
+
","
+
d
,
reach
:
W
};
o
(
e
,
n
,
t
,
w
.
prev
,
A
,
I
),
g
&&
I
.
reach
>
g
.
reach
&&
(
g
.
reach
=
I
.
reach
)}}}}}}
function
s
(){
var
e
=
{
value
:
null
,
prev
:
null
,
next
:
null
},
n
=
{
value
:
null
,
prev
:
e
,
next
:
null
};
e
.
next
=
n
,
this
.
head
=
e
,
this
.
tail
=
n
,
this
.
length
=
0
}
function
u
(
e
,
n
,
t
){
var
r
=
n
.
next
,
a
=
{
value
:
t
,
prev
:
n
,
next
:
r
};
return
n
.
next
=
a
,
r
.
prev
=
a
,
e
.
length
++
,
a
}
function
c
(
e
,
n
,
t
){
for
(
var
r
=
n
.
next
,
a
=
0
;
a
<
t
&&
r
!==
e
.
tail
;
a
++
)
r
=
r
.
next
;
n
.
next
=
r
,
r
.
prev
=
n
,
e
.
length
-=
a
}
if
(
e
.
Prism
=
a
,
i
.
stringify
=
function
e
(
n
,
t
){
if
(
"string"
==
typeof
n
)
return
n
;
if
(
Array
.
isArray
(
n
)){
var
r
=
""
;
return
n
.
forEach
((
function
(
n
){
r
+=
e
(
n
,
t
)})),
r
}
var
i
=
{
type
:
n
.
type
,
content
:
e
(
n
.
content
,
t
),
tag
:
"span"
,
classes
:[
"token"
,
n
.
type
],
attributes
:{},
language
:
t
},
l
=
n
.
alias
;
l
&&
(
Array
.
isArray
(
l
)?
Array
.
prototype
.
push
.
apply
(
i
.
classes
,
l
):
i
.
classes
.
push
(
l
)),
a
.
hooks
.
run
(
"wrap"
,
i
);
var
o
=
""
;
for
(
var
s
in
i
.
attributes
)
o
+=
" "
+
s
+
'="'
+
(
i
.
attributes
[
s
]
||
""
).
replace
(
/"/g
,
"""
)
+
'"'
;
return
"<"
+
i
.
tag
+
' class="'
+
i
.
classes
.
join
(
" "
)
+
'"'
+
o
+
">"
+
i
.
content
+
"</"
+
i
.
tag
+
">"
},
!
e
.
document
)
return
e
.
addEventListener
?(
a
.
disableWorkerMessageHandler
||
e
.
addEventListener
(
"message"
,(
function
(
n
){
var
t
=
JSON
.
parse
(
n
.
data
),
r
=
t
.
language
,
i
=
t
.
code
,
l
=
t
.
immediateClose
;
e
.
postMessage
(
a
.
highlight
(
i
,
a
.
languages
[
r
],
r
)),
l
&&
e
.
close
()}),
!
1
),
a
):
a
;
var
g
=
a
.
util
.
currentScript
();
function
f
(){
a
.
manual
||
a
.
highlightAll
()}
if
(
g
&&
(
a
.
filename
=
g
.
src
,
g
.
hasAttribute
(
"data-manual"
)
&&
(
a
.
manual
=!
0
)),
!
a
.
manual
){
var
h
=
document
.
readyState
;
"loading"
===
h
||
"interactive"
===
h
&&
g
&&
g
.
defer
?
document
.
addEventListener
(
"DOMContentLoaded"
,
f
):
window
.
requestAnimationFrame
?
window
.
requestAnimationFrame
(
f
):
window
.
setTimeout
(
f
,
16
)}
return
a
}(
_self
);
"undefined"
!=
typeof
module
&&
module
.
exports
&&
(
module
.
exports
=
Prism
),
"undefined"
!=
typeof
global
&&
(
global
.
Prism
=
Prism
);
Prism
.
languages
.
markup
=
{
comment
:{
pattern
:
/<!--
(?:(?!
<!--
)[\s\S])
*
?
-->/
,
greedy
:
!
0
},
prolog
:{
pattern
:
/<
\?[\s\S]
+
?\?
>/
,
greedy
:
!
0
},
doctype
:{
pattern
:
/<!DOCTYPE
(?:[^
>"'[
\]]
|"
[^
"
]
*"|'
[^
'
]
*'
)
+
(?:\[(?:[^
<"'
\]]
|"
[^
"
]
*"|'
[^
'
]
*'|<
(?!
!--
)
|<!--
(?:[^
-
]
|-
(?!
->
))
*-->
)
*
\]\s
*
)?
>/i
,
greedy
:
!
0
,
inside
:{
"internal-subset"
:{
pattern
:
/
(
^
[^\[]
*
\[)[\s\S]
+
(?=\]
>$
)
/
,
lookbehind
:
!
0
,
greedy
:
!
0
,
inside
:
null
},
string
:{
pattern
:
/"
[^
"
]
*"|'
[^
'
]
*'/
,
greedy
:
!
0
},
punctuation
:
/^<!|>$|
[
[
\]]
/
,
"doctype-tag"
:
/^
DOCTYPE
/
i
,
name
:
/
[^\s
<>'"
]
+/
}},
cdata
:{
pattern
:
/<!
\[
CDATA
\[[\s\S]
*
?\]\]
>/i
,
greedy
:
!
0
},
tag
:{
pattern
:
/<
\/?(?!\d)[^\s
>
\/
=$<%
]
+
(?:\s(?:\s
*
[^\s
>
\/
=
]
+
(?:\s
*=
\s
*
(?:
"
[^
"
]
*"|'
[^
'
]
*'|
[^\s
'">=
]
+
(?=[\s
>
]))
|
(?=[\s/
>
])))
+
)?\s
*
\/?
>/
,
greedy
:
!
0
,
inside
:{
tag
:{
pattern
:
/^<
\/?[^\s
>
\/]
+/
,
inside
:{
punctuation
:
/^<
\/?
/
,
namespace
:
/^
[^\s
>
\/
:
]
+:/
}},
"special-attr"
:[],
"attr-value"
:{
pattern
:
/=
\s
*
(?:
"
[^
"
]
*"|'
[^
'
]
*'|
[^\s
'">=
]
+
)
/
,
inside
:{
punctuation
:[{
pattern
:
/^=/
,
alias
:
"attr-equals"
},{
pattern
:
/^
(\s
*
)[
"'
]
|
[
"'
]
$/
,
lookbehind
:
!
0
}]}},
punctuation
:
/
\/?
>/
,
"attr-name"
:{
pattern
:
/
[^\s
>
\/]
+/
,
inside
:{
namespace
:
/^
[^\s
>
\/
:
]
+:/
}}}},
entity
:[{
pattern
:
/&
[\d
a-z
]{1,8}
;/i
,
alias
:
"named-entity"
},
/&#x
?[\d
a-f
]{1,8}
;/i
]},
Prism
.
languages
.
markup
.
tag
.
inside
[
"attr-value"
].
inside
.
entity
=
Prism
.
languages
.
markup
.
entity
,
Prism
.
languages
.
markup
.
doctype
.
inside
[
"internal-subset"
].
inside
=
Prism
.
languages
.
markup
,
Prism
.
hooks
.
add
(
"wrap"
,(
function
(
a
){
"entity"
===
a
.
type
&&
(
a
.
attributes
.
title
=
a
.
content
.
replace
(
/&/
,
"&"
))})),
Object
.
defineProperty
(
Prism
.
languages
.
markup
.
tag
,
"addInlined"
,{
value
:
function
(
a
,
e
){
var
s
=
{};
s
[
"language-"
+
e
]
=
{
pattern
:
/
(
^<!
\[
CDATA
\[)[\s\S]
+
?(?=\]\]
>$
)
/i
,
lookbehind
:
!
0
,
inside
:
Prism
.
languages
[
e
]},
s
.
cdata
=
/^<!
\[
CDATA
\[
|
\]\]
>$/i
;
var
t
=
{
"included-cdata"
:{
pattern
:
/<!
\[
CDATA
\[[\s\S]
*
?\]\]
>/i
,
inside
:
s
}};
t
[
"language-"
+
e
]
=
{
pattern
:
/
[\s\S]
+/
,
inside
:
Prism
.
languages
[
e
]};
var
n
=
{};
n
[
a
]
=
{
pattern
:
RegExp
(
"(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[^])*?(?=</__>)"
.
replace
(
/__/g
,(
function
(){
return
a
})),
"i"
),
lookbehind
:
!
0
,
greedy
:
!
0
,
inside
:
t
},
Prism
.
languages
.
insertBefore
(
"markup"
,
"cdata"
,
n
)}}),
Object
.
defineProperty
(
Prism
.
languages
.
markup
.
tag
,
"addAttribute"
,{
value
:
function
(
a
,
e
){
Prism
.
languages
.
markup
.
tag
.
inside
[
"special-attr"
].
push
({
pattern
:
RegExp
(
"(^|[\"'\\s])(?:"
+
a
+
")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))"
,
"i"
),
lookbehind
:
!
0
,
inside
:{
"attr-name"
:
/^
[
^
\
s
=
]
+
/,"attr-value":{pattern:/
=
[
\
s
\
S
]
+
/,inside:{value:{pattern:/
(
^=
\
s
*
([
"']|(?!["
'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'
/
]}}}})}}),
Prism
.
languages
.
html
=
Prism
.
languages
.
markup
,
Prism
.
languages
.
mathml
=
Prism
.
languages
.
markup
,
Prism
.
languages
.
svg
=
Prism
.
languages
.
markup
,
Prism
.
languages
.
xml
=
Prism
.
languages
.
extend
(
"markup"
,{}),
Prism
.
languages
.
ssml
=
Prism
.
languages
.
xml
,
Prism
.
languages
.
atom
=
Prism
.
languages
.
xml
,
Prism
.
languages
.
rss
=
Prism
.
languages
.
xml
;
!
function
(
e
){
function
n
(
e
,
n
){
return
"___"
+
e
.
toUpperCase
()
+
n
+
"___"
}
Object
.
defineProperties
(
e
.
languages
[
"markup-templating"
]
=
{},{
buildPlaceholders
:{
value
:
function
(
t
,
a
,
r
,
o
){
if
(
t
.
language
===
a
){
var
c
=
t
.
tokenStack
=
[];
t
.
code
=
t
.
code
.
replace
(
r
,(
function
(
e
){
if
(
"function"
==
typeof
o
&&!
o
(
e
))
return
e
;
for
(
var
r
,
i
=
c
.
length
;
-
1
!==
t
.
code
.
indexOf
(
r
=
n
(
a
,
i
));)
++
i
;
return
c
[
i
]
=
e
,
r
})),
t
.
grammar
=
e
.
languages
.
markup
}}},
tokenizePlaceholders
:{
value
:
function
(
t
,
a
){
if
(
t
.
language
===
a
&&
t
.
tokenStack
){
t
.
grammar
=
e
.
languages
[
a
];
var
r
=
0
,
o
=
Object
.
keys
(
t
.
tokenStack
);
!
function
c
(
i
){
for
(
var
u
=
0
;
u
<
i
.
length
&&!
(
r
>=
o
.
length
);
u
++
){
var
g
=
i
[
u
];
if
(
"string"
==
typeof
g
||
g
.
content
&&
"string"
==
typeof
g
.
content
){
var
l
=
o
[
r
],
s
=
t
.
tokenStack
[
l
],
f
=
"string"
==
typeof
g
?
g
:
g
.
content
,
p
=
n
(
a
,
l
),
k
=
f
.
indexOf
(
p
);
if
(
k
>-
1
){
++
r
;
var
m
=
f
.
substring
(
0
,
k
),
d
=
new
e
.
Token
(
a
,
e
.
tokenize
(
s
,
t
.
grammar
),
"language-"
+
a
,
s
),
h
=
f
.
substring
(
k
+
p
.
length
),
v
=
[];
m
&&
v
.
push
.
apply
(
v
,
c
([
m
])),
v
.
push
(
d
),
h
&&
v
.
push
.
apply
(
v
,
c
([
h
])),
"string"
==
typeof
g
?
i
.
splice
.
apply
(
i
,[
u
,
1
].
concat
(
v
)):
g
.
content
=
v
}}
else
g
.
content
&&
c
(
g
.
content
)}
return
i
}(
t
.
tokens
)}}}})}(
Prism
);
!
function
(
e
){
e
.
languages
.
django
=
{
comment
:
/^
\{
#
[\s\S]
*
?
#
\}
$/
,
tag
:{
pattern
:
/
(
^
\{
%
[
+-
]?\s
*
)\w
+/
,
lookbehind
:
!
0
,
alias
:
"keyword"
},
delimiter
:{
pattern
:
/^
\{[
{%
][
+-
]?
|
[
+-
]?[
}%
]\}
$/
,
alias
:
"punctuation"
},
string
:{
pattern
:
/
(
"|'
)(?:\\
.|
(?!\1)[^\\\r\n])
*
\1
/
,
greedy
:
!
0
},
filter
:{
pattern
:
/
(\|)\w
+/
,
lookbehind
:
!
0
,
alias
:
"function"
},
test
:{
pattern
:
/
(\b
is
\s
+
(?:
not
\s
+
)?)(?!
not
\b)\w
+/
,
lookbehind
:
!
0
,
alias
:
"function"
},
function
:
/
\b[
a-z_
]\w
+
(?=\s
*
\()
/i
,
keyword
:
/
\b(?:
and|as|by|else|for|if|import|in|is|loop|not|or|recursive|with|without
)\b
/
,
operator
:
/
[
-+%=
]
=
?
|!=|
\*\*?
=
?
|
\/\/?
=
?
|<
[
<=>
]?
|>
[
=>
]?
|
[
&|^~
]
/
,
number
:
/
\b\d
+
(?:\.\d
+
)?\b
/
,
boolean
:
/
[
Ff
]
alse|
[
Nn
]
one|
[
Tt
]
rue/
,
variable
:
/
\b\w
+
\b
/
,
punctuation
:
/
[
{}[
\]
(),.:;
]
/
};
var
n
=
/
\{\{[\s\S]
*
?\}\}
|
\{
%
[\s\S]
*
?
%
\}
|
\{
#
[\s\S]
*
?
#
\}
/g
,
o
=
e
.
languages
[
"markup-templating"
];
e
.
hooks
.
add
(
"before-tokenize"
,(
function
(
e
){
o
.
buildPlaceholders
(
e
,
"django"
,
n
)})),
e
.
hooks
.
add
(
"after-tokenize"
,(
function
(
e
){
o
.
tokenizePlaceholders
(
e
,
"django"
)})),
e
.
languages
.
jinja2
=
e
.
languages
.
django
,
e
.
hooks
.
add
(
"before-tokenize"
,(
function
(
e
){
o
.
buildPlaceholders
(
e
,
"jinja2"
,
n
)})),
e
.
hooks
.
add
(
"after-tokenize"
,(
function
(
e
){
o
.
tokenizePlaceholders
(
e
,
"jinja2"
)}))}(
Prism
);
!
function
(
e
){
var
n
=
/
[
*&
][^\s
[
\]
{},
]
+/
,
r
=
/!
(?:
<
[\w\-
%#;
/
?:@&=+$,.!~*'()[
\]]
+>|
(?:[
a-zA-Z
\d
-
]
*!
)?[\w\-
%#;
/
?:@&=+$.~*'()
]
+
)?
/
,
t
=
"(?:"
+
r
.
source
+
"(?:[ \t]+"
+
n
.
source
+
")?|"
+
n
.
source
+
"(?:[ \t]+"
+
r
.
source
+
")?)"
,
a
=
"(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*"
.
replace
(
/<PLAIN>/g
,(
function
(){
return
"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"
})),
d
=
"\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'"
;
function
o
(
e
,
n
){
n
=
(
n
||
""
).
replace
(
/m/g
,
""
)
+
"m"
;
var
r
=
"([:\\-,[{]\\s*(?:\\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))"
.
replace
(
/<<prop>>/g
,(
function
(){
return
t
})).
replace
(
/<<value>>/g
,(
function
(){
return
e
}));
return
RegExp
(
r
,
n
)}
e
.
languages
.
yaml
=
{
scalar
:{
pattern
:
RegExp
(
"([\\-:]\\s*(?:\\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)"
.
replace
(
/<<prop>>/g
,(
function
(){
return
t
}))),
lookbehind
:
!
0
,
alias
:
"string"
},
comment
:
/#.*/
,
key
:{
pattern
:
RegExp
(
"((?:^|[:\\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\\s*:\\s)"
.
replace
(
/<<prop>>/g
,(
function
(){
return
t
})).
replace
(
/<<key>>/g
,(
function
(){
return
"(?:"
+
a
+
"|"
+
d
+
")"
}))),
lookbehind
:
!
0
,
greedy
:
!
0
,
alias
:
"atrule"
},
directive
:{
pattern
:
/
(
^
[
\t]
*
)
%.+/m
,
lookbehind
:
!
0
,
alias
:
"important"
},
datetime
:{
pattern
:
o
(
"\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"
),
lookbehind
:
!
0
,
alias
:
"number"
},
boolean
:{
pattern
:
o
(
"false|true"
,
"i"
),
lookbehind
:
!
0
,
alias
:
"important"
},
null
:{
pattern
:
o
(
"null|~"
,
"i"
),
lookbehind
:
!
0
,
alias
:
"important"
},
string
:{
pattern
:
o
(
d
),
lookbehind
:
!
0
,
greedy
:
!
0
},
number
:{
pattern
:
o
(
"[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)"
,
"i"
),
lookbehind
:
!
0
},
tag
:
r
,
important
:
n
,
punctuation
:
/---|
[
:[
\]
{}
\-
,|>?
]
|
\.\.\.
/
},
e
.
languages
.
yml
=
e
.
languages
.
yaml
}(
Prism
);
circle/dashboard/static/dashboard/vm-details.js
View file @
1b01e6b7
var
Websock_native
;
// not sure
function
data
()
{
Prism
.
hooks
.
add
(
"before-highlight"
,
function
(
env
)
{
env
.
code
=
env
.
element
.
innerText
;
});
$
(
'#meta_data_code'
).
text
(
$
(
'#id_ci_meta_data'
).
val
())
$
(
'#id_ci_meta_data'
).
on
(
'input'
,
function
()
{
let
result_element
=
document
.
querySelector
(
"#meta_data_code"
);
res
=
Prism
.
highlight
(
document
.
getElementById
(
"id_ci_meta_data"
).
value
,
Prism
.
languages
.
yaml
,
'yaml'
)
result_element
.
innerHTML
=
Prism
.
highlight
(
res
,
Prism
.
languages
.
jinja2
,
'jinja2'
)
})
}
$
(
function
()
{
/* */
$
(
'#vm-details-cidata-save'
).
click
(
function
(
e
)
{
...
...
circle/dashboard/templates/dashboard/_ci-data-help.html
View file @
1b01e6b7
...
...
@@ -19,6 +19,7 @@
<li>
{% trans "
<code>
net.ipv4
</code>
- default host ip address" %}
</li>
<li>
{% trans "
<code>
net.ipv6
</code>
- default host ipv6 address" %}
</li>
<li>
{% trans "
<code>
net.vlans
</code>
- associated vlans: list of objects (name: vlan name, ipv4/ipv6: host ip in vlan)" %}
</li>
<li>
{% trans "
<code>
ssh.keys
</code>
- owner's ssh-keys dictionary: the key is the ssh-key's name" %}
</li>
<li>
{% trans "
<code>
ci.rndstr(len: int)
</code>
- function: make random string with 'len' charachters lenght" %}
</li>
</ul>
<b>
Example:
</b>
...
...
@@ -34,6 +35,8 @@ users:
chpasswd: { expire: False }
lock-passwd: false
passwd: "{{password}}"
ssh_authorized_keys:
- {{ ssh.keys['my-key'] }}
{% for u in acl.operators %}
- name: {{i}}
- shell: /bin/bash
...
...
circle/vm/models/instance.py
View file @
1b01e6b7
...
...
@@ -49,9 +49,9 @@ from model_utils import Choices
from
model_utils.managers
import
QueryManager
from
model_utils.models
import
TimeStampedModel
,
StatusModel
from
taggit.managers
import
TaggableManager
from
simplesshkey.models
import
UserKey
from
django.db
import
models
import
json
from
acl.models
import
AclBase
from
django
import
forms
from
common.models
import
(
...
...
@@ -64,6 +64,7 @@ from .common import BaseResourceConfigModel, Lease
from
.network
import
Interface
from
.node
import
Node
,
Trait
logger
=
getLogger
(
__name__
)
pre_state_changed
=
Signal
(
providing_args
=
[
"new_state"
])
post_state_changed
=
Signal
(
providing_args
=
[
"new_state"
])
...
...
@@ -265,6 +266,12 @@ class AclTemplate:
self
.
operators
=
list
(
k
[
'username'
]
for
k
in
self
.
user_levels
if
k
[
'level'
]
==
'operator'
)
self
.
users
=
list
(
k
[
'username'
]
for
k
in
self
.
user_levels
if
k
[
'level'
]
==
'user'
)
class
SSHKeyTemplate
:
def
__init__
(
self
,
instance
):
owner
=
instance
.
owner
self
.
keys
=
{}
for
k
in
UserKey
.
objects
.
filter
(
user
=
owner
):
self
.
keys
[
k
.
name
]
=
k
.
key
class
NetTemplate
:
class
Host
:
...
...
@@ -279,6 +286,8 @@ class NetTemplate:
self
.
ipv6
=
str
(
instance
.
ipv6
)
class
Instance
(
AclBase
,
VirtualMachineDescModel
,
StatusModel
,
OperatedMixin
,
TimeStampedModel
):
...
...
@@ -402,7 +411,8 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel, OperatedMixin,
"password"
:
sha512_crypt
.
hash
(
self
.
pw
),
"owner"
:
str
(
self
.
owner
.
username
),
"net"
:
NetTemplate
(
self
),
"acl"
:
AclTemplate
(
self
)
"acl"
:
AclTemplate
(
self
),
"ssh"
:
SSHKeyTemplate
(
self
),
}
return
datas
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment