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

Extract debounced load to service, so can be injected

Alasdair Smith 8 лет назад
Родитель
Сommit
b2abcfc3f2

+ 1 - 20
services/web/public/coffee/ide/editor/directives/aceEditor/metadata/MetadataManager.coffee

@@ -53,31 +53,12 @@ define [
 					lastCommandFragmentIsReqPack
 					lastCommandFragmentIsReqPack
 
 
 				if linesContainMeta or lastCommandFragmentIsMeta
 				if linesContainMeta or lastCommandFragmentIsMeta
-					@scheduleLoadCurrentDocMetaFromServer()
+					@Metadata.scheduleLoadDocMetaFromServer @$scope.docId
 
 
 			@editor.on "changeSession", (e) =>
 			@editor.on "changeSession", (e) =>
 				e.oldSession.off "change", onChange
 				e.oldSession.off "change", onChange
 				e.session.on "change", onChange
 				e.session.on "change", onChange
 
 
-
-		loadDocMetaFromServer: (docId) ->
-			@Metadata.loadDocMetaFromServer docId
-
-		scheduleLoadCurrentDocMetaFromServer: () ->
-			# De-bounce loading labels with a timeout
-			currentDocId = @$scope.docId
-			existingTimeout = @debouncer[currentDocId]
-			if existingTimeout?
-				clearTimeout(existingTimeout)
-				delete @debouncer[currentDocId]
-			@debouncer[currentDocId] = setTimeout(
-				() =>
-					@loadDocMetaFromServer currentDocId
-					delete @debouncer[currentDocId]
-				, 1000
-				, this
-			)
-
 		getAllLabels: () ->
 		getAllLabels: () ->
 			@Metadata.getAllLabels()
 			@Metadata.getAllLabels()
 
 

+ 16 - 0
services/web/public/coffee/ide/metadata/services/metadata.coffee

@@ -3,6 +3,7 @@ define [
 ], (App) ->
 ], (App) ->
 
 
 	App.factory 'metadata', ($http, ide) ->
 	App.factory 'metadata', ($http, ide) ->
+		debouncer = {}  # DocId => Timeout
 
 
 		state = {documents: {}}
 		state = {documents: {}}
 
 
@@ -46,4 +47,19 @@ define [
 					{_csrf: window.csrfToken}
 					{_csrf: window.csrfToken}
 				)
 				)
 
 
+		metadata.scheduleLoadDocMetaFromServer = (docId) ->
+			# De-bounce loading labels with a timeout
+			existingTimeout = debouncer[docId]
+
+			if existingTimeout?
+				clearTimeout(existingTimeout)
+				delete debouncer[docId]
+
+			debouncer[docId] = setTimeout(
+				() =>
+					metadata.loadDocMetaFromServer docId
+					delete debouncer[docId]
+				, 1000
+			)
+
 		return metadata
 		return metadata