=== modified file 'dhis-2/dhis-web/dhis-web-pivot/src/main/resources/org/hisp/dhis/pivot/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-pivot/src/main/resources/org/hisp/dhis/pivot/i18n_module.properties 2013-11-01 15:43:02 +0000 +++ dhis-2/dhis-web/dhis-web-pivot/src/main/resources/org/hisp/dhis/pivot/i18n_module.properties 2013-12-04 12:50:08 +0000 @@ -143,4 +143,5 @@ yearly=Yearly financial_oct=Financial October financial_july=Financial July -financial_april=Financial April \ No newline at end of file +financial_april=Financial April +plugin_config=Plugin config \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/i18n.json' --- dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/i18n.json 2013-11-25 13:57:03 +0000 +++ dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/i18n.json 2013-12-04 12:53:04 +0000 @@ -144,5 +144,6 @@ "yearly", "financial_oct", "financial_july", -"financial_april" +"financial_april", +"plugin_config" ] === modified file 'dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/app.js' --- dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/app.js 2013-12-03 16:59:29 +0000 +++ dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/app.js 2013-12-05 10:23:38 +0000 @@ -886,7 +886,7 @@ ns.app.stores.reportTable.loadStore(); - ns.app.interpretationButton.enable(); + ns.app.shareButton.enable(); window.destroy(); } @@ -1125,7 +1125,7 @@ ns.app.stores.reportTable.loadStore(); - ns.app.interpretationButton.enable(); + ns.app.shareButton.enable(); } }); } @@ -1642,7 +1642,7 @@ headers: {'Content-Type': 'text/html'}, success: function() { textArea.reset(); - ns.app.interpretationButton.disable(); + ns.app.shareButton.disable(); window.hide(); } }); @@ -1675,7 +1675,7 @@ }, listeners: { show: function(w) { - ns.core.web.window.setAnchorPosition(w, ns.app.interpretationButton); + ns.core.web.window.setAnchorPosition(w, ns.app.shareButton); document.body.oncontextmenu = true; @@ -1956,8 +1956,8 @@ valueEl.dom.uuidDimUuidsMap = uuidDimUuidsMap; valueEl.dom.uuidObjectMap = uuidObjectMap; valueEl.dom.setAttribute('onclick', 'this.onValueMouseClick(this.layout, this.response, this.uuidDimUuidsMap, this.uuidObjectMap, this.id);'); - valueEl.dom.setAttribute('onmouseover', 'this.onValueMouseOver(this.id);'); - valueEl.dom.setAttribute('onmouseout', 'this.onValueMouseOut(this.id);'); + valueEl.dom.setAttribute('onmouseover', 'this.onValueMouseOver(this);'); + valueEl.dom.setAttribute('onmouseout', 'this.onValueMouseOut(this);'); } } } @@ -2409,6 +2409,9 @@ favoriteButton, openTableLayoutTab, downloadButton, + interpretationItem, + pluginItem, + shareButton, accordionBody, accordion, @@ -4723,6 +4726,20 @@ window.open(ns.core.init.contextPath + '/api/analytics.jrxml' + ns.app.paramString, '_blank'); } } + }, + { + xtype: 'label', + text: NS.i18n.plugin_config, + style: 'padding:7px 5px 5px 7px; font-weight:bold' + }, + { + text: 'JSON', + iconCls: 'ns-menu-item-datasource', + handler: function() { + if (ns.app.layout) { + alert(JSON.stringify(ns.core.service.layout.layout2plugin(ns.app.layout))); + } + } } ], listeners: { @@ -4736,30 +4753,18 @@ } }); - interpretationButton = Ext.create('Ext.button.Button', { - text: NS.i18n.share, - menu: {}, + interpretationItem = Ext.create('Ext.menu.Item', { + text: 'Write interpretation' + '  ', + iconCls: 'ns-menu-item-tablelayout', disabled: true, xable: function() { if (ns.app.layout.id) { this.enable(); - this.disabledTooltip.destroy(); } else { - if (ns.app.xLayout) { - this.disable(); - this.createTooltip(); - } + this.disable(); } }, - disabledTooltip: null, - createTooltip: function() { - this.disabledTooltip = Ext.create('Ext.tip.ToolTip', { - target: this.getEl(), - html: NS.i18n.save_load_favorite_before_sharing, - 'anchor': 'bottom' - }); - }, handler: function() { if (ns.app.interpretationWindow) { ns.app.interpretationWindow.destroy(); @@ -4768,10 +4773,94 @@ ns.app.interpretationWindow = InterpretationWindow(); ns.app.interpretationWindow.show(); + } + }); + + pluginItem = Ext.create('Ext.menu.Item', { + text: 'Embed as plugin' + '  ', + iconCls: 'ns-menu-item-datasource', + disabled: true, + xable: function() { + if (ns.app.layout) { + this.enable(); + } + else { + this.disable(); + } + }, + handler: function() { + var textArea, + window; + + textArea = Ext.create('Ext.form.field.TextArea', { + width: 400, + height: 200, + readOnly: true, + cls: 'ns-textarea monospaced', + value: JSON.stringify(ns.core.service.layout.layout2plugin(ns.app.layout)), + listeners: { + afterrender: function(ta) { + Ext.defer(function() { + ta.selectText(); + }, 50); + } + } + }); + + window = Ext.create('Ext.window.Window', { + title: 'Plugin configuration', + layout: 'fit', + modal: true, + resizable: false, + items: textArea, + bodyStyle: 'color:blue', + destroyOnBlur: true, + listeners: { + show: function(w) { + ns.core.web.window.setAnchorPosition(w, ns.app.shareButton); + + document.body.oncontextmenu = true; + + if (!w.hasDestroyOnBlurHandler) { + ns.core.web.window.addDestroyOnBlurHandler(w); + } + }, + hide: function() { + document.body.oncontextmenu = function(){return false;}; + } + } + }); + + window.show(); + } + }); + + shareButton = Ext.create('Ext.button.Button', { + text: NS.i18n.share, + xableItems: function() { + interpretationItem.xable(); + pluginItem.xable(); + }, + menu: { + cls: 'ns-menu', + shadow: false, + showSeparator: false, + items: [ + interpretationItem, + pluginItem + ], + listeners: { + afterrender: function() { + this.getEl().addCls('ns-toolbar-btn-menu'); + }, + show: function() { + shareButton.xableItems(); + } + } }, listeners: { added: function() { - ns.app.interpretationButton = this; + ns.app.shareButton = this; } } }); @@ -4822,7 +4911,7 @@ }, favoriteButton, downloadButton, - interpretationButton, + shareButton, '->', defaultButton, { @@ -4997,7 +5086,7 @@ downloadButton.enable(); if (layout.id) { - interpretationButton.enable(); + shareButton.enable(); } // Set gui === modified file 'dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/core.js' --- dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/core.js 2013-12-03 17:05:57 +0000 +++ dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/core.js 2013-12-05 10:23:38 +0000 @@ -643,6 +643,7 @@ support.prototype.str.toggleDirection = function(direction) { return direction === 'DESC' ? 'ASC' : 'DESC'; }; + // number support.prototype.number = {}; @@ -1516,6 +1517,81 @@ return layout.showHierarchy && Ext.isObject(response.metaData.ouHierarchy) && response.metaData.ouHierarchy.hasOwnProperty(id); }; + service.layout.layout2plugin = function(layout) { + var layout = Ext.clone(layout), + dimensions = Ext.Array.clean([].concat(layout.columns || [], layout.rows || [], layout.filters || [])); + + if (Ext.isString(layout.id)) { + return {id: layout.id}; + } + + for (var i = 0, dimension, item; i < dimensions.length; i++) { + dimension = dimensions[i]; + + delete dimension.id; + delete dimension.ids; + delete dimension.type; + delete dimension.dimensionName; + delete dimension.objectName; + + for (var j = 0, item; j < dimension.items.length; j++) { + item = dimension.items[j]; + + delete item.name; + delete item.code; + delete item.created; + delete item.lastUpdated; + } + } + + if (layout.showTotals) { + delete layout.showTotals; + } + + if (layout.showSubTotals) { + delete layout.showSubTotals; + } + + if (!layout.hideEmptyRows) { + delete layout.hideEmptyRows; + } + + if (!layout.showHierarchy) { + delete layout.showHierarchy; + } + + if (layout.displayDensity === 'normal') { + delete layout.displayDensity; + } + + if (layout.fontSize === 'normal') { + delete layout.fontSize; + } + + if (layout.digitGroupSeparator === 'space') { + delete layout.digitGroupSeparator; + } + + if (!layout.legendSet) { + delete layout.legendSet; + } + + if (!layout.sorting) { + delete layout.sorting; + } + + delete layout.parentGraphMap; + delete layout.reportingPeriod; + delete layout.organisationUnit; + delete layout.parentOrganisationUnit; + delete layout.regression; + delete layout.cumulative; + delete layout.sortOrder; + delete layout.topLimit; + + return layout; + }; + // response service.response = {}; === modified file 'dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/styles/style.css' --- dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/styles/style.css 2013-12-03 11:12:47 +0000 +++ dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/styles/style.css 2013-12-04 17:23:27 +0000 @@ -204,6 +204,10 @@ background-color: #bac6d8; text-align: center; } +.pivot-dim-total.highlighted { + background-color: #adb8c9; +} + .pivot-dim-empty { background-color: #dae6f8; text-align: center; @@ -977,3 +981,8 @@ .ns-textarea .x-form-field { font-size: 11px; } + +.ns-textarea.monospaced textarea { + font-family: monospace, consolas, courier new; + padding: 4px; +}