anchor.diff:  //      $viewport.forEach((_)=> _.onScroll.matches('*').listen( (e)=> throttler.throttle(e) ));
   
         //TODO tets
  -      $headerScroller.forEach((_)=> _..onContextMenu.listen(handleHeaderContextMenu)
  -      ..onClick.listen(handleHeaderClick));
  -      $headerScroller.forEach((_)=> _.querySelectorAll('.slick-header-column').onMouseEnter.listen(handleHeaderMouseEnter));
  -      $headerScroller.forEach((_)=> _.querySelectorAll('.slick-header-column').onMouseLeave.listen(handleHeaderMouseLeave));
  -      $headerRowScroller.forEach((_)=> _.onScroll.listen(handleHeaderRowScroll));
  +      $headerScroller
  +          .forEach((_) => _..onContextMenu.listen(handleHeaderContextMenu)..onClick.listen(handleHeaderClick));
  +      $headerScroller
  +          .forEach((_) => _.querySelectorAll('.slick-header-column').onMouseEnter.listen(handleHeaderMouseEnter));
  +      $headerScroller
  +          .forEach((_) => _.querySelectorAll('.slick-header-column').onMouseLeave.listen(handleHeaderMouseLeave));
  +      $headerRowScroller.forEach((_) => _.onScroll.listen(handleHeaderRowScroll));
         _$focusSink.onKeyDown.listen(handleKeyDown);
         _$focusSink2.onKeyDown.listen(handleKeyDown);
   
  -      $canvas.forEach((_)=> _..onKeyDown.listen(handleKeyDown)
  -      ..onClick.listen(handleClick)
  -      ..onMouseDown.listen(_handleMouseDown)
  -      // ignore: STRONG_MODE_DOWN_CAST_COMPOSITE
  -      ..onDoubleClick.listen(handleDblClick)
  -      );
  +      $canvas.forEach((_) => _
  +        ..onKeyDown.listen(handleKeyDown)
  +        ..onClick.listen(handleClick)
  +        ..onMouseDown.listen(_handleMouseDown)
  +        // ignore: STRONG_MODE_DOWN_CAST_COMPOSITE
  +        ..onDoubleClick.listen(handleDblClick));
   //TODO fix me
   //      ..onContextMenu.listen(handleContextMenu)
   
  -    //  $canvas.forEach((_)=> _
  -    //  ..onMouseDown.listen(handleDownOnCanvas));
  -
  -
  -    }
  -  }  //end of initialize
  -
  -    void registerPlugin(IPlugin plugin) {
  -      plugins.add(plugin);
  -      plugin.init(this);
  -    }
  -
  -    void unregisterPlugin(IPlugin plugin) {
  -      plugins.remove(plugin);
  -      plugin.destroy();
  -    }
  -    void setSelectionModel(SelectionModel model) {
  -      if (selectionModel!=null ) {
  -        selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged);
  -        selectionModel.destroy();
  -      }
  -
  -      selectionModel = model;
  -      if (selectionModel!=null) {
  -        selectionModel.init(this);
  -        selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged);
  -      }
  -    }
  +      //  $canvas.forEach((_)=> _
  +      //  ..onMouseDown.listen(handleDownOnCanvas));
  +
  +    }
  +  } //end of initialize
  +
  +  void registerPlugin(IPlugin plugin) {
  +    plugins.add(plugin);
  +    plugin.init(this);
  +  }
  +
  +  void unregisterPlugin(IPlugin plugin) {
  +    plugins.remove(plugin);
  +    plugin.destroy();
  +  }
  +
  +  void setSelectionModel(SelectionModel model) {
  +    if (selectionModel != null) {
  +      selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged);
  +      selectionModel.destroy();
  +    }
  +
  +    selectionModel = model;
  +    if (selectionModel != null) {
  +      selectionModel.init(this);
  +      selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged);
  +    }
  +  }
   //    void setSelectionModel( model) {
  -      //TODO model : selection model
  +  //TODO model : selection model
   //      if (selectionModel) {
   //        selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged);
   //        if (selectionModel.destroy) {
  
