From 1bb065344cfd00c59739795f12167a498b06bcad Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Mon, 12 Jun 2017 09:44:32 +0100 Subject: [PATCH] Move labels into an Angular Service --- services/web/public/coffee/ide.coffee | 13 +++--- .../ide/editor/directives/aceEditor.coffee | 6 ++- .../aceEditor/labels/LabelsManager.coffee | 7 ++- .../coffee/ide/labels/LabelsMaster.coffee | 42 ------------------ services/web/public/coffee/main.coffee | 1 + .../web/public/coffee/services/labels.coffee | 43 +++++++++++++++++++ 6 files changed, 59 insertions(+), 53 deletions(-) delete mode 100644 services/web/public/coffee/ide/labels/LabelsMaster.coffee create mode 100644 services/web/public/coffee/services/labels.coffee diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 802f4b3c44..8f2c63ec21 100644 --- a/services/web/public/coffee/ide.coffee +++ b/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 diff --git a/services/web/public/coffee/ide/editor/directives/aceEditor.coffee b/services/web/public/coffee/ide/editor/directives/aceEditor.coffee index b26ace9d1b..5980a83dbb 100644 --- a/services/web/public/coffee/ide/editor/directives/aceEditor.coffee +++ b/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 diff --git a/services/web/public/coffee/ide/editor/directives/aceEditor/labels/LabelsManager.coffee b/services/web/public/coffee/ide/editor/directives/aceEditor/labels/LabelsManager.coffee index 1136a9e6c9..239a05dff9 100644 --- a/services/web/public/coffee/ide/editor/directives/aceEditor/labels/LabelsManager.coffee +++ b/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() diff --git a/services/web/public/coffee/ide/labels/LabelsMaster.coffee b/services/web/public/coffee/ide/labels/LabelsMaster.coffee deleted file mode 100644 index 6d8afbac85..0000000000 --- a/services/web/public/coffee/ide/labels/LabelsMaster.coffee +++ /dev/null @@ -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 diff --git a/services/web/public/coffee/main.coffee b/services/web/public/coffee/main.coffee index 5ad6f37d34..6f153b55aa 100644 --- a/services/web/public/coffee/main.coffee +++ b/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__" ], () -> diff --git a/services/web/public/coffee/services/labels.coffee b/services/web/public/coffee/services/labels.coffee new file mode 100644 index 0000000000..0c18ce277f --- /dev/null +++ b/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