From f3860664a699be2d5b702d805f6958ba5e86ef76 Mon Sep 17 00:00:00 2001 From: Vit Brunner Date: Sun, 21 Dec 2014 21:14:13 +0100 Subject: [PATCH] Split poem loading --- Gruntfile.coffee | 1 + source/scripts/controllers.js.coffee | 9 ++++++--- source/scripts/services/fetch.js.coffee | 7 +++---- source/scripts/services/load.js.coffee | 25 ++++++++++++++++++++++++ source/scripts/services/poems.js.coffee | 26 +------------------------ 5 files changed, 36 insertions(+), 32 deletions(-) create mode 100644 source/scripts/services/load.js.coffee diff --git a/Gruntfile.coffee b/Gruntfile.coffee index 796f4cc..2b4f034 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -50,6 +50,7 @@ module.exports = (grunt) -> 'scripts/services/reader/json.js' 'scripts/services/transformer.js' 'scripts/services/filter.js' + 'scripts/services/load.js' 'scripts/controllers.js' ] styles: [ diff --git a/source/scripts/controllers.js.coffee b/source/scripts/controllers.js.coffee index 1661a4c..f80b565 100644 --- a/source/scripts/controllers.js.coffee +++ b/source/scripts/controllers.js.coffee @@ -3,8 +3,8 @@ angular.module("sideBySide.controllers", []) () -> null ] .controller "ComparisonController", [ - '$document', '$rootScope', '$scope', 'route', 'poems', 'transformer' - ($document, $rootScope, $scope, route, poems, transformer) -> + '$document', '$rootScope', '$scope', 'load', 'poems', 'route', 'transformer' + ($document, $rootScope, $scope, load, poems, route, transformer) -> min = 1 max = 5 @@ -49,5 +49,8 @@ angular.module("sideBySide.controllers", []) $scope.pick = false - poems.load route.appUrl + '/' + route.params.base.replace(/\./g, '/') + load( + route.appUrl + '/' + route.params.base.replace(/\./g, '/') + route.params.display + ) ] diff --git a/source/scripts/services/fetch.js.coffee b/source/scripts/services/fetch.js.coffee index e8252c2..44aaf55 100644 --- a/source/scripts/services/fetch.js.coffee +++ b/source/scripts/services/fetch.js.coffee @@ -2,7 +2,7 @@ angular.module("sideBySide").factory "fetch", ['$http', '$q', 'readerFactory', ( # Fetch # # @param base [String] Path to config file directory - # @return [Object] Promises and heading + # @return [Object] Promises and config data (base) -> file = base + '/config.json' $http.get(file).then (config) -> @@ -11,8 +11,7 @@ angular.module("sideBySide").factory "fetch", ['$http', '$q', 'readerFactory', ( readerFactory(poem) response.data { - fetchPoems: $q.all promises - heading: config.data.heading - display: config.data.display + fetchedPoems: $q.all promises + data: config.data } ] diff --git a/source/scripts/services/load.js.coffee b/source/scripts/services/load.js.coffee new file mode 100644 index 0000000..bb8e887 --- /dev/null +++ b/source/scripts/services/load.js.coffee @@ -0,0 +1,25 @@ +angular.module("sideBySide").factory "load", ['fetch', 'poems', (fetch, poems) -> + # Load poems + # + # @param base [String] Path to config file directory + # @param display [Object] Eg: { Language: [ 'English', 'Czech' ] } + (base, display) -> + # Activize poem based on passed rules + # + # @param poem [Object] + # @param display [Object] { meta: [ 'active', 'values' ] } + # @return poem + activize = (poem, display) -> + poem.meta.Active = true if !display + + for metaKey,values of display + poem.meta.Active = true if poem.meta[metaKey] in values + + poem + + fetch(base).then (config) -> + config.fetchedPoems.then (poemList) -> + disp = display or config.data.display + poems.all = (activize(poem, disp) for poem in poemList) + poems.heading = config.data.heading +] diff --git a/source/scripts/services/poems.js.coffee b/source/scripts/services/poems.js.coffee index 8300a9d..d378d17 100644 --- a/source/scripts/services/poems.js.coffee +++ b/source/scripts/services/poems.js.coffee @@ -1,4 +1,4 @@ -angular.module("sideBySide").service "poems", ['fetch', 'route', (fetch, route) -> +angular.module("sideBySide").service "poems", () -> @all = [{ meta: { Active: true @@ -23,28 +23,4 @@ angular.module("sideBySide").service "poems", ['fetch', 'route', (fetch, route) @getInactive = () -> (poem for poem in @all when poem.meta.Active is not true) - # Activize poem based on passed rules - # - # @param poem [Object] - # @param active [Object] { meta: [ 'active', 'values' ] } - # @return poem - activize = (poem, active) -> - poem.meta.Active = true if !active - - for metaKey,values of active - poem.meta.Active = true if poem.meta[metaKey] in values - - poem - - # Load poems - # - # @param base [String] - @load = (base) => - fetch(base).then (config) => - config.fetchPoems.then (poems) => - display = route.params.display or config.display - @all = (activize(poem, display) for poem in poems) - @heading = config.heading - @ -]