all files / liquidjs/tags/ increment.js

100% Statements 19/19
100% Branches 6/6
100% Functions 3/3
100% Lines 19/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35    132×   21× 21× 21×     21×     45×       21×   21×   21× 21× 21×        
'use strict'
const Liquid = require('..')
const assert = require('../src/util/assert.js')
const lexical = Liquid.lexical
const types = require('../src/scope').types
 
module.exports = function (liquid) {
  liquid.registerTag('increment', {
    parse: function (token) {
      let match = token.args.match(lexical.identifier)
      assert(match, `illegal identifier ${token.args}`)
      this.variable = match[0]
    },
    render: function (scope, hash) {
      let context = scope.findContextFor(
        this.variable,
        ctx => {
          return Object.getPrototypeOf(ctx) !== types.CaptureScope &&
          Object.getPrototypeOf(ctx) !== types.AssignScope
        }
      )
      if (!context) {
        context = Object.create(types.IncrementScope)
        scope.unshift(context)
      }
      if (typeof context[this.variable] !== 'number') {
        context[this.variable] = 0
      }
      let val = context[this.variable]
      context[this.variable]++
      return val
    }
  })
}