jqgrid-patch.js 2.19 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) {
    return this.each(function(){
      var rowIndex = row;
      var recordsCount = rowcount;
      var clientHeight = $(this.grid.bDiv)[0].clientHeight;
      var scrollTop = $(this.grid.bDiv)[0].scrollTop;
      var scrollRange = $(this.grid.bDiv)[0].scrollHeight;
      //Załóżmy, że wiersze mają jedną wysokość...
      var rowTop = Math.round((rowIndex - 1) * (scrollRange / recordsCount));
      $(this.grid.bDiv)[0].scrollTop = rowTop - Math.round(clientHeight / 2);
    });
  },


  //scrolls to row and sets selection
  scrollAndSet : function(id, row, count) {
    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) {
    return this.each(function(){
        var $t = this;
        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() {
    return this.each(function() {
      if(this.p.lastSelectedId != undefined) {
        $(this).jqGrid('scrollToId', this.p.lastSelectedId);
      }
    });
  }
});