positive.code:   /// 1. construct elements
    /// 2. link element to event listeners
    void init() {
  
      // calculate these only once and share between grid instances
      if(maxSupportedCssHeight == null) maxSupportedCssHeight = getMaxSupportedCssHeight();
      if(scrollbarDimensions ==null)scrollbarDimensions = measureScrollbar();
  
  //    defaults.forEach( (k,v) =>
  //        options.putIfAbsent(k, ()=> v)
  
negative.code:     getViewportWidth();
      _getViewportHeight();
  // Account for Frozen Rows
      if (hasFrozenRows) {
        if (_options.frozenBottom) {
          paneTopH = viewportH - frozenRowsHeight - scrollbarDimensions['height'];
          paneBottomH = frozenRowsHeight + scrollbarDimensions['height'];
        } else {
          paneTopH = frozenRowsHeight;
          paneBottomH = viewportH - frozenRowsHeight;
        }
      } else {
        paneTopH = viewportH;
      }
  
  // The top pane includes the top panel and the header row
      paneTopH += topPanelH + headerRowH;
  
      if (_options.frozenColumn > -1 && _options.autoHeight) {
        paneTopH += scrollbarDimensions['height'];
      }
  
      // The top viewport does not contain the top panel or header row
      viewportTopH = paneTopH - topPanelH - headerRowH;
  
      if (_options.autoHeight == true) {
        if (_options.frozenColumn > -1) {
          container.style.height =
              '${paneTopH + int.parse($headerScrollerL.style.height.replaceFirst("px", ""), onError: (_)=>0)}px';
        }
        $paneTopL.style.position = 'relative';
      }
      $paneTopL.style.top = '${$paneHeaderL.contentEdge.height}px';
      $paneTopL.style.height = '${paneTopH}px';
      //fix me, replase offsetTo to other
      // int paneBottomTop = ($paneTopL.offsetTo($paneTopL.parent).y + paneTopH).round();
      int paneBottomTop = ($paneTopL.offset.top + paneTopH).round();
      $viewportTopL.style.height = '${viewportTopH}px';
  
      if (_options.frozenColumn > -1) {
        $paneTopR.style.top = '${$paneHeaderL.contentEdge.height}px';
        $paneTopR.style.height = '${paneTopH}px';
  
        $viewportTopR.style.height = '${viewportTopH}px';
  
        if (hasFrozenRows) {
          $paneBottomL.style.top = '${paneBottomTop}px';
          $paneBottomL.style.height = '${paneBottomH}px';
          $paneBottomR.style.top = '${paneBottomTop}px';
          $paneBottomR.style.height = '${paneBottomH}px';
          $viewportBottomR.style.height = '${paneBottomH}px';
        }
      } else {
        if (hasFrozenRows) {
          $paneBottomL.style.width = '100%';
          $paneBottomL.style.height = '${paneBottomH}px';
          $paneBottomL.style.top = '${paneBottomTop}px';
        }
      }
  
      if (hasFrozenRows) {
        $viewportBottomL.style.height = '${paneBottomH}px';
  
        if (_options.frozenBottom) {
          $canvasBottomL.style.height = '${frozenRowsHeight}px';
  
          if (_options.frozenColumn > -1) {
            $canvasBottomR.style.height = '${frozenRowsHeight}px';
          }
        } else {
          $canvasTopL.style.height = '${frozenRowsHeight}px';
  
          if (_options.frozenColumn > -1) {
            $canvasTopR.style.height = '${frozenRowsHeight}px'; //(frozenRowsHeight);
          }
        }
      } else {
        if (_options.frozenColumn > -1) {
          //no frozen row, but frozen column
          $viewportTopR.style.height = '${viewportTopH}px'; //(viewportTopH);
        }
      }
  
      if (_options.forceFitColumns == true) {
        autosizeColumns();
      }
  
      /* this looks like duplicate code from line #761.
       * It is very hard to tell if this is outside of the last closing }
  