From 5b391f384884f26dbcb900cbe2b7143a78fe2f57 Mon Sep 17 00:00:00 2001 From: Vit Brunner Date: Wed, 8 Oct 2014 20:20:55 +0200 Subject: [PATCH] Better components interaction --- .../documents/scripts/controllers.js.coffee | 32 +++++------ .../scripts/services/poems.js.coffee | 57 +++++++++---------- 2 files changed, 39 insertions(+), 50 deletions(-) diff --git a/source/documents/scripts/controllers.js.coffee b/source/documents/scripts/controllers.js.coffee index ee142c2..6b0eefb 100644 --- a/source/documents/scripts/controllers.js.coffee +++ b/source/documents/scripts/controllers.js.coffee @@ -1,32 +1,26 @@ angular.module("sideBySide.controllers", []) .controller "AppController", [ - '$scope' - ($scope) -> + '$routeParams', '$scope', 'poems' + ($routeParams, $scope, poems) -> $scope.$on "$routeChangeSuccess", ($currentRoute, $previousRoute) -> $scope.base = if $previousRoute.params.base \ then '/' + $previousRoute.params.base else '' + + poems.load $routeParams.base ] .controller "ComparisonController", [ - '$routeParams', '$rootScope', '$scope', 'poems', 'transformer' - ($routeParams, $rootScope, $scope, poems, transformer) -> - $scope.columns = 1 - $scope.verses = [[{ - section: 'Loading...' - text: 'Please be patient!' - }]] - - poemsUpdated = $rootScope.$on "poemsUpdated", () -> - results = poems.get() - $scope.columns = results.length - transformed = transformer(results) + '$scope', 'poems', 'transformer' + ($scope, poems, transformer) -> + $scope.$watchCollection () -> + poems.active.length + , () -> + $scope.columns = poems.active.length + transformed = transformer(poems.active) $scope.verses = transformed.verses $scope.meta = transformed.meta - headingKey = poems.getHeading() or "Author" + + headingKey = poems.heading or "Author" $scope.headings = (version[headingKey] for version in transformed.meta) - - $scope.$on '$destroy', poemsUpdated - poems.load $routeParams.base - ] diff --git a/source/documents/scripts/services/poems.js.coffee b/source/documents/scripts/services/poems.js.coffee index c9cb8e9..c7931b4 100644 --- a/source/documents/scripts/services/poems.js.coffee +++ b/source/documents/scripts/services/poems.js.coffee @@ -1,42 +1,37 @@ -angular.module("sideBySide").service "poems", ['$rootScope', '$q', 'fetch', ($rootScope, $q, fetch) -> - poems = [] - loaded = false - heading = undefined +angular.module("sideBySide").service "poems", ['$q', 'fetch', ($q, fetch) -> + all = [] + @active = [{ + meta: {} + content: [{ + section: 'Loading...' + text: 'Please be patient!' + }] + }] + @heading = undefined - @load = (base = '') -> + updateActive = () => + @active = (poem for poem in all when poem.meta.Active is true) + + @load = (base = '') => config = base.replace(/\./g, '/') + "/config.json" - if loaded == true - $rootScope.$emit "poemsUpdated" - else - fetch(config).then((result) -> - $q.all(result.promises).then((results) -> - for poem in results - if not poem.meta.Active? - poem.meta.Active = true - poems.push poem + fetch(config).then (result) => + $q.all(result.promises).then (results) => + for poem in results + if not poem.meta.Active? + poem.meta.Active = true + all.push poem - heading = result.heading - loaded = true - - $rootScope.$emit "poemsUpdated" - ) - ) - - @get = () -> - poem for poem in poems when poem.meta.Active is true - - @getHeading = () -> - heading + @heading = result.heading + updateActive() @show = (id) -> - poems[id].meta.Active = true - $rootScope.$emit "poemsUpdated" - + all[id].meta.Active = true + updateActive() @hide = (id) -> - poems[id].meta.Active = false - $rootScope.$emit "poemsUpdated" + all[id].meta.Active = false + updateActive() @ ]