[
  {
    "__docId__": 0,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/array.js",
    "memberof": null,
    "longname": "src/array.js",
    "access": null,
    "description": null,
    "lineNumber": 5,
    "content": "/**\n * Array utilities\n */\n\nimport {matchCase} from './string';\n\n/**\n * Checks if given item can be found in the passed collection\n * @param  {Array} arr  collection\n * @param  {Any} val  item to search\n * @param  {Boolean} caseSensitive respects case if true\n * @return {Boolean}\n */\nexport const has = (arr, val, caseSensitive) => {\n    let sCase = Boolean(caseSensitive);\n    for (var i = 0, l = arr.length; i < l; i++) {\n        if (matchCase(arr[i].toString(), sCase) === val) {\n            return true;\n        }\n    }\n    return false;\n}\n"
  },
  {
    "__docId__": 1,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "has",
    "memberof": "src/array.js",
    "longname": "src/array.js~has",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/array.js",
    "importStyle": "{has}",
    "description": "Checks if given item can be found in the passed collection",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "arr",
        "description": "collection"
      },
      {
        "nullable": null,
        "types": [
          "Any"
        ],
        "spread": false,
        "optional": false,
        "name": "val",
        "description": "item to search"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "caseSensitive",
        "description": "respects case if true"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 2,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/const.js",
    "memberof": null,
    "longname": "src/const.js",
    "access": null,
    "description": null,
    "lineNumber": 9,
    "content": "/**\n * Filter types\n */\n\n/**\n * Input filter type\n * @type {String}\n */\nexport const INPUT = 'input';\n/**\n * Select filter type\n * @type {String}\n */\nexport const SELECT = 'select';\n/**\n * Multiple select filter type\n * @type {String}\n */\nexport const MULTIPLE = 'multiple';\n/**\n * Checklist filter type\n * @type {String}\n */\nexport const CHECKLIST = 'checklist';\n/**\n * None filter type\n * @type {String}\n */\nexport const NONE = 'none';\n\n/**\n * Key codes\n */\n\n/**\n * Enter key code\n * @type {Number}\n */\nexport const ENTER_KEY = 13;\n/**\n * Tab key code\n * @type {Number}\n */\nexport const TAB_KEY = 9;\n/**\n * Escape key code\n * @type {Number}\n */\nexport const ESC_KEY = 27;\n/**\n * Up arrow key code\n * @type {Number}\n */\nexport const UP_ARROW_KEY = 38;\n/**\n * Down arrow key code\n * @type {Number}\n */\nexport const DOWN_ARROW_KEY = 40;\n\n/**\n * HTML tags\n */\n\n/**\n * Header cell tag\n * @type {String}\n */\nexport const HEADER_TAG = 'TH';\n/**\n * Cell tag\n * @type {String}\n */\nexport const CELL_TAG = 'TD';\n\n/**\n * Data types\n */\n\n/**\n * String\n * @type {String}\n */\nexport const STRING = 'string';\n\n/**\n * Number\n * @type {String}\n */\nexport const NUMBER = 'number';\n\n/**\n * Formatted number\n * @type {String}\n */\nexport const FORMATTED_NUMBER = 'formatted-number';\n\n/**\n * Date\n * @type {String}\n */\nexport const DATE = 'date';\n\n/**\n * IP address\n * @type {String}\n */\nexport const IP_ADDRESS = 'ipaddress';\n\n/**\n * Default values\n */\n\n/**\n * Auto filter delay in milliseconds\n * @type {Number}\n */\nexport const AUTO_FILTER_DELAY = 750;\n"
  },
  {
    "__docId__": 3,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "INPUT",
    "memberof": "src/const.js",
    "longname": "src/const.js~INPUT",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{INPUT}",
    "description": "Input filter type",
    "lineNumber": 9,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 4,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SELECT",
    "memberof": "src/const.js",
    "longname": "src/const.js~SELECT",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{SELECT}",
    "description": "Select filter type",
    "lineNumber": 14,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 5,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "MULTIPLE",
    "memberof": "src/const.js",
    "longname": "src/const.js~MULTIPLE",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{MULTIPLE}",
    "description": "Multiple select filter type",
    "lineNumber": 19,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 6,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "CHECKLIST",
    "memberof": "src/const.js",
    "longname": "src/const.js~CHECKLIST",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{CHECKLIST}",
    "description": "Checklist filter type",
    "lineNumber": 24,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 7,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "NONE",
    "memberof": "src/const.js",
    "longname": "src/const.js~NONE",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{NONE}",
    "description": "None filter type",
    "lineNumber": 29,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 8,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "ENTER_KEY",
    "memberof": "src/const.js",
    "longname": "src/const.js~ENTER_KEY",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{ENTER_KEY}",
    "description": "Enter key code",
    "lineNumber": 39,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 9,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "TAB_KEY",
    "memberof": "src/const.js",
    "longname": "src/const.js~TAB_KEY",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{TAB_KEY}",
    "description": "Tab key code",
    "lineNumber": 44,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 10,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "ESC_KEY",
    "memberof": "src/const.js",
    "longname": "src/const.js~ESC_KEY",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{ESC_KEY}",
    "description": "Escape key code",
    "lineNumber": 49,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 11,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "UP_ARROW_KEY",
    "memberof": "src/const.js",
    "longname": "src/const.js~UP_ARROW_KEY",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{UP_ARROW_KEY}",
    "description": "Up arrow key code",
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 12,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "DOWN_ARROW_KEY",
    "memberof": "src/const.js",
    "longname": "src/const.js~DOWN_ARROW_KEY",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{DOWN_ARROW_KEY}",
    "description": "Down arrow key code",
    "lineNumber": 59,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 13,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "HEADER_TAG",
    "memberof": "src/const.js",
    "longname": "src/const.js~HEADER_TAG",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{HEADER_TAG}",
    "description": "Header cell tag",
    "lineNumber": 69,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 14,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "CELL_TAG",
    "memberof": "src/const.js",
    "longname": "src/const.js~CELL_TAG",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{CELL_TAG}",
    "description": "Cell tag",
    "lineNumber": 74,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 15,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "STRING",
    "memberof": "src/const.js",
    "longname": "src/const.js~STRING",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{STRING}",
    "description": "String",
    "lineNumber": 84,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 16,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "NUMBER",
    "memberof": "src/const.js",
    "longname": "src/const.js~NUMBER",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{NUMBER}",
    "description": "Number",
    "lineNumber": 90,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 17,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "FORMATTED_NUMBER",
    "memberof": "src/const.js",
    "longname": "src/const.js~FORMATTED_NUMBER",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{FORMATTED_NUMBER}",
    "description": "Formatted number",
    "lineNumber": 96,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 18,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "DATE",
    "memberof": "src/const.js",
    "longname": "src/const.js~DATE",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{DATE}",
    "description": "Date",
    "lineNumber": 102,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 19,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "IP_ADDRESS",
    "memberof": "src/const.js",
    "longname": "src/const.js~IP_ADDRESS",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{IP_ADDRESS}",
    "description": "IP address",
    "lineNumber": 108,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 20,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "AUTO_FILTER_DELAY",
    "memberof": "src/const.js",
    "longname": "src/const.js~AUTO_FILTER_DELAY",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/const.js",
    "importStyle": "{AUTO_FILTER_DELAY}",
    "description": "Auto filter delay in milliseconds",
    "lineNumber": 118,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 21,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/cookie.js",
    "memberof": null,
    "longname": "src/cookie.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {root} from './root';\n\n/**\n * Cookie utilities\n */\n\nconst doc = root.document;\n\nexport default {\n\n    /**\n     * Write a cookie\n     * @param {String} name Name of the cookie\n     * @param {String} value Value of the cookie\n     * @param {Number} hours Cookie duration in hours\n     */\n    write(name, value, hours) {\n        let expire = '';\n        if (hours) {\n            expire = new Date((new Date()).getTime() + hours * 3600000);\n            expire = '; expires=' + expire.toGMTString();\n        }\n        doc.cookie = name + '=' + escape(value) + expire;\n    },\n\n    /**\n     * Read a cookie\n     * @param {String} name Name of the cookie\n     * @returns {String} Value of the cookie\n     */\n    read(name) {\n        let cookieValue = '',\n            search = name + '=';\n        if (doc.cookie.length > 0) {\n            let cookie = doc.cookie,\n                offset = cookie.indexOf(search);\n            if (offset !== -1) {\n                offset += search.length;\n                let end = cookie.indexOf(';', offset);\n                if (end === -1) {\n                    end = cookie.length;\n                }\n                cookieValue = unescape(cookie.substring(offset, end));\n            }\n        }\n        return cookieValue;\n    },\n\n    /**\n     * Remove a cookie\n     * @param {String} name Name of the cookie\n     */\n    remove(name) {\n        this.write(name, '', -1);\n    }\n\n};\n"
  },
  {
    "__docId__": 22,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "doc",
    "memberof": "src/cookie.js",
    "longname": "src/cookie.js~doc",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/cookie.js",
    "importStyle": null,
    "description": "Cookie utilities",
    "lineNumber": 7,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 23,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/dom.js",
    "memberof": null,
    "longname": "src/dom.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {root} from './root';\nimport {isArray, isString, isUndef} from './types';\nimport {trim} from './string';\n\n/**\n * DOM utilities\n */\n\nconst doc = root.document;\n\n/**\n * Returns text + text of children of given node\n * @param  {NodeElement} node\n * @return {String}\n */\nexport const getText = (node) => {\n    if (isUndef(node.textContent)) {\n        return trim(node.innerText);\n    }\n    return trim(node.textContent);\n}\n\n/**\n * Returns the first text node contained in the supplied node\n * @param  {NodeElement} node node\n * @return {String}\n */\nexport const getFirstTextNode = (node) => {\n    for (let i = 0; i < node.childNodes.length; i++) {\n        let n = node.childNodes[i];\n        if (n.nodeType === 3) {\n            return n.data;\n        }\n    }\n}\n\n/**\n * Creates an html element with given collection of attributes\n * @param  {String} tag a string of the html tag to create\n * @param  {Array} an undetermined number of arrays containing the with 2\n *                    items, the attribute name and its value ['id','myId']\n * @return {Object}     created element\n */\nexport const createElm = (...args) => {\n    let tag = args[0];\n    if (!isString(tag)) {\n        return null;\n    }\n\n    let el = doc.createElement(tag);\n    for (let i = 0; i < args.length; i++) {\n        let arg = args[i];\n\n        if (isArray(arg) && arg.length === 2) {\n            el.setAttribute(arg[0], arg[1]);\n        }\n    }\n\n    return el;\n}\n\n/**\n * Removes passed node from DOM\n * @param  {DOMElement} node\n * @return {DOMElement} old node reference\n */\nexport const removeElm = (node) => node.parentNode.removeChild(node);\n\n/**\n * Returns a text node with given text\n * @param  {String} txt\n * @return {Object}\n */\nexport const createText = (txt) => doc.createTextNode(txt);\n\n/**\n * Determine whether the passed elements is assigned the given class\n * @param {DOMElement} ele DOM element\n * @param {String} cls CSS class name\n * @returns {Boolean}\n */\nexport const hasClass = (ele, cls) => {\n    if (isUndef(ele)) {\n        return false;\n    }\n\n    if (supportsClassList()) {\n        return ele.classList.contains(cls);\n    }\n    return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\n}\n\n/**\n * Adds the specified class to the passed element\n * @param {DOMElement} ele DOM element\n * @param {String} cls CSS class name\n */\nexport const addClass = (ele, cls) => {\n    if (isUndef(ele)) {\n        return;\n    }\n\n    if (supportsClassList()) {\n        ele.classList.add(cls);\n        return;\n    }\n\n    if (ele.className === '') {\n        ele.className = cls;\n    }\n    else if (!hasClass(ele, cls)) {\n        ele.className += ' ' + cls;\n    }\n}\n\n/**\n * Removes the specified class to the passed element\n * @param {DOMElement} ele DOM element\n * @param {String} cls CSS class name\n */\nexport const removeClass = (ele, cls) => {\n    if (isUndef(ele)) {\n        return;\n    }\n\n    if (supportsClassList()) {\n        ele.classList.remove(cls);\n        return;\n    }\n    let reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)', 'g');\n    ele.className = ele.className.replace(reg, '');\n}\n\n/**\n * Creates and returns an option element\n * @param  {String}  text  option text\n * @param  {String}  value option value\n * @param  {Boolean} isSel whether option is selected\n * @return {Object}        option element\n */\nexport const createOpt = (text, value, isSel) => {\n    let isSelected = isSel ? true : false;\n    let opt = isSelected ?\n            createElm('option', ['value', value], ['selected', 'true']) :\n            createElm('option', ['value', value]);\n    opt.appendChild(createText(text));\n    return opt;\n}\n\n/**\n * Creates and returns a checklist item\n * @param  {String} id  index of check item\n * @param  {String} chkValue  check item value\n * @param  {String} labelText check item label text\n * @return {Object}           li DOM element\n */\nexport const createCheckItem = (id, chkValue, labelText) => {\n    let li = createElm('li');\n    let label = createElm('label', ['for', id]);\n    let check = createElm('input',\n        ['id', id],\n        ['name', id],\n        ['type', 'checkbox'],\n        ['value', chkValue]\n    );\n    label.appendChild(check);\n    label.appendChild(createText(labelText));\n    li.appendChild(label);\n    li.label = label;\n    li.check = check;\n    return li;\n}\n\n/**\n * Returns the element matching the supplied Id\n * @param  {String} id  Element identifier\n * @return {DOMElement}\n */\nexport const elm = (id) => doc.getElementById(id);\n\n/**\n * Returns list of element matching the supplied tag name\n * @param  {String} tagname  Tag name\n * @return {NodeList}\n */\nexport const tag = (o, tagname) => o.getElementsByTagName(tagname);\n\n// HTML5 classList API\nfunction supportsClassList() {\n    return doc.documentElement.classList;\n}\n"
  },
  {
    "__docId__": 24,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "doc",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~doc",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": null,
    "description": "DOM utilities",
    "lineNumber": 9,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 25,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getText",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~getText",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{getText}",
    "description": "Returns text + text of children of given node",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "NodeElement"
        ],
        "spread": false,
        "optional": false,
        "name": "node",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 26,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "getFirstTextNode",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~getFirstTextNode",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{getFirstTextNode}",
    "description": "Returns the first text node contained in the supplied node",
    "lineNumber": 28,
    "params": [
      {
        "nullable": null,
        "types": [
          "NodeElement"
        ],
        "spread": false,
        "optional": false,
        "name": "node",
        "description": "node"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 27,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "createElm",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~createElm",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{createElm}",
    "description": "Creates an html element with given collection of attributes",
    "lineNumber": 44,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "a string of the html tag to create"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "an",
        "description": "undetermined number of arrays containing the with 2\n                   items, the attribute name and its value ['id','myId']"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": "created element"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 28,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "removeElm",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~removeElm",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{removeElm}",
    "description": "Removes passed node from DOM",
    "lineNumber": 67,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "node",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": "old node reference"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 29,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "createText",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~createText",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{createText}",
    "description": "Returns a text node with given text",
    "lineNumber": 74,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "txt",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 30,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasClass",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~hasClass",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{hasClass}",
    "description": "Determine whether the passed elements is assigned the given class",
    "lineNumber": 82,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "ele",
        "description": "DOM element"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cls",
        "description": "CSS class name"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 31,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "addClass",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~addClass",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{addClass}",
    "description": "Adds the specified class to the passed element",
    "lineNumber": 98,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "ele",
        "description": "DOM element"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cls",
        "description": "CSS class name"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 32,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "removeClass",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~removeClass",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{removeClass}",
    "description": "Removes the specified class to the passed element",
    "lineNumber": 121,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "ele",
        "description": "DOM element"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cls",
        "description": "CSS class name"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 33,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "createOpt",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~createOpt",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{createOpt}",
    "description": "Creates and returns an option element",
    "lineNumber": 141,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": "option text"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "value",
        "description": "option value"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isSel",
        "description": "whether option is selected"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": "option element"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 34,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "createCheckItem",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~createCheckItem",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{createCheckItem}",
    "description": "Creates and returns a checklist item",
    "lineNumber": 157,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "id",
        "description": "index of check item"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "chkValue",
        "description": "check item value"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "labelText",
        "description": "check item label text"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": "li DOM element"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 35,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "elm",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~elm",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{elm}",
    "description": "Returns the element matching the supplied Id",
    "lineNumber": 179,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "id",
        "description": "Element identifier"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 36,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "tag",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~tag",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": "{tag}",
    "description": "Returns list of element matching the supplied tag name",
    "lineNumber": 186,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tagname",
        "description": "Tag name"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "NodeList"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 37,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "supportsClassList",
    "memberof": "src/dom.js",
    "longname": "src/dom.js~supportsClassList",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/dom.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 189,
    "undocument": true,
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 38,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/emitter.js",
    "memberof": null,
    "longname": "src/emitter.js",
    "access": null,
    "description": null,
    "lineNumber": 4,
    "content": "/**\n * Event emitter class\n */\nexport class Emitter {\n    /**\n     * Creates an instance of Emitter.\n     */\n    constructor() {\n        /**\n         * Events object\n         * @type {Object}\n         */\n        this.events = {};\n    }\n\n    /**\n     * Subscribe to an event\n     * @param  {Array}   evts Collection of event names\n     * @param  {Function} fn  Function invoked when event is emitted\n     */\n    on(evts, fn) {\n        evts.forEach((evt) => {\n            this.events[evt] = this.events[evt] || [];\n            this.events[evt].push(fn);\n        });\n    }\n\n    /**\n     * Unsubscribe to an event\n     * @param  {Array}   evts Collection of event names\n     * @param  {Function} fn  Function invoked when event is emitted\n     */\n    off(evts, fn) {\n        evts.forEach((evt) => {\n            if (evt in this.events) {\n                this.events[evt].splice(this.events[evt].indexOf(fn), 1);\n            }\n        });\n    }\n\n    /**\n     * Emit an event\n     * @param  {String} evt Event name followed by any other argument passed to\n     * the invoked function\n     */\n    emit(evt /*, args...*/) {\n        if (evt in this.events) {\n            for (let i = 0; i < this.events[evt].length; i++) {\n                this.events[evt][i].apply(this, [].slice.call(arguments, 1));\n            }\n        }\n    }\n}\n"
  },
  {
    "__docId__": 39,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Emitter",
    "memberof": "src/emitter.js",
    "longname": "src/emitter.js~Emitter",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/emitter.js",
    "importStyle": "{Emitter}",
    "description": "Event emitter class",
    "lineNumber": 4,
    "interface": false
  },
  {
    "__docId__": 40,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/emitter.js~Emitter",
    "longname": "src/emitter.js~Emitter#constructor",
    "access": null,
    "description": "Creates an instance of Emitter.",
    "lineNumber": 8,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 41,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "events",
    "memberof": "src/emitter.js~Emitter",
    "longname": "src/emitter.js~Emitter#events",
    "access": null,
    "description": "Events object",
    "lineNumber": 13,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 42,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "on",
    "memberof": "src/emitter.js~Emitter",
    "longname": "src/emitter.js~Emitter#on",
    "access": null,
    "description": "Subscribe to an event",
    "lineNumber": 21,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "evts",
        "description": "Collection of event names"
      },
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "fn",
        "description": "Function invoked when event is emitted"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 43,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "off",
    "memberof": "src/emitter.js~Emitter",
    "longname": "src/emitter.js~Emitter#off",
    "access": null,
    "description": "Unsubscribe to an event",
    "lineNumber": 33,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "evts",
        "description": "Collection of event names"
      },
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "fn",
        "description": "Function invoked when event is emitted"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 44,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "emit",
    "memberof": "src/emitter.js~Emitter",
    "longname": "src/emitter.js~Emitter#emit",
    "access": null,
    "description": "Emit an event",
    "lineNumber": 46,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": "Event name followed by any other argument passed to\nthe invoked function"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 45,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/event.js",
    "memberof": null,
    "longname": "src/event.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {root} from './root';\n\n/**\n * DOM event utilities\n */\n\n/**\n * Add event handler for specified event on passed element\n *\n * @param {DOMElement} obj Element\n * @param {String} type Event type\n * @param {Function} Handler\n * @param {Boolean} capture Specifiy whether the event should be executed in\n * the capturing or in the bubbling phase\n */\nexport const addEvt = (obj, type, func, capture) => {\n    if (obj.addEventListener) {\n        obj.addEventListener(type, func, capture);\n    }\n    else if (obj.attachEvent) {\n        obj.attachEvent('on' + type, func);\n    } else {\n        obj['on' + type] = func;\n    }\n};\n\n/**\n * Remove event handler for specified event on passed element\n *\n * @param {DOMElement} obj Element\n * @param {String} type Event type\n * @param {Function} Handler\n * @param {Boolean} capture Specifiy whether the event should be executed in\n * the capturing or in the bubbling phase\n */\nexport const removeEvt = (obj, type, func, capture) => {\n    if (obj.removeEventListener) {\n        obj.removeEventListener(type, func, capture);\n    } else if (obj.detachEvent) {\n        obj.detachEvent('on' + type, func);\n    } else {\n        obj['on' + type] = null;\n    }\n};\n\n/**\n * Prevents further propagation of the current event in the bubbling phase\n *\n * @param {Event} evt Event on the DOM\n */\nexport const stopEvt = (evt) => {\n    if (!evt) {\n        evt = root.event;\n    }\n    if (evt.stopPropagation) {\n        evt.stopPropagation();\n    } else {\n        evt.cancelBubble = true;\n    }\n};\n\n/**\n * Cancels the event if it is cancelable, without stopping further\n * propagation of the event.\n *\n * @param {Event} evt Event on the DOM\n */\nexport const cancelEvt = (evt) => {\n    if (!evt) {\n        evt = root.event;\n    }\n    if (evt.preventDefault) {\n        evt.preventDefault();\n    } else {\n        evt.returnValue = false;\n    }\n};\n\n/**\n * Reference to the object that dispatched the event\n *\n * @param {Event} evt Event on the DOM\n * @returns {DOMElement}\n */\nexport const targetEvt = (evt) => {\n    if (!evt) {\n        evt = root.event;\n    }\n    return evt.target || evt.srcElement;\n};\n\n/**\n * Returns the Unicode value of pressed key\n *\n * @param {Event} evt Event on the DOM\n * @returns {Number}\n */\nexport const keyCode = (evt) => {\n    return evt.charCode ? evt.charCode :\n        (evt.keyCode ? evt.keyCode : (evt.which ? evt.which : 0));\n};\n"
  },
  {
    "__docId__": 46,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "addEvt",
    "memberof": "src/event.js",
    "longname": "src/event.js~addEvt",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/event.js",
    "importStyle": "{addEvt}",
    "description": "Add event handler for specified event on passed element",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": "Element"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": "Event type"
      },
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "Handler",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "capture",
        "description": "Specifiy whether the event should be executed in\nthe capturing or in the bubbling phase"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 47,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "removeEvt",
    "memberof": "src/event.js",
    "longname": "src/event.js~removeEvt",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/event.js",
    "importStyle": "{removeEvt}",
    "description": "Remove event handler for specified event on passed element",
    "lineNumber": 36,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": "Element"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": "Event type"
      },
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "Handler",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "capture",
        "description": "Specifiy whether the event should be executed in\nthe capturing or in the bubbling phase"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 48,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "stopEvt",
    "memberof": "src/event.js",
    "longname": "src/event.js~stopEvt",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/event.js",
    "importStyle": "{stopEvt}",
    "description": "Prevents further propagation of the current event in the bubbling phase",
    "lineNumber": 51,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": "Event on the DOM"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 49,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "cancelEvt",
    "memberof": "src/event.js",
    "longname": "src/event.js~cancelEvt",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/event.js",
    "importStyle": "{cancelEvt}",
    "description": "Cancels the event if it is cancelable, without stopping further\npropagation of the event.",
    "lineNumber": 68,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": "Event on the DOM"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 50,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "targetEvt",
    "memberof": "src/event.js",
    "longname": "src/event.js~targetEvt",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/event.js",
    "importStyle": "{targetEvt}",
    "description": "Reference to the object that dispatched the event",
    "lineNumber": 85,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{DOMElement}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": "Event on the DOM"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 51,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "keyCode",
    "memberof": "src/event.js",
    "longname": "src/event.js~keyCode",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/event.js",
    "importStyle": "{keyCode}",
    "description": "Returns the Unicode value of pressed key",
    "lineNumber": 98,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": "Event on the DOM"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 52,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/extensions/advancedGrid/adapterEzEditTable.js",
    "memberof": null,
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../../feature';\nimport {tag} from '../../dom';\nimport {INPUT} from '../../const';\nimport {root} from '../../root';\n\nconst INSTANTIATION_ERROR = `Failed to instantiate EditTable object.\n    \\n\"ezEditTable\" dependency not found.`;\n\n/**\n * Adapter module for ezEditTable, an external library providing advanced\n * grid features (selection and edition):\n * http://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus\n */\nexport default class AdapterEzEditTable extends Feature {\n\n    /**\n     * Creates an instance of AdapterEzEditTable\n     *\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} cfg Configuration options for ezEditTable library\n     */\n    constructor(tf, cfg) {\n        super(tf, cfg.name);\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = cfg.description || 'ezEditTable adapter';\n\n        /**\n         * Filename of ezEditTable library\n         * @type {String}\n         */\n        this.filename = cfg.filename || 'ezEditTable.js';\n\n        /**\n         * Path to ezEditTable library\n         * @type {String}\n         */\n        this.vendorPath = cfg.vendor_path;\n\n        /**\n         * Load ezEditTable stylesheet\n         * @type {Boolean}\n         */\n        this.loadStylesheet = Boolean(cfg.load_stylesheet);\n\n        /**\n         * Path to ezEditTable stylesheet\n         * @type {String}\n         */\n        this.stylesheet = cfg.stylesheet || this.vendorPath + 'ezEditTable.css';\n\n        /**\n         * Name of ezEditTable stylesheet\n         * @type {String}\n         */\n        this.stylesheetName = cfg.stylesheet_name || 'ezEditTableCss';\n\n        // Enable the ezEditTable's scroll into view behaviour if grid layout on\n        cfg.scroll_into_view = cfg.scroll_into_view === false ?\n            false : tf.gridLayout;\n\n        /**\n         * ezEditTable instance\n         * @type {EditTable}\n         * @private\n         */\n        this._ezEditTable = null;\n\n        /**\n         * ezEditTable configuration\n         * @private\n         */\n        this.cfg = cfg;\n\n        this.enable();\n    }\n\n    /**\n     * Conditionally load ezEditTable library and set advanced grid\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n        let tf = this.tf;\n        if (root.EditTable) {\n            this._setAdvancedGrid();\n        } else {\n            let path = this.vendorPath + this.filename;\n            tf.import(this.filename, path, () => this._setAdvancedGrid());\n        }\n        if (this.loadStylesheet && !tf.isImported(this.stylesheet, 'link')) {\n            tf.import(this.stylesheetName, this.stylesheet, null, 'link');\n        }\n\n        // TODO: hack to prevent ezEditTable enter key event hijaking.\n        // Needs to be fixed in the vendor's library\n        this.emitter.on(['filter-focus', 'filter-blur'],\n            () => this._toggleForInputFilter());\n\n        /**\n         * @inherited\n         */\n        this.initialized = true;\n    }\n\n    /**\n     * Instantiate ezEditTable component for advanced grid features\n     * @private\n     */\n    _setAdvancedGrid() {\n        let tf = this.tf;\n\n        //start row for EditTable constructor needs to be calculated\n        let startRow,\n            cfg = this.cfg,\n            thead = tag(tf.tbl, 'thead');\n\n        //if thead exists and startRow not specified, startRow is calculated\n        //automatically by EditTable\n        if (thead.length > 0 && !cfg.startRow) {\n            startRow = undefined;\n        }\n        //otherwise startRow config property if any or TableFilter refRow\n        else {\n            startRow = cfg.startRow || tf.refRow;\n        }\n\n        cfg.base_path = cfg.base_path || tf.basePath + 'ezEditTable/';\n        let editable = cfg.editable;\n        let selectable = cfg.selection;\n\n        if (selectable) {\n            cfg.default_selection = cfg.default_selection || 'row';\n        }\n        //CSS Styles\n        cfg.active_cell_css = cfg.active_cell_css || 'ezETSelectedCell';\n\n        let _lastValidRowIndex = 0;\n        let _lastRowIndex = 0;\n\n        if (selectable) {\n            //Row navigation needs to be calculated according to TableFilter's\n            //validRowsIndex array\n            let onAfterSelection = function (et, selectedElm, e) {\n                let slc = et.Selection;\n                //Next valid filtered row needs to be selected\n                let doSelect = function (nextRowIndex) {\n                    if (et.defaultSelection === 'row') {\n                        /* eslint-disable */\n                        slc.SelectRowByIndex(nextRowIndex);\n                        /* eslint-enable */\n                    } else {\n                        /* eslint-disable */\n                        et.ClearSelections();\n                        /* eslint-enable */\n                        let cellIndex = selectedElm.cellIndex,\n                            row = tf.tbl.rows[nextRowIndex];\n                        if (et.defaultSelection === 'both') {\n                            /* eslint-disable */\n                            slc.SelectRowByIndex(nextRowIndex);\n                            /* eslint-enable */\n                        }\n                        if (row) {\n                            /* eslint-disable */\n                            slc.SelectCell(row.cells[cellIndex]);\n                            /* eslint-enable */\n                        }\n                    }\n                    //Table is filtered\n                    if (tf.validRowsIndex.length !== tf.getRowsNb()) {\n                        let r = tf.tbl.rows[nextRowIndex];\n                        if (r) {\n                            r.scrollIntoView(false);\n                        }\n                        if (cell) {\n                            if (cell.cellIndex === (tf.getCellsNb() - 1) &&\n                                tf.gridLayout) {\n                                tf.tblCont.scrollLeft = 100000000;\n                            }\n                            else if (cell.cellIndex === 0 && tf.gridLayout) {\n                                tf.tblCont.scrollLeft = 0;\n                            } else {\n                                cell.scrollIntoView(false);\n                            }\n                        }\n                    }\n                };\n\n                //table is not filtered\n                if (!tf.validRowsIndex) {\n                    return;\n                }\n                let validIndexes = tf.validRowsIndex,\n                    validIdxLen = validIndexes.length,\n                    row = et.defaultSelection !== 'row' ?\n                        selectedElm.parentNode : selectedElm,\n                    //cell for default_selection = 'both' or 'cell'\n                    cell = selectedElm.nodeName === 'TD' ? selectedElm : null,\n                    /* eslint-disable */\n                    keyCode = e !== undefined ? et.Event.GetKey(e) : 0,\n                    /* eslint-enable */\n                    isRowValid = validIndexes.indexOf(row.rowIndex) !== -1,\n                    nextRowIndex,\n                    paging = tf.feature('paging'),\n                    //pgup/pgdown keys\n                    d = keyCode === 34 || keyCode === 33 ?\n                        (paging && paging.pagingLength || et.nbRowsPerPage) :\n                        1;\n\n                //If next row is not valid, next valid filtered row needs to be\n                //calculated\n                if (!isRowValid) {\n                    //Selection direction up/down\n                    if (row.rowIndex > _lastRowIndex) {\n                        //last row\n                        if (row.rowIndex >= validIndexes[validIdxLen - 1]) {\n                            nextRowIndex = validIndexes[validIdxLen - 1];\n                        } else {\n                            let calcRowIndex = (_lastValidRowIndex + d);\n                            if (calcRowIndex > (validIdxLen - 1)) {\n                                nextRowIndex = validIndexes[validIdxLen - 1];\n                            } else {\n                                nextRowIndex = validIndexes[calcRowIndex];\n                            }\n                        }\n                    } else {\n                        //first row\n                        if (row.rowIndex <= validIndexes[0]) {\n                            nextRowIndex = validIndexes[0];\n                        } else {\n                            let v = validIndexes[_lastValidRowIndex - d];\n                            nextRowIndex = v ? v : validIndexes[0];\n                        }\n                    }\n                    _lastRowIndex = row.rowIndex;\n                    doSelect(nextRowIndex);\n                } else {\n                    //If filtered row is valid, special calculation for\n                    //pgup/pgdown keys\n                    if (keyCode !== 34 && keyCode !== 33) {\n                        _lastValidRowIndex = validIndexes.indexOf(row.rowIndex);\n                        _lastRowIndex = row.rowIndex;\n                    } else {\n                        if (keyCode === 34) { //pgdown\n                            //last row\n                            if ((_lastValidRowIndex + d) <= (validIdxLen - 1)) {\n                                nextRowIndex = validIndexes[\n                                    _lastValidRowIndex + d];\n                            } else {\n                                nextRowIndex = [validIdxLen - 1];\n                            }\n                        } else { //pgup\n                            //first row\n                            if ((_lastValidRowIndex - d) <= validIndexes[0]) {\n                                nextRowIndex = validIndexes[0];\n                            } else {\n                                nextRowIndex = validIndexes[\n                                    _lastValidRowIndex - d];\n                            }\n                        }\n                        _lastRowIndex = nextRowIndex;\n                        _lastValidRowIndex = validIndexes.indexOf(nextRowIndex);\n                        doSelect(nextRowIndex);\n                    }\n                }\n            };\n\n            //Page navigation has to be enforced whenever selected row is out of\n            //the current page range\n            let onBeforeSelection = function (et, selectedElm) {\n                let row = et.defaultSelection !== 'row' ?\n                    selectedElm.parentNode : selectedElm;\n                if (tf.paging) {\n                    if (tf.feature('paging').nbPages > 1) {\n                        let paging = tf.feature('paging');\n                        //page length is re-assigned in case it has changed\n                        et.nbRowsPerPage = paging.pagingLength;\n                        let validIndexes = tf.validRowsIndex,\n                            validIdxLen = validIndexes.length,\n                            pagingEndRow = parseInt(paging.startPagingRow, 10) +\n                                parseInt(paging.pagingLength, 10);\n                        let rowIndex = row.rowIndex;\n\n                        if ((rowIndex === validIndexes[validIdxLen - 1]) &&\n                            paging.currentPageNb !== paging.nbPages) {\n                            paging.setPage('last');\n                        }\n                        else if ((rowIndex === validIndexes[0]) &&\n                            paging.currentPageNb !== 1) {\n                            paging.setPage('first');\n                        }\n                        else if (rowIndex > validIndexes[pagingEndRow - 1] &&\n                            rowIndex < validIndexes[validIdxLen - 1]) {\n                            paging.setPage('next');\n                        }\n                        else if (\n                            rowIndex < validIndexes[paging.startPagingRow] &&\n                            rowIndex > validIndexes[0]) {\n                            paging.setPage('previous');\n                        }\n                    }\n                }\n            };\n\n            //Selected row needs to be visible when paging is activated\n            if (tf.paging) {\n                tf.feature('paging').onAfterChangePage = function (paging) {\n                    let advGrid = paging.tf.extension('advancedGrid');\n                    let et = advGrid._ezEditTable;\n                    let slc = et.Selection;\n                    /* eslint-disable */\n                    let row = slc.GetActiveRow();\n                    /* eslint-enable */\n                    if (row) {\n                        row.scrollIntoView(false);\n                    }\n                    /* eslint-disable */\n                    let cell = slc.GetActiveCell();\n                    /* eslint-enable */\n                    if (cell) {\n                        cell.scrollIntoView(false);\n                    }\n                };\n            }\n\n            //Rows navigation when rows are filtered is performed with the\n            //EditTable row selection callback events\n            if (cfg.default_selection === 'row') {\n                let fnB = cfg.on_before_selected_row;\n                cfg.on_before_selected_row = function () {\n                    var args = arguments;\n                    onBeforeSelection(args[0], args[1], args[2]);\n                    if (fnB) {\n                        fnB.call(null, args[0], args[1], args[2]);\n                    }\n                };\n                let fnA = cfg.on_after_selected_row;\n                cfg.on_after_selected_row = function () {\n                    var args = arguments;\n                    onAfterSelection(args[0], args[1], args[2]);\n                    if (fnA) {\n                        fnA.call(null, args[0], args[1], args[2]);\n                    }\n                };\n            } else {\n                let fnD = cfg.on_before_selected_cell;\n                cfg.on_before_selected_cell = function () {\n                    var args = arguments;\n                    onBeforeSelection(args[0], args[1], args[2]);\n                    if (fnD) {\n                        fnD.call(null, args[0], args[1], args[2]);\n                    }\n                };\n                let fnC = cfg.on_after_selected_cell;\n                cfg.on_after_selected_cell = function () {\n                    var args = arguments;\n                    onAfterSelection(args[0], args[1], args[2]);\n                    if (fnC) {\n                        fnC.call(null, args[0], args[1], args[2]);\n                    }\n                };\n            }\n        }\n        if (editable) {\n            //Added or removed rows, TF rows number needs to be re-calculated\n            let fnE = cfg.on_added_dom_row;\n            cfg.on_added_dom_row = function () {\n                var args = arguments;\n                tf.nbFilterableRows++;\n                if (!tf.paging) {\n                    tf.emitter.emit('rows-changed', tf, this);\n                } else {\n                    tf.nbFilterableRows++;\n                    tf.paging = false;\n                    tf.feature('paging').destroy();\n                    tf.feature('paging').reset();\n                }\n                if (tf.alternateRows) {\n                    tf.feature('alternateRows').init();\n                }\n                if (fnE) {\n                    fnE.call(null, args[0], args[1], args[2]);\n                }\n            };\n            if (cfg.actions && cfg.actions['delete']) {\n                let fnF = cfg.actions['delete'].on_after_submit;\n                cfg.actions['delete'].on_after_submit = function () {\n                    var args = arguments;\n                    tf.nbFilterableRows--;\n                    if (!tf.paging) {\n                        tf.emitter.emit('rows-changed', tf, this);\n                    } else {\n                        tf.nbFilterableRows--;\n                        tf.paging = false;\n                        tf.feature('paging').destroy();\n                        tf.feature('paging').reset(false);\n                    }\n                    if (tf.alternateRows) {\n                        tf.feature('alternateRows').init();\n                    }\n                    if (fnF) {\n                        fnF.call(null, args[0], args[1]);\n                    }\n                };\n            }\n        }\n\n        try {\n            /* eslint-disable */\n            this._ezEditTable = new EditTable(tf.id, cfg, startRow);\n            this._ezEditTable.Init();\n            /* eslint-enable */\n        } catch (e) { throw new Error(INSTANTIATION_ERROR); }\n\n        this.initialized = true;\n    }\n\n    /**\n     * Reset advanced grid when previously removed\n     */\n    reset() {\n        let ezEditTable = this._ezEditTable;\n        if (ezEditTable) {\n            if (this.cfg.selection) {\n                /* eslint-disable */\n                ezEditTable.Selection.Set();\n                /* eslint-enable */\n            }\n            if (this.cfg.editable) {\n                /* eslint-disable */\n                ezEditTable.Editable.Set();\n                /* eslint-enable */\n            }\n        }\n    }\n\n    /**\n     * Toggle behaviour\n     */\n    toggle() {\n        let ezEditTable = this._ezEditTable;\n        if (ezEditTable.editable) {\n            /* eslint-disable */\n            ezEditTable.Editable.Remove();\n            /* eslint-enable */\n        } else {\n            /* eslint-disable */\n            ezEditTable.Editable.Set();\n            /* eslint-enable */\n        }\n        if (ezEditTable.selection) {\n            /* eslint-disable */\n            ezEditTable.Selection.Remove();\n            /* eslint-enable */\n        } else {\n            /* eslint-disable */\n            ezEditTable.Selection.Set();\n            /* eslint-enable */\n        }\n    }\n\n    _toggleForInputFilter() {\n        let tf = this.tf;\n        if (!tf.getActiveFilterId()) {\n            return;\n        }\n        let colIndex = tf.getColumnIndexFromFilterId(tf.getActiveFilterId());\n        let filterType = tf.getFilterType(colIndex);\n        if (filterType === INPUT) {\n            this.toggle();\n        }\n    }\n\n    /**\n     * Remove advanced grid\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        let ezEditTable = this._ezEditTable;\n        if (ezEditTable) {\n            if (this.cfg.selection) {\n                /* eslint-disable */\n                ezEditTable.Selection.ClearSelections();\n                ezEditTable.Selection.Remove();\n                /* eslint-enable */\n            }\n            if (this.cfg.editable) {\n                /* eslint-disable */\n                ezEditTable.Editable.Remove();\n                /* eslint-enable */\n            }\n        }\n\n        this.emitter.off(['filter-focus', 'filter-blur'],\n            () => this._toggleForInputFilter());\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 53,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "INSTANTIATION_ERROR",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~INSTANTIATION_ERROR",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/advancedGrid/adapterEzEditTable.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 54,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "AdapterEzEditTable",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/extensions/advancedGrid/adapterEzEditTable.js",
    "importStyle": "AdapterEzEditTable",
    "description": "Adapter module for ezEditTable, an external library providing advanced\ngrid features (selection and edition):\nhttp://codecanyon.net/item/ezedittable-enhance-html-tables/2425123?ref=koalyptus",
    "lineNumber": 14,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 55,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#constructor",
    "access": null,
    "description": "Creates an instance of AdapterEzEditTable",
    "lineNumber": 22,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "cfg",
        "description": "Configuration options for ezEditTable library"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 56,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "desc",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#desc",
    "access": null,
    "description": "Module description",
    "lineNumber": 29,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 57,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filename",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#filename",
    "access": null,
    "description": "Filename of ezEditTable library",
    "lineNumber": 35,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 58,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "vendorPath",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#vendorPath",
    "access": null,
    "description": "Path to ezEditTable library",
    "lineNumber": 41,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 59,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "loadStylesheet",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#loadStylesheet",
    "access": null,
    "description": "Load ezEditTable stylesheet",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 60,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stylesheet",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#stylesheet",
    "access": null,
    "description": "Path to ezEditTable stylesheet",
    "lineNumber": 53,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 61,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stylesheetName",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#stylesheetName",
    "access": null,
    "description": "Name of ezEditTable stylesheet",
    "lineNumber": 59,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 62,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "_ezEditTable",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#_ezEditTable",
    "access": "private",
    "description": "ezEditTable instance",
    "lineNumber": 70,
    "type": {
      "nullable": null,
      "types": [
        "EditTable"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 63,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cfg",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#cfg",
    "access": "private",
    "description": "ezEditTable configuration",
    "lineNumber": 76,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 64,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#init",
    "access": null,
    "description": "Conditionally load ezEditTable library and set advanced grid",
    "lineNumber": 84,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 65,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#initialized",
    "access": null,
    "description": "",
    "lineNumber": 107,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 66,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_setAdvancedGrid",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#_setAdvancedGrid",
    "access": "private",
    "description": "Instantiate ezEditTable component for advanced grid features",
    "lineNumber": 114,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 67,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "_ezEditTable",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#_ezEditTable",
    "access": null,
    "description": null,
    "lineNumber": 414,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 68,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#initialized",
    "access": null,
    "description": null,
    "lineNumber": 419,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 69,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "reset",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#reset",
    "access": null,
    "description": "Reset advanced grid when previously removed",
    "lineNumber": 425,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 70,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "toggle",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#toggle",
    "access": null,
    "description": "Toggle behaviour",
    "lineNumber": 444,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 71,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_toggleForInputFilter",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#_toggleForInputFilter",
    "access": null,
    "description": null,
    "lineNumber": 466,
    "undocument": true,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 72,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#destroy",
    "access": null,
    "description": "Remove advanced grid",
    "lineNumber": 481,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 73,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable",
    "longname": "src/extensions/advancedGrid/adapterEzEditTable.js~AdapterEzEditTable#initialized",
    "access": null,
    "description": null,
    "lineNumber": 502,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 74,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/extensions/advancedGrid/advancedGrid.js",
    "memberof": null,
    "longname": "src/extensions/advancedGrid/advancedGrid.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import AdapterEzEditTable from './adapterEzEditTable';\n\nexport default AdapterEzEditTable;"
  },
  {
    "__docId__": 75,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/extensions/colOps/colOps.js",
    "memberof": null,
    "longname": "src/extensions/colOps/colOps.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../../feature';\nimport {createText, elm} from '../../dom';\nimport {isArray, isFn, isUndef, isEmpty, EMPTY_FN} from '../../types';\nimport {numSortAsc} from '../../sort';\nimport {FORMATTED_NUMBER} from '../../const';\nimport formatNumber from 'format-number';\n\nconst EVENTS = [\n    'after-filtering',\n    'after-page-change',\n    'after-page-length-change'\n];\n\nconst SUM = 'sum';\nconst MEAN = 'mean';\nconst MIN = 'min';\nconst MAX = 'max';\nconst MEDIAN = 'median';\nconst Q1 = 'q1';\nconst Q3 = 'q3';\n\n/**\n * Column calculations extension\n */\nexport default class ColOps extends Feature {\n\n    /**\n     * Creates an instance of ColOps\n     *\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} opts Configuration object\n     */\n    constructor(tf, opts) {\n        super(tf, opts.name);\n\n        /**\n         * Callback fired before columns operations start\n         * @type {Function}\n         */\n        this.onBeforeOperation = isFn(opts.on_before_operation) ?\n            opts.on_before_operation : EMPTY_FN;\n\n        /**\n         * Callback fired after columns operations are completed\n         * @type {Function}\n         */\n        this.onAfterOperation = isFn(opts.on_after_operation) ?\n            opts.on_after_operation : EMPTY_FN;\n\n        /**\n         * Configuration options\n         * @type {Object}\n         */\n        this.opts = opts;\n\n        /**\n         * List of DOM element IDs containing column's calculation result\n         * @type {Array}\n         */\n        this.labelIds = opts.id || [];\n\n        /**\n         * List of columns' indexes for calculations\n         * @type {Array}\n         */\n        this.colIndexes = opts.col || [];\n\n        /**\n         * List of operations - possible values: 'sum', 'mean', 'min', 'max',\n         * 'median', 'q1', 'q3'\n         * @type {Array}\n         */\n        this.operations = opts.operation || [];\n\n        /**\n         * List of write methods used to write the result - possible values:\n         * 'innerHTML', 'setValue', 'createTextNode'\n         * @type {Array}\n         */\n        this.outputTypes = opts.write_method || [];\n\n        /**\n         * List of format objects used for formatting the result -\n         * refer to https://github.com/componitable/format-number to check\n         * configuration options\n         * @type {Array}\n         */\n        this.formatResults = opts.format_result || [];\n\n        /**\n         * List of row indexes displaying the results\n         * @type {Array}\n         */\n        this.totRowIndexes = opts.tot_row_index || [];\n\n        /**\n         * List of row indexes excluded from calculations\n         * @type {Array}\n         */\n        this.excludeRows = opts.exclude_row || [];\n\n        /**\n         * List of decimal precision for calculation results\n         * @type {Array}\n         */\n        this.decimalPrecisions = isUndef(opts.decimal_precision) ?\n                2 : opts.decimal_precision;\n\n        this.enable();\n    }\n\n    /**\n     * Initializes ColOps instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n        // subscribe to events\n        this.emitter.on(EVENTS, () => this.calcAll());\n\n        this.calcAll();\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Calculates columns' values\n     * Configuration options are stored in 'opts' property\n     * - 'id' contains ids of elements showing result (array)\n     * - 'col' contains the columns' indexes (array)\n     * - 'operation' contains operation type (array, values: 'sum', 'mean',\n     *   'min', 'max', 'median', 'q1', 'q3')\n     * - 'write_method' array defines which method to use for displaying the\n     *    result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\n     * - 'tot_row_index' defines in which row results are displayed\n     *   (integers array)\n     *\n     * - changes made by Nuovella:\n     * (1) optimized the routine (now it will only process each column once),\n     * (2) added calculations for the median, lower and upper quartile.\n     */\n    calcAll() {\n        let tf = this.tf;\n        if (!tf.isInitialized()) {\n            return;\n        }\n\n        this.onBeforeOperation(tf, this);\n        this.emitter.emit('before-column-operation', tf, this);\n\n        let { colIndexes, operations: colOperations, outputTypes,\n            totRowIndexes, excludeRows, formatResults } = this;\n        let decimalPrecisions = isUndef(this.decimalPrecisions) ?\n                2 : this.decimalPrecisions;\n\n        //nuovella: determine unique list of columns to operate on\n        let uIndexes = [];\n        colIndexes.forEach((val) => {\n            if (uIndexes.indexOf(val) === -1) {\n                uIndexes.push(val);\n            }\n        });\n\n        let nbCols = uIndexes.length,\n            rows = tf.tbl.rows,\n            colValues = [];\n\n        for (let u = 0; u < nbCols; u++) {\n            //this retrieves col values\n            //use uIndexes because we only want to pass through this loop\n            //once for each column get the values in this unique column\n            colValues.push(\n                tf.getFilteredDataCol(uIndexes[u], false, true, excludeRows)\n            );\n\n            let curValues = colValues[u];\n\n            //next: calculate all operations for this column\n            let result = 0,\n                operations = [],\n                precisions = [],\n                labels = [],\n                writeType,\n                formatResult = [],\n                idx = 0;\n\n            for (let k = 0; k < colIndexes.length; k++) {\n                if (colIndexes[k] !== uIndexes[u]) {\n                    continue;\n                }\n                operations[idx] = (colOperations[k] || 'sum').toLowerCase();\n                precisions[idx] = decimalPrecisions[k];\n                labels[idx] = this.labelIds[k];\n                writeType = isArray(outputTypes) ? outputTypes[k] : null;\n                formatResult[idx] =\n                    this.configureFormat(uIndexes[u], formatResults[k]);\n                idx++;\n            }\n\n            for (let i = 0; i < idx; i++) {\n                // emit values before column calculation\n                this.emitter.emit(\n                    'before-column-calc',\n                    tf,\n                    this,\n                    uIndexes[u],\n                    curValues,\n                    operations[i],\n                    precisions[i]\n                );\n\n                result = Number(this.calc(curValues, operations[i], null));\n\n                // emit column calculation result\n                this.emitter.emit(\n                    'column-calc',\n                    tf,\n                    this,\n                    uIndexes[u],\n                    result,\n                    operations[i],\n                    precisions[i]\n                );\n\n                // write result in expected DOM element\n                this.writeResult(\n                    result,\n                    labels[i],\n                    writeType,\n                    precisions[i],\n                    formatResult[i]\n                );\n\n            }//for i\n\n            // row(s) with result are always visible\n            let totRow = totRowIndexes && totRowIndexes[u] ?\n                rows[totRowIndexes[u]] : null;\n            if (totRow) {\n                totRow.style.display = '';\n            }\n        }//for u\n\n        this.onAfterOperation(tf, this);\n        this.emitter.emit('after-column-operation', tf, this);\n    }\n\n    /**\n     * Make desired calculation on specified column.\n     * @param {Number} colIndex Column index\n     * @param {String} [operation=SUM] Operation type\n     * @param {Number} precision Decimal precision\n     * @returns {Number}\n     */\n    columnCalc(colIndex, operation = SUM, precision) {\n        let excludeRows = this.excludeRows || [];\n        let colValues =\n            this.tf.getFilteredDataCol(colIndex, false, true, excludeRows);\n        return Number(this.calc(colValues, operation, precision));\n    }\n\n    /**\n     * Make calculation on passed values.\n     * @param {Array} values List of values\n     * @param {String} [operation=SUM] Optional operation type\n     * @param {Number} precision Optional result precision\n     * @returns {Number}\n     * @private\n     */\n    calc(colValues, operation = SUM, precision) {\n        let result = 0;\n\n        if (operation === Q1 || operation === Q3 || operation === MEDIAN) {\n            colValues = this.sortColumnValues(colValues, numSortAsc);\n        }\n\n        switch (operation) {\n            case MEAN:\n                result = this.calcMean(colValues);\n                break;\n            case SUM:\n                result = this.calcSum(colValues);\n                break;\n            case MIN:\n                result = this.calcMin(colValues);\n                break;\n            case MAX:\n                result = this.calcMax(colValues);\n                break;\n            case MEDIAN:\n                result = this.calcMedian(colValues);\n                break;\n            case Q1:\n                result = this.calcQ1(colValues);\n                break;\n            case Q3:\n                result = this.calcQ3(colValues);\n                break;\n        }\n\n        return isEmpty(precision) ? result : result.toFixed(precision);\n    }\n\n    /**\n     * Calculate the sum of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcSum(values = []) {\n        if (isEmpty(values)) {\n            return 0;\n        }\n        let result = values.reduce((x, y) => Number(x) + Number(y));\n        return result;\n    }\n\n    /**\n     * Calculate the mean of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMean(values = []) {\n        let result = this.calcSum(values) / values.length;\n        return Number(result);\n    }\n\n    /**\n     * Calculate the max value of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMax(values = []) {\n        return Math.max.apply(null, values);\n    }\n\n    /**\n     * Calculate the min value of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMin(values = []) {\n        return Math.min.apply(null, values);\n    }\n\n    /**\n     * Calculate the median of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcMedian(values = []) {\n        let nbValues = values.length;\n        let aux = 0;\n        if (nbValues % 2 === 1) {\n            aux = Math.floor(nbValues / 2);\n            return Number(values[aux]);\n        }\n        return (Number(values[nbValues / 2]) +\n            Number(values[((nbValues / 2) - 1)])) / 2;\n    }\n\n    /**\n     * Calculate the lower quartile of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcQ1(values = []) {\n        let nbValues = values.length;\n        let posa = 0.0;\n        posa = Math.floor(nbValues / 4);\n        if (4 * posa === nbValues) {\n            return (Number(values[posa - 1]) +\n                Number(values[posa])) / 2;\n        }\n        return Number(values[posa]);\n    }\n\n    /**\n     * Calculate the upper quartile of passed values.\n     * @param {Array} [values=[]] List of values\n     * @returns {Number}\n     */\n    calcQ3(values = []) {\n        let nbValues = values.length;\n        let posa = 0.0;\n        let posb = 0.0;\n        posa = Math.floor(nbValues / 4);\n        if (4 * posa === nbValues) {\n            posb = 3 * posa;\n            return (Number(values[posb]) +\n                Number(values[posb - 1])) / 2;\n        }\n        return Number(values[nbValues - posa - 1]);\n    }\n\n    /**\n     * Sort passed values with supplied sorter function.\n     * @param {Array} [values=[]] List of values to be sorted\n     * @param {Function} sorter Sorter function\n     * @returns {Array}\n     */\n    sortColumnValues(values = [], sorter) {\n        return values.sort(sorter);\n    }\n\n    /**\n     * Write calculation result in passed DOM element with supplied write method\n     * and decimal precision.\n     * @param {Number} [result=0] Calculation result\n     * @param {DOMElement} label DOM element\n     * @param {String} [writeType='innerhtml'] Write method\n     * @param {Number} [precision=2] Applied decimal precision\n     * @private\n     */\n    writeResult(result = 0, label, writeType = 'innerhtml',\n        precision = 2, format = {}) {\n        let labelElm = elm(label);\n\n        if (!labelElm) {\n            return;\n        }\n\n        result = result.toFixed(precision);\n        if (isNaN(result) || !isFinite(result)) {\n            result = '';\n        } else {\n            result = formatNumber(format)(result);\n        }\n\n        switch (writeType.toLowerCase()) {\n            case 'innerhtml':\n                labelElm.innerHTML = result;\n                break;\n            case 'setvalue':\n                labelElm.value = result;\n                break;\n            case 'createtextnode':\n                let oldNode = labelElm.firstChild;\n                let txtNode = createText(result);\n                labelElm.replaceChild(txtNode, oldNode);\n                break;\n        }\n    }\n\n    /**\n     * Configure the format options used to format the operation result based\n     * on column type.\n     * @param {Number} colIndex Column index\n     * @param {Object} [format={}] Format object\n     * @returns {Object}\n     * @private\n     */\n    configureFormat(colIndex, format = {}) {\n        let tf = this.tf;\n        if (tf.hasType(colIndex, [FORMATTED_NUMBER])) {\n            let colType = tf.colTypes[colIndex];\n            if (colType.decimal && !format.decimal) {\n                format.decimal = colType.decimal;\n            }\n            if (colType.thousands && !format.integerSeparator) {\n                format.integerSeparator = colType.thousands;\n            }\n        } else {\n            format.decimal = format.decimal || '';\n            format.integerSeparator = format.integerSeparator || '';\n        }\n        return format;\n    }\n\n    /** Remove extension */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        // unsubscribe to events\n        this.emitter.off(EVENTS, () => this.calcAll());\n\n        this.initialized = false;\n    }\n\n}\n"
  },
  {
    "__docId__": 76,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "EVENTS",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~EVENTS",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 8,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 77,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SUM",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~SUM",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 14,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 78,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "MEAN",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~MEAN",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 15,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 79,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "MIN",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~MIN",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 16,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 80,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "MAX",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~MAX",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 17,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 81,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "MEDIAN",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~MEDIAN",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 18,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 82,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "Q1",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~Q1",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 19,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 83,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "Q3",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~Q3",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 20,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 84,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "ColOps",
    "memberof": "src/extensions/colOps/colOps.js",
    "longname": "src/extensions/colOps/colOps.js~ColOps",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/extensions/colOps/colOps.js",
    "importStyle": "ColOps",
    "description": "Column calculations extension",
    "lineNumber": 25,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 85,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#constructor",
    "access": null,
    "description": "Creates an instance of ColOps",
    "lineNumber": 33,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "opts",
        "description": "Configuration object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 86,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeOperation",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#onBeforeOperation",
    "access": null,
    "description": "Callback fired before columns operations start",
    "lineNumber": 40,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 87,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterOperation",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#onAfterOperation",
    "access": null,
    "description": "Callback fired after columns operations are completed",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 88,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "opts",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#opts",
    "access": null,
    "description": "Configuration options",
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 89,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "labelIds",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#labelIds",
    "access": null,
    "description": "List of DOM element IDs containing column's calculation result",
    "lineNumber": 60,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 90,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "colIndexes",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#colIndexes",
    "access": null,
    "description": "List of columns' indexes for calculations",
    "lineNumber": 66,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 91,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "operations",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#operations",
    "access": null,
    "description": "List of operations - possible values: 'sum', 'mean', 'min', 'max',\n'median', 'q1', 'q3'",
    "lineNumber": 73,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 92,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "outputTypes",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#outputTypes",
    "access": null,
    "description": "List of write methods used to write the result - possible values:\n'innerHTML', 'setValue', 'createTextNode'",
    "lineNumber": 80,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 93,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "formatResults",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#formatResults",
    "access": null,
    "description": "List of format objects used for formatting the result -\nrefer to https://github.com/componitable/format-number to check\nconfiguration options",
    "lineNumber": 88,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 94,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "totRowIndexes",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#totRowIndexes",
    "access": null,
    "description": "List of row indexes displaying the results",
    "lineNumber": 94,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 95,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "excludeRows",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#excludeRows",
    "access": null,
    "description": "List of row indexes excluded from calculations",
    "lineNumber": 100,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 96,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "decimalPrecisions",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#decimalPrecisions",
    "access": null,
    "description": "List of decimal precision for calculation results",
    "lineNumber": 106,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 97,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#init",
    "access": null,
    "description": "Initializes ColOps instance",
    "lineNumber": 115,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 98,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#initialized",
    "access": null,
    "description": null,
    "lineNumber": 125,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 99,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcAll",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcAll",
    "access": null,
    "description": "Calculates columns' values\nConfiguration options are stored in 'opts' property\n- 'id' contains ids of elements showing result (array)\n- 'col' contains the columns' indexes (array)\n- 'operation' contains operation type (array, values: 'sum', 'mean',\n  'min', 'max', 'median', 'q1', 'q3')\n- 'write_method' array defines which method to use for displaying the\n   result (innerHTML, setValue, createTextNode) - default: 'innerHTML'\n- 'tot_row_index' defines in which row results are displayed\n  (integers array)\n\n- changes made by Nuovella:\n(1) optimized the routine (now it will only process each column once),\n(2) added calculations for the median, lower and upper quartile.",
    "lineNumber": 144,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 100,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "columnCalc",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#columnCalc",
    "access": null,
    "description": "Make desired calculation on specified column.",
    "lineNumber": 257,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "SUM",
        "defaultRaw": "SUM",
        "name": "operation",
        "description": "Operation type"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "precision",
        "description": "Decimal precision"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 101,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calc",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calc",
    "access": "private",
    "description": "Make calculation on passed values.",
    "lineNumber": 272,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "values",
        "description": "List of values"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "SUM",
        "defaultRaw": "SUM",
        "name": "operation",
        "description": "Optional operation type"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "precision",
        "description": "Optional result precision"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 102,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcSum",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcSum",
    "access": null,
    "description": "Calculate the sum of passed values.",
    "lineNumber": 311,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 103,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcMean",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcMean",
    "access": null,
    "description": "Calculate the mean of passed values.",
    "lineNumber": 324,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 104,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcMax",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcMax",
    "access": null,
    "description": "Calculate the max value of passed values.",
    "lineNumber": 334,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 105,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcMin",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcMin",
    "access": null,
    "description": "Calculate the min value of passed values.",
    "lineNumber": 343,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 106,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcMedian",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcMedian",
    "access": null,
    "description": "Calculate the median of passed values.",
    "lineNumber": 352,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 107,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcQ1",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcQ1",
    "access": null,
    "description": "Calculate the lower quartile of passed values.",
    "lineNumber": 368,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 108,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "calcQ3",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#calcQ3",
    "access": null,
    "description": "Calculate the upper quartile of passed values.",
    "lineNumber": 384,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 109,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "sortColumnValues",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#sortColumnValues",
    "access": null,
    "description": "Sort passed values with supplied sorter function.",
    "lineNumber": 403,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Array}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "values",
        "description": "List of values to be sorted"
      },
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "sorter",
        "description": "Sorter function"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 110,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "writeResult",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#writeResult",
    "access": "private",
    "description": "Write calculation result in passed DOM element with supplied write method\nand decimal precision.",
    "lineNumber": 416,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "0",
        "defaultRaw": 0,
        "name": "result",
        "description": "Calculation result"
      },
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "label",
        "description": "DOM element"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "'innerhtml'",
        "defaultRaw": "'innerhtml'",
        "name": "writeType",
        "description": "Write method"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "2",
        "defaultRaw": 2,
        "name": "precision",
        "description": "Applied decimal precision"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 111,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "configureFormat",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#configureFormat",
    "access": "private",
    "description": "Configure the format options used to format the operation result based\non column type.",
    "lineNumber": 454,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Object}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "{}",
        "defaultRaw": {},
        "name": "format",
        "description": "Format object"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 112,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#destroy",
    "access": null,
    "description": "Remove extension",
    "lineNumber": 472,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 113,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/colOps/colOps.js~ColOps",
    "longname": "src/extensions/colOps/colOps.js~ColOps#initialized",
    "access": null,
    "description": null,
    "lineNumber": 479,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 114,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/extensions/colsVisibility/colsVisibility.js",
    "memberof": null,
    "longname": "src/extensions/colsVisibility/colsVisibility.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../../feature';\nimport {\n    addClass, removeClass, createCheckItem, createElm, elm, removeElm,\n    getText\n} from '../../dom';\nimport {isFn, EMPTY_FN} from '../../types';\nimport {addEvt, targetEvt, removeEvt} from '../../event';\nimport {root} from '../../root';\n\n/**\n * Columns Visibility extension\n */\nexport default class ColsVisibility extends Feature {\n\n    /**\n     * Creates an instance of ColsVisibility\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} Configuration object\n     */\n    constructor(tf, f) {\n        super(tf, f.name);\n\n        // Configuration object\n        let cfg = this.config;\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        this.name = f.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = f.description || 'Columns visibility manager';\n\n        /**\n         * show/hide columns container element\n         * @private\n         */\n        this.spanEl = null;\n\n        /**\n         * show/hide columns button element\n         * @private\n         */\n        this.btnEl = null;\n\n        /**\n         * show/hide columns main container element\n         * @private\n         */\n        this.contEl = null;\n\n        /**\n         * Enable tick to hide a column, defaults to true\n         * @type {Boolean}\n         */\n        this.tickToHide = f.tick_to_hide === false ? false : true;\n\n        /**\n         * Enable columns manager UI, defaults to true\n         * @type {Boolean}\n         */\n        this.manager = f.manager === false ? false : true;\n\n        /**\n         * Headers HTML table reference only if headers are external\n         * @type {DOMElement}\n         */\n        this.headersTbl = f.headers_table || null;\n\n        /**\n         * Headers row index only if headers are external\n         * @type {Number}\n         */\n        this.headersIndex = f.headers_index || 1;\n\n        /**\n         * ID of main container element\n         * @type {String}\n         */\n        this.contElTgtId = f.container_target_id || null;\n\n        /**\n         * Alternative text for column headers in column manager UI\n         * @type {Array}\n         */\n        this.headersText = f.headers_text || null;\n\n        /**\n         * ID of button's container element\n         * @type {String}\n         */\n        this.btnTgtId = f.btn_target_id || null;\n\n        /**\n         * Button's text, defaults to Columns&#9660;\n         * @type {String}\n         */\n        this.btnText = f.btn_text || 'Columns&#9660;';\n\n        /**\n         * Button's inner HTML\n         * @type {String}\n         */\n        this.btnHtml = f.btn_html || null;\n\n        /**\n         * Css class for button\n         * @type {String}\n         */\n        this.btnCssClass = f.btn_css_class || 'colVis';\n\n        /**\n         * Columns manager UI close link text, defaults to 'Close'\n         * @type {String}\n         */\n        this.btnCloseText = f.btn_close_text || 'Close';\n\n        /**\n         * Columns manager UI close link HTML\n         * @type {String}\n         */\n        this.btnCloseHtml = f.btn_close_html || null;\n\n        /**\n         * Css for columns manager UI close link\n         * @type {String}\n         */\n        this.btnCloseCssClass = f.btn_close_css_class || this.btnCssClass;\n\n        /**\n         * Extension's stylesheet filename\n         * @type {String}\n         */\n        this.stylesheet = f.stylesheet || 'colsVisibility.css';\n\n        /**\n         * Css for columns manager UI span\n         * @type {String}\n         */\n        this.spanCssClass = f.span_css_class || 'colVisSpan';\n\n        /**\n         * Css for columns manager UI main container\n         * @type {String}\n         */\n        this.contCssClass = f.cont_css_class || 'colVisCont';\n\n        /**\n         * Css for columns manager UI checklist (ul)\n         * @type {String}\n         */\n        this.listCssClass = cfg.list_css_class || 'cols_checklist';\n\n        /**\n         * Css for columns manager UI checklist item (li)\n         * @type {String}\n         */\n        this.listItemCssClass = cfg.checklist_item_css_class ||\n            'cols_checklist_item';\n\n        /**\n         * Css for columns manager UI checklist item selected state (li)\n         * @type {String}\n         */\n        this.listSlcItemCssClass = cfg.checklist_selected_item_css_class ||\n            'cols_checklist_slc_item';\n\n        /**\n         * Text preceding the columns list, defaults to 'Hide' or 'Show'\n         * depending on tick mode (tick_to_hide option)\n         * @type {String}\n         */\n        this.text = f.text || (this.tickToHide ? 'Hide: ' : 'Show: ');\n\n        /**\n         * List of columns indexes to be hidden at initialization\n         * @type {Array}\n         */\n        this.atStart = f.at_start || [];\n\n        /**\n         * Enable hover behaviour on columns manager button/link\n         * @type {Boolean}\n         */\n        this.enableHover = Boolean(f.enable_hover);\n\n        /**\n         * Enable select all option, disabled by default\n         * @type {Boolean}\n         */\n        this.enableTickAll = Boolean(f.enable_tick_all);\n\n        /**\n         * Text for select all option, defaults to 'Select all:'\n         * @type {String}\n         */\n        this.tickAllText = f.tick_all_text || 'Select all:';\n\n        /**\n         * List of indexes of hidden columns\n         * @private\n         */\n        this.hiddenCols = [];\n\n        /**\n         * Bound mouseup wrapper\n         * @private\n         */\n        this.boundMouseup = null;\n\n        /**\n         * Callback fired when the extension is initialized\n         * @type {Function}\n         */\n        this.onLoaded = isFn(f.on_loaded) ? f.on_loaded : EMPTY_FN;\n\n        /**\n         * Callback fired before the columns manager is opened\n         * @type {Function}\n         */\n        this.onBeforeOpen = isFn(f.on_before_open) ?\n            f.on_before_open : EMPTY_FN;\n\n        /**\n         * Callback fired after the columns manager is opened\n         * @type {Function}\n         */\n        this.onAfterOpen = isFn(f.on_after_open) ? f.on_after_open : EMPTY_FN;\n\n        /**\n         * Callback fired before the columns manager is closed\n         * @type {Function}\n         */\n        this.onBeforeClose = isFn(f.on_before_close) ?\n            f.on_before_close : EMPTY_FN;\n\n        /**\n         * Callback fired after the columns manager is closed\n         * @type {Function}\n         */\n        this.onAfterClose = isFn(f.on_after_close) ?\n            f.on_after_close : EMPTY_FN;\n\n        /**\n         * Callback fired before a column is hidden\n         * @type {Function}\n         */\n        this.onBeforeColHidden = isFn(f.on_before_col_hidden) ?\n            f.on_before_col_hidden : EMPTY_FN;\n\n        /**\n         * Callback fired after a column is hidden\n         * @type {Function}\n         */\n        this.onAfterColHidden = isFn(f.on_after_col_hidden) ?\n            f.on_after_col_hidden : EMPTY_FN;\n\n        /**\n         * Callback fired before a column is displayed\n         * @type {Function}\n         */\n        this.onBeforeColDisplayed = isFn(f.on_before_col_displayed) ?\n            f.on_before_col_displayed : EMPTY_FN;\n\n        /**\n         * Callback fired after a column is displayed\n         * @type {Function}\n         */\n        this.onAfterColDisplayed = isFn(f.on_after_col_displayed) ?\n            f.on_after_col_displayed : EMPTY_FN;\n\n        //Grid layout support\n        if (tf.gridLayout) {\n            this.headersTbl = tf.feature('gridLayout').headTbl; //headers table\n            this.headersIndex = 0; //headers index\n            this.onAfterColDisplayed = function () { };\n            this.onAfterColHidden = function () { };\n        }\n\n        //Loads extension stylesheet\n        tf.import(f.name + 'Style', tf.stylePath + this.stylesheet, null,\n            'link');\n\n        this.enable();\n    }\n\n    /**\n     * Mouse-up event handler handling popup auto-close behaviour\n     * @private\n     */\n    onMouseup(evt) {\n        let targetElm = targetEvt(evt);\n\n        while (targetElm && targetElm !== this.contEl\n            && targetElm !== this.btnEl) {\n            targetElm = targetElm.parentNode;\n        }\n\n        if (targetElm !== this.contEl && targetElm !== this.btnEl) {\n            this.toggle();\n        }\n\n        return;\n    }\n\n    /**\n     * Toggle columns manager UI\n     */\n    toggle() {\n        // ensure mouseup event handler is removed\n        removeEvt(root, 'mouseup', this.boundMouseup);\n\n        let contDisplay = this.contEl.style.display;\n\n        if (contDisplay !== 'inline') {\n            this.onBeforeOpen(this);\n        }\n        if (contDisplay === 'inline') {\n            this.onBeforeClose(this);\n        }\n\n        this.contEl.style.display = contDisplay === 'inline' ?\n            'none' : 'inline';\n\n        if (contDisplay !== 'inline') {\n            this.onAfterOpen(this);\n            addEvt(root, 'mouseup', this.boundMouseup);\n        }\n        if (contDisplay === 'inline') {\n            this.onAfterClose(this);\n        }\n    }\n\n    /**\n     * Check an item in columns manager UI\n     * @private\n     */\n    checkItem(lbl) {\n        let li = lbl.parentNode;\n        if (!li || !lbl) {\n            return;\n        }\n        let isChecked = lbl.firstChild.checked;\n        let colIndex = lbl.firstChild.getAttribute('id').split('_')[1];\n        colIndex = parseInt(colIndex, 10);\n        if (isChecked) {\n            addClass(li, this.listSlcItemCssClass);\n        } else {\n            removeClass(li, this.listSlcItemCssClass);\n        }\n\n        let hide = false;\n        if ((this.tickToHide && isChecked) ||\n            (!this.tickToHide && !isChecked)) {\n            hide = true;\n        }\n        this.setHidden(colIndex, hide);\n    }\n\n    /**\n     * Initializes ColsVisibility instance\n     */\n    init() {\n        if (this.initialized || !this.manager) {\n            return;\n        }\n\n        this.emitter.on(['hide-column'],\n            (tf, colIndex) => this.hideCol(colIndex));\n\n        this.buildBtn();\n        this.buildManager();\n\n        /** @inherited */\n        this.initialized = true;\n\n        this.boundMouseup = this.onMouseup.bind(this);\n\n        this.emitter.emit('columns-visibility-initialized', this.tf, this);\n\n        // Hide columns at start at very end of initialization, do not move\n        // as order is important\n        this._hideAtStart();\n    }\n\n    /**\n     * Build main button UI\n     */\n    buildBtn() {\n        if (this.btnEl) {\n            return;\n        }\n        let tf = this.tf;\n        let span = createElm('span');\n        span.className = this.spanCssClass;\n\n        //Container element (rdiv or custom element)\n        if (!this.btnTgtId) {\n            tf.setToolbar();\n        }\n        let targetEl = !this.btnTgtId ? tf.rDiv : elm(this.btnTgtId);\n\n        if (!this.btnTgtId) {\n            let firstChild = targetEl.firstChild;\n            firstChild.parentNode.insertBefore(span, firstChild);\n        } else {\n            targetEl.appendChild(span);\n        }\n\n        if (!this.btnHtml) {\n            let btn = createElm('a', ['href', 'javascript:;']);\n            btn.className = this.btnCssClass;\n            btn.title = this.desc;\n\n            btn.innerHTML = this.btnText;\n            span.appendChild(btn);\n            if (!this.enableHover) {\n                addEvt(btn, 'click', (evt) => this.toggle(evt));\n            } else {\n                addEvt(btn, 'mouseover', (evt) => this.toggle(evt));\n            }\n        } else { //Custom html\n            span.innerHTML = this.btnHtml;\n            let colVisEl = span.firstChild;\n            if (!this.enableHover) {\n                addEvt(colVisEl, 'click', (evt) => this.toggle(evt));\n            } else {\n                addEvt(colVisEl, 'mouseover', (evt) => this.toggle(evt));\n            }\n        }\n\n        this.spanEl = span;\n        this.btnEl = this.spanEl.firstChild;\n\n        this.onLoaded(this);\n    }\n\n    /**\n     * Build columns manager UI\n     */\n    buildManager() {\n        let tf = this.tf;\n\n        let container = !this.contElTgtId ?\n            createElm('div') :\n            elm(this.contElTgtId);\n        container.className = this.contCssClass;\n\n        //Extension description\n        let extNameLabel = createElm('p');\n        extNameLabel.innerHTML = this.text;\n        container.appendChild(extNameLabel);\n\n        //Headers list\n        let ul = createElm('ul');\n        ul.className = this.listCssClass;\n\n        let tbl = this.headersTbl ? this.headersTbl : tf.tbl;\n        let headerIndex = this.headersTbl ?\n            this.headersIndex : tf.getHeadersRowIndex();\n        let headerRow = tbl.rows[headerIndex];\n\n        //Tick all option\n        if (this.enableTickAll) {\n            let li = createCheckItem('col__' + tf.id, this.tickAllText,\n                this.tickAllText);\n            addClass(li, this.listItemCssClass);\n            ul.appendChild(li);\n            li.check.checked = !this.tickToHide;\n\n            addEvt(li.check, 'click', () => {\n                for (let h = 0; h < headerRow.cells.length; h++) {\n                    let itm = elm('col_' + h + '_' + tf.id);\n                    if (itm && li.check.checked !== itm.checked) {\n                        itm.click();\n                        itm.checked = li.check.checked;\n                    }\n                }\n            });\n        }\n\n        for (let i = 0; i < headerRow.cells.length; i++) {\n            let cell = headerRow.cells[i];\n            let cellText = this.headersText && this.headersText[i] ?\n                this.headersText[i] : this._getHeaderText(cell);\n            let liElm = createCheckItem('col_' + i + '_' + tf.id, cellText,\n                cellText);\n            addClass(liElm, this.listItemCssClass);\n            if (!this.tickToHide) {\n                addClass(liElm, this.listSlcItemCssClass);\n            }\n            ul.appendChild(liElm);\n            if (!this.tickToHide) {\n                liElm.check.checked = true;\n            }\n\n            addEvt(liElm.check, 'click', (evt) => {\n                let elm = targetEvt(evt);\n                let lbl = elm.parentNode;\n                this.checkItem(lbl);\n            });\n        }\n\n        //separator\n        let p = createElm('p', ['align', 'center']);\n        let btn;\n        //Close link\n        if (!this.btnCloseHtml) {\n            btn = createElm('a', ['href', 'javascript:;']);\n            btn.className = this.btnCloseCssClass;\n            btn.innerHTML = this.btnCloseText;\n            addEvt(btn, 'click', (evt) => this.toggle(evt));\n            p.appendChild(btn);\n        } else {\n            p.innerHTML = this.btnCloseHtml;\n            btn = p.firstChild;\n            addEvt(btn, 'click', (evt) => this.toggle(evt));\n        }\n\n        container.appendChild(ul);\n        container.appendChild(p);\n\n        this.btnEl.parentNode.insertBefore(container, this.btnEl);\n        this.contEl = container;\n    }\n\n    /**\n     * Hide or show specified columns\n     * @param {Number} colIndex Column index\n     * @param {Boolean} hide    Hide column if true or show if false\n     */\n    setHidden(colIndex, hide) {\n        let tf = this.tf;\n        let tbl = tf.tbl;\n\n        if (hide) {\n            this.onBeforeColHidden(this, colIndex);\n        }\n        if (!hide) {\n            this.onBeforeColDisplayed(this, colIndex);\n        }\n\n        this._hideCells(tbl, colIndex, hide);\n        if (this.headersTbl) {\n            this._hideCells(this.headersTbl, colIndex, hide);\n        }\n\n        let hiddenCols = this.hiddenCols;\n        let itemIndex = hiddenCols.indexOf(colIndex);\n        if (hide) {\n            if (itemIndex === -1) {\n                this.hiddenCols.push(colIndex);\n            }\n        } else {\n            if (itemIndex !== -1) {\n                this.hiddenCols.splice(itemIndex, 1);\n            }\n        }\n\n        let gridLayout;\n        let headTbl;\n        let gridColElms;\n        if (hide) {\n            //This event is fired just after a column is displayed for\n            //grid_layout support\n            //TODO: grid layout module should be responsible for those\n            //calculations\n            if (tf.gridLayout) {\n                gridLayout = tf.feature('gridLayout');\n                headTbl = gridLayout.headTbl;\n                gridColElms = gridLayout.colElms;\n                let hiddenWidth = parseInt(\n                    gridColElms[colIndex].style.width, 10);\n\n                let headTblW = parseInt(headTbl.style.width, 10);\n                headTbl.style.width = headTblW - hiddenWidth + 'px';\n                tbl.style.width = headTbl.style.width;\n            }\n\n            this.onAfterColHidden(this, colIndex);\n            this.emitter.emit('column-hidden', tf, this, colIndex,\n                this.hiddenCols);\n        }\n\n        if (!hide) {\n            //This event is fired just after a column is displayed for\n            //grid_layout support\n            //TODO: grid layout module should be responsible for those\n            //calculations\n            if (tf.gridLayout) {\n                gridLayout = tf.feature('gridLayout');\n                headTbl = gridLayout.headTbl;\n                gridColElms = gridLayout.colElms;\n                let width = parseInt(gridColElms[colIndex].style.width, 10);\n                headTbl.style.width =\n                    (parseInt(headTbl.style.width, 10) + width) + 'px';\n                tf.tbl.style.width = headTbl.style.width;\n            }\n\n            this.onAfterColDisplayed(this, colIndex);\n            this.emitter.emit('column-shown', tf, this, colIndex,\n                this.hiddenCols);\n        }\n    }\n\n    /**\n     * Show specified column\n     * @param  {Number} colIndex Column index\n     */\n    showCol(colIndex) {\n        if (colIndex === undefined || !this.isColHidden(colIndex)) {\n            return;\n        }\n        if (this.manager && this.contEl) {\n            let itm = elm('col_' + colIndex + '_' + this.tf.id);\n            if (itm) {\n                itm.click();\n            }\n        } else {\n            this.setHidden(colIndex, false);\n        }\n    }\n\n    /**\n     * Hide specified column\n     * @param  {Number} colIndex Column index\n     */\n    hideCol(colIndex) {\n        if (colIndex === undefined || this.isColHidden(colIndex)) {\n            return;\n        }\n        if (this.manager && this.contEl) {\n            let itm = elm('col_' + colIndex + '_' + this.tf.id);\n            if (itm) {\n                itm.click();\n            }\n        } else {\n            this.setHidden(colIndex, true);\n        }\n    }\n\n    /**\n     * Determine if specified column is hidden\n     * @param  {Number} colIndex Column index\n     */\n    isColHidden(colIndex) {\n        if (this.hiddenCols.indexOf(colIndex) !== -1) {\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Toggle visibility of specified column\n     * @param  {Number} colIndex Column index\n     */\n    toggleCol(colIndex) {\n        if (colIndex === undefined || this.isColHidden(colIndex)) {\n            this.showCol(colIndex);\n        } else {\n            this.hideCol(colIndex);\n        }\n    }\n\n    /**\n     * Return the indexes of the columns currently hidden\n     * @return {Array} column indexes\n     */\n    getHiddenCols() {\n        return this.hiddenCols;\n    }\n\n    /**\n     * Remove the columns manager\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        if (elm(this.contElTgtId)) {\n            elm(this.contElTgtId).innerHTML = '';\n        } else {\n            this.contEl.innerHTML = '';\n            removeElm(this.contEl);\n            this.contEl = null;\n        }\n        this.btnEl.innerHTML = '';\n        removeElm(this.btnEl);\n        this.btnEl = null;\n\n        this.emitter.off(['hide-column'],\n            (tf, colIndex) => this.hideCol(colIndex));\n\n        this.boundMouseup = null;\n\n        this.initialized = false;\n    }\n\n    _getHeaderText(cell) {\n        if (!cell.hasChildNodes) {\n            return '';\n        }\n\n        for (let i = 0; i < cell.childNodes.length; i++) {\n            let n = cell.childNodes[i];\n            if (n.nodeType === 3) {\n                return n.nodeValue;\n            } else if (n.nodeType === 1) {\n                if (n.id && n.id.indexOf('popUp') !== -1) {\n                    continue;\n                } else {\n                    return getText(n);\n                }\n            }\n            continue;\n        }\n        return '';\n    }\n\n    _hideCells(tbl, colIndex, hide) {\n        for (let i = 0; i < tbl.rows.length; i++) {\n            let row = tbl.rows[i];\n            let cell = row.cells[colIndex];\n            if (cell) {\n                cell.style.display = hide ? 'none' : '';\n            }\n        }\n    }\n\n    _hideAtStart() {\n        this.atStart.forEach((colIdx) => {\n            this.hideCol(colIdx);\n        });\n    }\n}\n"
  },
  {
    "__docId__": 115,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "ColsVisibility",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/extensions/colsVisibility/colsVisibility.js",
    "importStyle": "ColsVisibility",
    "description": "Columns Visibility extension",
    "lineNumber": 13,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 116,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#constructor",
    "access": null,
    "description": "Creates an instance of ColsVisibility",
    "lineNumber": 20,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "Configuration",
        "description": "object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 117,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#name",
    "access": null,
    "description": "Module name",
    "lineNumber": 30,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 118,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "desc",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#desc",
    "access": null,
    "description": "Module description",
    "lineNumber": 36,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 119,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "spanEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#spanEl",
    "access": "private",
    "description": "show/hide columns container element",
    "lineNumber": 42,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 120,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnEl",
    "access": "private",
    "description": "show/hide columns button element",
    "lineNumber": 48,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 121,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#contEl",
    "access": "private",
    "description": "show/hide columns main container element",
    "lineNumber": 54,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 122,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tickToHide",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#tickToHide",
    "access": null,
    "description": "Enable tick to hide a column, defaults to true",
    "lineNumber": 60,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 123,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "manager",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#manager",
    "access": null,
    "description": "Enable columns manager UI, defaults to true",
    "lineNumber": 66,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 124,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headersTbl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#headersTbl",
    "access": null,
    "description": "Headers HTML table reference only if headers are external",
    "lineNumber": 72,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 125,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headersIndex",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#headersIndex",
    "access": null,
    "description": "Headers row index only if headers are external",
    "lineNumber": 78,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 126,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contElTgtId",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#contElTgtId",
    "access": null,
    "description": "ID of main container element",
    "lineNumber": 84,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 127,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headersText",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#headersText",
    "access": null,
    "description": "Alternative text for column headers in column manager UI",
    "lineNumber": 90,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 128,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnTgtId",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnTgtId",
    "access": null,
    "description": "ID of button's container element",
    "lineNumber": 96,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 129,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnText",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnText",
    "access": null,
    "description": "Button's text, defaults to Columns&#9660;",
    "lineNumber": 102,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 130,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnHtml",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnHtml",
    "access": null,
    "description": "Button's inner HTML",
    "lineNumber": 108,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 131,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnCssClass",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnCssClass",
    "access": null,
    "description": "Css class for button",
    "lineNumber": 114,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 132,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnCloseText",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnCloseText",
    "access": null,
    "description": "Columns manager UI close link text, defaults to 'Close'",
    "lineNumber": 120,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 133,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnCloseHtml",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnCloseHtml",
    "access": null,
    "description": "Columns manager UI close link HTML",
    "lineNumber": 126,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 134,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnCloseCssClass",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnCloseCssClass",
    "access": null,
    "description": "Css for columns manager UI close link",
    "lineNumber": 132,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 135,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stylesheet",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#stylesheet",
    "access": null,
    "description": "Extension's stylesheet filename",
    "lineNumber": 138,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 136,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "spanCssClass",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#spanCssClass",
    "access": null,
    "description": "Css for columns manager UI span",
    "lineNumber": 144,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 137,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contCssClass",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#contCssClass",
    "access": null,
    "description": "Css for columns manager UI main container",
    "lineNumber": 150,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 138,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "listCssClass",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#listCssClass",
    "access": null,
    "description": "Css for columns manager UI checklist (ul)",
    "lineNumber": 156,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 139,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "listItemCssClass",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#listItemCssClass",
    "access": null,
    "description": "Css for columns manager UI checklist item (li)",
    "lineNumber": 162,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 140,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "listSlcItemCssClass",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#listSlcItemCssClass",
    "access": null,
    "description": "Css for columns manager UI checklist item selected state (li)",
    "lineNumber": 169,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 141,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "text",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#text",
    "access": null,
    "description": "Text preceding the columns list, defaults to 'Hide' or 'Show'\ndepending on tick mode (tick_to_hide option)",
    "lineNumber": 177,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 142,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "atStart",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#atStart",
    "access": null,
    "description": "List of columns indexes to be hidden at initialization",
    "lineNumber": 183,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 143,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableHover",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#enableHover",
    "access": null,
    "description": "Enable hover behaviour on columns manager button/link",
    "lineNumber": 189,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 144,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableTickAll",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#enableTickAll",
    "access": null,
    "description": "Enable select all option, disabled by default",
    "lineNumber": 195,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 145,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tickAllText",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#tickAllText",
    "access": null,
    "description": "Text for select all option, defaults to 'Select all:'",
    "lineNumber": 201,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 146,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hiddenCols",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#hiddenCols",
    "access": "private",
    "description": "List of indexes of hidden columns",
    "lineNumber": 207,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 147,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundMouseup",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#boundMouseup",
    "access": "private",
    "description": "Bound mouseup wrapper",
    "lineNumber": 213,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 148,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onLoaded",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onLoaded",
    "access": null,
    "description": "Callback fired when the extension is initialized",
    "lineNumber": 219,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 149,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeOpen",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onBeforeOpen",
    "access": null,
    "description": "Callback fired before the columns manager is opened",
    "lineNumber": 225,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 150,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterOpen",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onAfterOpen",
    "access": null,
    "description": "Callback fired after the columns manager is opened",
    "lineNumber": 232,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 151,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeClose",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onBeforeClose",
    "access": null,
    "description": "Callback fired before the columns manager is closed",
    "lineNumber": 238,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 152,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterClose",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onAfterClose",
    "access": null,
    "description": "Callback fired after the columns manager is closed",
    "lineNumber": 245,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 153,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeColHidden",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onBeforeColHidden",
    "access": null,
    "description": "Callback fired before a column is hidden",
    "lineNumber": 252,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 154,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterColHidden",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onAfterColHidden",
    "access": null,
    "description": "Callback fired after a column is hidden",
    "lineNumber": 259,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 155,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeColDisplayed",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onBeforeColDisplayed",
    "access": null,
    "description": "Callback fired before a column is displayed",
    "lineNumber": 266,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 156,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterColDisplayed",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onAfterColDisplayed",
    "access": null,
    "description": "Callback fired after a column is displayed",
    "lineNumber": 273,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 157,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headersTbl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#headersTbl",
    "access": null,
    "description": null,
    "lineNumber": 278,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 158,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headersIndex",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#headersIndex",
    "access": null,
    "description": null,
    "lineNumber": 279,
    "undocument": true,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 159,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onMouseup",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#onMouseup",
    "access": "private",
    "description": "Mouse-up event handler handling popup auto-close behaviour",
    "lineNumber": 295,
    "params": [
      {
        "name": "evt",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 160,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "toggle",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#toggle",
    "access": null,
    "description": "Toggle columns manager UI",
    "lineNumber": 313,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 161,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "checkItem",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#checkItem",
    "access": "private",
    "description": "Check an item in columns manager UI",
    "lineNumber": 342,
    "params": [
      {
        "name": "lbl",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 162,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#init",
    "access": null,
    "description": "Initializes ColsVisibility instance",
    "lineNumber": 367,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 163,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#initialized",
    "access": null,
    "description": null,
    "lineNumber": 379,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 164,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundMouseup",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#boundMouseup",
    "access": null,
    "description": null,
    "lineNumber": 381,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 165,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "buildBtn",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#buildBtn",
    "access": null,
    "description": "Build main button UI",
    "lineNumber": 393,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 166,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "spanEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#spanEl",
    "access": null,
    "description": null,
    "lineNumber": 436,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 167,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnEl",
    "access": null,
    "description": null,
    "lineNumber": 437,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 168,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "buildManager",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#buildManager",
    "access": null,
    "description": "Build columns manager UI",
    "lineNumber": 445,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 169,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#contEl",
    "access": null,
    "description": null,
    "lineNumber": 528,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 170,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setHidden",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#setHidden",
    "access": null,
    "description": "Hide or show specified columns",
    "lineNumber": 536,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "hide",
        "description": "Hide column if true or show if false"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 171,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "showCol",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#showCol",
    "access": null,
    "description": "Show specified column",
    "lineNumber": 614,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 172,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "hideCol",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#hideCol",
    "access": null,
    "description": "Hide specified column",
    "lineNumber": 632,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 173,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isColHidden",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#isColHidden",
    "access": null,
    "description": "Determine if specified column is hidden",
    "lineNumber": 650,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "types": [
        "boolean"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 174,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "toggleCol",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#toggleCol",
    "access": null,
    "description": "Toggle visibility of specified column",
    "lineNumber": 661,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 175,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getHiddenCols",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#getHiddenCols",
    "access": null,
    "description": "Return the indexes of the columns currently hidden",
    "lineNumber": 673,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "column indexes"
    },
    "generator": false
  },
  {
    "__docId__": 176,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#destroy",
    "access": null,
    "description": "Remove the columns manager",
    "lineNumber": 680,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 177,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#contEl",
    "access": null,
    "description": null,
    "lineNumber": 689,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 178,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnEl",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#btnEl",
    "access": null,
    "description": null,
    "lineNumber": 693,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 179,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundMouseup",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#boundMouseup",
    "access": null,
    "description": null,
    "lineNumber": 698,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 180,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#initialized",
    "access": null,
    "description": null,
    "lineNumber": 700,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 181,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_getHeaderText",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#_getHeaderText",
    "access": null,
    "description": null,
    "lineNumber": 703,
    "undocument": true,
    "params": [
      {
        "name": "cell",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "string"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 182,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_hideCells",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#_hideCells",
    "access": null,
    "description": null,
    "lineNumber": 724,
    "undocument": true,
    "params": [
      {
        "name": "tbl",
        "types": [
          "*"
        ]
      },
      {
        "name": "colIndex",
        "types": [
          "*"
        ]
      },
      {
        "name": "hide",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 183,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_hideAtStart",
    "memberof": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility",
    "longname": "src/extensions/colsVisibility/colsVisibility.js~ColsVisibility#_hideAtStart",
    "access": null,
    "description": null,
    "lineNumber": 734,
    "undocument": true,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 184,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/extensions/filtersVisibility/filtersVisibility.js",
    "memberof": null,
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../../feature';\nimport {createElm, removeElm, elm} from '../../dom';\nimport {isFn, isUndef, EMPTY_FN} from '../../types';\nimport {addEvt} from '../../event';\n\n/**\n * Filters Visibility extension\n */\nexport default class FiltersVisibility extends Feature {\n\n    /**\n     * Creates an instance of FiltersVisibility\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} Configuration object\n     */\n    constructor(tf, f) {\n        super(tf, f.name);\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        this.name = f.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = f.description || 'Filters row visibility manager';\n\n        /**\n         * Extension's stylesheet filename\n         * @type {String}\n         */\n        this.stylesheet = f.stylesheet || 'filtersVisibility.css';\n\n        /**\n         * Expand icon filename\n         * @type {String}\n         */\n        this.icnExpand = f.expand_icon_name || 'icn_exp.png';\n\n        /**\n         * Collapse icon filename\n         * @type {String}\n         */\n        this.icnCollapse = f.collapse_icon_name || 'icn_clp.png';\n\n        /**\n         * Main container element\n         * @private\n         */\n        this.contEl = null;\n\n        /**\n         * Button element\n         * @private\n         */\n        this.btnEl = null;\n\n        /**\n         * Expand icon HTML\n         * @private\n         */\n        this.icnExpandHtml = '<img src=\"' + tf.themesPath + this.icnExpand +\n            '\" alt=\"Expand filters\" >';\n\n        /**\n         * Collapse icon HTML\n         * @private\n         */\n        this.icnCollapseHtml = '<img src=\"' + tf.themesPath + this.icnCollapse +\n            '\" alt=\"Collapse filters\" >';\n\n        /**\n         * Default text\n         * @private\n         */\n        this.defaultText = 'Toggle filters';\n\n        /**\n         * ID of main container element\n         * @type {String}\n         */\n        this.targetId = f.target_id || null;\n\n        /**\n         * Enable expand/collapse icon, defaults to true\n         * @type {Boolean}\n         */\n        this.enableIcon = f.enable_icon === false ? false : true;\n\n        /**\n         * Custom text for button\n         * @type {String}\n         */\n        this.btnText = f.btn_text || '';\n\n        /**\n         * Collapse button HTML\n         * @private\n         */\n        this.collapseBtnHtml = this.enableIcon ?\n            this.icnCollapseHtml + this.btnText :\n            this.btnText || this.defaultText;\n\n        /**\n         * Expand button HTML\n         * @private\n         */\n        this.expandBtnHtml = this.enableIcon ?\n            this.icnExpandHtml + this.btnText :\n            this.btnText || this.defaultText;\n\n        /**\n         * Button's custom HTML\n         * @type {String}\n         */\n        this.btnHtml = f.btn_html || null;\n\n        /**\n         * Css class for expand/collapse filters button\n         * @type {String}\n         */\n        this.btnCssClass = f.btn_css_class || 'btnExpClpFlt';\n\n        /**\n         * Css class for main container\n         * @type {String}\n         */\n        this.contCssClass = f.cont_css_class || 'expClpFlt';\n\n        /**\n         * Filters row index\n         * @type {Number}\n         */\n        this.filtersRowIndex = !isUndef(f.filters_row_index) ?\n            f.filters_row_index : tf.getFiltersRowIndex();\n\n        /**\n         * Make filters visible at initialization, defaults to true\n         * @type {Boolean}\n         */\n        this.visibleAtStart = !isUndef(f.visible_at_start) ?\n            Boolean(f.visible_at_start) : true;\n\n        /**\n         * Callback fired before filters row is shown\n         * @type {Function}\n         */\n        this.onBeforeShow = isFn(f.on_before_show) ?\n            f.on_before_show : EMPTY_FN;\n\n        /**\n         * Callback fired after filters row is shown\n         * @type {Function}\n         */\n        this.onAfterShow = isFn(f.on_after_show) ? f.on_after_show : EMPTY_FN;\n\n        /**\n         * Callback fired before filters row is hidden\n         * @type {Function}\n         */\n        this.onBeforeHide = isFn(f.on_before_hide) ?\n            f.on_before_hide : EMPTY_FN;\n\n        /**\n         * Callback fired after filters row is hidden\n         * @type {Function}\n         */\n        this.onAfterHide = isFn(f.on_after_hide) ? f.on_after_hide : EMPTY_FN;\n\n        //Import extension's stylesheet\n        tf.import(f.name + 'Style', tf.stylePath + this.stylesheet, null,\n            'link');\n\n        this.enable();\n    }\n\n    /**\n     * Initialise extension\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        this.buildUI();\n\n        /**\n         * @inherited\n         */\n        this.initialized = true;\n\n        this.emitter.on(['show-filters'], (tf, visible) => this.show(visible));\n        this.emitter.emit('filters-visibility-initialized', this.tf, this);\n    }\n\n    /**\n     * Build UI elements\n     */\n    buildUI() {\n        let tf = this.tf;\n        let span = createElm('span');\n        span.className = this.contCssClass;\n\n        //Container element (rdiv or custom element)\n        if (!this.targetId) {\n            tf.setToolbar();\n        }\n        let targetEl = !this.targetId ? tf.rDiv : elm(this.targetId);\n\n        if (!this.targetId) {\n            let firstChild = targetEl.firstChild;\n            firstChild.parentNode.insertBefore(span, firstChild);\n        } else {\n            targetEl.appendChild(span);\n        }\n\n        let btn;\n        if (!this.btnHtml) {\n            btn = createElm('a', ['href', 'javascript:void(0);']);\n            btn.className = this.btnCssClass;\n            btn.title = this.btnText || this.defaultText;\n            btn.innerHTML = this.collapseBtnHtml;\n            span.appendChild(btn);\n        } else { //Custom html\n            span.innerHTML = this.btnHtml;\n            btn = span.firstChild;\n        }\n\n        addEvt(btn, 'click', () => this.toggle());\n\n        this.contEl = span;\n        this.btnEl = btn;\n\n        if (!this.visibleAtStart) {\n            this.toggle();\n        }\n    }\n\n    /**\n     * Toggle filters visibility\n     */\n    toggle() {\n        let tf = this.tf;\n        let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.tbl;\n        let fltRow = tbl.rows[this.filtersRowIndex];\n        let isDisplayed = fltRow.style.display === '';\n\n        this.show(!isDisplayed);\n    }\n\n    /**\n     * Show or hide filters\n     *\n     * @param {boolean} [visible=true] Visibility flag\n     */\n    show(visible = true) {\n        let tf = this.tf;\n        let tbl = tf.gridLayout ? tf.feature('gridLayout').headTbl : tf.tbl;\n        let fltRow = tbl.rows[this.filtersRowIndex];\n\n        if (visible) {\n            this.onBeforeShow(this);\n        }\n        if (!visible) {\n            this.onBeforeHide(this);\n        }\n\n        fltRow.style.display = visible ? '' : 'none';\n        if (this.enableIcon && !this.btnHtml) {\n            this.btnEl.innerHTML = visible ?\n                this.collapseBtnHtml : this.expandBtnHtml;\n        }\n\n        if (visible) {\n            this.onAfterShow(this);\n        }\n        if (!visible) {\n            this.onAfterHide(this);\n        }\n\n        this.emitter.emit('filters-toggled', tf, this, visible);\n    }\n\n    /**\n     * Destroy the UI\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        this.emitter.off(['show-filters'], (tf, visible) => this.show(visible));\n\n        this.btnEl.innerHTML = '';\n        removeElm(this.btnEl);\n        this.btnEl = null;\n\n        this.contEl.innerHTML = '';\n        removeElm(this.contEl);\n        this.contEl = null;\n        this.initialized = false;\n    }\n\n}\n"
  },
  {
    "__docId__": 185,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "FiltersVisibility",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/extensions/filtersVisibility/filtersVisibility.js",
    "importStyle": "FiltersVisibility",
    "description": "Filters Visibility extension",
    "lineNumber": 9,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 186,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#constructor",
    "access": null,
    "description": "Creates an instance of FiltersVisibility",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "Configuration",
        "description": "object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 187,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#name",
    "access": null,
    "description": "Module name",
    "lineNumber": 23,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 188,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "desc",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#desc",
    "access": null,
    "description": "Module description",
    "lineNumber": 29,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 189,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stylesheet",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#stylesheet",
    "access": null,
    "description": "Extension's stylesheet filename",
    "lineNumber": 35,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 190,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "icnExpand",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#icnExpand",
    "access": null,
    "description": "Expand icon filename",
    "lineNumber": 41,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 191,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "icnCollapse",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#icnCollapse",
    "access": null,
    "description": "Collapse icon filename",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 192,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contEl",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#contEl",
    "access": "private",
    "description": "Main container element",
    "lineNumber": 53,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 193,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnEl",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#btnEl",
    "access": "private",
    "description": "Button element",
    "lineNumber": 59,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 194,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "icnExpandHtml",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#icnExpandHtml",
    "access": "private",
    "description": "Expand icon HTML",
    "lineNumber": 65,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 195,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "icnCollapseHtml",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#icnCollapseHtml",
    "access": "private",
    "description": "Collapse icon HTML",
    "lineNumber": 72,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 196,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "defaultText",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#defaultText",
    "access": "private",
    "description": "Default text",
    "lineNumber": 79,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 197,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "targetId",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#targetId",
    "access": null,
    "description": "ID of main container element",
    "lineNumber": 85,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 198,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableIcon",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#enableIcon",
    "access": null,
    "description": "Enable expand/collapse icon, defaults to true",
    "lineNumber": 91,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 199,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnText",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#btnText",
    "access": null,
    "description": "Custom text for button",
    "lineNumber": 97,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 200,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "collapseBtnHtml",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#collapseBtnHtml",
    "access": "private",
    "description": "Collapse button HTML",
    "lineNumber": 103,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 201,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "expandBtnHtml",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#expandBtnHtml",
    "access": "private",
    "description": "Expand button HTML",
    "lineNumber": 111,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 202,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnHtml",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#btnHtml",
    "access": null,
    "description": "Button's custom HTML",
    "lineNumber": 119,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 203,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnCssClass",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#btnCssClass",
    "access": null,
    "description": "Css class for expand/collapse filters button",
    "lineNumber": 125,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 204,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contCssClass",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#contCssClass",
    "access": null,
    "description": "Css class for main container",
    "lineNumber": 131,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 205,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersRowIndex",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#filtersRowIndex",
    "access": null,
    "description": "Filters row index",
    "lineNumber": 137,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 206,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "visibleAtStart",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#visibleAtStart",
    "access": null,
    "description": "Make filters visible at initialization, defaults to true",
    "lineNumber": 144,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 207,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeShow",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#onBeforeShow",
    "access": null,
    "description": "Callback fired before filters row is shown",
    "lineNumber": 151,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 208,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterShow",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#onAfterShow",
    "access": null,
    "description": "Callback fired after filters row is shown",
    "lineNumber": 158,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 209,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeHide",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#onBeforeHide",
    "access": null,
    "description": "Callback fired before filters row is hidden",
    "lineNumber": 164,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 210,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterHide",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#onAfterHide",
    "access": null,
    "description": "Callback fired after filters row is hidden",
    "lineNumber": 171,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 211,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#init",
    "access": null,
    "description": "Initialise extension",
    "lineNumber": 183,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 212,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#initialized",
    "access": null,
    "description": "",
    "lineNumber": 193,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 213,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "buildUI",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#buildUI",
    "access": null,
    "description": "Build UI elements",
    "lineNumber": 202,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 214,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contEl",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#contEl",
    "access": null,
    "description": null,
    "lineNumber": 234,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 215,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnEl",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#btnEl",
    "access": null,
    "description": null,
    "lineNumber": 235,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 216,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "toggle",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#toggle",
    "access": null,
    "description": "Toggle filters visibility",
    "lineNumber": 245,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 217,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "show",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#show",
    "access": null,
    "description": "Show or hide filters",
    "lineNumber": 259,
    "params": [
      {
        "nullable": null,
        "types": [
          "boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "true",
        "defaultRaw": true,
        "name": "visible",
        "description": "Visibility flag"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 218,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#destroy",
    "access": null,
    "description": "Destroy the UI",
    "lineNumber": 290,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 219,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnEl",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#btnEl",
    "access": null,
    "description": null,
    "lineNumber": 299,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 220,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contEl",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#contEl",
    "access": null,
    "description": null,
    "lineNumber": 303,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 221,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility",
    "longname": "src/extensions/filtersVisibility/filtersVisibility.js~FiltersVisibility#initialized",
    "access": null,
    "description": null,
    "lineNumber": 304,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 222,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/extensions/sort/adapterSortabletable.js",
    "memberof": null,
    "longname": "src/extensions/sort/adapterSortabletable.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../../feature';\nimport {isArray, isFn, isUndef, isObj, EMPTY_FN} from '../../types';\nimport {createElm, elm, getText, tag} from '../../dom';\nimport {addEvt} from '../../event';\nimport {parse as parseNb} from '../../number';\nimport {\n    NONE, CELL_TAG, HEADER_TAG, STRING, NUMBER, DATE, FORMATTED_NUMBER,\n    IP_ADDRESS\n} from '../../const';\n\n/**\n * SortableTable Adapter module\n */\nexport default class AdapterSortableTable extends Feature {\n\n    /**\n     * Creates an instance of AdapterSortableTable\n     * @param {TableFilter} tf TableFilter instance\n     * @param {Object} opts Configuration object\n     */\n    constructor(tf, opts) {\n        super(tf, opts.name);\n\n        /**\n         * Module name\n         * @type {String}\n         */\n        this.name = opts.name;\n\n        /**\n         * Module description\n         * @type {String}\n         */\n        this.desc = opts.description || 'Sortable table';\n\n        /**\n         * Indicate whether table previously sorted\n         * @type {Boolean}\n         * @private\n         */\n        this.sorted = false;\n\n        /**\n         * List of sort type per column basis\n         * @type {Array}\n         */\n        this.sortTypes = isArray(opts.types) ? opts.types : tf.colTypes;\n\n        /**\n         * Column to be sorted at initialization, ie:\n         * sort_col_at_start: [1, true]\n         * @type {Array}\n         */\n        this.sortColAtStart = isArray(opts.sort_col_at_start) ?\n            opts.sort_col_at_start : null;\n\n        /**\n         * Enable asynchronous sort, if triggers are external\n         * @type {Boolean}\n         */\n        this.asyncSort = Boolean(opts.async_sort);\n\n        /**\n         * List of element IDs triggering sort on a per column basis\n         * @type {Array}\n         */\n        this.triggerIds = isArray(opts.trigger_ids) ? opts.trigger_ids : [];\n\n        // edit .sort-arrow.descending / .sort-arrow.ascending in\n        // tablefilter.css to reflect any path change\n        /**\n         * Path to images\n         * @type {String}\n         */\n        this.imgPath = opts.images_path || tf.themesPath;\n\n        /**\n         * Blank image file name\n         * @type {String}\n         */\n        this.imgBlank = opts.image_blank || 'blank.png';\n\n        /**\n         * Css class for sort indicator image\n         * @type {String}\n         */\n        this.imgClassName = opts.image_class_name || 'sort-arrow';\n\n        /**\n         * Css class for ascending sort indicator image\n         * @type {String}\n         */\n        this.imgAscClassName = opts.image_asc_class_name || 'ascending';\n\n        /**\n         * Css class for descending sort indicator image\n         * @type {String}\n         */\n        this.imgDescClassName = opts.image_desc_class_name || 'descending';\n\n        /**\n         * Cell attribute key storing custom value used for sorting\n         * @type {String}\n         */\n        this.customKey = opts.custom_key || 'data-tf-sortKey';\n\n        /**\n         * Callback fired when sort extension is instanciated\n         * @type {Function}\n         */\n        this.onSortLoaded = isFn(opts.on_sort_loaded) ?\n            opts.on_sort_loaded : EMPTY_FN;\n\n        /**\n         * Callback fired before a table column is sorted\n         * @type {Function}\n         */\n        this.onBeforeSort = isFn(opts.on_before_sort) ?\n            opts.on_before_sort : EMPTY_FN;\n\n        /**\n         * Callback fired after a table column is sorted\n         * @type {Function}\n         */\n        this.onAfterSort = isFn(opts.on_after_sort) ?\n            opts.on_after_sort : EMPTY_FN;\n\n        /**\n         * SortableTable instance\n         * @private\n         */\n        this.stt = null;\n\n        this.enable();\n    }\n\n    /**\n     * Initializes AdapterSortableTable instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n        let tf = this.tf;\n        let adpt = this;\n\n        // SortableTable class sanity check (sortabletable.js)\n        if (isUndef(SortableTable)) {\n            throw new Error('SortableTable class not found.');\n        }\n\n        // Add any date format if needed\n        this.emitter.emit('add-date-type-formats', this.tf, this.sortTypes);\n\n        this.overrideSortableTable();\n        this.setSortTypes();\n\n        this.onSortLoaded(tf, this);\n\n        /*** SortableTable callbacks ***/\n        this.stt.onbeforesort = function () {\n            adpt.onBeforeSort(tf, adpt.stt.sortColumn);\n\n            /*** sort behaviour for paging ***/\n            if (tf.paging) {\n                tf.feature('paging').disable();\n            }\n        };\n\n        this.stt.onsort = function () {\n            adpt.sorted = true;\n\n            //sort behaviour for paging\n            if (tf.paging) {\n                let paginator = tf.feature('paging');\n                // recalculate valid rows index as sorting may have change it\n                tf.getValidRows(true);\n                paginator.enable();\n                paginator.setPage(paginator.getPage());\n            }\n\n            adpt.onAfterSort(tf, adpt.stt.sortColumn, adpt.stt.descending);\n            adpt.emitter.emit('column-sorted', tf, adpt.stt.sortColumn,\n                adpt.stt.descending);\n        };\n\n        // Column sort at start\n        let sortColAtStart = adpt.sortColAtStart;\n        if (sortColAtStart) {\n            this.stt.sort(sortColAtStart[0], sortColAtStart[1]);\n        }\n\n        this.emitter.on(['sort'],\n            (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\n\n        /** @inherited */\n        this.initialized = true;\n\n        this.emitter.emit('sort-initialized', tf, this);\n    }\n\n    /**\n     * Sort specified column\n     * @param {Number} colIdx Column index\n     * @param {Boolean} desc Optional: descending manner\n     */\n    sortByColumnIndex(colIdx, desc) {\n        this.stt.sort(colIdx, desc);\n    }\n\n    /**\n     * Set SortableTable overrides for TableFilter integration\n     */\n    overrideSortableTable() {\n        let adpt = this,\n            tf = this.tf;\n\n        /**\n         * Overrides headerOnclick method in order to handle th event\n         * @param  {Object} e [description]\n         */\n        SortableTable.prototype.headerOnclick = function (evt) {\n            if (!adpt.initialized) {\n                return;\n            }\n\n            // find Header element\n            let el = evt.target || evt.srcElement;\n\n            while (el.tagName !== CELL_TAG && el.tagName !== HEADER_TAG) {\n                el = el.parentNode;\n            }\n\n            this.sort(\n                SortableTable.msie ?\n                    SortableTable.getCellIndex(el) : el.cellIndex\n            );\n        };\n\n        /**\n         * Overrides getCellIndex IE returns wrong cellIndex when columns are\n         * hidden\n         * @param  {Object} oTd TD element\n         * @return {Number}     Cell index\n         */\n        SortableTable.getCellIndex = function (oTd) {\n            let cells = oTd.parentNode.cells,\n                l = cells.length, i;\n            for (i = 0; cells[i] !== oTd && i < l; i++) { }\n            return i;\n        };\n\n        /**\n         * Overrides initHeader in order to handle filters row position\n         * @param  {Array} oSortTypes\n         */\n        SortableTable.prototype.initHeader = function (oSortTypes) {\n            let stt = this;\n            if (!stt.tHead) {\n                if (tf.gridLayout) {\n                    stt.tHead = tf.feature('gridLayout').headTbl.tHead;\n                } else {\n                    return;\n                }\n            }\n\n            stt.headersRow = tf.headersRow;\n            let cells = stt.tHead.rows[stt.headersRow].cells;\n            stt.sortTypes = oSortTypes || [];\n            let l = cells.length;\n            let img, c;\n\n            for (let i = 0; i < l; i++) {\n                c = cells[i];\n                if (stt.sortTypes[i] !== null && stt.sortTypes[i] !== 'None') {\n                    c.style.cursor = 'pointer';\n                    img = createElm('img',\n                        ['src', adpt.imgPath + adpt.imgBlank]);\n                    c.appendChild(img);\n                    if (stt.sortTypes[i] !== null) {\n                        c.setAttribute('_sortType', stt.sortTypes[i]);\n                    }\n                    addEvt(c, 'click', stt._headerOnclick);\n                } else {\n                    c.setAttribute('_sortType', oSortTypes[i]);\n                    c._sortType = 'None';\n                }\n            }\n            stt.updateHeaderArrows();\n        };\n\n        /**\n         * Overrides updateHeaderArrows in order to handle arrows indicators\n         */\n        SortableTable.prototype.updateHeaderArrows = function () {\n            let stt = this;\n            let cells, l, img;\n\n            // external headers\n            if (adpt.asyncSort && adpt.triggerIds.length > 0) {\n                let triggers = adpt.triggerIds;\n                cells = [];\n                l = triggers.length;\n                for (let j = 0; j < l; j++) {\n                    cells.push(elm(triggers[j]));\n                }\n            } else {\n                if (!this.tHead) {\n                    return;\n                }\n                cells = stt.tHead.rows[stt.headersRow].cells;\n                l = cells.length;\n            }\n            for (let i = 0; i < l; i++) {\n                let cell = cells[i];\n                if (!cell) {\n                    continue;\n                }\n                let cellAttr = cell.getAttribute('_sortType');\n                if (cellAttr !== null && cellAttr !== 'None') {\n                    img = cell.lastChild || cell;\n                    if (img.nodeName.toLowerCase() !== 'img') {\n                        img = createElm('img',\n                            ['src', adpt.imgPath + adpt.imgBlank]);\n                        cell.appendChild(img);\n                    }\n                    if (i === stt.sortColumn) {\n                        img.className = adpt.imgClassName + ' ' +\n                            (this.descending ?\n                                adpt.imgDescClassName :\n                                adpt.imgAscClassName);\n                    } else {\n                        img.className = adpt.imgClassName;\n                    }\n                }\n            }\n        };\n\n        /**\n         * Overrides getRowValue for custom key value feature\n         * @param  {Object} oRow    Row element\n         * @param  {String} sType\n         * @param  {Number} nColumn\n         * @return {String}\n         */\n        SortableTable.prototype.getRowValue = function (oRow, sType, nColumn) {\n            let stt = this;\n            // if we have defined a custom getRowValue use that\n            let sortTypeInfo = stt._sortTypeInfo[sType];\n            if (sortTypeInfo && sortTypeInfo.getRowValue) {\n                return sortTypeInfo.getRowValue(oRow, nColumn);\n            }\n            let c = oRow.cells[nColumn];\n            let s = SortableTable.getInnerText(c);\n            return stt.getValueFromString(s, sType);\n        };\n\n        /**\n         * Overrides getInnerText in order to avoid Firefox unexpected sorting\n         * behaviour with untrimmed text elements\n         * @param  {Object} oNode DOM element\n         * @return {String}       DOM element inner text\n         */\n        SortableTable.getInnerText = function (oNode) {\n            if (!oNode) {\n                return;\n            }\n            if (oNode.getAttribute(adpt.customKey)) {\n                return oNode.getAttribute(adpt.customKey);\n            } else {\n                return getText(oNode);\n            }\n        };\n    }\n\n    /**\n     * Adds a sort type\n     */\n    addSortType(...args) {\n        // Extract the arguments\n        let [id, caster, sorter] = args;\n        SortableTable.prototype.addSortType(id, caster, sorter);\n    }\n\n    /**\n     * Sets the sort types on a column basis\n     * @private\n     */\n    setSortTypes() {\n        let tf = this.tf,\n            sortTypes = this.sortTypes,\n            _sortTypes = [];\n\n        for (let i = 0; i < tf.nbCells; i++) {\n            let colType;\n            if (sortTypes[i]) {\n                colType = sortTypes[i];\n                if (isObj(colType)) {\n                    if (colType.type === DATE) {\n                        colType = this._addDateType(i, sortTypes);\n                    }\n                    else if (colType.type === FORMATTED_NUMBER) {\n                        let decimal = colType.decimal || tf.decimalSeparator;\n                        colType = this._addNumberType(i, decimal);\n                    }\n                } else {\n                    colType = colType.toLowerCase();\n                    if (colType === DATE) {\n                        colType = this._addDateType(i, sortTypes);\n                    }\n                    else if (colType === FORMATTED_NUMBER ||\n                        colType === NUMBER) {\n                        colType = this._addNumberType(i, tf.decimalSeparator);\n                    }\n                    else if (colType === NONE) {\n                        // TODO: normalise 'none' vs 'None'\n                        colType = 'None';\n                    }\n                }\n            } else {\n                colType = STRING;\n            }\n            _sortTypes.push(colType);\n        }\n\n        //Public TF method to add sort type\n\n        //Custom sort types\n        this.addSortType('caseinsensitivestring', SortableTable.toUpperCase);\n        this.addSortType(STRING);\n        this.addSortType(IP_ADDRESS, ipAddress, sortIP);\n\n        this.stt = new SortableTable(tf.tbl, _sortTypes);\n\n        /*** external table headers adapter ***/\n        if (this.asyncSort && this.triggerIds.length > 0) {\n            let triggers = this.triggerIds;\n            for (let j = 0; j < triggers.length; j++) {\n                if (triggers[j] === null) {\n                    continue;\n                }\n                let trigger = elm(triggers[j]);\n                if (trigger) {\n                    trigger.style.cursor = 'pointer';\n\n                    addEvt(trigger, 'click', (evt) => {\n                        let elm = evt.target;\n                        if (!this.tf.sort) {\n                            return;\n                        }\n                        this.stt.asyncSort(triggers.indexOf(elm.id));\n                    });\n                    trigger.setAttribute('_sortType', _sortTypes[j]);\n                }\n            }\n        }\n    }\n\n    _addDateType(colIndex, types) {\n        let tf = this.tf;\n        let dateType = tf.feature('dateType');\n        let locale = dateType.getOptions(colIndex, types).locale || tf.locale;\n        let colType = `${DATE}-${locale}`;\n\n        this.addSortType(colType, (value) => {\n            let parsedDate = dateType.parse(value, locale);\n            // Invalid date defaults to Wed Feb 04 -768 11:00:00\n            return isNaN(+parsedDate) ? new Date(-86400000000000) : parsedDate;\n        });\n        return colType;\n    }\n\n    _addNumberType(colIndex, decimal) {\n        let colType = `${FORMATTED_NUMBER}${decimal === '.' ? '' : '-custom'}`;\n\n        this.addSortType(colType, (value) => {\n            return parseNb(value, decimal);\n        });\n        return colType;\n    }\n\n    /**\n     * Remove extension\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        let tf = this.tf;\n        this.emitter.off(['sort'],\n            (tf, colIdx, desc) => this.sortByColumnIndex(colIdx, desc));\n        this.sorted = false;\n        this.stt.destroy();\n\n        let ids = tf.getFiltersId();\n        for (let idx = 0; idx < ids.length; idx++) {\n            let header = tf.getHeaderElement(idx);\n            let img = tag(header, 'img');\n\n            if (img.length === 1) {\n                header.removeChild(img[0]);\n            }\n        }\n        this.initialized = false;\n    }\n\n}\n\n//Converters\nfunction ipAddress(value) {\n    let vals = value.split('.');\n    for (let x in vals) {\n        let val = vals[x];\n        while (3 > val.length) {\n            val = '0' + val;\n        }\n        vals[x] = val;\n    }\n    return vals.join('.');\n}\n\nfunction sortIP(a, b) {\n    let aa = ipAddress(a.value.toLowerCase());\n    let bb = ipAddress(b.value.toLowerCase());\n    if (aa === bb) {\n        return 0;\n    } else if (aa < bb) {\n        return -1;\n    } else {\n        return 1;\n    }\n}\n"
  },
  {
    "__docId__": 223,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "AdapterSortableTable",
    "memberof": "src/extensions/sort/adapterSortabletable.js",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/extensions/sort/adapterSortabletable.js",
    "importStyle": "AdapterSortableTable",
    "description": "SortableTable Adapter module",
    "lineNumber": 14,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 224,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#constructor",
    "access": null,
    "description": "Creates an instance of AdapterSortableTable",
    "lineNumber": 21,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "opts",
        "description": "Configuration object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 225,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "name",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#name",
    "access": null,
    "description": "Module name",
    "lineNumber": 28,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 226,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "desc",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#desc",
    "access": null,
    "description": "Module description",
    "lineNumber": 34,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 227,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sorted",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#sorted",
    "access": "private",
    "description": "Indicate whether table previously sorted",
    "lineNumber": 41,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 228,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sortTypes",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#sortTypes",
    "access": null,
    "description": "List of sort type per column basis",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 229,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sortColAtStart",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#sortColAtStart",
    "access": null,
    "description": "Column to be sorted at initialization, ie:\nsort_col_at_start: [1, true]",
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 230,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "asyncSort",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#asyncSort",
    "access": null,
    "description": "Enable asynchronous sort, if triggers are external",
    "lineNumber": 61,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 231,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "triggerIds",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#triggerIds",
    "access": null,
    "description": "List of element IDs triggering sort on a per column basis",
    "lineNumber": 67,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 232,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "imgPath",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#imgPath",
    "access": null,
    "description": "Path to images",
    "lineNumber": 75,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 233,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "imgBlank",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#imgBlank",
    "access": null,
    "description": "Blank image file name",
    "lineNumber": 81,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 234,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "imgClassName",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#imgClassName",
    "access": null,
    "description": "Css class for sort indicator image",
    "lineNumber": 87,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 235,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "imgAscClassName",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#imgAscClassName",
    "access": null,
    "description": "Css class for ascending sort indicator image",
    "lineNumber": 93,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 236,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "imgDescClassName",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#imgDescClassName",
    "access": null,
    "description": "Css class for descending sort indicator image",
    "lineNumber": 99,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 237,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "customKey",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#customKey",
    "access": null,
    "description": "Cell attribute key storing custom value used for sorting",
    "lineNumber": 105,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 238,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onSortLoaded",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#onSortLoaded",
    "access": null,
    "description": "Callback fired when sort extension is instanciated",
    "lineNumber": 111,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 239,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeSort",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#onBeforeSort",
    "access": null,
    "description": "Callback fired before a table column is sorted",
    "lineNumber": 118,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 240,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterSort",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#onAfterSort",
    "access": null,
    "description": "Callback fired after a table column is sorted",
    "lineNumber": 125,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 241,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stt",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#stt",
    "access": "private",
    "description": "SortableTable instance",
    "lineNumber": 132,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 242,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#init",
    "access": null,
    "description": "Initializes AdapterSortableTable instance",
    "lineNumber": 140,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 243,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#initialized",
    "access": null,
    "description": null,
    "lineNumber": 197,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 244,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "sortByColumnIndex",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#sortByColumnIndex",
    "access": null,
    "description": "Sort specified column",
    "lineNumber": 207,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIdx",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "desc",
        "description": "Optional: descending manner"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 245,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "overrideSortableTable",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#overrideSortableTable",
    "access": null,
    "description": "Set SortableTable overrides for TableFilter integration",
    "lineNumber": 214,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 246,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "addSortType",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#addSortType",
    "access": null,
    "description": "Adds a sort type",
    "lineNumber": 379,
    "params": [
      {
        "name": "args",
        "types": [
          "...*"
        ],
        "spread": true
      }
    ],
    "generator": false
  },
  {
    "__docId__": 247,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setSortTypes",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#setSortTypes",
    "access": "private",
    "description": "Sets the sort types on a column basis",
    "lineNumber": 389,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 248,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stt",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#stt",
    "access": null,
    "description": null,
    "lineNumber": 433,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 249,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_addDateType",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#_addDateType",
    "access": null,
    "description": null,
    "lineNumber": 459,
    "undocument": true,
    "params": [
      {
        "name": "colIndex",
        "types": [
          "*"
        ]
      },
      {
        "name": "types",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 250,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_addNumberType",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#_addNumberType",
    "access": null,
    "description": null,
    "lineNumber": 473,
    "undocument": true,
    "params": [
      {
        "name": "colIndex",
        "types": [
          "*"
        ]
      },
      {
        "name": "decimal",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 251,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#destroy",
    "access": null,
    "description": "Remove extension",
    "lineNumber": 485,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 252,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sorted",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#sorted",
    "access": null,
    "description": null,
    "lineNumber": 492,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 253,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable",
    "longname": "src/extensions/sort/adapterSortabletable.js~AdapterSortableTable#initialized",
    "access": null,
    "description": null,
    "lineNumber": 504,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 254,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "ipAddress",
    "memberof": "src/extensions/sort/adapterSortabletable.js",
    "longname": "src/extensions/sort/adapterSortabletable.js~ipAddress",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/sort/adapterSortabletable.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 510,
    "undocument": true,
    "params": [
      {
        "name": "value",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 255,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "sortIP",
    "memberof": "src/extensions/sort/adapterSortabletable.js",
    "longname": "src/extensions/sort/adapterSortabletable.js~sortIP",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/extensions/sort/adapterSortabletable.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 522,
    "undocument": true,
    "params": [
      {
        "name": "a",
        "types": [
          "*"
        ]
      },
      {
        "name": "b",
        "types": [
          "*"
        ]
      }
    ],
    "return": {
      "types": [
        "number"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 256,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/extensions/sort/sort.js",
    "memberof": null,
    "longname": "src/extensions/sort/sort.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import AdapterSortableTable from './adapterSortabletable';\nimport {root} from '../../root';\n\nif (!root.SortableTable) {\n    require('script-loader!sortabletable');\n}\n\nexport default AdapterSortableTable;\n"
  },
  {
    "__docId__": 257,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/feature.js",
    "memberof": null,
    "longname": "src/feature.js",
    "access": null,
    "description": null,
    "lineNumber": 2,
    "content": "\nconst NOTIMPLEMENTED = 'Not implemented.';\n\n/**\n * Base class defining the interface of a TableFilter feature\n */\nexport class Feature {\n    /**\n     * Creates an instance of Feature\n     * @param {Object} tf TableFilter instance\n     * @param {String} feature Feature name known by TableFilter\n     */\n    constructor(tf, feature) {\n        /**\n         * TableFilter instance\n         * @type {TableFilter}\n         */\n        this.tf = tf;\n\n        /**\n         * Feature name\n         * @type {String}\n         */\n        this.feature = feature;\n\n        /**\n         * TableFilter feature setting\n         * @type {Boolean}\n         */\n        this.enabled = tf[feature];\n\n        /**\n         * TableFilter configuration\n         * @type {Object}\n         */\n        this.config = tf.config();\n\n        /**\n         * TableFilter emitter instance\n         * @type {Emitter}\n         */\n        this.emitter = tf.emitter;\n\n        /**\n         * Field indicating whether Feature is initialized\n         * @type {Boolean}\n         */\n        this.initialized = false;\n\n        /** Subscribe to destroy event */\n        this.emitter.on(['destroy'], () => this.destroy());\n    }\n\n    /**\n     * Initialize the feature\n     */\n    init() {\n        throw new Error(NOTIMPLEMENTED);\n    }\n\n    /**\n     * Reset the feature after being disabled\n     */\n    reset() {\n        this.enable();\n        this.init();\n    }\n\n    /**\n     * Destroy the feature\n     */\n    destroy() {\n        throw new Error(NOTIMPLEMENTED);\n    }\n\n    /**\n     * Enable the feature\n     */\n    enable() {\n        this.enabled = true;\n    }\n\n    /**\n     * Disable the feature\n     */\n    disable() {\n        this.enabled = false;\n    }\n\n    /**\n     * Indicate whether the feature is enabled or not\n     * @returns {Boolean}\n     */\n    isEnabled() {\n        return this.enabled;\n    }\n}\n"
  },
  {
    "__docId__": 258,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "NOTIMPLEMENTED",
    "memberof": "src/feature.js",
    "longname": "src/feature.js~NOTIMPLEMENTED",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/feature.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 2,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 259,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Feature",
    "memberof": "src/feature.js",
    "longname": "src/feature.js~Feature",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/feature.js",
    "importStyle": "{Feature}",
    "description": "Base class defining the interface of a TableFilter feature",
    "lineNumber": 7,
    "interface": false
  },
  {
    "__docId__": 260,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#constructor",
    "access": null,
    "description": "Creates an instance of Feature",
    "lineNumber": 13,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "feature",
        "description": "Feature name known by TableFilter"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 261,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tf",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#tf",
    "access": null,
    "description": "TableFilter instance",
    "lineNumber": 18,
    "type": {
      "nullable": null,
      "types": [
        "TableFilter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 262,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "feature",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#feature",
    "access": null,
    "description": "Feature name",
    "lineNumber": 24,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 263,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enabled",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#enabled",
    "access": null,
    "description": "TableFilter feature setting",
    "lineNumber": 30,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 264,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "config",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#config",
    "access": null,
    "description": "TableFilter configuration",
    "lineNumber": 36,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 265,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emitter",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#emitter",
    "access": null,
    "description": "TableFilter emitter instance",
    "lineNumber": 42,
    "type": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 266,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#initialized",
    "access": null,
    "description": "Field indicating whether Feature is initialized",
    "lineNumber": 48,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 267,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#init",
    "access": null,
    "description": "Initialize the feature",
    "lineNumber": 57,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 268,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "reset",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#reset",
    "access": null,
    "description": "Reset the feature after being disabled",
    "lineNumber": 64,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 269,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#destroy",
    "access": null,
    "description": "Destroy the feature",
    "lineNumber": 72,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 270,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "enable",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#enable",
    "access": null,
    "description": "Enable the feature",
    "lineNumber": 79,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 271,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enabled",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#enabled",
    "access": null,
    "description": null,
    "lineNumber": 80,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 272,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "disable",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#disable",
    "access": null,
    "description": "Disable the feature",
    "lineNumber": 86,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 273,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enabled",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#enabled",
    "access": null,
    "description": null,
    "lineNumber": 87,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 274,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isEnabled",
    "memberof": "src/feature.js~Feature",
    "longname": "src/feature.js~Feature#isEnabled",
    "access": null,
    "description": "Indicate whether the feature is enabled or not",
    "lineNumber": 94,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 275,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/alternateRows.js",
    "memberof": null,
    "longname": "src/modules/alternateRows.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {addClass, removeClass} from '../dom';\n\n/**\n * Rows with alternating background color for improved readability\n */\nexport class AlternateRows extends Feature {\n\n    /**\n     * Creates an instance of AlternateRows.\n     *\n     * @param {Object} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'alternateRows');\n\n        let config = this.config;\n        /**\n         * Css class for even rows (default: 'even')\n         * @type {String}\n         */\n        this.evenCss = config.even_row_css_class || 'even';\n\n        /**\n         * Css class for odd rows (default: 'odd')\n         * @type {String}\n         */\n        this.oddCss = config.odd_row_css_class || 'odd';\n    }\n\n    /**\n     * Sets alternating rows color\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        this.processAll();\n\n        // Subscribe to events\n        this.emitter.on(['row-processed', 'row-paged'],\n            (tf, rowIndex, arrIndex, isValid) =>\n                this.processRow(rowIndex, arrIndex, isValid));\n        this.emitter.on(['column-sorted'], () => this.processAll());\n        this.emitter.on(['rows-changed'], () => this.processAll());\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Apply background to all valid rows\n     */\n    processAll() {\n        if (!this.isEnabled()) {\n            return;\n        }\n        let tf = this.tf;\n        let validRowsIndex = tf.getValidRows(true);\n        let indexLen = validRowsIndex.length;\n        let idx = 0;\n\n        //alternates bg color\n        for (let j = 0; j < indexLen; j++) {\n            let rowIdx = validRowsIndex[j];\n            this.setRowBg(rowIdx, idx);\n            idx++;\n        }\n    }\n\n    /**\n     * Set/remove row background based on row validation\n     * @param  {Number}  rowIdx  Row index\n     * @param  {Number}  arrIdx  Array index\n     * @param  {Boolean} isValid Valid row flag\n     */\n    processRow(rowIdx, arrIdx, isValid) {\n        if (isValid) {\n            this.setRowBg(rowIdx, arrIdx);\n        } else {\n            this.removeRowBg(rowIdx);\n        }\n    }\n\n    /**\n     * Sets row background color\n     * @param {Number} rowIdx Row index\n     * @param {Number} idx    Valid rows collection index needed to calculate bg\n     * color\n     * @private\n     */\n    setRowBg(rowIdx, idx) {\n        if (!this.isEnabled() || isNaN(rowIdx)) {\n            return;\n        }\n        let rows = this.tf.tbl.rows;\n        let i = isNaN(idx) ? rowIdx : idx;\n        this.removeRowBg(rowIdx);\n\n        addClass(rows[rowIdx], (i % 2) ? this.evenCss : this.oddCss);\n    }\n\n    /**\n     * Removes row background color\n     * @param  {Number} idx Row index\n     * @private\n     */\n    removeRowBg(idx) {\n        if (isNaN(idx)) {\n            return;\n        }\n        let rows = this.tf.tbl.rows;\n        removeClass(rows[idx], this.oddCss);\n        removeClass(rows[idx], this.evenCss);\n    }\n\n    /**\n     * Removes all alternating backgrounds\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        let nbRows = this.tf.getRowsNb(true);\n        for (let i = 0; i < nbRows; i++) {\n            this.removeRowBg(i);\n        }\n\n        // Unsubscribe to events\n        this.emitter.off(['row-processed', 'row-paged'],\n            (tf, rowIndex, arrIndex, isValid) =>\n                this.processRow(rowIndex, arrIndex, isValid));\n        this.emitter.off(['column-sorted'], () => this.processAll());\n        this.emitter.off(['rows-changed'], () => this.processAll());\n\n        this.initialized = false;\n    }\n\n}\n"
  },
  {
    "__docId__": 276,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "AlternateRows",
    "memberof": "src/modules/alternateRows.js",
    "longname": "src/modules/alternateRows.js~AlternateRows",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/alternateRows.js",
    "importStyle": "{AlternateRows}",
    "description": "Rows with alternating background color for improved readability",
    "lineNumber": 7,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 277,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#constructor",
    "access": null,
    "description": "Creates an instance of AlternateRows.",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 278,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "evenCss",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#evenCss",
    "access": null,
    "description": "Css class for even rows (default: 'even')",
    "lineNumber": 22,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 279,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "oddCss",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#oddCss",
    "access": null,
    "description": "Css class for odd rows (default: 'odd')",
    "lineNumber": 28,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 280,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#init",
    "access": null,
    "description": "Sets alternating rows color",
    "lineNumber": 34,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 281,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#initialized",
    "access": null,
    "description": null,
    "lineNumber": 49,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 282,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "processAll",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#processAll",
    "access": null,
    "description": "Apply background to all valid rows",
    "lineNumber": 55,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 283,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "processRow",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#processRow",
    "access": null,
    "description": "Set/remove row background based on row validation",
    "lineNumber": 78,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "rowIdx",
        "description": "Row index"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "arrIdx",
        "description": "Array index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isValid",
        "description": "Valid row flag"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 284,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setRowBg",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#setRowBg",
    "access": "private",
    "description": "Sets row background color",
    "lineNumber": 93,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "rowIdx",
        "description": "Row index"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "idx",
        "description": "Valid rows collection index needed to calculate bg\ncolor"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 285,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "removeRowBg",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#removeRowBg",
    "access": "private",
    "description": "Removes row background color",
    "lineNumber": 109,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "idx",
        "description": "Row index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 286,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#destroy",
    "access": null,
    "description": "Removes all alternating backgrounds",
    "lineNumber": 121,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 287,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/alternateRows.js~AlternateRows",
    "longname": "src/modules/alternateRows.js~AlternateRows#initialized",
    "access": null,
    "description": null,
    "lineNumber": 137,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 288,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/checkList.js",
    "memberof": null,
    "longname": "src/modules/checkList.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {\n    addClass, createCheckItem, createText, createElm, elm, getText,\n    removeClass, tag\n} from '../dom';\nimport {has} from '../array';\nimport {matchCase, trim, rgxEsc} from '../string';\nimport {ignoreCase, numSortAsc, numSortDesc} from '../sort';\nimport {addEvt, removeEvt, targetEvt} from '../event';\nimport {isEmpty} from '../types';\nimport {CHECKLIST, NONE} from '../const';\n\nconst SORT_ERROR = 'Filter options for column {0} cannot be sorted in ' +\n    '{1} manner.';\n\n/**\n * Checklist filter UI component\n */\nexport class CheckList extends Feature {\n\n    /**\n     * Creates an instance of CheckList\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'checkList');\n\n        let f = this.config;\n\n        /**\n         * List of container DOM elements\n         * @type {Array}\n         */\n        this.containers = [];\n\n        /**\n         * Css class for the container of the checklist filter (div)\n         * @type {String}\n         */\n        this.containerCssClass = f.div_checklist_css_class || 'div_checklist';\n\n        /**\n         * Css class for the checklist filter element (ul)\n         * @type {String}\n         */\n        this.filterCssClass = f.checklist_css_class || 'flt_checklist';\n\n        /**\n         * Css class for the item of a checklist (li)\n         * @type {String}\n         */\n        this.itemCssClass = f.checklist_item_css_class || 'flt_checklist_item';\n\n        /**\n         * Css class for a selected item of a checklist (li)\n         * @type {String}\n         */\n        this.selectedItemCssClass =\n            f.checklist_selected_item_css_class || 'flt_checklist_slc_item';\n\n        /**\n         * Text placed in the filter's container when load filter on demand\n         * feature is enabled\n         * @type {String}\n         */\n        this.activateText =\n            f.activate_checklist_text || 'Click to load filter data';\n\n        /**\n         * Css class for a disabled item of a checklist (li)\n         * @type {String}\n         */\n        this.disabledItemCssClass = f.checklist_item_disabled_css_class ||\n            'flt_checklist_item_disabled';\n\n        /**\n         * Enable the reset filter option as first item\n         * @type {Boolean}\n         */\n        this.enableResetOption = f.enable_checklist_reset_filter === false ?\n            false : true;\n\n        /**\n         * Prefix for container element ID\n         * @type {String}\n         * @private\n         */\n        this.prfx = 'chkdiv_';\n\n        /**\n         * Has custom options\n         * @type {Boolean}\n         * @private\n         */\n        this.isCustom = false;\n\n        /**\n         * List of options values\n         * @type {Array}\n         * @private\n         */\n        this.opts = [];\n\n        /**\n         * List of options texts for custom values\n         * @type {Array}\n         * @private\n         */\n        this.optsTxt = [];\n\n        /**\n         * List of options to be excluded from the checklist filter\n         * @type {Array}\n         * @private\n         */\n        this.excludedOpts = [];\n    }\n\n    /**\n     * Checklist option click event handler\n     * @param {Event} evt\n     * @private\n     */\n    optionClick(evt) {\n        let elm = targetEvt(evt);\n        let tf = this.tf;\n\n        this.emitter.emit('filter-focus', tf, elm);\n        this.setCheckListValues(elm);\n        tf.filter();\n    }\n\n    /**\n     * Checklist container click event handler for load-on-demand feature\n     * @param {Event} evt\n     * @private\n     */\n    onCheckListClick(evt) {\n        let elm = targetEvt(evt);\n        if (this.tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\n            let ct = elm.getAttribute('ct');\n            let div = this.containers[ct];\n            this.build(ct);\n            removeEvt(div, 'click', (evt) => this.onCheckListClick(evt));\n        }\n    }\n\n    /**\n     * Refresh all checklist filters\n     */\n    refreshAll() {\n        let tf = this.tf;\n        let fltsIdxs = tf.getFiltersByType(CHECKLIST, true);\n        fltsIdxs.forEach((colIdx) => {\n            let values = this.getValues(colIdx);\n            this.build(colIdx, tf.linkedFilters);\n            this.selectOptions(colIdx, values);\n        });\n    }\n\n    /**\n     * Initialize checklist filter\n     * @param  {Number}     colIndex   Column index\n     * @param  {Boolean}    isExternal External filter flag\n     * @param  {DOMElement} container  Dom element containing the filter\n     */\n    init(colIndex, isExternal, container) {\n        let tf = this.tf;\n        let externalFltTgtId = isExternal ?\n            tf.externalFltTgtIds[colIndex] : null;\n\n        let divCont = createElm('div',\n            ['id', `${this.prfx}${colIndex}_${tf.id}`],\n            ['ct', colIndex], ['filled', '0']);\n        divCont.className = this.containerCssClass;\n\n        //filter is appended in desired element\n        if (externalFltTgtId) {\n            elm(externalFltTgtId).appendChild(divCont);\n        } else {\n            container.appendChild(divCont);\n        }\n\n        this.containers[colIndex] = divCont;\n        tf.fltIds.push(tf.buildFilterId(colIndex));\n\n        if (!tf.loadFltOnDemand) {\n            this.build(colIndex);\n        } else {\n            addEvt(divCont, 'click', (evt) => this.onCheckListClick(evt));\n            divCont.appendChild(createText(this.activateText));\n        }\n\n        this.emitter.on(\n            ['build-checklist-filter'],\n            (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\n        );\n\n        this.emitter.on(\n            ['select-checklist-options'],\n            (tf, colIndex, values) => this.selectOptions(colIndex, values)\n        );\n\n        this.emitter.on(['rows-changed'], () => this.refreshAll());\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Build checklist UI\n     * @param  {Number}  colIndex   Column index\n     * @param  {Boolean} isLinked    Enable linked filters behaviour\n     */\n    build(colIndex, isLinked = false) {\n        let tf = this.tf;\n        colIndex = parseInt(colIndex, 10);\n\n        this.emitter.emit('before-populating-filter', tf, colIndex);\n\n        this.opts = [];\n        this.optsTxt = [];\n\n        let flt = this.containers[colIndex];\n        let ul = createElm('ul',\n            ['id', tf.fltIds[colIndex]],\n            ['colIndex', colIndex]);\n        ul.className = this.filterCssClass;\n\n        let rows = tf.tbl.rows;\n        let nbRows = tf.getRowsNb(true);\n        let caseSensitive = tf.caseSensitive;\n        this.isCustom = tf.isCustomOptions(colIndex);\n\n        let activeIdx;\n        let activeFilterId = tf.getActiveFilterId();\n        if (isLinked && activeFilterId) {\n            activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\n        }\n\n        let filteredDataCol = [];\n        if (isLinked && tf.disableExcludedOptions) {\n            this.excludedOpts = [];\n        }\n\n        flt.innerHTML = '';\n\n        for (let k = tf.refRow; k < nbRows; k++) {\n            // always visible rows don't need to appear on selects as always\n            // valid\n            if (tf.hasVisibleRows && tf.visibleRows.indexOf(k) !== -1) {\n                continue;\n            }\n\n            let cells = rows[k].cells;\n            let ncells = cells.length;\n\n            // checks if row has exact cell #\n            if (ncells !== tf.nbCells || this.isCustom) {\n                continue;\n            }\n\n            // this loop retrieves cell data\n            for (let j = 0; j < ncells; j++) {\n                if (colIndex !== j) {\n                    continue;\n                }\n                if (isLinked && !tf.disableExcludedOptions &&\n                    (!tf.paging && !tf.isRowDisplayed(k)) ||\n                    (tf.paging && activeIdx && !tf.isRowValid(k))) {\n                    continue;\n                }\n\n                let cellValue = tf.getCellValue(cells[j]);\n                //Vary Peter's patch\n                let cellString = matchCase(cellValue, caseSensitive);\n                // checks if celldata is already in array\n                if (!has(this.opts, cellString, caseSensitive)) {\n                    this.opts.push(cellValue);\n                }\n                let filteredCol = filteredDataCol[j];\n                if (isLinked && tf.disableExcludedOptions) {\n                    if (!filteredCol) {\n                        filteredCol = tf.getFilteredDataCol(j);\n                    }\n                    if (!has(filteredCol, cellString, caseSensitive) &&\n                        !has(this.excludedOpts, cellString,\n                            caseSensitive)) {\n                        this.excludedOpts.push(cellValue);\n                    }\n                }\n            }\n        }\n\n        //Retrieves custom values\n        if (this.isCustom) {\n            let customValues = tf.getCustomOptions(colIndex);\n            this.opts = customValues[0];\n            this.optsTxt = customValues[1];\n        }\n\n        if (tf.sortSlc && !this.isCustom) {\n            if (!caseSensitive) {\n                this.opts.sort(ignoreCase);\n                if (this.excludedOpts) {\n                    this.excludedOpts.sort(ignoreCase);\n                }\n            } else {\n                this.opts.sort();\n                if (this.excludedOpts) {\n                    this.excludedOpts.sort();\n                }\n            }\n        }\n        //asc sort\n        if (tf.sortNumAsc.indexOf(colIndex) !== -1) {\n            try {\n                this.opts.sort(numSortAsc);\n                if (this.excludedOpts) {\n                    this.excludedOpts.sort(numSortAsc);\n                }\n                if (this.isCustom) {\n                    this.optsTxt.sort(numSortAsc);\n                }\n            } catch (e) {\n                throw new Error(SORT_ERROR.replace('{0}', colIndex)\n                    .replace('{1}', 'ascending'));\n            }//in case there are alphanumeric values\n        }\n        //desc sort\n        if (tf.sortNumDesc.indexOf(colIndex) !== -1) {\n            try {\n                this.opts.sort(numSortDesc);\n                if (this.excludedOpts) {\n                    this.excludedOpts.sort(numSortDesc);\n                }\n                if (this.isCustom) {\n                    this.optsTxt.sort(numSortDesc);\n                }\n            } catch (e) {\n                throw new Error(SORT_ERROR.replace('{0}', colIndex)\n                    .replace('{1}', 'descending'));\n            }//in case there are alphanumeric values\n        }\n\n        this.addChecks(colIndex, ul);\n\n        if (tf.loadFltOnDemand) {\n            flt.innerHTML = '';\n        }\n        flt.appendChild(ul);\n        flt.setAttribute('filled', '1');\n\n        this.emitter.emit('after-populating-filter', tf, colIndex, flt);\n    }\n\n    /**\n     * Add checklist options\n     * @param {Number} colIndex  Column index\n     * @param {Object} ul        Ul element\n     * @private\n     */\n    addChecks(colIndex, ul) {\n        let tf = this.tf;\n        let chkCt = this.addTChecks(colIndex, ul);\n\n        for (let y = 0; y < this.opts.length; y++) {\n            let val = this.opts[y]; //item value\n            let lbl = this.isCustom ? this.optsTxt[y] : val; //item text\n            let fltId = tf.fltIds[colIndex];\n            let li = createCheckItem(`${fltId}_${(y + chkCt)}`, val, lbl);\n            li.className = this.itemCssClass;\n\n            if (tf.linkedFilters && tf.disableExcludedOptions &&\n                has(this.excludedOpts, matchCase(val, tf.caseSensitive),\n                    tf.caseSensitive)) {\n                addClass(li, this.disabledItemCssClass);\n                li.check.disabled = true;\n                li.disabled = true;\n            } else {\n                addEvt(li.check, 'click', evt => this.optionClick(evt));\n            }\n            ul.appendChild(li);\n\n            if (val === '') {\n                //item is hidden\n                li.style.display = NONE;\n            }\n        }\n    }\n\n    /**\n     * Add checklist header option\n     * @param {Number} colIndex Column index\n     * @param {Object} ul       Ul element\n     * @private\n     */\n    addTChecks(colIndex, ul) {\n        let tf = this.tf;\n        let chkCt = 1;\n        let fltId = tf.fltIds[colIndex];\n        let li0 = createCheckItem(`${fltId}_0`, '',\n            tf.getClearFilterText(colIndex));\n        li0.className = this.itemCssClass;\n        ul.appendChild(li0);\n\n        addEvt(li0.check, 'click', evt => this.optionClick(evt));\n\n        if (!this.enableResetOption) {\n            li0.style.display = NONE;\n        }\n\n        if (tf.enableEmptyOption) {\n            let li1 = createCheckItem(`${fltId}_1`, tf.emOperator,\n                tf.emptyText);\n            li1.className = this.itemCssClass;\n            ul.appendChild(li1);\n            addEvt(li1.check, 'click', evt => this.optionClick(evt));\n            chkCt++;\n        }\n\n        if (tf.enableNonEmptyOption) {\n            let li2 = createCheckItem(`${fltId}_2`, tf.nmOperator,\n                tf.nonEmptyText);\n            li2.className = this.itemCssClass;\n            ul.appendChild(li2);\n            addEvt(li2.check, 'click', evt => this.optionClick(evt));\n            chkCt++;\n        }\n        return chkCt;\n    }\n\n    /**\n     * Store checked options in DOM element attribute\n     * @param {Object} o checklist option DOM element\n     * @private\n     */\n    setCheckListValues(o) {\n        if (!o) {\n            return;\n        }\n\n        let tf = this.tf;\n        let chkValue = o.value; //checked item value\n        // TODO: provide helper to extract column index, ugly!\n        let chkIndex = parseInt(o.id.split('_')[2], 10);\n        let colIdx = tf.getColumnIndexFromFilterId(o.id);\n        let itemTag = 'LI';\n\n        let n = tf.getFilterElement(parseInt(colIdx, 10));\n        let li = n.childNodes[chkIndex];\n        let colIndex = n.getAttribute('colIndex');\n        let fltValue = n.getAttribute('value'); //filter value (ul tag)\n        let fltIndexes = n.getAttribute('indexes'); //selected items (ul tag)\n\n        if (o.checked) {\n            //show all item\n            if (chkValue === '') {\n                if ((fltIndexes && fltIndexes !== '')) {\n                    //items indexes\n                    let indSplit = fltIndexes.split(tf.separator);\n                    //checked items loop\n                    for (let u = 0; u < indSplit.length; u++) {\n                        //checked item\n                        let cChk = elm(tf.fltIds[colIndex] + '_' +\n                            indSplit[u]);\n                        if (cChk) {\n                            cChk.checked = false;\n                            removeClass(n.childNodes[indSplit[u]],\n                                this.selectedItemCssClass);\n                        }\n                    }\n                }\n                n.setAttribute('value', '');\n                n.setAttribute('indexes', '');\n\n            } else {\n                fltValue = (fltValue) ? fltValue : '';\n                chkValue = trim(fltValue + ' ' + chkValue + ' ' +\n                    tf.orOperator);\n                chkIndex = fltIndexes + chkIndex + tf.separator;\n                n.setAttribute('value', chkValue);\n                n.setAttribute('indexes', chkIndex);\n                //1st option unchecked\n                if (elm(tf.fltIds[colIndex] + '_0')) {\n                    elm(tf.fltIds[colIndex] + '_0').checked = false;\n                }\n            }\n\n            if (li.nodeName === itemTag) {\n                removeClass(n.childNodes[0], this.selectedItemCssClass);\n                addClass(li, this.selectedItemCssClass);\n            }\n        } else { //removes values and indexes\n            if (chkValue !== '') {\n                let replaceValue = new RegExp(\n                    rgxEsc(chkValue + ' ' + tf.orOperator));\n                fltValue = fltValue.replace(replaceValue, '');\n                n.setAttribute('value', trim(fltValue));\n\n                let replaceIndex = new RegExp(\n                    rgxEsc(chkIndex + tf.separator));\n                fltIndexes = fltIndexes.replace(replaceIndex, '');\n                n.setAttribute('indexes', fltIndexes);\n            }\n            if (li.nodeName === itemTag) {\n                removeClass(li, this.selectedItemCssClass);\n            }\n        }\n    }\n\n    /**\n     * Select filter options programmatically\n     * @param  {Number} colIndex Column index\n     * @param  {Array}  values   Array of option values to select\n     */\n    selectOptions(colIndex, values = []) {\n        let tf = this.tf;\n        let flt = tf.getFilterElement(colIndex);\n        if (tf.getFilterType(colIndex) !== CHECKLIST || !flt ||\n            values.length === 0) {\n            return;\n        }\n\n        let lisNb = tag(flt, 'li').length;\n\n        flt.setAttribute('value', '');\n        flt.setAttribute('indexes', '');\n\n        for (let k = 0; k < lisNb; k++) {\n            let li = tag(flt, 'li')[k];\n            let lbl = tag(li, 'label')[0];\n            let chk = tag(li, 'input')[0];\n            let lblTxt = matchCase(getText(lbl), tf.caseSensitive);\n\n            if (lblTxt !== '' && has(values, lblTxt, tf.caseSensitive)) {\n                chk.checked = true;\n            } else {\n                // Check non-empty-text or empty-text option\n                if (values.indexOf(tf.nmOperator) !== -1 &&\n                    lblTxt === matchCase(tf.nonEmptyText, tf.caseSensitive)) {\n                    chk.checked = true;\n                }\n                else if (values.indexOf(tf.emOperator) !== -1 &&\n                    lblTxt === matchCase(tf.emptyText, tf.caseSensitive)) {\n                    chk.checked = true;\n                } else {\n                    chk.checked = false;\n                }\n            }\n            this.setCheckListValues(chk);\n        }\n    }\n\n    /**\n     * Get filter values for a given column index\n     * @param {Number} colIndex Column index\n     * @returns {Array} values Collection of selected values\n     */\n    getValues(colIndex) {\n        let tf = this.tf;\n        let flt = tf.getFilterElement(colIndex);\n        let fltAttr = flt.getAttribute('value');\n        let values = isEmpty(fltAttr) ? '' : fltAttr;\n\n        //removes last operator ||\n        values = values.substr(0, values.length - 3);\n        //turn || separated values into array\n        values = values.split(' ' + tf.orOperator + ' ');\n\n        return values;\n    }\n\n    /**\n     * Destroy CheckList instance\n     */\n    destroy() {\n        this.emitter.off(\n            ['build-checklist-filter'],\n            (tf, colIndex, isLinked) => this.build(colIndex, isLinked)\n        );\n        this.emitter.off(\n            ['select-checklist-options'],\n            (tf, colIndex, values) => this.selectOptions(colIndex, values)\n        );\n        this.emitter.off(['rows-changed'], () => this.refreshAll());\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 289,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SORT_ERROR",
    "memberof": "src/modules/checkList.js",
    "longname": "src/modules/checkList.js~SORT_ERROR",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/checkList.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 13,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 290,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "CheckList",
    "memberof": "src/modules/checkList.js",
    "longname": "src/modules/checkList.js~CheckList",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/checkList.js",
    "importStyle": "{CheckList}",
    "description": "Checklist filter UI component",
    "lineNumber": 19,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 291,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#constructor",
    "access": null,
    "description": "Creates an instance of CheckList",
    "lineNumber": 25,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 292,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "containers",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#containers",
    "access": null,
    "description": "List of container DOM elements",
    "lineNumber": 34,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 293,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "containerCssClass",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#containerCssClass",
    "access": null,
    "description": "Css class for the container of the checklist filter (div)",
    "lineNumber": 40,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 294,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filterCssClass",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#filterCssClass",
    "access": null,
    "description": "Css class for the checklist filter element (ul)",
    "lineNumber": 46,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 295,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "itemCssClass",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#itemCssClass",
    "access": null,
    "description": "Css class for the item of a checklist (li)",
    "lineNumber": 52,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 296,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "selectedItemCssClass",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#selectedItemCssClass",
    "access": null,
    "description": "Css class for a selected item of a checklist (li)",
    "lineNumber": 58,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 297,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activateText",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#activateText",
    "access": null,
    "description": "Text placed in the filter's container when load filter on demand\nfeature is enabled",
    "lineNumber": 66,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 298,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "disabledItemCssClass",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#disabledItemCssClass",
    "access": null,
    "description": "Css class for a disabled item of a checklist (li)",
    "lineNumber": 73,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 299,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableResetOption",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#enableResetOption",
    "access": null,
    "description": "Enable the reset filter option as first item",
    "lineNumber": 80,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 300,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfx",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#prfx",
    "access": "private",
    "description": "Prefix for container element ID",
    "lineNumber": 88,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 301,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isCustom",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#isCustom",
    "access": "private",
    "description": "Has custom options",
    "lineNumber": 95,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 302,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "opts",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#opts",
    "access": "private",
    "description": "List of options values",
    "lineNumber": 102,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 303,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "optsTxt",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#optsTxt",
    "access": "private",
    "description": "List of options texts for custom values",
    "lineNumber": 109,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 304,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "excludedOpts",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#excludedOpts",
    "access": "private",
    "description": "List of options to be excluded from the checklist filter",
    "lineNumber": 116,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 305,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "optionClick",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#optionClick",
    "access": "private",
    "description": "Checklist option click event handler",
    "lineNumber": 124,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": ""
      }
    ],
    "generator": false
  },
  {
    "__docId__": 306,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onCheckListClick",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#onCheckListClick",
    "access": "private",
    "description": "Checklist container click event handler for load-on-demand feature",
    "lineNumber": 138,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": ""
      }
    ],
    "generator": false
  },
  {
    "__docId__": 307,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "refreshAll",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#refreshAll",
    "access": null,
    "description": "Refresh all checklist filters",
    "lineNumber": 151,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 308,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#init",
    "access": null,
    "description": "Initialize checklist filter",
    "lineNumber": 167,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isExternal",
        "description": "External filter flag"
      },
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": "Dom element containing the filter"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 309,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#initialized",
    "access": null,
    "description": null,
    "lineNumber": 207,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 310,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "build",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#build",
    "access": null,
    "description": "Build checklist UI",
    "lineNumber": 215,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isLinked",
        "description": "Enable linked filters behaviour"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 311,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "opts",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#opts",
    "access": null,
    "description": null,
    "lineNumber": 221,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 312,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "optsTxt",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#optsTxt",
    "access": null,
    "description": null,
    "lineNumber": 222,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 313,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isCustom",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#isCustom",
    "access": null,
    "description": null,
    "lineNumber": 233,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 314,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "excludedOpts",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#excludedOpts",
    "access": null,
    "description": null,
    "lineNumber": 243,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 315,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "opts",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#opts",
    "access": null,
    "description": null,
    "lineNumber": 298,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 316,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "optsTxt",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#optsTxt",
    "access": null,
    "description": null,
    "lineNumber": 299,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 317,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "addChecks",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#addChecks",
    "access": "private",
    "description": "Add checklist options",
    "lineNumber": 363,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "ul",
        "description": "Ul element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 318,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "addTChecks",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#addTChecks",
    "access": "private",
    "description": "Add checklist header option",
    "lineNumber": 398,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "ul",
        "description": "Ul element"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 319,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setCheckListValues",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#setCheckListValues",
    "access": "private",
    "description": "Store checked options in DOM element attribute",
    "lineNumber": 438,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "o",
        "description": "checklist option DOM element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 320,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "selectOptions",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#selectOptions",
    "access": null,
    "description": "Select filter options programmatically",
    "lineNumber": 517,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "values",
        "description": "Array of option values to select"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 321,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getValues",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#getValues",
    "access": null,
    "description": "Get filter values for a given column index",
    "lineNumber": 560,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Array} values Collection of selected values"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "values Collection of selected values"
    },
    "generator": false
  },
  {
    "__docId__": 322,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#destroy",
    "access": null,
    "description": "Destroy CheckList instance",
    "lineNumber": 577,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 323,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/checkList.js~CheckList",
    "longname": "src/modules/checkList.js~CheckList#initialized",
    "access": null,
    "description": null,
    "lineNumber": 588,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 324,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/clearButton.js",
    "memberof": null,
    "longname": "src/modules/clearButton.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, createText, elm, removeElm} from '../dom';\nimport {addEvt} from '../event';\n\n/**\n * Clear button UI component\n */\nexport class ClearButton extends Feature {\n\n    /**\n     * Creates an instance of ClearButton\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'btnReset');\n\n        let f = this.config;\n\n        /**\n         * Container element ID\n         * @type {String}\n         */\n        this.targetId = f.btn_reset_target_id || null;\n\n        /**\n         * Clear button container element\n         * @type {DOMElement}\n         * @private\n         */\n        this.container = null;\n\n        /**\n         * Clear button element\n         * @type {DOMElement}\n         * @private\n         */\n        this.element = null;\n\n        /**\n         * Text for the clear button\n         * @type {String}\n         */\n        this.text = f.btn_reset_text || 'Reset';\n\n        /**\n         * Css class for reset button\n         * @type {String}\n         */\n        this.cssClass = f.btn_reset_css_class || 'reset';\n\n        /**\n         * Tooltip text for the clear button\n         * @type {String}\n         */\n        this.tooltip = f.btn_reset_tooltip || 'Clear filters';\n\n        /**\n         * Custom Html string for the clear button\n         * @type {String}\n         */\n        this.html = f.btn_reset_html ||\n            (!tf.enableIcons ? null :\n                '<input type=\"button\" value=\"\" class=\"' + this.cssClass +\n                '\" ' + 'title=\"' + this.tooltip + '\" />');\n    }\n\n    /**\n     * Click event handler for clear button\n     * @private\n     */\n    onClick() {\n        if (!this.isEnabled()) {\n            return;\n        }\n        this.tf.clearFilters();\n    }\n\n    /**\n     * Initialize clear button component\n     */\n    init() {\n        let tf = this.tf;\n\n        if (this.initialized) {\n            return;\n        }\n\n        let cont = createElm('span');\n\n        // reset button is added to defined element\n        if (!this.targetId) {\n            tf.setToolbar();\n        }\n        let targetEl = !this.targetId ? tf.rDiv : elm(this.targetId);\n        targetEl.appendChild(cont);\n\n        if (!this.html) {\n            let fltReset = createElm('a', ['href', 'javascript:void(0);']);\n            fltReset.className = this.cssClass;\n            fltReset.appendChild(createText(this.text));\n            cont.appendChild(fltReset);\n            addEvt(fltReset, 'click', () => this.onClick());\n        } else {\n            cont.innerHTML = this.html;\n            let resetEl = cont.firstChild;\n            addEvt(resetEl, 'click', () => this.onClick());\n        }\n        this.element = cont.firstChild;\n        this.container = cont;\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Destroy ClearButton instance\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        removeElm(this.element);\n        removeElm(this.container);\n        this.element = null;\n        this.container = null;\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 325,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "ClearButton",
    "memberof": "src/modules/clearButton.js",
    "longname": "src/modules/clearButton.js~ClearButton",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/clearButton.js",
    "importStyle": "{ClearButton}",
    "description": "Clear button UI component",
    "lineNumber": 8,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 326,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#constructor",
    "access": null,
    "description": "Creates an instance of ClearButton",
    "lineNumber": 14,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 327,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "targetId",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#targetId",
    "access": null,
    "description": "Container element ID",
    "lineNumber": 23,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 328,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#container",
    "access": "private",
    "description": "Clear button container element",
    "lineNumber": 30,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 329,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "element",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#element",
    "access": "private",
    "description": "Clear button element",
    "lineNumber": 37,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 330,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "text",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#text",
    "access": null,
    "description": "Text for the clear button",
    "lineNumber": 43,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 331,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cssClass",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#cssClass",
    "access": null,
    "description": "Css class for reset button",
    "lineNumber": 49,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 332,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tooltip",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#tooltip",
    "access": null,
    "description": "Tooltip text for the clear button",
    "lineNumber": 55,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 333,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "html",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#html",
    "access": null,
    "description": "Custom Html string for the clear button",
    "lineNumber": 61,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 334,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onClick",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#onClick",
    "access": "private",
    "description": "Click event handler for clear button",
    "lineNumber": 71,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 335,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#init",
    "access": null,
    "description": "Initialize clear button component",
    "lineNumber": 81,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 336,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "element",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#element",
    "access": null,
    "description": null,
    "lineNumber": 108,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 337,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#container",
    "access": null,
    "description": null,
    "lineNumber": 109,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 338,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#initialized",
    "access": null,
    "description": null,
    "lineNumber": 112,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 339,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#destroy",
    "access": null,
    "description": "Destroy ClearButton instance",
    "lineNumber": 118,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 340,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "element",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#element",
    "access": null,
    "description": null,
    "lineNumber": 124,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 341,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#container",
    "access": null,
    "description": null,
    "lineNumber": 125,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 342,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/clearButton.js~ClearButton",
    "longname": "src/modules/clearButton.js~ClearButton#initialized",
    "access": null,
    "description": null,
    "lineNumber": 126,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 343,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/dateType.js",
    "memberof": null,
    "longname": "src/modules/dateType.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Date as SugarDate} from 'sugar-date';\nimport 'sugar-date/locales';\nimport {Feature} from '../feature';\nimport {isObj, isArray} from '../types';\nimport {DATE} from '../const';\nimport {root} from '../root';\n\n/**\n * Wrapper for Sugar Date module providing datetime helpers and locales\n * @export\n * @class DateType\n */\nexport class DateType extends Feature {\n\n    /**\n     * Creates an instance of DateType\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'dateType');\n\n        /**\n         * Global locale\n         * @type {String}\n         */\n        this.locale = tf.locale;\n\n        /**\n         * Sugar Date instance\n         * @type {Object}\n         */\n        this.datetime = SugarDate;\n\n        this.enable();\n    }\n\n    /**\n     * Initialize DateType instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        // Set global locale\n        this.datetime.setLocale(this.locale);\n\n        // Add formats from column types configuration if any\n        this.addConfigFormats(this.tf.colTypes);\n\n        this.emitter.on(\n            ['add-date-type-formats'],\n            (tf, types) => this.addConfigFormats(types)\n        );\n\n        // Broadcast date-type initialization\n        this.emitter.emit('date-type-initialized', this.tf, this);\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Parse a string representation of a date for a specified locale and return\n     * a date object\n     * @param {String} dateStr String representation of a date\n     * @param {String} localeCode Locale code (ie 'en-us')\n     * @returns {Date}\n     */\n    parse(dateStr, localeCode) {\n        return this.datetime.create(dateStr, localeCode);\n    }\n\n    /**\n     * Check string representation of a date for a specified locale is valid\n     * @param {any} dateStr String representation of a date\n     * @param {any} localeCode Locale code (ie 'en-us')\n     * @returns {Boolean}\n     */\n    isValid(dateStr, localeCode) {\n        return this.datetime.isValid(this.parse(dateStr, localeCode));\n    }\n\n    /**\n     * Return the type object of a specified column as per configuration or\n     * passed collection\n     * @param {Number} colIndex Column index\n     * @param {Array} types Collection of column types, optional\n     * @returns {Object}\n     */\n    getOptions(colIndex, types) {\n        types = types || this.tf.colTypes;\n        let colType = types[colIndex];\n        return isObj(colType) ? colType : {};\n    }\n\n    /**\n     * Add date time format(s) to a locale as specified by the passed\n     * collection of column types, ie:\n     *  [\n     *      'string',\n     *      'number',\n     *      { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']}\n     * ]\n     *\n     * @param {Array} [types=[]] Collection of column types\n     */\n    addConfigFormats(types=[]) {\n        types.forEach((type, idx) => {\n            let options = this.getOptions(idx, types);\n            if (options.type === DATE && options.hasOwnProperty('format')) {\n                let locale = this.datetime.getLocale(\n                    options.locale || this.locale\n                );\n                let formats = isArray(options.format) ?\n                    options.format : [options.format];\n\n                // Sugar date module throws exceptions with locale.addFormat\n                try {\n                    formats.forEach((format) => {\n                        locale.addFormat(format);\n                    });\n                } catch (ex) {\n                    root.console.error(ex);\n                }\n            }\n        });\n    }\n\n    /**\n     * Remove DateType instance\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        // TODO: remove added formats\n\n        this.emitter.off(\n            ['add-date-type-formats'],\n            (tf, types) => this.addConfigFormats(types)\n        );\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 344,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "DateType",
    "memberof": "src/modules/dateType.js",
    "longname": "src/modules/dateType.js~DateType",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/dateType.js",
    "importStyle": "{DateType}",
    "description": "Wrapper for Sugar Date module providing datetime helpers and locales",
    "lineNumber": 13,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "DateType"
      }
    ],
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 345,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#constructor",
    "access": null,
    "description": "Creates an instance of DateType",
    "lineNumber": 19,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 346,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "locale",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#locale",
    "access": null,
    "description": "Global locale",
    "lineNumber": 26,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 347,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "datetime",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#datetime",
    "access": null,
    "description": "Sugar Date instance",
    "lineNumber": 32,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 348,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#init",
    "access": null,
    "description": "Initialize DateType instance",
    "lineNumber": 40,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 349,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#initialized",
    "access": null,
    "description": null,
    "lineNumber": 60,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 350,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "parse",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#parse",
    "access": null,
    "description": "Parse a string representation of a date for a specified locale and return\na date object",
    "lineNumber": 70,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Date}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "dateStr",
        "description": "String representation of a date"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "localeCode",
        "description": "Locale code (ie 'en-us')"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Date"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 351,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isValid",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#isValid",
    "access": null,
    "description": "Check string representation of a date for a specified locale is valid",
    "lineNumber": 80,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "any"
        ],
        "spread": false,
        "optional": false,
        "name": "dateStr",
        "description": "String representation of a date"
      },
      {
        "nullable": null,
        "types": [
          "any"
        ],
        "spread": false,
        "optional": false,
        "name": "localeCode",
        "description": "Locale code (ie 'en-us')"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 352,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getOptions",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#getOptions",
    "access": null,
    "description": "Return the type object of a specified column as per configuration or\npassed collection",
    "lineNumber": 91,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Object}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "types",
        "description": "Collection of column types, optional"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 353,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "addConfigFormats",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#addConfigFormats",
    "access": null,
    "description": "Add date time format(s) to a locale as specified by the passed\ncollection of column types, ie:\n [\n     'string',\n     'number',\n     { type: 'date', locale: 'en', format: ['{dd}/{MM}/{yyyy}']}\n]",
    "lineNumber": 108,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "types",
        "description": "Collection of column types"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 354,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#destroy",
    "access": null,
    "description": "Remove DateType instance",
    "lineNumber": 133,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 355,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/dateType.js~DateType",
    "longname": "src/modules/dateType.js~DateType#initialized",
    "access": null,
    "description": null,
    "lineNumber": 145,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 356,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/dropdown.js",
    "memberof": null,
    "longname": "src/modules/dropdown.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, createOpt, elm} from '../dom';\nimport {has} from '../array';\nimport {matchCase} from '../string';\nimport {ignoreCase, numSortAsc, numSortDesc} from '../sort';\nimport {addEvt, targetEvt} from '../event';\nimport {SELECT, MULTIPLE, NONE} from '../const';\n\nconst SORT_ERROR = 'Filter options for column {0} cannot be sorted in ' +\n    '{1} manner.';\n\n/**\n * Dropdown filter UI component\n */\nexport class Dropdown extends Feature {\n\n    /**\n     * Creates an instance of Dropdown\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'dropdown');\n\n        // Configuration object\n        let f = this.config;\n\n        /**\n         * Enable the reset filter option as first item\n         * @type {Boolean}\n         */\n        this.enableSlcResetFilter = f.enable_slc_reset_filter === false ?\n            false : true;\n\n        /**\n         * Non empty option text\n         * @type {String}\n         */\n        this.nonEmptyText = f.non_empty_text || '(Non empty)';\n\n        /**\n         * Tooltip text appearing on multiple select\n         * @type {String}\n         */\n        this.multipleSlcTooltip = f.multiple_slc_tooltip ||\n            'Use Ctrl/Cmd key for multiple selections';\n\n        /**\n         * Indicates drop-down has custom options\n         * @private\n         */\n        this.isCustom = null;\n\n        /**\n         * List of options values\n         * @type {Array}\n         * @private\n         */\n        this.opts = null;\n\n        /**\n         * List of options texts for custom values\n         * @type {Array}\n         * @private\n         */\n        this.optsTxt = null;\n    }\n\n\n    /**\n     * Drop-down filter focus event handler\n     * @param {Event} e DOM Event\n     * @private\n     */\n    onSlcFocus(e) {\n        let elm = targetEvt(e);\n        let tf = this.tf;\n        // select is populated when element has focus\n        if (tf.loadFltOnDemand && elm.getAttribute('filled') === '0') {\n            let ct = elm.getAttribute('ct');\n            this.build(ct);\n        }\n        this.emitter.emit('filter-focus', tf, elm);\n    }\n\n    /**\n     * Drop-down filter change event handler\n     * @private\n     */\n    onSlcChange() {\n        if (this.tf.onSlcChange) {\n            this.tf.filter();\n        }\n    }\n\n    /**\n     * Refresh all drop-down filters\n     */\n    refreshAll() {\n        let tf = this.tf;\n        let selectFlts = tf.getFiltersByType(SELECT, true);\n        let multipleFlts = tf.getFiltersByType(MULTIPLE, true);\n        let flts = selectFlts.concat(multipleFlts);\n        flts.forEach((colIdx) => {\n            let values = this.getValues(colIdx);\n            this.build(colIdx, tf.linkedFilters);\n            this.selectOptions(colIdx, values);\n        });\n    }\n\n    /**\n     * Initialize drop-down filter\n     * @param  {Number}     colIndex   Column index\n     * @param  {Boolean}    isExternal External filter flag\n     * @param  {DOMElement} container  Dom element containing the filter\n     */\n    init(colIndex, isExternal, container) {\n        let tf = this.tf;\n        let col = tf.getFilterType(colIndex);\n        let externalFltTgtId = isExternal ?\n            tf.externalFltTgtIds[colIndex] : null;\n\n        let slc = createElm(SELECT,\n            ['id', tf.buildFilterId(colIndex)],\n            ['ct', colIndex], ['filled', '0']\n        );\n\n        if (col === MULTIPLE) {\n            slc.multiple = MULTIPLE;\n            slc.title = this.multipleSlcTooltip;\n        }\n        slc.className = col.toLowerCase() === SELECT ?\n            tf.fltCssClass : tf.fltMultiCssClass;\n\n        //filter is appended in container element\n        if (externalFltTgtId) {\n            elm(externalFltTgtId).appendChild(slc);\n        } else {\n            container.appendChild(slc);\n        }\n\n        tf.fltIds.push(slc.id);\n\n        if (!tf.loadFltOnDemand) {\n            this.build(colIndex);\n        } else {\n            //1st option is created here since build isn't invoked\n            let opt0 = createOpt(tf.getClearFilterText(colIndex), '');\n            slc.appendChild(opt0);\n        }\n\n        addEvt(slc, 'change', () => this.onSlcChange());\n        addEvt(slc, 'focus', (e) => this.onSlcFocus(e));\n\n        this.emitter.on(\n            ['build-select-filter'],\n            (tf, colIndex, isLinked, isExternal) =>\n                this.build(colIndex, isLinked, isExternal)\n        );\n        this.emitter.on(\n            ['select-options'],\n            (tf, colIndex, values) => this.selectOptions(colIndex, values)\n        );\n        this.emitter.on(['rows-changed'], () => this.refreshAll());\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Build drop-down filter UI\n     * @param  {Number}  colIndex    Column index\n     * @param  {Boolean} isLinked    Enable linked filters behaviour\n     */\n    build(colIndex, isLinked = false) {\n        let tf = this.tf;\n        colIndex = parseInt(colIndex, 10);\n\n        this.emitter.emit('before-populating-filter', tf, colIndex);\n\n        this.opts = [];\n        this.optsTxt = [];\n\n        let slcId = tf.fltIds[colIndex];\n        let slc = elm(slcId);\n        let rows = tf.tbl.rows;\n        let nbRows = tf.getRowsNb(true);\n\n        //custom select test\n        this.isCustom = tf.isCustomOptions(colIndex);\n\n        //custom selects text\n        let activeIdx;\n        let activeFilterId = tf.getActiveFilterId();\n        if (isLinked && activeFilterId) {\n            activeIdx = tf.getColumnIndexFromFilterId(activeFilterId);\n        }\n\n        let excludedOpts = null,\n            filteredDataCol = null;\n        if (isLinked && tf.disableExcludedOptions) {\n            excludedOpts = [];\n            filteredDataCol = [];\n        }\n\n        for (let k = tf.refRow; k < nbRows; k++) {\n            // always visible rows don't need to appear on selects as always\n            // valid\n            if (tf.hasVisibleRows && tf.visibleRows.indexOf(k) !== -1) {\n                continue;\n            }\n\n            let cell = rows[k].cells,\n                nchilds = cell.length;\n\n            // checks if row has exact cell #\n            if (nchilds !== tf.nbCells || this.isCustom) {\n                continue;\n            }\n\n            // this loop retrieves cell data\n            for (let j = 0; j < nchilds; j++) {\n                if (colIndex !== j) {\n                    continue;\n                }\n                if (isLinked && !tf.disableExcludedOptions &&\n                    (!tf.paging && !tf.isRowDisplayed(k)) ||\n                    (tf.paging && activeIdx && !tf.isRowValid(k))) {\n                    continue;\n                }\n\n                let cellValue = tf.getCellValue(cell[j]),\n                    //Vary Peter's patch\n                    cellString = matchCase(cellValue, tf.caseSensitive);\n\n                // checks if celldata is already in array\n                if (!has(this.opts, cellString, tf.caseSensitive)) {\n                    this.opts.push(cellValue);\n                }\n\n                if (isLinked && tf.disableExcludedOptions) {\n                    let filteredCol = filteredDataCol[j];\n                    if (!filteredCol) {\n                        filteredCol = tf.getFilteredDataCol(j);\n                    }\n                    if (!has(filteredCol, cellString, tf.caseSensitive) &&\n                        !has(excludedOpts, cellString, tf.caseSensitive)) {\n                        excludedOpts.push(cellValue);\n                    }\n                }\n            }//for j\n        }//for k\n\n        //Retrieves custom values\n        if (this.isCustom) {\n            let customValues = tf.getCustomOptions(colIndex);\n            this.opts = customValues[0];\n            this.optsTxt = customValues[1];\n        }\n\n        if (tf.sortSlc && !this.isCustom) {\n            if (!tf.caseSensitive) {\n                this.opts.sort(ignoreCase);\n                if (excludedOpts) {\n                    excludedOpts.sort(ignoreCase);\n                }\n            } else {\n                this.opts.sort();\n                if (excludedOpts) { excludedOpts.sort(); }\n            }\n        }\n\n        //asc sort\n        if (tf.sortNumAsc.indexOf(colIndex) !== -1) {\n            try {\n                this.opts.sort(numSortAsc);\n                if (excludedOpts) {\n                    excludedOpts.sort(numSortAsc);\n                }\n                if (this.isCustom) {\n                    this.optsTxt.sort(numSortAsc);\n                }\n            } catch (e) {\n                throw new Error(SORT_ERROR.replace('{0}', colIndex)\n                    .replace('{1}', 'ascending'));\n            }//in case there are alphanumeric values\n        }\n        //desc sort\n        if (tf.sortNumDesc.indexOf(colIndex) !== -1) {\n            try {\n                this.opts.sort(numSortDesc);\n                if (excludedOpts) {\n                    excludedOpts.sort(numSortDesc);\n                }\n                if (this.isCustom) {\n                    this.optsTxt.sort(numSortDesc);\n                }\n            } catch (e) {\n                throw new Error(SORT_ERROR.replace('{0}', colIndex)\n                    .replace('{1}', 'ascending'));\n            }//in case there are alphanumeric values\n        }\n\n        //populates drop-down\n        this.addOptions(colIndex, slc, isLinked, excludedOpts);\n\n        this.emitter.emit('after-populating-filter', tf, colIndex, slc);\n    }\n\n    /**\n     * Add drop-down options\n     * @param {Number} colIndex     Column index\n     * @param {Object} slc          Select Dom element\n     * @param {Boolean} isLinked    Enable linked refresh behaviour\n     * @param {Array} excludedOpts  Array of excluded options\n     */\n    addOptions(colIndex, slc, isLinked, excludedOpts) {\n        let tf = this.tf,\n            slcValue = slc.value;\n\n        slc.innerHTML = '';\n        slc = this.addFirstOption(slc);\n\n        for (let y = 0; y < this.opts.length; y++) {\n            if (this.opts[y] === '') {\n                continue;\n            }\n            let val = this.opts[y]; //option value\n            let lbl = this.isCustom ? this.optsTxt[y] : val; //option text\n            let isDisabled = false;\n            if (isLinked && tf.disableExcludedOptions &&\n                has(excludedOpts, matchCase(val, tf.caseSensitive),\n                    tf.caseSensitive)) {\n                isDisabled = true;\n            }\n\n            let opt;\n            //fill select on demand\n            if (tf.loadFltOnDemand && slcValue === this.opts[y] &&\n                tf.getFilterType(colIndex) === SELECT) {\n                opt = createOpt(lbl, val, true);\n            } else {\n                opt = createOpt(lbl, val, false);\n            }\n            if (isDisabled) {\n                opt.disabled = true;\n            }\n            slc.appendChild(opt);\n        }// for y\n\n        slc.setAttribute('filled', '1');\n    }\n\n    /**\n     * Add drop-down header option\n     * @param {Object} slc Select DOM element\n     */\n    addFirstOption(slc) {\n        let tf = this.tf;\n        let colIdx = tf.getColumnIndexFromFilterId(slc.id);\n        let opt0 = createOpt((!this.enableSlcResetFilter ?\n            '' : tf.getClearFilterText(colIdx)), '');\n        if (!this.enableSlcResetFilter) {\n            opt0.style.display = NONE;\n        }\n        slc.appendChild(opt0);\n        if (tf.enableEmptyOption) {\n            let opt1 = createOpt(tf.emptyText, tf.emOperator);\n            slc.appendChild(opt1);\n        }\n        if (tf.enableNonEmptyOption) {\n            let opt2 = createOpt(tf.nonEmptyText, tf.nmOperator);\n            slc.appendChild(opt2);\n        }\n        return slc;\n    }\n\n    /**\n     * Select filter options programmatically\n     * @param  {Number} colIndex Column index\n     * @param  {Array}  values   Array of option values to select\n     */\n    selectOptions(colIndex, values = []) {\n        let tf = this.tf;\n        if (values.length === 0) {\n            return;\n        }\n        let slc = tf.getFilterElement(colIndex);\n        [].forEach.call(slc.options, (option) => {\n            // Empty value means clear all selections and first option is the\n            // clear all option\n            if (values[0] === '' || option.value === '') {\n                option.selected = false;\n            }\n\n            if (option.value !== '' && has(values, option.value, true)) {\n                option.selected = true;\n            }//if\n        });\n    }\n\n    /**\n     * Get filter values for a given column index\n     * @param {Number} colIndex Column index\n     * @returns {Array}  values  Array of selected values\n     */\n    getValues(colIndex) {\n        let tf = this.tf;\n        let slc = tf.getFilterElement(colIndex);\n        let values = [];\n\n        // IE >= 9 does not support the selectedOptions property :(\n        if (slc.selectedOptions) {\n            [].forEach.call(slc.selectedOptions,\n                option => values.push(option.value));\n        } else {\n            [].forEach.call(slc.options, (option) => {\n                if (option.selected) {\n                    values.push(option.value);\n                }\n            });\n        }\n\n        return values;\n    }\n\n    /**\n     * Destroy Dropdown instance\n     */\n    destroy() {\n        this.emitter.off(\n            ['build-select-filter'],\n            (colIndex, isLinked, isExternal) =>\n                this.build(colIndex, isLinked, isExternal)\n        );\n        this.emitter.off(\n            ['select-options'],\n            (tf, colIndex, values) => this.selectOptions(colIndex, values)\n        );\n        this.emitter.off(['rows-changed'], () => this.refreshAll());\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 357,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "SORT_ERROR",
    "memberof": "src/modules/dropdown.js",
    "longname": "src/modules/dropdown.js~SORT_ERROR",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/dropdown.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 358,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Dropdown",
    "memberof": "src/modules/dropdown.js",
    "longname": "src/modules/dropdown.js~Dropdown",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/dropdown.js",
    "importStyle": "{Dropdown}",
    "description": "Dropdown filter UI component",
    "lineNumber": 15,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 359,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#constructor",
    "access": null,
    "description": "Creates an instance of Dropdown",
    "lineNumber": 21,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 360,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableSlcResetFilter",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#enableSlcResetFilter",
    "access": null,
    "description": "Enable the reset filter option as first item",
    "lineNumber": 31,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 361,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nonEmptyText",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#nonEmptyText",
    "access": null,
    "description": "Non empty option text",
    "lineNumber": 38,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 362,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "multipleSlcTooltip",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#multipleSlcTooltip",
    "access": null,
    "description": "Tooltip text appearing on multiple select",
    "lineNumber": 44,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 363,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isCustom",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#isCustom",
    "access": "private",
    "description": "Indicates drop-down has custom options",
    "lineNumber": 51,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 364,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "opts",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#opts",
    "access": "private",
    "description": "List of options values",
    "lineNumber": 58,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 365,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "optsTxt",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#optsTxt",
    "access": "private",
    "description": "List of options texts for custom values",
    "lineNumber": 65,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 366,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onSlcFocus",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#onSlcFocus",
    "access": "private",
    "description": "Drop-down filter focus event handler",
    "lineNumber": 74,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "e",
        "description": "DOM Event"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 367,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onSlcChange",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#onSlcChange",
    "access": "private",
    "description": "Drop-down filter change event handler",
    "lineNumber": 89,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 368,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "refreshAll",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#refreshAll",
    "access": null,
    "description": "Refresh all drop-down filters",
    "lineNumber": 98,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 369,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#init",
    "access": null,
    "description": "Initialize drop-down filter",
    "lineNumber": 116,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isExternal",
        "description": "External filter flag"
      },
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": "Dom element containing the filter"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 370,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#initialized",
    "access": null,
    "description": null,
    "lineNumber": 166,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 371,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "build",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#build",
    "access": null,
    "description": "Build drop-down filter UI",
    "lineNumber": 174,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isLinked",
        "description": "Enable linked filters behaviour"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 372,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "opts",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#opts",
    "access": null,
    "description": null,
    "lineNumber": 180,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 373,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "optsTxt",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#optsTxt",
    "access": null,
    "description": null,
    "lineNumber": 181,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 374,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isCustom",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#isCustom",
    "access": null,
    "description": null,
    "lineNumber": 189,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 375,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "opts",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#opts",
    "access": null,
    "description": null,
    "lineNumber": 256,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 376,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "optsTxt",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#optsTxt",
    "access": null,
    "description": null,
    "lineNumber": 257,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 377,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "addOptions",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#addOptions",
    "access": null,
    "description": "Add drop-down options",
    "lineNumber": 316,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "slc",
        "description": "Select Dom element"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isLinked",
        "description": "Enable linked refresh behaviour"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "excludedOpts",
        "description": "Array of excluded options"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 378,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "addFirstOption",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#addFirstOption",
    "access": null,
    "description": "Add drop-down header option",
    "lineNumber": 357,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "slc",
        "description": "Select DOM element"
      }
    ],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 379,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "selectOptions",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#selectOptions",
    "access": null,
    "description": "Select filter options programmatically",
    "lineNumber": 382,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "values",
        "description": "Array of option values to select"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 380,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getValues",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#getValues",
    "access": null,
    "description": "Get filter values for a given column index",
    "lineNumber": 406,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Array}  values  Array of selected values"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "values  Array of selected values"
    },
    "generator": false
  },
  {
    "__docId__": 381,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#destroy",
    "access": null,
    "description": "Destroy Dropdown instance",
    "lineNumber": 429,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 382,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/dropdown.js~Dropdown",
    "longname": "src/modules/dropdown.js~Dropdown#initialized",
    "access": null,
    "description": null,
    "lineNumber": 440,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 383,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/gridLayout.js",
    "memberof": null,
    "longname": "src/modules/gridLayout.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, removeElm, elm, tag} from '../dom';\nimport {addEvt, targetEvt} from '../event';\nimport {contains} from '../string';\nimport {NONE} from '../const';\n\n/**\n * Grid layout, table with fixed headers\n */\nexport class GridLayout extends Feature {\n\n    /**\n     * Creates an instance of GridLayout\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'gridLayout');\n\n        let f = this.config;\n\n        /**\n         * Grid-layout container width as CSS string\n         * @type {String}\n         */\n        this.width = f.grid_width || null;\n\n        /**\n         * Grid-layout container height as CSS string\n         * @type {String}\n         */\n        this.height = f.grid_height || null;\n\n        /**\n         * Css class for main container element\n         * @type {String}\n         */\n        this.mainContCssClass = f.grid_cont_css_class || 'grd_Cont';\n\n        /**\n         * Css class for body table container element\n         * @type {String}\n         */\n        this.contCssClass = f.grid_tbl_cont_css_class || 'grd_tblCont';\n\n        /**\n         * Css class for headers table container element\n         * @type {String}\n         */\n        this.headContCssClass = f.grid_tblHead_cont_css_class ||\n            'grd_headTblCont';\n\n        /**\n         * Css class for toolbar container element (rows counter, paging etc.)\n         * @type {String}\n         */\n        this.infDivCssClass = f.grid_inf_grid_css_class || 'grd_inf';\n\n        /**\n         * Index of the headers row, default: 0\n         * @type {Number}\n         */\n        this.headRowIndex = f.grid_headers_row_index || 0;\n\n        /**\n         * Collection of the header row indexes to be moved into headers table\n         * @type {Array}\n         */\n        this.headRows = f.grid_headers_rows || [0];\n\n        /**\n         * Enable or disable column filters generation, default: true\n         * @type {Boolean}\n         */\n        this.enableFilters = f.grid_enable_default_filters === false ?\n            false : true;\n\n        /**\n         * Enable or disable column headers, default: false\n         * @type {Boolean}\n         */\n        this.noHeaders = Boolean(f.grid_no_headers);\n\n        /**\n         * Grid-layout default column widht as CSS string\n         * @type {String}\n         */\n        this.defaultColWidth = f.grid_default_col_width || '100px';\n\n        /**\n         * List of column elements\n         * @type {Array}\n         * @private\n         */\n        this.colElms = [];\n\n        /**\n         * Prefix for grid-layout filter's cell ID\n         * @type {String}\n         * @private\n         */\n        this.prfxGridFltTd = '_td_';\n\n        /**\n         * Prefix for grid-layout header's cell ID\n         * @type {String}\n         * @private\n         */\n        this.prfxGridTh = 'tblHeadTh_';\n\n        /**\n         * Mark-up of original HTML table\n         * @type {String}\n         * @private\n         */\n        this.sourceTblHtml = tf.tbl.outerHTML;\n\n        /**\n         * Indicates if working table has column elements\n         * @type {Boolean}\n         * @private\n         */\n        this.tblHasColTag = tag(tf.tbl, 'col').length > 0 ? true : false;\n\n        /**\n         * Main container element\n         * @private\n         */\n        this.tblMainCont = null;\n\n        /**\n         * Table container element\n         * @private\n         */\n        this.tblCont = null;\n\n        /**\n         * Headers' table container element\n         * @private\n         */\n        this.headTblCont = null;\n\n        /**\n         * Headers' table element\n         * @private\n         */\n        this.headTbl = null;\n\n        // filters flag at TF level\n        tf.fltGrid = this.enableFilters;\n    }\n\n    /**\n     * Generates a grid with fixed headers\n     * TODO: reduce size of init by extracting single purposed methods\n     */\n    init() {\n        let tf = this.tf;\n        let tbl = tf.tbl;\n\n        if (this.initialized) {\n            return;\n        }\n\n        // Override relevant TableFilter properties\n        this.setOverrides();\n\n        // Assign default column widths\n        this.setDefaultColWidths();\n\n        // Initial table width\n        let tblW = this.initialTableWidth();\n\n        //Main container: it will contain all the elements\n        this.tblMainCont = this.createContainer(\n            'div', this.mainContCssClass);\n        if (this.width) {\n            this.tblMainCont.style.width = this.width;\n        }\n        tbl.parentNode.insertBefore(this.tblMainCont, tbl);\n\n        //Table container: div wrapping content table\n        this.tblCont = this.createContainer('div', this.contCssClass);\n        this.setConfigWidth(this.tblCont);\n        if (this.height) {\n            this.tblCont.style.height = this.height;\n        }\n        tbl.parentNode.insertBefore(this.tblCont, tbl);\n        let t = removeElm(tbl);\n        this.tblCont.appendChild(t);\n\n        //In case table width is expressed in %\n        if (tbl.style.width === '') {\n            tbl.style.width = (contains('%', tblW) ?\n                tbl.clientWidth : tblW) + 'px';\n        }\n\n        let d = removeElm(this.tblCont);\n        this.tblMainCont.appendChild(d);\n\n        //Headers table container: div wrapping headers table\n        this.headTblCont = this.createContainer(\n            'div', this.headContCssClass);\n        this.setConfigWidth(this.headTblCont);\n\n        //Headers table\n        this.headTbl = createElm('table');\n        let tH = createElm('tHead');\n\n        //1st row should be headers row, ids are added if not set\n        //Those ids are used by the sort feature\n        let hRow = tbl.rows[this.headRowIndex];\n        let sortTriggers = this.getSortTriggerIds(hRow);\n\n        //Filters row is created\n        let filtersRow = this.createFiltersRow();\n\n        //Headers row are moved from content table to headers table\n        this.setHeadersRow(tH);\n\n        this.headTbl.appendChild(tH);\n        if (tf.filtersRowIndex === 0) {\n            tH.insertBefore(filtersRow, hRow);\n        } else {\n            tH.appendChild(filtersRow);\n        }\n\n        this.headTblCont.appendChild(this.headTbl);\n        this.tblCont.parentNode.insertBefore(this.headTblCont, this.tblCont);\n\n        //THead needs to be removed in content table for sort feature\n        let thead = tag(tbl, 'thead');\n        if (thead.length > 0) {\n            tbl.removeChild(thead[0]);\n        }\n\n        //Headers table style\n        this.headTbl.style.tableLayout = 'fixed';\n        tbl.style.tableLayout = 'fixed';\n        this.headTbl.cellPadding = tbl.cellPadding;\n        this.headTbl.cellSpacing = tbl.cellSpacing;\n        // this.headTbl.style.width = tbl.style.width;\n\n        //content table without headers needs col widths to be reset\n        tf.setColWidths(this.headTbl);\n\n        //Headers container width\n        // this.headTblCont.style.width = this.tblCont.clientWidth+'px';\n\n        tbl.style.width = '';\n        //\n        this.headTbl.style.width = tbl.clientWidth + 'px';\n        //\n\n        //scroll synchronisation\n        addEvt(this.tblCont, 'scroll', (evt) => {\n            let elm = targetEvt(evt);\n            let scrollLeft = elm.scrollLeft;\n            this.headTblCont.scrollLeft = scrollLeft;\n            //New pointerX calc taking into account scrollLeft\n            // if(!o.isPointerXOverwritten){\n            //     try{\n            //         o.Evt.pointerX = function(evt){\n            //             let e = evt || global.event;\n            //             let bdScrollLeft = tf_StandardBody().scrollLeft +\n            //                 scrollLeft;\n            //             return (e.pageX + scrollLeft) ||\n            //                 (e.clientX + bdScrollLeft);\n            //         };\n            //         o.isPointerXOverwritten = true;\n            //     } catch(err) {\n            //         o.isPointerXOverwritten = false;\n            //     }\n            // }\n        });\n\n        // TODO: Trigger a custom event handled by sort extension\n        let sort = tf.extension('sort');\n        if (sort) {\n            sort.asyncSort = true;\n            sort.triggerIds = sortTriggers;\n        }\n\n        //Col elements are enough to keep column widths after sorting and\n        //filtering\n        this.setColumnElements();\n\n        if (tf.popupFilters) {\n            filtersRow.style.display = NONE;\n        }\n\n        if (tbl.clientWidth !== this.headTbl.clientWidth) {\n            tbl.style.width = this.headTbl.clientWidth + 'px';\n        }\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Overrides TableFilter instance properties to adjust to grid layout mode\n     * @private\n     */\n    setOverrides() {\n        let tf = this.tf;\n        tf.refRow = 0;\n        tf.headersRow = 0;\n        tf.filtersRowIndex = 1;\n        tf.isExternalFlt = true;\n    }\n\n    /**\n     * Set grid-layout default column widths if column widths are not defined\n     * @private\n     */\n    setDefaultColWidths() {\n        let tf = this.tf;\n        if (tf.hasColWidths) {\n            return;\n        }\n        for (let k = 0, len = tf.getCellsNb(); k < len; k++) {\n            let colW;\n            let cell = tf.tbl.rows[tf.getHeadersRowIndex()].cells[k];\n            if (cell.width !== '') {\n                colW = cell.width;\n            } else if (cell.style.width !== '') {\n                colW = parseInt(cell.style.width, 10);\n            } else {\n                colW = this.defaultColWidth;\n            }\n            tf.colWidths[k] = colW;\n        }\n        tf.hasColWidths = true;\n        tf.setColWidths();\n    }\n\n    /**\n     * Initial table width\n     * @returns {Number}\n     * @private\n     */\n    initialTableWidth() {\n        let tbl = this.tf.tbl;\n        let width; //initial table width\n\n        if (tbl.width !== '') {\n            width = tbl.width;\n        }\n        else if (tbl.style.width !== '') {\n            width = tbl.style.width;\n        } else {\n            width = tbl.clientWidth;\n        }\n        return parseInt(width, 10);\n    }\n\n    /**\n     * Creates container element\n     * @param {String} tag Tag name\n     * @param {String} className Css class to assign to element\n     * @returns {DOMElement}\n     * @private\n     */\n    createContainer(tag, className) {\n        let element = createElm(tag);\n        element.className = className;\n        return element;\n    }\n\n    /**\n     * Creates filters row with cells\n     * @returns {HTMLTableRowElement}\n     * @private\n     */\n    createFiltersRow() {\n        let tf = this.tf;\n        let filtersRow = createElm('tr');\n        if (this.enableFilters && tf.fltGrid) {\n            tf.externalFltTgtIds = [];\n            for (let j = 0; j < tf.getCellsNb(); j++) {\n                let fltTdId = `${tf.prfxFlt + j + this.prfxGridFltTd + tf.id}`;\n                let cl = createElm(tf.fltCellTag, ['id', fltTdId]);\n                filtersRow.appendChild(cl);\n                tf.externalFltTgtIds[j] = fltTdId;\n            }\n        }\n        return filtersRow;\n    }\n\n    /**\n     * Generates column elements if necessary and assigns their widths\n     * @private\n     */\n    setColumnElements() {\n        let tf = this.tf;\n        let cols = tag(tf.tbl, 'col');\n        this.tblHasColTag = cols.length > 0;\n\n        for (let k = (tf.nbCells - 1); k >= 0; k--) {\n            let col;\n\n            if (!this.tblHasColTag) {\n                col = createElm('col');\n                tf.tbl.insertBefore(col, tf.tbl.firstChild);\n            } else {\n                col = cols[k];\n            }\n            col.style.width = tf.colWidths[k];\n            this.colElms[k] = col;\n        }\n        this.tblHasColTag = true;\n    }\n\n    /**\n     * Sets headers row in headers table\n     * @param {HTMLHeadElement} tableHead Table head element\n     * @private\n     */\n    setHeadersRow(tableHead) {\n        if (this.noHeaders) {\n            // Handle table with no headers, assuming here headers do not\n            // exist\n            tableHead.appendChild(createElm('tr'));\n        } else {\n            // Headers row are moved from content table to headers table\n            for (let i = 0; i < this.headRows.length; i++) {\n                let row = this.tf.tbl.rows[this.headRows[i]];\n                tableHead.appendChild(row);\n            }\n        }\n    }\n\n    /**\n     * Sets width defined in configuration to passed element\n     * @param {DOMElement} element DOM element\n     * @private\n     */\n    setConfigWidth(element) {\n        if (!this.width) {\n            return;\n        }\n        if (this.width.indexOf('%') !== -1) {\n            element.style.width = '100%';\n        } else {\n            element.style.width = this.width;\n        }\n    }\n\n    /**\n     * Returns a list of header IDs used for specifing external sort triggers\n     * @param {HTMLTableRowElement} row DOM row element\n     * @returns {Array} List of IDs\n     * @private\n     */\n    getSortTriggerIds(row) {\n        let tf = this.tf;\n        let sortTriggers = [];\n        for (let n = 0; n < tf.getCellsNb(); n++) {\n            let c = row.cells[n];\n            let thId = c.getAttribute('id');\n            if (!thId || thId === '') {\n                thId = `${this.prfxGridTh + n}_${tf.id}`;\n                c.setAttribute('id', thId);\n            }\n            sortTriggers.push(thId);\n        }\n        return sortTriggers;\n    }\n\n    /**\n     * Removes the grid layout\n     */\n    destroy() {\n        let tf = this.tf;\n        let tbl = tf.tbl;\n\n        if (!this.initialized) {\n            return;\n        }\n        let t = removeElm(tbl);\n        this.tblMainCont.parentNode.insertBefore(t, this.tblMainCont);\n        removeElm(this.tblMainCont);\n\n        this.tblMainCont = null;\n        this.headTblCont = null;\n        this.headTbl = null;\n        this.tblCont = null;\n\n        tbl.outerHTML = this.sourceTblHtml;\n        //needed to keep reference of table element for future usage\n        this.tf.tbl = elm(tf.id);\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 384,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "GridLayout",
    "memberof": "src/modules/gridLayout.js",
    "longname": "src/modules/gridLayout.js~GridLayout",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/gridLayout.js",
    "importStyle": "{GridLayout}",
    "description": "Grid layout, table with fixed headers",
    "lineNumber": 10,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 385,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#constructor",
    "access": null,
    "description": "Creates an instance of GridLayout",
    "lineNumber": 16,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 386,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "width",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#width",
    "access": null,
    "description": "Grid-layout container width as CSS string",
    "lineNumber": 25,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 387,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "height",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#height",
    "access": null,
    "description": "Grid-layout container height as CSS string",
    "lineNumber": 31,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 388,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "mainContCssClass",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#mainContCssClass",
    "access": null,
    "description": "Css class for main container element",
    "lineNumber": 37,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 389,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contCssClass",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#contCssClass",
    "access": null,
    "description": "Css class for body table container element",
    "lineNumber": 43,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 390,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headContCssClass",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headContCssClass",
    "access": null,
    "description": "Css class for headers table container element",
    "lineNumber": 49,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 391,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "infDivCssClass",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#infDivCssClass",
    "access": null,
    "description": "Css class for toolbar container element (rows counter, paging etc.)",
    "lineNumber": 56,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 392,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headRowIndex",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headRowIndex",
    "access": null,
    "description": "Index of the headers row, default: 0",
    "lineNumber": 62,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 393,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headRows",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headRows",
    "access": null,
    "description": "Collection of the header row indexes to be moved into headers table",
    "lineNumber": 68,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 394,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableFilters",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#enableFilters",
    "access": null,
    "description": "Enable or disable column filters generation, default: true",
    "lineNumber": 74,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 395,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "noHeaders",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#noHeaders",
    "access": null,
    "description": "Enable or disable column headers, default: false",
    "lineNumber": 81,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 396,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "defaultColWidth",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#defaultColWidth",
    "access": null,
    "description": "Grid-layout default column widht as CSS string",
    "lineNumber": 87,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 397,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "colElms",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#colElms",
    "access": "private",
    "description": "List of column elements",
    "lineNumber": 94,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 398,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxGridFltTd",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#prfxGridFltTd",
    "access": "private",
    "description": "Prefix for grid-layout filter's cell ID",
    "lineNumber": 101,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 399,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxGridTh",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#prfxGridTh",
    "access": "private",
    "description": "Prefix for grid-layout header's cell ID",
    "lineNumber": 108,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 400,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sourceTblHtml",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#sourceTblHtml",
    "access": "private",
    "description": "Mark-up of original HTML table",
    "lineNumber": 115,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 401,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblHasColTag",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblHasColTag",
    "access": "private",
    "description": "Indicates if working table has column elements",
    "lineNumber": 122,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 402,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblMainCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblMainCont",
    "access": "private",
    "description": "Main container element",
    "lineNumber": 128,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 403,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblCont",
    "access": "private",
    "description": "Table container element",
    "lineNumber": 134,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 404,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headTblCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headTblCont",
    "access": "private",
    "description": "Headers' table container element",
    "lineNumber": 140,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 405,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headTbl",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headTbl",
    "access": "private",
    "description": "Headers' table element",
    "lineNumber": 146,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 406,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#init",
    "access": null,
    "description": "Generates a grid with fixed headers\nTODO: reduce size of init by extracting single purposed methods",
    "lineNumber": 156,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 407,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblMainCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblMainCont",
    "access": null,
    "description": null,
    "lineNumber": 174,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 408,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblCont",
    "access": null,
    "description": null,
    "lineNumber": 182,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 409,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headTblCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headTblCont",
    "access": null,
    "description": null,
    "lineNumber": 201,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 410,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headTbl",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headTbl",
    "access": null,
    "description": null,
    "lineNumber": 206,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 411,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#initialized",
    "access": null,
    "description": null,
    "lineNumber": 296,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 412,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setOverrides",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#setOverrides",
    "access": "private",
    "description": "Overrides TableFilter instance properties to adjust to grid layout mode",
    "lineNumber": 303,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 413,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setDefaultColWidths",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#setDefaultColWidths",
    "access": "private",
    "description": "Set grid-layout default column widths if column widths are not defined",
    "lineNumber": 315,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 414,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "initialTableWidth",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#initialTableWidth",
    "access": "private",
    "description": "Initial table width",
    "lineNumber": 341,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 415,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "createContainer",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#createContainer",
    "access": "private",
    "description": "Creates container element",
    "lineNumber": 363,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{DOMElement}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "tag",
        "description": "Tag name"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "className",
        "description": "Css class to assign to element"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 416,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "createFiltersRow",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#createFiltersRow",
    "access": "private",
    "description": "Creates filters row with cells",
    "lineNumber": 374,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{HTMLTableRowElement}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "HTMLTableRowElement"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 417,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setColumnElements",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#setColumnElements",
    "access": "private",
    "description": "Generates column elements if necessary and assigns their widths",
    "lineNumber": 393,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 418,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblHasColTag",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblHasColTag",
    "access": null,
    "description": null,
    "lineNumber": 396,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 419,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblHasColTag",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblHasColTag",
    "access": null,
    "description": null,
    "lineNumber": 410,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 420,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setHeadersRow",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#setHeadersRow",
    "access": "private",
    "description": "Sets headers row in headers table",
    "lineNumber": 418,
    "params": [
      {
        "nullable": null,
        "types": [
          "HTMLHeadElement"
        ],
        "spread": false,
        "optional": false,
        "name": "tableHead",
        "description": "Table head element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 421,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setConfigWidth",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#setConfigWidth",
    "access": "private",
    "description": "Sets width defined in configuration to passed element",
    "lineNumber": 437,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "element",
        "description": "DOM element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 422,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getSortTriggerIds",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#getSortTriggerIds",
    "access": "private",
    "description": "Returns a list of header IDs used for specifing external sort triggers",
    "lineNumber": 454,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Array} List of IDs"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "HTMLTableRowElement"
        ],
        "spread": false,
        "optional": false,
        "name": "row",
        "description": "DOM row element"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "List of IDs"
    },
    "generator": false
  },
  {
    "__docId__": 423,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#destroy",
    "access": null,
    "description": "Removes the grid layout",
    "lineNumber": 472,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 424,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblMainCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblMainCont",
    "access": null,
    "description": null,
    "lineNumber": 483,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 425,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headTblCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headTblCont",
    "access": null,
    "description": null,
    "lineNumber": 484,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 426,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headTbl",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#headTbl",
    "access": null,
    "description": null,
    "lineNumber": 485,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 427,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tblCont",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#tblCont",
    "access": null,
    "description": null,
    "lineNumber": 486,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 428,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/gridLayout.js~GridLayout",
    "longname": "src/modules/gridLayout.js~GridLayout#initialized",
    "access": null,
    "description": null,
    "lineNumber": 492,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 429,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/hash.js",
    "memberof": null,
    "longname": "src/modules/hash.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {addEvt, removeEvt} from '../event';\nimport {root} from '../root';\n\nconst JSON = root.JSON;\nconst location = root.location;\nconst decodeURIComponent = root.decodeURIComponent;\nconst encodeURIComponent = root.encodeURIComponent;\n\n/**\n * Checks if browser has onhashchange event\n */\nexport const hasHashChange = () => {\n    let docMode = root.documentMode;\n    return ('onhashchange' in root) && (docMode === undefined || docMode > 7);\n};\n\n/**\n * Manages state via URL hash changes\n *\n * @export\n * @class Hash\n */\nexport class Hash {\n\n    /**\n     * Creates an instance of Hash\n     *\n     * @param {State} state Instance of State\n     */\n    constructor(state) {\n        /**\n         * State object\n         * @type {State}\n         */\n        this.state = state;\n\n        /**\n         * Cached URL hash\n         * @type {String} Hash string\n         * @private\n         */\n        this.lastHash = null;\n\n        /**\n         * Application event emitter instance\n         * @type {Emitter}\n         */\n        this.emitter = state.emitter;\n\n        /**\n         * Bound sync wrapper for future use\n         * @private\n         */\n        this.boundSync = null;\n    }\n\n    /**\n     * Initializes the Hash object\n     */\n    init() {\n        if (!hasHashChange()) {\n            return;\n        }\n\n        this.lastHash = location.hash;\n        //Store a bound sync wrapper\n        this.boundSync = this.sync.bind(this);\n        this.emitter.on(['state-changed'], (tf, state) => this.update(state));\n        this.emitter.on(['initialized'], this.boundSync);\n        addEvt(root, 'hashchange', this.boundSync);\n    }\n\n    /**\n     * Updates the URL hash based on a state change\n     *\n     * @param {State} state Instance of State\n     */\n    update(state) {\n        let hash = `#${encodeURIComponent(JSON.stringify(state))}`;\n        if (this.lastHash === hash) {\n            return;\n        }\n\n        location.hash = hash;\n        this.lastHash = hash;\n    }\n\n    /**\n     * Converts a URL hash into a state JSON object\n     *\n     * @param {String} hash URL hash fragment\n     * @returns {Object} JSON object\n     */\n    parse(hash) {\n        if (hash.indexOf('#') === -1) {\n            return null;\n        }\n        hash = hash.substr(1);\n        return JSON.parse(decodeURIComponent(hash));\n    }\n\n    /**\n     * Applies current hash state to features\n     */\n    sync() {\n        let state = this.parse(location.hash);\n        if (!state) {\n            return;\n        }\n        // override current state with persisted one and sync features\n        this.state.overrideAndSync(state);\n    }\n\n    /**\n     * Release Hash event subscriptions and clear fields\n     */\n    destroy() {\n        this.emitter.off(['state-changed'], (tf, state) => this.update(state));\n        this.emitter.off(['initialized'], this.boundSync);\n        removeEvt(root, 'hashchange', this.boundSync);\n\n        this.state = null;\n        this.lastHash = null;\n        this.emitter = null;\n    }\n}\n"
  },
  {
    "__docId__": 430,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "JSON",
    "memberof": "src/modules/hash.js",
    "longname": "src/modules/hash.js~JSON",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/hash.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 4,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 431,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "location",
    "memberof": "src/modules/hash.js",
    "longname": "src/modules/hash.js~location",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/hash.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 432,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "decodeURIComponent",
    "memberof": "src/modules/hash.js",
    "longname": "src/modules/hash.js~decodeURIComponent",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/hash.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 433,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "encodeURIComponent",
    "memberof": "src/modules/hash.js",
    "longname": "src/modules/hash.js~encodeURIComponent",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/hash.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 434,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasHashChange",
    "memberof": "src/modules/hash.js",
    "longname": "src/modules/hash.js~hasHashChange",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/hash.js",
    "importStyle": "{hasHashChange}",
    "description": "Checks if browser has onhashchange event",
    "lineNumber": 12,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 435,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Hash",
    "memberof": "src/modules/hash.js",
    "longname": "src/modules/hash.js~Hash",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/hash.js",
    "importStyle": "{Hash}",
    "description": "Manages state via URL hash changes",
    "lineNumber": 23,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "Hash"
      }
    ],
    "interface": false
  },
  {
    "__docId__": 436,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#constructor",
    "access": null,
    "description": "Creates an instance of Hash",
    "lineNumber": 30,
    "params": [
      {
        "nullable": null,
        "types": [
          "State"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": "Instance of State"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 437,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#state",
    "access": null,
    "description": "State object",
    "lineNumber": 35,
    "type": {
      "nullable": null,
      "types": [
        "State"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 438,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lastHash",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#lastHash",
    "access": "private",
    "description": "Cached URL hash",
    "lineNumber": 42,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 439,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emitter",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#emitter",
    "access": null,
    "description": "Application event emitter instance",
    "lineNumber": 48,
    "type": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 440,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundSync",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#boundSync",
    "access": "private",
    "description": "Bound sync wrapper for future use",
    "lineNumber": 54,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 441,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#init",
    "access": null,
    "description": "Initializes the Hash object",
    "lineNumber": 60,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 442,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lastHash",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#lastHash",
    "access": null,
    "description": null,
    "lineNumber": 65,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 443,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundSync",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#boundSync",
    "access": null,
    "description": null,
    "lineNumber": 67,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 444,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "update",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#update",
    "access": null,
    "description": "Updates the URL hash based on a state change",
    "lineNumber": 78,
    "params": [
      {
        "nullable": null,
        "types": [
          "State"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": "Instance of State"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 445,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lastHash",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#lastHash",
    "access": null,
    "description": null,
    "lineNumber": 85,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 446,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "parse",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#parse",
    "access": null,
    "description": "Converts a URL hash into a state JSON object",
    "lineNumber": 94,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Object} JSON object"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "hash",
        "description": "URL hash fragment"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": "JSON object"
    },
    "generator": false
  },
  {
    "__docId__": 447,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "sync",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#sync",
    "access": null,
    "description": "Applies current hash state to features",
    "lineNumber": 105,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 448,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#destroy",
    "access": null,
    "description": "Release Hash event subscriptions and clear fields",
    "lineNumber": 117,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 449,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#state",
    "access": null,
    "description": null,
    "lineNumber": 122,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 450,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lastHash",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#lastHash",
    "access": null,
    "description": null,
    "lineNumber": 123,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 451,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emitter",
    "memberof": "src/modules/hash.js~Hash",
    "longname": "src/modules/hash.js~Hash#emitter",
    "access": null,
    "description": null,
    "lineNumber": 124,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 452,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/help.js",
    "memberof": null,
    "longname": "src/modules/help.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, createText, elm, removeElm} from '../dom';\nimport {addEvt, targetEvt, removeEvt} from '../event';\nimport {NONE} from '../const';\nimport {root} from '../root';\n\nconst WIKI_URL = 'https://github.com/koalyptus/TableFilter/wiki/' +\n    '4.-Filter-operators';\nconst WEBSITE_URL = 'http://koalyptus.github.io/TableFilter/';\n\n/**\n * Help UI component\n */\nexport class Help extends Feature {\n\n    /**\n     * Creates an instance of Help\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'help');\n\n        let f = this.config;\n\n        /**\n         * ID of main custom container element\n         * @type {String}\n         */\n        this.tgtId = f.help_instructions_target_id || null;\n\n        /**\n         * ID of custom container element for instructions\n         * @type {String}\n         */\n        this.contTgtId = f.help_instructions_container_target_id ||\n            null;\n\n        /**\n         * Instructions text (accepts HTML)\n         * @type {String}\n         */\n        this.instrText = f.help_instructions_text ?\n            f.help_instructions_text :\n            'Use the filters above each column to filter and limit table ' +\n            'data. Advanced searches can be performed by using the following ' +\n            'operators: <br /><b>&lt;</b>, <b>&lt;=</b>, <b>&gt;</b>, ' +\n            '<b>&gt;=</b>, <b>=</b>, <b>*</b>, <b>!</b>, <b>{</b>, <b>}</b>, ' +\n            '<b>||</b>,<b>&amp;&amp;</b>, <b>[empty]</b>, <b>[nonempty]</b>, ' +\n            '<b>rgx:</b><br/><a href=\"' + WIKI_URL + '\" target=\"_blank\">' +\n            'Learn more</a><hr/>';\n\n        /**\n         * Instructions HTML\n         * @type {String}\n         */\n        this.instrHtml = f.help_instructions_html || null;\n\n        /**\n         * Help button text ('?')\n         * @type {String}\n         */\n        this.btnText = f.help_instructions_btn_text || '?';\n\n        /**\n         * Custom help button HTML\n         * @type {String}\n         */\n        this.btnHtml = f.help_instructions_btn_html || null;\n\n        /**\n         * Css class for help button\n         * @type {String}\n         */\n        this.btnCssClass = f.help_instructions_btn_css_class || 'helpBtn';\n\n        /**\n         * Css class for help container element\n         * @type {String}\n         */\n        this.contCssClass = f.help_instructions_container_css_class ||\n            'helpCont';\n\n        /**\n         * Button DOM element\n         * @type {DOMElement}\n         */\n        this.btn = null;\n\n        /**\n         * Help container DOM element\n         * @type {DOMElement}\n         */\n        this.cont = null;\n\n        /**\n         * Bound mouseup wrapper\n         * @private\n         */\n        this.boundMouseup = null;\n\n        /**\n         * Default HTML appended to instructions text\n         * @type {String}\n         */\n        this.defaultHtml = '<div class=\"helpFooter\"><h4>TableFilter ' +\n            'v' + tf.version + '</h4>' + '<a href=\"' + WEBSITE_URL +\n            '\" target=\"_blank\">' + WEBSITE_URL + '</a>' +\n            '<br/><span>&copy;2015-' + tf.year + ' {AUTHOR}</span>' +\n            '<div align=\"center\" style=\"margin-top:8px;\">' +\n            '<a href=\"javascript:void(0);\" class=\"close\">Close</a></div></div>';\n\n        this.emitter.on(['init-help'], () => this.init());\n    }\n\n    /**\n     * Mouse-up event handler handling popup auto-close behaviour\n     * @private\n     */\n    onMouseup(evt) {\n        let targetElm = targetEvt(evt);\n\n        while (targetElm && targetElm !== this.cont && targetElm !== this.btn) {\n            targetElm = targetElm.parentNode;\n        }\n\n        if (targetElm !== this.cont && targetElm !== this.btn) {\n            this.toggle();\n        }\n\n        return;\n    }\n\n    /**\n     * Initialise Help instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        let tf = this.tf;\n\n        let btn = createElm('span');\n        let cont = createElm('div');\n\n        this.boundMouseup = this.onMouseup.bind(this);\n\n        //help button is added to defined element\n        if (!this.tgtId) {\n            tf.setToolbar();\n        }\n        let targetEl = !this.tgtId ? tf.rDiv : elm(this.tgtId);\n        targetEl.appendChild(btn);\n\n        let divContainer = !this.contTgtId ? btn : elm(this.contTgtId);\n\n        if (!this.btnHtml) {\n            divContainer.appendChild(cont);\n            let helplink = createElm('a', ['href', 'javascript:void(0);']);\n            helplink.className = this.btnCssClass;\n            helplink.appendChild(createText(this.btnText));\n            btn.appendChild(helplink);\n            addEvt(helplink, 'click', () => this.toggle());\n        } else {\n            btn.innerHTML = this.btnHtml;\n            let helpEl = btn.firstChild;\n            addEvt(helpEl, 'click', () => this.toggle());\n            divContainer.appendChild(cont);\n        }\n\n        if (!this.instrHtml) {\n            cont.innerHTML = this.instrText;\n            cont.className = this.contCssClass;\n        } else {\n            if (this.contTgtId) {\n                divContainer.appendChild(cont);\n            }\n            cont.innerHTML = this.instrHtml;\n            if (!this.contTgtId) {\n                cont.className = this.contCssClass;\n            }\n        }\n        cont.innerHTML += this.defaultHtml;\n        addEvt(cont, 'click', () => this.toggle());\n\n        this.cont = cont;\n        this.btn = btn;\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Toggle help pop-up\n     */\n    toggle() {\n        // check only if explicitily set to false as in this case undefined\n        // signifies the help feature is enabled by default\n        if (this.enabled === false) {\n            return;\n        }\n\n        // ensure mouseup event handler is removed\n        removeEvt(root, 'mouseup', this.boundMouseup);\n\n        let divDisplay = this.cont.style.display;\n        if (divDisplay === '' || divDisplay === NONE) {\n            this.cont.style.display = 'inline';\n            addEvt(root, 'mouseup', this.boundMouseup);\n        } else {\n            this.cont.style.display = NONE;\n        }\n    }\n\n    /**\n     * Remove help UI\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        removeElm(this.btn);\n        this.btn = null;\n\n        removeElm(this.cont);\n        this.cont = null;\n\n        this.boundMouseup = null;\n\n        this.initialized = false;\n    }\n\n}\n"
  },
  {
    "__docId__": 453,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "WIKI_URL",
    "memberof": "src/modules/help.js",
    "longname": "src/modules/help.js~WIKI_URL",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/help.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 454,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "WEBSITE_URL",
    "memberof": "src/modules/help.js",
    "longname": "src/modules/help.js~WEBSITE_URL",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/help.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 9,
    "undocument": true,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 455,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Help",
    "memberof": "src/modules/help.js",
    "longname": "src/modules/help.js~Help",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/help.js",
    "importStyle": "{Help}",
    "description": "Help UI component",
    "lineNumber": 14,
    "interface": false,
    "extends": [
      "src/feature.js~Feature"
    ]
  },
  {
    "__docId__": 456,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#constructor",
    "access": null,
    "description": "Creates an instance of Help",
    "lineNumber": 20,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 457,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tgtId",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#tgtId",
    "access": null,
    "description": "ID of main custom container element",
    "lineNumber": 29,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 458,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contTgtId",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#contTgtId",
    "access": null,
    "description": "ID of custom container element for instructions",
    "lineNumber": 35,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 459,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "instrText",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#instrText",
    "access": null,
    "description": "Instructions text (accepts HTML)",
    "lineNumber": 42,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 460,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "instrHtml",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#instrHtml",
    "access": null,
    "description": "Instructions HTML",
    "lineNumber": 56,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 461,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnText",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#btnText",
    "access": null,
    "description": "Help button text ('?')",
    "lineNumber": 62,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 462,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnHtml",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#btnHtml",
    "access": null,
    "description": "Custom help button HTML",
    "lineNumber": 68,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 463,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnCssClass",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#btnCssClass",
    "access": null,
    "description": "Css class for help button",
    "lineNumber": 74,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 464,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "contCssClass",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#contCssClass",
    "access": null,
    "description": "Css class for help container element",
    "lineNumber": 80,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 465,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btn",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#btn",
    "access": null,
    "description": "Button DOM element",
    "lineNumber": 87,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 466,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#cont",
    "access": null,
    "description": "Help container DOM element",
    "lineNumber": 93,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 467,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundMouseup",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#boundMouseup",
    "access": "private",
    "description": "Bound mouseup wrapper",
    "lineNumber": 99,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 468,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "defaultHtml",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#defaultHtml",
    "access": null,
    "description": "Default HTML appended to instructions text",
    "lineNumber": 105,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 469,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onMouseup",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#onMouseup",
    "access": "private",
    "description": "Mouse-up event handler handling popup auto-close behaviour",
    "lineNumber": 119,
    "params": [
      {
        "name": "evt",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 470,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#init",
    "access": null,
    "description": "Initialise Help instance",
    "lineNumber": 136,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 471,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundMouseup",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#boundMouseup",
    "access": null,
    "description": null,
    "lineNumber": 146,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 472,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#cont",
    "access": null,
    "description": null,
    "lineNumber": 186,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 473,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btn",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#btn",
    "access": null,
    "description": null,
    "lineNumber": 187,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 474,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#initialized",
    "access": null,
    "description": null,
    "lineNumber": 189,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 475,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "toggle",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#toggle",
    "access": null,
    "description": "Toggle help pop-up",
    "lineNumber": 195,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 476,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#destroy",
    "access": null,
    "description": "Remove help UI",
    "lineNumber": 217,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 477,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btn",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#btn",
    "access": null,
    "description": null,
    "lineNumber": 222,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 478,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#cont",
    "access": null,
    "description": null,
    "lineNumber": 225,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 479,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "boundMouseup",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#boundMouseup",
    "access": null,
    "description": null,
    "lineNumber": 227,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 480,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/help.js~Help",
    "longname": "src/modules/help.js~Help#initialized",
    "access": null,
    "description": null,
    "lineNumber": 229,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 481,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/highlightKeywords.js",
    "memberof": null,
    "longname": "src/modules/highlightKeywords.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {createText, createElm, getText} from '../dom';\nimport {isArray} from '../types';\nimport {rgxEsc} from '../string';\n\n/**\n * Highlight matched keywords upon filtering\n *\n * @export\n * @class HighlightKeyword\n */\nexport class HighlightKeyword {\n\n    /**\n     * Creates an instance of HighlightKeyword\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        let f = tf.config();\n\n        /**\n         * Css class for highlighted term\n         * @type {String}\n         */\n        this.highlightCssClass = f.highlight_css_class || 'keyword';\n\n        /**\n         * TableFilter instance\n         * @type {TableFilter}\n         */\n        this.tf = tf;\n\n        /**\n         * TableFilter's emitter instance\n         * @type {Emitter}\n         */\n        this.emitter = tf.emitter;\n    }\n\n    /**\n     * Initializes HighlightKeyword instance\n     */\n    init() {\n        this.emitter.on(\n            ['before-filtering', 'destroy'],\n            () => this.unhighlightAll()\n        );\n        this.emitter.on(\n            ['highlight-keyword'],\n            (tf, cell, term) => this._processTerm(cell, term)\n        );\n    }\n\n    /**\n     * Highlight occurences of searched term in passed node\n     * @param  {Node} node\n     * @param  {String} term     Searched term\n     * @param  {String} cssClass Css class name\n     *\n     * TODO: refactor this method\n     */\n    highlight(node, term, cssClass) {\n        // Iterate into this nodes childNodes\n        if (node.hasChildNodes) {\n            let children = node.childNodes;\n            for (let i = 0; i < children.length; i++) {\n                this.highlight(children[i], term, cssClass);\n            }\n        }\n\n        if (node.nodeType === 3) {\n            let nodeVal = node.nodeValue.toLowerCase();\n            let termIdx = nodeVal.indexOf(term.toLowerCase());\n\n            if (termIdx !== -1) {\n                let pn = node.parentNode;\n                if (pn && pn.className !== cssClass) {\n                    // term not highlighted yet\n                    let nv = node.nodeValue,\n                        // Create a load of replacement nodes\n                        before = createText(nv.substr(0, termIdx)),\n                        value = nv.substr(termIdx, term.length),\n                        after = createText(nv.substr(termIdx + term.length)),\n                        text = createText(value),\n                        container = createElm('span');\n                    container.className = cssClass;\n                    container.appendChild(text);\n                    pn.insertBefore(before, node);\n                    pn.insertBefore(container, node);\n                    pn.insertBefore(after, node);\n                    pn.removeChild(node);\n                }\n            }\n        }\n    }\n\n    /**\n     * Removes highlight to nodes matching passed string\n     * @param  {String} term\n     * @param  {String} cssClass Css class to remove\n     */\n    unhighlight(term, cssClass) {\n        let highlightedNodes = this.tf.tbl.querySelectorAll(`.${cssClass}`);\n        for (let i = 0; i < highlightedNodes.length; i++) {\n            let n = highlightedNodes[i];\n            let nodeVal = getText(n);\n\n            if (nodeVal.toLowerCase().indexOf(term.toLowerCase()) !== -1) {\n                let parentNode = n.parentNode;\n                parentNode.replaceChild(createText(nodeVal), n);\n                parentNode.normalize();\n            }\n        }\n    }\n\n    /**\n     * Clear all occurrences of highlighted nodes\n     */\n    unhighlightAll() {\n        if (!this.tf.highlightKeywords) {\n            return;\n        }\n        // iterate filters values to unhighlight all values\n        this.tf.getFiltersValue().forEach((val) => {\n            if (isArray(val)) {\n                val.forEach((item) =>\n                    this.unhighlight(item, this.highlightCssClass));\n            } else {\n                this.unhighlight(val, this.highlightCssClass);\n            }\n        });\n    }\n\n    /**  Remove feature */\n    destroy() {\n        this.emitter.off(\n            ['before-filtering', 'destroy'],\n            () => this.unhighlightAll()\n        );\n        this.emitter.off(\n            ['highlight-keyword'],\n            (tf, cell, term) => this._processTerm(cell, term)\n        );\n    }\n\n    /**\n     * Ensure filtering operators are handled before highlighting any match\n     * @param {any} Table cell to look searched term into\n     * @param {any} Searched termIdx\n     */\n    _processTerm(cell, term) {\n        let tf = this.tf;\n        let reLk = new RegExp(rgxEsc(tf.lkOperator));\n        let reEq = new RegExp(tf.eqOperator);\n        let reSt = new RegExp(tf.stOperator);\n        let reEn = new RegExp(tf.enOperator);\n        let reLe = new RegExp(tf.leOperator);\n        let reGe = new RegExp(tf.geOperator);\n        let reL = new RegExp(tf.lwOperator);\n        let reG = new RegExp(tf.grOperator);\n        let reD = new RegExp(tf.dfOperator);\n\n        term = term\n            .replace(reLk, '')\n            .replace(reEq, '')\n            .replace(reSt, '')\n            .replace(reEn, '');\n\n        if (reLe.test(term) || reGe.test(term) || reL.test(term) ||\n            reG.test(term) || reD.test(term)) {\n            term = getText(cell);\n        }\n\n        if (term === '') {\n            return;\n        }\n\n        this.highlight(cell, term, this.highlightCssClass);\n    }\n}\n"
  },
  {
    "__docId__": 482,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "HighlightKeyword",
    "memberof": "src/modules/highlightKeywords.js",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/highlightKeywords.js",
    "importStyle": "{HighlightKeyword}",
    "description": "Highlight matched keywords upon filtering",
    "lineNumber": 11,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "HighlightKeyword"
      }
    ],
    "interface": false
  },
  {
    "__docId__": 483,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#constructor",
    "access": null,
    "description": "Creates an instance of HighlightKeyword",
    "lineNumber": 17,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 484,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "highlightCssClass",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#highlightCssClass",
    "access": null,
    "description": "Css class for highlighted term",
    "lineNumber": 24,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 485,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tf",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#tf",
    "access": null,
    "description": "TableFilter instance",
    "lineNumber": 30,
    "type": {
      "nullable": null,
      "types": [
        "TableFilter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 486,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emitter",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#emitter",
    "access": null,
    "description": "TableFilter's emitter instance",
    "lineNumber": 36,
    "type": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 487,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#init",
    "access": null,
    "description": "Initializes HighlightKeyword instance",
    "lineNumber": 42,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 488,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "highlight",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#highlight",
    "access": null,
    "description": "Highlight occurences of searched term in passed node",
    "lineNumber": 61,
    "params": [
      {
        "nullable": null,
        "types": [
          "Node"
        ],
        "spread": false,
        "optional": false,
        "name": "node",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "term",
        "description": "Searched term"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cssClass",
        "description": "Css class name\n\nTODO: refactor this method"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 489,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "unhighlight",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#unhighlight",
    "access": null,
    "description": "Removes highlight to nodes matching passed string",
    "lineNumber": 101,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "term",
        "description": ""
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cssClass",
        "description": "Css class to remove"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 490,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "unhighlightAll",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#unhighlightAll",
    "access": null,
    "description": "Clear all occurrences of highlighted nodes",
    "lineNumber": 118,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 491,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#destroy",
    "access": null,
    "description": " Remove feature",
    "lineNumber": 134,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 492,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_processTerm",
    "memberof": "src/modules/highlightKeywords.js~HighlightKeyword",
    "longname": "src/modules/highlightKeywords.js~HighlightKeyword#_processTerm",
    "access": null,
    "description": "Ensure filtering operators are handled before highlighting any match",
    "lineNumber": 150,
    "params": [
      {
        "nullable": null,
        "types": [
          "any"
        ],
        "spread": false,
        "optional": false,
        "name": "Table",
        "description": "cell to look searched term into"
      },
      {
        "nullable": null,
        "types": [
          "any"
        ],
        "spread": false,
        "optional": false,
        "name": "Searched",
        "description": "termIdx"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 493,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/loader.js",
    "memberof": null,
    "longname": "src/modules/loader.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, createText, elm, removeElm} from '../dom';\nimport {isFn, EMPTY_FN} from '../types';\nimport {root} from '../root';\nimport {NONE} from '../const';\n\nconst EVENTS = [\n    'before-filtering',\n    'before-populating-filter',\n    'before-page-change',\n    'before-clearing-filters',\n    'before-page-length-change',\n    'before-reset-page',\n    'before-reset-page-length',\n    'before-loading-extensions',\n    'before-loading-themes'\n];\n\n/**\n * Activity indicator\n *\n * @export\n * @class Loader\n * @extends {Feature}\n */\nexport class Loader extends Feature {\n\n    /**\n     * Creates an instance of Loader.\n     *\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'loader');\n\n        let f = this.config;\n\n        /**\n         * ID of custom container element\n         * @type {String}\n         */\n        this.targetId = f.loader_target_id || null;\n\n        /**\n         * Loader container DOM element\n         * @type {DOMElement}\n         */\n        this.cont = null;\n\n        /**\n         * Text displayed when indicator is visible\n         * @type {String}\n         */\n        this.text = f.loader_text || 'Loading...';\n\n        /**\n         * Custom HTML injected in Loader's container element\n         * @type {String}\n         */\n        this.html = f.loader_html || null;\n\n        /**\n         * Css class for Loader's container element\n         * @type {String}\n         */\n        this.cssClass = f.loader_css_class || 'loader';\n\n        /**\n         * Close delay in milliseconds\n         * @type {Number}\n         */\n        this.closeDelay = 250;\n\n        /**\n         * Callback fired when loader is displayed\n         * @type {Function}\n         */\n        this.onShow = isFn(f.on_show_loader) ?\n            f.on_show_loader : EMPTY_FN;\n\n        /**\n         * Callback fired when loader is closed\n         * @type {Function}\n         */\n        this.onHide = isFn(f.on_hide_loader) ? f.on_hide_loader : EMPTY_FN;\n    }\n\n    /**\n     * Initializes Loader instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        let tf = this.tf;\n        let emitter = this.emitter;\n\n        let containerDiv = createElm('div');\n        containerDiv.className = this.cssClass;\n\n        let targetEl = !this.targetId ?\n            tf.tbl.parentNode : elm(this.targetId);\n        if (!this.targetId) {\n            targetEl.insertBefore(containerDiv, tf.tbl);\n        } else {\n            targetEl.appendChild(containerDiv);\n        }\n        this.cont = containerDiv;\n        if (!this.html) {\n            this.cont.appendChild(createText(this.text));\n        } else {\n            this.cont.innerHTML = this.html;\n        }\n\n        this.show(NONE);\n\n        // Subscribe to events\n        emitter.on(EVENTS, () => this.show(''));\n        emitter.on(EVENTS, () => this.show(NONE));\n\n        /**\n         * @inherited\n         */\n        this.initialized = true;\n    }\n\n    /**\n     * Shows or hides activity indicator\n     * @param {String} Two possible values: '' or 'none'\n     */\n    show(p) {\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        let displayLoader = () => {\n            if (!this.cont) {\n                return;\n            }\n            if (p !== NONE) {\n                this.onShow(this);\n            }\n            this.cont.style.display = p;\n            if (p === NONE) {\n                this.onHide(this);\n            }\n        };\n\n        let t = p === NONE ? this.closeDelay : 1;\n        root.setTimeout(displayLoader, t);\n    }\n\n    /**\n     * Removes feature\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        let emitter = this.emitter;\n\n        removeElm(this.cont);\n        this.cont = null;\n\n        // Unsubscribe to events\n        emitter.off(EVENTS, () => this.show(''));\n        emitter.off(EVENTS, () => this.show(NONE));\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 494,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "EVENTS",
    "memberof": "src/modules/loader.js",
    "longname": "src/modules/loader.js~EVENTS",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/loader.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 495,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Loader",
    "memberof": "src/modules/loader.js",
    "longname": "src/modules/loader.js~Loader",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/loader.js",
    "importStyle": "{Loader}",
    "description": "Activity indicator",
    "lineNumber": 26,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "Loader"
      }
    ],
    "interface": false,
    "extends": [
      "Feature"
    ]
  },
  {
    "__docId__": 496,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#constructor",
    "access": null,
    "description": "Creates an instance of Loader.",
    "lineNumber": 33,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 497,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "targetId",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#targetId",
    "access": null,
    "description": "ID of custom container element",
    "lineNumber": 42,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 498,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#cont",
    "access": null,
    "description": "Loader container DOM element",
    "lineNumber": 48,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 499,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "text",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#text",
    "access": null,
    "description": "Text displayed when indicator is visible",
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 500,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "html",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#html",
    "access": null,
    "description": "Custom HTML injected in Loader's container element",
    "lineNumber": 60,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 501,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cssClass",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#cssClass",
    "access": null,
    "description": "Css class for Loader's container element",
    "lineNumber": 66,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 502,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "closeDelay",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#closeDelay",
    "access": null,
    "description": "Close delay in milliseconds",
    "lineNumber": 72,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 503,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onShow",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#onShow",
    "access": null,
    "description": "Callback fired when loader is displayed",
    "lineNumber": 78,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 504,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onHide",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#onHide",
    "access": null,
    "description": "Callback fired when loader is closed",
    "lineNumber": 85,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 505,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#init",
    "access": null,
    "description": "Initializes Loader instance",
    "lineNumber": 91,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 506,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#cont",
    "access": null,
    "description": null,
    "lineNumber": 109,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 507,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#initialized",
    "access": null,
    "description": "",
    "lineNumber": 125,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 508,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "show",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#show",
    "access": null,
    "description": "Shows or hides activity indicator",
    "lineNumber": 132,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "Two",
        "description": "possible values: '' or 'none'"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 509,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#destroy",
    "access": null,
    "description": "Removes feature",
    "lineNumber": 157,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 510,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#cont",
    "access": null,
    "description": null,
    "lineNumber": 165,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 511,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/loader.js~Loader",
    "longname": "src/modules/loader.js~Loader#initialized",
    "access": null,
    "description": null,
    "lineNumber": 171,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 512,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/noResults.js",
    "memberof": null,
    "longname": "src/modules/noResults.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, elm, removeElm} from '../dom';\nimport {isEmpty, isFn, EMPTY_FN} from '../types';\nimport {NONE} from '../const';\n\n/**\n * UI when filtering yields no matches\n * @export\n * @class NoResults\n * @extends {Feature}\n */\nexport class NoResults extends Feature {\n\n    /**\n     * Creates an instance of NoResults\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'noResults');\n\n        //configuration object\n        let f = this.config.no_results_message;\n\n        /**\n         * Text (accepts HTML)\n         * @type {String}\n         */\n        this.content = f.content || 'No results';\n\n        /**\n         * Custom container DOM element\n         * @type {DOMElement}\n         */\n        this.customContainer = f.custom_container || null;\n\n        /**\n         * ID of custom container element\n         * @type {String}\n         */\n        this.customContainerId = f.custom_container_id || null;\n\n        /**\n         * Indicates if UI is contained in a external element\n         * @type {Boolean}\n         * @private\n         */\n        this.isExternal = !isEmpty(this.customContainer) ||\n            !isEmpty(this.customContainerId);\n\n        /**\n         * Css class assigned to container element\n         * @type {String}\n         */\n        this.cssClass = f.css_class || 'no-results';\n\n        /**\n         * Stores container DOM element\n         * @type {DOMElement}\n         */\n        this.cont = null;\n\n        /**\n         * Callback fired before the message is displayed\n         * @type {Function}\n         */\n        this.onBeforeShow = isFn(f.on_before_show_msg) ?\n            f.on_before_show_msg : EMPTY_FN;\n\n        /**\n         * Callback fired after the message is displayed\n         * @type {Function}\n         */\n        this.onAfterShow = isFn(f.on_after_show_msg) ?\n            f.on_after_show_msg : EMPTY_FN;\n\n        /**\n         * Callback fired before the message is hidden\n         * @type {Function}\n         */\n        this.onBeforeHide = isFn(f.on_before_hide_msg) ?\n            f.on_before_hide_msg : EMPTY_FN;\n\n        /**\n         * Callback fired after the message is hidden\n         * @type {Function}\n         */\n        this.onAfterHide = isFn(f.on_after_hide_msg) ?\n            f.on_after_hide_msg : EMPTY_FN;\n    }\n\n    /**\n     * Initializes NoResults instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n        let tf = this.tf;\n        let target = this.customContainer || elm(this.customContainerId) ||\n            tf.tbl;\n\n        //container\n        let cont = createElm('div');\n        cont.className = this.cssClass;\n        cont.innerHTML = this.content;\n\n        if (this.isExternal) {\n            target.appendChild(cont);\n        } else {\n            target.parentNode.insertBefore(cont, target.nextSibling);\n        }\n\n        this.cont = cont;\n\n        // subscribe to after-filtering event\n        this.emitter.on(['after-filtering'], () => this.toggle());\n\n        /**\n         * @inherited\n         */\n        this.initialized = true;\n\n        this.hide();\n    }\n\n    /**\n     * Toggle no results message\n     */\n    toggle() {\n        if (this.tf.getValidRowsNb() > 0) {\n            this.hide();\n        } else {\n            this.show();\n        }\n    }\n\n    /**\n     * Show no results message\n     */\n    show() {\n        if (!this.initialized || !this.isEnabled()) {\n            return;\n        }\n        this.onBeforeShow(this.tf, this);\n\n        this.setWidth();\n        this.cont.style.display = 'block';\n\n        this.onAfterShow(this.tf, this);\n    }\n\n    /**\n     * Hide no results message\n     */\n    hide() {\n        if (!this.initialized || !this.isEnabled()) {\n            return;\n        }\n        this.onBeforeHide(this.tf, this);\n\n        this.cont.style.display = NONE;\n\n        this.onAfterHide(this.tf, this);\n    }\n\n    /**\n     * Sets no results container width\n     * @private\n     */\n    setWidth() {\n        if (!this.initialized || this.isExternal || !this.isEnabled()) {\n            return;\n        }\n        let tf = this.tf;\n        if (tf.gridLayout) {\n            let gridLayout = tf.feature('gridLayout');\n            this.cont.style.width = gridLayout.tblCont.clientWidth + 'px';\n        } else {\n            this.cont.style.width = (tf.tbl.tHead ? tf.tbl.tHead.clientWidth :\n                tf.tbl.tBodies[0].clientWidth) + 'px';\n        }\n    }\n\n    /**\n     * Remove feature\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n        removeElm(this.cont);\n        this.cont = null;\n        // unsubscribe to after-filtering event\n        this.emitter.off(['after-filtering'], () => this.toggle());\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 513,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "NoResults",
    "memberof": "src/modules/noResults.js",
    "longname": "src/modules/noResults.js~NoResults",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/noResults.js",
    "importStyle": "{NoResults}",
    "description": "UI when filtering yields no matches",
    "lineNumber": 12,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "NoResults"
      }
    ],
    "interface": false,
    "extends": [
      "Feature"
    ]
  },
  {
    "__docId__": 514,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#constructor",
    "access": null,
    "description": "Creates an instance of NoResults",
    "lineNumber": 18,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 515,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "content",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#content",
    "access": null,
    "description": "Text (accepts HTML)",
    "lineNumber": 28,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 516,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "customContainer",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#customContainer",
    "access": null,
    "description": "Custom container DOM element",
    "lineNumber": 34,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 517,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "customContainerId",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#customContainerId",
    "access": null,
    "description": "ID of custom container element",
    "lineNumber": 40,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 518,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isExternal",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#isExternal",
    "access": "private",
    "description": "Indicates if UI is contained in a external element",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 519,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cssClass",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#cssClass",
    "access": null,
    "description": "Css class assigned to container element",
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 520,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#cont",
    "access": null,
    "description": "Stores container DOM element",
    "lineNumber": 60,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 521,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeShow",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#onBeforeShow",
    "access": null,
    "description": "Callback fired before the message is displayed",
    "lineNumber": 66,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 522,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterShow",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#onAfterShow",
    "access": null,
    "description": "Callback fired after the message is displayed",
    "lineNumber": 73,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 523,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeHide",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#onBeforeHide",
    "access": null,
    "description": "Callback fired before the message is hidden",
    "lineNumber": 80,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 524,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterHide",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#onAfterHide",
    "access": null,
    "description": "Callback fired after the message is hidden",
    "lineNumber": 87,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 525,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#init",
    "access": null,
    "description": "Initializes NoResults instance",
    "lineNumber": 94,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 526,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#cont",
    "access": null,
    "description": null,
    "lineNumber": 113,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 527,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#initialized",
    "access": null,
    "description": "",
    "lineNumber": 121,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 528,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "toggle",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#toggle",
    "access": null,
    "description": "Toggle no results message",
    "lineNumber": 129,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 529,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "show",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#show",
    "access": null,
    "description": "Show no results message",
    "lineNumber": 140,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 530,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "hide",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#hide",
    "access": null,
    "description": "Hide no results message",
    "lineNumber": 155,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 531,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setWidth",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#setWidth",
    "access": "private",
    "description": "Sets no results container width",
    "lineNumber": 170,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 532,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#destroy",
    "access": null,
    "description": "Remove feature",
    "lineNumber": 187,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 533,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cont",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#cont",
    "access": null,
    "description": null,
    "lineNumber": 192,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 534,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/noResults.js~NoResults",
    "longname": "src/modules/noResults.js~NoResults#initialized",
    "access": null,
    "description": null,
    "lineNumber": 196,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 535,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/paging.js",
    "memberof": null,
    "longname": "src/modules/paging.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, createOpt, createText, elm, removeElm} from '../dom';\nimport {isArray, isFn, isNull, EMPTY_FN} from '../types';\nimport {addEvt, keyCode, removeEvt} from '../event';\nimport {INPUT, SELECT, NONE, ENTER_KEY} from '../const';\n\n/**\n * Paging UI component\n * @export\n * @class Paging\n * @extends {Feature}\n */\nexport class Paging extends Feature {\n\n    /**\n     * Creates an instance of Paging\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'paging');\n\n        // Configuration object\n        var f = this.config;\n\n        /**\n         * Css class for the paging buttons (previous, next, etc.)\n         * @type {String}\n         */\n        this.btnPageCssClass = f.paging_btn_css_class || 'pgInp';\n\n         /**\n         * Main select DOM element\n         * @type {DOMElement}\n         */\n        this.pagingSlc = null;\n\n        /**\n         * Results per page select DOM element\n         * @type {DOMElement}\n         */\n        this.resultsPerPageSlc = null;\n\n        /**\n         * ID of custom container element\n         * @type {String}\n         */\n        this.pagingTgtId = f.paging_target_id || null;\n\n        /**\n         * Number of rows contained in a page\n         * @type {Number}\n         */\n        this.pagingLength = !isNaN(f.paging_length) ? f.paging_length : 10;\n\n        /**\n         * ID of custom container element for the results per page selector\n         * @type {String}\n         */\n        this.resultsPerPageTgtId = f.results_per_page_target_id || null;\n\n        /**\n         * Css class for the paging select element\n         * @type {String}\n         */\n        this.pgSlcCssClass = f.paging_slc_css_class || 'pgSlc';\n\n        /**\n         * Css class for the paging input element\n         * @type {String}\n         */\n        this.pgInpCssClass = f.paging_inp_css_class || 'pgNbInp';\n\n        /**\n         * Label and values for the results per page select, example of usage:\n         * ['Records: ', [10,25,50,100]]\n         * @type {Array}\n         */\n        this.resultsPerPage = f.results_per_page || null;\n\n        /**\n         * Determines if results per page is configured\n         * @type {Boolean}\n         */\n        this.hasResultsPerPage = isArray(this.resultsPerPage);\n\n        /**\n         * Css class for the results per page select\n         * @type {String}\n         */\n        this.resultsSlcCssClass = f.results_slc_css_class || 'rspg';\n\n        /**\n         * Css class for the label preceding results per page select\n         * @type {String}\n         */\n        this.resultsSpanCssClass = f.results_span_css_class || 'rspgSpan';\n\n        /**\n         * Index of the first row of current page\n         * @type {Number}\n         * @private\n         */\n        this.startPagingRow = 0;\n\n        /**\n         * Total number of pages\n         * @type {Number}\n         * @private\n         */\n        this.nbPages = 0;\n\n        /**\n         * Current page number\n         * @type {Number}\n         * @private\n         */\n        this.currentPageNb = 1;\n\n        /**\n         * Next page button text\n         * @type {String}\n         */\n        this.btnNextPageText = f.btn_next_page_text || '>';\n\n        /**\n         * Previous page button text\n         * @type {String}\n         */\n        this.btnPrevPageText = f.btn_prev_page_text || '<';\n\n        /**\n         * Last page button text\n         * @type {String}\n         */\n        this.btnLastPageText = f.btn_last_page_text || '>|';\n\n        /**\n         * First page button text\n         * @type {String}\n         */\n        this.btnFirstPageText = f.btn_first_page_text || '|<';\n\n        /**\n         * Next page button HTML\n         * @type {String}\n         */\n        this.btnNextPageHtml = f.btn_next_page_html ||\n            (!tf.enableIcons ? null :\n                '<input type=\"button\" value=\"\" class=\"' + this.btnPageCssClass +\n                ' nextPage\" title=\"Next page\" />');\n\n        /**\n         * Previous page button HTML\n         * @type {String}\n         */\n        this.btnPrevPageHtml = f.btn_prev_page_html ||\n            (!tf.enableIcons ? null :\n                '<input type=\"button\" value=\"\" class=\"' + this.btnPageCssClass +\n                ' previousPage\" title=\"Previous page\" />');\n\n        /**\n         * First page button HTML\n         * @type {String}\n         */\n        this.btnFirstPageHtml = f.btn_first_page_html ||\n            (!tf.enableIcons ? null :\n                '<input type=\"button\" value=\"\" class=\"' + this.btnPageCssClass +\n                ' firstPage\" title=\"First page\" />');\n\n        /**\n         * Last page button HTML\n         * @type {String}\n         */\n        this.btnLastPageHtml = f.btn_last_page_html ||\n            (!tf.enableIcons ? null :\n                '<input type=\"button\" value=\"\" class=\"' + this.btnPageCssClass +\n                ' lastPage\" title=\"Last page\" />');\n\n        /**\n         * Text preceeding page selector drop-down\n         * @type {String}\n         */\n        this.pageText = f.page_text || ' Page ';\n\n        /**\n         * Text after page selector drop-down\n         * @type {String}\n         */\n        this.ofText = f.of_text || ' of ';\n\n        /**\n         * Css class for the span containing total number of pages\n         * @type {String}\n         */\n        this.nbPgSpanCssClass = f.nb_pages_css_class || 'nbpg';\n\n        /**\n         * Determines if paging buttons are enabled (default: true)\n         * @type {Boolean}\n         */\n        this.hasPagingBtns = f.paging_btns === false ? false : true;\n\n        /**\n         * Defines page selector type, two possible values: 'select', 'input'\n         * @type {String}\n         */\n        this.pageSelectorType = f.page_selector_type || SELECT;\n\n        /**\n         * Callback fired before the page is changed\n         * @type {Function}\n         */\n        this.onBeforeChangePage = isFn(f.on_before_change_page) ?\n            f.on_before_change_page : EMPTY_FN;\n\n        /**\n         * Callback fired after the page is changed\n         * @type {Function}\n         */\n        this.onAfterChangePage = isFn(f.on_after_change_page) ?\n            f.on_after_change_page : EMPTY_FN;\n\n        /**\n         * Label preciding results per page select\n         * @type {DOMElement}\n         * @private\n         */\n        this.slcResultsTxt = null;\n        /**\n         * Span containing next page button\n         * @type {DOMElement}\n         * @private\n         */\n        this.btnNextCont = null;\n        /**\n         * Span containing previous page button\n         * @type {DOMElement}\n         * @private\n         */\n        this.btnPrevCont = null;\n        /**\n         * Span containing last page button\n         * @type {DOMElement}\n         * @private\n         */\n        this.btnLastCont = null;\n        /**\n         * Span containing first page button\n         * @type {DOMElement}\n         * @private\n         */\n        this.btnFirstCont = null;\n        /**\n         * Span for tot nb pages\n         * @type {DOMElement}\n         * @private\n         */\n        this.pgCont = null;\n        /**\n         * Span preceding pages select (contains 'Page')\n         * @type {DOMElement}\n         * @private\n         */\n        this.pgBefore = null;\n        /**\n         * Span following pages select (contains ' of ')\n         * @type {DOMElement}\n         * @private\n         */\n        this.pgAfter = null;\n\n        var start_row = tf.refRow;\n        var nrows = tf.getRowsNb(true);\n        //calculates page nb\n        this.nbPages = Math.ceil((nrows - start_row) / this.pagingLength);\n\n        var o = this;\n        /**\n         * Paging DOM events handlers\n         * @type {String}\n         * @private\n         */\n        this.evt = {\n            slcIndex() {\n                return (o.pageSelectorType === SELECT) ?\n                    o.pagingSlc.options.selectedIndex :\n                    parseInt(o.pagingSlc.value, 10) - 1;\n            },\n            nbOpts() {\n                return (o.pageSelectorType === SELECT) ?\n                    parseInt(o.pagingSlc.options.length, 10) - 1 :\n                    (o.nbPages - 1);\n            },\n            next() {\n                var nextIndex = o.evt.slcIndex() < o.evt.nbOpts() ?\n                    o.evt.slcIndex() + 1 : 0;\n                o.changePage(nextIndex);\n            },\n            prev() {\n                var prevIndex = o.evt.slcIndex() > 0 ?\n                    o.evt.slcIndex() - 1 : o.evt.nbOpts();\n                o.changePage(prevIndex);\n            },\n            last() {\n                o.changePage(o.evt.nbOpts());\n            },\n            first() {\n                o.changePage(0);\n            },\n            _detectKey(e) {\n                var key = keyCode(e);\n                if (key === ENTER_KEY) {\n                    if (tf.sorted) {\n                        tf.filter();\n                        o.changePage(o.evt.slcIndex());\n                    } else {\n                        o.changePage();\n                    }\n                    this.blur();\n                }\n            },\n            slcPagesChange: null,\n            nextEvt: null,\n            prevEvt: null,\n            lastEvt: null,\n            firstEvt: null\n        };\n    }\n\n    /**\n     * Initialize DOM elements\n     */\n    init() {\n        var slcPages;\n        var tf = this.tf;\n        var evt = this.evt;\n\n        if (this.initialized) {\n            return;\n        }\n\n        // Check resultsPerPage is in expected format and initialise the\n        // results per page component\n        if (this.hasResultsPerPage) {\n            if (this.resultsPerPage.length < 2) {\n                this.hasResultsPerPage = false;\n            } else {\n                this.pagingLength = this.resultsPerPage[1][0];\n                this.setResultsPerPage();\n            }\n        }\n\n        evt.slcPagesChange = (event) => {\n            var slc = event.target;\n            this.changePage(slc.selectedIndex);\n        };\n\n        // Paging drop-down list selector\n        if (this.pageSelectorType === SELECT) {\n            slcPages = createElm(SELECT);\n            slcPages.className = this.pgSlcCssClass;\n            addEvt(slcPages, 'change', evt.slcPagesChange);\n        }\n\n        // Paging input selector\n        if (this.pageSelectorType === INPUT) {\n            slcPages = createElm(INPUT, ['value', this.currentPageNb]);\n            slcPages.className = this.pgInpCssClass;\n            addEvt(slcPages, 'keypress', evt._detectKey);\n        }\n\n        // btns containers\n        var btnNextSpan = createElm('span');\n        var btnPrevSpan = createElm('span');\n        var btnLastSpan = createElm('span');\n        var btnFirstSpan = createElm('span');\n\n        if (this.hasPagingBtns) {\n            // Next button\n            if (!this.btnNextPageHtml) {\n                var btnNext = createElm(INPUT,\n                    ['type', 'button'],\n                    ['value', this.btnNextPageText],\n                    ['title', 'Next']\n                );\n                btnNext.className = this.btnPageCssClass;\n                addEvt(btnNext, 'click', evt.next);\n                btnNextSpan.appendChild(btnNext);\n            } else {\n                btnNextSpan.innerHTML = this.btnNextPageHtml;\n                addEvt(btnNextSpan, 'click', evt.next);\n            }\n            // Previous button\n            if (!this.btnPrevPageHtml) {\n                var btnPrev = createElm(INPUT,\n                    ['type', 'button'],\n                    ['value', this.btnPrevPageText],\n                    ['title', 'Previous']\n                );\n                btnPrev.className = this.btnPageCssClass;\n                addEvt(btnPrev, 'click', evt.prev);\n                btnPrevSpan.appendChild(btnPrev);\n            } else {\n                btnPrevSpan.innerHTML = this.btnPrevPageHtml;\n                addEvt(btnPrevSpan, 'click', evt.prev);\n            }\n            // Last button\n            if (!this.btnLastPageHtml) {\n                var btnLast = createElm(INPUT,\n                    ['type', 'button'],\n                    ['value', this.btnLastPageText],\n                    ['title', 'Last']\n                );\n                btnLast.className = this.btnPageCssClass;\n                addEvt(btnLast, 'click', evt.last);\n                btnLastSpan.appendChild(btnLast);\n            } else {\n                btnLastSpan.innerHTML = this.btnLastPageHtml;\n                addEvt(btnLastSpan, 'click', evt.last);\n            }\n            // First button\n            if (!this.btnFirstPageHtml) {\n                var btnFirst = createElm(INPUT,\n                    ['type', 'button'],\n                    ['value', this.btnFirstPageText],\n                    ['title', 'First']\n                );\n                btnFirst.className = this.btnPageCssClass;\n                addEvt(btnFirst, 'click', evt.first);\n                btnFirstSpan.appendChild(btnFirst);\n            } else {\n                btnFirstSpan.innerHTML = this.btnFirstPageHtml;\n                addEvt(btnFirstSpan, 'click', evt.first);\n            }\n        }\n\n        // paging elements (buttons+drop-down list) are added to defined element\n        if (!this.pagingTgtId) {\n            tf.setToolbar();\n        }\n        var targetEl = !this.pagingTgtId ? tf.mDiv : elm(this.pagingTgtId);\n        targetEl.appendChild(btnFirstSpan);\n        targetEl.appendChild(btnPrevSpan);\n\n        var pgBeforeSpan = createElm('span');\n        pgBeforeSpan.appendChild(createText(this.pageText));\n        pgBeforeSpan.className = this.nbPgSpanCssClass;\n        targetEl.appendChild(pgBeforeSpan);\n        targetEl.appendChild(slcPages);\n        var pgAfterSpan = createElm('span');\n        pgAfterSpan.appendChild(createText(this.ofText));\n        pgAfterSpan.className = this.nbPgSpanCssClass;\n        targetEl.appendChild(pgAfterSpan);\n        var pgSpan = createElm('span');\n        pgSpan.className = this.nbPgSpanCssClass;\n        pgSpan.appendChild(createText(' ' + this.nbPages + ' '));\n        targetEl.appendChild(pgSpan);\n        targetEl.appendChild(btnNextSpan);\n        targetEl.appendChild(btnLastSpan);\n\n        this.btnNextCont = btnNextSpan;\n        this.btnPrevCont = btnPrevSpan;\n        this.btnLastCont = btnLastSpan;\n        this.btnFirstCont = btnFirstSpan;\n        this.pgCont = pgSpan;\n        this.pgBefore = pgBeforeSpan;\n        this.pgAfter = pgAfterSpan;\n        this.pagingSlc = slcPages;\n\n        this.setPagingInfo();\n\n        if (!tf.fltGrid) {\n            tf.validateAllRows();\n            this.setPagingInfo(tf.validRowsIndex);\n        }\n\n        this.emitter.on(['after-filtering'], () => this.resetPagingInfo());\n        this.emitter.on(['change-page'],\n            (tf, pageNumber) => this.setPage(pageNumber));\n        this.emitter.on(['change-page-results'],\n            (tf, pageLength) => this.changeResultsPerPage(pageLength));\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Reset paging when filters are already instantiated\n     * @param {Boolean} filterTable Execute filtering once paging instanciated\n     */\n    reset(filterTable = false) {\n        var tf = this.tf;\n        if (this.isEnabled()) {\n            return;\n        }\n        this.enable();\n        this.init();\n\n        if (filterTable) {\n            tf.filter();\n        }\n    }\n\n    /**\n     * Reset paging info from scratch after a filtering process\n     */\n    resetPagingInfo() {\n        this.startPagingRow = 0;\n        this.currentPageNb = 1;\n        this.setPagingInfo(this.tf.validRowsIndex);\n    }\n\n    /**\n     * Calculate number of pages based on valid rows\n     * Refresh paging select according to number of pages\n     * @param {Array} validRows Collection of valid rows\n     */\n    setPagingInfo(validRows) {\n        var tf = this.tf;\n        var mdiv = !this.pagingTgtId ? tf.mDiv : elm(this.pagingTgtId);\n\n        //store valid rows indexes\n        tf.validRowsIndex = validRows || tf.getValidRows(true);\n\n        //calculate nb of pages\n        this.nbPages = Math.ceil(tf.validRowsIndex.length / this.pagingLength);\n        //refresh page nb span\n        this.pgCont.innerHTML = this.nbPages;\n        //select clearing shortcut\n        if (this.pageSelectorType === SELECT) {\n            this.pagingSlc.innerHTML = '';\n        }\n\n        if (this.nbPages > 0) {\n            mdiv.style.visibility = 'visible';\n            if (this.pageSelectorType === SELECT) {\n                for (var z = 0; z < this.nbPages; z++) {\n                    var opt = createOpt(z + 1, z * this.pagingLength, false);\n                    this.pagingSlc.options[z] = opt;\n                }\n            } else {\n                //input type\n                this.pagingSlc.value = this.currentPageNb;\n            }\n\n        } else {\n            /*** if no results paging select and buttons are hidden ***/\n            mdiv.style.visibility = 'hidden';\n        }\n        this.groupByPage(tf.validRowsIndex);\n    }\n\n    /**\n     * Group table rows by page and display valid rows\n     * @param  {Array} validRows Collection of valid rows\n     */\n    groupByPage(validRows) {\n        var tf = this.tf;\n        var rows = tf.tbl.rows;\n        var startPagingRow = parseInt(this.startPagingRow, 10);\n        var endPagingRow = startPagingRow + parseInt(this.pagingLength, 10);\n\n        //store valid rows indexes\n        if (validRows) {\n            tf.validRowsIndex = validRows;\n        }\n\n        //this loop shows valid rows of current page\n        for (var h = 0, len = tf.getValidRowsNb(true); h < len; h++) {\n            var validRowIdx = tf.validRowsIndex[h];\n            var r = rows[validRowIdx];\n            var isRowValid = r.getAttribute('validRow');\n            var rowDisplayed = false;\n\n            if (h >= startPagingRow && h < endPagingRow) {\n                if (isNull(isRowValid) || Boolean(isRowValid === 'true')) {\n                    r.style.display = '';\n                    rowDisplayed = true;\n                }\n            } else {\n                r.style.display = NONE;\n            }\n            this.emitter.emit('row-paged', tf, validRowIdx, h, rowDisplayed);\n        }\n\n        // broadcast grouping by page\n        this.emitter.emit('grouped-by-page', tf, this);\n    }\n\n    /**\n     * Return the current page number\n     * @return {Number} Page number\n     */\n    getPage() {\n        return this.currentPageNb;\n    }\n\n    /**\n     * Show page defined by passed argument (string or number):\n     * @param {String}/{Number} cmd possible string values: 'next',\n     *   'previous', 'last', 'first' or page number as per param\n     */\n    setPage(cmd) {\n        var tf = this.tf;\n        if (!tf.isInitialized() || !this.isEnabled()) {\n            return;\n        }\n        var btnEvt = this.evt,\n            cmdtype = typeof cmd;\n        if (cmdtype === 'string') {\n            switch (cmd.toLowerCase()) {\n                case 'next':\n                    btnEvt.next();\n                    break;\n                case 'previous':\n                    btnEvt.prev();\n                    break;\n                case 'last':\n                    btnEvt.last();\n                    break;\n                case 'first':\n                    btnEvt.first();\n                    break;\n                default:\n                    btnEvt.next();\n                    break;\n            }\n        }\n        else if (cmdtype === 'number') {\n            this.changePage(cmd - 1);\n        }\n    }\n\n    /**\n     * Generates UI elements for the number of results per page drop-down\n     */\n    setResultsPerPage() {\n        var tf = this.tf;\n        var evt = this.evt;\n\n        if (this.resultsPerPageSlc || !this.resultsPerPage) {\n            return;\n        }\n\n        evt.slcResultsChange = (ev) => {\n            this.onChangeResultsPerPage();\n            ev.target.blur();\n        };\n\n        var slcR = createElm(SELECT);\n        slcR.className = this.resultsSlcCssClass;\n        var slcRText = this.resultsPerPage[0],\n            slcROpts = this.resultsPerPage[1];\n        var slcRSpan = createElm('span');\n        slcRSpan.className = this.resultsSpanCssClass;\n\n        // results per page select is added to external element\n        if (!this.resultsPerPageTgtId) {\n            tf.setToolbar();\n        }\n        var targetEl = !this.resultsPerPageTgtId ?\n            tf.rDiv : elm(this.resultsPerPageTgtId);\n        slcRSpan.appendChild(createText(slcRText));\n\n        var help = tf.feature('help');\n        if (help && help.btn) {\n            help.btn.parentNode.insertBefore(slcRSpan, help.btn);\n            help.btn.parentNode.insertBefore(slcR, help.btn);\n        } else {\n            targetEl.appendChild(slcRSpan);\n            targetEl.appendChild(slcR);\n        }\n\n        for (var r = 0; r < slcROpts.length; r++) {\n            var currOpt = new Option(slcROpts[r], slcROpts[r], false, false);\n            slcR.options[r] = currOpt;\n        }\n        addEvt(slcR, 'change', evt.slcResultsChange);\n        this.slcResultsTxt = slcRSpan;\n        this.resultsPerPageSlc = slcR;\n    }\n\n    /**\n     * Remove number of results per page UI elements\n     */\n    removeResultsPerPage() {\n        var tf = this.tf;\n        if (!tf.isInitialized() || !this.resultsPerPageSlc ||\n            !this.resultsPerPage) {\n            return;\n        }\n        if (this.resultsPerPageSlc) {\n            removeElm(this.resultsPerPageSlc);\n        }\n        if (this.slcResultsTxt) {\n            removeElm(this.slcResultsTxt);\n        }\n        this.resultsPerPageSlc = null;\n        this.slcResultsTxt = null;\n    }\n\n    /**\n     * Change the page based on passed index\n     * @param {Number} index Index of the page (0-n)\n     */\n    changePage(index) {\n        var tf = this.tf;\n\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        this.emitter.emit('before-page-change', tf, (index + 1));\n\n        if (index === null) {\n            index = this.pageSelectorType === SELECT ?\n                this.pagingSlc.options.selectedIndex : this.pagingSlc.value - 1;\n        }\n        if (index >= 0 && index <= (this.nbPages - 1)) {\n            this.onBeforeChangePage(this, (index + 1));\n\n            this.currentPageNb = parseInt(index, 10) + 1;\n            if (this.pageSelectorType === SELECT) {\n                this.pagingSlc.options[index].selected = true;\n            } else {\n                this.pagingSlc.value = this.currentPageNb;\n            }\n\n            this.startPagingRow = (this.pageSelectorType === SELECT) ?\n                this.pagingSlc.value : (index * this.pagingLength);\n\n            this.groupByPage();\n\n            this.onAfterChangePage(this, (index + 1));\n        }\n\n        this.emitter.emit('after-page-change', tf, (index + 1));\n    }\n\n    /**\n     * Change the number of results per page based on passed value\n     * @param {String} val The number of results per page\n     */\n    changeResultsPerPage(val) {\n        if (!this.isEnabled() || isNaN(val)) {\n            return;\n        }\n\n        this.resultsPerPageSlc.value = val;\n        this.onChangeResultsPerPage();\n    }\n\n    /**\n     * Change rows according to page results drop-down\n     */\n    onChangeResultsPerPage() {\n        var tf = this.tf;\n\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        this.emitter.emit('before-page-length-change', tf);\n\n        var slcR = this.resultsPerPageSlc;\n        var slcIndex = slcR.selectedIndex;\n        var slcPagesSelIndex = (this.pageSelectorType === SELECT) ?\n            this.pagingSlc.selectedIndex :\n            parseInt(this.pagingSlc.value - 1, 10);\n        this.pagingLength = parseInt(slcR.options[slcIndex].value, 10);\n        this.startPagingRow = this.pagingLength * slcPagesSelIndex;\n\n        if (!isNaN(this.pagingLength)) {\n            if (this.startPagingRow >= tf.nbFilterableRows) {\n                this.startPagingRow = (tf.nbFilterableRows - this.pagingLength);\n            }\n            this.setPagingInfo();\n\n            if (this.pageSelectorType === SELECT) {\n                var slcIdx =\n                    (this.pagingSlc.options.length - 1 <= slcPagesSelIndex) ?\n                        (this.pagingSlc.options.length - 1) : slcPagesSelIndex;\n                this.pagingSlc.options[slcIdx].selected = true;\n            }\n        }\n\n        this.emitter.emit('after-page-length-change', tf, this.pagingLength);\n    }\n\n    /**\n     * Re-set page nb at page re-load\n     */\n    resetPage() {\n        var tf = this.tf;\n        if (!this.isEnabled()) {\n            return;\n        }\n        this.emitter.emit('before-reset-page', tf);\n        var pgNb = tf.feature('store').getPageNb();\n        if (pgNb !== '') {\n            this.changePage((pgNb - 1));\n        }\n        this.emitter.emit('after-reset-page', tf, pgNb);\n    }\n\n    /**\n     * Re-set page length value at page re-load\n     */\n    resetPageLength() {\n        var tf = this.tf;\n        if (!this.isEnabled()) {\n            return;\n        }\n        this.emitter.emit('before-reset-page-length', tf);\n        var pglenIndex = tf.feature('store').getPageLength();\n\n        if (pglenIndex !== '') {\n            this.resultsPerPageSlc.options[pglenIndex].selected = true;\n            this.changeResultsPerPage();\n        }\n        this.emitter.emit('after-reset-page-length', tf, pglenIndex);\n    }\n\n    /**\n     * Remove paging feature\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        var evt = this.evt;\n\n        if (this.pagingSlc) {\n            if (this.pageSelectorType === SELECT) {\n                removeEvt(this.pagingSlc, 'change', evt.slcPagesChange);\n            }\n            else if (this.pageSelectorType === INPUT) {\n                removeEvt(this.pagingSlc, 'keypress', evt._detectKey);\n            }\n            removeElm(this.pagingSlc);\n        }\n\n        if (this.btnNextCont) {\n            removeEvt(this.btnNextCont, 'click', evt.next);\n            removeElm(this.btnNextCont);\n            this.btnNextCont = null;\n        }\n\n        if (this.btnPrevCont) {\n            removeEvt(this.btnPrevCont, 'click', evt.prev);\n            removeElm(this.btnPrevCont);\n            this.btnPrevCont = null;\n        }\n\n        if (this.btnLastCont) {\n            removeEvt(this.btnLastCont, 'click', evt.last);\n            removeElm(this.btnLastCont);\n            this.btnLastCont = null;\n        }\n\n        if (this.btnFirstCont) {\n            removeEvt(this.btnFirstCont, 'click', evt.first);\n            removeElm(this.btnFirstCont);\n            this.btnFirstCont = null;\n        }\n\n        if (this.pgBefore) {\n            removeElm(this.pgBefore);\n            this.pgBefore = null;\n        }\n\n        if (this.pgAfter) {\n            removeElm(this.pgAfter);\n            this.pgAfter = null;\n        }\n\n        if (this.pgCont) {\n            removeElm(this.pgCont);\n            this.pgCont = null;\n        }\n\n        if (this.hasResultsPerPage) {\n            this.removeResultsPerPage();\n        }\n\n        this.emitter.off(['after-filtering'], () => this.resetPagingInfo());\n        this.emitter.off(['change-page'],\n            (tf, pageNumber) => this.setPage(pageNumber));\n        this.emitter.off(['change-page-results'],\n            (tf, pageLength) => this.changeResultsPerPage(pageLength));\n\n        this.pagingSlc = null;\n        this.nbPages = 0;\n        this.disable();\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 536,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Paging",
    "memberof": "src/modules/paging.js",
    "longname": "src/modules/paging.js~Paging",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/paging.js",
    "importStyle": "{Paging}",
    "description": "Paging UI component",
    "lineNumber": 13,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "Paging"
      }
    ],
    "interface": false,
    "extends": [
      "Feature"
    ]
  },
  {
    "__docId__": 537,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#constructor",
    "access": null,
    "description": "Creates an instance of Paging",
    "lineNumber": 19,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 538,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnPageCssClass",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnPageCssClass",
    "access": null,
    "description": "Css class for the paging buttons (previous, next, etc.)",
    "lineNumber": 29,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 539,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pagingSlc",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pagingSlc",
    "access": null,
    "description": "Main select DOM element",
    "lineNumber": 35,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 540,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "resultsPerPageSlc",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resultsPerPageSlc",
    "access": null,
    "description": "Results per page select DOM element",
    "lineNumber": 41,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 541,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pagingTgtId",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pagingTgtId",
    "access": null,
    "description": "ID of custom container element",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 542,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pagingLength",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pagingLength",
    "access": null,
    "description": "Number of rows contained in a page",
    "lineNumber": 53,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 543,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "resultsPerPageTgtId",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resultsPerPageTgtId",
    "access": null,
    "description": "ID of custom container element for the results per page selector",
    "lineNumber": 59,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 544,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgSlcCssClass",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgSlcCssClass",
    "access": null,
    "description": "Css class for the paging select element",
    "lineNumber": 65,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 545,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgInpCssClass",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgInpCssClass",
    "access": null,
    "description": "Css class for the paging input element",
    "lineNumber": 71,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 546,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "resultsPerPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resultsPerPage",
    "access": null,
    "description": "Label and values for the results per page select, example of usage:\n['Records: ', [10,25,50,100]]",
    "lineNumber": 78,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 547,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasResultsPerPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#hasResultsPerPage",
    "access": null,
    "description": "Determines if results per page is configured",
    "lineNumber": 84,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 548,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "resultsSlcCssClass",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resultsSlcCssClass",
    "access": null,
    "description": "Css class for the results per page select",
    "lineNumber": 90,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 549,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "resultsSpanCssClass",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resultsSpanCssClass",
    "access": null,
    "description": "Css class for the label preceding results per page select",
    "lineNumber": 96,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 550,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "startPagingRow",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#startPagingRow",
    "access": "private",
    "description": "Index of the first row of current page",
    "lineNumber": 103,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 551,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbPages",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#nbPages",
    "access": "private",
    "description": "Total number of pages",
    "lineNumber": 110,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 552,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "currentPageNb",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#currentPageNb",
    "access": "private",
    "description": "Current page number",
    "lineNumber": 117,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 553,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnNextPageText",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnNextPageText",
    "access": null,
    "description": "Next page button text",
    "lineNumber": 123,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 554,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnPrevPageText",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnPrevPageText",
    "access": null,
    "description": "Previous page button text",
    "lineNumber": 129,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 555,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnLastPageText",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnLastPageText",
    "access": null,
    "description": "Last page button text",
    "lineNumber": 135,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 556,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnFirstPageText",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnFirstPageText",
    "access": null,
    "description": "First page button text",
    "lineNumber": 141,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 557,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnNextPageHtml",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnNextPageHtml",
    "access": null,
    "description": "Next page button HTML",
    "lineNumber": 147,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 558,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnPrevPageHtml",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnPrevPageHtml",
    "access": null,
    "description": "Previous page button HTML",
    "lineNumber": 156,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 559,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnFirstPageHtml",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnFirstPageHtml",
    "access": null,
    "description": "First page button HTML",
    "lineNumber": 165,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 560,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnLastPageHtml",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnLastPageHtml",
    "access": null,
    "description": "Last page button HTML",
    "lineNumber": 174,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 561,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageText",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pageText",
    "access": null,
    "description": "Text preceeding page selector drop-down",
    "lineNumber": 183,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 562,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "ofText",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#ofText",
    "access": null,
    "description": "Text after page selector drop-down",
    "lineNumber": 189,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 563,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbPgSpanCssClass",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#nbPgSpanCssClass",
    "access": null,
    "description": "Css class for the span containing total number of pages",
    "lineNumber": 195,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 564,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasPagingBtns",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#hasPagingBtns",
    "access": null,
    "description": "Determines if paging buttons are enabled (default: true)",
    "lineNumber": 201,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 565,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageSelectorType",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pageSelectorType",
    "access": null,
    "description": "Defines page selector type, two possible values: 'select', 'input'",
    "lineNumber": 207,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 566,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeChangePage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#onBeforeChangePage",
    "access": null,
    "description": "Callback fired before the page is changed",
    "lineNumber": 213,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 567,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterChangePage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#onAfterChangePage",
    "access": null,
    "description": "Callback fired after the page is changed",
    "lineNumber": 220,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 568,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "slcResultsTxt",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#slcResultsTxt",
    "access": "private",
    "description": "Label preciding results per page select",
    "lineNumber": 228,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 569,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnNextCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnNextCont",
    "access": "private",
    "description": "Span containing next page button",
    "lineNumber": 234,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 570,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnPrevCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnPrevCont",
    "access": "private",
    "description": "Span containing previous page button",
    "lineNumber": 240,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 571,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnLastCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnLastCont",
    "access": "private",
    "description": "Span containing last page button",
    "lineNumber": 246,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 572,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnFirstCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnFirstCont",
    "access": "private",
    "description": "Span containing first page button",
    "lineNumber": 252,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 573,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgCont",
    "access": "private",
    "description": "Span for tot nb pages",
    "lineNumber": 258,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 574,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgBefore",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgBefore",
    "access": "private",
    "description": "Span preceding pages select (contains 'Page')",
    "lineNumber": 264,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 575,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgAfter",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgAfter",
    "access": "private",
    "description": "Span following pages select (contains ' of ')",
    "lineNumber": 270,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 576,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbPages",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#nbPages",
    "access": null,
    "description": null,
    "lineNumber": 275,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 577,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "evt",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#evt",
    "access": "private",
    "description": "Paging DOM events handlers",
    "lineNumber": 283,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 578,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#init",
    "access": null,
    "description": "Initialize DOM elements",
    "lineNumber": 333,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 579,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasResultsPerPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#hasResultsPerPage",
    "access": null,
    "description": null,
    "lineNumber": 346,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 580,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pagingLength",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pagingLength",
    "access": null,
    "description": null,
    "lineNumber": 348,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 581,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnNextCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnNextCont",
    "access": null,
    "description": null,
    "lineNumber": 461,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 582,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnPrevCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnPrevCont",
    "access": null,
    "description": null,
    "lineNumber": 462,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 583,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnLastCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnLastCont",
    "access": null,
    "description": null,
    "lineNumber": 463,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 584,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnFirstCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnFirstCont",
    "access": null,
    "description": null,
    "lineNumber": 464,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 585,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgCont",
    "access": null,
    "description": null,
    "lineNumber": 465,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 586,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgBefore",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgBefore",
    "access": null,
    "description": null,
    "lineNumber": 466,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 587,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgAfter",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgAfter",
    "access": null,
    "description": null,
    "lineNumber": 467,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 588,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pagingSlc",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pagingSlc",
    "access": null,
    "description": null,
    "lineNumber": 468,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 589,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#initialized",
    "access": null,
    "description": null,
    "lineNumber": 484,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 590,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "reset",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#reset",
    "access": null,
    "description": "Reset paging when filters are already instantiated",
    "lineNumber": 491,
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "filterTable",
        "description": "Execute filtering once paging instanciated"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 591,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "resetPagingInfo",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resetPagingInfo",
    "access": null,
    "description": "Reset paging info from scratch after a filtering process",
    "lineNumber": 507,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 592,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "startPagingRow",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#startPagingRow",
    "access": null,
    "description": null,
    "lineNumber": 508,
    "undocument": true,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 593,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "currentPageNb",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#currentPageNb",
    "access": null,
    "description": null,
    "lineNumber": 509,
    "undocument": true,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 594,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setPagingInfo",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#setPagingInfo",
    "access": null,
    "description": "Calculate number of pages based on valid rows\nRefresh paging select according to number of pages",
    "lineNumber": 518,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "validRows",
        "description": "Collection of valid rows"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 595,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbPages",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#nbPages",
    "access": null,
    "description": null,
    "lineNumber": 526,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 596,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "groupByPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#groupByPage",
    "access": null,
    "description": "Group table rows by page and display valid rows",
    "lineNumber": 557,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "validRows",
        "description": "Collection of valid rows"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 597,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#getPage",
    "access": null,
    "description": "Return the current page number",
    "lineNumber": 594,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": "Page number"
    },
    "generator": false
  },
  {
    "__docId__": 598,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#setPage",
    "access": null,
    "description": "Show page defined by passed argument (string or number):",
    "lineNumber": 603,
    "params": [
      {
        "nullable": null,
        "types": [
          "String}/{Number"
        ],
        "spread": false,
        "optional": false,
        "name": "cmd",
        "description": "possible string values: 'next',\n  'previous', 'last', 'first' or page number as per param"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 599,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setResultsPerPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#setResultsPerPage",
    "access": null,
    "description": "Generates UI elements for the number of results per page drop-down",
    "lineNumber": 637,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 600,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "slcResultsTxt",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#slcResultsTxt",
    "access": null,
    "description": null,
    "lineNumber": 679,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 601,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "resultsPerPageSlc",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resultsPerPageSlc",
    "access": null,
    "description": null,
    "lineNumber": 680,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 602,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "removeResultsPerPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#removeResultsPerPage",
    "access": null,
    "description": "Remove number of results per page UI elements",
    "lineNumber": 686,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 603,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "resultsPerPageSlc",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resultsPerPageSlc",
    "access": null,
    "description": null,
    "lineNumber": 698,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 604,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "slcResultsTxt",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#slcResultsTxt",
    "access": null,
    "description": null,
    "lineNumber": 699,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 605,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "changePage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#changePage",
    "access": null,
    "description": "Change the page based on passed index",
    "lineNumber": 706,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "index",
        "description": "Index of the page (0-n)"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 606,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "currentPageNb",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#currentPageNb",
    "access": null,
    "description": null,
    "lineNumber": 722,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 607,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "startPagingRow",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#startPagingRow",
    "access": null,
    "description": null,
    "lineNumber": 729,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 608,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "changeResultsPerPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#changeResultsPerPage",
    "access": null,
    "description": "Change the number of results per page based on passed value",
    "lineNumber": 744,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "val",
        "description": "The number of results per page"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 609,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onChangeResultsPerPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#onChangeResultsPerPage",
    "access": null,
    "description": "Change rows according to page results drop-down",
    "lineNumber": 756,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 610,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pagingLength",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pagingLength",
    "access": null,
    "description": null,
    "lineNumber": 770,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 611,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "startPagingRow",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#startPagingRow",
    "access": null,
    "description": null,
    "lineNumber": 771,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 612,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "startPagingRow",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#startPagingRow",
    "access": null,
    "description": null,
    "lineNumber": 775,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 613,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "resetPage",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resetPage",
    "access": null,
    "description": "Re-set page nb at page re-load",
    "lineNumber": 793,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 614,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "resetPageLength",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#resetPageLength",
    "access": null,
    "description": "Re-set page length value at page re-load",
    "lineNumber": 809,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 615,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#destroy",
    "access": null,
    "description": "Remove paging feature",
    "lineNumber": 827,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 616,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnNextCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnNextCont",
    "access": null,
    "description": null,
    "lineNumber": 847,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 617,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnPrevCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnPrevCont",
    "access": null,
    "description": null,
    "lineNumber": 853,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 618,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnLastCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnLastCont",
    "access": null,
    "description": null,
    "lineNumber": 859,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 619,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnFirstCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#btnFirstCont",
    "access": null,
    "description": null,
    "lineNumber": 865,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 620,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgBefore",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgBefore",
    "access": null,
    "description": null,
    "lineNumber": 870,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 621,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgAfter",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgAfter",
    "access": null,
    "description": null,
    "lineNumber": 875,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 622,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pgCont",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pgCont",
    "access": null,
    "description": null,
    "lineNumber": 880,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 623,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pagingSlc",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#pagingSlc",
    "access": null,
    "description": null,
    "lineNumber": 893,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 624,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbPages",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#nbPages",
    "access": null,
    "description": null,
    "lineNumber": 894,
    "undocument": true,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 625,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/paging.js~Paging",
    "longname": "src/modules/paging.js~Paging#initialized",
    "access": null,
    "description": null,
    "lineNumber": 896,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 626,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/popupFilter.js",
    "memberof": null,
    "longname": "src/modules/popupFilter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {isFn, isUndef, EMPTY_FN} from '../types';\nimport {createElm, removeElm} from '../dom';\nimport {addEvt, cancelEvt, stopEvt, targetEvt, removeEvt} from '../event';\nimport {INPUT, NONE, CHECKLIST, MULTIPLE} from '../const';\nimport {root} from '../root';\n\n/**\n * Pop-up filter component\n * @export\n * @class PopupFilter\n * @extends {Feature}\n */\nexport class PopupFilter extends Feature {\n\n    /**\n     * Creates an instance of PopupFilter\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'popupFilters');\n\n        // Configuration object\n        let f = this.config;\n\n        // Enable external filters\n        tf.isExternalFlt = true;\n        tf.externalFltTgtIds = [];\n\n        /**\n         * Close active popup filter upon filtering, enabled by default\n         * @type {Boolean}\n         */\n        this.closeOnFiltering = f.popup_filters_close_on_filtering === false ?\n            false : true;\n\n        /**\n         * Filter icon path\n         * @type {String}\n         */\n        this.iconPath = f.popup_filters_image ||\n            tf.themesPath + 'icn_filter.gif';\n\n        /**\n         * Active filter icon path\n         * @type {string}\n         */\n        this.activeIconPath = f.popup_filters_image_active ||\n            tf.themesPath + 'icn_filterActive.gif';\n\n        /**\n         * HTML for the filter icon\n         * @type {string}\n         */\n        this.iconHtml = f.popup_filters_image_html ||\n            '<img src=\"' + this.iconPath + '\" alt=\"Column filter\" />';\n\n        /**\n         * Css class assigned to filter container element\n         * @type {String}\n         */\n        this.containerCssClass = f.popup_div_css_class || 'popUpFilter';\n\n        /**\n         * Ensure filter's container element width matches column width, enabled\n         * by default\n         * @type {Boolean}\n         */\n        this.adjustToContainer =\n            f.popup_filters_adjust_to_container === false ? false : true;\n\n        /**\n         * Callback fired before a popup filter is opened\n         * @type {Function}\n         */\n        this.onBeforeOpen = isFn(f.on_before_popup_filter_open) ?\n            f.on_before_popup_filter_open : EMPTY_FN;\n\n        /**\n         * Callback fired after a popup filter is opened\n         * @type {Function}\n         */\n        this.onAfterOpen = isFn(f.on_after_popup_filter_open) ?\n            f.on_after_popup_filter_open : EMPTY_FN;\n\n        /**\n         * Callback fired before a popup filter is closed\n         * @type {Function}\n         */\n        this.onBeforeClose = isFn(f.on_before_popup_filter_close) ?\n            f.on_before_popup_filter_close : EMPTY_FN;\n\n        /**\n         * Callback fired after a popup filter is closed\n         * @type {Function}\n         */\n        this.onAfterClose = isFn(f.on_after_popup_filter_close) ?\n            f.on_after_popup_filter_close : EMPTY_FN;\n\n        /**\n         * Collection of filters spans\n         * @type {Array}\n         * @private\n         */\n        this.fltSpans = [];\n\n        /**\n         * Collection of filters icons\n         * @type {Array}\n         * @private\n         */\n        this.fltIcons = [];\n\n        /**\n         * Collection of filters icons cached after pop-up filters are removed\n         * @type {Array}\n         * @private\n         */\n        this.filtersCache = null;\n\n        /**\n         * Collection of filters containers\n         * @type {Array}\n         * @private\n         */\n        this.fltElms = this.filtersCache || [];\n\n        /**\n         * Prefix for pop-up filter container ID\n         * @type {String}\n         * @private\n         */\n        this.prfxDiv = 'popup_';\n\n        /**\n         * Column index of popup filter currently active\n         * @type {Number}\n         * @private\n         */\n        this.activeFilterIdx = -1;\n    }\n\n    /**\n     * Click event handler for pop-up filter icon\n     * @private\n     */\n    onClick(evt) {\n        let elm = targetEvt(evt).parentNode;\n        let colIndex = parseInt(elm.getAttribute('ci'), 10);\n\n        this.closeAll(colIndex);\n        this.toggle(colIndex);\n\n        if (this.adjustToContainer) {\n            let cont = this.fltElms[colIndex],\n                header = this.tf.getHeaderElement(colIndex),\n                headerWidth = header.clientWidth * 0.95;\n            cont.style.width = parseInt(headerWidth, 10) + 'px';\n        }\n        cancelEvt(evt);\n        stopEvt(evt);\n    }\n\n    /**\n     * Mouse-up event handler handling popup filter auto-close behaviour\n     * @private\n     */\n    onMouseup(evt) {\n        if (this.activeFilterIdx === -1) {\n            return;\n        }\n        let targetElm = targetEvt(evt);\n        let activeFlt = this.fltElms[this.activeFilterIdx];\n        let icon = this.fltIcons[this.activeFilterIdx];\n\n        if (icon === targetElm) {\n            return;\n        }\n\n        while (targetElm && targetElm !== activeFlt) {\n            targetElm = targetElm.parentNode;\n        }\n\n        if (targetElm !== activeFlt) {\n            this.close(this.activeFilterIdx);\n        }\n\n        return;\n    }\n\n    /**\n     * Initialize DOM elements\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        let tf = this.tf;\n\n        // Override headers row index if no grouped headers\n        // TODO: Because of the filters row generation, headers row index needs\n        // adjusting: prevent useless row generation\n        if (tf.headersRow <= 1 && isNaN(tf.config().headers_row_index)) {\n            tf.headersRow = 0;\n        }\n\n        // Adjust headers row index for grid-layout mode\n        // TODO: Because of the filters row generation, headers row index needs\n        // adjusting: prevent useless row generation\n        if (tf.gridLayout) {\n            tf.headersRow--;\n            this.buildIcons();\n        }\n\n        // subscribe to events\n        this.emitter.on(['before-filtering'], () => this.setIconsState());\n        this.emitter.on(['after-filtering'], () => this.closeAll());\n        this.emitter.on(['cell-processed'],\n            (tf, cellIndex) => this.changeState(cellIndex, true));\n        this.emitter.on(['filters-row-inserted'], () => this.buildIcons());\n        this.emitter.on(['before-filter-init'],\n            (tf, colIndex) => this.build(colIndex));\n\n        /** @inherited */\n        this.initialized = true;\n    }\n\n    /**\n     * Reset previously destroyed feature\n     */\n    reset() {\n        this.enable();\n        this.init();\n        this.buildIcons();\n        this.buildAll();\n    }\n\n    /**\n     * Build all filters icons\n     */\n    buildIcons() {\n        let tf = this.tf;\n\n        // TODO: Because of the filters row generation, headers row index needs\n        // adjusting: prevent useless row generation\n        tf.headersRow++;\n\n        for (let i = 0; i < tf.nbCells; i++) {\n            if (tf.getFilterType(i) === NONE) {\n                continue;\n            }\n            let icon = createElm('span', ['ci', i]);\n            icon.innerHTML = this.iconHtml;\n            let header = tf.getHeaderElement(i);\n            header.appendChild(icon);\n            addEvt(icon, 'click', (evt) => this.onClick(evt));\n            this.fltSpans[i] = icon;\n            this.fltIcons[i] = icon.firstChild;\n        }\n    }\n\n    /**\n     * Build all pop-up filters elements\n     */\n    buildAll() {\n        for (let i = 0; i < this.filtersCache.length; i++) {\n            this.build(i, this.filtersCache[i]);\n        }\n    }\n\n    /**\n     * Build a specified pop-up filter elements\n     * @param  {Number} colIndex Column index\n     * @param  {Object} div      Optional container DOM element\n     */\n    build(colIndex, div) {\n        let tf = this.tf;\n        let contId = `${this.prfxDiv}${tf.id}_${colIndex}`;\n        let cont = div || createElm('div', ['id', contId]);\n        cont.className = this.containerCssClass;\n        tf.externalFltTgtIds.push(cont.id);\n\n        let header = tf.getHeaderElement(colIndex);\n        header.insertBefore(cont, header.firstChild);\n        addEvt(cont, 'click', (evt) => stopEvt(evt));\n        this.fltElms[colIndex] = cont;\n    }\n\n    /**\n     * Toggle visibility of specified filter\n     * @param  {Number} colIndex Column index\n     */\n    toggle(colIndex) {\n        if (!this.isOpen(colIndex)) {\n            this.open(colIndex);\n        } else {\n            this.close(colIndex);\n        }\n    }\n\n    /**\n     * Open popup filter of specified column\n     * @param {Number} colIndex Column index\n     */\n    open(colIndex) {\n        let tf = this.tf,\n            container = this.fltElms[colIndex];\n\n        this.onBeforeOpen(this, container, colIndex);\n\n        container.style.display = 'block';\n        this.activeFilterIdx = colIndex;\n        addEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\n\n        if (tf.getFilterType(colIndex) === INPUT) {\n            let flt = tf.getFilterElement(colIndex);\n            if (flt) {\n                flt.focus();\n            }\n        }\n\n        this.onAfterOpen(this, container, colIndex);\n    }\n\n    /**\n     * Close popup filter of specified column\n     * @param {Number} colIndex Column index\n     */\n    close(colIndex) {\n        let container = this.fltElms[colIndex];\n\n        this.onBeforeClose(this, container, colIndex);\n\n        container.style.display = NONE;\n        if (this.activeFilterIdx === colIndex) {\n            this.activeFilterIdx = -1;\n        }\n        removeEvt(root, 'mouseup', (evt) => this.onMouseup(evt));\n\n        this.onAfterClose(this, container, colIndex);\n    }\n\n    /**\n     * Check if popup filter for specified column is open\n     * @param {Number} colIndex Column index\n     * @returns {Boolean}\n     */\n    isOpen(colIndex) {\n        return this.fltElms[colIndex].style.display === 'block';\n    }\n\n    /**\n     * Close all filters excepted for the specified one if any\n     * @param  {Number} exceptIdx Column index of the filter to not close\n     */\n    closeAll(exceptIdx) {\n        // Do not close filters only if argument is undefined and close on\n        // filtering option is disabled\n        if (isUndef(exceptIdx) && !this.closeOnFiltering) {\n            return;\n        }\n        for (let i = 0; i < this.fltElms.length; i++) {\n            if (i === exceptIdx) {\n                continue;\n            }\n            let fltType = tf.getFilterType(i);\n            let isMultipleFilter =\n                (fltType === CHECKLIST || fltType === MULTIPLE);\n\n            // Always hide all single selection filter types but hide multiple\n            // selection filter types only if index set\n            if (!isMultipleFilter || !isUndef(exceptIdx)) {\n                this.close(i);\n            }\n        }\n    }\n\n    /**\n     * Build all the icons representing the pop-up filters\n     */\n    setIconsState() {\n        for (let i = 0; i < this.fltIcons.length; i++) {\n            this.changeState(i, false);\n        }\n    }\n\n    /**\n     * Apply specified icon state\n     * @param  {Number} colIndex Column index\n     * @param  {Boolean} active   Apply active state\n     */\n    changeState(colIndex, active) {\n        let icon = this.fltIcons[colIndex];\n        if (icon) {\n            icon.src = active ? this.activeIconPath : this.iconPath;\n        }\n    }\n\n    /**\n     * Remove pop-up filters\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        this.filtersCache = [];\n        for (let i = 0; i < this.fltElms.length; i++) {\n            let container = this.fltElms[i],\n                icon = this.fltSpans[i],\n                iconImg = this.fltIcons[i];\n            if (container) {\n                removeElm(container);\n                this.filtersCache[i] = container;\n            }\n            container = null;\n            if (icon) {\n                removeElm(icon);\n            }\n            icon = null;\n            if (iconImg) {\n                removeElm(iconImg);\n            }\n            iconImg = null;\n        }\n        this.fltElms = [];\n        this.fltSpans = [];\n        this.fltIcons = [];\n\n        // TODO: expose an API to handle external filter IDs\n        tf.externalFltTgtIds = [];\n\n        // unsubscribe to events\n        this.emitter.off(['before-filtering'], () => this.setIconsState());\n        this.emitter.off(['after-filtering'], () => this.closeAll());\n        this.emitter.off(['cell-processed'],\n            (tf, cellIndex) => this.changeState(cellIndex, true));\n        this.emitter.off(['filters-row-inserted'], () => this.buildIcons());\n        this.emitter.off(['before-filter-init'],\n            (tf, colIndex) => this.build(colIndex));\n\n        this.initialized = false;\n    }\n\n}\n"
  },
  {
    "__docId__": 627,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "PopupFilter",
    "memberof": "src/modules/popupFilter.js",
    "longname": "src/modules/popupFilter.js~PopupFilter",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/popupFilter.js",
    "importStyle": "{PopupFilter}",
    "description": "Pop-up filter component",
    "lineNumber": 14,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "PopupFilter"
      }
    ],
    "interface": false,
    "extends": [
      "Feature"
    ]
  },
  {
    "__docId__": 628,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#constructor",
    "access": null,
    "description": "Creates an instance of PopupFilter",
    "lineNumber": 20,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 629,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "closeOnFiltering",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#closeOnFiltering",
    "access": null,
    "description": "Close active popup filter upon filtering, enabled by default",
    "lineNumber": 34,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 630,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "iconPath",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#iconPath",
    "access": null,
    "description": "Filter icon path",
    "lineNumber": 41,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 631,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activeIconPath",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#activeIconPath",
    "access": null,
    "description": "Active filter icon path",
    "lineNumber": 48,
    "type": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 632,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "iconHtml",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#iconHtml",
    "access": null,
    "description": "HTML for the filter icon",
    "lineNumber": 55,
    "type": {
      "nullable": null,
      "types": [
        "string"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 633,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "containerCssClass",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#containerCssClass",
    "access": null,
    "description": "Css class assigned to filter container element",
    "lineNumber": 62,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 634,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "adjustToContainer",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#adjustToContainer",
    "access": null,
    "description": "Ensure filter's container element width matches column width, enabled\nby default",
    "lineNumber": 69,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 635,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeOpen",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#onBeforeOpen",
    "access": null,
    "description": "Callback fired before a popup filter is opened",
    "lineNumber": 76,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 636,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterOpen",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#onAfterOpen",
    "access": null,
    "description": "Callback fired after a popup filter is opened",
    "lineNumber": 83,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 637,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeClose",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#onBeforeClose",
    "access": null,
    "description": "Callback fired before a popup filter is closed",
    "lineNumber": 90,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 638,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterClose",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#onAfterClose",
    "access": null,
    "description": "Callback fired after a popup filter is closed",
    "lineNumber": 97,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 639,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltSpans",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#fltSpans",
    "access": "private",
    "description": "Collection of filters spans",
    "lineNumber": 105,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 640,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltIcons",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#fltIcons",
    "access": "private",
    "description": "Collection of filters icons",
    "lineNumber": 112,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 641,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersCache",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#filtersCache",
    "access": "private",
    "description": "Collection of filters icons cached after pop-up filters are removed",
    "lineNumber": 119,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 642,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltElms",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#fltElms",
    "access": "private",
    "description": "Collection of filters containers",
    "lineNumber": 126,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 643,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxDiv",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#prfxDiv",
    "access": "private",
    "description": "Prefix for pop-up filter container ID",
    "lineNumber": 133,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 644,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activeFilterIdx",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#activeFilterIdx",
    "access": "private",
    "description": "Column index of popup filter currently active",
    "lineNumber": 140,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 645,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onClick",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#onClick",
    "access": "private",
    "description": "Click event handler for pop-up filter icon",
    "lineNumber": 147,
    "params": [
      {
        "name": "evt",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 646,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onMouseup",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#onMouseup",
    "access": "private",
    "description": "Mouse-up event handler handling popup filter auto-close behaviour",
    "lineNumber": 168,
    "params": [
      {
        "name": "evt",
        "types": [
          "*"
        ]
      }
    ],
    "generator": false
  },
  {
    "__docId__": 647,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#init",
    "access": null,
    "description": "Initialize DOM elements",
    "lineNumber": 194,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 648,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#initialized",
    "access": null,
    "description": null,
    "lineNumber": 226,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 649,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "reset",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#reset",
    "access": null,
    "description": "Reset previously destroyed feature",
    "lineNumber": 232,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 650,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "buildIcons",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#buildIcons",
    "access": null,
    "description": "Build all filters icons",
    "lineNumber": 242,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 651,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "buildAll",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#buildAll",
    "access": null,
    "description": "Build all pop-up filters elements",
    "lineNumber": 266,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 652,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "build",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#build",
    "access": null,
    "description": "Build a specified pop-up filter elements",
    "lineNumber": 277,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "div",
        "description": "Optional container DOM element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 653,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "toggle",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#toggle",
    "access": null,
    "description": "Toggle visibility of specified filter",
    "lineNumber": 294,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 654,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "open",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#open",
    "access": null,
    "description": "Open popup filter of specified column",
    "lineNumber": 306,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 655,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activeFilterIdx",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#activeFilterIdx",
    "access": null,
    "description": null,
    "lineNumber": 313,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 656,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "close",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#close",
    "access": null,
    "description": "Close popup filter of specified column",
    "lineNumber": 330,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 657,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activeFilterIdx",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#activeFilterIdx",
    "access": null,
    "description": null,
    "lineNumber": 337,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 658,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isOpen",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#isOpen",
    "access": null,
    "description": "Check if popup filter for specified column is open",
    "lineNumber": 349,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 659,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "closeAll",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#closeAll",
    "access": null,
    "description": "Close all filters excepted for the specified one if any",
    "lineNumber": 357,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "exceptIdx",
        "description": "Column index of the filter to not close"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 660,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setIconsState",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#setIconsState",
    "access": null,
    "description": "Build all the icons representing the pop-up filters",
    "lineNumber": 382,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 661,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "changeState",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#changeState",
    "access": null,
    "description": "Apply specified icon state",
    "lineNumber": 393,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "active",
        "description": "Apply active state"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 662,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#destroy",
    "access": null,
    "description": "Remove pop-up filters",
    "lineNumber": 403,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 663,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersCache",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#filtersCache",
    "access": null,
    "description": null,
    "lineNumber": 408,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 664,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltElms",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#fltElms",
    "access": null,
    "description": null,
    "lineNumber": 427,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 665,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltSpans",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#fltSpans",
    "access": null,
    "description": null,
    "lineNumber": 428,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 666,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltIcons",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#fltIcons",
    "access": null,
    "description": null,
    "lineNumber": 429,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 667,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/popupFilter.js~PopupFilter",
    "longname": "src/modules/popupFilter.js~PopupFilter#initialized",
    "access": null,
    "description": null,
    "lineNumber": 443,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 668,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/rowsCounter.js",
    "memberof": null,
    "longname": "src/modules/rowsCounter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {createElm, createText, elm, removeElm} from '../dom';\nimport {isFn, EMPTY_FN} from '../types';\n\n/**\n * Rows counter UI component\n * @export\n * @class RowsCounter\n * @extends {Feature}\n */\nexport class RowsCounter extends Feature {\n\n    /**\n     * Creates an instance of RowsCounter\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'rowsCounter');\n\n        // TableFilter configuration\n        let f = this.config;\n\n        /**\n         * ID of custom container element\n         * @type {String}\n         */\n        this.targetId = f.rows_counter_target_id || null;\n\n        /**\n         * Container DOM element\n         * @type {DOMElement}\n         * @private\n         */\n        this.container = null;\n\n        /**\n         * Container DOM element for label displaying the total number of rows\n         * @type {DOMElement}\n         * @private\n         */\n        this.label = null;\n\n        /**\n         * Text preceding the total number of rows\n         * @type {String}\n         */\n        this.text = f.rows_counter_text || 'Rows: ';\n\n        /**\n         * Separator symbol appearing between the first and last visible rows of\n         * current page when paging is enabled. ie: Rows: 31-40 / 70\n         * @type {String}\n         */\n        this.fromToTextSeparator = f.from_to_text_separator || '-';\n\n        /**\n         * Separator symbol appearing between the first and last visible rows of\n         * current page and the total number of filterable rows when paging is\n         * enabled. ie: Rows: 31-40 / 70\n         * @type {String}\n         */\n        this.overText = f.over_text || ' / ';\n\n        /**\n         * Css class for container element\n         * @type {String}\n         */\n        this.cssClass = f.tot_rows_css_class || 'tot';\n\n        /**\n         * Callback fired before the counter is refreshed\n         * @type {Function}\n         */\n        this.onBeforeRefreshCounter = isFn(f.on_before_refresh_counter) ?\n            f.on_before_refresh_counter : EMPTY_FN;\n\n        /**\n         * Callback fired after the counter is refreshed\n         * @type {Function}\n         */\n        this.onAfterRefreshCounter = isFn(f.on_after_refresh_counter) ?\n            f.on_after_refresh_counter : EMPTY_FN;\n    }\n\n    /**\n     * Initializes RowsCounter instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        let tf = this.tf;\n\n        //rows counter container\n        let countDiv = createElm('div');\n        countDiv.className = this.cssClass;\n        //rows counter label\n        let countSpan = createElm('span');\n        let countText = createElm('span');\n        countText.appendChild(createText(this.text));\n\n        // counter is added to defined element\n        if (!this.targetId) {\n            tf.setToolbar();\n        }\n        let targetEl = !this.targetId ? tf.lDiv : elm(this.targetId);\n\n        //default container: 'lDiv'\n        if (!this.targetId) {\n            countDiv.appendChild(countText);\n            countDiv.appendChild(countSpan);\n            targetEl.appendChild(countDiv);\n        }\n        else {\n            //custom container, no need to append statusDiv\n            targetEl.appendChild(countText);\n            targetEl.appendChild(countSpan);\n        }\n        this.container = countDiv;\n        this.label = countSpan;\n\n        // subscribe to events\n        this.emitter.on(['after-filtering', 'grouped-by-page'],\n            () => this.refresh(tf.getValidRowsNb()));\n        this.emitter.on(['rows-changed'], () => this.refresh());\n\n        /** @inherited */\n        this.initialized = true;\n        this.refresh();\n    }\n\n    /**\n     * Refreshes the rows counter\n     * @param {Number} p Optional parameter the total number of rows to display\n     * @returns\n     */\n    refresh(p) {\n        if (!this.initialized || !this.isEnabled()) {\n            return;\n        }\n\n        let tf = this.tf;\n\n        this.onBeforeRefreshCounter(tf, this.label);\n\n        let totTxt;\n        if (!tf.paging) {\n            if (p && p !== '') {\n                totTxt = p;\n            } else {\n                totTxt = tf.getFilterableRowsNb() - tf.nbHiddenRows;\n            }\n        } else {\n            let paging = tf.feature('paging');\n            if (paging) {\n                //paging start row\n                let pagingStartRow = parseInt(paging.startPagingRow, 10) +\n                    ((tf.getValidRowsNb() > 0) ? 1 : 0);\n                let pagingEndRow =\n                    (pagingStartRow + paging.pagingLength) - 1 <=\n                    tf.getValidRowsNb() ?\n                        pagingStartRow + paging.pagingLength - 1 :\n                        tf.getValidRowsNb();\n                totTxt = pagingStartRow + this.fromToTextSeparator +\n                    pagingEndRow + this.overText + tf.getValidRowsNb();\n            }\n        }\n\n        this.label.innerHTML = totTxt;\n        this.onAfterRefreshCounter(tf, this.label, totTxt);\n    }\n\n    /**\n     * Remove feature\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        if (!this.targetId && this.container) {\n            removeElm(this.container);\n        } else {\n            elm(this.targetId).innerHTML = '';\n        }\n        this.label = null;\n        this.container = null;\n\n        // unsubscribe to events\n        this.emitter.off(['after-filtering', 'grouped-by-page'],\n            () => this.refresh(tf.getValidRowsNb()));\n        this.emitter.off(['rows-changed'], () => this.refresh());\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 669,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "RowsCounter",
    "memberof": "src/modules/rowsCounter.js",
    "longname": "src/modules/rowsCounter.js~RowsCounter",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/rowsCounter.js",
    "importStyle": "{RowsCounter}",
    "description": "Rows counter UI component",
    "lineNumber": 11,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "RowsCounter"
      }
    ],
    "interface": false,
    "extends": [
      "Feature"
    ]
  },
  {
    "__docId__": 670,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#constructor",
    "access": null,
    "description": "Creates an instance of RowsCounter",
    "lineNumber": 17,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 671,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "targetId",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#targetId",
    "access": null,
    "description": "ID of custom container element",
    "lineNumber": 27,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 672,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#container",
    "access": "private",
    "description": "Container DOM element",
    "lineNumber": 34,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 673,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "label",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#label",
    "access": "private",
    "description": "Container DOM element for label displaying the total number of rows",
    "lineNumber": 41,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 674,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "text",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#text",
    "access": null,
    "description": "Text preceding the total number of rows",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 675,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fromToTextSeparator",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#fromToTextSeparator",
    "access": null,
    "description": "Separator symbol appearing between the first and last visible rows of\ncurrent page when paging is enabled. ie: Rows: 31-40 / 70",
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 676,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "overText",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#overText",
    "access": null,
    "description": "Separator symbol appearing between the first and last visible rows of\ncurrent page and the total number of filterable rows when paging is\nenabled. ie: Rows: 31-40 / 70",
    "lineNumber": 62,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 677,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cssClass",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#cssClass",
    "access": null,
    "description": "Css class for container element",
    "lineNumber": 68,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 678,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeRefreshCounter",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#onBeforeRefreshCounter",
    "access": null,
    "description": "Callback fired before the counter is refreshed",
    "lineNumber": 74,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 679,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterRefreshCounter",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#onAfterRefreshCounter",
    "access": null,
    "description": "Callback fired after the counter is refreshed",
    "lineNumber": 81,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 680,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#init",
    "access": null,
    "description": "Initializes RowsCounter instance",
    "lineNumber": 88,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 681,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#container",
    "access": null,
    "description": null,
    "lineNumber": 120,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 682,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "label",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#label",
    "access": null,
    "description": null,
    "lineNumber": 121,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 683,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#initialized",
    "access": null,
    "description": null,
    "lineNumber": 129,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 684,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "refresh",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#refresh",
    "access": null,
    "description": "Refreshes the rows counter",
    "lineNumber": 138,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": ""
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "p",
        "description": "Optional parameter the total number of rows to display"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 685,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#destroy",
    "access": null,
    "description": "Remove feature",
    "lineNumber": 177,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 686,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "label",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#label",
    "access": null,
    "description": null,
    "lineNumber": 187,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 687,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#container",
    "access": null,
    "description": null,
    "lineNumber": 188,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 688,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/rowsCounter.js~RowsCounter",
    "longname": "src/modules/rowsCounter.js~RowsCounter#initialized",
    "access": null,
    "description": null,
    "lineNumber": 195,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 689,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/state.js",
    "memberof": null,
    "longname": "src/modules/state.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {Hash} from './hash';\nimport {Storage} from './storage';\nimport {isEmpty} from '../string';\nimport {isArray, isNull, isString, isUndef} from '../types';\n\n/**\n * Features state object persistable with localStorage, cookie or URL hash\n *\n * @export\n * @class State\n * @extends {Feature}\n */\nexport class State extends Feature {\n\n    /**\n     * Creates an instance of State\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'state');\n\n        let cfg = this.config.state;\n\n        /**\n         * Determines whether state is persisted with URL hash\n         * @type {Boolean}\n         */\n        this.enableHash = cfg === true ||\n            (isArray(cfg.types) && cfg.types.indexOf('hash') !== -1);\n\n        /**\n         * Determines whether state is persisted with localStorage\n         * @type {Boolean}\n         */\n        this.enableLocalStorage = isArray(cfg.types) &&\n            cfg.types.indexOf('local_storage') !== -1;\n\n        /**\n         * Determines whether state is persisted with localStorage\n         * @type {Boolean}\n         */\n        this.enableCookie = isArray(cfg.types) &&\n            cfg.types.indexOf('cookie') !== -1;\n\n        /**\n         * Persist filters values, enabled by default\n         * @type {Boolean}\n         */\n        this.persistFilters = cfg.filters === false ? false : true;\n\n        /**\n         * Persist current page number when paging is enabled\n         * @type {Boolean}\n         */\n        this.persistPageNumber = Boolean(cfg.page_number);\n\n        /**\n         * Persist page length when paging is enabled\n         * @type {Boolean}\n         */\n        this.persistPageLength = Boolean(cfg.page_length);\n\n        /**\n         * Persist column sorting\n         * @type {Boolean}\n         */\n        this.persistSort = Boolean(cfg.sort);\n\n        /**\n         * Persist columns visibility\n         * @type {Boolean}\n         */\n        this.persistColsVisibility = Boolean(cfg.columns_visibility);\n\n        /**\n         * Persist filters row visibility\n         * @type {Boolean}\n         */\n        this.persistFiltersVisibility = Boolean(cfg.filters_visibility);\n\n        /**\n         * Cookie duration in hours\n         * @type {Boolean}\n         */\n        this.cookieDuration = !isNaN(cfg.cookie_duration) ?\n            parseInt(cfg.cookie_duration, 10) : 87600;\n\n        /**\n         * Enable Storage if localStorage or cookie is required\n         * @type {Boolean}\n         * @private\n         */\n        this.enableStorage = this.enableLocalStorage || this.enableCookie;\n\n        /**\n         * Storage instance if storage is required\n         * @type {Storage}\n         * @private\n         */\n        this.storage = null;\n\n        /**\n         * Hash instance if URL hash is required\n         * @type {Boolean}\n         * @private\n         */\n        this.hash = null;\n\n        /**\n         * Current page number\n         * @type {Number}\n         * @private\n         */\n        this.pageNb = null;\n\n        /**\n         * Current page length\n         * @type {Number}\n         * @private\n         */\n        this.pageLength = null;\n\n        /**\n         * Current column sorting\n         * @type {Object}\n         * @private\n         */\n        this.sort = null;\n\n        /**\n         * Current hidden columns\n         * @type {Object}\n         * @private\n         */\n        this.hiddenCols = null;\n\n        /**\n         * Filters row visibility\n         * @type {Boolean}\n         * @private\n         */\n        this.filtersVisibility = null;\n\n        /**\n         * State object\n         * @type {Object}\n         * @private\n         */\n        this.state = {};\n\n        /**\n         * Prefix for column ID\n         * @type {String}\n         * @private\n         */\n        this.prfxCol = 'col_';\n\n        /**\n         * Prefix for page number ID\n         * @type {String}\n         * @private\n         */\n        this.pageNbKey = 'page';\n\n        /**\n         * Prefix for page length ID\n         * @type {String}\n         * @private\n         */\n        this.pageLengthKey = 'page_length';\n\n        /**\n         * Prefix for filters visibility ID\n         * @type {String}\n         * @private\n         */\n        this.filtersVisKey = 'filters_visibility';\n    }\n\n    /**\n     * Initializes State instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        this.emitter.on(['after-filtering'], () => this.update());\n        this.emitter.on(['after-page-change', 'after-clearing-filters'],\n            (tf, pageNb) => this.updatePage(pageNb));\n        this.emitter.on(['after-page-length-change'],\n            (tf, pageLength) => this.updatePageLength(pageLength));\n        this.emitter.on(['column-sorted'],\n            (tf, index, descending) => this.updateSort(index, descending));\n        this.emitter.on(['sort-initialized'], () => this._syncSort());\n        this.emitter.on(['columns-visibility-initialized'],\n            () => this._syncColsVisibility());\n        this.emitter.on(['column-shown', 'column-hidden'], (tf, feature,\n            colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\n        this.emitter.on(['filters-visibility-initialized'],\n            () => this._syncFiltersVisibility());\n        this.emitter.on(['filters-toggled'],\n            (tf, extension, visible) => this.updateFiltersVisibility(visible));\n\n        if (this.enableHash) {\n            this.hash = new Hash(this);\n            this.hash.init();\n        }\n        if (this.enableStorage) {\n            this.storage = new Storage(this);\n            this.storage.init();\n        }\n\n        /**\n         * @inherited\n         */\n        this.initialized = true;\n    }\n\n\n    /**\n     * Update state object based on current features state\n     */\n    update() {\n        if (!this.isEnabled()) {\n            return;\n        }\n        let state = this.state;\n        let tf = this.tf;\n\n        if (this.persistFilters) {\n            let filterValues = tf.getFiltersValue();\n\n            filterValues.forEach((val, idx) => {\n                let key = `${this.prfxCol}${idx}`;\n\n                if (isString(val) && isEmpty(val)) {\n                    if (state.hasOwnProperty(key)) {\n                        state[key].flt = undefined;\n                    }\n                } else {\n                    state[key] = state[key] || {};\n                    state[key].flt = val;\n                }\n            });\n        }\n\n        if (this.persistPageNumber) {\n            if (isNull(this.pageNb)) {\n                state[this.pageNbKey] = undefined;\n            } else {\n                state[this.pageNbKey] = this.pageNb;\n            }\n        }\n\n        if (this.persistPageLength) {\n            if (isNull(this.pageLength)) {\n                state[this.pageLengthKey] = undefined;\n            } else {\n                state[this.pageLengthKey] = this.pageLength;\n            }\n        }\n\n        if (this.persistSort) {\n            if (!isNull(this.sort)) {\n                // Remove previuosly sorted column\n                Object.keys(state).forEach((key) => {\n                    if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\n                        state[key].sort = undefined;\n                    }\n                });\n\n                let key = `${this.prfxCol}${this.sort.column}`;\n                state[key] = state[key] || {};\n                state[key].sort = { descending: this.sort.descending };\n            }\n        }\n\n        if (this.persistColsVisibility) {\n            if (!isNull(this.hiddenCols)) {\n                // Clear previuosly hidden columns\n                Object.keys(state).forEach((key) => {\n                    if (key.indexOf(this.prfxCol) !== -1 && state[key]) {\n                        state[key].hidden = undefined;\n                    }\n                });\n\n                this.hiddenCols.forEach((colIdx) => {\n                    let key = `${this.prfxCol}${colIdx}`;\n                    state[key] = state[key] || {};\n                    state[key].hidden = true;\n                });\n            }\n        }\n\n        if (this.persistFiltersVisibility) {\n            if (isNull(this.filtersVisibility)) {\n                state[this.filtersVisKey] = undefined;\n            } else {\n                state[this.filtersVisKey] = this.filtersVisibility;\n            }\n        }\n\n        this.emitter.emit('state-changed', tf, state);\n    }\n\n    /**\n     * Refresh page number field on page number changes\n     *\n     * @param {Number} pageNb Current page number\n     */\n    updatePage(pageNb) {\n        this.pageNb = pageNb;\n        this.update();\n    }\n\n    /**\n     * Refresh page length field on page length changes\n     *\n     * @param {Number} pageLength Current page length value\n     */\n    updatePageLength(pageLength) {\n        this.pageLength = pageLength;\n        this.update();\n    }\n\n    /**\n     * Refresh column sorting information on sort changes\n     *\n     * @param index {Number} Column index\n     * @param {Boolean} descending Descending manner\n     */\n    updateSort(index, descending) {\n        this.sort = {\n            column: index,\n            descending: descending\n        };\n        this.update();\n    }\n\n    /**\n     * Refresh hidden columns information on columns visibility changes\n     *\n     * @param {Array} hiddenCols Columns indexes\n     */\n    updateColsVisibility(hiddenCols) {\n        this.hiddenCols = hiddenCols;\n        this.update();\n    }\n\n    /**\n     * Refresh filters visibility on filters visibility change\n     *\n     * @param {Boolean} visible Visibility flad\n     */\n    updateFiltersVisibility(visible) {\n        this.filtersVisibility = visible;\n        this.update();\n    }\n\n    /**\n     * Override state field\n     *\n     * @param state State object\n     */\n    override(state) {\n        this.state = state;\n    }\n\n    /**\n     * Sync stored features state\n     */\n    sync() {\n        let state = this.state;\n        let tf = this.tf;\n\n        this._syncFilters();\n\n        if (this.persistPageNumber) {\n            let pageNumber = state[this.pageNbKey];\n            this.emitter.emit('change-page', tf, pageNumber);\n        }\n\n        if (this.persistPageLength) {\n            let pageLength = state[this.pageLengthKey];\n            this.emitter.emit('change-page-results', tf, pageLength);\n        }\n\n        this._syncSort();\n        this._syncColsVisibility();\n        this._syncFiltersVisibility();\n    }\n\n    /**\n     * Override current state with passed one and sync features\n     *\n     * @param {Object} state State object\n     */\n    overrideAndSync(state) {\n        // To prevent state to react to features changes, state is temporarily\n        // disabled\n        this.disable();\n        // State is overriden with passed state object\n        this.override(state);\n        // New hash state is applied to features\n        this.sync();\n        // State is re-enabled\n        this.enable();\n    }\n\n    /**\n     * Sync filters with stored values and filter table\n     *\n     * @private\n     */\n    _syncFilters() {\n        if (!this.persistFilters) {\n            return;\n        }\n        let state = this.state;\n        let tf = this.tf;\n\n        Object.keys(state).forEach((key) => {\n            if (key.indexOf(this.prfxCol) !== -1) {\n                let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\n                let val = state[key].flt;\n                tf.setFilterValue(colIdx, val);\n            }\n        });\n\n        tf.filter();\n    }\n\n    /**\n     * Sync sorted column with stored sorting information and sort table\n     *\n     * @private\n     */\n    _syncSort() {\n        if (!this.persistSort) {\n            return;\n        }\n        let state = this.state;\n        let tf = this.tf;\n\n        Object.keys(state).forEach((key) => {\n            if (key.indexOf(this.prfxCol) !== -1) {\n                let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\n                if (!isUndef(state[key].sort)) {\n                    let sort = state[key].sort;\n                    this.emitter.emit('sort', tf, colIdx, sort.descending);\n                }\n            }\n        });\n    }\n\n    /**\n     * Sync hidden columns with stored information\n     *\n     * @private\n     */\n    _syncColsVisibility() {\n        if (!this.persistColsVisibility) {\n            return;\n        }\n        let state = this.state;\n        let tf = this.tf;\n        let hiddenCols = [];\n\n        Object.keys(state).forEach((key) => {\n            if (key.indexOf(this.prfxCol) !== -1) {\n                let colIdx = parseInt(key.replace(this.prfxCol, ''), 10);\n                if (!isUndef(state[key].hidden)) {\n                    hiddenCols.push(colIdx);\n                }\n            }\n        });\n\n        hiddenCols.forEach((colIdx) => {\n            this.emitter.emit('hide-column', tf, colIdx);\n        });\n    }\n\n    /**\n     * Sync filters visibility with stored information\n     *\n     * @private\n     */\n    _syncFiltersVisibility() {\n        if (!this.persistFiltersVisibility) {\n            return;\n        }\n        let state = this.state;\n        let tf = this.tf;\n        let filtersVisibility = state[this.filtersVisKey];\n\n        this.filtersVisibility = filtersVisibility;\n        this.emitter.emit('show-filters', tf, filtersVisibility);\n    }\n\n    /**\n     * Destroy State instance\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        this.state = {};\n\n        this.emitter.off(['after-filtering'], () => this.update());\n        this.emitter.off(['after-page-change', 'after-clearing-filters'],\n            (tf, pageNb) => this.updatePage(pageNb));\n        this.emitter.off(['after-page-length-change'],\n            (tf, index) => this.updatePageLength(index));\n        this.emitter.off(['column-sorted'],\n            (tf, index, descending) => this.updateSort(index, descending));\n        this.emitter.off(['sort-initialized'], () => this._syncSort());\n        this.emitter.off(['columns-visibility-initialized'],\n            () => this._syncColsVisibility());\n        this.emitter.off(['column-shown', 'column-hidden'], (tf, feature,\n            colIndex, hiddenCols) => this.updateColsVisibility(hiddenCols));\n        this.emitter.off(['filters-visibility-initialized'],\n            () => this._syncFiltersVisibility());\n        this.emitter.off(['filters-toggled'],\n            (tf, extension, visible) => this.updateFiltersVisibility(visible));\n\n        if (this.enableHash) {\n            this.hash.destroy();\n            this.hash = null;\n        }\n\n        if (this.enableStorage) {\n            this.storage.destroy();\n            this.storage = null;\n        }\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 690,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "State",
    "memberof": "src/modules/state.js",
    "longname": "src/modules/state.js~State",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/state.js",
    "importStyle": "{State}",
    "description": "Features state object persistable with localStorage, cookie or URL hash",
    "lineNumber": 14,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "State"
      }
    ],
    "interface": false,
    "extends": [
      "Feature"
    ]
  },
  {
    "__docId__": 691,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#constructor",
    "access": null,
    "description": "Creates an instance of State",
    "lineNumber": 20,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 692,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableHash",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#enableHash",
    "access": null,
    "description": "Determines whether state is persisted with URL hash",
    "lineNumber": 29,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 693,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableLocalStorage",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#enableLocalStorage",
    "access": null,
    "description": "Determines whether state is persisted with localStorage",
    "lineNumber": 36,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 694,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableCookie",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#enableCookie",
    "access": null,
    "description": "Determines whether state is persisted with localStorage",
    "lineNumber": 43,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 695,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "persistFilters",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#persistFilters",
    "access": null,
    "description": "Persist filters values, enabled by default",
    "lineNumber": 50,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 696,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "persistPageNumber",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#persistPageNumber",
    "access": null,
    "description": "Persist current page number when paging is enabled",
    "lineNumber": 56,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 697,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "persistPageLength",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#persistPageLength",
    "access": null,
    "description": "Persist page length when paging is enabled",
    "lineNumber": 62,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 698,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "persistSort",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#persistSort",
    "access": null,
    "description": "Persist column sorting",
    "lineNumber": 68,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 699,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "persistColsVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#persistColsVisibility",
    "access": null,
    "description": "Persist columns visibility",
    "lineNumber": 74,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 700,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "persistFiltersVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#persistFiltersVisibility",
    "access": null,
    "description": "Persist filters row visibility",
    "lineNumber": 80,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 701,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cookieDuration",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#cookieDuration",
    "access": null,
    "description": "Cookie duration in hours",
    "lineNumber": 86,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 702,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableStorage",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#enableStorage",
    "access": "private",
    "description": "Enable Storage if localStorage or cookie is required",
    "lineNumber": 94,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 703,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "storage",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#storage",
    "access": "private",
    "description": "Storage instance if storage is required",
    "lineNumber": 101,
    "type": {
      "nullable": null,
      "types": [
        "Storage"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 704,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hash",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#hash",
    "access": "private",
    "description": "Hash instance if URL hash is required",
    "lineNumber": 108,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 705,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageNb",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#pageNb",
    "access": "private",
    "description": "Current page number",
    "lineNumber": 115,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 706,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageLength",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#pageLength",
    "access": "private",
    "description": "Current page length",
    "lineNumber": 122,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 707,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sort",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#sort",
    "access": "private",
    "description": "Current column sorting",
    "lineNumber": 129,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 708,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hiddenCols",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#hiddenCols",
    "access": "private",
    "description": "Current hidden columns",
    "lineNumber": 136,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 709,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#filtersVisibility",
    "access": "private",
    "description": "Filters row visibility",
    "lineNumber": 143,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 710,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#state",
    "access": "private",
    "description": "State object",
    "lineNumber": 150,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 711,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxCol",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#prfxCol",
    "access": "private",
    "description": "Prefix for column ID",
    "lineNumber": 157,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 712,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageNbKey",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#pageNbKey",
    "access": "private",
    "description": "Prefix for page number ID",
    "lineNumber": 164,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 713,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageLengthKey",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#pageLengthKey",
    "access": "private",
    "description": "Prefix for page length ID",
    "lineNumber": 171,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 714,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersVisKey",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#filtersVisKey",
    "access": "private",
    "description": "Prefix for filters visibility ID",
    "lineNumber": 178,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 715,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#init",
    "access": null,
    "description": "Initializes State instance",
    "lineNumber": 184,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 716,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hash",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#hash",
    "access": null,
    "description": null,
    "lineNumber": 207,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 717,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "storage",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#storage",
    "access": null,
    "description": null,
    "lineNumber": 211,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 718,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#initialized",
    "access": null,
    "description": "",
    "lineNumber": 218,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 719,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "update",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#update",
    "access": null,
    "description": "Update state object based on current features state",
    "lineNumber": 225,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 720,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "updatePage",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#updatePage",
    "access": null,
    "description": "Refresh page number field on page number changes",
    "lineNumber": 313,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "pageNb",
        "description": "Current page number"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 721,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageNb",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#pageNb",
    "access": null,
    "description": null,
    "lineNumber": 314,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 722,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "updatePageLength",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#updatePageLength",
    "access": null,
    "description": "Refresh page length field on page length changes",
    "lineNumber": 323,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "pageLength",
        "description": "Current page length value"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 723,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "pageLength",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#pageLength",
    "access": null,
    "description": null,
    "lineNumber": 324,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 724,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "updateSort",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#updateSort",
    "access": null,
    "description": "Refresh column sorting information on sort changes",
    "lineNumber": 334,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "index",
        "description": "{Number} Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "descending",
        "description": "Descending manner"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 725,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sort",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#sort",
    "access": null,
    "description": null,
    "lineNumber": 335,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 726,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "updateColsVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#updateColsVisibility",
    "access": null,
    "description": "Refresh hidden columns information on columns visibility changes",
    "lineNumber": 347,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "hiddenCols",
        "description": "Columns indexes"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 727,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hiddenCols",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#hiddenCols",
    "access": null,
    "description": null,
    "lineNumber": 348,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 728,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "updateFiltersVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#updateFiltersVisibility",
    "access": null,
    "description": "Refresh filters visibility on filters visibility change",
    "lineNumber": 357,
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "visible",
        "description": "Visibility flad"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 729,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#filtersVisibility",
    "access": null,
    "description": null,
    "lineNumber": 358,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 730,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "override",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#override",
    "access": null,
    "description": "Override state field",
    "lineNumber": 367,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": "State object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 731,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#state",
    "access": null,
    "description": null,
    "lineNumber": 368,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 732,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "sync",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#sync",
    "access": null,
    "description": "Sync stored features state",
    "lineNumber": 374,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 733,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "overrideAndSync",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#overrideAndSync",
    "access": null,
    "description": "Override current state with passed one and sync features",
    "lineNumber": 400,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": "State object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 734,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_syncFilters",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#_syncFilters",
    "access": "private",
    "description": "Sync filters with stored values and filter table",
    "lineNumber": 417,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 735,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_syncSort",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#_syncSort",
    "access": "private",
    "description": "Sync sorted column with stored sorting information and sort table",
    "lineNumber": 440,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 736,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_syncColsVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#_syncColsVisibility",
    "access": "private",
    "description": "Sync hidden columns with stored information",
    "lineNumber": 463,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 737,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_syncFiltersVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#_syncFiltersVisibility",
    "access": "private",
    "description": "Sync filters visibility with stored information",
    "lineNumber": 490,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 738,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersVisibility",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#filtersVisibility",
    "access": null,
    "description": null,
    "lineNumber": 498,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 739,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#destroy",
    "access": null,
    "description": "Destroy State instance",
    "lineNumber": 505,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 740,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#state",
    "access": null,
    "description": null,
    "lineNumber": 510,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 741,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hash",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#hash",
    "access": null,
    "description": null,
    "lineNumber": 531,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 742,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "storage",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#storage",
    "access": null,
    "description": null,
    "lineNumber": 536,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 743,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/state.js~State",
    "longname": "src/modules/state.js~State#initialized",
    "access": null,
    "description": null,
    "lineNumber": 539,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 744,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/statusBar.js",
    "memberof": null,
    "longname": "src/modules/statusBar.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {Feature} from '../feature';\nimport {root} from '../root';\nimport {createElm, createText, elm, removeElm} from '../dom';\nimport {isFn, EMPTY_FN} from '../types';\n\nconst EVENTS = [\n    'after-filtering',\n    'after-populating-filter',\n    'after-page-change',\n    'after-clearing-filters',\n    'after-page-length-change',\n    'after-reset-page',\n    'after-reset-page-length',\n    'after-loading-extensions',\n    'after-loading-themes'\n];\n\n/**\n * Status bar UI component\n * @export\n * @class StatusBar\n * @extends {Feature}\n */\nexport class StatusBar extends Feature {\n\n    /**\n     * Creates an instance of StatusBar\n     * @param {TableFilter} tf TableFilter instance\n     */\n    constructor(tf) {\n        super(tf, 'statusBar');\n\n        // Configuration object\n        let f = this.config;\n\n        /**\n         * ID of custom container element\n         * @type {String}\n         */\n        this.targetId = f.status_bar_target_id || null;\n\n        /**\n         * Container DOM element\n         * @type {DOMElement}\n         * @private\n         */\n        this.container = null;\n\n        /**\n         * Message container DOM element\n         * @type {DOMElement}\n         * @private\n         */\n        this.msgContainer = null;\n\n        /**\n         * Label container DOM element\n         * @type {DOMElement}\n         * @private\n         */\n        this.labelContainer = null;\n\n        /**\n         * Text preceding status message\n         * @type {String}\n         */\n        this.text = f.status_bar_text || '';\n\n        /**\n         * Css class for container element\n         * @type {String}\n         */\n        this.cssClass = f.status_bar_css_class || 'status';\n\n        /**\n         * Message visibility duration in milliseconds\n         * @type {Number}\n         * @private\n         */\n        this.delay = 250;\n\n        /**\n         * Callback fired before the message is displayed\n         * @type {Function}\n         */\n        this.onBeforeShowMsg = isFn(f.on_before_show_msg) ?\n            f.on_before_show_msg : EMPTY_FN;\n\n        /**\n         * Callback fired after the message is displayed\n         * @type {Function}\n         */\n        this.onAfterShowMsg = isFn(f.on_after_show_msg) ?\n            f.on_after_show_msg : EMPTY_FN;\n\n        /**\n         * Message appearing upon filtering\n         * @type {String}\n         */\n        this.msgFilter = f.msg_filter || 'Filtering data...';\n\n        /**\n         * Message appearing when a drop-down filter is populated\n         * @type {String}\n         */\n        this.msgPopulate = f.msg_populate || 'Populating filter...';\n\n        /**\n         * Message appearing when a checklist filter is populated\n         * @type {String}\n         */\n        this.msgPopulateCheckList = f.msg_populate_checklist ||\n            'Populating list...';\n\n        /**\n         * Message appearing when a pagination page is changed\n         * @type {String}\n         */\n        this.msgChangePage = f.msg_change_page || 'Collecting paging data...';\n\n        /**\n         * Message appearing when filters are cleared\n         * @type {String}\n         */\n        this.msgClear = f.msg_clear || 'Clearing filters...';\n\n        /**\n         * Message appearing when the page length is changed\n         * @type {String}\n         */\n        this.msgChangeResults = f.msg_change_results ||\n            'Changing results per page...';\n\n        /**\n         * Message appearing when the page is re-set\n         * @type {String}\n         */\n        this.msgResetPage = f.msg_reset_page || 'Re-setting page...';\n\n        /**\n         * Message appearing when the page length is re-set\n         * @type {String}\n         */\n        this.msgResetPageLength = f.msg_reset_page_length ||\n            'Re-setting page length...';\n\n        /**\n         * Message appearing upon column sorting\n         * @type {String}\n         */\n        this.msgSort = f.msg_sort || 'Sorting data...';\n\n        /**\n         * Message appearing when extensions are loading\n         * @type {String}\n         */\n        this.msgLoadExtensions = f.msg_load_extensions ||\n            'Loading extensions...';\n\n        /**\n         * Message appearing when themes are loading\n         * @type {String}\n         */\n        this.msgLoadThemes = f.msg_load_themes || 'Loading theme(s)...';\n    }\n\n    /**\n     * Initializes StatusBar instance\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        let tf = this.tf;\n        let emitter = this.emitter;\n\n        //status bar container\n        let statusDiv = createElm('div');\n        statusDiv.className = this.cssClass;\n\n        //status bar label\n        let statusSpan = createElm('span');\n        //preceding text\n        let statusSpanText = createElm('span');\n        statusSpanText.appendChild(createText(this.text));\n\n        // target element container\n        if (!this.targetId) {\n            tf.setToolbar();\n        }\n        let targetEl = (!this.targetId) ? tf.lDiv : elm(this.targetId);\n\n        //default container: 'lDiv'\n        if (!this.targetId) {\n            statusDiv.appendChild(statusSpanText);\n            statusDiv.appendChild(statusSpan);\n            targetEl.appendChild(statusDiv);\n        } else {\n            // custom container, no need to append statusDiv\n            targetEl.appendChild(statusSpanText);\n            targetEl.appendChild(statusSpan);\n        }\n\n        this.container = statusDiv;\n        this.msgContainer = statusSpan;\n        this.labelContainer = statusSpanText;\n\n        // Subscribe to events\n        emitter.on(['before-filtering'], () => this.message(this.msgFilter));\n        emitter.on(['before-populating-filter'],\n            () => this.message(this.msgPopulate));\n        emitter.on(['before-page-change'],\n            () => this.message(this.msgChangePage));\n        emitter.on(['before-clearing-filters'], () =>\n            this.message(this.msgClear));\n        emitter.on(['before-page-length-change'],\n            () => this.message(this.msgChangeResults));\n        emitter.on(['before-reset-page'],\n            () => this.message(this.msgResetPage));\n        emitter.on(['before-reset-page-length'],\n            () => this.message(this.msgResetPageLength));\n        emitter.on(['before-loading-extensions'],\n            () => this.message(this.msgLoadExtensions));\n        emitter.on(['before-loading-themes'],\n            () => this.message(this.msgLoadThemes));\n\n        emitter.on(EVENTS, () => this.message(''));\n\n        /**\n         * @inherited\n         */\n        this.initialized = true;\n    }\n\n    /**\n     * Display status message\n     * @param {String} [t=''] Message to be displayed\n     */\n    message(t = '') {\n        if (!this.isEnabled()) {\n            return;\n        }\n\n        this.onBeforeShowMsg(this.tf, t);\n\n        let d = t === '' ? this.delay : 1;\n        root.setTimeout(() => {\n            if (!this.initialized) {\n                return;\n            }\n            this.msgContainer.innerHTML = t;\n\n            this.onAfterShowMsg(this.tf, t);\n        }, d);\n    }\n\n    /**\n     * Destroy StatusBar instance\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        let emitter = this.emitter;\n\n        this.container.innerHTML = '';\n        if (!this.targetId) {\n            removeElm(this.container);\n        }\n        this.labelContainer = null;\n        this.msgContainer = null;\n        this.container = null;\n\n        // Unsubscribe to events\n        emitter.off(['before-filtering'], () => this.message(this.msgFilter));\n        emitter.off(['before-populating-filter'],\n            () => this.message(this.msgPopulate));\n        emitter.off(['before-page-change'],\n            () => this.message(this.msgChangePage));\n        emitter.off(['before-clearing-filters'],\n            () => this.message(this.msgClear));\n        emitter.off(['before-page-length-change'],\n            () => this.message(this.msgChangeResults));\n        emitter.off(['before-reset-page'], () =>\n            this.message(this.msgResetPage));\n        emitter.off(['before-reset-page-length'],\n            () => this.message(this.msgResetPageLength));\n        emitter.off(['before-loading-extensions'],\n            () => this.message(this.msgLoadExtensions));\n        emitter.off(['before-loading-themes'],\n            () => this.message(this.msgLoadThemes));\n\n        emitter.off(EVENTS, () => this.message(''));\n\n        this.initialized = false;\n    }\n}\n"
  },
  {
    "__docId__": 745,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "EVENTS",
    "memberof": "src/modules/statusBar.js",
    "longname": "src/modules/statusBar.js~EVENTS",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/statusBar.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 746,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "StatusBar",
    "memberof": "src/modules/statusBar.js",
    "longname": "src/modules/statusBar.js~StatusBar",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/statusBar.js",
    "importStyle": "{StatusBar}",
    "description": "Status bar UI component",
    "lineNumber": 24,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "StatusBar"
      }
    ],
    "interface": false,
    "extends": [
      "Feature"
    ]
  },
  {
    "__docId__": 747,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#constructor",
    "access": null,
    "description": "Creates an instance of StatusBar",
    "lineNumber": 30,
    "params": [
      {
        "nullable": null,
        "types": [
          "TableFilter"
        ],
        "spread": false,
        "optional": false,
        "name": "tf",
        "description": "TableFilter instance"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 748,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "targetId",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#targetId",
    "access": null,
    "description": "ID of custom container element",
    "lineNumber": 40,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 749,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#container",
    "access": "private",
    "description": "Container DOM element",
    "lineNumber": 47,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 750,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgContainer",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgContainer",
    "access": "private",
    "description": "Message container DOM element",
    "lineNumber": 54,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 751,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "labelContainer",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#labelContainer",
    "access": "private",
    "description": "Label container DOM element",
    "lineNumber": 61,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 752,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "text",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#text",
    "access": null,
    "description": "Text preceding status message",
    "lineNumber": 67,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 753,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cssClass",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#cssClass",
    "access": null,
    "description": "Css class for container element",
    "lineNumber": 73,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 754,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "delay",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#delay",
    "access": "private",
    "description": "Message visibility duration in milliseconds",
    "lineNumber": 80,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 755,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeShowMsg",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#onBeforeShowMsg",
    "access": null,
    "description": "Callback fired before the message is displayed",
    "lineNumber": 86,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 756,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterShowMsg",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#onAfterShowMsg",
    "access": null,
    "description": "Callback fired after the message is displayed",
    "lineNumber": 93,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 757,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgFilter",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgFilter",
    "access": null,
    "description": "Message appearing upon filtering",
    "lineNumber": 100,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 758,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgPopulate",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgPopulate",
    "access": null,
    "description": "Message appearing when a drop-down filter is populated",
    "lineNumber": 106,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 759,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgPopulateCheckList",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgPopulateCheckList",
    "access": null,
    "description": "Message appearing when a checklist filter is populated",
    "lineNumber": 112,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 760,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgChangePage",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgChangePage",
    "access": null,
    "description": "Message appearing when a pagination page is changed",
    "lineNumber": 119,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 761,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgClear",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgClear",
    "access": null,
    "description": "Message appearing when filters are cleared",
    "lineNumber": 125,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 762,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgChangeResults",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgChangeResults",
    "access": null,
    "description": "Message appearing when the page length is changed",
    "lineNumber": 131,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 763,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgResetPage",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgResetPage",
    "access": null,
    "description": "Message appearing when the page is re-set",
    "lineNumber": 138,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 764,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgResetPageLength",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgResetPageLength",
    "access": null,
    "description": "Message appearing when the page length is re-set",
    "lineNumber": 144,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 765,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgSort",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgSort",
    "access": null,
    "description": "Message appearing upon column sorting",
    "lineNumber": 151,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 766,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgLoadExtensions",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgLoadExtensions",
    "access": null,
    "description": "Message appearing when extensions are loading",
    "lineNumber": 157,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 767,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgLoadThemes",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgLoadThemes",
    "access": null,
    "description": "Message appearing when themes are loading",
    "lineNumber": 164,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 768,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#init",
    "access": null,
    "description": "Initializes StatusBar instance",
    "lineNumber": 170,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 769,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#container",
    "access": null,
    "description": null,
    "lineNumber": 205,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 770,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgContainer",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgContainer",
    "access": null,
    "description": null,
    "lineNumber": 206,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 771,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "labelContainer",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#labelContainer",
    "access": null,
    "description": null,
    "lineNumber": 207,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 772,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#initialized",
    "access": null,
    "description": "",
    "lineNumber": 233,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 773,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "message",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#message",
    "access": null,
    "description": "Display status message",
    "lineNumber": 240,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "''",
        "defaultRaw": "''",
        "name": "t",
        "description": "Message to be displayed"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 774,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#destroy",
    "access": null,
    "description": "Destroy StatusBar instance",
    "lineNumber": 261,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 775,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "labelContainer",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#labelContainer",
    "access": null,
    "description": null,
    "lineNumber": 272,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 776,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "msgContainer",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#msgContainer",
    "access": null,
    "description": null,
    "lineNumber": 273,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 777,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "container",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#container",
    "access": null,
    "description": null,
    "lineNumber": 274,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 778,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/modules/statusBar.js~StatusBar",
    "longname": "src/modules/statusBar.js~StatusBar#initialized",
    "access": null,
    "description": null,
    "lineNumber": 297,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 779,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/modules/storage.js",
    "memberof": null,
    "longname": "src/modules/storage.js",
    "access": null,
    "description": null,
    "lineNumber": 2,
    "content": "\nimport Cookie from '../cookie';\nimport {root} from '../root';\n\nconst JSON = root.JSON;\nconst localStorage = root.localStorage;\nconst location = root.location;\n\n/**\n * Checks if browser has Storage feature\n */\nexport const hasStorage = () => {\n    return 'Storage' in root;\n};\n\n/**\n * Stores the features state in browser's local storage or cookie\n *\n * @export\n * @class Storage\n */\nexport class Storage {\n\n    /**\n     * Creates an instance of Storage\n     *\n     * @param {State} state Instance of State\n     */\n    constructor(state) {\n\n        /**\n         * State object\n         * @type {State}\n         * @private\n         */\n        this.state = state;\n\n        /**\n         * TableFilter object\n         * @type {TableFilter}\n         * @private\n         */\n        this.tf = state.tf;\n\n        /**\n         * Persist with local storage\n         * @type {Boolean}\n         * @private\n         */\n        this.enableLocalStorage = state.enableLocalStorage && hasStorage();\n\n        /**\n         * Persist with cookie\n         * @type {Boolean}\n         * @private\n         */\n        this.enableCookie = state.enableCookie && !this.enableLocalStorage;\n\n        /**\n         * Emitter object\n         * @type {Emitter}\n         * @private\n         */\n        this.emitter = state.emitter;\n\n        /**\n         * Cookie duration in hours from state object\n         * @type {Number}\n         * @private\n         */\n        this.duration = state.cookieDuration;\n    }\n\n\n    /**\n     * Initializes the Storage object\n     */\n    init() {\n        this.emitter.on(['state-changed'], (tf, state) => this.save(state));\n        this.emitter.on(['initialized'], () => this.sync());\n    }\n\n    /**\n     * Persists the features state on state changes\n     *\n     * @param {State} state Instance of State\n     */\n    save(state) {\n        if (this.enableLocalStorage) {\n            localStorage[this.getKey()] = JSON.stringify(state);\n        } else {\n            Cookie.write(this.getKey(), JSON.stringify(state), this.duration);\n        }\n    }\n\n    /**\n     * Turns stored string into a State JSON object\n     *\n     *  @returns {Object} JSON object\n     */\n    retrieve() {\n        let state = null;\n        if (this.enableLocalStorage) {\n            state = localStorage[this.getKey()];\n        } else {\n            state = Cookie.read(this.getKey());\n        }\n\n        if (!state) {\n            return null;\n        }\n        return JSON.parse(state);\n    }\n\n    /**\n     * Removes persisted state from storage\n     */\n    remove() {\n        if (this.enableLocalStorage) {\n            localStorage.removeItem(this.getKey());\n        } else {\n            Cookie.remove(this.getKey());\n        }\n    }\n\n    /**\n     * Applies persisted state to features\n     */\n    sync() {\n        let state = this.retrieve();\n        if (!state) {\n            return;\n        }\n        // override current state with persisted one and sync features\n        this.state.overrideAndSync(state);\n    }\n\n    /**\n     * Returns the storage key\n     *\n     * @returns {String} Key\n     */\n    getKey() {\n        return JSON.stringify({\n            key: `${this.tf.prfxTf}_${this.tf.id}`,\n            path: location.pathname\n        });\n    }\n\n    /**\n     * Release Storage event subscriptions and clear fields\n     */\n    destroy() {\n        this.emitter.off(['state-changed'], (tf, state) => this.save(state));\n        this.emitter.off(['initialized'], () => this.sync());\n\n        this.remove();\n\n        this.state = null;\n        this.emitter = null;\n    }\n}\n"
  },
  {
    "__docId__": 780,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "JSON",
    "memberof": "src/modules/storage.js",
    "longname": "src/modules/storage.js~JSON",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/storage.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 5,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 781,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "localStorage",
    "memberof": "src/modules/storage.js",
    "longname": "src/modules/storage.js~localStorage",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/storage.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 6,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 782,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "location",
    "memberof": "src/modules/storage.js",
    "longname": "src/modules/storage.js~location",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/modules/storage.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 7,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 783,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "hasStorage",
    "memberof": "src/modules/storage.js",
    "longname": "src/modules/storage.js~hasStorage",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/storage.js",
    "importStyle": "{hasStorage}",
    "description": "Checks if browser has Storage feature",
    "lineNumber": 12,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 784,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "Storage",
    "memberof": "src/modules/storage.js",
    "longname": "src/modules/storage.js~Storage",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/modules/storage.js",
    "importStyle": "{Storage}",
    "description": "Stores the features state in browser's local storage or cookie",
    "lineNumber": 22,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "Storage"
      }
    ],
    "interface": false
  },
  {
    "__docId__": 785,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#constructor",
    "access": null,
    "description": "Creates an instance of Storage",
    "lineNumber": 29,
    "params": [
      {
        "nullable": null,
        "types": [
          "State"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": "Instance of State"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 786,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#state",
    "access": "private",
    "description": "State object",
    "lineNumber": 36,
    "type": {
      "nullable": null,
      "types": [
        "State"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 787,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tf",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#tf",
    "access": "private",
    "description": "TableFilter object",
    "lineNumber": 43,
    "type": {
      "nullable": null,
      "types": [
        "TableFilter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 788,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableLocalStorage",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#enableLocalStorage",
    "access": "private",
    "description": "Persist with local storage",
    "lineNumber": 50,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 789,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableCookie",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#enableCookie",
    "access": "private",
    "description": "Persist with cookie",
    "lineNumber": 57,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 790,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emitter",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#emitter",
    "access": "private",
    "description": "Emitter object",
    "lineNumber": 64,
    "type": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 791,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "duration",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#duration",
    "access": "private",
    "description": "Cookie duration in hours from state object",
    "lineNumber": 71,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 792,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#init",
    "access": null,
    "description": "Initializes the Storage object",
    "lineNumber": 78,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 793,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "save",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#save",
    "access": null,
    "description": "Persists the features state on state changes",
    "lineNumber": 88,
    "params": [
      {
        "nullable": null,
        "types": [
          "State"
        ],
        "spread": false,
        "optional": false,
        "name": "state",
        "description": "Instance of State"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 794,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "retrieve",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#retrieve",
    "access": null,
    "description": "Turns stored string into a State JSON object",
    "lineNumber": 101,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Object} JSON object"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": "JSON object"
    },
    "generator": false
  },
  {
    "__docId__": 795,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "remove",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#remove",
    "access": null,
    "description": "Removes persisted state from storage",
    "lineNumber": 118,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 796,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "sync",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#sync",
    "access": null,
    "description": "Applies persisted state to features",
    "lineNumber": 129,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 797,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getKey",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#getKey",
    "access": null,
    "description": "Returns the storage key",
    "lineNumber": 143,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String} Key"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": "Key"
    },
    "generator": false
  },
  {
    "__docId__": 798,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#destroy",
    "access": null,
    "description": "Release Storage event subscriptions and clear fields",
    "lineNumber": 153,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 799,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#state",
    "access": null,
    "description": null,
    "lineNumber": 159,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 800,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emitter",
    "memberof": "src/modules/storage.js~Storage",
    "longname": "src/modules/storage.js~Storage#emitter",
    "access": null,
    "description": null,
    "lineNumber": 160,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 801,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/number.js",
    "memberof": null,
    "longname": "src/number.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {isNumber} from './types';\n\n/**\n * Takes a string, removes all formatting/cruft and returns the raw float value\n * @param {String} Formatted number\n * @param {String} Decimal type '.' or ','\n * @return {Number} Unformatted number\n *\n * https://github.com/openexchangerates/accounting.js/blob/master/accounting.js\n */\nexport const parse = (value, decimal = '.') => {\n    // Return the value as-is if it's already a number\n    if (isNumber(value)) {\n        return value;\n    }\n\n    // Build regex to strip out everything except digits, decimal point and\n    // minus sign\n    let regex = new RegExp('[^0-9-' + decimal + ']', ['g']);\n    let unformatted = parseFloat(\n        ('' + value)\n        .replace(/\\((.*)\\)/, '-$1') // replace bracketed values with negatives\n        .replace(regex, '')         // strip out any cruft\n        .replace(decimal, '.')      // make sure decimal point is standard\n    );\n\n    // This will fail silently\n    return !isNaN(unformatted) ? unformatted : 0;\n}\n"
  },
  {
    "__docId__": 802,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "parse",
    "memberof": "src/number.js",
    "longname": "src/number.js~parse",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/number.js",
    "importStyle": "{parse}",
    "description": "Takes a string, removes all formatting/cruft and returns the raw float value",
    "lineNumber": 11,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "Formatted",
        "description": "number"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "Decimal",
        "description": "type '.' or ','"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": "Unformatted number\n\nhttps://github.com/openexchangerates/accounting.js/blob/master/accounting.js"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 803,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/root.js",
    "memberof": null,
    "longname": "src/root.js",
    "access": null,
    "description": null,
    "lineNumber": 4,
    "content": "/**\n * Export window or global object depending on the environment\n */\nexport const root = (typeof self === 'object' && self.self === self && self) ||\n    (typeof global === 'object' && global.global === global && global) ||\n    this;\n"
  },
  {
    "__docId__": 804,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "root",
    "memberof": "src/root.js",
    "longname": "src/root.js~root",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/root.js",
    "importStyle": "{root}",
    "description": "Export window or global object depending on the environment",
    "lineNumber": 4,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 805,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/sort.js",
    "memberof": null,
    "longname": "src/sort.js",
    "access": null,
    "description": null,
    "lineNumber": 13,
    "content": "/**\n * Sorting utilities\n */\n\n/**\n * Case insensitive compare function for passed strings\n * @param  {String} First string\n * @param  {String} Second string\n * @return {Number} -1 if first string lower than second one\n *                  0 if first string same order as second one\n *                  1 if first string greater than second one\n */\nexport const ignoreCase = (a, b) => {\n    let x = a.toLowerCase();\n    let y = b.toLowerCase();\n    return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n}\n\n/**\n * Sorts passed numbers in a ascending manner\n * @param {Number} First number\n * @param {Number} Second number\n * @param {Number} Negative, zero or positive number\n */\nexport const numSortAsc = (a, b) => (a - b);\n\n/**\n * Sorts passed numbers in a descending manner\n * @param {Number} First number\n * @param {Number} Second number\n * @param {Number} Negative, zero or positive number\n */\nexport const numSortDesc = (a, b) => (b - a);\n"
  },
  {
    "__docId__": 806,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "ignoreCase",
    "memberof": "src/sort.js",
    "longname": "src/sort.js~ignoreCase",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/sort.js",
    "importStyle": "{ignoreCase}",
    "description": "Case insensitive compare function for passed strings",
    "lineNumber": 13,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "First",
        "description": "string"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "Second",
        "description": "string"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": "1 if first string lower than second one\n                 0 if first string same order as second one\n                 1 if first string greater than second one"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 807,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "numSortAsc",
    "memberof": "src/sort.js",
    "longname": "src/sort.js~numSortAsc",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/sort.js",
    "importStyle": "{numSortAsc}",
    "description": "Sorts passed numbers in a ascending manner",
    "lineNumber": 25,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "First",
        "description": "number"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "Second",
        "description": "number"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "Negative,",
        "description": "zero or positive number"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 808,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "numSortDesc",
    "memberof": "src/sort.js",
    "longname": "src/sort.js~numSortDesc",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/sort.js",
    "importStyle": "{numSortDesc}",
    "description": "Sorts passed numbers in a descending manner",
    "lineNumber": 33,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "First",
        "description": "number"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "Second",
        "description": "number"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "Negative,",
        "description": "zero or positive number"
      }
    ],
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 809,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/string.js",
    "memberof": null,
    "longname": "src/string.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {remove as removeDiacritics} from 'diacritics';\n\n/**\n * String utilities\n */\n\n/**\n * Removes whitespace from both sides of passed string\n * @param  {String} text\n * @return {String}\n */\nexport const trim = (text) => {\n    if (text.trim) {\n        return text.trim();\n    }\n    return text.replace(/^\\s*|\\s*$/g, '');\n}\n\n/**\n * Checks if passed string is empty\n * @param {String} text\n * @return {Boolean}\n */\nexport const isEmpty = (text) => trim(text) === '';\n\n/**\n * Makes regex safe string by escaping special characters from passed string\n * @param {String} text\n * @return {String} escaped string\n */\nexport const rgxEsc = (text) => {\n    let chars = /[-\\/\\\\^$*+?.()|[\\]{}]/g;\n    let escMatch = '\\\\$&';\n    return String(text).replace(chars, escMatch);\n}\n\n/**\n * Returns passed string as lowercase if caseSensitive flag set false. By\n * default it returns the string with no casing changes.\n * @param {String} text\n * @return {String} string\n */\nexport const matchCase = (text, caseSensitive = false) => {\n    if (!caseSensitive) {\n        return text.toLowerCase();\n    }\n    return text;\n}\n\n/**\n * Checks if passed data contains the searched term\n * @param  {String} term                Searched term\n * @param  {String} data                Data string\n * @param  {Boolean} exactMatch         Exact match\n * @param  {Boolean} caseSensitive      Case sensitive\n * @param  {Boolean} ignoreDiacritics   Ignore diacritics\n * @return {Boolean}\n */\nexport const contains = (term, data, exactMatch = false, caseSensitive = false,\n    ignoreDiacritics = false) => {\n    // Improved by Cedric Wartel (cwl) automatic exact match for selects and\n    // special characters are now filtered\n    let regexp;\n    let modifier = caseSensitive ? 'g' : 'gi';\n    if (ignoreDiacritics) {\n        term = removeDiacritics(term);\n        data = removeDiacritics(data);\n    }\n    if (exactMatch) {\n        regexp = new RegExp('(^\\\\s*)' + rgxEsc(term) + '(\\\\s*$)',\n            modifier);\n    } else {\n        regexp = new RegExp(rgxEsc(term), modifier);\n    }\n    return regexp.test(data);\n}\n"
  },
  {
    "__docId__": 810,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "trim",
    "memberof": "src/string.js",
    "longname": "src/string.js~trim",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/string.js",
    "importStyle": "{trim}",
    "description": "Removes whitespace from both sides of passed string",
    "lineNumber": 12,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 811,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isEmpty",
    "memberof": "src/string.js",
    "longname": "src/string.js~isEmpty",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/string.js",
    "importStyle": "{isEmpty}",
    "description": "Checks if passed string is empty",
    "lineNumber": 24,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 812,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "rgxEsc",
    "memberof": "src/string.js",
    "longname": "src/string.js~rgxEsc",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/string.js",
    "importStyle": "{rgxEsc}",
    "description": "Makes regex safe string by escaping special characters from passed string",
    "lineNumber": 31,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": "escaped string"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 813,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "matchCase",
    "memberof": "src/string.js",
    "longname": "src/string.js~matchCase",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/string.js",
    "importStyle": "{matchCase}",
    "description": "Returns passed string as lowercase if caseSensitive flag set false. By\ndefault it returns the string with no casing changes.",
    "lineNumber": 43,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "text",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": "string"
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 814,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "contains",
    "memberof": "src/string.js",
    "longname": "src/string.js~contains",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/string.js",
    "importStyle": "{contains}",
    "description": "Checks if passed data contains the searched term",
    "lineNumber": 59,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "term",
        "description": "Searched term"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "data",
        "description": "Data string"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "exactMatch",
        "description": "Exact match"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "caseSensitive",
        "description": "Case sensitive"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "ignoreDiacritics",
        "description": "Ignore diacritics"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 815,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/tablefilter.js",
    "memberof": null,
    "longname": "src/tablefilter.js",
    "access": null,
    "description": null,
    "lineNumber": 1,
    "content": "import {addEvt, cancelEvt, stopEvt, targetEvt, keyCode} from './event';\nimport {\n    addClass, createElm, createOpt, elm, getText, getFirstTextNode, hasClass,\n    removeClass, removeElm, tag\n} from './dom';\nimport {contains, matchCase, rgxEsc, trim} from './string';\nimport {isEmpty as isEmptyString} from './string';\nimport {\n    isArray, isEmpty, isFn, isNumber, isObj, isString, isUndef, EMPTY_FN\n} from './types';\nimport {parse as parseNb} from './number'\n\nimport {root} from './root';\nimport {Emitter} from './emitter';\nimport {GridLayout} from './modules/gridLayout';\nimport {Loader} from './modules/loader';\nimport {HighlightKeyword} from './modules/highlightKeywords';\nimport {PopupFilter} from './modules/popupFilter';\nimport {Dropdown} from './modules/dropdown';\nimport {CheckList} from './modules/checkList';\nimport {RowsCounter} from './modules/rowsCounter';\nimport {StatusBar} from './modules/statusBar';\nimport {Paging} from './modules/paging';\nimport {ClearButton} from './modules/clearButton';\nimport {Help} from './modules/help';\nimport {AlternateRows} from './modules/alternateRows';\nimport {NoResults} from './modules/noResults';\nimport {State} from './modules/state';\nimport {DateType} from './modules/dateType';\n\nimport {\n    INPUT, SELECT, MULTIPLE, CHECKLIST, NONE,\n    ENTER_KEY, TAB_KEY, ESC_KEY, UP_ARROW_KEY, DOWN_ARROW_KEY,\n    CELL_TAG, AUTO_FILTER_DELAY, NUMBER, DATE, FORMATTED_NUMBER\n} from './const';\n\nlet doc = root.document;\n\n/**\n * Makes HTML tables filterable and a bit more :)\n *\n * @export\n * @class TableFilter\n */\nexport class TableFilter {\n\n    /**\n     * Creates an instance of TableFilter\n     * requires `table` or `id` arguments, `row` and `configuration` optional\n     * @param {DOMElement} table Table DOM element\n     * @param {String} id Table id\n     * @param {Number} row index indicating the 1st row\n     * @param {Object} configuration object\n     */\n    constructor(...args) {\n        /**\n         * ID of current instance\n         * @type {String}\n         * @private\n         */\n        this.id = null;\n\n        /**\n         * Current version\n         * @type {String}\n         */\n        this.version = '{VERSION}';\n\n        /**\n         * Current year\n         * @type {Number}\n         * @private\n         */\n        this.year = new Date().getFullYear();\n\n        /**\n         * HTML Table DOM element\n         * @type {DOMElement}\n         */\n        this.tbl = null;\n\n        /**\n         * Calculated row's index from which starts filtering once filters\n         * are generated\n         * @type {Number}\n         */\n        this.refRow = null;\n\n        /**\n         * Index of the headers row\n         * @type {Number}\n         * @private\n         */\n        this.headersRow = null;\n\n        /**\n         * Configuration object\n         * @type {Object}\n         * @private\n         */\n        this.cfg = {};\n\n        /**\n         * Number of rows that can be filtered\n         * @type {Number}\n         * @private\n         */\n        this.nbFilterableRows = 0;\n\n        /**\n         * Number of cells in the reference row\n         * @type {Number}\n         * @private\n         */\n        this.nbCells = null;\n\n        let startRow;\n\n        // TODO: use for-of\n        args.forEach((arg) => {\n            if (typeof arg === 'object' && arg.nodeName === 'TABLE') {\n                this.tbl = arg;\n                this.id = arg.id || `tf_${new Date().getTime()}_`;\n            } else if (isString(arg)) {\n                this.id = arg;\n                this.tbl = elm(arg);\n            } else if (isNumber(arg)) {\n                startRow = arg;\n            } else if (isObj(arg)) {\n                this.cfg = arg;\n            }\n        });\n\n        if (!this.tbl || this.tbl.nodeName !== 'TABLE') {\n            throw new Error(`Could not instantiate TableFilter: HTML table\n                DOM element not found.`);\n        }\n\n        if (this.getRowsNb() === 0) {\n            throw new Error(`Could not instantiate TableFilter: HTML table\n                requires at least 1 row.`);\n        }\n\n        // configuration object\n        let f = this.cfg;\n\n        /**\n         * Event emitter instance\n         * @type {Emitter}\n         */\n        this.emitter = new Emitter();\n\n        //Start row et cols nb\n        this.refRow = isUndef(startRow) ? 2 : (startRow + 1);\n\n        /**\n         * Base path for static assets\n         * @type {String}\n         */\n        this.basePath = f.base_path || 'tablefilter/';\n\n        /*** filters' grid properties ***/\n\n        /**\n         * Enable/disable filters\n         * @type {Boolean}\n         */\n        this.fltGrid = f.grid === false ? false : true;\n\n        /**\n         * Enable/disable grid layout (fixed headers)\n         * @type {Boolean}\n         */\n        this.gridLayout = Boolean(f.grid_layout);\n\n        /**\n         * Filters row index\n         * @type {Number}\n         */\n        this.filtersRowIndex = isNaN(f.filters_row_index) ?\n            0 : f.filters_row_index;\n\n        /**\n         * Headers row index\n         * @type {Number}\n         */\n        this.headersRow = isNaN(f.headers_row_index) ?\n            (this.filtersRowIndex === 0 ? 1 : 0) : f.headers_row_index;\n\n        /**\n         * Define the type of cell containing a filter (td/th)\n         * @type {String}\n         */\n        this.fltCellTag = isString(f.filters_cell_tag) ?\n            f.filters_cell_tag : CELL_TAG;\n\n        /**\n         * List of filters IDs\n         * @type {Array}\n         * @private\n         */\n        this.fltIds = [];\n\n        /**\n         * List of valid rows indexes (rows visible upon filtering)\n         * @type {Array}\n         * @private\n         */\n        this.validRowsIndex = [];\n\n        /**\n         * Toolbar's container DOM element\n         * @type {DOMElement}\n         * @private\n         */\n        this.infDiv = null;\n\n        /**\n         * Left-side inner container DOM element (rows counter in toolbar)\n         * @type {DOMElement}\n         * @private\n         */\n        this.lDiv = null;\n\n        /**\n         * Right-side inner container DOM element (reset button,\n         * page length selector in toolbar)\n         * @type {DOMElement}\n         * @private\n         */\n        this.rDiv = null;\n\n        /**\n         * Middle inner container DOM element (paging elements in toolbar)\n         * @type {DOMElement}\n         * @private\n         */\n        this.mDiv = null;\n\n        /**\n         * Css class for toolbar's container DOM element\n         * @type {String}\n         */\n        this.infDivCssClass = f.inf_div_css_class || 'inf';\n\n        /**\n         * Css class for left-side inner container DOM element\n         * @type {String}\n         */\n        this.lDivCssClass = f.left_div_css_class || 'ldiv';\n\n        /**\n         * Css class for right-side inner container DOM element\n         * @type {String}\n         */\n        this.rDivCssClass = f.right_div_css_class || 'rdiv';\n\n        /**\n         * Css class for middle inner container DOM element\n         * @type {String}\n         */\n        this.mDivCssClass = f.middle_div_css_class || 'mdiv';\n\n        /*** filters' grid appearance ***/\n        /**\n         * Path for stylesheets\n         * @type {String}\n         */\n        this.stylePath = f.style_path || this.basePath + 'style/';\n\n        /**\n         * Main stylesheet path\n         * @type {String}\n         */\n        this.stylesheet = f.stylesheet || this.stylePath + 'tablefilter.css';\n\n        /**\n         * Main stylesheet ID\n         * @type {String}\n         * @private\n         */\n        this.stylesheetId = this.id + '_style';\n\n        /**\n         * Css class for the filters row\n         * @type {String}\n         */\n        this.fltsRowCssClass = f.flts_row_css_class || 'fltrow';\n\n        /**\n         * Enable/disable icons (paging, reset button)\n         * @type {Boolean}\n         */\n        this.enableIcons = f.enable_icons === false ? false : true;\n\n        /**\n         * Enable/disable alternating rows\n         * @type {Boolean}\n         */\n        this.alternateRows = Boolean(f.alternate_rows);\n\n        /**\n         * Indicate whether columns widths are set\n         * @type {Boolean}\n         * @private\n         */\n        this.hasColWidths = isArray(f.col_widths);\n\n        /**\n         * Columns widths array\n         * @type {Array}\n         */\n        this.colWidths = this.hasColWidths ? f.col_widths : [];\n\n        /**\n         * Css class for a filter element\n         * @type {String}\n         */\n        this.fltCssClass = f.flt_css_class || 'flt';\n\n        /**\n         * Css class for multiple select filters\n         * @type {String}\n         */\n        this.fltMultiCssClass = f.flt_multi_css_class || 'flt_multi';\n\n        /**\n         * Css class for small filter (when submit button is active)\n         * @type {String}\n         */\n        this.fltSmallCssClass = f.flt_small_css_class || 'flt_s';\n\n        /**\n         * Css class for single filter type\n         * @type {String}\n         */\n        this.singleFltCssClass = f.single_flt_css_class || 'single_flt';\n\n        /*** filters' grid behaviours ***/\n\n        /**\n         * Enable/disable enter key for input type filters\n         * @type {Boolean}\n         */\n        this.enterKey = f.enter_key === false ? false : true;\n\n        /**\n         * Callback fired before filtering process starts\n         * @type {Function}\n         */\n        this.onBeforeFilter = isFn(f.on_before_filter) ?\n            f.on_before_filter : EMPTY_FN;\n\n        /**\n         * Callback fired after filtering process is completed\n         * @type {Function}\n         */\n        this.onAfterFilter = isFn(f.on_after_filter) ?\n            f.on_after_filter : EMPTY_FN;\n\n        /**\n         * Enable/disable case sensitivity filtering\n         * @type {Boolean}\n         */\n        this.caseSensitive = Boolean(f.case_sensitive);\n\n        /**\n         * Indicate whether exact match filtering is enabled on a per column\n         * basis\n         * @type {Boolean}\n         * @private\n         */\n        this.hasExactMatchByCol = isArray(f.columns_exact_match);\n\n        /**\n         * Exact match filtering per column array\n         * @type {Array}\n         */\n        this.exactMatchByCol = this.hasExactMatchByCol ?\n            f.columns_exact_match : [];\n\n        /**\n         * Globally enable/disable exact match filtering\n         * @type {Boolean}\n         */\n        this.exactMatch = Boolean(f.exact_match);\n\n        /**\n         * Ignore diacritics globally or on a column basis\n         * @type {Boolean|Array}\n         */\n        this.ignoreDiacritics = f.ignore_diacritics;\n\n        /**\n         * Enable/disable linked filters filtering mode\n         * @type {Boolean}\n         */\n        this.linkedFilters = Boolean(f.linked_filters);\n\n        /**\n         * Enable/disable readonly state for excluded options when\n         * linked filters filtering mode is on\n         * @type {Boolean}\n         */\n        this.disableExcludedOptions = Boolean(f.disable_excluded_options);\n\n        /**\n         * Active filter ID\n         * @type {String}\n         * @private\n         */\n        this.activeFilterId = null;\n\n        /**\n         * Enable/disable always visible rows, excluded from filtering\n         * @type {Boolean}\n         */\n        this.hasVisibleRows = Boolean(f.rows_always_visible);\n\n        /**\n         * List of row indexes to be excluded from filtering\n         * @type {Array}\n         */\n        this.visibleRows = this.hasVisibleRows ? f.rows_always_visible : [];\n\n        /**\n         * Enable/disable external filters generation\n         * @type {Boolean}\n         */\n        this.isExternalFlt = Boolean(f.external_flt_grid);\n\n        /**\n         * List of containers IDs where external filters will be generated\n         * @type {Array}\n         */\n        this.externalFltTgtIds = f.external_flt_grid_ids || [];\n\n        /**\n         * Callback fired after filters are generated\n         * @type {Function}\n         */\n        this.onFiltersLoaded = isFn(f.on_filters_loaded) ?\n            f.on_filters_loaded : EMPTY_FN;\n\n        /**\n         * Enable/disable single filter filtering all columns\n         * @type {Boolean}\n         */\n        this.singleSearchFlt = Boolean(f.single_filter);\n\n        /**\n         * Callback fired after a row is validated during filtering\n         * @type {Function}\n         */\n        this.onRowValidated = isFn(f.on_row_validated) ?\n            f.on_row_validated : EMPTY_FN;\n\n        /**\n         * Specify which column implements a custom cell parser to retrieve the\n         * cell value:\n         * cell_parser: {\n         *     cols: [0, 2],\n         *     parse: function(tf, cell, colIndex) {\n         *         // custom cell parser logic here\n         *         return cellValue;\n         *     }\n         * }\n         * @type {Object}\n         */\n        this.cellParser = isObj(f.cell_parser) && isFn(f.cell_parser.parse) &&\n            isArray(f.cell_parser.cols) ?\n            f.cell_parser : { cols: [], parse: EMPTY_FN };\n\n        /**\n         * Global watermark text for input filter type or watermark for each\n         * filter if an array is supplied\n         * @type {String|Array}\n         */\n        this.watermark = f.watermark || '';\n\n        /**\n         * Indicate whether watermark is on a per column basis\n         * @type {Boolean}\n         * @private\n         */\n        this.isWatermarkArray = isArray(this.watermark);\n\n        /**\n         * Toolbar's custom container ID\n         * @type {String}\n         */\n        this.toolBarTgtId = f.toolbar_target_id || null;\n\n        /**\n         * Indicate whether help UI component is disabled\n         * @type {Boolean}\n         */\n        this.help = isUndef(f.help_instructions) ?\n            undefined : Boolean(f.help_instructions);\n\n        /**\n         * Indicate whether pop-up filters UI is enabled\n         * @type {Boolean}\n         */\n        this.popupFilters = Boolean(f.popup_filters);\n\n        /**\n         * Indicate whether filtered (active) columns indicator is enabled\n         * @type {Boolean}\n         */\n        this.markActiveColumns = Boolean(f.mark_active_columns);\n\n        /**\n         * Css class for filtered (active) columns\n         * @type {String}\n         */\n        this.activeColumnsCssClass = f.active_columns_css_class ||\n            'activeHeader';\n\n        /**\n         * Callback fired before a column is marked as filtered\n         * @type {Function}\n         */\n        this.onBeforeActiveColumn = isFn(f.on_before_active_column) ?\n            f.on_before_active_column : EMPTY_FN;\n\n        /**\n         * Callback fired after a column is marked as filtered\n         * @type {Function}\n         */\n        this.onAfterActiveColumn = isFn(f.on_after_active_column) ?\n            f.on_after_active_column : EMPTY_FN;\n\n        /*** select filter's customisation and behaviours ***/\n        /**\n         * Text for clear option in drop-down filter types (1st option)\n         * @type {String|Array}\n         */\n        this.clearFilterText = f.clear_filter_text || 'Clear';\n\n        /**\n         * Indicate whether empty option is enabled in drop-down filter types\n         * @type {Boolean}\n         */\n        this.enableEmptyOption = Boolean(f.enable_empty_option);\n\n        /**\n         * Text for empty option in drop-down filter types\n         * @type {String}\n         */\n        this.emptyText = f.empty_text || '(Empty)';\n\n        /**\n         * Indicate whether non-empty option is enabled in drop-down filter\n         * types\n         * @type {Boolean}\n         */\n        this.enableNonEmptyOption = Boolean(f.enable_non_empty_option);\n\n        /**\n         * Text for non-empty option in drop-down filter types\n         * @type {String}\n         */\n        this.nonEmptyText = f.non_empty_text || '(Non empty)';\n\n        /**\n         * Indicate whether drop-down filter types filter the table by default\n         * on change event\n         * @type {Boolean}\n         */\n        this.onSlcChange = f.on_change === false ? false : true;\n\n        /**\n         * Indicate whether options in drop-down filter types are sorted in a\n         * alpha-numeric manner by default\n         * @type {Boolean}\n         */\n        this.sortSlc = f.sort_select === false ? false : true;\n\n        /**\n         * Indicate whether options in drop-down filter types are sorted in a\n         * ascending numeric manner\n         * @type {Boolean}\n         * @private\n         */\n        this.isSortNumAsc = Boolean(f.sort_num_asc);\n\n        /**\n         * List of columns implementing options sorting in a ascending numeric\n         * manner\n         * @type {Array}\n         */\n        this.sortNumAsc = this.isSortNumAsc ? f.sort_num_asc : [];\n\n        /**\n         * Indicate whether options in drop-down filter types are sorted in a\n         * descending numeric manner\n         * @type {Boolean}\n         * @private\n         */\n        this.isSortNumDesc = Boolean(f.sort_num_desc);\n\n        /**\n         * List of columns implementing options sorting in a descending numeric\n         * manner\n         * @type {Array}\n         */\n        this.sortNumDesc = this.isSortNumDesc ? f.sort_num_desc : [];\n\n        /**\n         * Indicate whether drop-down filter types are populated on demand at\n         * first usage\n         * @type {Boolean}\n         */\n        this.loadFltOnDemand = Boolean(f.load_filters_on_demand);\n\n        /**\n         * Indicate whether custom drop-down filter options are implemented\n         * @type {Boolean}\n         */\n        this.hasCustomOptions = isObj(f.custom_options);\n\n        /**\n         * Custom options definition of a per column basis, ie:\n         *\tcustom_options: {\n         *      cols:[0, 1],\n         *      texts: [\n         *          ['a0', 'b0', 'c0'],\n         *          ['a1', 'b1', 'c1']\n         *      ],\n         *      values: [\n         *          ['a0', 'b0', 'c0'],\n         *          ['a1', 'b1', 'c1']\n         *      ],\n         *      sorts: [false, true]\n         *  }\n         *\n         * @type {Object}\n         */\n        this.customOptions = f.custom_options;\n\n        /*** Filter operators ***/\n        /**\n         * Regular expression operator for input filter. Defaults to 'rgx:'\n         * @type {String}\n         */\n        this.rgxOperator = f.regexp_operator || 'rgx:';\n\n        /**\n         * Empty cells operator for input filter. Defaults to '[empty]'\n         * @type {String}\n         */\n        this.emOperator = f.empty_operator || '[empty]';\n\n        /**\n         * Non-empty cells operator for input filter. Defaults to '[nonempty]'\n         * @type {String}\n         */\n        this.nmOperator = f.nonempty_operator || '[nonempty]';\n\n        /**\n         * Logical OR operator for input filter. Defaults to '||'\n         * @type {String}\n         */\n        this.orOperator = f.or_operator || '||';\n\n        /**\n         * Logical AND operator for input filter. Defaults to '&&'\n         * @type {String}\n         */\n        this.anOperator = f.and_operator || '&&';\n\n        /**\n         * Greater than operator for input filter. Defaults to '>'\n         * @type {String}\n         */\n        this.grOperator = f.greater_operator || '>';\n\n        /**\n         * Lower than operator for input filter. Defaults to '<'\n         * @type {String}\n         */\n        this.lwOperator = f.lower_operator || '<';\n\n        /**\n         * Lower than or equal operator for input filter. Defaults to '<='\n         * @type {String}\n         */\n        this.leOperator = f.lower_equal_operator || '<=';\n\n        /**\n         * Greater than or equal operator for input filter. Defaults to '>='\n         * @type {String}\n         */\n        this.geOperator = f.greater_equal_operator || '>=';\n\n        /**\n         * Inequality operator for input filter. Defaults to '!'\n         * @type {String}\n         */\n        this.dfOperator = f.different_operator || '!';\n\n        /**\n         * Like operator for input filter. Defaults to '!'\n         * @type {String}\n         */\n        this.lkOperator = f.like_operator || '*';\n\n        /**\n         * Strict equality operator for input filter. Defaults to '='\n         * @type {String}\n         */\n        this.eqOperator = f.equal_operator || '=';\n\n        /**\n         * Starts with operator for input filter. Defaults to '='\n         * @type {String}\n         */\n        this.stOperator = f.start_with_operator || '{';\n\n        /**\n         * Ends with operator for input filter. Defaults to '='\n         * @type {String}\n         */\n        this.enOperator = f.end_with_operator || '}';\n\n        // this.curExp = f.cur_exp || '^[¥£€$]';\n\n        /**\n         * Stored values separator\n         * @type {String}\n         */\n        this.separator = f.separator || ',';\n\n        /**\n         * Enable rows counter UI component\n         * @type {Boolean}\n         */\n        this.rowsCounter = Boolean(f.rows_counter);\n\n        /**\n         * Enable status bar UI component\n         * @type {Boolean}\n         */\n        this.statusBar = Boolean(f.status_bar);\n\n        /**\n         * Enable activity/spinner indicator UI component\n         * @type {Boolean}\n         */\n        this.loader = Boolean(f.loader);\n\n        /*** validation - reset buttons/links ***/\n        /**\n         * Enable filters submission button\n         * @type {Boolean}\n         */\n        this.displayBtn = Boolean(f.btn);\n\n        /**\n         * Define filters submission button text\n         * @type {String}\n         */\n        this.btnText = f.btn_text || (!this.enableIcons ? 'Go' : '');\n\n        /**\n         * Css class for filters submission button\n         * @type {String}\n         */\n        this.btnCssClass = f.btn_css_class ||\n            (!this.enableIcons ? 'btnflt' : 'btnflt_icon');\n\n        /**\n         * Enable clear button\n         * @type {Boolean}\n         */\n        this.btnReset = Boolean(f.btn_reset);\n\n        /**\n         * Callback fired before filters are cleared\n         * @type {Function}\n         */\n        this.onBeforeReset = isFn(f.on_before_reset) ?\n            f.on_before_reset : EMPTY_FN;\n\n        /**\n         * Callback fired after filters are cleared\n         * @type {Function}\n         */\n        this.onAfterReset = isFn(f.on_after_reset) ?\n            f.on_after_reset : EMPTY_FN;\n\n        /**\n         * Enable paging component\n         * @type {Boolean}\n         */\n        this.paging = Boolean(f.paging);\n\n        /**\n         * Number of hidden rows\n         * @type {Number}\n         * @private\n         */\n        this.nbHiddenRows = 0;\n\n        /**\n         * Enable auto-filter behaviour, table is filtered when a user\n         * stops typing\n         * @type {Boolean}\n         */\n        this.autoFilter = Boolean(f.auto_filter);\n\n        /**\n         * Auto-filter delay in msecs\n         * @type {Number}\n         */\n        this.autoFilterDelay = !isNaN(f.auto_filter_delay) ?\n            f.auto_filter_delay : AUTO_FILTER_DELAY;\n\n        /**\n         * Indicate whether user is typing\n         * @type {Boolean}\n         * @private\n         */\n        this.isUserTyping = null;\n\n        /**\n         * Auto-filter interval ID\n         * @type {String}\n         * @private\n         */\n        this.autoFilterTimer = null;\n\n        /**\n         * Enable keyword highlighting behaviour\n         * @type {Boolean}\n         */\n        this.highlightKeywords = Boolean(f.highlight_keywords);\n\n        /**\n         * Enable no results message UI component\n         * @type {Boolean}\n         */\n        this.noResults = isObj(f.no_results_message) ||\n            Boolean(f.no_results_message);\n\n        /**\n         * Enable state persistence\n         * @type {Boolean}\n         */\n        this.state = isObj(f.state) || Boolean(f.state);\n\n        /*** data types ***/\n\n        /**\n         * Define default locale, default to 'en' as per Sugar Date module:\n         * https://sugarjs.com/docs/#/DateLocales\n         * @type {String}\n         */\n        this.locale = f.locale || 'en';\n\n        /**\n         * Define thousands separator ',' or '.', defaults to ','\n         * @type {String}\n         */\n        this.thousandsSeparator = f.thousands_separator || ',';\n\n        /**\n         * Define decimal separator ',' or '.', defaults to '.'\n         * @type {String}\n         */\n        this.decimalSeparator = f.decimal_separator || '.';\n\n        /**\n         * Define data types on a column basis, possible values 'string',\n         * 'number', 'formatted-number', 'date', 'ipaddress' ie:\n         * col_types : [\n         *  'string', 'date', 'number',\n         *  { type: 'formatted-number', decimal: ',', thousands: '.' },\n         *  { type: 'date', locale: 'en-gb' },\n         *  { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] }\n         * ]\n         *\n         * Refer to https://sugarjs.com/docs/#/DateParsing for exhaustive\n         * information on date parsing formats supported by Sugar Date\n         * @type {Array}\n         */\n        this.colTypes = isArray(f.col_types) ? f.col_types : [];\n\n        /*** ids prefixes ***/\n        /**\n         * Main prefix\n         * @private\n         */\n        this.prfxTf = 'TF';\n\n        /**\n         * Filter's ID prefix (inputs - selects)\n         * @private\n         */\n        this.prfxFlt = 'flt';\n\n        /**\n         * Button's ID prefix\n         * @private\n         */\n        this.prfxValButton = 'btn';\n\n        /**\n         * Toolbar container ID prefix\n         * @private\n         */\n        this.prfxInfDiv = 'inf_';\n\n        /**\n         * Toolbar left element ID prefix\n         * @private\n         */\n        this.prfxLDiv = 'ldiv_';\n\n        /**\n         * Toolbar right element ID prefix\n         * @private\n         */\n        this.prfxRDiv = 'rdiv_';\n\n        /**\n         * Toolbar middle element ID prefix\n         * @private\n         */\n        this.prfxMDiv = 'mdiv_';\n\n        /**\n         * Responsive Css class\n         * @private\n         */\n        this.prfxResponsive = 'resp';\n\n        /*** extensions ***/\n        /**\n         * List of loaded extensions\n         * @type {Array}\n         * @private\n         */\n        this.extensions = f.extensions;\n\n        /**\n         * Determine whether extensions are loaded\n         * @type {Boolean}\n         * @private\n         */\n        this.hasExtensions = isArray(this.extensions);\n\n        /*** themes ***/\n        /**\n         * Enable default theme\n         * @type {Boolean}\n         */\n        this.enableDefaultTheme = Boolean(f.enable_default_theme);\n\n        /**\n         * Determine whether themes are enables\n         * @type {Boolean}\n         * @private\n         */\n        this.hasThemes = (this.enableDefaultTheme || isArray(f.themes));\n\n        /**\n         * List of themes, ie:\n         * themes: [{ name: 'skyblue' }]\n         * @type {Array}\n         */\n        this.themes = f.themes || [];\n\n        /**\n         * Define path to themes assets, defaults to\n         * 'tablefilter/style/themes/'. Usage:\n         * themes: [{ name: 'skyblue' }]\n         * @type {Array}\n         */\n        this.themesPath = f.themes_path || this.stylePath + 'themes/';\n\n        /**\n         * Enable responsive layout\n         * @type {Boolean}\n         */\n        this.responsive = Boolean(f.responsive);\n\n        /**\n         * Features registry\n         * @private\n         */\n        this.Mod = {};\n\n        /**\n         * Extensions registry\n         * @private\n         */\n        this.ExtRegistry = {};\n    }\n\n    /**\n     * Initialise features and layout\n     */\n    init() {\n        if (this.initialized) {\n            return;\n        }\n\n        this.nbCells = this.getCellsNb(this.refRow);\n        let Mod = this.Mod;\n        let n = this.singleSearchFlt ? 1 : this.nbCells;\n        let inpclass;\n\n        //loads stylesheet if not imported\n        this.import(this.stylesheetId, this.stylesheet, null, 'link');\n\n        //loads theme\n        if (this.hasThemes) {\n            this.loadThemes();\n        }\n\n        // Instanciate sugar date wrapper\n        Mod.dateType = Mod.dateType || new DateType(this);\n        Mod.dateType.init();\n\n        // Instantiate help feature and initialise only if set true\n        Mod.help = Mod.help || new Help(this);\n        if (this.help) {\n            Mod.help.init();\n        }\n\n        if (this.state) {\n            Mod.state = Mod.state || new State(this);\n            Mod.state.init();\n        }\n\n        if (this.gridLayout) {\n            Mod.gridLayout = Mod.gridLayout || new GridLayout(this);\n            Mod.gridLayout.init();\n        }\n\n        if (this.loader) {\n            Mod.loader = Mod.loader || new Loader(this);\n            Mod.loader.init();\n        }\n\n        if (this.highlightKeywords) {\n            Mod.highlightKeyword = new HighlightKeyword(this);\n            Mod.highlightKeyword.init();\n        }\n\n        if (this.popupFilters) {\n            Mod.popupFilter = Mod.popupFilter || new PopupFilter(this);\n            Mod.popupFilter.init();\n        }\n\n        //filters grid is not generated\n        if (!this.fltGrid) {\n            this._initNoFilters();\n        } else {\n            let fltrow = this._insertFiltersRow();\n\n            this.nbFilterableRows = this.getRowsNb();\n\n            // Generate filters\n            for (let i = 0; i < n; i++) {\n                this.emitter.emit('before-filter-init', this, i);\n\n                let fltcell = createElm(this.fltCellTag),\n                    col = this.getFilterType(i);\n\n                if (this.singleSearchFlt) {\n                    fltcell.colSpan = this.nbCells;\n                }\n                if (!this.gridLayout) {\n                    fltrow.appendChild(fltcell);\n                }\n                inpclass = (i === n - 1 && this.displayBtn) ?\n                    this.fltSmallCssClass : this.fltCssClass;\n\n                //only 1 input for single search\n                if (this.singleSearchFlt) {\n                    col = INPUT;\n                    inpclass = this.singleFltCssClass;\n                }\n\n                //drop-down filters\n                if (col === SELECT || col === MULTIPLE) {\n                    if (!Mod.dropdown) {\n                        Mod.dropdown = new Dropdown(this);\n                    }\n                    Mod.dropdown.init(i, this.isExternalFlt, fltcell);\n                }\n                // checklist\n                else if (col === CHECKLIST) {\n                    if (!Mod.checkList) {\n                        Mod.checkList = new CheckList(this);\n                    }\n                    Mod.checkList.init(i, this.isExternalFlt, fltcell);\n                } else {\n                    this._buildInputFilter(i, inpclass, fltcell);\n                }\n\n                // this adds submit button\n                if (i === n - 1 && this.displayBtn) {\n                    this._buildSubmitButton(i, fltcell);\n                }\n\n                this.emitter.emit('after-filter-init', this, i);\n            }\n\n            this.emitter.on(['filter-focus'],\n                (tf, filter) => this.setActiveFilterId(filter.id));\n\n        }//if this.fltGrid\n\n        /* Features */\n        if (this.hasVisibleRows) {\n            this.emitter.on(['after-filtering'],\n                () => this.enforceVisibility());\n            this.enforceVisibility();\n        }\n        if (this.rowsCounter) {\n            Mod.rowsCounter = new RowsCounter(this);\n            Mod.rowsCounter.init();\n        }\n        if (this.statusBar) {\n            Mod.statusBar = new StatusBar(this);\n            Mod.statusBar.init();\n        }\n        if (this.paging) {\n            if (!Mod.paging) {\n                Mod.paging = new Paging(this);\n                Mod.paging.init();\n            } else {\n                Mod.paging.reset();\n            }\n        }\n        if (this.btnReset) {\n            Mod.clearButton = new ClearButton(this);\n            Mod.clearButton.init();\n        }\n\n        if (this.hasColWidths && !this.gridLayout) {\n            this.setColWidths();\n        }\n        if (this.alternateRows) {\n            Mod.alternateRows = new AlternateRows(this);\n            Mod.alternateRows.init();\n        }\n        if (this.noResults) {\n            Mod.noResults = Mod.noResults || new NoResults(this);\n            Mod.noResults.init();\n        }\n\n        //TF css class is added to table\n        if (!this.gridLayout) {\n            addClass(this.tbl, this.prfxTf);\n            if (this.responsive) {\n                addClass(this.tbl, this.prfxResponsive);\n            }\n        }\n\n        /* Loads extensions */\n        if (this.hasExtensions) {\n            this.initExtensions();\n        }\n\n        // Subscribe to events\n        if (this.markActiveColumns) {\n            this.emitter.on(['before-filtering'],\n                () => this.clearActiveColumns());\n            this.emitter.on(['cell-processed'],\n                (tf, colIndex) => this.markActiveColumn(colIndex));\n        }\n        if (this.linkedFilters) {\n            this.emitter.on(['after-filtering'], () => this.linkFilters());\n        }\n\n        /** @inherited */\n        this.initialized = true;\n\n        this.onFiltersLoaded(this);\n\n        this.emitter.emit('initialized', this);\n    }\n\n    /**\n     * Detect <enter> key\n     * @param {Event} evt\n     */\n    detectKey(evt) {\n        if (!this.enterKey) {\n            return;\n        }\n        if (evt) {\n            let key = keyCode(evt);\n            if (key === ENTER_KEY) {\n                this.filter();\n                cancelEvt(evt);\n                stopEvt(evt);\n            } else {\n                this.isUserTyping = true;\n                root.clearInterval(this.autoFilterTimer);\n                this.autoFilterTimer = null;\n            }\n        }\n    }\n\n    /**\n     * Filter's keyup event: if auto-filter on, detect user is typing and filter\n     * columns\n     * @param {Event} evt\n     */\n    onKeyUp(evt) {\n        if (!this.autoFilter) {\n            return;\n        }\n        let key = keyCode(evt);\n        this.isUserTyping = false;\n\n        function filter() {\n            root.clearInterval(this.autoFilterTimer);\n            this.autoFilterTimer = null;\n            if (!this.isUserTyping) {\n                this.filter();\n                this.isUserTyping = null;\n            }\n        }\n\n        if (key !== ENTER_KEY && key !== TAB_KEY && key !== ESC_KEY &&\n            key !== UP_ARROW_KEY && key !== DOWN_ARROW_KEY) {\n            if (this.autoFilterTimer === null) {\n                this.autoFilterTimer = root.setInterval(filter.bind(this),\n                    this.autoFilterDelay);\n            }\n        } else {\n            root.clearInterval(this.autoFilterTimer);\n            this.autoFilterTimer = null;\n        }\n    }\n\n    /**\n     * Filter's keydown event: if auto-filter on, detect user is typing\n     */\n    onKeyDown() {\n        if (this.autoFilter) {\n            this.isUserTyping = true;\n        }\n    }\n\n    /**\n     * Filter's focus event\n     * @param {Event} evt\n     */\n    onInpFocus(evt) {\n        let elm = targetEvt(evt);\n        this.emitter.emit('filter-focus', this, elm);\n    }\n\n    /**\n     * Filter's blur event: if auto-filter on, clear interval on filter blur\n     */\n    onInpBlur() {\n        if (this.autoFilter) {\n            this.isUserTyping = false;\n            root.clearInterval(this.autoFilterTimer);\n        }\n        this.emitter.emit('filter-blur', this);\n    }\n\n    /**\n     * Insert filters row at initialization\n     */\n    _insertFiltersRow() {\n        // TODO: prevent filters row generation for popup filters too,\n        // to reduce and simplify headers row index adjusting across lib modules\n        // (GridLayout, PopupFilter etc)\n        if (this.gridLayout) {\n            return;\n        }\n        let fltrow;\n\n        let thead = tag(this.tbl, 'thead');\n        if (thead.length > 0) {\n            fltrow = thead[0].insertRow(this.filtersRowIndex);\n        } else {\n            fltrow = this.tbl.insertRow(this.filtersRowIndex);\n        }\n\n        fltrow.className = this.fltsRowCssClass;\n\n        if (this.isExternalFlt) {\n            fltrow.style.display = NONE;\n        }\n\n        this.emitter.emit('filters-row-inserted', this, fltrow);\n        return fltrow;\n    }\n\n    /**\n     * Initialize filtersless table\n     */\n    _initNoFilters() {\n        if (this.fltGrid) {\n            return;\n        }\n        this.refRow = this.refRow > 0 ? this.refRow - 1 : 0;\n        this.nbFilterableRows = this.getRowsNb();\n    }\n\n    /**\n     * Build input filter type\n     * @param  {Number} colIndex      Column index\n     * @param  {String} cssClass      Css class applied to filter\n     * @param  {DOMElement} container Container DOM element\n     */\n    _buildInputFilter(colIndex, cssClass, container) {\n        let col = this.getFilterType(colIndex);\n        let externalFltTgtId = this.isExternalFlt ?\n            this.externalFltTgtIds[colIndex] : null;\n        let inpType = col === INPUT ? 'text' : 'hidden';\n        let inp = createElm(INPUT,\n            ['id', this.buildFilterId(colIndex)],\n            ['type', inpType], ['ct', colIndex]);\n\n        if (inpType !== 'hidden' && this.watermark) {\n            inp.setAttribute('placeholder',\n                this.isWatermarkArray ? (this.watermark[colIndex] || '') :\n                    this.watermark\n            );\n        }\n        inp.className = cssClass || this.fltCssClass;\n        addEvt(inp, 'focus', (evt) => this.onInpFocus(evt));\n\n        //filter is appended in custom element\n        if (externalFltTgtId) {\n            elm(externalFltTgtId).appendChild(inp);\n        } else {\n            container.appendChild(inp);\n        }\n\n        this.fltIds.push(inp.id);\n\n        addEvt(inp, 'keypress', (evt) => this.detectKey(evt));\n        addEvt(inp, 'keydown', () => this.onKeyDown());\n        addEvt(inp, 'keyup', (evt) => this.onKeyUp(evt));\n        addEvt(inp, 'blur', () => this.onInpBlur());\n    }\n\n    /**\n     * Build submit button\n     * @param  {Number} colIndex      Column index\n     * @param  {DOMElement} container Container DOM element\n     */\n    _buildSubmitButton(colIndex, container) {\n        let externalFltTgtId = this.isExternalFlt ?\n            this.externalFltTgtIds[colIndex] : null;\n        let btn = createElm(INPUT,\n            ['type', 'button'],\n            ['value', this.btnText]\n        );\n        btn.className = this.btnCssClass;\n\n        //filter is appended in custom element\n        if (externalFltTgtId) {\n            elm(externalFltTgtId).appendChild(btn);\n        } else {\n            container.appendChild(btn);\n        }\n\n        addEvt(btn, 'click', () => this.filter());\n    }\n\n    /**\n     * Return a feature instance for a given name\n     * @param  {String} name Name of the feature\n     * @return {Object}\n     */\n    feature(name) {\n        return this.Mod[name];\n    }\n\n    /**\n     * Initialise all the extensions defined in the configuration object\n     */\n    initExtensions() {\n        let exts = this.extensions;\n        // Set config's publicPath dynamically for Webpack...\n        __webpack_public_path__ = this.basePath;\n\n        this.emitter.emit('before-loading-extensions', this);\n        for (let i = 0, len = exts.length; i < len; i++) {\n            let ext = exts[i];\n            if (!this.ExtRegistry[ext.name]) {\n                this.loadExtension(ext);\n            }\n        }\n        this.emitter.emit('after-loading-extensions', this);\n    }\n\n    /**\n     * Load an extension module\n     * @param  {Object} ext Extension config object\n     */\n    loadExtension(ext) {\n        if (!ext || !ext.name) {\n            return;\n        }\n\n        let name = ext.name;\n        let path = ext.path;\n        let modulePath;\n\n        if (name && path) {\n            modulePath = ext.path + name;\n        } else {\n            name = name.replace('.js', '');\n            modulePath = 'extensions/{}/{}'.replace(/{}/g, name);\n        }\n\n        // Require pattern for Webpack\n        require(['./' + modulePath], (mod) => {\n            /* eslint-disable */\n            let inst = new mod.default(this, ext);\n            /* eslint-enable */\n            inst.init();\n            this.ExtRegistry[name] = inst;\n        });\n    }\n\n    /**\n     * Get an extension instance\n     * @param  {String} name Name of the extension\n     * @return {Object}      Extension instance\n     */\n    extension(name) {\n        return this.ExtRegistry[name];\n    }\n\n    /**\n     * Check passed extension name exists\n     * @param  {String}  name Name of the extension\n     * @return {Boolean}\n     */\n    hasExtension(name) {\n        return !isEmpty(this.ExtRegistry[name]);\n    }\n\n    /**\n     * Destroy all the extensions store in extensions registry\n     */\n    destroyExtensions() {\n        let reg = this.ExtRegistry;\n\n        Object.keys(reg).forEach((key) => {\n            reg[key].destroy();\n            reg[key] = undefined;\n        });\n    }\n\n    /**\n     * Load themes defined in the configuration object\n     */\n    loadThemes() {\n        let themes = this.themes;\n        this.emitter.emit('before-loading-themes', this);\n\n        //Default theme config\n        if (this.enableDefaultTheme) {\n            let defaultTheme = { name: 'default' };\n            this.themes.push(defaultTheme);\n        }\n        if (isArray(themes)) {\n            for (let i = 0, len = themes.length; i < len; i++) {\n                let theme = themes[i];\n                let name = theme.name;\n                let path = theme.path;\n                let styleId = this.prfxTf + name;\n                if (name && !path) {\n                    path = this.themesPath + name + '/' + name + '.css';\n                }\n                else if (!name && theme.path) {\n                    name = 'theme{0}'.replace('{0}', i);\n                }\n\n                if (!this.isImported(path, 'link')) {\n                    this.import(styleId, path, null, 'link');\n                }\n            }\n        }\n\n        // Enable loader indicator\n        this.loader = true;\n\n        this.emitter.emit('after-loading-themes', this);\n    }\n\n    /**\n     * Return stylesheet DOM element for a given theme name\n     * @return {DOMElement} stylesheet element\n     */\n    getStylesheet(name = 'default') {\n        return elm(this.prfxTf + name);\n    }\n\n    /**\n     * Destroy filter grid\n     */\n    destroy() {\n        if (!this.initialized) {\n            return;\n        }\n\n        let emitter = this.emitter;\n\n        if (this.isExternalFlt && !this.popupFilters) {\n            this.removeExternalFlts();\n        }\n        if (this.infDiv) {\n            this.removeToolbar();\n        }\n        if (this.markActiveColumns) {\n            this.clearActiveColumns();\n            emitter.off(['before-filtering'], () => this.clearActiveColumns());\n            emitter.off(['cell-processed'],\n                (tf, colIndex) => this.markActiveColumn(colIndex));\n        }\n        if (this.hasExtensions) {\n            this.destroyExtensions();\n        }\n\n        this.validateAllRows();\n\n        if (this.fltGrid && !this.gridLayout) {\n            this.tbl.deleteRow(this.filtersRowIndex);\n        }\n\n        // broadcast destroy event modules and extensions are subscribed to\n        emitter.emit('destroy', this);\n\n        // unsubscribe to events\n        if (this.hasVisibleRows) {\n            emitter.off(['after-filtering'], () => this.enforceVisibility());\n        }\n        if (this.linkedFilters) {\n            emitter.off(['after-filtering'], () => this.linkFilters());\n        }\n        this.emitter.off(['filter-focus'],\n            (tf, filter) => this.setActiveFilterId(filter.id));\n\n        removeClass(this.tbl, this.prfxTf);\n        removeClass(this.tbl, this.prfxResponsive);\n\n        this.nbHiddenRows = 0;\n        this.validRowsIndex = [];\n        this.fltIds = [];\n        this.initialized = false;\n    }\n\n    /**\n     * Generate container element for paging, reset button, rows counter etc.\n     */\n    setToolbar() {\n        if (this.infDiv) {\n            return;\n        }\n\n        /*** container div ***/\n        let infDiv = createElm('div');\n        infDiv.className = this.infDivCssClass;\n\n        //custom container\n        if (this.toolBarTgtId) {\n            elm(this.toolBarTgtId).appendChild(infDiv);\n        }\n        //grid-layout\n        else if (this.gridLayout) {\n            let gridLayout = this.Mod.gridLayout;\n            gridLayout.tblMainCont.appendChild(infDiv);\n            infDiv.className = gridLayout.infDivCssClass;\n        }\n        //default location: just above the table\n        else {\n            let cont = createElm('caption');\n            cont.appendChild(infDiv);\n            this.tbl.insertBefore(cont, this.tbl.firstChild);\n        }\n        this.infDiv = infDiv;\n\n        /*** left div containing rows # displayer ***/\n        let lDiv = createElm('div');\n        lDiv.className = this.lDivCssClass;\n        infDiv.appendChild(lDiv);\n        this.lDiv = lDiv;\n\n        /***    right div containing reset button\n                + nb results per page select    ***/\n        let rDiv = createElm('div');\n        rDiv.className = this.rDivCssClass;\n        infDiv.appendChild(rDiv);\n        this.rDiv = rDiv;\n\n        /*** mid div containing paging elements ***/\n        let mDiv = createElm('div');\n        mDiv.className = this.mDivCssClass;\n        infDiv.appendChild(mDiv);\n        this.mDiv = mDiv;\n\n        // emit help initialisation only if undefined\n        if (isUndef(this.help)) {\n            // explicitily set enabled field to true to initialise help by\n            // default, only if setting is undefined\n            this.Mod.help.enabled = true;\n            this.emitter.emit('init-help', this);\n        }\n    }\n\n    /**\n     * Remove toolbar container element\n     */\n    removeToolbar() {\n        if (!this.infDiv) {\n            return;\n        }\n        removeElm(this.infDiv);\n        this.infDiv = null;\n\n        let tbl = this.tbl;\n        let captions = tag(tbl, 'caption');\n        if (captions.length > 0) {\n            [].forEach.call(captions, (elm) => tbl.removeChild(elm));\n        }\n    }\n\n    /**\n     * Remove all the external column filters\n     */\n    removeExternalFlts() {\n        if (!this.isExternalFlt) {\n            return;\n        }\n        let ids = this.externalFltTgtIds,\n            len = ids.length;\n        for (let ct = 0; ct < len; ct++) {\n            let externalFltTgtId = ids[ct],\n                externalFlt = elm(externalFltTgtId);\n            if (externalFlt) {\n                externalFlt.innerHTML = '';\n            }\n        }\n    }\n\n    /**\n     * Check if given column implements a filter with custom options\n     * @param  {Number}  colIndex Column's index\n     * @return {Boolean}\n     */\n    isCustomOptions(colIndex) {\n        return this.hasCustomOptions &&\n            this.customOptions.cols.indexOf(colIndex) !== -1;\n    }\n\n    /**\n     * Returns an array [[value0, value1 ...],[text0, text1 ...]] with the\n     * custom options values and texts\n     * @param  {Number} colIndex Column's index\n     * @return {Array}\n     */\n    getCustomOptions(colIndex) {\n        if (isEmpty(colIndex) || !this.isCustomOptions(colIndex)) {\n            return;\n        }\n\n        let customOptions = this.customOptions;\n        let cols = customOptions.cols;\n        let optTxt = [], optArray = [];\n        let index = cols.indexOf(colIndex);\n        let slcValues = customOptions.values[index];\n        let slcTexts = customOptions.texts[index];\n        let slcSort = customOptions.sorts[index];\n\n        for (let r = 0, len = slcValues.length; r < len; r++) {\n            optArray.push(slcValues[r]);\n            if (slcTexts[r]) {\n                optTxt.push(slcTexts[r]);\n            } else {\n                optTxt.push(slcValues[r]);\n            }\n        }\n        if (slcSort) {\n            optArray.sort();\n            optTxt.sort();\n        }\n        return [optArray, optTxt];\n    }\n\n    /**\n     * Filter the table by retrieving the data from each cell in every single\n     * row and comparing it to the search term for current column. A row is\n     * hidden when all the search terms are not found in inspected row.\n     */\n    filter() {\n        if (!this.fltGrid || !this.initialized) {\n            return;\n        }\n        //fire onbefore callback\n        this.onBeforeFilter(this);\n        this.emitter.emit('before-filtering', this);\n\n        let row = this.tbl.rows,\n            nbRows = this.getRowsNb(true),\n            hiddenRows = 0;\n\n        this.validRowsIndex = [];\n        // search args re-init\n        let searchArgs = this.getFiltersValue();\n\n        for (let k = this.refRow; k < nbRows; k++) {\n            // already filtered rows display re-init\n            row[k].style.display = '';\n\n            let cells = row[k].cells;\n            let nchilds = cells.length;\n\n            // checks if row has exact cell #\n            if (nchilds !== this.nbCells) {\n                continue;\n            }\n\n            let occurence = [],\n                isRowValid = true,\n                //only for single filter search\n                singleFltRowValid = false;\n\n            // this loop retrieves cell data\n            for (let j = 0; j < nchilds; j++) {\n                //searched keyword\n                let sA = searchArgs[this.singleSearchFlt ? 0 : j];\n\n                if (sA === '') {\n                    continue;\n                }\n\n                let cellValue = matchCase(this.getCellValue(cells[j]),\n                    this.caseSensitive);\n\n                //multiple search parameter operator ||\n                let sAOrSplit = sA.toString().split(this.orOperator),\n                    //multiple search || parameter boolean\n                    hasMultiOrSA = sAOrSplit.length > 1,\n                    //multiple search parameter operator &&\n                    sAAndSplit = sA.toString().split(this.anOperator),\n                    //multiple search && parameter boolean\n                    hasMultiAndSA = sAAndSplit.length > 1;\n\n                //detect operators or array query\n                if (isArray(sA) || hasMultiOrSA || hasMultiAndSA) {\n                    let cS,\n                        s,\n                        occur = false;\n                    if (isArray(sA)) {\n                        s = sA;\n                    } else {\n                        s = hasMultiOrSA ? sAOrSplit : sAAndSplit;\n                    }\n                    // isolate search term and check occurence in cell data\n                    for (let w = 0, len = s.length; w < len; w++) {\n                        cS = trim(s[w]);\n                        occur = this._testTerm(cS, cellValue, j);\n\n                        if (occur) {\n                            this.emitter.emit('highlight-keyword', this,\n                                cells[j], cS);\n                        }\n                        if ((hasMultiOrSA && occur) ||\n                            (hasMultiAndSA && !occur)) {\n                            break;\n                        }\n                        if (isArray(sA) && occur) {\n                            break;\n                        }\n                    }\n                    occurence[j] = occur;\n\n                }\n                //single search parameter\n                else {\n                    occurence[j] = this._testTerm(trim(sA), cellValue, j);\n                    if (occurence[j]) {\n                        this.emitter.emit('highlight-keyword', this, cells[j],\n                            sA);\n                    }\n                }//else single param\n\n                if (!occurence[j]) {\n                    isRowValid = false;\n                }\n                if (this.singleSearchFlt && occurence[j]) {\n                    singleFltRowValid = true;\n                }\n\n                this.emitter.emit('cell-processed', this, j, cells[j]);\n            }//for j\n\n            if (this.singleSearchFlt && singleFltRowValid) {\n                isRowValid = true;\n            }\n\n            this.validateRow(k, isRowValid);\n            if (!isRowValid) {\n                hiddenRows++;\n            }\n\n            this.emitter.emit('row-processed', this, k,\n                this.validRowsIndex.length, isRowValid);\n        }// for k\n\n        this.nbHiddenRows = hiddenRows;\n\n        //fire onafterfilter callback\n        this.onAfterFilter(this);\n\n        this.emitter.emit('after-filtering', this, searchArgs);\n    }\n\n    /**\n     * Test for a match of search term in cell data\n     * @param {String} term      Search term\n     * @param {String} cellValue  Cell data\n     * @param {Number} colIdx    Column index\n     * @returns {Boolean}\n     */\n    _testTerm(term, cellValue, colIdx) {\n        let numData;\n        let decimal = this.decimalSeparator;\n        let reLe = new RegExp(this.leOperator),\n            reGe = new RegExp(this.geOperator),\n            reL = new RegExp(this.lwOperator),\n            reG = new RegExp(this.grOperator),\n            reD = new RegExp(this.dfOperator),\n            reLk = new RegExp(rgxEsc(this.lkOperator)),\n            reEq = new RegExp(this.eqOperator),\n            reSt = new RegExp(this.stOperator),\n            reEn = new RegExp(this.enOperator),\n            // re_an = new RegExp(this.anOperator),\n            // re_cr = new RegExp(this.curExp),\n            reEm = this.emOperator,\n            reNm = this.nmOperator,\n            reRe = new RegExp(rgxEsc(this.rgxOperator));\n\n        term = matchCase(term, this.caseSensitive);\n\n        let occurence = false;\n\n        //Search arg operator tests\n        let hasLO = reL.test(term),\n            hasLE = reLe.test(term),\n            hasGR = reG.test(term),\n            hasGE = reGe.test(term),\n            hasDF = reD.test(term),\n            hasEQ = reEq.test(term),\n            hasLK = reLk.test(term),\n            // hatermN = re_an.test(term),\n            hasST = reSt.test(term),\n            hasEN = reEn.test(term),\n            hasEM = (reEm === term),\n            hasNM = (reNm === term),\n            hasRE = reRe.test(term);\n\n        // Check for dates or resolve date type\n        if (this.hasType(colIdx, [DATE])) {\n            let dte1, dte2;\n\n            let dateType = this.Mod.dateType;\n            let isValidDate = dateType.isValid.bind(dateType);\n            let parseDate = dateType.parse.bind(dateType);\n            let locale = dateType.getOptions(colIdx).locale || this.locale;\n\n            // Search arg dates tests\n            let isLDate = hasLO &&\n                isValidDate(term.replace(reL, ''), locale);\n            let isLEDate = hasLE &&\n                isValidDate(term.replace(reLe, ''), locale);\n            let isGDate = hasGR &&\n                isValidDate(term.replace(reG, ''), locale);\n            let isGEDate = hasGE &&\n                isValidDate(term.replace(reGe, ''), locale);\n            let isDFDate = hasDF &&\n                isValidDate(term.replace(reD, ''), locale);\n            let isEQDate = hasEQ &&\n                isValidDate(term.replace(reEq, ''), locale);\n\n            dte1 = parseDate(cellValue, locale);\n\n            // lower equal date\n            if (isLEDate) {\n                dte2 = parseDate(term.replace(reLe, ''), locale);\n                occurence = dte1 <= dte2;\n            }\n            // lower date\n            else if (isLDate) {\n                dte2 = parseDate(term.replace(reL, ''), locale);\n                occurence = dte1 < dte2;\n            }\n            // greater equal date\n            else if (isGEDate) {\n                dte2 = parseDate(term.replace(reGe, ''), locale);\n                occurence = dte1 >= dte2;\n            }\n            // greater date\n            else if (isGDate) {\n                dte2 = parseDate(term.replace(reG, ''), locale);\n                occurence = dte1 > dte2;\n            }\n            // different date\n            else if (isDFDate) {\n                dte2 = parseDate(term.replace(reD, ''), locale);\n                occurence = dte1.toString() !== dte2.toString();\n            }\n            // equal date\n            else if (isEQDate) {\n                dte2 = parseDate(term.replace(reEq, ''), locale);\n                occurence = dte1.toString() === dte2.toString();\n            }\n            // searched keyword with * operator doesn't have to be a date\n            else if (reLk.test(term)) {// like date\n                occurence = contains(term.replace(reLk, ''), cellValue,\n                    false, this.caseSensitive);\n            }\n            else if (isValidDate(term)) {\n                dte2 = parseDate(term, locale);\n                occurence = dte1.toString() === dte2.toString();\n            }\n            //empty\n            else if (hasEM) {\n                occurence = isEmptyString(cellValue);\n            }\n            //non-empty\n            else if (hasNM) {\n                occurence = !isEmptyString(cellValue);\n            } else {\n                occurence = contains(term, cellValue,\n                    this.isExactMatch(colIdx), this.caseSensitive);\n            }\n        }\n\n        else {\n            if (this.hasType(colIdx, [FORMATTED_NUMBER])) {\n                let colType = this.colTypes[colIdx];\n                if (colType.hasOwnProperty('decimal')) {\n                    decimal = colType.decimal;\n                }\n            }\n            // Convert to number anyways to auto-resolve type in case not\n            // defined by configuration\n            numData = Number(cellValue) || parseNb(cellValue, decimal);\n\n            // first checks if there is any operator (<,>,<=,>=,!,*,=,{,},\n            // rgx:)\n            // lower equal\n            if (hasLE) {\n                occurence = numData <= parseNb(\n                    term.replace(reLe, ''),\n                    decimal\n                );\n            }\n            //greater equal\n            else if (hasGE) {\n                occurence = numData >= parseNb(\n                    term.replace(reGe, ''),\n                    decimal\n                );\n            }\n            //lower\n            else if (hasLO) {\n                occurence = numData < parseNb(\n                    term.replace(reL, ''),\n                    decimal\n                );\n            }\n            //greater\n            else if (hasGR) {\n                occurence = numData > parseNb(\n                    term.replace(reG, ''),\n                    decimal\n                );\n            }\n            //different\n            else if (hasDF) {\n                occurence = contains(term.replace(reD, ''), cellValue,\n                    false, this.caseSensitive) ? false : true;\n            }\n            //like\n            else if (hasLK) {\n                occurence = contains(term.replace(reLk, ''), cellValue,\n                    false, this.caseSensitive);\n            }\n            //equal\n            else if (hasEQ) {\n                occurence = contains(term.replace(reEq, ''), cellValue,\n                    true, this.caseSensitive);\n            }\n            //starts with\n            else if (hasST) {\n                occurence = cellValue.indexOf(term.replace(reSt, '')) === 0 ?\n                    true : false;\n            }\n            //ends with\n            else if (hasEN) {\n                let searchArg = term.replace(reEn, '');\n                occurence =\n                    cellValue.lastIndexOf(searchArg, cellValue.length - 1) ===\n                        (cellValue.length - 1) - (searchArg.length - 1) &&\n                        cellValue.lastIndexOf(searchArg, cellValue.length - 1)\n                        > -1 ? true : false;\n            }\n            //empty\n            else if (hasEM) {\n                occurence = isEmptyString(cellValue);\n            }\n            //non-empty\n            else if (hasNM) {\n                occurence = !isEmptyString(cellValue);\n            }\n            //regexp\n            else if (hasRE) {\n                //in case regexp throws\n                try {\n                    //operator is removed\n                    let srchArg = term.replace(reRe, '');\n                    let rgx = new RegExp(srchArg);\n                    occurence = rgx.test(cellValue);\n                } catch (ex) {\n                    occurence = false;\n                }\n            } else {\n                // If numeric type data, perform a strict equality test and\n                // fallback to unformatted number string comparison\n                if (numData &&\n                    this.hasType(colIdx, [NUMBER, FORMATTED_NUMBER]) &&\n                    !this.singleSearchFlt) {\n                    // parseNb can return 0 for strings which are not\n                    // formatted numbers, in that case return the original\n                    // string. TODO: handle this in parseNb\n                    term = parseNb(term, decimal) || term;\n                    occurence = numData === term ||\n                        contains(term.toString(), numData.toString(),\n                            this.isExactMatch(colIdx), this.caseSensitive);\n                } else {\n                    // Finally test search term is contained in cell data\n                    occurence = contains(\n                        term,\n                        cellValue,\n                        this.isExactMatch(colIdx),\n                        this.caseSensitive,\n                        this.ignoresDiacritics(colIdx)\n                    );\n                }\n            }\n\n        }//else\n\n        return occurence;\n    }\n\n    /**\n     * Return the data of a specified column\n     * @param  {Number} colIndex Column index\n     * @param  {Boolean} [includeHeaders=false] Include headers row\n     * @param  {Boolean} [typed=true] Return a typed value\n     * @param  {Array} [exclude=[]] List of row indexes to be excluded\n     * @return {Array}           Flat list of data for a column\n     */\n    getColValues(\n        colIndex,\n        includeHeaders = false,\n        typed = false,\n        exclude = []\n    ) {\n        let row = this.tbl.rows;\n        let nbRows = this.getRowsNb(true);\n        let colValues = [];\n        let getContent = typed ? this.getCellData.bind(this) :\n            this.getCellValue.bind(this);\n\n        if (includeHeaders) {\n            colValues.push(this.getHeadersText()[colIndex]);\n        }\n\n        for (let i = this.refRow; i < nbRows; i++) {\n            let isExludedRow = false;\n            // checks if current row index appears in exclude array\n            if (exclude.length > 0) {\n                isExludedRow = exclude.indexOf(i) !== -1;\n            }\n            let cell = row[i].cells,\n                nchilds = cell.length;\n\n            // checks if row has exact cell # and is not excluded\n            if (nchilds === this.nbCells && !isExludedRow) {\n                // this loop retrieves cell data\n                for (let j = 0; j < nchilds; j++) {\n                    if (j !== colIndex) {\n                        continue;\n                    }\n                    let data = getContent(cell[j]);\n                    colValues.push(data);\n                }\n            }\n        }\n        return colValues;\n    }\n\n    /**\n     * Return the filter's value of a specified column\n     * @param  {Number} index Column index\n     * @return {String}       Filter value\n     */\n    getFilterValue(index) {\n        if (!this.fltGrid) {\n            return;\n        }\n        let fltValue = '';\n        let flt = this.getFilterElement(index);\n        if (!flt) {\n            return fltValue;\n        }\n\n        let fltColType = this.getFilterType(index);\n        if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\n            fltValue = flt.value;\n        }\n        //mutiple select\n        else if (fltColType === MULTIPLE) {\n            fltValue = this.feature('dropdown').getValues(index);\n        }\n        //checklist\n        else if (fltColType === CHECKLIST) {\n            fltValue = this.feature('checkList').getValues(index);\n        }\n        //return an empty string if collection is empty or contains a single\n        //empty string\n        if (isArray(fltValue) && fltValue.length === 0 ||\n            (fltValue.length === 1 && fltValue[0] === '')) {\n            fltValue = '';\n        }\n\n        return fltValue;\n    }\n\n    /**\n     * Return the filters' values\n     * @return {Array} List of filters' values\n     */\n    getFiltersValue() {\n        if (!this.fltGrid) {\n            return;\n        }\n        let searchArgs = [];\n        for (let i = 0, len = this.fltIds.length; i < len; i++) {\n            let fltValue = this.getFilterValue(i);\n            if (isArray(fltValue)) {\n                searchArgs.push(fltValue);\n            } else {\n                searchArgs.push(trim(fltValue));\n            }\n        }\n        return searchArgs;\n    }\n\n    /**\n     * Return the ID of a specified column's filter\n     * @param  {Number} index Column's index\n     * @return {String}       ID of the filter element\n     */\n    getFilterId(index) {\n        if (!this.fltGrid) {\n            return;\n        }\n        return this.fltIds[index];\n    }\n\n    /**\n     * Return the list of ids of filters matching a specified type.\n     * Note: hidden filters are also returned\n     *\n     * @param  {String} type  Filter type string ('input', 'select', 'multiple',\n     *                        'checklist')\n     * @param  {Boolean} bool If true returns columns indexes instead of IDs\n     * @return {[type]}       List of element IDs or column indexes\n     */\n    getFiltersByType(type, bool) {\n        if (!this.fltGrid) {\n            return;\n        }\n        let arr = [];\n        for (let i = 0, len = this.fltIds.length; i < len; i++) {\n            let fltType = this.getFilterType(i);\n            if (fltType === type.toLowerCase()) {\n                let a = bool ? i : this.fltIds[i];\n                arr.push(a);\n            }\n        }\n        return arr;\n    }\n\n    /**\n     * Return the filter's DOM element for a given column\n     * @param  {Number} index     Column's index\n     * @return {DOMElement}\n     */\n    getFilterElement(index) {\n        let fltId = this.fltIds[index];\n        return elm(fltId);\n    }\n\n    /**\n     * Return the number of cells for a given row index\n     * @param  {Number} rowIndex Index of the row\n     * @return {Number}          Number of cells\n     */\n    getCellsNb(rowIndex = 0) {\n        let tr = this.tbl.rows[rowIndex >= 0 ? rowIndex : 0];\n        return tr ? tr.cells.length : 0;\n    }\n\n    /**\n     * Return the number of filterable rows starting from reference row if\n     * defined\n     * @param  {Boolean} includeHeaders Include the headers row\n     * @return {Number}                 Number of filterable rows\n     */\n    getRowsNb(includeHeaders) {\n        let s = isUndef(this.refRow) ? 0 : this.refRow;\n        let ntrs = this.tbl.rows.length;\n        if (includeHeaders) {\n            s = 0;\n        }\n        return parseInt(ntrs - s, 10);\n    }\n\n\n    /**\n     * Return the text content of a given cell\n     * @param {DOMElement} Cell's DOM element\n     * @returns {String}\n     */\n    getCellValue(cell) {\n        let idx = cell.cellIndex;\n        let cellParser = this.cellParser;\n        // Invoke cellParser for this column if any\n        if (cellParser.cols.indexOf(idx) !== -1) {\n            return cellParser.parse(this, cell, idx);\n        } else {\n            return getText(cell);\n        }\n    }\n\n    /**\n     * Return the typed data of a given cell based on the column type definition\n     * @param  {DOMElement} cell Cell's DOM element\n     * @return {String|Number|Date}\n     */\n    getCellData(cell) {\n        let colIndex = cell.cellIndex;\n        let value = this.getCellValue(cell);\n\n        if (this.hasType(colIndex, [FORMATTED_NUMBER])) {\n            let decimal = this.decimalSeparator;\n            let colType = this.colTypes[colIndex];\n            if (colType.hasOwnProperty('decimal')) {\n                decimal = colType.decimal;\n            }\n            return parseNb(value, decimal);\n        }\n        else if (this.hasType(colIndex, [NUMBER])) {\n            return Number(value) || parseNb(value);\n        }\n        else if (this.hasType(colIndex, [DATE])){\n            let dateType = this.Mod.dateType;\n            let locale = dateType.getOptions(colIndex).locale || this.locale;\n            return dateType.parse(value, locale);\n        }\n\n        return value;\n    }\n\n    /**\n     * Return the table data with following format:\n     * [\n     *     [rowIndex, [value0, value1...]],\n     *     [rowIndex, [value0, value1...]]\n     * ]\n     * @param  {Boolean} [includeHeaders=false] Include headers row\n     * @param  {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n     * @param  {Boolean} [typed=false] Return typed value\n     * @return {Array}\n     *\n     * TODO: provide an API returning data in JSON format\n     */\n    getTableData(\n        includeHeaders = false,\n        excludeHiddenCols = false,\n        typed = false\n    ) {\n        let rows = this.tbl.rows;\n        let nbRows = this.getRowsNb(true);\n        let tblData = [];\n        let getContent = typed ? this.getCellData.bind(this) :\n            this.getCellValue.bind(this);\n\n        if (includeHeaders) {\n            let headers = this.getHeadersText(excludeHiddenCols);\n            tblData.push([this.getHeadersRowIndex(), headers]);\n        }\n        for (let k = this.refRow; k < nbRows; k++) {\n            let rowData = [k, []];\n            let cells = rows[k].cells;\n            for (let j = 0, len = cells.length; j < len; j++) {\n                if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\n                    if (this.extension('colsVisibility').isColHidden(j)) {\n                        continue;\n                    }\n                }\n                let cellValue = getContent(cells[j]);\n                rowData[1].push(cellValue);\n            }\n            tblData.push(rowData);\n        }\n        return tblData;\n    }\n\n    /**\n     * Return the filtered data with following format:\n     * [\n     *     [rowIndex, [value0, value1...]],\n     *     [rowIndex, [value0, value1...]]\n     * ]\n     * @param  {Boolean} [includeHeaders=false] Include headers row\n     * @param  {Boolean} [excludeHiddenCols=false] Exclude hidden columns\n     * @param  {Boolean} [typed=false] Return typed value\n     * @return {Array}\n     *\n     * TODO: provide an API returning data in JSON format\n     */\n    getFilteredData(\n        includeHeaders = false,\n        excludeHiddenCols = false,\n        typed = false\n    ) {\n        if (!this.validRowsIndex) {\n            return [];\n        }\n        let rows = this.tbl.rows,\n            filteredData = [];\n        let getContent = typed ? this.getCellData.bind(this) :\n            this.getCellValue.bind(this);\n\n        if (includeHeaders) {\n            let headers = this.getHeadersText(excludeHiddenCols);\n            filteredData.push([this.getHeadersRowIndex(), headers]);\n        }\n\n        let validRows = this.getValidRows(true);\n        for (let i = 0; i < validRows.length; i++) {\n            let rData = [this.validRowsIndex[i], []],\n                cells = rows[this.validRowsIndex[i]].cells;\n            for (let k = 0; k < cells.length; k++) {\n                if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\n                    if (this.extension('colsVisibility').isColHidden(k)) {\n                        continue;\n                    }\n                }\n                let cellValue = getContent(cells[k]);\n                rData[1].push(cellValue);\n            }\n            filteredData.push(rData);\n        }\n        return filteredData;\n    }\n\n    /**\n     * Return the filtered data for a given column index\n     * @param  {Number} colIndex Colmun's index\n     * @param  {Boolean} [includeHeaders=false] Include headers row\n     * @param  {Boolean} [typed=false] Return typed value\n     * @param  {Array} [exclude=[]] List of row indexes to be excluded\n     * @param  {Boolean} [visible=true] Return only filtered and visible data\n     *                           (relevant for paging)\n     * @return {Array}           Flat list of values ['val0','val1','val2'...]\n     *\n     * TODO: provide an API returning data in JSON format\n     */\n    getFilteredDataCol(\n        colIndex,\n        includeHeaders = false,\n        typed = false,\n        exclude = [],\n        visible = true\n    ) {\n        if (isUndef(colIndex)) {\n            return [];\n        }\n\n        let rows = this.tbl.rows;\n        let getContent = typed ? this.getCellData.bind(this) :\n            this.getCellValue.bind(this);\n\n        // ensure valid rows index do not contain excluded rows and row is\n        // displayed\n        let validRows = this.getValidRows(true).filter((rowIdx) => {\n            return exclude.indexOf(rowIdx) === -1 &&\n                (visible ?\n                    this.getRowDisplay(rows[rowIdx]) !== 'none' :\n                    true);\n        });\n\n        // convert column value to expected type if necessary\n        let validColValues = validRows.map((rowIdx) => {\n            return getContent(rows[rowIdx].cells[colIndex]);\n        });\n\n        if (includeHeaders) {\n            validColValues.unshift(this.getHeadersText()[colIndex]);\n        }\n\n        return validColValues;\n    }\n\n    /**\n     * Get the display value of a row\n     * @param  {HTMLTableRowElement} row DOM element of the row\n     * @return {String}     Usually 'none' or ''\n     */\n    getRowDisplay(row) {\n        return row.style.display;\n    }\n\n    /**\n     * Validate/invalidate row by setting the 'validRow' attribute on the row\n     * @param  {Number}  rowIndex Index of the row\n     * @param  {Boolean} isValid\n     */\n    validateRow(rowIndex, isValid) {\n        let row = this.tbl.rows[rowIndex];\n        if (!row || typeof isValid !== 'boolean') {\n            return;\n        }\n\n        // always visible rows are valid\n        if (this.hasVisibleRows && this.visibleRows.indexOf(rowIndex) !== -1) {\n            isValid = true;\n        }\n\n        let displayFlag = isValid ? '' : NONE,\n            validFlag = isValid ? 'true' : 'false';\n        row.style.display = displayFlag;\n\n        if (this.paging) {\n            row.setAttribute('validRow', validFlag);\n        }\n\n        if (isValid) {\n            if (this.validRowsIndex.indexOf(rowIndex) === -1) {\n                this.validRowsIndex.push(rowIndex);\n            }\n\n            this.onRowValidated(this, rowIndex);\n\n            this.emitter.emit('row-validated', this, rowIndex);\n        }\n    }\n\n    /**\n     * Validate all filterable rows\n     */\n    validateAllRows() {\n        if (!this.initialized) {\n            return;\n        }\n        this.validRowsIndex = [];\n        for (let k = this.refRow; k < this.nbFilterableRows; k++) {\n            this.validateRow(k, true);\n        }\n    }\n\n    /**\n     * Set search value to a given filter\n     * @param {Number} index     Column's index\n     * @param {String or Array} query  searcharg Search term\n     */\n    setFilterValue(index, query = '') {\n        if (!this.fltGrid) {\n            return;\n        }\n        let slc = this.getFilterElement(index),\n            fltColType = this.getFilterType(index);\n\n        if (fltColType !== MULTIPLE && fltColType !== CHECKLIST) {\n            if (this.loadFltOnDemand && !this.initialized) {\n                this.emitter.emit('build-select-filter', this, index,\n                    this.linkedFilters, this.isExternalFlt);\n            }\n            slc.value = query;\n        }\n        //multiple selects\n        else if (fltColType === MULTIPLE) {\n            let values = isArray(query) ? query :\n                query.split(' ' + this.orOperator + ' ');\n\n            if (this.loadFltOnDemand && !this.initialized) {\n                this.emitter.emit('build-select-filter', this, index,\n                    this.linkedFilters, this.isExternalFlt);\n            }\n\n            this.emitter.emit('select-options', this, index, values);\n        }\n        //checklist\n        else if (fltColType === CHECKLIST) {\n            let values = [];\n            if (this.loadFltOnDemand && !this.initialized) {\n                this.emitter.emit('build-checklist-filter', this, index,\n                    this.linkedFilters);\n            }\n            if (isArray(query)) {\n                values = query;\n            } else {\n                query = matchCase(query, this.caseSensitive);\n                values = query.split(' ' + this.orOperator + ' ');\n            }\n\n            this.emitter.emit('select-checklist-options', this, index, values);\n        }\n    }\n\n    /**\n     * Set them columns' widths as per configuration\n     * @param {Element} tbl DOM element\n     */\n    setColWidths(tbl) {\n        if (!this.hasColWidths) {\n            return;\n        }\n        tbl = tbl || this.tbl;\n\n        let nbCols = this.nbCells;\n        let colWidths = this.colWidths;\n        let colTags = tag(tbl, 'col');\n        let tblHasColTag = colTags.length > 0;\n        let frag = !tblHasColTag ? doc.createDocumentFragment() : null;\n        for (let k = 0; k < nbCols; k++) {\n            let col;\n            if (tblHasColTag) {\n                col = colTags[k];\n            } else {\n                col = createElm('col');\n                frag.appendChild(col);\n            }\n            col.style.width = colWidths[k];\n        }\n        if (!tblHasColTag) {\n            tbl.insertBefore(frag, tbl.firstChild);\n        }\n    }\n\n    /**\n     * Makes defined rows always visible\n     */\n    enforceVisibility() {\n        if (!this.hasVisibleRows) {\n            return;\n        }\n        let nbRows = this.getRowsNb(true);\n        for (let i = 0, len = this.visibleRows.length; i < len; i++) {\n            let row = this.visibleRows[i];\n            //row index cannot be > nrows\n            if (row <= nbRows) {\n                this.validateRow(row, true);\n            }\n        }\n    }\n\n    /**\n     * Clear all the filters' values\n     */\n    clearFilters() {\n        if (!this.fltGrid) {\n            return;\n        }\n\n        this.emitter.emit('before-clearing-filters', this);\n        this.onBeforeReset(this, this.getFiltersValue());\n\n        for (let i = 0, len = this.fltIds.length; i < len; i++) {\n            this.setFilterValue(i, '');\n        }\n\n        this.filter();\n\n        this.onAfterReset(this);\n        this.emitter.emit('after-clearing-filters', this);\n    }\n\n    /**\n     * Clears filtered columns visual indicator (background color)\n     */\n    clearActiveColumns() {\n        for (let i = 0, len = this.getCellsNb(this.headersRow); i < len; i++) {\n            removeClass(this.getHeaderElement(i), this.activeColumnsCssClass);\n        }\n    }\n\n    /**\n     * Mark currently filtered column\n     * @param  {Number} colIndex Column index\n     */\n    markActiveColumn(colIndex) {\n        let header = this.getHeaderElement(colIndex);\n        if (hasClass(header, this.activeColumnsCssClass)) {\n            return;\n        }\n        this.onBeforeActiveColumn(this, colIndex);\n\n        addClass(header, this.activeColumnsCssClass);\n\n        this.onAfterActiveColumn(this, colIndex);\n    }\n\n    /**\n     * Return the ID of the current active filter\n     * @returns {String}\n     */\n    getActiveFilterId() {\n        return this.activeFilterId;\n    }\n\n    /**\n     * Set the ID of the current active filter\n     * @param {String} filterId Element ID\n     */\n    setActiveFilterId(filterId) {\n        this.activeFilterId = filterId;\n    }\n\n    /**\n     * Return the column index for a given filter ID\n     * @param {string} [filterId=''] Filter ID\n     * @returns {Number} Column index\n     */\n    getColumnIndexFromFilterId(filterId = '') {\n        let idx = filterId.split('_')[0];\n        idx = idx.split(this.prfxFlt)[1];\n        return parseInt(idx, 10);\n    }\n\n    /**\n     * Builds filter element ID for a given column index\n     * @param {any} colIndex\n     * @returns {String} Filter element ID string\n     * @private\n     */\n    buildFilterId(colIndex) {\n        return `${this.prfxFlt}${colIndex}_${this.id}`;\n    }\n\n    /**\n     * Make specified column's filter active\n     * @param colIndex Index of a column\n     */\n    activateFilter(colIndex) {\n        if (isUndef(colIndex)) {\n            return;\n        }\n        this.setActiveFilterId(this.getFilterId(colIndex));\n    }\n\n    /**\n     * Refresh the filters subject to linking ('select', 'multiple',\n     * 'checklist' type)\n     */\n    linkFilters() {\n        if (!this.linkedFilters || !this.activeFilterId) {\n            return;\n        }\n        let slcA1 = this.getFiltersByType(SELECT, true),\n            slcA2 = this.getFiltersByType(MULTIPLE, true),\n            slcA3 = this.getFiltersByType(CHECKLIST, true),\n            slcIndex = slcA1.concat(slcA2);\n        slcIndex = slcIndex.concat(slcA3);\n\n        let activeIdx = this.getColumnIndexFromFilterId(this.activeFilterId);\n\n        for (let i = 0, len = slcIndex.length; i < len; i++) {\n            let colIdx = slcIndex[i];\n            let curSlc = elm(this.fltIds[colIdx]);\n            let slcSelectedValue = this.getFilterValue(colIdx);\n\n            // Welcome to cyclomatic complexity hell :)\n            // TODO: simplify/refactor if statement\n            if (activeIdx !== colIdx ||\n                (this.paging && slcA1.indexOf(colIdx) !== -1 &&\n                    activeIdx === colIdx) ||\n                (!this.paging && (slcA3.indexOf(colIdx) !== -1 ||\n                    slcA2.indexOf(colIdx) !== -1)) ||\n                slcSelectedValue === this.getClearFilterText(colIdx)) {\n\n                //1st option needs to be inserted\n                if (this.loadFltOnDemand) {\n                    let opt0 = createOpt(this.getClearFilterText(colIdx), '');\n                    curSlc.innerHTML = '';\n                    curSlc.appendChild(opt0);\n                }\n\n                if (slcA3.indexOf(colIdx) !== -1) {\n                    this.emitter.emit('build-checklist-filter', this, colIdx,\n                        true);\n                } else {\n                    this.emitter.emit('build-select-filter', this, colIdx,\n                        true);\n                }\n\n                this.setFilterValue(colIdx, slcSelectedValue);\n            }\n        }\n    }\n\n    /**\n     * Determines if passed filter column implements exact query match\n     * @param  {Number}  colIndex   Column index\n     * @return {Boolean}\n     */\n    isExactMatch(colIndex) {\n        let fltType = this.getFilterType(colIndex);\n        return this.exactMatchByCol[colIndex] || this.exactMatch ||\n            fltType !== INPUT;\n    }\n\n    /**\n     * Checks if passed row is valid\n     * @param {Number} rowIndex Row index\n     * @returns {Boolean}\n     */\n    isRowValid(rowIndex) {\n        return this.getValidRows().indexOf(rowIndex) !== -1;\n    }\n\n    /**\n     * Checks if passed row is visible\n     * @param {Number} rowIndex Row index\n     * @returns {Boolean}\n     */\n    isRowDisplayed(rowIndex) {\n        let row = this.tbl.rows[rowIndex];\n        return this.getRowDisplay(row) === '';\n    }\n\n    /**\n     * Checks if specified column filter ignores diacritics.\n     * Note this is only applicable to input filter types.\n     * @param {Number} colIndex    Column index\n     * @returns {Boolean}\n     */\n    ignoresDiacritics(colIndex) {\n        let ignoreDiac = this.ignoreDiacritics;\n        if (isArray(ignoreDiac)) {\n            return ignoreDiac[colIndex];\n        }\n        return Boolean(ignoreDiac);\n    }\n\n    /**\n     * Returns clear all text for specified filter column\n     * @param {Number} colIndex    Column index\n     * @returns {String}\n     */\n    getClearFilterText(colIndex) {\n        let clearText = this.clearFilterText;\n        if (isArray(clearText)) {\n            return clearText[colIndex];\n        }\n        return clearText;\n    }\n\n    /**\n     * Check if passed script or stylesheet is already imported\n     * @param  {String}  filePath Ressource path\n     * @param  {String}  type     Possible values: 'script' or 'link'\n     * @return {Boolean}\n     */\n    isImported(filePath, type = 'script') {\n        let imported = false,\n            attr = type === 'script' ? 'src' : 'href',\n            files = tag(doc, type);\n        for (let i = 0, len = files.length; i < len; i++) {\n            if (isUndef(files[i][attr])) {\n                continue;\n            }\n            if (files[i][attr].match(filePath)) {\n                imported = true;\n                break;\n            }\n        }\n        return imported;\n    }\n\n    /**\n     * Import script or stylesheet\n     * @param  {String}   fileId   Ressource ID\n     * @param  {String}   filePath Ressource path\n     * @param  {Function} callback Callback\n     * @param  {String}   type     Possible values: 'script' or 'link'\n     */\n    import(fileId, filePath, callback, type = 'script') {\n        if (this.isImported(filePath, type)) {\n            return;\n        }\n        let o = this,\n            isLoaded = false,\n            file,\n            head = tag(doc, 'head')[0];\n\n        if (type.toLowerCase() === 'link') {\n            file = createElm('link',\n                ['id', fileId], ['type', 'text/css'],\n                ['rel', 'stylesheet'], ['href', filePath]\n            );\n        } else {\n            file = createElm('script',\n                ['id', fileId],\n                ['type', 'text/javascript'], ['src', filePath]\n            );\n        }\n\n        //Browser <> IE onload event works only for scripts, not for stylesheets\n        file.onload = file.onreadystatechange = () => {\n            if (!isLoaded &&\n                (!this.readyState || this.readyState === 'loaded' ||\n                    this.readyState === 'complete')) {\n                isLoaded = true;\n                if (typeof callback === 'function') {\n                    callback.call(null, o);\n                }\n            }\n        };\n        file.onerror = function () {\n            throw new Error(`TableFilter could not load: ${filePath}`);\n        };\n        head.appendChild(file);\n    }\n\n    /**\n     * Check if table has filters grid\n     * @return {Boolean}\n     */\n    isInitialized() {\n        return this.initialized;\n    }\n\n    /**\n     * Get list of filter IDs\n     * @return {[type]} [description]\n     */\n    getFiltersId() {\n        return this.fltIds || [];\n    }\n\n    /**\n     * Get filtered (valid) rows indexes\n     * @param  {Boolean} reCalc Force calculation of filtered rows list\n     * @return {Array}          List of row indexes\n     */\n    getValidRows(reCalc) {\n        if (!reCalc) {\n            return this.validRowsIndex;\n        }\n\n        let nbRows = this.getRowsNb(true);\n        this.validRowsIndex = [];\n        for (let k = this.refRow; k < nbRows; k++) {\n            let r = this.tbl.rows[k];\n            if (!this.paging) {\n                if (this.getRowDisplay(r) !== NONE) {\n                    this.validRowsIndex.push(r.rowIndex);\n                }\n            } else {\n                if (r.getAttribute('validRow') === 'true' ||\n                    r.getAttribute('validRow') === null) {\n                    this.validRowsIndex.push(r.rowIndex);\n                }\n            }\n        }\n        return this.validRowsIndex;\n    }\n\n    /**\n     * Get the index of the row containing the filters\n     * @return {Number}\n     */\n    getFiltersRowIndex() {\n        return this.filtersRowIndex;\n    }\n\n    /**\n     * Get the index of the headers row\n     * @return {Number}\n     */\n    getHeadersRowIndex() {\n        return this.headersRow;\n    }\n\n    /**\n     * Get the row index from where the filtering process start (1st filterable\n     * row)\n     * @return {Number}\n     */\n    getStartRowIndex() {\n        return this.refRow;\n    }\n\n    /**\n     * Get the index of the last row\n     * @return {Number}\n     */\n    getLastRowIndex() {\n        let nbRows = this.getRowsNb(true);\n        return (nbRows - 1);\n    }\n\n    /**\n     * Determine whether the specified column has one of the passed types\n     * @param {Number} colIndex Column index\n     * @param {Array} [types=[]] List of column types\n     * @returns {Boolean}\n     */\n    hasType(colIndex, types = []) {\n        if (this.colTypes.length === 0) {\n            return false;\n        }\n        let colType = this.colTypes[colIndex];\n        if (isObj(colType)) {\n            colType = colType.type;\n        }\n        return types.indexOf(colType) !== -1;\n    }\n\n    /**\n     * Get the header DOM element for a given column index\n     * @param  {Number} colIndex Column index\n     * @return {Element}\n     */\n    getHeaderElement(colIndex) {\n        let table = this.gridLayout ? this.Mod.gridLayout.headTbl : this.tbl;\n        let tHead = tag(table, 'thead');\n        let headersRow = this.headersRow;\n        let header;\n        for (let i = 0; i < this.nbCells; i++) {\n            if (i !== colIndex) {\n                continue;\n            }\n            if (tHead.length === 0) {\n                header = table.rows[headersRow].cells[i];\n            }\n            if (tHead.length === 1) {\n                header = tHead[0].rows[headersRow].cells[i];\n            }\n            break;\n        }\n        return header;\n    }\n\n    /**\n     * Return the list of headers' text\n     * @param  {Boolean} excludeHiddenCols  Optional: exclude hidden columns\n     * @return {Array} list of headers' text\n     */\n    getHeadersText(excludeHiddenCols = false) {\n        let headers = [];\n        for (let j = 0; j < this.nbCells; j++) {\n            if (excludeHiddenCols && this.hasExtension('colsVisibility')) {\n                if (this.extension('colsVisibility').isColHidden(j)) {\n                    continue;\n                }\n            }\n            let header = this.getHeaderElement(j);\n            let headerText = getFirstTextNode(header);\n            headers.push(headerText);\n        }\n        return headers;\n    }\n\n    /**\n     * Return the filter type for a specified column\n     * @param  {Number} colIndex Column's index\n     * @return {String}\n     */\n    getFilterType(colIndex) {\n        let colType = this.cfg['col_' + colIndex];\n        return !colType ? INPUT : colType.toLowerCase();\n    }\n\n    /**\n     * Get the total number of filterable rows\n     * @return {Number}\n     */\n    getFilterableRowsNb() {\n        return this.getRowsNb(false);\n    }\n\n    /**\n     * Return the total number of valid rows\n     * @param {Boolean} [reCalc=false] Forces calculation of filtered rows\n     * @returns {Number}\n     */\n    getValidRowsNb(reCalc = false) {\n        return this.getValidRows(reCalc).length;\n    }\n\n    /**\n     * Get the configuration object (literal object)\n     * @return {Object}\n     */\n    config() {\n        return this.cfg;\n    }\n}\n"
  },
  {
    "__docId__": 816,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "doc",
    "memberof": "src/tablefilter.js",
    "longname": "src/tablefilter.js~doc",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/tablefilter.js",
    "importStyle": null,
    "description": null,
    "lineNumber": 37,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 817,
    "kind": "class",
    "static": true,
    "variation": null,
    "name": "TableFilter",
    "memberof": "src/tablefilter.js",
    "longname": "src/tablefilter.js~TableFilter",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/tablefilter.js",
    "importStyle": "{TableFilter}",
    "description": "Makes HTML tables filterable and a bit more :)",
    "lineNumber": 45,
    "unknown": [
      {
        "tagName": "@export",
        "tagValue": ""
      },
      {
        "tagName": "@class",
        "tagValue": "TableFilter"
      }
    ],
    "interface": false
  },
  {
    "__docId__": 818,
    "kind": "constructor",
    "static": false,
    "variation": null,
    "name": "constructor",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#constructor",
    "access": null,
    "description": "Creates an instance of TableFilter\nrequires `table` or `id` arguments, `row` and `configuration` optional",
    "lineNumber": 55,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "table",
        "description": "Table DOM element"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "id",
        "description": "Table id"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "row",
        "description": "index indicating the 1st row"
      },
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "configuration",
        "description": "object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 819,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "id",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#id",
    "access": "private",
    "description": "ID of current instance",
    "lineNumber": 61,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 820,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "version",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#version",
    "access": null,
    "description": "Current version",
    "lineNumber": 67,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 821,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "year",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#year",
    "access": "private",
    "description": "Current year",
    "lineNumber": 74,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 822,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tbl",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#tbl",
    "access": null,
    "description": "HTML Table DOM element",
    "lineNumber": 80,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 823,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "refRow",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#refRow",
    "access": null,
    "description": "Calculated row's index from which starts filtering once filters\nare generated",
    "lineNumber": 87,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 824,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headersRow",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#headersRow",
    "access": "private",
    "description": "Index of the headers row",
    "lineNumber": 94,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 825,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cfg",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#cfg",
    "access": "private",
    "description": "Configuration object",
    "lineNumber": 101,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 826,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbFilterableRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbFilterableRows",
    "access": "private",
    "description": "Number of rows that can be filtered",
    "lineNumber": 108,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 827,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbCells",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbCells",
    "access": "private",
    "description": "Number of cells in the reference row",
    "lineNumber": 115,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 828,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tbl",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#tbl",
    "access": null,
    "description": null,
    "lineNumber": 122,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 829,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "id",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#id",
    "access": null,
    "description": null,
    "lineNumber": 123,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 830,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "id",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#id",
    "access": null,
    "description": null,
    "lineNumber": 125,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 831,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "tbl",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#tbl",
    "access": null,
    "description": null,
    "lineNumber": 126,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 832,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cfg",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#cfg",
    "access": null,
    "description": null,
    "lineNumber": 130,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 833,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emitter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#emitter",
    "access": null,
    "description": "Event emitter instance",
    "lineNumber": 151,
    "type": {
      "nullable": null,
      "types": [
        "Emitter"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 834,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "refRow",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#refRow",
    "access": null,
    "description": null,
    "lineNumber": 154,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 835,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "basePath",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#basePath",
    "access": null,
    "description": "Base path for static assets",
    "lineNumber": 160,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 836,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltGrid",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltGrid",
    "access": null,
    "description": "Enable/disable filters",
    "lineNumber": 168,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 837,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "gridLayout",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#gridLayout",
    "access": null,
    "description": "Enable/disable grid layout (fixed headers)",
    "lineNumber": 174,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 838,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "filtersRowIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#filtersRowIndex",
    "access": null,
    "description": "Filters row index",
    "lineNumber": 180,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 839,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "headersRow",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#headersRow",
    "access": null,
    "description": "Headers row index",
    "lineNumber": 187,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 840,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltCellTag",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltCellTag",
    "access": null,
    "description": "Define the type of cell containing a filter (td/th)",
    "lineNumber": 194,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 841,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltIds",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltIds",
    "access": "private",
    "description": "List of filters IDs",
    "lineNumber": 202,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 842,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "validRowsIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#validRowsIndex",
    "access": "private",
    "description": "List of valid rows indexes (rows visible upon filtering)",
    "lineNumber": 209,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 843,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "infDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#infDiv",
    "access": "private",
    "description": "Toolbar's container DOM element",
    "lineNumber": 216,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 844,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#lDiv",
    "access": "private",
    "description": "Left-side inner container DOM element (rows counter in toolbar)",
    "lineNumber": 223,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 845,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "rDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#rDiv",
    "access": "private",
    "description": "Right-side inner container DOM element (reset button,\npage length selector in toolbar)",
    "lineNumber": 231,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 846,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "mDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#mDiv",
    "access": "private",
    "description": "Middle inner container DOM element (paging elements in toolbar)",
    "lineNumber": 238,
    "type": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 847,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "infDivCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#infDivCssClass",
    "access": null,
    "description": "Css class for toolbar's container DOM element",
    "lineNumber": 244,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 848,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lDivCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#lDivCssClass",
    "access": null,
    "description": "Css class for left-side inner container DOM element",
    "lineNumber": 250,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 849,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "rDivCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#rDivCssClass",
    "access": null,
    "description": "Css class for right-side inner container DOM element",
    "lineNumber": 256,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 850,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "mDivCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#mDivCssClass",
    "access": null,
    "description": "Css class for middle inner container DOM element",
    "lineNumber": 262,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 851,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stylePath",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#stylePath",
    "access": null,
    "description": "Path for stylesheets",
    "lineNumber": 269,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 852,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stylesheet",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#stylesheet",
    "access": null,
    "description": "Main stylesheet path",
    "lineNumber": 275,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 853,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stylesheetId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#stylesheetId",
    "access": "private",
    "description": "Main stylesheet ID",
    "lineNumber": 282,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 854,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltsRowCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltsRowCssClass",
    "access": null,
    "description": "Css class for the filters row",
    "lineNumber": 288,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 855,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableIcons",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#enableIcons",
    "access": null,
    "description": "Enable/disable icons (paging, reset button)",
    "lineNumber": 294,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 856,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "alternateRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#alternateRows",
    "access": null,
    "description": "Enable/disable alternating rows",
    "lineNumber": 300,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 857,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasColWidths",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasColWidths",
    "access": "private",
    "description": "Indicate whether columns widths are set",
    "lineNumber": 307,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 858,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "colWidths",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#colWidths",
    "access": null,
    "description": "Columns widths array",
    "lineNumber": 313,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 859,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltCssClass",
    "access": null,
    "description": "Css class for a filter element",
    "lineNumber": 319,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 860,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltMultiCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltMultiCssClass",
    "access": null,
    "description": "Css class for multiple select filters",
    "lineNumber": 325,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 861,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltSmallCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltSmallCssClass",
    "access": null,
    "description": "Css class for small filter (when submit button is active)",
    "lineNumber": 331,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 862,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "singleFltCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#singleFltCssClass",
    "access": null,
    "description": "Css class for single filter type",
    "lineNumber": 337,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 863,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enterKey",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#enterKey",
    "access": null,
    "description": "Enable/disable enter key for input type filters",
    "lineNumber": 345,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 864,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeFilter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onBeforeFilter",
    "access": null,
    "description": "Callback fired before filtering process starts",
    "lineNumber": 351,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 865,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterFilter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onAfterFilter",
    "access": null,
    "description": "Callback fired after filtering process is completed",
    "lineNumber": 358,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 866,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "caseSensitive",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#caseSensitive",
    "access": null,
    "description": "Enable/disable case sensitivity filtering",
    "lineNumber": 365,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 867,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasExactMatchByCol",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasExactMatchByCol",
    "access": "private",
    "description": "Indicate whether exact match filtering is enabled on a per column\nbasis",
    "lineNumber": 373,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 868,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "exactMatchByCol",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#exactMatchByCol",
    "access": null,
    "description": "Exact match filtering per column array",
    "lineNumber": 379,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 869,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "exactMatch",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#exactMatch",
    "access": null,
    "description": "Globally enable/disable exact match filtering",
    "lineNumber": 386,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 870,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "ignoreDiacritics",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#ignoreDiacritics",
    "access": null,
    "description": "Ignore diacritics globally or on a column basis",
    "lineNumber": 392,
    "type": {
      "nullable": null,
      "types": [
        "Boolean",
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 871,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "linkedFilters",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#linkedFilters",
    "access": null,
    "description": "Enable/disable linked filters filtering mode",
    "lineNumber": 398,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 872,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "disableExcludedOptions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#disableExcludedOptions",
    "access": null,
    "description": "Enable/disable readonly state for excluded options when\nlinked filters filtering mode is on",
    "lineNumber": 405,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 873,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activeFilterId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#activeFilterId",
    "access": "private",
    "description": "Active filter ID",
    "lineNumber": 412,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 874,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasVisibleRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasVisibleRows",
    "access": null,
    "description": "Enable/disable always visible rows, excluded from filtering",
    "lineNumber": 418,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 875,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "visibleRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#visibleRows",
    "access": null,
    "description": "List of row indexes to be excluded from filtering",
    "lineNumber": 424,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 876,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isExternalFlt",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isExternalFlt",
    "access": null,
    "description": "Enable/disable external filters generation",
    "lineNumber": 430,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 877,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "externalFltTgtIds",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#externalFltTgtIds",
    "access": null,
    "description": "List of containers IDs where external filters will be generated",
    "lineNumber": 436,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 878,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onFiltersLoaded",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onFiltersLoaded",
    "access": null,
    "description": "Callback fired after filters are generated",
    "lineNumber": 442,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 879,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "singleSearchFlt",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#singleSearchFlt",
    "access": null,
    "description": "Enable/disable single filter filtering all columns",
    "lineNumber": 449,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 880,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onRowValidated",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onRowValidated",
    "access": null,
    "description": "Callback fired after a row is validated during filtering",
    "lineNumber": 455,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 881,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "cellParser",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#cellParser",
    "access": null,
    "description": "Specify which column implements a custom cell parser to retrieve the\ncell value:\ncell_parser: {\n    cols: [0, 2],\n    parse: function(tf, cell, colIndex) {\n        // custom cell parser logic here\n        return cellValue;\n    }\n}",
    "lineNumber": 470,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 882,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "watermark",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#watermark",
    "access": null,
    "description": "Global watermark text for input filter type or watermark for each\nfilter if an array is supplied",
    "lineNumber": 479,
    "type": {
      "nullable": null,
      "types": [
        "String",
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 883,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isWatermarkArray",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isWatermarkArray",
    "access": "private",
    "description": "Indicate whether watermark is on a per column basis",
    "lineNumber": 486,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 884,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "toolBarTgtId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#toolBarTgtId",
    "access": null,
    "description": "Toolbar's custom container ID",
    "lineNumber": 492,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 885,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "help",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#help",
    "access": null,
    "description": "Indicate whether help UI component is disabled",
    "lineNumber": 498,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 886,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "popupFilters",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#popupFilters",
    "access": null,
    "description": "Indicate whether pop-up filters UI is enabled",
    "lineNumber": 505,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 887,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "markActiveColumns",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#markActiveColumns",
    "access": null,
    "description": "Indicate whether filtered (active) columns indicator is enabled",
    "lineNumber": 511,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 888,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activeColumnsCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#activeColumnsCssClass",
    "access": null,
    "description": "Css class for filtered (active) columns",
    "lineNumber": 517,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 889,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeActiveColumn",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onBeforeActiveColumn",
    "access": null,
    "description": "Callback fired before a column is marked as filtered",
    "lineNumber": 524,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 890,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterActiveColumn",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onAfterActiveColumn",
    "access": null,
    "description": "Callback fired after a column is marked as filtered",
    "lineNumber": 531,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 891,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "clearFilterText",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#clearFilterText",
    "access": null,
    "description": "Text for clear option in drop-down filter types (1st option)",
    "lineNumber": 539,
    "type": {
      "nullable": null,
      "types": [
        "String",
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 892,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableEmptyOption",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#enableEmptyOption",
    "access": null,
    "description": "Indicate whether empty option is enabled in drop-down filter types",
    "lineNumber": 545,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 893,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emptyText",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#emptyText",
    "access": null,
    "description": "Text for empty option in drop-down filter types",
    "lineNumber": 551,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 894,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableNonEmptyOption",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#enableNonEmptyOption",
    "access": null,
    "description": "Indicate whether non-empty option is enabled in drop-down filter\ntypes",
    "lineNumber": 558,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 895,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nonEmptyText",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nonEmptyText",
    "access": null,
    "description": "Text for non-empty option in drop-down filter types",
    "lineNumber": 564,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 896,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onSlcChange",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onSlcChange",
    "access": null,
    "description": "Indicate whether drop-down filter types filter the table by default\non change event",
    "lineNumber": 571,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 897,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sortSlc",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#sortSlc",
    "access": null,
    "description": "Indicate whether options in drop-down filter types are sorted in a\nalpha-numeric manner by default",
    "lineNumber": 578,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 898,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isSortNumAsc",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isSortNumAsc",
    "access": "private",
    "description": "Indicate whether options in drop-down filter types are sorted in a\nascending numeric manner",
    "lineNumber": 586,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 899,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sortNumAsc",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#sortNumAsc",
    "access": null,
    "description": "List of columns implementing options sorting in a ascending numeric\nmanner",
    "lineNumber": 593,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 900,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isSortNumDesc",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isSortNumDesc",
    "access": "private",
    "description": "Indicate whether options in drop-down filter types are sorted in a\ndescending numeric manner",
    "lineNumber": 601,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 901,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "sortNumDesc",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#sortNumDesc",
    "access": null,
    "description": "List of columns implementing options sorting in a descending numeric\nmanner",
    "lineNumber": 608,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 902,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "loadFltOnDemand",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#loadFltOnDemand",
    "access": null,
    "description": "Indicate whether drop-down filter types are populated on demand at\nfirst usage",
    "lineNumber": 615,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 903,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasCustomOptions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasCustomOptions",
    "access": null,
    "description": "Indicate whether custom drop-down filter options are implemented",
    "lineNumber": 621,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 904,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "customOptions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#customOptions",
    "access": null,
    "description": "Custom options definition of a per column basis, ie:\ncustom_options: {\n     cols:[0, 1],\n     texts: [\n         ['a0', 'b0', 'c0'],\n         ['a1', 'b1', 'c1']\n     ],\n     values: [\n         ['a0', 'b0', 'c0'],\n         ['a1', 'b1', 'c1']\n     ],\n     sorts: [false, true]\n }",
    "lineNumber": 640,
    "type": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 905,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "rgxOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#rgxOperator",
    "access": null,
    "description": "Regular expression operator for input filter. Defaults to 'rgx:'",
    "lineNumber": 647,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 906,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "emOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#emOperator",
    "access": null,
    "description": "Empty cells operator for input filter. Defaults to '[empty]'",
    "lineNumber": 653,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 907,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nmOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nmOperator",
    "access": null,
    "description": "Non-empty cells operator for input filter. Defaults to '[nonempty]'",
    "lineNumber": 659,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 908,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "orOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#orOperator",
    "access": null,
    "description": "Logical OR operator for input filter. Defaults to '||'",
    "lineNumber": 665,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 909,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "anOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#anOperator",
    "access": null,
    "description": "Logical AND operator for input filter. Defaults to '&&'",
    "lineNumber": 671,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 910,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "grOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#grOperator",
    "access": null,
    "description": "Greater than operator for input filter. Defaults to '>'",
    "lineNumber": 677,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 911,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lwOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#lwOperator",
    "access": null,
    "description": "Lower than operator for input filter. Defaults to '<'",
    "lineNumber": 683,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 912,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "leOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#leOperator",
    "access": null,
    "description": "Lower than or equal operator for input filter. Defaults to '<='",
    "lineNumber": 689,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 913,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "geOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#geOperator",
    "access": null,
    "description": "Greater than or equal operator for input filter. Defaults to '>='",
    "lineNumber": 695,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 914,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "dfOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#dfOperator",
    "access": null,
    "description": "Inequality operator for input filter. Defaults to '!'",
    "lineNumber": 701,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 915,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lkOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#lkOperator",
    "access": null,
    "description": "Like operator for input filter. Defaults to '!'",
    "lineNumber": 707,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 916,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "eqOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#eqOperator",
    "access": null,
    "description": "Strict equality operator for input filter. Defaults to '='",
    "lineNumber": 713,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 917,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "stOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#stOperator",
    "access": null,
    "description": "Starts with operator for input filter. Defaults to '='",
    "lineNumber": 719,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 918,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enOperator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#enOperator",
    "access": null,
    "description": "Ends with operator for input filter. Defaults to '='",
    "lineNumber": 725,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 919,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "separator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#separator",
    "access": null,
    "description": "Stored values separator",
    "lineNumber": 733,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 920,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "rowsCounter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#rowsCounter",
    "access": null,
    "description": "Enable rows counter UI component",
    "lineNumber": 739,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 921,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "statusBar",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#statusBar",
    "access": null,
    "description": "Enable status bar UI component",
    "lineNumber": 745,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 922,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "loader",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#loader",
    "access": null,
    "description": "Enable activity/spinner indicator UI component",
    "lineNumber": 751,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 923,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "displayBtn",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#displayBtn",
    "access": null,
    "description": "Enable filters submission button",
    "lineNumber": 758,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 924,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnText",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#btnText",
    "access": null,
    "description": "Define filters submission button text",
    "lineNumber": 764,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 925,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnCssClass",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#btnCssClass",
    "access": null,
    "description": "Css class for filters submission button",
    "lineNumber": 770,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 926,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "btnReset",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#btnReset",
    "access": null,
    "description": "Enable clear button",
    "lineNumber": 777,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 927,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onBeforeReset",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onBeforeReset",
    "access": null,
    "description": "Callback fired before filters are cleared",
    "lineNumber": 783,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 928,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "onAfterReset",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onAfterReset",
    "access": null,
    "description": "Callback fired after filters are cleared",
    "lineNumber": 790,
    "type": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 929,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "paging",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#paging",
    "access": null,
    "description": "Enable paging component",
    "lineNumber": 797,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 930,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbHiddenRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbHiddenRows",
    "access": "private",
    "description": "Number of hidden rows",
    "lineNumber": 804,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 931,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "autoFilter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#autoFilter",
    "access": null,
    "description": "Enable auto-filter behaviour, table is filtered when a user\nstops typing",
    "lineNumber": 811,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 932,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "autoFilterDelay",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#autoFilterDelay",
    "access": null,
    "description": "Auto-filter delay in msecs",
    "lineNumber": 817,
    "type": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 933,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isUserTyping",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isUserTyping",
    "access": "private",
    "description": "Indicate whether user is typing",
    "lineNumber": 825,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 934,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "autoFilterTimer",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#autoFilterTimer",
    "access": "private",
    "description": "Auto-filter interval ID",
    "lineNumber": 832,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 935,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "highlightKeywords",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#highlightKeywords",
    "access": null,
    "description": "Enable keyword highlighting behaviour",
    "lineNumber": 838,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 936,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "noResults",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#noResults",
    "access": null,
    "description": "Enable no results message UI component",
    "lineNumber": 844,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 937,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "state",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#state",
    "access": null,
    "description": "Enable state persistence",
    "lineNumber": 851,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 938,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "locale",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#locale",
    "access": null,
    "description": "Define default locale, default to 'en' as per Sugar Date module:\nhttps://sugarjs.com/docs/#/DateLocales",
    "lineNumber": 860,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 939,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "thousandsSeparator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#thousandsSeparator",
    "access": null,
    "description": "Define thousands separator ',' or '.', defaults to ','",
    "lineNumber": 866,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 940,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "decimalSeparator",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#decimalSeparator",
    "access": null,
    "description": "Define decimal separator ',' or '.', defaults to '.'",
    "lineNumber": 872,
    "type": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 941,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "colTypes",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#colTypes",
    "access": null,
    "description": "Define data types on a column basis, possible values 'string',\n'number', 'formatted-number', 'date', 'ipaddress' ie:\ncol_types : [\n 'string', 'date', 'number',\n { type: 'formatted-number', decimal: ',', thousands: '.' },\n { type: 'date', locale: 'en-gb' },\n { type: 'date', format: ['{dd}-{months}-{yyyy|yy}'] }\n]\n\nRefer to https://sugarjs.com/docs/#/DateParsing for exhaustive\ninformation on date parsing formats supported by Sugar Date",
    "lineNumber": 888,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 942,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxTf",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxTf",
    "access": "private",
    "description": "Main prefix",
    "lineNumber": 895,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 943,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxFlt",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxFlt",
    "access": "private",
    "description": "Filter's ID prefix (inputs - selects)",
    "lineNumber": 901,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 944,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxValButton",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxValButton",
    "access": "private",
    "description": "Button's ID prefix",
    "lineNumber": 907,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 945,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxInfDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxInfDiv",
    "access": "private",
    "description": "Toolbar container ID prefix",
    "lineNumber": 913,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 946,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxLDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxLDiv",
    "access": "private",
    "description": "Toolbar left element ID prefix",
    "lineNumber": 919,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 947,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxRDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxRDiv",
    "access": "private",
    "description": "Toolbar right element ID prefix",
    "lineNumber": 925,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 948,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxMDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxMDiv",
    "access": "private",
    "description": "Toolbar middle element ID prefix",
    "lineNumber": 931,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 949,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "prfxResponsive",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#prfxResponsive",
    "access": "private",
    "description": "Responsive Css class",
    "lineNumber": 937,
    "type": {
      "types": [
        "string"
      ]
    }
  },
  {
    "__docId__": 950,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "extensions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#extensions",
    "access": "private",
    "description": "List of loaded extensions",
    "lineNumber": 945,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 951,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasExtensions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasExtensions",
    "access": "private",
    "description": "Determine whether extensions are loaded",
    "lineNumber": 952,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 952,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "enableDefaultTheme",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#enableDefaultTheme",
    "access": null,
    "description": "Enable default theme",
    "lineNumber": 959,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 953,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "hasThemes",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasThemes",
    "access": "private",
    "description": "Determine whether themes are enables",
    "lineNumber": 966,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 954,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "themes",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#themes",
    "access": null,
    "description": "List of themes, ie:\nthemes: [{ name: 'skyblue' }]",
    "lineNumber": 973,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 955,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "themesPath",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#themesPath",
    "access": null,
    "description": "Define path to themes assets, defaults to\n'tablefilter/style/themes/'. Usage:\nthemes: [{ name: 'skyblue' }]",
    "lineNumber": 981,
    "type": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 956,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "responsive",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#responsive",
    "access": null,
    "description": "Enable responsive layout",
    "lineNumber": 987,
    "type": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": null
    }
  },
  {
    "__docId__": 957,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "Mod",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#Mod",
    "access": "private",
    "description": "Features registry",
    "lineNumber": 993,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 958,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "ExtRegistry",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#ExtRegistry",
    "access": "private",
    "description": "Extensions registry",
    "lineNumber": 999,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 959,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "init",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#init",
    "access": null,
    "description": "Initialise features and layout",
    "lineNumber": 1005,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 960,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbCells",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbCells",
    "access": null,
    "description": null,
    "lineNumber": 1010,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 961,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbFilterableRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbFilterableRows",
    "access": null,
    "description": null,
    "lineNumber": 1064,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 962,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#initialized",
    "access": null,
    "description": null,
    "lineNumber": 1182,
    "unknown": [
      {
        "tagName": "@inherited",
        "tagValue": ""
      }
    ],
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 963,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "detectKey",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#detectKey",
    "access": null,
    "description": "Detect <enter> key",
    "lineNumber": 1193,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": ""
      }
    ],
    "generator": false
  },
  {
    "__docId__": 964,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isUserTyping",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isUserTyping",
    "access": null,
    "description": null,
    "lineNumber": 1204,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 965,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "autoFilterTimer",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#autoFilterTimer",
    "access": null,
    "description": null,
    "lineNumber": 1206,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 966,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onKeyUp",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onKeyUp",
    "access": null,
    "description": "Filter's keyup event: if auto-filter on, detect user is typing and filter\ncolumns",
    "lineNumber": 1216,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": ""
      }
    ],
    "generator": false
  },
  {
    "__docId__": 967,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isUserTyping",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isUserTyping",
    "access": null,
    "description": null,
    "lineNumber": 1221,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 968,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "autoFilterTimer",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#autoFilterTimer",
    "access": null,
    "description": null,
    "lineNumber": 1225,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 969,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isUserTyping",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isUserTyping",
    "access": null,
    "description": null,
    "lineNumber": 1228,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 970,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "autoFilterTimer",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#autoFilterTimer",
    "access": null,
    "description": null,
    "lineNumber": 1235,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 971,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "autoFilterTimer",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#autoFilterTimer",
    "access": null,
    "description": null,
    "lineNumber": 1240,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 972,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onKeyDown",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onKeyDown",
    "access": null,
    "description": "Filter's keydown event: if auto-filter on, detect user is typing",
    "lineNumber": 1247,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 973,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isUserTyping",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isUserTyping",
    "access": null,
    "description": null,
    "lineNumber": 1249,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 974,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onInpFocus",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onInpFocus",
    "access": null,
    "description": "Filter's focus event",
    "lineNumber": 1257,
    "params": [
      {
        "nullable": null,
        "types": [
          "Event"
        ],
        "spread": false,
        "optional": false,
        "name": "evt",
        "description": ""
      }
    ],
    "generator": false
  },
  {
    "__docId__": 975,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "onInpBlur",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#onInpBlur",
    "access": null,
    "description": "Filter's blur event: if auto-filter on, clear interval on filter blur",
    "lineNumber": 1265,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 976,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "isUserTyping",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isUserTyping",
    "access": null,
    "description": null,
    "lineNumber": 1267,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 977,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_insertFiltersRow",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#_insertFiltersRow",
    "access": null,
    "description": "Insert filters row at initialization",
    "lineNumber": 1276,
    "params": [],
    "return": {
      "types": [
        "*"
      ]
    },
    "generator": false
  },
  {
    "__docId__": 978,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_initNoFilters",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#_initNoFilters",
    "access": null,
    "description": "Initialize filtersless table",
    "lineNumber": 1305,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 979,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "refRow",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#refRow",
    "access": null,
    "description": null,
    "lineNumber": 1309,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 980,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbFilterableRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbFilterableRows",
    "access": null,
    "description": null,
    "lineNumber": 1310,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 981,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_buildInputFilter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#_buildInputFilter",
    "access": null,
    "description": "Build input filter type",
    "lineNumber": 1319,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cssClass",
        "description": "Css class applied to filter"
      },
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": "Container DOM element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 982,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_buildSubmitButton",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#_buildSubmitButton",
    "access": null,
    "description": "Build submit button",
    "lineNumber": 1357,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "container",
        "description": "Container DOM element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 983,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "feature",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#feature",
    "access": null,
    "description": "Return a feature instance for a given name",
    "lineNumber": 1381,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": "Name of the feature"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 984,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "initExtensions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#initExtensions",
    "access": null,
    "description": "Initialise all the extensions defined in the configuration object",
    "lineNumber": 1388,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 985,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "loadExtension",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#loadExtension",
    "access": null,
    "description": "Load an extension module",
    "lineNumber": 1407,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "ext",
        "description": "Extension config object"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 986,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "extension",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#extension",
    "access": null,
    "description": "Get an extension instance",
    "lineNumber": 1438,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": "Name of the extension"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": "Extension instance"
    },
    "generator": false
  },
  {
    "__docId__": 987,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "hasExtension",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasExtension",
    "access": null,
    "description": "Check passed extension name exists",
    "lineNumber": 1447,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "name",
        "description": "Name of the extension"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 988,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroyExtensions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#destroyExtensions",
    "access": null,
    "description": "Destroy all the extensions store in extensions registry",
    "lineNumber": 1454,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 989,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "loadThemes",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#loadThemes",
    "access": null,
    "description": "Load themes defined in the configuration object",
    "lineNumber": 1466,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 990,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "loader",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#loader",
    "access": null,
    "description": null,
    "lineNumber": 1495,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 991,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getStylesheet",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getStylesheet",
    "access": null,
    "description": "Return stylesheet DOM element for a given theme name",
    "lineNumber": 1504,
    "params": [
      {
        "name": "name",
        "optional": true,
        "types": [
          "string"
        ],
        "defaultRaw": "default",
        "defaultValue": "default"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": "stylesheet element"
    },
    "generator": false
  },
  {
    "__docId__": 992,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "destroy",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#destroy",
    "access": null,
    "description": "Destroy filter grid",
    "lineNumber": 1511,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 993,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbHiddenRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbHiddenRows",
    "access": null,
    "description": null,
    "lineNumber": 1556,
    "undocument": true,
    "type": {
      "types": [
        "number"
      ]
    }
  },
  {
    "__docId__": 994,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "validRowsIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#validRowsIndex",
    "access": null,
    "description": null,
    "lineNumber": 1557,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 995,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "fltIds",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#fltIds",
    "access": null,
    "description": null,
    "lineNumber": 1558,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 996,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "initialized",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#initialized",
    "access": null,
    "description": null,
    "lineNumber": 1559,
    "undocument": true,
    "type": {
      "types": [
        "boolean"
      ]
    }
  },
  {
    "__docId__": 997,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setToolbar",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#setToolbar",
    "access": null,
    "description": "Generate container element for paging, reset button, rows counter etc.",
    "lineNumber": 1565,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 998,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "infDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#infDiv",
    "access": null,
    "description": null,
    "lineNumber": 1590,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 999,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "lDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#lDiv",
    "access": null,
    "description": null,
    "lineNumber": 1596,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1000,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "rDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#rDiv",
    "access": null,
    "description": null,
    "lineNumber": 1603,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1001,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "mDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#mDiv",
    "access": null,
    "description": null,
    "lineNumber": 1609,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1002,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "removeToolbar",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#removeToolbar",
    "access": null,
    "description": "Remove toolbar container element",
    "lineNumber": 1623,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1003,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "infDiv",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#infDiv",
    "access": null,
    "description": null,
    "lineNumber": 1628,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1004,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "removeExternalFlts",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#removeExternalFlts",
    "access": null,
    "description": "Remove all the external column filters",
    "lineNumber": 1640,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1005,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isCustomOptions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isCustomOptions",
    "access": null,
    "description": "Check if given column implements a filter with custom options",
    "lineNumber": 1660,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column's index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1006,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getCustomOptions",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getCustomOptions",
    "access": null,
    "description": "Returns an array [[value0, value1 ...],[text0, text1 ...]] with the\ncustom options values and texts",
    "lineNumber": 1671,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column's index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1007,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "filter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#filter",
    "access": null,
    "description": "Filter the table by retrieving the data from each cell in every single\nrow and comparing it to the search term for current column. A row is\nhidden when all the search terms are not found in inspected row.",
    "lineNumber": 1704,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1008,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "validRowsIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#validRowsIndex",
    "access": null,
    "description": null,
    "lineNumber": 1716,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1009,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "nbHiddenRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#nbHiddenRows",
    "access": null,
    "description": null,
    "lineNumber": 1820,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1010,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "_testTerm",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#_testTerm",
    "access": null,
    "description": "Test for a match of search term in cell data",
    "lineNumber": 1835,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "term",
        "description": "Search term"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "cellValue",
        "description": "Cell data"
      },
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIdx",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1011,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getColValues",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getColValues",
    "access": null,
    "description": "Return the data of a specified column",
    "lineNumber": 2076,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "includeHeaders",
        "description": "Include headers row"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "true",
        "defaultRaw": true,
        "name": "typed",
        "description": "Return a typed value"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "exclude",
        "description": "List of row indexes to be excluded"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "Flat list of data for a column"
    },
    "generator": false
  },
  {
    "__docId__": 1012,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFilterValue",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFilterValue",
    "access": null,
    "description": "Return the filter's value of a specified column",
    "lineNumber": 2121,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "index",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": "Filter value"
    },
    "generator": false
  },
  {
    "__docId__": 1013,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFiltersValue",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFiltersValue",
    "access": null,
    "description": "Return the filters' values",
    "lineNumber": 2157,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "List of filters' values"
    },
    "generator": false
  },
  {
    "__docId__": 1014,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFilterId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFilterId",
    "access": null,
    "description": "Return the ID of a specified column's filter",
    "lineNumber": 2178,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "index",
        "description": "Column's index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": "ID of the filter element"
    },
    "generator": false
  },
  {
    "__docId__": 1015,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFiltersByType",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFiltersByType",
    "access": null,
    "description": "Return the list of ids of filters matching a specified type.\nNote: hidden filters are also returned",
    "lineNumber": 2194,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": "Filter type string ('input', 'select', 'multiple',\n                       'checklist')"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "bool",
        "description": "If true returns columns indexes instead of IDs"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "[type]"
      ],
      "spread": false,
      "description": "List of element IDs or column indexes"
    },
    "generator": false
  },
  {
    "__docId__": 1016,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFilterElement",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFilterElement",
    "access": null,
    "description": "Return the filter's DOM element for a given column",
    "lineNumber": 2214,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "index",
        "description": "Column's index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "DOMElement"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1017,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getCellsNb",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getCellsNb",
    "access": null,
    "description": "Return the number of cells for a given row index",
    "lineNumber": 2224,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "rowIndex",
        "description": "Index of the row"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": "Number of cells"
    },
    "generator": false
  },
  {
    "__docId__": 1018,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getRowsNb",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getRowsNb",
    "access": null,
    "description": "Return the number of filterable rows starting from reference row if\ndefined",
    "lineNumber": 2235,
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "includeHeaders",
        "description": "Include the headers row"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": "Number of filterable rows"
    },
    "generator": false
  },
  {
    "__docId__": 1019,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getCellValue",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getCellValue",
    "access": null,
    "description": "Return the text content of a given cell",
    "lineNumber": 2250,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "Cell's",
        "description": "DOM element"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1020,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getCellData",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getCellData",
    "access": null,
    "description": "Return the typed data of a given cell based on the column type definition",
    "lineNumber": 2266,
    "params": [
      {
        "nullable": null,
        "types": [
          "DOMElement"
        ],
        "spread": false,
        "optional": false,
        "name": "cell",
        "description": "Cell's DOM element"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String",
        "Number",
        "Date"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1021,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getTableData",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getTableData",
    "access": null,
    "description": "Return the table data with following format:\n[\n    [rowIndex, [value0, value1...]],\n    [rowIndex, [value0, value1...]]\n]",
    "lineNumber": 2303,
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "includeHeaders",
        "description": "Include headers row"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "excludeHiddenCols",
        "description": "Exclude hidden columns"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "typed",
        "description": "Return typed value"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "TODO: provide an API returning data in JSON format"
    },
    "generator": false
  },
  {
    "__docId__": 1022,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFilteredData",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFilteredData",
    "access": null,
    "description": "Return the filtered data with following format:\n[\n    [rowIndex, [value0, value1...]],\n    [rowIndex, [value0, value1...]]\n]",
    "lineNumber": 2348,
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "includeHeaders",
        "description": "Include headers row"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "excludeHiddenCols",
        "description": "Exclude hidden columns"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "typed",
        "description": "Return typed value"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "TODO: provide an API returning data in JSON format"
    },
    "generator": false
  },
  {
    "__docId__": 1023,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFilteredDataCol",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFilteredDataCol",
    "access": null,
    "description": "Return the filtered data for a given column index",
    "lineNumber": 2396,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Colmun's index"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "includeHeaders",
        "description": "Include headers row"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "typed",
        "description": "Return typed value"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "exclude",
        "description": "List of row indexes to be excluded"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "true",
        "defaultRaw": true,
        "name": "visible",
        "description": "Return only filtered and visible data\n                          (relevant for paging)"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "Flat list of values ['val0','val1','val2'...]\n\nTODO: provide an API returning data in JSON format"
    },
    "generator": false
  },
  {
    "__docId__": 1024,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getRowDisplay",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getRowDisplay",
    "access": null,
    "description": "Get the display value of a row",
    "lineNumber": 2437,
    "params": [
      {
        "nullable": null,
        "types": [
          "HTMLTableRowElement"
        ],
        "spread": false,
        "optional": false,
        "name": "row",
        "description": "DOM element of the row"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": "Usually 'none' or ''"
    },
    "generator": false
  },
  {
    "__docId__": 1025,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "validateRow",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#validateRow",
    "access": null,
    "description": "Validate/invalidate row by setting the 'validRow' attribute on the row",
    "lineNumber": 2446,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "rowIndex",
        "description": "Index of the row"
      },
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "isValid",
        "description": ""
      }
    ],
    "generator": false
  },
  {
    "__docId__": 1026,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "validateAllRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#validateAllRows",
    "access": null,
    "description": "Validate all filterable rows",
    "lineNumber": 2479,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1027,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "validRowsIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#validRowsIndex",
    "access": null,
    "description": null,
    "lineNumber": 2483,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1028,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setFilterValue",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#setFilterValue",
    "access": null,
    "description": "Set search value to a given filter",
    "lineNumber": 2494,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "index",
        "description": "Column's index"
      },
      {
        "nullable": null,
        "types": [
          "String or Array"
        ],
        "spread": false,
        "optional": false,
        "name": "query",
        "description": "searcharg Search term"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 1029,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setColWidths",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#setColWidths",
    "access": null,
    "description": "Set them columns' widths as per configuration",
    "lineNumber": 2542,
    "params": [
      {
        "nullable": null,
        "types": [
          "Element"
        ],
        "spread": false,
        "optional": false,
        "name": "tbl",
        "description": "DOM element"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 1030,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "enforceVisibility",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#enforceVisibility",
    "access": null,
    "description": "Makes defined rows always visible",
    "lineNumber": 2571,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1031,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "clearFilters",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#clearFilters",
    "access": null,
    "description": "Clear all the filters' values",
    "lineNumber": 2588,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1032,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "clearActiveColumns",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#clearActiveColumns",
    "access": null,
    "description": "Clears filtered columns visual indicator (background color)",
    "lineNumber": 2609,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1033,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "markActiveColumn",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#markActiveColumn",
    "access": null,
    "description": "Mark currently filtered column",
    "lineNumber": 2619,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 1034,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getActiveFilterId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getActiveFilterId",
    "access": null,
    "description": "Return the ID of the current active filter",
    "lineNumber": 2635,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1035,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "setActiveFilterId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#setActiveFilterId",
    "access": null,
    "description": "Set the ID of the current active filter",
    "lineNumber": 2643,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "filterId",
        "description": "Element ID"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 1036,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "activeFilterId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#activeFilterId",
    "access": null,
    "description": null,
    "lineNumber": 2644,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1037,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getColumnIndexFromFilterId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getColumnIndexFromFilterId",
    "access": null,
    "description": "Return the column index for a given filter ID",
    "lineNumber": 2652,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number} Column index"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "string"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "''",
        "defaultRaw": "''",
        "name": "filterId",
        "description": "Filter ID"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": "Column index"
    },
    "generator": false
  },
  {
    "__docId__": 1038,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "buildFilterId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#buildFilterId",
    "access": "private",
    "description": "Builds filter element ID for a given column index",
    "lineNumber": 2664,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String} Filter element ID string"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "any"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": "Filter element ID string"
    },
    "generator": false
  },
  {
    "__docId__": 1039,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "activateFilter",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#activateFilter",
    "access": null,
    "description": "Make specified column's filter active",
    "lineNumber": 2672,
    "params": [
      {
        "nullable": null,
        "types": [
          "*"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Index of a column"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 1040,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "linkFilters",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#linkFilters",
    "access": null,
    "description": "Refresh the filters subject to linking ('select', 'multiple',\n'checklist' type)",
    "lineNumber": 2683,
    "params": [],
    "generator": false
  },
  {
    "__docId__": 1041,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isExactMatch",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isExactMatch",
    "access": null,
    "description": "Determines if passed filter column implements exact query match",
    "lineNumber": 2734,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1042,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isRowValid",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isRowValid",
    "access": null,
    "description": "Checks if passed row is valid",
    "lineNumber": 2745,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "rowIndex",
        "description": "Row index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1043,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isRowDisplayed",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isRowDisplayed",
    "access": null,
    "description": "Checks if passed row is visible",
    "lineNumber": 2754,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "rowIndex",
        "description": "Row index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1044,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "ignoresDiacritics",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#ignoresDiacritics",
    "access": null,
    "description": "Checks if specified column filter ignores diacritics.\nNote this is only applicable to input filter types.",
    "lineNumber": 2765,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1045,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getClearFilterText",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getClearFilterText",
    "access": null,
    "description": "Returns clear all text for specified filter column",
    "lineNumber": 2778,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{String}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1046,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isImported",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isImported",
    "access": null,
    "description": "Check if passed script or stylesheet is already imported",
    "lineNumber": 2792,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "filePath",
        "description": "Ressource path"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": "Possible values: 'script' or 'link'"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1047,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "import",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#import",
    "access": null,
    "description": "Import script or stylesheet",
    "lineNumber": 2815,
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "fileId",
        "description": "Ressource ID"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "filePath",
        "description": "Ressource path"
      },
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "callback",
        "description": "Callback"
      },
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "type",
        "description": "Possible values: 'script' or 'link'"
      }
    ],
    "generator": false
  },
  {
    "__docId__": 1048,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "isInitialized",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#isInitialized",
    "access": null,
    "description": "Check if table has filters grid",
    "lineNumber": 2857,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1049,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFiltersId",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFiltersId",
    "access": null,
    "description": "Get list of filter IDs",
    "lineNumber": 2865,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "[type]"
      ],
      "spread": false,
      "description": "[description]"
    },
    "generator": false
  },
  {
    "__docId__": 1050,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getValidRows",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getValidRows",
    "access": null,
    "description": "Get filtered (valid) rows indexes",
    "lineNumber": 2874,
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "reCalc",
        "description": "Force calculation of filtered rows list"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "List of row indexes"
    },
    "generator": false
  },
  {
    "__docId__": 1051,
    "kind": "member",
    "static": false,
    "variation": null,
    "name": "validRowsIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#validRowsIndex",
    "access": null,
    "description": null,
    "lineNumber": 2880,
    "undocument": true,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1052,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFiltersRowIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFiltersRowIndex",
    "access": null,
    "description": "Get the index of the row containing the filters",
    "lineNumber": 2901,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1053,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getHeadersRowIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getHeadersRowIndex",
    "access": null,
    "description": "Get the index of the headers row",
    "lineNumber": 2909,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1054,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getStartRowIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getStartRowIndex",
    "access": null,
    "description": "Get the row index from where the filtering process start (1st filterable\nrow)",
    "lineNumber": 2918,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1055,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getLastRowIndex",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getLastRowIndex",
    "access": null,
    "description": "Get the index of the last row",
    "lineNumber": 2926,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1056,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "hasType",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#hasType",
    "access": null,
    "description": "Determine whether the specified column has one of the passed types",
    "lineNumber": 2937,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      },
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "[]",
        "defaultRaw": [],
        "name": "types",
        "description": "List of column types"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1057,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getHeaderElement",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getHeaderElement",
    "access": null,
    "description": "Get the header DOM element for a given column index",
    "lineNumber": 2953,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Element"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1058,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getHeadersText",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getHeadersText",
    "access": null,
    "description": "Return the list of headers' text",
    "lineNumber": 2978,
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": false,
        "name": "excludeHiddenCols",
        "description": "Optional: exclude hidden columns"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Array"
      ],
      "spread": false,
      "description": "list of headers' text"
    },
    "generator": false
  },
  {
    "__docId__": 1059,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFilterType",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFilterType",
    "access": null,
    "description": "Return the filter type for a specified column",
    "lineNumber": 2998,
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "colIndex",
        "description": "Column's index"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "String"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1060,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getFilterableRowsNb",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getFilterableRowsNb",
    "access": null,
    "description": "Get the total number of filterable rows",
    "lineNumber": 3007,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1061,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "getValidRowsNb",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#getValidRowsNb",
    "access": null,
    "description": "Return the total number of valid rows",
    "lineNumber": 3016,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Number}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Boolean"
        ],
        "spread": false,
        "optional": true,
        "defaultValue": "false",
        "defaultRaw": false,
        "name": "reCalc",
        "description": "Forces calculation of filtered rows"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Number"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1062,
    "kind": "method",
    "static": false,
    "variation": null,
    "name": "config",
    "memberof": "src/tablefilter.js~TableFilter",
    "longname": "src/tablefilter.js~TableFilter#config",
    "access": null,
    "description": "Get the configuration object (literal object)",
    "lineNumber": 3024,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Object"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1063,
    "kind": "file",
    "static": true,
    "variation": null,
    "name": "src/types.js",
    "memberof": null,
    "longname": "src/types.js",
    "access": null,
    "description": null,
    "lineNumber": 6,
    "content": "\n/**\n * Types utilities\n */\n\nconst UNDEFINED = void 0;\n\n/**\n * Return an empty function\n * @return {Function}\n */\nexport const EMPTY_FN = function() {};\n\n/**\n * Check passed argument is an object\n * @param  {Object}  obj\n * @return {Boolean}\n */\nexport const isObj =\n    (obj) => Object.prototype.toString.call(obj) === '[object Object]';\n\n/**\n * Check passed argument is a function\n * @param  {Function} obj\n * @return {Boolean}\n */\nexport const isFn =\n    (obj) => Object.prototype.toString.call(obj) === '[object Function]';\n\n/**\n * Check passed argument is an array\n * @param  {Array}  obj\n * @return {Boolean}\n */\nexport const isArray =\n    (obj) => Object.prototype.toString.call(obj) === '[object Array]';\n\n/**\n * Check passed argument is a string\n * @param {String} obj objue\n * @returns {Boolean}\n */\nexport const isString =\n    (obj) => Object.prototype.toString.call(obj) === '[object String]';\n\n/**\n * Check passed argument is a number\n * @param {Number} obj\n * @returns {Boolean}\n */\nexport const isNumber =\n    (obj) => Object.prototype.toString.call(obj) === '[object Number]';\n\n/**\n * Check passed argument is undefined\n * @param  {Any}  obj\n * @return {Boolean}\n */\nexport const isUndef = (obj) => obj === UNDEFINED;\n\n/**\n * Check passed argument is null\n * @param  {Any}  obj\n * @return {Boolean}\n */\nexport const isNull = (obj) => obj === null;\n\n/**\n * Check passed argument is empty (undefined, null or empty string)\n * @param  {Any}  obj\n * @return {Boolean}\n */\nexport const isEmpty = (obj) => isUndef(obj) || isNull(obj) || obj.length === 0;\n"
  },
  {
    "__docId__": 1064,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "UNDEFINED",
    "memberof": "src/types.js",
    "longname": "src/types.js~UNDEFINED",
    "access": null,
    "export": false,
    "importPath": "tablefilter/src/types.js",
    "importStyle": null,
    "description": "Types utilities",
    "lineNumber": 6,
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1065,
    "kind": "function",
    "static": true,
    "variation": null,
    "name": "EMPTY_FN",
    "memberof": "src/types.js",
    "longname": "src/types.js~EMPTY_FN",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{EMPTY_FN}",
    "description": "Return an empty function",
    "lineNumber": 12,
    "params": [],
    "return": {
      "nullable": null,
      "types": [
        "Function"
      ],
      "spread": false,
      "description": ""
    },
    "generator": false
  },
  {
    "__docId__": 1066,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isObj",
    "memberof": "src/types.js",
    "longname": "src/types.js~isObj",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isObj}",
    "description": "Check passed argument is an object",
    "lineNumber": 19,
    "params": [
      {
        "nullable": null,
        "types": [
          "Object"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1067,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isFn",
    "memberof": "src/types.js",
    "longname": "src/types.js~isFn",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isFn}",
    "description": "Check passed argument is a function",
    "lineNumber": 27,
    "params": [
      {
        "nullable": null,
        "types": [
          "Function"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1068,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isArray",
    "memberof": "src/types.js",
    "longname": "src/types.js~isArray",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isArray}",
    "description": "Check passed argument is an array",
    "lineNumber": 35,
    "params": [
      {
        "nullable": null,
        "types": [
          "Array"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1069,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isString",
    "memberof": "src/types.js",
    "longname": "src/types.js~isString",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isString}",
    "description": "Check passed argument is a string",
    "lineNumber": 43,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "String"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": "objue"
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1070,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isNumber",
    "memberof": "src/types.js",
    "longname": "src/types.js~isNumber",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isNumber}",
    "description": "Check passed argument is a number",
    "lineNumber": 51,
    "unknown": [
      {
        "tagName": "@returns",
        "tagValue": "{Boolean}"
      }
    ],
    "params": [
      {
        "nullable": null,
        "types": [
          "Number"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1071,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isUndef",
    "memberof": "src/types.js",
    "longname": "src/types.js~isUndef",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isUndef}",
    "description": "Check passed argument is undefined",
    "lineNumber": 59,
    "params": [
      {
        "nullable": null,
        "types": [
          "Any"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1072,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isNull",
    "memberof": "src/types.js",
    "longname": "src/types.js~isNull",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isNull}",
    "description": "Check passed argument is null",
    "lineNumber": 66,
    "params": [
      {
        "nullable": null,
        "types": [
          "Any"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1073,
    "kind": "variable",
    "static": true,
    "variation": null,
    "name": "isEmpty",
    "memberof": "src/types.js",
    "longname": "src/types.js~isEmpty",
    "access": null,
    "export": true,
    "importPath": "tablefilter/src/types.js",
    "importStyle": "{isEmpty}",
    "description": "Check passed argument is empty (undefined, null or empty string)",
    "lineNumber": 73,
    "params": [
      {
        "nullable": null,
        "types": [
          "Any"
        ],
        "spread": false,
        "optional": false,
        "name": "obj",
        "description": ""
      }
    ],
    "return": {
      "nullable": null,
      "types": [
        "Boolean"
      ],
      "spread": false,
      "description": ""
    },
    "type": {
      "types": [
        "*"
      ]
    }
  },
  {
    "__docId__": 1075,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Infinity",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Infinity",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1076,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "NaN",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~NaN",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1077,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "undefined",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~undefined",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1078,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "null",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~null",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1079,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1080,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "object",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~object",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1081,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1082,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "function",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~function",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1083,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1084,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "boolean",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~boolean",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1085,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Symbol",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Symbol",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1086,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Error",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Error",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1087,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "EvalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/EvalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~EvalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1088,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "InternalError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/InternalError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~InternalError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1089,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "RangeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RangeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1090,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "ReferenceError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ReferenceError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1091,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "SyntaxError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~SyntaxError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1092,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "TypeError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~TypeError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1093,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "URIError",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~URIError",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1094,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1095,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "number",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~number",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1096,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Date",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Date",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1097,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "String",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~String",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1098,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "string",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~string",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1099,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "RegExp",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~RegExp",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1100,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1101,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1102,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint8Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1103,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint8ClampedArray",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint8ClampedArray",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1104,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1105,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint16Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint16Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1106,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Int32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Int32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1107,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Uint32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Uint32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1108,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Float32Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float32Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1109,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Float64Array",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Float64Array",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1110,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Map",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Map",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1111,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Set",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Set",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1112,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "WeakMap",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakMap",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1113,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "WeakSet",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~WeakSet",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1114,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "ArrayBuffer",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~ArrayBuffer",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1115,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "DataView",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~DataView",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1116,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "JSON",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~JSON",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1117,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Promise",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Promise",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1118,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Generator",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Generator",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1119,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "GeneratorFunction",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~GeneratorFunction",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1120,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Reflect",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Reflect",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1121,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Proxy",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy",
    "memberof": "BuiltinExternal/ECMAScriptExternal.js",
    "longname": "BuiltinExternal/ECMAScriptExternal.js~Proxy",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1123,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "CanvasRenderingContext2D",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~CanvasRenderingContext2D",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1124,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "DocumentFragment",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~DocumentFragment",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1125,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Element",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Element",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Element",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1126,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Event",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Event",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Event",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1127,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "Node",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/Node",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~Node",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1128,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "NodeList",
    "externalLink": "https://developer.mozilla.org/en-US/docs/Web/API/NodeList",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~NodeList",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1129,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "XMLHttpRequest",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~XMLHttpRequest",
    "access": null,
    "description": "",
    "builtinExternal": true
  },
  {
    "__docId__": 1130,
    "kind": "external",
    "static": true,
    "variation": null,
    "name": "AudioContext",
    "externalLink": "https://developer.mozilla.org/en/docs/Web/API/AudioContext",
    "memberof": "BuiltinExternal/WebAPIExternal.js",
    "longname": "BuiltinExternal/WebAPIExternal.js~AudioContext",
    "access": null,
    "description": "",
    "builtinExternal": true
  }
]