dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #41109
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 20927: PT noext.
------------------------------------------------------------
revno: 20927
committer: Jan Henrik Overland <janhenrik.overland@xxxxxxxxx>
branch nick: dhis2
timestamp: Mon 2015-11-02 18:37:19 +0100
message:
PT noext.
modified:
dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-pivot/scripts/core2.js
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-pivot/scripts/core2.js'
--- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-pivot/scripts/core2.js 2015-11-02 15:29:07 +0000
+++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-pivot/scripts/core2.js 2015-11-02 17:37:19 +0000
@@ -13,6 +13,10 @@
isDefined,
arrayFrom,
arrayClean,
+ arrayPluck,
+ arrayIndexOf,
+ arrayUnique,
+ arrayContains,
clone,
enumerables = ['valueOf', 'toLocaleString', 'toString', 'constructor'];
@@ -96,6 +100,66 @@
return results;
};
+ arrayPluck = function(array, propertyName) {
+ var newArray = [],
+ i, len, item;
+
+ for (i = 0, len = array.length; i < len; i++) {
+ item = array[i];
+
+ newArray.push(item[propertyName]);
+ }
+
+ return newArray;
+ };
+
+ arrayIndexOf = ('indexOf' in Array.prototype) ? function(array, item, from) {
+ return Array.prototype.indexOf.call(array, item, from);
+ } : function(array, item, from) {
+ var i, len = array.length;
+
+ for (i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++) {
+ if (array[i] === item) {
+ return i;
+ }
+ }
+
+ return -1;
+ };
+
+ // dep: arrayIndexOf
+ arrayUnique = function(array) {
+ var newArray = [],
+ i = 0,
+ len = array.length,
+ item;
+
+ for (; i < len; i++) {
+ item = array[i];
+
+ if (arrayIndexOf(newArray, item) === -1) {
+ newArray.push(item);
+ }
+ }
+
+ return newArray;
+ };
+
+ // dep: arrayIndexOf
+ arrayContains = ('indexOf' in Array.prototype) ? function(array, item) {
+ return arrayPrototype.indexOf.call(array, item) !== -1;
+ } : function(array, item) {
+ var i, len;
+
+ for (i = 0, len = array.length; i < len; i++) {
+ if (array[i] === item) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
clone = function(item) {
if (item === null || item === undefined) {
return item;
@@ -151,6 +215,10 @@
NS.isDefined = isDefined;
NS.arrayFrom = arrayFrom;
NS.arrayClean = arrayClean;
+ NS.arrayPluck = arrayPluck;
+ NS.arrayIndexOf = arrayIndexOf;
+ NS.arrayUnique = arrayUnique;
+ NS.arrayContains = arrayContains;
NS.clone = clone;
})();
@@ -466,7 +534,7 @@
Record.prototype.val = function() {
if (!NS.isString(this.id)) {
- console.log('Record', 'Id is not a string', this);
+ console.log('(Record)', 'Id is not a string', this);
return;
}
@@ -497,17 +565,28 @@
Dimension.prototype.val = function() {
if (!NS.isString(this.dimension)) {
- console.log('Dimension', 'Dimension is not a string', this);
+ console.log('(Dimension)', 'Dimension is not a string', this);
return;
}
if (!this.items.length && this.dimension !== 'co') {
- console.log('Dimension', 'No items', this);
+ console.log('(Dimension)', 'No items', this);
return;
}
return this;
};
+
+ Dimension.prototype.getRecordIds = function(isSorted) {
+ var ids = NS.arrayPluck(this.items, 'id');
+ return isSorted ? ids.sort() : ids;
+ };
+
+ // dep 1
+
+ Dimension.prototype.url = function() {
+ return 'dimension=' + this.dimension + ':' + NS.arrayUnique(this.getRecordIds()).join(';');
+ };
})();
// Axis
@@ -525,24 +604,26 @@
})();
// prototype
- t.each = function(fn) {
- for (var i = 0, axis; i < this.length; i++) {
- fn.call(this, this[i]);
- }
- };
-
t.val = function() {
if (!this.length) {
- console.log('Axis', 'No dimensions', this);
+ console.log('(Axis)', 'No dimensions', this);
return;
}
return this;
};
+ t.each = function(fn) {
+ for (var i = 0, dimension; i < this.length; i++) {
+ dimension = this[i];
+ fn.call(this, dimension);
+ }
+ };
+
t.has = function(dimensionName) {
- for (var i = 0; i < this.length; i++) {
- if (this[i].dimension === dimensionName) {
+ for (var i = 0, dimension; i < this.length; i++) {
+ dimension = this[i];
+ if (dimension.dimension === dimensionName) {
return true;
}
}
@@ -550,6 +631,12 @@
return false;
};
+ t.sorted = function() {
+ return NS.clone(this).sort(function(a, b) {
+ return a.dimension - b.dimension;
+ });
+ };
+
return t;
};
})();
@@ -633,14 +720,24 @@
}
$.extend(t, forceApplyConfig);
+
+ // uninitialized
+ t.dimensionNameIdsMap;
};
Layout.prototype.getAxes = function(includeFilter) {
return NS.arrayClean(this.columns, this.rows, (includeFilter ? this.filters : null));
};
- Layout.prototype.getDimensions = function(includeFilter) {
- return this.dimensions = NS.arrayClean([].concat(this.columns, this.rows, includeFilter ? this.filters : null));
+ Layout.prototype.getDimensions = function(includeFilter, isSorted) {
+ var dimensions = NS.arrayClean([].concat(this.columns, this.rows, (includeFilter ? this.filters : null)));
+ return isSorted ? dimensions.sort(function(a, b) {return a.dimension - b.dimension;}) : dimensions;
+ };
+
+ Layout.prototype.getUserOrgUnitUrl = function() {
+ if (NS.isArray(this.userOrgUnit) && this.userOrgUnit.length) {
+ return 'userOrgUnit=' + this.userOrgUnit.join(';');
+ }
};
// dep 1
@@ -655,7 +752,7 @@
return false;
};
- Layout.prototype.getDimensionNames = function(includeFilter) {
+ Layout.prototype.getDimensionNames = function(includeFilter, isSorted) {
this.dimensionNames = [];
for (var i = 0, dimensions = this.getDimensions(includeFilter); i < dimensions.length; i++) {
@@ -665,6 +762,23 @@
return this.dimensionNames;
};
+ Layout.prototype.getDimensionNameIdsMap = function() {
+ if (this.dimensionNameIdsMap) {
+ return this.dimensionNameIdsMap;
+ }
+
+ var dimensions = this.getDimensions(true),
+ map = {};
+
+ for (var i = 0, dimension; i < dimensions.length; i++) {
+ dimension = dimensions[i];
+
+ map[dimension.dimension] = dimensions.getRecordIds();
+ }
+
+ return this.dimensionNameIdsMap = map;
+ };
+
// dep 2
Layout.prototype.val = function() {
@@ -683,7 +797,78 @@
return this;
};
- //Layout.prototype.url = function(sortParams) {
+ Layout.prototype.url = function(isSorted) {
+ var axisDimensions = this.getDimensions(false, isSorted),
+ aggTypes = ['COUNT', 'SUM', 'STDDEV', 'VARIANCE', 'MIN', 'MAX'],
+ request = new NS.Api.Request(),
+ i;
+
+ // dimensions
+ for (i = 0, dimension; i < axisDimensions.length; i++) {
+ dimension = axisDimensions.length;
+
+ request.add(dimension.url(isSorted));
+ }
+
+ // filters
+ if (this.filters) {
+ this.filters.each(function(dimension) {
+ request.add(dimension.url(isSorted));
+ });
+ }
+
+ // hierarchy
+ if (this.showHierarchy) {
+ request.add('hierarchyMeta=true');
+ }
+
+ // completed only
+ if (this.completedOnly) {
+ request.add('completedOnly=true');
+ }
+
+ // aggregation type
+ if (NS.arrayContains(aggTypes, this.aggregationType)) {
+ request.add('aggregationType=' + this.aggregationType);
+ }
+
+ // user org unit
+ if (NS.isArray(this.userOrgUnit) && this.userOrgUnit.length) {
+ request.add(this.getUserOrgUnitUrl());
+ }
+
+ // data approval level
+ if (NS.isObject(this.dataApprovalLevel) && NS.isString(this.dataApprovalLevel.id) && this.dataApprovalLevel.id !== 'DEFAULT') {
+ request.add('approvalLevel=' + this.dataApprovalLevel.id);
+ }
+
+ // TODO program
+ if (NS.isObject(this.program) && NS.isString(this.program.id)) {
+ request.add('program=' + this.program.id);
+ }
+
+ // relative period date
+ if (this.relativePeriodDate) {
+ request.add('relativePeriodDate=' + this.relativePeriodDate);
+ }
+
+ // skip rounding
+ if (this.skipRounding) {
+ request.add('skipRounding=true');
+ }
+
+ // display property
+ request.add('displayProperty=' + ((this.displayProperty || '').toUpperCase()));
+
+ return request.url();
+ };
+
+
+
+
+
+
+
@@ -698,6 +883,32 @@
})();
+ // Request
+ (function() {
+ var Request = NS.Api.Request = function(config) {
+ var t = this;
+
+ // constructor
+ t.params = [];
+
+ (function() {
+ if (NS.isArray(config) && config.length) {
+ t.params = config;
+ }
+ })();
+ };
+
+ Request.prototype.add = function(param) {
+ if (NS.isString(param)) {
+ this.params.push(param);
+ }
+ };
+
+ Request.prototype.url = function() {
+ return '?' + this.params.join('&').replace(/#/g, '.');
+ };
+ })();
+
// Header
(function() {
var Header = NS.Api.Header = function(config) {