Hi Dave, PFA updated patch.
On Wed, Nov 22, 2017 at 10:26 PM, Dave Page <dp...@pgadmin.org> wrote: > Hi > > On Wed, Nov 22, 2017 at 3:18 PM, Murtuza Zabuawala <murtuza.zabuawala@ > enterprisedb.com> wrote: > >> Hi, >> >> PFA patch to fix the issue where while switching the tabs in query tool >> resets the position of the table viewport to the first row. >> RM#2875 >> >> *Steps:* >> 1) Open query tool >> 2) Execute: >> select * from generate_series(1, 1000) as "column-1"; >> 3) Scroll till the End OR till ~250 row >> 4) Click on 'Explain' Tab >> 5) Go back to 'Data output' Tab >> > > Hmm, minor issue; each time I return the to data tab, the data moves up > two rows! It's almost like it's calculating the viewport taking into > account the row header (e.g. row 250 is visible immediate below the > header), but then re-positioning without taking it into account (e.g. row > 250 is aligned with the top of the row header, thus making row 252 the > first visible one). > Fixed. > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company >
diff --git a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js index ba0ce67..f3d4267 100644 --- a/web/pgadmin/tools/sqleditor/static/js/sqleditor.js +++ b/web/pgadmin/tools/sqleditor/static/js/sqleditor.js @@ -917,7 +917,8 @@ define('tools.querytool', [ // fetch asynchronous setTimeout(self.fetch_next.bind(self)); } - }) + }); + // Resize SlickGrid when window resize $(window).resize(function () { // Resize grid only when 'Data Output' panel is visible. @@ -1025,9 +1026,36 @@ define('tools.querytool', [ /* This function is responsible to render output grid */ grid_resize: function (grid) { - var h = $($('#editor-panel').find('.wcFrame')[1]).height() - 35; - $('#datagrid').css({'height': h + 'px'}); + var prev_height = $('#datagrid').height(), + h = $($('#editor-panel').find('.wcFrame')[1]).height() - 35, + prev_viewport = grid.getViewport(), + prev_viewport_rows = grid.getRenderedRange(), + prev_cell = grid.getActiveCell(); + + // Apply css only if necessary, To avoid DOM operation + if (prev_height != h) { + $('#datagrid').css({'height': h + 'px'}); + } + grid.resizeCanvas(); + + /* + * If there is an active cell from user then we have to go to that cell + */ + if(prev_cell) { + grid.scrollCellIntoView(prev_cell.row, prev_cell.cell); + } + + // If already displaying from first row + if (prev_viewport.top == prev_viewport_rows.top) { + return + } + // if user has scroll to the end/last row + else if (prev_viewport.bottom - 2 == prev_viewport_rows.bottom) { + grid.scrollRowIntoView(prev_viewport.bottom); + } else { + grid.scrollRowIntoView(prev_viewport.bottom - 2); + } }, /* This function is responsible to create and render the