docs: function (index, shiftDown, metaKey) {
  
                  switch (this.$.selectionMode) {
                      case SELECTION_MODE_NONE:
                          return;
                      case SELECTION_MODE_SINGLE:
                          shiftDown = false;
                          metaKey = false;
                          break;
                      case SELECTION_MODE_MUTLI_ALT:
                          metaKey = true;
                          break;
                  }
  
                  if (!metaKey) {
                      this._clearSelection();
                  }
  
                  if (!shiftDown || metaKey) {
                      this.$lastSelectionIndex = index;
                  }
                  var startIndex, endIndex;
                  if (this.$lastSelectionIndex !== undefined && index < this.$lastSelectionIndex) {
                      startIndex = index;
                      endIndex = this.$lastSelectionIndex;
                  } else {
                      startIndex = this.$lastSelectionIndex;
                      endIndex = index;
                  }
                  this.$currentSelectionIndex = index;
                  var item, id;
                  for (var i = startIndex; i <= endIndex; i++) {
                      item = this.$.$dataAdapter.getItemAt(i);
  
                      id = null;
  
                      if (item) {
                          id = this.getSelectionKeyForItem(item.$.data)
                      }
  
                      if (id) {
                          if (metaKey && this.$selectionMap[id]) {
                              delete this.$selectionMap[id];
                              this.$.selectedItems.remove(item.$.data);
                          } else {
                              this.$selectionMap[id] = true;
                              this.$.selectedItems.add(item.$.data);
  
                          }
                      } else {
                          this.log("no id defined for data item", "warn");
                      }
                  }
                  var pos = this.getPointFromIndex(index);
                  if (this.$.scrollDirection === SCROLL_DIRECTION_VERTICAL) {
                      var y = pos.y, topDiff = y - this.$el.scrollTop, bottomDiff = topDiff + this.$._itemHeight + this.$.verticalGap - this.$.height;
                      topDiff -= this.$.verticalGap;
                      if (bottomDiff > 0) {
                          this.$el.scrollTop += bottomDiff;
                      }
                      if (topDiff < 0) {
                          this.$el.scrollTop += topDiff;
                      }
                  } else {
                      var x = pos.x, leftDiff = x - this.$el.scrollLeft, rightDiff = leftDiff + this.$._itemWidth + this.$.horizontalGap - this.$.width;
                      leftDiff -= this.$.horizontalGap;
                      if (rightDiff > 0) {
                          this.$el.scrollLeft += rightDiff;
                      }
                      if (leftDiff < 0) {
                          this.$el.scrollLeft += leftDiff;
                      }
                  }
                  if (!shiftDown) {
                      this.$lastSelectionIndex = index;
                  }
              }