Move labels into an Angular Service

This commit is contained in:
Shane Kilkelly 2017-06-12 09:44:32 +01:00
parent 56385a798b
commit 1bb065344c
6 changed files with 59 additions and 53 deletions

View file

@ -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

View file

@ -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

View file

@ -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()

View file

@ -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

View file

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

View file

@ -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