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
"src/vscode:/vscode.git/clone" did not exist on "5cfb3295bd2abae18ad9af23e5f84f961d800c48"
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