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

Move labels into an Angular Service

Shane Kilkelly 9 лет назад
Родитель
Сommit
1bb065344c

+ 8 - 5
services/web/public/coffee/ide.coffee

@@ -9,7 +9,6 @@ define [
 	"ide/pdf/PdfManager"
 	"ide/binary-files/BinaryFilesManager"
 	"ide/references/ReferencesManager"
-	"ide/labels/LabelsMaster"
 	"ide/review-panel/ReviewPanelManager"
 	"ide/SafariScrollPatcher"
 	"ide/FeatureOnboardingController"
@@ -46,12 +45,11 @@ define [
 	PdfManager
 	BinaryFilesManager
 	ReferencesManager
-	LabelsMaster
 	ReviewPanelManager
 	SafariScrollPatcher
 ) ->
 
-	App.controller "IdeController", ($scope, $timeout, ide, localStorage, sixpack, event_tracking) ->
+	App.controller "IdeController", ($scope, $timeout, ide, localStorage, sixpack, event_tracking, labels) ->
 		# Don't freak out if we're already in an apply callback
 		$scope.$originalApply = $scope.$apply
 		$scope.$apply = (fn = () ->) ->
@@ -119,8 +117,6 @@ define [
 		ide.project_id = $scope.project_id = window.project_id
 		ide.$scope = $scope
 
-		$scope.labelsMaster = ide.labelsMaster = new LabelsMaster(ide, $scope)
-
 		ide.referencesSearchManager = new ReferencesManager(ide, $scope)
 		ide.connectionManager = new ConnectionManager(ide, $scope)
 		ide.fileTreeManager = new FileTreeManager(ide, $scope)
@@ -131,6 +127,13 @@ define [
 		ide.permissionsManager = new PermissionsManager(ide, $scope)
 		ide.binaryFilesManager = new BinaryFilesManager(ide, $scope)
 
+		# Set up labels
+		$scope.$on 'doc:labels:updated', labels.onDocLabelsUpdated
+		$scope.$on 'entity:deleted', labels.onEntityDeleted
+		$scope.$on 'file:upload:complete', labels.fileUploadComplete
+		$timeout () ->
+			labels.loadProjectLabelsFromServer()
+
 		inited = false
 		$scope.$on "project:joined", () ->
 			return if inited

+ 4 - 2
services/web/public/coffee/ide/editor/directives/aceEditor.coffee

@@ -10,6 +10,7 @@ define [
 	"ide/editor/directives/aceEditor/cursor-position/CursorPositionManager"
 	"ide/editor/directives/aceEditor/track-changes/TrackChangesManager"
 	"ide/editor/directives/aceEditor/labels/LabelsManager"
+	"services/labels"
 ], (App, Ace, SearchBox, ModeList, UndoManager, AutoCompleteManager, SpellCheckManager, HighlightsManager, CursorPositionManager, TrackChangesManager, LabelsManager) ->
 	EditSession = ace.require('ace/edit_session').EditSession
 	ModeList = ace.require('ace/ext/modelist')
@@ -32,8 +33,9 @@ define [
 			url = ace.config._moduleUrl(args...) + "?fingerprint=#{window.aceFingerprint}"
 			return url
 
-	App.directive "aceEditor", ($timeout, $compile, $rootScope, event_tracking, localStorage, $cacheFactory) ->
+	App.directive "aceEditor", ($timeout, $compile, $rootScope, event_tracking, localStorage, $cacheFactory, labels) ->
 		monkeyPatchSearch($rootScope, $compile)
+		
 
 		return  {
 			scope: {
@@ -94,7 +96,7 @@ define [
 				cursorPositionManager = new CursorPositionManager(scope, editor, element, localStorage)
 				trackChangesManager   = new TrackChangesManager(scope, editor, element)
 				if attrs.enableAutoCompleteFeatures
-					labelsManager         = new LabelsManager(scope, editor, element)
+					labelsManager         = new LabelsManager(scope, editor, element, labels)
 					autoCompleteManager   = new AutoCompleteManager(scope, editor, element, labelsManager)
 
 				# Prevert Ctrl|Cmd-S from triggering save dialog

+ 3 - 4
services/web/public/coffee/ide/editor/directives/aceEditor/labels/LabelsManager.coffee

@@ -10,8 +10,7 @@ define [
 			return null
 
 	class LabelsManager
-		constructor: (@$scope, @editor, @element) ->
-			@labelsMaster = @$scope.labelsMaster
+		constructor: (@$scope, @editor, @element, @Labels) ->
 			@loadLabelsTimeout = null
 
 			onChange = (change) =>
@@ -35,7 +34,7 @@ define [
 
 		loadCurrentDocLabelsFromServer: () ->
 			currentDocId = @$scope.docId
-			@labelsMaster.loadDocLabelsFromServer(currentDocId)
+			@Labels.loadDocLabelsFromServer(currentDocId)
 
 		scheduleLoadCurrentDocLabelsFromServer: () ->
 			# De-bounce loading labels with a timeout
@@ -49,4 +48,4 @@ define [
 			)
 
 		getAllLabels: () ->
-			@labelsMaster.getAllLabels()
+			@Labels.getAllLabels()

+ 0 - 42
services/web/public/coffee/ide/labels/LabelsMaster.coffee

@@ -1,42 +0,0 @@
-define [
-], () ->
-	class LabelsMaster
-		constructor: (@ide, @$scope) ->
-
-			@_state = {
-				documents: {}
-			}
-
-			@$scope.$on 'doc:labels:updated', (e, data) =>
-				if data.docId and data.labels
-					@_state.documents[data.docId] = data.labels
-
-			@$scope.$on 'entity:deleted', (e, entity) =>
-				if entity.type == 'doc'
-					delete @_state.documents[entity.id]
-
-			@$scope.$on 'file:upload:complete', (e, upload) =>
-				if upload.entity_type == 'doc'
-					@loadDocLabelsFromServer(upload.entity_id)
-
-			# load project labels now
-			@loadProjectLabelsFromServer()
-
-		getAllLabels: () ->
-			_.flatten(labels for docId, labels of @_state.documents)
-
-		## Loaders
-		loadProjectLabelsFromServer: () ->
-			@ide.$http
-				.get("/project/#{window.project_id}/labels")
-				.success (data) =>
-					if data.projectLabels
-						for docId, docLabels of data.projectLabels
-							@_state.documents[docId] = docLabels
-
-		loadDocLabelsFromServer: (docId) ->
-			@ide.$http
-				.get("/project/#{window.project_id}/#{docId}/labels")
-				.success (data) =>
-					if data.docId and data.labels
-						@_state.documents[data.docId] = data.labels

+ 1 - 0
services/web/public/coffee/main.coffee

@@ -30,6 +30,7 @@ define [
 	"directives/maxHeight"
 	"directives/creditCards"
 	"services/queued-http"
+	"services/labels"
 	"filters/formatDate"
 	"__MAIN_CLIENTSIDE_INCLUDES__"
 ], () ->

+ 43 - 0
services/web/public/coffee/services/labels.coffee

@@ -0,0 +1,43 @@
+define [
+	"base"
+], (App) ->
+
+	App.factory 'labels', ($http, ide) ->
+
+		state = {documents: {}}
+
+		labels = {
+			state: state
+		}
+
+		labels.onDocLabelsUpdated = (e, data) ->
+			if data.docId and data.labels
+				state.documents[data.docId] = data.labels
+
+		labels.onEntityDeleted = (e, entity) ->
+			if entity.type == 'doc'
+				delete state.documents[entity.id]
+
+		labels.onFileUploadComplete = (e, upload) ->
+			if upload.entity_type == 'doc'
+				labels.loadDocLabelsFromServer(upload.entity_id)
+
+		labels.getAllLabels = () ->
+			_.flatten(labels for docId, labels of state.documents)
+
+		labels.loadProjectLabelsFromServer = () ->
+			$http
+				.get("/project/#{window.project_id}/labels")
+				.success (data) ->
+					if data.projectLabels
+						for docId, docLabels of data.projectLabels
+							state.documents[docId] = docLabels
+
+		labels.loadDocLabelsFromServer = (docId) ->
+			$http
+				.get("/project/#{window.project_id}/#{docId}/labels")
+				.success (data) ->
+					if data.docId and data.labels
+						state.documents[data.docId] = data.labels
+
+		return labels