Univention Bugzilla – Bug 32027
Replace dojo EnhancedGrid with dgrid
Last modified: 2017-04-04 18:29:49 CEST
We could use the new dgrid in replacement of the deprecated dojox/grid/EnhancedDataGrid which we are currently using. The dgrid is faster in performance and easier to adapt to our needs. We are already using dgrid for the overview and App center page. dgrid also make use of the easier to manage Dojo object store. However, this would also mean to adapt the UMC Computer room module in UCS@school to this change. Some links about the dgrid: https://github.com/SitePen/dgrid http://dojofoundation.org/packages/dgrid/ https://github.com/SitePen/dgrid/wiki See also Bug 26857 and Bug 28073.
*** Bug 27041 has been marked as a duplicate of this bug. ***
*** Bug 28073 has been marked as a duplicate of this bug. ***
This would allow us to overwrite the sorting mechanism of our grid (needed to completely fix Bug #40747). This would also allow us to fix the tree reloading as well as defining actions with buttons in the tree as needed in Bug #40831). Plus the context menu handling would be unified/generic.
The new grid should also fix Bug #31522.
*** Bug 30493 has been marked as a duplicate of this bug. ***
*** Bug 25087 has been marked as a duplicate of this bug. ***
*** Bug 33180 has been marked as a duplicate of this bug. ***
*** Bug 34384 has been marked as a duplicate of this bug. ***
*** Bug 33618 has been marked as a duplicate of this bug. ***
*** Bug 30809 has been marked as a duplicate of this bug. ***
*** Bug 37857 has been marked as a duplicate of this bug. ***
*** Bug 31522 has been marked as a duplicate of this bug. ***
The UCS 4.2 System Setup currently does not start due to this error: TypeError: this.moduleStore.query(...).observe is not a function Stack trace: .cache["umc/widgets/Grid"]/</<.postMixInProperties@http://localhost/univention/js/dojo/dojo.js:61853:20 .cache["dijit/_WidgetBase"]/</_WidgetBase<.create@http://localhost/univention/js/dojo/dojo.js:23196:4 .cache["dijit/_WidgetBase"]/</_WidgetBase<.postscript@http://localhost/univention/js/dojo/dojo.js:23150:4 chainedConstructor/<@http://localhost/univention/js/dojo/dojo.js:14852:5 ._setupAppGallery@http://localhost/univention/management/modules/setup/ApplianceWizard.js:1236:20 .buildRendering@http://localhost/univention/management/modules/setup/ApplianceWizard.js:1490:4 .cache["dijit/_WidgetBase"]/</_WidgetBase<.create@http://localhost/univention/js/dojo/dojo.js:23214:4 .cache["dijit/_WidgetBase"]/</_WidgetBase<.postscript@http://localhost/univention/js/dojo/dojo.js:23150:4 chainedConstructor/<@http://localhost/univention/js/dojo/dojo.js:14852:5 ._renderWizard@http://localhost/univention/management/modules/setup.js:219:18 .buildRendering/<@http://localhost/univention/management/modules/setup.js:114:6 .cache["dojo/_base/lang"]/</lang.hitch/<@http://localhost/univention/js/dojo/dojo.js:2725:48 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6840:21 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 all/</<@http://localhost/univention/js/dojo/dojo.js:13392:7 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6840:21 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6861:4 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 handleResponse@http://localhost/univention/js/dojo/dojo.js:6175:4 onLoad@http://localhost/univention/js/dojo/dojo.js:6201:5 ".cache["umc/widgets/Grid"]/</<.postMixInProperties@http://localhost/univention/js/dojo/dojo.js:61853:20 .cache["dijit/_WidgetBase"]/</_WidgetBase<.create@http://localhost/univention/js/dojo/dojo.js:23196:4 .cache["dijit/_WidgetBase"]/</_WidgetBase<.postscript@http://localhost/univention/js/dojo/dojo.js:23150:4 chainedConstructor/<@http://localhost/univention/js/dojo/dojo.js:14852:5 ._setupAppGallery@http://localhost/univention/management/modules/setup/ApplianceWizard.js:1236:20 .buildRendering@http://localhost/univention/management/modules/setup/ApplianceWizard.js:1490:4 .cache["dijit/_WidgetBase"]/</_WidgetBase<.create@http://localhost/univention/js/dojo/dojo.js:23214:4 .cache["dijit/_WidgetBase"]/</_WidgetBase<.postscript@http://localhost/univention/js/dojo/dojo.js:23150:4 chainedConstructor/<@http://localhost/univention/js/dojo/dojo.js:14852:5 ._renderWizard@http://localhost/univention/management/modules/setup.js:219:18 .buildRendering/<@http://localhost/univention/management/modules/setup.js:114:6 .cache["dojo/_base/lang"]/</lang.hitch/<@http://localhost/univention/js/dojo/dojo.js:2725:48 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6840:21 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 all/</<@http://localhost/univention/js/dojo/dojo.js:13392:7 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6840:21 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6861:4 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 .cache["dojo/Deferred"]/</signalDeferred@http://localhost/univention/js/dojo/dojo.js:6884:6 .cache["dojo/Deferred"]/</signalListener@http://localhost/univention/js/dojo/dojo.js:6855:6 .cache["dojo/Deferred"]/</signalWaiting@http://localhost/univention/js/dojo/dojo.js:6831:4 .cache["dojo/Deferred"]/</Deferred/this.resolve@http://localhost/univention/js/dojo/dojo.js:6995:5 handleResponse@http://localhost/univention/js/dojo/dojo.js:6175:4 onLoad@http://localhost/univention/js/dojo/dojo.js:6201:5
(In reply to Florian Best from comment #13) > The UCS 4.2 System Setup currently does not start due to this error: > > TypeError: this.moduleStore.query(...).observe is not a function Not every store is automatically a observable. I added this to univention-system-setup: univention-system-setup (10.0.0-16): r75597 | Bug #32027: (Bug #42291): make the app store observable to prevent exception I don't know If this should be further fixed in the grid.
Successful build Package: univention-web Version: 1.0.3-3A~4.2.0.201701201545 Branch: ucs_4.2-0
There are exceptions in the UVMM module's formatter functions: var description = col.description(item); → col.description is an empty string. Maybe the wrong arguments are passed to the formatter function? _viewFormatter (uvmm.js:1305) (anonymous function) (dojo.js:2744) col.formatter (dojo.js:62316) _defaultRenderCell (dojo.js:63150) _createBodyRowCell (dojo.js:63095) (anonymous function) (dojo.js:2744) createRowCells (dojo.js:63070) renderRow (dojo.js:63158) insertRow (dojo.js:61196) inherited (dojo.js:14688) insertRow (dojo.js:64473) renderArray (dojo.js:61155) inherited (dojo.js:14688) renderArray (dojo.js:64447) inherited (dojo.js:14688) renderArray (dojo.js:65472) (anonymous function) (dojo.js:64659) signalListener (dojo.js:6922) Deferred.then.promise.then (dojo.js:7143) renderQueryResults (dojo.js:64658) inherited (dojo.js:14688) renderQueryResults (dojo.js:63754) (anonymous function) (dojo.js:63649) _trackError (dojo.js:64611) renderQuery (dojo.js:63645) refresh (dojo.js:63729) inherited (dojo.js:14688) refresh (dojo.js:65468) _updateColumns (dojo.js:63460) _setColumns (dojo.js:63444) set (dojo.js:61438) _setColumnsAttr (dojo.js:62341) setColumnsAndActions (dojo.js:62243) updateGrid (uvmm.js:1752) (anonymous function) (uvmm.js:405) (anonymous function) (dojo.js:2746) (anonymous function) (dojo.js:30072) signalListener (dojo.js:6922) signalWaiting (dojo.js:6913) Deferred.resolve (dojo.js:7077) (anonymous function) (dojo.js:30068) setTimeout (async) defer () _handleResize () (anonymous function) ()
(In reply to Florian Best from comment #16) > There are exceptions in the UVMM module's formatter functions: > ... This happens in uvmm.js in the method: > _viewFormatter: function(val, rowIndex, col) It seems that the arguments differ from the previous implementation, here is the output from the console with break on exception, i.e., arguments are the parameters for _viewFormatter(): > console.log(JSON.stringify(arguments, null, 2)) { "0": true, "1": { "node_available": true, "vnc": true, "description": "", "mem": 2147483648, "vnc_port": 5900, "cpuUsage": 22.991672655029454, "state": "RUNNING", "suspended": false, "label": "ucs41-64", "type": "domain", "id": "qemu://...", "nodeName": "dc0.tmp.dev" }, "2": { "node_available": true, "vnc": true, "description": "", "mem": 2147483648, "vnc_port": 5900, "cpuUsage": 22.991672655029454, "state": "RUNNING", "suspended": false, "label": "ucs41-64", "type": "domain", "id": "qemu://...", "nodeName": "dc0.tmp.dev" } }
univention-web (1.0.13-2): r76433 | Bug #32027: fix formatter parameter of grid actions
univention-web (1.0.13-3): r76439 | Bug #32027: fix formatter parameter of grid actions There was also a .formatter() call from dgrid itself which gave only 2 arguments.
REOPEN: The quota module doesn't show any content in the partition column anymore.
The updater module doesn't scroll to the bottom anymore when fetching the logfile contents.
(In reply to Florian Best from comment #20) > REOPEN: The quota module doesn't show any content in the partition column > anymore. univention-web: 1.0.15-6 r76486: fix columns without default actions The handling of columns without default actions was broken. I added a bug to add default actions in the quota module: Bug 43507
(In reply to Florian Best from comment #21) > The updater module doesn't scroll to the bottom anymore when fetching the > logfile contents. I opened a new bug for that: Bug 43508
The height of the body? does not change after changing a module. After scrolling through a long list and clicking on the home button, the page is still as long as the list.
(In reply to Jürn Brodersen from comment #24) > The height of the body? does not change after changing a module. > After scrolling through a long list and clicking on the home button, the > page is still as long as the list. See Bug 43509
Instead of "Alle Einträge geladen" I would like something like "10 Einträge geladen".
The tree needs lazy loading, too?!
There is a reference to the deleted this._dataStore! ~/svn/dev/branches/ucs/management/univention-web/js/widgets/Grid.js 612 » » » » » » » » » return this._dataStore.getValue(iitem, this.moduleStore.idProperty);
@Juern The property cacheRowWidgets seems to be gone. Can you say something about this?
The footerFormatter is not evaluated anymore. Instead the grid shows always "all Entries loaded". No way to overwrite this.
The function _updateFooterContent has also been removed, which is used in the UCS@school computerroom grid.
(In reply to Florian Best from comment #30) > The footerFormatter is not evaluated anymore. Instead the grid shows always > "all Entries loaded". No way to overwrite this. (In reply to Florian Best from comment #31) > The function _updateFooterContent has also been removed, which is used in > the UCS@school computerroom grid. I fixed both of these: univention-web (1.0.25-1): r76823 | Bug #32027: restore grid footer behavior
The tooltips aren't shown anymore if one overwrites the grid's cell content with a e.g. umc.widgets.Text.
The grid footer always says "Please perform a search" at the beginning when no entries exists. This message is wrong for grids which doesn't include any search.
(In reply to Florian Best from comment #29) > @Juern > The property cacheRowWidgets seems to be gone. Can you say something about > this? It's gone for quite some time now :) Introduced in bug 29249 and removed with bug 26418
(In reply to Jürn Brodersen from comment #35) > (In reply to Florian Best from comment #29) > > @Juern > > The property cacheRowWidgets seems to be gone. Can you say something about > > this? > > It's gone for quite some time now :) > Introduced in bug 29249 and removed with bug 26418 Alright, then it's fine. I will remove it from UCS@school.
(In reply to Florian Best from comment #36) > (In reply to Jürn Brodersen from comment #35) > > (In reply to Florian Best from comment #29) > > > @Juern > > > The property cacheRowWidgets seems to be gone. Can you say something about > > > this? > > > > It's gone for quite some time now :) > > Introduced in bug 29249 and removed with bug 26418 > > Alright, then it's fine. I will remove it from UCS@school. It can also be removed from uvmm
(In reply to Florian Best from comment #34) > The grid footer always says "Please perform a search" at the beginning when > no entries exists. This message is wrong for grids which doesn't include any > search. As far as I know the grid doesn't know about the search widget. Would it be ok to either add an "hasSearchWidget" attribute or call "filter" on the grid at least once?
(In reply to Jürn Brodersen from comment #38) > (In reply to Florian Best from comment #34) > > The grid footer always says "Please perform a search" at the beginning when > > no entries exists. This message is wrong for grids which doesn't include any > > search. > > As far as I know the grid doesn't know about the search widget. Would it be > ok to either add an "hasSearchWidget" attribute Better would be to replace the message with a generic one or make the string configurable. > or call "filter" on the grid > at least once? That's not possible as we often have deactivated autosearch and not every grid store supports filtering.
The appliance wizard overwrite _onRowClick which doesn't exists anymore: $ git grep _onRowClick base/univention-system-setup/var/www/univention/setup/ApplianceWizard.js:» » _onRowClick: function(evt) {
(In reply to Florian Best from comment #40) > The appliance wizard overwrite _onRowClick which doesn't exists anymore: > > $ git grep _onRowClick > base/univention-system-setup/var/www/univention/setup/ApplianceWizard.js:» > » _onRowClick: function(evt) { You can use selectionMode: "multiple" instead, that should do the same. (Select multiple rows without a modifier key)
(In reply to Jürn Brodersen from comment #41) > (In reply to Florian Best from comment #40) > > The appliance wizard overwrite _onRowClick which doesn't exists anymore: > > > > $ git grep _onRowClick > > base/univention-system-setup/var/www/univention/setup/ApplianceWizard.js:» > > » _onRowClick: function(evt) { > > You can use > selectionMode: "multiple" > instead, that should do the same. (Select multiple rows without a modifier > key) Can you adjust this in the file directly?
(In reply to Florian Best from comment #33) > The tooltips aren't shown anymore if one overwrites the grid's cell content > with a e.g. umc.widgets.Text. What tooltips do you mean? The ucr module is working but that is setting its own tooltips.
(In reply to Florian Best from comment #34) > The grid footer always says "Please perform a search" at the beginning when > no entries exists. This message is wrong for grids which doesn't include any > search. This is now configurable with "initialStatusMessage"
(In reply to Florian Best from comment #32) > (In reply to Florian Best from comment #30) > > The footerFormatter is not evaluated anymore. Instead the grid shows always > > "all Entries loaded". No way to overwrite this. > > (In reply to Florian Best from comment #31) > > The function _updateFooterContent has also been removed, which is used in > > the UCS@school computerroom grid. > > I fixed both of these: > univention-web (1.0.25-1): > r76823 | Bug #32027: restore grid footer behavior Did you moved the footer back to the bottom? Anyways I opened a new bug 43630 to discuss how the footer should be shown.
The grid that show the installation of apps in the domain doesn't show any apps.
(In reply to Jürn Brodersen from comment #46) > The grid that show the installation of apps in the domain doesn't show any > apps. r77694: Fix grid for appDetailsPage in app center
Can you change "0 Nutzer von 5 ausgewählt" into "0 von 5 Benutzer ausgewählt"?
(In reply to Florian Best from comment #48) > Can you change "0 Nutzer von 5 ausgewählt" into "0 von 5 Benutzer > ausgewählt"? This would be "0 von 5 Benutzer*n* ausgewählt". Which is is bit harder to translate, I guess.
(In reply to Dirk Wiesenthal from comment #49) > (In reply to Florian Best from comment #48) > > Can you change "0 Nutzer von 5 ausgewählt" into "0 von 5 Benutzer > > ausgewählt"? > > This would be "0 von 5 Benutzer*n* ausgewählt". Which is is bit harder to > translate, I guess. Since UCS 4.2 we have plural strings in ngettext.
r77823: fix select all checkbox in grids Package: univention-web Version: 1.0.39-2A~4.2.0.201703161604 Branch: ucs_4.2-0 I need an icon for the indeterminate state (some items are selected). A minus or wave or something like that.
r77828: fix window length after tab change The umcMainTabContainer uses a dijitStackContainer which uses the changed dijitHidden class: In the result all tabs there as long as the longest open tab. r77828: fix grid lazy rendering I broke the lazy rendering by changing the position of the status message...
r77905: remove wrong status messages in grid Package: univention-web Version: 1.0.39-5A~4.2.0.201703171611 Branch: ucs_4.2-0
(In reply to Florian Best from comment #48) > Can you change "0 Nutzer von 5 ausgewählt" into "0 von 5 Benutzer > ausgewählt"? I think udm is setting that string through a footer formater
(In reply to Florian Best from comment #50) > (In reply to Dirk Wiesenthal from comment #49) > > (In reply to Florian Best from comment #48) > > > Can you change "0 Nutzer von 5 ausgewählt" into "0 von 5 Benutzer > > > ausgewählt"? > > > > This would be "0 von 5 Benutzer*n* ausgewählt". Which is is bit harder to > > translate, I guess. > > Since UCS 4.2 we have plural strings in ngettext. I decided against using that function because it can't use objects, which makes the translation files hard to read.
Please add a changelog entry!
(In reply to Florian Best from comment #56) > Please add a changelog entry! r78067
r 78468 * Bug #32037: Fix alignment of grid buttons in tile view and adjust the scrollposition that triggers rendering of new items (Commited with wrong bug no.) r 78471 univention-management-console-module-udm (7.0.9-15) * Bug #32027: Fix css for firefox 31 - firefox 48 ------------------------------------------------- Tested with Firefox 38; IE 11; EDGE 13; Safari 9.1; Chrome 43 OK: styling is ok in all tested browsers OK: lazy rendering works in all tested browsers OK: selection of multiple rows with checkboxes, ctr and shift key works in all tested browsers OK~: Selection of multiple users in the tile view of Users module only possible with ctr key but that is ok. Exception: In Safari the detailpage of the user was opened even if ctr was held down. Could be due to lack of apple command key (tested with browserstack on an mac) OK: changelog entry -> Verified
UCS 4.2 has been released: https://docs.software-univention.de/release-notes-4.2-0-en.html https://docs.software-univention.de/release-notes-4.2-0-de.html If this error occurs again, please use "Clone This Bug".