Просмотр исходного кода

avoid getting duplicate handlers for mouseup

Brian Gough 9 лет назад
Родитель
Сommit
b04288ed44
1 измененных файлов с 15 добавлено и 3 удалено
  1. 15 3
      services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee

+ 15 - 3
services/web/public/coffee/ide/pdfng/directives/pdfViewer.coffee

@@ -417,16 +417,28 @@ define [
 					# grey background area or the scrollbars.
 					if e.target != element[0] and !_hasSelection()
 						element.addClass 'pdfjs-viewer-show-text'
-						$(document.body).one 'mouseup', _handleSelectionMouseUp
+						_setMouseUpHandler()
+
+				mouseUpHandler = null # keep track of the handler to avoid adding multiple times
+
+				_setMouseUpHandler = () ->
+					if not mouseUpHandler?
+						mouseUpHandler = $(document.body).one 'mouseup', _handleSelectionMouseUp
 
 				_handleSelectionMouseUp = () ->
-					window.setTimeout _removeClassIfNoSelection, 10
+					mouseUpHandler = null # reset handler, has now fired
+					window.setTimeout () ->
+						removedClass = _removeClassIfNoSelection()
+						# if we still have a selection we need to keep the handler going
+						if not removedClass then _setMouseUpHandler()
+					, 10
 
 				_removeClassIfNoSelection = () ->
 					if _hasSelection()
-						$(document.body).one 'mouseup', _handleSelectionMouseUp
+						return false # didn't remove the text layer
 					else
 						element.removeClass 'pdfjs-viewer-show-text'
+						return true
 
 				_hasSelection = () ->
 					selection = window.getSelection()