jqgrid-patch.js 2.38 KB
// przerobiony fragment kodu jqgrid
$.jgrid.extend({
    //ostatnio zaznaczony wiersz
    lastSelectedId: undefined,
    //pomocnicza zmienna : jeśli true, to po załadowaniu grida
    //należy odpalić setSelection z parametrem lastSelectedId
    //uwaga: to nie to samo co odpalić scrollToLastSelection
    setOnComplete: false,
    //widok z funkcją mówiącą, który w kolejności będzie wiersz o danym id
    findIdUrl: undefined,

    //scrolluje do wiersza który jest 'row'-ty od góry, przy założeniu
    //że wszystkich wierszy jest rowcount
    scrollToRow: function (row, rowcount) {
        "use strict";
        return this.each(function () {
            var clientHeight = $(this.grid.bDiv)[0].clientHeight;
            var scrollRange = $(this.grid.bDiv)[0].scrollHeight;
            //Załóżmy, że wiersze mają jedną wysokość...
            var rowTop = Math.round((row - 1) * (scrollRange / rowcount));
            $(this.grid.bDiv)[0].scrollTop = rowTop - Math.round(clientHeight / 2);
        });
    },

    //scrolls to row and sets selection
    scrollAndSet: function (id, row, count) {
        "use strict";
        return this.each(function () {
            var $t = this;
            $($t).jqGrid('setGridParam', {'lastSelectedId': id});
            if ($t.rows.namedItem(id)) {
                $($t).jqGrid('setSelection', id);
            }
            else {//odwlekamy zaznaczanie do załadowania (complete)
                $($t).jqGrid('setGridParam', {'setOnComplete': true});
            }
            $($t).jqGrid('scrollToRow', row, count);
        });
    },

    scrollToId: function (id) {
        "use strict";
        return this.each(function () {
            var $t = this;
            var data = {
                id: id
            };
            $.extend(data, $($t).jqGrid('getGridParam', 'postData'));

            $.get($t.p.findIdUrl, data, function (resp) {
                var rowIndex = resp.rowIndex;
                var recordsCount = resp.records;
                $($t).jqGrid('scrollAndSet', id, rowIndex, recordsCount);
            });
        });
    },

    //wracamy do ostatniego zaznaczenia
    scrollToLastSelection: function () {
        "use strict";
        return this.each(function () {
            if (this.p.lastSelectedId !== undefined) {
                $(this).jqGrid('scrollToId', this.p.lastSelectedId);
            }
        });
    }
});