mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-27 09:22:44 +00:00
83 lines
2.1 KiB
CoffeeScript
83 lines
2.1 KiB
CoffeeScript
|
define [
|
||
|
"libs/backbone"
|
||
|
"libs/mustache"
|
||
|
], () ->
|
||
|
SUGGESTIONS_TO_SHOW = 5
|
||
|
|
||
|
SpellingMenuView = Backbone.View.extend
|
||
|
templates:
|
||
|
menu: $("#spellingMenuTemplate").html()
|
||
|
entry: $("#spellingMenuEntryTemplate").html()
|
||
|
|
||
|
events:
|
||
|
"click a#learnWord": ->
|
||
|
@trigger "click:learn", @_currentHighlight
|
||
|
@hide()
|
||
|
|
||
|
initialize: (options) ->
|
||
|
@ide = options.ide
|
||
|
@ide.editor.getContainerElement().append @render().el
|
||
|
@ide.editor.on "click", () => @hide()
|
||
|
@ide.editor.on "scroll", () => @hide()
|
||
|
@ide.editor.on "update:doc", () => @hide()
|
||
|
@ide.editor.on "change:doc", () => @hide()
|
||
|
|
||
|
render: () ->
|
||
|
@setElement($(@templates.menu))
|
||
|
@$el.css "z-index" : 10000
|
||
|
@$(".dropdown-toggle").dropdown()
|
||
|
@hide()
|
||
|
return @
|
||
|
|
||
|
showForHighlight: (highlight) ->
|
||
|
if @_currentHighlight? and highlight != @_currentHighlight
|
||
|
@_close()
|
||
|
|
||
|
if !@_currentHighlight?
|
||
|
@_currentHighlight = highlight
|
||
|
@_setSuggestions(highlight)
|
||
|
position = @ide.editor.textToEditorCoordinates(
|
||
|
highlight.row
|
||
|
highlight.column + highlight.word.length
|
||
|
)
|
||
|
@_position(position.x, position.y)
|
||
|
@_show()
|
||
|
|
||
|
hideIfAppropriate: (cursorPosition) ->
|
||
|
if @_currentHighlight?
|
||
|
if !@_cursorCloseToHighlight(cursorPosition, @_currentHighlight) and !@_isOpen()
|
||
|
@hide()
|
||
|
|
||
|
hide: () ->
|
||
|
delete @_currentHighlight
|
||
|
@_close()
|
||
|
@$el.hide()
|
||
|
|
||
|
_setSuggestions: (highlight) ->
|
||
|
@$(".spelling-suggestion").remove()
|
||
|
divider = @$(".divider")
|
||
|
for suggestion in highlight.suggestions.slice(0, SUGGESTIONS_TO_SHOW)
|
||
|
do (suggestion) =>
|
||
|
entry = $(Mustache.to_html(@templates.entry, word: suggestion))
|
||
|
divider.before(entry)
|
||
|
entry.on "click", () =>
|
||
|
@trigger "click:suggestion", suggestion, highlight
|
||
|
|
||
|
_show: () -> @$el.show()
|
||
|
|
||
|
_isOpen: () ->
|
||
|
@$(".dropdown-menu").is(":visible")
|
||
|
|
||
|
_close: () ->
|
||
|
if @_isOpen()
|
||
|
@$el.dropdown("toggle")
|
||
|
|
||
|
_cursorCloseToHighlight: (position, highlight) ->
|
||
|
position.row == highlight.row and
|
||
|
position.column >= highlight.column and
|
||
|
position.column <= highlight.column + highlight.word.length + 1
|
||
|
|
||
|
_position: (x,y) -> @$el.css left: x, top: y
|
||
|
|
||
|
|