cms/app-client/mirage/serializers/theme.js
changeset 474 245b4df137d3
parent 319 78990a8a069b
child 532 1190ea937f2d
--- a/cms/app-client/mirage/serializers/theme.js	Tue Dec 13 23:30:54 2016 +0100
+++ b/cms/app-client/mirage/serializers/theme.js	Fri Dec 16 17:43:07 2016 +0100
@@ -4,33 +4,52 @@
 
 export default JSONAPISerializer.extend({
 
-    serialize: function(response, request) {
-        // Remove models with no name
-        response.models = response.models.filter(element => element.label);
-        // Alphabetical order
-        if(request.queryParams.sort === 'alphabetical') {
-            response.models.sort(function(a, b) {
-                var aLabel = a.label.toUpperCase();
-                var bLabel = b.label.toUpperCase();
-                if (aLabel < bLabel) { return -1; }
-                if (aLabel > bLabel) { return 1; }
-                return 0;
-            });
-        // Descending order
-        } else if(request.queryParams.sort === 'descending') {
-            response.models.sort(function(a, b) {
-                return b.count - a.count;
-            });
-        }
-        var array = [];
-        if(typeof request.queryParams.index !== 'undefined' && typeof request.queryParams.limit !== 'undefined') {
-            var begin = parseInt(request.queryParams.index * request.queryParams.limit) || 0;
-            var end = parseInt(begin + (request.queryParams.limit - 1));
-            array = response.models.slice(begin, end);
-        } else {
-            array = response.models;
-        }
-        return { 'themes': _(array).map((theme) => { return [theme.id, {count: theme.count, label: theme.label}];}).object().value() };
+  serialize: function (response, request) {
+
+    // Remove models with no name
+    response.models = response.models.filter(element => element.label);
+
+    let qParams = request.queryParams['theme'];
+    if (qParams) {
+      response.models = response.models
+        .slice(0, response.models.length / Math.pow(2, qParams.length))
+        .map(t => {
+          t.count = Math.max(Math.floor(t.count / 2), 1);
+          return t;
+        });
     }
 
+    let total = response.models.length;
+
+    // Alphabetical order
+    if (request.queryParams.sort === 'alphabetical') {
+      response.models.sort(function (a, b) {
+        var aLabel = a.label.toUpperCase();
+        var bLabel = b.label.toUpperCase();
+        if (aLabel < bLabel) { return -1; }
+        if (aLabel > bLabel) { return 1; }
+        return 0;
+      });
+      // Descending order
+    } else if (request.queryParams.sort === 'descending') {
+      response.models.sort(function (a, b) {
+        return b.count - a.count;
+      });
+    }
+    var array = [];
+    if (typeof request.queryParams.index !== 'undefined' && typeof request.queryParams.limit !== 'undefined') {
+      var begin = parseInt(request.queryParams.index) * parseInt(request.queryParams.limit) || 0;
+      var end = begin + parseInt(request.queryParams.limit);
+      array = response.models.slice(begin, end);
+    } else {
+      array = response.models;
+    }
+    return {
+      themes: _(array).map((theme) => { return [theme.id, { count: theme.count, label: theme.label }]; }).object().value(),
+      meta: {
+        total: total
+      }
+    };
+  }
+
 });