Hi Dave,
PFA updated patch.
On Wed, Nov 22, 2017 at 10:26 PM, Dave Page <[email protected]> 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