mirror of
https://github.com/overleaf/overleaf.git
synced 2024-10-31 21:21:03 -04:00
57 lines
1.6 KiB
CoffeeScript
57 lines
1.6 KiB
CoffeeScript
|
define [], () ->
|
||
|
class OnlineUsersManager
|
||
|
constructor: (@ide, @$scope) ->
|
||
|
@$scope.onlineUsers = {}
|
||
|
@$scope.onlineUserCursorAnnotations = {}
|
||
|
|
||
|
@$scope.$watch "editor.cursorPosition", (position) =>
|
||
|
console.log "CURSOR POSITION UPDATE", position
|
||
|
if position?
|
||
|
@sendCursorPositionUpdate()
|
||
|
|
||
|
@ide.socket.on "clientTracking.clientUpdated", (client) =>
|
||
|
console.log "REMOTE CURSOR POSITION UPDATE", client
|
||
|
if client.id != @ide.socket.socket.sessionid # Check it's not me!
|
||
|
@$scope.$apply () =>
|
||
|
@$scope.onlineUsers[client.id] = client
|
||
|
@updateCursorHighlights()
|
||
|
|
||
|
@ide.socket.on "clientTracking.clientDisconnected", (client_id) =>
|
||
|
@$scope.$apply () =>
|
||
|
delete @$scope.onlineUsers[client_id]
|
||
|
@updateCursorHighlights()
|
||
|
|
||
|
updateCursorHighlights: () ->
|
||
|
console.log "UPDATING CURSOR HIGHLIGHTS"
|
||
|
@$scope.onlineUserCursorAnnotations = {}
|
||
|
for client_id, client of @$scope.onlineUsers
|
||
|
doc_id = client.doc_id
|
||
|
@$scope.onlineUserCursorAnnotations[doc_id] ||= []
|
||
|
@$scope.onlineUserCursorAnnotations[doc_id].push {
|
||
|
text: client.name
|
||
|
cursor:
|
||
|
row: client.row
|
||
|
column: client.column
|
||
|
}
|
||
|
|
||
|
UPDATE_INTERVAL: 500
|
||
|
sendCursorPositionUpdate: () ->
|
||
|
if !@cursorUpdateTimeout?
|
||
|
console.log "CREATING DELAYED UPDATED"
|
||
|
@cursorUpdateTimeout = setTimeout ()=>
|
||
|
position = @$scope.editor.cursorPosition
|
||
|
doc_id = @$scope.editor.open_doc_id
|
||
|
|
||
|
@ide.socket.emit "clientTracking.updatePosition", {
|
||
|
row: position.row
|
||
|
column: position.column
|
||
|
doc_id: doc_id
|
||
|
}
|
||
|
|
||
|
delete @cursorUpdateTimeout
|
||
|
, @UPDATE_INTERVAL
|
||
|
else
|
||
|
console.log "NOT UPDATING"
|
||
|
|
||
|
|