=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/i18n/i18n_app.properties' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/i18n/i18n_app.properties 2015-02-25 14:51:26 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/i18n/i18n_app.properties 2015-03-03 15:19:07 +0000 @@ -188,3 +188,6 @@ max=Max number_of_events=Number of events this_financial_year=This financial year +duplicate=Duplicate +remove=Remove +select=Select === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/scripts/app.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/scripts/app.js 2015-02-27 09:52:12 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/scripts/app.js 2015-03-03 17:54:42 +0000 @@ -117,8 +117,9 @@ triggerCmpWidth = 17, valueCmpWidth = 235, rangeSetWidth = 135, - namePadding = '2px 3px', + namePadding = '3px 3px', margin = '3px 0 1px', + removeCmpStyle = 'padding: 0; margin-left: 3px', defaultRangeSetId = 'default'; Ext.define('Ext.ux.panel.DataElementIntegerContainer', { @@ -160,11 +161,13 @@ var a = record.filter.split(':'); if (a.length > 1 && Ext.isString(a[1])) { - this.rangeValueCmp.setValue(a[1].split(';')); + this.onRangeSearchSelect(a[1].split(';'), true); } } } else if (record.filter) { + this.rangeSetCmp.pendingValue = defaultRangeSetId; + var a = record.filter.split(':'); if (a.length > 1) { @@ -190,7 +193,7 @@ cls: 'ns-linkbutton', style: 'padding: 0', height: 18, - text: 'Duplicate', + text: NS.i18n.duplicate, handler: function() { container.duplicateDataElement(); } @@ -198,9 +201,9 @@ this.removeCmp = Ext.create('Ext.button.Button', { cls: 'ns-linkbutton', - style: 'padding: 0', + style: removeCmpStyle, height: 18, - text: 'Remove', + text: NS.i18n.remove, handler: function() { container.removeDataElement(); } @@ -237,9 +240,16 @@ }); // function - this.filterSearchStore = function() { + this.filterSearchStore = function(isLayout) { var selected = container.rangeValueCmp.getValue(); + // hack, using internal method to activate dropdown before filtering + if (isLayout) { + container.rangeSearchCmp.onTriggerClick(); + container.rangeSearchCmp.collapse(); + } + + // filter container.rangeSearchStore.clearFilter(); container.rangeSearchStore.filterBy(function(record) { @@ -247,11 +257,31 @@ }); }; + // function + this.onRangeSearchSelect = function(ids, isLayout) { + ids = Ext.Array.from(ids); + + // store + for (var i = 0, id; i < ids.length; i++) { + id = ids[i]; + + if (container.rangeValueStore.findExact(idProperty, id) === -1) { + container.rangeValueStore.add(container.rangeSearchStore.getAt(container.rangeSearchStore.findExact(idProperty, id)).data); + } + } + + // search cmp + container.rangeSearchCmp.select([]); + + // filter + container.filterSearchStore(isLayout); + }; + this.rangeSearchCmp = Ext.create('Ext.form.field.ComboBox', { multiSelect: true, width: operatorCmpWidth, - style: 'margin-bottom:0', - emptyText: 'Select..', + style: 'margin-bottom: 0', + emptyText: NS.i18n.select + '..', valueField: idProperty, displayField: displayProperty, editable: false, @@ -259,22 +289,11 @@ hidden: true, store: this.rangeSearchStore, listConfig: { - minWidth: 326 + minWidth: operatorCmpWidth + (nameCmpWidth - operatorCmpWidth - rangeSetWidth) }, listeners: { select: function() { - var id = Ext.Array.from(this.getValue())[0]; - - // value - if (container.rangeValueStore.findExact(idProperty, id) === -1) { - container.rangeValueStore.add(container.rangeSearchStore.getAt(container.rangeSearchStore.findExact(idProperty, id)).data); - } - - // search - this.select([]); - - // filter - container.filterSearchStore(); + container.onRangeSearchSelect(Ext.Array.from(this.getValue())[0]); }, expand: function() { container.filterSearchStore(); @@ -296,7 +315,7 @@ this.rangeValueCmp = Ext.create('Ext.form.field.ComboBox', { multiSelect: true, - style: 'margin-bottom:0', + style: 'margin-bottom: 0', width: nameCmpWidth - operatorCmpWidth - rangeSetWidth, valueField: idProperty, displayField: nameProperty, @@ -333,15 +352,15 @@ // function this.onRangeSetSelect = function(id) { - var ranges; - - if (id === defaultRangeSetId) { + if (!id || id === defaultRangeSetId) { container.operatorCmp.show(); container.valueCmp.show(); container.rangeSearchCmp.hide(); container.rangeValueCmp.hide(); } else { + var ranges; + container.operatorCmp.hide(); container.valueCmp.hide(); container.rangeSearchCmp.show(); @@ -362,6 +381,7 @@ this.rangeSetCmp = Ext.create('Ext.form.field.ComboBox', { cls: 'ns-combo h22', + style: 'margin-bottom: 0', width: rangeSetWidth, height: 22, fieldStyle: 'height: 22px', @@ -374,6 +394,8 @@ setPendingValue: function() { if (this.pendingValue) { this.setValue(this.pendingValue); + container.onRangeSetSelect(this.pendingValue); + this.pendingValue = null; } }, @@ -387,7 +409,7 @@ name: 'No range set' }); - cb.setValue(defaultRangeSetId); + //cb.setValue(defaultRangeSetId); Ext.Ajax.request({ url: ns.core.init.contextPath + '/api/dataElements/' + container.dataElement.id + '.json?fields=legendSet[id,name]', @@ -396,8 +418,13 @@ if (Ext.isObject(r) && Ext.isObject(r.legendSet)) { cb.store.add(r.legendSet); - cb.setPendingValue(); + + cb.setValue(r.legendSet.id); + container.onRangeSetSelect(r.legendSet.id); } + }, + callback: function() { + cb.setPendingValue(); } }); }, @@ -473,7 +500,7 @@ this.removeCmp = Ext.create('Ext.button.Button', { cls: 'ns-linkbutton', - style: 'padding: 0', + style: removeCmpStyle, height: 18, text: 'Remove', handler: function() { @@ -570,7 +597,7 @@ this.removeCmp = Ext.create('Ext.button.Button', { cls: 'ns-linkbutton', - style: 'padding: 0', + style: removeCmpStyle, height: 18, text: 'Remove', handler: function() { @@ -668,7 +695,7 @@ this.removeCmp = Ext.create('Ext.button.Button', { cls: 'ns-linkbutton', - style: 'padding: 0', + style: removeCmpStyle, height: 18, text: 'Remove', handler: function() { @@ -779,7 +806,7 @@ this.removeCmp = Ext.create('Ext.button.Button', { cls: 'ns-linkbutton', - style: 'padding: 0', + style: removeCmpStyle, height: 18, text: 'Remove', handler: function() { === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/scripts/core.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/scripts/core.js 2015-02-27 09:52:12 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/scripts/core.js 2015-03-03 17:14:13 +0000 @@ -620,7 +620,7 @@ return array.length; }; - support.prototype.array.sort = function(array, direction, key) { + support.prototype.array.sort = function(array, direction, key, emptyFirst) { // supports [number], [string], [{key: number}], [{key: string}], [[string]], [[number]] if (!support.prototype.array.getLength(array)) { @@ -661,6 +661,14 @@ return direction === 'DESC' ? b - a : a - b; } + else if (a === undefined || a === null) { + return emptyFirst ? -1 : 1; + } + + else if (b === undefined || b === null) { + return emptyFirst ? 1 : -1; + } + return -1; }); @@ -760,6 +768,29 @@ return o; }; + support.prototype.array.getObjectDataById = function(array, sourceArray, properties, idProperty) { + array = Ext.Array.from(array); + sourceArray = Ext.Array.from(sourceArray); + properties = Ext.Array.from(properties); + idProperty = idProperty || 'id'; + + for (var i = 0, obj; i < array.length; i++) { + obj = array[i]; + + for (var j = 0, sourceObj; j < sourceArray.length; j++) { + sourceObj = sourceArray[j]; + + if (Ext.isString(obj[idProperty]) && sourceObj[idProperty] && obj[idProperty].indexOf(sourceObj.id) !== -1) { + for (var k = 0, property; k < properties.length; k++) { + property = properties[k]; + + obj[property] = sourceObj[property]; + } + } + } + } + }; + // object support.prototype.object = {}; @@ -1285,7 +1316,7 @@ } } - // restore order for options + // restore item order for (var i = 0, orgDim; i < originalDimensions.length; i++) { orgDim = originalDimensions[i]; @@ -1294,6 +1325,7 @@ continue; } + // user specified options/legends if (Ext.isString(orgDim.filter)) { var a = orgDim.filter.split(':'); @@ -1322,6 +1354,21 @@ } } } + // no specified legends -> sort by start value + else if (orgDim.legendSet && orgDim.legendSet.id) { + for (var j = 0, dim, items; j < dimensions.length; j++) { + dim = dimensions[j]; + + if (dim.dimension === orgDim.dimension && dim.items && dim.items.length) { + + // get start/end value + support.prototype.array.getObjectDataById(dim.items, init.idLegendSetMap[orgDim.legendSet.id].legends, ['startValue', 'endValue']); + + // sort by start value + support.prototype.array.sort(dim.items, 'ASC', 'startValue'); + } + } + } } // re-layout @@ -1805,7 +1852,8 @@ displayId = Ext.isNumber(parsedId) ? parsedId : (names[id] || id); // update names - names[fullId] = (isMeta ? '' : header.column + ' ') + displayId; + //names[fullId] = (isMeta ? '' : header.column + ' ') + displayId; + names[fullId] = displayId; // update rows response.rows[j][i] = fullId; @@ -1968,7 +2016,7 @@ return xResponse; }; - }()); + }()); // web (function() { === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/styles/style.css' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/styles/style.css 2015-02-25 14:51:26 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-event-reports/styles/style.css 2015-03-03 15:19:07 +0000 @@ -834,8 +834,8 @@ background: transparent; } .ns-linkbutton .x-btn-inner { - color: #4a66ae; color: #3162c5; + padding: 0; } .ns-linkbutton.x-btn-over .x-btn-inner { text-decoration: underline;