anchor.diff:          header.append(new dom.Element.html("<span class='slick-sort-indicator' />", validator: nodeValidator));
         }
   
  -      trigger(self.onHeaderCellRendered, {
  +      fire(ON_HEADER_CELL_RENDERED, {
           "node": header[0],
           "column": m
         });
   
         if (options.showHeaderRow) {
  -        var headerRowCell = new dom.Element.html("<div class='ui-state-default slick-headerrow-column l" + i + " r" + i + "'></div>", validator: nodeValidator)
  +        var headerRowCell = new dom.Element.html("<div class='ui-state-default slick-headerrow-column l${i} r${i}'></div>", validator: nodeValidator)
               ..dataset["column"] =  m;
               $headerRow.append(headerRowCell);
   
  -        trigger(self.onHeaderRowCellRendered, {
  -          "node": headerRowCell[0],
  +        fire(ON_HEADER_ROW_CELL_RENDERED, {
  +          "node": headerRowCell.children[0],
             "column": m
           });
         }
  
positive.code:               applyColumnWidths();
              }
            })
            .bind("dragend", function (e, dd) {
              var newWidth;
              $(this).parent().removeClass("slick-header-column-active");
              for (j = 0; j < columnElements.length; j++) {
                c = columns[j];
                newWidth = $(columnElements[j]).outerWidth();
  
                if (c.previousWidth !== newWidth && c.rerenderOnResize) {
                  invalidateAllRows();
                }
              }
              updateCanvasWidth(true);
              render();
              trigger(self.onColumnsResized, {});
            });
      });
    }
  
    function getVBoxDelta($el) {
      var p = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"];
      var delta = 0;
      $.each(p, function (n, val) {
        delta += parseFloat($el.css(val)) || 0;
      });
      return delta;
    }
  
    function measureCellPaddingAndBorder() {
      var el;
      var h = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"];
      var v = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"];
  
      el = $("<div class='ui-state-default slick-header-column' style='visibility:hidden'>-</div>").appendTo($headers);
      headerColumnWidthDiff = headerColumnHeightDiff = 0;
      if (el.css("box-sizing") != "border-box" && el.css("-moz-box-sizing") != "border-box" && el.css("-webkit-box-sizing") != "border-box") {
        $.each(h, function (n, val) {
          headerColumnWidthDiff += parseFloat(el.css(val)) || 0;
        });
        $.each(v, function (n, val) {
          headerColumnHeightDiff += parseFloat(el.css(val)) || 0;
        });
      }
      el.remove();
  
      var r = $("<div class='slick-row' />").appendTo($canvas);
      el = $("<div class='slick-cell' id='' style='visibility:hidden'>-</div>").appendTo(r);
      cellWidthDiff = cellHeightDiff = 0;
      if (el.css("box-sizing") != "border-box" && el.css("-moz-box-sizing") != "border-box" && el.css("-webkit-box-sizing") != "border-box") {
        $.each(h, function (n, val) {
          cellWidthDiff += parseFloat(el.css(val)) || 0;
        });
        $.each(v, function (n, val) {
          cellHeightDiff += parseFloat(el.css(val)) || 0;
        });
      }
      r.remove();
  
      absoluteColumnMinWidth = Math.max(headerColumnWidthDiff, cellWidthDiff);
    }
  
    function createCssRules() {
      $style = $("<style type='text/css' rel='stylesheet' />").appendTo($("head"));
      var rowHeight = (options.rowHeight - cellHeightDiff);
      var rules = [
        "." + uid + " .slick-header-column { left: 1000px; }",
        "." + uid + " .slick-top-panel { height:" + options.topPanelHeight + "px; }",
        "." + uid + " .slick-headerrow-columns { height:" + options.headerRowHeight + "px; }",
        "." + uid + " .slick-cell { height:" + rowHeight + "px; }",
        "." + uid + " .slick-row { height:" + options.rowHeight + "px; }"
      ];
  
      for (var i = 0; i < columns.length; i++) {
        rules.push("." + uid + " .l" + i + " { }");
        rules.push("." + uid + " .r" + i + " { }");
      }
  
      if ($style[0].styleSheet) { // IE
        $style[0].styleSheet.cssText = rules.join(" ");
      } else {
        $style[0].appendChild(document.createTextNode(rules.join(" ")));
      }
    }
  
    function getColumnCssRules(idx) {
      if (!stylesheet) {
        var sheets = document.styleSheets;
        for (var i = 0; i < sheets.length; i++) {
          if ((sheets[i].ownerNode || sheets[i].owningElement) == $style[0]) {
            stylesheet = sheets[i];
            break;
  
negative.code:     });
    }
  
    void setupColumnResize() {
      dom.HtmlElement $col;
      int j;
      int c;
      int pageX;
      List<dom.HtmlElement> columnElements;
      int minPageX, maxPageX;
      bool firstResizable, lastResizable;
      columnElements = $headers.children;
      columnElements.querySelectorAll(".bwu-datagrid-resizable-handle").remove();
      columnElements.forEach( (i, e) {
        if (columns[i].resizable) {
          if (firstResizable == null) {
            firstResizable = i;
          }
          lastResizable = i;
        }
      });
      if (firstResizable == null) {
        return;
      }
      columnElements.forEach((i, e) {
        if (i < firstResizable || (options.forceFitColumns && i >= lastResizable)) {
          return;
        }
        $col = (e as dom.HtmlElement);
        var div = new dom.Element.html("<div class='bwu-datagrid-resizable-handle' />", validator: nodeValidator);
        e.append(div);
            div..onDragStart.listen((e, dd) {
              if (!getEditorLock().commitCurrentEdit()) {
                return false;
              }
              pageX = e.pageX;
              (e as dom.HtmlElement).parent().classes.add("bwu-datagrid-header-column-active");
              int shrinkLeewayOnRight = null, stretchLeewayOnRight = null;
              // lock each column's width option to current width
              columnElements.forEach((i, e) {
                columns[i].previousWidth = (e as dom.htmlElement).outerWidth();
              });
              if (options.forceFitColumns) {
                shrinkLeewayOnRight = 0;
  