Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
MCMS
Commits
53f587bc
Commit
53f587bc
authored
Dec 27, 2019
by
zhongyh
Browse files
提交资源文件
parent
f40087b8
Changes
414
Hide whitespace changes
Inline
Side-by-side
src/main/webapp/static/plugins/codemirror/5.48.4/addon/comment/comment.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
var
noOptions
=
{};
var
nonWS
=
/
[^\s\u
00a0
]
/
;
var
Pos
=
CodeMirror
.
Pos
;
function
firstNonWS
(
str
)
{
var
found
=
str
.
search
(
nonWS
);
return
found
==
-
1
?
0
:
found
;
}
CodeMirror
.
commands
.
toggleComment
=
function
(
cm
)
{
cm
.
toggleComment
();
};
CodeMirror
.
defineExtension
(
"
toggleComment
"
,
function
(
options
)
{
if
(
!
options
)
options
=
noOptions
;
var
cm
=
this
;
var
minLine
=
Infinity
,
ranges
=
this
.
listSelections
(),
mode
=
null
;
for
(
var
i
=
ranges
.
length
-
1
;
i
>=
0
;
i
--
)
{
var
from
=
ranges
[
i
].
from
(),
to
=
ranges
[
i
].
to
();
if
(
from
.
line
>=
minLine
)
continue
;
if
(
to
.
line
>=
minLine
)
to
=
Pos
(
minLine
,
0
);
minLine
=
from
.
line
;
if
(
mode
==
null
)
{
if
(
cm
.
uncomment
(
from
,
to
,
options
))
mode
=
"
un
"
;
else
{
cm
.
lineComment
(
from
,
to
,
options
);
mode
=
"
line
"
;
}
}
else
if
(
mode
==
"
un
"
)
{
cm
.
uncomment
(
from
,
to
,
options
);
}
else
{
cm
.
lineComment
(
from
,
to
,
options
);
}
}
});
// Rough heuristic to try and detect lines that are part of multi-line string
function
probablyInsideString
(
cm
,
pos
,
line
)
{
return
/
\b
string
\b
/
.
test
(
cm
.
getTokenTypeAt
(
Pos
(
pos
.
line
,
0
)))
&&
!
/^
[\'\"\`]
/
.
test
(
line
)
}
function
getMode
(
cm
,
pos
)
{
var
mode
=
cm
.
getMode
()
return
mode
.
useInnerComments
===
false
||
!
mode
.
innerMode
?
mode
:
cm
.
getModeAt
(
pos
)
}
CodeMirror
.
defineExtension
(
"
lineComment
"
,
function
(
from
,
to
,
options
)
{
if
(
!
options
)
options
=
noOptions
;
var
self
=
this
,
mode
=
getMode
(
self
,
from
);
var
firstLine
=
self
.
getLine
(
from
.
line
);
if
(
firstLine
==
null
||
probablyInsideString
(
self
,
from
,
firstLine
))
return
;
var
commentString
=
options
.
lineComment
||
mode
.
lineComment
;
if
(
!
commentString
)
{
if
(
options
.
blockCommentStart
||
mode
.
blockCommentStart
)
{
options
.
fullLines
=
true
;
self
.
blockComment
(
from
,
to
,
options
);
}
return
;
}
var
end
=
Math
.
min
(
to
.
ch
!=
0
||
to
.
line
==
from
.
line
?
to
.
line
+
1
:
to
.
line
,
self
.
lastLine
()
+
1
);
var
pad
=
options
.
padding
==
null
?
"
"
:
options
.
padding
;
var
blankLines
=
options
.
commentBlankLines
||
from
.
line
==
to
.
line
;
self
.
operation
(
function
()
{
if
(
options
.
indent
)
{
var
baseString
=
null
;
for
(
var
i
=
from
.
line
;
i
<
end
;
++
i
)
{
var
line
=
self
.
getLine
(
i
);
var
whitespace
=
line
.
slice
(
0
,
firstNonWS
(
line
));
if
(
baseString
==
null
||
baseString
.
length
>
whitespace
.
length
)
{
baseString
=
whitespace
;
}
}
for
(
var
i
=
from
.
line
;
i
<
end
;
++
i
)
{
var
line
=
self
.
getLine
(
i
),
cut
=
baseString
.
length
;
if
(
!
blankLines
&&
!
nonWS
.
test
(
line
))
continue
;
if
(
line
.
slice
(
0
,
cut
)
!=
baseString
)
cut
=
firstNonWS
(
line
);
self
.
replaceRange
(
baseString
+
commentString
+
pad
,
Pos
(
i
,
0
),
Pos
(
i
,
cut
));
}
}
else
{
for
(
var
i
=
from
.
line
;
i
<
end
;
++
i
)
{
if
(
blankLines
||
nonWS
.
test
(
self
.
getLine
(
i
)))
self
.
replaceRange
(
commentString
+
pad
,
Pos
(
i
,
0
));
}
}
});
});
CodeMirror
.
defineExtension
(
"
blockComment
"
,
function
(
from
,
to
,
options
)
{
if
(
!
options
)
options
=
noOptions
;
var
self
=
this
,
mode
=
getMode
(
self
,
from
);
var
startString
=
options
.
blockCommentStart
||
mode
.
blockCommentStart
;
var
endString
=
options
.
blockCommentEnd
||
mode
.
blockCommentEnd
;
if
(
!
startString
||
!
endString
)
{
if
((
options
.
lineComment
||
mode
.
lineComment
)
&&
options
.
fullLines
!=
false
)
self
.
lineComment
(
from
,
to
,
options
);
return
;
}
if
(
/
\b
comment
\b
/
.
test
(
self
.
getTokenTypeAt
(
Pos
(
from
.
line
,
0
))))
return
var
end
=
Math
.
min
(
to
.
line
,
self
.
lastLine
());
if
(
end
!=
from
.
line
&&
to
.
ch
==
0
&&
nonWS
.
test
(
self
.
getLine
(
end
)))
--
end
;
var
pad
=
options
.
padding
==
null
?
"
"
:
options
.
padding
;
if
(
from
.
line
>
end
)
return
;
self
.
operation
(
function
()
{
if
(
options
.
fullLines
!=
false
)
{
var
lastLineHasText
=
nonWS
.
test
(
self
.
getLine
(
end
));
self
.
replaceRange
(
pad
+
endString
,
Pos
(
end
));
self
.
replaceRange
(
startString
+
pad
,
Pos
(
from
.
line
,
0
));
var
lead
=
options
.
blockCommentLead
||
mode
.
blockCommentLead
;
if
(
lead
!=
null
)
for
(
var
i
=
from
.
line
+
1
;
i
<=
end
;
++
i
)
if
(
i
!=
end
||
lastLineHasText
)
self
.
replaceRange
(
lead
+
pad
,
Pos
(
i
,
0
));
}
else
{
self
.
replaceRange
(
endString
,
to
);
self
.
replaceRange
(
startString
,
from
);
}
});
});
CodeMirror
.
defineExtension
(
"
uncomment
"
,
function
(
from
,
to
,
options
)
{
if
(
!
options
)
options
=
noOptions
;
var
self
=
this
,
mode
=
getMode
(
self
,
from
);
var
end
=
Math
.
min
(
to
.
ch
!=
0
||
to
.
line
==
from
.
line
?
to
.
line
:
to
.
line
-
1
,
self
.
lastLine
()),
start
=
Math
.
min
(
from
.
line
,
end
);
// Try finding line comments
var
lineString
=
options
.
lineComment
||
mode
.
lineComment
,
lines
=
[];
var
pad
=
options
.
padding
==
null
?
"
"
:
options
.
padding
,
didSomething
;
lineComment
:
{
if
(
!
lineString
)
break
lineComment
;
for
(
var
i
=
start
;
i
<=
end
;
++
i
)
{
var
line
=
self
.
getLine
(
i
);
var
found
=
line
.
indexOf
(
lineString
);
if
(
found
>
-
1
&&
!
/comment/
.
test
(
self
.
getTokenTypeAt
(
Pos
(
i
,
found
+
1
))))
found
=
-
1
;
if
(
found
==
-
1
&&
nonWS
.
test
(
line
))
break
lineComment
;
if
(
found
>
-
1
&&
nonWS
.
test
(
line
.
slice
(
0
,
found
)))
break
lineComment
;
lines
.
push
(
line
);
}
self
.
operation
(
function
()
{
for
(
var
i
=
start
;
i
<=
end
;
++
i
)
{
var
line
=
lines
[
i
-
start
];
var
pos
=
line
.
indexOf
(
lineString
),
endPos
=
pos
+
lineString
.
length
;
if
(
pos
<
0
)
continue
;
if
(
line
.
slice
(
endPos
,
endPos
+
pad
.
length
)
==
pad
)
endPos
+=
pad
.
length
;
didSomething
=
true
;
self
.
replaceRange
(
""
,
Pos
(
i
,
pos
),
Pos
(
i
,
endPos
));
}
});
if
(
didSomething
)
return
true
;
}
// Try block comments
var
startString
=
options
.
blockCommentStart
||
mode
.
blockCommentStart
;
var
endString
=
options
.
blockCommentEnd
||
mode
.
blockCommentEnd
;
if
(
!
startString
||
!
endString
)
return
false
;
var
lead
=
options
.
blockCommentLead
||
mode
.
blockCommentLead
;
var
startLine
=
self
.
getLine
(
start
),
open
=
startLine
.
indexOf
(
startString
)
if
(
open
==
-
1
)
return
false
var
endLine
=
end
==
start
?
startLine
:
self
.
getLine
(
end
)
var
close
=
endLine
.
indexOf
(
endString
,
end
==
start
?
open
+
startString
.
length
:
0
);
var
insideStart
=
Pos
(
start
,
open
+
1
),
insideEnd
=
Pos
(
end
,
close
+
1
)
if
(
close
==
-
1
||
!
/comment/
.
test
(
self
.
getTokenTypeAt
(
insideStart
))
||
!
/comment/
.
test
(
self
.
getTokenTypeAt
(
insideEnd
))
||
self
.
getRange
(
insideStart
,
insideEnd
,
"
\n
"
).
indexOf
(
endString
)
>
-
1
)
return
false
;
// Avoid killing block comments completely outside the selection.
// Positions of the last startString before the start of the selection, and the first endString after it.
var
lastStart
=
startLine
.
lastIndexOf
(
startString
,
from
.
ch
);
var
firstEnd
=
lastStart
==
-
1
?
-
1
:
startLine
.
slice
(
0
,
from
.
ch
).
indexOf
(
endString
,
lastStart
+
startString
.
length
);
if
(
lastStart
!=
-
1
&&
firstEnd
!=
-
1
&&
firstEnd
+
endString
.
length
!=
from
.
ch
)
return
false
;
// Positions of the first endString after the end of the selection, and the last startString before it.
firstEnd
=
endLine
.
indexOf
(
endString
,
to
.
ch
);
var
almostLastStart
=
endLine
.
slice
(
to
.
ch
).
lastIndexOf
(
startString
,
firstEnd
-
to
.
ch
);
lastStart
=
(
firstEnd
==
-
1
||
almostLastStart
==
-
1
)
?
-
1
:
to
.
ch
+
almostLastStart
;
if
(
firstEnd
!=
-
1
&&
lastStart
!=
-
1
&&
lastStart
!=
to
.
ch
)
return
false
;
self
.
operation
(
function
()
{
self
.
replaceRange
(
""
,
Pos
(
end
,
close
-
(
pad
&&
endLine
.
slice
(
close
-
pad
.
length
,
close
)
==
pad
?
pad
.
length
:
0
)),
Pos
(
end
,
close
+
endString
.
length
));
var
openEnd
=
open
+
startString
.
length
;
if
(
pad
&&
startLine
.
slice
(
openEnd
,
openEnd
+
pad
.
length
)
==
pad
)
openEnd
+=
pad
.
length
;
self
.
replaceRange
(
""
,
Pos
(
start
,
open
),
Pos
(
start
,
openEnd
));
if
(
lead
)
for
(
var
i
=
start
+
1
;
i
<=
end
;
++
i
)
{
var
line
=
self
.
getLine
(
i
),
found
=
line
.
indexOf
(
lead
);
if
(
found
==
-
1
||
nonWS
.
test
(
line
.
slice
(
0
,
found
)))
continue
;
var
foundEnd
=
found
+
lead
.
length
;
if
(
pad
&&
line
.
slice
(
foundEnd
,
foundEnd
+
pad
.
length
)
==
pad
)
foundEnd
+=
pad
.
length
;
self
.
replaceRange
(
""
,
Pos
(
i
,
found
),
Pos
(
i
,
foundEnd
));
}
});
return
true
;
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/comment/continuecomment.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
function
continueComment
(
cm
)
{
if
(
cm
.
getOption
(
"
disableInput
"
))
return
CodeMirror
.
Pass
;
var
ranges
=
cm
.
listSelections
(),
mode
,
inserts
=
[];
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
var
pos
=
ranges
[
i
].
head
if
(
!
/
\b
comment
\b
/
.
test
(
cm
.
getTokenTypeAt
(
pos
)))
return
CodeMirror
.
Pass
;
var
modeHere
=
cm
.
getModeAt
(
pos
)
if
(
!
mode
)
mode
=
modeHere
;
else
if
(
mode
!=
modeHere
)
return
CodeMirror
.
Pass
;
var
insert
=
null
;
if
(
mode
.
blockCommentStart
&&
mode
.
blockCommentContinue
)
{
var
line
=
cm
.
getLine
(
pos
.
line
).
slice
(
0
,
pos
.
ch
)
var
end
=
line
.
lastIndexOf
(
mode
.
blockCommentEnd
),
found
if
(
end
!=
-
1
&&
end
==
pos
.
ch
-
mode
.
blockCommentEnd
.
length
)
{
// Comment ended, don't continue it
}
else
if
((
found
=
line
.
lastIndexOf
(
mode
.
blockCommentStart
))
>
-
1
&&
found
>
end
)
{
insert
=
line
.
slice
(
0
,
found
)
if
(
/
\S
/
.
test
(
insert
))
{
insert
=
""
for
(
var
j
=
0
;
j
<
found
;
++
j
)
insert
+=
"
"
}
}
else
if
((
found
=
line
.
indexOf
(
mode
.
blockCommentContinue
))
>
-
1
&&
!
/
\S
/
.
test
(
line
.
slice
(
0
,
found
)))
{
insert
=
line
.
slice
(
0
,
found
)
}
if
(
insert
!=
null
)
insert
+=
mode
.
blockCommentContinue
}
if
(
insert
==
null
&&
mode
.
lineComment
&&
continueLineCommentEnabled
(
cm
))
{
var
line
=
cm
.
getLine
(
pos
.
line
),
found
=
line
.
indexOf
(
mode
.
lineComment
);
if
(
found
>
-
1
)
{
insert
=
line
.
slice
(
0
,
found
);
if
(
/
\S
/
.
test
(
insert
))
insert
=
null
;
else
insert
+=
mode
.
lineComment
+
line
.
slice
(
found
+
mode
.
lineComment
.
length
).
match
(
/^
\s
*/
)[
0
];
}
}
if
(
insert
==
null
)
return
CodeMirror
.
Pass
;
inserts
[
i
]
=
"
\n
"
+
insert
;
}
cm
.
operation
(
function
()
{
for
(
var
i
=
ranges
.
length
-
1
;
i
>=
0
;
i
--
)
cm
.
replaceRange
(
inserts
[
i
],
ranges
[
i
].
from
(),
ranges
[
i
].
to
(),
"
+insert
"
);
});
}
function
continueLineCommentEnabled
(
cm
)
{
var
opt
=
cm
.
getOption
(
"
continueComments
"
);
if
(
opt
&&
typeof
opt
==
"
object
"
)
return
opt
.
continueLineComment
!==
false
;
return
true
;
}
CodeMirror
.
defineOption
(
"
continueComments
"
,
null
,
function
(
cm
,
val
,
prev
)
{
if
(
prev
&&
prev
!=
CodeMirror
.
Init
)
cm
.
removeKeyMap
(
"
continueComment
"
);
if
(
val
)
{
var
key
=
"
Enter
"
;
if
(
typeof
val
==
"
string
"
)
key
=
val
;
else
if
(
typeof
val
==
"
object
"
&&
val
.
key
)
key
=
val
.
key
;
var
map
=
{
name
:
"
continueComment
"
};
map
[
key
]
=
continueComment
;
cm
.
addKeyMap
(
map
);
}
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/dialog/dialog.css
0 → 100644
View file @
53f587bc
.CodeMirror-dialog
{
position
:
absolute
;
left
:
0
;
right
:
0
;
background
:
inherit
;
z-index
:
15
;
padding
:
.1em
.8em
;
overflow
:
hidden
;
color
:
inherit
;
}
.CodeMirror-dialog-top
{
border-bottom
:
1px
solid
#eee
;
top
:
0
;
}
.CodeMirror-dialog-bottom
{
border-top
:
1px
solid
#eee
;
bottom
:
0
;
}
.CodeMirror-dialog
input
{
border
:
none
;
outline
:
none
;
background
:
transparent
;
width
:
20em
;
color
:
inherit
;
font-family
:
monospace
;
}
.CodeMirror-dialog
button
{
font-size
:
70%
;
}
src/main/webapp/static/plugins/codemirror/5.48.4/addon/dialog/dialog.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
// Open simple dialogs on top of an editor. Relies on dialog.css.
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
function
dialogDiv
(
cm
,
template
,
bottom
)
{
var
wrap
=
cm
.
getWrapperElement
();
var
dialog
;
dialog
=
wrap
.
appendChild
(
document
.
createElement
(
"
div
"
));
if
(
bottom
)
dialog
.
className
=
"
CodeMirror-dialog CodeMirror-dialog-bottom
"
;
else
dialog
.
className
=
"
CodeMirror-dialog CodeMirror-dialog-top
"
;
if
(
typeof
template
==
"
string
"
)
{
dialog
.
innerHTML
=
template
;
}
else
{
// Assuming it's a detached DOM element.
dialog
.
appendChild
(
template
);
}
CodeMirror
.
addClass
(
wrap
,
'
dialog-opened
'
);
return
dialog
;
}
function
closeNotification
(
cm
,
newVal
)
{
if
(
cm
.
state
.
currentNotificationClose
)
cm
.
state
.
currentNotificationClose
();
cm
.
state
.
currentNotificationClose
=
newVal
;
}
CodeMirror
.
defineExtension
(
"
openDialog
"
,
function
(
template
,
callback
,
options
)
{
if
(
!
options
)
options
=
{};
closeNotification
(
this
,
null
);
var
dialog
=
dialogDiv
(
this
,
template
,
options
.
bottom
);
var
closed
=
false
,
me
=
this
;
function
close
(
newVal
)
{
if
(
typeof
newVal
==
'
string
'
)
{
inp
.
value
=
newVal
;
}
else
{
if
(
closed
)
return
;
closed
=
true
;
CodeMirror
.
rmClass
(
dialog
.
parentNode
,
'
dialog-opened
'
);
dialog
.
parentNode
.
removeChild
(
dialog
);
me
.
focus
();
if
(
options
.
onClose
)
options
.
onClose
(
dialog
);
}
}
var
inp
=
dialog
.
getElementsByTagName
(
"
input
"
)[
0
],
button
;
if
(
inp
)
{
inp
.
focus
();
if
(
options
.
value
)
{
inp
.
value
=
options
.
value
;
if
(
options
.
selectValueOnOpen
!==
false
)
{
inp
.
select
();
}
}
if
(
options
.
onInput
)
CodeMirror
.
on
(
inp
,
"
input
"
,
function
(
e
)
{
options
.
onInput
(
e
,
inp
.
value
,
close
);});
if
(
options
.
onKeyUp
)
CodeMirror
.
on
(
inp
,
"
keyup
"
,
function
(
e
)
{
options
.
onKeyUp
(
e
,
inp
.
value
,
close
);});
CodeMirror
.
on
(
inp
,
"
keydown
"
,
function
(
e
)
{
if
(
options
&&
options
.
onKeyDown
&&
options
.
onKeyDown
(
e
,
inp
.
value
,
close
))
{
return
;
}
if
(
e
.
keyCode
==
27
||
(
options
.
closeOnEnter
!==
false
&&
e
.
keyCode
==
13
))
{
inp
.
blur
();
CodeMirror
.
e_stop
(
e
);
close
();
}
if
(
e
.
keyCode
==
13
)
callback
(
inp
.
value
,
e
);
});
if
(
options
.
closeOnBlur
!==
false
)
CodeMirror
.
on
(
inp
,
"
blur
"
,
close
);
}
else
if
(
button
=
dialog
.
getElementsByTagName
(
"
button
"
)[
0
])
{
CodeMirror
.
on
(
button
,
"
click
"
,
function
()
{
close
();
me
.
focus
();
});
if
(
options
.
closeOnBlur
!==
false
)
CodeMirror
.
on
(
button
,
"
blur
"
,
close
);
button
.
focus
();
}
return
close
;
});
CodeMirror
.
defineExtension
(
"
openConfirm
"
,
function
(
template
,
callbacks
,
options
)
{
closeNotification
(
this
,
null
);
var
dialog
=
dialogDiv
(
this
,
template
,
options
&&
options
.
bottom
);
var
buttons
=
dialog
.
getElementsByTagName
(
"
button
"
);
var
closed
=
false
,
me
=
this
,
blurring
=
1
;
function
close
()
{
if
(
closed
)
return
;
closed
=
true
;
CodeMirror
.
rmClass
(
dialog
.
parentNode
,
'
dialog-opened
'
);
dialog
.
parentNode
.
removeChild
(
dialog
);
me
.
focus
();
}
buttons
[
0
].
focus
();
for
(
var
i
=
0
;
i
<
buttons
.
length
;
++
i
)
{
var
b
=
buttons
[
i
];
(
function
(
callback
)
{
CodeMirror
.
on
(
b
,
"
click
"
,
function
(
e
)
{
CodeMirror
.
e_preventDefault
(
e
);
close
();
if
(
callback
)
callback
(
me
);
});
})(
callbacks
[
i
]);
CodeMirror
.
on
(
b
,
"
blur
"
,
function
()
{
--
blurring
;
setTimeout
(
function
()
{
if
(
blurring
<=
0
)
close
();
},
200
);
});
CodeMirror
.
on
(
b
,
"
focus
"
,
function
()
{
++
blurring
;
});
}
});
/*
* openNotification
* Opens a notification, that can be closed with an optional timer
* (default 5000ms timer) and always closes on click.
*
* If a notification is opened while another is opened, it will close the
* currently opened one and open the new one immediately.
*/
CodeMirror
.
defineExtension
(
"
openNotification
"
,
function
(
template
,
options
)
{
closeNotification
(
this
,
close
);
var
dialog
=
dialogDiv
(
this
,
template
,
options
&&
options
.
bottom
);
var
closed
=
false
,
doneTimer
;
var
duration
=
options
&&
typeof
options
.
duration
!==
"
undefined
"
?
options
.
duration
:
5000
;
function
close
()
{
if
(
closed
)
return
;
closed
=
true
;
clearTimeout
(
doneTimer
);
CodeMirror
.
rmClass
(
dialog
.
parentNode
,
'
dialog-opened
'
);
dialog
.
parentNode
.
removeChild
(
dialog
);
}
CodeMirror
.
on
(
dialog
,
'
click
'
,
function
(
e
)
{
CodeMirror
.
e_preventDefault
(
e
);
close
();
});
if
(
duration
)
doneTimer
=
setTimeout
(
close
,
duration
);
return
close
;
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/display/autorefresh.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
))
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
)
else
// Plain browser env
mod
(
CodeMirror
)
})(
function
(
CodeMirror
)
{
"
use strict
"
CodeMirror
.
defineOption
(
"
autoRefresh
"
,
false
,
function
(
cm
,
val
)
{
if
(
cm
.
state
.
autoRefresh
)
{
stopListening
(
cm
,
cm
.
state
.
autoRefresh
)
cm
.
state
.
autoRefresh
=
null
}
if
(
val
&&
cm
.
display
.
wrapper
.
offsetHeight
==
0
)
startListening
(
cm
,
cm
.
state
.
autoRefresh
=
{
delay
:
val
.
delay
||
250
})
})
function
startListening
(
cm
,
state
)
{
function
check
()
{
if
(
cm
.
display
.
wrapper
.
offsetHeight
)
{
stopListening
(
cm
,
state
)
if
(
cm
.
display
.
lastWrapHeight
!=
cm
.
display
.
wrapper
.
clientHeight
)
cm
.
refresh
()
}
else
{
state
.
timeout
=
setTimeout
(
check
,
state
.
delay
)
}
}
state
.
timeout
=
setTimeout
(
check
,
state
.
delay
)
state
.
hurry
=
function
()
{
clearTimeout
(
state
.
timeout
)
state
.
timeout
=
setTimeout
(
check
,
50
)
}
CodeMirror
.
on
(
window
,
"
mouseup
"
,
state
.
hurry
)
CodeMirror
.
on
(
window
,
"
keyup
"
,
state
.
hurry
)
}
function
stopListening
(
_cm
,
state
)
{
clearTimeout
(
state
.
timeout
)
CodeMirror
.
off
(
window
,
"
mouseup
"
,
state
.
hurry
)
CodeMirror
.
off
(
window
,
"
keyup
"
,
state
.
hurry
)
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/display/fullscreen.css
0 → 100644
View file @
53f587bc
.CodeMirror-fullscreen
{
position
:
fixed
;
top
:
0
;
left
:
0
;
right
:
0
;
bottom
:
0
;
height
:
auto
;
z-index
:
9
;
}
src/main/webapp/static/plugins/codemirror/5.48.4/addon/display/fullscreen.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineOption
(
"
fullScreen
"
,
false
,
function
(
cm
,
val
,
old
)
{
if
(
old
==
CodeMirror
.
Init
)
old
=
false
;
if
(
!
old
==
!
val
)
return
;
if
(
val
)
setFullscreen
(
cm
);
else
setNormal
(
cm
);
});
function
setFullscreen
(
cm
)
{
var
wrap
=
cm
.
getWrapperElement
();
cm
.
state
.
fullScreenRestore
=
{
scrollTop
:
window
.
pageYOffset
,
scrollLeft
:
window
.
pageXOffset
,
width
:
wrap
.
style
.
width
,
height
:
wrap
.
style
.
height
};
wrap
.
style
.
width
=
""
;
wrap
.
style
.
height
=
"
auto
"
;
wrap
.
className
+=
"
CodeMirror-fullscreen
"
;
document
.
documentElement
.
style
.
overflow
=
"
hidden
"
;
cm
.
refresh
();
}
function
setNormal
(
cm
)
{
var
wrap
=
cm
.
getWrapperElement
();
wrap
.
className
=
wrap
.
className
.
replace
(
/
\s
*CodeMirror-fullscreen
\b
/
,
""
);
document
.
documentElement
.
style
.
overflow
=
""
;
var
info
=
cm
.
state
.
fullScreenRestore
;
wrap
.
style
.
width
=
info
.
width
;
wrap
.
style
.
height
=
info
.
height
;
window
.
scrollTo
(
info
.
scrollLeft
,
info
.
scrollTop
);
cm
.
refresh
();
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/display/panel.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
CodeMirror
.
defineExtension
(
"
addPanel
"
,
function
(
node
,
options
)
{
options
=
options
||
{};
if
(
!
this
.
state
.
panels
)
initPanels
(
this
);
var
info
=
this
.
state
.
panels
;
var
wrapper
=
info
.
wrapper
;
var
cmWrapper
=
this
.
getWrapperElement
();
var
replace
=
options
.
replace
instanceof
Panel
&&
!
options
.
replace
.
cleared
;
if
(
options
.
after
instanceof
Panel
&&
!
options
.
after
.
cleared
)
{
wrapper
.
insertBefore
(
node
,
options
.
before
.
node
.
nextSibling
);
}
else
if
(
options
.
before
instanceof
Panel
&&
!
options
.
before
.
cleared
)
{
wrapper
.
insertBefore
(
node
,
options
.
before
.
node
);
}
else
if
(
replace
)
{
wrapper
.
insertBefore
(
node
,
options
.
replace
.
node
);
info
.
panels
++
;
options
.
replace
.
clear
();
}
else
if
(
options
.
position
==
"
bottom
"
)
{
wrapper
.
appendChild
(
node
);
}
else
if
(
options
.
position
==
"
before-bottom
"
)
{
wrapper
.
insertBefore
(
node
,
cmWrapper
.
nextSibling
);
}
else
if
(
options
.
position
==
"
after-top
"
)
{
wrapper
.
insertBefore
(
node
,
cmWrapper
);
}
else
{
wrapper
.
insertBefore
(
node
,
wrapper
.
firstChild
);
}
var
height
=
(
options
&&
options
.
height
)
||
node
.
offsetHeight
;
this
.
_setSize
(
null
,
info
.
heightLeft
-=
height
);
if
(
!
replace
)
{
info
.
panels
++
;
}
if
(
options
.
stable
&&
isAtTop
(
this
,
node
))
this
.
scrollTo
(
null
,
this
.
getScrollInfo
().
top
+
height
)
return
new
Panel
(
this
,
node
,
options
,
height
);
});
function
Panel
(
cm
,
node
,
options
,
height
)
{
this
.
cm
=
cm
;
this
.
node
=
node
;
this
.
options
=
options
;
this
.
height
=
height
;
this
.
cleared
=
false
;
}
Panel
.
prototype
.
clear
=
function
()
{
if
(
this
.
cleared
)
return
;
this
.
cleared
=
true
;
var
info
=
this
.
cm
.
state
.
panels
;
this
.
cm
.
_setSize
(
null
,
info
.
heightLeft
+=
this
.
height
);
if
(
this
.
options
.
stable
&&
isAtTop
(
this
.
cm
,
this
.
node
))
this
.
cm
.
scrollTo
(
null
,
this
.
cm
.
getScrollInfo
().
top
-
this
.
height
)
info
.
wrapper
.
removeChild
(
this
.
node
);
if
(
--
info
.
panels
==
0
)
removePanels
(
this
.
cm
);
};
Panel
.
prototype
.
changed
=
function
(
height
)
{
var
newHeight
=
height
==
null
?
this
.
node
.
offsetHeight
:
height
;
var
info
=
this
.
cm
.
state
.
panels
;
this
.
cm
.
_setSize
(
null
,
info
.
heightLeft
-=
(
newHeight
-
this
.
height
));
this
.
height
=
newHeight
;
};
function
initPanels
(
cm
)
{
var
wrap
=
cm
.
getWrapperElement
();
var
style
=
window
.
getComputedStyle
?
window
.
getComputedStyle
(
wrap
)
:
wrap
.
currentStyle
;
var
height
=
parseInt
(
style
.
height
);
var
info
=
cm
.
state
.
panels
=
{
setHeight
:
wrap
.
style
.
height
,
heightLeft
:
height
,
panels
:
0
,
wrapper
:
document
.
createElement
(
"
div
"
)
};
wrap
.
parentNode
.
insertBefore
(
info
.
wrapper
,
wrap
);
var
hasFocus
=
cm
.
hasFocus
();
info
.
wrapper
.
appendChild
(
wrap
);
if
(
hasFocus
)
cm
.
focus
();
cm
.
_setSize
=
cm
.
setSize
;
if
(
height
!=
null
)
cm
.
setSize
=
function
(
width
,
newHeight
)
{
if
(
newHeight
==
null
)
return
this
.
_setSize
(
width
,
newHeight
);
info
.
setHeight
=
newHeight
;
if
(
typeof
newHeight
!=
"
number
"
)
{
var
px
=
/^
(\d
+
\.?\d
*
)
px$/
.
exec
(
newHeight
);
if
(
px
)
{
newHeight
=
Number
(
px
[
1
]);
}
else
{
info
.
wrapper
.
style
.
height
=
newHeight
;
newHeight
=
info
.
wrapper
.
offsetHeight
;
info
.
wrapper
.
style
.
height
=
""
;
}
}
cm
.
_setSize
(
width
,
info
.
heightLeft
+=
(
newHeight
-
height
));
height
=
newHeight
;
};
}
function
removePanels
(
cm
)
{
var
info
=
cm
.
state
.
panels
;
cm
.
state
.
panels
=
null
;
var
wrap
=
cm
.
getWrapperElement
();
info
.
wrapper
.
parentNode
.
replaceChild
(
wrap
,
info
.
wrapper
);
wrap
.
style
.
height
=
info
.
setHeight
;
cm
.
setSize
=
cm
.
_setSize
;
cm
.
setSize
();
}
function
isAtTop
(
cm
,
dom
)
{
for
(
var
sibling
=
dom
.
nextSibling
;
sibling
;
sibling
=
sibling
.
nextSibling
)
if
(
sibling
==
cm
.
getWrapperElement
())
return
true
return
false
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/display/placeholder.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
CodeMirror
.
defineOption
(
"
placeholder
"
,
""
,
function
(
cm
,
val
,
old
)
{
var
prev
=
old
&&
old
!=
CodeMirror
.
Init
;
if
(
val
&&
!
prev
)
{
cm
.
on
(
"
blur
"
,
onBlur
);
cm
.
on
(
"
change
"
,
onChange
);
cm
.
on
(
"
swapDoc
"
,
onChange
);
onChange
(
cm
);
}
else
if
(
!
val
&&
prev
)
{
cm
.
off
(
"
blur
"
,
onBlur
);
cm
.
off
(
"
change
"
,
onChange
);
cm
.
off
(
"
swapDoc
"
,
onChange
);
clearPlaceholder
(
cm
);
var
wrapper
=
cm
.
getWrapperElement
();
wrapper
.
className
=
wrapper
.
className
.
replace
(
"
CodeMirror-empty
"
,
""
);
}
if
(
val
&&
!
cm
.
hasFocus
())
onBlur
(
cm
);
});
function
clearPlaceholder
(
cm
)
{
if
(
cm
.
state
.
placeholder
)
{
cm
.
state
.
placeholder
.
parentNode
.
removeChild
(
cm
.
state
.
placeholder
);
cm
.
state
.
placeholder
=
null
;
}
}
function
setPlaceholder
(
cm
)
{
clearPlaceholder
(
cm
);
var
elt
=
cm
.
state
.
placeholder
=
document
.
createElement
(
"
pre
"
);
elt
.
style
.
cssText
=
"
height: 0; overflow: visible
"
;
elt
.
style
.
direction
=
cm
.
getOption
(
"
direction
"
);
elt
.
className
=
"
CodeMirror-placeholder CodeMirror-line-like
"
;
var
placeHolder
=
cm
.
getOption
(
"
placeholder
"
)
if
(
typeof
placeHolder
==
"
string
"
)
placeHolder
=
document
.
createTextNode
(
placeHolder
)
elt
.
appendChild
(
placeHolder
)
cm
.
display
.
lineSpace
.
insertBefore
(
elt
,
cm
.
display
.
lineSpace
.
firstChild
);
}
function
onBlur
(
cm
)
{
if
(
isEmpty
(
cm
))
setPlaceholder
(
cm
);
}
function
onChange
(
cm
)
{
var
wrapper
=
cm
.
getWrapperElement
(),
empty
=
isEmpty
(
cm
);
wrapper
.
className
=
wrapper
.
className
.
replace
(
"
CodeMirror-empty
"
,
""
)
+
(
empty
?
"
CodeMirror-empty
"
:
""
);
if
(
empty
)
setPlaceholder
(
cm
);
else
clearPlaceholder
(
cm
);
}
function
isEmpty
(
cm
)
{
return
(
cm
.
lineCount
()
===
1
)
&&
(
cm
.
getLine
(
0
)
===
""
);
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/display/rulers.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineOption
(
"
rulers
"
,
false
,
function
(
cm
,
val
)
{
if
(
cm
.
state
.
rulerDiv
)
{
cm
.
state
.
rulerDiv
.
parentElement
.
removeChild
(
cm
.
state
.
rulerDiv
)
cm
.
state
.
rulerDiv
=
null
cm
.
off
(
"
refresh
"
,
drawRulers
)
}
if
(
val
&&
val
.
length
)
{
cm
.
state
.
rulerDiv
=
cm
.
display
.
lineSpace
.
parentElement
.
insertBefore
(
document
.
createElement
(
"
div
"
),
cm
.
display
.
lineSpace
)
cm
.
state
.
rulerDiv
.
className
=
"
CodeMirror-rulers
"
drawRulers
(
cm
)
cm
.
on
(
"
refresh
"
,
drawRulers
)
}
});
function
drawRulers
(
cm
)
{
cm
.
state
.
rulerDiv
.
textContent
=
""
var
val
=
cm
.
getOption
(
"
rulers
"
);
var
cw
=
cm
.
defaultCharWidth
();
var
left
=
cm
.
charCoords
(
CodeMirror
.
Pos
(
cm
.
firstLine
(),
0
),
"
div
"
).
left
;
cm
.
state
.
rulerDiv
.
style
.
minHeight
=
(
cm
.
display
.
scroller
.
offsetHeight
+
30
)
+
"
px
"
;
for
(
var
i
=
0
;
i
<
val
.
length
;
i
++
)
{
var
elt
=
document
.
createElement
(
"
div
"
);
elt
.
className
=
"
CodeMirror-ruler
"
;
var
col
,
conf
=
val
[
i
];
if
(
typeof
conf
==
"
number
"
)
{
col
=
conf
;
}
else
{
col
=
conf
.
column
;
if
(
conf
.
className
)
elt
.
className
+=
"
"
+
conf
.
className
;
if
(
conf
.
color
)
elt
.
style
.
borderColor
=
conf
.
color
;
if
(
conf
.
lineStyle
)
elt
.
style
.
borderLeftStyle
=
conf
.
lineStyle
;
if
(
conf
.
width
)
elt
.
style
.
borderLeftWidth
=
conf
.
width
;
}
elt
.
style
.
left
=
(
left
+
col
*
cw
)
+
"
px
"
;
cm
.
state
.
rulerDiv
.
appendChild
(
elt
)
}
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/edit/closebrackets.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
var
defaults
=
{
pairs
:
"
()[]{}''
\"\"
"
,
closeBefore
:
"
)]}'
\"
:;>
"
,
triples
:
""
,
explode
:
"
[]{}
"
};
var
Pos
=
CodeMirror
.
Pos
;
CodeMirror
.
defineOption
(
"
autoCloseBrackets
"
,
false
,
function
(
cm
,
val
,
old
)
{
if
(
old
&&
old
!=
CodeMirror
.
Init
)
{
cm
.
removeKeyMap
(
keyMap
);
cm
.
state
.
closeBrackets
=
null
;
}
if
(
val
)
{
ensureBound
(
getOption
(
val
,
"
pairs
"
))
cm
.
state
.
closeBrackets
=
val
;
cm
.
addKeyMap
(
keyMap
);
}
});
function
getOption
(
conf
,
name
)
{
if
(
name
==
"
pairs
"
&&
typeof
conf
==
"
string
"
)
return
conf
;
if
(
typeof
conf
==
"
object
"
&&
conf
[
name
]
!=
null
)
return
conf
[
name
];
return
defaults
[
name
];
}
var
keyMap
=
{
Backspace
:
handleBackspace
,
Enter
:
handleEnter
};
function
ensureBound
(
chars
)
{
for
(
var
i
=
0
;
i
<
chars
.
length
;
i
++
)
{
var
ch
=
chars
.
charAt
(
i
),
key
=
"
'
"
+
ch
+
"
'
"
if
(
!
keyMap
[
key
])
keyMap
[
key
]
=
handler
(
ch
)
}
}
ensureBound
(
defaults
.
pairs
+
"
`
"
)
function
handler
(
ch
)
{
return
function
(
cm
)
{
return
handleChar
(
cm
,
ch
);
};
}
function
getConfig
(
cm
)
{
var
deflt
=
cm
.
state
.
closeBrackets
;
if
(
!
deflt
||
deflt
.
override
)
return
deflt
;
var
mode
=
cm
.
getModeAt
(
cm
.
getCursor
());
return
mode
.
closeBrackets
||
deflt
;
}
function
handleBackspace
(
cm
)
{
var
conf
=
getConfig
(
cm
);
if
(
!
conf
||
cm
.
getOption
(
"
disableInput
"
))
return
CodeMirror
.
Pass
;
var
pairs
=
getOption
(
conf
,
"
pairs
"
);
var
ranges
=
cm
.
listSelections
();
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
if
(
!
ranges
[
i
].
empty
())
return
CodeMirror
.
Pass
;
var
around
=
charsAround
(
cm
,
ranges
[
i
].
head
);
if
(
!
around
||
pairs
.
indexOf
(
around
)
%
2
!=
0
)
return
CodeMirror
.
Pass
;
}
for
(
var
i
=
ranges
.
length
-
1
;
i
>=
0
;
i
--
)
{
var
cur
=
ranges
[
i
].
head
;
cm
.
replaceRange
(
""
,
Pos
(
cur
.
line
,
cur
.
ch
-
1
),
Pos
(
cur
.
line
,
cur
.
ch
+
1
),
"
+delete
"
);
}
}
function
handleEnter
(
cm
)
{
var
conf
=
getConfig
(
cm
);
var
explode
=
conf
&&
getOption
(
conf
,
"
explode
"
);
if
(
!
explode
||
cm
.
getOption
(
"
disableInput
"
))
return
CodeMirror
.
Pass
;
var
ranges
=
cm
.
listSelections
();
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
if
(
!
ranges
[
i
].
empty
())
return
CodeMirror
.
Pass
;
var
around
=
charsAround
(
cm
,
ranges
[
i
].
head
);
if
(
!
around
||
explode
.
indexOf
(
around
)
%
2
!=
0
)
return
CodeMirror
.
Pass
;
}
cm
.
operation
(
function
()
{
var
linesep
=
cm
.
lineSeparator
()
||
"
\n
"
;
cm
.
replaceSelection
(
linesep
+
linesep
,
null
);
cm
.
execCommand
(
"
goCharLeft
"
);
ranges
=
cm
.
listSelections
();
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
var
line
=
ranges
[
i
].
head
.
line
;
cm
.
indentLine
(
line
,
null
,
true
);
cm
.
indentLine
(
line
+
1
,
null
,
true
);
}
});
}
function
contractSelection
(
sel
)
{
var
inverted
=
CodeMirror
.
cmpPos
(
sel
.
anchor
,
sel
.
head
)
>
0
;
return
{
anchor
:
new
Pos
(
sel
.
anchor
.
line
,
sel
.
anchor
.
ch
+
(
inverted
?
-
1
:
1
)),
head
:
new
Pos
(
sel
.
head
.
line
,
sel
.
head
.
ch
+
(
inverted
?
1
:
-
1
))};
}
function
handleChar
(
cm
,
ch
)
{
var
conf
=
getConfig
(
cm
);
if
(
!
conf
||
cm
.
getOption
(
"
disableInput
"
))
return
CodeMirror
.
Pass
;
var
pairs
=
getOption
(
conf
,
"
pairs
"
);
var
pos
=
pairs
.
indexOf
(
ch
);
if
(
pos
==
-
1
)
return
CodeMirror
.
Pass
;
var
closeBefore
=
getOption
(
conf
,
"
closeBefore
"
);
var
triples
=
getOption
(
conf
,
"
triples
"
);
var
identical
=
pairs
.
charAt
(
pos
+
1
)
==
ch
;
var
ranges
=
cm
.
listSelections
();
var
opening
=
pos
%
2
==
0
;
var
type
;
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
var
range
=
ranges
[
i
],
cur
=
range
.
head
,
curType
;
var
next
=
cm
.
getRange
(
cur
,
Pos
(
cur
.
line
,
cur
.
ch
+
1
));
if
(
opening
&&
!
range
.
empty
())
{
curType
=
"
surround
"
;
}
else
if
((
identical
||
!
opening
)
&&
next
==
ch
)
{
if
(
identical
&&
stringStartsAfter
(
cm
,
cur
))
curType
=
"
both
"
;
else
if
(
triples
.
indexOf
(
ch
)
>=
0
&&
cm
.
getRange
(
cur
,
Pos
(
cur
.
line
,
cur
.
ch
+
3
))
==
ch
+
ch
+
ch
)
curType
=
"
skipThree
"
;
else
curType
=
"
skip
"
;
}
else
if
(
identical
&&
cur
.
ch
>
1
&&
triples
.
indexOf
(
ch
)
>=
0
&&
cm
.
getRange
(
Pos
(
cur
.
line
,
cur
.
ch
-
2
),
cur
)
==
ch
+
ch
)
{
if
(
cur
.
ch
>
2
&&
/
\b
string/
.
test
(
cm
.
getTokenTypeAt
(
Pos
(
cur
.
line
,
cur
.
ch
-
2
))))
return
CodeMirror
.
Pass
;
curType
=
"
addFour
"
;
}
else
if
(
identical
)
{
var
prev
=
cur
.
ch
==
0
?
"
"
:
cm
.
getRange
(
Pos
(
cur
.
line
,
cur
.
ch
-
1
),
cur
)
if
(
!
CodeMirror
.
isWordChar
(
next
)
&&
prev
!=
ch
&&
!
CodeMirror
.
isWordChar
(
prev
))
curType
=
"
both
"
;
else
return
CodeMirror
.
Pass
;
}
else
if
(
opening
&&
(
next
.
length
===
0
||
/
\s
/
.
test
(
next
)
||
closeBefore
.
indexOf
(
next
)
>
-
1
))
{
curType
=
"
both
"
;
}
else
{
return
CodeMirror
.
Pass
;
}
if
(
!
type
)
type
=
curType
;
else
if
(
type
!=
curType
)
return
CodeMirror
.
Pass
;
}
var
left
=
pos
%
2
?
pairs
.
charAt
(
pos
-
1
)
:
ch
;
var
right
=
pos
%
2
?
ch
:
pairs
.
charAt
(
pos
+
1
);
cm
.
operation
(
function
()
{
if
(
type
==
"
skip
"
)
{
cm
.
execCommand
(
"
goCharRight
"
);
}
else
if
(
type
==
"
skipThree
"
)
{
for
(
var
i
=
0
;
i
<
3
;
i
++
)
cm
.
execCommand
(
"
goCharRight
"
);
}
else
if
(
type
==
"
surround
"
)
{
var
sels
=
cm
.
getSelections
();
for
(
var
i
=
0
;
i
<
sels
.
length
;
i
++
)
sels
[
i
]
=
left
+
sels
[
i
]
+
right
;
cm
.
replaceSelections
(
sels
,
"
around
"
);
sels
=
cm
.
listSelections
().
slice
();
for
(
var
i
=
0
;
i
<
sels
.
length
;
i
++
)
sels
[
i
]
=
contractSelection
(
sels
[
i
]);
cm
.
setSelections
(
sels
);
}
else
if
(
type
==
"
both
"
)
{
cm
.
replaceSelection
(
left
+
right
,
null
);
cm
.
triggerElectric
(
left
+
right
);
cm
.
execCommand
(
"
goCharLeft
"
);
}
else
if
(
type
==
"
addFour
"
)
{
cm
.
replaceSelection
(
left
+
left
+
left
+
left
,
"
before
"
);
cm
.
execCommand
(
"
goCharRight
"
);
}
});
}
function
charsAround
(
cm
,
pos
)
{
var
str
=
cm
.
getRange
(
Pos
(
pos
.
line
,
pos
.
ch
-
1
),
Pos
(
pos
.
line
,
pos
.
ch
+
1
));
return
str
.
length
==
2
?
str
:
null
;
}
function
stringStartsAfter
(
cm
,
pos
)
{
var
token
=
cm
.
getTokenAt
(
Pos
(
pos
.
line
,
pos
.
ch
+
1
))
return
/
\b
string/
.
test
(
token
.
type
)
&&
token
.
start
==
pos
.
ch
&&
(
pos
.
ch
==
0
||
!
/
\b
string/
.
test
(
cm
.
getTokenTypeAt
(
pos
)))
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/edit/closetag.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
/**
* Tag-closer extension for CodeMirror.
*
* This extension adds an "autoCloseTags" option that can be set to
* either true to get the default behavior, or an object to further
* configure its behavior.
*
* These are supported options:
*
* `whenClosing` (default true)
* Whether to autoclose when the '/' of a closing tag is typed.
* `whenOpening` (default true)
* Whether to autoclose the tag when the final '>' of an opening
* tag is typed.
* `dontCloseTags` (default is empty tags for HTML, none for XML)
* An array of tag names that should not be autoclosed.
* `indentTags` (default is block tags for HTML, none for XML)
* An array of tag names that should, when opened, cause a
* blank line to be added inside the tag, and the blank line and
* closing line to be indented.
* `emptyTags` (default is none)
* An array of XML tag names that should be autoclosed with '/>'.
*
* See demos/closetag.html for a usage example.
*/
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
),
require
(
"
../fold/xml-fold
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
,
"
../fold/xml-fold
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
CodeMirror
.
defineOption
(
"
autoCloseTags
"
,
false
,
function
(
cm
,
val
,
old
)
{
if
(
old
!=
CodeMirror
.
Init
&&
old
)
cm
.
removeKeyMap
(
"
autoCloseTags
"
);
if
(
!
val
)
return
;
var
map
=
{
name
:
"
autoCloseTags
"
};
if
(
typeof
val
!=
"
object
"
||
val
.
whenClosing
)
map
[
"
'/'
"
]
=
function
(
cm
)
{
return
autoCloseSlash
(
cm
);
};
if
(
typeof
val
!=
"
object
"
||
val
.
whenOpening
)
map
[
"
'>'
"
]
=
function
(
cm
)
{
return
autoCloseGT
(
cm
);
};
cm
.
addKeyMap
(
map
);
});
var
htmlDontClose
=
[
"
area
"
,
"
base
"
,
"
br
"
,
"
col
"
,
"
command
"
,
"
embed
"
,
"
hr
"
,
"
img
"
,
"
input
"
,
"
keygen
"
,
"
link
"
,
"
meta
"
,
"
param
"
,
"
source
"
,
"
track
"
,
"
wbr
"
];
var
htmlIndent
=
[
"
applet
"
,
"
blockquote
"
,
"
body
"
,
"
button
"
,
"
div
"
,
"
dl
"
,
"
fieldset
"
,
"
form
"
,
"
frameset
"
,
"
h1
"
,
"
h2
"
,
"
h3
"
,
"
h4
"
,
"
h5
"
,
"
h6
"
,
"
head
"
,
"
html
"
,
"
iframe
"
,
"
layer
"
,
"
legend
"
,
"
object
"
,
"
ol
"
,
"
p
"
,
"
select
"
,
"
table
"
,
"
ul
"
];
function
autoCloseGT
(
cm
)
{
if
(
cm
.
getOption
(
"
disableInput
"
))
return
CodeMirror
.
Pass
;
var
ranges
=
cm
.
listSelections
(),
replacements
=
[];
var
opt
=
cm
.
getOption
(
"
autoCloseTags
"
);
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
if
(
!
ranges
[
i
].
empty
())
return
CodeMirror
.
Pass
;
var
pos
=
ranges
[
i
].
head
,
tok
=
cm
.
getTokenAt
(
pos
);
var
inner
=
CodeMirror
.
innerMode
(
cm
.
getMode
(),
tok
.
state
),
state
=
inner
.
state
;
if
(
inner
.
mode
.
name
!=
"
xml
"
||
!
state
.
tagName
)
return
CodeMirror
.
Pass
;
var
html
=
inner
.
mode
.
configuration
==
"
html
"
;
var
dontCloseTags
=
(
typeof
opt
==
"
object
"
&&
opt
.
dontCloseTags
)
||
(
html
&&
htmlDontClose
);
var
indentTags
=
(
typeof
opt
==
"
object
"
&&
opt
.
indentTags
)
||
(
html
&&
htmlIndent
);
var
tagName
=
state
.
tagName
;
if
(
tok
.
end
>
pos
.
ch
)
tagName
=
tagName
.
slice
(
0
,
tagName
.
length
-
tok
.
end
+
pos
.
ch
);
var
lowerTagName
=
tagName
.
toLowerCase
();
// Don't process the '>' at the end of an end-tag or self-closing tag
if
(
!
tagName
||
tok
.
type
==
"
string
"
&&
(
tok
.
end
!=
pos
.
ch
||
!
/
[\"\']
/
.
test
(
tok
.
string
.
charAt
(
tok
.
string
.
length
-
1
))
||
tok
.
string
.
length
==
1
)
||
tok
.
type
==
"
tag
"
&&
state
.
type
==
"
closeTag
"
||
tok
.
string
.
indexOf
(
"
/
"
)
==
(
tok
.
string
.
length
-
1
)
||
// match something like <someTagName />
dontCloseTags
&&
indexOf
(
dontCloseTags
,
lowerTagName
)
>
-
1
||
closingTagExists
(
cm
,
tagName
,
pos
,
state
,
true
))
return
CodeMirror
.
Pass
;
var
emptyTags
=
typeof
opt
==
"
object
"
&&
opt
.
emptyTags
;
if
(
emptyTags
&&
indexOf
(
emptyTags
,
tagName
)
>
-
1
)
{
replacements
[
i
]
=
{
text
:
"
/>
"
,
newPos
:
CodeMirror
.
Pos
(
pos
.
line
,
pos
.
ch
+
2
)
};
continue
;
}
var
indent
=
indentTags
&&
indexOf
(
indentTags
,
lowerTagName
)
>
-
1
;
replacements
[
i
]
=
{
indent
:
indent
,
text
:
"
>
"
+
(
indent
?
"
\n\n
"
:
""
)
+
"
</
"
+
tagName
+
"
>
"
,
newPos
:
indent
?
CodeMirror
.
Pos
(
pos
.
line
+
1
,
0
)
:
CodeMirror
.
Pos
(
pos
.
line
,
pos
.
ch
+
1
)};
}
var
dontIndentOnAutoClose
=
(
typeof
opt
==
"
object
"
&&
opt
.
dontIndentOnAutoClose
);
for
(
var
i
=
ranges
.
length
-
1
;
i
>=
0
;
i
--
)
{
var
info
=
replacements
[
i
];
cm
.
replaceRange
(
info
.
text
,
ranges
[
i
].
head
,
ranges
[
i
].
anchor
,
"
+insert
"
);
var
sel
=
cm
.
listSelections
().
slice
(
0
);
sel
[
i
]
=
{
head
:
info
.
newPos
,
anchor
:
info
.
newPos
};
cm
.
setSelections
(
sel
);
if
(
!
dontIndentOnAutoClose
&&
info
.
indent
)
{
cm
.
indentLine
(
info
.
newPos
.
line
,
null
,
true
);
cm
.
indentLine
(
info
.
newPos
.
line
+
1
,
null
,
true
);
}
}
}
function
autoCloseCurrent
(
cm
,
typingSlash
)
{
var
ranges
=
cm
.
listSelections
(),
replacements
=
[];
var
head
=
typingSlash
?
"
/
"
:
"
</
"
;
var
opt
=
cm
.
getOption
(
"
autoCloseTags
"
);
var
dontIndentOnAutoClose
=
(
typeof
opt
==
"
object
"
&&
opt
.
dontIndentOnSlash
);
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
if
(
!
ranges
[
i
].
empty
())
return
CodeMirror
.
Pass
;
var
pos
=
ranges
[
i
].
head
,
tok
=
cm
.
getTokenAt
(
pos
);
var
inner
=
CodeMirror
.
innerMode
(
cm
.
getMode
(),
tok
.
state
),
state
=
inner
.
state
;
if
(
typingSlash
&&
(
tok
.
type
==
"
string
"
||
tok
.
string
.
charAt
(
0
)
!=
"
<
"
||
tok
.
start
!=
pos
.
ch
-
1
))
return
CodeMirror
.
Pass
;
// Kludge to get around the fact that we are not in XML mode
// when completing in JS/CSS snippet in htmlmixed mode. Does not
// work for other XML embedded languages (there is no general
// way to go from a mixed mode to its current XML state).
var
replacement
;
if
(
inner
.
mode
.
name
!=
"
xml
"
)
{
if
(
cm
.
getMode
().
name
==
"
htmlmixed
"
&&
inner
.
mode
.
name
==
"
javascript
"
)
replacement
=
head
+
"
script
"
;
else
if
(
cm
.
getMode
().
name
==
"
htmlmixed
"
&&
inner
.
mode
.
name
==
"
css
"
)
replacement
=
head
+
"
style
"
;
else
return
CodeMirror
.
Pass
;
}
else
{
if
(
!
state
.
context
||
!
state
.
context
.
tagName
||
closingTagExists
(
cm
,
state
.
context
.
tagName
,
pos
,
state
))
return
CodeMirror
.
Pass
;
replacement
=
head
+
state
.
context
.
tagName
;
}
if
(
cm
.
getLine
(
pos
.
line
).
charAt
(
tok
.
end
)
!=
"
>
"
)
replacement
+=
"
>
"
;
replacements
[
i
]
=
replacement
;
}
cm
.
replaceSelections
(
replacements
);
ranges
=
cm
.
listSelections
();
if
(
!
dontIndentOnAutoClose
)
{
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
if
(
i
==
ranges
.
length
-
1
||
ranges
[
i
].
head
.
line
<
ranges
[
i
+
1
].
head
.
line
)
cm
.
indentLine
(
ranges
[
i
].
head
.
line
);
}
}
function
autoCloseSlash
(
cm
)
{
if
(
cm
.
getOption
(
"
disableInput
"
))
return
CodeMirror
.
Pass
;
return
autoCloseCurrent
(
cm
,
true
);
}
CodeMirror
.
commands
.
closeTag
=
function
(
cm
)
{
return
autoCloseCurrent
(
cm
);
};
function
indexOf
(
collection
,
elt
)
{
if
(
collection
.
indexOf
)
return
collection
.
indexOf
(
elt
);
for
(
var
i
=
0
,
e
=
collection
.
length
;
i
<
e
;
++
i
)
if
(
collection
[
i
]
==
elt
)
return
i
;
return
-
1
;
}
// If xml-fold is loaded, we use its functionality to try and verify
// whether a given tag is actually unclosed.
function
closingTagExists
(
cm
,
tagName
,
pos
,
state
,
newTag
)
{
if
(
!
CodeMirror
.
scanForClosingTag
)
return
false
;
var
end
=
Math
.
min
(
cm
.
lastLine
()
+
1
,
pos
.
line
+
500
);
var
nextClose
=
CodeMirror
.
scanForClosingTag
(
cm
,
pos
,
null
,
end
);
if
(
!
nextClose
||
nextClose
.
tag
!=
tagName
)
return
false
;
var
cx
=
state
.
context
;
// If the immediate wrapping context contains onCx instances of
// the same tag, a closing tag only exists if there are at least
// that many closing tags of that type following.
for
(
var
onCx
=
newTag
?
1
:
0
;
cx
&&
cx
.
tagName
==
tagName
;
cx
=
cx
.
prev
)
++
onCx
;
pos
=
nextClose
.
to
;
for
(
var
i
=
1
;
i
<
onCx
;
i
++
)
{
var
next
=
CodeMirror
.
scanForClosingTag
(
cm
,
pos
,
null
,
end
);
if
(
!
next
||
next
.
tag
!=
tagName
)
return
false
;
pos
=
next
.
to
;
}
return
true
;
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/edit/continuelist.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
var
listRE
=
/^
(\s
*
)(
>
[
>
]
*|
[
*+-
]
\[[
x
]\]\s
|
[
*+-
]\s
|
(\d
+
)([
.)
]))(\s
*
)
/
,
emptyListRE
=
/^
(\s
*
)(
>
[
>
]
*|
[
*+-
]
\[[
x
]\]
|
[
*+-
]
|
(\d
+
)[
.)
])(\s
*
)
$/
,
unorderedListRE
=
/
[
*+-
]\s
/
;
CodeMirror
.
commands
.
newlineAndIndentContinueMarkdownList
=
function
(
cm
)
{
if
(
cm
.
getOption
(
"
disableInput
"
))
return
CodeMirror
.
Pass
;
var
ranges
=
cm
.
listSelections
(),
replacements
=
[];
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
var
pos
=
ranges
[
i
].
head
;
// If we're not in Markdown mode, fall back to normal newlineAndIndent
var
eolState
=
cm
.
getStateAfter
(
pos
.
line
);
var
inner
=
CodeMirror
.
innerMode
(
cm
.
getMode
(),
eolState
);
if
(
inner
.
mode
.
name
!==
"
markdown
"
)
{
cm
.
execCommand
(
"
newlineAndIndent
"
);
return
;
}
else
{
eolState
=
inner
.
state
;
}
var
inList
=
eolState
.
list
!==
false
;
var
inQuote
=
eolState
.
quote
!==
0
;
var
line
=
cm
.
getLine
(
pos
.
line
),
match
=
listRE
.
exec
(
line
);
var
cursorBeforeBullet
=
/^
\s
*$/
.
test
(
line
.
slice
(
0
,
pos
.
ch
));
if
(
!
ranges
[
i
].
empty
()
||
(
!
inList
&&
!
inQuote
)
||
!
match
||
cursorBeforeBullet
)
{
cm
.
execCommand
(
"
newlineAndIndent
"
);
return
;
}
if
(
emptyListRE
.
test
(
line
))
{
if
(
!
/>
\s
*$/
.
test
(
line
))
cm
.
replaceRange
(
""
,
{
line
:
pos
.
line
,
ch
:
0
},
{
line
:
pos
.
line
,
ch
:
pos
.
ch
+
1
});
replacements
[
i
]
=
"
\n
"
;
}
else
{
var
indent
=
match
[
1
],
after
=
match
[
5
];
var
numbered
=
!
(
unorderedListRE
.
test
(
match
[
2
])
||
match
[
2
].
indexOf
(
"
>
"
)
>=
0
);
var
bullet
=
numbered
?
(
parseInt
(
match
[
3
],
10
)
+
1
)
+
match
[
4
]
:
match
[
2
].
replace
(
"
x
"
,
"
"
);
replacements
[
i
]
=
"
\n
"
+
indent
+
bullet
+
after
;
if
(
numbered
)
incrementRemainingMarkdownListNumbers
(
cm
,
pos
);
}
}
cm
.
replaceSelections
(
replacements
);
};
// Auto-updating Markdown list numbers when a new item is added to the
// middle of a list
function
incrementRemainingMarkdownListNumbers
(
cm
,
pos
)
{
var
startLine
=
pos
.
line
,
lookAhead
=
0
,
skipCount
=
0
;
var
startItem
=
listRE
.
exec
(
cm
.
getLine
(
startLine
)),
startIndent
=
startItem
[
1
];
do
{
lookAhead
+=
1
;
var
nextLineNumber
=
startLine
+
lookAhead
;
var
nextLine
=
cm
.
getLine
(
nextLineNumber
),
nextItem
=
listRE
.
exec
(
nextLine
);
if
(
nextItem
)
{
var
nextIndent
=
nextItem
[
1
];
var
newNumber
=
(
parseInt
(
startItem
[
3
],
10
)
+
lookAhead
-
skipCount
);
var
nextNumber
=
(
parseInt
(
nextItem
[
3
],
10
)),
itemNumber
=
nextNumber
;
if
(
startIndent
===
nextIndent
&&
!
isNaN
(
nextNumber
))
{
if
(
newNumber
===
nextNumber
)
itemNumber
=
nextNumber
+
1
;
if
(
newNumber
>
nextNumber
)
itemNumber
=
newNumber
+
1
;
cm
.
replaceRange
(
nextLine
.
replace
(
listRE
,
nextIndent
+
itemNumber
+
nextItem
[
4
]
+
nextItem
[
5
]),
{
line
:
nextLineNumber
,
ch
:
0
},
{
line
:
nextLineNumber
,
ch
:
nextLine
.
length
});
}
else
{
if
(
startIndent
.
length
>
nextIndent
.
length
)
return
;
// This doesn't run if the next line immediatley indents, as it is
// not clear of the users intention (new indented item or same level)
if
((
startIndent
.
length
<
nextIndent
.
length
)
&&
(
lookAhead
===
1
))
return
;
skipCount
+=
1
;
}
}
}
while
(
nextItem
);
}
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/edit/matchbrackets.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
var
ie_lt8
=
/MSIE
\d
/
.
test
(
navigator
.
userAgent
)
&&
(
document
.
documentMode
==
null
||
document
.
documentMode
<
8
);
var
Pos
=
CodeMirror
.
Pos
;
var
matching
=
{
"
(
"
:
"
)>
"
,
"
)
"
:
"
(<
"
,
"
[
"
:
"
]>
"
,
"
]
"
:
"
[<
"
,
"
{
"
:
"
}>
"
,
"
}
"
:
"
{<
"
,
"
<
"
:
"
>>
"
,
"
>
"
:
"
<<
"
};
function
bracketRegex
(
config
)
{
return
config
&&
config
.
bracketRegex
||
/
[
(){}[
\]]
/
}
function
findMatchingBracket
(
cm
,
where
,
config
)
{
var
line
=
cm
.
getLineHandle
(
where
.
line
),
pos
=
where
.
ch
-
1
;
var
afterCursor
=
config
&&
config
.
afterCursor
if
(
afterCursor
==
null
)
afterCursor
=
/
(
^|
)
cm-fat-cursor
(
$|
)
/
.
test
(
cm
.
getWrapperElement
().
className
)
var
re
=
bracketRegex
(
config
)
// A cursor is defined as between two characters, but in in vim command mode
// (i.e. not insert mode), the cursor is visually represented as a
// highlighted box on top of the 2nd character. Otherwise, we allow matches
// from before or after the cursor.
var
match
=
(
!
afterCursor
&&
pos
>=
0
&&
re
.
test
(
line
.
text
.
charAt
(
pos
))
&&
matching
[
line
.
text
.
charAt
(
pos
)])
||
re
.
test
(
line
.
text
.
charAt
(
pos
+
1
))
&&
matching
[
line
.
text
.
charAt
(
++
pos
)];
if
(
!
match
)
return
null
;
var
dir
=
match
.
charAt
(
1
)
==
"
>
"
?
1
:
-
1
;
if
(
config
&&
config
.
strict
&&
(
dir
>
0
)
!=
(
pos
==
where
.
ch
))
return
null
;
var
style
=
cm
.
getTokenTypeAt
(
Pos
(
where
.
line
,
pos
+
1
));
var
found
=
scanForBracket
(
cm
,
Pos
(
where
.
line
,
pos
+
(
dir
>
0
?
1
:
0
)),
dir
,
style
||
null
,
config
);
if
(
found
==
null
)
return
null
;
return
{
from
:
Pos
(
where
.
line
,
pos
),
to
:
found
&&
found
.
pos
,
match
:
found
&&
found
.
ch
==
match
.
charAt
(
0
),
forward
:
dir
>
0
};
}
// bracketRegex is used to specify which type of bracket to scan
// should be a regexp, e.g. /[[\]]/
//
// Note: If "where" is on an open bracket, then this bracket is ignored.
//
// Returns false when no bracket was found, null when it reached
// maxScanLines and gave up
function
scanForBracket
(
cm
,
where
,
dir
,
style
,
config
)
{
var
maxScanLen
=
(
config
&&
config
.
maxScanLineLength
)
||
10000
;
var
maxScanLines
=
(
config
&&
config
.
maxScanLines
)
||
1000
;
var
stack
=
[];
var
re
=
bracketRegex
(
config
)
var
lineEnd
=
dir
>
0
?
Math
.
min
(
where
.
line
+
maxScanLines
,
cm
.
lastLine
()
+
1
)
:
Math
.
max
(
cm
.
firstLine
()
-
1
,
where
.
line
-
maxScanLines
);
for
(
var
lineNo
=
where
.
line
;
lineNo
!=
lineEnd
;
lineNo
+=
dir
)
{
var
line
=
cm
.
getLine
(
lineNo
);
if
(
!
line
)
continue
;
var
pos
=
dir
>
0
?
0
:
line
.
length
-
1
,
end
=
dir
>
0
?
line
.
length
:
-
1
;
if
(
line
.
length
>
maxScanLen
)
continue
;
if
(
lineNo
==
where
.
line
)
pos
=
where
.
ch
-
(
dir
<
0
?
1
:
0
);
for
(;
pos
!=
end
;
pos
+=
dir
)
{
var
ch
=
line
.
charAt
(
pos
);
if
(
re
.
test
(
ch
)
&&
(
style
===
undefined
||
cm
.
getTokenTypeAt
(
Pos
(
lineNo
,
pos
+
1
))
==
style
))
{
var
match
=
matching
[
ch
];
if
(
match
&&
(
match
.
charAt
(
1
)
==
"
>
"
)
==
(
dir
>
0
))
stack
.
push
(
ch
);
else
if
(
!
stack
.
length
)
return
{
pos
:
Pos
(
lineNo
,
pos
),
ch
:
ch
};
else
stack
.
pop
();
}
}
}
return
lineNo
-
dir
==
(
dir
>
0
?
cm
.
lastLine
()
:
cm
.
firstLine
())
?
false
:
null
;
}
function
matchBrackets
(
cm
,
autoclear
,
config
)
{
// Disable brace matching in long lines, since it'll cause hugely slow updates
var
maxHighlightLen
=
cm
.
state
.
matchBrackets
.
maxHighlightLineLength
||
1000
;
var
marks
=
[],
ranges
=
cm
.
listSelections
();
for
(
var
i
=
0
;
i
<
ranges
.
length
;
i
++
)
{
var
match
=
ranges
[
i
].
empty
()
&&
findMatchingBracket
(
cm
,
ranges
[
i
].
head
,
config
);
if
(
match
&&
cm
.
getLine
(
match
.
from
.
line
).
length
<=
maxHighlightLen
)
{
var
style
=
match
.
match
?
"
CodeMirror-matchingbracket
"
:
"
CodeMirror-nonmatchingbracket
"
;
marks
.
push
(
cm
.
markText
(
match
.
from
,
Pos
(
match
.
from
.
line
,
match
.
from
.
ch
+
1
),
{
className
:
style
}));
if
(
match
.
to
&&
cm
.
getLine
(
match
.
to
.
line
).
length
<=
maxHighlightLen
)
marks
.
push
(
cm
.
markText
(
match
.
to
,
Pos
(
match
.
to
.
line
,
match
.
to
.
ch
+
1
),
{
className
:
style
}));
}
}
if
(
marks
.
length
)
{
// Kludge to work around the IE bug from issue #1193, where text
// input stops going to the textare whever this fires.
if
(
ie_lt8
&&
cm
.
state
.
focused
)
cm
.
focus
();
var
clear
=
function
()
{
cm
.
operation
(
function
()
{
for
(
var
i
=
0
;
i
<
marks
.
length
;
i
++
)
marks
[
i
].
clear
();
});
};
if
(
autoclear
)
setTimeout
(
clear
,
800
);
else
return
clear
;
}
}
function
doMatchBrackets
(
cm
)
{
cm
.
operation
(
function
()
{
if
(
cm
.
state
.
matchBrackets
.
currentlyHighlighted
)
{
cm
.
state
.
matchBrackets
.
currentlyHighlighted
();
cm
.
state
.
matchBrackets
.
currentlyHighlighted
=
null
;
}
cm
.
state
.
matchBrackets
.
currentlyHighlighted
=
matchBrackets
(
cm
,
false
,
cm
.
state
.
matchBrackets
);
});
}
CodeMirror
.
defineOption
(
"
matchBrackets
"
,
false
,
function
(
cm
,
val
,
old
)
{
if
(
old
&&
old
!=
CodeMirror
.
Init
)
{
cm
.
off
(
"
cursorActivity
"
,
doMatchBrackets
);
if
(
cm
.
state
.
matchBrackets
&&
cm
.
state
.
matchBrackets
.
currentlyHighlighted
)
{
cm
.
state
.
matchBrackets
.
currentlyHighlighted
();
cm
.
state
.
matchBrackets
.
currentlyHighlighted
=
null
;
}
}
if
(
val
)
{
cm
.
state
.
matchBrackets
=
typeof
val
==
"
object
"
?
val
:
{};
cm
.
on
(
"
cursorActivity
"
,
doMatchBrackets
);
}
});
CodeMirror
.
defineExtension
(
"
matchBrackets
"
,
function
()
{
matchBrackets
(
this
,
true
);});
CodeMirror
.
defineExtension
(
"
findMatchingBracket
"
,
function
(
pos
,
config
,
oldConfig
){
// Backwards-compatibility kludge
if
(
oldConfig
||
typeof
config
==
"
boolean
"
)
{
if
(
!
oldConfig
)
{
config
=
config
?
{
strict
:
true
}
:
null
}
else
{
oldConfig
.
strict
=
config
config
=
oldConfig
}
}
return
findMatchingBracket
(
this
,
pos
,
config
)
});
CodeMirror
.
defineExtension
(
"
scanForBracket
"
,
function
(
pos
,
dir
,
style
,
config
){
return
scanForBracket
(
this
,
pos
,
dir
,
style
,
config
);
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/edit/matchtags.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
),
require
(
"
../fold/xml-fold
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
,
"
../fold/xml-fold
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineOption
(
"
matchTags
"
,
false
,
function
(
cm
,
val
,
old
)
{
if
(
old
&&
old
!=
CodeMirror
.
Init
)
{
cm
.
off
(
"
cursorActivity
"
,
doMatchTags
);
cm
.
off
(
"
viewportChange
"
,
maybeUpdateMatch
);
clear
(
cm
);
}
if
(
val
)
{
cm
.
state
.
matchBothTags
=
typeof
val
==
"
object
"
&&
val
.
bothTags
;
cm
.
on
(
"
cursorActivity
"
,
doMatchTags
);
cm
.
on
(
"
viewportChange
"
,
maybeUpdateMatch
);
doMatchTags
(
cm
);
}
});
function
clear
(
cm
)
{
if
(
cm
.
state
.
tagHit
)
cm
.
state
.
tagHit
.
clear
();
if
(
cm
.
state
.
tagOther
)
cm
.
state
.
tagOther
.
clear
();
cm
.
state
.
tagHit
=
cm
.
state
.
tagOther
=
null
;
}
function
doMatchTags
(
cm
)
{
cm
.
state
.
failedTagMatch
=
false
;
cm
.
operation
(
function
()
{
clear
(
cm
);
if
(
cm
.
somethingSelected
())
return
;
var
cur
=
cm
.
getCursor
(),
range
=
cm
.
getViewport
();
range
.
from
=
Math
.
min
(
range
.
from
,
cur
.
line
);
range
.
to
=
Math
.
max
(
cur
.
line
+
1
,
range
.
to
);
var
match
=
CodeMirror
.
findMatchingTag
(
cm
,
cur
,
range
);
if
(
!
match
)
return
;
if
(
cm
.
state
.
matchBothTags
)
{
var
hit
=
match
.
at
==
"
open
"
?
match
.
open
:
match
.
close
;
if
(
hit
)
cm
.
state
.
tagHit
=
cm
.
markText
(
hit
.
from
,
hit
.
to
,
{
className
:
"
CodeMirror-matchingtag
"
});
}
var
other
=
match
.
at
==
"
close
"
?
match
.
open
:
match
.
close
;
if
(
other
)
cm
.
state
.
tagOther
=
cm
.
markText
(
other
.
from
,
other
.
to
,
{
className
:
"
CodeMirror-matchingtag
"
});
else
cm
.
state
.
failedTagMatch
=
true
;
});
}
function
maybeUpdateMatch
(
cm
)
{
if
(
cm
.
state
.
failedTagMatch
)
doMatchTags
(
cm
);
}
CodeMirror
.
commands
.
toMatchingTag
=
function
(
cm
)
{
var
found
=
CodeMirror
.
findMatchingTag
(
cm
,
cm
.
getCursor
());
if
(
found
)
{
var
other
=
found
.
at
==
"
close
"
?
found
.
open
:
found
.
close
;
if
(
other
)
cm
.
extendSelection
(
other
.
to
,
other
.
from
);
}
};
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/edit/trailingspace.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
CodeMirror
.
defineOption
(
"
showTrailingSpace
"
,
false
,
function
(
cm
,
val
,
prev
)
{
if
(
prev
==
CodeMirror
.
Init
)
prev
=
false
;
if
(
prev
&&
!
val
)
cm
.
removeOverlay
(
"
trailingspace
"
);
else
if
(
!
prev
&&
val
)
cm
.
addOverlay
({
token
:
function
(
stream
)
{
for
(
var
l
=
stream
.
string
.
length
,
i
=
l
;
i
&&
/
\s
/
.
test
(
stream
.
string
.
charAt
(
i
-
1
));
--
i
)
{}
if
(
i
>
stream
.
pos
)
{
stream
.
pos
=
i
;
return
null
;
}
stream
.
pos
=
l
;
return
"
trailingspace
"
;
},
name
:
"
trailingspace
"
});
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/fold/brace-fold.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
registerHelper
(
"
fold
"
,
"
brace
"
,
function
(
cm
,
start
)
{
var
line
=
start
.
line
,
lineText
=
cm
.
getLine
(
line
);
var
tokenType
;
function
findOpening
(
openCh
)
{
for
(
var
at
=
start
.
ch
,
pass
=
0
;;)
{
var
found
=
at
<=
0
?
-
1
:
lineText
.
lastIndexOf
(
openCh
,
at
-
1
);
if
(
found
==
-
1
)
{
if
(
pass
==
1
)
break
;
pass
=
1
;
at
=
lineText
.
length
;
continue
;
}
if
(
pass
==
1
&&
found
<
start
.
ch
)
break
;
tokenType
=
cm
.
getTokenTypeAt
(
CodeMirror
.
Pos
(
line
,
found
+
1
));
if
(
!
/^
(
comment|string
)
/
.
test
(
tokenType
))
return
found
+
1
;
at
=
found
-
1
;
}
}
var
startToken
=
"
{
"
,
endToken
=
"
}
"
,
startCh
=
findOpening
(
"
{
"
);
if
(
startCh
==
null
)
{
startToken
=
"
[
"
,
endToken
=
"
]
"
;
startCh
=
findOpening
(
"
[
"
);
}
if
(
startCh
==
null
)
return
;
var
count
=
1
,
lastLine
=
cm
.
lastLine
(),
end
,
endCh
;
outer
:
for
(
var
i
=
line
;
i
<=
lastLine
;
++
i
)
{
var
text
=
cm
.
getLine
(
i
),
pos
=
i
==
line
?
startCh
:
0
;
for
(;;)
{
var
nextOpen
=
text
.
indexOf
(
startToken
,
pos
),
nextClose
=
text
.
indexOf
(
endToken
,
pos
);
if
(
nextOpen
<
0
)
nextOpen
=
text
.
length
;
if
(
nextClose
<
0
)
nextClose
=
text
.
length
;
pos
=
Math
.
min
(
nextOpen
,
nextClose
);
if
(
pos
==
text
.
length
)
break
;
if
(
cm
.
getTokenTypeAt
(
CodeMirror
.
Pos
(
i
,
pos
+
1
))
==
tokenType
)
{
if
(
pos
==
nextOpen
)
++
count
;
else
if
(
!--
count
)
{
end
=
i
;
endCh
=
pos
;
break
outer
;
}
}
++
pos
;
}
}
if
(
end
==
null
||
line
==
end
)
return
;
return
{
from
:
CodeMirror
.
Pos
(
line
,
startCh
),
to
:
CodeMirror
.
Pos
(
end
,
endCh
)};
});
CodeMirror
.
registerHelper
(
"
fold
"
,
"
import
"
,
function
(
cm
,
start
)
{
function
hasImport
(
line
)
{
if
(
line
<
cm
.
firstLine
()
||
line
>
cm
.
lastLine
())
return
null
;
var
start
=
cm
.
getTokenAt
(
CodeMirror
.
Pos
(
line
,
1
));
if
(
!
/
\S
/
.
test
(
start
.
string
))
start
=
cm
.
getTokenAt
(
CodeMirror
.
Pos
(
line
,
start
.
end
+
1
));
if
(
start
.
type
!=
"
keyword
"
||
start
.
string
!=
"
import
"
)
return
null
;
// Now find closing semicolon, return its position
for
(
var
i
=
line
,
e
=
Math
.
min
(
cm
.
lastLine
(),
line
+
10
);
i
<=
e
;
++
i
)
{
var
text
=
cm
.
getLine
(
i
),
semi
=
text
.
indexOf
(
"
;
"
);
if
(
semi
!=
-
1
)
return
{
startCh
:
start
.
end
,
end
:
CodeMirror
.
Pos
(
i
,
semi
)};
}
}
var
startLine
=
start
.
line
,
has
=
hasImport
(
startLine
),
prev
;
if
(
!
has
||
hasImport
(
startLine
-
1
)
||
((
prev
=
hasImport
(
startLine
-
2
))
&&
prev
.
end
.
line
==
startLine
-
1
))
return
null
;
for
(
var
end
=
has
.
end
;;)
{
var
next
=
hasImport
(
end
.
line
+
1
);
if
(
next
==
null
)
break
;
end
=
next
.
end
;
}
return
{
from
:
cm
.
clipPos
(
CodeMirror
.
Pos
(
startLine
,
has
.
startCh
+
1
)),
to
:
end
};
});
CodeMirror
.
registerHelper
(
"
fold
"
,
"
include
"
,
function
(
cm
,
start
)
{
function
hasInclude
(
line
)
{
if
(
line
<
cm
.
firstLine
()
||
line
>
cm
.
lastLine
())
return
null
;
var
start
=
cm
.
getTokenAt
(
CodeMirror
.
Pos
(
line
,
1
));
if
(
!
/
\S
/
.
test
(
start
.
string
))
start
=
cm
.
getTokenAt
(
CodeMirror
.
Pos
(
line
,
start
.
end
+
1
));
if
(
start
.
type
==
"
meta
"
&&
start
.
string
.
slice
(
0
,
8
)
==
"
#include
"
)
return
start
.
start
+
8
;
}
var
startLine
=
start
.
line
,
has
=
hasInclude
(
startLine
);
if
(
has
==
null
||
hasInclude
(
startLine
-
1
)
!=
null
)
return
null
;
for
(
var
end
=
startLine
;;)
{
var
next
=
hasInclude
(
end
+
1
);
if
(
next
==
null
)
break
;
++
end
;
}
return
{
from
:
CodeMirror
.
Pos
(
startLine
,
has
+
1
),
to
:
cm
.
clipPos
(
CodeMirror
.
Pos
(
end
))};
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/fold/comment-fold.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
registerGlobalHelper
(
"
fold
"
,
"
comment
"
,
function
(
mode
)
{
return
mode
.
blockCommentStart
&&
mode
.
blockCommentEnd
;
},
function
(
cm
,
start
)
{
var
mode
=
cm
.
getModeAt
(
start
),
startToken
=
mode
.
blockCommentStart
,
endToken
=
mode
.
blockCommentEnd
;
if
(
!
startToken
||
!
endToken
)
return
;
var
line
=
start
.
line
,
lineText
=
cm
.
getLine
(
line
);
var
startCh
;
for
(
var
at
=
start
.
ch
,
pass
=
0
;;)
{
var
found
=
at
<=
0
?
-
1
:
lineText
.
lastIndexOf
(
startToken
,
at
-
1
);
if
(
found
==
-
1
)
{
if
(
pass
==
1
)
return
;
pass
=
1
;
at
=
lineText
.
length
;
continue
;
}
if
(
pass
==
1
&&
found
<
start
.
ch
)
return
;
if
(
/comment/
.
test
(
cm
.
getTokenTypeAt
(
CodeMirror
.
Pos
(
line
,
found
+
1
)))
&&
(
found
==
0
||
lineText
.
slice
(
found
-
endToken
.
length
,
found
)
==
endToken
||
!
/comment/
.
test
(
cm
.
getTokenTypeAt
(
CodeMirror
.
Pos
(
line
,
found
)))))
{
startCh
=
found
+
startToken
.
length
;
break
;
}
at
=
found
-
1
;
}
var
depth
=
1
,
lastLine
=
cm
.
lastLine
(),
end
,
endCh
;
outer
:
for
(
var
i
=
line
;
i
<=
lastLine
;
++
i
)
{
var
text
=
cm
.
getLine
(
i
),
pos
=
i
==
line
?
startCh
:
0
;
for
(;;)
{
var
nextOpen
=
text
.
indexOf
(
startToken
,
pos
),
nextClose
=
text
.
indexOf
(
endToken
,
pos
);
if
(
nextOpen
<
0
)
nextOpen
=
text
.
length
;
if
(
nextClose
<
0
)
nextClose
=
text
.
length
;
pos
=
Math
.
min
(
nextOpen
,
nextClose
);
if
(
pos
==
text
.
length
)
break
;
if
(
pos
==
nextOpen
)
++
depth
;
else
if
(
!--
depth
)
{
end
=
i
;
endCh
=
pos
;
break
outer
;
}
++
pos
;
}
}
if
(
end
==
null
||
line
==
end
&&
endCh
==
startCh
)
return
;
return
{
from
:
CodeMirror
.
Pos
(
line
,
startCh
),
to
:
CodeMirror
.
Pos
(
end
,
endCh
)};
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/fold/foldcode.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
function
doFold
(
cm
,
pos
,
options
,
force
)
{
if
(
options
&&
options
.
call
)
{
var
finder
=
options
;
options
=
null
;
}
else
{
var
finder
=
getOption
(
cm
,
options
,
"
rangeFinder
"
);
}
if
(
typeof
pos
==
"
number
"
)
pos
=
CodeMirror
.
Pos
(
pos
,
0
);
var
minSize
=
getOption
(
cm
,
options
,
"
minFoldSize
"
);
function
getRange
(
allowFolded
)
{
var
range
=
finder
(
cm
,
pos
);
if
(
!
range
||
range
.
to
.
line
-
range
.
from
.
line
<
minSize
)
return
null
;
var
marks
=
cm
.
findMarksAt
(
range
.
from
);
for
(
var
i
=
0
;
i
<
marks
.
length
;
++
i
)
{
if
(
marks
[
i
].
__isFold
&&
force
!==
"
fold
"
)
{
if
(
!
allowFolded
)
return
null
;
range
.
cleared
=
true
;
marks
[
i
].
clear
();
}
}
return
range
;
}
var
range
=
getRange
(
true
);
if
(
getOption
(
cm
,
options
,
"
scanUp
"
))
while
(
!
range
&&
pos
.
line
>
cm
.
firstLine
())
{
pos
=
CodeMirror
.
Pos
(
pos
.
line
-
1
,
0
);
range
=
getRange
(
false
);
}
if
(
!
range
||
range
.
cleared
||
force
===
"
unfold
"
)
return
;
var
myWidget
=
makeWidget
(
cm
,
options
);
CodeMirror
.
on
(
myWidget
,
"
mousedown
"
,
function
(
e
)
{
myRange
.
clear
();
CodeMirror
.
e_preventDefault
(
e
);
});
var
myRange
=
cm
.
markText
(
range
.
from
,
range
.
to
,
{
replacedWith
:
myWidget
,
clearOnEnter
:
getOption
(
cm
,
options
,
"
clearOnEnter
"
),
__isFold
:
true
});
myRange
.
on
(
"
clear
"
,
function
(
from
,
to
)
{
CodeMirror
.
signal
(
cm
,
"
unfold
"
,
cm
,
from
,
to
);
});
CodeMirror
.
signal
(
cm
,
"
fold
"
,
cm
,
range
.
from
,
range
.
to
);
}
function
makeWidget
(
cm
,
options
)
{
var
widget
=
getOption
(
cm
,
options
,
"
widget
"
);
if
(
typeof
widget
==
"
string
"
)
{
var
text
=
document
.
createTextNode
(
widget
);
widget
=
document
.
createElement
(
"
span
"
);
widget
.
appendChild
(
text
);
widget
.
className
=
"
CodeMirror-foldmarker
"
;
}
else
if
(
widget
)
{
widget
=
widget
.
cloneNode
(
true
)
}
return
widget
;
}
// Clumsy backwards-compatible interface
CodeMirror
.
newFoldFunction
=
function
(
rangeFinder
,
widget
)
{
return
function
(
cm
,
pos
)
{
doFold
(
cm
,
pos
,
{
rangeFinder
:
rangeFinder
,
widget
:
widget
});
};
};
// New-style interface
CodeMirror
.
defineExtension
(
"
foldCode
"
,
function
(
pos
,
options
,
force
)
{
doFold
(
this
,
pos
,
options
,
force
);
});
CodeMirror
.
defineExtension
(
"
isFolded
"
,
function
(
pos
)
{
var
marks
=
this
.
findMarksAt
(
pos
);
for
(
var
i
=
0
;
i
<
marks
.
length
;
++
i
)
if
(
marks
[
i
].
__isFold
)
return
true
;
});
CodeMirror
.
commands
.
toggleFold
=
function
(
cm
)
{
cm
.
foldCode
(
cm
.
getCursor
());
};
CodeMirror
.
commands
.
fold
=
function
(
cm
)
{
cm
.
foldCode
(
cm
.
getCursor
(),
null
,
"
fold
"
);
};
CodeMirror
.
commands
.
unfold
=
function
(
cm
)
{
cm
.
foldCode
(
cm
.
getCursor
(),
null
,
"
unfold
"
);
};
CodeMirror
.
commands
.
foldAll
=
function
(
cm
)
{
cm
.
operation
(
function
()
{
for
(
var
i
=
cm
.
firstLine
(),
e
=
cm
.
lastLine
();
i
<=
e
;
i
++
)
cm
.
foldCode
(
CodeMirror
.
Pos
(
i
,
0
),
null
,
"
fold
"
);
});
};
CodeMirror
.
commands
.
unfoldAll
=
function
(
cm
)
{
cm
.
operation
(
function
()
{
for
(
var
i
=
cm
.
firstLine
(),
e
=
cm
.
lastLine
();
i
<=
e
;
i
++
)
cm
.
foldCode
(
CodeMirror
.
Pos
(
i
,
0
),
null
,
"
unfold
"
);
});
};
CodeMirror
.
registerHelper
(
"
fold
"
,
"
combine
"
,
function
()
{
var
funcs
=
Array
.
prototype
.
slice
.
call
(
arguments
,
0
);
return
function
(
cm
,
start
)
{
for
(
var
i
=
0
;
i
<
funcs
.
length
;
++
i
)
{
var
found
=
funcs
[
i
](
cm
,
start
);
if
(
found
)
return
found
;
}
};
});
CodeMirror
.
registerHelper
(
"
fold
"
,
"
auto
"
,
function
(
cm
,
start
)
{
var
helpers
=
cm
.
getHelpers
(
start
,
"
fold
"
);
for
(
var
i
=
0
;
i
<
helpers
.
length
;
i
++
)
{
var
cur
=
helpers
[
i
](
cm
,
start
);
if
(
cur
)
return
cur
;
}
});
var
defaultOptions
=
{
rangeFinder
:
CodeMirror
.
fold
.
auto
,
widget
:
"
\
u2194
"
,
minFoldSize
:
0
,
scanUp
:
false
,
clearOnEnter
:
true
};
CodeMirror
.
defineOption
(
"
foldOptions
"
,
null
);
function
getOption
(
cm
,
options
,
name
)
{
if
(
options
&&
options
[
name
]
!==
undefined
)
return
options
[
name
];
var
editorOptions
=
cm
.
options
.
foldOptions
;
if
(
editorOptions
&&
editorOptions
[
name
]
!==
undefined
)
return
editorOptions
[
name
];
return
defaultOptions
[
name
];
}
CodeMirror
.
defineExtension
(
"
foldOption
"
,
function
(
options
,
name
)
{
return
getOption
(
this
,
options
,
name
);
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/addon/fold/foldgutter.css
0 → 100644
View file @
53f587bc
.CodeMirror-foldmarker
{
color
:
blue
;
text-shadow
:
#b9f
1px
1px
2px
,
#b9f
-1px
-1px
2px
,
#b9f
1px
-1px
2px
,
#b9f
-1px
1px
2px
;
font-family
:
arial
;
line-height
:
.3
;
cursor
:
pointer
;
}
.CodeMirror-foldgutter
{
width
:
.7em
;
}
.CodeMirror-foldgutter-open
,
.CodeMirror-foldgutter-folded
{
cursor
:
pointer
;
}
.CodeMirror-foldgutter-open
:after
{
content
:
"\25BE"
;
}
.CodeMirror-foldgutter-folded
:after
{
content
:
"\25B8"
;
}
Prev
1
2
3
4
5
…
21
Next
Write
Preview
Supports
Markdown
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