]>
git.immae.eu Git - perso/Immae/Projets/packagist/piedsjaloux-ckeditor-component.git/blob - release/samples/toolbarconfigurator/lib/codemirror/show-hint.js
1 ( function ( f
){ "object" == typeof exports
&& "object" == typeof module
? f ( require ( "../../lib/codemirror" )): "function" == typeof define
&& define
. amd
? define ([ "../../lib/codemirror" ], f
): f ( CodeMirror
)})( function ( f
){ function p ( a
, b
){ this . cm
= a
; this . options
= this . buildOptions ( b
); this . widget
= null ; this . tick
= this . debounce
= 0 ; this . startPos
= this . cm
. getCursor (); this . startLen
= this . cm
. getLine ( this . startPos
. line
). length
; var c
= this ; a
. on ( "cursorActivity" , this . activityFunc = function (){ c
. cursorActivity ()})} function w ( a
, b
){ function c ( a
,
2 c
){ var d
; d
= "string" != typeof c
? function ( a
){ return c ( a
, b
)}: e
. hasOwnProperty ( c
)? e
[ c
]: c
; f
[ a
]= d
} var e
={ Up : function (){ b
. moveFocus (- 1 )}, Down : function (){ b
. moveFocus ( 1 )}, PageUp : function (){ b
. moveFocus (- b
. menuSize ()+ 1 ,! 0 )}, PageDown : function (){ b
. moveFocus ( b
. menuSize ()- 1 ,! 0 )}, Home : function (){ b
. setFocus ( 0 )}, End : function (){ b
. setFocus ( b
. length
- 1 )}, Enter : b
. pick
, Tab : b
. pick
, Esc : b
. close
}, d
= a
. options
. customKeys
, f
= d
?{}: e
; if ( d
) for ( var g
in d
) d
. hasOwnProperty ( g
)&& c ( g
, d
[ g
]); if ( d
= a
. options
. extraKeys
) for ( g
in d
) d
. hasOwnProperty ( g
)&&
3 c ( g
, d
[ g
]); return f
} function v ( a
, b
){ for (; b
&& b
!= a
;){ if ( "LI" === b
. nodeName
. toUpperCase ()&& b
. parentNode
== a
) return b
; b
= b
. parentNode
}} function n ( a
, b
){ this . completion
= a
; this . data
= b
; this . picked
=! 1 ; var c
= this , e
= a
. cm
, d
= this . hints
= document
. createElement ( "ul" ); d
. className
= "CodeMirror-hints" ; this . selectedHint
= b
. selectedHint
|| 0 ; for ( var m
= b
. list
, g
= 0 ; g
< m
. length
;++ g
){ var l
= d
. appendChild ( document
. createElement ( "li" )), h
= m
[ g
], k
= "CodeMirror-hint" +( g
!= this . selectedHint
? "" : " CodeMirror-hint-active" ); null != h
. className
&&( k
=
4 h
. className
+ " " + k
); l
. className
= k
; h
. render
? h
. render ( l
, b
, h
): l
. appendChild ( document
. createTextNode ( h
. displayText
||( "string" == typeof h
? h : h
. text
))); l
. hintId
= g
} var g
= e
. cursorCoords ( a
. options
. alignWithWord
? b
. from : null ), r
= g
. left
, t
= g
. bottom
, n
=! 0 ; d
. style
. left
= r
+ "px" ; d
. style
. top
= t
+ "px" ; l
= window
. innerWidth
|| Math
. max ( document
. body
. offsetWidth
, document
. documentElement
. offsetWidth
); k
= window
. innerHeight
|| Math
. max ( document
. body
. offsetHeight
, document
. documentElement
. offsetHeight
);( a
. options
. container
|| document
. body
). appendChild ( d
);
5 h
= d
. getBoundingClientRect (); if ( 0 < h
. bottom
- k
){ var u
= h
. bottom
- h
. top
; 0 < g
. top
-( g
. bottom
- h
. top
)- u
?( d
. style
. top
=( t
= g
. top
- u
)+ "px" , n
=! 1 ): u
> k
&&( d
. style
. height
= k
- 5 + "px" , d
. style
. top
=( t
= g
. bottom
- h
. top
)+ "px" , k
= e
. getCursor (), b
. from . ch
!= k
. ch
&&( g
= e
. cursorCoords ( k
), d
. style
. left
=( r
= g
. left
)+ "px" , h
= d
. getBoundingClientRect ()))} k
= h
. right
- l
; 0 < k
&&( h
. right
- h
. left
> l
&&( d
. style
. width
= l
- 5 + "px" , k
-= h
. right
- h
. left
- l
), d
. style
. left
=( r
= g
. left
- k
)+ "px" ); e
. addKeyMap ( this . keyMap
= w ( a
,{ moveFocus : function ( a
, b
){ c
. changeActive ( c
. selectedHint
+
6 a
, b
)}, setFocus : function ( a
){ c
. changeActive ( a
)}, menuSize : function (){ return c
. screenAmount ()}, length : m
. length
, close : function (){ a
. close ()}, pick : function (){ c
. pick ()}, data : b
})); if ( a
. options
. closeOnUnfocus
){ var p
; e
. on ( "blur" , this . onBlur = function (){ p
= setTimeout ( function (){ a
. close ()}, 100 )}); e
. on ( "focus" , this . onFocus = function (){ clearTimeout ( p
)})} var q
= e
. getScrollInfo (); e
. on ( "scroll" , this . onScroll = function (){ var c
= e
. getScrollInfo (), b
= e
. getWrapperElement (). getBoundingClientRect (), f
= t
+ q
. top
- c
. top
, g
= f
-( window
. pageYOffset
||
7 ( document
. documentElement
|| document
. body
). scrollTop
); n
||( g
+= d
. offsetHeight
); if ( g
<= b
. top
|| g
>= b
. bottom
) return a
. close (); d
. style
. top
= f
+ "px" ; d
. style
. left
= r
+ q
. left
- c
. left
+ "px" }); f
. on ( d
, "dblclick" , function ( a
){( a
= v ( d
, a
. target
|| a
. srcElement
))&& null != a
. hintId
&&( c
. changeActive ( a
. hintId
), c
. pick ())}); f
. on ( d
, "click" , function ( b
){( b
= v ( d
, b
. target
|| b
. srcElement
))&& null != b
. hintId
&&( c
. changeActive ( b
. hintId
), a
. options
. completeOnSingleClick
&& c
. pick ())}); f
. on ( d
, "mousedown" , function (){ setTimeout ( function (){ e
. focus ()}, 20 )});
8 f
. signal ( b
, "select" , m
[ 0 ], d
. firstChild
); return ! 0 } f
. showHint = function ( a
, b
, c
){ if (! b
) return a
. showHint ( c
); c
&& c
. async
&&( b
. async
=! 0 ); b
={ hint : b
}; if ( c
) for ( var e
in c
) b
[ e
]= c
[ e
]; return a
. showHint ( b
)}; f
. defineExtension ( "showHint" , function ( a
){ 1 < this . listSelections (). length
|| this . somethingSelected ()||( this . state
. completionActive
&& this . state
. completionActive
. close (), a
= this . state
. completionActive
= new p ( this , a
), a
. options
. hint
&&( f
. signal ( this , "startCompletion" , this ), a
. update ()))}); var x
= window
. requestAnimationFrame
||
9 function ( a
){ return setTimeout ( a
, 1 E3
/ 60 )}, y
= window
. cancelAnimationFrame
|| clearTimeout
; p
. prototype ={ close : function (){ this . active ()&&( this . tick
= this . cm
. state
. completionActive
= null , this . cm
. off ( "cursorActivity" , this . activityFunc
), this . widget
&& this . widget
. close (), f
. signal ( this . cm
, "endCompletion" , this . cm
))}, active : function (){ return this . cm
. state
. completionActive
== this }, pick : function ( a
, b
){ var c
= a
. list
[ b
]; c
. hint
? c
. hint ( this . cm
, a
, c
): this . cm
. replaceRange ( "string" == typeof c
? c : c
. text
, c
. from || a
. from , c
. to
|| a
. to
,
10 "complete" ); f
. signal ( a
, "pick" , c
); this . close ()}, showHints : function ( a
){ if (! a
||! a
. list
. length
||! this . active ()) return this . close (); this . options
. completeSingle
&& 1 == a
. list
. length
? this . pick ( a
, 0 ): this . showWidget ( a
)}, cursorActivity : function (){ this . debounce
&&( y ( this . debounce
), this . debounce
= 0 ); var a
= this . cm
. getCursor (), b
= this . cm
. getLine ( a
. line
); if ( a
. line
!= this . startPos
. line
|| b
. length
- a
. ch
!= this . startLen
- this . startPos
. ch
|| a
. ch
< this . startPos
. ch
|| this . cm
. somethingSelected ()|| a
. ch
&& this . options
. closeCharacters
. test ( b
. charAt ( a
. ch
-
11 1 ))) this . close (); else { var c
= this ; this . debounce
= x ( function (){ c
. update ()}); this . widget
&& this . widget
. disable ()}}, update : function (){ if ( null != this . tick
) if ( this . data
&& f
. signal ( this . data
, "update" ), this . options
. hint
. async
){ var a
=++ this . tick
, b
= this ; this . options
. hint ( this . cm
, function ( c
){ b
. tick
== a
&& b
. finishUpdate ( c
)}, this . options
)} else this . finishUpdate ( this . options
. hint ( this . cm
, this . options
), a
)}, finishUpdate : function ( a
){ this . data
= a
; var b
= this . widget
&& this . widget
. picked
; this . widget
&& this . widget
. close (); a
&& a
. list
. length
&&
12 ( b
&& 1 == a
. list
. length
? this . pick ( a
, 0 ): this . widget
= new n ( this , a
))}, showWidget : function ( a
){ this . data
= a
; this . widget
= new n ( this , a
); f
. signal ( a
, "shown" )}, buildOptions : function ( a
){ var b
= this . cm
. options
. hintOptions
, c
={}, e
; for ( e
in q
) c
[ e
]= q
[ e
]; if ( b
) for ( e
in b
) void 0 !== b
[ e
]&&( c
[ e
]= b
[ e
]); if ( a
) for ( e
in a
) void 0 !== a
[ e
]&&( c
[ e
]= a
[ e
]); return c
}}; n
. prototype ={ close : function (){ if ( this . completion
. widget
== this ){ this . completion
. widget
= null ; this . hints
. parentNode
. removeChild ( this . hints
); this . completion
. cm
. removeKeyMap ( this . keyMap
);
13 var a
= this . completion
. cm
; this . completion
. options
. closeOnUnfocus
&&( a
. off ( "blur" , this . onBlur
), a
. off ( "focus" , this . onFocus
)); a
. off ( "scroll" , this . onScroll
)}}, disable : function (){ this . completion
. cm
. removeKeyMap ( this . keyMap
); var a
= this ; this . keyMap
={ Enter : function (){ a
. picked
=! 0 }}; this . completion
. cm
. addKeyMap ( this . keyMap
)}, pick : function (){ this . completion
. pick ( this . data
, this . selectedHint
)}, changeActive : function ( a
, b
){ a
>= this . data
. list
. length
? a
= b
? this . data
. list
. length
- 1 : 0 : 0 > a
&&( a
= b
? 0 : this . data
. list
. length
- 1 );
14 if ( this . selectedHint
!= a
){ var c
= this . hints
. childNodes
[ this . selectedHint
]; c
. className
= c
. className
. replace ( " CodeMirror-hint-active" , "" ); c
= this . hints
. childNodes
[ this . selectedHint
= a
]; c
. className
+= " CodeMirror-hint-active" ; c
. offsetTop
< this . hints
. scrollTop
? this . hints
. scrollTop
= c
. offsetTop
- 3 : c
. offsetTop
+ c
. offsetHeight
> this . hints
. scrollTop
+ this . hints
. clientHeight
&&( this . hints
. scrollTop
= c
. offsetTop
+ c
. offsetHeight
- this . hints
. clientHeight
+ 3 ); f
. signal ( this . data
, "select" , this . data
. list
[ this . selectedHint
], c
)}},
15 screenAmount : function (){ return Math
. floor ( this . hints
. clientHeight
/ this . hints
. firstChild
. offsetHeight
)|| 1 }}; f
. registerHelper ( "hint" , "auto" , function ( a
, b
){ var c
= a
. getHelpers ( a
. getCursor (), "hint" ); if ( c
. length
) for ( var e
= 0 ; e
< c
. length
; e
++){ var d
= c
[ e
]( a
, b
); if ( d
&& d
. list
. length
) return d
} else if ( c
= a
. getHelper ( a
. getCursor (), "hintWords" )){ if ( c
) return f
. hint
. fromList ( a
,{ words : c
})} else if ( f
. hint
. anyword
) return f
. hint
. anyword ( a
, b
)}); f
. registerHelper ( "hint" , "fromList" , function ( a
, b
){ for ( var c
= a
. getCursor (), e
= a
. getTokenAt ( c
),
16 d
=[], m
= 0 ; m
< b
. words
. length
; m
++){ var g
= b
. words
[ m
]; g
. slice ( 0 , e
. string
. length
)== e
. string
&& d
. push ( g
)} if ( d
. length
) return { list : d
, from : f
. Pos ( c
. line
, e
. start
), to : f
. Pos ( c
. line
, e
. end
)}}); f
. commands
. autocomplete
= f
. showHint
; var q
={ hint : f
. hint
. auto
, completeSingle :! 0 , alignWithWord :! 0 , closeCharacters : /[\s()\[\]{};:>,]/ , closeOnUnfocus :! 0 , completeOnSingleClick :! 1 , container : null , customKeys : null , extraKeys : null }; f
. defineOption ( "hintOptions" , null )});