calculate () {
      const { move, length } = this
      const { steps, direction } = move

      // By default assume that size of view is equal to one slide
      let viewSize = 1

      // While direction is `=` we want jump to
      // a specified index described in steps.
      if (direction === '=') {
        // Check if bound is true, 
        // as we want to avoid whitespaces.
        if( Glide.settings.bound && toInt(steps) > length ) {
          Glide.index = length
          return
        }

        Glide.index = steps

        return
      }

      // When pattern is equal to `>>` we want
      // fast forward to the last slide.
      if (direction === '>' && steps === '>') {
        Glide.index = length

        return
      }

      // When pattern is equal to `<<` we want
      // fast forward to the first slide.
      if (direction === '<' && steps === '<') {
        Glide.index = 0

        return
      }

      // pagination movement
      if (direction === '|') {
        viewSize = Glide.settings.perView || 1
      }

      // we are moving forward
      if (direction === '>' || (direction === '|' && steps === '>')) {
        const index = calculateForwardIndex(viewSize)

        if (index > length) {
          this._o = true
        }

        Glide.index = normalizeForwardIndex(index, viewSize)

        return
      }

      // we are moving backward
      if (direction === '<' || (direction === '|' && steps === '<')) {
        const index = calculateBackwardIndex(viewSize)

        if (index < 0) {
          this._o = true
        }

        Glide.index = normalizeBackwardIndex(index, viewSize)

        return
      }

      warn(`Invalid direction pattern [${direction}${steps}] has been used`)
    }
Calculates current index based on defined move.

@return {Number|Undefined}