{"version":3,"file":"static/js/main.787cd54c.js","mappings":"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CD,CAAC,MAED,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,OAGMC,GAAkB,CACzB,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MAED,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MAED,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,OAGMC,GAAiB,CACxB,CAAC,MACD,CAAC,MACD,CAAC,OACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,OAGMC,GAAc,CACrB,CAAC,MACD,CAAC,MACD,CAAC,OACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,OAGMC,GAAc,CACrB,CAAC,MACD,CAAC,MACD,CAAC,OACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,OAyBMC,GAAkB,CACzB,CAAC,MACD,CAAC,MACD,CAAC,OACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAAC,MACD,CAA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G,EAAG5f,IAAGkjH,IAC3B+R,EAAsB,EACtBC,EAAqB,EACrBjV,EAAergG,EAAG5f,IAAGigH,aACrBnE,GAASl8F,EAAG5f,IAAG87G,OACf6Z,GAAc,EACdxT,GAASviG,EAAG5f,IAAGmiH,OACf8R,GAAU,EACVC,GAAgBt0G,EAAG5f,IAAG43H,IACtBvK,GAAUztG,EAAG5f,IAAGqtH,QAChBptG,GAAKL,EAAG5f,IAAGigB,GACXigG,GAAOtgG,EAAG5f,IAAGkgH,KACb8W,GAAep3G,EAAG5f,IAAGg3H,aACrB9K,GAAgB,EAChBwI,GAAW,EACXtI,GAAiB,EACjBC,GAAU,EACVC,GAAkB,EAClBqI,GAAa,EACbnI,GAAmB,EACnBC,GAAY,EAEZwK,GAAiBnzH,KAAK,CAClBkyH,kBACAC,eACAC,kBACAC,cACAhB,kBACAiB,iBACA3I,gBACA2H,WACArB,WACAnJ,gBACAyL,kBACAxC,gBACA3X,cACAmZ,WACAC,YACAgB,mBACAjU,QACA2R,cACAG,gBACAhU,QACAoW,SACAhC,OACAD,UACAkC,WACAzI,gBACA0I,eACAjC,aACAC,eACAiC,kBACAnB,aACAoB,cACAnB,gBACAC,YACAhV,YACAqT,kBACAiB,aACAD,aACAF,aACAC,aACA9J,SACAiK,qBACAC,sBACAC,qBACAjV,eACA2W,cACAvC,YACAwC,YACAC,cACAC,aACA3H,WACAzK,SACA7I,UACA6Z,eACAxT,UACA+R,iBACAD,WACA5G,WACAptG,MACAigG,QACA8W,gBACA9K,kBACAwI,aACAtI,mBACAC,YACAC,mBACAqI,cACAnI,oBACAC,eAGZ,CAIJ,GADAhnH,IAAK,EACa,IAAdowH,EAAG53H,OACH,IAAK+B,GAAE,EAAGA,GAAE61H,EAAG53H,OAAQ+B,KAAK,CAExB,IAAKyF,GAAIwxH,GAAiBh5H,OAAS,EAAGwH,IAAK,IACnCwxH,GAAiBxxH,IAAGq2G,SAAW+Z,EAAG71H,IAAG87G,QAAUmb,GAAiBxxH,IAAGy6G,OAAS2V,EAAG71H,IAAGkgH,MAC3E2V,EAAG71H,IAAGggH,YAAciX,GAAiBxxH,IAA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qtH,QAChBptG,GAAKL,EAAG5f,IAAGigB,GACX+2G,GAAep3G,EAAG5f,IAAGg3H,aACrB9K,GAAgB,EAChBwI,GAAW,EACXtI,GAAiB,EACjBC,GAAU,EACVC,GAAkB,EAClBqI,GAAa,EACbnI,GAAmB,EACnBC,GAAY,EAEZwK,GAAiBnzH,KAAK,CAClBgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACA7wD,eACA4wD,UACAh7C,kBACAC,eACAC,kBACAC,cACAg8C,cACAC,cACAj9C,kBACAiB,iBACA3I,gBACA2H,WACArB,WACAnJ,gBACAyL,kBACAxC,gBACA3X,cACAmZ,WACAC,YACAgB,mBACAjU,QACA2R,cACAG,gBACAoC,SACAhC,OACAD,UACAkC,WACAzI,gBACA0I,eACAjC,aACAC,eACAiC,kBACAnB,cACAoB,eACAnB,iBACAC,aACAhV,aACAqT,mBACAiB,aACAD,aACAF,aACAC,aACAG,sBACAC,uBACAC,sBACA0B,eACAvC,aACAwC,aACAC,eACAC,aACA3H,WACAzK,SACAgR,eACAzB,iBACAD,WACA5G,WACAptG,MACA+2G,gBACA9K,kBACAwI,aACAtI,mBACAC,YACAC,mBACAqI,cACAnI,oBACAC,eAGZ,CAIJ,GADAhnH,IAAK,EACa,IAAdowH,EAAG53H,OACH,IAAK+B,GAAE,EAAGA,GAAE61H,EAAG53H,OAAQ+B,KAAK,CAExB,IAAKyF,GAAIwxH,GAAiBh5H,OAAS,EAAGwH,IAAK,GACnCwxH,GAAiBxxH,IAAGyrK,WAAar7C,EAAG71H,IAAGkxK,SADDzrK,MAK1CA,IAAK,GAELwxH,GAAiBxxH,IAAGwwH,cAAe,EACnCgB,GAAiBxxH,IAAGgvH,aAAeoB,EAAG71H,IAAGy0H,aACzCwC,GAAiBxxH,IAAG8vH,WAAaM,EAAG71H,IAAGu1H,WACvC0B,GAAiBxxH,IAAGkxH,YAAcd,EAAG71H,IAAGy1H,UAAahb,GAAQob,EAAG71H,IAAGu1H,YAAYM,EAAG71H,IAAGy1H,UAAW,IAAM,EACtGwB,GAAiBxxH,IAAG+vH,cAAgBK,EAAG71H,IAAG63H,cAC1CZ,GAAiBxxH,IAAGgwH,UAAYI,EAAG71H,IAAGy1H,UACtCwB,GAAiBxxH,IAAGmvH,WAAaiB,EAAG71H,IAAGggH,SACvCiX,GAAiBxxH,IAAGwvH,oBAAsBY,EAAG71H,IAAGkjH,IAChD+T,GAAiBxxH,IAAGmxH,YAAgC,IAAlBf,EAAG71H,IAAG42H,YACxCK,GAAiBxxH,IAAG4uH,UAAYwB,EAAG71H,IAAGq0H,UACtC4C,GAAiBxxH,IAAG2pH,QAAwB,IAAdyG,EAAG71H,IAAGovH,QACpC6H,GAAiBxxH,IAAGk/G,MAAQkR,EAAG71H,IAAG63H,cAClCZ,GAAiBxxH,IAAGq2G,OAAS+Z,EAAG71H,IAAG87G,OAE/B+Z,EAAG71H,IAAGu1H,YACN0B,GAAiBxxH,IAAG8wH,OAAUV,EAAG71H,IAAGu0H,KAAKsB,EAAG71H,IAAGu1H,WAAY,IAC3D0B,GAAiBxxH,IAAG+wH,SAAYX,EAAG71H,IAAG83H,cAAcjC,EAAG71H,IAAGu1H,WAAY,IACtE0B,GAAiBxxH,IAAGgxH,aAAgBZ,EAAG71H,IAAG+3H,gBAAgBlC,EAAG71H,IAAGu1H,WAAY,IAC5E0B,GAAiBxxH,IAAGixH,gBAAmBb,EAAG71H,IAAGy0H,aAAaoB,EAAG71H,IAAGu1H,WAAY,MAE5E0B,GAAiBxxH,IAAG8wH,OAAS,EAC7BU,GAAiBxxH,IAAG+wH,SAAW,EAC/BS,GAAiBxxH,IAAGgxH,aAAe,EACnCQ,GAAiBxxH,IAAGixH,gBAAkB,KAI1CP,GAAc,EACdH,GAAkB,EAClBC,GAAe,EACfC,GAAkB,EAClBi8C,GAAc,EACdC,GAAc,EACdtB,EAAmC,KAAvB,KAAOj7C,EAAG71H,IAAG87G,QAAqC,IAAf+Z,EAAG71H,IAAG87G,OAAiB+Z,EAAG71H,IAAGunB,KAC5Eu0F,EAAS+Z,EAAG71H,IAAG87G,OACfiE,EAAa8V,EAAG71H,IAAG+/G,WACnBC,EAAW6V,EAAG71H,IAAGggH,SACjBC,EAAe4V,EAAG71H,IAAGigH,aACrBC,EAAO2V,EAAG71H,IAAGkiH,SACb6uD,EAAUl7C,EAAG71H,IAAGkiH,SAAS5jG,OAAS,IAAMu3G,EAAG71H,IAAGqxK,YAAY/yJ,OAC1D6hG,EAAQ,EACR+wD,EAAWr7C,EAAG71H,IAAGkxK,SACjBC,EAA6Bt7C,EAAG71H,IAAG87G,OAAOx7G,WAAau1H,EAAG71H,IAAGkxK,SAASxyJ,UAAU,EAAG,IACnF0yJ,EAAar0D,GAAW8Y,EAAG71H,IAAGg9G,UAAW6Y,EAAG71H,IAAGsxK,cAC/CL,EAAWp7C,EAAG71H,IAAGunB,KACjB64F,EAAeyV,EAAG71H,IAAGmiH,OACrB6uD,EAAUn7C,EAAG71H,IAAGqxK,YAChBl8C,EAAkB,EAClBiB,EAAiB,EACjBhB,EAAW,EACXrB,EAAW,EACXnJ,EAAgB,EAChByL,EAAkB,EAClB5I,EAAgB,EAChBoG,EAAgB,EAChB3X,EAAc,EACdmZ,EAAW,EACXC,EAAY,EACZgB,EAAmB,EACnBjU,EAAQ,EACR2R,EAAc,EACdG,EAAgB,EAChBI,EAAO,EACPD,EAAU,EACVvG,EAAgB,EAChByG,EAAa,EACbC,EAAeoB,EAAG71H,IAAGy0H,aACrBc,GAAaM,EAAG71H,IAAGu1H,WACnBoB,GAAcd,EAAG71H,IAAGy1H,UAAahb,GAAQob,EAAG71H,IAAGu1H,YAAYM,EAAG71H,IAAGy1H,UAAW,IAAM,EAClFD,GAAgBK,EAAG71H,IAAG63H,cACtBpC,GAAYI,EAAG71H,IAAGy1H,UAClBhV,GAAY,EACZqT,GAAkB,EAClBiB,EAAa,EACbD,EAAae,EAAG71H,IAAGggH,SACnB4U,EAAaiB,EAAG71H,IAAGggH,SACnB6U,EAAa,EACbG,GAAqB,EACrBC,GAAsBY,EAAG71H,IAAGkjH,IAC5BgS,GAAqB,EACrB0B,GAAgC,IAAlBf,EAAG71H,IAAG42H,YACpBvC,GAAYxY,GAAQga,EAAG71H,IAAG87G,OAAO+Z,EAAG71H,IAAGq0H,WACvCwC,GAAY,EACZC,GAAc,EACdC,GAAY,EACZ3H,GAAwB,IAAdyG,EAAG71H,IAAGovH,QAChBzK,GAAQkR,EAAG71H,IAAG63H,cACdlC,GAAc,EACdzB,GAAgB,EAEhBD,GAAU,EACV5G,GAAU,EACVptG,GAAK,EACL+2G,GAAe,EACXzB,IACAgB,EAAUV,EAAG71H,IAAGu0H,KAAKsB,EAAG71H,IAAGu1H,WAAY,IACvCiB,EAAYX,EAAG71H,IAAG83H,cAAcjC,EAAG71H,IAAGu1H,WAAY,IAClDkB,EAAgBZ,EAAG71H,IAAG+3H,gBAAgBlC,EAAG71H,IAAGu1H,WAAY,IACxDmB,EAAmBb,EAAG71H,IAAGy0H,aAAaoB,EAAG71H,IAAGu1H,WAAY,MAExDgB,EAAS,EACTC,EAAW,EACXC,EAAe,EACfC,EAAkB,GAEtBxK,GAAgB,EAChBwI,GAAW,EACXtI,GAAiB,EACjBC,GAAU,EACVC,GAAkB,EAClBqI,GAAa,EACbnI,GAAmB,EACnBC,GAAY,EAEZwK,GAAiBnzH,KAAK,CAClBgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACA7wD,eACA4wD,UACAh7C,kBACAC,eACAC,kBACAC,cACAg8C,cACAC,cACAj9C,kBACAiB,iBACA3I,gBACA2H,WACArB,WACAnJ,gBACAyL,kBACAxC,gBACA3X,cACAmZ,WACAC,YACAgB,mBACAjU,QACA2R,cACAG,gBACAoC,SACAhC,OACAD,UACAkC,WACAzI,gBACA0I,eACAjC,aACAC,eACAiC,kBACAnB,cACAoB,eACAnB,iBACAC,aACAhV,aACAqT,mBACAiB,aACAD,aACAF,aACAC,aACAG,sBACAC,uBACAC,sBACA0B,eACAvC,aACAwC,aACAC,eACAC,aACA3H,WACAzK,SACAgR,eACAzB,iBACAD,WACA5G,WACAptG,MACA+2G,gBACA9K,kBACAwI,aACAtI,mBACAC,YACAC,mBACAqI,cACAnI,oBACAC,eAGZ,CAGJ,GAAiB,IAAb1sG,EAAG9hB,OACH,IAAK+B,GAAE,EAAGA,GAAE+f,EAAG9hB,OAAQ+B,KAAK,CAExB,IAAKyF,GAAIwxH,GAAiBh5H,OAAS,EAAGwH,IAAK,GACnCwxH,GAAiBxxH,IAAGyrK,WAAanxJ,EAAG/f,IAAGkxK,SADDzrK,MAOtCA,IAAK,GACLwxH,GAAiBxxH,IAAGywH,iBAAkB,EACtCe,GAAiBxxH,IAAG2wH,eAAiBr2G,EAAG/f,IAAGo2H,eAC3Ca,GAAiBxxH,IAAGmlH,eAAiB7qG,EAAG/f,IAAGy3H,aAC3CR,GAAiBxxH,IAAGovH,WAAa90G,EAAG/f,IAAGggH,SACvCiX,GAAiBxxH,IAAGyvH,mBAAqBn1G,EAAG/f,IAAGkjH,IAC/C+T,GAAiBxxH,IAAGoxH,UAAY92G,EAAG/f,IAAG62H,UACtCI,GAAiBxxH,IAAGqxH,YAAc/2G,EAAG/f,IAAGi4H,gBACxChB,GAAiBxxH,IAAGsxH,UAAYh3G,EAAG/f,IAAGk4H,WACI,OAAtCjB,GAAiBxxH,IAAGyuH,cACpB+C,GAAiBxxH,IAAGyuH,eAAiBzZ,GAAQ16F,EAAG/f,IAAG43H,KAEnDX,GAAiBxxH,IAAGyuH,cAAiBn0G,EAAG/f,IAAG43H,MAI/C5B,GAAkB,EAClBC,GAAe,EACfC,GAAkB,EAClBC,GAAc,EACdg8C,GAAc,EACdC,GAAc,EACdtB,EAAmC,KAAvB,KAAO/wJ,EAAG/f,IAAG87G,QAAqC,IAAf/7F,EAAG/f,IAAG87G,OAAiB/7F,EAAG/f,IAAGunB,KAC5Eu0F,EAAS/7F,EAAG/f,IAAG87G,OACfiE,EAAahgG,EAAG/f,IAAG+/G,WACnBC,EAAWjgG,EAAG/f,IAAGggH,SACjBC,EAAelgG,EAAG/f,IAAGigH,aACrBC,EAAOngG,EAAG/f,IAAGkiH,SACb6uD,EAAUhxJ,EAAG/f,IAAGkiH,SAAS5jG,OAAS,IAAMyB,EAAG/f,IAAGqxK,YAAY/yJ,OAC1D6hG,EAAQ,EACR+wD,EAAWnxJ,EAAG/f,IAAGkxK,SACjBC,EAA6BpxJ,EAAG/f,IAAG87G,OAAOx7G,WAAayf,EAAG/f,IAAGkxK,SAASxyJ,UAAU,EAAG,IACnF0yJ,EAAar0D,GAAWh9F,EAAG/f,IAAGg9G,UAAWj9F,EAAG/f,IAAGsxK,cAC/CL,EAAWlxJ,EAAG/f,IAAGunB,KACjB64F,EAAergG,EAAG/f,IAAGmiH,OACrB6uD,EAAUjxJ,EAAG/f,IAAGqxK,YAChBl8C,EAAkB,EAClBiB,EAAiBr2G,EAAG/f,IAAGo2H,eACvBhB,EAAW,EACXrB,EAAW,EACXnJ,EAAgB7qG,EAAG/f,IAAGy3H,aACtBhK,EAAgB,EAChBoG,EAAgB,EAChB3X,EAAc,EACdmZ,EAAW,EACXC,EAAY,EACZgB,EAAmB,EACnBjU,EAAQ,EACR2R,EAAc,EACdG,EAAgB,EAChBoC,EAAS,EACThC,EAAO,EACPD,EAAU,EACVkC,EAAW,EACXzI,EAAgB,EAChB0I,EAAe,EACfjC,EAAa,EACbC,EAAe,EACfiC,EAAkB,EAClBnB,GAAa,EACboB,GAAc,EACdnB,GAAgB,EAChBC,GAAY,EACZhV,GAAY,EACZqT,GAAkB,EAClBiB,EAAa,EACbD,EAAa,EACbF,EAAa,EACbC,EAAa90G,EAAG/f,IAAGggH,SACnBgV,GAAqB,EACrBC,GAAsB,EACtBC,GAAqBn1G,EAAG/f,IAAGkjH,IAC3B0T,GAAc,EACdvC,GAAY,EACZwC,GAAY92G,EAAG/f,IAAG62H,UAClBC,GAAc/2G,EAAG/f,IAAGi4H,gBACpBlB,GAAYh3G,EAAG/f,IAAGk4H,WAClB9I,GAAU,EACVzK,GAAQ,EACRgR,GAAc,EACdzB,GAAgBn0G,EAAG/f,IAAG43H,IACtB3D,GAAUl0G,EAAG/f,IAAGi4H,gBAChB5K,GAAU,EACVptG,GAAK,EACLwtG,EAAgB,EAChBvB,GAAgB,EAChBwI,GAAW,EACXtI,GAAiB,EACjBC,GAAU,EACVC,GAAkB,EAClBqI,GAAa,EACbnI,GAAmB,EACnBC,GAAY,EAEZwK,GAAiBnzH,KAAK,CAClBgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACA7wD,eACA4wD,UACAh7C,kBACAC,eACAC,kBACAC,cACAg8C,cACAC,cACAj9C,kBACAiB,iBACA3I,gBACA2H,WACArB,WACAnJ,gBACAyL,kBACAxC,gBACA3X,cACAmZ,WACAC,YACAgB,mBACAjU,QACA2R,cACAG,gBACAoC,SACAhC,OACAD,UACAkC,WACAzI,gBACA0I,eACAjC,aACAC,eACAiC,kBACAnB,cACAoB,eACAnB,iBACAC,aACAhV,aACAqT,mBACAiB,aACAD,aACAF,aACAC,aACAG,sBACAC,uBACAC,sBACA0B,eACAvC,aACAwC,aACAC,eACAC,aACA3H,WACAzK,SACAgR,eACAzB,iBACAD,WACA5G,WACAptG,MACA+2G,gBACA9K,kBACAwI,aACAtI,mBACAC,YACAC,mBACAqI,cACAnI,oBACAC,eAIhB,CAGJ,GAAkB,IAAdqJ,EAAI73H,OACJ,IAAK+B,GAAE,EAAGA,GAAE81H,EAAI73H,OAAQ+B,KAAK,CAEzB,IAAKyF,GAAIwxH,GAAiBh5H,OAAS,EAAGwH,IAAK,GACnCwxH,GAAiBxxH,IAAGyrK,WAAap7C,EAAI91H,IAAGkxK,SADFzrK,MAMtCA,IAAK,GACLwxH,GAAiBxxH,IAAG6mH,gBAAkBwJ,EAAI91H,IAAGi8G,SAC7Cgb,GAAiBxxH,IAAGkvH,WAAamB,EAAI91H,IAAGm8G,MACxC8a,GAAiBxxH,IAAG+mH,iBAAmBsJ,EAAI91H,IAAGi8G,SAAW6Z,EAAI91H,IAAGm8G,MAAM2Z,EAAI91H,IAAGi8G,SAAW,EACxFgb,GAAiBxxH,IAAGgnH,UAAYqJ,EAAI91H,IAAG6sH,MAGvCmJ,GAAkB,EAClBC,GAAe,EACfC,GAAkB,EAClBC,GAAc,EACdg8C,GAAc,EACdC,GAAc,EACdtB,EAAoC,KAAxB,KAAOh7C,EAAI91H,IAAG87G,QAAsC,IAAhBga,EAAI91H,IAAG87G,OAAiBga,EAAI91H,IAAGunB,KAC/Eu0F,EAASga,EAAI91H,IAAG87G,OAChBiE,EAAa+V,EAAI91H,IAAG+/G,WACpBC,EAAW8V,EAAI91H,IAAGggH,SAClBC,EAAe6V,EAAI91H,IAAGigH,aACtBC,EAAO4V,EAAI91H,IAAGkiH,SACd6uD,EAAUj7C,EAAI91H,IAAGkiH,SAAS5jG,OAAS,IAAMw3G,EAAI91H,IAAGqxK,YAAY/yJ,OAC5D6hG,EAAQ,EACR+wD,EAAWp7C,EAAI91H,IAAGkxK,SAClBC,EAA6Br7C,EAAI91H,IAAG87G,OAAOx7G,WAAaw1H,EAAI91H,IAAGkxK,SAASxyJ,UAAU,EAAG,IACrF0yJ,EAAar0D,GAAW+Y,EAAI91H,IAAGg9G,UAAW8Y,EAAI91H,IAAGsxK,cACjDL,EAAWn7C,EAAI91H,IAAGunB,KAClB64F,EAAe0V,EAAI91H,IAAGmiH,OACtB6uD,EAAUl7C,EAAI91H,IAAGqxK,YACjBl8C,EAAkB,EAClBiB,EAAiB,EACjBhB,EAAW,EACXrB,EAAW,EACXnJ,EAAgB,EAChB6C,EAAgB,EAChBoG,EAAgB,EAChB3X,EAAc,EACdmZ,EAAW,EACXC,EAAY,EACZgB,EAAmB,EACnBjU,EAAQ,EACR2R,EAAc,EACdG,EAAgB,EAChBoC,EAAS,EACThC,EAAO,EACPD,EAAU,EACVkC,EAAW,EACXzI,EAAgB,EAChB0I,EAAe,EACfjC,EAAa,EACbC,EAAe,EACfiC,EAAkB,EAClBnB,GAAa,EACboB,GAAc,EACdnB,GAAgB,EAChBC,GAAY,EACZhV,GAAY,EACZqT,GAAkB,EAClBiB,EAAa,EACbD,EAAa,EACbF,EAAa,EACbC,EAAaiB,EAAI91H,IAAGggH,SACpBgV,GAAqB,EACrBC,GAAsB,EACtBC,GAAqB,EACrB0B,GAAc,EACdvC,GAAY,EACZwC,GAAY,EACZC,GAAc,EACdC,GAAY,EACZ3H,GAAU,EACVzK,GAAQ,EACR7I,EAASga,EAAI91H,IAAG87G,OAChB6Z,GAAc,EACdzB,GAAgB,EAChBD,GAAU,EACV5G,GAAU,EACVptG,GAAK,EACLwtG,EAAgB,EAChBvB,GAAiB,EACjBwI,GAAY,EACZtI,GAAkB,EAClBC,GAAW,EACXC,GAAkBwJ,EAAI91H,IAAGi8G,SACzB0Y,GAAamB,EAAI91H,IAAGm8G,MACpBqQ,GAAmBsJ,EAAI91H,IAAGi8G,SAAW6Z,EAAI91H,IAAGm8G,MAAM2Z,EAAI91H,IAAGi8G,SAAW,EACpEwQ,GAAYqJ,EAAI91H,IAAG6sH,IAEnBoK,GAAiBnzH,KAAK,CAClBgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACA7wD,eACA4wD,UACAh7C,kBACAC,eACAC,kBACAC,cACAg8C,cACAC,cACAj9C,kBACAiB,iBACA3I,gBACA2H,WACArB,WACAnJ,gBACAyL,kBACAxC,gBACA3X,cACAmZ,WACAC,YACAgB,mBACAjU,QACA2R,cACAG,gBACAoC,SACAhC,OACAD,UACAkC,WACAzI,gBACA0I,eACAjC,aACAC,eACAiC,kBACAnB,cACAoB,eACAnB,iBACAC,aACAhV,aACAqT,mBACAiB,aACAD,aACAF,aACAC,aACAG,sBACAC,uBACAC,sBACA0B,eACAvC,aACAwC,aACAC,eACAC,aACA3H,WACAzK,SACAgR,eACAzB,iBACAD,WACA5G,WACAptG,MACA+2G,gBACA9K,kBACAwI,aACAtI,mBACAC,YACAC,mBACAqI,cACAnI,oBACAC,eAIhB,CAGJ,GAAkB,IAAdsJ,EAAI93H,OACJ,IAAK+B,GAAE,EAAGA,GAAE+1H,EAAI93H,OAAQ+B,KAAK,CAEzB,IAAKyF,GAAIwxH,GAAiBh5H,OAAS,EAAGwH,IAAK,GACnCwxH,GAAiBxxH,IAAGyrK,WAAan7C,EAAI/1H,IAAGkxK,SADFzrK,MAMtCA,IAAK,GACLwxH,GAAiBxxH,IAAGymH,eAAiB6J,EAAI/1H,IAAGi8G,SAC5Cgb,GAAiBxxH,IAAGivH,UAAYqB,EAAI/1H,IAAGm8G,MACvC8a,GAAiBxxH,IAAG2mH,gBAAkB2J,EAAI/1H,IAAGi8G,SAAW8Z,EAAI/1H,IAAGm8G,MAAM4Z,EAAI/1H,IAAGi8G,SAAW,EACvFgb,GAAiBxxH,IAAG4mH,SAAW0J,EAAI/1H,IAAG6sH,MAGtCmJ,GAAkB,EAClBC,GAAe,EACfC,GAAkB,EAClBC,GAAc,EACdg8C,GAAc,EACdC,GAAc,EACdtB,EAAoC,KAAxB,KAAO/6C,EAAI/1H,IAAG87G,QAAsC,IAAhBia,EAAI/1H,IAAG87G,OAAiBia,EAAI/1H,IAAGunB,KAC/Eu0F,EAASia,EAAI/1H,IAAG87G,OAChBiE,EAAagW,EAAI/1H,IAAG+/G,WACpBC,EAAW+V,EAAI/1H,IAAGggH,SAClBC,EAAe8V,EAAI/1H,IAAGigH,aACtBC,EAAO6V,EAAI/1H,IAAGkiH,SACd6uD,EAAUh7C,EAAI/1H,IAAGkiH,SAAS5jG,OAAS,IAAMy3G,EAAI/1H,IAAGqxK,YAAY/yJ,OAC5D6hG,EAAQ,EACR+wD,EAAWn7C,EAAI/1H,IAAGkxK,SAClBC,EAA6Bp7C,EAAI/1H,IAAG87G,OAAOx7G,WAAay1H,EAAI/1H,IAAGkxK,SAASxyJ,UAAU,EAAG,IACrF0yJ,EAAar0D,GAAWgZ,EAAI/1H,IAAGg9G,UAAW+Y,EAAI/1H,IAAGsxK,cACjDL,EAAWl7C,EAAI/1H,IAAGunB,KAClB64F,EAAe2V,EAAI/1H,IAAGmiH,OACtB6uD,EAAUj7C,EAAI/1H,IAAGqxK,YACjBl8C,EAAkB,EAClBiB,EAAiB,EACjBhB,EAAW,EACXrB,EAAW,EACXnJ,EAAgB,EAChB6C,EAAgB,EAChBoG,EAAgB,EAChB3X,EAAc,EACdmZ,EAAW,EACXC,EAAY,EACZgB,EAAmB,EACnBjU,EAAQ,EACR2R,EAAc,EACdG,EAAgB,EAChBoC,EAAS,EACThC,EAAO,EACPD,EAAU,EACVkC,EAAW,EACXzI,EAAgB,EAChB0I,EAAe,EACfjC,EAAa,EACbC,EAAe,EACfiC,EAAkB,EAClBnB,GAAa,EACboB,GAAc,EACdnB,GAAgB,EAChBC,GAAY,EACZhV,GAAY,EACZqT,GAAkB,EAClBiB,EAAa,EACbD,EAAa,EACbF,EAAa,EACbC,EAAakB,EAAI/1H,IAAGggH,SACpBgV,GAAqB,EACrBC,GAAsB,EACtBC,GAAqB,EACrB0B,GAAc,EACdvC,GAAY,EACZwC,GAAY,EACZC,GAAc,EACdC,GAAY,EACZ3H,GAAU,EACVzK,GAAQ,EACRgR,GAAc,EACdzB,GAAgB,EAChBD,GAAU,EACV5G,GAAU,EACVptG,GAAK,EACLwtG,EAAgB,EAChBvB,GAAiB6J,EAAI/1H,IAAGi8G,SACxByY,GAAYqB,EAAI/1H,IAAGm8G,MACnBiQ,GAAkB2J,EAAI/1H,IAAGi8G,SAAW8Z,EAAI/1H,IAAGm8G,MAAM4Z,EAAI/1H,IAAGi8G,SAAW,EACnEoQ,GAAW0J,EAAI/1H,IAAG6sH,IAClBP,GAAkB,EAClBqI,GAAa,EACbnI,GAAmB,EACnBC,GAAY,EAEZwK,GAAiBnzH,KAAK,CAClBgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACA7wD,eACA4wD,UACAh7C,kBACAC,eACAC,kBACAC,cACAg8C,cACAC,cACAj9C,kBACAiB,iBACA3I,gBACA2H,WACArB,WACAnJ,gBACAyL,kBACAxC,gBACA3X,cACAmZ,WACAC,YACAgB,mBACAjU,QACA2R,cACAG,gBACAoC,SACAhC,OACAD,UACAkC,WACAzI,gBACA0I,eACAjC,aACAC,eACAiC,kBACAnB,cACAoB,eACAnB,iBACAC,aACAhV,aACAqT,mBACAiB,aACAD,aACAF,aACAC,aACAG,sBACAC,uBACAC,sBACA0B,eACAvC,aACAwC,aACAC,eACAC,aACA3H,WACAzK,SACAgR,eACAzB,iBACAD,WACA5G,WACAptG,MACA+2G,gBACA9K,kBACAwI,aACAtI,mBACAC,YACAC,mBACAqI,cACAnI,oBACAC,eAIhB,CAIJ,GAAgC,IAA5BwK,GAAiBh5H,OAEjB,IADAg5H,GAAiBr0E,MAAK,CAAC75C,EAAGC,IAAOD,EAAE+nK,QAAU9nK,EAAE8nK,QAAW,GAAK,IAC1D9wK,GAAI,EAAGA,GAAIi3H,GAAiBh5H,OAAQ+B,KACF,OAA/Bi3H,GAAiBj3H,IAAG87G,SAEpBmb,GAAiBj3H,IAAGy0H,aAAe,KACnCwC,GAAiBj3H,IAAGs0H,QAAU,KAC9B2C,GAAiBj3H,IAAGu0H,KAAO,KAC3B0C,GAAiBj3H,IAAGw0H,WAAa,KACjCyC,GAAiBj3H,IAAGq0H,UAAY,MAI5C,OAAO4C,EAAgB,ECnpC3B,MAAMo7C,WAAkC78D,EAAAA,UACpC5kG,WAAAA,CAAY/J,GACRo4G,MAAMp4G,GACN4C,KAAK6nH,aAAe7nH,KAAK5C,MAAMyqH,aAC/B7nH,KAAKzE,KAAO,GACZ,IAAI4rK,EAAe,KACnBnnK,KAAK+1G,OAAS,EACd/1G,KAAKonK,gBAAkB,GAGvBD,EAAe,CACX,CACI97H,MAAO,OAAQD,MAAO,6BAA8B2O,SAAU,+BAC9DiB,eAAgB,OAAQyZ,YAAY,EACpC/Z,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,MAAyC,MAAjC7K,EAAKzoC,WAAW5M,OAAO,EAAG,GAAa,QAAU82C,SAASzB,EAAKzoC,WAAW5M,OAAO,EAAG,IAAM,IAAM82C,SAASzB,EAAKzoC,WAAW5M,OAAO,GAAI,GAChJ,EACAqmB,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,YAE/B,CACI1qE,MAAO,KAAMD,MAAO,WAAY2O,SAAU,wCAC1CiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,YAK/B,CACI1qE,MAAO,QAASD,MAAO,UAAW2O,SAAU,+BAC5CiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,YAE/B,CACI1qE,MAAO,QAASD,MAAO,aAAc2O,SAAU,qCAC/CiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,YAE/B,CACI1qE,MAAO,IAAKD,MAAO,QAAS2O,SAAU,uCACtCiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,aAKnC/1G,KAAKmrC,KAAO,CACR,CAAEE,MAAO,GACL54B,QAAS00J,GAEb,CACI97H,MAAO,UACP54B,QAAQ,CACJ,CACI44B,MAAO,OAAQD,MAAO,cAAe2O,SAAU,oBAC/C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,kBAAmB2O,SAAU,oBAClD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,aAAc2O,SAAU,oBAC7C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,OAAQD,MAAO,cAAe2O,SAAU,oBAC/C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,gBAAiB2O,SAAU,0BAChD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,KAIZ,CACIzP,MAAO,WACP54B,QAAQ,CACJ,CACI44B,MAAO,OAAQD,MAAO,cAAe2O,SAAU,oBAC/C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,kBAAmB2O,SAAU,oBAClD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,aAAc2O,SAAU,0BAC7C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,KAIZ,CACIzP,MAAO,YACP54B,QAAQ,CACJ,CACI44B,MAAO,OAAQD,MAAO,eAAgB2O,SAAU,oBAChD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,mBAAoB2O,SAAU,oBACnD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,cAAe2O,SAAU,0BAC9C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,KAIZ,CACIzP,MAAO,YACP54B,QAAS,CACL,CACI44B,MAAO,OAAQD,MAAO,eAAgB2O,SAAU,oBAChD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,mBAAoB2O,SAAU,oBACnD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,cAAe2O,SAAU,0BAC9C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,KAIZ,CACIzP,MAAO,UACP54B,QAAS,CACL,CACI44B,MAAO,OAAQD,MAAO,eAAgB2O,SAAU,oBAChD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,mBAAoB2O,SAAU,oBACnD94B,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3BjV,sBAAuB,OAAQrsC,YAAY,EAC3C/Z,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,cAAe2O,SAAU,0BAC9C94B,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3BjV,sBAAuB,OAAQrsC,YAAY,EAC3C/Z,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,KAIZ,CACIzP,MAAO,MACP54B,QAAS,CACL,CACI44B,MAAO,OAAQD,MAAO,UAAW2O,SAAU,oBAC3C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,cAAe2O,SAAU,oBAC9C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,SAAU2O,SAAU,0BACzC+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,KAIZ,CACIzP,MAAO,iBAAkBD,MAAO,eAChC01D,sBAAuB,OAAQrsC,YAAY,EAC3CzZ,eAAe,WACf/5B,MAAM,GAAD7qB,OAAK0+G,GAAY90G,KAAK+1G,WAC3Br7D,UAAW,SAASzK,EAAMm2C,EAAiBtrC,GACvC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,IAIR96C,KAAKgqC,GAAK+hE,EAAAA,YACV/rG,KAAKo2G,UAAY,IACrB,CAGAC,eAAAA,GACI,IAAIwR,EAAe7nH,KAAK6nH,aACpBw/C,EAAU,EACVh1D,EAAS,EACTiE,EAAa,GACbC,EAAW,EACXC,EAAe,GACfC,EAAO,GACP6wD,EAAU,GAEVE,EAAW,EACX9wD,EAAQ,EACR+wD,EAAW,GACXC,EAA6B,GAC7BC,EAAa,GACb7/C,EAAc,EACdC,EAAkB,EAClBC,EAAa,EACbC,EAAc,EACdC,EAAgB,EAChBC,EAAc,EACdC,EAAkB,EAClBC,EAAa,EACbC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAU,EACVC,EAAc,EACdC,EAAS,EACTC,EAAe,EAEf1Q,EAAU,GAEd,GAA0B,IAAvBqP,EAAarzH,OACZ,IAAK,IAAI+B,EAAI,EAAGA,EAAIsxH,EAAarzH,OAAQ+B,IACrC8wK,EAA4C,KAAjC,KAAOx/C,EAAatxH,GAAG87G,QAA6C,IAAzBwV,EAAatxH,GAAG87G,OAAewV,EAAatxH,GAAGunB,KACrGu0F,EAASwV,EAAatxH,GAAG87G,OACzBiE,EAAauR,EAAatxH,GAAG+/G,WAC7BC,EAAWsR,EAAatxH,GAAGggH,SAC3BC,EAAeqR,EAAatxH,GAAGigH,aAC/BC,EAAOoR,EAAatxH,GAAGkiH,SACvB6uD,EAAUz/C,EAAatxH,GAAGkiH,SAAS5jG,OAAS,IAAMgzG,EAAatxH,GAAGqxK,YAAY/yJ,OAC9E6hG,EAAQ,EACR+wD,EAAW5/C,EAAatxH,GAAGkxK,SAC3BC,EAA6B7/C,EAAatxH,GAAG87G,OAAOx7G,WAAagxH,EAAatxH,GAAGkxK,SAASxyJ,UAAU,EAAG,IACvG0yJ,EAAar0D,GAAWuU,EAAatxH,GAAGg9G,UAAWsU,EAAatxH,GAAGsxK,cACnEL,EAAW3/C,EAAatxH,GAAGunB,KAC3BgqG,EAAcD,EAAatxH,GAAG6yH,eAC9BrB,EAAkBF,EAAatxH,GAAG4yH,aAClCjB,EAAkD,EAAjCL,EAAatxH,GAAG6yH,eAAsBvB,EAAatxH,GAAG8yH,gBACvEpB,EAAcJ,EAAatxH,GAAGojH,KAC9BwO,EAAclX,GAAQ4W,EAAatxH,GAAG+yH,YAAYzB,EAAatxH,GAAGgzH,cAClEnB,EAAkBnX,GAAQ4W,EAAatxH,GAAGizH,WAAW3B,EAAatxH,GAAGkzH,aACrEnB,EAAeT,EAAatxH,GAAGmzH,aAC/BnB,EAAmBV,EAAatxH,GAAGozH,YACnClB,EAAeZ,EAAatxH,GAAGqzH,aAC/BlB,EAAmBb,EAAatxH,GAAGszH,YACnCjB,EAAef,EAAatxH,GAAGuzH,aAC/BjB,EAAmBhB,EAAatxH,GAAGwzH,YACnChB,EAAUlB,EAAatxH,GAAG8yH,gBAC1BL,EAAcnB,EAAatxH,GAAGyzH,cAC9BhC,EAAkD,IAArClW,GAAQgW,EAAYC,GACjCM,EAAkD,IAArCvW,GAAQqW,EAAYC,GACjCI,EAAqD,IAAvC1W,GAAQwW,EAAaC,GACnCI,EAAqD,IAAvC7W,GAAQ2W,EAAaC,GACnCI,EAAqD,IAAvChX,GAAQ8W,EAAaC,GACnCI,EAAsC,IAA7BnX,GAAQiX,EAAQC,GACzBE,EAAerB,EAAatxH,GAAGkjH,IAC/BjB,EAAQn+G,KAAK,CACTgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACAD,QA9EE,GA+EFz/C,cACAC,kBACAC,aACAC,cACAC,gBACAC,cACAC,kBACAC,aACAC,eACAC,mBACAC,cACAC,eACAC,mBACAC,cACAC,eACAC,mBACAC,cACAC,UACAC,cACAC,SACAC,iBAIW,IAAnB1Q,EAAQhkH,SACRgkH,EAAQr/D,MAAK,CAAC75C,EAAGC,IAAMD,EAAE+nK,QAAU9nK,EAAE8nK,QAAU,GAAK,IACpDrnK,KAAK45G,QAAQpB,IAEjBx4G,KAAKzE,KAAOi9G,CAChB,CAEAoB,OAAAA,CAAQn6G,GACJ,IAAI4nK,EAAU,EACVh1D,EAAS5yG,EAAE,GAAG4yG,OACdiE,EAAa,GACbC,EAAW,GACXC,EAAe,GACfC,EAAO,GACP6wD,EAAU,GACV5wD,EAAQ,EACR+wD,EAAW,GACXC,EAA6B,GAC7BC,EAAa,GACbH,EAAW,GACXD,EAAU,GACVz/C,EAAc,EACdC,EAAkB,EAClBC,EAAa,EACbC,EAAc,EACdC,EAAgB,EAChBC,EAAc,EACdC,EAAkB,EAClBC,EAAa,EACbC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAU,EACVC,EAAc,EACdC,EAAS,EACTC,EAAe,EACfg/C,EAAWzoK,EAAEjL,OACjB,IAAK,IAAI+B,EAAI,EAAGA,EAAI2xK,EAAU3xK,IACtB87G,IAAW5yG,EAAElJ,GAAG87G,SAChBg1D,EAA4B,KAAjB,KAAOh1D,GAA6B,IAATA,EAAe,GACrDq1D,EAA6Br1D,EAAOx7G,WAAaw7G,EAAOx7G,WAAa,SACrEmxH,EAAqD,IAAxClW,GAAQgW,EAAaC,GAClCM,EAAqD,IAAxCvW,GAAQqW,EAAaC,GAClCI,EAAwD,IAA1C1W,GAAQwW,EAAcC,GACpCI,EAAwD,IAA1C7W,GAAQ2W,EAAcC,GACpCI,EAAwD,IAA1ChX,GAAQ8W,EAAcC,GACpCI,EAAyC,IAAhCnX,GAAQiX,EAASC,GAC1BvpH,EAAEpF,KAAK,CACHgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACAD,UACAz/C,cACAC,kBACAC,aACAC,cACAC,gBACAC,cACAC,kBACAC,aACAC,eACAC,mBACAC,cACAC,eACAC,mBACAC,cACAC,eACAC,mBACAC,cACAC,UACAC,cACAC,SACAC,iBAEJ7W,EAAS5yG,EAAElJ,GAAG87G,OACdiE,EAAa,GACbC,EAAW,GACXC,EAAe,GACfC,EAAO,GACP6wD,EAAU,GACV5wD,EAAQ,EACR+wD,EAAW,GACXC,EAA6B,GAC7BC,EAAa,GACbH,EAAW,GACXD,EAAU,GACVz/C,EAAc,EACdC,EAAkB,EAClBC,EAAa,EACbC,EAAc,EACdC,EAAgB,EAChBC,EAAc,EACdC,EAAkB,EAClBC,EAAa,EACbC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAe,EACfC,EAAmB,EACnBC,EAAc,EACdC,EAAU,EACVC,EAAc,EACdC,EAAS,EACTC,EAAe,GAEnBxS,EAAQzF,GAAQyF,EAAOj3G,EAAElJ,GAAGmgH,OAC5BoR,EAAc7W,GAAQ6W,EAAYroH,EAAElJ,GAAGuxH,aACvCC,EAAkB9W,GAAQ8W,EAAgBtoH,EAAElJ,GAAGwxH,iBAC/CG,EAAgBjX,GAAQiX,EAAmC,EAAnBzoH,EAAElJ,GAAGuxH,aAC7CG,EAAczW,GAAQyW,EAAYxoH,EAAElJ,GAAG0xH,aACvCE,EAAclX,GAAQkX,EAAY1oH,EAAElJ,GAAG4xH,aACvCC,EAAkBnX,GAAQmX,EAAgB3oH,EAAElJ,GAAG6xH,iBAC/CE,EAAerX,GAAQqX,EAAa7oH,EAAElJ,GAAG+xH,cACzCC,EAAmBtX,GAAQsX,EAAiB9oH,EAAElJ,GAAGgyH,kBACjDE,EAAexX,GAAQwX,EAAahpH,EAAElJ,GAAGkyH,cACzCC,EAAmBzX,GAAQyX,EAAiBjpH,EAAElJ,GAAGmyH,kBACjDE,EAAe3X,GAAQ2X,EAAanpH,EAAElJ,GAAGqyH,cACzCC,EAAmB5X,GAAQ4X,EAAiBppH,EAAElJ,GAAGsyH,kBACjDE,EAAU9X,GAAQ8X,EAAQtpH,EAAElJ,GAAGwyH,SAC/BC,EAAc/X,GAAQ+X,EAAavpH,EAAElJ,GAAGyyH,aACxCE,EAAe9X,GAAc8X,EAAczpH,EAAElJ,GAAG2yH,cAEpDm+C,EAA4B,KAAjB,KAAOh1D,GAA6B,IAATA,EAAe,GACrDq1D,EAA6Br1D,EAAOx7G,WAAaw7G,EAAOx7G,WAAa,SACrEmxH,EAAkD,IAArClW,GAAQgW,EAAYC,GACjCM,EAAkD,IAArCvW,GAAQqW,EAAYC,GACjCI,EAAqD,IAAvC1W,GAAQwW,EAAaC,GACnCI,EAAqD,IAAvC7W,GAAQ2W,EAAaC,GACnCI,EAAqD,IAAvChX,GAAQ8W,EAAaC,GACnCI,EAAsC,IAA7BnX,GAAQiX,EAAQC,GACzBvpH,EAAEpF,KAAK,CACHgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACAD,UACAz/C,cACAC,kBACAC,aACAC,cACAC,gBACAC,cACAC,kBACAC,aACAC,eACAC,mBACAC,cACAC,eACAC,mBACAC,cACAC,eACAC,mBACAC,cACAC,UACAC,cACAC,SACAC,iBAEJzpH,EAAE05C,MAAK,CAAC75C,EAAGC,IAAMD,EAAE+nK,QAAU9nK,EAAE8nK,QAAU,GAAK,GAClD,CAEAp5I,iBAAAA,GACIjuB,KAAKq2G,kBACL,IAAI70D,EAAa,QACbuW,EAAiB,GACjBqvG,EAAkBpnK,KAAKzE,KAAK/G,OAASwL,KAAKzE,KAAK,GAAG82G,OAAS,EAC/D7wD,EAAa,KACbuW,EAAiB,EACjB/3D,KAAKo2G,UAAY,IAAIjkE,KAAJ,CAAcnyC,KAAKgqC,GAAI,CACpCzuC,KAAMyE,KAAKzE,KACX2mD,cAAc,EACdzvC,QAASzS,KAAKmrC,KACd0G,OAAQ,aACR6c,aAAc,SAAUzjB,GAEiC,UAD1CA,EAAIgY,UACNykH,2BAA2B9sK,OAAO,EAAG,KAC1CqwC,EAAIX,aAAal/B,MAAMyuG,UAAY,oBACnC5uE,EAAIX,aAAal/B,MAAM0uG,aAAe,oBAE9C,EACAt4D,WAdS,KAeTuW,eAda,EAebpY,QAAS,SAAU1U,GACf,OAAOA,EAAIy8H,2BAA2B9sK,OAAO,EAAG,EACpD,EACAu+D,YAAa,SAAUqzB,EAAU07E,EAAU3sK,EAAMrB,GAC7C,OAAOsyF,EAAW,qDACtB,EACAvzB,eAAgB,SAAUuzB,EAAU07E,EAAU3sK,EAAMrB,GAChD,OAAOsyF,IAAa46E,EAAgBvwK,UACxC,EACAskE,mBAAoB,SACpBtjB,kBAAkB,EAClBkP,YAAY,GAEpB,CAEAlxB,kBAAAA,GACI71B,KAAKo2G,UAAU52C,YAAYx/D,KAAKzE,KACpC,CAEAlG,MAAAA,GACI,OACI02G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAKl6F,GAAG,eAAc,WACtBk6F,EAAAA,cAAA,OAAK39E,IAAK4b,GAAOhqC,KAAKgqC,GAAKA,KAI3C,EAEJ,YC7lBA,MAAM6+H,WAAkC98D,EAAAA,UACpC5kG,WAAAA,CAAY/J,GACRo4G,MAAMp4G,GACN4C,KAAKkmH,aAAelmH,KAAK5C,MAAM8oH,aAC/BlmH,KAAKzE,KAAO,GACZ,IAAI4rK,EAAe,KACnBnnK,KAAK+1G,OAAS,EACd/1G,KAAKonK,gBAAkB,GAGvBD,EAAe,CACX,CACI97H,MAAO,OAAQD,MAAO,6BAA8B2O,SAAU,+BAC9DiB,eAAgB,OAAQyZ,YAAY,EACpC/Z,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,MAAyC,MAAjC7K,EAAKzoC,WAAW5M,OAAO,EAAG,GAAa,QAAU82C,SAASzB,EAAKzoC,WAAW5M,OAAO,EAAG,IAAM,IAAM82C,SAASzB,EAAKzoC,WAAW5M,OAAO,GAAI,GAChJ,EACAqmB,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,YAE/B,CACI1qE,MAAO,KAAMD,MAAO,WAAY2O,SAAU,iCAC1CiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,YAK/B,CACI1qE,MAAO,QAASD,MAAO,UAAW2O,SAAU,+BAC5CiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,YAE/B,CACI1qE,MAAO,QAASD,MAAO,aAAc2O,SAAU,qCAC/CiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,YAE/B,CACI1qE,MAAO,IAAKD,MAAO,QAAS2O,SAAU,uCACtCiB,eAAgB,OAAQyZ,YAAY,EACpCxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,aAKnC/1G,KAAKmrC,KAAO,CACR,CACIE,MAAO,GACP54B,QAAS00J,GAEb,CACI97H,MAAO,QAASD,MAAO,QAAS2O,SAAU,oBAC1C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,QAASD,MAAO,YAAa2O,SAAU,oBAC9C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAM,EAChE,GAEJ,CACIzP,MAAO,MAAOD,MAAO,eAAgB2O,SAAU,0BAC/C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,UAAWD,MAAO,gBAAiB2O,SAAU,oBACpD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAM,EAChE,GAEJ,CACIzP,MAAO,YAAaD,MAAO,cAAe2O,SAAU,oBACpD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,UAAWD,MAAO,kBAAmB2O,SAAU,0BACtD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,OAAQD,MAAO,OAAQ2O,SAAU,oBACxC+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,SAAUD,MAAO,eAAgB2O,SAAU,oBAClD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,iBAAkBD,MAAO,sBAAuB2O,SAAU,oBACjE+mD,sBAAuB,OAAQrsC,YAAY,EAC3CzZ,eAAgB,WAChB/5B,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,eAAgBD,MAAO,MAAO2O,SAAU,oBAC/C+mD,sBAAuB,OAAQrsC,YAAY,EAC3CzZ,eAAgB,WAChB/5B,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,aAAcD,MAAO,aAAc2O,SAAU,oBACpD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CzZ,eAAgB,WAChB/5B,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,YAAaD,MAAO,gBAAiB2O,SAAU,0BACtD+mD,sBAAuB,OAAQrsC,YAAY,EAC3CxzC,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,GAEJ,CACIzP,MAAO,oBAAqBD,MAAO,kBAAmB2O,SAAU,oBAChE+mD,sBAAuB,OAAQrsC,YAAY,EAC3CzZ,eAAgB,WAChB/5B,MAAM,GAAD7qB,OAAK2+G,GAAY/0G,KAAK+1G,WAC3Br7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,IAGR96C,KAAKgqC,GAAK+hE,EAAAA,YACV/rG,KAAKo2G,UAAY,IACrB,CAGAC,eAAAA,GACI,IAAI6P,EAAelmH,KAAKkmH,aACpBmhD,EAAU,EACVh1D,EAAS,EACTiE,EAAa,GACbC,EAAW,EACXC,EAAe,GACfC,EAAO,GACP6wD,EAAU,GAEVE,EAAW,EACX9wD,EAAQ,EACR+wD,EAAW,GACXC,EAA6B,GAC7BC,EAAa,GACbvhD,EAAQ,EACRC,EAAY,EACZC,EAAe,EACfC,EAAgB,EAChBC,EAAc,EACdC,EAAe,EACfC,EAAkB,EAClB/M,EAAO,EACPgN,EAAe,EACfC,EAAsB,EACtBC,EAAM,EACNC,EAAa,EACbC,EAAgB,EAChBxO,EAAkB,EAElBC,EAAU,GAEd,GAA4B,IAAxB0N,EAAa1xH,OACb,IAAK,IAAI+B,EAAE,EAAGA,EAAE2vH,EAAa1xH,OAAQ+B,IACjC8wK,EAA4C,KAAjC,KAAOnhD,EAAa3vH,GAAG87G,QAA6C,IAAzB6T,EAAa3vH,GAAG87G,OAAe6T,EAAa3vH,GAAGunB,KACrGu0F,EAAS6T,EAAa3vH,GAAG87G,OACzBiE,EAAa4P,EAAa3vH,GAAG+/G,WAC7BC,EAAW2P,EAAa3vH,GAAGggH,SAC3BC,EAAe0P,EAAa3vH,GAAGigH,aAC/BC,EAAOyP,EAAa3vH,GAAGkiH,SACvB6uD,EAAUphD,EAAa3vH,GAAGkiH,SAAS5jG,OAAS,IAAMqxG,EAAa3vH,GAAGqxK,YAAY/yJ,OAC9E6hG,EAAQ,EACR+wD,EAAWvhD,EAAa3vH,GAAGkxK,SAC3BC,EAA6BxhD,EAAa3vH,GAAG87G,OAAOx7G,WAAaqvH,EAAa3vH,GAAGkxK,SAASxyJ,UAAU,EAAG,IACvG0yJ,EAAar0D,GAAW4S,EAAa3vH,GAAGg9G,UAAW2S,EAAa3vH,GAAGsxK,cACnEL,EAAWthD,EAAa3vH,GAAGunB,KAC3BsoG,EAAQF,EAAa3vH,GAAG6vH,MACxBC,EAAYH,EAAa3vH,GAAG8vH,UAC5BC,EAAexU,GAAQoU,EAAa3vH,GAAG8vH,UAAWH,EAAa3vH,GAAG6vH,OAClEG,EAAgBL,EAAa3vH,GAAGgwH,cAChCC,EAAcN,EAAa3vH,GAAGiwH,YAC9BC,EAAeP,EAAa3vH,GAAGkwH,aAC/BC,EAAkB5U,GAAQoU,EAAa3vH,GAAGkwH,aAAcP,EAAa3vH,GAAG6vH,MAAQF,EAAa3vH,GAAGowH,cAChGhN,EAAOuM,EAAa3vH,GAAGojH,KACvBgN,EAAeT,EAAa3vH,GAAGowH,aAC/BC,EAAsBV,EAAa3vH,GAAGqwH,oBACtCC,EAAMX,EAAa3vH,GAAGswH,IACtBC,EAAaZ,EAAa3vH,GAAGuyK,WAC7B/hD,EAAgBb,EAAa3vH,GAAGwwH,cAChCxO,EAAkB2N,EAAa3vH,GAAGkjH,IAClCjB,EAAQn+G,KAAK,CACTgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACAD,QAhEE,GAiEFnhD,QACAC,YACAC,eACAC,gBACAC,cACAC,eACAC,kBACA/M,OACAgN,eACAC,sBACAC,MACAC,aACAC,gBACAxO,oBAIW,IAAnBC,EAAQhkH,SACRgkH,EAAQr/D,MAAK,CAAC75C,EAAGC,IAAMD,EAAE+nK,QAAU9nK,EAAE8nK,QAAU,GAAK,IACpDrnK,KAAK45G,QAAQpB,IAEjBx4G,KAAKzE,KAAOi9G,CAChB,CAGAoB,OAAAA,CAAQn6G,GACJ,IAAI4nK,EAAU,EACVh1D,EAAS5yG,EAAE,GAAG4yG,OACdiE,EAAa,GACbC,EAAW,GACXC,EAAe,GACfC,EAAO,GACP6wD,EAAU,GACV5wD,EAAQ,EACR+wD,EAAW,GACXC,EAA6B,GAC7BC,EAAa,GACbH,EAAW,GACXD,EAAU,GACVnhD,EAAQ,EACRC,EAAY,EACZE,EAAgB,EAChBC,EAAc,EACdC,EAAa,EACb9M,EAAO,EACPgN,EAAe,EACfC,EAAsB,EACtBC,EAAM,EACNC,EAAa,EACbC,EAAgB,EAChBT,EAAe,EACfI,EAAkB,EAClBnO,EAAkB,EAClB2vD,EAAWzoK,EAAEjL,OACjB,IAAK,IAAI+B,EAAI,EAAGA,EAAI2xK,EAAU3xK,IACtB87G,IAAW5yG,EAAElJ,GAAG87G,SAChBg1D,EAA4B,KAAjB,KAAOh1D,GAA6B,IAATA,EAAe,GACrDq1D,EAA6Br1D,EAAOx7G,WAAaw7G,EAAOx7G,WAAa,SACrEyvH,EAAexU,GAAQuU,EAAWD,GAClCM,EAAkB5U,GAAQ2U,EAAcL,EAAQO,GAChDlnH,EAAEpF,KAAK,CACHgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACAD,UACAnhD,QACAC,YACAC,eACAC,gBACAC,cACAC,eACAC,kBACA/M,OACAgN,eACAC,sBACAC,MACAC,aACAC,gBACAxO,oBAEJlG,EAAS5yG,EAAElJ,GAAG87G,OACdiE,EAAa,GACbC,EAAW,GACXC,EAAe,GACfC,EAAO,GACP6wD,EAAU,GACV5wD,EAAQ,EACR+wD,EAAW,GACXC,EAA6B,GAC7BC,EAAa,GACbH,EAAW,GACXD,EAAU,GACVnhD,EAAQ,EACRC,EAAY,EACZE,EAAgB,EAChBC,EAAc,EACdC,EAAe,EACf9M,EAAO,EACPgN,EAAe,EACfC,EAAsB,EACtBC,EAAM,EACNC,EAAa,EACbC,EAAgB,EAChBT,EAAe,EACfI,EAAkB,EAClBnO,EAAkB,GAEtB7B,EAAQzF,GAAQyF,EAAOj3G,EAAElJ,GAAGmgH,OAC5B0P,EAAQnV,GAAQmV,EAAO3mH,EAAElJ,GAAG6vH,OAC5BC,EAAYpV,GAAQoV,EAAW5mH,EAAElJ,GAAG8vH,WACpCE,EAAgBtV,GAAQsV,EAAe9mH,EAAElJ,GAAGgwH,eAC5CC,EAAcvV,GAAQuV,EAAa/mH,EAAElJ,GAAGiwH,aACxCC,EAAexV,GAAQwV,EAAchnH,EAAElJ,GAAGkwH,cAC1C9M,EAAOnI,GAAQmI,EAAMl6G,EAAElJ,GAAGojH,MAC1BgN,EAAe1V,GAAQ0V,EAAclnH,EAAElJ,GAAGowH,cAC1CC,EAAsB3V,GAAQ2V,EAAqBnnH,EAAElJ,GAAGqwH,qBACxDE,EAAa7V,GAAQ6V,EAAYrnH,EAAElJ,GAAGuwH,YACtCD,EAAM5V,GAAQ4V,EAAKpnH,EAAElJ,GAAGswH,KACxBE,EAAgB9V,GAAQ8V,EAAetnH,EAAElJ,GAAGwwH,eAC5CxO,EAAkBnH,GAAcmH,EAAiB94G,EAAElJ,GAAGgiH,iBAE1D8uD,EAA4B,KAAjB,KAAOh1D,GAA6B,IAATA,EAAe,GACrDq1D,EAA6Br1D,EAAOx7G,WAAaw7G,EAAOx7G,WAAa,SACrEyvH,EAAexU,GAAQuU,EAAWD,GAClCM,EAAkB5U,GAAQ2U,EAAcL,EAAQO,GAChDlnH,EAAEpF,KAAK,CACHgtK,UACAh1D,SACAiE,aACAC,WACAC,eACAC,OACA6wD,UACA5wD,QACA+wD,WACAC,6BACAC,aACAH,WACAD,UACAnhD,QACAC,YACAC,eACAC,gBACAC,cACAC,eACAC,kBACA/M,OACAgN,eACAC,sBACAC,MACAC,aACAC,gBACAxO,oBAEJ94G,EAAE05C,MAAK,CAAC75C,EAAGC,IAAMD,EAAE+nK,QAAU9nK,EAAE8nK,QAAU,GAAK,GAClD,CAEAp5I,iBAAAA,GACIjuB,KAAKq2G,kBACL,IAAI70D,EAAa,QACbuW,EAAiB,GACjBqvG,EAAkBpnK,KAAKzE,KAAK/G,OAASwL,KAAKzE,KAAK,GAAG82G,OAAS,EAC/D7wD,EAAa,KACbuW,EAAiB,EACjB/3D,KAAKo2G,UAAY,IAAIjkE,KAAJ,CAAcnyC,KAAKgqC,GAAI,CACpCzuC,KAAMyE,KAAKzE,KACX2mD,cAAc,EACdzvC,QAASzS,KAAKmrC,KACd0G,OAAQ,aACR6c,aAAc,SAAUzjB,GAEiC,UAD1CA,EAAIgY,UACNykH,2BAA2B9sK,OAAO,EAAG,KAC1CqwC,EAAIX,aAAal/B,MAAMyuG,UAAY,oBACnC5uE,EAAIX,aAAal/B,MAAM0uG,aAAe,oBAE9C,EACAt4D,WAdS,KAeTuW,eAda,EAebpY,QAAS,SAAU1U,GACf,OAAOA,EAAIy8H,2BAA2B9sK,OAAO,EAAG,EACpD,EACAu+D,YAAa,SAAUqzB,EAAU07E,EAAU3sK,EAAMrB,GAC7C,OAAOsyF,EAAW,qDACtB,EACAvzB,eAAgB,SAAUuzB,EAAU07E,EAAU3sK,EAAMrB,GAChD,OAAOsyF,IAAa46E,EAAgBvwK,UACxC,EACAskE,mBAAoB,SACpBtjB,kBAAkB,EAClBkP,YAAY,GAEpB,CAEAlxB,kBAAAA,GACI71B,KAAKo2G,UAAU52C,YAAYx/D,KAAKzE,KACpC,CAEAlG,MAAAA,GACI,OACI02G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAKl6F,GAAG,eAAc,WACtBk6F,EAAAA,cAAA,OAAK39E,IAAK4b,GAAOhqC,KAAKgqC,GAAKA,KAI3C,EAGJ,YChckB,IAAI6wG,GAAoB,CAACnrG,OAAQ,CAC/C6zF,mBAFqB,uCAGrB2nB,iBAAkB,KAEVgX,kBAKPpgK,OAAOmqE,QACRnqE,OAAOmqE,MAAQ+2F,IAGdtsK,MAAMjC,UAAU60C,MAEjB9zC,OAAOD,eAAemB,MAAMjC,UAAW,OAAQ,CAC7CoH,MAAO,SAASotC,GAEd,GAAY,MAARjpC,KACF,MAAM,IAAIzH,UAAU,iCAGtB,IAAI2wC,EAAI1zC,OAAOwK,MAGXmpC,EAAMD,EAAE10C,SAAW,EAGvB,GAAyB,oBAAdy0C,EACT,MAAM,IAAI1wC,UAAU,gCAUtB,IANA,IAAI6wC,EAAUx0C,UAAU,GAGpBiL,EAAI,EAGDA,EAAIspC,GAAK,CAKd,IAAIE,EAASH,EAAErpC,GACf,GAAIopC,EAAUnyC,KAAKsyC,EAASC,EAAQxpC,EAAGqpC,GACrC,OAAOG,EAGTxpC,GACF,CAIF,IAON,MAAMkpK,WAAuBv8I,EAAAA,UACzBrlB,WAAAA,CAAY/J,EAAOutB,GACf6qF,MAAMp4G,EAAOutB,GAoFjB,KACAu4I,iBAAmB,KAEfljK,KAAKmjK,uBACD,sDACCj3F,IACGlsE,KAAKrE,MAAQuwE,EAASk3F,aACtBpjK,KAAKqjK,gBAAgB,IAIxBvqI,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,GAE5C,EAGL,KACAwqI,cAAiBj4G,IAGbrrD,KAAKujK,mBADU,+EAGX,OACCr3F,IACGlsE,KAAKwjK,oBAAsBt3F,EAE3BlsE,KAAKyjK,gBAAgBzjK,KAAKwjK,oBAAoB,IAEjD1qI,IACGD,QAAQukG,IAAI,gBAAgBtkG,EAAM,GAEzC,EACJ,KAED4qI,sBAAwB,KAIpB,GAAsB,IAAlB1jK,KAAK2jK,SAAe,CACpB,IAAIriD,EAASthH,KAAKwjK,oBAAoBpwH,QAAQlxB,GACtCA,EAAEq0F,SAAS1/G,aAAemJ,KAAK2jK,SACxBzhJ,EAEJ,OAEXliB,KAAK4jK,qBAAqB,IAAI,CAACrtD,SAAU+K,EAAO,GAAG/K,SAAUka,iBAAkBnP,EAAO,GAAGmP,iBAAkBD,UAAWlP,EAAO,GAAGkP,UAAWD,SAAUjP,EAAO,GAAGiP,UACnK,MAEIvwH,KAAK4jK,qBAAqB,IAAI,CAACrtD,SAAU,KAAMka,iBAAkB,KAAMD,UAAW,UAAWD,SAAU,WAC3G,EAGJ,KACAszC,eAAiB,KACb53F,MAAM,sCAAsCvxC,MAAK,SAASwxC,GACzD,OAAOA,EAASE,MACjB,IAAG1xC,MAAK0xC,IACJpsE,KAAKwjK,oBAAsBp3F,CAAI,IAChC1uB,OAAM5lD,IACL+gC,QAAQukG,IAAI,iDAAiDtlI,EAAIwtG,QAAQ,GAC3E,EAGN,KACAw+D,gBAAmBz4G,IAEf,MAAM04G,EAAU,yFAAA3tK,OAA4F4J,KAAK2jK,UACjH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAKy1G,aAAevpC,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAKy1G,aAAa,IAE1C38E,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,GAE3C,EAGL,KACAkrI,gBAAkB,KAEd,MAAMD,EAAU,yFAAA3tK,OAA4F4J,KAAK2jK,UACjH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK01G,aAAexpC,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK01G,aAAa,IAE1C58E,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,GAE3C,EAGL,KACAmrI,iBAAmB,KACf,MAAMF,EAAU,uFAAA3tK,OAA0F4J,KAAK2jK,SAAQ,gCAAAvtK,QAAgC,IAAI6kB,MAAQ40G,eACnK7vH,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAKg8G,cAAgB9vC,EAAS3wE,KAC9ByE,KAAKyjK,gBAAgBzjK,KAAKg8G,cAAc,IAE3CljF,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,GAE5C,EAGL,KACAorI,kBAAoB,KAChB,MAAMH,EAAU,2FAAA3tK,OAA8F4J,KAAK2jK,UACnH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK4hH,eAAiB11C,EAAS3wE,KAC/ByE,KAAKyjK,gBAAgBzjK,KAAK4hH,eAAe,IAE5C9oF,IACGD,QAAQukG,IAAI,oBAAoBtkG,EAAM,GAE7C,EAGL,KACAqrI,iBAAmB,KAEf,MAAMJ,EAAU,0FAAA3tK,OAA6F4J,KAAK2jK,UAClH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK+hH,cAAgB71C,EAAS3wE,KAC9ByE,KAAKyjK,gBAAgBzjK,KAAK+hH,cAAc,IAE3CjpF,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,GAE5C,EAGL,KACAsrI,gBAAkB,KAEd,MAAML,EAAU,+FAAA3tK,OAAkG4J,KAAK2jK,UACvH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK6hH,aAAe31C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK6hH,aAAa,IAE1C/oF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,GAE3C,EAGL,KACAurI,gBAAkB,KAEd,MAAMN,EAAU,+FAAA3tK,OAAkG4J,KAAK2jK,UACvH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK8hH,aAAe51C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK8hH,aAAa,IAE1ChpF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,GAE3C,EAGL,KACAwrI,gBAAkB,KACd,MAAMP,EAAU,yFAAA3tK,OAA4F4J,KAAK2jK,UACjH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAKkmH,aAAeh6C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAKkmH,aAAa,IAE1CptF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,GAE3C,EAGL,KACAyrI,gBAAkB,KACd,MAAMR,EAAU,yFAAA3tK,OAA4F4J,KAAK2jK,UACjH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK6nH,aAAe37C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK6nH,aAAa,IAE1C/uF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,GAE3C,EAGL,KACA0rI,oBAAsB,KAClB,MAAMT,EAAU,6FAAA3tK,OAAgG4J,KAAK2jK,UACrH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAKykK,iBAAmBv4F,EAAS3wE,KACjCyE,KAAKyjK,gBAAgBzjK,KAAKykK,iBAAiB,IAE9C3rI,IACGD,QAAQukG,IAAI,sBAAsBtkG,EAAM,GAE/C,EAGL,KACA4rI,iBAAmB,KACf,MAAMX,EAAU,0FAAA3tK,OAA6F4J,KAAK2jK,UAClH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK2kK,cAAgBz4F,EAAS3wE,KAQ9ByE,KAAKyjK,gBAAgBzjK,KAAK2kK,cAAc,IAE3C7rI,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,GAE5C,EAGL,KACA8rI,oBAAsB,KAClB,MAAMb,EAAU,6FAAA3tK,OAAgG4J,KAAK2jK,UACrH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK6kK,iBAAmB34F,EAAS3wE,KACjCyE,KAAKyjK,gBAAgBzjK,KAAK6kK,iBAAiB,IAE9C/rI,IACGD,QAAQukG,IAAI,sBAAsBtkG,EAAM,GAE/C,EAGL,KACAgsI,gBAAkB,KACd,MAAMf,EAAU,yFAAA3tK,OAA4F4J,KAAK2jK,UACjH3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAKmqH,aAAej+C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAKmqH,aAAa,IAE1CrxF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,GAE3C,EAGL,KACAuqI,eAAiB,KAEb,MAAMU,EAAU,8EAAA3tK,OAAiF4J,KAAK2jK,UACtG3jK,KAAKujK,mBACDQ,EACA,OACC73F,IACGlsE,KAAK+kK,YAAc74F,EAAS3wE,KAC5ByE,KAAK4jK,sBAAsB,IAI9B9qI,IACGD,QAAQukG,IAAI,iBAAiBtkG,EAAM,GAE1C,EAGL,KACAyqI,mBAAqB,CAAC1lJ,EAAKgtD,EAAQn/C,EAAUs5I,KACzC/4F,MACIpuD,EAAK,CACLgtD,OAAQA,EACRgB,QAAS,CACLC,OAAQ,oCACJ,eAAgB,mBACpBm5F,cAAc,UAAD7uK,OAAY4J,KAAKrE,UAGrC++B,MAAMwxC,IACH,IAAIE,EAAOF,EAASE,OACpB,IAAGF,EAASC,GAOV,OAAOC,EAAK1xC,KAAK6V,QAAQE,OAAO9+B,KAAK4+B,UAN/B7kB,GACA0gD,EAAK1xC,MAAM4L,IACP5a,EAAS4a,EAAO,GAK5B,IAEHoX,OAAO5kB,IACAksI,GACAA,EAASlsI,EACb,GACF,EACL,KAEDqqI,uBAAyB,CAACtlJ,EAAK6N,EAAUs5I,KACrC,IAAI1yB,EAAU,CAAC,UAAa,sCAC5B,cAAiB,+CACjB,WAAc,qBACd,MAAS,UAEL4yB,EAAW,GACf,IAAK,IAAIrgG,KAAYytE,EAAQ,CACzB,IAAI6yB,EAAazpK,mBAAmBmpE,GAChCugG,EAAe1pK,mBAAmB42I,EAAQztE,IAC9CqgG,EAAS7qK,KAAK8qK,EAAa,IAAMC,EACrC,CACAF,EAAWA,EAASztK,KAAK,KAEzBw0E,MACIpuD,EAAK,CACDgtD,OAAQ,OACR8oD,MAAO,WACP9nD,QAAS,CAAC,eAAgB,mDAC1Bp1D,KAAMyuJ,IAEbxqI,MAAMwxC,IACH,IAAIE,EAAOF,EAASE,OACpB,IAAIF,EAASC,GAOT,OAAOC,EAAK1xC,KAAK6V,QAAQE,OAAO9+B,KAAK4+B,UANjC7kB,GACA0gD,EAAK1xC,MAAM4L,IACP5a,EAAS4a,EAAO,GAK5B,IAEHoX,OAAO5kB,IACAksI,GACAA,EAASlsI,EACb,GACF,EAaN,KACA2qI,gBAAmBhkK,IACfO,KAAKqlK,eAAiB,EACtBrlK,KAAKslK,cAAgB7lK,EAAEjL,OACnBwL,KAAKqlK,gBAAkBrlK,KAAKulK,0BAE5BvlK,KAAKwlK,yBAA0B,EAC/BxlK,KAAKqlK,cAAgB,EACrBrlK,KAAKulK,wBAA0B,EAC/BvlK,KAAKylK,iBAAmB,GACxBzlK,KAAK0lK,eAAiB,GACtB1lK,KAAKkmC,SAAS,CACVy/H,iBAAkB3lK,KAAK2jK,WAE/B,EAOJ,KACAC,qBAAwB/nK,IAEpB,IAAI+pK,EAAc5lK,KAAK+kK,YAAY/kK,KAAK+kK,YAAYvwK,OAAS,GAa7D,OAZAwL,KAAK8uH,WAAa82C,EAAYn2C,SAC9BzvH,KAAK6lK,eAAiBD,EAAYpvD,aAElCx2G,KAAKsqI,YACLtqI,KAAKylK,iBAAmB,GACxBzlK,KAAKwlK,yBAA0B,EAC/BxlK,KAAK0lK,eAAiB,cACtB1lK,KAAKqlK,cAAgB,EACrBrlK,KAAKslK,aAAe,EACpBtlK,KAAKmmC,cAGGnmC,KAAK6lK,gBACT,IAAK,KACD7lK,KAAK8lK,WAAa9lK,KAAK6lK,eACvB7lK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAK8jK,kBACL9jK,KAAKgkK,kBAEL,MACJ,IAAK,KACL,IAAK,KACL,IAAK,KACFhkK,KAAK8lK,WAAa,UACjB9lK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAK8kK,kBACL9kK,KAAKwkK,sBACLxkK,KAAK0kK,mBACL1kK,KAAK4kK,sBACL5kK,KAAK6hH,aAAe,GACpB7hH,KAAK8hH,aAAe,GACpB,MACJ,IAAK,KACL,IAAK,IACD9hH,KAAK8lK,WAAa,UAClB9lK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAK8kK,kBACL9kK,KAAKwkK,sBACLxkK,KAAK0kK,mBACL1kK,KAAK4kK,sBACL5kK,KAAKokK,kBACLpkK,KAAKqkK,kBACL,MACJ,IAAK,KACDrkK,KAAK8lK,WAAa,WAClB9lK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKmkK,mBACLnkK,KAAKgkK,kBACLhkK,KAAKkkK,oBACLlkK,KAAKokK,kBACLpkK,KAAKqkK,kBACL,MACJ,IAAK,KACL,IAAK,KACL,IAAK,KACDrkK,KAAK8lK,WAAa,WAClB9lK,KAAKulK,yBAA2B,EAChCvlK,KAAK+hH,cAAgB,GACrB/hH,KAAKsjK,gBACLtjK,KAAKmkK,mBACLnkK,KAAKgkK,kBACLhkK,KAAKkkK,oBACLlkK,KAAKokK,kBACLpkK,KAAKqkK,kBACL,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACDrkK,KAAK8lK,WAAa,KAClB9lK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKmkK,mBACLnkK,KAAKgkK,kBACL,MACJ,IAAK,IACL,IAAK,IACDhkK,KAAK8lK,WAAa9lK,KAAK6lK,eACvB7lK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKukK,kBACLvkK,KAAKskK,kBACLtkK,KAAK8jK,kBACL9jK,KAAKgkK,kBACL,MACJ,QAEInrI,QAAQukG,IAAI,2CAA4Cp9H,KAAK6lK,gBACrE,EArkBA7lK,KAAKwtB,MAAQ,CACTu4I,gBAAiB,GACjBC,iBAAkB,IAEtBhmK,KAAK+jC,QAAU,cACf/jC,KAAKwlK,yBAA0B,EAC/BxlK,KAAK0lK,eAAiB,aACtB1lK,KAAKy1G,aAAc,GACnBz1G,KAAK01G,aAAa,GAClB11G,KAAKg8G,cAAc,GACnBh8G,KAAK4hH,eAAe,GACpB5hH,KAAKmqH,aAAe,GACpBnqH,KAAK0sH,aAAc,EACnB1sH,KAAKykK,iBAAmB,GACxBzkK,KAAKusH,iBAAkB,EACvBvsH,KAAK2kK,cAAgB,GACrB3kK,KAAKwsH,cAAe,EACpBxsH,KAAK6kK,iBAAmB,GACxB7kK,KAAKysH,iBAAkB,EACvBzsH,KAAK6nH,aAAa,GAClB7nH,KAAK8hH,aAAe,GACpB9hH,KAAK0oK,aAAc,EACnB1oK,KAAKkmH,aAAa,GAClBlmH,KAAK6hH,aAAe,GACpB7hH,KAAK2oK,aAAc,EACnB3oK,KAAK+hH,cAAc,GACnB/hH,KAAK+kK,YAAY,GACjB/kK,KAAKimK,YAAY,GACjBjmK,KAAKrE,MAAQ,GACbqE,KAAKwjK,oBAAsB,GAC3BxjK,KAAKqlK,cAAgB,EACrBrlK,KAAKulK,wBAA0B,EAC/BvlK,KAAK8uH,WAAa,uBAClB9uH,KAAK6lK,eAAiB,GACtB7lK,KAAK2jK,SAAW,EAChB3jK,KAAKylK,iBAAmB,GACxBzlK,KAAK8lK,WAAa,GAClB9lK,KAAK+6F,QAAU,EACf/6F,KAAKqwH,WAAa,iBAGlBrwH,KAAKkmK,SAAWlmK,KAAKkmK,SAASv0J,KAAK3R,MAE/BA,KAAK5C,MAAMV,MAAMk+C,OAAO/oC,KAAOzN,MAAMpE,KAAK5C,MAAMV,MAAMk+C,OAAO/oC,IAC7D7R,KAAK2jK,SAAW3jK,KAAK5C,MAAMV,MAAMk+C,OAAO/oC,GAGxC7R,KAAK2jK,SAAW,IAExB,CAcA11I,iBAAAA,GAEInsB,OAAOgQ,iBAAiB,SAAU9R,KAAKmmK,aAAax0J,KAAK3R,OACzDA,KAAKkjK,kBAET,CAEAzpI,oBAAAA,GACI33B,OAAO06E,oBAAoB,SAAUx8E,KAAKmmK,aAAax0J,KAAK3R,MAChE,CAggBAsqI,SAAAA,GACIvoI,SAASo4F,OAAS,YAAcn6F,KAAK2jK,SAAW,YAChD5hK,SAASo4F,OAAS,aAAen6F,KAAK6lK,eAAiB,WAC3D,CAEAM,YAAAA,GACInmK,KAAK+6F,QAAUj5F,OAAOi5F,OAC1B,CAEAmrE,QAAAA,GACIpkK,OAAOmxC,SAAS,EAAGjzC,KAAK+6F,QAC5B,CAGA1lG,MAAAA,GAE4B,YAApB2K,KAAK8lK,YAA4B9lK,KAAKwlK,0BACtCxlK,KAAKimK,YAAc,GACnBjmK,KAAKimK,YAAcwC,GAAwBzoK,KAAKmqH,aAAcnqH,KAAKykK,iBAAkBzkK,KAAK2kK,cAAe3kK,KAAK6kK,iBAAkB7kK,KAAK8hH,aAAc9hH,KAAK6hH,cACxJ7hH,KAAKusH,iBAAkB,EACvBvsH,KAAKysH,iBAAkB,EACvBzsH,KAAKwsH,cAAe,EACpBxsH,KAAKimK,YAAYruK,SAAQy6G,IACjBA,EAAOqa,cAAe1sH,KAAK0sH,aAAc,GACzCra,EAAOka,kBAAmBvsH,KAAKusH,iBAAkB,GACjDla,EAAOoa,kBAAmBzsH,KAAKysH,iBAAkB,GACjDpa,EAAOma,eAAgBxsH,KAAKwsH,cAAe,GAC3Cna,EAAOq2D,cAAe1oK,KAAK0oK,aAAc,GACzCr2D,EAAOs2D,cAAe3oK,KAAK2oK,aAAc,EAAM,KAG3D,IAAIvC,EAAa,YAAcpmK,KAAK2jK,SAChC0C,EAAoB,mBAAqBrmK,KAAK2jK,SAC9C2C,EAAmB,iBAAmBtmK,KAAK6lK,eAE/C,OACI95D,EAAAA,cAAA,OAAK/xD,UAAU,OACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,mBACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aAAY+xD,EAAAA,cAAA,YAC3BA,EAAAA,cAAA,OAAK/xD,UAAU,YACX+xD,EAAAA,cAAA,KAAG50F,KAAK,6BACJ40F,EAAAA,cAAA,OAAKw6D,IAAI,mBAAmBC,IAAI,OAAOtlJ,OAAO,KAAKD,MAAM,UAGjE8qF,EAAAA,cAAA,OAAM/xD,UAAU,YACZ+xD,EAAAA,cAAA,OAAKl6F,GAAG,+BACJk6F,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAM7uF,MAAM,kBAAiB6uF,EAAAA,cAAA,SAAG,oBAE/B/rG,KAAKwjK,qBACLz3D,EAAAA,cAAC06D,GAAQ,CAACn2C,QAAStwH,KAAKwjK,oBAAqBnzC,WAAYrwH,KAAKqwH,aAElEtkB,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAMr0E,KAAK,KAAI,2CAG1Bq0E,EAAAA,cAAA,OAAK/xD,UAAU,aAAY+xD,EAAAA,cAAA,YAC3BA,EAAAA,cAAA,OAAK3gG,MAAO,CAACm1E,gBAAiB,MAAOjvB,UAAW,UAAYtX,UAAU,aAAY+xD,EAAAA,cAAA,KAAG50F,KAAK,6BACtF40F,EAAAA,cAAA,KAAG3gG,MAAO,CAAC8R,MAAO,UAAU,0CAGhC6uF,EAAAA,cAAA,OAAKl6F,GAAG,QAAQmoC,UAAU,aAAY,eACtC+xD,EAAAA,cAAA,MAAI/xD,UAAU,yBAAyBnoC,GAAG,QAAQ60J,KAAK,WACnD36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAMivJ,GAAY,YAE9Cr6D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,kBAAkB7iC,KAAMkvJ,GAAmB,cAE5Dt6D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAMmvJ,GAAkB,iBAEpDv6D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAtC7B,cAsCiD,cAGpD40F,EAAAA,cAAA,OAAK3gG,MAAO,CAAC22C,MAAO,WAGxBgqD,EAAAA,cAAA,OAAK/xD,UAAU,YAAYxiB,QAASx3B,KAAKkmK,UACrCn6D,EAAAA,cAAA,UAAI,KAEA/rG,KAAKwlK,yBACDz5D,EAAAA,cAAC46D,GAAS,CAACprK,KAAMyE,KAAK+kK,eAGzB/kK,KAAKwlK,yBACNz5D,EAAAA,cAAA,KAAG/xD,UAAU,uCAIO,OAApBh6C,KAAK8lK,YAAuB9lK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAAsBtlK,KAAKslK,eAAiBtlK,KAAKg8G,cAAcxnH,QAChIu3G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACm7D,GAAyB,CAACzxD,aAAcz1G,KAAKy1G,aAAcC,aAAc11G,KAAK01G,gBAI/D,OAApB11G,KAAK8lK,YAAuB9lK,KAAKwlK,yBAA2BxlK,KAAK+hH,cAAcvtH,QAC/Eu3G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACo8D,GAAyB,CAACpmD,cAAe/hH,KAAK+hH,iBAI/B,aAApB/hH,KAAK8lK,YAA6B9lK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cACvEv5D,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACu8D,GAA+B,CAAC5yD,aAAc11G,KAAK01G,aAAckM,eAAgB5hH,KAAK4hH,eAAgBC,aAAc7hH,KAAK6hH,aAAcC,aAAc9hH,KAAK8hH,aAAcC,cAAe/hH,KAAK+hH,iBAI7K,MAApB/hH,KAAK8lK,YAAsB9lK,KAAKwlK,yBAAwD,IAA7BxlK,KAAK6nH,aAAarzH,QAC7Eu3G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAC68D,GAAyB,CAAC/gD,aAAc7nH,KAAK6nH,gBAI9B,MAApB7nH,KAAK8lK,YAAsB9lK,KAAKwlK,yBAAwD,IAA7BxlK,KAAKkmH,aAAa1xH,QAC7Eu3G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAC88D,GAAyB,CAAC3iD,aAAclmH,KAAKkmH,gBAI9B,YAApBlmH,KAAK8lK,YAA4B9lK,KAAKwlK,yBAAuD,IAA5BxlK,KAAKimK,YAAYzxK,SAAiBwL,KAAK0sH,aAAe1sH,KAAKusH,iBAAmBvsH,KAAKysH,iBAAmBzsH,KAAKwsH,cAAgBxsH,KAAK2oK,aAAe3oK,KAAK0oK,cACrN38D,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAACy8D,GAA8B,CAACr+C,aAAcnqH,KAAKimK,YAAatwD,gBAAgB,KAIhE,OAApB31G,KAAK8lK,YAA2C,OAApB9lK,KAAK8lK,YAA2C,aAApB9lK,KAAK8lK,YAAiD,YAApB9lK,KAAK8lK,YAAgD,MAApB9lK,KAAK8lK,YAA0C,MAApB9lK,KAAK8lK,YAAsB9lK,KAAKwlK,yBACtLz5D,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,WACIA,EAAAA,cAAA,WACAA,EAAAA,cAAA,WACAA,EAAAA,cAAA,UAAI,8DAMpBA,EAAAA,cAAA,WACAA,EAAAA,cAAA,WACAA,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAMr0E,KAAK,KAAI,MAAI13B,KAAK+jC,WAI3C,EAGJ,YCrtBA,SA9EA,SAAmBtkC,GACf,MAAOupK,EAAaC,IAAkBj1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQ+iH,cAClDE,EAAWC,IAAgBn1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQijH,YAC9CE,EAASC,IAAcr1I,EAAAA,EAAAA,UAAS,WAEvC,IAAIs1I,EAAc,GACdC,EAAY,GAChB,IAAI,IAAIhzK,GAAI,IAAI0kB,MAAO40G,cAAet5H,GAAK,KAAMA,IACzCA,EAAEM,aAAe4I,EAAEwmD,QAAQ+iH,YAC3BM,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGxD+yK,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAEpCA,EAAEM,aAAe4I,EAAEwmD,QAAQijH,UAC3BK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGtDgzK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAI1C,OACIw1G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,iBAAiBnoC,GAAG,kBAC/Bk6F,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,SAAOsJ,QAAQ,aAAar7D,UAAU,8BAA6B,aACnE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,aAAasd,GAAG,aAAaiqE,SAAWzwB,GAAU49G,EAAe59G,EAAMrzD,OAAO6D,QACxIytK,GAELv9D,EAAAA,cAAA,SAAOsJ,QAAQ,WAAWr7D,UAAU,8BAA6B,2BACjE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,WAAWsd,GAAG,WAAWiqE,SAAWzwB,GAAU89G,EAAa99G,EAAMrzD,OAAO6D,QAClI0tK,GAELx9D,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,UAAQ13G,KAAK,SAAS2lD,UAAU,kBAAkBxiB,QAAU/gC,GAAMgJ,EAAE61G,SAAS7+G,EAAGuyK,EAAaE,IAAY,WAG7Gn9D,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAI/xD,UAAU,eAAenoC,GAAG,sBAAsB60J,KAAK,WACvD36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,kBAAkBnoC,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,OAAOlvI,QAASA,IAAM6xI,EAAW,YAAY,YAEpLt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,iBAAiB,cAAY,MAAMsF,KAAK,cAAcuvJ,KAAK,MAAM,gBAAc,aAAa,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,eAAe,iBAE1Lt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,mBAAmB,cAAY,MAAMsF,KAAK,gBAAgBuvJ,KAAK,MAAM,gBAAc,eAAe,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,iBAAiB,gBAElMt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,YAAY,cAKtLt9D,EAAAA,cAAA,OAAKv0E,QAAU/gC,GAAMgJ,EAAEymK,YAEH,YAAZkD,GACAr9D,EAAAA,cAACwJ,GAAuB,CAACE,aAAch2G,EAAEg2G,aAAcC,aAAcj2G,EAAEi2G,aAAcC,gBAAgB,IAGzF,eAAZyzD,GACAr9D,EAAAA,cAACiO,GAA+B,CAACvE,aAAch2G,EAAEg2G,aAAcE,gBAAgB,IAGnE,iBAAZyzD,GACAr9D,EAAAA,cAACgQ,GAA+B,CAACC,cAAev8G,EAAEu8G,cAAerG,gBAAgB,IAGrE,YAAZyzD,GACAr9D,EAAAA,cAACyU,GAA+B,CAAC9K,aAAcj2G,EAAEi2G,aAAcC,gBAAgB,KAKnG,ECJA,GAxEwBl2G,IACpB,MAAOupK,EAAaC,IAAkBj1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQ+iH,cAClDE,EAAWC,IAAgBn1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQijH,YAC9CE,EAASC,IAAcr1I,EAAAA,EAAAA,UAAS,WAEvC,IAAIs1I,EAAc,GACdC,EAAY,GAChB,IAAI,IAAIhzK,GAAI,IAAI0kB,MAAO40G,cAAet5H,GAAK,KAAMA,IACzCA,EAAEM,aAAe4I,EAAEwmD,QAAQ+iH,YAC3BM,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGxD+yK,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAEpCA,EAAEM,aAAe4I,EAAEwmD,QAAQijH,UAC3BK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGtDgzK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAI1C,OACIw1G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,iBAAiBnoC,GAAG,kBAC/Bk6F,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,SAAOsJ,QAAQ,aAAar7D,UAAU,8BAA6B,aACnE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,aAAasd,GAAG,aAAaiqE,SAAWzwB,GAAU49G,EAAe59G,EAAMrzD,OAAO6D,QACxIytK,GAELv9D,EAAAA,cAAA,SAAOsJ,QAAQ,WAAWr7D,UAAU,8BAA6B,2BACjE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,WAAWsd,GAAG,WAAWiqE,SAAWzwB,GAAU89G,EAAa99G,EAAMrzD,OAAO6D,QAClI0tK,GAELx9D,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,UAAQ13G,KAAK,SAAS2lD,UAAU,kBAAkBxiB,QAAU/gC,GAAMgJ,EAAE61G,SAAS7+G,EAAGuyK,EAAaE,IAAY,WAG7Gn9D,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAI/xD,UAAU,eAAenoC,GAAG,sBAAsB60J,KAAK,WACvD36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,kBAAkBnoC,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,OAAOlvI,QAASA,IAAM6xI,EAAW,YAAY,YAEpLt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,iBAAiB,cAAY,MAAMsF,KAAK,cAAcuvJ,KAAK,MAAM,gBAAc,aAAa,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,eAAe,iBAE1Lt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,eAAe,cAAY,MAAMsF,KAAK,YAAYuvJ,KAAK,MAAM,gBAAc,WAAW,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,aAAa,gBAK1Lt9D,EAAAA,cAAA,OAAKv0E,QAAU/gC,GAAMgJ,EAAEymK,YAEH,YAAZkD,GACAr9D,EAAAA,cAACme,GAA4B,CAACC,aAAc1qH,EAAE0qH,aAAcxU,gBAAgB,IAIhE,eAAZyzD,GACAr9D,EAAAA,cAAC66D,GAAoC,CAACz8C,aAAc1qH,EAAE0qH,aAAcxU,gBAAgB,IAIxE,aAAZyzD,GACAr9D,EAAAA,cAAC86D,GAA6B,CAAC18C,aAAc1qH,EAAE0qH,aAAcxU,gBAAgB,KAGxE,ECEzB,GAtEqBl2G,IACjB,MAAOupK,EAAaC,IAAkBj1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQ+iH,cAClDE,EAAWC,IAAgBn1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQijH,YAC9CE,EAASC,IAAcr1I,EAAAA,EAAAA,UAAS,WAEvC,IAAIs1I,EAAc,GACdC,EAAY,GAChB,IAAI,IAAIhzK,GAAI,IAAI0kB,MAAO40G,cAAet5H,GAAK,KAAMA,IACzCA,EAAEM,aAAe4I,EAAEwmD,QAAQ+iH,YAC3BM,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGxD+yK,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAEpCA,EAAEM,aAAe4I,EAAEwmD,QAAQijH,UAC3BK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGtDgzK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAI1C,OACIw1G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,iBAAiBnoC,GAAG,kBAC/Bk6F,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,SAAOsJ,QAAQ,aAAar7D,UAAU,8BAA6B,UACnE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,aAAasd,GAAG,aAAaiqE,SAAWzwB,GAAU49G,EAAe59G,EAAMrzD,OAAO6D,QACxIytK,GAELv9D,EAAAA,cAAA,SAAOsJ,QAAQ,WAAWr7D,UAAU,8BAA6B,gCACjE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,WAAWsd,GAAG,WAAWiqE,SAAWzwB,GAAU89G,EAAa99G,EAAMrzD,OAAO6D,QAClI0tK,GAELx9D,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,UAAQ13G,KAAK,SAAS2lD,UAAU,kBAAkBxiB,QAAU/gC,GAAMgJ,EAAE61G,SAAS7+G,EAAGuyK,EAAaE,IAAY,WAG7Gn9D,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAIy9D,MAAM,eAAe33J,GAAG,sBAAsB60J,KAAK,WACnD36D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,kBAAkB33J,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,OAAOlvI,QAASA,IAAM6xI,EAAW,YAAY,YAEhLt9D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,WAAW33J,GAAG,iBAAiB,cAAY,MAAMsF,KAAK,cAAcuvJ,KAAK,MAAM,gBAAc,aAAa,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,eAAe,iBAEtLt9D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,WAAW33J,GAAG,mBAAmB,cAAY,MAAMsF,KAAK,gBAAgBuvJ,KAAK,MAAM,gBAAc,eAAe,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,iBAAiB,qBAKtMt9D,EAAAA,cAAA,OAAKv0E,QAAU/gC,GAAMgJ,EAAEymK,YAEH,YAAZkD,GACAr9D,EAAAA,cAAC4V,GAAyB,CAACjM,aAAcj2G,EAAEi2G,aAAckM,eAAgBniH,EAAEmiH,eAAgBC,aAAcpiH,EAAEoiH,aAAcC,aAAcriH,EAAEqiH,aAAcC,cAAetiH,EAAEsiH,cAAepM,gBAAgB,IAG3L,eAAZyzD,GACAr9D,EAAAA,cAACyX,GAAiC,CAAC9N,aAAcj2G,EAAEi2G,aAAcC,gBAAgB,IAGrE,iBAAZyzD,GACAr9D,EAAAA,cAAC+6D,GAAmC,CAACllD,eAAgBniH,EAAEmiH,eAAgBjM,gBAAgB,KAGlF,EChEzB,MAAM8zD,WAAkC19D,EAAAA,UACpC5kG,WAAAA,CAAY/J,GACRo4G,MAAMp4G,GACN4C,KAAK01G,aAAe11G,KAAK5C,MAAMs4G,aAC/B11G,KAAK4hH,eAAiB5hH,KAAK5C,MAAMwkH,eACjC5hH,KAAK6hH,aAAe7hH,KAAK5C,MAAMykH,aAC/B7hH,KAAK8hH,aAAe9hH,KAAK5C,MAAM0kH,aAC/B9hH,KAAK+hH,cAAgB/hH,KAAK5C,MAAM2kH,cAChC/hH,KAAK21G,eAAiB31G,KAAK5C,MAAMu4G,eACjC31G,KAAKm1G,UAAY,EACjBn1G,KAAKzE,KAAO,GACZ,IAAIq6G,EAAU,KACVC,GAAW,EACf71G,KAAK81G,SAAW,KAChB91G,KAAK+1G,OAAS/1G,KAAK21G,eAAiB,EAAI,EAExC31G,KAAKs1G,SAAWt1G,KAAKs1G,SAAS3jG,KAAK3R,MAGnC,IAAIg2G,EAAWA,CAAC12G,EAAGC,EAAGuiG,EAAMC,EAAM91D,EAAQ6T,EAAK8gD,KAC3C,IAAIqV,EAAQnU,EAAK7+C,UACbizD,EAAQnU,EAAK9+C,UACjB,GAAqB,UAAjBgzD,EAAM5D,OAAmB,CACzB,GAAY,SAARvyD,EACA,OAAQ,EAEP,GAAY,QAARA,EACL,OAAO,CAEf,KACK,IAAqB,UAAjBo2D,EAAM7D,OASX,OAAO/yG,EAAEC,EART,GAAY,SAARugD,EACA,OAAO,EAEN,GAAY,QAARA,EACL,OAAQ,CAKhB,GAKA9/C,KAAK21G,gBACLE,GAAW,EACXD,EAAU,CACN,CACIvqE,MAAO,SAAUD,MAAO,SAAU2O,SAAU,+BAC5C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/Dj7D,UAAW,OAAQ0rC,gBAAiB,CAChCW,WAAY,SACZD,UAAW,YACXE,SAAU,aAGlB,CACI37C,MAAO,MAAOD,MAAO,eAAgB2O,SAAU,oCAC/C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,KAEnE,CACItqE,MAAO,OAAQD,MAAO,SAAU2O,SAAU,+BAC1C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,KAEnE,CACItqE,MAAO,OAAQD,MAAO,OAAQ2O,SAAU,+BACxC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,KAEnE,CACItqE,MAAO,IAAKD,MAAO,WAAY2O,SAAU,iCACzC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,KAEnE,CACItqE,MAAO,KAAMD,MAAO,kBAAmB2O,SAAU,uCACjD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,MAGvE31G,KAAKm2G,WAAa,KAClBn2G,KAAK81G,SAAW,CACZ,CAAE7pE,OAAQ,kBAAmB6T,IAAK,WAKtC81D,EAAU,CACN,CACIvqE,MAAO,OAAQD,MAAO,SAAU2O,SAAU,+BAC1C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/DlhD,WAAYohD,EAAU3qE,OAAQ8qE,GAElC,CACI3qE,MAAO,OAAQD,MAAO,OAAQ2O,SAAU,+BACxC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/DlhD,WAAYohD,EAAU3qE,OAAQ8qE,GAElC,CACI3qE,MAAO,IAAKD,MAAO,WAAY2O,SAAU,iCACzC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/DlhD,WAAYohD,EAAU3qE,OAAQ8qE,GAElC,CACI3qE,MAAO,KAAMD,MAAO,kBAAmB2O,SAAU,uCACjD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/DlhD,WAAYohD,EAAU3qE,OAAQ8qE,IAGtCh2G,KAAK81G,SAAW,CACZ,CAAE7pE,OAAQ,SAAU6T,IAAK,SAIjC9/C,KAAKmrC,KAAO,CACR,CACIE,MAAO,GACP54B,QAASmjG,GAEb,CACIvqE,MAAO,UACP54B,QAAS,CACL,CACI44B,MAAO,MAAOD,MAAO,eAAgB2O,SAAU,iCAC/C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,MAAOD,MAAO,UAAW2O,SAAU,oBAC1C+mD,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7D/0F,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/Dj7D,UAAW,QAAS0rC,gBAAiB,CACjCQ,SAAU,IACVzX,UAAW,IAGnB,CACI9jC,MAAO,MAAOD,MAAO,oBAAqB2O,SAAU,oBACpD+mD,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7D/0F,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/Dj7D,UAAW,QAAS0rC,gBAAiB,CACjCjX,UAAW,IAGnB,CACI9jC,MAAO,KAAMD,MAAO,WAAY2O,SAAU,iCAC1C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,KAAMD,MAAO,SAAU2O,SAAU,iCACxC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,MAAOD,MAAO,iBAAkB2O,SAAU,0BACjD+mD,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7D/0F,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/Dj7D,UAAW,QAAS0rC,gBAAiB,CACjCjX,UAAW,MAK3B,CACI9jC,MAAO,YACP54B,QAAS,CACL,CACI44B,MAAO,MAAOD,MAAO,WAAY2O,SAAU,iCAC3C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,MAAOD,MAAO,SAAU2O,SAAU,oBACzC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7Dt7D,UAAW,QAAS0rC,gBAAiB,CACjCQ,SAAU,IACVzX,UAAW,IAGnB,CACI9jC,MAAO,MAAOD,MAAO,eAAgB2O,SAAU,oBAC/C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7Dt7D,UAAW,QAAS0rC,gBAAiB,CACjCjX,UAAW,IAGnB,CACI9jC,MAAO,KAAMD,MAAO,UAAW2O,SAAU,iCACzC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,KAAMD,MAAO,QAAS2O,SAAU,iCACvC94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,MAAOD,MAAO,gBAAiB2O,SAAU,0BAChD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7Dt7D,UAAW,QAAS0rC,gBAAiB,CACjCjX,UAAW,MAK3B,CACI9jC,MAAO,eACP54B,QAAS,CACL,CACI44B,MAAO,MAAOD,MAAO,iBAAkB2O,SAAU,iCACjD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,MAAOD,MAAO,cAAe2O,SAAU,oBAC9C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7Dt7D,UAAW,QAAS0rC,gBAAiB,CACjCQ,SAAU,IACVzX,UAAW,IAGnB,CACI9jC,MAAO,MAAOD,MAAO,kBAAmB2O,SAAU,oBAClD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7Dt7D,UAAW,QAAS0rC,gBAAiB,CACjCjX,UAAW,IAGnB,CACI9jC,MAAO,KAAMD,MAAO,WAAY2O,SAAU,uCAC1C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,KAIzE,CACI3qE,MAAO,kBACP54B,QAAS,CACL,CACI44B,MAAO,MAAOD,MAAO,kBAAmB2O,SAAU,iCAClD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,MAAOD,MAAO,eAAgB2O,SAAU,oBAC/C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7Dt7D,UAAW,QAAS0rC,gBAAiB,CACjCQ,SAAU,IACVzX,UAAW,IAGnB,CACI9jC,MAAO,MAAOD,MAAO,mBAAoB2O,SAAU,oBACnD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7Dt7D,UAAW,QAAS0rC,gBAAiB,CACjCjX,UAAW,IAGnB,CACI9jC,MAAO,KAAMD,MAAO,YAAa2O,SAAU,uCAC3C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,KAIzE,CACI3qE,MAAO,UACP54B,QAAS,CACL,CACI44B,MAAO,MAAOD,MAAO,aAAc2O,SAAU,iCAC7C94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,GAEjE,CACI3qE,MAAO,OAAQD,MAAO,iBAAkB2O,SAAU,uCAClD94B,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/D7U,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,KAIzE,CACI3qE,MAAO,4BAA6BD,MAAO,kBAAmB2O,SAAU,oBACxE+mD,sBAAuB,OAAQrsC,WAAYohD,EAAU3qE,OAAQ8qE,EAC7D/0F,MAAM,GAAD7qB,OAAKy9G,GAAY7zG,KAAK+1G,UAAU/1G,KAAK21G,eAAiB,EAAI,IAC/Dj7D,UAAW,SAAUzK,EAAMm2C,EAAiBtrC,GACxC,OAAOo4D,GAASjjE,EAAMm2C,EAAiBtrC,EAAY,GAAG,GAAO,EACjE,IAIR96C,KAAKgqC,GAAK+hE,EAAAA,YACV/rG,KAAKo2G,UAAY,IAErB,CAGAC,eAAAA,GAEI,IAAIX,EAAe11G,KAAK01G,aACpBkM,EAAiB5hH,KAAK4hH,eACtBC,EAAe7hH,KAAK6hH,aACpBC,EAAe9hH,KAAK8hH,aACpBC,EAAgB/hH,KAAK+hH,cACrB1P,EAAS,EACTiP,EAAS,GACT/K,EAAW,EACXC,EAAe,GACfC,EAAO,GACPuL,EAAW,EACXC,EAAkB,EAClBlK,EAAe,EACfC,EAAU,EACVC,EAAoB,EACpBC,EAAW,EACXC,EAAS,EACT+J,EAAiB,EACjBC,EAAW,EACXC,EAAS,EACTC,EAAe,EACfC,EAAU,EACVC,EAAQ,EACRC,EAAgB,EAChBC,EAAiB,EACjBC,EAAc,EACdC,EAAkB,EAClBC,EAAW,EACXC,EAAkB,EAClBC,EAAe,EACfC,EAAmB,EACnBC,EAAY,EACZ5K,EAAa,EACbC,EAAiB,EACjBE,EAAkB,EAEtB,IAAIC,EAAU,GACVjiH,EAAI,EACR,GAA6B,IAAzBqrH,EAAeptH,OACf,IAAK+B,EAAE,EAAGA,EAAEqrH,EAAeptH,OAAQ+B,MAC1ByJ,KAAK21G,gBAAkBiM,EAAerrH,GAAG2sH,MAAQljH,KAAKm1G,aACvD9C,EAASuP,EAAerrH,GAAG87G,OAC3BiP,EAASM,EAAerrH,GAAG+qH,OAC3B/K,EAAWqL,EAAerrH,GAAGggH,SAC7BC,EAAeoL,EAAerrH,GAAG45C,SACjCsmE,EAAOmL,EAAerrH,GAAGkgH,KACzBuL,EACIJ,EAAerrH,GAAGmiH,OAASkJ,EAAerrH,GAAGoJ,EACzCiiH,EAAerrH,GAAGmiH,OAClBkJ,EAAerrH,GAAGoJ,EAC1BsiH,EAAkBL,EAAerrH,GAAGmiH,OACpCX,EAAe,EACfC,EAAU,EACVC,EAAoB,EACpBC,EAAW,EACXC,EAAS,EACT+J,EAAiB,EACjBC,EAAWP,EAAerrH,GAAG2sH,KAC7Bd,EAASR,EAAerrH,GAAGm8G,MAC3B2P,EAAeT,EAAerrH,GAAG4sH,YACjCX,EAAgBZ,EAAerrH,GAAG0sH,UAClCX,EAAUV,EAAerrH,GAAGojH,KAC5B4I,EAAQX,EAAerrH,GAAGigB,GAC1BisG,EAAiB,EACjBC,EAAc,EACdC,EAAkB,EAClBC,EAAW,EACXC,EAAkB,EAClBC,EAAe,EACfC,EAAmB,EACnBC,EAAY,EACZ5K,EAAawJ,EAAerrH,GAAG+iH,QAC/BjB,EAAiBuJ,EAAerrH,GAAGgjH,YACnChB,EAAkBnG,GAAQwP,EAAerrH,GAAG87G,OAAOuP,EAAerrH,GAAGkjH,KAGrEjB,EAAQn+G,KAAK,CACTg4G,SACAiP,SACA/K,WACAC,eACAC,OACAuL,WACAC,kBACAlK,eACAC,UACAC,oBACAC,WACAC,SACA+J,iBACAC,WACAC,SACAC,eACAC,UACAC,QACAC,gBACAC,iBACAC,cACAC,kBACAC,WACAC,kBACAC,eACAC,mBACAC,YACA5K,aACAC,iBACAE,qBAKhB,IAAIv8G,GAAK,EACT,GAA2B,IAAvB05G,EAAalhH,OACb,IAAK+B,EAAE,EAAGA,EAAEm/G,EAAalhH,OAAQ+B,IAAK,CAClC,IAAKyF,EAAIw8G,EAAQhkH,OAAS,EAAGwH,GAAK,IAC1Bw8G,EAAQx8G,GAAGq2G,SAAWqD,EAAan/G,GAAG87G,QAAUmG,EAAQx8G,GAAGy6G,OAASf,EAAan/G,GAAGkgH,MAAQ+B,EAAQx8G,GAAGu6G,WAAab,EAAan/G,GAAGggH,UADvGv6G,KAKjCA,GAAK,GACLw8G,EAAQx8G,GAAG+7G,aAAerC,EAAan/G,GAAGmjH,IAC1ClB,EAAQx8G,GAAGg8G,QAAUtC,EAAan/G,GAAGm8G,MACrC8F,EAAQx8G,GAAGi8G,kBAAoBvC,EAAan/G,GAAGs8G,YAC/C2F,EAAQx8G,GAAGk8G,SAAWxC,EAAan/G,GAAGojH,KACtCnB,EAAQx8G,GAAGm8G,OAASzC,EAAan/G,GAAGigB,GACpCgiG,EAAQx8G,GAAGkmH,eAAiBxM,EAAan/G,GAAG0sH,UAC5CzK,EAAQx8G,GAAGo8G,WAAanH,GAAQuH,EAAQx8G,GAAGo8G,WAAW1C,EAAan/G,GAAG+iH,SACtEd,EAAQx8G,GAAGq8G,eAAiBpH,GAAQuH,EAAQx8G,GAAGq8G,eAAe3C,EAAan/G,GAAGgjH,aAC9Ef,EAAQx8G,GAAGu8G,gBAAkBnH,GAAcoH,EAAQx8G,GAAGu8G,gBAAgBnG,GAAQsD,EAAan/G,GAAG87G,OAAOqD,EAAan/G,GAAGkjH,OAI/Gz5G,KAAK21G,iBACXtD,EAASqD,EAAan/G,GAAG87G,OACzBoE,EAAOf,EAAan/G,GAAGkgH,KACvB6K,EAAS5L,EAAan/G,GAAG+qH,OACzB/K,EAAWb,EAAan/G,GAAGggH,SAC3BC,EAAed,EAAan/G,GAAGigH,aAC/BwL,EAAWtM,EAAan/G,GAAGmiH,OAAShD,EAAan/G,GAAGoJ,EAChD+1G,EAAan/G,GAAGmiH,OAChBhD,EAAan/G,GAAGoJ,EACAsiH,EAAkBvM,EAAan/G,GAAGmiH,OACtDX,EAAerC,EAAan/G,GAAGmjH,IAC/B1B,EAAUtC,EAAan/G,GAAGm8G,MAC1BuF,EAAoBvC,EAAan/G,GAAGs8G,YACpCqF,EAAWxC,EAAan/G,GAAGojH,KAC3BxB,EAASzC,EAAan/G,GAAGigB,GACzB0rG,EAAiBxM,EAAan/G,GAAG0sH,UACjCd,EAAW,EACXC,EAAS,EACTC,EAAe,EACfC,EAAU,EACVC,EAAQ,EACRC,EAAgB,EAChBC,EAAiB,EACjBC,EAAc,EACdC,EAAkB,EAClBC,EAAW,EACXC,EAAkB,EAClBC,EAAe,EACfC,EAAmB,EACnBC,EAAY,EACZ5K,EAAa1C,EAAan/G,GAAG+iH,QAC7BjB,EAAiB3C,EAAan/G,GAAGgjH,YACjChB,EAAkBnG,GAAQsD,EAAan/G,GAAG87G,OAAOqD,EAAan/G,GAAGkjH,KAGjEjB,EAAQn+G,KAAK,CACTg4G,SACAiP,SACA/K,WACAC,eACAC,OACAuL,WACAC,kBACAlK,eACAC,UACAC,oBACAC,WACAC,SACA+J,iBACAC,WACAC,SACAC,eACAC,UACAC,QACAC,gBACAC,iBACAC,cACAC,kBACAC,WACAC,kBACAC,eACAC,mBACAC,YACA5K,aACAC,iBACAE,oBAGZ,CAEJ,GAA2B,IAAvBsJ,EAAartH,OACb,IAAK+B,EAAE,EAAGA,EAAEsrH,EAAartH,OAAQ+B,IAAK,CAClC,IAAKyF,EAAIw8G,EAAQhkH,OAAS,EAAGwH,GAAK,IAC1Bw8G,EAAQx8G,GAAGq2G,SAAWwP,EAAatrH,GAAG87G,QAAUmG,EAAQx8G,GAAGy6G,OAASoL,EAAatrH,GAAGkiH,UAAYD,EAAQx8G,GAAGu6G,WAAasL,EAAatrH,GAAGggH,UAD3Gv6G,KAKjCA,GAAK,GACLw8G,EAAQx8G,GAAGymH,eAAiBZ,EAAatrH,GAAGi8G,SAC5CgG,EAAQx8G,GAAG0mH,YAAcb,EAAatrH,GAAGm8G,MACzC8F,EAAQx8G,GAAG2mH,gBAAkBd,EAAatrH,GAAGi8G,SAAWqP,EAAatrH,GAAGm8G,MAAMmP,EAAatrH,GAAGi8G,SAAW,EACzGgG,EAAQx8G,GAAG4mH,SAAWf,EAAatrH,GAAG6sH,IACtC5K,EAAQx8G,GAAGqnH,OAASpS,GAAQuH,EAAQx8G,GAAGqnH,OAAOxB,EAAatrH,GAAG6sH,KAC9D5K,EAAQx8G,GAAGo8G,WAAanH,GAAQuH,EAAQx8G,GAAGo8G,WAAWyJ,EAAatrH,GAAG+iH,SACtEd,EAAQx8G,GAAGq8G,eAAiBpH,GAAQuH,EAAQx8G,GAAGq8G,eAAewJ,EAAatrH,GAAGgjH,cAEvEv5G,KAAK21G,iBACZtD,EAASwP,EAAatrH,GAAG87G,OACzBiP,EAASO,EAAatrH,GAAG+qH,OACzB/K,EAAWsL,EAAatrH,GAAGggH,SAC3BE,EAAOoL,EAAatrH,GAAGkiH,SACvBuJ,EAAWH,EAAatrH,GAAGmgH,MAC3BuL,EAAkB,EAClBlK,EAAe,EACfC,EAAU,EACVC,EAAoB,EACpBC,EAAW,EACXC,EAAS,EACT+J,EAAiB,EACjBC,EAAW,EACXC,EAAS,EACTC,EAAe,EACfC,EAAU,EACVC,EAAQ,EACRC,EAAgB,EAChBC,EAAiBZ,EAAatrH,GAAGi8G,SACjCkQ,EAAcb,EAAatrH,GAAGm8G,MAC9BiQ,EAAkB7Q,GAAQ+P,EAAatrH,GAAGm8G,MAAMmP,EAAatrH,GAAGi8G,UAChEoQ,EAAWf,EAAatrH,GAAG6sH,IAC3BP,EAAkB,EAClBC,EAAe,EACfC,EAAmB,EACnBC,EAAY,EACZ5K,EAAayJ,EAAatrH,GAAG+iH,QAC7BjB,EAAiBwJ,EAAatrH,GAAGgjH,YAEjCf,EAAQn+G,KAAK,CACTg4G,SACAiP,SACA/K,WACAE,OACAuL,WACAC,kBACAlK,eACAC,UACAC,oBACAC,WACAC,SACA+J,iBACAC,WACAC,SACAC,eACAC,UACAC,QACAC,gBACAC,iBACAC,cACAC,kBACAC,WACAC,kBACAC,eACAC,mBACAC,YACA5K,aACAC,iBACAE,oBAGZ,CAEJ,GAA2B,IAAvBuJ,EAAattH,OACb,IAAK+B,EAAE,EAAGA,EAAEurH,EAAattH,OAAQ+B,IAAK,CAClC,IAAKyF,EAAIw8G,EAAQhkH,OAAS,EAAGwH,GAAK,IAC1Bw8G,EAAQx8G,GAAGq2G,SAAWyP,EAAavrH,GAAG87G,QAAUmG,EAAQx8G,GAAGy6G,OAASqL,EAAavrH,GAAGkiH,UAAYD,EAAQx8G,GAAGu6G,WAAauL,EAAavrH,GAAGggH,UAD3Gv6G,KAKjCA,GAAK,GACLw8G,EAAQx8G,GAAG6mH,gBAAkBf,EAAavrH,GAAGi8G,SAC7CgG,EAAQx8G,GAAG8mH,aAAehB,EAAavrH,GAAGm8G,MAC1C8F,EAAQx8G,GAAG+mH,iBAAmBjR,GAAQgQ,EAAavrH,GAAGm8G,MAAOoP,EAAavrH,GAAGi8G,UAC7EgG,EAAQx8G,GAAGgnH,UAAYlB,EAAavrH,GAAG6sH,IACvC5K,EAAQx8G,GAAGqnH,OAASpS,GAAQuH,EAAQx8G,GAAGqnH,OAAOvB,EAAavrH,GAAG6sH,KAC9D5K,EAAQx8G,GAAGo8G,WAAanH,GAAQuH,EAAQx8G,GAAGo8G,WAAW0J,EAAavrH,GAAG+iH,SACtEd,EAAQx8G,GAAGq8G,eAAiBpH,GAAQuH,EAAQx8G,GAAGq8G,eAAeyJ,EAAavrH,GAAGgjH,cAEvEv5G,KAAK21G,iBACZtD,EAASyP,EAAavrH,GAAG87G,OACzBiP,EAASQ,EAAavrH,GAAG+qH,OACzB/K,EAAWuL,EAAavrH,GAAGggH,SAC3BE,EAAOqL,EAAavrH,GAAGkiH,SACvBuJ,EAAWF,EAAavrH,GAAGmgH,MAC3BuL,EAAkB,EAClBlK,EAAe,EACfC,EAAU,EACVC,EAAoB,EACpBC,EAAW,EACXC,EAAS,EACT+J,EAAiB,EACjBC,EAAW,EACXC,EAAS,EACTC,EAAe,EACfC,EAAU,EACVC,EAAQ,EACRC,EAAgB,EAChBC,EAAiB,EACjBC,EAAc,EACdC,EAAkB,EAClBC,EAAW,EACXC,EAAkBf,EAAavrH,GAAGi8G,SAClCsQ,EAAehB,EAAavrH,GAAGm8G,MAC/BqQ,EAAmBjR,GAAQgR,EAAcD,GACzCG,EAAYlB,EAAavrH,GAAG6sH,IAC5BhL,EAAa0J,EAAavrH,GAAG+iH,QAC7BjB,EAAiByJ,EAAavrH,GAAGgjH,YAEjCf,EAAQn+G,KAAK,CACTg4G,SACAiP,SACA/K,WACAE,OACAuL,WACAC,kBACAlK,eACAC,UACAC,oBACAC,WACAC,SACA+J,iBACAC,WACAC,SACAC,eACAC,UACAC,QACAC,gBACAC,iBACAC,cACAC,kBACAC,WACAC,kBACAC,eACAC,mBACAC,YACA5K,aACAC,iBACAE,oBAGZ,CAEJ,GAA4B,IAAxBwJ,EAAcvtH,OACd,IAAK+B,EAAE,EAAGA,EAAEwrH,EAAcvtH,OAAQ+B,IAAK,CACnC,IAAKyF,EAAIw8G,EAAQhkH,OAAS,EAAGwH,GAAK,IAC1Bw8G,EAAQx8G,GAAGq2G,SAAW0P,EAAcxrH,GAAG87G,QAAUmG,EAAQx8G,GAAGy6G,OAASsL,EAAcxrH,GAAGkgH,MAAQ+B,EAAQx8G,GAAGu6G,WAAawL,EAAcxrH,GAAGggH,UAD1Gv6G,KAKjCA,GAAK,GAELw8G,EAAQx8G,GAAGu8G,gBACPnH,GAAcoH,EAAQx8G,GAAGu8G,gBAAiBnG,GAAQ2P,EAAcxrH,GAAG87G,OAAQ0P,EAAcxrH,GAAG+sH,eAChG9K,EAAQx8G,GAAGu8G,gBACPnH,GAAcoH,EAAQx8G,GAAGu8G,gBAAiBnG,GAAQ2P,EAAcxrH,GAAG87G,OAAQ0P,EAAcxrH,GAAGgtH,eAKzFvjH,KAAK21G,iBACZtD,EAAS0P,EAAcxrH,GAAG87G,OAC1BiP,EAASS,EAAcxrH,GAAG+qH,OAC1B/K,EAAWwL,EAAcxrH,GAAGggH,SAC5BE,EAAOsL,EAAcxrH,GAAGkgH,KACxBuL,EAAWD,EAAcxrH,GAAGmiH,OAASqJ,EAAcxrH,GAAGmgH,MAClDqL,EAAcxrH,GAAGmiH,OACjBqJ,EAAcxrH,GAAGmgH,MACrBuL,EAAkBF,EAAcxrH,GAAGmiH,OACnCX,EAAe,EACfC,EAAU,EACVC,EAAoB,EACpBC,EAAW,EACXC,EAAS,EACT+J,EAAiB,EACjBC,EAAW,EACXC,EAAS,EACTC,EAAe,EACfC,EAAU,EACVC,EAAQ,EACRC,EAAgB,EAChBC,EAAiB,EACjBC,EAAc,EACdC,EAAkB,EAClBC,EAAW,EACXC,EAAkB,EAClBC,EAAe,EACfC,EAAmB,EACnBC,EAAY,EACZ5K,EAAa,EACbC,EAAiB,EACjBE,EACInH,GACIgB,GAAQ2P,EAAcxrH,GAAG87G,OAAQ0P,EAAcxrH,GAAG+sH,cAClDlR,GAAQ2P,EAAcxrH,GAAG87G,OAAQ0P,EAAcxrH,GAAGgtH,cAM1D/K,EAAQn+G,KAAK,CACTg4G,SACAiP,SACA/K,WACAE,OACAuL,WACAC,kBACAlK,eACAC,UACAC,oBACAC,WACAC,SACA+J,iBACAC,WACAC,SACAC,eACAC,UACAC,QACAC,gBACAC,iBACAC,cACAC,kBACAC,WACAC,kBACAC,eACAC,mBACAC,YACA5K,aACAC,iBACAE,oBAGZ,CAEJv4G,KAAKzE,KAAOi9G,CAChB,CAGAoB,OAAAA,GACI,IAEIoI,EAAW,EACXC,EAAkB,EAClBlK,EAAe,EACfC,EAAU,EACVC,EAAoB,EACpBC,EAAW,EACXC,EAAS,EACT+J,EAAiB,EACjBC,EAAW,EACXC,EAAS,EACTC,EAAe,EACfC,EAAU,EACVC,EAAQ,EACRC,EAAgB,EAChBC,EAAiB,EACjBC,EAAc,EACdC,EAAkB,EAClBC,EAAW,EACXC,EAAkB,EAClBC,EAAe,EACfC,EAAmB,EACnBC,EAAY,EACZ5K,EAAa,EACbC,EAAiB,EACjBE,EAAkB,EACtB,GAAyB,IAArBv4G,KAAKzE,KAAK/G,OAAa,CACvB,IAAK,IAAI+B,EAAI,EAAGA,EAAIyJ,KAAKzE,KAAK/G,OAAQ+B,IAClCyrH,EAAW/Q,GAAQ+Q,EAAShiH,KAAKzE,KAAKhF,GAAGyrH,UACzCC,EAAkBhR,GAAQgR,EAAgBjiH,KAAKzE,KAAKhF,GAAG0rH,iBACvDlK,EAAe9G,GAAQ8G,EAAa/3G,KAAKzE,KAAKhF,GAAGwhH,cACjDG,EAAW1G,GAAQ0G,EAASl4G,KAAKzE,KAAKhF,GAAG2hH,UACzCC,EAASlH,GAAQkH,EAAOn4G,KAAKzE,KAAKhF,GAAG4hH,QACrCH,EAAU/G,GAAQ+G,EAAQh4G,KAAKzE,KAAKhF,GAAGyhH,SACvCmK,EAAWlR,GAAQkR,EAASniH,KAAKzE,KAAKhF,GAAG4rH,UACzCC,EAASnR,GAAQmR,EAAOpiH,KAAKzE,KAAKhF,GAAG6rH,QACrCE,EAAU9Q,GAAQ8Q,EAAQtiH,KAAKzE,KAAKhF,GAAG+rH,SACvCC,EAAQtR,GAAQsR,EAAMviH,KAAKzE,KAAKhF,GAAGgsH,OACnCE,EAAiBxR,GAAQwR,EAAeziH,KAAKzE,KAAKhF,GAAGksH,gBACrDC,EAAczR,GAAQyR,EAAY1iH,KAAKzE,KAAKhF,GAAGmsH,aAC/CE,EAAW3R,GAAQ2R,EAAS5iH,KAAKzE,KAAKhF,GAAGqsH,UACzCC,EAAkB5R,GAAQ4R,EAAgB7iH,KAAKzE,KAAKhF,GAAGssH,iBACvDC,EAAe7R,GAAQ6R,EAAc9iH,KAAKzE,KAAKhF,GAAGusH,cAClDE,EAAY/R,GAAQ+R,EAAWhjH,KAAKzE,KAAKhF,GAAGysH,WAC5C5K,EAAanH,GAAQmH,EAAWp4G,KAAKzE,KAAKhF,GAAG6hH,YAC7CC,EAAiBpH,GAAQoH,EAAer4G,KAAKzE,KAAKhF,GAAG8hH,gBACrDE,EAAkBnH,GAAcmH,EAAgBnG,GAAQpyG,KAAKzE,KAAKhF,GAAG87G,OAAOryG,KAAKzE,KAAKhF,GAAGgiH,kBAE7FN,EAAoBnG,GAAQkG,EAAQD,GACpCmK,EAAiBpQ,GAAQkG,EAAQgK,GACjCK,EAAevQ,GAAQsQ,EAAOD,GAC9BK,EAAgB1Q,GAAQsQ,EAAOJ,GAC/Be,EAAmBjR,GAAQgR,EAAaD,GACxCF,EAAkB7Q,GAAQ4Q,EAAYD,GACtCziH,KAAKzE,KAAKlB,KAAK,CACXg4G,OAxDK,QAyDLoE,KAxDG,GAyDHuL,WACAC,kBACAlK,eACAC,UACAC,oBACAC,WACAC,SACA+J,iBACAC,WACAC,SACAC,eACAC,UACAC,QACAC,gBACAC,iBACAC,cACAC,kBACAC,WACAC,kBACAC,eACAC,mBACAC,YACA5K,aACAC,iBACAE,mBAER,CACJ,CAEAtqF,iBAAAA,GACIjuB,KAAKq2G,kBACL,IAAI70D,EAAa,QACbuW,EAAiB,GAChB/3D,KAAK21G,iBACN31G,KAAK45G,UACLp4D,EAAa,KACbuW,EAAiB,GAErB/3D,KAAKo2G,UAAY,IAAIjkE,KAAJ,CAAcnyC,KAAKgqC,GAAI,CACpCzuC,KAAMyE,KAAKzE,KACX2mD,cAAc,EACdzvC,QAASzS,KAAKmrC,KACd0G,OAAQ,aACR6c,aAAa,SAASzjB,GAEE,UADTA,EAAIgY,UACNovD,SACLpnE,EAAIX,aAAal/B,MAAMyuG,UAAY,oBACnC5uE,EAAIX,aAAal/B,MAAM0uG,aAAe,oBAE9C,EACAt4D,WAAYA,EACZuW,eAAgBA,EAChB3D,YAAap0D,KAAK81G,SAClBj+D,kBAAkB,EAClBkP,YAAY,GAEpB,CAEAlxB,kBAAAA,GACI71B,KAAKo2G,UAAU52C,YAAYx/D,KAAKzE,KACpC,CAEA+5G,QAAAA,CAAS7+G,EAAG0+G,GACRn1G,KAAKm1G,UAAYA,EACjBn1G,KAAKq2G,kBACLr2G,KAAKmmC,aACT,CAEA9wC,MAAAA,GACI,OACI02G,EAAAA,cAACA,EAAAA,SAAc,KAEP/rG,KAAK21G,gBACL5J,EAAAA,cAAA,OAAK/xD,UAAU,YAAYnoC,GAAG,cAC1Bk6F,EAAAA,cAACgO,GAAO,CAAC5E,UAAWn1G,KAAKm1G,UAAWG,SAAUt1G,KAAKs1G,SAAU/3B,MAAO,eACpEwuB,EAAAA,cAAA,OAAK39E,IAAK4b,GAAOhqC,KAAKgqC,GAAKA,MAI9BhqC,KAAK21G,gBACN5J,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAKl6F,GAAG,eAAc,WACtBk6F,EAAAA,cAAA,OAAK39E,IAAK4b,GAAOhqC,KAAKgqC,GAAKA,KAK/C,EAgBJ,YCt0BA,GArFmBvqC,IACf,MAAOupK,EAAaC,IAAkBj1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQ+iH,cAClDE,EAAWC,IAAgBn1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQijH,YAC9CE,EAASC,IAAcr1I,EAAAA,EAAAA,UAAS,WAEvC,IAAIs1I,EAAc,GACdC,EAAY,GAChB,IAAI,IAAIhzK,GAAI,IAAI0kB,MAAO40G,cAAet5H,GAAK,KAAMA,IACzCA,EAAEM,aAAe4I,EAAEwmD,QAAQ+iH,YAC3BM,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGxD+yK,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAEpCA,EAAEM,aAAe4I,EAAEwmD,QAAQijH,UAC3BK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGtDgzK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAI1C,OACIw1G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,iBAAiBnoC,GAAG,kBAC/Bk6F,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,SAAOsJ,QAAQ,aAAar7D,UAAU,8BAA6B,UACnE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,aAAasd,GAAG,aAAaiqE,SAAWzwB,GAAU49G,EAAe59G,EAAMrzD,OAAO6D,QACxIytK,GAELv9D,EAAAA,cAAA,SAAOsJ,QAAQ,WAAWr7D,UAAU,8BAA6B,gCACjE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,WAAWsd,GAAG,WAAWiqE,SAAWzwB,GAAU89G,EAAa99G,EAAMrzD,OAAO6D,QAClI0tK,GAELx9D,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,UAAQ13G,KAAK,SAAS2lD,UAAU,kBAAkBxiB,QAAU/gC,GAAMgJ,EAAE61G,SAAS7+G,EAAGuyK,EAAaE,IAAY,WAI7Gn9D,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAIy9D,MAAM,eAAe33J,GAAG,sBAAsB60J,KAAK,WACnD36D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,kBAAkB33J,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,OAAOlvI,QAASA,IAAM6xI,EAAW,YAAY,YAEhLt9D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,WAAW33J,GAAG,mBAAmB,cAAY,MAAMsF,KAAK,gBAAgBuvJ,KAAK,MAAM,gBAAc,eAAe,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,iBAAiB,mBAE9Lt9D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,WAAW33J,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,eAAe,iBAE7Kt9D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,WAAW33J,GAAG,gBAAgB,cAAY,MAAMsF,KAAK,aAAauvJ,KAAK,MAAM,gBAAc,YAAY,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,iBAAiB,kBAErLt9D,EAAAA,cAAA,MAAIy9D,MAAM,YACNz9D,EAAAA,cAAA,KAAGy9D,MAAM,WAAW33J,GAAG,gBAAgB,cAAY,MAAMsF,KAAK,aAAauvJ,KAAK,MAAM,gBAAc,YAAY,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,iBAAiB,mBAK7Lt9D,EAAAA,cAAA,OAAKv0E,QAAU/gC,GAAMgJ,EAAEymK,YAEH,YAAZkD,GACAr9D,EAAAA,cAAC09D,GAAyB,CAAC/zD,aAAcj2G,EAAEi2G,aAAckM,eAAgBniH,EAAEmiH,eAAgBC,aAAcpiH,EAAEoiH,aAAcC,aAAcriH,EAAEqiH,aAAcC,cAAetiH,EAAEsiH,cAAepM,gBAAgB,IAG3L,iBAAZyzD,GACAr9D,EAAAA,cAAC+6D,GAAmC,CAACllD,eAAgBniH,EAAEmiH,eAAgBjM,gBAAgB,IAG3E,eAAZyzD,GACAr9D,EAAAA,cAACyX,GAAiC,CAAC9N,aAAcj2G,EAAEi2G,aAAcC,gBAAgB,IAGrE,iBAAZyzD,GACAr9D,EAAAA,cAACg7D,GAA4B,CAAChlD,cAAetiH,EAAEsiH,cAAepM,gBAAgB,IAGlE,iBAAZyzD,GACAr9D,EAAAA,cAACi7D,GAA4B,CAACjlD,cAAetiH,EAAEsiH,cAAepM,gBAAgB,KAGzE,ECXzB,GAxEmBl2G,IACf,MAAOupK,EAAaC,IAAkBj1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQ+iH,cAClDE,EAAWC,IAAgBn1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQijH,YAC9CE,EAASC,IAAcr1I,EAAAA,EAAAA,UAAS,WAEvC,IAAIs1I,EAAc,GACdC,EAAY,GAChB,IAAI,IAAIhzK,GAAI,IAAI0kB,MAAO40G,cAAet5H,GAAK,KAAMA,IACzCA,EAAEM,aAAe4I,EAAEwmD,QAAQ+iH,YAC3BM,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGxD+yK,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAEpCA,EAAEM,aAAe4I,EAAEwmD,QAAQijH,UAC3BK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGtDgzK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAI1C,OACIw1G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,iBAAiBnoC,GAAG,kBAC/Bk6F,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,SAAOsJ,QAAQ,aAAar7D,UAAU,8BAA6B,aACnE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,aAAasd,GAAG,aAAaiqE,SAAWzwB,GAAU49G,EAAe59G,EAAMrzD,OAAO6D,QACxIytK,GAELv9D,EAAAA,cAAA,SAAOsJ,QAAQ,WAAWr7D,UAAU,8BAA6B,2BACjE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,WAAWsd,GAAG,WAAWiqE,SAAWzwB,GAAU89G,EAAa99G,EAAMrzD,OAAO6D,QAClI0tK,GAELx9D,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,UAAQ13G,KAAK,SAAS2lD,UAAU,kBAAkBxiB,QAAU/gC,GAAMgJ,EAAE61G,SAAS7+G,EAAGuyK,EAAaE,IAAY,WAG7Gn9D,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAI/xD,UAAU,eAAenoC,GAAG,sBAAsB60J,KAAK,WACvD36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAGy9D,MAAM,kBAAkB33J,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,OAAOlvI,QAASA,IAAM6xI,EAAW,YAAY,YAEhLt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,gBAAgB,cAAY,MAAMsF,KAAK,aAAauvJ,KAAK,MAAM,gBAAc,YAAY,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,iBAAiB,kBAEzLt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,gBAAgB,cAAY,MAAMsF,KAAK,aAAauvJ,KAAK,MAAM,gBAAc,YAAY,gBAAc,QAAQlvI,QAASA,IAAM6xI,EAAW,iBAAiB,mBAKjMt9D,EAAAA,cAAA,OAAKv0E,QAAU/gC,GAAMgJ,EAAEymK,YAEH,YAAZkD,GACAr9D,EAAAA,cAACk7D,GAAuB,CAACllD,cAAetiH,EAAEsiH,cAAepM,gBAAgB,IAI7D,iBAAZyzD,GACAr9D,EAAAA,cAACg7D,GAA4B,CAAChlD,cAAetiH,EAAEsiH,cAAepM,gBAAgB,IAIlE,iBAAZyzD,GACAr9D,EAAAA,cAACi7D,GAA4B,CAACjlD,cAAetiH,EAAEsiH,cAAepM,gBAAgB,KAGzE,ECdzB,GAxDwBl2G,IACpB,MAAOupK,EAAaC,IAAkBj1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQ+iH,cAClDE,EAAWC,IAAgBn1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQijH,YAC9CE,EAASC,IAAcr1I,EAAAA,EAAAA,UAAS,WAEvC,IAAIs1I,EAAc,GACdC,EAAY,GAChB,IAAI,IAAIhzK,GAAI,IAAI0kB,MAAO40G,cAAet5H,GAAK,KAAMA,IACzCA,EAAEM,aAAe4I,EAAEwmD,QAAQ+iH,YAC3BM,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGxD+yK,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAEpCA,EAAEM,aAAe4I,EAAEwmD,QAAQijH,UAC3BK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGtDgzK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAI1C,OACIw1G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,iBAAiBnoC,GAAG,kBAC/Bk6F,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,SAAOsJ,QAAQ,aAAar7D,UAAU,8BAA6B,UACnE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,aAAasd,GAAG,aAAaiqE,SAAWzwB,GAAU49G,EAAe59G,EAAMrzD,OAAO6D,QACxIytK,GAELv9D,EAAAA,cAAA,SAAOsJ,QAAQ,WAAWr7D,UAAU,8BAA6B,gCACjE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,WAAWsd,GAAG,WAAWiqE,SAAWzwB,GAAU89G,EAAa99G,EAAMrzD,OAAO6D,QAClI0tK,GAELx9D,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,UAAQ13G,KAAK,SAAS2lD,UAAU,kBAAkBxiB,QAAU/gC,GAAMgJ,EAAE61G,SAAS7+G,EAAGuyK,EAAaE,IAAY,WAG7Gn9D,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAI/xD,UAAU,eAAenoC,GAAG,sBAAsB60J,KAAK,WACvD36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,kBAAkBnoC,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,OAAQlvI,QAASA,IAAM6xI,EAAW,YAAY,cAK7Lt9D,EAAAA,cAAA,OAAKv0E,QAAU/gC,GAAMgJ,EAAEymK,YAEH,YAAZkD,GACAr9D,EAAAA,cAAC6b,GAAuB,CAACC,aAAcpoH,EAAEooH,aAAck9C,YAAatlK,EAAEslK,YAAapvD,gBAAgB,KAG9F,ECazB,GAhEwBl2G,IACpB,MAAOupK,EAAaC,IAAkBj1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQ+iH,cAClDE,EAAWC,IAAgBn1I,EAAAA,EAAAA,UAASv0B,EAAEwmD,QAAQijH,YAC9CE,EAASC,IAAcr1I,EAAAA,EAAAA,UAAS,WAEvC,IAAIs1I,EAAc,GACdC,EAAY,GAChB,IAAI,IAAIhzK,GAAI,IAAI0kB,MAAO40G,cAAet5H,GAAK,KAAMA,IACzCA,EAAEM,aAAe4I,EAAEwmD,QAAQ+iH,YAC3BM,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGxD+yK,EAAYjvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAEpCA,EAAEM,aAAe4I,EAAEwmD,QAAQijH,UAC3BK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,EAAG0S,SAAS,YAAY1S,IAGtDgzK,EAAUlvK,KAAK0xG,EAAAA,cAAA,UAAQlwG,MAAOtF,GAAIA,IAI1C,OACIw1G,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAK/xD,UAAU,iBAAiBnoC,GAAG,kBAC/Bk6F,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,SAAOsJ,QAAQ,aAAar7D,UAAU,8BAA6B,UACnE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,aAAasd,GAAG,aAAaiqE,SAAWzwB,GAAU49G,EAAe59G,EAAMrzD,OAAO6D,QACxIytK,GAELv9D,EAAAA,cAAA,SAAOsJ,QAAQ,WAAWr7D,UAAU,8BAA6B,gCACjE+xD,EAAAA,cAAA,UAAQ/xD,UAAU,wCAAwCzlD,KAAK,WAAWsd,GAAG,WAAWiqE,SAAWzwB,GAAU89G,EAAa99G,EAAMrzD,OAAO6D,QAClI0tK,GAELx9D,EAAAA,cAAA,OAAK/xD,UAAU,aACf+xD,EAAAA,cAAA,UAAQ13G,KAAK,SAAS2lD,UAAU,kBAAkBxiB,QAAU/gC,GAAMgJ,EAAE61G,SAAS7+G,EAAGuyK,EAAaE,IAAY,WAG7Gn9D,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAI/xD,UAAU,eAAenoC,GAAG,sBAAsB60J,KAAK,WACvD36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,kBAAkBnoC,GAAG,cAAc,cAAY,MAAMsF,KAAK,WAAWuvJ,KAAK,MAAM,gBAAc,UAAU,gBAAc,OAAQlvI,QAASA,IAAM6xI,EAAW,YAAY,YAErLt9D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAWnoC,GAAG,iBAAiB,cAAY,MAAMsF,KAAK,cAAcuvJ,KAAK,MAAM,gBAAc,aAAa,gBAAc,QAASlvI,QAASA,IAAM6xI,EAAW,eAAe,mBAKnMt9D,EAAAA,cAAA,OAAKv0E,QAAU/gC,GAAMgJ,EAAEymK,YAEH,YAAZkD,GACAr9D,EAAAA,cAACka,GAAuB,CAACC,aAAczmH,EAAEymH,aAAcC,WAAY1mH,EAAE0mH,WAAYxQ,gBAAgB,IAGrF,eAAZyzD,GACAr9D,EAAAA,cAACib,GAA+B,CAACd,aAAczmH,EAAEymH,aAAczQ,aAAch2G,EAAEg2G,aAAcC,aAAcj2G,EAAEi2G,aACzGyQ,WAAY1mH,EAAE0mH,WAAYxQ,gBAAgB,KAGzC,ECpDzB,MAAM+zD,WAAqBl9I,EAAAA,UACvBrlB,WAAAA,CAAY/J,EAAOutB,GACf,MAAMg/I,EAAc,IAAI1uJ,KAClB2uJ,EAAeD,EAAY/5C,WAC3Bi6C,EAAcF,EAAY95C,cA4ChC,GA1CAra,MAAMp4G,EAAOutB,GAuHjB,KACAu4I,iBAAmB,KACfljK,KAAKmjK,uBACD,sDACCj3F,IACGlsE,KAAKrE,MAAQuwE,EAASk3F,aACtBpjK,KAAK8pK,eAAe9pK,KAAK+pK,SAAU,KAAK,IAE3CjxI,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,GAE5C,EAGL,KACAwqI,cAAiBj4G,IAEbrrD,KAAKujK,mBADU,+EAGX,OACCr3F,IACGlsE,KAAKwjK,oBAAsBt3F,EAC3BlsE,KAAKyjK,gBAAgBzjK,KAAKwjK,oBAAoB,IAEjD1qI,IACGD,QAAQukG,IAAI,gBAAgBtkG,EAAM,GAEzC,EACJ,KAEDkxI,cAAgB,CAACC,EAAK1uK,IACXA,EAAK63C,QAAO3zC,GAAKwqK,EAAIhpK,QAAQxB,EAAE82G,WAAa,IAGvD,KACAutD,gBAAmBmG,IAEfjqK,KAAKujK,mBADW,yEAGZ,OACCr3F,IACGlsE,KAAKy1G,aAAevpC,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAKy1G,aAAa,IAE1C38E,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,IAExC,EACH,EAGL,KACAkrI,gBAAmBiG,IAEfjqK,KAAKujK,mBADW,yEAGZ,OACCr3F,IACGlsE,KAAK01G,aAAexpC,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK01G,aAAa,IAE1C58E,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,IAExC,EACH,EAGL,KACAmrI,iBAAoBgG,IAEhBjqK,KAAKujK,mBADW,uEAGZ,OACCr3F,IACGlsE,KAAKg8G,cAAgB9vC,EAAS3wE,KAC9ByE,KAAKyjK,gBAAgBzjK,KAAKg8G,cAAc,IAE3CljF,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,IAEzC,EACH,EAGL,KACAorI,kBAAqB+F,IAEjBjqK,KAAKujK,mBADW,2EAGZ,OACCr3F,IACGlsE,KAAK4hH,eAAiB11C,EAAS3wE,KAC/ByE,KAAKyjK,gBAAgBzjK,KAAK4hH,eAAe,IAE5C9oF,IACGD,QAAQukG,IAAI,oBAAoBtkG,EAAM,IAE1C,EACH,EAGL,KACAqrI,iBAAoB8F,IAEhBjqK,KAAKujK,mBADW,0EAGZ,OACCr3F,IACGlsE,KAAK+hH,cAAgB71C,EAAS3wE,KAC9ByE,KAAKyjK,gBAAgBzjK,KAAK+hH,cAAc,IAE3CjpF,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,IAEzC,EACH,EAGL,KACAsrI,gBAAmB6F,IAEfjqK,KAAKujK,mBADW,yEAGZ,OACCr3F,IACGlsE,KAAK6hH,aAAe31C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK6hH,aAAa,IAE1C/oF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,IAExC,EACH,EAGL,KACAurI,gBAAmB4F,IAEfjqK,KAAKujK,mBADW,yEAGZ,OACCr3F,IACGlsE,KAAK8hH,aAAe51C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK8hH,aAAa,IAE1ChpF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,IAExC,EACH,EAGL,KACAwrI,gBAAmB2F,IAEfjqK,KAAKujK,mBADW,yEAGZ,OACCr3F,IACGlsE,KAAKkmH,aAAeh6C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAKkmH,aAAa,IAE1CptF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,IAExC,EACH,EAGL,KACAyrI,gBAAmB0F,IAEfjqK,KAAKujK,mBADW,yEAGZ,OACCr3F,IACGlsE,KAAK6nH,aAAe37C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAK6nH,aAAa,IAE1C/uF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,IAExC,EACH,EAGL,KACA0rI,oBAAuByF,IAEnBjqK,KAAKujK,mBADW,6EAGZ,OACCr3F,IACGlsE,KAAKykK,iBAAmBv4F,EAAS3wE,KACjCyE,KAAKyjK,gBAAgBzjK,KAAKykK,iBAAiB,IAE9C3rI,IACGD,QAAQukG,IAAI,sBAAsBtkG,EAAM,IAE5C,EACH,EAGL,KACA4rI,iBAAoBuF,IAEhBjqK,KAAKujK,mBADW,0EAGZ,OACCr3F,IACGlsE,KAAK2kK,cAAgBz4F,EAAS3wE,KAC9ByE,KAAKyjK,gBAAgBzjK,KAAK2kK,cAAc,IAE3C7rI,IACGD,QAAQukG,IAAI,mBAAmBtkG,EAAM,IAEzC,EACH,EAGL,KACA8rI,oBAAuBqF,IAEnBjqK,KAAKujK,mBADW,6EAGZ,OACCr3F,IACGlsE,KAAK6kK,iBAAmB34F,EAAS3wE,KACjCyE,KAAKyjK,gBAAgBzjK,KAAK6kK,iBAAiB,IAE9C/rI,IACGD,QAAQukG,IAAI,sBAAsBtkG,EAAM,IAE5C,EACH,EAGL,KACAgsI,gBAAmBmF,IAEfjqK,KAAKujK,mBADW,yEAGZ,OACCr3F,IACGlsE,KAAKmqH,aAAej+C,EAAS3wE,KAC7ByE,KAAKyjK,gBAAgBzjK,KAAKmqH,aAAa,IAE1CrxF,IACGD,QAAQukG,IAAI,kBAAkBtkG,EAAM,IAExC,EACH,EAGL,KACAuqI,eAAkB4G,IAEdjqK,KAAKujK,mBADW,+EAGZ,OACCr3F,IACGlsE,KAAK+kK,YAAc74F,EAAS3wE,KAC5ByE,KAAKyjK,iBAAiB,IAEzB3qI,IACGD,QAAQukG,IAAI,iBAAiBtkG,EAAM,GAE1C,EAGL,KACAyqI,mBAAqB,CAAC1lJ,EAAKgtD,EAAQn/C,EAAUs5I,EAAUkF,KAC/CA,IACArsJ,GAAO,gBAAkB7d,KAAKozC,OAAO41H,YAAc,cAAgBhpK,KAAKozC,OAAO81H,WAEnFj9F,MACIpuD,EAAK,CACLgtD,OAAQA,EACRgB,QAAS,CACLC,OAAQ,oCACJ,eAAgB,mBACpBm5F,cAAc,UAAD7uK,OAAY4J,KAAKrE,UAGrC++B,MAAMwxC,IACH,IAAIE,EAAOF,EAASE,OACpB,IAAGF,EAASC,GAOV,OAAOC,EAAK1xC,KAAK6V,QAAQE,OAAO9+B,KAAK4+B,UAN/B7kB,GACA0gD,EAAK1xC,MAAM4L,IACP5a,EAAS4a,EAAO,GAK5B,IAEHoX,OAAO5kB,IACAksI,GACAA,EAASlsI,EACb,GACF,EACL,KAEDqqI,uBAAyB,CAACtlJ,EAAK6N,EAAUs5I,KACrC,IAAI1yB,EAAU,CAAC,UAAa,sCAC5B,cAAiB,+CACjB,WAAc,qBACd,MAAS,UAEL4yB,EAAW,GACf,IAAK,IAAIrgG,KAAYytE,EAAQ,CACzB,IAAI6yB,EAAazpK,mBAAmBmpE,GAChCugG,EAAe1pK,mBAAmB42I,EAAQztE,IAC9CqgG,EAAS7qK,KAAK8qK,EAAa,IAAMC,EACrC,CACAF,EAAWA,EAASztK,KAAK,KAEzBw0E,MACIpuD,EAAK,CACDgtD,OAAQ,OACR8oD,MAAO,WACP9nD,QAAS,CAAC,eAAgB,mDAC1Bp1D,KAAMyuJ,IAEbxqI,MAAMwxC,IACH,IAAIE,EAAOF,EAASE,OACpB,IAAIF,EAASC,GAOT,OAAOC,EAAK1xC,KAAK6V,QAAQE,OAAO9+B,KAAK4+B,UANjC7kB,GACA0gD,EAAK1xC,MAAM4L,IACP5a,EAAS4a,EAAO,GAK5B,IAEHoX,OAAO5kB,IACAksI,GACAA,EAASlsI,EACb,GACF,EAaN,KACA2qI,gBAAmBhkK,IAGf,GAFAO,KAAKqlK,eAAiB,EACtBrlK,KAAKslK,cAAgB7lK,EAAEjL,OACnBwL,KAAKqlK,gBAAkBrlK,KAAKulK,wBAAyB,CACrD,IAAI4E,EAAkB,GACtB,OAAQnqK,KAAK+pK,UACT,IAAK,KACDI,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GAChB,OAAvBA,EAAEuuG,iBACKvuG,EAAEq0F,SAEN,OAEXv2G,KAAKy1G,aAAez1G,KAAKgqK,cAAcG,EAAiBnqK,KAAKy1G,cAC7Dz1G,KAAK01G,aAAe11G,KAAKgqK,cAAcG,EAAiBnqK,KAAK01G,cAC7D11G,KAAKg8G,cAAgBh8G,KAAKgqK,cAAcG,EAAiBnqK,KAAKg8G,eAC9D,MACJ,IAAK,QACDmuD,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GACvC,CAAC,KAAM,MAAMjhB,QAAQihB,EAAEuuG,mBAAqB,EACrCvuG,EAAEq0F,SAEN,OAEXv2G,KAAKykK,iBAAmBzkK,KAAKgqK,cAAcG,EAAiBnqK,KAAKykK,kBACjEzkK,KAAK2kK,cAAgB3kK,KAAKgqK,cAAcG,EAAiBnqK,KAAK2kK,eAC9D3kK,KAAK6kK,iBAAmB7kK,KAAKgqK,cAAcG,EAAiBnqK,KAAK6kK,kBACjE7kK,KAAKmqH,aAAenqH,KAAKgqK,cAAcG,EAAiBnqK,KAAKmqH,cAC7D,MACJ,IAAK,KACDggD,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GAChB,OAAvBA,EAAEuuG,iBACKvuG,EAAEq0F,SAEN,OAEXv2G,KAAKykK,iBAAmBzkK,KAAKgqK,cAAcG,EAAiBnqK,KAAKykK,kBACjEzkK,KAAK2kK,cAAgB3kK,KAAKgqK,cAAcG,EAAiBnqK,KAAK2kK,eAC9D3kK,KAAK6kK,iBAAmB7kK,KAAKgqK,cAAcG,EAAiBnqK,KAAK6kK,kBACjE7kK,KAAKmqH,aAAenqH,KAAKgqK,cAAcG,EAAiBnqK,KAAKmqH,cAC7D,MACJ,IAAK,OACDggD,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GACvC,CAAC,KAAM,KAAKjhB,QAAQihB,EAAEuuG,mBAAqB,EACpCvuG,EAAEq0F,SAEN,OAEXv2G,KAAKykK,iBAAmBzkK,KAAKgqK,cAAcG,EAAiBnqK,KAAKykK,kBACjEzkK,KAAK2kK,cAAgB3kK,KAAKgqK,cAAcG,EAAiBnqK,KAAK2kK,eAC9D3kK,KAAK6kK,iBAAmB7kK,KAAKgqK,cAAcG,EAAiBnqK,KAAK6kK,kBACjE7kK,KAAKmqH,aAAenqH,KAAKgqK,cAAcG,EAAiBnqK,KAAKmqH,cAC7DnqH,KAAK6hH,aAAe7hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK6hH,cAC7D7hH,KAAK8hH,aAAe9hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK8hH,cAC7D,MACJ,IAAK,QACDqoD,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GACvC,CAAC,KAAM,MAAMjhB,QAAQihB,EAAEuuG,mBAAqB,EACrCvuG,EAAEq0F,SAEN,OAEXv2G,KAAK01G,aAAe11G,KAAKgqK,cAAcG,EAAiBnqK,KAAK01G,cAC7D11G,KAAK4hH,eAAiB5hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK4hH,gBAC/D5hH,KAAK6hH,aAAe7hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK6hH,cAC7D7hH,KAAK8hH,aAAe9hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK8hH,cAC7D,MACJ,IAAK,QACGqoD,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GACvC,CAAC,KAAM,MAAMjhB,QAAQihB,EAAEuuG,mBAAqB,EACrCvuG,EAAEq0F,SAEN,OAEXv2G,KAAK+hH,cAAgB/hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK+hH,eAC9D/hH,KAAK01G,aAAe11G,KAAKgqK,cAAcG,EAAiBnqK,KAAK01G,cAC7D11G,KAAK4hH,eAAiB5hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK4hH,gBAC/D5hH,KAAK6hH,aAAe7hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK6hH,cAC7D7hH,KAAK8hH,aAAe9hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK8hH,cAC7D,MACR,IAAK,QACDqoD,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GACvC,CAAC,IAAK,IAAK,KAAKjhB,QAAQihB,EAAEuuG,mBAAqB,EACxCvuG,EAAEq0F,SAEN,OAEXv2G,KAAK+hH,cAAgB/hH,KAAKgqK,cAAcG,EAAiBnqK,KAAK+hH,eAC9D/hH,KAAK01G,aAAe11G,KAAKgqK,cAAcG,EAAiBnqK,KAAK01G,cAC7D,MACJ,IAAK,IACDy0D,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GAChB,MAAvBA,EAAEuuG,iBACKvuG,EAAEq0F,SAEN,OAEXv2G,KAAK6nH,aAAe7nH,KAAKgqK,cAAcG,EAAiBnqK,KAAK6nH,cAC7D,MACJ,IAAK,IACDsiD,EAAkBnqK,KAAKwjK,oBAAoBjsK,KAAI2qB,GAChB,MAAvBA,EAAEuuG,iBACKvuG,EAAEq0F,SAEN,OAEXv2G,KAAKkmH,aAAelmH,KAAKgqK,cAAcG,EAAiBnqK,KAAKkmH,cAC7DlmH,KAAKy1G,aAAez1G,KAAKgqK,cAAcG,EAAiBnqK,KAAKy1G,cAC7Dz1G,KAAK01G,aAAe11G,KAAKgqK,cAAcG,EAAiBnqK,KAAK01G,cAC7D,MACJ,QACI78E,QAAQukG,IAAI,kDAAmDp9H,KAAK+pK,UAE5E/pK,KAAKwlK,yBAA0B,EAC/BxlK,KAAKqlK,cAAgB,EACrBrlK,KAAKulK,wBAA0B,EAC/BvlK,KAAKylK,iBAAmB,GACxBzlK,KAAK0lK,eAAiB,GACtB1lK,KAAKmmC,aACT,GAhlBAnmC,KAAKwtB,MAAQ,CACTu4I,gBAAiB,GACjBC,iBAAkB,IAEtBhmK,KAAK+jC,QAAU,cACf/jC,KAAKwlK,yBAA0B,EAC/BxlK,KAAK0lK,eAAiB,aACtB1lK,KAAKy1G,aAAe,GACpBz1G,KAAK01G,aAAe,GACpB11G,KAAKg8G,cAAgB,GACrBh8G,KAAK4hH,eAAiB,GACtB5hH,KAAKykK,iBAAmB,GACxBzkK,KAAK2kK,cAAgB,GACrB3kK,KAAK6kK,iBAAmB,GACxB7kK,KAAKmqH,aAAe,GACpBnqH,KAAK6nH,aAAe,GACpB7nH,KAAK8hH,aAAe,GACpB9hH,KAAKkmH,aAAe,GACpBlmH,KAAK6hH,aAAe,GACpB7hH,KAAK+hH,cAAgB,GACrB/hH,KAAK+kK,YAAc,GACnB/kK,KAAKimK,YAAc,GACnBjmK,KAAKrE,MAAQ,GACbqE,KAAKwjK,oBAAsB,GAC3BxjK,KAAKqlK,cAAgB,EACrBrlK,KAAKulK,wBAA0B,EAC/BvlK,KAAK8uH,WAAa,uBAClB9uH,KAAK6lK,eAAiB,GACtB7lK,KAAK2jK,SAAW,EAChB3jK,KAAKylK,iBAAmB,GACxBzlK,KAAK8lK,WAAa,GAClB9lK,KAAK+pK,SAAW,KAChB/pK,KAAKgpK,YAAcY,GAAgB,EAAIC,EAAcA,EAAc,EACnE7pK,KAAKkpK,UAAYU,GAAgB,EAAIC,EAAcA,EAAc,EACjE7pK,KAAKoqK,YAAc,EACnBpqK,KAAKozC,OAAS,CAAE41H,YAAa5xK,OAAO4I,KAAKgpK,aAAcE,UAAW9xK,OAAO4I,KAAKkpK,WAAYkB,YAAa,KACvGpqK,KAAK+6F,QAAU,EAEf/6F,KAAKkmK,SAAWlmK,KAAKkmK,SAASv0J,KAAK3R,MACnCA,KAAKs1G,SAAWt1G,KAAKs1G,SAAS3jG,KAAK3R,MAE/BA,KAAK5C,MAAMV,MAAMk+C,OAAOyvH,IACxB,OAAQrqK,KAAK5C,MAAMV,MAAMk+C,OAAOyvH,KAC5B,IAAK,KAsCL,QACIrqK,KAAK+pK,SAAU,KACf,MArCJ,IAAK,KACL,IAAK,KACL,IAAK,QACD/pK,KAAK+pK,SAAW,QAChB,MACJ,IAAK,KACD/pK,KAAK+pK,SAAW,KAChB,MACJ,IAAK,KACL,IAAK,IACL,IAAK,OACD/pK,KAAK+pK,SAAW,OAChB,MACJ,IAAK,KACL,IAAK,KACL,IAAK,QACD/pK,KAAK+pK,SAAW,QAChB,MACJ,IAAK,KACL,IAAK,KACL,IAAK,QACD/pK,KAAK+pK,SAAW,QAChB,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,QACD/pK,KAAK+pK,SAAW,QAChB,MACJ,IAAK,IACD/pK,KAAK+pK,SAAW,IAChB,MACJ,IAAK,IACD/pK,KAAK+pK,SAAW,IAO5B/pK,KAAKsqI,YACL,IAAIS,EAAUhpI,SAASo4F,OAAOxiG,MAAM,KACpC,IAAK,IAAIpB,EAAE,EAAGA,EAAIw0I,EAAQv2I,OAAQ+B,IAAI,CAClC,IAAIyE,EAAI+vI,EAAQx0I,GAChB,KAA4B,MAAtByE,EAAEia,UAAU,EAAG,IAAYja,EAAIA,EAAEia,UAAU,EAAGja,EAAExG,QACxB,IAA1BwG,EAAEiG,QAAQ,aAAsBmD,MAAMpJ,EAAEia,UAAU,EAAGja,EAAExG,WACvDwL,KAAKu2G,SAAWv7G,EAAEia,UAAU,EAAGja,EAAExG,QAEzC,CACJ,CAEA81I,SAAAA,GACIvoI,SAASo4F,OAAS,aAAen6F,KAAK+pK,SAAW,WACrD,CAEA97I,iBAAAA,GACInsB,OAAOgQ,iBAAiB,SAAU9R,KAAKmmK,aAAax0J,KAAK3R,OACzDA,KAAKkjK,kBACT,CAEAzpI,oBAAAA,GACI33B,OAAO06E,oBAAoB,SAAUx8E,KAAKmmK,aAAax0J,KAAK3R,MAChE,CAueA8pK,cAAAA,CAAeC,EAAU1+G,GASrB,OARArrD,KAAK+pK,SAAWA,EAChB/pK,KAAKwlK,yBAA0B,EAC/BxlK,KAAKqlK,cAAgB,EACrBrlK,KAAKslK,aAAe,EACpBtlK,KAAKulK,wBAA0B,EAC/BvlK,KAAKsqI,YACLxoI,OAAOggD,QAAQkoD,aAAa,CAACsgE,aAAcP,GAAW,mBAAqB/pK,KAAK+pK,SAAU,iBAAmB/pK,KAAK+pK,SAASpyK,MAAM,KAAK,IACtIqI,KAAKmmC,cACGnmC,KAAK+pK,UACT,IAAK,KACD/pK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAK8jK,kBACL9jK,KAAKgkK,kBACLhkK,KAAKikK,mBACL,MACJ,IAAK,QAQL,IAAK,KACDjkK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAK8kK,kBACL9kK,KAAKwkK,sBACLxkK,KAAK0kK,mBACL1kK,KAAK4kK,sBACL,MACJ,IAAK,OACD5kK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAK8kK,kBACL9kK,KAAKwkK,sBACLxkK,KAAK0kK,mBACL1kK,KAAK4kK,sBACL5kK,KAAKokK,kBACLpkK,KAAKqkK,kBACL,MACJ,IAAK,QACDrkK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKgkK,kBACLhkK,KAAKkkK,oBACLlkK,KAAKokK,kBACLpkK,KAAKqkK,kBACL,MACJ,IAAK,QACDrkK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKmkK,mBACLnkK,KAAKgkK,kBACLhkK,KAAKkkK,oBACLlkK,KAAKokK,kBACLpkK,KAAKqkK,kBACLrkK,KAAK+hH,cAAgB,GACrB,MACJ,IAAK,QACD/hH,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKmkK,mBACLnkK,KAAKgkK,kBACL,MACJ,IAAK,IACDhkK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKukK,kBACL,MACJ,IAAK,IACDvkK,KAAKulK,yBAA2B,EAChCvlK,KAAKsjK,gBACLtjK,KAAKskK,kBACLtkK,KAAK8jK,kBACL9jK,KAAKgkK,kBACL,MACJ,QACIhkK,KAAKylK,iBAAmB,IAAIzlK,KAAK+pK,SAAS,+BAC1C/pK,KAAKwlK,yBAA0B,EAG3C,CAEAlwD,QAAAA,CAASjqD,EAAO29G,EAAaE,EAAWkB,GACpCpqK,KAAKozC,OAAOg3H,YAAcA,EACtBpqK,KAAKozC,OAAO41H,cAAgBA,GAAehpK,KAAKozC,OAAO81H,YAAcA,GACrElpK,KAAKozC,OAAO41H,YAAcA,EAC1BhpK,KAAKozC,OAAO81H,UAAYA,EACxBlpK,KAAK8pK,eAAe9pK,KAAK+pK,SAAU,OAGnC/pK,KAAKmmC,aAEb,CAEAokI,WAAAA,CAAYnnH,GACR,OAAIA,IAAQpjD,KAAK+pK,SACN,OAGA,OAEf,CAEAS,SAAAA,CAAUpnH,GACN,OAAIA,IAAQpjD,KAAK+pK,SACN,kBAGA,UAEf,CAEA5D,YAAAA,GACQrkK,OAAOi5F,QAAU,EACjB/6F,KAAK+6F,QAAUj5F,OAAOi5F,QAGtB/6F,KAAKkmK,SAASlmK,KAAK+6F,QAE3B,CAEAmrE,QAAAA,GAAiC,IAAxBnrE,EAAOnmG,UAAAJ,OAAA,QAAA8D,IAAA1D,UAAA,GAAAA,UAAA,GAAGoL,KAAK+6F,QACpBj5F,OAAOmxC,SAAS,EAAG8nD,EACvB,CAEA1lG,MAAAA,GASI,MARI,CAAC,QAAS,KAAM,QAAQ4L,QAAQjB,KAAK+pK,WAAa,GAAK/pK,KAAKwlK,0BAC5DxlK,KAAKimK,YAAc,GACnBjmK,KAAKimK,YAAc95C,GAAsBnsH,KAAKmqH,aAAcnqH,KAAKykK,iBAAiBzkK,KAAK2kK,cAAc3kK,KAAK6kK,iBAAiB7kK,KAAK8hH,aAAa9hH,KAAK6hH,eAEjJ7hH,KAAKu2G,WACNv2G,KAAKu2G,SAAW,IAIhBxK,EAAAA,cAAA,OAAK/xD,UAAU,OACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,mBACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aAAY+xD,EAAAA,cAAA,YAC3BA,EAAAA,cAAA,OAAK/xD,UAAU,YACX+xD,EAAAA,cAAA,KAAG50F,KAAK,yBACJ40F,EAAAA,cAAA,OAAKw6D,IAAI,mBAAmBC,IAAI,OAAOtlJ,OAAO,KAAKD,MAAM,UAGjE8qF,EAAAA,cAAA,OAAK/xD,UAAU,YACX+xD,EAAAA,cAAA,OAAKl6F,GAAG,+BACJk6F,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAM7uF,MAAM,kBAAiB6uF,EAAAA,cAAA,SAAG,oBAE/B/rG,KAAKwjK,qBACLz3D,EAAAA,cAAC06D,GAAQ,CAACn2C,QAAStwH,KAAKwjK,sBAE5Bz3D,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAMr0E,KAAK,KAAI,2CAG1Bq0E,EAAAA,cAAA,OAAK/xD,UAAU,aAAY+xD,EAAAA,cAAA,YAC3BA,EAAAA,cAAA,OAAK3gG,MAAO,CAAEm1E,gBAAiB,MAAOjvB,UAAW,UAAYtX,UAAU,aAAY+xD,EAAAA,cAAA,KAAG50F,KAAK,6BACvF40F,EAAAA,cAAA,KAAG3gG,MAAO,CAAE8R,MAAO,UAAW,0CAGlC6uF,EAAAA,cAAA,OAAKl6F,GAAG,QAAQmoC,UAAU,aAAY,eACtC+xD,EAAAA,cAAA,MAAI/xD,UAAU,yBAAyB0sH,KAAK,WACxC36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAM,YAAcnX,KAAKu2G,UAAU,YAE/DxK,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAM,mBAAqBnX,KAAKu2G,UAAU,cAEtExK,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,kBAAkB7iC,KAAM,iBAAmBnX,KAAK+pK,UAAU,iBAE3Eh+D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAM,aAAa,eAIvD40F,EAAAA,cAAA,OAAK/xD,UAAU,OACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,MAAI/xD,UAAU,yBAAyB0sH,KAAK,WACxC36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,MAAO34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,MAAMuvJ,KAAK,MAAM,gBAAc,KAAK,gBAAe1mK,KAAKuqK,YAAY,MAAO/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,OAAO,OAEvM+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,SAAU34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,SAASuvJ,KAAK,MAAM,gBAAc,QAAQ,gBAAe1mK,KAAKuqK,YAAY,SAAU/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,UAAU,UAEtN+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,SAAU34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,SAASuvJ,KAAK,MAAM,gBAAc,QAAQ,gBAAe1mK,KAAKuqK,YAAY,SAAU/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,UAAU,UAEtN+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,SAAU34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,SAASuvJ,KAAK,MAAM,gBAAc,QAAQ,gBAAe1mK,KAAKuqK,YAAY,SAAU/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,UAAU,UAEtN+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,SAAU34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,SAASuvJ,KAAK,MAAM,gBAAc,QAAQ,gBAAe1mK,KAAKuqK,YAAY,SAAU/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,UAAU,UAEtN+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,MAAO34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,MAAMuvJ,KAAK,MAAM,gBAAc,KAAK,gBAAe1mK,KAAKuqK,YAAY,MAAO/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,OAAO,OAEvM+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,QAAS34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,QAAQuvJ,KAAK,MAAM,gBAAc,OAAO,gBAAe1mK,KAAKuqK,YAAY,QAAS/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,SAAS,SAEjN+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,KAAM34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,KAAKuvJ,KAAK,MAAM,gBAAc,IAAI,gBAAe1mK,KAAKuqK,YAAY,KAAM/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,MAAM,MAElM+rG,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAWh6C,KAAKwqK,UAAU,KAAM34J,GAAG,WAAW,cAAY,MAAMsF,KAAK,KAAKuvJ,KAAK,MAAM,gBAAc,IAAI,gBAAe1mK,KAAKuqK,YAAY,KAAM/yI,QAASx3B,KAAK8pK,eAAen4J,KAAK3R,KAAM,MAAM,SAM9M+rG,EAAAA,cAAA,OAAK/xD,UAAU,OAEX+xD,EAAAA,cAAA,OAAK/xD,UAAU,cAEVh6C,KAAKwlK,yBACFz5D,EAAAA,cAAA,WACIA,EAAAA,cAAA,WACAA,EAAAA,cAAA,WACAA,EAAAA,cAAA,KAAG/xD,UAAU,uCACb+xD,EAAAA,cAAA,YAIU,OAAlB/rG,KAAK+pK,UAAqB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAC/Dv5D,EAAAA,cAAC0+D,GAAS,CAACh1D,aAAcz1G,KAAKy1G,aAAcC,aAAc11G,KAAK01G,aAAcsG,cAAeh8G,KAAKg8G,cAC7F1G,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAIhD,UAAlBlmK,KAAK+pK,UAAwB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAClEv5D,EAAAA,cAAC2+D,GAAW,CAACh1D,aAAc11G,KAAK01G,aAAckM,eAAgB5hH,KAAK4hH,eAC/DC,aAAc7hH,KAAK6hH,aAAcC,aAAc9hH,KAAK8hH,aACpDxM,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAIhD,UAAlBlmK,KAAK+pK,UAAwB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAClEv5D,EAAAA,cAAC4+D,GAAS,CAACj1D,aAAc11G,KAAK01G,aAAckM,eAAgB5hH,KAAK4hH,eAAgBC,aAAc7hH,KAAK6hH,aAChGC,aAAc9hH,KAAK8hH,aAAcC,cAAe/hH,KAAK+hH,cACrDzM,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAGhD,UAAlBlmK,KAAK+pK,UAAwB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAClEv5D,EAAAA,cAAC6+D,GAAS,CAAC7oD,cAAe/hH,KAAK+hH,cAAezM,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAG1F,UAAlBlmK,KAAK+pK,UAAwB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAClEv5D,EAAAA,cAAC8+D,GAAc,CAAC1gD,aAAcnqH,KAAKimK,YAAa3wD,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAG5F,OAAlBlmK,KAAK+pK,UAAqB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAC/Dv5D,EAAAA,cAAC8+D,GAAc,CAAC1gD,aAAcnqH,KAAKimK,YAAa3wD,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAG5F,SAAlBlmK,KAAK+pK,UAAuB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cACjEv5D,EAAAA,cAAC8+D,GAAc,CAAC1gD,aAAcnqH,KAAKimK,YAAa3wD,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAG5F,MAAlBlmK,KAAK+pK,UAAoB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAC9Dv5D,EAAAA,cAAC++D,GAAc,CAAC3kD,WAAYnmH,KAAKwjK,oBAAqB37C,aAAc7nH,KAAK6nH,aACrEvS,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAQ8yH,SAAUlmK,KAAKkmK,WAIhD,MAAlBlmK,KAAK+pK,UAAoB/pK,KAAKwlK,yBAAiD,IAAtBxlK,KAAKslK,cAC9Dv5D,EAAAA,cAACg/D,GAAc,CAAC5kD,WAAYnmH,KAAKwjK,oBAAqBt9C,aAAclmH,KAAKkmH,aACrEzQ,aAAcz1G,KAAKy1G,aAAcC,aAAc11G,KAAK01G,aACpDJ,SAAUt1G,KAAKs1G,SAAUrvD,QAASjmD,KAAKozC,OAAS8yH,SAAUlmK,KAAKkmK,aAK3En6D,EAAAA,cAAA,WACAA,EAAAA,cAAA,WACAA,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAMr0E,KAAK,KAAI,OAAK13B,KAAK+jC,WAI5C,EAGJ,YC/3BA,MAAMinI,WAAiBx+I,EAAAA,UACnBrlB,WAAAA,CAAY/J,EAAOutB,GACf6qF,MAAMp4G,EAAOutB,GA+LjB,KACAu4I,iBAAmB,KACfljK,KAAKmjK,uBACD,sDACCj3F,IACGlsE,KAAKrE,MAAQuwE,EAASk3F,aACtBpjK,KAAKsjK,eAAe,IAEvBxqI,IACGD,QAAQukG,IAAItkG,EAAM,GAEzB,EAGL,KACAwqI,cAAiBj4G,IAEbrrD,KAAKujK,mBADU,+EAGX,OACCr3F,IACGlsE,KAAKwjK,oBAAsBt3F,EAC3BlsE,KAAKmmC,aAAa,IAErBrN,IACGD,QAAQukG,IAAItkG,EAAM,GAEzB,EAGL,KACAyqI,mBAAqB,CAAC1lJ,EAAKgtD,EAAQn/C,EAAUs5I,KACzC/4F,MACIpuD,EAAK,CACDgtD,OAAQA,EACRgB,QAAS,CACLC,OAAQ,oCACR,eAAgB,mBAChBm5F,cAAc,UAAD7uK,OAAY4J,KAAKrE,UAGrC++B,MAAMwxC,IACH,IAAIE,EAAOF,EAASE,OACpB,IAAIF,EAASC,GAOT,OAAOC,EAAK1xC,KAAK6V,QAAQE,OAAO9+B,KAAK4+B,UANjC7kB,GACA0gD,EAAK1xC,MAAM4L,IACP5a,EAAS4a,EAAO,GAK5B,IAEHoX,OAAO5kB,IACAksI,GACAA,EAASlsI,EACb,GACF,EACT,KAEDqqI,uBAAyB,CAACtlJ,EAAK6N,EAAUs5I,KACrC,IAAI1yB,EAAU,CAAC,UAAa,sCAC5B,cAAiB,+CACjB,WAAc,qBACd,MAAS,UAEL4yB,EAAW,GACf,IAAK,IAAIrgG,KAAYytE,EAAQ,CACzB,IAAI6yB,EAAazpK,mBAAmBmpE,GAChCugG,EAAe1pK,mBAAmB42I,EAAQztE,IAC9CqgG,EAAS7qK,KAAK8qK,EAAa,IAAMC,EACrC,CACAF,EAAWA,EAASztK,KAAK,KAEzBw0E,MACIpuD,EAAK,CACDgtD,OAAQ,OACR8oD,MAAO,WACP9nD,QAAS,CAAC,eAAgB,mDAC1Bp1D,KAAMyuJ,IAEbxqI,MAAMwxC,IACH,IAAIE,EAAOF,EAASE,OACpB,IAAIF,EAASC,GAOT,OAAOC,EAAK1xC,KAAK6V,QAAQE,OAAO9+B,KAAK4+B,UANjC7kB,GACA0gD,EAAK1xC,MAAM4L,IACP5a,EAAS4a,EAAO,GAK5B,IAEHoX,OAAO5kB,IACAksI,GACAA,EAASlsI,EACb,GACF,EACL,KAEDkxI,cAAgB,CAACC,EAAK1uK,IACXA,EAAK63C,QAAO3zC,GAAKwqK,EAAIhpK,QAAQxB,EAAE82G,WAAa,IACtD,KAED00D,uBAAyBx0K,IACrB,IAAIy0K,GAAO,EACXlrK,KAAKmrK,iBAAmBnrK,KAAKorK,gBAAgBh4H,QAAQirD,IAAiC,IAA/BjrG,EAAKi4K,EAASv/H,GAAWuyD,EAU5E,OARI6sE,EADe,KAAfp/H,GAAwC,KAAnBr1C,EAAEuB,OAAO6D,QAEvBwvK,EAAQznK,cAAc6Z,OAAOhnB,EAAEuB,OAAO6D,MAAM+H,gBAAkB,GAE9DkoC,EAAWloC,cAAc6Z,OAAOhnB,EAAEuB,OAAO6D,MAAM+H,gBAAkB,GAKrEsnK,CAAI,IAEflrK,KAAKkmC,SAAS,CAAColI,kBAAmB70K,EAAEuB,OAAO6D,OAAO,EApTlDmE,KAAK+jC,QAAU,cACf/jC,KAAKwtB,MAAQ,CACTu4I,gBAAiB,GACjBC,iBAAkB,GAClBsF,kBAAmB,IAGvBtrK,KAAKwjK,oBAAsB,GAC3BxjK,KAAKrE,MAAQ,GACbqE,KAAKu2G,SAAW,EAChBv2G,KAAKurK,eAAiB,KACtB,IAAIxgC,EAAUhpI,SAASo4F,OAAOxiG,MAAM,KACpC,IAAK,IAAIpB,EAAE,EAAGA,EAAIw0I,EAAQv2I,OAAQ+B,IAAI,CAClC,IAAIyE,EAAI+vI,EAAQx0I,GAChB,KAA4B,MAAtByE,EAAEia,UAAU,EAAG,IAAYja,EAAIA,EAAEia,UAAU,EAAGja,EAAExG,QACxB,IAA1BwG,EAAEiG,QAAQ,aAAsBmD,MAAMpJ,EAAEia,UAAU,EAAGja,EAAExG,SAErB,IAA3BwG,EAAEiG,QAAQ,eACjBjB,KAAKurK,eAAiBvwK,EAAEia,UAAU,GAAIja,EAAExG,SAFxCwL,KAAKu2G,SAAWv7G,EAAEia,UAAU,EAAGja,EAAExG,OAIzC,CACA,IAAIpB,EAAM,EACV4M,KAAKorK,gBAAkB,CACnB,CAACh4K,IAAM,UAAU,IACjB,CAACA,IAAM,cAAc,sDACrB,CAACA,IAAM,yBAAyB,0HAChC,CAACA,IAAM,uBAAuB,6DAC9B,CAACA,IAAM,4BAA4B,mEACnC,CAACA,IAAM,aAAa,wEACpB,CAACA,IAAM,cAAc,yEACrB,CAACA,IAAM,QAAQ,wDACf,CAACA,IAAM,kBAAkB,sHACzB,CAACA,IAAM,QAAQ,gDACf,CAACA,IAAM,gBAAgB,8DACvB,CAACA,IAAM,OAAO,iQACd,CAACA,IAAM,sBAAsB,wCAC7B,CAACA,IAAM,MAAM,iBACb,CAACA,IAAM,qBAAqB,iCAC5B,CAACA,IAAM,uBAAuB,mJAC9B,CAACA,IAAM,yBAAyB,8GAChC,CAACA,IAAM,0CAA0C,mSACjD,CAACA,IAAM,wBAAwB,qJAC/B,CAACA,IAAM,uBAAuB,8BAC9B,CAACA,IAAM,uBAAuB,yCAC9B,CAACA,IAAM,SAAS,6CAChB,CAACA,IAAM,SAAS,4DAChB,CAACA,IAAM,OAAO,6CACd,CAACA,IAAM,kBAAkB,2BACzB,CAACA,IAAM,OAAO,kCACd,CAACA,IAAM,UAAU,IACjB,CAACA,IAAM,wBAAwB,uEAC/B,CAACA,IAAM,+BAA+B,0IACtC,CAACA,IAAM,0DAA0D,wFACjE,CAACA,IAAM,kBAAkB,gHACzB,CAACA,IAAM,UAAU,8FACjB,CAACA,IAAM,MAAM,gBACb,CAACA,IAAM,cAAc,2EACrB,CAACA,IAAM,WAAW,8DAClB,CAACA,IAAM,0CAA0C,0QACjD,CAACA,IAAM,wBAAwB,8IAC/B,CAACA,IAAM,sBAAsB,2BAC7B,CAACA,IAAM,OAAO,kCACd,CAACA,IAAM,uCAAuC,yCAC9C,CAACA,IAAM,oCAAoC,uGAC3C,CAACA,IAAM,YAAY,IACnB,CAACA,IAAM,4BAA4B,6EACnC,CAACA,IAAM,YAAY,0HACnB,CAACA,IAAM,aAAa,sEACpB,CAACA,IAAM,aAAa,4JACpB,CAACA,IAAM,mBAAmB,0DAC1B,CAACA,IAAM,aAAa,4DACpB,CAACA,IAAM,iBAAiB,2EACxB,CAACA,IAAM,UAAU,4BACjB,CAACA,IAAM,kBAAkB,sHACzB,CAACA,IAAM,MAAM,sBACb,CAACA,IAAM,4BAA4B,gEACnC,CAACA,IAAM,4CAA4C,wRACnD,CAACA,IAAM,wBAAwB,qJAC/B,CAACA,IAAM,+BAA+B,sFACtC,CAACA,IAAM,UAAU,0FACjB,CAACA,IAAM,OAAO,oCACd,CAACA,IAAM,yBAAyB,wBAChC,CAACA,IAAM,oBAAoB,gGAC3B,CAACA,IAAM,0BAA0B,4EACjC,CAACA,IAAM,eAAe,yCACtB,CAACA,IAAM,aAAa,iHACpB,CAACA,IAAM,WAAW,IAClB,CAACA,IAAM,qBAAqB,qQAC5B,CAACA,IAAM,4BAA4B,+LACnC,CAACA,IAAM,2BAA2B,yFAClC,CAACA,IAAM,uBAAuB,6CAC9B,CAACA,IAAM,uBAAuB,6CAC9B,CAACA,IAAM,0BAA0B,kCACjC,CAACA,IAAM,sBAAsB,uGAC7B,CAACA,IAAM,gCAAgC,mJACvC,CAACA,IAAM,4BAA4B,oFACnC,CAACA,IAAM,kBAAkB,iIACzB,CAACA,IAAM,mBAAmB,8DAC1B,CAACA,IAAM,qBAAqB,4CAC5B,CAACA,IAAM,oBAAoB,wFAC3B,CAACA,IAAM,sBAAsB,uFAC7B,CAACA,IAAM,iBAAiB,yDACxB,CAACA,IAAM,4BAA4B,oTACnC,CAACA,IAAM,wBAAwB,gKAC/B,CAACA,IAAM,oCAAoC,sEAC3C,CAACA,IAAM,eAAe,IACtB,CAACA,IAAM,wBAAwB,qGAC/B,CAACA,IAAM,OAAO,6FACd,CAACA,IAAM,QAAQ,0FACf,CAACA,IAAM,yBAAyB,iEAChC,CAACA,IAAM,oBAAoB,sIAC3B,CAACA,IAAM,aAAa,iGACpB,CAACA,IAAM,gCAAgC,wIACvC,CAACA,IAAM,iBAAiB,mFACxB,CAACA,IAAM,yBAAyB,mNAChC,CAACA,IAAM,2BAA2B,kMAClC,CAACA,IAAM,+BAA+B,8UACtC,CAACA,IAAM,wBAAwB,2JAC/B,CAACA,IAAM,0BAA0B,kEACjC,CAACA,IAAM,YAAY,mGACnB,CAACA,IAAM,cAAc,yFACrB,CAACA,IAAM,wCAAwC,gEAC/C,CAACA,IAAM,uCAAuC,+DAC9C,CAACA,IAAM,eAAe,IACtB,CAACA,IAAM,yBAAyB,gHAChC,CAACA,IAAM,wBAAwB,2FAC/B,CAACA,IAAM,kBAAkB,8HACzB,CAACA,IAAM,MAAM,mBACb,CAACA,IAAM,qCAAqC,sBAC5C,CAACA,IAAM,QAAQ,qDACf,CAACA,IAAM,QAAQ,mIACf,CAACA,IAAM,WAAW,wHAClB,CAACA,IAAM,UAAU,uDACjB,CAACA,IAAM,cAAc,2DACrB,CAACA,IAAM,cAAc,yEACrB,CAACA,IAAM,yBAAyB,kMAChC,CAACA,IAAM,eAAe,wEACtB,CAACA,IAAM,cAAc,kEACrB,CAACA,IAAM,iBAAiB,wIACxB,CAACA,IAAM,kBAAkB,0DACzB,CAACA,IAAM,4BAA4B,yWACnC,CAACA,IAAM,wBAAwB,kKAC/B,CAACA,IAAM,aAAa,0DACpB,CAACA,IAAM,aAAa,sEACpB,CAACA,IAAM,SAAS,uDAChB,CAACA,IAAM,SAAS,mDAChB,CAACA,IAAM,yBAAyB,wEAChC,CAACA,IAAM,8BAA8B,8FACrC,CAACA,IAAM,cAAc,IACrB,CAACA,IAAM,YAAY,kIACnB,CAACA,IAAM,oBAAoB,8JAC3B,CAACA,IAAM,mBAAmB,0DAC1B,CAACA,IAAM,oBAAoB,+EAC3B,CAACA,IAAM,6BAA6B,mEACpC,CAACA,IAAM,yBAAyB,4IAChC,CAACA,IAAM,wBAAwB,yFAC/B,CAACA,IAAM,kBAAkB,qIACzB,CAACA,IAAM,MAAM,mBACb,CAACA,IAAM,oBAAoB,oFAC3B,CAACA,IAAM,iBAAiB,sBACxB,CAACA,IAAM,0CAA0C,0IACjD,CAACA,IAAM,8BAA8B,+UACrC,CAACA,IAAM,wBAAwB,gKAC/B,CAACA,IAAM,cAAc,uEACrB,CAACA,IAAM,YAAY,iBACnB,CAACA,IAAM,OAAO,uBACd,CAACA,IAAM,+BAA+B,iGACtC,CAACA,IAAM,oBAAoB,uDAC3B,CAACA,IAAM,UAAU,IACjB,CAACA,IAAM,UAAU,0DACjB,CAACA,IAAM,uBAAuB,8EAC9B,CAACA,IAAM,YAAY,oKACnB,CAACA,IAAM,kBAAkB,mEACzB,CAACA,IAAM,qBAAqB,oDAEhC4M,KAAKmrK,iBAAmBnrK,KAAKorK,eACjC,CAEAn9I,iBAAAA,GACIjuB,KAAKkjK,kBACT,CAmIA7tK,MAAAA,GACI,IAAI+wK,EAAa,YAAcpmK,KAAKu2G,SAChC8vD,EAAoB,mBAAqBrmK,KAAKu2G,SAC9Ci1D,EAAkB,iBAAmBxrK,KAAKurK,eAE9C,OACIx/D,EAAAA,cAAA,OAAK/xD,UAAU,OACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,mBACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aAAY+xD,EAAAA,cAAA,YAC3BA,EAAAA,cAAA,OAAK/xD,UAAU,YACX+xD,EAAAA,cAAA,KAAG50F,KAAK,yBACJ40F,EAAAA,cAAA,OAAKw6D,IAAI,mBAAmBC,IAAI,OAAOtlJ,OAAO,KAAKD,MAAM,UAGjE8qF,EAAAA,cAAA,OAAK/xD,UAAU,YACX+xD,EAAAA,cAAA,OAAKl6F,GAAG,+BACJk6F,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAM7uF,MAAM,kBAAiB6uF,EAAAA,cAAA,SAAG,oBAE/B/rG,KAAKwjK,qBACLz3D,EAAAA,cAAC06D,GAAQ,CAACn2C,QAAStwH,KAAKwjK,sBAE5Bz3D,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAMr0E,KAAK,KAAI,2CAG1Bq0E,EAAAA,cAAA,OAAK/xD,UAAU,aAAY+xD,EAAAA,cAAA,YAC3BA,EAAAA,cAAA,OAAK3gG,MAAO,CAAEm1E,gBAAiB,MAAOjvB,UAAW,UAAYtX,UAAU,aAAY+xD,EAAAA,cAAA,KAAG50F,KAAK,6BACvF40F,EAAAA,cAAA,KAAG3gG,MAAO,CAAE8R,MAAO,UAAW,0CAGlC6uF,EAAAA,cAAA,OAAKl6F,GAAG,QAAQmoC,UAAU,aAAY,eACtC+xD,EAAAA,cAAA,MAAI/xD,UAAU,yBAAyB0sH,KAAK,WACxC36D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAMivJ,GAAY,YAE9Cr6D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAMkvJ,GAAmB,cAErDt6D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,WAAW7iC,KAAMq0J,GAAiB,iBAEnDz/D,EAAAA,cAAA,MAAI/xD,UAAU,YACV+xD,EAAAA,cAAA,KAAG/xD,UAAU,kBAAkB7iC,KAtCpC,cAsCwD,eAK/D40F,EAAAA,cAAA,OAAK/xD,UAAU,OACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,YAAYnoC,GAAG,eAAc,YAC5Ck6F,EAAAA,cAAA,OAAK/xD,UAAU,+BACX+xD,EAAAA,cAAA,SAAO13G,KAAK,OAAOynF,SAAU97E,KAAKirK,uBAAuBt5J,KAAK3R,MAAO8oD,YAAY,gBAAgBzd,MAAM,2BAE3G0gE,EAAAA,cAAA,OAAKl6F,GAAG,kBACH7R,KAAKmrK,iBAAiB5zK,KAAMoI,GACxBA,EAAE,IAAMosG,EAAAA,cAAA,KAAG34G,IAAKuM,EAAE,IAAIosG,EAAAA,cAAA,SAAIpsG,EAAE,IAAO,IAAEA,EAAE,KAAaosG,EAAAA,cAAA,MAAI34G,IAAKuM,EAAE,IAAKA,EAAE,SAKvFosG,EAAAA,cAAA,WACAA,EAAAA,cAAA,WACAA,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAMr0E,KAAK,KAAI,OAAK13B,KAAK+jC,WAK5C,EAGJ,YCjYA,MAAM0nI,WAAwBj/I,EAAAA,UAC1BrlB,WAAAA,CAAY/J,EAAOutB,GACf6qF,MAAMp4G,EAAOutB,GACb3qB,KAAK+jC,QAAU,aACnB,CAEA1uC,MAAAA,GACI,OACI02G,EAAAA,cAAA,OAAK/xD,UAAU,OACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,aACX+xD,EAAAA,cAAA,OAAK/xD,UAAU,OACX+xD,EAAAA,cAAA,KAAG50F,KAAK,6BACJ40F,EAAAA,cAAA,WAAMA,EAAAA,cAAA,OAAKw6D,IAAI,mBAAmBC,IAAI,OAAOtlJ,OAAO,KAAKD,MAAM,UAGvE8qF,EAAAA,cAAA,WAAKA,EAAAA,cAAA,YACLA,EAAAA,cAAA,WACIA,EAAAA,cAAA,UAAIA,EAAAA,cAAA,WAAM,gEACVA,EAAAA,cAAA,UAAI,wCACJA,EAAAA,cAAA,UACIA,EAAAA,cAAA,UAAIA,EAAAA,cAAA,KAAG50F,KAAK,0DAAyD,mBACrE40F,EAAAA,cAAA,UAAIA,EAAAA,cAAA,KAAG50F,KAAK,2BAA0B,oBACtC40F,EAAAA,cAAA,UAAIA,EAAAA,cAAA,KAAG50F,KAAK,yCAAwC,oBAG5D40F,EAAAA,cAAA,WACAA,EAAAA,cAAA,WACAA,EAAAA,cAAA,SAAGA,EAAAA,cAAA,QAAMr0E,KAAK,KAAI,OAAK13B,KAAK+jC,WAK5C,EAGJ,YCEA,SA/BA,WAEI,OAAc,MADuBhiC,SAAS2Z,aAGtCqwF,EAAAA,cAACkD,GAAa,KACVlD,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,IAAIyF,OAAK,EAAC9J,UAAW+tK,KACjCl3D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,gBAAgByF,OAAK,EAAC9J,UAAWw2K,KAC7C3/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,qBAAqBrE,UAAWw2K,KAC5C3/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,WAAWyF,OAAK,EAAC9J,UAAW+tK,KACxCl3D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,eAAerE,UAAW+tK,KACtCl3D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,kBAAkByF,OAAK,EAAC9J,UAAW6zK,KAC/Ch9D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,sBAAsBrE,UAAW6zK,KAC7Ch9D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,YAAYrE,UAAW81K,MAKvCj/D,EAAAA,cAACkD,GAAa,KACVlD,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,IAAIyF,OAAK,EAAC9J,UAAWu2K,KACjC1/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,gBAAgByF,OAAK,EAAC9J,UAAWu2K,KAC7C1/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,qBAAqBrE,UAAWu2K,KAC5C1/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,WAAWyF,OAAK,EAAC9J,UAAWu2K,KACxC1/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,eAAerE,UAAWu2K,KACtC1/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,kBAAkByF,OAAK,EAAC9J,UAAWu2K,KAC/C1/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,sBAAsBrE,UAAWu2K,KAC7C1/D,EAAAA,cAAC0C,EAAK,CAACl1G,KAAK,YAAYrE,UAAWu2K,KAInD,ECzBoB90C,QACW,cAA7B70H,OAAOvE,SAASouK,UAEe,UAA7B7pK,OAAOvE,SAASouK,UAEhB7pK,OAAOvE,SAASouK,SAASjvK,MACvB,2DCbNkvK,EAAAA,OAAgB7/D,EAAAA,cAACsB,GAAM,MAAKtrG,SAAS8pK,eAAe,SD4H9C,kBAAmBjuG,WACrBA,UAAUkuG,cAAcC,MAAMrxI,MAAKsxI,IACjCA,EAAaC,YAAY","sources":["../node_modules/gud/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/isarray/index.js","../node_modules/object-assign/index.js","../node_modules/path-to-regexp/index.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/index.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/tabulator-tables/dist/js/tabulator.js","../webpack/bootstrap","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/resolve-pathname/esm/resolve-pathname.js","../node_modules/tiny-invariant/dist/tiny-invariant.esm.js","../node_modules/history/esm/history.js","../node_modules/mini-create-react-context/dist/esm/index.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-router/modules/RouterContext.js","../node_modules/react-router/modules/Router.js","../node_modules/react-router/modules/MemoryRouter.js","../node_modules/react-router/modules/Lifecycle.js","../node_modules/react-router/modules/matchPath.js","../node_modules/react-router/modules/Route.js","../node_modules/react-router/modules/StaticRouter.js","../node_modules/react-router/modules/Switch.js","../node_modules/react-router/modules/hooks.js","../node_modules/react-router-dom/modules/BrowserRouter.js","../node_modules/react-router-dom/modules/HashRouter.js","../node_modules/react-router-dom/modules/utils/locationUtils.js","../node_modules/react-router-dom/modules/Link.js","../node_modules/react-router-dom/modules/NavLink.js","components/common/CommonFunctions.js","components/common/TableColumnWidths.js","components/common/Filters.js","components/pageQB/TableQBSummaryTabulator.js","components/pageQB/TableQBAdvancedPassingTabulator.js","components/pageQB/TableQBPassingAccuracyTabulator.js","components/pageQB/TableQBAdvancedRushingTabulator.js","components/pageRBWR/TableRBWRSummaryTabulator.js","components/pageRBWR/TableRBWRAdvancedRushingTabulator.js","components/pageRBWR/TableRBWRAdvancedReceivingTabulator.js","components/pageOL/TableOLSummaryTabulator.js","components/pageOL/TableOLPassBlockingTabulator.js","components/pageOL/TableOLRushBlockingTabulator.js","components/pageKP/TableKPPuntingTabulator.js","components/pageKP/TableKPAdvancedPuntingTabulator.js","components/pageKP/TableKPKickingTabulator.js","components/pageDefense/TableDefenseSummaryTabulator.js","components/pageDefense/TableDefenseBuildData.js","components/pageDefense/TableDefenseAdvancedDefenseTabulator.js","components/pageDefense/TableDefensePassRushTabulator.js","components/common/PlayerBio.js","components/common/DropDown.js","../node_modules/whatwg-fetch/fetch.js","../node_modules/tslib/tslib.es6.js","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/EnvUtils.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/CoreUtils.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK.Enums/LoggingEnums.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/DiagnosticLogger.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/TelemetryPluginChain.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/ProcessTelemetryContext.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/BaseTelemetryPlugin.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/TelemetryHelpers.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/ChannelController.ts","../node_modules/@microsoft/applicationinsights-common/src/Enums.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/BaseCore.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK.Enums/EventsDiscardedReason.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/NotificationManager.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/AppInsightsCore.ts","../node_modules/@microsoft/applicationinsights-common/src/applicationinsights-common.ts","../node_modules/@microsoft/applicationinsights-common/src/RequestResponseHeaders.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Common/DataSanitizer.ts","../node_modules/@microsoft/applicationinsights-common/src/Util.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/DataPointType.ts","../node_modules/@microsoft/applicationinsights-common/src/TelemetryItemCreator.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/Domain.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/EventData.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Event.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Trace.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/MessageData.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/MetricData.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/DataPoint.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/SeverityLevel.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Common/DataPoint.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Metric.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/PageViewData.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/PageView.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/PageViewPerformance.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/PageViewPerfData.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/StackFrame.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/ExceptionDetails.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Exception.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/ExceptionData.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/RemoteDependencyData.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/RemoteDependencyData.ts","../node_modules/@microsoft/dynamicproto-js/lib/out/lib/src/DynamicProto.js","../node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/Telemetry/PageViewManager.js","../node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/Telemetry/PageVisitTimeManager.js","../node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/Telemetry/PageViewPerformanceManager.js","../node_modules/@microsoft/applicationinsights-analytics-js/dist-esm/JavaScriptSDK/ApplicationInsights.js","../node_modules/@microsoft/applicationinsights-channel-js/src/SendBuffer.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Common/Envelope.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/Envelope.ts","../node_modules/@microsoft/applicationinsights-common/src/Constants.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/ContextTagKeys.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/PartAExtensions.ts","../node_modules/@microsoft/applicationinsights-common/src/Telemetry/Common/Data.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/Data.ts","../node_modules/@microsoft/applicationinsights-common/src/Interfaces/Contracts/Generated/Base.ts","../node_modules/@microsoft/applicationinsights-channel-js/src/EnvelopeCreator.ts","../node_modules/@microsoft/applicationinsights-channel-js/src/Serializer.ts","../node_modules/@microsoft/applicationinsights-channel-js/src/Offline.ts","../node_modules/@microsoft/applicationinsights-channel-js/src/TelemetryProcessors/SamplingScoreGenerators/HashCodeScoreGenerator.ts","../node_modules/@microsoft/applicationinsights-channel-js/src/TelemetryProcessors/SamplingScoreGenerators/SamplingScoreGenerator.ts","../node_modules/@microsoft/applicationinsights-channel-js/src/TelemetryProcessors/Sample.ts","../node_modules/@microsoft/applicationinsights-channel-js/src/Sender.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/Context/Session.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/Context/Application.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/Context/Device.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/Context/Internal.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/Context/User.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/Context/Location.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/Context/TelemetryTrace.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/TelemetryContext.ts","../node_modules/@microsoft/applicationinsights-properties-js/src/PropertiesPlugin.ts","../node_modules/@microsoft/applicationinsights-core-js/src/JavaScriptSDK/InstrumentHooks.ts","../node_modules/@microsoft/applicationinsights-dependencies-js/dist-esm/ajaxRecord.js","../node_modules/@microsoft/applicationinsights-dependencies-js/dist-esm/TraceParent.js","../node_modules/@microsoft/applicationinsights-dependencies-js/dist-esm/ajax.js","../node_modules/@microsoft/applicationinsights-common/src/ConnectionStringParser.ts","../node_modules/@microsoft/applicationinsights-web/dist-esm/Initialization.js","Players.js","components/pageQB/GameLogQBSummaryTabulator.js","components/pageOL/GameLogOLSummaryTabulator.js","components/pageRBWR/GameLogWRTERBFBSummaryTabulator.js","components/pageDefense/GameLogDefenseSummaryTabulator.js","components/pageDefense/GameLogDefenseBuildData.js","components/pageKP/GameLogKPKickingTabulator.js","components/pageKP/GameLogKPPuntingTabulator.js","PlayerGameLogs.js","components/leaderboards/QBSection.js","components/leaderboards/DefenseSection.js","components/leaderboards/WRRBSection.js","components/pageRBWR/TableWRTESummaryTabulator.js","components/leaderboards/TESection.js","components/leaderboards/OLSection.js","components/leaderboards/KickingSection.js","components/leaderboards/PuntingSection.js","Leaderboards.js","Glossary.js","BrowserRedirect.js","Router.js","serviceWorker.js","index.js"],"sourcesContent":["// @flow\n'use strict';\n\nvar key = '__global_unique_id__';\n\nmodule.exports = function() {\n return global[key] = (global[key] || 0) + 1;\n};\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","module.exports = Array.isArray || function (arr) {\n return Object.prototype.toString.call(arr) == '[object Array]';\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","var isarray = require('isarray')\n\n/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n // \"/route(\\\\d+)\" => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n // \"/*\" => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = options && options.delimiter || '/'\n var res\n\n while ((res = PATH_REGEXP.exec(str)) != null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n continue\n }\n\n var next = str[index]\n var prefix = res[2]\n var name = res[3]\n var capture = res[4]\n var group = res[5]\n var modifier = res[6]\n var asterisk = res[7]\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n }\n\n var partial = prefix != null && next != null && next !== prefix\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var delimiter = res[2] || defaultDelimiter\n var pattern = capture || group\n\n tokens.push({\n name: name || key++,\n prefix: prefix || '',\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n partial: partial,\n asterisk: !!asterisk,\n pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n })\n }\n\n // Match any characters still remaining.\n if (index < str.length) {\n path += str.substr(index)\n }\n\n // If the path exists, push it onto the end.\n if (path) {\n tokens.push(path)\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n return encodeURI(str).replace(/[?#]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (obj, opts) {\n var path = ''\n var data = obj || {}\n var options = opts || {}\n var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n\n continue\n }\n\n var value = data[token.name]\n var segment\n\n if (value == null) {\n if (token.optional) {\n // Prepend partial segment prefixes.\n if (token.partial) {\n path += token.prefix\n }\n\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to be defined')\n }\n }\n\n if (isarray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n }\n\n if (value.length === 0) {\n if (token.optional) {\n continue\n } else {\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j])\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n segment = token.asterisk ? encodeAsterisk(value) : encode(value)\n\n if (!matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param {!RegExp} re\n * @param {Array} keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n re.keys = keys\n return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {!Array} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n partial: false,\n asterisk: false,\n pattern: null\n })\n }\n }\n\n return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))\n\n return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {!Array} keys\n * @param {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n var strict = options.strict\n var end = options.end !== false\n var route = ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var prefix = escapeString(token.prefix)\n var capture = '(?:' + token.pattern + ')'\n\n keys.push(token)\n\n if (token.repeat) {\n capture += '(?:' + prefix + capture + ')*'\n }\n\n if (token.optional) {\n if (!token.partial) {\n capture = '(?:' + prefix + '(' + capture + '))?'\n } else {\n capture = prefix + '(' + capture + ')?'\n }\n } else {\n capture = prefix + '(' + capture + ')'\n }\n\n route += capture\n }\n }\n\n var delimiter = escapeString(options.delimiter || '/')\n var endsWithDelimiter = route.slice(-delimiter.length) === delimiter\n\n // In non-strict mode we allow a slash at the end of match. If the path to\n // match already ends with a slash, we remove it for consistency. The slash\n // is valid at the end of a path match, not in the middle. This is important\n // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n if (!strict) {\n route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'\n }\n\n if (end) {\n route += '$'\n } else {\n // In non-ending mode, we need the capturing groups to match as much as\n // possible by using a positive lookahead to the end or next path segment.\n route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'\n }\n\n return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {(Array|Object)=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (!isarray(keys)) {\n options = /** @type {!Object} */ (keys || options)\n keys = []\n }\n\n options = options || {}\n\n if (path instanceof RegExp) {\n return regexpToRegexp(path, /** @type {!Array} */ (keys))\n }\n\n if (isarray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bigint: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","/** @license React v16.13.1\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTimeQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime>> 0;\n\n\t\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\n\t\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t\t}\n\n\t\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\n\t\t\t\tvar thisArg = arguments[1];\n\n\t\t\t\t// 5. Let k be 0.\n\n\n\t\t\t\tvar k = 0;\n\n\t\t\t\t// 6. Repeat, while k < len\n\n\n\t\t\t\twhile (k < len) {\n\n\t\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\n\t\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\n\t\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\n\t\t\t\t\t// d. If testResult is true, return k.\n\n\n\t\t\t\t\tvar kValue = o[k];\n\n\t\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\t\treturn k;\n\t\t\t\t\t}\n\n\t\t\t\t\t// e. Increase k by 1.\n\n\n\t\t\t\t\tk++;\n\t\t\t\t}\n\n\t\t\t\t// 7. Return -1.\n\n\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t});\n\t}\n\n\t// https://tc39.github.io/ecma262/#sec-array.prototype.find\n\n\n\tif (!Array.prototype.find) {\n\n\t\tObject.defineProperty(Array.prototype, 'find', {\n\n\t\t\tvalue: function value(predicate) {\n\n\t\t\t\t// 1. Let O be ? ToObject(this value).\n\n\n\t\t\t\tif (this == null) {\n\n\t\t\t\t\tthrow new TypeError('\"this\" is null or not defined');\n\t\t\t\t}\n\n\t\t\t\tvar o = Object(this);\n\n\t\t\t\t// 2. Let len be ? ToLength(? Get(O, \"length\")).\n\n\n\t\t\t\tvar len = o.length >>> 0;\n\n\t\t\t\t// 3. If IsCallable(predicate) is false, throw a TypeError exception.\n\n\n\t\t\t\tif (typeof predicate !== 'function') {\n\n\t\t\t\t\tthrow new TypeError('predicate must be a function');\n\t\t\t\t}\n\n\t\t\t\t// 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\n\n\n\t\t\t\tvar thisArg = arguments[1];\n\n\t\t\t\t// 5. Let k be 0.\n\n\n\t\t\t\tvar k = 0;\n\n\t\t\t\t// 6. Repeat, while k < len\n\n\n\t\t\t\twhile (k < len) {\n\n\t\t\t\t\t// a. Let Pk be ! ToString(k).\n\n\n\t\t\t\t\t// b. Let kValue be ? Get(O, Pk).\n\n\n\t\t\t\t\t// c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\n\n\n\t\t\t\t\t// d. If testResult is true, return kValue.\n\n\n\t\t\t\t\tvar kValue = o[k];\n\n\t\t\t\t\tif (predicate.call(thisArg, kValue, k, o)) {\n\n\t\t\t\t\t\treturn kValue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// e. Increase k by 1.\n\n\n\t\t\t\t\tk++;\n\t\t\t\t}\n\n\t\t\t\t// 7. Return undefined.\n\n\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t});\n\t}\n\n\tvar ColumnManager = function ColumnManager(table) {\n\n\t\tthis.table = table; //hold parent table\n\n\n\t\tthis.blockHozScrollEvent = false;\n\n\t\tthis.headersElement = this.createHeadersElement();\n\n\t\tthis.element = this.createHeaderElement(); //containing element\n\n\n\t\tthis.rowManager = null; //hold row manager object\n\n\n\t\tthis.columns = []; // column definition object\n\n\n\t\tthis.columnsByIndex = []; //columns by index\n\n\n\t\tthis.columnsByField = {}; //columns by field\n\n\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\n\t};\n\n\t////////////// Setup Functions /////////////////\n\n\n\tColumnManager.prototype.createHeadersElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-headers\");\n\n\t\treturn el;\n\t};\n\n\tColumnManager.prototype.createHeaderElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-header\");\n\n\t\tif (!this.table.options.headerVisible) {\n\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\n\t\t}\n\n\t\treturn el;\n\t};\n\n\tColumnManager.prototype.initialize = function () {\n\n\t\tvar self = this;\n\n\t\t//scroll body along with header\n\n\n\t\t// self.element.addEventListener(\"scroll\", function(e){\n\n\n\t\t// \tif(!self.blockHozScrollEvent){\n\n\n\t\t// \t\tself.table.rowManager.scrollHorizontal(self.element.scrollLeft);\n\n\n\t\t// \t}\n\n\n\t\t// });\n\n\t};\n\n\t//link to row manager\n\n\n\tColumnManager.prototype.setRowManager = function (manager) {\n\n\t\tthis.rowManager = manager;\n\t};\n\n\t//return containing element\n\n\n\tColumnManager.prototype.getElement = function () {\n\n\t\treturn this.element;\n\t};\n\n\t//return header containing element\n\n\n\tColumnManager.prototype.getHeadersElement = function () {\n\n\t\treturn this.headersElement;\n\t};\n\n\t// ColumnManager.prototype.tempScrollBlock = function(){\n\n\n\t// \tclearTimeout(this.blockHozScrollEvent);\n\n\n\t// \tthis.blockHozScrollEvent = setTimeout(() => {this.blockHozScrollEvent = false;}, 50);\n\n\n\t// }\n\n\n\t//scroll horizontally to match table body\n\n\n\tColumnManager.prototype.scrollHorizontal = function (left) {\n\n\t\tvar hozAdjust = 0,\n\t\t scrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\n\n\t\t// this.tempScrollBlock();\n\n\n\t\tthis.element.scrollLeft = left;\n\n\t\t//adjust for vertical scrollbar moving table when present\n\n\n\t\tif (left > scrollWidth) {\n\n\t\t\thozAdjust = left - scrollWidth;\n\n\t\t\tthis.element.style.marginLeft = -hozAdjust + \"px\";\n\t\t} else {\n\n\t\t\tthis.element.style.marginLeft = 0;\n\t\t}\n\n\t\t//keep frozen columns fixed in position\n\n\n\t\t//this._calcFrozenColumnsPos(hozAdjust + 3);\n\n\n\t\tthis.scrollLeft = left;\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\t\tthis.table.modules.frozenColumns.scrollHorizontal();\n\t\t}\n\t};\n\n\t///////////// Column Setup Functions /////////////\n\n\n\tColumnManager.prototype.generateColumnsFromRowData = function (data) {\n\n\t\tvar cols = [],\n\t\t row,\n\t\t sorter;\n\n\t\tif (data && data.length) {\n\n\t\t\trow = data[0];\n\n\t\t\tfor (var key in row) {\n\n\t\t\t\tvar col = {\n\n\t\t\t\t\tfield: key,\n\n\t\t\t\t\ttitle: key\n\n\t\t\t\t};\n\n\t\t\t\tvar value = row[key];\n\n\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\n\t\t\t\t\tcase \"undefined\":\n\n\t\t\t\t\t\tsorter = \"string\";\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"boolean\":\n\n\t\t\t\t\t\tsorter = \"boolean\";\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"object\":\n\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\n\t\t\t\t\t\t\tsorter = \"array\";\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcol.sorter = sorter;\n\n\t\t\t\tcols.push(col);\n\t\t\t}\n\n\t\t\tthis.table.options.columns = cols;\n\n\t\t\tthis.setColumns(this.table.options.columns);\n\t\t}\n\t};\n\n\tColumnManager.prototype.setColumns = function (cols, row) {\n\n\t\tvar self = this;\n\n\t\twhile (self.headersElement.firstChild) {\n\t\t\tself.headersElement.removeChild(self.headersElement.firstChild);\n\t\t}self.columns = [];\n\n\t\tself.columnsByIndex = [];\n\n\t\tself.columnsByField = {};\n\n\t\t//reset frozen columns\n\n\n\t\tif (self.table.modExists(\"frozenColumns\")) {\n\n\t\t\tself.table.modules.frozenColumns.reset();\n\t\t}\n\n\t\tcols.forEach(function (def, i) {\n\n\t\t\tself._addColumn(def);\n\t\t});\n\n\t\tself._reIndexColumns();\n\n\t\tif (self.table.options.responsiveLayout && self.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tself.table.modules.responsiveLayout.initialize();\n\t\t}\n\n\t\tself.redraw(true);\n\t};\n\n\tColumnManager.prototype._addColumn = function (definition, before, nextToColumn) {\n\n\t\tvar column = new Column(definition, this),\n\t\t colEl = column.getElement(),\n\t\t index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\n\n\t\tif (nextToColumn && index > -1) {\n\n\t\t\tvar parentIndex = this.columns.indexOf(nextToColumn.getTopColumn());\n\n\t\t\tvar nextEl = nextToColumn.getElement();\n\n\t\t\tif (before) {\n\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\n\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\n\t\t\t} else {\n\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\n\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (before) {\n\n\t\t\t\tthis.columns.unshift(column);\n\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\n\t\t\t} else {\n\n\t\t\t\tthis.columns.push(column);\n\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\n\t\t\t}\n\n\t\t\tcolumn.columnRendered();\n\t\t}\n\n\t\treturn column;\n\t};\n\n\tColumnManager.prototype.registerColumnField = function (col) {\n\n\t\tif (col.definition.field) {\n\n\t\t\tthis.columnsByField[col.definition.field] = col;\n\t\t}\n\t};\n\n\tColumnManager.prototype.registerColumnPosition = function (col) {\n\n\t\tthis.columnsByIndex.push(col);\n\t};\n\n\tColumnManager.prototype._reIndexColumns = function () {\n\n\t\tthis.columnsByIndex = [];\n\n\t\tthis.columns.forEach(function (column) {\n\n\t\t\tcolumn.reRegisterPosition();\n\t\t});\n\t};\n\n\t//ensure column headers take up the correct amount of space in column groups\n\n\n\tColumnManager.prototype._verticalAlignHeaders = function () {\n\n\t\tvar self = this,\n\t\t minHeight = 0;\n\n\t\tself.columns.forEach(function (column) {\n\n\t\t\tvar height;\n\n\t\t\tcolumn.clearVerticalAlign();\n\n\t\t\theight = column.getHeight();\n\n\t\t\tif (height > minHeight) {\n\n\t\t\t\tminHeight = height;\n\t\t\t}\n\t\t});\n\n\t\tself.columns.forEach(function (column) {\n\n\t\t\tcolumn.verticalAlign(self.table.options.columnHeaderVertAlign, minHeight);\n\t\t});\n\n\t\tself.rowManager.adjustTableSize();\n\t};\n\n\t//////////////// Column Details /////////////////\n\n\n\tColumnManager.prototype.findColumn = function (subject) {\n\n\t\tvar self = this;\n\n\t\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\t\tif (subject instanceof Column) {\n\n\t\t\t\t//subject is column element\n\n\n\t\t\t\treturn subject;\n\t\t\t} else if (subject instanceof ColumnComponent) {\n\n\t\t\t\t//subject is public column component\n\n\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\n\t\t\t\t//subject is a HTML element of the column header\n\n\n\t\t\t\tvar match = self.columns.find(function (column) {\n\n\t\t\t\t\treturn column.element === subject;\n\t\t\t\t});\n\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t} else {\n\n\t\t\t//subject should be treated as the field name of the column\n\n\n\t\t\treturn this.columnsByField[subject] || false;\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\n\t\treturn false;\n\t};\n\n\tColumnManager.prototype.getColumnByField = function (field) {\n\n\t\treturn this.columnsByField[field];\n\t};\n\n\tColumnManager.prototype.getColumnsByFieldRoot = function (root) {\n\t\tvar _this = this;\n\n\t\tvar matches = [];\n\n\t\tObject.keys(this.columnsByField).forEach(function (field) {\n\n\t\t\tvar fieldRoot = field.split(\".\")[0];\n\n\t\t\tif (fieldRoot === root) {\n\n\t\t\t\tmatches.push(_this.columnsByField[field]);\n\t\t\t}\n\t\t});\n\n\t\treturn matches;\n\t};\n\n\tColumnManager.prototype.getColumnByIndex = function (index) {\n\n\t\treturn this.columnsByIndex[index];\n\t};\n\n\tColumnManager.prototype.getFirstVisibileColumn = function (index) {\n\n\t\tvar index = this.columnsByIndex.findIndex(function (col) {\n\n\t\t\treturn col.visible;\n\t\t});\n\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\n\t};\n\n\tColumnManager.prototype.getColumns = function () {\n\n\t\treturn this.columns;\n\t};\n\n\tColumnManager.prototype.findColumnIndex = function (column) {\n\n\t\treturn this.columnsByIndex.findIndex(function (col) {\n\n\t\t\treturn column === col;\n\t\t});\n\t};\n\n\t//return all columns that are not groups\n\n\n\tColumnManager.prototype.getRealColumns = function () {\n\n\t\treturn this.columnsByIndex;\n\t};\n\n\t//travers across columns and call action\n\n\n\tColumnManager.prototype.traverse = function (callback) {\n\n\t\tvar self = this;\n\n\t\tself.columnsByIndex.forEach(function (column, i) {\n\n\t\t\tcallback(column, i);\n\t\t});\n\t};\n\n\t//get defintions of actual columns\n\n\n\tColumnManager.prototype.getDefinitions = function (active) {\n\n\t\tvar self = this,\n\t\t output = [];\n\n\t\tself.columnsByIndex.forEach(function (column) {\n\n\t\t\tif (!active || active && column.visible) {\n\n\t\t\t\toutput.push(column.getDefinition());\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\t//get full nested definition tree\n\n\n\tColumnManager.prototype.getDefinitionTree = function () {\n\n\t\tvar self = this,\n\t\t output = [];\n\n\t\tself.columns.forEach(function (column) {\n\n\t\t\toutput.push(column.getDefinition(true));\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tColumnManager.prototype.getComponents = function (structured) {\n\n\t\tvar self = this,\n\t\t output = [],\n\t\t columns = structured ? self.columns : self.columnsByIndex;\n\n\t\tcolumns.forEach(function (column) {\n\n\t\t\toutput.push(column.getComponent());\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tColumnManager.prototype.getWidth = function () {\n\n\t\tvar width = 0;\n\n\t\tthis.columnsByIndex.forEach(function (column) {\n\n\t\t\tif (column.visible) {\n\n\t\t\t\twidth += column.getWidth();\n\t\t\t}\n\t\t});\n\n\t\treturn width;\n\t};\n\n\tColumnManager.prototype.moveColumn = function (from, to, after) {\n\n\t\tthis.moveColumnActual(from, to, after);\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.initialize();\n\t\t}\n\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t}\n\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\n\n\t\tif (after) {\n\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\n\t\t}\n\n\t\tthis._verticalAlignHeaders();\n\n\t\tthis.table.rowManager.reinitialize();\n\t};\n\n\tColumnManager.prototype.moveColumnActual = function (from, to, after) {\n\n\t\tif (from.parent.isGroup) {\n\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\n\t\t} else {\n\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\n\t\t}\n\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.initialize();\n\t\t}\n\n\t\tif (this.table.options.columnMoved) {\n\n\t\t\tthis.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents());\n\t\t}\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t}\n\t};\n\n\tColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) {\n\n\t\tvar fromIndex = columns.indexOf(from),\n\t\t toIndex;\n\n\t\tif (fromIndex > -1) {\n\n\t\t\tcolumns.splice(fromIndex, 1);\n\n\t\t\ttoIndex = columns.indexOf(to);\n\n\t\t\tif (toIndex > -1) {\n\n\t\t\t\tif (after) {\n\n\t\t\t\t\ttoIndex = toIndex + 1;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\ttoIndex = fromIndex;\n\t\t\t}\n\n\t\t\tcolumns.splice(toIndex, 0, from);\n\n\t\t\tif (updateRows) {\n\n\t\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\n\t\t\t\t\tif (row.cells.length) {\n\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\n\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) {\n\t\tvar _this2 = this;\n\n\t\tvar left = 0,\n\t\t offset = 0,\n\t\t adjust = 0,\n\t\t colEl = column.getElement();\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (typeof position === \"undefined\") {\n\n\t\t\t\tposition = _this2.table.options.scrollToColumnPosition;\n\t\t\t}\n\n\t\t\tif (typeof ifVisible === \"undefined\") {\n\n\t\t\t\tifVisible = _this2.table.options.scrollToColumnIfVisible;\n\t\t\t}\n\n\t\t\tif (column.visible) {\n\n\t\t\t\t//align to correct position\n\n\n\t\t\t\tswitch (position) {\n\n\t\t\t\t\tcase \"middle\":\n\n\t\t\t\t\tcase \"center\":\n\n\t\t\t\t\t\tadjust = -_this2.element.clientWidth / 2;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"right\":\n\n\t\t\t\t\t\tadjust = colEl.clientWidth - _this2.headersElement.clientWidth;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t//check column visibility\n\n\n\t\t\t\tif (!ifVisible) {\n\n\t\t\t\t\toffset = colEl.offsetLeft;\n\n\t\t\t\t\tif (offset > 0 && offset + colEl.offsetWidth < _this2.element.clientWidth) {\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//calculate scroll position\n\n\n\t\t\t\tleft = colEl.offsetLeft + _this2.element.scrollLeft + adjust;\n\n\t\t\t\tleft = Math.max(Math.min(left, _this2.table.rowManager.element.scrollWidth - _this2.table.rowManager.element.clientWidth), 0);\n\n\t\t\t\t_this2.table.rowManager.scrollHorizontal(left);\n\n\t\t\t\t_this2.scrollHorizontal(left);\n\n\t\t\t\tresolve();\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\n\n\t\t\t\treject(\"Scroll Error - Column not visible\");\n\t\t\t}\n\t\t});\n\t};\n\n\t//////////////// Cell Management /////////////////\n\n\n\tColumnManager.prototype.generateCells = function (row) {\n\n\t\tvar self = this;\n\n\t\tvar cells = [];\n\n\t\tself.columnsByIndex.forEach(function (column) {\n\n\t\t\tcells.push(column.generateCell(row));\n\t\t});\n\n\t\treturn cells;\n\t};\n\n\t//////////////// Column Management /////////////////\n\n\n\tColumnManager.prototype.getFlexBaseWidth = function () {\n\n\t\tvar self = this,\n\t\t totalWidth = self.table.element.clientWidth,\n\t\t //table element width\n\n\n\t\tfixedWidth = 0;\n\n\t\t//adjust for vertical scrollbar if present\n\n\n\t\tif (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) {\n\n\t\t\ttotalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth;\n\t\t}\n\n\t\tthis.columnsByIndex.forEach(function (column) {\n\n\t\t\tvar width, minWidth, colWidth;\n\n\t\t\tif (column.visible) {\n\n\t\t\t\twidth = column.definition.width || 0;\n\n\t\t\t\tminWidth = typeof column.minWidth == \"undefined\" ? self.table.options.columnMinWidth : parseInt(column.minWidth);\n\n\t\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = width;\n\t\t\t\t}\n\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\t\t\t}\n\t\t});\n\n\t\treturn fixedWidth;\n\t};\n\n\tColumnManager.prototype.addColumn = function (definition, before, nextToColumn) {\n\t\tvar _this3 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar column = _this3._addColumn(definition, before, nextToColumn);\n\n\t\t\t_this3._reIndexColumns();\n\n\t\t\tif (_this3.table.options.responsiveLayout && _this3.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\t_this3.table.modules.responsiveLayout.initialize();\n\t\t\t}\n\n\t\t\tif (_this3.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\t_this3.table.modules.columnCalcs.recalc(_this3.table.rowManager.activeRows);\n\t\t\t}\n\n\t\t\t_this3.redraw();\n\n\t\t\tif (_this3.table.modules.layout.getMode() != \"fitColumns\") {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t}\n\n\t\t\t_this3._verticalAlignHeaders();\n\n\t\t\t_this3.table.rowManager.reinitialize();\n\n\t\t\tresolve(column);\n\t\t});\n\t};\n\n\t//remove column from system\n\n\n\tColumnManager.prototype.deregisterColumn = function (column) {\n\n\t\tvar field = column.getField(),\n\t\t index;\n\n\t\t//remove from field list\n\n\n\t\tif (field) {\n\n\t\t\tdelete this.columnsByField[field];\n\t\t}\n\n\t\t//remove from index list\n\n\n\t\tindex = this.columnsByIndex.indexOf(column);\n\n\t\tif (index > -1) {\n\n\t\t\tthis.columnsByIndex.splice(index, 1);\n\t\t}\n\n\t\t//remove from column list\n\n\n\t\tindex = this.columns.indexOf(column);\n\n\t\tif (index > -1) {\n\n\t\t\tthis.columns.splice(index, 1);\n\t\t}\n\n\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\tthis.table.modules.responsiveLayout.initialize();\n\t\t}\n\n\t\tthis.redraw();\n\t};\n\n\t//redraw columns\n\n\n\tColumnManager.prototype.redraw = function (force) {\n\n\t\tif (force) {\n\n\t\t\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\n\t\t\t\tthis._verticalAlignHeaders();\n\t\t\t}\n\n\t\t\tthis.table.rowManager.resetScroll();\n\n\t\t\tthis.table.rowManager.reinitialize();\n\t\t}\n\n\t\tif ([\"fitColumns\", \"fitDataStretch\"].indexOf(this.table.modules.layout.getMode()) > -1) {\n\n\t\t\tthis.table.modules.layout.layout();\n\t\t} else {\n\n\t\t\tif (force) {\n\n\t\t\t\tthis.table.modules.layout.layout();\n\t\t\t} else {\n\n\t\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t}\n\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t}\n\n\t\tif (force) {\n\n\t\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t\t}\n\n\t\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\tthis.table.modules.columnCalcs.redraw();\n\t\t\t}\n\t\t}\n\n\t\tthis.table.footerManager.redraw();\n\t};\n\n\t//public column object\n\n\tvar ColumnComponent = function ColumnComponent(column) {\n\n\t\tthis._column = column;\n\n\t\tthis.type = \"ColumnComponent\";\n\t};\n\n\tColumnComponent.prototype.getElement = function () {\n\n\t\treturn this._column.getElement();\n\t};\n\n\tColumnComponent.prototype.getDefinition = function () {\n\n\t\treturn this._column.getDefinition();\n\t};\n\n\tColumnComponent.prototype.getField = function () {\n\n\t\treturn this._column.getField();\n\t};\n\n\tColumnComponent.prototype.getCells = function () {\n\n\t\tvar cells = [];\n\n\t\tthis._column.cells.forEach(function (cell) {\n\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t};\n\n\tColumnComponent.prototype.getVisibility = function () {\n\n\t\treturn this._column.visible;\n\t};\n\n\tColumnComponent.prototype.show = function () {\n\n\t\tif (this._column.isGroup) {\n\n\t\t\tthis._column.columns.forEach(function (column) {\n\n\t\t\t\tcolumn.show();\n\t\t\t});\n\t\t} else {\n\n\t\t\tthis._column.show();\n\t\t}\n\t};\n\n\tColumnComponent.prototype.hide = function () {\n\n\t\tif (this._column.isGroup) {\n\n\t\t\tthis._column.columns.forEach(function (column) {\n\n\t\t\t\tcolumn.hide();\n\t\t\t});\n\t\t} else {\n\n\t\t\tthis._column.hide();\n\t\t}\n\t};\n\n\tColumnComponent.prototype.toggle = function () {\n\n\t\tif (this._column.visible) {\n\n\t\t\tthis.hide();\n\t\t} else {\n\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tColumnComponent.prototype.delete = function () {\n\n\t\treturn this._column.delete();\n\t};\n\n\tColumnComponent.prototype.getSubColumns = function () {\n\n\t\tvar output = [];\n\n\t\tif (this._column.columns.length) {\n\n\t\t\tthis._column.columns.forEach(function (column) {\n\n\t\t\t\toutput.push(column.getComponent());\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tColumnComponent.prototype.getParentColumn = function () {\n\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\n\t};\n\n\tColumnComponent.prototype._getSelf = function () {\n\n\t\treturn this._column;\n\t};\n\n\tColumnComponent.prototype.scrollTo = function () {\n\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\n\t};\n\n\tColumnComponent.prototype.getTable = function () {\n\n\t\treturn this._column.table;\n\t};\n\n\tColumnComponent.prototype.headerFilterFocus = function () {\n\n\t\tif (this._column.table.modExists(\"filter\", true)) {\n\n\t\t\tthis._column.table.modules.filter.setHeaderFilterFocus(this._column);\n\t\t}\n\t};\n\n\tColumnComponent.prototype.reloadHeaderFilter = function () {\n\n\t\tif (this._column.table.modExists(\"filter\", true)) {\n\n\t\t\tthis._column.table.modules.filter.reloadHeaderFilter(this._column);\n\t\t}\n\t};\n\n\tColumnComponent.prototype.getHeaderFilterValue = function () {\n\n\t\tif (this._column.table.modExists(\"filter\", true)) {\n\n\t\t\tthis._column.table.modules.filter.getHeaderFilterValue(this._column);\n\t\t}\n\t};\n\n\tColumnComponent.prototype.setHeaderFilterValue = function (value) {\n\n\t\tif (this._column.table.modExists(\"filter\", true)) {\n\n\t\t\tthis._column.table.modules.filter.setHeaderFilterValue(this._column, value);\n\t\t}\n\t};\n\n\tColumnComponent.prototype.move = function (to, after) {\n\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\n\n\t\tif (toColumn) {\n\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after);\n\t\t} else {\n\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t}\n\t};\n\n\tColumnComponent.prototype.getNextColumn = function () {\n\n\t\tvar nextCol = this._column.nextColumn();\n\n\t\treturn nextCol ? nextCol.getComponent() : false;\n\t};\n\n\tColumnComponent.prototype.getPrevColumn = function () {\n\n\t\tvar prevCol = this._column.prevColumn();\n\n\t\treturn prevCol ? prevCol.getComponent() : false;\n\t};\n\n\tColumnComponent.prototype.updateDefinition = function (updates) {\n\n\t\treturn this._column.updateDefinition(updates);\n\t};\n\n\tvar Column = function Column(def, parent) {\n\n\t\tvar self = this;\n\n\t\tthis.table = parent.table;\n\n\t\tthis.definition = def; //column definition\n\n\t\tthis.parent = parent; //hold parent object\n\n\t\tthis.type = \"column\"; //type of element\n\n\t\tthis.columns = []; //child columns\n\n\t\tthis.cells = []; //cells bound to this column\n\n\t\tthis.element = this.createElement(); //column header element\n\n\t\tthis.contentElement = false;\n\n\t\tthis.titleElement = false;\n\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\n\n\t\tthis.isGroup = false;\n\n\t\tthis.tooltip = false; //hold column tooltip\n\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\n\n\t\tthis.vertAlign = \"\"; //vert text alignment\n\n\n\t\t//multi dimensional filed handling\n\n\t\tthis.field = \"\";\n\n\t\tthis.fieldStructure = \"\";\n\n\t\tthis.getFieldValue = \"\";\n\n\t\tthis.setFieldValue = \"\";\n\n\t\tthis.titleFormatterRendered = false;\n\n\t\tthis.setField(this.definition.field);\n\n\t\tif (this.table.options.invalidOptionWarnings) {\n\n\t\t\tthis.checkDefinition();\n\t\t}\n\n\t\tthis.modules = {}; //hold module variables;\n\n\n\t\tthis.cellEvents = {\n\n\t\t\tcellClick: false,\n\n\t\t\tcellDblClick: false,\n\n\t\t\tcellContext: false,\n\n\t\t\tcellTap: false,\n\n\t\t\tcellDblTap: false,\n\n\t\t\tcellTapHold: false,\n\n\t\t\tcellMouseEnter: false,\n\n\t\t\tcellMouseLeave: false,\n\n\t\t\tcellMouseOver: false,\n\n\t\t\tcellMouseOut: false,\n\n\t\t\tcellMouseMove: false\n\n\t\t};\n\n\t\tthis.width = null; //column width\n\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\n\n\t\tthis.minWidth = null; //column minimum width\n\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\n\n\t\tthis.widthFixed = false; //user has specified a width for this column\n\n\n\t\tthis.visible = true; //default visible state\n\n\n\t\tthis._mapDepricatedFunctionality();\n\n\t\t//initialize column\n\n\t\tif (def.columns) {\n\n\t\t\tthis.isGroup = true;\n\n\t\t\tdef.columns.forEach(function (def, i) {\n\n\t\t\t\tvar newCol = new Column(def, self);\n\n\t\t\t\tself.attachColumn(newCol);\n\t\t\t});\n\n\t\t\tself.checkColumnVisibility();\n\t\t} else {\n\n\t\t\tparent.registerColumnField(this);\n\t\t}\n\n\t\tif (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists(\"moveRow\")) {\n\n\t\t\tthis.table.modules.moveRow.setHandle(true);\n\t\t}\n\n\t\tthis._buildHeader();\n\n\t\tthis.bindModuleColumns();\n\t};\n\n\tColumn.prototype.createElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col\");\n\n\t\tel.setAttribute(\"role\", \"columnheader\");\n\n\t\tel.setAttribute(\"aria-sort\", \"none\");\n\n\t\treturn el;\n\t};\n\n\tColumn.prototype.createGroupElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col-group-cols\");\n\n\t\treturn el;\n\t};\n\n\tColumn.prototype.checkDefinition = function () {\n\t\tvar _this4 = this;\n\n\t\tObject.keys(this.definition).forEach(function (key) {\n\n\t\t\tif (_this4.defaultOptionList.indexOf(key) === -1) {\n\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (_this4.field || _this4.definition.title) + \"' column:\", key);\n\t\t\t}\n\t\t});\n\t};\n\n\tColumn.prototype.setField = function (field) {\n\n\t\tthis.field = field;\n\n\t\tthis.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : [];\n\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\n\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\n\t};\n\n\t//register column position with column manager\n\n\tColumn.prototype.registerColumnPosition = function (column) {\n\n\t\tthis.parent.registerColumnPosition(column);\n\t};\n\n\t//register column position with column manager\n\n\tColumn.prototype.registerColumnField = function (column) {\n\n\t\tthis.parent.registerColumnField(column);\n\t};\n\n\t//trigger position registration\n\n\tColumn.prototype.reRegisterPosition = function () {\n\n\t\tif (this.isGroup) {\n\n\t\t\tthis.columns.forEach(function (column) {\n\n\t\t\t\tcolumn.reRegisterPosition();\n\t\t\t});\n\t\t} else {\n\n\t\t\tthis.registerColumnPosition(this);\n\t\t}\n\t};\n\n\tColumn.prototype._mapDepricatedFunctionality = function () {\n\n\t\tif (typeof this.definition.hideInHtml !== \"undefined\") {\n\n\t\t\tthis.definition.htmlOutput = !this.definition.hideInHtml;\n\n\t\t\tconsole.warn(\"hideInHtml column definition property is deprecated, you should now use htmlOutput\");\n\t\t}\n\n\t\tif (typeof this.definition.align !== \"undefined\") {\n\n\t\t\tthis.definition.hozAlign = this.definition.align;\n\n\t\t\tconsole.warn(\"align column definition property is deprecated, you should now use hozAlign\");\n\t\t}\n\t};\n\n\tColumn.prototype.setTooltip = function () {\n\n\t\tvar self = this,\n\t\t def = self.definition;\n\n\t\t//set header tooltips\n\n\t\tvar tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader;\n\n\t\tif (tooltip) {\n\n\t\t\tif (tooltip === true) {\n\n\t\t\t\tif (def.field) {\n\n\t\t\t\t\tself.table.modules.localize.bind(\"columns|\" + def.field, function (value) {\n\n\t\t\t\t\t\tself.element.setAttribute(\"title\", value || def.title);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\n\t\t\t\t\tself.element.setAttribute(\"title\", def.title);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tif (typeof tooltip == \"function\") {\n\n\t\t\t\t\ttooltip = tooltip(self.getComponent());\n\n\t\t\t\t\tif (tooltip === false) {\n\n\t\t\t\t\t\ttooltip = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.element.setAttribute(\"title\", tooltip);\n\t\t\t}\n\t\t} else {\n\n\t\t\tself.element.setAttribute(\"title\", \"\");\n\t\t}\n\t};\n\n\t//build header element\n\n\tColumn.prototype._buildHeader = function () {\n\n\t\tvar self = this,\n\t\t def = self.definition;\n\n\t\twhile (self.element.firstChild) {\n\t\t\tself.element.removeChild(self.element.firstChild);\n\t\t}if (def.headerVertical) {\n\n\t\t\tself.element.classList.add(\"tabulator-col-vertical\");\n\n\t\t\tif (def.headerVertical === \"flip\") {\n\n\t\t\t\tself.element.classList.add(\"tabulator-col-vertical-flip\");\n\t\t\t}\n\t\t}\n\n\t\tself.contentElement = self._bindEvents();\n\n\t\tself.contentElement = self._buildColumnHeaderContent();\n\n\t\tself.element.appendChild(self.contentElement);\n\n\t\tif (self.isGroup) {\n\n\t\t\tself._buildGroupHeader();\n\t\t} else {\n\n\t\t\tself._buildColumnHeader();\n\t\t}\n\n\t\tself.setTooltip();\n\n\t\t//set resizable handles\n\n\t\tif (self.table.options.resizableColumns && self.table.modExists(\"resizeColumns\")) {\n\n\t\t\tself.table.modules.resizeColumns.initializeColumn(\"header\", self, self.element);\n\t\t}\n\n\t\t//set resizable handles\n\n\t\tif (def.headerFilter && self.table.modExists(\"filter\") && self.table.modExists(\"edit\")) {\n\n\t\t\tif (typeof def.headerFilterPlaceholder !== \"undefined\" && def.field) {\n\n\t\t\t\tself.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\n\t\t\t}\n\n\t\t\tself.table.modules.filter.initializeColumn(self);\n\t\t}\n\n\t\t//set resizable handles\n\n\t\tif (self.table.modExists(\"frozenColumns\")) {\n\n\t\t\tself.table.modules.frozenColumns.initializeColumn(self);\n\t\t}\n\n\t\t//set movable column\n\n\t\tif (self.table.options.movableColumns && !self.isGroup && self.table.modExists(\"moveColumn\")) {\n\n\t\t\tself.table.modules.moveColumn.initializeColumn(self);\n\t\t}\n\n\t\t//set calcs column\n\n\t\tif ((def.topCalc || def.bottomCalc) && self.table.modExists(\"columnCalcs\")) {\n\n\t\t\tself.table.modules.columnCalcs.initializeColumn(self);\n\t\t}\n\n\t\t//handle persistence\n\n\t\tif (self.table.modExists(\"persistence\") && self.table.modules.persistence.config.columns) {\n\n\t\t\tself.table.modules.persistence.initializeColumn(self);\n\t\t}\n\n\t\t//update header tooltip on mouse enter\n\n\t\tself.element.addEventListener(\"mouseenter\", function (e) {\n\n\t\t\tself.setTooltip();\n\t\t});\n\t};\n\n\tColumn.prototype._bindEvents = function () {\n\n\t\tvar self = this,\n\t\t def = self.definition,\n\t\t dblTap,\n\t\t tapHold,\n\t\t tap;\n\n\t\t//setup header click event bindings\n\n\t\tif (typeof def.headerClick == \"function\") {\n\n\t\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\t\tdef.headerClick(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (typeof def.headerDblClick == \"function\") {\n\n\t\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\t\tdef.headerDblClick(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (typeof def.headerContext == \"function\") {\n\n\t\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\t\tdef.headerContext(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\t//setup header tap event bindings\n\n\t\tif (typeof def.headerTap == \"function\") {\n\n\t\t\ttap = false;\n\n\t\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\n\t\t\t\ttap = true;\n\t\t\t}, { passive: true });\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tif (tap) {\n\n\t\t\t\t\tdef.headerTap(e, self.getComponent());\n\t\t\t\t}\n\n\t\t\t\ttap = false;\n\t\t\t});\n\t\t}\n\n\t\tif (typeof def.headerDblTap == \"function\") {\n\n\t\t\tdblTap = null;\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tif (dblTap) {\n\n\t\t\t\t\tclearTimeout(dblTap);\n\n\t\t\t\t\tdblTap = null;\n\n\t\t\t\t\tdef.headerDblTap(e, self.getComponent());\n\t\t\t\t} else {\n\n\t\t\t\t\tdblTap = setTimeout(function () {\n\n\t\t\t\t\t\tclearTimeout(dblTap);\n\n\t\t\t\t\t\tdblTap = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (typeof def.headerTapHold == \"function\") {\n\n\t\t\ttapHold = null;\n\n\t\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\n\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\ttapHold = setTimeout(function () {\n\n\t\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\t\ttapHold = null;\n\n\t\t\t\t\ttap = false;\n\n\t\t\t\t\tdef.headerTapHold(e, self.getComponent());\n\t\t\t\t}, 1000);\n\t\t\t}, { passive: true });\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\ttapHold = null;\n\t\t\t});\n\t\t}\n\n\t\t//store column cell click event bindings\n\n\t\tif (typeof def.cellClick == \"function\") {\n\n\t\t\tself.cellEvents.cellClick = def.cellClick;\n\t\t}\n\n\t\tif (typeof def.cellDblClick == \"function\") {\n\n\t\t\tself.cellEvents.cellDblClick = def.cellDblClick;\n\t\t}\n\n\t\tif (typeof def.cellContext == \"function\") {\n\n\t\t\tself.cellEvents.cellContext = def.cellContext;\n\t\t}\n\n\t\t//store column mouse event bindings\n\n\t\tif (typeof def.cellMouseEnter == \"function\") {\n\n\t\t\tself.cellEvents.cellMouseEnter = def.cellMouseEnter;\n\t\t}\n\n\t\tif (typeof def.cellMouseLeave == \"function\") {\n\n\t\t\tself.cellEvents.cellMouseLeave = def.cellMouseLeave;\n\t\t}\n\n\t\tif (typeof def.cellMouseOver == \"function\") {\n\n\t\t\tself.cellEvents.cellMouseOver = def.cellMouseOver;\n\t\t}\n\n\t\tif (typeof def.cellMouseOut == \"function\") {\n\n\t\t\tself.cellEvents.cellMouseOut = def.cellMouseOut;\n\t\t}\n\n\t\tif (typeof def.cellMouseMove == \"function\") {\n\n\t\t\tself.cellEvents.cellMouseMove = def.cellMouseMove;\n\t\t}\n\n\t\t//setup column cell tap event bindings\n\n\t\tif (typeof def.cellTap == \"function\") {\n\n\t\t\tself.cellEvents.cellTap = def.cellTap;\n\t\t}\n\n\t\tif (typeof def.cellDblTap == \"function\") {\n\n\t\t\tself.cellEvents.cellDblTap = def.cellDblTap;\n\t\t}\n\n\t\tif (typeof def.cellTapHold == \"function\") {\n\n\t\t\tself.cellEvents.cellTapHold = def.cellTapHold;\n\t\t}\n\n\t\t//setup column cell edit callbacks\n\n\t\tif (typeof def.cellEdited == \"function\") {\n\n\t\t\tself.cellEvents.cellEdited = def.cellEdited;\n\t\t}\n\n\t\tif (typeof def.cellEditing == \"function\") {\n\n\t\t\tself.cellEvents.cellEditing = def.cellEditing;\n\t\t}\n\n\t\tif (typeof def.cellEditCancelled == \"function\") {\n\n\t\t\tself.cellEvents.cellEditCancelled = def.cellEditCancelled;\n\t\t}\n\t};\n\n\t//build header element for header\n\n\tColumn.prototype._buildColumnHeader = function () {\n\n\t\tvar self = this,\n\t\t def = self.definition,\n\t\t table = self.table,\n\t\t sortable;\n\n\t\t//set column sorter\n\n\t\tif (table.modExists(\"sort\")) {\n\n\t\t\ttable.modules.sort.initializeColumn(self, self.contentElement);\n\t\t}\n\n\t\t//set column header context menu\n\n\t\tif ((def.headerContextMenu || def.headerMenu) && table.modExists(\"menu\")) {\n\n\t\t\ttable.modules.menu.initializeColumnHeader(self);\n\t\t}\n\n\t\t//set column formatter\n\n\t\tif (table.modExists(\"format\")) {\n\n\t\t\ttable.modules.format.initializeColumn(self);\n\t\t}\n\n\t\t//set column editor\n\n\t\tif (typeof def.editor != \"undefined\" && table.modExists(\"edit\")) {\n\n\t\t\ttable.modules.edit.initializeColumn(self);\n\t\t}\n\n\t\t//set colum validator\n\n\t\tif (typeof def.validator != \"undefined\" && table.modExists(\"validate\")) {\n\n\t\t\ttable.modules.validate.initializeColumn(self);\n\t\t}\n\n\t\t//set column mutator\n\n\t\tif (table.modExists(\"mutator\")) {\n\n\t\t\ttable.modules.mutator.initializeColumn(self);\n\t\t}\n\n\t\t//set column accessor\n\n\t\tif (table.modExists(\"accessor\")) {\n\n\t\t\ttable.modules.accessor.initializeColumn(self);\n\t\t}\n\n\t\t//set respoviveLayout\n\n\t\tif (_typeof(table.options.responsiveLayout) && table.modExists(\"responsiveLayout\")) {\n\n\t\t\ttable.modules.responsiveLayout.initializeColumn(self);\n\t\t}\n\n\t\t//set column visibility\n\n\t\tif (typeof def.visible != \"undefined\") {\n\n\t\t\tif (def.visible) {\n\n\t\t\t\tself.show(true);\n\t\t\t} else {\n\n\t\t\t\tself.hide(true);\n\t\t\t}\n\t\t}\n\n\t\t//asign additional css classes to column header\n\n\t\tif (def.cssClass) {\n\n\t\t\tvar classeNames = def.cssClass.split(\" \");\n\n\t\t\tclasseNames.forEach(function (className) {\n\n\t\t\t\tself.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tif (def.field) {\n\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\n\t\t}\n\n\t\t//set min width if present\n\n\t\tself.setMinWidth(typeof def.minWidth == \"undefined\" ? self.table.options.columnMinWidth : parseInt(def.minWidth));\n\n\t\tself.reinitializeWidth();\n\n\t\t//set tooltip if present\n\n\t\tself.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips;\n\n\t\t//set orizontal text alignment\n\n\t\tself.hozAlign = typeof self.definition.hozAlign == \"undefined\" ? self.table.options.cellHozAlign : self.definition.hozAlign;\n\n\t\tself.vertAlign = typeof self.definition.vertAlign == \"undefined\" ? self.table.options.cellVertAlign : self.definition.vertAlign;\n\t};\n\n\tColumn.prototype._buildColumnHeaderContent = function () {\n\n\t\tvar def = self.definition,\n\t\t table = self.table;\n\n\t\tvar contentElement = document.createElement(\"div\");\n\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\n\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\n\n\t\tcontentElement.appendChild(this.titleElement);\n\n\t\treturn contentElement;\n\t};\n\n\t//build title element of column\n\n\tColumn.prototype._buildColumnHeaderTitle = function () {\n\n\t\tvar self = this,\n\t\t def = self.definition,\n\t\t table = self.table,\n\t\t title;\n\n\t\tvar titleHolderElement = document.createElement(\"div\");\n\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\n\n\t\tif (def.editableTitle) {\n\n\t\t\tvar titleElement = document.createElement(\"input\");\n\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\n\n\t\t\ttitleElement.addEventListener(\"click\", function (e) {\n\n\t\t\t\te.stopPropagation();\n\n\t\t\t\ttitleElement.focus();\n\t\t\t});\n\n\t\t\ttitleElement.addEventListener(\"change\", function () {\n\n\t\t\t\tdef.title = titleElement.value;\n\n\t\t\t\ttable.options.columnTitleChanged.call(self.table, self.getComponent());\n\t\t\t});\n\n\t\t\ttitleHolderElement.appendChild(titleElement);\n\n\t\t\tif (def.field) {\n\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\n\t\t\t\t\ttitleElement.value = text || def.title || \" \";\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\ttitleElement.value = def.title || \" \";\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (def.field) {\n\n\t\t\t\ttable.modules.localize.bind(\"columns|\" + def.field, function (text) {\n\n\t\t\t\t\tself._formatColumnHeaderTitle(titleHolderElement, text || def.title || \" \");\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tself._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\n\t\t\t}\n\t\t}\n\n\t\treturn titleHolderElement;\n\t};\n\n\tColumn.prototype._formatColumnHeaderTitle = function (el, title) {\n\t\tvar _this5 = this;\n\n\t\tvar formatter, contents, params, mockCell, onRendered;\n\n\t\tif (this.definition.titleFormatter && this.table.modExists(\"format\")) {\n\n\t\t\tformatter = this.table.modules.format.getFormatter(this.definition.titleFormatter);\n\n\t\t\tonRendered = function onRendered(callback) {\n\n\t\t\t\t_this5.titleFormatterRendered = callback;\n\t\t\t};\n\n\t\t\tmockCell = {\n\n\t\t\t\tgetValue: function getValue() {\n\n\t\t\t\t\treturn title;\n\t\t\t\t},\n\n\t\t\t\tgetElement: function getElement() {\n\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tparams = this.definition.titleFormatterParams || {};\n\n\t\t\tparams = typeof params === \"function\" ? params() : params;\n\n\t\t\tcontents = formatter.call(this.table.modules.format, mockCell, params, onRendered);\n\n\t\t\tswitch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) {\n\n\t\t\t\tcase \"object\":\n\n\t\t\t\t\tif (contents instanceof Node) {\n\n\t\t\t\t\t\tel.appendChild(contents);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tel.innerHTML = \"\";\n\n\t\t\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"undefined\":\n\n\t\t\t\tcase \"null\":\n\n\t\t\t\t\tel.innerHTML = \"\";\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tel.innerHTML = contents;\n\n\t\t\t}\n\t\t} else {\n\n\t\t\tel.innerHTML = title;\n\t\t}\n\t};\n\n\t//build header element for column group\n\n\tColumn.prototype._buildGroupHeader = function () {\n\t\tvar _this6 = this;\n\n\t\tthis.element.classList.add(\"tabulator-col-group\");\n\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\n\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\n\n\t\t//asign additional css classes to column header\n\n\t\tif (this.definition.cssClass) {\n\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\n\n\t\t\tclasseNames.forEach(function (className) {\n\n\t\t\t\t_this6.element.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\tthis.element.appendChild(this.groupElement);\n\t};\n\n\t//flat field lookup\n\n\tColumn.prototype._getFlatData = function (data) {\n\n\t\treturn data[this.field];\n\t};\n\n\t//nested field lookup\n\n\tColumn.prototype._getNestedData = function (data) {\n\n\t\tvar dataObj = data,\n\t\t structure = this.fieldStructure,\n\t\t length = structure.length,\n\t\t output;\n\n\t\tfor (var i = 0; i < length; i++) {\n\n\t\t\tdataObj = dataObj[structure[i]];\n\n\t\t\toutput = dataObj;\n\n\t\t\tif (!dataObj) {\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t};\n\n\t//flat field set\n\n\tColumn.prototype._setFlatData = function (data, value) {\n\n\t\tif (this.field) {\n\n\t\t\tdata[this.field] = value;\n\t\t}\n\t};\n\n\t//nested field set\n\n\tColumn.prototype._setNestedData = function (data, value) {\n\n\t\tvar dataObj = data,\n\t\t structure = this.fieldStructure,\n\t\t length = structure.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\n\t\t\tif (i == length - 1) {\n\n\t\t\t\tdataObj[structure[i]] = value;\n\t\t\t} else {\n\n\t\t\t\tif (!dataObj[structure[i]]) {\n\n\t\t\t\t\tif (typeof value !== \"undefined\") {\n\n\t\t\t\t\t\tdataObj[structure[i]] = {};\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdataObj = dataObj[structure[i]];\n\t\t\t}\n\t\t}\n\t};\n\n\t//attach column to this group\n\n\tColumn.prototype.attachColumn = function (column) {\n\n\t\tvar self = this;\n\n\t\tif (self.groupElement) {\n\n\t\t\tself.columns.push(column);\n\n\t\t\tself.groupElement.appendChild(column.getElement());\n\t\t} else {\n\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\n\t\t}\n\t};\n\n\t//vertically align header in column\n\n\tColumn.prototype.verticalAlign = function (alignment, height) {\n\n\t\t//calculate height of column header and group holder element\n\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight;\n\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\n\n\n\t\tthis.element.style.height = parentHeight + \"px\";\n\n\t\tif (this.isGroup) {\n\n\t\t\tthis.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + \"px\";\n\t\t}\n\n\t\t//vertically align cell contents\n\n\t\tif (!this.isGroup && alignment !== \"top\") {\n\n\t\t\tif (alignment === \"bottom\") {\n\n\t\t\t\tthis.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + \"px\";\n\t\t\t} else {\n\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + \"px\";\n\t\t\t}\n\t\t}\n\n\t\tthis.columns.forEach(function (column) {\n\n\t\t\tcolumn.verticalAlign(alignment);\n\t\t});\n\t};\n\n\t//clear vertical alignmenet\n\n\tColumn.prototype.clearVerticalAlign = function () {\n\n\t\tthis.element.style.paddingTop = \"\";\n\n\t\tthis.element.style.height = \"\";\n\n\t\tthis.element.style.minHeight = \"\";\n\n\t\tthis.groupElement.style.minHeight = \"\";\n\n\t\tthis.columns.forEach(function (column) {\n\n\t\t\tcolumn.clearVerticalAlign();\n\t\t});\n\t};\n\n\tColumn.prototype.bindModuleColumns = function () {\n\n\t\t//check if rownum formatter is being used on a column\n\n\t\tif (this.definition.formatter == \"rownum\") {\n\n\t\t\tthis.table.rowManager.rowNumColumn = this;\n\t\t}\n\t};\n\n\t//// Retreive Column Information ////\n\n\n\t//return column header element\n\n\tColumn.prototype.getElement = function () {\n\n\t\treturn this.element;\n\t};\n\n\t//return colunm group element\n\n\tColumn.prototype.getGroupElement = function () {\n\n\t\treturn this.groupElement;\n\t};\n\n\t//return field name\n\n\tColumn.prototype.getField = function () {\n\n\t\treturn this.field;\n\t};\n\n\t//return the first column in a group\n\n\tColumn.prototype.getFirstColumn = function () {\n\n\t\tif (!this.isGroup) {\n\n\t\t\treturn this;\n\t\t} else {\n\n\t\t\tif (this.columns.length) {\n\n\t\t\t\treturn this.columns[0].getFirstColumn();\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\t//return the last column in a group\n\n\tColumn.prototype.getLastColumn = function () {\n\n\t\tif (!this.isGroup) {\n\n\t\t\treturn this;\n\t\t} else {\n\n\t\t\tif (this.columns.length) {\n\n\t\t\t\treturn this.columns[this.columns.length - 1].getLastColumn();\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\t//return all columns in a group\n\n\tColumn.prototype.getColumns = function () {\n\n\t\treturn this.columns;\n\t};\n\n\t//return all columns in a group\n\n\tColumn.prototype.getCells = function () {\n\n\t\treturn this.cells;\n\t};\n\n\t//retreive the top column in a group of columns\n\n\tColumn.prototype.getTopColumn = function () {\n\n\t\tif (this.parent.isGroup) {\n\n\t\t\treturn this.parent.getTopColumn();\n\t\t} else {\n\n\t\t\treturn this;\n\t\t}\n\t};\n\n\t//return column definition object\n\n\tColumn.prototype.getDefinition = function (updateBranches) {\n\n\t\tvar colDefs = [];\n\n\t\tif (this.isGroup && updateBranches) {\n\n\t\t\tthis.columns.forEach(function (column) {\n\n\t\t\t\tcolDefs.push(column.getDefinition(true));\n\t\t\t});\n\n\t\t\tthis.definition.columns = colDefs;\n\t\t}\n\n\t\treturn this.definition;\n\t};\n\n\t//////////////////// Actions ////////////////////\n\n\n\tColumn.prototype.checkColumnVisibility = function () {\n\n\t\tvar visible = false;\n\n\t\tthis.columns.forEach(function (column) {\n\n\t\t\tif (column.visible) {\n\n\t\t\t\tvisible = true;\n\t\t\t}\n\t\t});\n\n\t\tif (visible) {\n\n\t\t\tthis.show();\n\n\t\t\tthis.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t\t} else {\n\n\t\t\tthis.hide();\n\t\t}\n\t};\n\n\t//show column\n\n\tColumn.prototype.show = function (silent, responsiveToggle) {\n\n\t\tif (!this.visible) {\n\n\t\t\tthis.visible = true;\n\n\t\t\tthis.element.style.display = \"\";\n\n\t\t\tif (this.parent.isGroup) {\n\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function (cell) {\n\n\t\t\t\tcell.show();\n\t\t\t});\n\n\t\t\tif (!this.isGroup && this.width === null) {\n\n\t\t\t\tthis.reinitializeWidth();\n\t\t\t}\n\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t\t}\n\n\t\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true);\n\t\t\t}\n\n\t\t\tif (this.parent.isGroup) {\n\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t};\n\n\t//hide column\n\n\tColumn.prototype.hide = function (silent, responsiveToggle) {\n\n\t\tif (this.visible) {\n\n\t\t\tthis.visible = false;\n\n\t\t\tthis.element.style.display = \"none\";\n\n\t\t\tthis.table.columnManager._verticalAlignHeaders();\n\n\t\t\tif (this.parent.isGroup) {\n\n\t\t\t\tthis.parent.checkColumnVisibility();\n\t\t\t}\n\n\t\t\tthis.cells.forEach(function (cell) {\n\n\t\t\t\tcell.hide();\n\t\t\t});\n\n\t\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.columns) {\n\n\t\t\t\tthis.table.modules.persistence.save(\"columns\");\n\t\t\t}\n\n\t\t\tif (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible);\n\t\t\t}\n\n\t\t\tif (!silent) {\n\n\t\t\t\tthis.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false);\n\t\t\t}\n\n\t\t\tif (this.parent.isGroup) {\n\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t};\n\n\tColumn.prototype.matchChildWidths = function () {\n\n\t\tvar childWidth = 0;\n\n\t\tif (this.contentElement && this.columns.length) {\n\n\t\t\tthis.columns.forEach(function (column) {\n\n\t\t\t\tif (column.visible) {\n\n\t\t\t\t\tchildWidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.contentElement.style.maxWidth = childWidth - 1 + \"px\";\n\n\t\t\tif (this.parent.isGroup) {\n\n\t\t\t\tthis.parent.matchChildWidths();\n\t\t\t}\n\t\t}\n\t};\n\n\tColumn.prototype.setWidth = function (width) {\n\n\t\tthis.widthFixed = true;\n\n\t\tthis.setWidthActual(width);\n\t};\n\n\tColumn.prototype.setWidthActual = function (width) {\n\n\t\tif (isNaN(width)) {\n\n\t\t\twidth = Math.floor(this.table.element.clientWidth / 100 * parseInt(width));\n\t\t}\n\n\t\twidth = Math.max(this.minWidth, width);\n\n\t\tthis.width = width;\n\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\n\n\t\tthis.element.style.width = this.widthStyled;\n\n\t\tif (!this.isGroup) {\n\n\t\t\tthis.cells.forEach(function (cell) {\n\n\t\t\t\tcell.setWidth();\n\t\t\t});\n\t\t}\n\n\t\tif (this.parent.isGroup) {\n\n\t\t\tthis.parent.matchChildWidths();\n\t\t}\n\n\t\t//set resizable handles\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t}\n\t};\n\n\tColumn.prototype.checkCellHeights = function () {\n\n\t\tvar rows = [];\n\n\t\tthis.cells.forEach(function (cell) {\n\n\t\t\tif (cell.row.heightInitialized) {\n\n\t\t\t\tif (cell.row.getElement().offsetParent !== null) {\n\n\t\t\t\t\trows.push(cell.row);\n\n\t\t\t\t\tcell.row.clearCellHeight();\n\t\t\t\t} else {\n\n\t\t\t\t\tcell.row.heightInitialized = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\trows.forEach(function (row) {\n\n\t\t\trow.calcHeight();\n\t\t});\n\n\t\trows.forEach(function (row) {\n\n\t\t\trow.setCellHeight();\n\t\t});\n\t};\n\n\tColumn.prototype.getWidth = function () {\n\n\t\tvar width = 0;\n\n\t\tif (this.isGroup) {\n\n\t\t\tthis.columns.forEach(function (column) {\n\n\t\t\t\tif (column.visible) {\n\n\t\t\t\t\twidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\n\t\t\twidth = this.width;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tColumn.prototype.getHeight = function () {\n\n\t\treturn this.element.offsetHeight;\n\t};\n\n\tColumn.prototype.setMinWidth = function (minWidth) {\n\n\t\tthis.minWidth = minWidth;\n\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\n\n\t\tthis.element.style.minWidth = this.minWidthStyled;\n\n\t\tthis.cells.forEach(function (cell) {\n\n\t\t\tcell.setMinWidth();\n\t\t});\n\t};\n\n\tColumn.prototype.delete = function () {\n\t\tvar _this7 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (_this7.isGroup) {\n\n\t\t\t\t_this7.columns.forEach(function (column) {\n\n\t\t\t\t\tcolumn.delete();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar cellCount = _this7.cells.length;\n\n\t\t\tfor (var i = 0; i < cellCount; i++) {\n\n\t\t\t\t_this7.cells[0].delete();\n\t\t\t}\n\n\t\t\t_this7.element.parentNode.removeChild(_this7.element);\n\n\t\t\t_this7.table.columnManager.deregisterColumn(_this7);\n\n\t\t\tresolve();\n\t\t});\n\t};\n\n\tColumn.prototype.columnRendered = function () {\n\n\t\tif (this.titleFormatterRendered) {\n\n\t\t\tthis.titleFormatterRendered();\n\t\t}\n\t};\n\n\t//////////////// Cell Management /////////////////\n\n\n\t//generate cell for this column\n\n\tColumn.prototype.generateCell = function (row) {\n\n\t\tvar self = this;\n\n\t\tvar cell = new Cell(self, row);\n\n\t\tthis.cells.push(cell);\n\n\t\treturn cell;\n\t};\n\n\tColumn.prototype.nextColumn = function () {\n\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\n\t};\n\n\tColumn.prototype._nextVisibleColumn = function (index) {\n\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\n\t};\n\n\tColumn.prototype.prevColumn = function () {\n\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\n\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\n\t};\n\n\tColumn.prototype._prevVisibleColumn = function (index) {\n\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\n\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\n\t};\n\n\tColumn.prototype.reinitializeWidth = function (force) {\n\n\t\tthis.widthFixed = false;\n\n\t\t//set width if present\n\n\t\tif (typeof this.definition.width !== \"undefined\" && !force) {\n\n\t\t\tthis.setWidth(this.definition.width);\n\t\t}\n\n\t\t//hide header filters to prevent them altering column width\n\n\t\tif (this.table.modExists(\"filter\")) {\n\n\t\t\tthis.table.modules.filter.hideHeaderFilterElements();\n\t\t}\n\n\t\tthis.fitToData();\n\n\t\t//show header filters again after layout is complete\n\n\t\tif (this.table.modExists(\"filter\")) {\n\n\t\t\tthis.table.modules.filter.showHeaderFilterElements();\n\t\t}\n\t};\n\n\t//set column width to maximum cell width\n\n\tColumn.prototype.fitToData = function () {\n\n\t\tvar self = this;\n\n\t\tif (!this.widthFixed) {\n\n\t\t\tthis.element.style.width = \"\";\n\n\t\t\tself.cells.forEach(function (cell) {\n\n\t\t\t\tcell.clearWidth();\n\t\t\t});\n\t\t}\n\n\t\tvar maxWidth = this.element.offsetWidth;\n\n\t\tif (!self.width || !this.widthFixed) {\n\n\t\t\tself.cells.forEach(function (cell) {\n\n\t\t\t\tvar width = cell.getWidth();\n\n\t\t\t\tif (width > maxWidth) {\n\n\t\t\t\t\tmaxWidth = width;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (maxWidth) {\n\n\t\t\t\tself.setWidthActual(maxWidth + 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tColumn.prototype.updateDefinition = function (updates) {\n\t\tvar _this8 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar definition;\n\n\t\t\tif (!_this8.isGroup) {\n\n\t\t\t\tdefinition = Object.assign({}, _this8.getDefinition());\n\n\t\t\t\tdefinition = Object.assign(definition, updates);\n\n\t\t\t\t_this8.table.columnManager.addColumn(definition, false, _this8).then(function (column) {\n\n\t\t\t\t\tif (definition.field == _this8.field) {\n\n\t\t\t\t\t\t_this8.field = false; //cleair field name to prevent deletion of duplicate column from arrays\n\t\t\t\t\t}\n\n\t\t\t\t\t_this8.delete().then(function () {\n\n\t\t\t\t\t\tresolve(column.getComponent());\n\t\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\t\treject(err);\n\t\t\t\t\t});\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Column Update Error - The updateDefintion function is only available on columns, not column groups\");\n\n\t\t\t\treject(\"Column Update Error - The updateDefintion function is only available on columns, not column groups\");\n\t\t\t}\n\t\t});\n\t};\n\n\tColumn.prototype.deleteCell = function (cell) {\n\n\t\tvar index = this.cells.indexOf(cell);\n\n\t\tif (index > -1) {\n\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t};\n\n\tColumn.prototype.defaultOptionList = [\"title\", \"field\", \"columns\", \"visible\", \"align\", \"hozAlign\", \"vertAlign\", \"width\", \"minWidth\", \"widthGrow\", \"widthShrink\", \"resizable\", \"frozen\", \"responsive\", \"tooltip\", \"cssClass\", \"rowHandle\", \"hideInHtml\", \"print\", \"htmlOutput\", \"sorter\", \"sorterParams\", \"formatter\", \"formatterParams\", \"variableHeight\", \"editable\", \"editor\", \"editorParams\", \"validator\", \"mutator\", \"mutatorParams\", \"mutatorData\", \"mutatorDataParams\", \"mutatorEdit\", \"mutatorEditParams\", \"mutatorClipboard\", \"mutatorClipboardParams\", \"accessor\", \"accessorParams\", \"accessorData\", \"accessorDataParams\", \"accessorDownload\", \"accessorDownloadParams\", \"accessorClipboard\", \"accessorClipboardParams\", \"accessorPrint\", \"accessorPrintParams\", \"accessorHtmlOutput\", \"accessorHtmlOutputParams\", \"clipboard\", \"download\", \"downloadTitle\", \"topCalc\", \"topCalcParams\", \"topCalcFormatter\", \"topCalcFormatterParams\", \"bottomCalc\", \"bottomCalcParams\", \"bottomCalcFormatter\", \"bottomCalcFormatterParams\", \"cellClick\", \"cellDblClick\", \"cellContext\", \"cellTap\", \"cellDblTap\", \"cellTapHold\", \"cellMouseEnter\", \"cellMouseLeave\", \"cellMouseOver\", \"cellMouseOut\", \"cellMouseMove\", \"cellEditing\", \"cellEdited\", \"cellEditCancelled\", \"headerSort\", \"headerSortStartingDir\", \"headerSortTristate\", \"headerClick\", \"headerDblClick\", \"headerContext\", \"headerTap\", \"headerDblTap\", \"headerTapHold\", \"headerTooltip\", \"headerVertical\", \"editableTitle\", \"titleFormatter\", \"titleFormatterParams\", \"headerFilter\", \"headerFilterPlaceholder\", \"headerFilterParams\", \"headerFilterEmptyCheck\", \"headerFilterFunc\", \"headerFilterFuncParams\", \"headerFilterLiveFilter\", \"print\", \"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"formatterPrint\", \"formatterPrintParams\", \"formatterClipboard\", \"formatterClipboardParams\", \"formatterHtmlOutput\", \"formatterHtmlOutputParams\"];\n\n\t//////////////// Event Bindings /////////////////\n\n\n\t//////////////// Object Generation /////////////////\n\n\tColumn.prototype.getComponent = function () {\n\n\t\treturn new ColumnComponent(this);\n\t};\n\n\tvar RowManager = function RowManager(table) {\n\n\t\tthis.table = table;\n\n\t\tthis.element = this.createHolderElement(); //containing element\n\n\t\tthis.tableElement = this.createTableElement(); //table element\n\n\t\tthis.heightFixer = this.createTableElement(); //table element\n\n\t\tthis.columnManager = null; //hold column manager object\n\n\t\tthis.height = 0; //hold height of table element\n\n\n\t\tthis.firstRender = false; //handle first render\n\n\t\tthis.renderMode = \"virtual\"; //current rendering mode\n\n\t\tthis.fixedHeight = false; //current rendering mode\n\n\n\t\tthis.rows = []; //hold row data objects\n\n\t\tthis.activeRows = []; //rows currently available to on display in the table\n\n\t\tthis.activeRowsCount = 0; //count of active rows\n\n\n\t\tthis.displayRows = []; //rows currently on display in the table\n\n\t\tthis.displayRowsCount = 0; //count of display rows\n\n\n\t\tthis.scrollTop = 0;\n\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\n\n\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\n\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\n\n\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\n\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\n\n\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\n\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\n\n\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\n\n\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\n\n\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\n\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\n\n\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\n\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\n\n\n\t\tthis.rowNumColumn = false; //hold column component for row number column\n\n\n\t\tthis.redrawBlock = false; //prevent redraws to allow multiple data manipulations becore continuing\n\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\n\n\t\tthis.redrawBlockRederInPosition = false; //store latest redraw function calls for when redraw is needed\n\t};\n\n\t//////////////// Setup Functions /////////////////\n\n\n\tRowManager.prototype.createHolderElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-tableHolder\");\n\n\t\tel.setAttribute(\"tabindex\", 0);\n\n\t\treturn el;\n\t};\n\n\tRowManager.prototype.createTableElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-table\");\n\n\t\treturn el;\n\t};\n\n\t//return containing element\n\n\tRowManager.prototype.getElement = function () {\n\n\t\treturn this.element;\n\t};\n\n\t//return table element\n\n\tRowManager.prototype.getTableElement = function () {\n\n\t\treturn this.tableElement;\n\t};\n\n\t//return position of row in table\n\n\tRowManager.prototype.getRowPosition = function (row, active) {\n\n\t\tif (active) {\n\n\t\t\treturn this.activeRows.indexOf(row);\n\t\t} else {\n\n\t\t\treturn this.rows.indexOf(row);\n\t\t}\n\t};\n\n\t//link to column manager\n\n\tRowManager.prototype.setColumnManager = function (manager) {\n\n\t\tthis.columnManager = manager;\n\t};\n\n\tRowManager.prototype.initialize = function () {\n\n\t\tvar self = this;\n\n\t\tself.setRenderMode();\n\n\t\t//initialize manager\n\n\t\tself.element.appendChild(self.tableElement);\n\n\t\tself.firstRender = true;\n\n\t\t//scroll header along with table body\n\n\t\tself.element.addEventListener(\"scroll\", function () {\n\n\t\t\tvar left = self.element.scrollLeft;\n\n\t\t\t//handle horizontal scrolling\n\n\t\t\tif (self.scrollLeft != left) {\n\n\t\t\t\tself.columnManager.scrollHorizontal(left);\n\n\t\t\t\tif (self.table.options.groupBy) {\n\n\t\t\t\t\tself.table.modules.groupRows.scrollHeaders(left);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\t\tself.table.modules.columnCalcs.scrollHorizontal(left);\n\t\t\t\t}\n\n\t\t\t\tself.table.options.scrollHorizontal(left);\n\t\t\t}\n\n\t\t\tself.scrollLeft = left;\n\t\t});\n\n\t\t//handle virtual dom scrolling\n\n\t\tif (this.renderMode === \"virtual\") {\n\n\t\t\tself.element.addEventListener(\"scroll\", function () {\n\n\t\t\t\tvar top = self.element.scrollTop;\n\n\t\t\t\tvar dir = self.scrollTop > top;\n\n\t\t\t\t//handle verical scrolling\n\n\t\t\t\tif (self.scrollTop != top) {\n\n\t\t\t\t\tself.scrollTop = top;\n\n\t\t\t\t\tself.scrollVertical(dir);\n\n\t\t\t\t\tif (self.table.options.ajaxProgressiveLoad == \"scroll\") {\n\n\t\t\t\t\t\tself.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top);\n\t\t\t\t\t}\n\n\t\t\t\t\tself.table.options.scrollVertical(top);\n\t\t\t\t} else {\n\n\t\t\t\t\tself.scrollTop = top;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t////////////////// Row Manipulation //////////////////\n\n\n\tRowManager.prototype.findRow = function (subject) {\n\n\t\tvar self = this;\n\n\t\tif ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == \"object\") {\n\n\t\t\tif (subject instanceof Row) {\n\n\t\t\t\t//subject is row element\n\n\t\t\t\treturn subject;\n\t\t\t} else if (subject instanceof RowComponent) {\n\n\t\t\t\t//subject is public row component\n\n\t\t\t\treturn subject._getSelf() || false;\n\t\t\t} else if (typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement) {\n\n\t\t\t\t//subject is a HTML element of the row\n\n\t\t\t\tvar match = self.rows.find(function (row) {\n\n\t\t\t\t\treturn row.element === subject;\n\t\t\t\t});\n\n\t\t\t\treturn match || false;\n\t\t\t}\n\t\t} else if (typeof subject == \"undefined\" || subject === null) {\n\n\t\t\treturn false;\n\t\t} else {\n\n\t\t\t//subject should be treated as the index of the row\n\n\t\t\tvar _match = self.rows.find(function (row) {\n\n\t\t\t\treturn row.data[self.table.options.index] == subject;\n\t\t\t});\n\n\t\t\treturn _match || false;\n\t\t}\n\n\t\t//catch all for any other type of input\n\n\n\t\treturn false;\n\t};\n\n\tRowManager.prototype.getRowFromDataObject = function (data) {\n\n\t\tvar match = this.rows.find(function (row) {\n\n\t\t\treturn row.data === data;\n\t\t});\n\n\t\treturn match || false;\n\t};\n\n\tRowManager.prototype.getRowFromPosition = function (position, active) {\n\n\t\tif (active) {\n\n\t\t\treturn this.activeRows[position];\n\t\t} else {\n\n\t\t\treturn this.rows[position];\n\t\t}\n\t};\n\n\tRowManager.prototype.scrollToRow = function (row, position, ifVisible) {\n\t\tvar _this9 = this;\n\n\t\tvar rowIndex = this.getDisplayRows().indexOf(row),\n\t\t rowEl = row.getElement(),\n\t\t rowTop,\n\t\t offset = 0;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (rowIndex > -1) {\n\n\t\t\t\tif (typeof position === \"undefined\") {\n\n\t\t\t\t\tposition = _this9.table.options.scrollToRowPosition;\n\t\t\t\t}\n\n\t\t\t\tif (typeof ifVisible === \"undefined\") {\n\n\t\t\t\t\tifVisible = _this9.table.options.scrollToRowIfVisible;\n\t\t\t\t}\n\n\t\t\t\tif (position === \"nearest\") {\n\n\t\t\t\t\tswitch (_this9.renderMode) {\n\n\t\t\t\t\t\tcase \"classic\":\n\n\t\t\t\t\t\t\trowTop = Tabulator.prototype.helpers.elOffset(rowEl).top;\n\n\t\t\t\t\t\t\tposition = Math.abs(_this9.element.scrollTop - rowTop) > Math.abs(_this9.element.scrollTop + _this9.element.clientHeight - rowTop) ? \"bottom\" : \"top\";\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"virtual\":\n\n\t\t\t\t\t\t\tposition = Math.abs(_this9.vDomTop - rowIndex) > Math.abs(_this9.vDomBottom - rowIndex) ? \"bottom\" : \"top\";\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//check row visibility\n\n\t\t\t\tif (!ifVisible) {\n\n\t\t\t\t\tif (Tabulator.prototype.helpers.elVisible(rowEl)) {\n\n\t\t\t\t\t\toffset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top;\n\n\t\t\t\t\t\tif (offset > 0 && offset < _this9.element.clientHeight - rowEl.offsetHeight) {\n\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//scroll to row\n\n\t\t\t\tswitch (_this9.renderMode) {\n\n\t\t\t\t\tcase \"classic\":\n\n\t\t\t\t\t\t_this9.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this9.element).top + _this9.element.scrollTop;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"virtual\":\n\n\t\t\t\t\t\t_this9._virtualRenderFill(rowIndex, true);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t//align to correct position\n\n\t\t\t\tswitch (position) {\n\n\t\t\t\t\tcase \"middle\":\n\n\t\t\t\t\tcase \"center\":\n\n\t\t\t\t\t\tif (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) {\n\n\t\t\t\t\t\t\t_this9.element.scrollTop = _this9.element.scrollTop + (rowEl.offsetTop - _this9.element.scrollTop) - (_this9.element.scrollHeight - rowEl.offsetTop) / 2;\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t_this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight / 2;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"bottom\":\n\n\t\t\t\t\t\tif (_this9.element.scrollHeight - _this9.element.scrollTop == _this9.element.clientHeight) {\n\n\t\t\t\t\t\t\t_this9.element.scrollTop = _this9.element.scrollTop - (_this9.element.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t_this9.element.scrollTop = _this9.element.scrollTop - _this9.element.clientHeight + rowEl.offsetHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tresolve();\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\n\n\t\t\t\treject(\"Scroll Error - Row not visible\");\n\t\t\t}\n\t\t});\n\t};\n\n\t////////////////// Data Handling //////////////////\n\n\n\tRowManager.prototype.setData = function (data, renderInPosition, columnsChanged) {\n\t\tvar _this10 = this;\n\n\t\tvar self = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (renderInPosition && _this10.getDisplayRows().length) {\n\n\t\t\t\tif (self.table.options.pagination) {\n\n\t\t\t\t\tself._setDataActual(data, true);\n\t\t\t\t} else {\n\n\t\t\t\t\t_this10.reRenderInPosition(function () {\n\n\t\t\t\t\t\tself._setDataActual(data);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tif (_this10.table.options.autoColumns && columnsChanged) {\n\n\t\t\t\t\t_this10.table.columnManager.generateColumnsFromRowData(data);\n\t\t\t\t}\n\n\t\t\t\t_this10.resetScroll();\n\n\t\t\t\t_this10._setDataActual(data);\n\t\t\t}\n\n\t\t\tresolve();\n\t\t});\n\t};\n\n\tRowManager.prototype._setDataActual = function (data, renderInPosition) {\n\n\t\tvar self = this;\n\n\t\tself.table.options.dataLoading.call(this.table, data);\n\n\t\tthis._wipeElements();\n\n\t\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\n\t\t\tthis.table.modules.history.clear();\n\t\t}\n\n\t\tif (Array.isArray(data)) {\n\n\t\t\tif (this.table.modExists(\"selectRow\")) {\n\n\t\t\t\tthis.table.modules.selectRow.clearSelectionData();\n\t\t\t}\n\n\t\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\n\t\t\t\tthis.table.modules.reactiveData.watchData(data);\n\t\t\t}\n\n\t\t\tdata.forEach(function (def, i) {\n\n\t\t\t\tif (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === \"object\") {\n\n\t\t\t\t\tvar row = new Row(def, self);\n\n\t\t\t\t\tself.rows.push(row);\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn(\"Data Loading Warning - Invalid row data detected and ignored, expecting object but received:\", def);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.table.options.dataLoaded.call(this.table, data);\n\n\t\t\tself.refreshActiveData(false, false, renderInPosition);\n\t\t} else {\n\n\t\t\tconsole.error(\"Data Loading Error - Unable to process data due to invalid data type \\nExpecting: array \\nReceived: \", typeof data === 'undefined' ? 'undefined' : _typeof(data), \"\\nData: \", data);\n\t\t}\n\t};\n\n\tRowManager.prototype._wipeElements = function () {\n\n\t\tthis.rows.forEach(function (row) {\n\n\t\t\trow.wipe();\n\t\t});\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\tthis.table.modules.groupRows.wipe();\n\t\t}\n\n\t\tthis.rows = [];\n\t};\n\n\tRowManager.prototype.deleteRow = function (row, blockRedraw) {\n\n\t\tvar allIndex = this.rows.indexOf(row),\n\t\t activeIndex = this.activeRows.indexOf(row);\n\n\t\tif (activeIndex > -1) {\n\n\t\t\tthis.activeRows.splice(activeIndex, 1);\n\t\t}\n\n\t\tif (allIndex > -1) {\n\n\t\t\tthis.rows.splice(allIndex, 1);\n\t\t}\n\n\t\tthis.setActiveRows(this.activeRows);\n\n\t\tthis.displayRowIterator(function (rows) {\n\n\t\t\tvar displayIndex = rows.indexOf(row);\n\n\t\t\tif (displayIndex > -1) {\n\n\t\t\t\trows.splice(displayIndex, 1);\n\t\t\t}\n\t\t});\n\n\t\tif (!blockRedraw) {\n\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\n\t\tthis.regenerateRowNumbers();\n\n\t\tthis.table.options.rowDeleted.call(this.table, row.getComponent());\n\n\t\tthis.table.options.dataEdited.call(this.table, this.getData());\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t} else if (this.table.options.pagination && this.table.modExists(\"page\")) {\n\n\t\t\tthis.refreshActiveData(false, false, true);\n\t\t} else {\n\n\t\t\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\n\t\t\t\tthis.refreshActiveData(\"page\");\n\t\t\t}\n\t\t}\n\t};\n\n\tRowManager.prototype.addRow = function (data, pos, index, blockRedraw) {\n\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\n\n\t\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\n\t\t\tthis.table.modules.history.action(\"rowAdd\", row, { data: data, pos: pos, index: index });\n\t\t}\n\n\t\treturn row;\n\t};\n\n\t//add multiple rows\n\n\tRowManager.prototype.addRows = function (data, pos, index) {\n\t\tvar _this11 = this;\n\n\t\tvar self = this,\n\t\t length = 0,\n\t\t rows = [];\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tpos = _this11.findAddRowPos(pos);\n\n\t\t\tif (!Array.isArray(data)) {\n\n\t\t\t\tdata = [data];\n\t\t\t}\n\n\t\t\tlength = data.length - 1;\n\n\t\t\tif (typeof index == \"undefined\" && pos || typeof index !== \"undefined\" && !pos) {\n\n\t\t\t\tdata.reverse();\n\t\t\t}\n\n\t\t\tdata.forEach(function (item, i) {\n\n\t\t\t\tvar row = self.addRow(item, pos, index, true);\n\n\t\t\t\trows.push(row);\n\t\t\t});\n\n\t\t\tif (_this11.table.options.groupBy && _this11.table.modExists(\"groupRows\")) {\n\n\t\t\t\t_this11.table.modules.groupRows.updateGroupRows(true);\n\t\t\t} else if (_this11.table.options.pagination && _this11.table.modExists(\"page\")) {\n\n\t\t\t\t_this11.refreshActiveData(false, false, true);\n\t\t\t} else {\n\n\t\t\t\t_this11.reRenderInPosition();\n\t\t\t}\n\n\t\t\t//recalc column calculations if present\n\n\t\t\tif (_this11.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\t_this11.table.modules.columnCalcs.recalc(_this11.table.rowManager.activeRows);\n\t\t\t}\n\n\t\t\t_this11.regenerateRowNumbers();\n\n\t\t\tresolve(rows);\n\t\t});\n\t};\n\n\tRowManager.prototype.findAddRowPos = function (pos) {\n\n\t\tif (typeof pos === \"undefined\") {\n\n\t\t\tpos = this.table.options.addRowPos;\n\t\t}\n\n\t\tif (pos === \"pos\") {\n\n\t\t\tpos = true;\n\t\t}\n\n\t\tif (pos === \"bottom\") {\n\n\t\t\tpos = false;\n\t\t}\n\n\t\treturn pos;\n\t};\n\n\tRowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) {\n\n\t\tvar row = data instanceof Row ? data : new Row(data || {}, this),\n\t\t top = this.findAddRowPos(pos),\n\t\t allIndex = -1,\n\t\t activeIndex,\n\t\t dispRows;\n\n\t\tif (!index && this.table.options.pagination && this.table.options.paginationAddRow == \"page\") {\n\n\t\t\tdispRows = this.getDisplayRows();\n\n\t\t\tif (top) {\n\n\t\t\t\tif (dispRows.length) {\n\n\t\t\t\t\tindex = dispRows[0];\n\t\t\t\t} else {\n\n\t\t\t\t\tif (this.activeRows.length) {\n\n\t\t\t\t\t\tindex = this.activeRows[this.activeRows.length - 1];\n\n\t\t\t\t\t\ttop = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tif (dispRows.length) {\n\n\t\t\t\t\tindex = dispRows[dispRows.length - 1];\n\n\t\t\t\t\ttop = dispRows.length < this.table.modules.page.getPageSize() ? false : true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (typeof index !== \"undefined\") {\n\n\t\t\tindex = this.findRow(index);\n\t\t}\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\tthis.table.modules.groupRows.assignRowToGroup(row);\n\n\t\t\tvar groupRows = row.getGroup().rows;\n\n\t\t\tif (groupRows.length > 1) {\n\n\t\t\t\tif (!index || index && groupRows.indexOf(index) == -1) {\n\n\t\t\t\t\tif (top) {\n\n\t\t\t\t\t\tif (groupRows[0] !== row) {\n\n\t\t\t\t\t\t\tindex = groupRows[0];\n\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif (groupRows[groupRows.length - 1] !== row) {\n\n\t\t\t\t\t\t\tindex = groupRows[groupRows.length - 1];\n\n\t\t\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._moveRowInArray(row.getGroup().rows, row, index, !top);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (index) {\n\n\t\t\tallIndex = this.rows.indexOf(index);\n\t\t}\n\n\t\tif (index && allIndex > -1) {\n\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\n\n\t\t\tthis.displayRowIterator(function (rows) {\n\n\t\t\t\tvar displayIndex = rows.indexOf(index);\n\n\t\t\t\tif (displayIndex > -1) {\n\n\t\t\t\t\trows.splice(top ? displayIndex : displayIndex + 1, 0, row);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (activeIndex > -1) {\n\n\t\t\t\tthis.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row);\n\t\t\t}\n\n\t\t\tthis.rows.splice(top ? allIndex : allIndex + 1, 0, row);\n\t\t} else {\n\n\t\t\tif (top) {\n\n\t\t\t\tthis.displayRowIterator(function (rows) {\n\n\t\t\t\t\trows.unshift(row);\n\t\t\t\t});\n\n\t\t\t\tthis.activeRows.unshift(row);\n\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t} else {\n\n\t\t\t\tthis.displayRowIterator(function (rows) {\n\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\n\t\t\t\tthis.activeRows.push(row);\n\n\t\t\t\tthis.rows.push(row);\n\t\t\t}\n\t\t}\n\n\t\tthis.setActiveRows(this.activeRows);\n\n\t\tthis.table.options.rowAdded.call(this.table, row.getComponent());\n\n\t\tthis.table.options.dataEdited.call(this.table, this.getData());\n\n\t\tif (!blockRedraw) {\n\n\t\t\tthis.reRenderInPosition();\n\t\t}\n\n\t\treturn row;\n\t};\n\n\tRowManager.prototype.moveRow = function (from, to, after) {\n\n\t\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\n\t\t\tthis.table.modules.history.action(\"rowMove\", from, { posFrom: this.getRowPosition(from), posTo: this.getRowPosition(to), to: to, after: after });\n\t\t}\n\n\t\tthis.moveRowActual(from, to, after);\n\n\t\tthis.regenerateRowNumbers();\n\n\t\tthis.table.options.rowMoved.call(this.table, from.getComponent());\n\t};\n\n\tRowManager.prototype.moveRowActual = function (from, to, after) {\n\n\t\tvar self = this;\n\n\t\tthis._moveRowInArray(this.rows, from, to, after);\n\n\t\tthis._moveRowInArray(this.activeRows, from, to, after);\n\n\t\tthis.displayRowIterator(function (rows) {\n\n\t\t\tself._moveRowInArray(rows, from, to, after);\n\t\t});\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\tvar toGroup = to.getGroup();\n\n\t\t\tvar fromGroup = from.getGroup();\n\n\t\t\tif (toGroup === fromGroup) {\n\n\t\t\t\tthis._moveRowInArray(toGroup.rows, from, to, after);\n\t\t\t} else {\n\n\t\t\t\tif (fromGroup) {\n\n\t\t\t\t\tfromGroup.removeRow(from);\n\t\t\t\t}\n\n\t\t\t\ttoGroup.insertRow(from, to, after);\n\t\t\t}\n\t\t}\n\t};\n\n\tRowManager.prototype._moveRowInArray = function (rows, from, to, after) {\n\n\t\tvar fromIndex, toIndex, start, end;\n\n\t\tif (from !== to) {\n\n\t\t\tfromIndex = rows.indexOf(from);\n\n\t\t\tif (fromIndex > -1) {\n\n\t\t\t\trows.splice(fromIndex, 1);\n\n\t\t\t\ttoIndex = rows.indexOf(to);\n\n\t\t\t\tif (toIndex > -1) {\n\n\t\t\t\t\tif (after) {\n\n\t\t\t\t\t\trows.splice(toIndex + 1, 0, from);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trows.splice(toIndex, 0, from);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\trows.splice(fromIndex, 0, from);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//restyle rows\n\n\t\t\tif (rows === this.getDisplayRows()) {\n\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\n\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex + 1;\n\n\t\t\t\tfor (var i = start; i <= end; i++) {\n\n\t\t\t\t\tif (rows[i]) {\n\n\t\t\t\t\t\tthis.styleRow(rows[i], i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tRowManager.prototype.clearData = function () {\n\n\t\tthis.setData([]);\n\t};\n\n\tRowManager.prototype.getRowIndex = function (row) {\n\n\t\treturn this.findRowIndex(row, this.rows);\n\t};\n\n\tRowManager.prototype.getDisplayRowIndex = function (row) {\n\n\t\tvar index = this.getDisplayRows().indexOf(row);\n\n\t\treturn index > -1 ? index : false;\n\t};\n\n\tRowManager.prototype.nextDisplayRow = function (row, rowOnly) {\n\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\t nextRow = false;\n\n\t\tif (index !== false && index < this.displayRowsCount - 1) {\n\n\t\t\tnextRow = this.getDisplayRows()[index + 1];\n\t\t}\n\n\t\tif (nextRow && (!(nextRow instanceof Row) || nextRow.type != \"row\")) {\n\n\t\t\treturn this.nextDisplayRow(nextRow, rowOnly);\n\t\t}\n\n\t\treturn nextRow;\n\t};\n\n\tRowManager.prototype.prevDisplayRow = function (row, rowOnly) {\n\n\t\tvar index = this.getDisplayRowIndex(row),\n\t\t prevRow = false;\n\n\t\tif (index) {\n\n\t\t\tprevRow = this.getDisplayRows()[index - 1];\n\t\t}\n\n\t\tif (prevRow && (!(prevRow instanceof Row) || prevRow.type != \"row\")) {\n\n\t\t\treturn this.prevDisplayRow(prevRow, rowOnly);\n\t\t}\n\n\t\treturn prevRow;\n\t};\n\n\tRowManager.prototype.findRowIndex = function (row, list) {\n\n\t\tvar rowIndex;\n\n\t\trow = this.findRow(row);\n\n\t\tif (row) {\n\n\t\t\trowIndex = list.indexOf(row);\n\n\t\t\tif (rowIndex > -1) {\n\n\t\t\t\treturn rowIndex;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tRowManager.prototype.getData = function (active, transform) {\n\n\t\tvar output = [],\n\t\t rows = this.getRows(active);\n\n\t\trows.forEach(function (row) {\n\n\t\t\tif (row.type == \"row\") {\n\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tRowManager.prototype.getComponents = function (active) {\n\n\t\tvar output = [],\n\t\t rows = this.getRows(active);\n\n\t\trows.forEach(function (row) {\n\n\t\t\toutput.push(row.getComponent());\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tRowManager.prototype.getDataCount = function (active) {\n\n\t\tvar rows = this.getRows(active);\n\n\t\treturn rows.length;\n\t};\n\n\tRowManager.prototype._genRemoteRequest = function () {\n\t\tvar _this12 = this;\n\n\t\tvar table = this.table,\n\t\t options = table.options,\n\t\t params = {};\n\n\t\tif (table.modExists(\"page\")) {\n\n\t\t\t//set sort data if defined\n\n\t\t\tif (options.ajaxSorting) {\n\n\t\t\t\tvar sorters = this.table.modules.sort.getSort();\n\n\t\t\t\tsorters.forEach(function (item) {\n\n\t\t\t\t\tdelete item.column;\n\t\t\t\t});\n\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.sorters] = sorters;\n\t\t\t}\n\n\t\t\t//set filter data if defined\n\n\t\t\tif (options.ajaxFiltering) {\n\n\t\t\t\tvar filters = this.table.modules.filter.getFilters(true, true);\n\n\t\t\t\tparams[this.table.modules.page.paginationDataSentNames.filters] = filters;\n\t\t\t}\n\n\t\t\tthis.table.modules.ajax.setParams(params, true);\n\t\t}\n\n\t\ttable.modules.ajax.sendRequest().then(function (data) {\n\n\t\t\t_this12._setDataActual(data, true);\n\t\t}).catch(function (e) {});\n\t};\n\n\t//choose the path to refresh data after a filter update\n\n\tRowManager.prototype.filterRefresh = function () {\n\n\t\tvar table = this.table,\n\t\t options = table.options,\n\t\t left = this.scrollLeft;\n\n\t\tif (options.ajaxFiltering) {\n\n\t\t\tif (options.pagination == \"remote\" && table.modExists(\"page\")) {\n\n\t\t\t\ttable.modules.page.reset(true);\n\n\t\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t\t} else if (options.ajaxProgressiveLoad) {\n\n\t\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t\t} else {\n\n\t\t\t\t//assume data is url, make ajax call to url to get data\n\n\t\t\t\tthis._genRemoteRequest();\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.refreshActiveData(\"filter\");\n\t\t}\n\n\t\tthis.scrollHorizontal(left);\n\t};\n\n\t//choose the path to refresh data after a sorter update\n\n\tRowManager.prototype.sorterRefresh = function (loadOrignalData) {\n\n\t\tvar table = this.table,\n\t\t options = this.table.options,\n\t\t left = this.scrollLeft;\n\n\t\tif (options.ajaxSorting) {\n\n\t\t\tif ((options.pagination == \"remote\" || options.progressiveLoad) && table.modExists(\"page\")) {\n\n\t\t\t\ttable.modules.page.reset(true);\n\n\t\t\t\ttable.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t\t} else if (options.ajaxProgressiveLoad) {\n\n\t\t\t\ttable.modules.ajax.loadData().then(function () {}).catch(function () {});\n\t\t\t} else {\n\n\t\t\t\t//assume data is url, make ajax call to url to get data\n\n\t\t\t\tthis._genRemoteRequest();\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.refreshActiveData(loadOrignalData ? \"filter\" : \"sort\");\n\t\t}\n\n\t\tthis.scrollHorizontal(left);\n\t};\n\n\tRowManager.prototype.scrollHorizontal = function (left) {\n\n\t\tthis.scrollLeft = left;\n\n\t\tthis.element.scrollLeft = left;\n\n\t\tif (this.table.options.groupBy) {\n\n\t\t\tthis.table.modules.groupRows.scrollHeaders(left);\n\t\t}\n\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tthis.table.modules.columnCalcs.scrollHorizontal(left);\n\t\t}\n\t};\n\n\t//set active data set\n\n\tRowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) {\n\n\t\tvar self = this,\n\t\t table = this.table,\n\t\t cascadeOrder = [\"all\", \"filter\", \"sort\", \"display\", \"freeze\", \"group\", \"tree\", \"page\"],\n\t\t displayIndex;\n\n\t\tif (this.redrawBlock) {\n\n\t\t\tif (!this.redrawBlockRestoreConfig || cascadeOrder.indexOf(stage) < cascadeOrder.indexOf(this.redrawBlockRestoreConfig.stage)) {\n\n\t\t\t\tthis.redrawBlockRestoreConfig = {\n\n\t\t\t\t\tstage: stage,\n\n\t\t\t\t\tskipStage: skipStage,\n\n\t\t\t\t\trenderInPosition: renderInPosition\n\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn;\n\t\t} else {\n\n\t\t\tif (self.table.modExists(\"edit\")) {\n\n\t\t\t\tself.table.modules.edit.cancelEdit();\n\t\t\t}\n\n\t\t\tif (!stage) {\n\n\t\t\t\tstage = \"all\";\n\t\t\t}\n\n\t\t\tif (table.options.selectable && !table.options.selectablePersistence && table.modExists(\"selectRow\")) {\n\n\t\t\t\ttable.modules.selectRow.deselectRows();\n\t\t\t}\n\n\t\t\t//cascade through data refresh stages\n\n\t\t\tswitch (stage) {\n\n\t\t\t\tcase \"all\":\n\n\t\t\t\tcase \"filter\":\n\n\t\t\t\t\tif (!skipStage) {\n\n\t\t\t\t\t\tif (table.modExists(\"filter\")) {\n\n\t\t\t\t\t\t\tself.setActiveRows(table.modules.filter.filter(self.rows));\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tself.setActiveRows(self.rows.slice(0));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tskipStage = false;\n\t\t\t\t\t}\n\n\t\t\t\tcase \"sort\":\n\n\t\t\t\t\tif (!skipStage) {\n\n\t\t\t\t\t\tif (table.modExists(\"sort\")) {\n\n\t\t\t\t\t\t\ttable.modules.sort.sort(this.activeRows);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tskipStage = false;\n\t\t\t\t\t}\n\n\t\t\t\t\t//regenerate row numbers for row number formatter if in use\n\n\t\t\t\t\tthis.regenerateRowNumbers();\n\n\t\t\t\t//generic stage to allow for pipeline trigger after the data manipulation stage\n\n\t\t\t\tcase \"display\":\n\n\t\t\t\t\tthis.resetDisplayRows();\n\n\t\t\t\tcase \"freeze\":\n\n\t\t\t\t\tif (!skipStage) {\n\n\t\t\t\t\t\tif (this.table.modExists(\"frozenRows\")) {\n\n\t\t\t\t\t\t\tif (table.modules.frozenRows.isFrozen()) {\n\n\t\t\t\t\t\t\t\tif (!table.modules.frozenRows.getDisplayIndex()) {\n\n\t\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tdisplayIndex = table.modules.frozenRows.getDisplayIndex();\n\n\t\t\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\t\t\tif (displayIndex !== true) {\n\n\t\t\t\t\t\t\t\t\ttable.modules.frozenRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tskipStage = false;\n\t\t\t\t\t}\n\n\t\t\t\tcase \"group\":\n\n\t\t\t\t\tif (!skipStage) {\n\n\t\t\t\t\t\tif (table.options.groupBy && table.modExists(\"groupRows\")) {\n\n\t\t\t\t\t\t\tif (!table.modules.groupRows.getDisplayIndex()) {\n\n\t\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdisplayIndex = table.modules.groupRows.getDisplayIndex();\n\n\t\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\t\tif (displayIndex !== true) {\n\n\t\t\t\t\t\t\t\ttable.modules.groupRows.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tskipStage = false;\n\t\t\t\t\t}\n\n\t\t\t\tcase \"tree\":\n\n\t\t\t\t\tif (!skipStage) {\n\n\t\t\t\t\t\tif (table.options.dataTree && table.modExists(\"dataTree\")) {\n\n\t\t\t\t\t\t\tif (!table.modules.dataTree.getDisplayIndex()) {\n\n\t\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdisplayIndex = table.modules.dataTree.getDisplayIndex();\n\n\t\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\t\tif (displayIndex !== true) {\n\n\t\t\t\t\t\t\t\ttable.modules.dataTree.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tskipStage = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (table.options.pagination && table.modExists(\"page\") && !renderInPosition) {\n\n\t\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\n\t\t\t\t\t\t\ttable.modules.page.reset();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\tcase \"page\":\n\n\t\t\t\t\tif (!skipStage) {\n\n\t\t\t\t\t\tif (table.options.pagination && table.modExists(\"page\")) {\n\n\t\t\t\t\t\t\tif (!table.modules.page.getDisplayIndex()) {\n\n\t\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(this.getNextDisplayIndex());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdisplayIndex = table.modules.page.getDisplayIndex();\n\n\t\t\t\t\t\t\tif (table.modules.page.getMode() == \"local\") {\n\n\t\t\t\t\t\t\t\ttable.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdisplayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex);\n\n\t\t\t\t\t\t\tif (displayIndex !== true) {\n\n\t\t\t\t\t\t\t\ttable.modules.page.setDisplayIndex(displayIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tskipStage = false;\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif (Tabulator.prototype.helpers.elVisible(self.element)) {\n\n\t\t\t\tif (renderInPosition) {\n\n\t\t\t\t\tself.reRenderInPosition();\n\t\t\t\t} else {\n\n\t\t\t\t\tself.renderTable();\n\n\t\t\t\t\tif (table.options.layoutColumnsOnNewData) {\n\n\t\t\t\t\t\tself.table.columnManager.redraw(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (table.modExists(\"columnCalcs\")) {\n\n\t\t\t\ttable.modules.columnCalcs.recalc(this.activeRows);\n\t\t\t}\n\t\t}\n\t};\n\n\t//regenerate row numbers for row number formatter if in use\n\n\tRowManager.prototype.regenerateRowNumbers = function () {\n\t\tvar _this13 = this;\n\n\t\tif (this.rowNumColumn) {\n\n\t\t\tthis.activeRows.forEach(function (row) {\n\n\t\t\t\tvar cell = row.getCell(_this13.rowNumColumn);\n\n\t\t\t\tif (cell) {\n\n\t\t\t\t\tcell._generateContents();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tRowManager.prototype.setActiveRows = function (activeRows) {\n\n\t\tthis.activeRows = activeRows;\n\n\t\tthis.activeRowsCount = this.activeRows.length;\n\t};\n\n\t//reset display rows array\n\n\tRowManager.prototype.resetDisplayRows = function () {\n\n\t\tthis.displayRows = [];\n\n\t\tthis.displayRows.push(this.activeRows.slice(0));\n\n\t\tthis.displayRowsCount = this.displayRows[0].length;\n\n\t\tif (this.table.modExists(\"frozenRows\")) {\n\n\t\t\tthis.table.modules.frozenRows.setDisplayIndex(0);\n\t\t}\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\tthis.table.modules.groupRows.setDisplayIndex(0);\n\t\t}\n\n\t\tif (this.table.options.pagination && this.table.modExists(\"page\")) {\n\n\t\t\tthis.table.modules.page.setDisplayIndex(0);\n\t\t}\n\t};\n\n\tRowManager.prototype.getNextDisplayIndex = function () {\n\n\t\treturn this.displayRows.length;\n\t};\n\n\t//set display row pipeline data\n\n\tRowManager.prototype.setDisplayRows = function (displayRows, index) {\n\n\t\tvar output = true;\n\n\t\tif (index && typeof this.displayRows[index] != \"undefined\") {\n\n\t\t\tthis.displayRows[index] = displayRows;\n\n\t\t\toutput = true;\n\t\t} else {\n\n\t\t\tthis.displayRows.push(displayRows);\n\n\t\t\toutput = index = this.displayRows.length - 1;\n\t\t}\n\n\t\tif (index == this.displayRows.length - 1) {\n\n\t\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tRowManager.prototype.getDisplayRows = function (index) {\n\n\t\tif (typeof index == \"undefined\") {\n\n\t\t\treturn this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : [];\n\t\t} else {\n\n\t\t\treturn this.displayRows[index] || [];\n\t\t}\n\t};\n\n\tRowManager.prototype.getVisibleRows = function (viewable) {\n\n\t\tvar topEdge = this.element.scrollTop,\n\t\t bottomEdge = this.element.clientHeight + topEdge,\n\t\t topFound = false,\n\t\t topRow = 0,\n\t\t bottomRow = 0,\n\t\t rows = this.getDisplayRows();\n\n\t\tif (viewable) {\n\n\t\t\tthis.getDisplayRows();\n\n\t\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\n\t\t\t\tif (rows[i]) {\n\n\t\t\t\t\tif (!topFound) {\n\n\t\t\t\t\t\tif (topEdge - rows[i].getElement().offsetTop >= 0) {\n\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ttopFound = true;\n\n\t\t\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\n\t\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif (bottomEdge - rows[i].getElement().offsetTop >= 0) {\n\n\t\t\t\t\t\t\tbottomRow = i;\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\n\t\t\ttopRow = this.vDomTop;\n\n\t\t\tbottomRow = this.vDomBottom;\n\t\t}\n\n\t\treturn rows.slice(topRow, bottomRow + 1);\n\t};\n\n\t//repeat action accross display rows\n\n\tRowManager.prototype.displayRowIterator = function (callback) {\n\n\t\tthis.displayRows.forEach(callback);\n\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length - 1].length;\n\t};\n\n\t//return only actual rows (not group headers etc)\n\n\tRowManager.prototype.getRows = function (active) {\n\n\t\tvar rows;\n\n\t\tswitch (active) {\n\n\t\t\tcase \"active\":\n\n\t\t\t\trows = this.activeRows;\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"display\":\n\n\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"visible\":\n\n\t\t\t\trows = this.getVisibleRows(true);\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\trows = this.rows;\n\n\t\t}\n\n\t\treturn rows;\n\t};\n\n\t///////////////// Table Rendering /////////////////\n\n\n\t//trigger rerender of table in current position\n\n\tRowManager.prototype.reRenderInPosition = function (callback) {\n\n\t\tif (this.getRenderMode() == \"virtual\") {\n\n\t\t\tif (this.redrawBlock) {\n\n\t\t\t\tif (callback) {\n\n\t\t\t\t\tcallback();\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.redrawBlockRederInPosition = true;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tvar scrollTop = this.element.scrollTop;\n\n\t\t\t\tvar topRow = false;\n\n\t\t\t\tvar topOffset = false;\n\n\t\t\t\tvar left = this.scrollLeft;\n\n\t\t\t\tvar rows = this.getDisplayRows();\n\n\t\t\t\tfor (var i = this.vDomTop; i <= this.vDomBottom; i++) {\n\n\t\t\t\t\tif (rows[i]) {\n\n\t\t\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\n\n\t\t\t\t\t\tif (topOffset === false || Math.abs(diff) < topOffset) {\n\n\t\t\t\t\t\t\ttopOffset = diff;\n\n\t\t\t\t\t\t\ttopRow = i;\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (callback) {\n\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\n\t\t\t\tthis._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0);\n\n\t\t\t\tthis.scrollHorizontal(left);\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.renderTable();\n\n\t\t\tif (callback) {\n\n\t\t\t\tcallback();\n\t\t\t}\n\t\t}\n\t};\n\n\tRowManager.prototype.setRenderMode = function () {\n\n\t\tif (this.table.options.virtualDom) {\n\n\t\t\tthis.renderMode = \"virtual\";\n\n\t\t\tif (this.table.element.clientHeight || this.table.options.height) {\n\n\t\t\t\tthis.fixedHeight = true;\n\t\t\t} else {\n\n\t\t\t\tthis.fixedHeight = false;\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.renderMode = \"classic\";\n\t\t}\n\t};\n\n\tRowManager.prototype.getRenderMode = function () {\n\n\t\treturn this.renderMode;\n\t};\n\n\tRowManager.prototype.renderTable = function () {\n\n\t\tthis.table.options.renderStarted.call(this.table);\n\n\t\tthis.element.scrollTop = 0;\n\n\t\tswitch (this.renderMode) {\n\n\t\t\tcase \"classic\":\n\n\t\t\t\tthis._simpleRender();\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"virtual\":\n\n\t\t\t\tthis._virtualRenderFill();\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif (this.firstRender) {\n\n\t\t\tif (this.displayRowsCount) {\n\n\t\t\t\tthis.firstRender = false;\n\n\t\t\t\tthis.table.modules.layout.layout();\n\t\t\t} else {\n\n\t\t\t\tthis.renderEmptyScroll();\n\t\t\t}\n\t\t}\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t}\n\n\t\tif (!this.displayRowsCount) {\n\n\t\t\tif (this.table.options.placeholder) {\n\n\t\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\n\n\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\n\t\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\n\t\t\t}\n\t\t}\n\n\t\tthis.table.options.renderComplete.call(this.table);\n\t};\n\n\t//simple render on heightless table\n\n\tRowManager.prototype._simpleRender = function () {\n\n\t\tthis._clearVirtualDom();\n\n\t\tif (this.displayRowsCount) {\n\n\t\t\tthis.checkClassicModeGroupHeaderWidth();\n\t\t} else {\n\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\t};\n\n\tRowManager.prototype.checkClassicModeGroupHeaderWidth = function () {\n\n\t\tvar self = this,\n\t\t element = this.tableElement,\n\t\t onlyGroupHeaders = true;\n\n\t\tself.getDisplayRows().forEach(function (row, index) {\n\n\t\t\tself.styleRow(row, index);\n\n\t\t\telement.appendChild(row.getElement());\n\n\t\t\trow.initialize(true);\n\n\t\t\tif (row.type !== \"group\") {\n\n\t\t\t\tonlyGroupHeaders = false;\n\t\t\t}\n\t\t});\n\n\t\tif (onlyGroupHeaders) {\n\n\t\t\telement.style.minWidth = self.table.columnManager.getWidth() + \"px\";\n\t\t} else {\n\n\t\t\telement.style.minWidth = \"\";\n\t\t}\n\t};\n\n\t//show scrollbars on empty table div\n\n\tRowManager.prototype.renderEmptyScroll = function () {\n\n\t\tif (this.table.options.placeholder) {\n\n\t\t\tthis.tableElement.style.display = \"none\";\n\t\t} else {\n\n\t\t\tthis.tableElement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\n\n\t\t\tthis.tableElement.style.minHeight = \"1px\";\n\n\t\t\tthis.tableElement.style.visibility = \"hidden\";\n\t\t}\n\t};\n\n\tRowManager.prototype._clearVirtualDom = function () {\n\n\t\tvar element = this.tableElement;\n\n\t\tif (this.table.options.placeholder && this.table.options.placeholder.parentNode) {\n\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\n\t\t}\n\n\t\t// element.children.detach();\n\n\t\twhile (element.firstChild) {\n\t\t\telement.removeChild(element.firstChild);\n\t\t}element.style.paddingTop = \"\";\n\n\t\telement.style.paddingBottom = \"\";\n\n\t\telement.style.minWidth = \"\";\n\n\t\telement.style.minHeight = \"\";\n\n\t\telement.style.display = \"\";\n\n\t\telement.style.visibility = \"\";\n\n\t\tthis.scrollTop = 0;\n\n\t\tthis.scrollLeft = 0;\n\n\t\tthis.vDomTop = 0;\n\n\t\tthis.vDomBottom = 0;\n\n\t\tthis.vDomTopPad = 0;\n\n\t\tthis.vDomBottomPad = 0;\n\t};\n\n\tRowManager.prototype.styleRow = function (row, index) {\n\n\t\tvar rowEl = row.getElement();\n\n\t\tif (index % 2) {\n\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\n\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\n\t\t} else {\n\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\n\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\n\t\t}\n\t};\n\n\t//full virtual render\n\n\tRowManager.prototype._virtualRenderFill = function (position, forceMove, offset) {\n\n\t\tvar self = this,\n\t\t element = self.tableElement,\n\t\t holder = self.element,\n\t\t topPad = 0,\n\t\t rowsHeight = 0,\n\t\t topPadHeight = 0,\n\t\t i = 0,\n\t\t onlyGroupHeaders = true,\n\t\t rows = self.getDisplayRows();\n\n\t\tposition = position || 0;\n\n\t\toffset = offset || 0;\n\n\t\tif (!position) {\n\n\t\t\tself._clearVirtualDom();\n\t\t} else {\n\n\t\t\twhile (element.firstChild) {\n\t\t\t\telement.removeChild(element.firstChild);\n\t\t\t} //check if position is too close to bottom of table\n\n\t\t\tvar heightOccupied = (self.displayRowsCount - position + 1) * self.vDomRowHeight;\n\n\t\t\tif (heightOccupied < self.height) {\n\n\t\t\t\tposition -= Math.ceil((self.height - heightOccupied) / self.vDomRowHeight);\n\n\t\t\t\tif (position < 0) {\n\n\t\t\t\t\tposition = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//calculate initial pad\n\n\t\t\ttopPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position);\n\n\t\t\tposition -= topPad;\n\t\t}\n\n\t\tif (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) {\n\n\t\t\tself.vDomTop = position;\n\n\t\t\tself.vDomBottom = position - 1;\n\n\t\t\twhile ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) {\n\n\t\t\t\tvar index = self.vDomBottom + 1,\n\t\t\t\t row = rows[index],\n\t\t\t\t rowHeight = 0;\n\n\t\t\t\tself.styleRow(row, index);\n\n\t\t\t\telement.appendChild(row.getElement());\n\n\t\t\t\tif (!row.initialized) {\n\n\t\t\t\t\trow.initialize(true);\n\t\t\t\t} else {\n\n\t\t\t\t\tif (!row.heightInitialized) {\n\n\t\t\t\t\t\trow.normalizeHeight(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\trowHeight = row.getHeight();\n\n\t\t\t\tif (i < topPad) {\n\n\t\t\t\t\ttopPadHeight += rowHeight;\n\t\t\t\t} else {\n\n\t\t\t\t\trowsHeight += rowHeight;\n\t\t\t\t}\n\n\t\t\t\tif (rowHeight > this.vDomWindowBuffer) {\n\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\n\t\t\t\t}\n\n\t\t\t\tif (row.type !== \"group\") {\n\n\t\t\t\t\tonlyGroupHeaders = false;\n\t\t\t\t}\n\n\t\t\t\tself.vDomBottom++;\n\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tif (!position) {\n\n\t\t\t\tthis.vDomTopPad = 0;\n\n\t\t\t\t//adjust rowheight to match average of rendered elements\n\n\t\t\t\tself.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\n\n\t\t\t\tself.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1);\n\n\t\t\t\tself.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height;\n\t\t\t} else {\n\n\t\t\t\tself.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset;\n\n\t\t\t\tself.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0);\n\t\t\t}\n\n\t\t\telement.style.paddingTop = self.vDomTopPad + \"px\";\n\n\t\t\telement.style.paddingBottom = self.vDomBottomPad + \"px\";\n\n\t\t\tif (forceMove) {\n\n\t\t\t\tthis.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0);\n\t\t\t}\n\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height);\n\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\n\n\t\t\tif (this.element.scrollWidth > this.element.offsetWidth && forceMove) {\n\n\t\t\t\tthis.scrollTop += this.element.offsetHeight - this.element.clientHeight;\n\t\t\t}\n\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\n\t\t\tholder.scrollTop = this.scrollTop;\n\n\t\t\telement.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + \"px\" : \"\";\n\n\t\t\tif (self.table.options.groupBy) {\n\n\t\t\t\tif (self.table.modules.layout.getMode() != \"fitDataFill\" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) {\n\n\t\t\t\t\tself.tableElement.style.minWidth = self.table.columnManager.getWidth();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.renderEmptyScroll();\n\t\t}\n\n\t\tif (!this.fixedHeight) {\n\n\t\t\tthis.adjustTableSize();\n\t\t}\n\t};\n\n\t//handle vertical scrolling\n\n\tRowManager.prototype.scrollVertical = function (dir) {\n\n\t\tvar topDiff = this.scrollTop - this.vDomScrollPosTop;\n\n\t\tvar bottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\n\t\tvar margin = this.vDomWindowBuffer * 2;\n\n\t\tif (-topDiff > margin || bottomDiff > margin) {\n\n\t\t\t//if big scroll redraw table;\n\n\t\t\tvar left = this.scrollLeft;\n\n\t\t\tthis._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount));\n\n\t\t\tthis.scrollHorizontal(left);\n\t\t} else {\n\n\t\t\tif (dir) {\n\n\t\t\t\t//scrolling up\n\n\t\t\t\tif (topDiff < 0) {\n\n\t\t\t\t\tthis._addTopRow(-topDiff);\n\t\t\t\t}\n\n\t\t\t\tif (bottomDiff < 0) {\n\n\t\t\t\t\t//hide bottom row if needed\n\n\t\t\t\t\tif (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) {\n\n\t\t\t\t\t\tthis._removeBottomRow(-bottomDiff);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t//scrolling down\n\n\t\t\t\tif (topDiff >= 0) {\n\n\t\t\t\t\t//hide top row if needed\n\n\t\t\t\t\tif (this.scrollTop > this.vDomWindowBuffer) {\n\n\t\t\t\t\t\tthis._removeTopRow(topDiff);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (bottomDiff >= 0) {\n\n\t\t\t\t\tthis._addBottomRow(bottomDiff);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tRowManager.prototype._addTopRow = function (topDiff) {\n\t\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\n\t\tvar table = this.tableElement,\n\t\t rows = this.getDisplayRows();\n\n\t\tif (this.vDomTop) {\n\n\t\t\tvar index = this.vDomTop - 1,\n\t\t\t topRow = rows[index],\n\t\t\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\t\t\t//hide top row if needed\n\n\t\t\tif (topDiff >= topRowHeight) {\n\n\t\t\t\tthis.styleRow(topRow, index);\n\n\t\t\t\ttable.insertBefore(topRow.getElement(), table.firstChild);\n\n\t\t\t\tif (!topRow.initialized || !topRow.heightInitialized) {\n\n\t\t\t\t\tthis.vDomTopNewRows.push(topRow);\n\n\t\t\t\t\tif (!topRow.heightInitialized) {\n\n\t\t\t\t\t\ttopRow.clearCellHeight();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttopRow.initialize();\n\n\t\t\t\tthis.vDomTopPad -= topRowHeight;\n\n\t\t\t\tif (this.vDomTopPad < 0) {\n\n\t\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\n\t\t\t\t}\n\n\t\t\t\tif (!index) {\n\n\t\t\t\t\tthis.vDomTopPad = 0;\n\t\t\t\t}\n\n\t\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\n\t\t\t\tthis.vDomScrollPosTop -= topRowHeight;\n\n\t\t\t\tthis.vDomTop--;\n\t\t\t}\n\n\t\t\ttopDiff = -(this.scrollTop - this.vDomScrollPosTop);\n\n\t\t\tif (topRow.getHeight() > this.vDomWindowBuffer) {\n\n\t\t\t\tthis.vDomWindowBuffer = topRow.getHeight() * 2;\n\t\t\t}\n\n\t\t\tif (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) {\n\n\t\t\t\tthis._addTopRow(topDiff, i + 1);\n\t\t\t} else {\n\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomTopNewRows);\n\t\t\t}\n\t\t}\n\t};\n\n\tRowManager.prototype._removeTopRow = function (topDiff) {\n\n\t\tvar table = this.tableElement,\n\t\t topRow = this.getDisplayRows()[this.vDomTop],\n\t\t topRowHeight = topRow.getHeight() || this.vDomRowHeight;\n\n\t\tif (topDiff >= topRowHeight) {\n\n\t\t\tvar rowEl = topRow.getElement();\n\n\t\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\t\tthis.vDomTopPad += topRowHeight;\n\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\n\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer;\n\n\t\t\tthis.vDomTop++;\n\n\t\t\ttopDiff = this.scrollTop - this.vDomScrollPosTop;\n\n\t\t\tthis._removeTopRow(topDiff);\n\t\t}\n\t};\n\n\tRowManager.prototype._addBottomRow = function (bottomDiff) {\n\t\tvar i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n\n\t\tvar table = this.tableElement,\n\t\t rows = this.getDisplayRows();\n\n\t\tif (this.vDomBottom < this.displayRowsCount - 1) {\n\n\t\t\tvar index = this.vDomBottom + 1,\n\t\t\t bottomRow = rows[index],\n\t\t\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\t\t\t//hide bottom row if needed\n\n\t\t\tif (bottomDiff >= bottomRowHeight) {\n\n\t\t\t\tthis.styleRow(bottomRow, index);\n\n\t\t\t\ttable.appendChild(bottomRow.getElement());\n\n\t\t\t\tif (!bottomRow.initialized || !bottomRow.heightInitialized) {\n\n\t\t\t\t\tthis.vDomBottomNewRows.push(bottomRow);\n\n\t\t\t\t\tif (!bottomRow.heightInitialized) {\n\n\t\t\t\t\t\tbottomRow.clearCellHeight();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbottomRow.initialize();\n\n\t\t\t\tthis.vDomBottomPad -= bottomRowHeight;\n\n\t\t\t\tif (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) {\n\n\t\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t\t}\n\n\t\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\n\t\t\t\tthis.vDomScrollPosBottom += bottomRowHeight;\n\n\t\t\t\tthis.vDomBottom++;\n\t\t\t}\n\n\t\t\tbottomDiff = this.scrollTop - this.vDomScrollPosBottom;\n\n\t\t\tif (bottomRow.getHeight() > this.vDomWindowBuffer) {\n\n\t\t\t\tthis.vDomWindowBuffer = bottomRow.getHeight() * 2;\n\t\t\t}\n\n\t\t\tif (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) {\n\n\t\t\t\tthis._addBottomRow(bottomDiff, i + 1);\n\t\t\t} else {\n\n\t\t\t\tthis._quickNormalizeRowHeight(this.vDomBottomNewRows);\n\t\t\t}\n\t\t}\n\t};\n\n\tRowManager.prototype._removeBottomRow = function (bottomDiff) {\n\n\t\tvar table = this.tableElement,\n\t\t bottomRow = this.getDisplayRows()[this.vDomBottom],\n\t\t bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight;\n\n\t\tif (bottomDiff >= bottomRowHeight) {\n\n\t\t\tvar rowEl = bottomRow.getElement();\n\n\t\t\tif (rowEl.parentNode) {\n\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t}\n\n\t\t\tthis.vDomBottomPad += bottomRowHeight;\n\n\t\t\tif (this.vDomBottomPad < 0) {\n\n\t\t\t\tthis.vDomBottomPad = 0;\n\t\t\t}\n\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\n\n\t\t\tthis.vDomScrollPosBottom -= bottomRowHeight;\n\n\t\t\tthis.vDomBottom--;\n\n\t\t\tbottomDiff = -(this.scrollTop - this.vDomScrollPosBottom);\n\n\t\t\tthis._removeBottomRow(bottomDiff);\n\t\t}\n\t};\n\n\tRowManager.prototype._quickNormalizeRowHeight = function (rows) {\n\n\t\trows.forEach(function (row) {\n\n\t\t\trow.calcHeight();\n\t\t});\n\n\t\trows.forEach(function (row) {\n\n\t\t\trow.setCellHeight();\n\t\t});\n\n\t\trows.length = 0;\n\t};\n\n\t//normalize height of active rows\n\n\tRowManager.prototype.normalizeHeight = function () {\n\n\t\tthis.activeRows.forEach(function (row) {\n\n\t\t\trow.normalizeHeight();\n\t\t});\n\t};\n\n\t//adjust the height of the table holder to fit in the Tabulator element\n\n\tRowManager.prototype.adjustTableSize = function () {\n\n\t\tvar initialHeight = this.element.clientHeight,\n\t\t modExists;\n\n\t\tif (this.renderMode === \"virtual\") {\n\n\t\t\tvar otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0);\n\n\t\t\tif (this.fixedHeight) {\n\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\n\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\n\t\t\t} else {\n\n\t\t\t\tthis.element.style.height = \"\";\n\n\t\t\t\tthis.element.style.height = this.table.element.clientHeight - otherHeight + \"px\";\n\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\n\t\t\t}\n\n\t\t\tthis.height = this.element.clientHeight;\n\n\t\t\tthis.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height;\n\n\t\t\t//check if the table has changed size when dealing with variable height tables\n\n\t\t\tif (!this.fixedHeight && initialHeight != this.element.clientHeight) {\n\n\t\t\t\tmodExists = this.table.modExists(\"resizeTable\");\n\n\t\t\t\tif (modExists && !this.table.modules.resizeTable.autoResize || !modExists) {\n\n\t\t\t\t\tthis.redraw();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//renitialize all rows\n\n\tRowManager.prototype.reinitialize = function () {\n\n\t\tthis.rows.forEach(function (row) {\n\n\t\t\trow.reinitialize();\n\t\t});\n\t};\n\n\t//prevent table from being redrawn\n\n\tRowManager.prototype.blockRedraw = function () {\n\n\t\tthis.redrawBlock = true;\n\n\t\tthis.redrawBlockRestoreConfig = false;\n\t};\n\n\t//restore table redrawing\n\n\tRowManager.prototype.restoreRedraw = function () {\n\n\t\tthis.redrawBlock = false;\n\n\t\tif (this.redrawBlockRestoreConfig) {\n\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.stage, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition);\n\n\t\t\tthis.redrawBlockRestoreConfig = false;\n\t\t} else {\n\n\t\t\tif (this.redrawBlockRederInPosition) {\n\n\t\t\t\tthis.reRenderInPosition();\n\t\t\t}\n\t\t}\n\n\t\tthis.redrawBlockRederInPosition = false;\n\t};\n\n\t//redraw table\n\n\tRowManager.prototype.redraw = function (force) {\n\n\t\tvar pos = 0,\n\t\t left = this.scrollLeft;\n\n\t\tthis.adjustTableSize();\n\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\n\n\t\tif (!force) {\n\n\t\t\tif (this.renderMode == \"classic\") {\n\n\t\t\t\tif (this.table.options.groupBy) {\n\n\t\t\t\t\tthis.refreshActiveData(\"group\", false, false);\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._simpleRender();\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tthis.reRenderInPosition();\n\n\t\t\t\tthis.scrollHorizontal(left);\n\t\t\t}\n\n\t\t\tif (!this.displayRowsCount) {\n\n\t\t\t\tif (this.table.options.placeholder) {\n\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\n\t\t\tthis.renderTable();\n\t\t}\n\t};\n\n\tRowManager.prototype.resetScroll = function () {\n\n\t\tthis.element.scrollLeft = 0;\n\n\t\tthis.element.scrollTop = 0;\n\n\t\tif (this.table.browser === \"ie\") {\n\n\t\t\tvar event = document.createEvent(\"Event\");\n\n\t\t\tevent.initEvent(\"scroll\", false, true);\n\n\t\t\tthis.element.dispatchEvent(event);\n\t\t} else {\n\n\t\t\tthis.element.dispatchEvent(new Event('scroll'));\n\t\t}\n\t};\n\n\t//public row object\n\n\tvar RowComponent = function RowComponent(row) {\n\n\t\tthis._row = row;\n\t};\n\n\tRowComponent.prototype.getData = function (transform) {\n\n\t\treturn this._row.getData(transform);\n\t};\n\n\tRowComponent.prototype.getElement = function () {\n\n\t\treturn this._row.getElement();\n\t};\n\n\tRowComponent.prototype.getCells = function () {\n\n\t\tvar cells = [];\n\n\t\tthis._row.getCells().forEach(function (cell) {\n\n\t\t\tcells.push(cell.getComponent());\n\t\t});\n\n\t\treturn cells;\n\t};\n\n\tRowComponent.prototype.getCell = function (column) {\n\n\t\tvar cell = this._row.getCell(column);\n\n\t\treturn cell ? cell.getComponent() : false;\n\t};\n\n\tRowComponent.prototype.getIndex = function () {\n\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\n\t};\n\n\tRowComponent.prototype.getPosition = function (active) {\n\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\n\t};\n\n\tRowComponent.prototype.delete = function () {\n\n\t\treturn this._row.delete();\n\t};\n\n\tRowComponent.prototype.scrollTo = function () {\n\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\n\t};\n\n\tRowComponent.prototype.pageTo = function () {\n\n\t\tif (this._row.table.modExists(\"page\", true)) {\n\n\t\t\treturn this._row.table.modules.page.setPageToRow(this._row);\n\t\t}\n\t};\n\n\tRowComponent.prototype.move = function (to, after) {\n\n\t\tthis._row.moveToRow(to, after);\n\t};\n\n\tRowComponent.prototype.update = function (data) {\n\n\t\treturn this._row.updateData(data);\n\t};\n\n\tRowComponent.prototype.normalizeHeight = function () {\n\n\t\tthis._row.normalizeHeight(true);\n\t};\n\n\tRowComponent.prototype.select = function () {\n\n\t\tthis._row.table.modules.selectRow.selectRows(this._row);\n\t};\n\n\tRowComponent.prototype.deselect = function () {\n\n\t\tthis._row.table.modules.selectRow.deselectRows(this._row);\n\t};\n\n\tRowComponent.prototype.toggleSelect = function () {\n\n\t\tthis._row.table.modules.selectRow.toggleRow(this._row);\n\t};\n\n\tRowComponent.prototype.isSelected = function () {\n\n\t\treturn this._row.table.modules.selectRow.isRowSelected(this._row);\n\t};\n\n\tRowComponent.prototype._getSelf = function () {\n\n\t\treturn this._row;\n\t};\n\n\tRowComponent.prototype.freeze = function () {\n\n\t\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\n\t\t\tthis._row.table.modules.frozenRows.freezeRow(this._row);\n\t\t}\n\t};\n\n\tRowComponent.prototype.unfreeze = function () {\n\n\t\tif (this._row.table.modExists(\"frozenRows\", true)) {\n\n\t\t\tthis._row.table.modules.frozenRows.unfreezeRow(this._row);\n\t\t}\n\t};\n\n\tRowComponent.prototype.treeCollapse = function () {\n\n\t\tif (this._row.table.modExists(\"dataTree\", true)) {\n\n\t\t\tthis._row.table.modules.dataTree.collapseRow(this._row);\n\t\t}\n\t};\n\n\tRowComponent.prototype.treeExpand = function () {\n\n\t\tif (this._row.table.modExists(\"dataTree\", true)) {\n\n\t\t\tthis._row.table.modules.dataTree.expandRow(this._row);\n\t\t}\n\t};\n\n\tRowComponent.prototype.treeToggle = function () {\n\n\t\tif (this._row.table.modExists(\"dataTree\", true)) {\n\n\t\t\tthis._row.table.modules.dataTree.toggleRow(this._row);\n\t\t}\n\t};\n\n\tRowComponent.prototype.getTreeParent = function () {\n\n\t\tif (this._row.table.modExists(\"dataTree\", true)) {\n\n\t\t\treturn this._row.table.modules.dataTree.getTreeParent(this._row);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tRowComponent.prototype.getTreeChildren = function () {\n\n\t\tif (this._row.table.modExists(\"dataTree\", true)) {\n\n\t\t\treturn this._row.table.modules.dataTree.getTreeChildren(this._row);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tRowComponent.prototype.reformat = function () {\n\n\t\treturn this._row.reinitialize();\n\t};\n\n\tRowComponent.prototype.getGroup = function () {\n\n\t\treturn this._row.getGroup().getComponent();\n\t};\n\n\tRowComponent.prototype.getTable = function () {\n\n\t\treturn this._row.table;\n\t};\n\n\tRowComponent.prototype.getNextRow = function () {\n\n\t\tvar row = this._row.nextRow();\n\n\t\treturn row ? row.getComponent() : row;\n\t};\n\n\tRowComponent.prototype.getPrevRow = function () {\n\n\t\tvar row = this._row.prevRow();\n\n\t\treturn row ? row.getComponent() : row;\n\t};\n\n\tvar Row = function Row(data, parent) {\n\t\tvar type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \"row\";\n\n\n\t\tthis.table = parent.table;\n\n\t\tthis.parent = parent;\n\n\t\tthis.data = {};\n\n\t\tthis.type = type; //type of element\n\n\t\tthis.element = this.createElement();\n\n\t\tthis.modules = {}; //hold module variables;\n\n\t\tthis.cells = [];\n\n\t\tthis.height = 0; //hold element height\n\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\n\n\t\tthis.manualHeight = false; //user has manually set row height\n\n\t\tthis.outerHeight = 0; //holde lements outer height\n\n\t\tthis.initialized = false; //element has been rendered\n\n\t\tthis.heightInitialized = false; //element has resized cells to fit\n\n\n\t\tthis.setData(data);\n\n\t\tthis.generateElement();\n\t};\n\n\tRow.prototype.createElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-row\");\n\n\t\tel.setAttribute(\"role\", \"row\");\n\n\t\treturn el;\n\t};\n\n\tRow.prototype.getElement = function () {\n\n\t\treturn this.element;\n\t};\n\n\tRow.prototype.detachElement = function () {\n\n\t\tif (this.element && this.element.parentNode) {\n\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t};\n\n\tRow.prototype.generateElement = function () {\n\n\t\tvar self = this,\n\t\t dblTap,\n\t\t tapHold,\n\t\t tap;\n\n\t\t//set row selection characteristics\n\n\t\tif (self.table.options.selectable !== false && self.table.modExists(\"selectRow\")) {\n\n\t\t\tself.table.modules.selectRow.initializeRow(this);\n\t\t}\n\n\t\t//setup movable rows\n\n\t\tif (self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\n\t\t\tself.table.modules.moveRow.initializeRow(this);\n\t\t}\n\n\t\t//setup data tree\n\n\t\tif (self.table.options.dataTree !== false && self.table.modExists(\"dataTree\")) {\n\n\t\t\tself.table.modules.dataTree.initializeRow(this);\n\t\t}\n\n\t\t//setup column colapse container\n\n\t\tif (self.table.options.responsiveLayout === \"collapse\" && self.table.modExists(\"responsiveLayout\")) {\n\n\t\t\tself.table.modules.responsiveLayout.initializeRow(this);\n\t\t}\n\n\t\t//set column menu\n\n\t\tif (self.table.options.rowContextMenu && this.table.modExists(\"menu\")) {\n\n\t\t\tself.table.modules.menu.initializeRow(this);\n\t\t}\n\n\t\t//handle row click events\n\n\t\tif (self.table.options.rowClick) {\n\n\t\t\tself.element.addEventListener(\"click\", function (e) {\n\n\t\t\t\tself.table.options.rowClick(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowDblClick) {\n\n\t\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\n\t\t\t\tself.table.options.rowDblClick(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowContext) {\n\n\t\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\n\t\t\t\tself.table.options.rowContext(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\t//handle mouse events\n\n\t\tif (self.table.options.rowMouseEnter) {\n\n\t\t\tself.element.addEventListener(\"mouseenter\", function (e) {\n\n\t\t\t\tself.table.options.rowMouseEnter(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowMouseLeave) {\n\n\t\t\tself.element.addEventListener(\"mouseleave\", function (e) {\n\n\t\t\t\tself.table.options.rowMouseLeave(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowMouseOver) {\n\n\t\t\tself.element.addEventListener(\"mouseover\", function (e) {\n\n\t\t\t\tself.table.options.rowMouseOver(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowMouseOut) {\n\n\t\t\tself.element.addEventListener(\"mouseout\", function (e) {\n\n\t\t\t\tself.table.options.rowMouseOut(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowMouseMove) {\n\n\t\t\tself.element.addEventListener(\"mousemove\", function (e) {\n\n\t\t\t\tself.table.options.rowMouseMove(e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowTap) {\n\n\t\t\ttap = false;\n\n\t\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\n\t\t\t\ttap = true;\n\t\t\t}, { passive: true });\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tif (tap) {\n\n\t\t\t\t\tself.table.options.rowTap(e, self.getComponent());\n\t\t\t\t}\n\n\t\t\t\ttap = false;\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowDblTap) {\n\n\t\t\tdblTap = null;\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tif (dblTap) {\n\n\t\t\t\t\tclearTimeout(dblTap);\n\n\t\t\t\t\tdblTap = null;\n\n\t\t\t\t\tself.table.options.rowDblTap(e, self.getComponent());\n\t\t\t\t} else {\n\n\t\t\t\t\tdblTap = setTimeout(function () {\n\n\t\t\t\t\t\tclearTimeout(dblTap);\n\n\t\t\t\t\t\tdblTap = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.rowTapHold) {\n\n\t\t\ttapHold = null;\n\n\t\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\n\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\ttapHold = setTimeout(function () {\n\n\t\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\t\ttapHold = null;\n\n\t\t\t\t\ttap = false;\n\n\t\t\t\t\tself.table.options.rowTapHold(e, self.getComponent());\n\t\t\t\t}, 1000);\n\t\t\t}, { passive: true });\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\ttapHold = null;\n\t\t\t});\n\t\t}\n\t};\n\n\tRow.prototype.generateCells = function () {\n\n\t\tthis.cells = this.table.columnManager.generateCells(this);\n\t};\n\n\t//functions to setup on first render\n\n\tRow.prototype.initialize = function (force) {\n\n\t\tvar self = this;\n\n\t\tif (!self.initialized || force) {\n\n\t\t\tself.deleteCells();\n\n\t\t\twhile (self.element.firstChild) {\n\t\t\t\tself.element.removeChild(self.element.firstChild);\n\t\t\t} //handle frozen cells\n\n\t\t\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\t\t\tthis.table.modules.frozenColumns.layoutRow(this);\n\t\t\t}\n\n\t\t\tthis.generateCells();\n\n\t\t\tself.cells.forEach(function (cell) {\n\n\t\t\t\tself.element.appendChild(cell.getElement());\n\n\t\t\t\tcell.cellRendered();\n\t\t\t});\n\n\t\t\tif (force) {\n\n\t\t\t\tself.normalizeHeight();\n\t\t\t}\n\n\t\t\t//setup movable rows\n\n\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\n\t\t\t\tself.table.modules.dataTree.layoutRow(this);\n\t\t\t}\n\n\t\t\t//setup column colapse container\n\n\t\t\tif (self.table.options.responsiveLayout === \"collapse\" && self.table.modExists(\"responsiveLayout\")) {\n\n\t\t\t\tself.table.modules.responsiveLayout.layoutRow(this);\n\t\t\t}\n\n\t\t\tif (self.table.options.rowFormatter) {\n\n\t\t\t\tself.table.options.rowFormatter(self.getComponent());\n\t\t\t}\n\n\t\t\t//set resizable handles\n\n\t\t\tif (self.table.options.resizableRows && self.table.modExists(\"resizeRows\")) {\n\n\t\t\t\tself.table.modules.resizeRows.initializeRow(self);\n\t\t\t}\n\n\t\t\tself.initialized = true;\n\t\t}\n\t};\n\n\tRow.prototype.reinitializeHeight = function () {\n\n\t\tthis.heightInitialized = false;\n\n\t\tif (this.element.offsetParent !== null) {\n\n\t\t\tthis.normalizeHeight(true);\n\t\t}\n\t};\n\n\tRow.prototype.reinitialize = function () {\n\n\t\tthis.initialized = false;\n\n\t\tthis.heightInitialized = false;\n\n\t\tif (!this.manualHeight) {\n\n\t\t\tthis.height = 0;\n\n\t\t\tthis.heightStyled = \"\";\n\t\t}\n\n\t\tif (this.element.offsetParent !== null) {\n\n\t\t\tthis.initialize(true);\n\t\t}\n\t};\n\n\t//get heights when doing bulk row style calcs in virtual DOM\n\n\tRow.prototype.calcHeight = function (force) {\n\n\t\tvar maxHeight = 0,\n\t\t minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\n\n\t\tthis.cells.forEach(function (cell) {\n\n\t\t\tvar height = cell.getHeight();\n\n\t\t\tif (height > maxHeight) {\n\n\t\t\t\tmaxHeight = height;\n\t\t\t}\n\t\t});\n\n\t\tif (force) {\n\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\n\t\t} else {\n\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\n\t\t}\n\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\n\n\t\tthis.outerHeight = this.element.offsetHeight;\n\t};\n\n\t//set of cells\n\n\tRow.prototype.setCellHeight = function () {\n\n\t\tthis.cells.forEach(function (cell) {\n\n\t\t\tcell.setHeight();\n\t\t});\n\n\t\tthis.heightInitialized = true;\n\t};\n\n\tRow.prototype.clearCellHeight = function () {\n\n\t\tthis.cells.forEach(function (cell) {\n\n\t\t\tcell.clearHeight();\n\t\t});\n\t};\n\n\t//normalize the height of elements in the row\n\n\tRow.prototype.normalizeHeight = function (force) {\n\n\t\tif (force) {\n\n\t\t\tthis.clearCellHeight();\n\t\t}\n\n\t\tthis.calcHeight(force);\n\n\t\tthis.setCellHeight();\n\t};\n\n\t// Row.prototype.setHeight = function(height){\n\n\t// \tthis.height = height;\n\n\n\t// \tthis.setCellHeight();\n\n\t// };\n\n\n\t//set height of rows\n\n\tRow.prototype.setHeight = function (height, force) {\n\n\t\tif (this.height != height || force) {\n\n\t\t\tthis.manualHeight = true;\n\n\t\t\tthis.height = height;\n\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\n\n\t\t\tthis.setCellHeight();\n\n\t\t\t// this.outerHeight = this.element.outerHeight();\n\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t};\n\n\t//return rows outer height\n\n\tRow.prototype.getHeight = function () {\n\n\t\treturn this.outerHeight;\n\t};\n\n\t//return rows outer Width\n\n\tRow.prototype.getWidth = function () {\n\n\t\treturn this.element.offsetWidth;\n\t};\n\n\t//////////////// Cell Management /////////////////\n\n\n\tRow.prototype.deleteCell = function (cell) {\n\n\t\tvar index = this.cells.indexOf(cell);\n\n\t\tif (index > -1) {\n\n\t\t\tthis.cells.splice(index, 1);\n\t\t}\n\t};\n\n\t//////////////// Data Management /////////////////\n\n\n\tRow.prototype.setData = function (data) {\n\n\t\tif (this.table.modExists(\"mutator\")) {\n\n\t\t\tdata = this.table.modules.mutator.transformRow(data, \"data\");\n\t\t}\n\n\t\tthis.data = data;\n\n\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {\n\n\t\t\tthis.table.modules.reactiveData.watchRow(this);\n\t\t}\n\t};\n\n\t//update the rows data\n\n\tRow.prototype.updateData = function (updatedData) {\n\t\tvar _this14 = this;\n\n\t\tvar visible = Tabulator.prototype.helpers.elVisible(this.element),\n\t\t tempData = {},\n\t\t newRowData;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (typeof updatedData === \"string\") {\n\n\t\t\t\tupdatedData = JSON.parse(updatedData);\n\t\t\t}\n\n\t\t\tif (_this14.table.options.reactiveData && _this14.table.modExists(\"reactiveData\", true)) {\n\n\t\t\t\t_this14.table.modules.reactiveData.block();\n\t\t\t}\n\n\t\t\t//mutate incomming data if needed\n\n\t\t\tif (_this14.table.modExists(\"mutator\")) {\n\n\t\t\t\ttempData = Object.assign(tempData, _this14.data);\n\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\n\n\t\t\t\tnewRowData = _this14.table.modules.mutator.transformRow(tempData, \"data\", updatedData);\n\t\t\t} else {\n\n\t\t\t\tnewRowData = updatedData;\n\t\t\t}\n\n\t\t\t//set data\n\n\t\t\tfor (var attrname in newRowData) {\n\n\t\t\t\t_this14.data[attrname] = newRowData[attrname];\n\t\t\t}\n\n\t\t\tif (_this14.table.options.reactiveData && _this14.table.modExists(\"reactiveData\", true)) {\n\n\t\t\t\t_this14.table.modules.reactiveData.unblock();\n\t\t\t}\n\n\t\t\t//update affected cells only\n\n\t\t\tfor (var attrname in updatedData) {\n\n\t\t\t\tvar columns = _this14.table.columnManager.getColumnsByFieldRoot(attrname);\n\n\t\t\t\tcolumns.forEach(function (column) {\n\n\t\t\t\t\tvar cell = _this14.getCell(column.getField());\n\n\t\t\t\t\tif (cell) {\n\n\t\t\t\t\t\tvar value = column.getFieldValue(newRowData);\n\n\t\t\t\t\t\tif (cell.getValue() != value) {\n\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\n\n\t\t\t\t\t\t\tif (visible) {\n\n\t\t\t\t\t\t\t\tcell.cellRendered();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//Partial reinitialization if visible\n\n\t\t\tif (visible) {\n\n\t\t\t\t_this14.normalizeHeight();\n\n\t\t\t\tif (_this14.table.options.rowFormatter) {\n\n\t\t\t\t\t_this14.table.options.rowFormatter(_this14.getComponent());\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t_this14.initialized = false;\n\n\t\t\t\t_this14.height = 0;\n\n\t\t\t\t_this14.heightStyled = \"\";\n\t\t\t}\n\n\t\t\tif (_this14.table.options.dataTree !== false && _this14.table.modExists(\"dataTree\") && _this14.table.modules.dataTree.redrawNeeded(updatedData)) {\n\n\t\t\t\t_this14.table.modules.dataTree.initializeRow(_this14);\n\n\t\t\t\t_this14.table.modules.dataTree.layoutRow(_this14);\n\n\t\t\t\t_this14.table.rowManager.refreshActiveData(\"tree\", false, true);\n\t\t\t}\n\n\t\t\t//this.reinitialize();\n\n\n\t\t\t_this14.table.options.rowUpdated.call(_this14.table, _this14.getComponent());\n\n\t\t\tresolve();\n\t\t});\n\t};\n\n\tRow.prototype.getData = function (transform) {\n\n\t\tvar self = this;\n\n\t\tif (transform) {\n\n\t\t\tif (self.table.modExists(\"accessor\")) {\n\n\t\t\t\treturn self.table.modules.accessor.transformRow(self.data, transform);\n\t\t\t}\n\t\t} else {\n\n\t\t\treturn this.data;\n\t\t}\n\t};\n\n\tRow.prototype.getCell = function (column) {\n\n\t\tvar match = false;\n\n\t\tcolumn = this.table.columnManager.findColumn(column);\n\n\t\tmatch = this.cells.find(function (cell) {\n\n\t\t\treturn cell.column === column;\n\t\t});\n\n\t\treturn match;\n\t};\n\n\tRow.prototype.getCellIndex = function (findCell) {\n\n\t\treturn this.cells.findIndex(function (cell) {\n\n\t\t\treturn cell === findCell;\n\t\t});\n\t};\n\n\tRow.prototype.findNextEditableCell = function (index) {\n\n\t\tvar nextCell = false;\n\n\t\tif (index < this.cells.length - 1) {\n\n\t\t\tfor (var i = index + 1; i < this.cells.length; i++) {\n\n\t\t\t\tvar cell = this.cells[i];\n\n\t\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\n\t\t\t\t\tvar allowEdit = true;\n\n\t\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\n\t\t\t\t\tif (allowEdit) {\n\n\t\t\t\t\t\tnextCell = cell;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nextCell;\n\t};\n\n\tRow.prototype.findPrevEditableCell = function (index) {\n\n\t\tvar prevCell = false;\n\n\t\tif (index > 0) {\n\n\t\t\tfor (var i = index - 1; i >= 0; i--) {\n\n\t\t\t\tvar cell = this.cells[i],\n\t\t\t\t allowEdit = true;\n\n\t\t\t\tif (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) {\n\n\t\t\t\t\tif (typeof cell.column.modules.edit.check == \"function\") {\n\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\t}\n\n\t\t\t\t\tif (allowEdit) {\n\n\t\t\t\t\t\tprevCell = cell;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn prevCell;\n\t};\n\n\tRow.prototype.getCells = function () {\n\n\t\treturn this.cells;\n\t};\n\n\tRow.prototype.nextRow = function () {\n\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\n\n\t\treturn row || false;\n\t};\n\n\tRow.prototype.prevRow = function () {\n\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\n\n\t\treturn row || false;\n\t};\n\n\tRow.prototype.moveToRow = function (to, before) {\n\n\t\tvar toRow = this.table.rowManager.findRow(to);\n\n\t\tif (toRow) {\n\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\n\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\n\t\t} else {\n\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\n\t\t}\n\t};\n\n\t///////////////////// Actions /////////////////////\n\n\n\tRow.prototype.delete = function () {\n\t\tvar _this15 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar index, rows;\n\n\t\t\tif (_this15.table.options.history && _this15.table.modExists(\"history\")) {\n\n\t\t\t\tif (_this15.table.options.groupBy && _this15.table.modExists(\"groupRows\")) {\n\n\t\t\t\t\trows = _this15.getGroup().rows;\n\n\t\t\t\t\tindex = rows.indexOf(_this15);\n\n\t\t\t\t\tif (index) {\n\n\t\t\t\t\t\tindex = rows[index - 1];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = _this15.table.rowManager.getRowIndex(_this15);\n\n\t\t\t\t\tif (index) {\n\n\t\t\t\t\t\tindex = _this15.table.rowManager.rows[index - 1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t_this15.table.modules.history.action(\"rowDelete\", _this15, { data: _this15.getData(), pos: !index, index: index });\n\t\t\t}\n\n\t\t\t_this15.deleteActual();\n\n\t\t\tresolve();\n\t\t});\n\t};\n\n\tRow.prototype.deleteActual = function (blockRedraw) {\n\n\t\tvar index = this.table.rowManager.getRowIndex(this);\n\n\t\t//deselect row if it is selected\n\n\t\tif (this.table.modExists(\"selectRow\")) {\n\n\t\t\tthis.table.modules.selectRow._deselectRow(this, true);\n\t\t}\n\n\t\t// if(this.table.options.dataTree && this.table.modExists(\"dataTree\")){\n\n\t\t// \tthis.table.modules.dataTree.collapseRow(this, true);\n\n\t\t// }\n\n\n\t\t//remove any reactive data watchers from row object\n\n\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\", true)) {}\n\n\t\t// this.table.modules.reactiveData.unwatchRow(this);\n\n\t\t//remove from group\n\n\t\tif (this.modules.group) {\n\n\t\t\tthis.modules.group.removeRow(this);\n\t\t}\n\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\n\n\t\tthis.deleteCells();\n\n\t\tthis.initialized = false;\n\n\t\tthis.heightInitialized = false;\n\n\t\t//recalc column calculations if present\n\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this);\n\t\t\t} else {\n\n\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t}\n\t\t}\n\t};\n\n\tRow.prototype.deleteCells = function () {\n\n\t\tvar cellCount = this.cells.length;\n\n\t\tfor (var i = 0; i < cellCount; i++) {\n\n\t\t\tthis.cells[0].delete();\n\t\t}\n\t};\n\n\tRow.prototype.wipe = function () {\n\n\t\tthis.deleteCells();\n\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t}this.element = false;\n\n\t\tthis.modules = {};\n\n\t\tif (this.element.parentNode) {\n\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t};\n\n\tRow.prototype.getGroup = function () {\n\n\t\treturn this.modules.group || false;\n\t};\n\n\t//////////////// Object Generation /////////////////\n\n\tRow.prototype.getComponent = function () {\n\n\t\treturn new RowComponent(this);\n\t};\n\n\t//public row object\n\n\tvar CellComponent = function CellComponent(cell) {\n\n\t\tthis._cell = cell;\n\t};\n\n\tCellComponent.prototype.getValue = function () {\n\n\t\treturn this._cell.getValue();\n\t};\n\n\tCellComponent.prototype.getOldValue = function () {\n\n\t\treturn this._cell.getOldValue();\n\t};\n\n\tCellComponent.prototype.getElement = function () {\n\n\t\treturn this._cell.getElement();\n\t};\n\n\tCellComponent.prototype.getRow = function () {\n\n\t\treturn this._cell.row.getComponent();\n\t};\n\n\tCellComponent.prototype.getData = function () {\n\n\t\treturn this._cell.row.getData();\n\t};\n\n\tCellComponent.prototype.getField = function () {\n\n\t\treturn this._cell.column.getField();\n\t};\n\n\tCellComponent.prototype.getColumn = function () {\n\n\t\treturn this._cell.column.getComponent();\n\t};\n\n\tCellComponent.prototype.setValue = function (value, mutate) {\n\n\t\tif (typeof mutate == \"undefined\") {\n\n\t\t\tmutate = true;\n\t\t}\n\n\t\tthis._cell.setValue(value, mutate);\n\t};\n\n\tCellComponent.prototype.restoreOldValue = function () {\n\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\n\t};\n\n\tCellComponent.prototype.edit = function (force) {\n\n\t\treturn this._cell.edit(force);\n\t};\n\n\tCellComponent.prototype.cancelEdit = function () {\n\n\t\tthis._cell.cancelEdit();\n\t};\n\n\tCellComponent.prototype.nav = function () {\n\n\t\treturn this._cell.nav();\n\t};\n\n\tCellComponent.prototype.checkHeight = function () {\n\n\t\tthis._cell.checkHeight();\n\t};\n\n\tCellComponent.prototype.getTable = function () {\n\n\t\treturn this._cell.table;\n\t};\n\n\tCellComponent.prototype._getSelf = function () {\n\n\t\treturn this._cell;\n\t};\n\n\tvar Cell = function Cell(column, row) {\n\n\t\tthis.table = column.table;\n\n\t\tthis.column = column;\n\n\t\tthis.row = row;\n\n\t\tthis.element = null;\n\n\t\tthis.value = null;\n\n\t\tthis.oldValue = null;\n\n\t\tthis.modules = {};\n\n\t\tthis.height = null;\n\n\t\tthis.width = null;\n\n\t\tthis.minWidth = null;\n\n\t\tthis.build();\n\t};\n\n\t//////////////// Setup Functions /////////////////\n\n\n\t//generate element\n\n\tCell.prototype.build = function () {\n\n\t\tthis.generateElement();\n\n\t\tthis.setWidth();\n\n\t\tthis._configureCell();\n\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\n\t};\n\n\tCell.prototype.generateElement = function () {\n\n\t\tthis.element = document.createElement('div');\n\n\t\tthis.element.className = \"tabulator-cell\";\n\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\n\n\t\tthis.element = this.element;\n\t};\n\n\tCell.prototype._configureCell = function () {\n\n\t\tvar self = this,\n\t\t cellEvents = self.column.cellEvents,\n\t\t element = self.element,\n\t\t field = this.column.getField(),\n\t\t vertAligns = {\n\n\t\t\ttop: \"flex-start\",\n\n\t\t\tbottom: \"flex-end\",\n\n\t\t\tmiddle: \"center\"\n\n\t\t},\n\t\t hozAligns = {\n\n\t\t\tleft: \"flex-start\",\n\n\t\t\tright: \"flex-end\",\n\n\t\t\tcenter: \"center\"\n\n\t\t};\n\n\t\t//set text alignment\n\n\t\telement.style.textAlign = self.column.hozAlign;\n\n\t\tif (self.column.vertAlign) {\n\n\t\t\telement.style.display = \"inline-flex\";\n\n\t\t\telement.style.alignItems = vertAligns[self.column.vertAlign] || \"\";\n\n\t\t\tif (self.column.hozAlign) {\n\n\t\t\t\telement.style.justifyContent = hozAligns[self.column.hozAlign] || \"\";\n\t\t\t}\n\t\t}\n\n\t\tif (field) {\n\n\t\t\telement.setAttribute(\"tabulator-field\", field);\n\t\t}\n\n\t\t//add class to cell if needed\n\n\t\tif (self.column.definition.cssClass) {\n\n\t\t\tvar classNames = self.column.definition.cssClass.split(\" \");\n\n\t\t\tclassNames.forEach(function (className) {\n\n\t\t\t\telement.classList.add(className);\n\t\t\t});\n\t\t}\n\n\t\t//update tooltip on mouse enter\n\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\") {\n\n\t\t\telement.addEventListener(\"mouseenter\", function (e) {\n\n\t\t\t\tself._generateTooltip();\n\t\t\t});\n\t\t}\n\n\t\tself._bindClickEvents(cellEvents);\n\n\t\tself._bindTouchEvents(cellEvents);\n\n\t\tself._bindMouseEvents(cellEvents);\n\n\t\tif (self.column.modules.edit) {\n\n\t\t\tself.table.modules.edit.bindEditor(self);\n\t\t}\n\n\t\tif (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists(\"moveRow\")) {\n\n\t\t\tself.table.modules.moveRow.initializeCell(self);\n\t\t}\n\n\t\t//hide cell if not visible\n\n\t\tif (!self.column.visible) {\n\n\t\t\tself.hide();\n\t\t}\n\t};\n\n\tCell.prototype._bindClickEvents = function (cellEvents) {\n\n\t\tvar self = this,\n\t\t element = self.element;\n\n\t\t//set event bindings\n\n\t\tif (cellEvents.cellClick || self.table.options.cellClick) {\n\n\t\t\telement.addEventListener(\"click\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellClick) {\n\n\t\t\t\t\tcellEvents.cellClick.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellClick) {\n\n\t\t\t\t\tself.table.options.cellClick.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (cellEvents.cellDblClick || this.table.options.cellDblClick) {\n\n\t\t\telement.addEventListener(\"dblclick\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellDblClick) {\n\n\t\t\t\t\tcellEvents.cellDblClick.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellDblClick) {\n\n\t\t\t\t\tself.table.options.cellDblClick.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\n\t\t\t// element.addEventListener(\"dblclick\", function(e){\n\n\t\t\t// e.preventDefault();\n\n\t\t\t// try{\n\n\t\t\t// \tif (document.selection) { // IE\n\n\t\t\t// \t\tvar range = document.body.createTextRange();\n\n\t\t\t// \t\trange.moveToElementText(self.element);\n\n\t\t\t// \t\trange.select();\n\n\t\t\t// \t} else if (window.getSelection) {\n\n\t\t\t// \t\tvar range = document.createRange();\n\n\t\t\t// \t\trange.selectNode(self.element);\n\n\t\t\t// \t\twindow.getSelection().removeAllRanges();\n\n\t\t\t// \t\twindow.getSelection().addRange(range);\n\n\t\t\t// \t}\n\n\t\t\t// }catch(e){}\n\n\t\t\t// });\n\n\t\t}\n\n\t\tif (cellEvents.cellContext || this.table.options.cellContext) {\n\n\t\t\telement.addEventListener(\"contextmenu\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellContext) {\n\n\t\t\t\t\tcellEvents.cellContext.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellContext) {\n\n\t\t\t\t\tself.table.options.cellContext.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tCell.prototype._bindMouseEvents = function (cellEvents) {\n\n\t\tvar self = this,\n\t\t element = self.element;\n\n\t\tif (cellEvents.cellMouseEnter || self.table.options.cellMouseEnter) {\n\n\t\t\telement.addEventListener(\"mouseenter\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellMouseEnter) {\n\n\t\t\t\t\tcellEvents.cellMouseEnter.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellMouseEnter) {\n\n\t\t\t\t\tself.table.options.cellMouseEnter.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (cellEvents.cellMouseLeave || self.table.options.cellMouseLeave) {\n\n\t\t\telement.addEventListener(\"mouseleave\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellMouseLeave) {\n\n\t\t\t\t\tcellEvents.cellMouseLeave.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellMouseLeave) {\n\n\t\t\t\t\tself.table.options.cellMouseLeave.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (cellEvents.cellMouseOver || self.table.options.cellMouseOver) {\n\n\t\t\telement.addEventListener(\"mouseover\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellMouseOver) {\n\n\t\t\t\t\tcellEvents.cellMouseOver.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellMouseOver) {\n\n\t\t\t\t\tself.table.options.cellMouseOver.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (cellEvents.cellMouseOut || self.table.options.cellMouseOut) {\n\n\t\t\telement.addEventListener(\"mouseout\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellMouseOut) {\n\n\t\t\t\t\tcellEvents.cellMouseOut.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellMouseOut) {\n\n\t\t\t\t\tself.table.options.cellMouseOut.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (cellEvents.cellMouseMove || self.table.options.cellMouseMove) {\n\n\t\t\telement.addEventListener(\"mousemove\", function (e) {\n\n\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\tif (cellEvents.cellMouseMove) {\n\n\t\t\t\t\tcellEvents.cellMouseMove.call(self.table, e, component);\n\t\t\t\t}\n\n\t\t\t\tif (self.table.options.cellMouseMove) {\n\n\t\t\t\t\tself.table.options.cellMouseMove.call(self.table, e, component);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\tCell.prototype._bindTouchEvents = function (cellEvents) {\n\n\t\tvar self = this,\n\t\t element = self.element,\n\t\t dblTap,\n\t\t tapHold,\n\t\t tap;\n\n\t\tif (cellEvents.cellTap || this.table.options.cellTap) {\n\n\t\t\ttap = false;\n\n\t\t\telement.addEventListener(\"touchstart\", function (e) {\n\n\t\t\t\ttap = true;\n\t\t\t}, { passive: true });\n\n\t\t\telement.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tif (tap) {\n\n\t\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\t\tif (cellEvents.cellTap) {\n\n\t\t\t\t\t\tcellEvents.cellTap.call(self.table, e, component);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.table.options.cellTap) {\n\n\t\t\t\t\t\tself.table.options.cellTap.call(self.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttap = false;\n\t\t\t});\n\t\t}\n\n\t\tif (cellEvents.cellDblTap || this.table.options.cellDblTap) {\n\n\t\t\tdblTap = null;\n\n\t\t\telement.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tif (dblTap) {\n\n\t\t\t\t\tclearTimeout(dblTap);\n\n\t\t\t\t\tdblTap = null;\n\n\t\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\t\tif (cellEvents.cellDblTap) {\n\n\t\t\t\t\t\tcellEvents.cellDblTap.call(self.table, e, component);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.table.options.cellDblTap) {\n\n\t\t\t\t\t\tself.table.options.cellDblTap.call(self.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tdblTap = setTimeout(function () {\n\n\t\t\t\t\t\tclearTimeout(dblTap);\n\n\t\t\t\t\t\tdblTap = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (cellEvents.cellTapHold || this.table.options.cellTapHold) {\n\n\t\t\ttapHold = null;\n\n\t\t\telement.addEventListener(\"touchstart\", function (e) {\n\n\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\ttapHold = setTimeout(function () {\n\n\t\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\t\ttapHold = null;\n\n\t\t\t\t\ttap = false;\n\n\t\t\t\t\tvar component = self.getComponent();\n\n\t\t\t\t\tif (cellEvents.cellTapHold) {\n\n\t\t\t\t\t\tcellEvents.cellTapHold.call(self.table, e, component);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.table.options.cellTapHold) {\n\n\t\t\t\t\t\tself.table.options.cellTapHold.call(self.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}, 1000);\n\t\t\t}, { passive: true });\n\n\t\t\telement.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\ttapHold = null;\n\t\t\t});\n\t\t}\n\t};\n\n\t//generate cell contents\n\n\tCell.prototype._generateContents = function () {\n\n\t\tvar val;\n\n\t\tif (this.table.modExists(\"format\")) {\n\n\t\t\tval = this.table.modules.format.formatValue(this);\n\t\t} else {\n\n\t\t\tval = this.element.innerHTML = this.value;\n\t\t}\n\n\t\tswitch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) {\n\n\t\t\tcase \"object\":\n\n\t\t\t\tif (val instanceof Node) {\n\n\t\t\t\t\t//clear previous cell contents\n\n\t\t\t\t\twhile (this.element.firstChild) {\n\t\t\t\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t\t\t\t}this.element.appendChild(val);\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\t\tif (val != null) {\n\n\t\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase \"undefined\":\n\n\t\t\tcase \"null\":\n\n\t\t\t\tthis.element.innerHTML = \"\";\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthis.element.innerHTML = val;\n\n\t\t}\n\t};\n\n\tCell.prototype.cellRendered = function () {\n\n\t\tif (this.table.modExists(\"format\") && this.table.modules.format.cellRendered) {\n\n\t\t\tthis.table.modules.format.cellRendered(this);\n\t\t}\n\t};\n\n\t//generate tooltip text\n\n\tCell.prototype._generateTooltip = function () {\n\n\t\tvar tooltip = this.column.tooltip;\n\n\t\tif (tooltip) {\n\n\t\t\tif (tooltip === true) {\n\n\t\t\t\ttooltip = this.value;\n\t\t\t} else if (typeof tooltip == \"function\") {\n\n\t\t\t\ttooltip = tooltip(this.getComponent());\n\n\t\t\t\tif (tooltip === false) {\n\n\t\t\t\t\ttooltip = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof tooltip === \"undefined\") {\n\n\t\t\t\ttooltip = \"\";\n\t\t\t}\n\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\n\t\t} else {\n\n\t\t\tthis.element.setAttribute(\"title\", \"\");\n\t\t}\n\t};\n\n\t//////////////////// Getters ////////////////////\n\n\tCell.prototype.getElement = function () {\n\n\t\treturn this.element;\n\t};\n\n\tCell.prototype.getValue = function () {\n\n\t\treturn this.value;\n\t};\n\n\tCell.prototype.getOldValue = function () {\n\n\t\treturn this.oldValue;\n\t};\n\n\t//////////////////// Actions ////////////////////\n\n\n\tCell.prototype.setValue = function (value, mutate) {\n\n\t\tvar changed = this.setValueProcessData(value, mutate),\n\t\t component;\n\n\t\tif (changed) {\n\n\t\t\tif (this.table.options.history && this.table.modExists(\"history\")) {\n\n\t\t\t\tthis.table.modules.history.action(\"cellEdit\", this, { oldValue: this.oldValue, newValue: this.value });\n\t\t\t}\n\n\t\t\tcomponent = this.getComponent();\n\n\t\t\tif (this.column.cellEvents.cellEdited) {\n\n\t\t\t\tthis.column.cellEvents.cellEdited.call(this.table, component);\n\t\t\t}\n\n\t\t\tthis.cellRendered();\n\n\t\t\tthis.table.options.cellEdited.call(this.table, component);\n\n\t\t\tthis.table.options.dataEdited.call(this.table, this.table.rowManager.getData());\n\t\t}\n\t};\n\n\tCell.prototype.setValueProcessData = function (value, mutate) {\n\n\t\tvar changed = false;\n\n\t\tif (this.value != value) {\n\n\t\t\tchanged = true;\n\n\t\t\tif (mutate) {\n\n\t\t\t\tif (this.column.modules.mutate) {\n\n\t\t\t\t\tvalue = this.table.modules.mutator.transformCell(this, value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.setValueActual(value);\n\n\t\tif (changed && this.table.modExists(\"columnCalcs\")) {\n\n\t\t\tif (this.column.definition.topCalc || this.column.definition.bottomCalc) {\n\n\t\t\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\n\t\t\t\t\tif (this.table.options.columnCalcs == \"table\" || this.table.options.columnCalcs == \"both\") {\n\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.table.options.columnCalcs != \"table\") {\n\n\t\t\t\t\t\tthis.table.modules.columnCalcs.recalcRowGroup(this.row);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn changed;\n\t};\n\n\tCell.prototype.setValueActual = function (value) {\n\n\t\tthis.oldValue = this.value;\n\n\t\tthis.value = value;\n\n\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\n\t\t\tthis.table.modules.reactiveData.block();\n\t\t}\n\n\t\tthis.column.setFieldValue(this.row.data, value);\n\n\t\tif (this.table.options.reactiveData && this.table.modExists(\"reactiveData\")) {\n\n\t\t\tthis.table.modules.reactiveData.unblock();\n\t\t}\n\n\t\tthis._generateContents();\n\n\t\tthis._generateTooltip();\n\n\t\t//set resizable handles\n\n\t\tif (this.table.options.resizableColumns && this.table.modExists(\"resizeColumns\")) {\n\n\t\t\tthis.table.modules.resizeColumns.initializeColumn(\"cell\", this.column, this.element);\n\t\t}\n\n\t\t//set column menu\n\n\t\tif (this.column.definition.contextMenu && this.table.modExists(\"menu\")) {\n\n\t\t\tthis.table.modules.menu.initializeCell(this);\n\t\t}\n\n\t\t//handle frozen cells\n\n\t\tif (this.table.modExists(\"frozenColumns\")) {\n\n\t\t\tthis.table.modules.frozenColumns.layoutElement(this.element, this.column);\n\t\t}\n\t};\n\n\tCell.prototype.setWidth = function () {\n\n\t\tthis.width = this.column.width;\n\n\t\tthis.element.style.width = this.column.widthStyled;\n\t};\n\n\tCell.prototype.clearWidth = function () {\n\n\t\tthis.width = \"\";\n\n\t\tthis.element.style.width = \"\";\n\t};\n\n\tCell.prototype.getWidth = function () {\n\n\t\treturn this.width || this.element.offsetWidth;\n\t};\n\n\tCell.prototype.setMinWidth = function () {\n\n\t\tthis.minWidth = this.column.minWidth;\n\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\n\t};\n\n\tCell.prototype.checkHeight = function () {\n\n\t\t// var height = this.element.css(\"height\");\n\n\t\tthis.row.reinitializeHeight();\n\t};\n\n\tCell.prototype.clearHeight = function () {\n\n\t\tthis.element.style.height = \"\";\n\n\t\tthis.height = null;\n\t};\n\n\tCell.prototype.setHeight = function () {\n\n\t\tthis.height = this.row.height;\n\n\t\tthis.element.style.height = this.row.heightStyled;\n\t};\n\n\tCell.prototype.getHeight = function () {\n\n\t\treturn this.height || this.element.offsetHeight;\n\t};\n\n\tCell.prototype.show = function () {\n\n\t\tthis.element.style.display = \"\";\n\t};\n\n\tCell.prototype.hide = function () {\n\n\t\tthis.element.style.display = \"none\";\n\t};\n\n\tCell.prototype.edit = function (force) {\n\n\t\tif (this.table.modExists(\"edit\", true)) {\n\n\t\t\treturn this.table.modules.edit.editCell(this, force);\n\t\t}\n\t};\n\n\tCell.prototype.cancelEdit = function () {\n\n\t\tif (this.table.modExists(\"edit\", true)) {\n\n\t\t\tvar editing = this.table.modules.edit.getCurrentCell();\n\n\t\t\tif (editing && editing._getSelf() === this) {\n\n\t\t\t\tthis.table.modules.edit.cancelEdit();\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\n\t\t\t}\n\t\t}\n\t};\n\n\tCell.prototype.delete = function () {\n\n\t\tif (!this.table.rowManager.redrawBlock) {\n\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\n\t\tthis.element = false;\n\n\t\tthis.column.deleteCell(this);\n\n\t\tthis.row.deleteCell(this);\n\n\t\tthis.calcs = {};\n\t};\n\n\t//////////////// Navigation /////////////////\n\n\n\tCell.prototype.nav = function () {\n\n\t\tvar self = this,\n\t\t nextCell = false,\n\t\t index = this.row.getCellIndex(this);\n\n\t\treturn {\n\n\t\t\tnext: function next() {\n\n\t\t\t\tvar nextCell = this.right(),\n\t\t\t\t nextRow;\n\n\t\t\t\tif (!nextCell) {\n\n\t\t\t\t\tnextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\t\t\tif (nextRow) {\n\n\t\t\t\t\t\tnextCell = nextRow.findNextEditableCell(-1);\n\n\t\t\t\t\t\tif (nextCell) {\n\n\t\t\t\t\t\t\tnextCell.edit();\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tprev: function prev() {\n\n\t\t\t\tvar nextCell = this.left(),\n\t\t\t\t prevRow;\n\n\t\t\t\tif (!nextCell) {\n\n\t\t\t\t\tprevRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\t\t\tif (prevRow) {\n\n\t\t\t\t\t\tnextCell = prevRow.findPrevEditableCell(prevRow.cells.length);\n\n\t\t\t\t\t\tif (nextCell) {\n\n\t\t\t\t\t\t\tnextCell.edit();\n\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tleft: function left() {\n\n\t\t\t\tnextCell = self.row.findPrevEditableCell(index);\n\n\t\t\t\tif (nextCell) {\n\n\t\t\t\t\tnextCell.edit();\n\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tright: function right() {\n\n\t\t\t\tnextCell = self.row.findNextEditableCell(index);\n\n\t\t\t\tif (nextCell) {\n\n\t\t\t\t\tnextCell.edit();\n\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tup: function up() {\n\n\t\t\t\tvar nextRow = self.table.rowManager.prevDisplayRow(self.row, true);\n\n\t\t\t\tif (nextRow) {\n\n\t\t\t\t\tnextRow.cells[index].edit();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdown: function down() {\n\n\t\t\t\tvar nextRow = self.table.rowManager.nextDisplayRow(self.row, true);\n\n\t\t\t\tif (nextRow) {\n\n\t\t\t\t\tnextRow.cells[index].edit();\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\t};\n\n\tCell.prototype.getIndex = function () {\n\n\t\tthis.row.getCellIndex(this);\n\t};\n\n\t//////////////// Object Generation /////////////////\n\n\tCell.prototype.getComponent = function () {\n\n\t\treturn new CellComponent(this);\n\t};\n\n\tvar FooterManager = function FooterManager(table) {\n\n\t\tthis.table = table;\n\n\t\tthis.active = false;\n\n\t\tthis.element = this.createElement(); //containing element\n\n\t\tthis.external = false;\n\n\t\tthis.links = [];\n\n\t\tthis._initialize();\n\t};\n\n\tFooterManager.prototype.createElement = function () {\n\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-footer\");\n\n\t\treturn el;\n\t};\n\n\tFooterManager.prototype._initialize = function (element) {\n\n\t\tif (this.table.options.footerElement) {\n\n\t\t\tswitch (_typeof(this.table.options.footerElement)) {\n\n\t\t\t\tcase \"string\":\n\n\t\t\t\t\tif (this.table.options.footerElement[0] === \"<\") {\n\n\t\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.external = true;\n\n\t\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.element = this.table.options.footerElement;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\t\t}\n\t};\n\n\tFooterManager.prototype.getElement = function () {\n\n\t\treturn this.element;\n\t};\n\n\tFooterManager.prototype.append = function (element, parent) {\n\n\t\tthis.activate(parent);\n\n\t\tthis.element.appendChild(element);\n\n\t\tthis.table.rowManager.adjustTableSize();\n\t};\n\n\tFooterManager.prototype.prepend = function (element, parent) {\n\n\t\tthis.activate(parent);\n\n\t\tthis.element.insertBefore(element, this.element.firstChild);\n\n\t\tthis.table.rowManager.adjustTableSize();\n\t};\n\n\tFooterManager.prototype.remove = function (element) {\n\n\t\telement.parentNode.removeChild(element);\n\n\t\tthis.deactivate();\n\t};\n\n\tFooterManager.prototype.deactivate = function (force) {\n\n\t\tif (!this.element.firstChild || force) {\n\n\t\t\tif (!this.external) {\n\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\t}\n\n\t\t\tthis.active = false;\n\t\t}\n\n\t\t// this.table.rowManager.adjustTableSize();\n\t};\n\n\tFooterManager.prototype.activate = function (parent) {\n\n\t\tif (!this.active) {\n\n\t\t\tthis.active = true;\n\n\t\t\tif (!this.external) {\n\n\t\t\t\tthis.table.element.appendChild(this.getElement());\n\n\t\t\t\tthis.table.element.style.display = '';\n\t\t\t}\n\t\t}\n\n\t\tif (parent) {\n\n\t\t\tthis.links.push(parent);\n\t\t}\n\t};\n\n\tFooterManager.prototype.redraw = function () {\n\n\t\tthis.links.forEach(function (link) {\n\n\t\t\tlink.footerRedraw();\n\t\t});\n\t};\n\n\tvar Tabulator = function Tabulator(element, options) {\n\n\t\tthis.options = {};\n\n\t\tthis.columnManager = null; // hold Column Manager\n\n\t\tthis.rowManager = null; //hold Row Manager\n\n\t\tthis.footerManager = null; //holder Footer Manager\n\n\t\tthis.browser = \"\"; //hold current browser type\n\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\n\n\t\tthis.browserMobile = false; //check if running on moble, prevent resize cancelling edit on keyboard appearence\n\n\n\t\tthis.modules = {}; //hold all modules bound to this table\n\n\n\t\tthis.initializeElement(element);\n\n\t\tthis.initializeOptions(options || {});\n\n\t\tthis._create();\n\n\t\tTabulator.prototype.comms.register(this); //register table for inderdevice communication\n\t};\n\n\t//default setup options\n\n\tTabulator.prototype.defaultOptions = {\n\n\t\theight: false, //height of tabulator\n\n\t\tminHeight: false, //minimum height of tabulator\n\n\t\tmaxHeight: false, //maximum height of tabulator\n\n\n\t\tlayout: \"fitData\", ///layout type \"fitColumns\" | \"fitData\"\n\n\t\tlayoutColumnsOnNewData: false, //update column widths on setData\n\n\n\t\tcolumnMinWidth: 40, //minimum global width for a column\n\n\t\tcolumnHeaderVertAlign: \"top\", //vertical alignment of column headers\n\n\t\tcolumnVertAlign: false, // DEPRECATED - Left to allow warning\n\n\n\t\tresizableColumns: true, //resizable columns\n\n\t\tresizableRows: false, //resizable rows\n\n\t\tautoResize: true, //auto resize table\n\n\n\t\tcolumns: [], //store for colum header info\n\n\n\t\tcellHozAlign: \"\", //horizontal align columns\n\n\t\tcellVertAlign: \"\", //certical align columns\n\n\n\t\tdata: [], //default starting data\n\n\n\t\tautoColumns: false, //build columns from data row structure\n\n\n\t\treactiveData: false, //enable data reactivity\n\n\n\t\tnestedFieldSeparator: \".\", //seperatpr for nested data\n\n\n\t\ttooltips: false, //Tool tip value\n\n\t\ttooltipsHeader: false, //Tool tip for headers\n\n\t\ttooltipGenerationMode: \"load\", //when to generate tooltips\n\n\n\t\tinitialSort: false, //initial sorting criteria\n\n\t\tinitialFilter: false, //initial filtering criteria\n\n\t\tinitialHeaderFilter: false, //initial header filtering criteria\n\n\n\t\tcolumnHeaderSortMulti: true, //multiple or single column sorting\n\n\n\t\tsortOrderReverse: false, //reverse internal sort ordering\n\n\n\t\theaderSort: true, //set default global header sort\n\n\t\theaderSortTristate: false, //set default tristate header sorting\n\n\n\t\tfooterElement: false, //hold footer element\n\n\n\t\tindex: \"id\", //filed for row index\n\n\n\t\tkeybindings: [], //array for keybindings\n\n\n\t\ttabEndNewRow: false, //create new row when tab to end of table\n\n\n\t\tinvalidOptionWarnings: true, //allow toggling of invalid option warnings\n\n\n\t\tclipboard: false, //enable clipboard\n\n\t\tclipboardCopyStyled: true, //formatted table data\n\n\t\tclipboardCopyConfig: false, //clipboard config\n\n\t\tclipboardCopyFormatter: false, //DEPRICATED - REMOVE in 5.0\n\n\t\tclipboardCopyRowRange: \"active\", //restrict clipboard to visible rows only\n\n\t\tclipboardPasteParser: \"table\", //convert pasted clipboard data to rows\n\n\t\tclipboardPasteAction: \"insert\", //how to insert pasted data into the table\n\n\n\t\tclipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard\n\n\t\tclipboardPasted: function clipboardPasted() {}, //data has been pasted into the table\n\n\t\tclipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table\n\n\n\t\tdownloadDataFormatter: false, //function to manipulate table data before it is downloaded\n\n\t\tdownloadReady: function downloadReady(data, blob) {\n\t\t\treturn blob;\n\t\t}, //function to manipulate download data\n\n\t\tdownloadComplete: false, //function to manipulate download data\n\n\t\tdownloadConfig: false, //download config\n\n\n\t\tdataTree: false, //enable data tree\n\n\t\tdataTreeElementColumn: false,\n\n\t\tdataTreeBranchElement: true, //show data tree branch element\n\n\t\tdataTreeChildIndent: 9, //data tree child indent in px\n\n\t\tdataTreeChildField: \"_children\", //data tre column field to look for child rows\n\n\t\tdataTreeCollapseElement: false, //data tree row collapse element\n\n\t\tdataTreeExpandElement: false, //data tree row expand element\n\n\t\tdataTreeStartExpanded: false,\n\n\t\tdataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded\n\n\t\tdataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed\n\n\t\tdataTreeChildColumnCalcs: false, //include visible data tree rows in column calculations\n\n\t\tdataTreeSelectPropagate: false, //seleccting a parent row selects its children\n\n\n\t\tprintAsHtml: false, //enable print as html\n\n\t\tprintFormatter: false, //printing page formatter\n\n\t\tprintHeader: false, //page header contents\n\n\t\tprintFooter: false, //page footer contents\n\n\t\tprintCopyStyle: true, //DEPRICATED - REMOVE in 5.0\n\n\t\tprintStyled: true, //enable print as html styling\n\n\t\tprintVisibleRows: true, //DEPRICATED - REMOVE in 5.0\n\n\t\tprintRowRange: \"visible\", //restrict print to visible rows only\n\n\t\tprintConfig: {}, //print config options\n\n\n\t\taddRowPos: \"bottom\", //position to insert blank rows, top|bottom\n\n\n\t\tselectable: \"highlight\", //highlight rows on hover\n\n\t\tselectableRangeMode: \"drag\", //highlight rows on hover\n\n\t\tselectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached\n\n\t\tselectablePersistence: true, // maintain selection when table view is updated\n\n\t\tselectableCheck: function selectableCheck(data, row) {\n\t\t\treturn true;\n\t\t}, //check wheather row is selectable\n\n\n\t\theaderFilterLiveFilterDelay: 300, //delay before updating column after user types in header filter\n\n\t\theaderFilterPlaceholder: false, //placeholder text to display in header filters\n\n\n\t\theaderVisible: true, //hide header\n\n\n\t\thistory: false, //enable edit history\n\n\n\t\tlocale: false, //current system language\n\n\t\tlangs: {},\n\n\t\tvirtualDom: true, //enable DOM virtualization\n\n\t\tvirtualDomBuffer: 0, // set virtual DOM buffer size\n\n\n\t\tpersistentLayout: false, //DEPRICATED - REMOVE in 5.0\n\n\t\tpersistentSort: false, //DEPRICATED - REMOVE in 5.0\n\n\t\tpersistentFilter: false, //DEPRICATED - REMOVE in 5.0\n\n\t\tpersistenceID: \"\", //key for persistent storage\n\n\t\tpersistenceMode: true, //mode for storing persistence information\n\n\t\tpersistenceReaderFunc: false, //function for handling persistence data reading\n\n\t\tpersistenceWriterFunc: false, //function for handling persistence data writing\n\n\n\t\tpersistence: false,\n\n\t\tresponsiveLayout: false, //responsive layout flags\n\n\t\tresponsiveLayoutCollapseStartOpen: true, //start showing collapsed data\n\n\t\tresponsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter\n\n\t\tresponsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter\n\n\n\t\tpagination: false, //set pagination type\n\n\t\tpaginationSize: false, //set number of rows to a page\n\n\t\tpaginationInitialPage: 1, //initail page to show on load\n\n\t\tpaginationButtonCount: 5, // set count of page button\n\n\t\tpaginationSizeSelector: false, //add pagination size selector element\n\n\t\tpaginationElement: false, //element to hold pagination numbers\n\n\t\tpaginationDataSent: {}, //pagination data sent to the server\n\n\t\tpaginationDataReceived: {}, //pagination data received from the server\n\n\t\tpaginationAddRow: \"page\", //add rows on table or page\n\n\n\t\tajaxURL: false, //url for ajax loading\n\n\t\tajaxURLGenerator: false,\n\n\t\tajaxParams: {}, //params for ajax loading\n\n\t\tajaxConfig: \"get\", //ajax request type\n\n\t\tajaxContentType: \"form\", //ajax request type\n\n\t\tajaxRequestFunc: false, //promise function\n\n\t\tajaxLoader: true, //show loader\n\n\t\tajaxLoaderLoading: false, //loader element\n\n\t\tajaxLoaderError: false, //loader element\n\n\t\tajaxFiltering: false,\n\n\t\tajaxSorting: false,\n\n\t\tajaxProgressiveLoad: false, //progressive loading\n\n\t\tajaxProgressiveLoadDelay: 0, //delay between requests\n\n\t\tajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins\n\n\n\t\tgroupBy: false, //enable table grouping and set field to group by\n\n\t\tgroupStartOpen: true, //starting state of group\n\n\t\tgroupValues: false,\n\n\t\tgroupHeader: false, //header generation function\n\n\n\t\thtmlOutputConfig: false, //html outypu config\n\n\n\t\tmovableColumns: false, //enable movable columns\n\n\n\t\tmovableRows: false, //enable movable rows\n\n\t\tmovableRowsConnectedTables: false, //tables for movable rows to be connected to\n\n\t\tmovableRowsSender: false,\n\n\t\tmovableRowsReceiver: \"insert\",\n\n\t\tmovableRowsSendingStart: function movableRowsSendingStart() {},\n\n\t\tmovableRowsSent: function movableRowsSent() {},\n\n\t\tmovableRowsSentFailed: function movableRowsSentFailed() {},\n\n\t\tmovableRowsSendingStop: function movableRowsSendingStop() {},\n\n\t\tmovableRowsReceivingStart: function movableRowsReceivingStart() {},\n\n\t\tmovableRowsReceived: function movableRowsReceived() {},\n\n\t\tmovableRowsReceivedFailed: function movableRowsReceivedFailed() {},\n\n\t\tmovableRowsReceivingStop: function movableRowsReceivingStop() {},\n\n\t\tscrollToRowPosition: \"top\",\n\n\t\tscrollToRowIfVisible: true,\n\n\t\tscrollToColumnPosition: \"left\",\n\n\t\tscrollToColumnIfVisible: true,\n\n\t\trowFormatter: false,\n\n\t\trowFormatterPrint: null,\n\n\t\trowFormatterClipboard: null,\n\n\t\trowFormatterHtmlOutput: null,\n\n\t\tplaceholder: false,\n\n\t\t//table building callbacks\n\n\t\ttableBuilding: function tableBuilding() {},\n\n\t\ttableBuilt: function tableBuilt() {},\n\n\t\t//render callbacks\n\n\t\trenderStarted: function renderStarted() {},\n\n\t\trenderComplete: function renderComplete() {},\n\n\t\t//row callbacks\n\n\t\trowClick: false,\n\n\t\trowDblClick: false,\n\n\t\trowContext: false,\n\n\t\trowTap: false,\n\n\t\trowDblTap: false,\n\n\t\trowTapHold: false,\n\n\t\trowMouseEnter: false,\n\n\t\trowMouseLeave: false,\n\n\t\trowMouseOver: false,\n\n\t\trowMouseOut: false,\n\n\t\trowMouseMove: false,\n\n\t\trowContextMenu: false,\n\n\t\trowAdded: function rowAdded() {},\n\n\t\trowDeleted: function rowDeleted() {},\n\n\t\trowMoved: function rowMoved() {},\n\n\t\trowUpdated: function rowUpdated() {},\n\n\t\trowSelectionChanged: function rowSelectionChanged() {},\n\n\t\trowSelected: function rowSelected() {},\n\n\t\trowDeselected: function rowDeselected() {},\n\n\t\trowResized: function rowResized() {},\n\n\t\t//cell callbacks\n\n\t\t//row callbacks\n\n\t\tcellClick: false,\n\n\t\tcellDblClick: false,\n\n\t\tcellContext: false,\n\n\t\tcellTap: false,\n\n\t\tcellDblTap: false,\n\n\t\tcellTapHold: false,\n\n\t\tcellMouseEnter: false,\n\n\t\tcellMouseLeave: false,\n\n\t\tcellMouseOver: false,\n\n\t\tcellMouseOut: false,\n\n\t\tcellMouseMove: false,\n\n\t\tcellEditing: function cellEditing() {},\n\n\t\tcellEdited: function cellEdited() {},\n\n\t\tcellEditCancelled: function cellEditCancelled() {},\n\n\t\t//column callbacks\n\n\t\tcolumnMoved: false,\n\n\t\tcolumnResized: function columnResized() {},\n\n\t\tcolumnTitleChanged: function columnTitleChanged() {},\n\n\t\tcolumnVisibilityChanged: function columnVisibilityChanged() {},\n\n\t\t//HTML iport callbacks\n\n\t\thtmlImporting: function htmlImporting() {},\n\n\t\thtmlImported: function htmlImported() {},\n\n\t\t//data callbacks\n\n\t\tdataLoading: function dataLoading() {},\n\n\t\tdataLoaded: function dataLoaded() {},\n\n\t\tdataEdited: function dataEdited() {},\n\n\t\t//ajax callbacks\n\n\t\tajaxRequesting: function ajaxRequesting() {},\n\n\t\tajaxResponse: false,\n\n\t\tajaxError: function ajaxError() {},\n\n\t\t//filtering callbacks\n\n\t\tdataFiltering: false,\n\n\t\tdataFiltered: false,\n\n\t\t//sorting callbacks\n\n\t\tdataSorting: function dataSorting() {},\n\n\t\tdataSorted: function dataSorted() {},\n\n\t\t//grouping callbacks\n\n\t\tgroupToggleElement: \"arrow\",\n\n\t\tgroupClosedShowCalcs: false,\n\n\t\tdataGrouping: function dataGrouping() {},\n\n\t\tdataGrouped: false,\n\n\t\tgroupVisibilityChanged: function groupVisibilityChanged() {},\n\n\t\tgroupClick: false,\n\n\t\tgroupDblClick: false,\n\n\t\tgroupContext: false,\n\n\t\tgroupTap: false,\n\n\t\tgroupDblTap: false,\n\n\t\tgroupTapHold: false,\n\n\t\tcolumnCalcs: true,\n\n\t\t//pagination callbacks\n\n\t\tpageLoaded: function pageLoaded() {},\n\n\t\t//localization callbacks\n\n\t\tlocalized: function localized() {},\n\n\t\t//validation has failed\n\n\t\tvalidationFailed: function validationFailed() {},\n\n\t\t//history callbacks\n\n\t\thistoryUndo: function historyUndo() {},\n\n\t\thistoryRedo: function historyRedo() {},\n\n\t\t//scroll callbacks\n\n\t\tscrollHorizontal: function scrollHorizontal() {},\n\n\t\tscrollVertical: function scrollVertical() {}\n\n\t};\n\n\tTabulator.prototype.initializeOptions = function (options) {\n\n\t\t//warn user if option is not available\n\n\t\tif (options.invalidOptionWarnings !== false) {\n\n\t\t\tfor (var key in options) {\n\n\t\t\t\tif (typeof this.defaultOptions[key] === \"undefined\") {\n\n\t\t\t\t\tconsole.warn(\"Invalid table constructor option:\", key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//assign options to table\n\n\t\tfor (var key in this.defaultOptions) {\n\n\t\t\tif (key in options) {\n\n\t\t\t\tthis.options[key] = options[key];\n\t\t\t} else {\n\n\t\t\t\tif (Array.isArray(this.defaultOptions[key])) {\n\n\t\t\t\t\tthis.options[key] = [];\n\t\t\t\t} else if (_typeof(this.defaultOptions[key]) === \"object\" && this.defaultOptions[key] !== null) {\n\n\t\t\t\t\tthis.options[key] = {};\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.options[key] = this.defaultOptions[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.initializeElement = function (element) {\n\n\t\tif (typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement) {\n\n\t\t\tthis.element = element;\n\n\t\t\treturn true;\n\t\t} else if (typeof element === \"string\") {\n\n\t\t\tthis.element = document.querySelector(element);\n\n\t\t\tif (this.element) {\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t//convert depricated functionality to new functions\n\n\tTabulator.prototype._mapDepricatedFunctionality = function () {\n\n\t\t//map depricated persistance setup options\n\n\t\tif (this.options.persistentLayout || this.options.persistentSort || this.options.persistentFilter) {\n\n\t\t\tif (!this.options.persistence) {\n\n\t\t\t\tthis.options.persistence = {};\n\t\t\t}\n\t\t}\n\n\t\tif (typeof this.options.clipboardCopyHeader !== \"undefined\") {\n\n\t\t\tthis.options.columnHeaders = this.options.clipboardCopyHeader;\n\n\t\t\tconsole.warn(\"DEPRECATION WARNING - clipboardCopyHeader option has been deprecated, please use the columnHeaders property on the clipboardCopyConfig option\");\n\t\t}\n\n\t\tif (this.options.printVisibleRows !== true) {\n\n\t\t\tconsole.warn(\"printVisibleRows option is deprecated, you should now use the printRowRange option\");\n\n\t\t\tthis.options.persistence.printRowRange = \"active\";\n\t\t}\n\n\t\tif (this.options.printCopyStyle !== true) {\n\n\t\t\tconsole.warn(\"printCopyStyle option is deprecated, you should now use the printStyled option\");\n\n\t\t\tthis.options.persistence.printStyled = this.options.printCopyStyle;\n\t\t}\n\n\t\tif (this.options.persistentLayout) {\n\n\t\t\tconsole.warn(\"persistentLayout option is deprecated, you should now use the persistence option\");\n\n\t\t\tif (this.options.persistence !== true && typeof this.options.persistence.columns === \"undefined\") {\n\n\t\t\t\tthis.options.persistence.columns = true;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.persistentSort) {\n\n\t\t\tconsole.warn(\"persistentSort option is deprecated, you should now use the persistence option\");\n\n\t\t\tif (this.options.persistence !== true && typeof this.options.persistence.sort === \"undefined\") {\n\n\t\t\t\tthis.options.persistence.sort = true;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.persistentFilter) {\n\n\t\t\tconsole.warn(\"persistentFilter option is deprecated, you should now use the persistence option\");\n\n\t\t\tif (this.options.persistence !== true && typeof this.options.persistence.filter === \"undefined\") {\n\n\t\t\t\tthis.options.persistence.filter = true;\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.columnVertAlign) {\n\n\t\t\tconsole.warn(\"columnVertAlign option is deprecated, you should now use the columnHeaderVertAlign option\");\n\n\t\t\tthis.options.columnHeaderVertAlign = this.options.columnVertAlign;\n\t\t}\n\t};\n\n\tTabulator.prototype._clearSelection = function () {\n\n\t\tthis.element.classList.add(\"tabulator-block-select\");\n\n\t\tif (window.getSelection) {\n\n\t\t\tif (window.getSelection().empty) {\n\t\t\t\t// Chrome\n\n\t\t\t\twindow.getSelection().empty();\n\t\t\t} else if (window.getSelection().removeAllRanges) {\n\t\t\t\t// Firefox\n\n\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t}\n\t\t} else if (document.selection) {\n\t\t\t// IE?\n\n\t\t\tdocument.selection.empty();\n\t\t}\n\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\n\t};\n\n\t//concreate table\n\n\tTabulator.prototype._create = function () {\n\n\t\tthis._clearObjectPointers();\n\n\t\tthis._mapDepricatedFunctionality();\n\n\t\tthis.bindModules();\n\n\t\tif (this.element.tagName === \"TABLE\") {\n\n\t\t\tif (this.modExists(\"htmlTableImport\", true)) {\n\n\t\t\t\tthis.modules.htmlTableImport.parseTable();\n\t\t\t}\n\t\t}\n\n\t\tthis.columnManager = new ColumnManager(this);\n\n\t\tthis.rowManager = new RowManager(this);\n\n\t\tthis.footerManager = new FooterManager(this);\n\n\t\tthis.columnManager.setRowManager(this.rowManager);\n\n\t\tthis.rowManager.setColumnManager(this.columnManager);\n\n\t\tthis._buildElement();\n\n\t\tthis._loadInitialData();\n\t};\n\n\t//clear pointers to objects in default config object\n\n\tTabulator.prototype._clearObjectPointers = function () {\n\n\t\tthis.options.columns = this.options.columns.slice(0);\n\n\t\tif (!this.options.reactiveData) {\n\n\t\t\tthis.options.data = this.options.data.slice(0);\n\t\t}\n\t};\n\n\t//build tabulator element\n\n\tTabulator.prototype._buildElement = function () {\n\t\tvar _this16 = this;\n\n\t\tvar element = this.element,\n\t\t mod = this.modules,\n\t\t options = this.options;\n\n\t\toptions.tableBuilding.call(this);\n\n\t\telement.classList.add(\"tabulator\");\n\n\t\telement.setAttribute(\"role\", \"grid\");\n\n\t\t//empty element\n\n\t\twhile (element.firstChild) {\n\t\t\telement.removeChild(element.firstChild);\n\t\t} //set table height\n\n\t\tif (options.height) {\n\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\n\n\t\t\telement.style.height = options.height;\n\t\t}\n\n\t\t//set table min height\n\n\t\tif (options.minHeight !== false) {\n\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\n\n\t\t\telement.style.minHeight = options.minHeight;\n\t\t}\n\n\t\t//set table maxHeight\n\n\t\tif (options.maxHeight !== false) {\n\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\n\n\t\t\telement.style.maxHeight = options.maxHeight;\n\t\t}\n\n\t\tthis.columnManager.initialize();\n\n\t\tthis.rowManager.initialize();\n\n\t\tthis._detectBrowser();\n\n\t\tif (this.modExists(\"layout\", true)) {\n\n\t\t\tmod.layout.initialize(options.layout);\n\t\t}\n\n\t\t//set localization\n\n\t\tif (options.headerFilterPlaceholder !== false) {\n\n\t\t\tmod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder);\n\t\t}\n\n\t\tfor (var locale in options.langs) {\n\n\t\t\tmod.localize.installLang(locale, options.langs[locale]);\n\t\t}\n\n\t\tmod.localize.setLocale(options.locale);\n\n\t\t//configure placeholder element\n\n\t\tif (typeof options.placeholder == \"string\") {\n\n\t\t\tvar el = document.createElement(\"div\");\n\n\t\t\tel.classList.add(\"tabulator-placeholder\");\n\n\t\t\tvar span = document.createElement(\"span\");\n\n\t\t\tspan.innerHTML = options.placeholder;\n\n\t\t\tel.appendChild(span);\n\n\t\t\toptions.placeholder = el;\n\t\t}\n\n\t\t//build table elements\n\n\t\telement.appendChild(this.columnManager.getElement());\n\n\t\telement.appendChild(this.rowManager.getElement());\n\n\t\tif (options.footerElement) {\n\n\t\t\tthis.footerManager.activate();\n\t\t}\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true)) {\n\n\t\t\tmod.persistence.initialize();\n\t\t}\n\n\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.columns) {\n\n\t\t\toptions.columns = mod.persistence.load(\"columns\", options.columns);\n\t\t}\n\n\t\tif (options.movableRows && this.modExists(\"moveRow\")) {\n\n\t\t\tmod.moveRow.initialize();\n\t\t}\n\n\t\tif (options.autoColumns && this.options.data) {\n\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\n\t\t}\n\n\t\tif (this.modExists(\"columnCalcs\")) {\n\n\t\t\tmod.columnCalcs.initialize();\n\t\t}\n\n\t\tthis.columnManager.setColumns(options.columns);\n\n\t\tif (options.dataTree && this.modExists(\"dataTree\", true)) {\n\n\t\t\tmod.dataTree.initialize();\n\t\t}\n\n\t\tif (this.modExists(\"frozenRows\")) {\n\n\t\t\tthis.modules.frozenRows.initialize();\n\t\t}\n\n\t\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort || options.initialSort) && this.modExists(\"sort\", true)) {\n\n\t\t\tvar sorters = [];\n\n\t\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.sort) {\n\n\t\t\t\tsorters = mod.persistence.load(\"sort\");\n\n\t\t\t\tif (sorters === false && options.initialSort) {\n\n\t\t\t\t\tsorters = options.initialSort;\n\t\t\t\t}\n\t\t\t} else if (options.initialSort) {\n\n\t\t\t\tsorters = options.initialSort;\n\t\t\t}\n\n\t\t\tmod.sort.setSort(sorters);\n\t\t}\n\n\t\tif ((options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter || options.initialFilter) && this.modExists(\"filter\", true)) {\n\n\t\t\tvar filters = [];\n\n\t\t\tif (options.persistence && this.modExists(\"persistence\", true) && mod.persistence.config.filter) {\n\n\t\t\t\tfilters = mod.persistence.load(\"filter\");\n\n\t\t\t\tif (filters === false && options.initialFilter) {\n\n\t\t\t\t\tfilters = options.initialFilter;\n\t\t\t\t}\n\t\t\t} else if (options.initialFilter) {\n\n\t\t\t\tfilters = options.initialFilter;\n\t\t\t}\n\n\t\t\tmod.filter.setFilter(filters);\n\t\t}\n\n\t\tif (options.initialHeaderFilter && this.modExists(\"filter\", true)) {\n\n\t\t\toptions.initialHeaderFilter.forEach(function (item) {\n\n\t\t\t\tvar column = _this16.columnManager.findColumn(item.field);\n\n\t\t\t\tif (column) {\n\n\t\t\t\t\tmod.filter.setHeaderFilterValue(column, item.value);\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.modExists(\"ajax\")) {\n\n\t\t\tmod.ajax.initialize();\n\t\t}\n\n\t\tif (options.pagination && this.modExists(\"page\", true)) {\n\n\t\t\tmod.page.initialize();\n\t\t}\n\n\t\tif (options.groupBy && this.modExists(\"groupRows\", true)) {\n\n\t\t\tmod.groupRows.initialize();\n\t\t}\n\n\t\tif (this.modExists(\"keybindings\")) {\n\n\t\t\tmod.keybindings.initialize();\n\t\t}\n\n\t\tif (this.modExists(\"selectRow\")) {\n\n\t\t\tmod.selectRow.clearSelectionData(true);\n\t\t}\n\n\t\tif (options.autoResize && this.modExists(\"resizeTable\")) {\n\n\t\t\tmod.resizeTable.initialize();\n\t\t}\n\n\t\tif (this.modExists(\"clipboard\")) {\n\n\t\t\tmod.clipboard.initialize();\n\t\t}\n\n\t\tif (options.printAsHtml && this.modExists(\"print\")) {\n\n\t\t\tmod.print.initialize();\n\t\t}\n\n\t\toptions.tableBuilt.call(this);\n\t};\n\n\tTabulator.prototype._loadInitialData = function () {\n\n\t\tvar self = this;\n\n\t\tif (self.options.pagination && self.modExists(\"page\")) {\n\n\t\t\tself.modules.page.reset(true, true);\n\n\t\t\tif (self.options.pagination == \"local\") {\n\n\t\t\t\tif (self.options.data.length) {\n\n\t\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t\t} else {\n\n\t\t\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\n\t\t\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {\n\n\t\t\t\t\t\t\tif (self.options.paginationInitialPage) {\n\n\t\t\t\t\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (self.options.paginationInitialPage) {\n\n\t\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tif (self.options.ajaxURL) {\n\n\t\t\t\t\tself.modules.page.setPage(self.options.paginationInitialPage).then(function () {}).catch(function () {});\n\t\t\t\t} else {\n\n\t\t\t\t\tself.rowManager.setData([], false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (self.options.data.length) {\n\n\t\t\t\tself.rowManager.setData(self.options.data);\n\t\t\t} else {\n\n\t\t\t\tif ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists(\"ajax\")) {\n\n\t\t\t\t\tself.modules.ajax.loadData(false, true).then(function () {}).catch(function () {});\n\t\t\t\t} else {\n\n\t\t\t\t\tself.rowManager.setData(self.options.data, false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//deconstructor\n\n\tTabulator.prototype.destroy = function () {\n\n\t\tvar element = this.element;\n\n\t\tTabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication\n\n\n\t\tif (this.options.reactiveData && this.modExists(\"reactiveData\", true)) {\n\n\t\t\tthis.modules.reactiveData.unwatchData();\n\t\t}\n\n\t\t//clear row data\n\n\t\tthis.rowManager.rows.forEach(function (row) {\n\n\t\t\trow.wipe();\n\t\t});\n\n\t\tthis.rowManager.rows = [];\n\n\t\tthis.rowManager.activeRows = [];\n\n\t\tthis.rowManager.displayRows = [];\n\n\t\t//clear event bindings\n\n\t\tif (this.options.autoResize && this.modExists(\"resizeTable\")) {\n\n\t\t\tthis.modules.resizeTable.clearBindings();\n\t\t}\n\n\t\tif (this.modExists(\"keybindings\")) {\n\n\t\t\tthis.modules.keybindings.clearBindings();\n\t\t}\n\n\t\t//clear DOM\n\n\t\twhile (element.firstChild) {\n\t\t\telement.removeChild(element.firstChild);\n\t\t}element.classList.remove(\"tabulator\");\n\t};\n\n\tTabulator.prototype._detectBrowser = function () {\n\n\t\tvar ua = navigator.userAgent || navigator.vendor || window.opera;\n\n\t\tif (ua.indexOf(\"Trident\") > -1) {\n\n\t\t\tthis.browser = \"ie\";\n\n\t\t\tthis.browserSlow = true;\n\t\t} else if (ua.indexOf(\"Edge\") > -1) {\n\n\t\t\tthis.browser = \"edge\";\n\n\t\t\tthis.browserSlow = true;\n\t\t} else if (ua.indexOf(\"Firefox\") > -1) {\n\n\t\t\tthis.browser = \"firefox\";\n\n\t\t\tthis.browserSlow = false;\n\t\t} else {\n\n\t\t\tthis.browser = \"other\";\n\n\t\t\tthis.browserSlow = false;\n\t\t}\n\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0, 4));\n\t};\n\n\t////////////////// Data Handling //////////////////\n\n\n\t//block table redrawing\n\n\tTabulator.prototype.blockRedraw = function () {\n\n\t\treturn this.rowManager.blockRedraw();\n\t};\n\n\t//restore table redrawing\n\n\tTabulator.prototype.restoreRedraw = function () {\n\n\t\treturn this.rowManager.restoreRedraw();\n\t};\n\n\t//local data from local file\n\n\tTabulator.prototype.setDataFromLocalFile = function (extensions) {\n\t\tvar _this17 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar input = document.createElement(\"input\");\n\n\t\t\tinput.type = \"file\";\n\n\t\t\tinput.accept = extensions || \".json,application/json\";\n\n\t\t\tinput.addEventListener(\"change\", function (e) {\n\n\t\t\t\tvar file = input.files[0],\n\t\t\t\t reader = new FileReader(),\n\t\t\t\t data;\n\n\t\t\t\treader.readAsText(file);\n\n\t\t\t\treader.onload = function (e) {\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\n\n\t\t\t\t\t\treject(e);\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t_this17._setData(data).then(function (data) {\n\n\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\t\tresolve(err);\n\t\t\t\t\t});\n\t\t\t\t};\n\n\t\t\t\treader.onerror = function (e) {\n\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\n\n\t\t\t\t\treject();\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tinput.click();\n\t\t});\n\t};\n\n\t//load data\n\n\tTabulator.prototype.setData = function (data, params, config) {\n\n\t\tif (this.modExists(\"ajax\")) {\n\n\t\t\tthis.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\treturn this._setData(data, params, config, false, true);\n\t};\n\n\tTabulator.prototype._setData = function (data, params, config, inPosition, columnsChanged) {\n\n\t\tvar self = this;\n\n\t\tif (typeof data === \"string\") {\n\n\t\t\tif (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0) {\n\n\t\t\t\t//data is a json encoded string\n\n\t\t\t\treturn self.rowManager.setData(JSON.parse(data), inPosition, columnsChanged);\n\t\t\t} else {\n\n\t\t\t\tif (self.modExists(\"ajax\", true)) {\n\n\t\t\t\t\tif (params) {\n\n\t\t\t\t\t\tself.modules.ajax.setParams(params);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (config) {\n\n\t\t\t\t\t\tself.modules.ajax.setConfig(config);\n\t\t\t\t\t}\n\n\t\t\t\t\tself.modules.ajax.setUrl(data);\n\n\t\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\n\t\t\t\t\t\tself.modules.page.reset(true, true);\n\n\t\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t//assume data is url, make ajax call to url to get data\n\n\t\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\n\t\t\tif (data) {\n\n\t\t\t\t//asume data is already an object\n\n\t\t\t\treturn self.rowManager.setData(data, inPosition, columnsChanged);\n\t\t\t} else {\n\n\t\t\t\t//no data provided, check if ajaxURL is present;\n\n\t\t\t\tif (self.modExists(\"ajax\") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) {\n\n\t\t\t\t\tif (self.options.pagination == \"remote\" && self.modExists(\"page\", true)) {\n\n\t\t\t\t\t\tself.modules.page.reset(true, true);\n\n\t\t\t\t\t\treturn self.modules.page.setPage(1);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\treturn self.modules.ajax.loadData(inPosition, columnsChanged);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t//empty data\n\n\t\t\t\t\treturn self.rowManager.setData([], inPosition, columnsChanged);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//clear data\n\n\tTabulator.prototype.clearData = function () {\n\n\t\tif (this.modExists(\"ajax\")) {\n\n\t\t\tthis.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\tthis.rowManager.clearData();\n\t};\n\n\t//get table data array\n\n\tTabulator.prototype.getData = function (active) {\n\n\t\tif (active === true) {\n\n\t\t\tconsole.warn(\"passing a boolean to the getData function is deprecated, you should now pass the string 'active'\");\n\n\t\t\tactive = \"active\";\n\t\t}\n\n\t\treturn this.rowManager.getData(active);\n\t};\n\n\t//get table data array count\n\n\tTabulator.prototype.getDataCount = function (active) {\n\n\t\tif (active === true) {\n\n\t\t\tconsole.warn(\"passing a boolean to the getDataCount function is deprecated, you should now pass the string 'active'\");\n\n\t\t\tactive = \"active\";\n\t\t}\n\n\t\treturn this.rowManager.getDataCount(active);\n\t};\n\n\t//search for specific row components\n\n\tTabulator.prototype.searchRows = function (field, type, value) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\treturn this.modules.filter.search(\"rows\", field, type, value);\n\t\t}\n\t};\n\n\t//search for specific data\n\n\tTabulator.prototype.searchData = function (field, type, value) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\treturn this.modules.filter.search(\"data\", field, type, value);\n\t\t}\n\t};\n\n\t//get table html\n\n\tTabulator.prototype.getHtml = function (visible, style, config) {\n\n\t\tif (this.modExists(\"export\", true)) {\n\n\t\t\treturn this.modules.export.getHtml(visible, style, config);\n\t\t}\n\t};\n\n\t//get print html\n\n\tTabulator.prototype.print = function (visible, style, config) {\n\n\t\tif (this.modExists(\"print\", true)) {\n\n\t\t\treturn this.modules.print.printFullscreen(visible, style, config);\n\t\t}\n\t};\n\n\t//retrieve Ajax URL\n\n\tTabulator.prototype.getAjaxUrl = function () {\n\n\t\tif (this.modExists(\"ajax\", true)) {\n\n\t\t\treturn this.modules.ajax.getUrl();\n\t\t}\n\t};\n\n\t//replace data, keeping table in position with same sort\n\n\tTabulator.prototype.replaceData = function (data, params, config) {\n\n\t\tif (this.modExists(\"ajax\")) {\n\n\t\t\tthis.modules.ajax.blockActiveRequest();\n\t\t}\n\n\t\treturn this._setData(data, params, config, true);\n\t};\n\n\t//update table data\n\n\tTabulator.prototype.updateData = function (data) {\n\t\tvar _this18 = this;\n\n\t\tvar self = this;\n\n\t\tvar responses = 0;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (_this18.modExists(\"ajax\")) {\n\n\t\t\t\t_this18.modules.ajax.blockActiveRequest();\n\t\t\t}\n\n\t\t\tif (typeof data === \"string\") {\n\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\n\t\t\tif (data) {\n\n\t\t\t\tdata.forEach(function (item) {\n\n\t\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\t\tif (row) {\n\n\t\t\t\t\t\tresponses++;\n\n\t\t\t\t\t\trow.updateData(item).then(function () {\n\n\t\t\t\t\t\t\tresponses--;\n\n\t\t\t\t\t\t\tif (!responses) {\n\n\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t};\n\n\tTabulator.prototype.addData = function (data, pos, index) {\n\t\tvar _this19 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (_this19.modExists(\"ajax\")) {\n\n\t\t\t\t_this19.modules.ajax.blockActiveRequest();\n\t\t\t}\n\n\t\t\tif (typeof data === \"string\") {\n\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\n\t\t\tif (data) {\n\n\t\t\t\t_this19.rowManager.addRows(data, pos, index).then(function (rows) {\n\n\t\t\t\t\tvar output = [];\n\n\t\t\t\t\trows.forEach(function (row) {\n\n\t\t\t\t\t\toutput.push(row.getComponent());\n\t\t\t\t\t});\n\n\t\t\t\t\tresolve(output);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t};\n\n\t//update table data\n\n\tTabulator.prototype.updateOrAddData = function (data) {\n\t\tvar _this20 = this;\n\n\t\tvar self = this,\n\t\t rows = [],\n\t\t responses = 0;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (_this20.modExists(\"ajax\")) {\n\n\t\t\t\t_this20.modules.ajax.blockActiveRequest();\n\t\t\t}\n\n\t\t\tif (typeof data === \"string\") {\n\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\n\t\t\tif (data) {\n\n\t\t\t\tdata.forEach(function (item) {\n\n\t\t\t\t\tvar row = self.rowManager.findRow(item[self.options.index]);\n\n\t\t\t\t\tresponses++;\n\n\t\t\t\t\tif (row) {\n\n\t\t\t\t\t\trow.updateData(item).then(function () {\n\n\t\t\t\t\t\t\tresponses--;\n\n\t\t\t\t\t\t\trows.push(row.getComponent());\n\n\t\t\t\t\t\t\tif (!responses) {\n\n\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tself.rowManager.addRows(item).then(function (newRows) {\n\n\t\t\t\t\t\t\tresponses--;\n\n\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\n\n\t\t\t\t\t\t\tif (!responses) {\n\n\t\t\t\t\t\t\t\tresolve(rows);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Update Error - No data provided\");\n\n\t\t\t\treject(\"Update Error - No data provided\");\n\t\t\t}\n\t\t});\n\t};\n\n\t//get row object\n\n\tTabulator.prototype.getRow = function (index) {\n\n\t\tvar row = this.rowManager.findRow(index);\n\n\t\tif (row) {\n\n\t\t\treturn row.getComponent();\n\t\t} else {\n\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t//get row object\n\n\tTabulator.prototype.getRowFromPosition = function (position, active) {\n\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\n\n\t\tif (row) {\n\n\t\t\treturn row.getComponent();\n\t\t} else {\n\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t//delete row from table\n\n\tTabulator.prototype.deleteRow = function (index) {\n\t\tvar _this21 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar self = _this21,\n\t\t\t count = 0,\n\t\t\t successCount = 0,\n\t\t\t foundRows = [];\n\n\t\t\tfunction doneCheck() {\n\n\t\t\t\tcount++;\n\n\t\t\t\tif (count == index.length) {\n\n\t\t\t\t\tif (successCount) {\n\n\t\t\t\t\t\tself.rowManager.reRenderInPosition();\n\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!Array.isArray(index)) {\n\n\t\t\t\tindex = [index];\n\t\t\t}\n\n\t\t\t//find matching rows\n\n\t\t\tindex.forEach(function (item) {\n\n\t\t\t\tvar row = _this21.rowManager.findRow(item, true);\n\n\t\t\t\tif (row) {\n\n\t\t\t\t\tfoundRows.push(row);\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn(\"Delete Error - No matching row found:\", item);\n\n\t\t\t\t\treject(\"Delete Error - No matching row found\");\n\n\t\t\t\t\tdoneCheck();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//sort rows into correct order to ensure smooth delete from table\n\n\t\t\tfoundRows.sort(function (a, b) {\n\n\t\t\t\treturn _this21.rowManager.rows.indexOf(a) > _this21.rowManager.rows.indexOf(b) ? 1 : -1;\n\t\t\t});\n\n\t\t\tfoundRows.forEach(function (row) {\n\n\t\t\t\trow.delete().then(function () {\n\n\t\t\t\t\tsuccessCount++;\n\n\t\t\t\t\tdoneCheck();\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\tdoneCheck();\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t};\n\n\t//add row to table\n\n\tTabulator.prototype.addRow = function (data, pos, index) {\n\t\tvar _this22 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (typeof data === \"string\") {\n\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\n\t\t\t_this22.rowManager.addRows(data, pos, index).then(function (rows) {\n\n\t\t\t\t//recalc column calculations if present\n\n\t\t\t\tif (_this22.modExists(\"columnCalcs\")) {\n\n\t\t\t\t\t_this22.modules.columnCalcs.recalc(_this22.rowManager.activeRows);\n\t\t\t\t}\n\n\t\t\t\tresolve(rows[0].getComponent());\n\t\t\t});\n\t\t});\n\t};\n\n\t//update a row if it exitsts otherwise create it\n\n\tTabulator.prototype.updateOrAddRow = function (index, data) {\n\t\tvar _this23 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar row = _this23.rowManager.findRow(index);\n\n\t\t\tif (typeof data === \"string\") {\n\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\n\t\t\tif (row) {\n\n\t\t\t\trow.updateData(data).then(function () {\n\n\t\t\t\t\t//recalc column calculations if present\n\n\t\t\t\t\tif (_this23.modExists(\"columnCalcs\")) {\n\n\t\t\t\t\t\t_this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(row.getComponent());\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\trow = _this23.rowManager.addRows(data).then(function (rows) {\n\n\t\t\t\t\t//recalc column calculations if present\n\n\t\t\t\t\tif (_this23.modExists(\"columnCalcs\")) {\n\n\t\t\t\t\t\t_this23.modules.columnCalcs.recalc(_this23.rowManager.activeRows);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(rows[0].getComponent());\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\t//update row data\n\n\tTabulator.prototype.updateRow = function (index, data) {\n\t\tvar _this24 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar row = _this24.rowManager.findRow(index);\n\n\t\t\tif (typeof data === \"string\") {\n\n\t\t\t\tdata = JSON.parse(data);\n\t\t\t}\n\n\t\t\tif (row) {\n\n\t\t\t\trow.updateData(data).then(function () {\n\n\t\t\t\t\tresolve(row.getComponent());\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\n\n\t\t\t\treject(\"Update Error - No matching row found\");\n\t\t\t}\n\t\t});\n\t};\n\n\t//scroll to row in DOM\n\n\tTabulator.prototype.scrollToRow = function (index, position, ifVisible) {\n\t\tvar _this25 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar row = _this25.rowManager.findRow(index);\n\n\t\t\tif (row) {\n\n\t\t\t\t_this25.rowManager.scrollToRow(row, position, ifVisible).then(function () {\n\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\n\n\t\t\t\treject(\"Scroll Error - No matching row found\");\n\t\t\t}\n\t\t});\n\t};\n\n\tTabulator.prototype.moveRow = function (from, to, after) {\n\n\t\tvar fromRow = this.rowManager.findRow(from);\n\n\t\tif (fromRow) {\n\n\t\t\tfromRow.moveToRow(to, after);\n\t\t} else {\n\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\n\t\t}\n\t};\n\n\tTabulator.prototype.getRows = function (active) {\n\n\t\tif (active === true) {\n\n\t\t\tconsole.warn(\"passing a boolean to the getRows function is deprecated, you should now pass the string 'active'\");\n\n\t\t\tactive = \"active\";\n\t\t}\n\n\t\treturn this.rowManager.getComponents(active);\n\t};\n\n\t//get position of row in table\n\n\tTabulator.prototype.getRowPosition = function (index, active) {\n\n\t\tvar row = this.rowManager.findRow(index);\n\n\t\tif (row) {\n\n\t\t\treturn this.rowManager.getRowPosition(row, active);\n\t\t} else {\n\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t//copy table data to clipboard\n\n\tTabulator.prototype.copyToClipboard = function (selector) {\n\n\t\tif (this.modExists(\"clipboard\", true)) {\n\n\t\t\tthis.modules.clipboard.copy(selector);\n\t\t}\n\t};\n\n\t/////////////// Column Functions ///////////////\n\n\n\tTabulator.prototype.setColumns = function (definition) {\n\n\t\tthis.columnManager.setColumns(definition);\n\t};\n\n\tTabulator.prototype.getColumns = function (structured) {\n\n\t\treturn this.columnManager.getComponents(structured);\n\t};\n\n\tTabulator.prototype.getColumn = function (field) {\n\n\t\tvar col = this.columnManager.findColumn(field);\n\n\t\tif (col) {\n\n\t\t\treturn col.getComponent();\n\t\t} else {\n\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.getColumnDefinitions = function () {\n\n\t\treturn this.columnManager.getDefinitionTree();\n\t};\n\n\tTabulator.prototype.getColumnLayout = function () {\n\n\t\tif (this.modExists(\"persistence\", true)) {\n\n\t\t\treturn this.modules.persistence.parseColumns(this.columnManager.getColumns());\n\t\t}\n\t};\n\n\tTabulator.prototype.setColumnLayout = function (layout) {\n\n\t\tif (this.modExists(\"persistence\", true)) {\n\n\t\t\tthis.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout));\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tTabulator.prototype.showColumn = function (field) {\n\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\n\t\t\tcolumn.show();\n\n\t\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.modules.responsiveLayout.update();\n\t\t\t}\n\t\t} else {\n\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.hideColumn = function (field) {\n\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\n\t\t\tcolumn.hide();\n\n\t\t\tif (this.options.responsiveLayout && this.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.modules.responsiveLayout.update();\n\t\t\t}\n\t\t} else {\n\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.toggleColumn = function (field) {\n\n\t\tvar column = this.columnManager.findColumn(field);\n\n\t\tif (column) {\n\n\t\t\tif (column.visible) {\n\n\t\t\t\tcolumn.hide();\n\t\t\t} else {\n\n\t\t\t\tcolumn.show();\n\t\t\t}\n\t\t} else {\n\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.addColumn = function (definition, before, field) {\n\t\tvar _this26 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar column = _this26.columnManager.findColumn(field);\n\n\t\t\t_this26.columnManager.addColumn(definition, before, column).then(function (column) {\n\n\t\t\t\tresolve(column.getComponent());\n\t\t\t}).catch(function (err) {\n\n\t\t\t\treject(err);\n\t\t\t});\n\t\t});\n\t};\n\n\tTabulator.prototype.deleteColumn = function (field) {\n\t\tvar _this27 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar column = _this27.columnManager.findColumn(field);\n\n\t\t\tif (column) {\n\n\t\t\t\tcolumn.delete().then(function () {\n\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\n\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\tTabulator.prototype.updateColumnDefinition = function (field, definition) {\n\t\tvar _this28 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar column = _this28.columnManager.findColumn(field);\n\n\t\t\tif (column) {\n\n\t\t\t\tcolumn.updateDefinition(definition).then(function (col) {\n\n\t\t\t\t\tresolve(col);\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\n\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\tTabulator.prototype.moveColumn = function (from, to, after) {\n\n\t\tvar fromColumn = this.columnManager.findColumn(from);\n\n\t\tvar toColumn = this.columnManager.findColumn(to);\n\n\t\tif (fromColumn) {\n\n\t\t\tif (toColumn) {\n\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after);\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\n\t\t\t}\n\t\t} else {\n\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\n\t\t}\n\t};\n\n\t//scroll to column in DOM\n\n\tTabulator.prototype.scrollToColumn = function (field, position, ifVisible) {\n\t\tvar _this29 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar column = _this29.columnManager.findColumn(field);\n\n\t\t\tif (column) {\n\n\t\t\t\t_this29.columnManager.scrollToColumn(column, position, ifVisible).then(function () {\n\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function (err) {\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\n\n\t\t\t\treject(\"Scroll Error - No matching column found\");\n\t\t\t}\n\t\t});\n\t};\n\n\t//////////// Localization Functions ////////////\n\n\tTabulator.prototype.setLocale = function (locale) {\n\n\t\tthis.modules.localize.setLocale(locale);\n\t};\n\n\tTabulator.prototype.getLocale = function () {\n\n\t\treturn this.modules.localize.getLocale();\n\t};\n\n\tTabulator.prototype.getLang = function (locale) {\n\n\t\treturn this.modules.localize.getLang(locale);\n\t};\n\n\t//////////// General Public Functions ////////////\n\n\n\t//redraw list without updating data\n\n\tTabulator.prototype.redraw = function (force) {\n\n\t\tthis.columnManager.redraw(force);\n\n\t\tthis.rowManager.redraw(force);\n\t};\n\n\tTabulator.prototype.setHeight = function (height) {\n\n\t\tif (this.rowManager.renderMode !== \"classic\") {\n\n\t\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\n\n\t\t\tthis.element.style.height = this.options.height;\n\n\t\t\tthis.rowManager.setRenderMode();\n\n\t\t\tthis.rowManager.redraw();\n\t\t} else {\n\n\t\t\tconsole.warn(\"setHeight function is not available in classic render mode\");\n\t\t}\n\t};\n\n\t///////////////////// Sorting ////////////////////\n\n\n\t//trigger sort\n\n\tTabulator.prototype.setSort = function (sortList, dir) {\n\n\t\tif (this.modExists(\"sort\", true)) {\n\n\t\t\tthis.modules.sort.setSort(sortList, dir);\n\n\t\t\tthis.rowManager.sorterRefresh();\n\t\t}\n\t};\n\n\tTabulator.prototype.getSorters = function () {\n\n\t\tif (this.modExists(\"sort\", true)) {\n\n\t\t\treturn this.modules.sort.getSort();\n\t\t}\n\t};\n\n\tTabulator.prototype.clearSort = function () {\n\n\t\tif (this.modExists(\"sort\", true)) {\n\n\t\t\tthis.modules.sort.clear();\n\n\t\t\tthis.rowManager.sorterRefresh();\n\t\t}\n\t};\n\n\t///////////////////// Filtering ////////////////////\n\n\n\t//set standard filters\n\n\tTabulator.prototype.setFilter = function (field, type, value) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tthis.modules.filter.setFilter(field, type, value);\n\n\t\t\tthis.rowManager.filterRefresh();\n\t\t}\n\t};\n\n\t//add filter to array\n\n\tTabulator.prototype.addFilter = function (field, type, value) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tthis.modules.filter.addFilter(field, type, value);\n\n\t\t\tthis.rowManager.filterRefresh();\n\t\t}\n\t};\n\n\t//get all filters\n\n\tTabulator.prototype.getFilters = function (all) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\treturn this.modules.filter.getFilters(all);\n\t\t}\n\t};\n\n\tTabulator.prototype.setHeaderFilterFocus = function (field) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tvar column = this.columnManager.findColumn(field);\n\n\t\t\tif (column) {\n\n\t\t\t\tthis.modules.filter.setHeaderFilterFocus(column);\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.getHeaderFilterValue = function (field) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tvar column = this.columnManager.findColumn(field);\n\n\t\t\tif (column) {\n\n\t\t\t\treturn this.modules.filter.getHeaderFilterValue(column);\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.setHeaderFilterValue = function (field, value) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tvar column = this.columnManager.findColumn(field);\n\n\t\t\tif (column) {\n\n\t\t\t\tthis.modules.filter.setHeaderFilterValue(column, value);\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.getHeaderFilters = function () {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\treturn this.modules.filter.getHeaderFilters();\n\t\t}\n\t};\n\n\t//remove filter from array\n\n\tTabulator.prototype.removeFilter = function (field, type, value) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tthis.modules.filter.removeFilter(field, type, value);\n\n\t\t\tthis.rowManager.filterRefresh();\n\t\t}\n\t};\n\n\t//clear filters\n\n\tTabulator.prototype.clearFilter = function (all) {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tthis.modules.filter.clearFilter(all);\n\n\t\t\tthis.rowManager.filterRefresh();\n\t\t}\n\t};\n\n\t//clear header filters\n\n\tTabulator.prototype.clearHeaderFilter = function () {\n\n\t\tif (this.modExists(\"filter\", true)) {\n\n\t\t\tthis.modules.filter.clearHeaderFilter();\n\n\t\t\tthis.rowManager.filterRefresh();\n\t\t}\n\t};\n\n\t///////////////////// Filtering ////////////////////\n\n\tTabulator.prototype.selectRow = function (rows) {\n\n\t\tif (this.modExists(\"selectRow\", true)) {\n\n\t\t\tif (rows === true) {\n\n\t\t\t\tconsole.warn(\"passing a boolean to the selectRowselectRow function is deprecated, you should now pass the string 'active'\");\n\n\t\t\t\trows = \"active\";\n\t\t\t}\n\n\t\t\tthis.modules.selectRow.selectRows(rows);\n\t\t}\n\t};\n\n\tTabulator.prototype.deselectRow = function (rows) {\n\n\t\tif (this.modExists(\"selectRow\", true)) {\n\n\t\t\tthis.modules.selectRow.deselectRows(rows);\n\t\t}\n\t};\n\n\tTabulator.prototype.toggleSelectRow = function (row) {\n\n\t\tif (this.modExists(\"selectRow\", true)) {\n\n\t\t\tthis.modules.selectRow.toggleRow(row);\n\t\t}\n\t};\n\n\tTabulator.prototype.getSelectedRows = function () {\n\n\t\tif (this.modExists(\"selectRow\", true)) {\n\n\t\t\treturn this.modules.selectRow.getSelectedRows();\n\t\t}\n\t};\n\n\tTabulator.prototype.getSelectedData = function () {\n\n\t\tif (this.modExists(\"selectRow\", true)) {\n\n\t\t\treturn this.modules.selectRow.getSelectedData();\n\t\t}\n\t};\n\n\t//////////// Pagination Functions ////////////\n\n\n\tTabulator.prototype.setMaxPage = function (max) {\n\n\t\tif (this.options.pagination && this.modExists(\"page\")) {\n\n\t\t\tthis.modules.page.setMaxPage(max);\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.setPage = function (page) {\n\n\t\tif (this.options.pagination && this.modExists(\"page\")) {\n\n\t\t\treturn this.modules.page.setPage(page);\n\t\t} else {\n\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\treject();\n\t\t\t});\n\t\t}\n\t};\n\n\tTabulator.prototype.setPageToRow = function (row) {\n\t\tvar _this30 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (_this30.options.pagination && _this30.modExists(\"page\")) {\n\n\t\t\t\trow = _this30.rowManager.findRow(row);\n\n\t\t\t\tif (row) {\n\n\t\t\t\t\t_this30.modules.page.setPageToRow(row).then(function () {\n\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}).catch(function () {\n\n\t\t\t\t\t\treject();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\n\t\t\t\t\treject();\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\tTabulator.prototype.setPageSize = function (size) {\n\n\t\tif (this.options.pagination && this.modExists(\"page\")) {\n\n\t\t\tthis.modules.page.setPageSize(size);\n\n\t\t\tthis.modules.page.setPage(1).then(function () {}).catch(function () {});\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.getPageSize = function () {\n\n\t\tif (this.options.pagination && this.modExists(\"page\", true)) {\n\n\t\t\treturn this.modules.page.getPageSize();\n\t\t}\n\t};\n\n\tTabulator.prototype.previousPage = function () {\n\n\t\tif (this.options.pagination && this.modExists(\"page\")) {\n\n\t\t\tthis.modules.page.previousPage();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.nextPage = function () {\n\n\t\tif (this.options.pagination && this.modExists(\"page\")) {\n\n\t\t\tthis.modules.page.nextPage();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.getPage = function () {\n\n\t\tif (this.options.pagination && this.modExists(\"page\")) {\n\n\t\t\treturn this.modules.page.getPage();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.getPageMax = function () {\n\n\t\tif (this.options.pagination && this.modExists(\"page\")) {\n\n\t\t\treturn this.modules.page.getPageMax();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t///////////////// Grouping Functions ///////////////\n\n\n\tTabulator.prototype.setGroupBy = function (groups) {\n\n\t\tif (this.modExists(\"groupRows\", true)) {\n\n\t\t\tthis.options.groupBy = groups;\n\n\t\t\tthis.modules.groupRows.initialize();\n\n\t\t\tthis.rowManager.refreshActiveData(\"display\");\n\n\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\n\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t}\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.setGroupStartOpen = function (values) {\n\n\t\tif (this.modExists(\"groupRows\", true)) {\n\n\t\t\tthis.options.groupStartOpen = values;\n\n\t\t\tthis.modules.groupRows.initialize();\n\n\t\t\tif (this.options.groupBy) {\n\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t\t}\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.setGroupHeader = function (values) {\n\n\t\tif (this.modExists(\"groupRows\", true)) {\n\n\t\t\tthis.options.groupHeader = values;\n\n\t\t\tthis.modules.groupRows.initialize();\n\n\t\t\tif (this.options.groupBy) {\n\n\t\t\t\tthis.rowManager.refreshActiveData(\"group\");\n\n\t\t\t\tif (this.options.persistence && this.modExists(\"persistence\", true) && this.modules.persistence.config.group) {\n\n\t\t\t\t\tthis.modules.persistence.save(\"group\");\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\n\t\t\t}\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.getGroups = function (values) {\n\n\t\tif (this.modExists(\"groupRows\", true)) {\n\n\t\t\treturn this.modules.groupRows.getGroups(true);\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t// get grouped table data in the same format as getData()\n\n\tTabulator.prototype.getGroupedData = function () {\n\n\t\tif (this.modExists(\"groupRows\", true)) {\n\n\t\t\treturn this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData();\n\t\t}\n\t};\n\n\t///////////////// Column Calculation Functions ///////////////\n\n\tTabulator.prototype.getCalcResults = function () {\n\n\t\tif (this.modExists(\"columnCalcs\", true)) {\n\n\t\t\treturn this.modules.columnCalcs.getResults();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.recalc = function () {\n\n\t\tif (this.modExists(\"columnCalcs\", true)) {\n\n\t\t\tthis.modules.columnCalcs.recalcAll(this.rowManager.activeRows);\n\t\t}\n\t};\n\n\t/////////////// Navigation Management //////////////\n\n\n\tTabulator.prototype.navigatePrev = function () {\n\n\t\tvar cell = false;\n\n\t\tif (this.modExists(\"edit\", true)) {\n\n\t\t\tcell = this.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\n\t\t\t\treturn cell.nav().prev();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tTabulator.prototype.navigateNext = function () {\n\n\t\tvar cell = false;\n\n\t\tif (this.modExists(\"edit\", true)) {\n\n\t\t\tcell = this.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\n\t\t\t\treturn cell.nav().next();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tTabulator.prototype.navigateLeft = function () {\n\n\t\tvar cell = false;\n\n\t\tif (this.modExists(\"edit\", true)) {\n\n\t\t\tcell = this.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\treturn cell.nav().left();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tTabulator.prototype.navigateRight = function () {\n\n\t\tvar cell = false;\n\n\t\tif (this.modExists(\"edit\", true)) {\n\n\t\t\tcell = this.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\treturn cell.nav().right();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tTabulator.prototype.navigateUp = function () {\n\n\t\tvar cell = false;\n\n\t\tif (this.modExists(\"edit\", true)) {\n\n\t\t\tcell = this.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\treturn cell.nav().up();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tTabulator.prototype.navigateDown = function () {\n\n\t\tvar cell = false;\n\n\t\tif (this.modExists(\"edit\", true)) {\n\n\t\t\tcell = this.modules.edit.currentCell;\n\n\t\t\tif (cell) {\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\treturn cell.nav().down();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n\n\t/////////////// History Management //////////////\n\n\tTabulator.prototype.undo = function () {\n\n\t\tif (this.options.history && this.modExists(\"history\", true)) {\n\n\t\t\treturn this.modules.history.undo();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.redo = function () {\n\n\t\tif (this.options.history && this.modExists(\"history\", true)) {\n\n\t\t\treturn this.modules.history.redo();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.getHistoryUndoSize = function () {\n\n\t\tif (this.options.history && this.modExists(\"history\", true)) {\n\n\t\t\treturn this.modules.history.getHistoryUndoSize();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.getHistoryRedoSize = function () {\n\n\t\tif (this.options.history && this.modExists(\"history\", true)) {\n\n\t\t\treturn this.modules.history.getHistoryRedoSize();\n\t\t} else {\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/////////////// Download Management //////////////\n\n\n\tTabulator.prototype.download = function (type, filename, options, active) {\n\n\t\tif (this.modExists(\"download\", true)) {\n\n\t\t\tthis.modules.download.download(type, filename, options, active);\n\t\t}\n\t};\n\n\tTabulator.prototype.downloadToTab = function (type, filename, options, active) {\n\n\t\tif (this.modExists(\"download\", true)) {\n\n\t\t\tthis.modules.download.download(type, filename, options, active, true);\n\t\t}\n\t};\n\n\t/////////// Inter Table Communications ///////////\n\n\n\tTabulator.prototype.tableComms = function (table, module, action, data) {\n\n\t\tthis.modules.comms.receive(table, module, action, data);\n\t};\n\n\t////////////// Extension Management //////////////\n\n\n\t//object to hold module\n\n\tTabulator.prototype.moduleBindings = {};\n\n\t//extend module\n\n\tTabulator.prototype.extendModule = function (name, property, values) {\n\n\t\tif (Tabulator.prototype.moduleBindings[name]) {\n\n\t\t\tvar source = Tabulator.prototype.moduleBindings[name].prototype[property];\n\n\t\t\tif (source) {\n\n\t\t\t\tif ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == \"object\") {\n\n\t\t\t\t\tfor (var key in values) {\n\n\t\t\t\t\t\tsource[key] = values[key];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\n\t\t\t}\n\t\t} else {\n\n\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\n\t\t}\n\t};\n\n\t//add module to tabulator\n\n\tTabulator.prototype.registerModule = function (name, module) {\n\n\t\tvar self = this;\n\n\t\tTabulator.prototype.moduleBindings[name] = module;\n\t};\n\n\t//ensure that module are bound to instantiated function\n\n\tTabulator.prototype.bindModules = function () {\n\n\t\tthis.modules = {};\n\n\t\tfor (var name in Tabulator.prototype.moduleBindings) {\n\n\t\t\tthis.modules[name] = new Tabulator.prototype.moduleBindings[name](this);\n\t\t}\n\t};\n\n\t//Check for module\n\n\tTabulator.prototype.modExists = function (plugin, required) {\n\n\t\tif (this.modules[plugin]) {\n\n\t\t\treturn true;\n\t\t} else {\n\n\t\t\tif (required) {\n\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tTabulator.prototype.helpers = {\n\n\t\telVisible: function elVisible(el) {\n\n\t\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\n\t\t},\n\n\t\telOffset: function elOffset(el) {\n\n\t\t\tvar box = el.getBoundingClientRect();\n\n\t\t\treturn {\n\n\t\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\n\n\t\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\n\n\t\t\t};\n\t\t},\n\n\t\tdeepClone: function deepClone(obj) {\n\n\t\t\tvar clone = Array.isArray(obj) ? [] : {};\n\n\t\t\tfor (var i in obj) {\n\n\t\t\t\tif (obj[i] != null && _typeof(obj[i]) === \"object\") {\n\n\t\t\t\t\tif (obj[i] instanceof Date) {\n\n\t\t\t\t\t\tclone[i] = new Date(obj[i]);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tclone[i] = this.deepClone(obj[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tclone[i] = obj[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn clone;\n\t\t}\n\n\t};\n\n\tTabulator.prototype.comms = {\n\n\t\ttables: [],\n\n\t\tregister: function register(table) {\n\n\t\t\tTabulator.prototype.comms.tables.push(table);\n\t\t},\n\n\t\tderegister: function deregister(table) {\n\n\t\t\tvar index = Tabulator.prototype.comms.tables.indexOf(table);\n\n\t\t\tif (index > -1) {\n\n\t\t\t\tTabulator.prototype.comms.tables.splice(index, 1);\n\t\t\t}\n\t\t},\n\n\t\tlookupTable: function lookupTable(query, silent) {\n\n\t\t\tvar results = [],\n\t\t\t matches,\n\t\t\t match;\n\n\t\t\tif (typeof query === \"string\") {\n\n\t\t\t\tmatches = document.querySelectorAll(query);\n\n\t\t\t\tif (matches.length) {\n\n\t\t\t\t\tfor (var i = 0; i < matches.length; i++) {\n\n\t\t\t\t\t\tmatch = Tabulator.prototype.comms.matchElement(matches[i]);\n\n\t\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t\tresults.push(match);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement || query instanceof Tabulator) {\n\n\t\t\t\tmatch = Tabulator.prototype.comms.matchElement(query);\n\n\t\t\t\tif (match) {\n\n\t\t\t\t\tresults.push(match);\n\t\t\t\t}\n\t\t\t} else if (Array.isArray(query)) {\n\n\t\t\t\tquery.forEach(function (item) {\n\n\t\t\t\t\tresults = results.concat(Tabulator.prototype.comms.lookupTable(item));\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tif (!silent) {\n\n\t\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn results;\n\t\t},\n\n\t\tmatchElement: function matchElement(element) {\n\n\t\t\treturn Tabulator.prototype.comms.tables.find(function (table) {\n\n\t\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\n\t\t\t});\n\t\t}\n\n\t};\n\n\tTabulator.prototype.findTable = function (query) {\n\n\t\tvar results = Tabulator.prototype.comms.lookupTable(query, true);\n\n\t\treturn Array.isArray(results) && !results.length ? false : results;\n\t};\n\n\tvar Layout = function Layout(table) {\n\n\t\tthis.table = table;\n\n\t\tthis.mode = null;\n\t};\n\n\t//initialize layout system\n\n\n\tLayout.prototype.initialize = function (layout) {\n\n\t\tif (this.modes[layout]) {\n\n\t\t\tthis.mode = layout;\n\t\t} else {\n\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\n\n\t\t\tthis.mode = 'fitData';\n\t\t}\n\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\n\t};\n\n\tLayout.prototype.getMode = function () {\n\n\t\treturn this.mode;\n\t};\n\n\t//trigger table layout\n\n\n\tLayout.prototype.layout = function () {\n\n\t\tthis.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\n\t};\n\n\t//layout render functions\n\n\n\tLayout.prototype.modes = {\n\n\t\t//resize columns to fit data the contain\n\n\n\t\t\"fitData\": function fitData(columns) {\n\n\t\t\tcolumns.forEach(function (column) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t});\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t},\n\n\t\t//resize columns to fit data the contain and stretch row to fill table\n\n\n\t\t\"fitDataFill\": function fitDataFill(columns) {\n\n\t\t\tcolumns.forEach(function (column) {\n\n\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t});\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\t\t},\n\n\t\t//resize columns to fit data the contain and stretch last column to fill table\n\n\n\t\t\"fitDataStretch\": function fitDataStretch(columns) {\n\t\t\tvar _this31 = this;\n\n\t\t\tvar colsWidth = 0,\n\t\t\t tableWidth = this.table.rowManager.element.clientWidth,\n\t\t\t gap = 0,\n\t\t\t lastCol = false;\n\n\t\t\tcolumns.forEach(function (column, i) {\n\n\t\t\t\tif (!column.widthFixed) {\n\n\t\t\t\t\tcolumn.reinitializeWidth();\n\t\t\t\t}\n\n\t\t\t\tif (_this31.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible) {\n\n\t\t\t\t\tlastCol = column;\n\t\t\t\t}\n\n\t\t\t\tif (column.visible) {\n\n\t\t\t\t\tcolsWidth += column.getWidth();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (lastCol) {\n\n\t\t\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\n\n\t\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\t\tlastCol.setWidth(0);\n\n\t\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t\t}\n\n\t\t\t\tif (gap > 0) {\n\n\t\t\t\t\tlastCol.setWidth(gap);\n\t\t\t\t} else {\n\n\t\t\t\t\tlastCol.reinitializeWidth();\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t//resize columns to fit\n\n\n\t\t\"fitColumns\": function fitColumns(columns) {\n\n\t\t\tvar self = this;\n\n\t\t\tvar totalWidth = self.table.element.clientWidth; //table element width\n\n\n\t\t\tvar fixedWidth = 0; //total width of columns with a defined width\n\n\n\t\t\tvar flexWidth = 0; //total width available to flexible columns\n\n\n\t\t\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\n\n\n\t\t\tvar flexColWidth = 0; //desired width of flexible columns\n\n\n\t\t\tvar flexColumns = []; //array of flexible width columns\n\n\n\t\t\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\n\n\n\t\t\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\n\n\n\t\t\tvar overflowWidth = 0; //horizontal overflow width\n\n\n\t\t\tvar gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps\n\n\n\t\t\tfunction calcWidth(width) {\n\n\t\t\t\tvar colWidth;\n\n\t\t\t\tif (typeof width == \"string\") {\n\n\t\t\t\t\tif (width.indexOf(\"%\") > -1) {\n\n\t\t\t\t\t\tcolWidth = totalWidth / 100 * parseInt(width);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcolWidth = parseInt(width);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\tcolWidth = width;\n\t\t\t\t}\n\n\t\t\t\treturn colWidth;\n\t\t\t}\n\n\t\t\t//ensure columns resize to take up the correct amount of space\n\n\n\t\t\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols) {\n\n\t\t\t\tvar oversizeCols = [],\n\t\t\t\t oversizeSpace = 0,\n\t\t\t\t remainingSpace = 0,\n\t\t\t\t nextColWidth = 0,\n\t\t\t\t gap = 0,\n\t\t\t\t changeUnits = 0,\n\t\t\t\t undersizeCols = [];\n\n\t\t\t\tfunction calcGrow(col) {\n\n\t\t\t\t\treturn colWidth * (col.column.definition.widthGrow || 1);\n\t\t\t\t}\n\n\t\t\t\tfunction calcShrink(col) {\n\n\t\t\t\t\treturn calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0);\n\t\t\t\t}\n\n\t\t\t\tcolumns.forEach(function (col, i) {\n\n\t\t\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\n\n\t\t\t\t\tif (col.column.minWidth >= width) {\n\n\t\t\t\t\t\toversizeCols.push(col);\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tundersizeCols.push(col);\n\n\t\t\t\t\t\tchangeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (oversizeCols.length) {\n\n\t\t\t\t\toversizeCols.forEach(function (col) {\n\n\t\t\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\n\n\t\t\t\t\t\tcol.width = col.column.minWidth;\n\t\t\t\t\t});\n\n\t\t\t\t\tremainingSpace = freeSpace - oversizeSpace;\n\n\t\t\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace;\n\n\t\t\t\t\tgap = remainingSpace - nextColWidth * changeUnits;\n\n\t\t\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\n\t\t\t\t} else {\n\n\t\t\t\t\tgap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace;\n\n\t\t\t\t\tundersizeCols.forEach(function (column) {\n\n\t\t\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn gap;\n\t\t\t}\n\n\t\t\tif (this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)) {\n\n\t\t\t\tthis.table.modules.responsiveLayout.update();\n\t\t\t}\n\n\t\t\t//adjust for vertical scrollbar if present\n\n\n\t\t\tif (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) {\n\n\t\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\n\t\t\t}\n\n\t\t\tcolumns.forEach(function (column) {\n\n\t\t\t\tvar width, minWidth, colWidth;\n\n\t\t\t\tif (column.visible) {\n\n\t\t\t\t\twidth = column.definition.width;\n\n\t\t\t\t\tminWidth = parseInt(column.minWidth);\n\n\t\t\t\t\tif (width) {\n\n\t\t\t\t\t\tcolWidth = calcWidth(width);\n\n\t\t\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\n\n\t\t\t\t\t\tif (column.definition.widthShrink) {\n\n\t\t\t\t\t\t\tfixedShrinkColumns.push({\n\n\t\t\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\t\t\twidth: colWidth > minWidth ? colWidth : minWidth\n\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tflexColumns.push({\n\n\t\t\t\t\t\t\tcolumn: column,\n\n\t\t\t\t\t\t\twidth: 0\n\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//calculate available space\n\n\n\t\t\tflexWidth = totalWidth - fixedWidth;\n\n\t\t\t//calculate correct column size\n\n\n\t\t\tflexColWidth = Math.floor(flexWidth / flexGrowUnits);\n\n\t\t\t//generate column widths\n\n\n\t\t\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\n\n\t\t\t//increase width of last column to account for rounding errors\n\n\n\t\t\tif (flexColumns.length && gapFill > 0) {\n\n\t\t\t\tflexColumns[flexColumns.length - 1].width += +gapFill;\n\t\t\t}\n\n\t\t\t//caculate space for columns to be shrunk into\n\n\n\t\t\tflexColumns.forEach(function (col) {\n\n\t\t\t\tflexWidth -= col.width;\n\t\t\t});\n\n\t\t\toverflowWidth = Math.abs(gapFill) + flexWidth;\n\n\t\t\t//shrink oversize columns if there is no available space\n\n\n\t\t\tif (overflowWidth > 0 && flexShrinkUnits) {\n\n\t\t\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\n\t\t\t}\n\n\t\t\t//decrease width of last column to account for rounding errors\n\n\n\t\t\tif (fixedShrinkColumns.length) {\n\n\t\t\t\tfixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill;\n\t\t\t}\n\n\t\t\tflexColumns.forEach(function (col) {\n\n\t\t\t\tcol.column.setWidth(col.width);\n\t\t\t});\n\n\t\t\tfixedShrinkColumns.forEach(function (col) {\n\n\t\t\t\tcol.column.setWidth(col.width);\n\t\t\t});\n\t\t}\n\n\t};\n\n\tTabulator.prototype.registerModule(\"layout\", Layout);\n\n\tvar Localize = function Localize(table) {\n\n\t\tthis.table = table; //hold Tabulator object\n\n\t\tthis.locale = \"default\"; //current locale\n\n\t\tthis.lang = false; //current language\n\n\t\tthis.bindings = {}; //update events to call when locale is changed\n\t};\n\n\t//set header placehoder\n\n\tLocalize.prototype.setHeaderFilterPlaceholder = function (placeholder) {\n\n\t\tthis.langs.default.headerFilters.default = placeholder;\n\t};\n\n\t//set header filter placeholder by column\n\n\tLocalize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) {\n\n\t\tthis.langs.default.headerFilters.columns[column] = placeholder;\n\n\t\tif (this.lang && !this.lang.headerFilters.columns[column]) {\n\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\n\t\t}\n\t};\n\n\t//setup a lang description object\n\n\tLocalize.prototype.installLang = function (locale, lang) {\n\n\t\tif (this.langs[locale]) {\n\n\t\t\tthis._setLangProp(this.langs[locale], lang);\n\t\t} else {\n\n\t\t\tthis.langs[locale] = lang;\n\t\t}\n\t};\n\n\tLocalize.prototype._setLangProp = function (lang, values) {\n\n\t\tfor (var key in values) {\n\n\t\t\tif (lang[key] && _typeof(lang[key]) == \"object\") {\n\n\t\t\t\tthis._setLangProp(lang[key], values[key]);\n\t\t\t} else {\n\n\t\t\t\tlang[key] = values[key];\n\t\t\t}\n\t\t}\n\t};\n\n\t//set current locale\n\n\tLocalize.prototype.setLocale = function (desiredLocale) {\n\n\t\tvar self = this;\n\n\t\tdesiredLocale = desiredLocale || \"default\";\n\n\t\t//fill in any matching languge values\n\n\t\tfunction traverseLang(trans, path) {\n\n\t\t\tfor (var prop in trans) {\n\n\t\t\t\tif (_typeof(trans[prop]) == \"object\") {\n\n\t\t\t\t\tif (!path[prop]) {\n\n\t\t\t\t\t\tpath[prop] = {};\n\t\t\t\t\t}\n\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\n\t\t\t\t} else {\n\n\t\t\t\t\tpath[prop] = trans[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//determing correct locale to load\n\n\t\tif (desiredLocale === true && navigator.language) {\n\n\t\t\t//get local from system\n\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\n\t\t}\n\n\t\tif (desiredLocale) {\n\n\t\t\t//if locale is not set, check for matching top level locale else use default\n\n\t\t\tif (!self.langs[desiredLocale]) {\n\n\t\t\t\tvar prefix = desiredLocale.split(\"-\")[0];\n\n\t\t\t\tif (self.langs[prefix]) {\n\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\n\n\t\t\t\t\tdesiredLocale = prefix;\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\n\n\t\t\t\t\tdesiredLocale = \"default\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tself.locale = desiredLocale;\n\n\t\t//load default lang template\n\n\t\tself.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {});\n\n\t\tif (desiredLocale != \"default\") {\n\n\t\t\ttraverseLang(self.langs[desiredLocale], self.lang);\n\t\t}\n\n\t\tself.table.options.localized.call(self.table, self.locale, self.lang);\n\n\t\tself._executeBindings();\n\t};\n\n\t//get current locale\n\n\tLocalize.prototype.getLocale = function (locale) {\n\n\t\treturn self.locale;\n\t};\n\n\t//get lang object for given local or current if none provided\n\n\tLocalize.prototype.getLang = function (locale) {\n\n\t\treturn locale ? this.langs[locale] : this.lang;\n\t};\n\n\t//get text for current locale\n\n\tLocalize.prototype.getText = function (path, value) {\n\n\t\tvar path = value ? path + \"|\" + value : path,\n\t\t pathArray = path.split(\"|\"),\n\t\t text = this._getLangElement(pathArray, this.locale);\n\n\t\t// if(text === false){\n\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\n\n\t\t// }\n\n\n\t\treturn text || \"\";\n\t};\n\n\t//traverse langs object and find localized copy\n\n\tLocalize.prototype._getLangElement = function (path, locale) {\n\n\t\tvar self = this;\n\n\t\tvar root = self.lang;\n\n\t\tpath.forEach(function (level) {\n\n\t\t\tvar rootPath;\n\n\t\t\tif (root) {\n\n\t\t\t\trootPath = root[level];\n\n\t\t\t\tif (typeof rootPath != \"undefined\") {\n\n\t\t\t\t\troot = rootPath;\n\t\t\t\t} else {\n\n\t\t\t\t\troot = false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn root;\n\t};\n\n\t//set update binding\n\n\tLocalize.prototype.bind = function (path, callback) {\n\n\t\tif (!this.bindings[path]) {\n\n\t\t\tthis.bindings[path] = [];\n\t\t}\n\n\t\tthis.bindings[path].push(callback);\n\n\t\tcallback(this.getText(path), this.lang);\n\t};\n\n\t//itterate through bindings and trigger updates\n\n\tLocalize.prototype._executeBindings = function () {\n\n\t\tvar self = this;\n\n\t\tvar _loop = function _loop(path) {\n\n\t\t\tself.bindings[path].forEach(function (binding) {\n\n\t\t\t\tbinding(self.getText(path), self.lang);\n\t\t\t});\n\t\t};\n\n\t\tfor (var path in self.bindings) {\n\t\t\t_loop(path);\n\t\t}\n\t};\n\n\t//Localized text listings\n\n\tLocalize.prototype.langs = {\n\n\t\t\"default\": { //hold default locale text\n\n\t\t\t\"groups\": {\n\n\t\t\t\t\"item\": \"item\",\n\n\t\t\t\t\"items\": \"items\"\n\n\t\t\t},\n\n\t\t\t\"columns\": {},\n\n\t\t\t\"ajax\": {\n\n\t\t\t\t\"loading\": \"Loading\",\n\n\t\t\t\t\"error\": \"Error\"\n\n\t\t\t},\n\n\t\t\t\"pagination\": {\n\n\t\t\t\t\"page_size\": \"Page Size\",\n\n\t\t\t\t\"first\": \"First\",\n\n\t\t\t\t\"first_title\": \"First Page\",\n\n\t\t\t\t\"last\": \"Last\",\n\n\t\t\t\t\"last_title\": \"Last Page\",\n\n\t\t\t\t\"prev\": \"Prev\",\n\n\t\t\t\t\"prev_title\": \"Prev Page\",\n\n\t\t\t\t\"next\": \"Next\",\n\n\t\t\t\t\"next_title\": \"Next Page\"\n\n\t\t\t},\n\n\t\t\t\"headerFilters\": {\n\n\t\t\t\t\"default\": \"filter column...\",\n\n\t\t\t\t\"columns\": {}\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tTabulator.prototype.registerModule(\"localize\", Localize);\n\n\tvar Comms = function Comms(table) {\n\n\t\tthis.table = table;\n\t};\n\n\tComms.prototype.getConnections = function (selectors) {\n\n\t\tvar self = this,\n\t\t connections = [],\n\t\t connection;\n\n\t\tconnection = Tabulator.prototype.comms.lookupTable(selectors);\n\n\t\tconnection.forEach(function (con) {\n\n\t\t\tif (self.table !== con) {\n\n\t\t\t\tconnections.push(con);\n\t\t\t}\n\t\t});\n\n\t\treturn connections;\n\t};\n\n\tComms.prototype.send = function (selectors, module, action, data) {\n\n\t\tvar self = this,\n\t\t connections = this.getConnections(selectors);\n\n\t\tconnections.forEach(function (connection) {\n\n\t\t\tconnection.tableComms(self.table.element, module, action, data);\n\t\t});\n\n\t\tif (!connections.length && selectors) {\n\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\n\t\t}\n\t};\n\n\tComms.prototype.receive = function (table, module, action, data) {\n\n\t\tif (this.table.modExists(module)) {\n\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\n\t\t} else {\n\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"comms\", Comms);\n\n\tvar Accessor = function Accessor(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"]; //list of accessor types\n\t};\n\n\t//initialize column accessor\n\tAccessor.prototype.initializeColumn = function (column) {\n\t\tvar self = this,\n\t\t match = false,\n\t\t config = {};\n\n\t\tthis.allowedTypes.forEach(function (type) {\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\t accessor;\n\n\t\t\tif (column.definition[key]) {\n\t\t\t\taccessor = self.lookupAccessor(column.definition[key]);\n\n\t\t\t\tif (accessor) {\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\taccessor: accessor,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tcolumn.modules.accessor = config;\n\t\t}\n\t};\n\n\tAccessor.prototype.lookupAccessor = function (value) {\n\t\tvar accessor = false;\n\n\t\t//set column accessor\n\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.accessors[value]) {\n\t\t\t\t\taccessor = this.accessors[value];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\taccessor = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn accessor;\n\t};\n\n\t//apply accessor to row\n\tAccessor.prototype.transformRow = function (dataIn, type) {\n\t\tvar self = this,\n\t\t key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1));\n\n\t\t//clone data object with deep copy to isolate internal data from returned result\n\t\tvar data = Tabulator.prototype.helpers.deepClone(dataIn || {});\n\n\t\tself.table.columnManager.traverse(function (column) {\n\t\t\tvar value, accessor, params, component;\n\n\t\t\tif (column.modules.accessor) {\n\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\n\n\t\t\t\tif (accessor) {\n\t\t\t\t\tvalue = column.getFieldValue(data);\n\n\t\t\t\t\tif (value != \"undefined\") {\n\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, component) : accessor.params;\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, component));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t},\n\n\t//default accessors\n\tAccessor.prototype.accessors = {};\n\n\tTabulator.prototype.registerModule(\"accessor\", Accessor);\n\tvar Ajax = function Ajax(table) {\n\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.config = false; //hold config object for ajax request\n\t\tthis.url = \"\"; //request URL\n\t\tthis.urlGenerator = false;\n\t\tthis.params = false; //request parameters\n\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\n\t\tthis.msgElement = this.createMsgElement(); //message element\n\t\tthis.loadingElement = false;\n\t\tthis.errorElement = false;\n\t\tthis.loaderPromise = false;\n\n\t\tthis.progressiveLoad = false;\n\t\tthis.loading = false;\n\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\n\t};\n\n\t//initialize setup options\n\tAjax.prototype.initialize = function () {\n\t\tvar template;\n\n\t\tthis.loaderElement.appendChild(this.msgElement);\n\n\t\tif (this.table.options.ajaxLoaderLoading) {\n\t\t\tif (typeof this.table.options.ajaxLoaderLoading == \"string\") {\n\t\t\t\ttemplate = document.createElement('template');\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderLoading.trim();\n\t\t\t\tthis.loadingElement = template.content.firstChild;\n\t\t\t} else {\n\t\t\t\tthis.loadingElement = this.table.options.ajaxLoaderLoading;\n\t\t\t}\n\t\t}\n\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise;\n\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator;\n\n\t\tif (this.table.options.ajaxLoaderError) {\n\t\t\tif (typeof this.table.options.ajaxLoaderError == \"string\") {\n\t\t\t\ttemplate = document.createElement('template');\n\t\t\t\ttemplate.innerHTML = this.table.options.ajaxLoaderError.trim();\n\t\t\t\tthis.errorElement = template.content.firstChild;\n\t\t\t} else {\n\t\t\t\tthis.errorElement = this.table.options.ajaxLoaderError;\n\t\t\t}\n\t\t}\n\n\t\tif (this.table.options.ajaxParams) {\n\t\t\tthis.setParams(this.table.options.ajaxParams);\n\t\t}\n\n\t\tif (this.table.options.ajaxConfig) {\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\n\t\t}\n\n\t\tif (this.table.options.ajaxURL) {\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\n\t\t}\n\n\t\tif (this.table.options.ajaxProgressiveLoad) {\n\t\t\tif (this.table.options.pagination) {\n\t\t\t\tthis.progressiveLoad = false;\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\n\t\t\t} else {\n\t\t\t\tif (this.table.modExists(\"page\")) {\n\t\t\t\t\tthis.progressiveLoad = this.table.options.ajaxProgressiveLoad;\n\t\t\t\t\tthis.table.modules.page.initializeProgressive(this.progressiveLoad);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error(\"Pagination plugin is required for progressive ajax loading\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tAjax.prototype.createLoaderElement = function () {\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-loader\");\n\t\treturn el;\n\t};\n\n\tAjax.prototype.createMsgElement = function () {\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-loader-msg\");\n\t\tel.setAttribute(\"role\", \"alert\");\n\n\t\treturn el;\n\t};\n\n\t//set ajax params\n\tAjax.prototype.setParams = function (params, update) {\n\t\tif (update) {\n\t\t\tthis.params = this.params || {};\n\n\t\t\tfor (var key in params) {\n\t\t\t\tthis.params[key] = params[key];\n\t\t\t}\n\t\t} else {\n\t\t\tthis.params = params;\n\t\t}\n\t};\n\n\tAjax.prototype.getParams = function () {\n\t\treturn this.params || {};\n\t};\n\n\t//load config object\n\tAjax.prototype.setConfig = function (config) {\n\t\tthis._loadDefaultConfig();\n\n\t\tif (typeof config == \"string\") {\n\t\t\tthis.config.method = config;\n\t\t} else {\n\t\t\tfor (var key in config) {\n\t\t\t\tthis.config[key] = config[key];\n\t\t\t}\n\t\t}\n\t};\n\n\t//create config object from default\n\tAjax.prototype._loadDefaultConfig = function (force) {\n\t\tvar self = this;\n\t\tif (!self.config || force) {\n\n\t\t\tself.config = {};\n\n\t\t\t//load base config from defaults\n\t\t\tfor (var key in self.defaultConfig) {\n\t\t\t\tself.config[key] = self.defaultConfig[key];\n\t\t\t}\n\t\t}\n\t};\n\n\t//set request url\n\tAjax.prototype.setUrl = function (url) {\n\t\tthis.url = url;\n\t};\n\n\t//get request url\n\tAjax.prototype.getUrl = function () {\n\t\treturn this.url;\n\t};\n\n\t//lstandard loading function\n\tAjax.prototype.loadData = function (inPosition, columnsChanged) {\n\t\tvar self = this;\n\n\t\tif (this.progressiveLoad) {\n\t\t\treturn this._loadDataProgressive();\n\t\t} else {\n\t\t\treturn this._loadDataStandard(inPosition, columnsChanged);\n\t\t}\n\t};\n\n\tAjax.prototype.nextPage = function (diff) {\n\t\tvar margin;\n\n\t\tif (!this.loading) {\n\n\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2;\n\n\t\t\tif (diff < margin) {\n\t\t\t\tthis.table.modules.page.nextPage().then(function () {}).catch(function () {});\n\t\t\t}\n\t\t}\n\t};\n\n\tAjax.prototype.blockActiveRequest = function () {\n\t\tthis.requestOrder++;\n\t};\n\n\tAjax.prototype._loadDataProgressive = function () {\n\t\tthis.table.rowManager.setData([]);\n\t\treturn this.table.modules.page.setPage(1);\n\t};\n\n\tAjax.prototype._loadDataStandard = function (inPosition, columnsChanged) {\n\t\tvar _this32 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\t_this32.sendRequest(inPosition).then(function (data) {\n\t\t\t\t_this32.table.rowManager.setData(data, inPosition, columnsChanged).then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function (e) {\n\t\t\t\t\treject(e);\n\t\t\t\t});\n\t\t\t}).catch(function (e) {\n\t\t\t\treject(e);\n\t\t\t});\n\t\t});\n\t};\n\n\tAjax.prototype.generateParamsList = function (data, prefix) {\n\t\tvar self = this,\n\t\t output = [];\n\n\t\tprefix = prefix || \"\";\n\n\t\tif (Array.isArray(data)) {\n\t\t\tdata.forEach(function (item, i) {\n\t\t\t\toutput = output.concat(self.generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\n\t\t\t});\n\t\t} else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === \"object\") {\n\t\t\tfor (var key in data) {\n\t\t\t\toutput = output.concat(self.generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push({ key: prefix, value: data });\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tAjax.prototype.serializeParams = function (params) {\n\t\tvar output = this.generateParamsList(params),\n\t\t encoded = [];\n\n\t\toutput.forEach(function (item) {\n\t\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\n\t\t});\n\n\t\treturn encoded.join(\"&\");\n\t};\n\n\t//send ajax request\n\tAjax.prototype.sendRequest = function (silent) {\n\t\tvar _this33 = this;\n\n\t\tvar self = this,\n\t\t url = self.url,\n\t\t requestNo,\n\t\t esc,\n\t\t query;\n\n\t\tself.requestOrder++;\n\t\trequestNo = self.requestOrder;\n\n\t\tself._loadDefaultConfig();\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (self.table.options.ajaxRequesting.call(_this33.table, self.url, self.params) !== false) {\n\n\t\t\t\tself.loading = true;\n\n\t\t\t\tif (!silent) {\n\t\t\t\t\tself.showLoader();\n\t\t\t\t}\n\n\t\t\t\t_this33.loaderPromise(url, self.config, self.params).then(function (data) {\n\t\t\t\t\tif (requestNo === self.requestOrder) {\n\t\t\t\t\t\tif (self.table.options.ajaxResponse) {\n\t\t\t\t\t\t\tdata = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve(data);\n\n\t\t\t\t\t\tself.hideLoader();\n\t\t\t\t\t\tself.loading = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\"Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made\");\n\t\t\t\t\t}\n\t\t\t\t}).catch(function (error) {\n\t\t\t\t\tconsole.error(\"Ajax Load Error: \", error);\n\t\t\t\t\tself.table.options.ajaxError.call(self.table, error);\n\n\t\t\t\t\tself.showError();\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tself.hideLoader();\n\t\t\t\t\t}, 3000);\n\n\t\t\t\t\tself.loading = false;\n\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\tAjax.prototype.showLoader = function () {\n\t\tvar shouldLoad = typeof this.table.options.ajaxLoader === \"function\" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader;\n\n\t\tif (shouldLoad) {\n\n\t\t\tthis.hideLoader();\n\n\t\t\twhile (this.msgElement.firstChild) {\n\t\t\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t\t\t}this.msgElement.classList.remove(\"tabulator-error\");\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\n\n\t\t\tif (this.loadingElement) {\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\n\t\t\t} else {\n\t\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|loading\");\n\t\t\t}\n\n\t\t\tthis.table.element.appendChild(this.loaderElement);\n\t\t}\n\t};\n\n\tAjax.prototype.showError = function () {\n\t\tthis.hideLoader();\n\n\t\twhile (this.msgElement.firstChild) {\n\t\t\tthis.msgElement.removeChild(this.msgElement.firstChild);\n\t\t}this.msgElement.classList.remove(\"tabulator-loading\");\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\n\n\t\tif (this.errorElement) {\n\t\t\tthis.msgElement.appendChild(this.errorElement);\n\t\t} else {\n\t\t\tthis.msgElement.innerHTML = this.table.modules.localize.getText(\"ajax|error\");\n\t\t}\n\n\t\tthis.table.element.appendChild(this.loaderElement);\n\t};\n\n\tAjax.prototype.hideLoader = function () {\n\t\tif (this.loaderElement.parentNode) {\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\n\t\t}\n\t};\n\n\t//default ajax config object\n\tAjax.prototype.defaultConfig = {\n\t\tmethod: \"GET\"\n\t};\n\n\tAjax.prototype.defaultURLGenerator = function (url, config, params) {\n\n\t\tif (url) {\n\t\t\tif (params && Object.keys(params).length) {\n\t\t\t\tif (!config.method || config.method.toLowerCase() == \"get\") {\n\t\t\t\t\tconfig.method = \"get\";\n\n\t\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + this.serializeParams(params);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn url;\n\t};\n\n\tAjax.prototype.defaultLoaderPromise = function (url, config, params) {\n\t\tvar self = this,\n\t\t contentType;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\t//set url\n\t\t\turl = self.urlGenerator(url, config, params);\n\n\t\t\t//set body content if not GET request\n\t\t\tif (config.method.toUpperCase() != \"GET\") {\n\t\t\t\tcontentType = _typeof(self.table.options.ajaxContentType) === \"object\" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType];\n\t\t\t\tif (contentType) {\n\n\t\t\t\t\tfor (var key in contentType.headers) {\n\t\t\t\t\t\tif (!config.headers) {\n\t\t\t\t\t\t\tconfig.headers = {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof config.headers[key] === \"undefined\") {\n\t\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconfig.body = contentType.body.call(self, url, config, params);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", self.table.options.ajaxContentType);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (url) {\n\n\t\t\t\t//configure headers\n\t\t\t\tif (typeof config.headers === \"undefined\") {\n\t\t\t\t\tconfig.headers = {};\n\t\t\t\t}\n\n\t\t\t\tif (typeof config.headers.Accept === \"undefined\") {\n\t\t\t\t\tconfig.headers.Accept = \"application/json\";\n\t\t\t\t}\n\n\t\t\t\tif (typeof config.headers[\"X-Requested-With\"] === \"undefined\") {\n\t\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\tif (typeof config.mode === \"undefined\") {\n\t\t\t\t\tconfig.mode = \"cors\";\n\t\t\t\t}\n\n\t\t\t\tif (config.mode == \"cors\") {\n\n\t\t\t\t\tif (typeof config.headers[\"Access-Control-Allow-Origin\"] === \"undefined\") {\n\t\t\t\t\t\tconfig.headers[\"Access-Control-Allow-Origin\"] = window.location.origin;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\t\tconfig.credentials = 'same-origin';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (typeof config.credentials === \"undefined\") {\n\t\t\t\t\t\tconfig.credentials = 'include';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//send request\n\t\t\t\tfetch(url, config).then(function (response) {\n\t\t\t\t\tif (response.ok) {\n\t\t\t\t\t\tresponse.json().then(function (data) {\n\t\t\t\t\t\t\tresolve(data);\n\t\t\t\t\t\t}).catch(function (error) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\n\t\t\t\t\t\treject(response);\n\t\t\t\t\t}\n\t\t\t\t}).catch(function (error) {\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\n\t\t\t\tresolve([]);\n\t\t\t}\n\t\t});\n\t};\n\n\tAjax.prototype.contentTypeFormatters = {\n\t\t\"json\": {\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tbody: function body(url, config, params) {\n\t\t\t\treturn JSON.stringify(params);\n\t\t\t}\n\t\t},\n\t\t\"form\": {\n\t\t\theaders: {},\n\t\t\tbody: function body(url, config, params) {\n\t\t\t\tvar output = this.generateParamsList(params),\n\t\t\t\t form = new FormData();\n\n\t\t\t\toutput.forEach(function (item) {\n\t\t\t\t\tform.append(item.key, item.value);\n\t\t\t\t});\n\n\t\t\t\treturn form;\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"ajax\", Ajax);\n\n\tvar ColumnCalcs = function ColumnCalcs(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.topCalcs = [];\n\t\tthis.botCalcs = [];\n\t\tthis.genColumn = false;\n\t\tthis.topElement = this.createElement();\n\t\tthis.botElement = this.createElement();\n\t\tthis.topRow = false;\n\t\tthis.botRow = false;\n\t\tthis.topInitialized = false;\n\t\tthis.botInitialized = false;\n\n\t\tthis.initialize();\n\t};\n\n\tColumnCalcs.prototype.createElement = function () {\n\t\tvar el = document.createElement(\"div\");\n\t\tel.classList.add(\"tabulator-calcs-holder\");\n\t\treturn el;\n\t};\n\n\tColumnCalcs.prototype.initialize = function () {\n\t\tthis.genColumn = new Column({ field: \"value\" }, this);\n\t};\n\n\t//dummy functions to handle being mock column manager\n\tColumnCalcs.prototype.registerColumnField = function () {};\n\n\t//initialize column calcs\n\tColumnCalcs.prototype.initializeColumn = function (column) {\n\t\tvar def = column.definition;\n\n\t\tvar config = {\n\t\t\ttopCalcParams: def.topCalcParams || {},\n\t\t\tbotCalcParams: def.bottomCalcParams || {}\n\t\t};\n\n\t\tif (def.topCalc) {\n\n\t\t\tswitch (_typeof(def.topCalc)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif (this.calculations[def.topCalc]) {\n\t\t\t\t\t\tconfig.topCalc = this.calculations[def.topCalc];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.topCalc = def.topCalc;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif (config.topCalc) {\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.topCalcs.push(column);\n\n\t\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\t\tthis.initializeTopRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (def.bottomCalc) {\n\t\t\tswitch (_typeof(def.bottomCalc)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif (this.calculations[def.bottomCalc]) {\n\t\t\t\t\t\tconfig.botCalc = this.calculations[def.bottomCalc];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tconfig.botCalc = def.bottomCalc;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif (config.botCalc) {\n\t\t\t\tcolumn.modules.columnCalcs = config;\n\t\t\t\tthis.botCalcs.push(column);\n\n\t\t\t\tif (this.table.options.columnCalcs != \"group\") {\n\t\t\t\t\tthis.initializeBottomRow();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tColumnCalcs.prototype.removeCalcs = function () {\n\t\tvar changed = false;\n\n\t\tif (this.topInitialized) {\n\t\t\tthis.topInitialized = false;\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (this.botInitialized) {\n\t\t\tthis.botInitialized = false;\n\t\t\tthis.table.footerManager.remove(this.botElement);\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (changed) {\n\t\t\tthis.table.rowManager.adjustTableSize();\n\t\t}\n\t};\n\n\tColumnCalcs.prototype.initializeTopRow = function () {\n\t\tif (!this.topInitialized) {\n\t\t\t// this.table.columnManager.headersElement.after(this.topElement);\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n\t\t\tthis.topInitialized = true;\n\t\t}\n\t};\n\n\tColumnCalcs.prototype.initializeBottomRow = function () {\n\t\tif (!this.botInitialized) {\n\t\t\tthis.table.footerManager.prepend(this.botElement);\n\t\t\tthis.botInitialized = true;\n\t\t}\n\t};\n\n\tColumnCalcs.prototype.scrollHorizontal = function (left) {\n\t\tvar hozAdjust = 0,\n\t\t scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth;\n\n\t\tif (this.botInitialized) {\n\t\t\tthis.botRow.getElement().style.marginLeft = -left + \"px\";\n\t\t}\n\t};\n\n\tColumnCalcs.prototype.recalc = function (rows) {\n\t\tvar data, row;\n\n\t\tif (this.topInitialized || this.botInitialized) {\n\t\t\tdata = this.rowsToData(rows);\n\n\t\t\tif (this.topInitialized) {\n\t\t\t\tif (this.topRow) {\n\t\t\t\t\tthis.topRow.deleteCells();\n\t\t\t\t}\n\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows));\n\t\t\t\tthis.topRow = row;\n\t\t\t\twhile (this.topElement.firstChild) {\n\t\t\t\t\tthis.topElement.removeChild(this.topElement.firstChild);\n\t\t\t\t}this.topElement.appendChild(row.getElement());\n\t\t\t\trow.initialize(true);\n\t\t\t}\n\n\t\t\tif (this.botInitialized) {\n\t\t\t\tif (this.botRow) {\n\t\t\t\t\tthis.botRow.deleteCells();\n\t\t\t\t}\n\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows));\n\t\t\t\tthis.botRow = row;\n\t\t\t\twhile (this.botElement.firstChild) {\n\t\t\t\t\tthis.botElement.removeChild(this.botElement.firstChild);\n\t\t\t\t}this.botElement.appendChild(row.getElement());\n\t\t\t\trow.initialize(true);\n\t\t\t}\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\t//set resizable handles\n\t\t\tif (this.table.modExists(\"frozenColumns\")) {\n\t\t\t\tthis.table.modules.frozenColumns.layout();\n\t\t\t}\n\t\t}\n\t};\n\n\tColumnCalcs.prototype.recalcRowGroup = function (row) {\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\n\t};\n\n\tColumnCalcs.prototype.recalcAll = function () {\n\t\tvar _this34 = this;\n\n\t\tif (this.topCalcs.length || this.botCalcs.length) {\n\t\t\tif (this.table.options.columnCalcs !== \"group\") {\n\t\t\t\tthis.recalc(this.table.rowManager.activeRows);\n\t\t\t}\n\n\t\t\tif (this.table.options.groupBy && this.table.options.columnCalcs !== \"table\") {\n\n\t\t\t\tvar groups = table.modules.groupRows.getChildGroups();\n\n\t\t\t\tgroups.forEach(function (group) {\n\t\t\t\t\t_this34.recalcGroup(group);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tColumnCalcs.prototype.recalcGroup = function (group) {\n\t\tvar data, rowData;\n\n\t\tif (group) {\n\t\t\tif (group.calcs) {\n\t\t\t\tif (group.calcs.bottom) {\n\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\trowData = this.generateRowData(\"bottom\", data);\n\n\t\t\t\t\tgroup.calcs.bottom.updateData(rowData);\n\t\t\t\t\tgroup.calcs.bottom.reinitialize();\n\t\t\t\t}\n\n\t\t\t\tif (group.calcs.top) {\n\t\t\t\t\tdata = this.rowsToData(group.rows);\n\t\t\t\t\trowData = this.generateRowData(\"top\", data);\n\n\t\t\t\t\tgroup.calcs.top.updateData(rowData);\n\t\t\t\t\tgroup.calcs.top.reinitialize();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//generate top stats row\n\tColumnCalcs.prototype.generateTopRow = function (rows) {\n\t\treturn this.generateRow(\"top\", this.rowsToData(rows));\n\t};\n\t//generate bottom stats row\n\tColumnCalcs.prototype.generateBottomRow = function (rows) {\n\t\treturn this.generateRow(\"bottom\", this.rowsToData(rows));\n\t};\n\n\tColumnCalcs.prototype.rowsToData = function (rows) {\n\t\tvar _this35 = this;\n\n\t\tvar data = [];\n\n\t\trows.forEach(function (row) {\n\t\t\tdata.push(row.getData());\n\n\t\t\tif (_this35.table.options.dataTree && _this35.table.options.dataTreeChildColumnCalcs) {\n\t\t\t\tif (row.modules.dataTree.open) {\n\t\t\t\t\tvar children = _this35.rowsToData(_this35.table.modules.dataTree.getFilteredTreeChildren(row));\n\t\t\t\t\tdata = data.concat(children);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn data;\n\t};\n\n\t//generate stats row\n\tColumnCalcs.prototype.generateRow = function (pos, data) {\n\t\tvar self = this,\n\t\t rowData = this.generateRowData(pos, data),\n\t\t row;\n\n\t\tif (self.table.modExists(\"mutator\")) {\n\t\t\tself.table.modules.mutator.disable();\n\t\t}\n\n\t\trow = new Row(rowData, this, \"calc\");\n\n\t\tif (self.table.modExists(\"mutator\")) {\n\t\t\tself.table.modules.mutator.enable();\n\t\t}\n\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\n\n\t\trow.generateCells = function () {\n\n\t\t\tvar cells = [];\n\n\t\t\tself.table.columnManager.columnsByIndex.forEach(function (column) {\n\n\t\t\t\t//set field name of mock column\n\t\t\t\tself.genColumn.setField(column.getField());\n\t\t\t\tself.genColumn.hozAlign = column.hozAlign;\n\n\t\t\t\tif (column.definition[pos + \"CalcFormatter\"] && self.table.modExists(\"format\")) {\n\n\t\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: self.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\n\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"]\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tself.genColumn.modules.format = {\n\t\t\t\t\t\tformatter: self.table.modules.format.getFormatter(\"plaintext\"),\n\t\t\t\t\t\tparams: {}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t//ensure css class defintion is replicated to calculation cell\n\t\t\t\tself.genColumn.definition.cssClass = column.definition.cssClass;\n\n\t\t\t\t//generate cell and assign to correct column\n\t\t\t\tvar cell = new Cell(self.genColumn, row);\n\t\t\t\tcell.column = column;\n\t\t\t\tcell.setWidth();\n\n\t\t\t\tcolumn.cells.push(cell);\n\t\t\t\tcells.push(cell);\n\n\t\t\t\tif (!column.visible) {\n\t\t\t\t\tcell.hide();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.cells = cells;\n\t\t};\n\n\t\treturn row;\n\t};\n\n\t//generate stats row\n\tColumnCalcs.prototype.generateRowData = function (pos, data) {\n\t\tvar rowData = {},\n\t\t calcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\n\t\t type = pos == \"top\" ? \"topCalc\" : \"botCalc\",\n\t\t params,\n\t\t paramKey;\n\n\t\tcalcs.forEach(function (column) {\n\t\t\tvar values = [];\n\n\t\t\tif (column.modules.columnCalcs && column.modules.columnCalcs[type]) {\n\t\t\t\tdata.forEach(function (item) {\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\n\t\t\t\t});\n\n\t\t\t\tparamKey = type + \"Params\";\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\n\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\n\t\t\t}\n\t\t});\n\n\t\treturn rowData;\n\t};\n\n\tColumnCalcs.prototype.hasTopCalcs = function () {\n\t\treturn !!this.topCalcs.length;\n\t};\n\n\tColumnCalcs.prototype.hasBottomCalcs = function () {\n\t\treturn !!this.botCalcs.length;\n\t};\n\n\t//handle table redraw\n\tColumnCalcs.prototype.redraw = function () {\n\t\tif (this.topRow) {\n\t\t\tthis.topRow.normalizeHeight(true);\n\t\t}\n\t\tif (this.botRow) {\n\t\t\tthis.botRow.normalizeHeight(true);\n\t\t}\n\t};\n\n\t//return the calculated\n\tColumnCalcs.prototype.getResults = function () {\n\t\tvar self = this,\n\t\t results = {},\n\t\t groups;\n\n\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\n\n\t\t\tgroups.forEach(function (group) {\n\t\t\t\tresults[group.getKey()] = self.getGroupResults(group);\n\t\t\t});\n\t\t} else {\n\t\t\tresults = {\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {}\n\t\t\t};\n\t\t}\n\n\t\treturn results;\n\t};\n\n\t//get results from a group\n\tColumnCalcs.prototype.getGroupResults = function (group) {\n\t\tvar self = this,\n\t\t groupObj = group._getSelf(),\n\t\t subGroups = group.getSubGroups(),\n\t\t subGroupResults = {},\n\t\t results = {};\n\n\t\tsubGroups.forEach(function (subgroup) {\n\t\t\tsubGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup);\n\t\t});\n\n\t\tresults = {\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\n\t\t\tgroups: subGroupResults\n\t\t};\n\n\t\treturn results;\n\t};\n\n\t//default calculations\n\tColumnCalcs.prototype.calculations = {\n\t\t\"avg\": function avg(values, data, calcParams) {\n\t\t\tvar output = 0,\n\t\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2;\n\n\t\t\tif (values.length) {\n\t\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\t\tvalue = Number(value);\n\t\t\t\t\treturn sum + value;\n\t\t\t\t});\n\n\t\t\t\toutput = output / values.length;\n\n\t\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\n\t\t\t}\n\n\t\t\treturn parseFloat(output).toString();\n\t\t},\n\t\t\"max\": function max(values, data, calcParams) {\n\t\t\tvar output = null,\n\t\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\t\tvalues.forEach(function (value) {\n\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\tif (value > output || output === null) {\n\t\t\t\t\toutput = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t\t},\n\t\t\"min\": function min(values, data, calcParams) {\n\t\t\tvar output = null,\n\t\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\t\tvalues.forEach(function (value) {\n\n\t\t\t\tvalue = Number(value);\n\n\t\t\t\tif (value < output || output === null) {\n\t\t\t\t\toutput = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn output !== null ? precision !== false ? output.toFixed(precision) : output : \"\";\n\t\t},\n\t\t\"sum\": function sum(values, data, calcParams) {\n\t\t\tvar output = 0,\n\t\t\t precision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\n\n\t\t\tif (values.length) {\n\t\t\t\tvalues.forEach(function (value) {\n\t\t\t\t\tvalue = Number(value);\n\n\t\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn precision !== false ? output.toFixed(precision) : output;\n\t\t},\n\t\t\"concat\": function concat(values, data, calcParams) {\n\t\t\tvar output = 0;\n\n\t\t\tif (values.length) {\n\t\t\t\toutput = values.reduce(function (sum, value) {\n\t\t\t\t\treturn String(sum) + String(value);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn output;\n\t\t},\n\t\t\"count\": function count(values, data, calcParams) {\n\t\t\tvar output = 0;\n\n\t\t\tif (values.length) {\n\t\t\t\tvalues.forEach(function (value) {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\toutput++;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn output;\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"columnCalcs\", ColumnCalcs);\n\n\tvar Clipboard = function Clipboard(table) {\n\t\tthis.table = table;\n\t\tthis.mode = true;\n\n\t\tthis.pasteParser = function () {};\n\t\tthis.pasteAction = function () {};\n\t\tthis.customSelection = false;\n\t\tthis.rowRange = false;\n\t\tthis.blocked = true; //block copy actions not originating from this command\n\t};\n\n\tClipboard.prototype.initialize = function () {\n\t\tvar _this36 = this;\n\n\t\tthis.mode = this.table.options.clipboard;\n\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\t\t\tthis.table.element.addEventListener(\"copy\", function (e) {\n\t\t\t\tvar plain, html;\n\n\t\t\t\tif (!_this36.blocked) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tif (_this36.customSelection) {\n\t\t\t\t\t\tplain = _this36.customSelection;\n\n\t\t\t\t\t\tif (_this36.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\t\tplain = _this36.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml = _this36.table.modules.export.getHtml(_this36.rowRange, _this36.table.options.clipboardCopyStyled, _this36.table.options.clipboardCopyConfig, \"clipboard\");\n\t\t\t\t\t\tplain = html ? _this36.generatePlainContent(html) : \"\";\n\n\t\t\t\t\t\tif (_this36.table.options.clipboardCopyFormatter) {\n\t\t\t\t\t\t\tplain = _this36.table.options.clipboardCopyFormatter(\"plain\", plain);\n\t\t\t\t\t\t\thtml = _this36.table.options.clipboardCopyFormatter(\"html\", html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif (html) {\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\n\t\t\t\t\t\tif (html) {\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t_this36.table.options.clipboardCopied.call(_this36.table, plain, html);\n\n\t\t\t\t\t_this36.reset();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.mode === true || this.mode === \"paste\") {\n\t\t\tthis.table.element.addEventListener(\"paste\", function (e) {\n\t\t\t\t_this36.paste(e);\n\t\t\t});\n\t\t}\n\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\n\t};\n\n\tClipboard.prototype.reset = function () {\n\t\tthis.blocked = false;\n\t\tthis.originalSelectionText = \"\";\n\t};\n\n\tClipboard.prototype.generatePlainContent = function (html) {\n\t\tvar output = [];\n\n\t\tvar holder = document.createElement(\"div\");\n\t\tholder.innerHTML = html;\n\n\t\tvar table = holder.getElementsByTagName(\"table\")[0];\n\t\tvar rows = Array.prototype.slice.call(table.getElementsByTagName(\"tr\"));\n\n\t\trows.forEach(function (row) {\n\t\t\tvar rowData = [];\n\n\t\t\tvar headers = Array.prototype.slice.call(row.getElementsByTagName(\"th\"));\n\t\t\tvar cells = Array.prototype.slice.call(row.getElementsByTagName(\"td\"));\n\n\t\t\tcells = cells.concat(headers);\n\n\t\t\tcells.forEach(function (cell) {\n\t\t\t\tvar val = cell.innerHTML;\n\n\t\t\t\tval = val == \" \" ? \"\" : val;\n\n\t\t\t\trowData.push(val);\n\t\t\t});\n\n\t\t\toutput.push(rowData.join(\"\\t\"));\n\t\t});\n\n\t\treturn output.join(\"\\n\");\n\t};\n\n\tClipboard.prototype.copy = function (range, internal) {\n\t\tvar range, sel, textRange;\n\t\tthis.blocked = false;\n\t\tthis.customSelection = false;\n\n\t\tif (this.mode === true || this.mode === \"copy\") {\n\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\n\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n\t\t\t\trange = document.createRange();\n\t\t\t\trange.selectNodeContents(this.table.element);\n\t\t\t\tsel = window.getSelection();\n\n\t\t\t\tif (sel.toString() && internal) {\n\t\t\t\t\tthis.customSelection = sel.toString();\n\t\t\t\t}\n\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tsel.addRange(range);\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\n\t\t\t\ttextRange = document.body.createTextRange();\n\t\t\t\ttextRange.moveToElementText(this.table.element);\n\t\t\t\ttextRange.select();\n\t\t\t}\n\n\t\t\tdocument.execCommand('copy');\n\n\t\t\tif (sel) {\n\t\t\t\tsel.removeAllRanges();\n\t\t\t}\n\t\t}\n\t};\n\n\t//PASTE EVENT HANDLING\n\n\tClipboard.prototype.setPasteAction = function (action) {\n\n\t\tswitch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) {\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteAction = this.pasteActions[action];\n\n\t\t\t\tif (!this.pasteAction) {\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteAction = action;\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tClipboard.prototype.setPasteParser = function (parser) {\n\t\tswitch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) {\n\t\t\tcase \"string\":\n\t\t\t\tthis.pasteParser = this.pasteParsers[parser];\n\n\t\t\t\tif (!this.pasteParser) {\n\t\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.pasteParser = parser;\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tClipboard.prototype.paste = function (e) {\n\t\tvar data, rowData, rows;\n\n\t\tif (this.checkPaseOrigin(e)) {\n\n\t\t\tdata = this.getPasteData(e);\n\n\t\t\trowData = this.pasteParser.call(this, data);\n\n\t\t\tif (rowData) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tif (this.table.modExists(\"mutator\")) {\n\t\t\t\t\trowData = this.mutateData(rowData);\n\t\t\t\t}\n\n\t\t\t\trows = this.pasteAction.call(this, rowData);\n\t\t\t\tthis.table.options.clipboardPasted.call(this.table, data, rowData, rows);\n\t\t\t} else {\n\t\t\t\tthis.table.options.clipboardPasteError.call(this.table, data);\n\t\t\t}\n\t\t}\n\t};\n\n\tClipboard.prototype.mutateData = function (data) {\n\t\tvar self = this,\n\t\t output = [];\n\n\t\tif (Array.isArray(data)) {\n\t\t\tdata.forEach(function (row) {\n\t\t\t\toutput.push(self.table.modules.mutator.transformRow(row, \"clipboard\"));\n\t\t\t});\n\t\t} else {\n\t\t\toutput = data;\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tClipboard.prototype.checkPaseOrigin = function (e) {\n\t\tvar valid = true;\n\n\t\tif (e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell) {\n\t\t\tvalid = false;\n\t\t}\n\n\t\treturn valid;\n\t};\n\n\tClipboard.prototype.getPasteData = function (e) {\n\t\tvar data;\n\n\t\tif (window.clipboardData && window.clipboardData.getData) {\n\t\t\tdata = window.clipboardData.getData('Text');\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\n\t\t\tdata = e.clipboardData.getData('text/plain');\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\n\t\t}\n\n\t\treturn data;\n\t};\n\n\tClipboard.prototype.pasteParsers = {\n\t\ttable: function table(clipboard) {\n\t\t\tvar data = [],\n\t\t\t success = false,\n\t\t\t headerFindSuccess = true,\n\t\t\t columns = this.table.columnManager.columns,\n\t\t\t columnMap = [],\n\t\t\t rows = [];\n\n\t\t\t//get data from clipboard into array of columns and rows.\n\t\t\tclipboard = clipboard.split(\"\\n\");\n\n\t\t\tclipboard.forEach(function (row) {\n\t\t\t\tdata.push(row.split(\"\\t\"));\n\t\t\t});\n\n\t\t\tif (data.length && !(data.length === 1 && data[0].length < 2)) {\n\t\t\t\tsuccess = true;\n\n\t\t\t\t//check if headers are present by title\n\t\t\t\tdata[0].forEach(function (value) {\n\t\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\n\t\t\t\t\t});\n\n\t\t\t\t\tif (column) {\n\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t} else {\n\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//check if column headers are present by field\n\t\t\t\tif (!headerFindSuccess) {\n\t\t\t\t\theaderFindSuccess = true;\n\t\t\t\t\tcolumnMap = [];\n\n\t\t\t\t\tdata[0].forEach(function (value) {\n\t\t\t\t\t\tvar column = columns.find(function (column) {\n\t\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (column) {\n\t\t\t\t\t\t\tcolumnMap.push(column);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\theaderFindSuccess = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!headerFindSuccess) {\n\t\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t//remove header row if found\n\t\t\t\tif (headerFindSuccess) {\n\t\t\t\t\tdata.shift();\n\t\t\t\t}\n\n\t\t\t\tdata.forEach(function (item) {\n\t\t\t\t\tvar row = {};\n\n\t\t\t\t\titem.forEach(function (value, i) {\n\t\t\t\t\t\tif (columnMap[i]) {\n\t\t\t\t\t\t\trow[columnMap[i].field] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\trows.push(row);\n\t\t\t\t});\n\n\t\t\t\treturn rows;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\tClipboard.prototype.pasteActions = {\n\t\treplace: function replace(rows) {\n\t\t\treturn this.table.setData(rows);\n\t\t},\n\t\tupdate: function update(rows) {\n\t\t\treturn this.table.updateOrAddData(rows);\n\t\t},\n\t\tinsert: function insert(rows) {\n\t\t\treturn this.table.addData(rows);\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"clipboard\", Clipboard);\n\n\tvar DataTree = function DataTree(table) {\n\t\tthis.table = table;\n\t\tthis.indent = 10;\n\t\tthis.field = \"\";\n\t\tthis.collapseEl = null;\n\t\tthis.expandEl = null;\n\t\tthis.branchEl = null;\n\t\tthis.elementField = false;\n\n\t\tthis.startOpen = function () {};\n\n\t\tthis.displayIndex = 0;\n\t};\n\n\tDataTree.prototype.initialize = function () {\n\t\tvar dummyEl = null,\n\t\t firstCol = this.table.columnManager.getFirstVisibileColumn(),\n\t\t options = this.table.options;\n\n\t\tthis.field = options.dataTreeChildField;\n\t\tthis.indent = options.dataTreeChildIndent;\n\t\tthis.elementField = options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\n\n\t\tif (options.dataTreeBranchElement) {\n\n\t\t\tif (options.dataTreeBranchElement === true) {\n\t\t\t\tthis.branchEl = document.createElement(\"div\");\n\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\n\t\t\t} else {\n\t\t\t\tif (typeof options.dataTreeBranchElement === \"string\") {\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\n\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\n\t\t\t\t} else {\n\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.dataTreeCollapseElement) {\n\t\t\tif (typeof options.dataTreeCollapseElement === \"string\") {\n\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\n\t\t\t\tthis.collapseEl = dummyEl.firstChild;\n\t\t\t} else {\n\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.collapseEl = document.createElement(\"div\");\n\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\tthis.collapseEl.tabIndex = 0;\n\t\t\tthis.collapseEl.innerHTML = \"
\";\n\t\t}\n\n\t\tif (options.dataTreeExpandElement) {\n\t\t\tif (typeof options.dataTreeExpandElement === \"string\") {\n\t\t\t\tdummyEl = document.createElement(\"div\");\n\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\n\t\t\t\tthis.expandEl = dummyEl.firstChild;\n\t\t\t} else {\n\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.expandEl = document.createElement(\"div\");\n\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\n\t\t\tthis.expandEl.tabIndex = 0;\n\t\t\tthis.expandEl.innerHTML = \"
\";\n\t\t}\n\n\t\tswitch (_typeof(options.dataTreeStartExpanded)) {\n\t\t\tcase \"boolean\":\n\t\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\t\treturn options.dataTreeStartExpanded;\n\t\t\t\t};\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthis.startOpen = function (row, index) {\n\t\t\t\t\treturn options.dataTreeStartExpanded[index];\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tDataTree.prototype.initializeRow = function (row) {\n\t\tvar childArray = row.getData()[this.field];\n\t\tvar isArray = Array.isArray(childArray);\n\n\t\tvar children = isArray || !isArray && (typeof childArray === 'undefined' ? 'undefined' : _typeof(childArray)) === \"object\" && childArray !== null;\n\n\t\tif (!children && row.modules.dataTree && row.modules.dataTree.branchEl) {\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\n\t\t}\n\n\t\tif (!children && row.modules.dataTree && row.modules.dataTree.controlEl) {\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\n\t\t}\n\n\t\trow.modules.dataTree = {\n\t\t\tindex: 0,\n\t\t\topen: children ? row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0) : false,\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\n\t\t\tparent: false,\n\t\t\tchildren: children\n\t\t};\n\t};\n\n\tDataTree.prototype.layoutRow = function (row) {\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\n\t\t el = cell.getElement(),\n\t\t config = row.modules.dataTree;\n\n\t\tif (config.branchEl) {\n\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\n\t\t\tconfig.branchEl = false;\n\t\t}\n\n\t\tif (config.controlEl) {\n\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\n\t\t\tconfig.controlEl = false;\n\t\t}\n\n\t\tthis.generateControlElement(row, el);\n\n\t\trow.element.classList.add(\"tabulator-tree-level-\" + config.index);\n\n\t\tif (config.index) {\n\t\t\tif (this.branchEl) {\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\n\t\t\t\tconfig.branchEl.style.marginLeft = (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + config.index * this.indent + \"px\";\n\t\t\t} else {\n\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + \"px\";\n\t\t\t}\n\t\t}\n\t};\n\n\tDataTree.prototype.generateControlElement = function (row, el) {\n\t\tvar _this37 = this;\n\n\t\tvar config = row.modules.dataTree,\n\t\t el = el || row.getCells()[0].getElement(),\n\t\t oldControl = config.controlEl;\n\n\t\tif (config.children !== false) {\n\n\t\t\tif (config.open) {\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t_this37.collapseRow(row);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t_this37.expandRow(row);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tif (oldControl && oldControl.parentNode === el) {\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl, oldControl);\n\t\t\t} else {\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\n\t\t\t}\n\t\t}\n\t};\n\n\tDataTree.prototype.setDisplayIndex = function (index) {\n\t\tthis.displayIndex = index;\n\t};\n\n\tDataTree.prototype.getDisplayIndex = function () {\n\t\treturn this.displayIndex;\n\t};\n\n\tDataTree.prototype.getRows = function (rows) {\n\t\tvar _this38 = this;\n\n\t\tvar output = [];\n\n\t\trows.forEach(function (row, i) {\n\t\t\tvar config, children;\n\n\t\t\toutput.push(row);\n\n\t\t\tif (row instanceof Row) {\n\n\t\t\t\tconfig = row.modules.dataTree.children;\n\n\t\t\t\tif (!config.index && config.children !== false) {\n\t\t\t\t\tchildren = _this38.getChildren(row);\n\n\t\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\t\toutput.push(child);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tDataTree.prototype.getChildren = function (row) {\n\t\tvar _this39 = this;\n\n\t\tvar config = row.modules.dataTree,\n\t\t children = [],\n\t\t output = [];\n\n\t\tif (config.children !== false && config.open) {\n\t\t\tif (!Array.isArray(config.children)) {\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif (this.table.modExists(\"filter\")) {\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t} else {\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tif (this.table.modExists(\"sort\")) {\n\t\t\t\tthis.table.modules.sort.sort(children);\n\t\t\t}\n\n\t\t\tchildren.forEach(function (child) {\n\t\t\t\toutput.push(child);\n\n\t\t\t\tvar subChildren = _this39.getChildren(child);\n\n\t\t\t\tsubChildren.forEach(function (sub) {\n\t\t\t\t\toutput.push(sub);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tDataTree.prototype.generateChildren = function (row) {\n\t\tvar _this40 = this;\n\n\t\tvar children = [];\n\n\t\tvar childArray = row.getData()[this.field];\n\n\t\tif (!Array.isArray(childArray)) {\n\t\t\tchildArray = [childArray];\n\t\t}\n\n\t\tchildArray.forEach(function (childData) {\n\t\t\tvar childRow = new Row(childData || {}, _this40.table.rowManager);\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\n\t\t\tchildRow.modules.dataTree.parent = row;\n\t\t\tif (childRow.modules.dataTree.children) {\n\t\t\t\tchildRow.modules.dataTree.open = _this40.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\n\t\t\t}\n\t\t\tchildren.push(childRow);\n\t\t});\n\n\t\treturn children;\n\t};\n\n\tDataTree.prototype.expandRow = function (row, silent) {\n\t\tvar config = row.modules.dataTree;\n\n\t\tif (config.children !== false) {\n\t\t\tconfig.open = true;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\t\tthis.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t};\n\n\tDataTree.prototype.collapseRow = function (row) {\n\t\tvar config = row.modules.dataTree;\n\n\t\tif (config.children !== false) {\n\t\t\tconfig.open = false;\n\n\t\t\trow.reinitialize();\n\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\n\n\t\t\tthis.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index);\n\t\t}\n\t};\n\n\tDataTree.prototype.toggleRow = function (row) {\n\t\tvar config = row.modules.dataTree;\n\n\t\tif (config.children !== false) {\n\t\t\tif (config.open) {\n\t\t\t\tthis.collapseRow(row);\n\t\t\t} else {\n\t\t\t\tthis.expandRow(row);\n\t\t\t}\n\t\t}\n\t};\n\n\tDataTree.prototype.getTreeParent = function (row) {\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\n\t};\n\n\tDataTree.prototype.getFilteredTreeChildren = function (row) {\n\t\tvar config = row.modules.dataTree,\n\t\t output = [],\n\t\t children;\n\n\t\tif (config.children) {\n\n\t\t\tif (!Array.isArray(config.children)) {\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tif (this.table.modExists(\"filter\")) {\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\n\t\t\t} else {\n\t\t\t\tchildren = config.children;\n\t\t\t}\n\n\t\t\tchildren.forEach(function (childRow) {\n\t\t\t\tif (childRow instanceof Row) {\n\t\t\t\t\toutput.push(childRow);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tDataTree.prototype.getTreeChildren = function (row) {\n\t\tvar config = row.modules.dataTree,\n\t\t output = [];\n\n\t\tif (config.children) {\n\n\t\t\tif (!Array.isArray(config.children)) {\n\t\t\t\tconfig.children = this.generateChildren(row);\n\t\t\t}\n\n\t\t\tconfig.children.forEach(function (childRow) {\n\t\t\t\tif (childRow instanceof Row) {\n\t\t\t\t\toutput.push(childRow.getComponent());\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tDataTree.prototype.checkForRestyle = function (cell) {\n\t\tif (!cell.row.cells.indexOf(cell)) {\n\t\t\tif (cell.row.modules.dataTree.children !== false) {\n\t\t\t\tcell.row.reinitialize();\n\t\t\t}\n\t\t}\n\t};\n\n\tDataTree.prototype.getChildField = function () {\n\t\treturn this.field;\n\t};\n\n\tDataTree.prototype.redrawNeeded = function (data) {\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\n\t};\n\n\tTabulator.prototype.registerModule(\"dataTree\", DataTree);\n\n\tvar Download = function Download(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.fields = {}; //hold filed multi dimension arrays\n\t\tthis.columnsByIndex = []; //hold columns in their order in the table\n\t\tthis.columnsByField = {}; //hold columns with lookup by field name\n\t\tthis.config = {};\n\t\tthis.active = false;\n\t};\n\n\t//trigger file download\n\tDownload.prototype.download = function (type, filename, options, active, interceptCallback) {\n\t\tvar self = this,\n\t\t downloadFunc = false;\n\t\tthis.processConfig();\n\t\tthis.active = active;\n\n\t\tfunction buildLink(data, mime) {\n\t\t\tif (interceptCallback) {\n\t\t\t\tif (interceptCallback === true) {\n\t\t\t\t\tself.triggerDownload(data, mime, type, filename, true);\n\t\t\t\t} else {\n\t\t\t\t\tinterceptCallback(data);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.triggerDownload(data, mime, type, filename);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof type == \"function\") {\n\t\t\tdownloadFunc = type;\n\t\t} else {\n\t\t\tif (self.downloaders[type]) {\n\t\t\t\tdownloadFunc = self.downloaders[type];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\n\t\t\t}\n\t\t}\n\n\t\tthis.processColumns();\n\n\t\tif (downloadFunc) {\n\t\t\tdownloadFunc.call(this, self.processDefinitions(), self.processData(active || \"active\"), options || {}, buildLink, this.config);\n\t\t}\n\t};\n\n\tDownload.prototype.processConfig = function () {\n\t\tvar config = { //download config\n\t\t\tcolumnGroups: true,\n\t\t\trowGroups: true,\n\t\t\tcolumnCalcs: true,\n\t\t\tdataTree: true\n\t\t};\n\n\t\tif (this.table.options.downloadConfig) {\n\t\t\tfor (var key in this.table.options.downloadConfig) {\n\t\t\t\tconfig[key] = this.table.options.downloadConfig[key];\n\t\t\t}\n\t\t}\n\n\t\tthis.config.rowGroups = config.rowGroups && this.table.options.groupBy && this.table.modExists(\"groupRows\");\n\n\t\tif (config.columnGroups && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length) {\n\t\t\tthis.config.columnGroups = true;\n\t\t}\n\n\t\tif (config.columnCalcs && this.table.modExists(\"columnCalcs\")) {\n\t\t\tthis.config.columnCalcs = true;\n\t\t}\n\n\t\tif (config.dataTree && this.table.options.dataTree && this.table.modExists(\"dataTree\")) {\n\t\t\tthis.config.dataTree = true;\n\t\t}\n\t};\n\n\tDownload.prototype.processColumns = function () {\n\t\tvar self = this;\n\n\t\tself.columnsByIndex = [];\n\t\tself.columnsByField = {};\n\n\t\tself.table.columnManager.columnsByIndex.forEach(function (column) {\n\n\t\t\tif (column.field && column.definition.download !== false && (column.visible || !column.visible && column.definition.download)) {\n\t\t\t\tself.columnsByIndex.push(column);\n\t\t\t\tself.columnsByField[column.field] = column;\n\t\t\t}\n\t\t});\n\t};\n\n\tDownload.prototype.processDefinitions = function () {\n\t\tvar self = this,\n\t\t processedDefinitions = [];\n\n\t\tif (this.config.columnGroups) {\n\t\t\tself.table.columnManager.columns.forEach(function (column) {\n\t\t\t\tvar colData = self.processColumnGroup(column);\n\n\t\t\t\tif (colData) {\n\t\t\t\t\tprocessedDefinitions.push(colData);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tself.columnsByIndex.forEach(function (column) {\n\t\t\t\tif (column.download !== false) {\n\t\t\t\t\t//isolate definiton from defintion object\n\t\t\t\t\tprocessedDefinitions.push(self.processDefinition(column));\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn processedDefinitions;\n\t};\n\n\tDownload.prototype.processColumnGroup = function (column) {\n\t\tvar _this41 = this;\n\n\t\tvar subGroups = column.columns,\n\t\t maxDepth = 0;\n\t\tvar processedColumn = this.processDefinition(column);\n\t\tvar groupData = {\n\t\t\ttype: \"group\",\n\t\t\ttitle: processedColumn.title,\n\t\t\tdepth: 1\n\t\t};\n\n\t\tif (subGroups.length) {\n\t\t\tgroupData.subGroups = [];\n\t\t\tgroupData.width = 0;\n\n\t\t\tsubGroups.forEach(function (subGroup) {\n\t\t\t\tvar subGroupData = _this41.processColumnGroup(subGroup);\n\n\t\t\t\tif (subGroupData.depth > maxDepth) {\n\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t}\n\n\t\t\t\tif (subGroupData) {\n\t\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tgroupData.depth += maxDepth;\n\n\t\t\tif (!groupData.width) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tif (column.field && column.definition.download !== false && (column.visible || !column.visible && column.definition.download)) {\n\t\t\t\tgroupData.width = 1;\n\t\t\t\tgroupData.definition = processedColumn;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn groupData;\n\t};\n\n\tDownload.prototype.processDefinition = function (column) {\n\t\tvar def = {};\n\n\t\tfor (var key in column.definition) {\n\t\t\tdef[key] = column.definition[key];\n\t\t}\n\n\t\tif (typeof column.definition.downloadTitle != \"undefined\") {\n\t\t\tdef.title = column.definition.downloadTitle;\n\t\t}\n\n\t\treturn def;\n\t};\n\n\tDownload.prototype.processData = function (active) {\n\t\tvar _this42 = this;\n\n\t\tvar self = this,\n\t\t data = [],\n\t\t groups = [],\n\t\t rows = false,\n\t\t calcs = {};\n\n\t\tif (this.config.rowGroups) {\n\n\t\t\tif (active == \"visible\") {\n\n\t\t\t\trows = self.table.rowManager.getRows(active);\n\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\tif (row.type == \"row\") {\n\t\t\t\t\t\tvar group = row.getGroup();\n\n\t\t\t\t\t\tif (groups.indexOf(group) === -1) {\n\t\t\t\t\t\t\tgroups.push(group);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgroups = this.table.modules.groupRows.getGroups();\n\t\t\t}\n\n\t\t\tgroups.forEach(function (group) {\n\t\t\t\tdata.push(_this42.processGroupData(group, rows));\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.config.dataTree) {\n\t\t\t\tactive = active = \"active\" ? \"display\" : active;\n\t\t\t}\n\t\t\tdata = self.table.rowManager.getData(active, \"download\");\n\t\t}\n\n\t\tif (this.config.columnCalcs) {\n\t\t\tcalcs = this.table.getCalcResults();\n\n\t\t\tdata = {\n\t\t\t\tcalcs: calcs,\n\t\t\t\tdata: data\n\t\t\t};\n\t\t}\n\n\t\t//bulk data processing\n\t\tif (typeof self.table.options.downloadDataFormatter == \"function\") {\n\t\t\tdata = self.table.options.downloadDataFormatter(data);\n\t\t}\n\n\t\treturn data;\n\t};\n\n\tDownload.prototype.processGroupData = function (group, visRows) {\n\t\tvar _this43 = this;\n\n\t\tvar subGroups = group.getSubGroups();\n\n\t\tvar groupData = {\n\t\t\ttype: \"group\",\n\t\t\tkey: group.key\n\t\t};\n\n\t\tif (subGroups.length) {\n\t\t\tgroupData.subGroups = [];\n\n\t\t\tsubGroups.forEach(function (subGroup) {\n\t\t\t\tgroupData.subGroups.push(_this43.processGroupData(subGroup, visRows));\n\t\t\t});\n\t\t} else {\n\t\t\tif (visRows) {\n\t\t\t\tgroupData.rows = [];\n\n\t\t\t\tgroup.rows.forEach(function (row) {\n\t\t\t\t\tif (visRows.indexOf(row) > -1) {\n\t\t\t\t\t\tgroupData.rows.push(row.getData(\"download\"));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgroupData.rows = group.getData(true, \"download\");\n\t\t\t}\n\t\t}\n\n\t\treturn groupData;\n\t};\n\n\tDownload.prototype.triggerDownload = function (data, mime, type, filename, newTab) {\n\t\tvar element = document.createElement('a'),\n\t\t blob = new Blob([data], { type: mime }),\n\t\t filename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\n\n\t\tblob = this.table.options.downloadReady.call(this.table, data, blob);\n\n\t\tif (blob) {\n\n\t\t\tif (newTab) {\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\n\t\t\t} else {\n\t\t\t\tif (navigator.msSaveOrOpenBlob) {\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\n\t\t\t\t} else {\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\n\n\t\t\t\t\t//set file title\n\t\t\t\t\telement.setAttribute('download', filename);\n\n\t\t\t\t\t//trigger download\n\t\t\t\t\telement.style.display = 'none';\n\t\t\t\t\tdocument.body.appendChild(element);\n\t\t\t\t\telement.click();\n\n\t\t\t\t\t//remove temporary link element\n\t\t\t\t\tdocument.body.removeChild(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.table.options.downloadComplete) {\n\t\t\t\tthis.table.options.downloadComplete();\n\t\t\t}\n\t\t}\n\t};\n\n\t//nested field lookup\n\tDownload.prototype.getFieldValue = function (field, data) {\n\t\tvar column = this.columnsByField[field];\n\n\t\tif (column) {\n\t\t\treturn column.getFieldValue(data);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tDownload.prototype.commsReceived = function (table, action, data) {\n\t\tswitch (action) {\n\t\t\tcase \"intercept\":\n\t\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t//downloaders\n\tDownload.prototype.downloaders = {\n\t\tcsv: function csv(columns, data, options, setFileContents, config) {\n\t\t\tvar self = this,\n\t\t\t titles = [],\n\t\t\t fields = [],\n\t\t\t delimiter = options && options.delimiter ? options.delimiter : \",\",\n\t\t\t fileContents,\n\t\t\t output;\n\n\t\t\t//build column headers\n\t\t\tfunction parseSimpleTitles() {\n\t\t\t\tcolumns.forEach(function (column) {\n\t\t\t\t\ttitles.push('\"' + String(column.title).split('\"').join('\"\"') + '\"');\n\t\t\t\t\tfields.push(column.field);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction parseColumnGroup(column, level) {\n\t\t\t\tif (column.subGroups) {\n\t\t\t\t\tcolumn.subGroups.forEach(function (subGroup) {\n\t\t\t\t\t\tparseColumnGroup(subGroup, level + 1);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttitles.push('\"' + String(column.title).split('\"').join('\"\"') + '\"');\n\t\t\t\t\tfields.push(column.definition.field);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.columnGroups) {\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column groups\");\n\n\t\t\t\tcolumns.forEach(function (column) {\n\t\t\t\t\tparseColumnGroup(column, 0);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tparseSimpleTitles();\n\t\t\t}\n\n\t\t\t//generate header row\n\t\t\tfileContents = [titles.join(delimiter)];\n\n\t\t\tfunction parseRows(data) {\n\t\t\t\t//generate each row of the table\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tvar rowData = [];\n\n\t\t\t\t\tfields.forEach(function (field) {\n\t\t\t\t\t\tvar value = self.getFieldValue(field, row);\n\n\t\t\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tvalue = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//escape quotation marks\n\t\t\t\t\t\trowData.push('\"' + String(value).split('\"').join('\"\"') + '\"');\n\t\t\t\t\t});\n\n\t\t\t\t\tfileContents.push(rowData.join(delimiter));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction parseGroup(group) {\n\t\t\t\tif (group.subGroups) {\n\t\t\t\t\tgroup.subGroups.forEach(function (subGroup) {\n\t\t\t\t\t\tparseGroup(subGroup);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tparseRows(group.rows);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.columnCalcs) {\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\tdata = data.data;\n\t\t\t}\n\n\t\t\tif (config.rowGroups) {\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\n\n\t\t\t\tdata.forEach(function (group) {\n\t\t\t\t\tparseGroup(group);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tparseRows(data);\n\t\t\t}\n\n\t\t\toutput = fileContents.join(\"\\n\");\n\n\t\t\tif (options.bom) {\n\t\t\t\toutput = '\\uFEFF' + output;\n\t\t\t}\n\n\t\t\tsetFileContents(output, \"text/csv\");\n\t\t},\n\n\t\tjson: function json(columns, data, options, setFileContents, config) {\n\t\t\tvar fileContents;\n\n\t\t\tif (config.columnCalcs) {\n\t\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\n\t\t\t\tdata = data.data;\n\t\t\t}\n\n\t\t\tfileContents = JSON.stringify(data, null, '\\t');\n\n\t\t\tsetFileContents(fileContents, \"application/json\");\n\t\t},\n\n\t\tpdf: function pdf(columns, data, options, setFileContents, config) {\n\t\t\tvar self = this,\n\t\t\t fields = [],\n\t\t\t header = [],\n\t\t\t body = [],\n\t\t\t calcs = {},\n\t\t\t headerDepth = 1,\n\t\t\t table = \"\",\n\t\t\t autoTableParams = {},\n\t\t\t rowGroupStyles = options.rowGroupStyles || {\n\t\t\t\tfontStyle: \"bold\",\n\t\t\t\tfontSize: 12,\n\t\t\t\tcellPadding: 6,\n\t\t\t\tfillColor: 220\n\t\t\t},\n\t\t\t rowCalcStyles = options.rowCalcStyles || {\n\t\t\t\tfontStyle: \"bold\",\n\t\t\t\tfontSize: 10,\n\t\t\t\tcellPadding: 4,\n\t\t\t\tfillColor: 232\n\t\t\t},\n\t\t\t jsPDFParams = options.jsPDF || {},\n\t\t\t title = options && options.title ? options.title : \"\";\n\n\t\t\tif (config.columnCalcs) {\n\t\t\t\tcalcs = data.calcs;\n\t\t\t\tdata = data.data;\n\t\t\t}\n\n\t\t\tif (!jsPDFParams.orientation) {\n\t\t\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\n\t\t\t}\n\n\t\t\tif (!jsPDFParams.unit) {\n\t\t\t\tjsPDFParams.unit = \"pt\";\n\t\t\t}\n\n\t\t\t//build column headers\n\t\t\tfunction parseSimpleTitles() {\n\t\t\t\tcolumns.forEach(function (column) {\n\t\t\t\t\tif (column.field) {\n\t\t\t\t\t\theader.push(column.title || \"\");\n\t\t\t\t\t\tfields.push(column.field);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\theader = [header];\n\t\t\t}\n\n\t\t\tfunction parseColumnGroup(column, level) {\n\t\t\t\tvar colSpan = column.width,\n\t\t\t\t rowSpan = 1,\n\t\t\t\t col = {\n\t\t\t\t\tcontent: column.title || \"\"\n\t\t\t\t};\n\n\t\t\t\tif (column.subGroups) {\n\t\t\t\t\tcolumn.subGroups.forEach(function (subGroup) {\n\t\t\t\t\t\tparseColumnGroup(subGroup, level + 1);\n\t\t\t\t\t});\n\t\t\t\t\trowSpan = 1;\n\t\t\t\t} else {\n\t\t\t\t\tfields.push(column.definition.field);\n\t\t\t\t\trowSpan = headerDepth - level;\n\t\t\t\t}\n\n\t\t\t\tcol.rowSpan = rowSpan;\n\t\t\t\t// col.colSpan = colSpan;\n\n\t\t\t\theader[level].push(col);\n\n\t\t\t\tcolSpan--;\n\n\t\t\t\tif (rowSpan > 1) {\n\t\t\t\t\tfor (var i = level + 1; i < headerDepth; i++) {\n\t\t\t\t\t\theader[i].push(\"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0; i < colSpan; i++) {\n\t\t\t\t\theader[level].push(\"\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.columnGroups) {\n\t\t\t\tcolumns.forEach(function (column) {\n\t\t\t\t\tif (column.depth > headerDepth) {\n\t\t\t\t\t\theaderDepth = column.depth;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tfor (var i = 0; i < headerDepth; i++) {\n\t\t\t\t\theader.push([]);\n\t\t\t\t}\n\n\t\t\t\tcolumns.forEach(function (column) {\n\t\t\t\t\tparseColumnGroup(column, 0);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tparseSimpleTitles();\n\t\t\t}\n\n\t\t\tfunction parseValue(value) {\n\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tfunction parseRows(data) {\n\t\t\t\t//build table rows\n\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\tbody.push(parseRow(row));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction parseRow(row, styles) {\n\t\t\t\tvar rowData = [];\n\n\t\t\t\tfields.forEach(function (field) {\n\t\t\t\t\tvar value = self.getFieldValue(field, row);\n\t\t\t\t\tvalue = parseValue(value);\n\n\t\t\t\t\tif (styles) {\n\t\t\t\t\t\trowData.push({\n\t\t\t\t\t\t\tcontent: value,\n\t\t\t\t\t\t\tstyles: styles\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\trowData.push(value);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn rowData;\n\t\t\t}\n\n\t\t\tfunction parseGroup(group, calcObj) {\n\t\t\t\tvar groupData = [];\n\n\t\t\t\tgroupData.push({ content: parseValue(group.key), colSpan: fields.length, styles: rowGroupStyles });\n\n\t\t\t\tbody.push(groupData);\n\n\t\t\t\tif (group.subGroups) {\n\t\t\t\t\tgroup.subGroups.forEach(function (subGroup) {\n\t\t\t\t\t\tparseGroup(subGroup, calcObj[group.key] ? calcObj[group.key].groups || {} : {});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\n\t\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\t\taddCalcRow(calcObj, group.key, \"top\");\n\t\t\t\t\t}\n\n\t\t\t\t\tparseRows(group.rows);\n\n\t\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\t\taddCalcRow(calcObj, group.key, \"bottom\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction addCalcRow(calcs, selector, pos) {\n\t\t\t\tvar calcData = calcs[selector];\n\n\t\t\t\tif (calcData) {\n\t\t\t\t\tif (pos) {\n\t\t\t\t\t\tcalcData = calcData[pos];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Object.keys(calcData).length) {\n\t\t\t\t\t\tbody.push(parseRow(calcData, rowCalcStyles));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.rowGroups) {\n\t\t\t\tdata.forEach(function (group) {\n\t\t\t\t\tparseGroup(group, calcs);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\taddCalcRow(calcs, \"top\");\n\t\t\t\t}\n\n\t\t\t\tparseRows(data);\n\n\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\taddCalcRow(calcs, \"bottom\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables\n\n\t\t\tif (options && options.autoTable) {\n\t\t\t\tif (typeof options.autoTable === \"function\") {\n\t\t\t\t\tautoTableParams = options.autoTable(doc) || {};\n\t\t\t\t} else {\n\t\t\t\t\tautoTableParams = options.autoTable;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (title) {\n\t\t\t\tautoTableParams.addPageContent = function (data) {\n\t\t\t\t\tdoc.text(title, 40, 30);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tautoTableParams.head = header;\n\t\t\tautoTableParams.body = body;\n\n\t\t\tdoc.autoTable(autoTableParams);\n\n\t\t\tif (options && options.documentProcessing) {\n\t\t\t\toptions.documentProcessing(doc);\n\t\t\t}\n\n\t\t\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\n\t\t},\n\n\t\txlsx: function xlsx(columns, data, options, setFileContents, config) {\n\t\t\tvar self = this,\n\t\t\t sheetName = options.sheetName || \"Sheet1\",\n\t\t\t workbook = XLSX.utils.book_new(),\n\t\t\t calcs = {},\n\t\t\t groupRowIndexs = [],\n\t\t\t groupColumnIndexs = [],\n\t\t\t calcRowIndexs = [],\n\t\t\t output;\n\n\t\t\tworkbook.SheetNames = [];\n\t\t\tworkbook.Sheets = {};\n\n\t\t\tif (config.columnCalcs) {\n\t\t\t\tcalcs = data.calcs;\n\t\t\t\tdata = data.data;\n\t\t\t}\n\n\t\t\tfunction generateSheet() {\n\t\t\t\tvar titles = [],\n\t\t\t\t fields = [],\n\t\t\t\t rows = [],\n\t\t\t\t worksheet;\n\n\t\t\t\t//convert rows to worksheet\n\t\t\t\tfunction rowsToSheet() {\n\t\t\t\t\tvar sheet = {};\n\t\t\t\t\tvar range = { s: { c: 0, r: 0 }, e: { c: fields.length, r: rows.length } };\n\n\t\t\t\t\tXLSX.utils.sheet_add_aoa(sheet, rows);\n\n\t\t\t\t\tsheet['!ref'] = XLSX.utils.encode_range(range);\n\n\t\t\t\t\tvar merges = generateMerges();\n\n\t\t\t\t\tif (merges.length) {\n\t\t\t\t\t\tsheet[\"!merges\"] = merges;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn sheet;\n\t\t\t\t}\n\n\t\t\t\tfunction parseSimpleTitles() {\n\t\t\t\t\t//get field lists\n\t\t\t\t\tcolumns.forEach(function (column) {\n\t\t\t\t\t\ttitles.push(column.title);\n\t\t\t\t\t\tfields.push(column.field);\n\t\t\t\t\t});\n\n\t\t\t\t\trows.push(titles);\n\t\t\t\t}\n\n\t\t\t\tfunction parseColumnGroup(column, level) {\n\n\t\t\t\t\tif (typeof titles[level] === \"undefined\") {\n\t\t\t\t\t\ttitles[level] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (typeof groupColumnIndexs[level] === \"undefined\") {\n\t\t\t\t\t\tgroupColumnIndexs[level] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (column.width > 1) {\n\n\t\t\t\t\t\tgroupColumnIndexs[level].push({\n\t\t\t\t\t\t\ttype: \"hoz\",\n\t\t\t\t\t\t\tstart: titles[level].length,\n\t\t\t\t\t\t\tend: titles[level].length + column.width - 1\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\ttitles[level].push(column.title);\n\n\t\t\t\t\tif (column.subGroups) {\n\t\t\t\t\t\tcolumn.subGroups.forEach(function (subGroup) {\n\t\t\t\t\t\t\tparseColumnGroup(subGroup, level + 1);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfields.push(column.definition.field);\n\t\t\t\t\t\tpadColumnTitles(fields.length - 1, level);\n\n\t\t\t\t\t\tgroupColumnIndexs[level].push({\n\t\t\t\t\t\t\ttype: \"vert\",\n\t\t\t\t\t\t\tstart: fields.length - 1\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction padColumnTitles() {\n\t\t\t\t\tvar max = 0;\n\n\t\t\t\t\ttitles.forEach(function (title) {\n\t\t\t\t\t\tvar len = title.length;\n\t\t\t\t\t\tif (len > max) {\n\t\t\t\t\t\t\tmax = len;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\ttitles.forEach(function (title) {\n\t\t\t\t\t\tvar len = title.length;\n\t\t\t\t\t\tif (len < max) {\n\t\t\t\t\t\t\tfor (var i = len; i < max; i++) {\n\t\t\t\t\t\t\t\ttitle.push(\"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (config.columnGroups) {\n\t\t\t\t\tcolumns.forEach(function (column) {\n\t\t\t\t\t\tparseColumnGroup(column, 0);\n\t\t\t\t\t});\n\n\t\t\t\t\ttitles.forEach(function (title) {\n\t\t\t\t\t\trows.push(title);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tparseSimpleTitles();\n\t\t\t\t}\n\n\t\t\t\tfunction generateMerges() {\n\t\t\t\t\tvar output = [];\n\n\t\t\t\t\tgroupRowIndexs.forEach(function (index) {\n\t\t\t\t\t\toutput.push({ s: { r: index, c: 0 }, e: { r: index, c: fields.length - 1 } });\n\t\t\t\t\t});\n\n\t\t\t\t\tgroupColumnIndexs.forEach(function (merges, level) {\n\t\t\t\t\t\tmerges.forEach(function (merge) {\n\t\t\t\t\t\t\tif (merge.type === \"hoz\") {\n\t\t\t\t\t\t\t\toutput.push({ s: { r: level, c: merge.start }, e: { r: level, c: merge.end } });\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (level != titles.length - 1) {\n\t\t\t\t\t\t\t\t\toutput.push({ s: { r: level, c: merge.start }, e: { r: titles.length - 1, c: merge.start } });\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\treturn output;\n\t\t\t\t}\n\n\t\t\t\t//generate each row of the table\n\t\t\t\tfunction parseRows(data) {\n\t\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\t\trows.push(parseRow(row));\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfunction parseRow(row) {\n\t\t\t\t\tvar rowData = [];\n\n\t\t\t\t\tfields.forEach(function (field) {\n\t\t\t\t\t\tvar value = self.getFieldValue(field, row);\n\t\t\t\t\t\trowData.push(!(value instanceof Date) && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\" ? JSON.stringify(value) : value);\n\t\t\t\t\t});\n\n\t\t\t\t\treturn rowData;\n\t\t\t\t}\n\n\t\t\t\tfunction addCalcRow(calcs, selector, pos) {\n\t\t\t\t\tvar calcData = calcs[selector];\n\n\t\t\t\t\tif (calcData) {\n\t\t\t\t\t\tif (pos) {\n\t\t\t\t\t\t\tcalcData = calcData[pos];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (Object.keys(calcData).length) {\n\t\t\t\t\t\t\tcalcRowIndexs.push(rows.length);\n\t\t\t\t\t\t\trows.push(parseRow(calcData));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction parseGroup(group, calcObj) {\n\t\t\t\t\tvar groupData = [];\n\n\t\t\t\t\tgroupData.push(group.key);\n\n\t\t\t\t\tgroupRowIndexs.push(rows.length);\n\n\t\t\t\t\trows.push(groupData);\n\n\t\t\t\t\tif (group.subGroups) {\n\t\t\t\t\t\tgroup.subGroups.forEach(function (subGroup) {\n\t\t\t\t\t\t\tparseGroup(subGroup, calcObj[group.key] ? calcObj[group.key].groups || {} : {});\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\t\t\taddCalcRow(calcObj, group.key, \"top\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tparseRows(group.rows);\n\n\t\t\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\t\t\taddCalcRow(calcObj, group.key, \"bottom\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (config.rowGroups) {\n\t\t\t\t\tdata.forEach(function (group) {\n\t\t\t\t\t\tparseGroup(group, calcs);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\t\taddCalcRow(calcs, \"top\");\n\t\t\t\t\t}\n\n\t\t\t\t\tparseRows(data);\n\n\t\t\t\t\tif (config.columnCalcs) {\n\t\t\t\t\t\taddCalcRow(calcs, \"bottom\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tworksheet = rowsToSheet();\n\n\t\t\t\treturn worksheet;\n\t\t\t}\n\n\t\t\tif (options.sheetOnly) {\n\t\t\t\tsetFileContents(generateSheet());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (options.sheets) {\n\t\t\t\tfor (var sheet in options.sheets) {\n\n\t\t\t\t\tif (options.sheets[sheet] === true) {\n\t\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\t\t\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tworkbook.SheetNames.push(sheet);\n\n\t\t\t\t\t\tthis.table.modules.comms.send(options.sheets[sheet], \"download\", \"intercept\", {\n\t\t\t\t\t\t\ttype: \"xlsx\",\n\t\t\t\t\t\t\toptions: { sheetOnly: true },\n\t\t\t\t\t\t\tactive: self.active,\n\t\t\t\t\t\t\tintercept: function intercept(data) {\n\t\t\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tworkbook.SheetNames.push(sheetName);\n\t\t\t\tworkbook.Sheets[sheetName] = generateSheet();\n\t\t\t}\n\n\t\t\tif (options.documentProcessing) {\n\t\t\t\tworkbook = options.documentProcessing(workbook);\n\t\t\t}\n\n\t\t\t//convert workbook to binary array\n\t\t\tfunction s2ab(s) {\n\t\t\t\tvar buf = new ArrayBuffer(s.length);\n\t\t\t\tvar view = new Uint8Array(buf);\n\t\t\t\tfor (var i = 0; i != s.length; ++i) {\n\t\t\t\t\tview[i] = s.charCodeAt(i) & 0xFF;\n\t\t\t\t}return buf;\n\t\t\t}\n\n\t\t\toutput = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });\n\n\t\t\tsetFileContents(s2ab(output), \"application/octet-stream\");\n\t\t},\n\n\t\thtml: function html(columns, data, options, setFileContents, config) {\n\t\t\tif (this.table.modExists(\"export\", true)) {\n\t\t\t\tsetFileContents(this.table.modules.export.getHtml(true, options.style, config), \"text/html\");\n\t\t\t}\n\t\t}\n\n\t};\n\n\tTabulator.prototype.registerModule(\"download\", Download);\n\n\tvar Edit = function Edit(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.currentCell = false; //hold currently editing cell\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\n\t\tthis.recursionBlock = false; //prevent focus recursion\n\t\tthis.invalidEdit = false;\n\t};\n\n\t//initialize column editor\n\tEdit.prototype.initializeColumn = function (column) {\n\t\tvar self = this,\n\t\t config = {\n\t\t\teditor: false,\n\t\t\tblocked: false,\n\t\t\tcheck: column.definition.editable,\n\t\t\tparams: column.definition.editorParams || {}\n\t\t};\n\n\t\t//set column editor\n\t\tswitch (_typeof(column.definition.editor)) {\n\t\t\tcase \"string\":\n\n\t\t\t\tif (column.definition.editor === \"tick\") {\n\t\t\t\t\tcolumn.definition.editor = \"tickCross\";\n\t\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t\t}\n\n\t\t\t\tif (self.editors[column.definition.editor]) {\n\t\t\t\t\tconfig.editor = self.editors[column.definition.editor];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.editor = column.definition.editor;\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\n\t\t\t\tif (column.definition.editor === true) {\n\n\t\t\t\t\tif (typeof column.definition.formatter !== \"function\") {\n\n\t\t\t\t\t\tif (column.definition.formatter === \"tick\") {\n\t\t\t\t\t\t\tcolumn.definition.formatter = \"tickCross\";\n\t\t\t\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick editor has been deprecated, please use the tickCross editor\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (self.editors[column.definition.formatter]) {\n\t\t\t\t\t\t\tconfig.editor = self.editors[column.definition.formatter];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconfig.editor = self.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (config.editor) {\n\t\t\tcolumn.modules.edit = config;\n\t\t}\n\t};\n\n\tEdit.prototype.getCurrentCell = function () {\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\n\t};\n\n\tEdit.prototype.clearEditor = function () {\n\t\tvar cell = this.currentCell,\n\t\t cellEl;\n\n\t\tthis.invalidEdit = false;\n\n\t\tif (cell) {\n\t\t\tthis.currentCell = false;\n\n\t\t\tcellEl = cell.getElement();\n\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\n\t\t\twhile (cellEl.firstChild) {\n\t\t\t\tcellEl.removeChild(cellEl.firstChild);\n\t\t\t}cell.row.getElement().classList.remove(\"tabulator-row-editing\");\n\t\t}\n\t};\n\n\tEdit.prototype.cancelEdit = function () {\n\n\t\tif (this.currentCell) {\n\t\t\tvar cell = this.currentCell;\n\t\t\tvar component = this.currentCell.getComponent();\n\n\t\t\tthis.clearEditor();\n\t\t\tcell.setValueActual(cell.getValue());\n\t\t\tcell.cellRendered();\n\n\t\t\tif (cell.column.cellEvents.cellEditCancelled) {\n\t\t\t\tcell.column.cellEvents.cellEditCancelled.call(this.table, component);\n\t\t\t}\n\n\t\t\tthis.table.options.cellEditCancelled.call(this.table, component);\n\t\t}\n\t};\n\n\t//return a formatted value for a cell\n\tEdit.prototype.bindEditor = function (cell) {\n\t\tvar self = this,\n\t\t element = cell.getElement();\n\n\t\telement.setAttribute(\"tabindex\", 0);\n\n\t\telement.addEventListener(\"click\", function (e) {\n\t\t\tif (!element.classList.contains(\"tabulator-editing\")) {\n\t\t\t\telement.focus({ preventScroll: true });\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"mousedown\", function (e) {\n\t\t\tself.mouseClick = true;\n\t\t});\n\n\t\telement.addEventListener(\"focus\", function (e) {\n\t\t\tif (!self.recursionBlock) {\n\t\t\t\tself.edit(cell, e, false);\n\t\t\t}\n\t\t});\n\t};\n\n\tEdit.prototype.focusCellNoEvent = function (cell, block) {\n\t\tthis.recursionBlock = true;\n\t\tif (!(block && this.table.browser === \"ie\")) {\n\t\t\tcell.getElement().focus({ preventScroll: true });\n\t\t}\n\t\tthis.recursionBlock = false;\n\t};\n\n\tEdit.prototype.editCell = function (cell, forceEdit) {\n\t\tthis.focusCellNoEvent(cell);\n\t\tthis.edit(cell, false, forceEdit);\n\t};\n\n\tEdit.prototype.focusScrollAdjust = function (cell) {\n\t\tif (this.table.rowManager.getRenderMode() == \"virtual\") {\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\n\t\t\t bottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\n\t\t\t rowEl = cell.row.getElement(),\n\t\t\t offset = rowEl.offsetTop;\n\n\t\t\tif (rowEl.offsetTop < topEdge) {\n\t\t\t\tthis.table.rowManager.element.scrollTop -= topEdge - rowEl.offsetTop;\n\t\t\t} else {\n\t\t\t\tif (rowEl.offsetTop + rowEl.offsetHeight > bottomEdge) {\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += rowEl.offsetTop + rowEl.offsetHeight - bottomEdge;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tEdit.prototype.edit = function (cell, e, forceEdit) {\n\t\tvar self = this,\n\t\t allowEdit = true,\n\t\t rendered = function rendered() {},\n\t\t element = cell.getElement(),\n\t\t cellEditor,\n\t\t component,\n\t\t params;\n\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\n\t\tif (this.currentCell) {\n\t\t\tif (!this.invalidEdit) {\n\t\t\t\tthis.cancelEdit();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t//handle successfull value change\n\t\tfunction success(value) {\n\t\t\tif (self.currentCell === cell) {\n\t\t\t\tvar valid = true;\n\n\t\t\t\tif (cell.column.modules.validate && self.table.modExists(\"validate\")) {\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell.getComponent(), value);\n\t\t\t\t}\n\n\t\t\t\tif (valid === true) {\n\t\t\t\t\tself.clearEditor();\n\t\t\t\t\tcell.setValue(value, true);\n\n\t\t\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tself.invalidEdit = true;\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\n\t\t\t\t\trendered();\n\t\t\t\t\tself.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid);\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\n\t\t//handle aborted edit\n\t\tfunction cancel() {\n\t\t\tif (self.currentCell === cell) {\n\t\t\t\tself.cancelEdit();\n\n\t\t\t\tif (self.table.options.dataTree && self.table.modExists(\"dataTree\")) {\n\t\t\t\t\tself.table.modules.dataTree.checkForRestyle(cell);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\n\t\t\t}\n\t\t}\n\n\t\tfunction onRendered(callback) {\n\t\t\trendered = callback;\n\t\t}\n\n\t\tif (!cell.column.modules.edit.blocked) {\n\t\t\tif (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\n\t\t\tswitch (_typeof(cell.column.modules.edit.check)) {\n\t\t\t\tcase \"function\":\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tallowEdit = cell.column.modules.edit.check;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (allowEdit || forceEdit) {\n\n\t\t\t\tself.cancelEdit();\n\n\t\t\t\tself.currentCell = cell;\n\n\t\t\t\tthis.focusScrollAdjust(cell);\n\n\t\t\t\tcomponent = cell.getComponent();\n\n\t\t\t\tif (this.mouseClick) {\n\t\t\t\t\tthis.mouseClick = false;\n\n\t\t\t\t\tif (cell.column.cellEvents.cellClick) {\n\t\t\t\t\t\tcell.column.cellEvents.cellClick.call(this.table, e, component);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (cell.column.cellEvents.cellEditing) {\n\t\t\t\t\tcell.column.cellEvents.cellEditing.call(this.table, component);\n\t\t\t\t}\n\n\t\t\t\tself.table.options.cellEditing.call(this.table, component);\n\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\n\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\n\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\n\t\t\t\tif (cellEditor !== false) {\n\n\t\t\t\t\tif (cellEditor instanceof Node) {\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\n\t\t\t\t\t\twhile (element.firstChild) {\n\t\t\t\t\t\t\telement.removeChild(element.firstChild);\n\t\t\t\t\t\t}element.appendChild(cellEditor);\n\n\t\t\t\t\t\t//trigger onRendered Callback\n\t\t\t\t\t\trendered();\n\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\n\t\t\t\t\t\tvar children = element.children;\n\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\n\t\t\t\t\t\telement.blur();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tthis.mouseClick = false;\n\t\t\t\telement.blur();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.mouseClick = false;\n\t\t\telement.blur();\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tEdit.prototype.maskInput = function (el, options) {\n\t\tvar mask = options.mask,\n\t\t maskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\n\t\t maskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\n\t\t maskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\n\t\t success = false;\n\n\t\tfunction fillSymbols(index) {\n\t\t\tvar symbol = mask[index];\n\t\t\tif (typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber) {\n\t\t\t\tel.value = el.value + \"\" + symbol;\n\t\t\t\tfillSymbols(index + 1);\n\t\t\t}\n\t\t}\n\n\t\tel.addEventListener(\"keydown\", function (e) {\n\t\t\tvar index = el.value.length,\n\t\t\t char = e.key;\n\n\t\t\tif (e.keyCode > 46) {\n\t\t\t\tif (index >= mask.length) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tsuccess = false;\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tswitch (mask[index]) {\n\t\t\t\t\t\tcase maskLetter:\n\t\t\t\t\t\t\tif (char.toUpperCase() == char.toLowerCase()) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase maskNumber:\n\t\t\t\t\t\t\tif (isNaN(char)) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase maskWildcard:\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif (char !== mask[index]) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tsuccess = false;\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsuccess = true;\n\t\t\t}\n\n\t\t\treturn;\n\t\t});\n\n\t\tel.addEventListener(\"keyup\", function (e) {\n\t\t\tif (e.keyCode > 46) {\n\t\t\t\tif (options.maskAutoFill) {\n\t\t\t\t\tfillSymbols(el.value.length);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (!el.placeholder) {\n\t\t\tel.placeholder = mask;\n\t\t}\n\n\t\tif (options.maskAutoFill) {\n\t\t\tfillSymbols(el.value.length);\n\t\t}\n\t};\n\n\t//default data editors\n\tEdit.prototype.editors = {\n\n\t\t//input element\n\t\tinput: function input(cell, onRendered, success, cancel, editorParams) {\n\n\t\t\t//create and style input\n\t\t\tvar cellValue = cell.getValue(),\n\t\t\t input = document.createElement(\"input\");\n\n\t\t\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\n\n\t\t\tinput.style.padding = \"4px\";\n\t\t\tinput.style.width = \"100%\";\n\t\t\tinput.style.boxSizing = \"border-box\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\n\n\t\t\tonRendered(function () {\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t\tinput.style.height = \"100%\";\n\t\t\t});\n\n\t\t\tfunction onChange(e) {\n\t\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\t\t\t\t\tif (success(input.value)) {\n\t\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//submit new value on blur or change\n\t\t\tinput.addEventListener(\"change\", onChange);\n\t\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\t\t//submit new value on enter\n\t\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\t// case 9:\n\t\t\t\t\tcase 13:\n\t\t\t\t\t\tonChange(e);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (editorParams.mask) {\n\t\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t\t}\n\n\t\t\treturn input;\n\t\t},\n\n\t\t//resizable text area element\n\t\ttextarea: function textarea(cell, onRendered, success, cancel, editorParams) {\n\t\t\tvar self = this,\n\t\t\t cellValue = cell.getValue(),\n\t\t\t vertNav = editorParams.verticalNavigation || \"hybrid\",\n\t\t\t value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\n\t\t\t count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\n\t\t\t input = document.createElement(\"textarea\"),\n\t\t\t scrollHeight = 0;\n\n\t\t\t//create and style input\n\t\t\tinput.style.display = \"block\";\n\t\t\tinput.style.padding = \"2px\";\n\t\t\tinput.style.height = \"100%\";\n\t\t\tinput.style.width = \"100%\";\n\t\t\tinput.style.boxSizing = \"border-box\";\n\t\t\tinput.style.whiteSpace = \"pre-wrap\";\n\t\t\tinput.style.resize = \"none\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput.value = value;\n\n\t\t\tonRendered(function () {\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t\tinput.style.height = \"100%\";\n\t\t\t});\n\n\t\t\tfunction onChange(e) {\n\n\t\t\t\tif ((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\" || input.value !== cellValue) {\n\n\t\t\t\t\tif (success(input.value)) {\n\t\t\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t\t}\n\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t\t\t}, 300);\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//submit new value on blur or change\n\t\t\tinput.addEventListener(\"change\", onChange);\n\t\t\tinput.addEventListener(\"blur\", onChange);\n\n\t\t\tinput.addEventListener(\"keyup\", function () {\n\n\t\t\t\tinput.style.height = \"\";\n\n\t\t\t\tvar heightNow = input.scrollHeight;\n\n\t\t\t\tinput.style.height = heightNow + \"px\";\n\n\t\t\t\tif (heightNow != scrollHeight) {\n\t\t\t\t\tscrollHeight = heightNow;\n\t\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"keydown\", function (e) {\n\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\t//up arrow\n\t\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 40:\n\t\t\t\t\t\t//down arrow\n\t\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && input.selectionStart !== input.value.length) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (editorParams.mask) {\n\t\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t\t}\n\n\t\t\treturn input;\n\t\t},\n\n\t\t//input element with type of number\n\t\tnumber: function number(cell, onRendered, success, cancel, editorParams) {\n\n\t\t\tvar cellValue = cell.getValue(),\n\t\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t\t input = document.createElement(\"input\");\n\n\t\t\tinput.setAttribute(\"type\", \"number\");\n\n\t\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t\t}\n\n\t\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t\t}\n\n\t\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t\t}\n\n\t\t\t//create and style input\n\t\t\tinput.style.padding = \"4px\";\n\t\t\tinput.style.width = \"100%\";\n\t\t\tinput.style.boxSizing = \"border-box\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput.value = cellValue;\n\n\t\t\tvar blurFunc = function blurFunc(e) {\n\t\t\t\tonChange();\n\t\t\t};\n\n\t\t\tonRendered(function () {\n\t\t\t\t//submit new value on blur\n\t\t\t\tinput.removeEventListener(\"blur\", blurFunc);\n\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t\tinput.style.height = \"100%\";\n\n\t\t\t\t//submit new value on blur\n\t\t\t\tinput.addEventListener(\"blur\", blurFunc);\n\t\t\t});\n\n\t\t\tfunction onChange() {\n\t\t\t\tvar value = input.value;\n\n\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\t\tvalue = Number(value);\n\t\t\t\t}\n\n\t\t\t\tif (value !== cellValue) {\n\t\t\t\t\tif (success(value)) {\n\t\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//submit new value on enter\n\t\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 13:\n\t\t\t\t\t\t// case 9:\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 38: //up arrow\n\t\t\t\t\tcase 40:\n\t\t\t\t\t\t//down arrow\n\t\t\t\t\t\tif (vertNav == \"editor\") {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (editorParams.mask) {\n\t\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t\t}\n\n\t\t\treturn input;\n\t\t},\n\n\t\t//input element with type of number\n\t\trange: function range(cell, onRendered, success, cancel, editorParams) {\n\n\t\t\tvar cellValue = cell.getValue(),\n\t\t\t input = document.createElement(\"input\");\n\n\t\t\tinput.setAttribute(\"type\", \"range\");\n\n\t\t\tif (typeof editorParams.max != \"undefined\") {\n\t\t\t\tinput.setAttribute(\"max\", editorParams.max);\n\t\t\t}\n\n\t\t\tif (typeof editorParams.min != \"undefined\") {\n\t\t\t\tinput.setAttribute(\"min\", editorParams.min);\n\t\t\t}\n\n\t\t\tif (typeof editorParams.step != \"undefined\") {\n\t\t\t\tinput.setAttribute(\"step\", editorParams.step);\n\t\t\t}\n\n\t\t\t//create and style input\n\t\t\tinput.style.padding = \"4px\";\n\t\t\tinput.style.width = \"100%\";\n\t\t\tinput.style.boxSizing = \"border-box\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput.value = cellValue;\n\n\t\t\tonRendered(function () {\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t\tinput.style.height = \"100%\";\n\t\t\t});\n\n\t\t\tfunction onChange() {\n\t\t\t\tvar value = input.value;\n\n\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\t\tvalue = Number(value);\n\t\t\t\t}\n\n\t\t\t\tif (value != cellValue) {\n\t\t\t\t\tif (success(value)) {\n\t\t\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\t\tonChange();\n\t\t\t});\n\n\t\t\t//submit new value on enter\n\t\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 13:\n\t\t\t\t\tcase 9:\n\t\t\t\t\t\tonChange();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn input;\n\t\t},\n\n\t\t//select\n\t\tselect: function select(cell, onRendered, success, cancel, editorParams) {\n\t\t\tvar self = this,\n\t\t\t cellEl = cell.getElement(),\n\t\t\t initialValue = cell.getValue(),\n\t\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\",\n\t\t\t input = document.createElement(\"input\"),\n\t\t\t listEl = document.createElement(\"div\"),\n\t\t\t dataItems = [],\n\t\t\t displayItems = [],\n\t\t\t currentItem = {},\n\t\t\t blurable = true;\n\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\n\t\t\tif (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === \"object\" && !editorParams.values) {\n\t\t\t\tconsole.warn(\"DEPRECATION WANRING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\n\t\t\t\teditorParams = { values: editorParams };\n\t\t\t}\n\n\t\t\tfunction getUniqueColumnValues(field) {\n\t\t\t\tvar output = {},\n\t\t\t\t data = self.table.getData(),\n\t\t\t\t column;\n\n\t\t\t\tif (field) {\n\t\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t\t} else {\n\t\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t\t}\n\n\t\t\t\tif (column) {\n\t\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\t\t\tif (editorParams.sortValuesList == \"asc\") {\n\t\t\t\t\t\t\toutput = Object.keys(output).sort();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toutput = Object.keys(output).sort().reverse();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput = Object.keys(output);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t}\n\n\t\t\tfunction parseItems(inputValues, curentValue) {\n\t\t\t\tvar dataList = [];\n\t\t\t\tvar displayList = [];\n\n\t\t\t\tfunction processComplexListItem(item) {\n\t\t\t\t\tvar item = {\n\t\t\t\t\t\tlabel: editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label) : item.label,\n\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\telement: false\n\t\t\t\t\t};\n\n\t\t\t\t\tif (item.value === curentValue || !isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue)) {\n\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t}\n\n\t\t\t\t\tdataList.push(item);\n\t\t\t\t\tdisplayList.push(item);\n\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\n\t\t\t\tif (typeof inputValues == \"function\") {\n\t\t\t\t\tinputValues = inputValues(cell);\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\t\tinputValues.forEach(function (value) {\n\t\t\t\t\t\tvar item;\n\n\t\t\t\t\t\tif ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === \"object\") {\n\n\t\t\t\t\t\t\tif (value.options) {\n\t\t\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\t\t\tlabel: value.label,\n\t\t\t\t\t\t\t\t\tgroup: true,\n\t\t\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tdisplayList.push(item);\n\n\t\t\t\t\t\t\t\tvalue.options.forEach(function (item) {\n\t\t\t\t\t\t\t\t\tprocessComplexListItem(item);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tprocessComplexListItem(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\titem = {\n\t\t\t\t\t\t\t\tlabel: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value,\n\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (item.value === curentValue || !isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue)) {\n\t\t\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdataList.push(item);\n\t\t\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\t\tvar item = {\n\t\t\t\t\t\t\tlabel: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\n\t\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t\telement: false\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (item.value === curentValue || !isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue)) {\n\t\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdataList.push(item);\n\t\t\t\t\t\tdisplayList.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tdataItems = dataList;\n\t\t\t\tdisplayItems = displayList;\n\n\t\t\t\tfillList();\n\t\t\t}\n\n\t\t\tfunction fillList() {\n\t\t\t\twhile (listEl.firstChild) {\n\t\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t\t}displayItems.forEach(function (item) {\n\t\t\t\t\tvar el = item.element;\n\n\t\t\t\t\tif (!el) {\n\n\t\t\t\t\t\tif (item.group) {\n\t\t\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\n\t\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\n\n\t\t\t\t\t\t\tel.addEventListener(\"click\", function () {\n\t\t\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (item === currentItem) {\n\t\t\t\t\t\t\t\tel.classList.add(\"active\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tel.addEventListener(\"mousedown\", function () {\n\t\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\titem.element = el;\n\t\t\t\t\t}\n\n\t\t\t\t\tlistEl.appendChild(el);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction setCurrentItem(item) {\n\n\t\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t\t}\n\n\t\t\t\tcurrentItem = item;\n\t\t\t\tinput.value = item.label === \" \" ? \"\" : item.label;\n\n\t\t\t\tif (item.element) {\n\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction chooseItem() {\n\t\t\t\thideList();\n\n\t\t\t\tif (initialValue !== currentItem.value) {\n\t\t\t\t\tinitialValue = currentItem.value;\n\t\t\t\t\tsuccess(currentItem.value);\n\t\t\t\t} else {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction cancelItem() {\n\t\t\t\thideList();\n\t\t\t\tcancel();\n\t\t\t}\n\n\t\t\tfunction showList() {\n\t\t\t\tif (!listEl.parentNode) {\n\n\t\t\t\t\tif (editorParams.values === true) {\n\t\t\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\n\t\t\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\n\t\t\t\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t}, 10);\n\t\t\t\t\t});\n\n\t\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction hideList() {\n\t\t\t\tif (listEl.parentNode) {\n\t\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t\t}\n\n\t\t\t\tremoveScrollListener();\n\t\t\t}\n\n\t\t\tfunction removeScrollListener() {\n\t\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t\t}\n\n\t\t\t//style input\n\t\t\tinput.setAttribute(\"type\", \"text\");\n\n\t\t\tinput.style.padding = \"4px\";\n\t\t\tinput.style.width = \"100%\";\n\t\t\tinput.style.boxSizing = \"border-box\";\n\t\t\tinput.style.cursor = \"default\";\n\t\t\tinput.readOnly = this.currentCell != false;\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\n\n\t\t\t// if(editorParams.values === true){\n\t\t\t// \tparseItems(getUniqueColumnValues(), initialValue);\n\t\t\t// }else if(typeof editorParams.values === \"string\"){\n\t\t\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\n\t\t\t// }else{\n\t\t\t// \tparseItems(editorParams.values || [], initialValue);\n\t\t\t// }\n\n\t\t\t//allow key based navigation\n\t\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\t\tvar index;\n\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\t//up arrow\n\t\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[index - 1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 40:\n\t\t\t\t\t\t//down arrow\n\t\t\t\t\t\tindex = dataItems.indexOf(currentItem);\n\n\t\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < dataItems.length - 1) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\tif (index < dataItems.length - 1) {\n\t\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[0]);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 37: //left arrow\n\t\t\t\t\tcase 39:\n\t\t\t\t\t\t//right arrow\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 13:\n\t\t\t\t\t\t//enter\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\t//escape\n\t\t\t\t\t\tcancelItem();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\t\tif (blurable) {\n\t\t\t\t\tcancelItem();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\t\tshowList();\n\t\t\t});\n\n\t\t\t//style list element\n\t\t\tlistEl = document.createElement(\"div\");\n\t\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\t\tonRendered(function () {\n\t\t\t\tinput.style.height = \"100%\";\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t});\n\n\t\t\treturn input;\n\t\t},\n\n\t\t//autocomplete\n\t\tautocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) {\n\t\t\tvar self = this,\n\t\t\t cellEl = cell.getElement(),\n\t\t\t initialValue = cell.getValue(),\n\t\t\t vertNav = editorParams.verticalNavigation || \"editor\",\n\t\t\t initialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\",\n\t\t\t input = document.createElement(\"input\"),\n\t\t\t listEl = document.createElement(\"div\"),\n\t\t\t allItems = [],\n\t\t\t displayItems = [],\n\t\t\t values = [],\n\t\t\t currentItem = false,\n\t\t\t blurable = true;\n\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\n\n\t\t\t//style input\n\t\t\tinput.setAttribute(\"type\", \"search\");\n\n\t\t\tinput.style.padding = \"4px\";\n\t\t\tinput.style.width = \"100%\";\n\t\t\tinput.style.boxSizing = \"border-box\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//style list element\n\t\t\tlistEl.classList.add(\"tabulator-edit-select-list\");\n\n\t\t\tlistEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\tblurable = false;\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tblurable = true;\n\t\t\t\t}, 10);\n\t\t\t});\n\n\t\t\tfunction getUniqueColumnValues(field) {\n\t\t\t\tvar output = {},\n\t\t\t\t data = self.table.getData(),\n\t\t\t\t column;\n\n\t\t\t\tif (field) {\n\t\t\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\n\t\t\t\t} else {\n\t\t\t\t\tcolumn = cell.getColumn()._getSelf();\n\t\t\t\t}\n\n\t\t\t\tif (column) {\n\t\t\t\t\tdata.forEach(function (row) {\n\t\t\t\t\t\tvar val = column.getFieldValue(row);\n\n\t\t\t\t\t\tif (val !== null && typeof val !== \"undefined\" && val !== \"\") {\n\t\t\t\t\t\t\toutput[val] = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (editorParams.sortValuesList) {\n\t\t\t\t\t\tif (editorParams.sortValuesList == \"asc\") {\n\t\t\t\t\t\t\toutput = Object.keys(output).sort();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\toutput = Object.keys(output).sort().reverse();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput = Object.keys(output);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\t\t\t}\n\n\t\t\tfunction filterList(term, intialLoad) {\n\t\t\t\tvar matches = [],\n\t\t\t\t values,\n\t\t\t\t items,\n\t\t\t\t searchEl;\n\n\t\t\t\t//lookup base values list\n\t\t\t\tif (editorParams.values === true) {\n\t\t\t\t\tvalues = getUniqueColumnValues();\n\t\t\t\t} else if (typeof editorParams.values === \"string\") {\n\t\t\t\t\tvalues = getUniqueColumnValues(editorParams.values);\n\t\t\t\t} else {\n\t\t\t\t\tvalues = editorParams.values || [];\n\t\t\t\t}\n\n\t\t\t\tif (editorParams.searchFunc) {\n\t\t\t\t\tmatches = editorParams.searchFunc(term, values);\n\n\t\t\t\t\tif (matches instanceof Promise) {\n\n\t\t\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\n\n\t\t\t\t\t\tmatches.then(function (result) {\n\t\t\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\n\t\t\t\t\t\t}).catch(function (err) {\n\t\t\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\titems = parseItems(values);\n\n\t\t\t\t\tif (term === \"\") {\n\t\t\t\t\t\tif (editorParams.showListOnEmpty) {\n\t\t\t\t\t\t\tmatches = items;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\titems.forEach(function (item) {\n\t\t\t\t\t\t\tif (item.value !== null || typeof item.value !== \"undefined\") {\n\t\t\t\t\t\t\t\tif (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1) {\n\t\t\t\t\t\t\t\t\tmatches.push(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tfillListIfNotEmpty(matches, intialLoad);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction addNotice(notice) {\n\t\t\t\tvar searchEl = document.createElement(\"div\");\n\n\t\t\t\tclearList();\n\n\t\t\t\tif (notice !== false) {\n\t\t\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\n\t\t\t\t\tsearchEl.tabIndex = 0;\n\n\t\t\t\t\tif (notice instanceof Node) {\n\t\t\t\t\t\tsearchEl.appendChild(notice);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsearchEl.innerHTML = notice;\n\t\t\t\t\t}\n\n\t\t\t\t\tlistEl.appendChild(searchEl);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction parseItems(inputValues) {\n\t\t\t\tvar itemList = [];\n\n\t\t\t\tif (Array.isArray(inputValues)) {\n\t\t\t\t\tinputValues.forEach(function (value) {\n\t\t\t\t\t\tvar item = {\n\t\t\t\t\t\t\ttitle: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value,\n\t\t\t\t\t\t\tvalue: value\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\titemList.push(item);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tfor (var key in inputValues) {\n\t\t\t\t\t\tvar item = {\n\t\t\t\t\t\t\ttitle: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\n\t\t\t\t\t\t\tvalue: key\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\titemList.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn itemList;\n\t\t\t}\n\n\t\t\tfunction clearList() {\n\t\t\t\twhile (listEl.firstChild) {\n\t\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction fillListIfNotEmpty(items, intialLoad) {\n\t\t\t\tif (items.length) {\n\t\t\t\t\tfillList(items, intialLoad);\n\t\t\t\t} else {\n\t\t\t\t\tif (editorParams.emptyPlaceholder) {\n\t\t\t\t\t\taddNotice(editorParams.emptyPlaceholder);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction fillList(items, intialLoad) {\n\t\t\t\tvar current = false;\n\n\t\t\t\tclearList();\n\n\t\t\t\tdisplayItems = items;\n\n\t\t\t\tdisplayItems.forEach(function (item) {\n\t\t\t\t\tvar el = item.element;\n\n\t\t\t\t\tif (!el) {\n\t\t\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\n\t\t\t\t\t\tel.tabIndex = 0;\n\t\t\t\t\t\tel.innerHTML = item.title;\n\n\t\t\t\t\t\tel.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t\tsetCurrentItem(item);\n\t\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tel.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\t\tblurable = false;\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tblurable = true;\n\t\t\t\t\t\t\t}, 10);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\titem.element = el;\n\n\t\t\t\t\t\tif (intialLoad && item.value == initialValue) {\n\t\t\t\t\t\t\tinput.value = item.title;\n\t\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (item === currentItem) {\n\t\t\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t\t\t\tcurrent = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlistEl.appendChild(el);\n\t\t\t\t});\n\n\t\t\t\tif (!current) {\n\t\t\t\t\tsetCurrentItem(false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction chooseItem() {\n\t\t\t\thideList();\n\n\t\t\t\tif (currentItem) {\n\t\t\t\t\tif (initialValue !== currentItem.value) {\n\t\t\t\t\t\tinitialValue = currentItem.value;\n\t\t\t\t\t\tinput.value = currentItem.title;\n\t\t\t\t\t\tsuccess(currentItem.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (editorParams.freetext) {\n\t\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\t\tsuccess(input.value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (editorParams.allowEmpty && input.value === \"\") {\n\t\t\t\t\t\t\tinitialValue = input.value;\n\t\t\t\t\t\t\tsuccess(input.value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcancel();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction showList() {\n\t\t\t\tif (!listEl.parentNode) {\n\t\t\t\t\twhile (listEl.firstChild) {\n\t\t\t\t\t\tlistEl.removeChild(listEl.firstChild);\n\t\t\t\t\t}var offset = Tabulator.prototype.helpers.elOffset(cellEl);\n\n\t\t\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\n\n\t\t\t\t\tlistEl.style.top = offset.top + cellEl.offsetHeight + \"px\";\n\t\t\t\t\tlistEl.style.left = offset.left + \"px\";\n\t\t\t\t\tdocument.body.appendChild(listEl);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction setCurrentItem(item, showInputValue) {\n\t\t\t\tif (currentItem && currentItem.element) {\n\t\t\t\t\tcurrentItem.element.classList.remove(\"active\");\n\t\t\t\t}\n\n\t\t\t\tcurrentItem = item;\n\n\t\t\t\tif (item && item.element) {\n\t\t\t\t\titem.element.classList.add(\"active\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction hideList() {\n\t\t\t\tif (listEl.parentNode) {\n\t\t\t\t\tlistEl.parentNode.removeChild(listEl);\n\t\t\t\t}\n\n\t\t\t\tremoveScrollListener();\n\t\t\t}\n\n\t\t\tfunction cancelItem() {\n\t\t\t\thideList();\n\t\t\t\tcancel();\n\t\t\t}\n\n\t\t\tfunction removeScrollListener() {\n\t\t\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\n\t\t\t}\n\n\t\t\t//allow key based navigation\n\t\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\t\tvar index;\n\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\t//up arrow\n\t\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index) {\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsetCurrentItem(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 40:\n\t\t\t\t\t\t//down arrow\n\n\t\t\t\t\t\tindex = displayItems.indexOf(currentItem);\n\n\t\t\t\t\t\tif (vertNav == \"editor\" || vertNav == \"hybrid\" && index < displayItems.length - 1) {\n\n\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\t\tif (index < displayItems.length - 1) {\n\t\t\t\t\t\t\t\tif (index == -1) {\n\t\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 37: //left arrow\n\t\t\t\t\tcase 39:\n\t\t\t\t\t\t//right arrow\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 13:\n\t\t\t\t\t\t//enter\n\t\t\t\t\t\tchooseItem();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\t//escape\n\t\t\t\t\t\tcancelItem();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 36: //home\n\t\t\t\t\tcase 35:\n\t\t\t\t\t\t//end\n\t\t\t\t\t\t//prevent table navigation while using input element\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"keyup\", function (e) {\n\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 38: //up arrow\n\t\t\t\t\tcase 37: //left arrow\n\t\t\t\t\tcase 39: //up arrow\n\t\t\t\t\tcase 40: //right arrow\n\t\t\t\t\tcase 13: //enter\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\t//escape\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tfilterList(input.value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"search\", function (e) {\n\t\t\t\tfilterList(input.value);\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\t\tif (blurable) {\n\t\t\t\t\tchooseItem();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"focus\", function (e) {\n\t\t\t\tvar value = initialDisplayValue;\n\t\t\t\tshowList();\n\t\t\t\tinput.value = value;\n\t\t\t\tfilterList(value, true);\n\t\t\t});\n\n\t\t\tonRendered(function () {\n\t\t\t\tinput.style.height = \"100%\";\n\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t});\n\n\t\t\tif (editorParams.mask) {\n\t\t\t\tthis.table.modules.edit.maskInput(input, editorParams);\n\t\t\t}\n\n\t\t\treturn input;\n\t\t},\n\n\t\t//start rating\n\t\tstar: function star(cell, onRendered, success, cancel, editorParams) {\n\t\t\tvar self = this,\n\t\t\t element = cell.getElement(),\n\t\t\t value = cell.getValue(),\n\t\t\t maxStars = element.getElementsByTagName(\"svg\").length || 5,\n\t\t\t size = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\n\t\t\t stars = [],\n\t\t\t starsHolder = document.createElement(\"div\"),\n\t\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n\n\t\t\t//change star type\n\t\t\tfunction starChange(val) {\n\t\t\t\tstars.forEach(function (star, i) {\n\t\t\t\t\tif (i < val) {\n\t\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstar.innerHTML = '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (self.table.browser == \"ie\") {\n\t\t\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstar.innerHTML = '';\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t//build stars\n\t\t\tfunction buildStar(i) {\n\n\t\t\t\tvar starHolder = document.createElement(\"span\");\n\t\t\t\tvar nextStar = star.cloneNode(true);\n\n\t\t\t\tstars.push(nextStar);\n\n\t\t\t\tstarHolder.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tstarChange(i);\n\t\t\t\t});\n\n\t\t\t\tstarHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t});\n\n\t\t\t\tstarHolder.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\tsuccess(i);\n\t\t\t\t});\n\n\t\t\t\tstarHolder.appendChild(nextStar);\n\t\t\t\tstarsHolder.appendChild(starHolder);\n\t\t\t}\n\n\t\t\t//handle keyboard navigation value change\n\t\t\tfunction changeValue(val) {\n\t\t\t\tvalue = val;\n\t\t\t\tstarChange(val);\n\t\t\t}\n\n\t\t\t//style cell\n\t\t\telement.style.whiteSpace = \"nowrap\";\n\t\t\telement.style.overflow = \"hidden\";\n\t\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\t\t//style holding element\n\t\t\tstarsHolder.style.verticalAlign = \"middle\";\n\t\t\tstarsHolder.style.display = \"inline-block\";\n\t\t\tstarsHolder.style.padding = \"4px\";\n\n\t\t\t//style star\n\t\t\tstar.setAttribute(\"width\", size);\n\t\t\tstar.setAttribute(\"height\", size);\n\t\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\t\tstar.style.padding = \"0 1px\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//create correct number of stars\n\t\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\t\tbuildStar(i);\n\t\t\t}\n\n\t\t\t//ensure value does not exceed number of stars\n\t\t\tvalue = Math.min(parseInt(value), maxStars);\n\n\t\t\t// set initial styling of stars\n\t\t\tstarChange(value);\n\n\t\t\tstarsHolder.addEventListener(\"mousemove\", function (e) {\n\t\t\t\tstarChange(0);\n\t\t\t});\n\n\t\t\tstarsHolder.addEventListener(\"click\", function (e) {\n\t\t\t\tsuccess(0);\n\t\t\t});\n\n\t\t\telement.addEventListener(\"blur\", function (e) {\n\t\t\t\tcancel();\n\t\t\t});\n\n\t\t\t//allow key based navigation\n\t\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 39:\n\t\t\t\t\t\t//right arrow\n\t\t\t\t\t\tchangeValue(value + 1);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 37:\n\t\t\t\t\t\t//left arrow\n\t\t\t\t\t\tchangeValue(value - 1);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 13:\n\t\t\t\t\t\t//enter\n\t\t\t\t\t\tsuccess(value);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\t//escape\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn starsHolder;\n\t\t},\n\n\t\t//draggable progress bar\n\t\tprogress: function progress(cell, onRendered, success, cancel, editorParams) {\n\t\t\tvar element = cell.getElement(),\n\t\t\t max = typeof editorParams.max === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"max\") || 100 : editorParams.max,\n\t\t\t min = typeof editorParams.min === \"undefined\" ? element.getElementsByTagName(\"div\")[0].getAttribute(\"min\") || 0 : editorParams.min,\n\t\t\t percent = (max - min) / 100,\n\t\t\t value = cell.getValue() || 0,\n\t\t\t handle = document.createElement(\"div\"),\n\t\t\t bar = document.createElement(\"div\"),\n\t\t\t mouseDrag,\n\t\t\t mouseDragWidth;\n\n\t\t\t//set new value\n\t\t\tfunction updateValue() {\n\t\t\t\tvar calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min;\n\t\t\t\tsuccess(calcVal);\n\t\t\t\telement.setAttribute(\"aria-valuenow\", calcVal);\n\t\t\t\telement.setAttribute(\"aria-label\", value);\n\t\t\t}\n\n\t\t\t//style handle\n\t\t\thandle.style.position = \"absolute\";\n\t\t\thandle.style.right = \"0\";\n\t\t\thandle.style.top = \"0\";\n\t\t\thandle.style.bottom = \"0\";\n\t\t\thandle.style.width = \"5px\";\n\t\t\thandle.classList.add(\"tabulator-progress-handle\");\n\n\t\t\t//style bar\n\t\t\tbar.style.display = \"inline-block\";\n\t\t\tbar.style.position = \"relative\";\n\t\t\t// bar.style.top = \"8px\";\n\t\t\t// bar.style.bottom = \"8px\";\n\t\t\t// bar.style.left = \"4px\";\n\t\t\t// bar.style.marginRight = \"4px\";\n\t\t\tbar.style.height = \"100%\";\n\t\t\tbar.style.backgroundColor = \"#488CE9\";\n\t\t\tbar.style.maxWidth = \"100%\";\n\t\t\tbar.style.minWidth = \"0%\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//style cell\n\t\t\telement.style.padding = \"4px 4px\";\n\n\t\t\t//make sure value is in range\n\t\t\tvalue = Math.min(parseFloat(value), max);\n\t\t\tvalue = Math.max(parseFloat(value), min);\n\n\t\t\t//workout percentage\n\t\t\tvalue = Math.round((value - min) / percent);\n\t\t\t// bar.style.right = value + \"%\";\n\t\t\tbar.style.width = value + \"%\";\n\n\t\t\telement.setAttribute(\"aria-valuemin\", min);\n\t\t\telement.setAttribute(\"aria-valuemax\", max);\n\n\t\t\tbar.appendChild(handle);\n\n\t\t\thandle.addEventListener(\"mousedown\", function (e) {\n\t\t\t\tmouseDrag = e.screenX;\n\t\t\t\tmouseDragWidth = bar.offsetWidth;\n\t\t\t});\n\n\t\t\thandle.addEventListener(\"mouseover\", function () {\n\t\t\t\thandle.style.cursor = \"ew-resize\";\n\t\t\t});\n\n\t\t\telement.addEventListener(\"mousemove\", function (e) {\n\t\t\t\tif (mouseDrag) {\n\t\t\t\t\tbar.style.width = mouseDragWidth + e.screenX - mouseDrag + \"px\";\n\t\t\t\t}\n\t\t\t});\n\n\t\t\telement.addEventListener(\"mouseup\", function (e) {\n\t\t\t\tif (mouseDrag) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.stopImmediatePropagation();\n\n\t\t\t\t\tmouseDrag = false;\n\t\t\t\t\tmouseDragWidth = false;\n\n\t\t\t\t\tupdateValue();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t//allow key based navigation\n\t\t\telement.addEventListener(\"keydown\", function (e) {\n\t\t\t\tswitch (e.keyCode) {\n\t\t\t\t\tcase 39:\n\t\t\t\t\t\t//right arrow\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tbar.style.width = bar.clientWidth + element.clientWidth / 100 + \"px\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 37:\n\t\t\t\t\t\t//left arrow\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tbar.style.width = bar.clientWidth - element.clientWidth / 100 + \"px\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 9: //tab\n\t\t\t\t\tcase 13:\n\t\t\t\t\t\t//enter\n\t\t\t\t\t\tupdateValue();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 27:\n\t\t\t\t\t\t//escape\n\t\t\t\t\t\tcancel();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t\telement.addEventListener(\"blur\", function () {\n\t\t\t\tcancel();\n\t\t\t});\n\n\t\t\treturn bar;\n\t\t},\n\n\t\t//checkbox\n\t\ttickCross: function tickCross(cell, onRendered, success, cancel, editorParams) {\n\t\t\tvar value = cell.getValue(),\n\t\t\t input = document.createElement(\"input\"),\n\t\t\t tristate = editorParams.tristate,\n\t\t\t indetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\n\t\t\t indetermState = false;\n\n\t\t\tinput.setAttribute(\"type\", \"checkbox\");\n\t\t\tinput.style.marginTop = \"5px\";\n\t\t\tinput.style.boxSizing = \"border-box\";\n\n\t\t\tif (editorParams.elementAttributes && _typeof(editorParams.elementAttributes) == \"object\") {\n\t\t\t\tfor (var key in editorParams.elementAttributes) {\n\t\t\t\t\tif (key.charAt(0) == \"+\") {\n\t\t\t\t\t\tkey = key.slice(1);\n\t\t\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinput.value = value;\n\n\t\t\tif (tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")) {\n\t\t\t\tindetermState = true;\n\t\t\t\tinput.indeterminate = true;\n\t\t\t}\n\n\t\t\tif (this.table.browser != \"firefox\") {\n\t\t\t\t//prevent blur issue on mac firefox\n\t\t\t\tonRendered(function () {\n\t\t\t\t\tinput.focus({ preventScroll: true });\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\n\n\t\t\tfunction setValue(blur) {\n\t\t\t\tif (tristate) {\n\t\t\t\t\tif (!blur) {\n\t\t\t\t\t\tif (input.checked && !indetermState) {\n\t\t\t\t\t\t\tinput.checked = false;\n\t\t\t\t\t\t\tinput.indeterminate = true;\n\t\t\t\t\t\t\tindetermState = true;\n\t\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindetermState = false;\n\t\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (indetermState) {\n\t\t\t\t\t\t\treturn indetermValue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn input.checked;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn input.checked;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//submit new value on blur\n\t\t\tinput.addEventListener(\"change\", function (e) {\n\t\t\t\tsuccess(setValue());\n\t\t\t});\n\n\t\t\tinput.addEventListener(\"blur\", function (e) {\n\t\t\t\tsuccess(setValue(true));\n\t\t\t});\n\n\t\t\t//submit new value on enter\n\t\t\tinput.addEventListener(\"keydown\", function (e) {\n\t\t\t\tif (e.keyCode == 13) {\n\t\t\t\t\tsuccess(setValue());\n\t\t\t\t}\n\t\t\t\tif (e.keyCode == 27) {\n\t\t\t\t\tcancel();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn input;\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"edit\", Edit);\n\n\tvar Export = function Export(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.config = {};\n\t\tthis.cloneTableStyle = true;\n\t\tthis.colVisProp = \"\";\n\t};\n\n\tExport.prototype.genereateTable = function (config, style, range, colVisProp) {\n\t\tthis.cloneTableStyle = style;\n\t\tthis.config = config || {};\n\t\tthis.colVisProp = colVisProp;\n\n\t\tvar table = document.createElement(\"table\");\n\t\ttable.classList.add(\"tabulator-print-table\");\n\n\t\tif (this.config.columnHeaders !== false) {\n\t\t\ttable.appendChild(this.generateHeaderElements());\n\t\t}\n\n\t\ttable.appendChild(this.generateBodyElements(this.rowLookup(range)));\n\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\n\n\t\treturn table;\n\t};\n\n\tExport.prototype.rowLookup = function (range) {\n\t\tvar _this44 = this;\n\n\t\tvar rows = [];\n\n\t\tif (typeof range == \"function\") {\n\t\t\trange.call(this.table).forEach(function (row) {\n\t\t\t\trow = _this44.table.rowManager.findRow(row);\n\n\t\t\t\tif (row) {\n\t\t\t\t\trows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tswitch (range) {\n\t\t\t\tcase true:\n\t\t\t\tcase \"visible\":\n\t\t\t\t\trows = this.table.rowManager.getVisibleRows(true);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"all\":\n\t\t\t\t\trows = this.table.rowManager.rows;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"selected\":\n\t\t\t\t\trows = this.modules.selectRow.selectedRows;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"active\":\n\t\t\t\tdefault:\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\n\t\t\t}\n\t\t}\n\n\t\treturn Object.assign([], rows);\n\t};\n\n\tExport.prototype.generateColumnGroupHeaders = function () {\n\t\tvar _this45 = this;\n\n\t\tvar output = [];\n\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\n\n\t\tcolumns.forEach(function (column) {\n\t\t\tvar colData = _this45.processColumnGroup(column);\n\n\t\t\tif (colData) {\n\t\t\t\toutput.push(colData);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tExport.prototype.processColumnGroup = function (column) {\n\t\tvar _this46 = this;\n\n\t\tvar subGroups = column.columns,\n\t\t maxDepth = 0;\n\n\t\tvar groupData = {\n\t\t\ttitle: column.definition.title,\n\t\t\tcolumn: column,\n\t\t\tdepth: 1\n\t\t};\n\n\t\tif (subGroups.length) {\n\t\t\tgroupData.subGroups = [];\n\t\t\tgroupData.width = 0;\n\n\t\t\tsubGroups.forEach(function (subGroup) {\n\t\t\t\tvar subGroupData = _this46.processColumnGroup(subGroup);\n\n\t\t\t\tif (subGroupData) {\n\t\t\t\t\tgroupData.width += subGroupData.width;\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\n\n\t\t\t\t\tif (subGroupData.depth > maxDepth) {\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tgroupData.depth += maxDepth;\n\n\t\t\tif (!groupData.width) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.columnVisCheck(column)) {\n\t\t\t\tgroupData.width = 1;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn groupData;\n\t};\n\n\tExport.prototype.groupHeadersToRows = function (columns) {\n\n\t\tvar headers = [],\n\t\t headerDepth = 0;\n\n\t\tfunction parseColumnGroup(column, level) {\n\n\t\t\tvar depth = headerDepth - level;\n\n\t\t\tif (typeof headers[level] === \"undefined\") {\n\t\t\t\theaders[level] = [];\n\t\t\t}\n\n\t\t\tcolumn.height = column.subGroups ? 1 : depth - column.depth + 1;\n\n\t\t\theaders[level].push(column);\n\n\t\t\tif (column.subGroups) {\n\t\t\t\tcolumn.subGroups.forEach(function (subGroup) {\n\t\t\t\t\tparseColumnGroup(subGroup, level + 1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t//calculate maximum header debth\n\t\tcolumns.forEach(function (column) {\n\t\t\tif (column.depth > headerDepth) {\n\t\t\t\theaderDepth = column.depth;\n\t\t\t}\n\t\t});\n\n\t\tcolumns.forEach(function (column) {\n\t\t\tparseColumnGroup(column, 0);\n\t\t});\n\n\t\treturn headers;\n\t};\n\n\tExport.prototype.generateHeaderElements = function () {\n\t\tvar _this47 = this;\n\n\t\tvar headerEl = document.createElement(\"thead\");\n\n\t\tvar rows = this.groupHeadersToRows(this.generateColumnGroupHeaders());\n\n\t\trows.forEach(function (row) {\n\t\t\tvar rowEl = document.createElement(\"tr\");\n\n\t\t\t_this47.mapElementStyles(_this47.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\t\t\trow.forEach(function (column) {\n\t\t\t\tvar cellEl = document.createElement(\"th\");\n\t\t\t\tvar classNames = column.column.definition.cssClass ? column.column.definition.cssClass.split(\" \") : [];\n\n\t\t\t\tcellEl.colSpan = column.width;\n\t\t\t\tcellEl.rowSpan = column.height;\n\n\t\t\t\tcellEl.innerHTML = column.column.definition.title;\n\n\t\t\t\tif (_this47.cloneTableStyle) {\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\n\t\t\t\t}\n\n\t\t\t\tclassNames.forEach(function (className) {\n\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t});\n\n\t\t\t\t_this47.mapElementStyles(column.column.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\t\t\t\t_this47.mapElementStyles(column.column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\n\t\t\t\tif (column.column.visible) {\n\t\t\t\t\t_this47.mapElementStyles(column.column.getElement(), cellEl, [\"width\"]);\n\t\t\t\t} else {\n\t\t\t\t\tif (column.column.definition.width) {\n\t\t\t\t\t\tcellEl.style.width = column.column.definition.width + \"px\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (column.column.parent) {\n\t\t\t\t\t_this47.mapElementStyles(column.column.parent.groupElement, cellEl, [\"border-top\"]);\n\t\t\t\t}\n\n\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t});\n\n\t\t\theaderEl.appendChild(rowEl);\n\t\t});\n\n\t\treturn headerEl;\n\t};\n\n\tExport.prototype.generateBodyElements = function (rows) {};\n\n\tExport.prototype.generateBodyElements = function (rows) {\n\t\tvar _this48 = this;\n\n\t\tvar oddRow, evenRow, calcRow, firstRow, firstCell, firstGroup, lastCell, styleCells, styleRow, treeElementField, rowFormatter;\n\n\t\t//assign row formatter\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\n\t\trowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\n\n\t\t//lookup row styles\n\t\tif (this.cloneTableStyle && window.getComputedStyle) {\n\t\t\toddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tevenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tcalcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\n\t\t\tfirstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\n\t\t\tfirstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\n\n\t\t\tif (firstRow) {\n\t\t\t\tstyleCells = firstRow.getElementsByClassName(\"tabulator-cell\");\n\t\t\t\tfirstCell = styleCells[0];\n\t\t\t\tlastCell = styleCells[styleCells.length - 1];\n\t\t\t}\n\t\t}\n\n\t\tvar bodyEl = document.createElement(\"tbody\");\n\n\t\tvar columns = [];\n\n\t\tif (this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")) {\n\t\t\tif (this.table.modules.columnCalcs.topInitialized) {\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\n\t\t\tif (this.table.modules.columnCalcs.botInitialized) {\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\n\t\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\t\tif (_this48.columnVisCheck(column)) {\n\t\t\t\tcolumns.push(column);\n\t\t\t}\n\t\t});\n\n\t\tif (this.table.options.dataTree && this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")) {\n\t\t\ttreeElementField = this.table.modules.dataTree.elementField;\n\t\t}\n\n\t\trows = rows.filter(function (row) {\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn _this48.config.rowGroups !== false;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\treturn _this48.config.columnCalcs !== false;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t});\n\n\t\tif (rows.length > 1000) {\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\n\t\t}\n\n\t\trows.forEach(function (row, i) {\n\t\t\tvar rowData = row.getData(_this48.colVisProp);\n\n\t\t\tvar rowEl = document.createElement(\"tr\");\n\t\t\trowEl.classList.add(\"tabulator-print-table-row\");\n\n\t\t\tswitch (row.type) {\n\t\t\t\tcase \"group\":\n\t\t\t\t\tvar cellEl = document.createElement(\"td\");\n\t\t\t\t\tcellEl.colSpan = columns.length;\n\t\t\t\t\tcellEl.innerHTML = row.key;\n\n\t\t\t\t\trowEl.classList.add(\"tabulator-print-table-group\");\n\n\t\t\t\t\t_this48.mapElementStyles(firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\t\t\t\t\t_this48.mapElementStyles(firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\n\t\t\t\t\trowEl.appendChild(cellEl);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"calc\":\n\t\t\t\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\n\n\t\t\t\tcase \"row\":\n\n\t\t\t\t\tif (_this48.table.options.dataTree && _this48.config.dataTree === false && row.modules.dataTree.parent) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcolumns.forEach(function (column, i) {\n\t\t\t\t\t\tvar cellEl = document.createElement(\"td\");\n\n\t\t\t\t\t\tvar value = column.getFieldValue(rowData);\n\n\t\t\t\t\t\tvar cellWrapper = {\n\t\t\t\t\t\t\tmodules: {},\n\t\t\t\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetField: function getField() {\n\t\t\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\t\t\t\treturn cellEl;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetData: function getData() {\n\t\t\t\t\t\t\t\treturn rowData;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tgetComponent: function getComponent() {\n\t\t\t\t\t\t\t\treturn cellWrapper;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcolumn: column\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\n\n\t\t\t\t\t\tclassNames.forEach(function (className) {\n\t\t\t\t\t\t\tcellEl.classList.add(className);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (_this48.table.modExists(\"format\") && _this48.config.formatCells !== false) {\n\t\t\t\t\t\t\tvalue = _this48.table.modules.format.formatExportValue(cellWrapper, _this48.colVisProp);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\t\t\t\t\tcase \"object\":\n\t\t\t\t\t\t\t\t\tvalue = JSON.stringify(value);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\t\t\tcase \"null\":\n\t\t\t\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tvalue = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (value instanceof Node) {\n\t\t\t\t\t\t\tcellEl.appendChild(value);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcellEl.innerHTML = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (firstCell) {\n\t\t\t\t\t\t\t_this48.mapElementStyles(firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\n\n\t\t\t\t\t\t\tif (column.definition.align) {\n\t\t\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (_this48.table.options.dataTree && _this48.config.dataTree !== false) {\n\t\t\t\t\t\t\tif (treeElementField && treeElementField == column.field || !treeElementField && i == 0) {\n\t\t\t\t\t\t\t\tif (row.modules.dataTree.controlEl) {\n\t\t\t\t\t\t\t\t\tcellEl.insertBefore(row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (row.modules.dataTree.branchEl) {\n\t\t\t\t\t\t\t\t\tcellEl.insertBefore(row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trowEl.appendChild(cellEl);\n\n\t\t\t\t\t\tif (cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback) {\n\t\t\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tstyleRow = row.type == \"calc\" ? calcRow : i % 2 && evenRow ? evenRow : oddRow;\n\n\t\t\t\t\t_this48.mapElementStyles(styleRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\n\n\t\t\t\t\tif (rowFormatter && _this48.config.formatCells !== false) {\n\t\t\t\t\t\tvar rowComponent = row.getComponent();\n\n\t\t\t\t\t\trowComponent.getElement = function () {\n\t\t\t\t\t\t\treturn rowEl;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\trowFormatter(rowComponent);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbodyEl.appendChild(rowEl);\n\t\t});\n\n\t\treturn bodyEl;\n\t};\n\n\tExport.prototype.columnVisCheck = function (column) {\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || !column.visible && column.definition[this.colVisProp]);\n\t};\n\n\tExport.prototype.getHtml = function (visible, style, config, colVisProp) {\n\t\tvar holder = document.createElement(\"div\");\n\n\t\tholder.appendChild(this.genereateTable(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\"));\n\n\t\treturn holder.innerHTML;\n\t};\n\n\tExport.prototype.mapElementStyles = function (from, to, props) {\n\t\tif (this.cloneTableStyle && from && to) {\n\n\t\t\tvar lookup = {\n\t\t\t\t\"background-color\": \"backgroundColor\",\n\t\t\t\t\"color\": \"fontColor\",\n\t\t\t\t\"width\": \"width\",\n\t\t\t\t\"font-weight\": \"fontWeight\",\n\t\t\t\t\"font-family\": \"fontFamily\",\n\t\t\t\t\"font-size\": \"fontSize\",\n\t\t\t\t\"text-align\": \"textAlign\",\n\t\t\t\t\"border-top\": \"borderTop\",\n\t\t\t\t\"border-left\": \"borderLeft\",\n\t\t\t\t\"border-right\": \"borderRight\",\n\t\t\t\t\"border-bottom\": \"borderBottom\",\n\t\t\t\t\"padding-top\": \"paddingTop\",\n\t\t\t\t\"padding-left\": \"paddingLeft\",\n\t\t\t\t\"padding-right\": \"paddingRight\",\n\t\t\t\t\"padding-bottom\": \"paddingBottom\"\n\t\t\t};\n\n\t\t\tif (window.getComputedStyle) {\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\n\n\t\t\t\tprops.forEach(function (prop) {\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"export\", Export);\n\n\tvar Filter = function Filter(table) {\n\n\t\tthis.table = table; //hold Tabulator object\n\n\t\tthis.filterList = []; //hold filter list\n\t\tthis.headerFilters = {}; //hold column filters\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\n\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.changed = false; //has filtering changed since last render\n\t};\n\n\t//initialize column header filter\n\tFilter.prototype.initializeColumn = function (column, value) {\n\t\tvar self = this,\n\t\t field = column.getField(),\n\t\t params;\n\n\t\t//handle successfull value change\n\t\tfunction success(value) {\n\t\t\tvar filterType = column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\" || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\n\t\t\t type = \"\",\n\t\t\t filterChangeCheck = \"\",\n\t\t\t filterFunc;\n\n\t\t\tif (typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value) {\n\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\n\n\t\t\t\tif (!column.modules.filter.emptyFunc(value)) {\n\t\t\t\t\tcolumn.modules.filter.value = value;\n\n\t\t\t\t\tswitch (_typeof(column.definition.headerFilterFunc)) {\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tif (self.filters[column.definition.headerFilterFunc]) {\n\t\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\n\t\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\t\treturn self.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\n\n\t\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\ttype = filterFunc;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!filterFunc) {\n\t\t\t\t\t\tswitch (filterType) {\n\t\t\t\t\t\t\tcase \"partial\":\n\t\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\n\n\t\t\t\t\t\t\t\t\tif (typeof colVal !== 'undefined' && colVal !== null) {\n\t\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"like\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttype = \"=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tself.headerFilters[field] = { value: value, func: filterFunc, type: type };\n\t\t\t\t} else {\n\t\t\t\t\tdelete self.headerFilters[field];\n\t\t\t\t}\n\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\n\n\t\t\t\tif (self.prevHeaderFilterChangeCheck !== filterChangeCheck) {\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\n\n\t\t\t\t\tself.changed = true;\n\t\t\t\t\tself.table.rowManager.filterRefresh();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tcolumn.modules.filter = {\n\t\t\tsuccess: success,\n\t\t\tattrType: false,\n\t\t\ttagType: false,\n\t\t\temptyFunc: false\n\t\t};\n\n\t\tthis.generateHeaderFilterElement(column);\n\t};\n\n\tFilter.prototype.generateHeaderFilterElement = function (column, initialValue, reinitialize) {\n\t\tvar _this49 = this;\n\n\t\tvar self = this,\n\t\t success = column.modules.filter.success,\n\t\t field = column.getField(),\n\t\t filterElement,\n\t\t editor,\n\t\t editorElement,\n\t\t cellWrapper,\n\t\t typingTimer,\n\t\t searchTrigger,\n\t\t params;\n\n\t\t//handle aborted edit\n\t\tfunction cancel() {}\n\n\t\tif (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) {\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\n\t\t}\n\n\t\tif (field) {\n\n\t\t\t//set empty value function\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) {\n\t\t\t\treturn !value && value !== \"0\";\n\t\t\t};\n\n\t\t\tfilterElement = document.createElement(\"div\");\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\n\n\t\t\t//set column editor\n\t\t\tswitch (_typeof(column.definition.headerFilter)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tif (self.table.modules.edit.editors[column.definition.headerFilter]) {\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\n\n\t\t\t\t\t\tif ((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\teditor = column.definition.headerFilter;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tif (column.modules.edit && column.modules.edit.editor) {\n\t\t\t\t\t\teditor = column.modules.edit.editor;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) {\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\n\n\t\t\t\t\t\t\tif ((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck) {\n\t\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function (value) {\n\t\t\t\t\t\t\t\t\treturn value !== true && value !== false;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (editor) {\n\n\t\t\t\tcellWrapper = {\n\t\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\n\t\t\t\t\t},\n\t\t\t\t\tgetField: function getField() {\n\t\t\t\t\t\treturn column.definition.field;\n\t\t\t\t\t},\n\t\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\t\treturn filterElement;\n\t\t\t\t\t},\n\t\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t},\n\t\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnormalizeHeight: function normalizeHeight() {}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tparams = column.definition.headerFilterParams || {};\n\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table) : params;\n\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params);\n\n\t\t\t\tif (!editorElement) {\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!(editorElement instanceof Node)) {\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t//set Placeholder Text\n\t\t\t\tif (field) {\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|columns|\" + column.definition.field, function (value) {\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.table.modules.localize.getText(\"headerFilters|default\"));\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tself.table.modules.localize.bind(\"headerFilters|default\", function (value) {\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof self.column.definition.headerFilterPlaceholder !== \"undefined\" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t//focus on element on click\n\t\t\t\teditorElement.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\teditorElement.focus();\n\t\t\t\t});\n\n\t\t\t\teditorElement.addEventListener(\"focus\", function (e) {\n\t\t\t\t\tvar left = _this49.table.columnManager.element.scrollLeft;\n\n\t\t\t\t\tif (left !== _this49.table.rowManager.element.scrollLeft) {\n\t\t\t\t\t\t_this49.table.rowManager.scrollHorizontal(left);\n\t\t\t\t\t\t_this49.table.columnManager.scrollHorizontal(left);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t//live update filters as user types\n\t\t\t\ttypingTimer = false;\n\n\t\t\t\tsearchTrigger = function searchTrigger(e) {\n\t\t\t\t\tif (typingTimer) {\n\t\t\t\t\t\tclearTimeout(typingTimer);\n\t\t\t\t\t}\n\n\t\t\t\t\ttypingTimer = setTimeout(function () {\n\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t}, self.table.options.headerFilterLiveFilterDelay);\n\t\t\t\t};\n\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\";\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\n\n\t\t\t\tif (column.definition.headerFilterLiveFilter !== false) {\n\n\t\t\t\t\tif (!(column.definition.headerFilter === 'autocomplete' || column.definition.headerFilter === 'tickCross' || (column.definition.editor === 'autocomplete' || column.definition.editor === 'tickCross') && column.definition.headerFilter === true)) {\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\n\t\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\n\n\t\t\t\t\t\t//update number filtered columns on change\n\t\t\t\t\t\tif (column.modules.filter.attrType == \"number\") {\n\t\t\t\t\t\t\teditorElement.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\t\t\tsuccess(editorElement.value);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\n\t\t\t\t\t\tif (column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\") {\n\t\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\n\t\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\n\t\t\t\t\tif (column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\") {\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfilterElement.appendChild(editorElement);\n\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\n\n\t\t\t\tif (!reinitialize) {\n\t\t\t\t\tself.headerFilterColumns.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\n\t\t}\n\t};\n\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\tFilter.prototype.hideHeaderFilterElements = function () {\n\t\tthis.headerFilterColumns.forEach(function (column) {\n\t\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\n\t\t\t}\n\t\t});\n\t};\n\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\n\tFilter.prototype.showHeaderFilterElements = function () {\n\t\tthis.headerFilterColumns.forEach(function (column) {\n\t\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\n\t\t\t}\n\t\t});\n\t};\n\n\t//programatically set focus of header filter\n\tFilter.prototype.setHeaderFilterFocus = function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\tcolumn.modules.filter.headerElement.focus();\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\n\t\t}\n\t};\n\n\t//programmatically get value of header filter\n\tFilter.prototype.getHeaderFilterValue = function (column) {\n\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\treturn column.modules.filter.headerElement.value;\n\t\t} else {\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t}\n\t};\n\n\t//programatically set value of header filter\n\tFilter.prototype.setHeaderFilterValue = function (column, value) {\n\t\tif (column) {\n\t\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\n\t\t\t\tcolumn.modules.filter.success(value);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t};\n\n\tFilter.prototype.reloadHeaderFilter = function (column) {\n\t\tif (column) {\n\t\t\tif (column.modules.filter && column.modules.filter.headerElement) {\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\n\t\t\t}\n\t\t}\n\t};\n\n\t//check if the filters has changed since last use\n\tFilter.prototype.hasChanged = function () {\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t};\n\n\t//set standard filters\n\tFilter.prototype.setFilter = function (field, type, value) {\n\t\tvar self = this;\n\n\t\tself.filterList = [];\n\n\t\tif (!Array.isArray(field)) {\n\t\t\tfield = [{ field: field, type: type, value: value }];\n\t\t}\n\n\t\tself.addFilter(field);\n\t};\n\n\t//add filter to array\n\tFilter.prototype.addFilter = function (field, type, value) {\n\t\tvar self = this;\n\n\t\tif (!Array.isArray(field)) {\n\t\t\tfield = [{ field: field, type: type, value: value }];\n\t\t}\n\n\t\tfield.forEach(function (filter) {\n\n\t\t\tfilter = self.findFilter(filter);\n\n\t\t\tif (filter) {\n\t\t\t\tself.filterList.push(filter);\n\n\t\t\t\tself.changed = true;\n\t\t\t}\n\t\t});\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\t\tthis.table.modules.persistence.save(\"filter\");\n\t\t}\n\t};\n\n\tFilter.prototype.findFilter = function (filter) {\n\t\tvar self = this,\n\t\t column;\n\n\t\tif (Array.isArray(filter)) {\n\t\t\treturn this.findSubFilters(filter);\n\t\t}\n\n\t\tvar filterFunc = false;\n\n\t\tif (typeof filter.field == \"function\") {\n\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\treturn filter.field(data, filter.type || {}); // pass params to custom filter function\n\t\t\t};\n\t\t} else {\n\n\t\t\tif (self.filters[filter.type]) {\n\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(filter.field);\n\n\t\t\t\tif (column) {\n\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\treturn self.filters[filter.type](filter.value, column.getFieldValue(data));\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tfilterFunc = function filterFunc(data) {\n\t\t\t\t\t\treturn self.filters[filter.type](filter.value, data[filter.field]);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t}\n\n\t\tfilter.func = filterFunc;\n\n\t\treturn filter.func ? filter : false;\n\t};\n\n\tFilter.prototype.findSubFilters = function (filters) {\n\t\tvar self = this,\n\t\t output = [];\n\n\t\tfilters.forEach(function (filter) {\n\t\t\tfilter = self.findFilter(filter);\n\n\t\t\tif (filter) {\n\t\t\t\toutput.push(filter);\n\t\t\t}\n\t\t});\n\n\t\treturn output.length ? output : false;\n\t};\n\n\t//get all filters\n\tFilter.prototype.getFilters = function (all, ajax) {\n\t\tvar output = [];\n\n\t\tif (all) {\n\t\t\toutput = this.getHeaderFilters();\n\t\t}\n\n\t\tif (ajax) {\n\t\t\toutput.forEach(function (item) {\n\t\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\t\titem.type = \"function\";\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\n\n\t\treturn output;\n\t};\n\n\t//filter to Object\n\tFilter.prototype.filtersToArray = function (filterList, ajax) {\n\t\tvar _this50 = this;\n\n\t\tvar output = [];\n\n\t\tfilterList.forEach(function (filter) {\n\t\t\tvar item;\n\n\t\t\tif (Array.isArray(filter)) {\n\t\t\t\toutput.push(_this50.filtersToArray(filter, ajax));\n\t\t\t} else {\n\t\t\t\titem = { field: filter.field, type: filter.type, value: filter.value };\n\n\t\t\t\tif (ajax) {\n\t\t\t\t\tif (typeof item.type == \"function\") {\n\t\t\t\t\t\titem.type = \"function\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\toutput.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\t//get all filters\n\tFilter.prototype.getHeaderFilters = function () {\n\t\tvar self = this,\n\t\t output = [];\n\n\t\tfor (var key in this.headerFilters) {\n\t\t\toutput.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value });\n\t\t}\n\n\t\treturn output;\n\t};\n\n\t//remove filter from array\n\tFilter.prototype.removeFilter = function (field, type, value) {\n\t\tvar self = this;\n\n\t\tif (!Array.isArray(field)) {\n\t\t\tfield = [{ field: field, type: type, value: value }];\n\t\t}\n\n\t\tfield.forEach(function (filter) {\n\t\t\tvar index = -1;\n\n\t\t\tif (_typeof(filter.field) == \"object\") {\n\t\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\t\treturn filter === element;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tindex = self.filterList.findIndex(function (element) {\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (index > -1) {\n\t\t\t\tself.filterList.splice(index, 1);\n\t\t\t\tself.changed = true;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\n\t\t\t}\n\t\t});\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\t\tthis.table.modules.persistence.save(\"filter\");\n\t\t}\n\t};\n\n\t//clear filters\n\tFilter.prototype.clearFilter = function (all) {\n\t\tthis.filterList = [];\n\n\t\tif (all) {\n\t\t\tthis.clearHeaderFilter();\n\t\t}\n\n\t\tthis.changed = true;\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.filter) {\n\t\t\tthis.table.modules.persistence.save(\"filter\");\n\t\t}\n\t};\n\n\t//clear header filters\n\tFilter.prototype.clearHeaderFilter = function () {\n\t\tvar self = this;\n\n\t\tthis.headerFilters = {};\n\t\tself.prevHeaderFilterChangeCheck = \"{}\";\n\n\t\tthis.headerFilterColumns.forEach(function (column) {\n\t\t\tcolumn.modules.filter.value = null;\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\n\t\t\tself.reloadHeaderFilter(column);\n\t\t});\n\n\t\tthis.changed = true;\n\t};\n\n\t//search data and return matching rows\n\tFilter.prototype.search = function (searchType, field, type, value) {\n\t\tvar self = this,\n\t\t activeRows = [],\n\t\t filterList = [];\n\n\t\tif (!Array.isArray(field)) {\n\t\t\tfield = [{ field: field, type: type, value: value }];\n\t\t}\n\n\t\tfield.forEach(function (filter) {\n\t\t\tfilter = self.findFilter(filter);\n\n\t\t\tif (filter) {\n\t\t\t\tfilterList.push(filter);\n\t\t\t}\n\t\t});\n\n\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\tvar match = true;\n\n\t\t\tfilterList.forEach(function (filter) {\n\t\t\t\tif (!self.filterRecurse(filter, row.getData())) {\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (match) {\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\n\t\t\t}\n\t\t});\n\n\t\treturn activeRows;\n\t};\n\n\t//filter row array\n\tFilter.prototype.filter = function (rowList, filters) {\n\t\tvar self = this,\n\t\t activeRows = [],\n\t\t activeRowComponents = [];\n\n\t\tif (self.table.options.dataFiltering) {\n\t\t\tself.table.options.dataFiltering.call(self.table, self.getFilters());\n\t\t}\n\n\t\tif (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) {\n\n\t\t\trowList.forEach(function (row) {\n\t\t\t\tif (self.filterRow(row)) {\n\t\t\t\t\tactiveRows.push(row);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tactiveRows = rowList.slice(0);\n\t\t}\n\n\t\tif (self.table.options.dataFiltered) {\n\n\t\t\tactiveRows.forEach(function (row) {\n\t\t\t\tactiveRowComponents.push(row.getComponent());\n\t\t\t});\n\n\t\t\tself.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents);\n\t\t}\n\n\t\treturn activeRows;\n\t};\n\n\t//filter individual row\n\tFilter.prototype.filterRow = function (row, filters) {\n\t\tvar self = this,\n\t\t match = true,\n\t\t data = row.getData();\n\n\t\tself.filterList.forEach(function (filter) {\n\t\t\tif (!self.filterRecurse(filter, data)) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t});\n\n\t\tfor (var field in self.headerFilters) {\n\t\t\tif (!self.headerFilters[field].func(data)) {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t}\n\n\t\treturn match;\n\t};\n\n\tFilter.prototype.filterRecurse = function (filter, data) {\n\t\tvar self = this,\n\t\t match = false;\n\n\t\tif (Array.isArray(filter)) {\n\t\t\tfilter.forEach(function (subFilter) {\n\t\t\t\tif (self.filterRecurse(subFilter, data)) {\n\t\t\t\t\tmatch = true;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tmatch = filter.func(data);\n\t\t}\n\n\t\treturn match;\n\t};\n\n\t//list of available filters\n\tFilter.prototype.filters = {\n\n\t\t//equal to\n\t\t\"=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\t\treturn rowVal == filterVal ? true : false;\n\t\t},\n\n\t\t//less than\n\t\t\"<\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\t\treturn rowVal < filterVal ? true : false;\n\t\t},\n\n\t\t//less than or equal to\n\t\t\"<=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\t\treturn rowVal <= filterVal ? true : false;\n\t\t},\n\n\t\t//greater than\n\t\t\">\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\t\treturn rowVal > filterVal ? true : false;\n\t\t},\n\n\t\t//greater than or equal to\n\t\t\">=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\t\treturn rowVal >= filterVal ? true : false;\n\t\t},\n\n\t\t//not equal to\n\t\t\"!=\": function _(filterVal, rowVal, rowData, filterParams) {\n\t\t\treturn rowVal != filterVal ? true : false;\n\t\t},\n\n\t\t\"regex\": function regex(filterVal, rowVal, rowData, filterParams) {\n\n\t\t\tif (typeof filterVal == \"string\") {\n\t\t\t\tfilterVal = new RegExp(filterVal);\n\t\t\t}\n\n\t\t\treturn filterVal.test(rowVal);\n\t\t},\n\n\t\t//contains the string\n\t\t\"like\": function like(filterVal, rowVal, rowData, filterParams) {\n\t\t\tif (filterVal === null || typeof filterVal === \"undefined\") {\n\t\t\t\treturn rowVal === filterVal ? true : false;\n\t\t\t} else {\n\t\t\t\tif (typeof rowVal !== 'undefined' && rowVal !== null) {\n\t\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t//in array\n\t\t\"in\": function _in(filterVal, rowVal, rowData, filterParams) {\n\t\t\tif (Array.isArray(filterVal)) {\n\t\t\t\treturn filterVal.indexOf(rowVal) > -1;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"filter\", Filter);\n\n\tvar Format = function Format(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t};\n\n\t//initialize column formatter\n\tFormat.prototype.initializeColumn = function (column) {\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\n\n\t\tif (typeof column.definition.formatterPrint !== \"undefined\") {\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\n\t\t}\n\n\t\tif (typeof column.definition.formatterClipboard !== \"undefined\") {\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\n\t\t}\n\n\t\tif (typeof column.definition.formatterHtmlOutput !== \"undefined\") {\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\n\t\t}\n\t};\n\n\tFormat.prototype.lookupFormatter = function (column, type) {\n\t\tvar config = { params: column.definition[\"formatter\" + type + \"Params\"] || {} },\n\t\t formatter = column.definition[\"formatter\" + type];\n\n\t\t//set column formatter\n\t\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\t\tcase \"string\":\n\n\t\t\t\tif (formatter === \"tick\") {\n\t\t\t\t\tformatter = \"tickCross\";\n\n\t\t\t\t\tif (typeof config.params.crossElement == \"undefined\") {\n\t\t\t\t\t\tconfig.params.crossElement = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.warn(\"DEPRECATION WARNING - the tick formatter has been deprecated, please use the tickCross formatter with the crossElement param set to false\");\n\t\t\t\t}\n\n\t\t\t\tif (this.formatters[formatter]) {\n\t\t\t\t\tconfig.formatter = this.formatters[formatter];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tconfig.formatter = formatter;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconfig.formatter = this.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn config;\n\t};\n\n\tFormat.prototype.cellRendered = function (cell) {\n\t\tif (cell.modules.format && cell.modules.format.renderedCallback) {\n\t\t\tcell.modules.format.renderedCallback();\n\t\t}\n\t};\n\n\t//return a formatted value for a cell\n\tFormat.prototype.formatValue = function (cell) {\n\t\tvar component = cell.getComponent(),\n\t\t params = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\n\n\t\tfunction onRendered(callback) {\n\t\t\tif (!cell.modules.format) {\n\t\t\t\tcell.modules.format = {};\n\t\t\t}\n\n\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t}\n\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\n\t};\n\n\tFormat.prototype.formatExportValue = function (cell, type) {\n\t\tvar formatter = cell.column.modules.format[type],\n\t\t params;\n\n\t\tif (formatter) {\n\t\t\tvar onRendered = function onRendered(callback) {\n\t\t\t\tif (!cell.modules.format) {\n\t\t\t\t\tcell.modules.format = {};\n\t\t\t\t}\n\n\t\t\t\tcell.modules.format.renderedCallback = callback;\n\t\t\t};\n\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\n\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\n\t\t} else {\n\t\t\treturn this.formatValue(cell);\n\t\t}\n\t};\n\n\tFormat.prototype.sanitizeHTML = function (value) {\n\t\tif (value) {\n\t\t\tvar entityMap = {\n\t\t\t\t'&': '&',\n\t\t\t\t'<': '<',\n\t\t\t\t'>': '>',\n\t\t\t\t'\"': '"',\n\t\t\t\t\"'\": ''',\n\t\t\t\t'/': '/',\n\t\t\t\t'`': '`',\n\t\t\t\t'=': '='\n\t\t\t};\n\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\n\t\t\t\treturn entityMap[s];\n\t\t\t});\n\t\t} else {\n\t\t\treturn value;\n\t\t}\n\t};\n\n\tFormat.prototype.emptyToSpace = function (value) {\n\t\treturn value === null || typeof value === \"undefined\" ? \" \" : value;\n\t};\n\n\t//get formatter for cell\n\tFormat.prototype.getFormatter = function (formatter) {\n\t\tvar formatter;\n\n\t\tswitch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.formatters[formatter]) {\n\t\t\t\t\tformatter = this.formatters[formatter];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\n\t\t\t\t\tformatter = this.formatters.plaintext;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tformatter = formatter;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tformatter = this.formatters.plaintext;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn formatter;\n\t};\n\n\t//default data formatters\n\tFormat.prototype.formatters = {\n\t\t//plain text value\n\t\tplaintext: function plaintext(cell, formatterParams, onRendered) {\n\t\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t\t},\n\n\t\t//html text value\n\t\thtml: function html(cell, formatterParams, onRendered) {\n\t\t\treturn cell.getValue();\n\t\t},\n\n\t\t//multiline text area\n\t\ttextarea: function textarea(cell, formatterParams, onRendered) {\n\t\t\tcell.getElement().style.whiteSpace = \"pre-wrap\";\n\t\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t\t},\n\n\t\t//currency formatting\n\t\tmoney: function money(cell, formatterParams, onRendered) {\n\t\t\tvar floatVal = parseFloat(cell.getValue()),\n\t\t\t number,\n\t\t\t integer,\n\t\t\t decimal,\n\t\t\t rgx;\n\n\t\t\tvar decimalSym = formatterParams.decimal || \".\";\n\t\t\tvar thousandSym = formatterParams.thousand || \",\";\n\t\t\tvar symbol = formatterParams.symbol || \"\";\n\t\t\tvar after = !!formatterParams.symbolAfter;\n\t\t\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\n\n\t\t\tif (isNaN(floatVal)) {\n\t\t\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\n\t\t\t}\n\n\t\t\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\n\t\t\tnumber = String(number).split(\".\");\n\n\t\t\tinteger = number[0];\n\t\t\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\n\n\t\t\trgx = /(\\d+)(\\d{3})/;\n\n\t\t\twhile (rgx.test(integer)) {\n\t\t\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\n\t\t\t}\n\n\t\t\treturn after ? integer + decimal + symbol : symbol + integer + decimal;\n\t\t},\n\n\t\t//clickable anchor tag\n\t\tlink: function link(cell, formatterParams, onRendered) {\n\t\t\tvar value = cell.getValue(),\n\t\t\t urlPrefix = formatterParams.urlPrefix || \"\",\n\t\t\t download = formatterParams.download,\n\t\t\t label = value,\n\t\t\t el = document.createElement(\"a\"),\n\t\t\t data;\n\n\t\t\tif (formatterParams.labelField) {\n\t\t\t\tdata = cell.getData();\n\t\t\t\tlabel = data[formatterParams.labelField];\n\t\t\t}\n\n\t\t\tif (formatterParams.label) {\n\t\t\t\tswitch (_typeof(formatterParams.label)) {\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tlabel = formatterParams.label;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\tlabel = formatterParams.label(cell);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (label) {\n\t\t\t\tif (formatterParams.urlField) {\n\t\t\t\t\tdata = cell.getData();\n\t\t\t\t\tvalue = data[formatterParams.urlField];\n\t\t\t\t}\n\n\t\t\t\tif (formatterParams.url) {\n\t\t\t\t\tswitch (_typeof(formatterParams.url)) {\n\t\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\t\tvalue = formatterParams.url;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase \"function\":\n\t\t\t\t\t\t\tvalue = formatterParams.url(cell);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tel.setAttribute(\"href\", urlPrefix + value);\n\n\t\t\t\tif (formatterParams.target) {\n\t\t\t\t\tel.setAttribute(\"target\", formatterParams.target);\n\t\t\t\t}\n\n\t\t\t\tif (formatterParams.download) {\n\n\t\t\t\t\tif (typeof download == \"function\") {\n\t\t\t\t\t\tdownload = download(cell);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdownload = download === true ? \"\" : download;\n\t\t\t\t\t}\n\n\t\t\t\t\tel.setAttribute(\"download\", download);\n\t\t\t\t}\n\n\t\t\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\n\n\t\t\t\treturn el;\n\t\t\t} else {\n\t\t\t\treturn \" \";\n\t\t\t}\n\t\t},\n\n\t\t//image element\n\t\timage: function image(cell, formatterParams, onRendered) {\n\t\t\tvar el = document.createElement(\"img\");\n\t\t\tel.setAttribute(\"src\", cell.getValue());\n\n\t\t\tswitch (_typeof(formatterParams.height)) {\n\t\t\t\tcase \"number\":\n\t\t\t\t\tel.style.height = formatterParams.height + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"string\":\n\t\t\t\t\tel.style.height = formatterParams.height;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tswitch (_typeof(formatterParams.width)) {\n\t\t\t\tcase \"number\":\n\t\t\t\t\tel.style.width = formatterParams.width + \"px\";\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"string\":\n\t\t\t\t\tel.style.width = formatterParams.width;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tel.addEventListener(\"load\", function () {\n\t\t\t\tcell.getRow().normalizeHeight();\n\t\t\t});\n\n\t\t\treturn el;\n\t\t},\n\n\t\t//tick or cross\n\t\ttickCross: function tickCross(cell, formatterParams, onRendered) {\n\t\t\tvar value = cell.getValue(),\n\t\t\t element = cell.getElement(),\n\t\t\t empty = formatterParams.allowEmpty,\n\t\t\t truthy = formatterParams.allowTruthy,\n\t\t\t tick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\n\t\t\t cross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\n\n\t\t\tif (truthy && value || value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\") {\n\t\t\t\telement.setAttribute(\"aria-checked\", true);\n\t\t\t\treturn tick || \"\";\n\t\t\t} else {\n\t\t\t\tif (empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")) {\n\t\t\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\n\t\t\t\t\treturn \"\";\n\t\t\t\t} else {\n\t\t\t\t\telement.setAttribute(\"aria-checked\", false);\n\t\t\t\t\treturn cross || \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tdatetime: function datetime(cell, formatterParams, onRendered) {\n\t\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\t\tvar outputFormat = formatterParams.outputFormat || \"DD/MM/YYYY hh:mm:ss\";\n\t\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\t\tvar value = cell.getValue();\n\n\t\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\t\tif (newDatetime.isValid()) {\n\t\t\t\treturn newDatetime.format(outputFormat);\n\t\t\t} else {\n\n\t\t\t\tif (invalid === true) {\n\t\t\t\t\treturn value;\n\t\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\t\treturn invalid(value);\n\t\t\t\t} else {\n\t\t\t\t\treturn invalid;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tdatetimediff: function datetime(cell, formatterParams, onRendered) {\n\t\t\tvar inputFormat = formatterParams.inputFormat || \"YYYY-MM-DD hh:mm:ss\";\n\t\t\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\n\t\t\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\n\t\t\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : undefined;\n\t\t\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\n\t\t\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : moment();\n\t\t\tvar value = cell.getValue();\n\n\t\t\tvar newDatetime = moment(value, inputFormat);\n\n\t\t\tif (newDatetime.isValid()) {\n\t\t\t\tif (humanize) {\n\t\t\t\t\treturn moment.duration(newDatetime.diff(date)).humanize(suffix);\n\t\t\t\t} else {\n\t\t\t\t\treturn newDatetime.diff(date, unit) + (suffix ? \" \" + suffix : \"\");\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tif (invalid === true) {\n\t\t\t\t\treturn value;\n\t\t\t\t} else if (typeof invalid === \"function\") {\n\t\t\t\t\treturn invalid(value);\n\t\t\t\t} else {\n\t\t\t\t\treturn invalid;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t//select\n\t\tlookup: function lookup(cell, formatterParams, onRendered) {\n\t\t\tvar value = cell.getValue();\n\n\t\t\tif (typeof formatterParams[value] === \"undefined\") {\n\t\t\t\tconsole.warn('Missing display value for ' + value);\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\treturn formatterParams[value];\n\t\t},\n\n\t\t//star rating\n\t\tstar: function star(cell, formatterParams, onRendered) {\n\t\t\tvar value = cell.getValue(),\n\t\t\t element = cell.getElement(),\n\t\t\t maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\n\t\t\t stars = document.createElement(\"span\"),\n\t\t\t star = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\n\t\t\t starActive = '',\n\t\t\t starInactive = '';\n\n\t\t\t//style stars holder\n\t\t\tstars.style.verticalAlign = \"middle\";\n\n\t\t\t//style star\n\t\t\tstar.setAttribute(\"width\", \"14\");\n\t\t\tstar.setAttribute(\"height\", \"14\");\n\t\t\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\n\t\t\tstar.setAttribute(\"xml:space\", \"preserve\");\n\t\t\tstar.style.padding = \"0 1px\";\n\n\t\t\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\n\n\t\t\tvalue = Math.max(0, Math.min(value, maxStars));\n\n\t\t\tfor (var i = 1; i <= maxStars; i++) {\n\t\t\t\tvar nextStar = star.cloneNode(true);\n\t\t\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\n\n\t\t\t\tstars.appendChild(nextStar);\n\t\t\t}\n\n\t\t\telement.style.whiteSpace = \"nowrap\";\n\t\t\telement.style.overflow = \"hidden\";\n\t\t\telement.style.textOverflow = \"ellipsis\";\n\n\t\t\telement.setAttribute(\"aria-label\", value);\n\n\t\t\treturn stars;\n\t\t},\n\n\t\ttraffic: function traffic(cell, formatterParams, onRendered) {\n\t\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t\t el = document.createElement(\"span\"),\n\t\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t\t colors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\n\t\t\t color = \"#666666\",\n\t\t\t percent,\n\t\t\t percentValue;\n\n\t\t\tif (isNaN(value) || typeof cell.getValue() === \"undefined\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tel.classList.add(\"tabulator-traffic-light\");\n\n\t\t\t//make sure value is in range\n\t\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t\t//workout percentage\n\t\t\tpercent = (max - min) / 100;\n\t\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t\t//set color\n\t\t\tswitch (typeof colors === 'undefined' ? 'undefined' : _typeof(colors)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcolor = colors;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tcolor = colors(value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif (Array.isArray(colors)) {\n\t\t\t\t\t\tvar unit = 100 / colors.length;\n\t\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\t\tindex = Math.min(index, colors.length - 1);\n\t\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\t\tcolor = colors[index];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t}\n\n\t\t\tel.style.backgroundColor = color;\n\n\t\t\treturn el;\n\t\t},\n\n\t\t//progress bar\n\t\tprogress: function progress(cell, formatterParams, onRendered) {\n\t\t\t//progress bar\n\t\t\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\n\t\t\t element = cell.getElement(),\n\t\t\t max = formatterParams && formatterParams.max ? formatterParams.max : 100,\n\t\t\t min = formatterParams && formatterParams.min ? formatterParams.min : 0,\n\t\t\t legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\n\t\t\t percent,\n\t\t\t percentValue,\n\t\t\t color,\n\t\t\t legend,\n\t\t\t legendColor,\n\t\t\t top,\n\t\t\t left,\n\t\t\t right,\n\t\t\t bottom;\n\n\t\t\t//make sure value is in range\n\t\t\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\n\t\t\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\n\n\t\t\t//workout percentage\n\t\t\tpercent = (max - min) / 100;\n\t\t\tpercentValue = Math.round((percentValue - min) / percent);\n\n\t\t\t//set bar color\n\t\t\tswitch (_typeof(formatterParams.color)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tcolor = formatterParams.color;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tcolor = formatterParams.color(value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif (Array.isArray(formatterParams.color)) {\n\t\t\t\t\t\tvar unit = 100 / formatterParams.color.length;\n\t\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\n\t\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\t\tcolor = formatterParams.color[index];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tcolor = \"#2DC214\";\n\t\t\t}\n\n\t\t\t//generate legend\n\t\t\tswitch (_typeof(formatterParams.legend)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlegend = formatterParams.legend;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tlegend = formatterParams.legend(value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"boolean\":\n\t\t\t\t\tlegend = value;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlegend = false;\n\t\t\t}\n\n\t\t\t//set legend color\n\t\t\tswitch (_typeof(formatterParams.legendColor)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tlegendColor = formatterParams.legendColor;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"function\":\n\t\t\t\t\tlegendColor = formatterParams.legendColor(value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"object\":\n\t\t\t\t\tif (Array.isArray(formatterParams.legendColor)) {\n\t\t\t\t\t\tvar unit = 100 / formatterParams.legendColor.length;\n\t\t\t\t\t\tvar index = Math.floor(percentValue / unit);\n\n\t\t\t\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\n\t\t\t\t\t\tindex = Math.max(index, 0);\n\t\t\t\t\t\tlegendColor = formatterParams.legendColor[index];\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlegendColor = \"#000\";\n\t\t\t}\n\n\t\t\telement.style.minWidth = \"30px\";\n\t\t\telement.style.position = \"relative\";\n\n\t\t\telement.setAttribute(\"aria-label\", percentValue);\n\n\t\t\tvar barEl = document.createElement(\"div\");\n\t\t\tbarEl.style.display = \"inline-block\";\n\t\t\tbarEl.style.position = \"relative\";\n\t\t\tbarEl.style.width = percentValue + \"%\";\n\t\t\tbarEl.style.backgroundColor = color;\n\t\t\tbarEl.style.height = \"100%\";\n\n\t\t\tbarEl.setAttribute('data-max', max);\n\t\t\tbarEl.setAttribute('data-min', min);\n\n\t\t\tif (legend) {\n\t\t\t\tvar legendEl = document.createElement(\"div\");\n\t\t\t\tlegendEl.style.position = \"absolute\";\n\t\t\t\tlegendEl.style.top = \"4px\";\n\t\t\t\tlegendEl.style.left = 0;\n\t\t\t\tlegendEl.style.textAlign = legendAlign;\n\t\t\t\tlegendEl.style.width = \"100%\";\n\t\t\t\tlegendEl.style.color = legendColor;\n\t\t\t\tlegendEl.innerHTML = legend;\n\t\t\t}\n\n\t\t\tonRendered(function () {\n\n\t\t\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\n\t\t\t\tif (!(cell instanceof CellComponent)) {\n\t\t\t\t\tvar holderEl = document.createElement(\"div\");\n\t\t\t\t\tholderEl.style.position = \"absolute\";\n\t\t\t\t\tholderEl.style.top = \"4px\";\n\t\t\t\t\tholderEl.style.bottom = \"4px\";\n\t\t\t\t\tholderEl.style.left = \"4px\";\n\t\t\t\t\tholderEl.style.right = \"4px\";\n\n\t\t\t\t\telement.appendChild(holderEl);\n\n\t\t\t\t\telement = holderEl;\n\t\t\t\t}\n\n\t\t\t\telement.appendChild(barEl);\n\n\t\t\t\tif (legend) {\n\t\t\t\t\telement.appendChild(legendEl);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn \"\";\n\t\t},\n\n\t\t//background color\n\t\tcolor: function color(cell, formatterParams, onRendered) {\n\t\t\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\n\t\t\treturn \"\";\n\t\t},\n\n\t\t//tick icon\n\t\tbuttonTick: function buttonTick(cell, formatterParams, onRendered) {\n\t\t\treturn '';\n\t\t},\n\n\t\t//cross icon\n\t\tbuttonCross: function buttonCross(cell, formatterParams, onRendered) {\n\t\t\treturn '';\n\t\t},\n\n\t\t//current row number\n\t\trownum: function rownum(cell, formatterParams, onRendered) {\n\t\t\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\n\t\t},\n\n\t\t//row handle\n\t\thandle: function handle(cell, formatterParams, onRendered) {\n\t\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\t\t\treturn \"
\";\n\t\t},\n\n\t\tresponsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) {\n\t\t\tvar self = this,\n\t\t\t open = false,\n\t\t\t el = document.createElement(\"div\"),\n\t\t\t config = cell.getRow()._row.modules.responsiveLayout;\n\n\t\t\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\n\t\t\tel.innerHTML = \"+-\";\n\n\t\t\tcell.getElement().classList.add(\"tabulator-row-handle\");\n\n\t\t\tfunction toggleList(isOpen) {\n\t\t\t\tvar collapseEl = config.element;\n\n\t\t\t\tconfig.open = isOpen;\n\n\t\t\t\tif (collapseEl) {\n\n\t\t\t\t\tif (config.open) {\n\t\t\t\t\t\tel.classList.add(\"open\");\n\t\t\t\t\t\tcollapseEl.style.display = '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tel.classList.remove(\"open\");\n\t\t\t\t\t\tcollapseEl.style.display = 'none';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tel.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\ttoggleList(!config.open);\n\t\t\t});\n\n\t\t\ttoggleList(config.open);\n\n\t\t\treturn el;\n\t\t},\n\n\t\trowSelection: function rowSelection(cell) {\n\t\t\tvar _this51 = this;\n\n\t\t\tvar checkbox = document.createElement(\"input\");\n\n\t\t\tcheckbox.type = 'checkbox';\n\n\t\t\tif (this.table.modExists(\"selectRow\", true)) {\n\n\t\t\t\tcheckbox.addEventListener(\"click\", function (e) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t});\n\n\t\t\t\tif (typeof cell.getRow == 'function') {\n\t\t\t\t\tvar row = cell.getRow();\n\n\t\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\trow.toggleSelect();\n\t\t\t\t\t});\n\n\t\t\t\t\tcheckbox.checked = row.isSelected();\n\t\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\n\t\t\t\t} else {\n\t\t\t\t\tcheckbox.addEventListener(\"change\", function (e) {\n\t\t\t\t\t\tif (_this51.table.modules.selectRow.selectedRows.length) {\n\t\t\t\t\t\t\t_this51.table.deselectRow();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_this51.table.selectRow();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn checkbox;\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"format\", Format);\n\n\tvar FrozenColumns = function FrozenColumns(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.leftMargin = 0;\n\t\tthis.rightMargin = 0;\n\t\tthis.rightPadding = 0;\n\t\tthis.initializationMode = \"left\";\n\t\tthis.active = false;\n\t\tthis.scrollEndTimer = false;\n\t};\n\n\t//reset initial state\n\tFrozenColumns.prototype.reset = function () {\n\t\tthis.initializationMode = \"left\";\n\t\tthis.leftColumns = [];\n\t\tthis.rightColumns = [];\n\t\tthis.leftMargin = 0;\n\t\tthis.rightMargin = 0;\n\t\tthis.rightMargin = 0;\n\t\tthis.active = false;\n\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\n\t};\n\n\t//initialize specific column\n\tFrozenColumns.prototype.initializeColumn = function (column) {\n\t\tvar config = { margin: 0, edge: false };\n\n\t\tif (!column.isGroup) {\n\n\t\t\tif (this.frozenCheck(column)) {\n\n\t\t\t\tconfig.position = this.initializationMode;\n\n\t\t\t\tif (this.initializationMode == \"left\") {\n\t\t\t\t\tthis.leftColumns.push(column);\n\t\t\t\t} else {\n\t\t\t\t\tthis.rightColumns.unshift(column);\n\t\t\t\t}\n\n\t\t\t\tthis.active = true;\n\n\t\t\t\tcolumn.modules.frozen = config;\n\t\t\t} else {\n\t\t\t\tthis.initializationMode = \"right\";\n\t\t\t}\n\t\t}\n\t};\n\n\tFrozenColumns.prototype.frozenCheck = function (column) {\n\t\tvar frozen = false;\n\n\t\tif (column.parent.isGroup && column.definition.frozen) {\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\n\t\t}\n\n\t\tif (column.parent.isGroup) {\n\t\t\treturn this.frozenCheck(column.parent);\n\t\t} else {\n\t\t\treturn column.definition.frozen;\n\t\t}\n\n\t\treturn frozen;\n\t};\n\n\t//quick layout to smooth horizontal scrolling\n\tFrozenColumns.prototype.scrollHorizontal = function () {\n\t\tvar _this52 = this;\n\n\t\tvar rows;\n\n\t\tif (this.active) {\n\t\t\tclearTimeout(this.scrollEndTimer);\n\n\t\t\t//layout all rows after scroll is complete\n\t\t\tthis.scrollEndTimer = setTimeout(function () {\n\t\t\t\t_this52.layout();\n\t\t\t}, 100);\n\n\t\t\trows = this.table.rowManager.getVisibleRows();\n\n\t\t\tthis.calcMargins();\n\n\t\t\tthis.layoutColumnPosition();\n\n\t\t\tthis.layoutCalcRows();\n\n\t\t\trows.forEach(function (row) {\n\t\t\t\tif (row.type === \"row\") {\n\t\t\t\t\t_this52.layoutRow(row);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t\t}\n\t};\n\n\t//calculate margins for rows\n\tFrozenColumns.prototype.calcMargins = function () {\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\n\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\n\n\t\t//calculate right frozen columns\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\n\t};\n\n\t//layout calculation rows\n\tFrozenColumns.prototype.layoutCalcRows = function () {\n\t\tif (this.table.modExists(\"columnCalcs\")) {\n\t\t\tif (this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow) {\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\n\t\t\t}\n\t\t\tif (this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow) {\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\n\t\t\t}\n\t\t}\n\t};\n\n\t//calculate column positions and layout headers\n\tFrozenColumns.prototype.layoutColumnPosition = function (allCells) {\n\t\tvar _this53 = this;\n\n\t\tvar leftParents = [];\n\n\t\tthis.leftColumns.forEach(function (column, i) {\n\t\t\tcolumn.modules.frozen.margin = _this53._calcSpace(_this53.leftColumns, i) + _this53.table.columnManager.scrollLeft + \"px\";\n\n\t\t\tif (i == _this53.leftColumns.length - 1) {\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t} else {\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\n\t\t\tif (column.parent.isGroup) {\n\t\t\t\tvar parentEl = _this53.getColGroupParentElement(column);\n\t\t\t\tif (!leftParents.includes(parentEl)) {\n\t\t\t\t\t_this53.layoutElement(parentEl, column);\n\t\t\t\t\tleftParents.push(parentEl);\n\t\t\t\t}\n\n\t\t\t\tif (column.modules.frozen.edge) {\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t_this53.layoutElement(column.getElement(), column);\n\t\t\t}\n\n\t\t\tif (allCells) {\n\t\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t\t_this53.layoutElement(cell.getElement(), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tthis.rightColumns.forEach(function (column, i) {\n\t\t\tcolumn.modules.frozen.margin = _this53.rightPadding - _this53._calcSpace(_this53.rightColumns, i + 1) + \"px\";\n\n\t\t\tif (i == _this53.rightColumns.length - 1) {\n\t\t\t\tcolumn.modules.frozen.edge = true;\n\t\t\t} else {\n\t\t\t\tcolumn.modules.frozen.edge = false;\n\t\t\t}\n\n\t\t\tif (column.parent.isGroup) {\n\t\t\t\t_this53.layoutElement(_this53.getColGroupParentElement(column), column);\n\t\t\t} else {\n\t\t\t\t_this53.layoutElement(column.getElement(), column);\n\t\t\t}\n\n\t\t\tif (allCells) {\n\t\t\t\tcolumn.cells.forEach(function (cell) {\n\t\t\t\t\t_this53.layoutElement(cell.getElement(), column);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tFrozenColumns.prototype.getColGroupParentElement = function (column) {\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\n\t};\n\n\t//layout columns appropropriatly\n\tFrozenColumns.prototype.layout = function () {\n\t\tvar self = this,\n\t\t rightMargin = 0;\n\n\t\tif (self.active) {\n\n\t\t\t//calculate row padding\n\t\t\tthis.calcMargins();\n\n\t\t\t// self.table.rowManager.activeRows.forEach(function(row){\n\t\t\t// \tself.layoutRow(row);\n\t\t\t// });\n\n\t\t\t// if(self.table.options.dataTree){\n\t\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\t\tif (row.type === \"row\") {\n\t\t\t\t\tself.layoutRow(row);\n\t\t\t\t}\n\t\t\t});\n\t\t\t// }\n\n\t\t\tthis.layoutCalcRows();\n\n\t\t\t//calculate left columns\n\t\t\tthis.layoutColumnPosition(true);\n\n\t\t\t// if(tableHolder.scrollHeight > tableHolder.clientHeight){\n\t\t\t// \trightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth;\n\t\t\t// }\n\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\n\t\t}\n\t};\n\n\tFrozenColumns.prototype.layoutRow = function (row) {\n\t\tvar _this54 = this;\n\n\t\tvar rowEl = row.getElement();\n\n\t\trowEl.style.paddingLeft = this.leftMargin;\n\t\t// rowEl.style.paddingRight = this.rightMargin + \"px\";\n\n\t\tthis.leftColumns.forEach(function (column) {\n\t\t\tvar cell = row.getCell(column);\n\n\t\t\tif (cell) {\n\t\t\t\t_this54.layoutElement(cell.getElement(), column);\n\t\t\t}\n\t\t});\n\n\t\tthis.rightColumns.forEach(function (column) {\n\t\t\tvar cell = row.getCell(column);\n\n\t\t\tif (cell) {\n\t\t\t\t_this54.layoutElement(cell.getElement(), column);\n\t\t\t}\n\t\t});\n\t};\n\n\tFrozenColumns.prototype.layoutElement = function (element, column) {\n\n\t\tif (column.modules.frozen) {\n\t\t\telement.style.position = \"absolute\";\n\t\t\telement.style.left = column.modules.frozen.margin;\n\n\t\t\telement.classList.add(\"tabulator-frozen\");\n\n\t\t\tif (column.modules.frozen.edge) {\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\n\t\t\t}\n\t\t}\n\t};\n\n\tFrozenColumns.prototype._calcSpace = function (columns, index) {\n\t\tvar width = 0;\n\n\t\tfor (var i = 0; i < index; i++) {\n\t\t\tif (columns[i].visible) {\n\t\t\t\twidth += columns[i].getWidth();\n\t\t\t}\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tTabulator.prototype.registerModule(\"frozenColumns\", FrozenColumns);\n\tvar FrozenRows = function FrozenRows(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.topElement = document.createElement(\"div\");\n\t\tthis.rows = [];\n\t\tthis.displayIndex = 0; //index in display pipeline\n\t};\n\n\tFrozenRows.prototype.initialize = function () {\n\t\tthis.rows = [];\n\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\n\n\t\t// this.table.columnManager.element.append(this.topElement);\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\n\t};\n\n\tFrozenRows.prototype.setDisplayIndex = function (index) {\n\t\tthis.displayIndex = index;\n\t};\n\n\tFrozenRows.prototype.getDisplayIndex = function () {\n\t\treturn this.displayIndex;\n\t};\n\n\tFrozenRows.prototype.isFrozen = function () {\n\t\treturn !!this.rows.length;\n\t};\n\n\t//filter frozen rows out of display data\n\tFrozenRows.prototype.getRows = function (rows) {\n\t\tvar self = this,\n\t\t frozen = [],\n\t\t output = rows.slice(0);\n\n\t\tthis.rows.forEach(function (row) {\n\t\t\tvar index = output.indexOf(row);\n\n\t\t\tif (index > -1) {\n\t\t\t\toutput.splice(index, 1);\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tFrozenRows.prototype.freezeRow = function (row) {\n\t\tif (!row.modules.frozen) {\n\t\t\trow.modules.frozen = true;\n\t\t\tthis.topElement.appendChild(row.getElement());\n\t\t\trow.initialize();\n\t\t\trow.normalizeHeight();\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.rows.push(row);\n\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\t\tthis.styleRows();\n\t\t} else {\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\n\t\t}\n\t};\n\n\tFrozenRows.prototype.unfreezeRow = function (row) {\n\t\tvar index = this.rows.indexOf(row);\n\n\t\tif (row.modules.frozen) {\n\n\t\t\trow.modules.frozen = false;\n\n\t\t\tvar rowEl = row.getElement();\n\t\t\trowEl.parentNode.removeChild(rowEl);\n\n\t\t\tthis.table.rowManager.adjustTableSize();\n\n\t\t\tthis.rows.splice(index, 1);\n\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\");\n\n\t\t\tif (this.rows.length) {\n\t\t\t\tthis.styleRows();\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\n\t\t}\n\t};\n\n\tFrozenRows.prototype.styleRows = function (row) {\n\t\tvar self = this;\n\n\t\tthis.rows.forEach(function (row, i) {\n\t\t\tself.table.rowManager.styleRow(row, i);\n\t\t});\n\t};\n\n\tTabulator.prototype.registerModule(\"frozenRows\", FrozenRows);\n\n\t//public group object\n\tvar GroupComponent = function GroupComponent(group) {\n\t\tthis._group = group;\n\t\tthis.type = \"GroupComponent\";\n\t};\n\n\tGroupComponent.prototype.getKey = function () {\n\t\treturn this._group.key;\n\t};\n\n\tGroupComponent.prototype.getField = function () {\n\t\treturn this._group.field;\n\t};\n\n\tGroupComponent.prototype.getElement = function () {\n\t\treturn this._group.element;\n\t};\n\n\tGroupComponent.prototype.getRows = function () {\n\t\treturn this._group.getRows(true);\n\t};\n\n\tGroupComponent.prototype.getSubGroups = function () {\n\t\treturn this._group.getSubGroups(true);\n\t};\n\n\tGroupComponent.prototype.getParentGroup = function () {\n\t\treturn this._group.parent ? this._group.parent.getComponent() : false;\n\t};\n\n\tGroupComponent.prototype.getVisibility = function () {\n\t\treturn this._group.visible;\n\t};\n\n\tGroupComponent.prototype.show = function () {\n\t\tthis._group.show();\n\t};\n\n\tGroupComponent.prototype.hide = function () {\n\t\tthis._group.hide();\n\t};\n\n\tGroupComponent.prototype.toggle = function () {\n\t\tthis._group.toggleVisibility();\n\t};\n\n\tGroupComponent.prototype._getSelf = function () {\n\t\treturn this._group;\n\t};\n\n\tGroupComponent.prototype.getTable = function () {\n\t\treturn this._group.groupManager.table;\n\t};\n\n\t//////////////////////////////////////////////////\n\t//////////////// Group Functions /////////////////\n\t//////////////////////////////////////////////////\n\n\tvar Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) {\n\n\t\tthis.groupManager = groupManager;\n\t\tthis.parent = parent;\n\t\tthis.key = key;\n\t\tthis.level = level;\n\t\tthis.field = field;\n\t\tthis.hasSubGroups = level < groupManager.groupIDLookups.length - 1;\n\t\tthis.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow;\n\t\tthis.type = \"group\"; //type of element\n\t\tthis.old = oldGroup;\n\t\tthis.rows = [];\n\t\tthis.groups = [];\n\t\tthis.groupList = [];\n\t\tthis.generator = generator;\n\t\tthis.elementContents = false;\n\t\tthis.height = 0;\n\t\tthis.outerHeight = 0;\n\t\tthis.initialized = false;\n\t\tthis.calcs = {};\n\t\tthis.initialized = false;\n\t\tthis.modules = {};\n\t\tthis.arrowElement = false;\n\n\t\tthis.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0];\n\n\t\tthis.createElements();\n\t\tthis.addBindings();\n\n\t\tthis.createValueGroups();\n\t};\n\n\tGroup.prototype.wipe = function () {\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\tgroup.wipe();\n\t\t\t});\n\t\t} else {\n\t\t\tthis.element = false;\n\t\t\tthis.arrowElement = false;\n\t\t\tthis.elementContents = false;\n\t\t}\n\t};\n\n\tGroup.prototype.createElements = function () {\n\t\tvar arrow = document.createElement(\"div\");\n\t\tarrow.classList.add(\"tabulator-arrow\");\n\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-row\");\n\t\tthis.element.classList.add(\"tabulator-group\");\n\t\tthis.element.classList.add(\"tabulator-group-level-\" + this.level);\n\t\tthis.element.setAttribute(\"role\", \"rowgroup\");\n\n\t\tthis.arrowElement = document.createElement(\"div\");\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\n\t\tthis.arrowElement.appendChild(arrow);\n\n\t\t//setup movable rows\n\t\tif (this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")) {\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\n\t\t}\n\t};\n\n\tGroup.prototype.createValueGroups = function () {\n\t\tvar _this55 = this;\n\n\t\tvar level = this.level + 1;\n\t\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\t\tthis.groupManager.allowedValues[level].forEach(function (value) {\n\t\t\t\t_this55._createGroup(value, level);\n\t\t\t});\n\t\t}\n\t};\n\n\tGroup.prototype.addBindings = function () {\n\t\tvar self = this,\n\t\t dblTap,\n\t\t tapHold,\n\t\t tap,\n\t\t toggleElement;\n\n\t\t//handle group click events\n\t\tif (self.groupManager.table.options.groupClick) {\n\t\t\tself.element.addEventListener(\"click\", function (e) {\n\t\t\t\tself.groupManager.table.options.groupClick.call(self.groupManager.table, e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.groupManager.table.options.groupDblClick) {\n\t\t\tself.element.addEventListener(\"dblclick\", function (e) {\n\t\t\t\tself.groupManager.table.options.groupDblClick.call(self.groupManager.table, e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.groupManager.table.options.groupContext) {\n\t\t\tself.element.addEventListener(\"contextmenu\", function (e) {\n\t\t\t\tself.groupManager.table.options.groupContext.call(self.groupManager.table, e, self.getComponent());\n\t\t\t});\n\t\t}\n\n\t\tif (self.groupManager.table.options.groupTap) {\n\n\t\t\ttap = false;\n\n\t\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\t\ttap = true;\n\t\t\t}, { passive: true });\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\t\tif (tap) {\n\t\t\t\t\tself.groupManager.table.options.groupTap(e, self.getComponent());\n\t\t\t\t}\n\n\t\t\t\ttap = false;\n\t\t\t});\n\t\t}\n\n\t\tif (self.groupManager.table.options.groupDblTap) {\n\n\t\t\tdblTap = null;\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\n\t\t\t\tif (dblTap) {\n\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\tdblTap = null;\n\n\t\t\t\t\tself.groupManager.table.options.groupDblTap(e, self.getComponent());\n\t\t\t\t} else {\n\n\t\t\t\t\tdblTap = setTimeout(function () {\n\t\t\t\t\t\tclearTimeout(dblTap);\n\t\t\t\t\t\tdblTap = null;\n\t\t\t\t\t}, 300);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (self.groupManager.table.options.groupTapHold) {\n\n\t\t\ttapHold = null;\n\n\t\t\tself.element.addEventListener(\"touchstart\", function (e) {\n\t\t\t\tclearTimeout(tapHold);\n\n\t\t\t\ttapHold = setTimeout(function () {\n\t\t\t\t\tclearTimeout(tapHold);\n\t\t\t\t\ttapHold = null;\n\t\t\t\t\ttap = false;\n\t\t\t\t\tself.groupManager.table.options.groupTapHold(e, self.getComponent());\n\t\t\t\t}, 1000);\n\t\t\t}, { passive: true });\n\n\t\t\tself.element.addEventListener(\"touchend\", function (e) {\n\t\t\t\tclearTimeout(tapHold);\n\t\t\t\ttapHold = null;\n\t\t\t});\n\t\t}\n\n\t\tif (self.groupManager.table.options.groupToggleElement) {\n\t\t\ttoggleElement = self.groupManager.table.options.groupToggleElement == \"arrow\" ? self.arrowElement : self.element;\n\n\t\t\ttoggleElement.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\tself.toggleVisibility();\n\t\t\t});\n\t\t}\n\t};\n\n\tGroup.prototype._createGroup = function (groupID, level) {\n\t\tvar groupKey = level + \"_\" + groupID;\n\t\tvar group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false);\n\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t};\n\n\tGroup.prototype._addRowToGroup = function (row) {\n\n\t\tvar level = this.level + 1;\n\n\t\tif (this.hasSubGroups) {\n\t\t\tvar groupID = this.groupManager.groupIDLookups[level].func(row.getData()),\n\t\t\t groupKey = level + \"_\" + groupID;\n\n\t\t\tif (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) {\n\t\t\t\tif (this.groups[groupKey]) {\n\t\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!this.groups[groupKey]) {\n\t\t\t\t\tthis._createGroup(groupID, level);\n\t\t\t\t}\n\n\t\t\t\tthis.groups[groupKey].addRow(row);\n\t\t\t}\n\t\t}\n\t};\n\n\tGroup.prototype._addRow = function (row) {\n\t\tthis.rows.push(row);\n\t\trow.modules.group = this;\n\t};\n\n\tGroup.prototype.insertRow = function (row, to, after) {\n\t\tvar data = this.conformRowData({});\n\n\t\trow.updateData(data);\n\n\t\tvar toIndex = this.rows.indexOf(to);\n\n\t\tif (toIndex > -1) {\n\t\t\tif (after) {\n\t\t\t\tthis.rows.splice(toIndex + 1, 0, row);\n\t\t\t} else {\n\t\t\t\tthis.rows.splice(toIndex, 0, row);\n\t\t\t}\n\t\t} else {\n\t\t\tif (after) {\n\t\t\t\tthis.rows.push(row);\n\t\t\t} else {\n\t\t\t\tthis.rows.unshift(row);\n\t\t\t}\n\t\t}\n\n\t\trow.modules.group = this;\n\n\t\tthis.generateGroupHeaderContents();\n\n\t\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t}\n\n\t\tthis.groupManager.updateGroupRows(true);\n\t};\n\n\tGroup.prototype.scrollHeader = function (left) {\n\t\tthis.arrowElement.style.marginLeft = left;\n\n\t\tthis.groupList.forEach(function (child) {\n\t\t\tchild.scrollHeader(left);\n\t\t});\n\t};\n\n\tGroup.prototype.getRowIndex = function (row) {};\n\n\t//update row data to match grouping contraints\n\tGroup.prototype.conformRowData = function (data) {\n\t\tif (this.field) {\n\t\t\tdata[this.field] = this.key;\n\t\t} else {\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tdata = this.parent.conformRowData(data);\n\t\t}\n\n\t\treturn data;\n\t};\n\n\tGroup.prototype.removeRow = function (row) {\n\t\tvar index = this.rows.indexOf(row);\n\t\tvar el = row.getElement();\n\n\t\tif (index > -1) {\n\t\t\tthis.rows.splice(index, 1);\n\t\t}\n\n\t\tif (!this.groupManager.table.options.groupValues && !this.rows.length) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t} else {\n\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t}\n\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t} else {\n\n\t\t\tif (el.parentNode) {\n\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t}\n\n\t\t\tthis.generateGroupHeaderContents();\n\n\t\t\tif (this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.options.columnCalcs != \"table\") {\n\t\t\t\tthis.groupManager.table.modules.columnCalcs.recalcGroup(this);\n\t\t\t}\n\t\t}\n\t};\n\n\tGroup.prototype.removeGroup = function (group) {\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\t index;\n\n\t\tif (this.groups[groupKey]) {\n\t\t\tdelete this.groups[groupKey];\n\n\t\t\tindex = this.groupList.indexOf(group);\n\n\t\t\tif (index > -1) {\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\n\t\t\tif (!this.groupList.length) {\n\t\t\t\tif (this.parent) {\n\t\t\t\t\tthis.parent.removeGroup(this);\n\t\t\t\t} else {\n\t\t\t\t\tthis.groupManager.removeGroup(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tGroup.prototype.getHeadersAndRows = function (noCalc) {\n\t\tvar output = [];\n\n\t\toutput.push(this);\n\n\t\tthis._visSet();\n\n\t\tif (this.visible) {\n\t\t\tif (this.groupList.length) {\n\t\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\t\toutput = output.concat(group.getHeadersAndRows(noCalc));\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t}\n\n\t\t\t\toutput = output.concat(this.rows);\n\n\t\t\t\tif (!noCalc && this.groupManager.table.options.columnCalcs != \"table\" && this.groupManager.table.modExists(\"columnCalcs\") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.groupList.length && this.groupManager.table.options.columnCalcs != \"table\") {\n\n\t\t\t\tif (this.groupManager.table.modExists(\"columnCalcs\")) {\n\n\t\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) {\n\t\t\t\t\t\tif (this.calcs.top) {\n\t\t\t\t\t\t\tthis.calcs.top.detachElement();\n\t\t\t\t\t\t\tthis.calcs.top.deleteCells();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\t\tthis.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.top);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!noCalc && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) {\n\t\t\t\t\t\tif (this.calcs.bottom) {\n\t\t\t\t\t\t\tthis.calcs.bottom.detachElement();\n\t\t\t\t\t\t\tthis.calcs.bottom.deleteCells();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.groupManager.table.options.groupClosedShowCalcs) {\n\t\t\t\t\t\t\tthis.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows);\n\t\t\t\t\t\t\toutput.push(this.calcs.bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tGroup.prototype.getData = function (visible, transform) {\n\t\tvar self = this,\n\t\t output = [];\n\n\t\tthis._visSet();\n\n\t\tif (!visible || visible && this.visible) {\n\t\t\tthis.rows.forEach(function (row) {\n\t\t\t\toutput.push(row.getData(transform || \"data\"));\n\t\t\t});\n\t\t}\n\n\t\treturn output;\n\t};\n\n\t// Group.prototype.getRows = function(){\n\t// \tthis._visSet();\n\n\t// \treturn this.visible ? this.rows : [];\n\t// };\n\n\tGroup.prototype.getRowCount = function () {\n\t\tvar count = 0;\n\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\tcount += group.getRowCount();\n\t\t\t});\n\t\t} else {\n\t\t\tcount = this.rows.length;\n\t\t}\n\t\treturn count;\n\t};\n\n\tGroup.prototype.toggleVisibility = function () {\n\t\tif (this.visible) {\n\t\t\tthis.hide();\n\t\t} else {\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tGroup.prototype.hide = function () {\n\t\tthis.visible = false;\n\n\t\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\n\t\t\tif (this.groupList.length) {\n\t\t\t\tthis.groupList.forEach(function (group) {\n\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\t\trow.detachElement();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.rows.forEach(function (row) {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t\t} else {\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false);\n\t};\n\n\tGroup.prototype.show = function () {\n\t\tvar self = this;\n\n\t\tself.visible = true;\n\n\t\tif (this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination) {\n\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\n\t\t\tvar prev = self.getElement();\n\n\t\t\tif (this.groupList.length) {\n\t\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\n\n\t\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\t\trow.initialize();\n\t\t\t\t\t\tprev = rowEl;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.rows.forEach(function (row) {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\n\t\t\t\t\trow.initialize();\n\t\t\t\t\tprev = rowEl;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\n\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\n\t\t} else {\n\t\t\tthis.groupManager.updateGroupRows(true);\n\t\t}\n\n\t\tthis.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true);\n\t};\n\n\tGroup.prototype._visSet = function () {\n\t\tvar data = [];\n\n\t\tif (typeof this.visible == \"function\") {\n\n\t\t\tthis.rows.forEach(function (row) {\n\t\t\t\tdata.push(row.getData());\n\t\t\t});\n\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\n\t\t}\n\t};\n\n\tGroup.prototype.getRowGroup = function (row) {\n\t\tvar match = false;\n\t\tif (this.groupList.length) {\n\t\t\tthis.groupList.forEach(function (group) {\n\t\t\t\tvar result = group.getRowGroup(row);\n\n\t\t\t\tif (result) {\n\t\t\t\t\tmatch = result;\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif (this.rows.find(function (item) {\n\t\t\t\treturn item === row;\n\t\t\t})) {\n\t\t\t\tmatch = this;\n\t\t\t}\n\t\t}\n\n\t\treturn match;\n\t};\n\n\tGroup.prototype.getSubGroups = function (component) {\n\t\tvar output = [];\n\n\t\tthis.groupList.forEach(function (child) {\n\t\t\toutput.push(component ? child.getComponent() : child);\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tGroup.prototype.getRows = function (compoment) {\n\t\tvar output = [];\n\n\t\tthis.rows.forEach(function (row) {\n\t\t\toutput.push(compoment ? row.getComponent() : row);\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tGroup.prototype.generateGroupHeaderContents = function () {\n\t\tvar data = [];\n\n\t\tthis.rows.forEach(function (row) {\n\t\t\tdata.push(row.getData());\n\t\t});\n\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\n\n\t\twhile (this.element.firstChild) {\n\t\t\tthis.element.removeChild(this.element.firstChild);\n\t\t}if (typeof this.elementContents === \"string\") {\n\t\t\tthis.element.innerHTML = this.elementContents;\n\t\t} else {\n\t\t\tthis.element.appendChild(this.elementContents);\n\t\t}\n\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\n\t};\n\n\t////////////// Standard Row Functions //////////////\n\n\tGroup.prototype.getElement = function () {\n\t\tthis.addBindingsd = false;\n\n\t\tthis._visSet();\n\n\t\tif (this.visible) {\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\n\t\t} else {\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\n\t\t}\n\n\t\tfor (var i = 0; i < this.element.childNodes.length; ++i) {\n\t\t\tthis.element.childNodes[i].parentNode.removeChild(this.element.childNodes[i]);\n\t\t}\n\n\t\tthis.generateGroupHeaderContents();\n\n\t\t// this.addBindings();\n\n\t\treturn this.element;\n\t};\n\n\tGroup.prototype.detachElement = function () {\n\t\tif (this.element && this.element.parentNode) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t}\n\t};\n\n\t//normalize the height of elements in the row\n\tGroup.prototype.normalizeHeight = function () {\n\t\tthis.setHeight(this.element.clientHeight);\n\t};\n\n\tGroup.prototype.initialize = function (force) {\n\t\tif (!this.initialized || force) {\n\t\t\tthis.normalizeHeight();\n\t\t\tthis.initialized = true;\n\t\t}\n\t};\n\n\tGroup.prototype.reinitialize = function () {\n\t\tthis.initialized = false;\n\t\tthis.height = 0;\n\n\t\tif (Tabulator.prototype.helpers.elVisible(this.element)) {\n\t\t\tthis.initialize(true);\n\t\t}\n\t};\n\n\tGroup.prototype.setHeight = function (height) {\n\t\tif (this.height != height) {\n\t\t\tthis.height = height;\n\t\t\tthis.outerHeight = this.element.offsetHeight;\n\t\t}\n\t};\n\n\t//return rows outer height\n\tGroup.prototype.getHeight = function () {\n\t\treturn this.outerHeight;\n\t};\n\n\tGroup.prototype.getGroup = function () {\n\t\treturn this;\n\t};\n\n\tGroup.prototype.reinitializeHeight = function () {};\n\tGroup.prototype.calcHeight = function () {};\n\tGroup.prototype.setCellHeight = function () {};\n\tGroup.prototype.clearCellHeight = function () {};\n\n\t//////////////// Object Generation /////////////////\n\tGroup.prototype.getComponent = function () {\n\t\treturn new GroupComponent(this);\n\t};\n\n\t//////////////////////////////////////////////////\n\t////////////// Group Row Extension ///////////////\n\t//////////////////////////////////////////////////\n\n\tvar GroupRows = function GroupRows(table) {\n\n\t\tthis.table = table; //hold Tabulator object\n\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\n\t\tthis.startOpen = [function () {\n\t\t\treturn false;\n\t\t}]; //starting state of group\n\t\tthis.headerGenerator = [function () {\n\t\t\treturn \"\";\n\t\t}];\n\t\tthis.groupList = []; //ordered list of groups\n\t\tthis.allowedValues = false;\n\t\tthis.groups = {}; //hold row groups\n\t\tthis.displayIndex = 0; //index in display pipeline\n\t};\n\n\t//initialize group configuration\n\tGroupRows.prototype.initialize = function () {\n\t\tvar self = this,\n\t\t groupBy = self.table.options.groupBy,\n\t\t startOpen = self.table.options.groupStartOpen,\n\t\t groupHeader = self.table.options.groupHeader;\n\n\t\tthis.allowedValues = self.table.options.groupValues;\n\n\t\tif (Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length) {\n\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\n\t\t}\n\n\t\tself.headerGenerator = [function () {\n\t\t\treturn \"\";\n\t\t}];\n\t\tthis.startOpen = [function () {\n\t\t\treturn false;\n\t\t}]; //starting state of group\n\n\t\tself.table.modules.localize.bind(\"groups|item\", function (langValue, lang) {\n\t\t\tself.headerGenerator[0] = function (value, count, data) {\n\t\t\t\t//header layout function\n\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + (count === 1 ? langValue : lang.groups.items) + \")\";\n\t\t\t};\n\t\t});\n\n\t\tthis.groupIDLookups = [];\n\n\t\tif (Array.isArray(groupBy) || groupBy) {\n\t\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\") {\n\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\") {\n\n\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\n\n\t\t\t\tcols.forEach(function (col) {\n\t\t\t\t\tif (col.definition.topCalc) {\n\t\t\t\t\t\tself.table.modules.columnCalcs.initializeTopRow();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (col.definition.bottomCalc) {\n\t\t\t\t\t\tself.table.modules.columnCalcs.initializeBottomRow();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (!Array.isArray(groupBy)) {\n\t\t\tgroupBy = [groupBy];\n\t\t}\n\n\t\tgroupBy.forEach(function (group, i) {\n\t\t\tvar lookupFunc, column;\n\n\t\t\tif (typeof group == \"function\") {\n\t\t\t\tlookupFunc = group;\n\t\t\t} else {\n\t\t\t\tcolumn = self.table.columnManager.getColumnByField(group);\n\n\t\t\t\tif (column) {\n\t\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\t\treturn column.getFieldValue(data);\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tlookupFunc = function lookupFunc(data) {\n\t\t\t\t\t\treturn data[group];\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.groupIDLookups.push({\n\t\t\t\tfield: typeof group === \"function\" ? false : group,\n\t\t\t\tfunc: lookupFunc,\n\t\t\t\tvalues: self.allowedValues ? self.allowedValues[i] : false\n\t\t\t});\n\t\t});\n\n\t\tif (startOpen) {\n\n\t\t\tif (!Array.isArray(startOpen)) {\n\t\t\t\tstartOpen = [startOpen];\n\t\t\t}\n\n\t\t\tstartOpen.forEach(function (level) {\n\t\t\t\tlevel = typeof level == \"function\" ? level : function () {\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tself.startOpen = startOpen;\n\t\t}\n\n\t\tif (groupHeader) {\n\t\t\tself.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\n\t\t}\n\n\t\tthis.initialized = true;\n\t};\n\n\tGroupRows.prototype.setDisplayIndex = function (index) {\n\t\tthis.displayIndex = index;\n\t};\n\n\tGroupRows.prototype.getDisplayIndex = function () {\n\t\treturn this.displayIndex;\n\t};\n\n\t//return appropriate rows with group headers\n\tGroupRows.prototype.getRows = function (rows) {\n\t\tif (this.groupIDLookups.length) {\n\n\t\t\tthis.table.options.dataGrouping.call(this.table);\n\n\t\t\tthis.generateGroups(rows);\n\n\t\t\tif (this.table.options.dataGrouped) {\n\t\t\t\tthis.table.options.dataGrouped.call(this.table, this.getGroups(true));\n\t\t\t}\n\n\t\t\treturn this.updateGroupRows();\n\t\t} else {\n\t\t\treturn rows.slice(0);\n\t\t}\n\t};\n\n\tGroupRows.prototype.getGroups = function (compoment) {\n\t\tvar groupComponents = [];\n\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tgroupComponents.push(compoment ? group.getComponent() : group);\n\t\t});\n\n\t\treturn groupComponents;\n\t};\n\n\tGroupRows.prototype.getChildGroups = function (group) {\n\t\tvar _this56 = this;\n\n\t\tvar groupComponents = [];\n\n\t\tif (!group) {\n\t\t\tgroup = this;\n\t\t}\n\n\t\tgroup.groupList.forEach(function (child) {\n\t\t\tif (child.groupList.length) {\n\t\t\t\tgroupComponents = groupComponents.concat(_this56.getChildGroups(child));\n\t\t\t} else {\n\t\t\t\tgroupComponents.push(child);\n\t\t\t}\n\t\t});\n\n\t\treturn groupComponents;\n\t};\n\n\tGroupRows.prototype.wipe = function () {\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tgroup.wipe();\n\t\t});\n\t};\n\n\tGroupRows.prototype.pullGroupListData = function (groupList) {\n\t\tvar self = this;\n\t\tvar groupListData = [];\n\n\t\tgroupList.forEach(function (group) {\n\t\t\tvar groupHeader = {};\n\t\t\tgroupHeader.level = 0;\n\t\t\tgroupHeader.rowCount = 0;\n\t\t\tgroupHeader.headerContent = \"\";\n\t\t\tvar childData = [];\n\n\t\t\tif (group.hasSubGroups) {\n\t\t\t\tchildData = self.pullGroupListData(group.groupList);\n\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\n\n\t\t\t\tgroupListData.push(groupHeader);\n\t\t\t\tgroupListData = groupListData.concat(childData);\n\t\t\t} else {\n\t\t\t\tgroupHeader.level = group.level;\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\n\n\t\t\t\tgroupListData.push(groupHeader);\n\n\t\t\t\tgroup.getRows().forEach(function (row) {\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn groupListData;\n\t};\n\n\tGroupRows.prototype.getGroupedData = function () {\n\n\t\treturn this.pullGroupListData(this.groupList);\n\t};\n\n\tGroupRows.prototype.getRowGroup = function (row) {\n\t\tvar match = false;\n\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tvar result = group.getRowGroup(row);\n\n\t\t\tif (result) {\n\t\t\t\tmatch = result;\n\t\t\t}\n\t\t});\n\n\t\treturn match;\n\t};\n\n\tGroupRows.prototype.countGroups = function () {\n\t\treturn this.groupList.length;\n\t};\n\n\tGroupRows.prototype.generateGroups = function (rows) {\n\t\tvar self = this,\n\t\t oldGroups = self.groups;\n\n\t\tself.groups = {};\n\t\tself.groupList = [];\n\n\t\tif (this.allowedValues && this.allowedValues[0]) {\n\t\t\tthis.allowedValues[0].forEach(function (value) {\n\t\t\t\tself.createGroup(value, 0, oldGroups);\n\t\t\t});\n\n\t\t\trows.forEach(function (row) {\n\t\t\t\tself.assignRowToExistingGroup(row, oldGroups);\n\t\t\t});\n\t\t} else {\n\t\t\trows.forEach(function (row) {\n\t\t\t\tself.assignRowToGroup(row, oldGroups);\n\t\t\t});\n\t\t}\n\t};\n\n\tGroupRows.prototype.createGroup = function (groupID, level, oldGroups) {\n\t\tvar groupKey = level + \"_\" + groupID,\n\t\t group;\n\n\t\toldGroups = oldGroups || [];\n\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\n\n\t\tthis.groups[groupKey] = group;\n\t\tthis.groupList.push(group);\n\t};\n\n\t// GroupRows.prototype.assignRowToGroup = function(row, oldGroups){\n\t// \tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t// \tgroupKey = \"0_\" + groupID;\n\n\t// \tif(!this.groups[groupKey]){\n\t// \t\tthis.createGroup(groupID, 0, oldGroups);\n\t// \t}\n\n\t// \tthis.groups[groupKey].addRow(row);\n\t// };\n\n\tGroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) {\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\t groupKey = \"0_\" + groupID;\n\n\t\tif (this.groups[groupKey]) {\n\t\t\tthis.groups[groupKey].addRow(row);\n\t\t}\n\t};\n\n\tGroupRows.prototype.assignRowToGroup = function (row, oldGroups) {\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\n\t\t newGroupNeeded = !this.groups[\"0_\" + groupID];\n\n\t\tif (newGroupNeeded) {\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\n\t\t}\n\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\n\n\t\treturn !newGroupNeeded;\n\t};\n\n\tGroupRows.prototype.updateGroupRows = function (force) {\n\t\tvar self = this,\n\t\t output = [],\n\t\t oldRowCount;\n\n\t\tself.groupList.forEach(function (group) {\n\t\t\toutput = output.concat(group.getHeadersAndRows());\n\t\t});\n\n\t\t//force update of table display\n\t\tif (force) {\n\n\t\t\tvar displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex());\n\n\t\t\tif (displayIndex !== true) {\n\t\t\t\tthis.setDisplayIndex(displayIndex);\n\t\t\t}\n\n\t\t\tself.table.rowManager.refreshActiveData(\"group\", true, true);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tGroupRows.prototype.scrollHeaders = function (left) {\n\t\tleft = left + \"px\";\n\n\t\tthis.groupList.forEach(function (group) {\n\t\t\tgroup.scrollHeader(left);\n\t\t});\n\t};\n\n\tGroupRows.prototype.removeGroup = function (group) {\n\t\tvar groupKey = group.level + \"_\" + group.key,\n\t\t index;\n\n\t\tif (this.groups[groupKey]) {\n\t\t\tdelete this.groups[groupKey];\n\n\t\t\tindex = this.groupList.indexOf(group);\n\n\t\t\tif (index > -1) {\n\t\t\t\tthis.groupList.splice(index, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"groupRows\", GroupRows);\n\tvar History = function History(table) {\n\t\tthis.table = table; //hold Tabulator object\n\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t};\n\n\tHistory.prototype.clear = function () {\n\t\tthis.history = [];\n\t\tthis.index = -1;\n\t};\n\n\tHistory.prototype.action = function (type, component, data) {\n\n\t\tthis.history = this.history.slice(0, this.index + 1);\n\n\t\tthis.history.push({\n\t\t\ttype: type,\n\t\t\tcomponent: component,\n\t\t\tdata: data\n\t\t});\n\n\t\tthis.index++;\n\t};\n\n\tHistory.prototype.getHistoryUndoSize = function () {\n\t\treturn this.index + 1;\n\t};\n\n\tHistory.prototype.getHistoryRedoSize = function () {\n\t\treturn this.history.length - (this.index + 1);\n\t};\n\n\tHistory.prototype.undo = function () {\n\n\t\tif (this.index > -1) {\n\t\t\tvar action = this.history[this.index];\n\n\t\t\tthis.undoers[action.type].call(this, action);\n\n\t\t\tthis.index--;\n\n\t\t\tthis.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tHistory.prototype.redo = function () {\n\t\tif (this.history.length - 1 > this.index) {\n\n\t\t\tthis.index++;\n\n\t\t\tvar action = this.history[this.index];\n\n\t\t\tthis.redoers[action.type].call(this, action);\n\n\t\t\tthis.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data);\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tHistory.prototype.undoers = {\n\t\tcellEdit: function cellEdit(action) {\n\t\t\taction.component.setValueProcessData(action.data.oldValue);\n\t\t},\n\n\t\trowAdd: function rowAdd(action) {\n\t\t\taction.component.deleteActual();\n\t\t},\n\n\t\trowDelete: function rowDelete(action) {\n\t\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t\t}\n\n\t\t\tthis._rebindRow(action.component, newRow);\n\t\t},\n\n\t\trowMove: function rowMove(action) {\n\t\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\n\t\t\tthis.table.rowManager.redraw();\n\t\t}\n\t};\n\n\tHistory.prototype.redoers = {\n\t\tcellEdit: function cellEdit(action) {\n\t\t\taction.component.setValueProcessData(action.data.newValue);\n\t\t},\n\n\t\trowAdd: function rowAdd(action) {\n\t\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\n\n\t\t\tif (this.table.options.groupBy && this.table.modExists(\"groupRows\")) {\n\t\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\n\t\t\t}\n\n\t\t\tthis._rebindRow(action.component, newRow);\n\t\t},\n\n\t\trowDelete: function rowDelete(action) {\n\t\t\taction.component.deleteActual();\n\t\t},\n\n\t\trowMove: function rowMove(action) {\n\t\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\n\t\t\tthis.table.rowManager.redraw();\n\t\t}\n\t};\n\n\t//rebind rows to new element after deletion\n\tHistory.prototype._rebindRow = function (oldRow, newRow) {\n\t\tthis.history.forEach(function (action) {\n\t\t\tif (action.component instanceof Row) {\n\t\t\t\tif (action.component === oldRow) {\n\t\t\t\t\taction.component = newRow;\n\t\t\t\t}\n\t\t\t} else if (action.component instanceof Cell) {\n\t\t\t\tif (action.component.row === oldRow) {\n\t\t\t\t\tvar field = action.component.column.getField();\n\n\t\t\t\t\tif (field) {\n\t\t\t\t\t\taction.component = newRow.getCell(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\tTabulator.prototype.registerModule(\"history\", History);\n\tvar HtmlTableImport = function HtmlTableImport(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.fieldIndex = [];\n\t\tthis.hasIndex = false;\n\t};\n\n\tHtmlTableImport.prototype.parseTable = function () {\n\t\tvar self = this,\n\t\t element = self.table.element,\n\t\t options = self.table.options,\n\t\t columns = options.columns,\n\t\t headers = element.getElementsByTagName(\"th\"),\n\t\t rows = element.getElementsByTagName(\"tbody\")[0],\n\t\t data = [],\n\t\t newTable;\n\n\t\tself.hasIndex = false;\n\n\t\tself.table.options.htmlImporting.call(this.table);\n\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\n\n\t\t//check for tablator inline options\n\t\tself._extractOptions(element, options);\n\n\t\tif (headers.length) {\n\t\t\tself._extractHeaders(headers, rows);\n\t\t} else {\n\t\t\tself._generateBlankHeaders(headers, rows);\n\t\t}\n\n\t\t//iterate through table rows and build data set\n\t\tfor (var index = 0; index < rows.length; index++) {\n\t\t\tvar row = rows[index],\n\t\t\t cells = row.getElementsByTagName(\"td\"),\n\t\t\t item = {};\n\n\t\t\t//create index if the dont exist in table\n\t\t\tif (!self.hasIndex) {\n\t\t\t\titem[options.index] = index;\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < cells.length; i++) {\n\t\t\t\tvar cell = cells[i];\n\t\t\t\tif (typeof this.fieldIndex[i] !== \"undefined\") {\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//add row data to item\n\t\t\tdata.push(item);\n\t\t}\n\n\t\t//create new element\n\t\tvar newElement = document.createElement(\"div\");\n\n\t\t//transfer attributes to new element\n\t\tvar attributes = element.attributes;\n\n\t\t// loop through attributes and apply them on div\n\n\t\tfor (var i in attributes) {\n\t\t\tif (_typeof(attributes[i]) == \"object\") {\n\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\n\t\t\t}\n\t\t}\n\n\t\t// replace table with div element\n\t\telement.parentNode.replaceChild(newElement, element);\n\n\t\toptions.data = data;\n\n\t\tself.table.options.htmlImported.call(this.table);\n\n\t\t// // newElement.tabulator(options);\n\n\t\tthis.table.element = newElement;\n\t};\n\n\t//extract tabulator attribute options\n\tHtmlTableImport.prototype._extractOptions = function (element, options, defaultOptions) {\n\t\tvar attributes = element.attributes;\n\t\tvar optionsArr = defaultOptions ? Object.assign([], defaultOptions) : Object.keys(options);\n\t\tvar optionsList = {};\n\n\t\toptionsArr.forEach(function (item) {\n\t\t\toptionsList[item.toLowerCase()] = item;\n\t\t});\n\n\t\tfor (var index in attributes) {\n\t\t\tvar attrib = attributes[index];\n\t\t\tvar name;\n\n\t\t\tif (attrib && (typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0) {\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\n\n\t\t\t\tif (typeof optionsList[name] !== \"undefined\") {\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t//get value of attribute\n\tHtmlTableImport.prototype._attribValue = function (value) {\n\t\tif (value === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\t//find column if it has already been defined\n\tHtmlTableImport.prototype._findCol = function (title) {\n\t\tvar match = this.table.options.columns.find(function (column) {\n\t\t\treturn column.title === title;\n\t\t});\n\n\t\treturn match || false;\n\t};\n\n\t//extract column from headers\n\tHtmlTableImport.prototype._extractHeaders = function (headers, rows) {\n\t\tfor (var index = 0; index < headers.length; index++) {\n\t\t\tvar header = headers[index],\n\t\t\t exists = false,\n\t\t\t col = this._findCol(header.textContent),\n\t\t\t width,\n\t\t\t attributes;\n\n\t\t\tif (col) {\n\t\t\t\texists = true;\n\t\t\t} else {\n\t\t\t\tcol = { title: header.textContent.trim() };\n\t\t\t}\n\n\t\t\tif (!col.field) {\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\n\t\t\t}\n\n\t\t\twidth = header.getAttribute(\"width\");\n\n\t\t\tif (width && !col.width) {\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\t//check for tablator inline options\n\t\t\tattributes = header.attributes;\n\n\t\t\t// //check for tablator inline options\n\t\t\tthis._extractOptions(header, col, Column.prototype.defaultOptionList);\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tif (col.field == this.table.options.index) {\n\t\t\t\tthis.hasIndex = true;\n\t\t\t}\n\n\t\t\tif (!exists) {\n\t\t\t\tthis.table.options.columns.push(col);\n\t\t\t}\n\t\t}\n\t};\n\n\t//generate blank headers\n\tHtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) {\n\t\tfor (var index = 0; index < headers.length; index++) {\n\t\t\tvar header = headers[index],\n\t\t\t col = { title: \"\", field: \"col\" + index };\n\n\t\t\tthis.fieldIndex[index] = col.field;\n\n\t\t\tvar width = header.getAttribute(\"width\");\n\n\t\t\tif (width) {\n\t\t\t\tcol.width = width;\n\t\t\t}\n\n\t\t\tthis.table.options.columns.push(col);\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"htmlTableImport\", HtmlTableImport);\n\tvar Keybindings = function Keybindings(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.watchKeys = null;\n\t\tthis.pressedKeys = null;\n\t\tthis.keyupBinding = false;\n\t\tthis.keydownBinding = false;\n\t};\n\n\tKeybindings.prototype.initialize = function () {\n\t\tvar bindings = this.table.options.keybindings,\n\t\t mergedBindings = {};\n\n\t\tthis.watchKeys = {};\n\t\tthis.pressedKeys = [];\n\n\t\tif (bindings !== false) {\n\n\t\t\tfor (var key in this.bindings) {\n\t\t\t\tmergedBindings[key] = this.bindings[key];\n\t\t\t}\n\n\t\t\tif (Object.keys(bindings).length) {\n\n\t\t\t\tfor (var _key in bindings) {\n\t\t\t\t\tmergedBindings[_key] = bindings[_key];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.mapBindings(mergedBindings);\n\t\t\tthis.bindEvents();\n\t\t}\n\t};\n\n\tKeybindings.prototype.mapBindings = function (bindings) {\n\t\tvar _this57 = this;\n\n\t\tvar self = this;\n\n\t\tvar _loop2 = function _loop2(key) {\n\n\t\t\tif (_this57.actions[key]) {\n\n\t\t\t\tif (bindings[key]) {\n\n\t\t\t\t\tif (_typeof(bindings[key]) !== \"object\") {\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\n\t\t\t\t\t}\n\n\t\t\t\t\tbindings[key].forEach(function (binding) {\n\t\t\t\t\t\tself.mapBinding(key, binding);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\n\t\t\t}\n\t\t};\n\n\t\tfor (var key in bindings) {\n\t\t\t_loop2(key);\n\t\t}\n\t};\n\n\tKeybindings.prototype.mapBinding = function (action, symbolsList) {\n\t\tvar self = this;\n\n\t\tvar binding = {\n\t\t\taction: this.actions[action],\n\t\t\tkeys: [],\n\t\t\tctrl: false,\n\t\t\tshift: false,\n\t\t\tmeta: false\n\t\t};\n\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\n\n\t\tsymbols.forEach(function (symbol) {\n\t\t\tswitch (symbol) {\n\t\t\t\tcase \"ctrl\":\n\t\t\t\t\tbinding.ctrl = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"shift\":\n\t\t\t\t\tbinding.shift = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"meta\":\n\t\t\t\t\tbinding.meta = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tsymbol = parseInt(symbol);\n\t\t\t\t\tbinding.keys.push(symbol);\n\n\t\t\t\t\tif (!self.watchKeys[symbol]) {\n\t\t\t\t\t\tself.watchKeys[symbol] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tself.watchKeys[symbol].push(binding);\n\t\t\t}\n\t\t});\n\t};\n\n\tKeybindings.prototype.bindEvents = function () {\n\t\tvar self = this;\n\n\t\tthis.keyupBinding = function (e) {\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif (bindings) {\n\n\t\t\t\tself.pressedKeys.push(code);\n\n\t\t\t\tbindings.forEach(function (binding) {\n\t\t\t\t\tself.checkBinding(e, binding);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tthis.keydownBinding = function (e) {\n\t\t\tvar code = e.keyCode;\n\t\t\tvar bindings = self.watchKeys[code];\n\n\t\t\tif (bindings) {\n\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\n\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\n\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\n\t};\n\n\tKeybindings.prototype.clearBindings = function () {\n\t\tif (this.keyupBinding) {\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\n\t\t}\n\n\t\tif (this.keydownBinding) {\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\n\t\t}\n\t};\n\n\tKeybindings.prototype.checkBinding = function (e, binding) {\n\t\tvar self = this,\n\t\t match = true;\n\n\t\tif (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta) {\n\t\t\tbinding.keys.forEach(function (key) {\n\t\t\t\tvar index = self.pressedKeys.indexOf(key);\n\n\t\t\t\tif (index == -1) {\n\t\t\t\t\tmatch = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (match) {\n\t\t\t\tbinding.action.call(self, e);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\t//default bindings\n\tKeybindings.prototype.bindings = {\n\t\tnavPrev: \"shift + 9\",\n\t\tnavNext: 9,\n\t\tnavUp: 38,\n\t\tnavDown: 40,\n\t\tscrollPageUp: 33,\n\t\tscrollPageDown: 34,\n\t\tscrollToStart: 36,\n\t\tscrollToEnd: 35,\n\t\tundo: \"ctrl + 90\",\n\t\tredo: \"ctrl + 89\",\n\t\tcopyToClipboard: \"ctrl + 67\"\n\t};\n\n\t//default actions\n\tKeybindings.prototype.actions = {\n\t\tkeyBlock: function keyBlock(e) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t},\n\t\tscrollPageUp: function scrollPageUp(e) {\n\t\t\tvar rowManager = this.table.rowManager,\n\t\t\t newPos = rowManager.scrollTop - rowManager.height,\n\t\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\t\te.preventDefault();\n\n\t\t\tif (rowManager.displayRowsCount) {\n\t\t\t\tif (newPos >= 0) {\n\t\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t\t} else {\n\t\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.table.element.focus();\n\t\t},\n\t\tscrollPageDown: function scrollPageDown(e) {\n\t\t\tvar rowManager = this.table.rowManager,\n\t\t\t newPos = rowManager.scrollTop + rowManager.height,\n\t\t\t scrollMax = rowManager.element.scrollHeight;\n\n\t\t\te.preventDefault();\n\n\t\t\tif (rowManager.displayRowsCount) {\n\t\t\t\tif (newPos <= scrollMax) {\n\t\t\t\t\trowManager.element.scrollTop = newPos;\n\t\t\t\t} else {\n\t\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.table.element.focus();\n\t\t},\n\t\tscrollToStart: function scrollToStart(e) {\n\t\t\tvar rowManager = this.table.rowManager;\n\n\t\t\te.preventDefault();\n\n\t\t\tif (rowManager.displayRowsCount) {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\n\t\t\t}\n\n\t\t\tthis.table.element.focus();\n\t\t},\n\t\tscrollToEnd: function scrollToEnd(e) {\n\t\t\tvar rowManager = this.table.rowManager;\n\n\t\t\te.preventDefault();\n\n\t\t\tif (rowManager.displayRowsCount) {\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\n\t\t\t}\n\n\t\t\tthis.table.element.focus();\n\t\t},\n\t\tnavPrev: function navPrev(e) {\n\t\t\tvar cell = false;\n\n\t\t\tif (this.table.modExists(\"edit\")) {\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (cell) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcell.nav().prev();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tnavNext: function navNext(e) {\n\t\t\tvar cell = false;\n\t\t\tvar newRow = this.table.options.tabEndNewRow;\n\t\t\tvar nav;\n\n\t\t\tif (this.table.modExists(\"edit\")) {\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (cell) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tnav = cell.nav();\n\n\t\t\t\t\tif (!nav.next()) {\n\t\t\t\t\t\tif (newRow) {\n\n\t\t\t\t\t\t\tcell.getElement().firstChild.blur();\n\n\t\t\t\t\t\t\tif (newRow === true) {\n\t\t\t\t\t\t\t\tnewRow = this.table.addRow({});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (typeof newRow == \"function\") {\n\t\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tnewRow.then(function () {\n\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\tnav.next();\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tnavLeft: function navLeft(e) {\n\t\t\tvar cell = false;\n\n\t\t\tif (this.table.modExists(\"edit\")) {\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (cell) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcell.nav().left();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tnavRight: function navRight(e) {\n\t\t\tvar cell = false;\n\n\t\t\tif (this.table.modExists(\"edit\")) {\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (cell) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcell.nav().right();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tnavUp: function navUp(e) {\n\t\t\tvar cell = false;\n\n\t\t\tif (this.table.modExists(\"edit\")) {\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (cell) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcell.nav().up();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tnavDown: function navDown(e) {\n\t\t\tvar cell = false;\n\n\t\t\tif (this.table.modExists(\"edit\")) {\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (cell) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tcell.nav().down();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tundo: function undo(e) {\n\t\t\tvar cell = false;\n\t\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (!cell) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.table.modules.history.undo();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tredo: function redo(e) {\n\t\t\tvar cell = false;\n\t\t\tif (this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")) {\n\n\t\t\t\tcell = this.table.modules.edit.currentCell;\n\n\t\t\t\tif (!cell) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tthis.table.modules.history.redo();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tcopyToClipboard: function copyToClipboard(e) {\n\t\t\tif (!this.table.modules.edit.currentCell) {\n\t\t\t\tif (this.table.modExists(\"clipboard\", true)) {\n\t\t\t\t\tthis.table.modules.clipboard.copy(false, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"keybindings\", Keybindings);\n\tvar Menu = function Menu(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.menuEl = false;\n\t\tthis.blurEvent = this.hideMenu.bind(this);\n\t};\n\n\tMenu.prototype.initializeColumnHeader = function (column) {\n\t\tvar _this58 = this;\n\n\t\tvar headerMenuEl;\n\n\t\tif (column.definition.headerContextMenu) {\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", function (e) {\n\t\t\t\tvar menu = typeof column.definition.headerContextMenu == \"function\" ? column.definition.headerContextMenu() : column.definition.headerContextMenu;\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\t_this58.loadMenu(e, column, menu);\n\t\t\t});\n\t\t}\n\n\t\tif (column.definition.headerMenu) {\n\n\t\t\theaderMenuEl = document.createElement(\"span\");\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\n\n\t\t\theaderMenuEl.addEventListener(\"click\", function (e) {\n\t\t\t\tvar menu = typeof column.definition.headerMenu == \"function\" ? column.definition.headerMenu() : column.definition.headerMenu;\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\n\t\t\t\t_this58.loadMenu(e, column, menu);\n\t\t\t});\n\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\n\t\t}\n\t};\n\n\tMenu.prototype.initializeCell = function (cell) {\n\t\tvar _this59 = this;\n\n\t\tcell.getElement().addEventListener(\"contextmenu\", function (e) {\n\t\t\tvar menu = typeof cell.column.definition.contextMenu == \"function\" ? cell.column.definition.contextMenu() : cell.column.definition.contextMenu;\n\n\t\t\te.preventDefault();\n\n\t\t\t_this59.loadMenu(e, cell, menu);\n\t\t});\n\t};\n\n\tMenu.prototype.initializeRow = function (row) {\n\t\tvar _this60 = this;\n\n\t\trow.getElement().addEventListener(\"contextmenu\", function (e) {\n\t\t\tvar menu = typeof _this60.table.options.rowContextMenu == \"function\" ? _this60.table.options.rowContextMenu() : _this60.table.options.rowContextMenu;\n\n\t\t\te.preventDefault();\n\n\t\t\t_this60.loadMenu(e, row, menu);\n\t\t});\n\t};\n\n\tMenu.prototype.loadMenu = function (e, component, menu) {\n\t\tvar _this61 = this;\n\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight);\n\n\t\t//abort if no menu set\n\t\tif (!menu || !menu.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.hideMenu();\n\n\t\tthis.menuEl = document.createElement(\"div\");\n\t\tthis.menuEl.classList.add(\"tabulator-menu\");\n\n\t\tmenu.forEach(function (item) {\n\t\t\tvar itemEl = document.createElement(\"div\");\n\t\t\tvar label = item.label;\n\t\t\tvar disabled = item.disabled;\n\n\t\t\tif (item.separator) {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\n\t\t\t} else {\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\n\n\t\t\t\tif (typeof label == \"function\") {\n\t\t\t\t\tlabel = label(component.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (label instanceof Node) {\n\t\t\t\t\titemEl.appendChild(label);\n\t\t\t\t} else {\n\t\t\t\t\titemEl.innerHTML = label;\n\t\t\t\t}\n\n\t\t\t\tif (typeof disabled == \"function\") {\n\t\t\t\t\tdisabled = disabled(component.getComponent());\n\t\t\t\t}\n\n\t\t\t\tif (disabled) {\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\n\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\titemEl.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\t_this61.hideMenu();\n\t\t\t\t\t\titem.action(e, component.getComponent());\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_this61.menuEl.appendChild(itemEl);\n\t\t});\n\n\t\tthis.menuEl.style.top = e.pageY + \"px\";\n\t\tthis.menuEl.style.left = e.pageX + \"px\";\n\n\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\n\n\t\tsetTimeout(function () {\n\t\t\tdocument.body.addEventListener(\"contextmenu\", _this61.blurEvent);\n\t\t}, 100);\n\n\t\tdocument.body.appendChild(this.menuEl);\n\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\n\t\tif (e.pageX + this.menuEl.offsetWidth >= document.body.offsetWidth) {\n\t\t\tthis.menuEl.style.left = \"\";\n\t\t\tthis.menuEl.style.right = document.body.offsetWidth - e.pageX + \"px\";\n\t\t}\n\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\n\t\tif (e.pageY + this.menuEl.offsetHeight >= docHeight) {\n\t\t\tthis.menuEl.style.top = \"\";\n\t\t\tthis.menuEl.style.bottom = docHeight - e.pageY + \"px\";\n\t\t}\n\t};\n\n\tMenu.prototype.hideMenu = function () {\n\t\tif (this.menuEl.parentNode) {\n\t\t\tthis.menuEl.parentNode.removeChild(this.menuEl);\n\t\t}\n\n\t\tif (this.blurEvent) {\n\t\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\n\t\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\n\t\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\n\t\t}\n\t};\n\n\t//default accessors\n\tMenu.prototype.menus = {};\n\n\tTabulator.prototype.registerModule(\"menu\", Menu);\n\tvar MoveColumns = function MoveColumns(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating column header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving column\n\t\tthis.toCol = false; //destination column\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\n\t\tthis.startX = 0; //starting position within header element\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\n\t\tthis.touchMove = false;\n\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t};\n\n\tMoveColumns.prototype.createPlaceholderElement = function () {\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-col\");\n\t\tel.classList.add(\"tabulator-col-placeholder\");\n\n\t\treturn el;\n\t};\n\n\tMoveColumns.prototype.initializeColumn = function (column) {\n\t\tvar self = this,\n\t\t config = {},\n\t\t colEl;\n\n\t\tif (!column.modules.frozen) {\n\n\t\t\tcolEl = column.getElement();\n\n\t\t\tconfig.mousemove = function (e) {\n\t\t\t\tif (column.parent === self.moving.parent) {\n\t\t\t\t\tif ((self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) {\n\t\t\t\t\t\tif (self.toCol !== column || !self.toColAfter) {\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\n\t\t\t\t\t\t\tself.moveColumn(column, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (self.toCol !== column || self.toColAfter) {\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\n\t\t\t\t\t\t\tself.moveColumn(column, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(self);\n\n\t\t\tcolEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\tself.touchMove = false;\n\t\t\t\tif (e.which === 1) {\n\t\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\t\tself.startMove(e, column);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcolEl.addEventListener(\"mouseup\", function (e) {\n\t\t\t\tif (e.which === 1) {\n\t\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.bindTouchEvents(column);\n\t\t}\n\n\t\tcolumn.modules.moveColumn = config;\n\t};\n\n\tMoveColumns.prototype.bindTouchEvents = function (column) {\n\t\tvar self = this,\n\t\t colEl = column.getElement(),\n\t\t startXMove = false,\n\t\t //shifting center position of the cell\n\t\tdir = false,\n\t\t currentCol,\n\t\t nextCol,\n\t\t prevCol,\n\t\t nextColWidth,\n\t\t prevColWidth,\n\t\t nextColWidthLast,\n\t\t prevColWidthLast;\n\n\t\tcolEl.addEventListener(\"touchstart\", function (e) {\n\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\tself.touchMove = true;\n\t\t\t\tcurrentCol = column;\n\t\t\t\tnextCol = column.nextColumn();\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\tprevCol = column.prevColumn();\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t\tnextColWidthLast = 0;\n\t\t\t\tprevColWidthLast = 0;\n\t\t\t\tstartXMove = false;\n\n\t\t\t\tself.startMove(e, column);\n\t\t\t}, self.checkPeriod);\n\t\t}, { passive: true });\n\n\t\tcolEl.addEventListener(\"touchmove\", function (e) {\n\t\t\tvar halfCol, diff, moveToCol;\n\n\t\t\tif (self.moving) {\n\t\t\t\tself.moveHover(e);\n\n\t\t\t\tif (!startXMove) {\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t}\n\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\n\n\t\t\t\tif (diff > 0) {\n\t\t\t\t\tif (nextCol && diff - nextColWidthLast > nextColWidth) {\n\t\t\t\t\t\tmoveToCol = nextCol;\n\n\t\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement().nextSibling);\n\t\t\t\t\t\t\tself.moveColumn(moveToCol, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (prevCol && -diff - prevColWidthLast > prevColWidth) {\n\t\t\t\t\t\tmoveToCol = prevCol;\n\n\t\t\t\t\t\tif (moveToCol !== column) {\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(self.placeholderElement, moveToCol.getElement());\n\t\t\t\t\t\t\tself.moveColumn(moveToCol, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (moveToCol) {\n\t\t\t\t\tcurrentCol = moveToCol;\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\n\t\t\t\t\tnextColWidthLast = nextColWidth;\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\n\t\t\t\t\tprevColWidthLast = prevColWidth;\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}, { passive: true });\n\n\t\tcolEl.addEventListener(\"touchend\", function (e) {\n\t\t\tif (self.checkTimeout) {\n\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t}\n\t\t\tif (self.moving) {\n\t\t\t\tself.endMove(e);\n\t\t\t}\n\t\t});\n\t};\n\n\tMoveColumns.prototype.startMove = function (e, column) {\n\t\tvar element = column.getElement();\n\n\t\tthis.moving = column;\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(element).left;\n\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\n\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\telement.parentNode.removeChild(element);\n\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\n\n\t\tthis.hoverElement.style.left = \"0\";\n\t\tthis.hoverElement.style.bottom = \"0\";\n\n\t\tif (!this.touchMove) {\n\t\t\tthis._bindMouseMove();\n\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\t\t}\n\n\t\tthis.moveHover(e);\n\t};\n\n\tMoveColumns.prototype._bindMouseMove = function () {\n\t\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t};\n\n\tMoveColumns.prototype._unbindMouseMove = function () {\n\t\tthis.table.columnManager.columnsByIndex.forEach(function (column) {\n\t\t\tif (column.modules.moveColumn.mousemove) {\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\n\t\t\t}\n\t\t});\n\t};\n\n\tMoveColumns.prototype.moveColumn = function (column, after) {\n\t\tvar movingCells = this.moving.getCells();\n\n\t\tthis.toCol = column;\n\t\tthis.toColAfter = after;\n\n\t\tif (after) {\n\t\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\t\tvar cellEl = cell.getElement();\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\n\t\t\t});\n\t\t} else {\n\t\t\tcolumn.getCells().forEach(function (cell, i) {\n\t\t\t\tvar cellEl = cell.getElement();\n\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\n\t\t\t});\n\t\t}\n\t};\n\n\tMoveColumns.prototype.endMove = function (e) {\n\t\tif (e.which === 1 || this.touchMove) {\n\t\t\tthis._unbindMouseMove();\n\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif (this.toCol) {\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\n\t\t\t}\n\n\t\t\tthis.moving = false;\n\t\t\tthis.toCol = false;\n\t\t\tthis.toColAfter = false;\n\n\t\t\tif (!this.touchMove) {\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\t\t\t}\n\t\t}\n\t};\n\n\tMoveColumns.prototype.moveHover = function (e) {\n\t\tvar self = this,\n\t\t columnHolder = self.table.columnManager.getElement(),\n\t\t scrollLeft = columnHolder.scrollLeft,\n\t\t xPos = (self.touchMove ? e.touches[0].pageX : e.pageX) - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft,\n\t\t scrollPos;\n\n\t\tself.hoverElement.style.left = xPos - self.startX + \"px\";\n\n\t\tif (xPos - scrollLeft < self.autoScrollMargin) {\n\t\t\tif (!self.autoScrollTimeout) {\n\t\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\t\tscrollPos = Math.max(0, scrollLeft - 5);\n\t\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) {\n\t\t\tif (!self.autoScrollTimeout) {\n\t\t\t\tself.autoScrollTimeout = setTimeout(function () {\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5);\n\t\t\t\t\tself.table.rowManager.getElement().scrollLeft = scrollPos;\n\t\t\t\t\tself.autoScrollTimeout = false;\n\t\t\t\t}, 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"moveColumn\", MoveColumns);\n\n\tvar MoveRows = function MoveRows(table) {\n\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.placeholderElement = this.createPlaceholderElement();\n\t\tthis.hoverElement = false; //floating row header element\n\t\tthis.checkTimeout = false; //click check timeout holder\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\n\t\tthis.moving = false; //currently moving row\n\t\tthis.toRow = false; //destination row\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\n\t\tthis.startY = 0; //starting Y position within header element\n\t\tthis.startX = 0; //starting X position within header element\n\n\t\tthis.moveHover = this.moveHover.bind(this);\n\t\tthis.endMove = this.endMove.bind(this);\n\t\tthis.tableRowDropEvent = false;\n\n\t\tthis.touchMove = false;\n\n\t\tthis.connection = false;\n\t\tthis.connections = [];\n\n\t\tthis.connectedTable = false;\n\t\tthis.connectedRow = false;\n\t};\n\n\tMoveRows.prototype.createPlaceholderElement = function () {\n\t\tvar el = document.createElement(\"div\");\n\n\t\tel.classList.add(\"tabulator-row\");\n\t\tel.classList.add(\"tabulator-row-placeholder\");\n\n\t\treturn el;\n\t};\n\n\tMoveRows.prototype.initialize = function (handle) {\n\t\tthis.connection = this.table.options.movableRowsConnectedTables;\n\t};\n\n\tMoveRows.prototype.setHandle = function (handle) {\n\t\tthis.hasHandle = handle;\n\t};\n\n\tMoveRows.prototype.initializeGroupHeader = function (group) {\n\t\tvar self = this,\n\t\t config = {},\n\t\t rowEl;\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function (e) {\n\t\t\tself.tableRowDrop(e, row);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function (e) {\n\t\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(group.element).top + self.table.rowManager.element.scrollTop > group.getHeight() / 2) {\n\t\t\t\tif (self.toRow !== group || !self.toRowAfter) {\n\t\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(group, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (self.toRow !== group || self.toRowAfter) {\n\t\t\t\t\tvar rowEl = group.getElement();\n\t\t\t\t\tif (rowEl.previousSibling) {\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\t\tself.moveRow(group, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tgroup.modules.moveRow = config;\n\t};\n\n\tMoveRows.prototype.initializeRow = function (row) {\n\t\tvar self = this,\n\t\t config = {},\n\t\t rowEl;\n\n\t\t//inter table drag drop\n\t\tconfig.mouseup = function (e) {\n\t\t\tself.tableRowDrop(e, row);\n\t\t}.bind(self);\n\n\t\t//same table drag drop\n\t\tconfig.mousemove = function (e) {\n\t\t\tif (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) {\n\t\t\t\tif (self.toRow !== row || !self.toRowAfter) {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\n\t\t\t\t\tself.moveRow(row, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (self.toRow !== row || self.toRowAfter) {\n\t\t\t\t\tvar rowEl = row.getElement();\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\n\t\t\t\t\tself.moveRow(row, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(self);\n\n\t\tif (!this.hasHandle) {\n\n\t\t\trowEl = row.getElement();\n\n\t\t\trowEl.addEventListener(\"mousedown\", function (e) {\n\t\t\t\tif (e.which === 1) {\n\t\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\t\tself.startMove(e, row);\n\t\t\t\t\t}, self.checkPeriod);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\trowEl.addEventListener(\"mouseup\", function (e) {\n\t\t\t\tif (e.which === 1) {\n\t\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.bindTouchEvents(row, row.getElement());\n\t\t}\n\n\t\trow.modules.moveRow = config;\n\t};\n\n\tMoveRows.prototype.initializeCell = function (cell) {\n\t\tvar self = this,\n\t\t cellEl = cell.getElement();\n\n\t\tcellEl.addEventListener(\"mousedown\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\t\tself.startMove(e, cell.row);\n\t\t\t\t}, self.checkPeriod);\n\t\t\t}\n\t\t});\n\n\t\tcellEl.addEventListener(\"mouseup\", function (e) {\n\t\t\tif (e.which === 1) {\n\t\t\t\tif (self.checkTimeout) {\n\t\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.bindTouchEvents(cell.row, cell.getElement());\n\t};\n\n\tMoveRows.prototype.bindTouchEvents = function (row, element) {\n\t\tvar self = this,\n\t\t startYMove = false,\n\t\t //shifting center position of the cell\n\t\tdir = false,\n\t\t currentRow,\n\t\t nextRow,\n\t\t prevRow,\n\t\t nextRowHeight,\n\t\t prevRowHeight,\n\t\t nextRowHeightLast,\n\t\t prevRowHeightLast;\n\n\t\telement.addEventListener(\"touchstart\", function (e) {\n\t\t\tself.checkTimeout = setTimeout(function () {\n\t\t\t\tself.touchMove = true;\n\t\t\t\tcurrentRow = row;\n\t\t\t\tnextRow = row.nextRow();\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\tprevRow = row.prevRow();\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t\tnextRowHeightLast = 0;\n\t\t\t\tprevRowHeightLast = 0;\n\t\t\t\tstartYMove = false;\n\n\t\t\t\tself.startMove(e, row);\n\t\t\t}, self.checkPeriod);\n\t\t}, { passive: true });\n\t\tthis.moving, this.toRow, this.toRowAfter;\n\t\telement.addEventListener(\"touchmove\", function (e) {\n\n\t\t\tvar halfCol, diff, moveToRow;\n\n\t\t\tif (self.moving) {\n\t\t\t\te.preventDefault();\n\n\t\t\t\tself.moveHover(e);\n\n\t\t\t\tif (!startYMove) {\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t}\n\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\n\n\t\t\t\tif (diff > 0) {\n\t\t\t\t\tif (nextRow && diff - nextRowHeightLast > nextRowHeight) {\n\t\t\t\t\t\tmoveToRow = nextRow;\n\n\t\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement().nextSibling);\n\t\t\t\t\t\t\tself.moveRow(moveToRow, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (prevRow && -diff - prevRowHeightLast > prevRowHeight) {\n\t\t\t\t\t\tmoveToRow = prevRow;\n\n\t\t\t\t\t\tif (moveToRow !== row) {\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(self.placeholderElement, moveToRow.getElement());\n\t\t\t\t\t\t\tself.moveRow(moveToRow, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (moveToRow) {\n\t\t\t\t\tcurrentRow = moveToRow;\n\t\t\t\t\tnextRow = moveToRow.nextRow();\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\n\t\t\t\t\tprevRow = moveToRow.prevRow();\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\telement.addEventListener(\"touchend\", function (e) {\n\t\t\tif (self.checkTimeout) {\n\t\t\t\tclearTimeout(self.checkTimeout);\n\t\t\t}\n\t\t\tif (self.moving) {\n\t\t\t\tself.endMove(e);\n\t\t\t\tself.touchMove = false;\n\t\t\t}\n\t\t});\n\t};\n\n\tMoveRows.prototype._bindMouseMove = function () {\n\t\tvar self = this;\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t};\n\n\tMoveRows.prototype._unbindMouseMove = function () {\n\t\tvar self = this;\n\n\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\tif ((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow.mousemove) {\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\n\t\t\t}\n\t\t});\n\t};\n\n\tMoveRows.prototype.startMove = function (e, row) {\n\t\tvar element = row.getElement();\n\n\t\tthis.setStartPosition(e, row);\n\n\t\tthis.moving = row;\n\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\n\n\t\t//create placeholder\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\n\n\t\tif (!this.connection) {\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\n\t\t\telement.parentNode.removeChild(element);\n\t\t} else {\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\n\t\t\tthis.connectToTables(row);\n\t\t}\n\n\t\t//create hover element\n\t\tthis.hoverElement = element.cloneNode(true);\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\n\n\t\tif (this.connection) {\n\t\t\tdocument.body.appendChild(this.hoverElement);\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\n\t\t} else {\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\n\n\t\t\tthis.hoverElement.style.left = \"0\";\n\t\t\tthis.hoverElement.style.top = \"0\";\n\n\t\t\tthis._bindMouseMove();\n\t\t}\n\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\n\n\t\tthis.moveHover(e);\n\t};\n\n\tMoveRows.prototype.setStartPosition = function (e, row) {\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\n\t\t pageY = this.touchMove ? e.touches[0].pageY : e.pageY,\n\t\t element,\n\t\t position;\n\n\t\telement = row.getElement();\n\t\tif (this.connection) {\n\t\t\tposition = element.getBoundingClientRect();\n\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\n\t\t} else {\n\t\t\tthis.startY = pageY - element.getBoundingClientRect().top;\n\t\t}\n\t};\n\n\tMoveRows.prototype.endMove = function (e) {\n\t\tif (!e || e.which === 1 || this.touchMove) {\n\t\t\tthis._unbindMouseMove();\n\n\t\t\tif (!this.connection) {\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\n\t\t\t}\n\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif (this.toRow) {\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\n\t\t\t}\n\n\t\t\tthis.moving = false;\n\t\t\tthis.toRow = false;\n\t\t\tthis.toRowAfter = false;\n\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\n\n\t\t\tif (this.connection) {\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\n\t\t\t\tthis.disconnectFromTables();\n\t\t\t}\n\t\t}\n\t};\n\n\tMoveRows.prototype.moveRow = function (row, after) {\n\t\tthis.toRow = row;\n\t\tthis.toRowAfter = after;\n\t};\n\n\tMoveRows.prototype.moveHover = function (e) {\n\t\tif (this.connection) {\n\t\t\tthis.moveHoverConnections.call(this, e);\n\t\t} else {\n\t\t\tthis.moveHoverTable.call(this, e);\n\t\t}\n\t};\n\n\tMoveRows.prototype.moveHoverTable = function (e) {\n\t\tvar rowHolder = this.table.rowManager.getElement(),\n\t\t scrollTop = rowHolder.scrollTop,\n\t\t yPos = (this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top + scrollTop,\n\t\t scrollPos;\n\n\t\tthis.hoverElement.style.top = yPos - this.startY + \"px\";\n\t};\n\n\tMoveRows.prototype.moveHoverConnections = function (e) {\n\t\tthis.hoverElement.style.left = this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX) + \"px\";\n\t\tthis.hoverElement.style.top = this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY) + \"px\";\n\t};\n\n\t//establish connection with other tables\n\tMoveRows.prototype.connectToTables = function (row) {\n\t\tvar self = this,\n\t\t connections = this.table.modules.comms.getConnections(this.connection);\n\n\t\tthis.table.options.movableRowsSendingStart.call(this.table, connections);\n\n\t\tthis.table.modules.comms.send(this.connection, \"moveRow\", \"connect\", {\n\t\t\trow: row\n\t\t});\n\t};\n\n\t//disconnect from other tables\n\tMoveRows.prototype.disconnectFromTables = function () {\n\t\tvar self = this,\n\t\t connections = this.table.modules.comms.getConnections(this.connection);\n\n\t\tthis.table.options.movableRowsSendingStop.call(this.table, connections);\n\n\t\tthis.table.modules.comms.send(this.connection, \"moveRow\", \"disconnect\");\n\t};\n\n\t//accept incomming connection\n\tMoveRows.prototype.connect = function (table, row) {\n\t\tvar self = this;\n\t\tif (!this.connectedTable) {\n\t\t\tthis.connectedTable = table;\n\t\t\tthis.connectedRow = row;\n\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\n\n\t\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.tableRowDropEvent = self.tableRowDrop.bind(self);\n\n\t\t\tself.table.element.addEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\t\tthis.table.options.movableRowsReceivingStart.call(this.table, row, table);\n\n\t\t\treturn true;\n\t\t} else {\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t//close incomming connection\n\tMoveRows.prototype.disconnect = function (table) {\n\t\tvar self = this;\n\t\tif (table === this.connectedTable) {\n\t\t\tthis.connectedTable = false;\n\t\t\tthis.connectedRow = false;\n\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\n\n\t\t\tself.table.rowManager.getDisplayRows().forEach(function (row) {\n\t\t\t\tif (row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup) {\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.table.element.removeEventListener(\"mouseup\", self.tableRowDropEvent);\n\n\t\t\tthis.table.options.movableRowsReceivingStop.call(this.table, table);\n\t\t} else {\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\");\n\t\t}\n\t};\n\n\tMoveRows.prototype.dropComplete = function (table, row, success) {\n\t\tvar sender = false;\n\n\t\tif (success) {\n\n\t\t\tswitch (_typeof(this.table.options.movableRowsSender)) {\n\t\t\t\tcase \"string\":\n\t\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"function\":\n\t\t\t\t\tsender = this.table.options.movableRowsSender;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (sender) {\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t\t} else {\n\t\t\t\tif (this.table.options.movableRowsSender) {\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t} else {\n\t\t\tthis.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table);\n\t\t}\n\n\t\tthis.endMove();\n\t};\n\n\tMoveRows.prototype.tableRowDrop = function (e, row) {\n\t\tvar receiver = false,\n\t\t success = false;\n\n\t\te.stopImmediatePropagation();\n\n\t\tswitch (_typeof(this.table.options.movableRowsReceiver)) {\n\t\t\tcase \"string\":\n\t\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\treceiver = this.table.options.movableRowsReceiver;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (receiver) {\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t} else {\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver);\n\t\t}\n\n\t\tif (success) {\n\t\t\tthis.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t} else {\n\t\t\tthis.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\n\t\t}\n\n\t\tthis.table.modules.comms.send(this.connectedTable, \"moveRow\", \"dropcomplete\", {\n\t\t\trow: row,\n\t\t\tsuccess: success\n\t\t});\n\t};\n\n\tMoveRows.prototype.receivers = {\n\t\tinsert: function insert(fromRow, toRow, fromTable) {\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\treturn true;\n\t\t},\n\n\t\tadd: function add(fromRow, toRow, fromTable) {\n\t\t\tthis.table.addRow(fromRow.getData());\n\t\t\treturn true;\n\t\t},\n\n\t\tupdate: function update(fromRow, toRow, fromTable) {\n\t\t\tif (toRow) {\n\t\t\t\ttoRow.update(fromRow.getData());\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\treplace: function replace(fromRow, toRow, fromTable) {\n\t\t\tif (toRow) {\n\t\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\n\t\t\t\ttoRow.delete();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tMoveRows.prototype.senders = {\n\t\tdelete: function _delete(fromRow, toRow, toTable) {\n\t\t\tfromRow.delete();\n\t\t}\n\t};\n\n\tMoveRows.prototype.commsReceived = function (table, action, data) {\n\t\tswitch (action) {\n\t\t\tcase \"connect\":\n\t\t\t\treturn this.connect(table, data.row);\n\t\t\t\tbreak;\n\n\t\t\tcase \"disconnect\":\n\t\t\t\treturn this.disconnect(table);\n\t\t\t\tbreak;\n\n\t\t\tcase \"dropcomplete\":\n\t\t\t\treturn this.dropComplete(table, data.row, data.success);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"moveRow\", MoveRows);\n\tvar Mutator = function Mutator(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\n\t\tthis.enabled = true;\n\t};\n\n\t//initialize column mutator\n\tMutator.prototype.initializeColumn = function (column) {\n\t\tvar self = this,\n\t\t match = false,\n\t\t config = {};\n\n\t\tthis.allowedTypes.forEach(function (type) {\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t\t mutator;\n\n\t\t\tif (column.definition[key]) {\n\t\t\t\tmutator = self.lookupMutator(column.definition[key]);\n\n\t\t\t\tif (mutator) {\n\t\t\t\t\tmatch = true;\n\n\t\t\t\t\tconfig[key] = {\n\t\t\t\t\t\tmutator: mutator,\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (match) {\n\t\t\tcolumn.modules.mutate = config;\n\t\t}\n\t};\n\n\tMutator.prototype.lookupMutator = function (value) {\n\t\tvar mutator = false;\n\n\t\t//set column mutator\n\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (this.mutators[value]) {\n\t\t\t\t\tmutator = this.mutators[value];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tmutator = value;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn mutator;\n\t};\n\n\t//apply mutator to row\n\tMutator.prototype.transformRow = function (data, type, updatedData) {\n\t\tvar self = this,\n\t\t key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\n\t\t value;\n\n\t\tif (this.enabled) {\n\n\t\t\tself.table.columnManager.traverse(function (column) {\n\t\t\t\tvar mutator, params, component;\n\n\t\t\t\tif (column.modules.mutate) {\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\n\n\t\t\t\t\tif (mutator) {\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\n\n\t\t\t\t\t\tif (type == \"data\" || typeof value !== \"undefined\") {\n\t\t\t\t\t\t\tcomponent = column.getComponent();\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn data;\n\t};\n\n\t//apply mutator to new cell value\n\tMutator.prototype.transformCell = function (cell, value) {\n\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\n\t\t tempData = {};\n\n\t\tif (mutator) {\n\t\t\ttempData = Object.assign(tempData, cell.row.getData());\n\t\t\tcell.column.setFieldValue(tempData, value);\n\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\n\t\t} else {\n\t\t\treturn value;\n\t\t}\n\t};\n\n\tMutator.prototype.enable = function () {\n\t\tthis.enabled = true;\n\t};\n\n\tMutator.prototype.disable = function () {\n\t\tthis.enabled = false;\n\t};\n\n\t//default mutators\n\tMutator.prototype.mutators = {};\n\n\tTabulator.prototype.registerModule(\"mutator\", Mutator);\n\tvar Page = function Page(table) {\n\n\t\tthis.table = table; //hold Tabulator object\n\n\t\tthis.mode = \"local\";\n\t\tthis.progressiveLoad = false;\n\n\t\tthis.size = 0;\n\t\tthis.page = 1;\n\t\tthis.count = 5;\n\t\tthis.max = 1;\n\n\t\tthis.displayIndex = 0; //index in display pipeline\n\n\t\tthis.initialLoad = true;\n\n\t\tthis.pageSizes = [];\n\n\t\tthis.dataReceivedNames = {};\n\t\tthis.dataSentNames = {};\n\n\t\tthis.createElements();\n\t};\n\n\tPage.prototype.createElements = function () {\n\n\t\tvar button;\n\n\t\tthis.element = document.createElement(\"span\");\n\t\tthis.element.classList.add(\"tabulator-paginator\");\n\n\t\tthis.pagesElement = document.createElement(\"span\");\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\n\n\t\tbutton = document.createElement(\"button\");\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"\");\n\t\tbutton.setAttribute(\"title\", \"\");\n\n\t\tthis.firstBut = button.cloneNode(true);\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\n\n\t\tthis.prevBut = button.cloneNode(true);\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\n\n\t\tthis.nextBut = button.cloneNode(true);\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\n\n\t\tthis.lastBut = button.cloneNode(true);\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\n\n\t\tif (this.table.options.paginationSizeSelector) {\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\n\t\t}\n\t};\n\n\tPage.prototype.generatePageSizeSelectList = function () {\n\t\tvar _this62 = this;\n\n\t\tvar pageSizes = [];\n\n\t\tif (this.pageSizeSelect) {\n\n\t\t\tif (Array.isArray(this.table.options.paginationSizeSelector)) {\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\n\t\t\t\tthis.pageSizes = pageSizes;\n\n\t\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\t\tpageSizes.unshift(this.size);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\tif (this.pageSizes.indexOf(this.size) == -1) {\n\t\t\t\t\tpageSizes = [];\n\n\t\t\t\t\tfor (var i = 1; i < 5; i++) {\n\t\t\t\t\t\tpageSizes.push(this.size * i);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.pageSizes = pageSizes;\n\t\t\t\t} else {\n\t\t\t\t\tpageSizes = this.pageSizes;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (this.pageSizeSelect.firstChild) {\n\t\t\t\tthis.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\n\t\t\t}pageSizes.forEach(function (item) {\n\t\t\t\tvar itemEl = document.createElement(\"option\");\n\t\t\t\titemEl.value = item;\n\t\t\t\titemEl.innerHTML = item;\n\n\t\t\t\t_this62.pageSizeSelect.appendChild(itemEl);\n\t\t\t});\n\n\t\t\tthis.pageSizeSelect.value = this.size;\n\t\t}\n\t};\n\n\t//setup pageination\n\tPage.prototype.initialize = function (hidden) {\n\t\tvar self = this,\n\t\t pageSelectLabel,\n\t\t testElRow,\n\t\t testElCell;\n\n\t\t//update param names\n\t\tthis.dataSentNames = Object.assign({}, this.paginationDataSentNames);\n\t\tthis.dataSentNames = Object.assign(this.dataSentNames, this.table.options.paginationDataSent);\n\n\t\tthis.dataReceivedNames = Object.assign({}, this.paginationDataReceivedNames);\n\t\tthis.dataReceivedNames = Object.assign(this.dataReceivedNames, this.table.options.paginationDataReceived);\n\n\t\t//build pagination element\n\n\t\t//bind localizations\n\t\tself.table.modules.localize.bind(\"pagination|first\", function (value) {\n\t\t\tself.firstBut.innerHTML = value;\n\t\t});\n\n\t\tself.table.modules.localize.bind(\"pagination|first_title\", function (value) {\n\t\t\tself.firstBut.setAttribute(\"aria-label\", value);\n\t\t\tself.firstBut.setAttribute(\"title\", value);\n\t\t});\n\n\t\tself.table.modules.localize.bind(\"pagination|prev\", function (value) {\n\t\t\tself.prevBut.innerHTML = value;\n\t\t});\n\n\t\tself.table.modules.localize.bind(\"pagination|prev_title\", function (value) {\n\t\t\tself.prevBut.setAttribute(\"aria-label\", value);\n\t\t\tself.prevBut.setAttribute(\"title\", value);\n\t\t});\n\n\t\tself.table.modules.localize.bind(\"pagination|next\", function (value) {\n\t\t\tself.nextBut.innerHTML = value;\n\t\t});\n\n\t\tself.table.modules.localize.bind(\"pagination|next_title\", function (value) {\n\t\t\tself.nextBut.setAttribute(\"aria-label\", value);\n\t\t\tself.nextBut.setAttribute(\"title\", value);\n\t\t});\n\n\t\tself.table.modules.localize.bind(\"pagination|last\", function (value) {\n\t\t\tself.lastBut.innerHTML = value;\n\t\t});\n\n\t\tself.table.modules.localize.bind(\"pagination|last_title\", function (value) {\n\t\t\tself.lastBut.setAttribute(\"aria-label\", value);\n\t\t\tself.lastBut.setAttribute(\"title\", value);\n\t\t});\n\n\t\t//click bindings\n\t\tself.firstBut.addEventListener(\"click\", function () {\n\t\t\tself.setPage(1);\n\t\t});\n\n\t\tself.prevBut.addEventListener(\"click\", function () {\n\t\t\tself.previousPage();\n\t\t});\n\n\t\tself.nextBut.addEventListener(\"click\", function () {\n\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t});\n\n\t\tself.lastBut.addEventListener(\"click\", function () {\n\t\t\tself.setPage(self.max);\n\t\t});\n\n\t\tif (self.table.options.paginationElement) {\n\t\t\tself.element = self.table.options.paginationElement;\n\t\t}\n\n\t\tif (this.pageSizeSelect) {\n\t\t\tpageSelectLabel = document.createElement(\"label\");\n\n\t\t\tself.table.modules.localize.bind(\"pagination|page_size\", function (value) {\n\t\t\t\tself.pageSizeSelect.setAttribute(\"aria-label\", value);\n\t\t\t\tself.pageSizeSelect.setAttribute(\"title\", value);\n\t\t\t\tpageSelectLabel.innerHTML = value;\n\t\t\t});\n\n\t\t\tself.element.appendChild(pageSelectLabel);\n\t\t\tself.element.appendChild(self.pageSizeSelect);\n\n\t\t\tself.pageSizeSelect.addEventListener(\"change\", function (e) {\n\t\t\t\tself.setPageSize(self.pageSizeSelect.value);\n\t\t\t\tself.setPage(1).then(function () {}).catch(function () {});\n\t\t\t});\n\t\t}\n\n\t\t//append to DOM\n\t\tself.element.appendChild(self.firstBut);\n\t\tself.element.appendChild(self.prevBut);\n\t\tself.element.appendChild(self.pagesElement);\n\t\tself.element.appendChild(self.nextBut);\n\t\tself.element.appendChild(self.lastBut);\n\n\t\tif (!self.table.options.paginationElement && !hidden) {\n\t\t\tself.table.footerManager.append(self.element, self);\n\t\t}\n\n\t\t//set default values\n\t\tself.mode = self.table.options.pagination;\n\n\t\tif (self.table.options.paginationSize) {\n\t\t\tself.size = self.table.options.paginationSize;\n\t\t} else {\n\t\t\ttestElRow = document.createElement(\"div\");\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\n\t\t\ttestElRow.style.visibility = hidden;\n\n\t\t\ttestElCell = document.createElement(\"div\");\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\n\n\t\t\ttestElRow.appendChild(testElCell);\n\n\t\t\tself.table.rowManager.getTableElement().appendChild(testElRow);\n\n\t\t\tself.size = Math.floor(self.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\n\n\t\t\tself.table.rowManager.getTableElement().removeChild(testElRow);\n\t\t}\n\n\t\t// self.page = self.table.options.paginationInitialPage || 1;\n\t\tself.count = self.table.options.paginationButtonCount;\n\n\t\tself.generatePageSizeSelectList();\n\t};\n\n\tPage.prototype.initializeProgressive = function (mode) {\n\t\tthis.initialize(true);\n\t\tthis.mode = \"progressive_\" + mode;\n\t\tthis.progressiveLoad = true;\n\t};\n\n\tPage.prototype.setDisplayIndex = function (index) {\n\t\tthis.displayIndex = index;\n\t};\n\n\tPage.prototype.getDisplayIndex = function () {\n\t\treturn this.displayIndex;\n\t};\n\n\t//calculate maximum page from number of rows\n\tPage.prototype.setMaxRows = function (rowCount) {\n\t\tif (!rowCount) {\n\t\t\tthis.max = 1;\n\t\t} else {\n\t\t\tthis.max = Math.ceil(rowCount / this.size);\n\t\t}\n\n\t\tif (this.page > this.max) {\n\t\t\tthis.page = this.max;\n\t\t}\n\t};\n\n\t//reset to first page without triggering action\n\tPage.prototype.reset = function (force, columnsChanged) {\n\t\tif (this.mode == \"local\" || force) {\n\t\t\tthis.page = 1;\n\t\t}\n\n\t\tif (columnsChanged) {\n\t\t\tthis.initialLoad = true;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\t//set the maxmum page\n\tPage.prototype.setMaxPage = function (max) {\n\n\t\tmax = parseInt(max);\n\n\t\tthis.max = max || 1;\n\n\t\tif (this.page > this.max) {\n\t\t\tthis.page = this.max;\n\t\t\tthis.trigger();\n\t\t}\n\t};\n\n\t//set current page number\n\tPage.prototype.setPage = function (page) {\n\t\tvar _this63 = this;\n\n\t\tvar self = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tpage = parseInt(page);\n\n\t\t\tif (page > 0 && page <= _this63.max) {\n\t\t\t\t_this63.page = page;\n\t\t\t\t_this63.trigger().then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\n\t\t\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.page) {\n\t\t\t\t\tself.table.modules.persistence.save(\"page\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + _this63.max + \":\", page);\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\tPage.prototype.setPageToRow = function (row) {\n\t\tvar _this64 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tvar rows = _this64.table.rowManager.getDisplayRows(_this64.displayIndex - 1);\n\t\t\tvar index = rows.indexOf(row);\n\n\t\t\tif (index > -1) {\n\t\t\t\tvar page = Math.ceil((index + 1) / _this64.size);\n\n\t\t\t\t_this64.setPage(page).then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\tPage.prototype.setPageSize = function (size) {\n\t\tsize = parseInt(size);\n\n\t\tif (size > 0) {\n\t\t\tthis.size = size;\n\t\t}\n\n\t\tif (this.pageSizeSelect) {\n\t\t\t// this.pageSizeSelect.value = size;\n\t\t\tthis.generatePageSizeSelectList();\n\t\t}\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.page) {\n\t\t\tthis.table.modules.persistence.save(\"page\");\n\t\t}\n\t};\n\n\t//setup the pagination buttons\n\tPage.prototype._setPageButtons = function () {\n\t\tvar self = this;\n\n\t\tvar leftSize = Math.floor((this.count - 1) / 2);\n\t\tvar rightSize = Math.ceil((this.count - 1) / 2);\n\t\tvar min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1);\n\t\tvar max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max);\n\n\t\twhile (self.pagesElement.firstChild) {\n\t\t\tself.pagesElement.removeChild(self.pagesElement.firstChild);\n\t\t}if (self.page == 1) {\n\t\t\tself.firstBut.disabled = true;\n\t\t\tself.prevBut.disabled = true;\n\t\t} else {\n\t\t\tself.firstBut.disabled = false;\n\t\t\tself.prevBut.disabled = false;\n\t\t}\n\n\t\tif (self.page == self.max) {\n\t\t\tself.lastBut.disabled = true;\n\t\t\tself.nextBut.disabled = true;\n\t\t} else {\n\t\t\tself.lastBut.disabled = false;\n\t\t\tself.nextBut.disabled = false;\n\t\t}\n\n\t\tfor (var i = min; i <= max; i++) {\n\t\t\tif (i > 0 && i <= self.max) {\n\t\t\t\tself.pagesElement.appendChild(self._generatePageButton(i));\n\t\t\t}\n\t\t}\n\n\t\tthis.footerRedraw();\n\t};\n\n\tPage.prototype._generatePageButton = function (page) {\n\t\tvar self = this,\n\t\t button = document.createElement(\"button\");\n\n\t\tbutton.classList.add(\"tabulator-page\");\n\t\tif (page == self.page) {\n\t\t\tbutton.classList.add(\"active\");\n\t\t}\n\n\t\tbutton.setAttribute(\"type\", \"button\");\n\t\tbutton.setAttribute(\"role\", \"button\");\n\t\tbutton.setAttribute(\"aria-label\", \"Show Page \" + page);\n\t\tbutton.setAttribute(\"title\", \"Show Page \" + page);\n\t\tbutton.setAttribute(\"data-page\", page);\n\t\tbutton.textContent = page;\n\n\t\tbutton.addEventListener(\"click\", function (e) {\n\t\t\tself.setPage(page);\n\t\t});\n\n\t\treturn button;\n\t};\n\n\t//previous page\n\tPage.prototype.previousPage = function () {\n\t\tvar _this65 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (_this65.page > 1) {\n\t\t\t\t_this65.page--;\n\t\t\t\t_this65.trigger().then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\n\t\t\t\tif (_this65.table.options.persistence && _this65.table.modExists(\"persistence\", true) && _this65.table.modules.persistence.config.page) {\n\t\t\t\t\t_this65.table.modules.persistence.save(\"page\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\t//next page\n\tPage.prototype.nextPage = function () {\n\t\tvar _this66 = this;\n\n\t\treturn new Promise(function (resolve, reject) {\n\t\t\tif (_this66.page < _this66.max) {\n\t\t\t\t_this66.page++;\n\t\t\t\t_this66.trigger().then(function () {\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch(function () {\n\t\t\t\t\treject();\n\t\t\t\t});\n\n\t\t\t\tif (_this66.table.options.persistence && _this66.table.modExists(\"persistence\", true) && _this66.table.modules.persistence.config.page) {\n\t\t\t\t\t_this66.table.modules.persistence.save(\"page\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!_this66.progressiveLoad) {\n\t\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + _this66.max + \":\", _this66.max + 1);\n\t\t\t\t}\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\t//return current page number\n\tPage.prototype.getPage = function () {\n\t\treturn this.page;\n\t};\n\n\t//return max page number\n\tPage.prototype.getPageMax = function () {\n\t\treturn this.max;\n\t};\n\n\tPage.prototype.getPageSize = function (size) {\n\t\treturn this.size;\n\t};\n\n\tPage.prototype.getMode = function () {\n\t\treturn this.mode;\n\t};\n\n\t//return appropriate rows for current page\n\tPage.prototype.getRows = function (data) {\n\t\tvar output, start, end;\n\n\t\tif (this.mode == \"local\") {\n\t\t\toutput = [];\n\t\t\tstart = this.size * (this.page - 1);\n\t\t\tend = start + parseInt(this.size);\n\n\t\t\tthis._setPageButtons();\n\n\t\t\tfor (var i = start; i < end; i++) {\n\t\t\t\tif (data[i]) {\n\t\t\t\t\toutput.push(data[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn output;\n\t\t} else {\n\n\t\t\tthis._setPageButtons();\n\n\t\t\treturn data.slice(0);\n\t\t}\n\t};\n\n\tPage.prototype.trigger = function () {\n\t\tvar _this67 = this;\n\n\t\tvar left;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tswitch (_this67.mode) {\n\t\t\t\tcase \"local\":\n\t\t\t\t\tleft = _this67.table.rowManager.scrollLeft;\n\n\t\t\t\t\t_this67.table.rowManager.refreshActiveData(\"page\");\n\t\t\t\t\t_this67.table.rowManager.scrollHorizontal(left);\n\n\t\t\t\t\t_this67.table.options.pageLoaded.call(_this67.table, _this67.getPage());\n\t\t\t\t\tresolve();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"remote\":\n\t\t\t\tcase \"progressive_load\":\n\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\t_this67.table.modules.ajax.blockActiveRequest();\n\t\t\t\t\t_this67._getRemotePage().then(function () {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}).catch(function () {\n\t\t\t\t\t\treject();\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", _this67.mode);\n\t\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t};\n\n\tPage.prototype._getRemotePage = function () {\n\t\tvar _this68 = this;\n\n\t\tvar self = this,\n\t\t oldParams,\n\t\t pageParams;\n\n\t\treturn new Promise(function (resolve, reject) {\n\n\t\t\tif (!self.table.modExists(\"ajax\", true)) {\n\t\t\t\treject();\n\t\t\t}\n\n\t\t\t//record old params and restore after request has been made\n\t\t\toldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {});\n\t\t\tpageParams = self.table.modules.ajax.getParams();\n\n\t\t\t//configure request params\n\t\t\tpageParams[_this68.dataSentNames.page] = self.page;\n\n\t\t\t//set page size if defined\n\t\t\tif (_this68.size) {\n\t\t\t\tpageParams[_this68.dataSentNames.size] = _this68.size;\n\t\t\t}\n\n\t\t\t//set sort data if defined\n\t\t\tif (_this68.table.options.ajaxSorting && _this68.table.modExists(\"sort\")) {\n\t\t\t\tvar sorters = self.table.modules.sort.getSort();\n\n\t\t\t\tsorters.forEach(function (item) {\n\t\t\t\t\tdelete item.column;\n\t\t\t\t});\n\n\t\t\t\tpageParams[_this68.dataSentNames.sorters] = sorters;\n\t\t\t}\n\n\t\t\t//set filter data if defined\n\t\t\tif (_this68.table.options.ajaxFiltering && _this68.table.modExists(\"filter\")) {\n\t\t\t\tvar filters = self.table.modules.filter.getFilters(true, true);\n\t\t\t\tpageParams[_this68.dataSentNames.filters] = filters;\n\t\t\t}\n\n\t\t\tself.table.modules.ajax.setParams(pageParams);\n\n\t\t\tself.table.modules.ajax.sendRequest(_this68.progressiveLoad).then(function (data) {\n\t\t\t\tself._parseRemoteData(data);\n\t\t\t\tresolve();\n\t\t\t}).catch(function (e) {\n\t\t\t\treject();\n\t\t\t});\n\n\t\t\tself.table.modules.ajax.setParams(oldParams);\n\t\t});\n\t};\n\n\tPage.prototype._parseRemoteData = function (data) {\n\t\tvar self = this,\n\t\t left,\n\t\t data,\n\t\t margin;\n\n\t\tif (typeof data[this.dataReceivedNames.last_page] === \"undefined\") {\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.last_page + \"' property\");\n\t\t}\n\n\t\tif (data[this.dataReceivedNames.data]) {\n\t\t\tthis.max = parseInt(data[this.dataReceivedNames.last_page]) || 1;\n\n\t\t\tif (this.progressiveLoad) {\n\t\t\t\tswitch (this.mode) {\n\t\t\t\t\tcase \"progressive_load\":\n\n\t\t\t\t\t\tif (this.page == 1) {\n\t\t\t\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.table.rowManager.addRows(data[this.dataReceivedNames.data]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (this.page < this.max) {\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t\t\t}, self.table.options.ajaxProgressiveLoadDelay);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"progressive_scroll\":\n\t\t\t\t\t\tdata = this.table.rowManager.getData().concat(data[this.dataReceivedNames.data]);\n\n\t\t\t\t\t\tthis.table.rowManager.setData(data, true, this.initialLoad && this.page == 1);\n\n\t\t\t\t\t\tmargin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2;\n\n\t\t\t\t\t\tif (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) {\n\t\t\t\t\t\t\tself.nextPage().then(function () {}).catch(function () {});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tleft = this.table.rowManager.scrollLeft;\n\n\t\t\t\tthis.table.rowManager.setData(data[this.dataReceivedNames.data], false, this.initialLoad && this.page == 1);\n\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\n\n\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\n\n\t\t\t\tthis.table.options.pageLoaded.call(this.table, this.getPage());\n\t\t\t}\n\n\t\t\tthis.initialLoad = false;\n\t\t} else {\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + this.dataReceivedNames.data + \"' property\");\n\t\t}\n\t};\n\n\t//handle the footer element being redrawn\n\tPage.prototype.footerRedraw = function () {\n\t\tvar footer = this.table.footerManager.element;\n\n\t\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\t\tthis.pagesElement.style.display = 'none';\n\t\t} else {\n\t\t\tthis.pagesElement.style.display = '';\n\n\t\t\tif (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) {\n\t\t\t\tthis.pagesElement.style.display = 'none';\n\t\t\t}\n\t\t}\n\t};\n\n\t//set the paramter names for pagination requests\n\tPage.prototype.paginationDataSentNames = {\n\t\t\"page\": \"page\",\n\t\t\"size\": \"size\",\n\t\t\"sorters\": \"sorters\",\n\t\t// \"sort_dir\":\"sort_dir\",\n\t\t\"filters\": \"filters\"\n\t\t// \"filter_value\":\"filter_value\",\n\t\t// \"filter_type\":\"filter_type\",\n\t};\n\n\t//set the property names for pagination responses\n\tPage.prototype.paginationDataReceivedNames = {\n\t\t\"current_page\": \"current_page\",\n\t\t\"last_page\": \"last_page\",\n\t\t\"data\": \"data\"\n\t};\n\n\tTabulator.prototype.registerModule(\"page\", Page);\n\n\tvar Persistence = function Persistence(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.mode = \"\";\n\t\tthis.id = \"\";\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\n\t\tthis.defWatcherBlock = false;\n\t\tthis.config = {};\n\t\tthis.readFunc = false;\n\t\tthis.writeFunc = false;\n\t};\n\n\t// Test for whether localStorage is available for use.\n\tPersistence.prototype.localStorageTest = function () {\n\t\tvar testKey = \"_tabulator_test\";\n\n\t\ttry {\n\t\t\twindow.localStorage.setItem(testKey, testKey);\n\t\t\twindow.localStorage.removeItem(testKey);\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t//setup parameters\n\tPersistence.prototype.initialize = function () {\n\t\t//determine persistent layout storage type\n\n\t\tvar mode = this.table.options.persistenceMode,\n\t\t id = this.table.options.persistenceID,\n\t\t retreivedData;\n\n\t\tthis.mode = mode !== true ? mode : this.localStorageTest() ? \"local\" : \"cookie\";\n\n\t\tif (this.table.options.persistenceReaderFunc) {\n\t\t\tif (typeof this.table.options.persistenceReaderFunc === \"function\") {\n\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\n\t\t\t} else {\n\t\t\t\tif (this.readers[this.table.options.persistenceReaderFunc]) {\n\t\t\t\t\tthis.readFunc = this.readers[this.table.options.persistenceReaderFunc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.readers[this.mode]) {\n\t\t\t\tthis.readFunc = this.readers[this.mode];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\n\t\t\t}\n\t\t}\n\n\t\tif (this.table.options.persistenceWriterFunc) {\n\t\t\tif (typeof this.table.options.persistenceWriterFunc === \"function\") {\n\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\n\t\t\t} else {\n\t\t\t\tif (this.readers[this.table.options.persistenceWriterFunc]) {\n\t\t\t\t\tthis.writeFunc = this.readers[this.table.options.persistenceWriterFunc];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.writers[this.mode]) {\n\t\t\t\tthis.writeFunc = this.writers[this.mode];\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\n\t\t\t}\n\t\t}\n\n\t\t//set storage tag\n\t\tthis.id = \"tabulator-\" + (id || this.table.element.getAttribute(\"id\") || \"\");\n\n\t\tthis.config = {\n\t\t\tsort: this.table.options.persistence === true || this.table.options.persistence.sort,\n\t\t\tfilter: this.table.options.persistence === true || this.table.options.persistence.filter,\n\t\t\tgroup: this.table.options.persistence === true || this.table.options.persistence.group,\n\t\t\tpage: this.table.options.persistence === true || this.table.options.persistence.page,\n\t\t\tcolumns: this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns\n\t\t};\n\n\t\t//load pagination data if needed\n\t\tif (this.config.page) {\n\t\t\tretreivedData = this.retreiveData(\"page\");\n\n\t\t\tif (retreivedData) {\n\t\t\t\tif (typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)) {\n\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\n\t\t\t\t}\n\n\t\t\t\tif (typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)) {\n\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//load group data if needed\n\t\tif (this.config.group) {\n\t\t\tretreivedData = this.retreiveData(\"group\");\n\n\t\t\tif (retreivedData) {\n\t\t\t\tif (typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)) {\n\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\n\t\t\t\t}\n\t\t\t\tif (typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)) {\n\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\n\t\t\t\t}\n\t\t\t\tif (typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)) {\n\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tPersistence.prototype.initializeColumn = function (column) {\n\t\tvar self = this,\n\t\t def,\n\t\t keys;\n\n\t\tif (this.config.columns) {\n\t\t\tthis.defWatcherBlock = true;\n\n\t\t\tdef = column.getDefinition();\n\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\n\n\t\t\tkeys.forEach(function (key) {\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\n\t\t\t\tvar value = def[key];\n\t\t\t\tif (props) {\n\t\t\t\t\tObject.defineProperty(def, key, {\n\t\t\t\t\t\tset: function set(newValue) {\n\t\t\t\t\t\t\tvalue = newValue;\n\n\t\t\t\t\t\t\tif (!self.defWatcherBlock) {\n\t\t\t\t\t\t\t\tself.save(\"columns\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (props.set) {\n\t\t\t\t\t\t\t\tprops.set(newValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tget: function get() {\n\t\t\t\t\t\t\tif (props.get) {\n\t\t\t\t\t\t\t\tprops.get();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.defWatcherBlock = false;\n\t\t}\n\t};\n\n\t//load saved definitions\n\tPersistence.prototype.load = function (type, current) {\n\t\tvar data = this.retreiveData(type);\n\n\t\tif (current) {\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\n\t\t}\n\n\t\treturn data;\n\t};\n\n\t//retreive data from memory\n\tPersistence.prototype.retreiveData = function (type) {\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\n\t};\n\n\t//merge old and new column definitions\n\tPersistence.prototype.mergeDefinition = function (oldCols, newCols) {\n\t\tvar self = this,\n\t\t output = [];\n\n\t\t// oldCols = oldCols || [];\n\t\tnewCols = newCols || [];\n\n\t\tnewCols.forEach(function (column, to) {\n\n\t\t\tvar from = self._findColumn(oldCols, column),\n\t\t\t keys;\n\n\t\t\tif (from) {\n\n\t\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\t\tkeys = Object.keys(from);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t} else {\n\t\t\t\t\tkeys = self.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach(function (key) {\n\t\t\t\t\tif (typeof column[key] !== \"undefined\") {\n\t\t\t\t\t\tfrom[key] = column[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (from.columns) {\n\t\t\t\t\tfrom.columns = self.mergeDefinition(from.columns, column.columns);\n\t\t\t\t}\n\n\t\t\t\toutput.push(from);\n\t\t\t}\n\t\t});\n\n\t\toldCols.forEach(function (column, i) {\n\t\t\tvar from = self._findColumn(newCols, column);\n\t\t\tif (!from) {\n\t\t\t\tif (output.length > i) {\n\t\t\t\t\toutput.splice(i, 0, column);\n\t\t\t\t} else {\n\t\t\t\t\toutput.push(column);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\t//find matching columns\n\tPersistence.prototype._findColumn = function (columns, subject) {\n\t\tvar type = subject.columns ? \"group\" : subject.field ? \"field\" : \"object\";\n\n\t\treturn columns.find(function (col) {\n\t\t\tswitch (type) {\n\t\t\t\tcase \"group\":\n\t\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"field\":\n\t\t\t\t\treturn col.field === subject.field;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"object\":\n\t\t\t\t\treturn col === subject;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t};\n\n\t//save data\n\tPersistence.prototype.save = function (type) {\n\t\tvar data = {};\n\n\t\tswitch (type) {\n\t\t\tcase \"columns\":\n\t\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns());\n\t\t\t\tbreak;\n\n\t\t\tcase \"filter\":\n\t\t\t\tdata = this.table.modules.filter.getFilters();\n\t\t\t\tbreak;\n\n\t\t\tcase \"sort\":\n\t\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\n\t\t\t\tbreak;\n\n\t\t\tcase \"group\":\n\t\t\t\tdata = this.getGroupConfig();\n\t\t\t\tbreak;\n\n\t\t\tcase \"page\":\n\t\t\t\tdata = this.getPageConfig();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (this.writeFunc) {\n\t\t\tthis.writeFunc(this.id, type, data);\n\t\t}\n\t};\n\n\t//ensure sorters contain no function data\n\tPersistence.prototype.validateSorters = function (data) {\n\t\tdata.forEach(function (item) {\n\t\t\titem.column = item.field;\n\t\t\tdelete item.field;\n\t\t});\n\n\t\treturn data;\n\t};\n\n\tPersistence.prototype.getGroupConfig = function () {\n\t\tif (this.config.group) {\n\t\t\tif (this.config.group === true || this.config.group.groupBy) {\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\n\t\t\t}\n\n\t\t\tif (this.config.group === true || this.config.group.groupStartOpen) {\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\n\t\t\t}\n\n\t\t\tif (this.config.group === true || this.config.group.groupHeader) {\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t};\n\n\tPersistence.prototype.getPageConfig = function () {\n\t\tvar data = {};\n\n\t\tif (this.config.page) {\n\t\t\tif (this.config.page === true || this.config.page.size) {\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\n\t\t\t}\n\n\t\t\tif (this.config.page === true || this.config.page.page) {\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t};\n\n\t//parse columns for data to store\n\tPersistence.prototype.parseColumns = function (columns) {\n\t\tvar self = this,\n\t\t definitions = [];\n\n\t\tcolumns.forEach(function (column) {\n\t\t\tvar defStore = {},\n\t\t\t colDef = column.getDefinition(),\n\t\t\t keys;\n\n\t\t\tif (column.isGroup) {\n\t\t\t\tdefStore.title = colDef.title;\n\t\t\t\tdefStore.columns = self.parseColumns(column.getColumns());\n\t\t\t} else {\n\t\t\t\tdefStore.field = column.getField();\n\n\t\t\t\tif (self.config.columns === true || self.config.columns == undefined) {\n\t\t\t\t\tkeys = Object.keys(colDef);\n\t\t\t\t\tkeys.push(\"width\");\n\t\t\t\t} else {\n\t\t\t\t\tkeys = self.config.columns;\n\t\t\t\t}\n\n\t\t\t\tkeys.forEach(function (key) {\n\n\t\t\t\t\tswitch (key) {\n\t\t\t\t\t\tcase \"width\":\n\t\t\t\t\t\t\tdefStore.width = column.getWidth();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"visible\":\n\t\t\t\t\t\t\tdefStore.visible = column.visible;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdefinitions.push(defStore);\n\t\t});\n\n\t\treturn definitions;\n\t};\n\n\t// read peristence information from storage\n\tPersistence.prototype.readers = {\n\t\tlocal: function local(id, type) {\n\t\t\tvar data = localStorage.getItem(id + \"-\" + type);\n\n\t\t\treturn data ? JSON.parse(data) : false;\n\t\t},\n\t\tcookie: function cookie(id, type) {\n\t\t\tvar cookie = document.cookie,\n\t\t\t key = id + \"-\" + type,\n\t\t\t cookiePos = cookie.indexOf(key + \"=\"),\n\t\t\t end,\n\t\t\t data;\n\n\t\t\t//if cookie exists, decode and load column data into tabulator\n\t\t\tif (cookiePos > -1) {\n\t\t\t\tcookie = cookie.substr(cookiePos);\n\n\t\t\t\tend = cookie.indexOf(\";\");\n\n\t\t\t\tif (end > -1) {\n\t\t\t\t\tcookie = cookie.substr(0, end);\n\t\t\t\t}\n\n\t\t\t\tdata = cookie.replace(key + \"=\", \"\");\n\t\t\t}\n\n\t\t\treturn data ? JSON.parse(data) : false;\n\t\t}\n\t};\n\n\t//write persistence information to storage\n\tPersistence.prototype.writers = {\n\t\tlocal: function local(id, type, data) {\n\t\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\n\t\t},\n\t\tcookie: function cookie(id, type, data) {\n\t\t\tvar expireDate = new Date();\n\n\t\t\texpireDate.setDate(expireDate.getDate() + 10000);\n\n\t\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"persistence\", Persistence);\n\n\tvar Print = function Print(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.element = false;\n\t\tthis.manualBlock = false;\n\t};\n\n\tPrint.prototype.initialize = function () {\n\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\n\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\n\t};\n\n\tPrint.prototype.replaceTable = function () {\n\t\tif (!this.manualBlock) {\n\t\t\tthis.element = document.createElement(\"div\");\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\n\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\n\n\t\t\tthis.table.element.style.display = \"none\";\n\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\n\t\t}\n\t};\n\n\tPrint.prototype.cleanup = function () {\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\n\n\t\tif (this.element && this.element.parentNode) {\n\t\t\tthis.element.parentNode.removeChild(this.element);\n\t\t\tthis.table.element.style.display = \"\";\n\t\t}\n\t};\n\n\tPrint.prototype.printFullscreen = function (visible, style, config) {\n\t\tvar scrollX = window.scrollX,\n\t\t scrollY = window.scrollY,\n\t\t headerEl = document.createElement(\"div\"),\n\t\t footerEl = document.createElement(\"div\"),\n\t\t tableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible, \"print\"),\n\t\t headerContent,\n\t\t footerContent;\n\n\t\tthis.manualBlock = true;\n\n\t\tthis.element = document.createElement(\"div\");\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\n\n\t\tif (this.table.options.printHeader) {\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\n\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\n\n\t\t\tif (typeof headerContent == \"string\") {\n\t\t\t\theaderEl.innerHTML = headerContent;\n\t\t\t} else {\n\t\t\t\theaderEl.appendChild(headerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(headerEl);\n\t\t}\n\n\t\tthis.element.appendChild(tableEl);\n\n\t\tif (this.table.options.printFooter) {\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\n\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\n\n\t\t\tif (typeof footerContent == \"string\") {\n\t\t\t\tfooterEl.innerHTML = footerContent;\n\t\t\t} else {\n\t\t\t\tfooterEl.appendChild(footerContent);\n\t\t\t}\n\n\t\t\tthis.element.appendChild(footerEl);\n\t\t}\n\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\n\t\tdocument.body.appendChild(this.element);\n\n\t\tif (this.table.options.printFormatter) {\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\n\t\t}\n\n\t\twindow.print();\n\n\t\tthis.cleanup();\n\n\t\twindow.scrollTo(scrollX, scrollY);\n\n\t\tthis.manualBlock = false;\n\t};\n\n\tTabulator.prototype.registerModule(\"print\", Print);\n\tvar ReactiveData = function ReactiveData(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.data = false;\n\t\tthis.blocked = false; //block reactivity while performing update\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\n\t\tthis.currentVersion = 0;\n\t};\n\n\tReactiveData.prototype.watchData = function (data) {\n\t\tvar self = this,\n\t\t pushFunc,\n\t\t version;\n\n\t\tthis.currentVersion++;\n\n\t\tversion = this.currentVersion;\n\n\t\tself.unwatchData();\n\n\t\tself.data = data;\n\n\t\t//override array push function\n\t\tself.origFuncs.push = data.push;\n\n\t\tObject.defineProperty(self.data, \"push\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar args = Array.from(arguments);\n\n\t\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\n\t\t\t}\n\t\t});\n\n\t\t//override array unshift function\n\t\tself.origFuncs.unshift = data.unshift;\n\n\t\tObject.defineProperty(self.data, \"unshift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar args = Array.from(arguments);\n\n\t\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\t\targs.forEach(function (arg) {\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\n\t\t\t}\n\t\t});\n\n\t\t//override array shift function\n\t\tself.origFuncs.shift = data.shift;\n\n\t\tObject.defineProperty(self.data, \"shift\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar row;\n\n\t\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\t\tif (self.data.length) {\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\n\n\t\t\t\t\t\tif (row) {\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn self.origFuncs.shift.call(data);\n\t\t\t}\n\t\t});\n\n\t\t//override array pop function\n\t\tself.origFuncs.pop = data.pop;\n\n\t\tObject.defineProperty(self.data, \"pop\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar row;\n\t\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\t\tif (self.data.length) {\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\n\n\t\t\t\t\t\tif (row) {\n\t\t\t\t\t\t\trow.deleteActual();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn self.origFuncs.pop.call(data);\n\t\t\t}\n\t\t});\n\n\t\t//override array splice function\n\t\tself.origFuncs.splice = data.splice;\n\n\t\tObject.defineProperty(self.data, \"splice\", {\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t\tvalue: function value() {\n\t\t\t\tvar args = Array.from(arguments),\n\t\t\t\t start = args[0] < 0 ? data.length + args[0] : args[0],\n\t\t\t\t end = args[1],\n\t\t\t\t newRows = args[2] ? args.slice(2) : false,\n\t\t\t\t startRow;\n\n\t\t\t\tif (!self.blocked && version === self.currentVersion) {\n\n\t\t\t\t\t//add new rows\n\t\t\t\t\tif (newRows) {\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\n\n\t\t\t\t\t\tif (startRow) {\n\t\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\n\n\t\t\t\t\t\t\tnewRows.forEach(function (rowData) {\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//delete removed rows\n\t\t\t\t\tif (end !== 0) {\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\n\n\t\t\t\t\t\toldRows.forEach(function (rowData, i) {\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\n\n\t\t\t\t\t\t\tif (row) {\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tif (newRows || end !== 0) {\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\n\t\t\t}\n\t\t});\n\t};\n\n\tReactiveData.prototype.unwatchData = function () {\n\t\tif (this.data !== false) {\n\t\t\tfor (var key in this.origFuncs) {\n\t\t\t\tObject.defineProperty(this.data, key, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: this.origFuncs.key\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\tReactiveData.prototype.watchRow = function (row) {\n\t\tvar self = this,\n\t\t data = row.getData();\n\n\t\tthis.blocked = true;\n\n\t\tfor (var key in data) {\n\t\t\tthis.watchKey(row, data, key);\n\t\t}\n\n\t\tthis.blocked = false;\n\t};\n\n\tReactiveData.prototype.watchKey = function (row, data, key) {\n\t\tvar self = this,\n\t\t props = Object.getOwnPropertyDescriptor(data, key),\n\t\t value = data[key],\n\t\t version = this.currentVersion;\n\n\t\tObject.defineProperty(data, key, {\n\t\t\tset: function set(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\tif (!self.blocked && version === self.currentVersion) {\n\t\t\t\t\tvar update = {};\n\t\t\t\t\tupdate[key] = newValue;\n\t\t\t\t\trow.updateData(update);\n\t\t\t\t}\n\n\t\t\t\tif (props.set) {\n\t\t\t\t\tprops.set(newValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\tget: function get() {\n\n\t\t\t\tif (props.get) {\n\t\t\t\t\tprops.get();\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\t\t});\n\t};\n\n\tReactiveData.prototype.unwatchRow = function (row) {\n\t\tvar data = row.getData();\n\n\t\tfor (var key in data) {\n\t\t\tObject.defineProperty(data, key, {\n\t\t\t\tvalue: data[key]\n\t\t\t});\n\t\t}\n\t};\n\n\tReactiveData.prototype.block = function () {\n\t\tthis.blocked = true;\n\t};\n\n\tReactiveData.prototype.unblock = function () {\n\t\tthis.blocked = false;\n\t};\n\n\tTabulator.prototype.registerModule(\"reactiveData\", ReactiveData);\n\n\tvar ResizeColumns = function ResizeColumns(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.startColumn = false;\n\t\tthis.startX = false;\n\t\tthis.startWidth = false;\n\t\tthis.handle = null;\n\t\tthis.prevHandle = null;\n\t};\n\n\tResizeColumns.prototype.initializeColumn = function (type, column, element) {\n\t\tvar self = this,\n\t\t variableHeight = false,\n\t\t mode = this.table.options.resizableColumns;\n\n\t\t//set column resize mode\n\t\tif (type === \"header\") {\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\n\t\t\tcolumn.modules.resize = { variableHeight: variableHeight };\n\t\t}\n\n\t\tif (mode === true || mode == type) {\n\n\t\t\tvar handle = document.createElement('div');\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\n\n\t\t\tvar prevHandle = document.createElement('div');\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\n\n\t\t\thandle.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tvar handleDown = function handleDown(e) {\n\t\t\t\tvar nearestColumn = column.getLastColumn();\n\n\t\t\t\tif (nearestColumn && self._checkResizability(nearestColumn)) {\n\t\t\t\t\tself.startColumn = column;\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\t\t\t//reszie column on double click\n\t\t\thandle.addEventListener(\"dblclick\", function (e) {\n\t\t\t\tvar col = column.getLastColumn();\n\n\t\t\t\tif (col && self._checkResizability(col)) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tcol.reinitializeWidth(true);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tprevHandle.addEventListener(\"click\", function (e) {\n\t\t\t\te.stopPropagation();\n\t\t\t});\n\n\t\t\tvar prevHandleDown = function prevHandleDown(e) {\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\t\tif (nearestColumn) {\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\t\tself.startColumn = column;\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\t\t\t//resize column on double click\n\t\t\tprevHandle.addEventListener(\"dblclick\", function (e) {\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\n\n\t\t\t\tnearestColumn = column.getFirstColumn();\n\n\t\t\t\tif (nearestColumn) {\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\n\n\t\t\t\t\tif (prevColumn && self._checkResizability(prevColumn)) {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\telement.appendChild(handle);\n\t\t\telement.appendChild(prevHandle);\n\t\t}\n\t};\n\n\tResizeColumns.prototype._checkResizability = function (column) {\n\t\treturn typeof column.definition.resizable != \"undefined\" ? column.definition.resizable : this.table.options.resizableColumns;\n\t};\n\n\tResizeColumns.prototype._mouseDown = function (e, column, handle) {\n\t\tvar self = this;\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e) {\n\t\t\t// self.table.columnManager.tempScrollBlock();\n\n\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\n\n\t\t\tif (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\t\t}\n\n\t\tfunction mouseUp(e) {\n\n\t\t\t//block editor from taking action while resizing is taking place\n\t\t\tif (self.startColumn.modules.edit) {\n\t\t\t\tself.startColumn.modules.edit.blocked = false;\n\t\t\t}\n\n\t\t\tif (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) {\n\t\t\t\tcolumn.checkCellHeights();\n\t\t\t}\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tif (self.table.options.persistence && self.table.modExists(\"persistence\", true) && self.table.modules.persistence.config.columns) {\n\t\t\t\tself.table.modules.persistence.save(\"columns\");\n\t\t\t}\n\n\t\t\tself.table.options.columnResized.call(self.table, column.getComponent());\n\t\t}\n\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t\t//block editor from taking action while resizing is taking place\n\t\tif (self.startColumn.modules.edit) {\n\t\t\tself.startColumn.modules.edit.blocked = true;\n\t\t}\n\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\n\t\tself.startWidth = column.getWidth();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\t\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t};\n\n\tTabulator.prototype.registerModule(\"resizeColumns\", ResizeColumns);\n\tvar ResizeRows = function ResizeRows(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.startColumn = false;\n\t\tthis.startY = false;\n\t\tthis.startHeight = false;\n\t\tthis.handle = null;\n\t\tthis.prevHandle = null;\n\t};\n\n\tResizeRows.prototype.initializeRow = function (row) {\n\t\tvar self = this,\n\t\t rowEl = row.getElement();\n\n\t\tvar handle = document.createElement('div');\n\t\thandle.className = \"tabulator-row-resize-handle\";\n\n\t\tvar prevHandle = document.createElement('div');\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\n\n\t\thandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar handleDown = function handleDown(e) {\n\t\t\tself.startRow = row;\n\t\t\tself._mouseDown(e, row, handle);\n\t\t};\n\n\t\thandle.addEventListener(\"mousedown\", handleDown);\n\t\thandle.addEventListener(\"touchstart\", handleDown, { passive: true });\n\n\t\tprevHandle.addEventListener(\"click\", function (e) {\n\t\t\te.stopPropagation();\n\t\t});\n\n\t\tvar prevHandleDown = function prevHandleDown(e) {\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\n\n\t\t\tif (prevRow) {\n\t\t\t\tself.startRow = prevRow;\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\n\t\t\t}\n\t\t};\n\n\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\n\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, { passive: true });\n\n\t\trowEl.appendChild(handle);\n\t\trowEl.appendChild(prevHandle);\n\t};\n\n\tResizeRows.prototype._mouseDown = function (e, row, handle) {\n\t\tvar self = this;\n\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\n\n\t\tfunction mouseMove(e) {\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\n\t\t}\n\n\t\tfunction mouseUp(e) {\n\n\t\t\t// //block editor from taking action while resizing is taking place\n\t\t\t// if(self.startColumn.modules.edit){\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\n\t\t\t// }\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\n\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\n\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\n\n\t\t\tself.table.options.rowResized.call(this.table, row.getComponent());\n\t\t}\n\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\n\n\t\t//block editor from taking action while resizing is taking place\n\t\t// if(self.startColumn.modules.edit){\n\t\t// \tself.startColumn.modules.edit.blocked = true;\n\t\t// }\n\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\n\t\tself.startHeight = row.getHeight();\n\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\n\n\t\thandle.addEventListener(\"touchmove\", mouseMove, { passive: true });\n\t\thandle.addEventListener(\"touchend\", mouseUp);\n\t};\n\n\tTabulator.prototype.registerModule(\"resizeRows\", ResizeRows);\n\tvar ResizeTable = function ResizeTable(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.binding = false;\n\t\tthis.observer = false;\n\t\tthis.containerObserver = false;\n\n\t\tthis.tableHeight = 0;\n\t\tthis.tableWidth = 0;\n\t\tthis.containerHeight = 0;\n\t\tthis.containerWidth = 0;\n\n\t\tthis.autoResize = false;\n\t};\n\n\tResizeTable.prototype.initialize = function (row) {\n\t\tvar _this69 = this;\n\n\t\tvar table = this.table,\n\t\t tableStyle;\n\n\t\tthis.tableHeight = table.element.clientHeight;\n\t\tthis.tableWidth = table.element.clientWidth;\n\n\t\tif (table.element.parentNode) {\n\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\n\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\n\t\t}\n\n\t\tif (typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\") {\n\n\t\t\tthis.autoResize = true;\n\n\t\t\tthis.observer = new ResizeObserver(function (entry) {\n\t\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\t\tif (_this69.tableHeight != nodeHeight || _this69.tableWidth != nodeWidth) {\n\t\t\t\t\t\t_this69.tableHeight = nodeHeight;\n\t\t\t\t\t\t_this69.tableWidth = nodeWidth;\n\n\t\t\t\t\t\tif (table.element.parentNode) {\n\t\t\t\t\t\t\t_this69.containerHeight = table.element.parentNode.clientHeight;\n\t\t\t\t\t\t\t_this69.containerWidth = table.element.parentNode.clientWidth;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.observer.observe(table.element);\n\n\t\t\ttableStyle = window.getComputedStyle(table.element);\n\n\t\t\tif (this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))) {\n\n\t\t\t\tthis.containerObserver = new ResizeObserver(function (entry) {\n\t\t\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\n\n\t\t\t\t\t\tif (_this69.containerHeight != nodeHeight || _this69.containerWidth != nodeWidth) {\n\t\t\t\t\t\t\t_this69.containerHeight = nodeHeight;\n\t\t\t\t\t\t\t_this69.containerWidth = nodeWidth;\n\t\t\t\t\t\t\t_this69.tableHeight = table.element.clientHeight;\n\t\t\t\t\t\t\t_this69.tableWidth = table.element.clientWidth;\n\n\t\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttable.redraw();\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.binding = function () {\n\t\t\t\tif (!table.browserMobile || table.browserMobile && !table.modules.edit.currentCell) {\n\t\t\t\t\ttable.redraw();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twindow.addEventListener(\"resize\", this.binding);\n\t\t}\n\t};\n\n\tResizeTable.prototype.clearBindings = function (row) {\n\t\tif (this.binding) {\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\n\t\t}\n\n\t\tif (this.observer) {\n\t\t\tthis.observer.unobserve(this.table.element);\n\t\t}\n\n\t\tif (this.containerObserver) {\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"resizeTable\", ResizeTable);\n\tvar ResponsiveLayout = function ResponsiveLayout(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.columns = [];\n\t\tthis.hiddenColumns = [];\n\t\tthis.mode = \"\";\n\t\tthis.index = 0;\n\t\tthis.collapseFormatter = [];\n\t\tthis.collapseStartOpen = true;\n\t\tthis.collapseHandleColumn = false;\n\t};\n\n\t//generate resposive columns list\n\tResponsiveLayout.prototype.initialize = function () {\n\t\tvar self = this,\n\t\t columns = [];\n\n\t\tthis.mode = this.table.options.responsiveLayout;\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\n\t\tthis.hiddenColumns = [];\n\n\t\t//detemine level of responsivity for each column\n\t\tthis.table.columnManager.columnsByIndex.forEach(function (column, i) {\n\t\t\tif (column.modules.responsive) {\n\t\t\t\tif (column.modules.responsive.order && column.modules.responsive.visible) {\n\t\t\t\t\tcolumn.modules.responsive.index = i;\n\t\t\t\t\tcolumns.push(column);\n\n\t\t\t\t\tif (!column.visible && self.mode === \"collapse\") {\n\t\t\t\t\t\tself.hiddenColumns.push(column);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t//sort list by responsivity\n\t\tcolumns = columns.reverse();\n\t\tcolumns = columns.sort(function (a, b) {\n\t\t\tvar diff = b.modules.responsive.order - a.modules.responsive.order;\n\t\t\treturn diff || b.modules.responsive.index - a.modules.responsive.index;\n\t\t});\n\n\t\tthis.columns = columns;\n\n\t\tif (this.mode === \"collapse\") {\n\t\t\tthis.generateCollapsedContent();\n\t\t}\n\n\t\t//assign collapse column\n\t\tfor (var _iterator = this.table.columnManager.columnsByIndex, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n\t\t\tvar _ref;\n\n\t\t\tif (_isArray) {\n\t\t\t\tif (_i >= _iterator.length) break;\n\t\t\t\t_ref = _iterator[_i++];\n\t\t\t} else {\n\t\t\t\t_i = _iterator.next();\n\t\t\t\tif (_i.done) break;\n\t\t\t\t_ref = _i.value;\n\t\t\t}\n\n\t\t\tvar col = _ref;\n\n\t\t\tif (col.definition.formatter == \"responsiveCollapse\") {\n\t\t\t\tthis.collapseHandleColumn = col;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (this.collapseHandleColumn) {\n\t\t\tif (this.hiddenColumns.length) {\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t} else {\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t};\n\n\t//define layout information\n\tResponsiveLayout.prototype.initializeColumn = function (column) {\n\t\tvar def = column.getDefinition();\n\n\t\tcolumn.modules.responsive = { order: typeof def.responsive === \"undefined\" ? 1 : def.responsive, visible: def.visible === false ? false : true };\n\t};\n\n\tResponsiveLayout.prototype.initializeRow = function (row) {\n\t\tvar el;\n\n\t\tif (row.type !== \"calc\") {\n\t\t\tel = document.createElement(\"div\");\n\t\t\tel.classList.add(\"tabulator-responsive-collapse\");\n\n\t\t\trow.modules.responsiveLayout = {\n\t\t\t\telement: el,\n\t\t\t\topen: this.collapseStartOpen\n\t\t\t};\n\n\t\t\tif (!this.collapseStartOpen) {\n\t\t\t\tel.style.display = 'none';\n\t\t\t}\n\t\t}\n\t};\n\n\tResponsiveLayout.prototype.layoutRow = function (row) {\n\t\tvar rowEl = row.getElement();\n\n\t\tif (row.modules.responsiveLayout) {\n\t\t\trowEl.appendChild(row.modules.responsiveLayout.element);\n\t\t\tthis.generateCollapsedRowContent(row);\n\t\t}\n\t};\n\n\t//update column visibility\n\tResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) {\n\t\tvar index;\n\t\tif (column.modules.responsive) {\n\t\t\tcolumn.modules.responsive.visible = visible;\n\t\t\tthis.initialize();\n\t\t}\n\t};\n\n\tResponsiveLayout.prototype.hideColumn = function (column) {\n\t\tvar colCount = this.hiddenColumns.length;\n\n\t\tcolumn.hide(false, true);\n\n\t\tif (this.mode === \"collapse\") {\n\t\t\tthis.hiddenColumns.unshift(column);\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif (this.collapseHandleColumn && !colCount) {\n\t\t\t\tthis.collapseHandleColumn.show();\n\t\t\t}\n\t\t}\n\t};\n\n\tResponsiveLayout.prototype.showColumn = function (column) {\n\t\tvar index;\n\n\t\tcolumn.show(false, true);\n\t\t//set column width to prevent calculation loops on uninitialized columns\n\t\tcolumn.setWidth(column.getWidth());\n\n\t\tif (this.mode === \"collapse\") {\n\t\t\tindex = this.hiddenColumns.indexOf(column);\n\n\t\t\tif (index > -1) {\n\t\t\t\tthis.hiddenColumns.splice(index, 1);\n\t\t\t}\n\n\t\t\tthis.generateCollapsedContent();\n\n\t\t\tif (this.collapseHandleColumn && !this.hiddenColumns.length) {\n\t\t\t\tthis.collapseHandleColumn.hide();\n\t\t\t}\n\t\t}\n\t};\n\n\t//redraw columns to fit space\n\tResponsiveLayout.prototype.update = function () {\n\t\tvar self = this,\n\t\t working = true;\n\n\t\twhile (working) {\n\n\t\t\tvar width = self.table.modules.layout.getMode() == \"fitColumns\" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth();\n\n\t\t\tvar diff = (self.table.options.headerVisible ? self.table.columnManager.element.clientWidth : self.table.element.clientWidth) - width;\n\n\t\t\tif (diff < 0) {\n\t\t\t\t//table is too wide\n\t\t\t\tvar column = self.columns[self.index];\n\n\t\t\t\tif (column) {\n\t\t\t\t\tself.hideColumn(column);\n\t\t\t\t\tself.index++;\n\t\t\t\t} else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t//table has spare space\n\t\t\t\tvar _column = self.columns[self.index - 1];\n\n\t\t\t\tif (_column) {\n\t\t\t\t\tif (diff > 0) {\n\t\t\t\t\t\tif (diff >= _column.getWidth()) {\n\t\t\t\t\t\t\tself.showColumn(_column);\n\t\t\t\t\t\t\tself.index--;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tworking = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tworking = false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tworking = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.table.rowManager.activeRowsCount) {\n\t\t\t\tself.table.rowManager.renderEmptyScroll();\n\t\t\t}\n\t\t}\n\t};\n\n\tResponsiveLayout.prototype.generateCollapsedContent = function () {\n\t\tvar self = this,\n\t\t rows = this.table.rowManager.getDisplayRows();\n\n\t\trows.forEach(function (row) {\n\t\t\tself.generateCollapsedRowContent(row);\n\t\t});\n\t};\n\n\tResponsiveLayout.prototype.generateCollapsedRowContent = function (row) {\n\t\tvar el, contents;\n\n\t\tif (row.modules.responsiveLayout) {\n\t\t\tel = row.modules.responsiveLayout.element;\n\n\t\t\twhile (el.firstChild) {\n\t\t\t\tel.removeChild(el.firstChild);\n\t\t\t}contents = this.collapseFormatter(this.generateCollapsedRowData(row));\n\t\t\tif (contents) {\n\t\t\t\tel.appendChild(contents);\n\t\t\t}\n\t\t}\n\t};\n\n\tResponsiveLayout.prototype.generateCollapsedRowData = function (row) {\n\t\tvar self = this,\n\t\t data = row.getData(),\n\t\t output = [],\n\t\t mockCellComponent;\n\n\t\tthis.hiddenColumns.forEach(function (column) {\n\t\t\tvar value = column.getFieldValue(data);\n\n\t\t\tif (column.definition.title && column.field) {\n\t\t\t\tif (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) {\n\n\t\t\t\t\tmockCellComponent = {\n\t\t\t\t\t\tvalue: false,\n\t\t\t\t\t\tdata: {},\n\t\t\t\t\t\tgetValue: function getValue() {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetData: function getData() {\n\t\t\t\t\t\t\treturn data;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetElement: function getElement() {\n\t\t\t\t\t\t\treturn document.createElement(\"div\");\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetRow: function getRow() {\n\t\t\t\t\t\t\treturn row.getComponent();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgetColumn: function getColumn() {\n\t\t\t\t\t\t\treturn column.getComponent();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params)\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\toutput.push({\n\t\t\t\t\t\ttitle: column.definition.title,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn output;\n\t};\n\n\tResponsiveLayout.prototype.formatCollapsedData = function (data) {\n\t\tvar list = document.createElement(\"table\"),\n\t\t listContents = \"\";\n\n\t\tdata.forEach(function (item) {\n\t\t\tvar div = document.createElement(\"div\");\n\n\t\t\tif (item.value instanceof Node) {\n\t\t\t\tdiv.appendChild(item.value);\n\t\t\t\titem.value = div.innerHTML;\n\t\t\t}\n\n\t\t\tlistContents += \"\" + item.title + \"\" + item.value + \"\";\n\t\t});\n\n\t\tlist.innerHTML = listContents;\n\n\t\treturn Object.keys(data).length ? list : \"\";\n\t};\n\n\tTabulator.prototype.registerModule(\"responsiveLayout\", ResponsiveLayout);\n\n\tvar SelectRow = function SelectRow(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.selecting = false; //flag selecting in progress\n\t\tthis.lastClickedRow = false; //last clicked row\n\t\tthis.selectPrev = []; //hold previously selected element for drag drop selection\n\t\tthis.selectedRows = []; //hold selected rows\n\t\tthis.headerCheckboxElement = null; // hold header select element\n\t};\n\n\tSelectRow.prototype.clearSelectionData = function (silent) {\n\t\tthis.selecting = false;\n\t\tthis.lastClickedRow = false;\n\t\tthis.selectPrev = [];\n\t\tthis.selectedRows = [];\n\n\t\tif (!silent) {\n\t\t\tthis._rowSelectionChanged();\n\t\t}\n\t};\n\n\tSelectRow.prototype.initializeRow = function (row) {\n\t\tvar self = this,\n\t\t element = row.getElement();\n\n\t\t// trigger end of row selection\n\t\tvar endSelect = function endSelect() {\n\n\t\t\tsetTimeout(function () {\n\t\t\t\tself.selecting = false;\n\t\t\t}, 50);\n\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\n\t\t};\n\n\t\trow.modules.select = { selected: false };\n\n\t\t//set row selection class\n\t\tif (self.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\t\telement.classList.add(\"tabulator-selectable\");\n\t\t\telement.classList.remove(\"tabulator-unselectable\");\n\n\t\t\tif (self.table.options.selectable && self.table.options.selectable != \"highlight\") {\n\t\t\t\tif (self.table.options.selectableRangeMode === \"click\") {\n\t\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.lastClickedRow = self.lastClickedRow || row;\n\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\n\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\n\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\n\n\t\t\t\t\t\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function (toggledRow) {\n\t\t\t\t\t\t\t\t\tif (toggledRow !== self.lastClickedRow) {\n\n\t\t\t\t\t\t\t\t\t\tif (self.table.options.selectable !== true && !self.isRowSelected(row)) {\n\t\t\t\t\t\t\t\t\t\t\tif (self.selectedRows.length < self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\n\n\t\t\t\t\t\t\t\tif (self.table.options.selectable !== true) {\n\t\t\t\t\t\t\t\t\tif (toggledRows.length > self.table.options.selectable) {\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t} else if (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\n\t\t\t\t\t\t\tself.selectRows(row);\n\t\t\t\t\t\t\tself.lastClickedRow = row;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\telement.addEventListener(\"click\", function (e) {\n\t\t\t\t\t\tif (!self.table.modExists(\"edit\") || !self.table.modules.edit.getCurrentCell()) {\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!self.selecting) {\n\t\t\t\t\t\t\tself.toggleRow(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\telement.addEventListener(\"mousedown\", function (e) {\n\t\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\t\tself.table._clearSelection();\n\n\t\t\t\t\t\t\tself.selecting = true;\n\n\t\t\t\t\t\t\tself.selectPrev = [];\n\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"mouseup\", endSelect);\n\t\t\t\t\t\t\tdocument.body.addEventListener(\"keyup\", endSelect);\n\n\t\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\telement.addEventListener(\"mouseenter\", function (e) {\n\t\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.toggleRow(row);\n\n\t\t\t\t\t\t\tif (self.selectPrev[1] == row) {\n\t\t\t\t\t\t\t\tself.toggleRow(self.selectPrev[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\telement.addEventListener(\"mouseout\", function (e) {\n\t\t\t\t\t\tif (self.selecting) {\n\t\t\t\t\t\t\tself.table._clearSelection();\n\t\t\t\t\t\t\tself.selectPrev.unshift(row);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\telement.classList.add(\"tabulator-unselectable\");\n\t\t\telement.classList.remove(\"tabulator-selectable\");\n\t\t}\n\t};\n\n\t//toggle row selection\n\tSelectRow.prototype.toggleRow = function (row) {\n\t\tif (this.table.options.selectableCheck.call(this.table, row.getComponent())) {\n\t\t\tif (row.modules.select && row.modules.select.selected) {\n\t\t\t\tthis._deselectRow(row);\n\t\t\t} else {\n\t\t\t\tthis._selectRow(row);\n\t\t\t}\n\t\t}\n\t};\n\n\t//select a number of rows\n\tSelectRow.prototype.selectRows = function (rows) {\n\t\tvar _this70 = this;\n\n\t\tvar rowMatch;\n\n\t\tswitch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) {\n\t\t\tcase \"undefined\":\n\t\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\t\t\t_this70._selectRow(row, true, true);\n\t\t\t\t});\n\n\t\t\t\tthis._rowSelectionChanged();\n\t\t\t\tbreak;\n\n\t\t\tcase \"string\":\n\n\t\t\t\trowMatch = this.table.rowManager.findRow(rows);\n\n\t\t\t\tif (rowMatch) {\n\t\t\t\t\tthis._selectRow(rowMatch, true, true);\n\t\t\t\t} else {\n\t\t\t\t\tthis.table.rowManager.getRows(rows).forEach(function (row) {\n\t\t\t\t\t\t_this70._selectRow(row, true, true);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis._rowSelectionChanged();\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tif (Array.isArray(rows)) {\n\t\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\t\t_this70._selectRow(row, true, true);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis._rowSelectionChanged();\n\t\t\t\t} else {\n\t\t\t\t\tthis._selectRow(rows, false, true);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\t//select an individual row\n\tSelectRow.prototype._selectRow = function (rowInfo, silent, force) {\n\t\tvar index;\n\n\t\t//handle max row count\n\t\tif (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) {\n\t\t\tif (this.selectedRows.length >= this.table.options.selectable) {\n\t\t\t\tif (this.table.options.selectableRollingSelection) {\n\t\t\t\t\tthis._deselectRow(this.selectedRows[0]);\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\n\n\t\tif (row) {\n\t\t\tif (this.selectedRows.indexOf(row) == -1) {\n\t\t\t\tif (!row.modules.select) {\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\n\t\t\t\trow.modules.select.selected = true;\n\t\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\t\trow.modules.select.checkboxEl.checked = true;\n\t\t\t\t}\n\t\t\t\trow.getElement().classList.add(\"tabulator-selected\");\n\n\t\t\t\tthis.selectedRows.push(row);\n\n\t\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\t\tthis.childRowSelection(row, true);\n\t\t\t\t}\n\n\t\t\t\tif (!silent) {\n\t\t\t\t\tthis.table.options.rowSelected.call(this.table, row.getComponent());\n\t\t\t\t}\n\n\t\t\t\tthis._rowSelectionChanged(silent);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!silent) {\n\t\t\t\tconsole.warn(\"Selection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t};\n\n\tSelectRow.prototype.isRowSelected = function (row) {\n\t\treturn this.selectedRows.indexOf(row) !== -1;\n\t};\n\n\t//deselect a number of rows\n\tSelectRow.prototype.deselectRows = function (rows, silent) {\n\t\tvar self = this,\n\t\t rowCount;\n\n\t\tif (typeof rows == \"undefined\") {\n\n\t\t\trowCount = self.selectedRows.length;\n\n\t\t\tfor (var i = 0; i < rowCount; i++) {\n\t\t\t\tself._deselectRow(self.selectedRows[0], true);\n\t\t\t}\n\n\t\t\tself._rowSelectionChanged(silent);\n\t\t} else {\n\t\t\tif (Array.isArray(rows)) {\n\t\t\t\trows.forEach(function (row) {\n\t\t\t\t\tself._deselectRow(row, true);\n\t\t\t\t});\n\n\t\t\t\tself._rowSelectionChanged(silent);\n\t\t\t} else {\n\t\t\t\tself._deselectRow(rows, silent);\n\t\t\t}\n\t\t}\n\t};\n\n\t//deselect an individual row\n\tSelectRow.prototype._deselectRow = function (rowInfo, silent) {\n\t\tvar self = this,\n\t\t row = self.table.rowManager.findRow(rowInfo),\n\t\t index;\n\n\t\tif (row) {\n\t\t\tindex = self.selectedRows.findIndex(function (selectedRow) {\n\t\t\t\treturn selectedRow == row;\n\t\t\t});\n\n\t\t\tif (index > -1) {\n\n\t\t\t\tif (!row.modules.select) {\n\t\t\t\t\trow.modules.select = {};\n\t\t\t\t}\n\n\t\t\t\trow.modules.select.selected = false;\n\t\t\t\tif (row.modules.select.checkboxEl) {\n\t\t\t\t\trow.modules.select.checkboxEl.checked = false;\n\t\t\t\t}\n\t\t\t\trow.getElement().classList.remove(\"tabulator-selected\");\n\t\t\t\tself.selectedRows.splice(index, 1);\n\n\t\t\t\tif (this.table.options.dataTreeSelectPropagate) {\n\t\t\t\t\tthis.childRowSelection(row, false);\n\t\t\t\t}\n\n\t\t\t\tif (!silent) {\n\t\t\t\t\tself.table.options.rowDeselected.call(this.table, row.getComponent());\n\t\t\t\t}\n\n\t\t\t\tself._rowSelectionChanged(silent);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!silent) {\n\t\t\t\tconsole.warn(\"Deselection Error - No such row found, ignoring selection:\" + rowInfo);\n\t\t\t}\n\t\t}\n\t};\n\n\tSelectRow.prototype.getSelectedData = function () {\n\t\tvar data = [];\n\n\t\tthis.selectedRows.forEach(function (row) {\n\t\t\tdata.push(row.getData());\n\t\t});\n\n\t\treturn data;\n\t};\n\n\tSelectRow.prototype.getSelectedRows = function () {\n\n\t\tvar rows = [];\n\n\t\tthis.selectedRows.forEach(function (row) {\n\t\t\trows.push(row.getComponent());\n\t\t});\n\n\t\treturn rows;\n\t};\n\n\tSelectRow.prototype._rowSelectionChanged = function (silent) {\n\t\tif (this.headerCheckboxElement) {\n\t\t\tif (this.selectedRows.length === 0) {\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else if (this.table.rowManager.rows.length === this.selectedRows.length) {\n\t\t\t\tthis.headerCheckboxElement.checked = true;\n\t\t\t\tthis.headerCheckboxElement.indeterminate = false;\n\t\t\t} else {\n\t\t\t\tthis.headerCheckboxElement.indeterminate = true;\n\t\t\t\tthis.headerCheckboxElement.checked = false;\n\t\t\t}\n\t\t}\n\n\t\tif (!silent) {\n\t\t\tthis.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows());\n\t\t}\n\t};\n\n\tSelectRow.prototype.registerRowSelectCheckbox = function (row, element) {\n\t\tif (!row._row.modules.select) {\n\t\t\trow._row.modules.select = {};\n\t\t}\n\n\t\trow._row.modules.select.checkboxEl = element;\n\t};\n\n\tSelectRow.prototype.registerHeaderSelectCheckbox = function (element) {\n\t\tthis.headerCheckboxElement = element;\n\t};\n\n\tSelectRow.prototype.childRowSelection = function (row, select) {\n\t\tvar children = this.table.modules.dataTree.getChildren(row);\n\n\t\tif (select) {\n\t\t\tfor (var _iterator2 = children, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n\t\t\t\tvar _ref2;\n\n\t\t\t\tif (_isArray2) {\n\t\t\t\t\tif (_i2 >= _iterator2.length) break;\n\t\t\t\t\t_ref2 = _iterator2[_i2++];\n\t\t\t\t} else {\n\t\t\t\t\t_i2 = _iterator2.next();\n\t\t\t\t\tif (_i2.done) break;\n\t\t\t\t\t_ref2 = _i2.value;\n\t\t\t\t}\n\n\t\t\t\tvar child = _ref2;\n\n\t\t\t\tthis._selectRow(child, true);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n\t\t\t\tvar _ref3;\n\n\t\t\t\tif (_isArray3) {\n\t\t\t\t\tif (_i3 >= _iterator3.length) break;\n\t\t\t\t\t_ref3 = _iterator3[_i3++];\n\t\t\t\t} else {\n\t\t\t\t\t_i3 = _iterator3.next();\n\t\t\t\t\tif (_i3.done) break;\n\t\t\t\t\t_ref3 = _i3.value;\n\t\t\t\t}\n\n\t\t\t\tvar _child = _ref3;\n\n\t\t\t\tthis._deselectRow(_child, true);\n\t\t\t}\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"selectRow\", SelectRow);\n\n\tvar Sort = function Sort(table) {\n\t\tthis.table = table; //hold Tabulator object\n\t\tthis.sortList = []; //holder current sort\n\t\tthis.changed = false; //has the sort changed since last render\n\t};\n\n\t//initialize column header for sorting\n\tSort.prototype.initializeColumn = function (column, content) {\n\t\tvar self = this,\n\t\t sorter = false,\n\t\t colEl,\n\t\t arrowEl;\n\n\t\tswitch (_typeof(column.definition.sorter)) {\n\t\t\tcase \"string\":\n\t\t\t\tif (self.sorters[column.definition.sorter]) {\n\t\t\t\t\tsorter = self.sorters[column.definition.sorter];\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\tsorter = column.definition.sorter;\n\t\t\t\tbreak;\n\t\t}\n\n\t\tcolumn.modules.sort = {\n\t\t\tsorter: sorter, dir: \"none\",\n\t\t\tparams: column.definition.sorterParams || {},\n\t\t\tstartingDir: column.definition.headerSortStartingDir || \"asc\",\n\t\t\ttristate: typeof column.definition.headerSortTristate !== \"undefined\" ? column.definition.headerSortTristate : this.table.options.headerSortTristate\n\t\t};\n\n\t\tif (typeof column.definition.headerSort === \"undefined\" ? this.table.options.headerSort !== false : column.definition.headerSort !== false) {\n\n\t\t\tcolEl = column.getElement();\n\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\n\n\t\t\tarrowEl = document.createElement(\"div\");\n\t\t\tarrowEl.classList.add(\"tabulator-arrow\");\n\t\t\t//create sorter arrow\n\t\t\tcontent.appendChild(arrowEl);\n\n\t\t\t//sort on click\n\t\t\tcolEl.addEventListener(\"click\", function (e) {\n\t\t\t\tvar dir = \"\",\n\t\t\t\t sorters = [],\n\t\t\t\t match = false;\n\n\t\t\t\tif (column.modules.sort) {\n\t\t\t\t\tif (column.modules.sort.tristate) {\n\t\t\t\t\t\tif (column.modules.sort.dir == \"none\") {\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (column.modules.sort.dir == column.modules.sort.startingDir) {\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdir = \"none\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tswitch (column.modules.sort.dir) {\n\t\t\t\t\t\t\tcase \"asc\":\n\t\t\t\t\t\t\t\tdir = \"desc\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase \"desc\":\n\t\t\t\t\t\t\t\tdir = \"asc\";\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\n\t\t\t\t\t\tsorters = self.getSort();\n\n\t\t\t\t\t\tmatch = sorters.findIndex(function (sorter) {\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (match > -1) {\n\t\t\t\t\t\t\tsorters[match].dir = dir;\n\n\t\t\t\t\t\t\tif (match != sorters.length - 1) {\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\n\t\t\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\t\t\tsorters.push(match);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (dir != \"none\") {\n\t\t\t\t\t\t\t\tsorters.push({ column: column, dir: dir });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//add to existing sort\n\t\t\t\t\t\tself.setSort(sorters);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (dir == \"none\") {\n\t\t\t\t\t\t\tself.clear();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t//sort by column only\n\t\t\t\t\t\t\tself.setSort(column, dir);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tself.table.rowManager.sorterRefresh(!self.sortList.length);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t//check if the sorters have changed since last use\n\tSort.prototype.hasChanged = function () {\n\t\tvar changed = this.changed;\n\t\tthis.changed = false;\n\t\treturn changed;\n\t};\n\n\t//return current sorters\n\tSort.prototype.getSort = function () {\n\t\tvar self = this,\n\t\t sorters = [];\n\n\t\tself.sortList.forEach(function (item) {\n\t\t\tif (item.column) {\n\t\t\t\tsorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir });\n\t\t\t}\n\t\t});\n\n\t\treturn sorters;\n\t};\n\n\t//change sort list and trigger sort\n\tSort.prototype.setSort = function (sortList, dir) {\n\t\tvar self = this,\n\t\t newSortList = [];\n\n\t\tif (!Array.isArray(sortList)) {\n\t\t\tsortList = [{ column: sortList, dir: dir }];\n\t\t}\n\n\t\tsortList.forEach(function (item) {\n\t\t\tvar column;\n\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\n\n\t\t\tif (column) {\n\t\t\t\titem.column = column;\n\t\t\t\tnewSortList.push(item);\n\t\t\t\tself.changed = true;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\n\t\t\t}\n\t\t});\n\n\t\tself.sortList = newSortList;\n\n\t\tif (this.table.options.persistence && this.table.modExists(\"persistence\", true) && this.table.modules.persistence.config.sort) {\n\t\t\tthis.table.modules.persistence.save(\"sort\");\n\t\t}\n\t};\n\n\t//clear sorters\n\tSort.prototype.clear = function () {\n\t\tthis.setSort([]);\n\t};\n\n\t//find appropriate sorter for column\n\tSort.prototype.findSorter = function (column) {\n\t\tvar row = this.table.rowManager.activeRows[0],\n\t\t sorter = \"string\",\n\t\t field,\n\t\t value;\n\n\t\tif (row) {\n\t\t\trow = row.getData();\n\t\t\tfield = column.getField();\n\n\t\t\tif (field) {\n\n\t\t\t\tvalue = column.getFieldValue(row);\n\n\t\t\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\t\t\tcase \"undefined\":\n\t\t\t\t\t\tsorter = \"string\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tsorter = \"boolean\";\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (!isNaN(value) && value !== \"\") {\n\t\t\t\t\t\t\tsorter = \"number\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) {\n\t\t\t\t\t\t\t\tsorter = \"alphanum\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.sorters[sorter];\n\t};\n\n\t//work through sort list sorting data\n\tSort.prototype.sort = function (data) {\n\t\tvar self = this,\n\t\t sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\n\t\t sortListActual = [],\n\t\t lastSort;\n\n\t\tif (self.table.options.dataSorting) {\n\t\t\tself.table.options.dataSorting.call(self.table, self.getSort());\n\t\t}\n\n\t\tself.clearColumnHeaders();\n\n\t\tif (!self.table.options.ajaxSorting) {\n\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\n\t\t\tsortList.forEach(function (item, i) {\n\t\t\t\tvar sortObj = item.column.modules.sort;\n\n\t\t\t\tif (item.column && sortObj) {\n\n\t\t\t\t\t//if no sorter has been defined, take a guess\n\t\t\t\t\tif (!sortObj.sorter) {\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\n\t\t\t\t\t}\n\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\n\n\t\t\t\t\tsortListActual.push(item);\n\t\t\t\t}\n\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t});\n\n\t\t\t//sort data\n\t\t\tif (sortListActual.length) {\n\t\t\t\tself._sortItems(data, sortListActual);\n\t\t\t}\n\t\t} else {\n\t\t\tsortList.forEach(function (item, i) {\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\n\t\t\t});\n\t\t}\n\n\t\tif (self.table.options.dataSorted) {\n\t\t\tself.table.options.dataSorted.call(self.table, self.getSort(), self.table.rowManager.getComponents(\"active\"));\n\t\t}\n\t};\n\n\t//clear sort arrows on columns\n\tSort.prototype.clearColumnHeaders = function () {\n\t\tthis.table.columnManager.getRealColumns().forEach(function (column) {\n\t\t\tif (column.modules.sort) {\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\n\t\t\t}\n\t\t});\n\t};\n\n\t//set the column header sort direction\n\tSort.prototype.setColumnHeader = function (column, dir) {\n\t\tcolumn.modules.sort.dir = dir;\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\n\t};\n\n\t//sort each item in sort list\n\tSort.prototype._sortItems = function (data, sortList) {\n\t\tvar _this71 = this;\n\n\t\tvar sorterCount = sortList.length - 1;\n\n\t\tdata.sort(function (a, b) {\n\t\t\tvar result;\n\n\t\t\tfor (var i = sorterCount; i >= 0; i--) {\n\t\t\t\tvar sortItem = sortList[i];\n\n\t\t\t\tresult = _this71._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\n\n\t\t\t\tif (result !== 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t});\n\t};\n\n\t//process individual rows for a sort function on active data\n\tSort.prototype._sortRow = function (a, b, column, dir, params) {\n\t\tvar el1Comp, el2Comp, colComp;\n\n\t\t//switch elements depending on search direction\n\t\tvar el1 = dir == \"asc\" ? a : b;\n\t\tvar el2 = dir == \"asc\" ? b : a;\n\n\t\ta = column.getFieldValue(el1.getData());\n\t\tb = column.getFieldValue(el2.getData());\n\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\n\n\t\tel1Comp = el1.getComponent();\n\t\tel2Comp = el2.getComponent();\n\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\n\t};\n\n\t//default data sorters\n\tSort.prototype.sorters = {\n\n\t\t//sort numbers\n\t\tnumber: function number(a, b, aRow, bRow, column, dir, params) {\n\t\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\t\tvar decimal = params.decimalSeparator || \".\";\n\t\t\tvar thousand = params.thousandSeparator || \",\";\n\t\t\tvar emptyAlign = 0;\n\n\t\t\ta = parseFloat(String(a).split(thousand).join(\"\").split(decimal).join(\".\"));\n\t\t\tb = parseFloat(String(b).split(thousand).join(\"\").split(decimal).join(\".\"));\n\n\t\t\t//handle non numeric values\n\t\t\tif (isNaN(a)) {\n\t\t\t\temptyAlign = isNaN(b) ? 0 : -1;\n\t\t\t} else if (isNaN(b)) {\n\t\t\t\temptyAlign = 1;\n\t\t\t} else {\n\t\t\t\t//compare valid values\n\t\t\t\treturn a - b;\n\t\t\t}\n\n\t\t\t//fix empty values in position\n\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\temptyAlign *= -1;\n\t\t\t}\n\n\t\t\treturn emptyAlign;\n\t\t},\n\n\t\t//sort strings\n\t\tstring: function string(a, b, aRow, bRow, column, dir, params) {\n\t\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\t\tvar emptyAlign = 0;\n\t\t\tvar locale;\n\n\t\t\t//handle empty values\n\t\t\tif (!a) {\n\t\t\t\temptyAlign = !b ? 0 : -1;\n\t\t\t} else if (!b) {\n\t\t\t\temptyAlign = 1;\n\t\t\t} else {\n\t\t\t\t//compare valid values\n\t\t\t\tswitch (_typeof(params.locale)) {\n\t\t\t\t\tcase \"boolean\":\n\t\t\t\t\t\tif (params.locale) {\n\t\t\t\t\t\t\tlocale = this.table.modules.localize.getLocale();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\t\tlocale = params.locale;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\n\t\t\t}\n\n\t\t\t//fix empty values in position\n\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\temptyAlign *= -1;\n\t\t\t}\n\n\t\t\treturn emptyAlign;\n\t\t},\n\n\t\t//sort date\n\t\tdate: function date(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (!params.format) {\n\t\t\t\tparams.format = \"DD/MM/YYYY\";\n\t\t\t}\n\n\t\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t\t},\n\n\t\t//sort hh:mm formatted times\n\t\ttime: function time(a, b, aRow, bRow, column, dir, params) {\n\t\t\tif (!params.format) {\n\t\t\t\tparams.format = \"hh:mm\";\n\t\t\t}\n\n\t\t\treturn this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params);\n\t\t},\n\n\t\t//sort datetime\n\t\tdatetime: function datetime(a, b, aRow, bRow, column, dir, params) {\n\t\t\tvar format = params.format || \"DD/MM/YYYY hh:mm:ss\",\n\t\t\t alignEmptyValues = params.alignEmptyValues,\n\t\t\t emptyAlign = 0;\n\n\t\t\tif (typeof moment != \"undefined\") {\n\t\t\t\ta = moment(a, format);\n\t\t\t\tb = moment(b, format);\n\n\t\t\t\tif (!a.isValid()) {\n\t\t\t\t\temptyAlign = !b.isValid() ? 0 : -1;\n\t\t\t\t} else if (!b.isValid()) {\n\t\t\t\t\temptyAlign = 1;\n\t\t\t\t} else {\n\t\t\t\t\t//compare valid values\n\t\t\t\t\treturn a - b;\n\t\t\t\t}\n\n\t\t\t\t//fix empty values in position\n\t\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\t\temptyAlign *= -1;\n\t\t\t\t}\n\n\t\t\t\treturn emptyAlign;\n\t\t\t} else {\n\t\t\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on moment.js\");\n\t\t\t}\n\t\t},\n\n\t\t//sort booleans\n\t\tboolean: function boolean(a, b, aRow, bRow, column, dir, params) {\n\t\t\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\n\t\t\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\n\n\t\t\treturn el1 - el2;\n\t\t},\n\n\t\t//sort if element contains any data\n\t\tarray: function array(a, b, aRow, bRow, column, dir, params) {\n\t\t\tvar el1 = 0;\n\t\t\tvar el2 = 0;\n\t\t\tvar type = params.type || \"length\";\n\t\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\t\tvar emptyAlign = 0;\n\n\t\t\tfunction calc(value) {\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\treturn value.length;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"sum\":\n\t\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"max\":\n\t\t\t\t\t\treturn Math.max.apply(null, value);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"min\":\n\t\t\t\t\t\treturn Math.min.apply(null, value);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase \"avg\":\n\t\t\t\t\t\treturn value.reduce(function (c, d) {\n\t\t\t\t\t\t\treturn c + d;\n\t\t\t\t\t\t}) / value.length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//handle non array values\n\t\t\tif (!Array.isArray(a)) {\n\t\t\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\n\t\t\t} else if (!Array.isArray(b)) {\n\t\t\t\talignEmptyValues = 1;\n\t\t\t} else {\n\n\t\t\t\t//compare valid values\n\t\t\t\tel1 = a ? calc(a) : 0;\n\t\t\t\tel2 = b ? calc(b) : 0;\n\n\t\t\t\treturn el1 - el2;\n\t\t\t}\n\n\t\t\t//fix empty values in position\n\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\temptyAlign *= -1;\n\t\t\t}\n\n\t\t\treturn emptyAlign;\n\t\t},\n\n\t\t//sort if element contains any data\n\t\texists: function exists(a, b, aRow, bRow, column, dir, params) {\n\t\t\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\n\t\t\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\n\n\t\t\treturn el1 - el2;\n\t\t},\n\n\t\t//sort alpha numeric strings\n\t\talphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) {\n\t\t\tvar a,\n\t\t\t b,\n\t\t\t a1,\n\t\t\t b1,\n\t\t\t i = 0,\n\t\t\t L,\n\t\t\t rx = /(\\d+)|(\\D+)/g,\n\t\t\t rd = /\\d/;\n\t\t\tvar alignEmptyValues = params.alignEmptyValues;\n\t\t\tvar emptyAlign = 0;\n\n\t\t\t//handle empty values\n\t\t\tif (!as && as !== 0) {\n\t\t\t\temptyAlign = !bs && bs !== 0 ? 0 : -1;\n\t\t\t} else if (!bs && bs !== 0) {\n\t\t\t\temptyAlign = 1;\n\t\t\t} else {\n\n\t\t\t\tif (isFinite(as) && isFinite(bs)) return as - bs;\n\t\t\t\ta = String(as).toLowerCase();\n\t\t\t\tb = String(bs).toLowerCase();\n\t\t\t\tif (a === b) return 0;\n\t\t\t\tif (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\n\t\t\t\ta = a.match(rx);\n\t\t\t\tb = b.match(rx);\n\t\t\t\tL = a.length > b.length ? b.length : a.length;\n\t\t\t\twhile (i < L) {\n\t\t\t\t\ta1 = a[i];\n\t\t\t\t\tb1 = b[i++];\n\t\t\t\t\tif (a1 !== b1) {\n\t\t\t\t\t\tif (isFinite(a1) && isFinite(b1)) {\n\t\t\t\t\t\t\tif (a1.charAt(0) === \"0\") a1 = \".\" + a1;\n\t\t\t\t\t\t\tif (b1.charAt(0) === \"0\") b1 = \".\" + b1;\n\t\t\t\t\t\t\treturn a1 - b1;\n\t\t\t\t\t\t} else return a1 > b1 ? 1 : -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn a.length > b.length;\n\t\t\t}\n\n\t\t\t//fix empty values in position\n\t\t\tif (alignEmptyValues === \"top\" && dir === \"desc\" || alignEmptyValues === \"bottom\" && dir === \"asc\") {\n\t\t\t\temptyAlign *= -1;\n\t\t\t}\n\n\t\t\treturn emptyAlign;\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"sort\", Sort);\n\n\tvar Validate = function Validate(table) {\n\t\tthis.table = table;\n\t};\n\n\t//validate\n\tValidate.prototype.initializeColumn = function (column) {\n\t\tvar self = this,\n\t\t config = [],\n\t\t validator;\n\n\t\tif (column.definition.validator) {\n\n\t\t\tif (Array.isArray(column.definition.validator)) {\n\t\t\t\tcolumn.definition.validator.forEach(function (item) {\n\t\t\t\t\tvalidator = self._extractValidator(item);\n\n\t\t\t\t\tif (validator) {\n\t\t\t\t\t\tconfig.push(validator);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\n\n\t\t\t\tif (validator) {\n\t\t\t\t\tconfig.push(validator);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcolumn.modules.validate = config.length ? config : false;\n\t\t}\n\t};\n\n\tValidate.prototype._extractValidator = function (value) {\n\t\tvar type, params, pos;\n\n\t\tswitch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n\t\t\tcase \"string\":\n\t\t\t\tpos = value.indexOf(':');\n\n\t\t\t\tif (pos > -1) {\n\t\t\t\t\ttype = value.substring(0, pos);\n\t\t\t\t\tparams = value.substring(pos + 1);\n\t\t\t\t} else {\n\t\t\t\t\ttype = value;\n\t\t\t\t}\n\n\t\t\t\treturn this._buildValidator(type, params);\n\t\t\t\tbreak;\n\n\t\t\tcase \"function\":\n\t\t\t\treturn this._buildValidator(value);\n\t\t\t\tbreak;\n\n\t\t\tcase \"object\":\n\t\t\t\treturn this._buildValidator(value.type, value.parameters);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\tValidate.prototype._buildValidator = function (type, params) {\n\n\t\tvar func = typeof type == \"function\" ? type : this.validators[type];\n\n\t\tif (!func) {\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\n\t\t\treturn false;\n\t\t} else {\n\t\t\treturn {\n\t\t\t\ttype: typeof type == \"function\" ? \"function\" : type,\n\t\t\t\tfunc: func,\n\t\t\t\tparams: params\n\t\t\t};\n\t\t}\n\t};\n\n\tValidate.prototype.validate = function (validators, cell, value) {\n\t\tvar self = this,\n\t\t valid = [];\n\n\t\tif (validators) {\n\t\t\tvalidators.forEach(function (item) {\n\t\t\t\tif (!item.func.call(self, cell, value, item.params)) {\n\t\t\t\t\tvalid.push({\n\t\t\t\t\t\ttype: item.type,\n\t\t\t\t\t\tparameters: item.params\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn valid.length ? valid : true;\n\t};\n\n\tValidate.prototype.validators = {\n\n\t\t//is integer\n\t\tinteger: function integer(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvalue = Number(value);\n\t\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\n\t\t},\n\n\t\t//is float\n\t\tfloat: function float(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvalue = Number(value);\n\t\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\n\t\t},\n\n\t\t//must be a number\n\t\tnumeric: function numeric(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !isNaN(value);\n\t\t},\n\n\t\t//must be a string\n\t\tstring: function string(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn isNaN(value);\n\t\t},\n\n\t\t//maximum value\n\t\tmax: function max(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn parseFloat(value) <= parameters;\n\t\t},\n\n\t\t//minimum value\n\t\tmin: function min(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn parseFloat(value) >= parameters;\n\t\t},\n\n\t\t//minimum string length\n\t\tminLength: function minLength(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn String(value).length >= parameters;\n\t\t},\n\n\t\t//maximum string length\n\t\tmaxLength: function maxLength(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn String(value).length <= parameters;\n\t\t},\n\n\t\t//in provided value list\n\t\tin: function _in(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (typeof parameters == \"string\") {\n\t\t\t\tparameters = parameters.split(\"|\");\n\t\t\t}\n\n\t\t\treturn value === \"\" || parameters.indexOf(value) > -1;\n\t\t},\n\n\t\t//must match provided regex\n\t\tregex: function regex(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar reg = new RegExp(parameters);\n\n\t\t\treturn reg.test(value);\n\t\t},\n\n\t\t//value must be unique in this column\n\t\tunique: function unique(cell, value, parameters) {\n\t\t\tif (value === \"\" || value === null || typeof value === \"undefined\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar unique = true;\n\n\t\t\tvar cellData = cell.getData();\n\t\t\tvar column = cell.getColumn()._getSelf();\n\n\t\t\tthis.table.rowManager.rows.forEach(function (row) {\n\t\t\t\tvar data = row.getData();\n\n\t\t\t\tif (data !== cellData) {\n\t\t\t\t\tif (value == column.getFieldValue(data)) {\n\t\t\t\t\t\tunique = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn unique;\n\t\t},\n\n\t\t//must have a value\n\t\trequired: function required(cell, value, parameters) {\n\t\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\n\t\t}\n\t};\n\n\tTabulator.prototype.registerModule(\"validate\", Validate);\n\n\treturn Tabulator;\n});","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","function isAbsolute(pathname) {\n return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n list[i] = list[k];\n }\n\n list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n if (from === undefined) from = '';\n\n var toParts = (to && to.split('/')) || [];\n var fromParts = (from && from.split('/')) || [];\n\n var isToAbs = to && isAbsolute(to);\n var isFromAbs = from && isAbsolute(from);\n var mustEndAbs = isToAbs || isFromAbs;\n\n if (to && isAbsolute(to)) {\n // to is absolute\n fromParts = toParts;\n } else if (toParts.length) {\n // to is relative, drop the filename\n fromParts.pop();\n fromParts = fromParts.concat(toParts);\n }\n\n if (!fromParts.length) return '/';\n\n var hasTrailingSlash;\n if (fromParts.length) {\n var last = fromParts[fromParts.length - 1];\n hasTrailingSlash = last === '.' || last === '..' || last === '';\n } else {\n hasTrailingSlash = false;\n }\n\n var up = 0;\n for (var i = fromParts.length; i >= 0; i--) {\n var part = fromParts[i];\n\n if (part === '.') {\n spliceOne(fromParts, i);\n } else if (part === '..') {\n spliceOne(fromParts, i);\n up++;\n } else if (up) {\n spliceOne(fromParts, i);\n up--;\n }\n }\n\n if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n if (\n mustEndAbs &&\n fromParts[0] !== '' &&\n (!fromParts[0] || !isAbsolute(fromParts[0]))\n )\n fromParts.unshift('');\n\n var result = fromParts.join('/');\n\n if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n return result;\n}\n\nexport default resolvePathname;\n","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n if (isProduction) {\n throw new Error(prefix);\n }\n throw new Error(prefix + \": \" + (message || ''));\n}\n\nexport default invariant;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n var pathname = path || '/';\n var search = '';\n var hash = '';\n var hashIndex = pathname.indexOf('#');\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf('?');\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === '?' ? '' : search,\n hash: hash === '#' ? '' : hash\n };\n}\nfunction createPath(location) {\n var pathname = location.pathname,\n search = location.search,\n hash = location.hash;\n var path = pathname || '/';\n if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n var location;\n\n if (typeof path === 'string') {\n // Two-arg form: push(path, state)\n location = parsePath(path);\n location.state = state;\n } else {\n // One-arg form: push(location)\n location = _extends({}, path);\n if (location.pathname === undefined) location.pathname = '';\n\n if (location.search) {\n if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n } else {\n location.search = '';\n }\n\n if (location.hash) {\n if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n } else {\n location.hash = '';\n }\n\n if (state !== undefined && location.state === undefined) location.state = state;\n }\n\n try {\n location.pathname = decodeURI(location.pathname);\n } catch (e) {\n if (e instanceof URIError) {\n throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n } else {\n throw e;\n }\n }\n\n if (key) location.key = key;\n\n if (currentLocation) {\n // Resolve incomplete/relative pathname relative to current location.\n if (!location.pathname) {\n location.pathname = currentLocation.pathname;\n } else if (location.pathname.charAt(0) !== '/') {\n location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n }\n } else {\n // When there is no prior location and pathname is empty, set it to /\n if (!location.pathname) {\n location.pathname = '/';\n }\n }\n\n return location;\n}\nfunction locationsAreEqual(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n var prompt = null;\n\n function setPrompt(nextPrompt) {\n process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n prompt = nextPrompt;\n return function () {\n if (prompt === nextPrompt) prompt = null;\n };\n }\n\n function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n // TODO: If another transition starts while we're still confirming\n // the previous one, we may end up in a weird state. Figure out the\n // best way to handle this.\n if (prompt != null) {\n var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n if (typeof result === 'string') {\n if (typeof getUserConfirmation === 'function') {\n getUserConfirmation(result, callback);\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n callback(true);\n }\n } else {\n // Return false from a transition hook to cancel the transition.\n callback(result !== false);\n }\n } else {\n callback(true);\n }\n }\n\n var listeners = [];\n\n function appendListener(fn) {\n var isActive = true;\n\n function listener() {\n if (isActive) fn.apply(void 0, arguments);\n }\n\n listeners.push(listener);\n return function () {\n isActive = false;\n listeners = listeners.filter(function (item) {\n return item !== listener;\n });\n };\n }\n\n function notifyListeners() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n listeners.forEach(function (listener) {\n return listener.apply(void 0, args);\n });\n }\n\n return {\n setPrompt: setPrompt,\n confirmTransitionTo: confirmTransitionTo,\n appendListener: appendListener,\n notifyListeners: notifyListeners\n };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n var ua = window.navigator.userAgent;\n if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n try {\n return window.history.state || {};\n } catch (e) {\n // IE 11 sometimes throws when accessing window.history.state\n // See https://github.com/ReactTraining/history/pull/289\n return {};\n }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canUseHistory = supportsHistory();\n var needsHashChangeListener = !supportsPopStateOnHashChange();\n var _props = props,\n _props$forceRefresh = _props.forceRefresh,\n forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n function getDOMLocation(historyState) {\n var _ref = historyState || {},\n key = _ref.key,\n state = _ref.state;\n\n var _window$location = window.location,\n pathname = _window$location.pathname,\n search = _window$location.search,\n hash = _window$location.hash;\n var path = pathname + search + hash;\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path, state, key);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function handlePopState(event) {\n // Ignore extraneous popstate events in WebKit.\n if (isExtraneousPopstateEvent(event)) return;\n handlePop(getDOMLocation(event.state));\n }\n\n function handleHashChange() {\n handlePop(getDOMLocation(getHistoryState()));\n }\n\n var forceNextPop = false;\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of keys we've seen in sessionStorage.\n // Instead, we just default to 0 for keys we don't know.\n\n var toIndex = allKeys.indexOf(toLocation.key);\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allKeys.indexOf(fromLocation.key);\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n }\n\n var initialLocation = getDOMLocation(getHistoryState());\n var allKeys = [initialLocation.key]; // Public interface\n\n function createHref(location) {\n return basename + createPath(location);\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.pushState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.href = href;\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n var nextKeys = allKeys.slice(0, prevIndex + 1);\n nextKeys.push(location.key);\n allKeys = nextKeys;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n window.location.href = href;\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var href = createHref(location);\n var key = location.key,\n state = location.state;\n\n if (canUseHistory) {\n globalHistory.replaceState({\n key: key,\n state: state\n }, null, href);\n\n if (forceRefresh) {\n window.location.replace(href);\n } else {\n var prevIndex = allKeys.indexOf(history.location.key);\n if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n setState({\n action: action,\n location: location\n });\n }\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n window.location.replace(href);\n }\n });\n }\n\n function go(n) {\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(PopStateEvent, handlePopState);\n if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n hashbang: {\n encodePath: function encodePath(path) {\n return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n },\n decodePath: function decodePath(path) {\n return path.charAt(0) === '!' ? path.substr(1) : path;\n }\n },\n noslash: {\n encodePath: stripLeadingSlash,\n decodePath: addLeadingSlash\n },\n slash: {\n encodePath: addLeadingSlash,\n decodePath: addLeadingSlash\n }\n};\n\nfunction stripHash(url) {\n var hashIndex = url.indexOf('#');\n return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n // We can't use window.location.hash here because it's not\n // consistent across browsers - Firefox will pre-decode it!\n var href = window.location.href;\n var hashIndex = href.indexOf('#');\n return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n var globalHistory = window.history;\n var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n var _props = props,\n _props$getUserConfirm = _props.getUserConfirmation,\n getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n _props$hashType = _props.hashType,\n hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n var _HashPathCoders$hashT = HashPathCoders[hashType],\n encodePath = _HashPathCoders$hashT.encodePath,\n decodePath = _HashPathCoders$hashT.decodePath;\n\n function getDOMLocation() {\n var path = decodePath(getHashPath());\n process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n if (basename) path = stripBasename(path, basename);\n return createLocation(path);\n }\n\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = globalHistory.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n var forceNextPop = false;\n var ignorePath = null;\n\n function locationsAreEqual$$1(a, b) {\n return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n }\n\n function handleHashChange() {\n var path = getHashPath();\n var encodedPath = encodePath(path);\n\n if (path !== encodedPath) {\n // Ensure we always have a properly-encoded hash.\n replaceHashPath(encodedPath);\n } else {\n var location = getDOMLocation();\n var prevLocation = history.location;\n if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n ignorePath = null;\n handlePop(location);\n }\n }\n\n function handlePop(location) {\n if (forceNextPop) {\n forceNextPop = false;\n setState();\n } else {\n var action = 'POP';\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location\n });\n } else {\n revertPop(location);\n }\n });\n }\n }\n\n function revertPop(fromLocation) {\n var toLocation = history.location; // TODO: We could probably make this more reliable by\n // keeping a list of paths we've seen in sessionStorage.\n // Instead, we just default to 0 for paths we don't know.\n\n var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n if (toIndex === -1) toIndex = 0;\n var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n if (fromIndex === -1) fromIndex = 0;\n var delta = toIndex - fromIndex;\n\n if (delta) {\n forceNextPop = true;\n go(delta);\n }\n } // Ensure the hash is encoded properly before doing anything else.\n\n\n var path = getHashPath();\n var encodedPath = encodePath(path);\n if (path !== encodedPath) replaceHashPath(encodedPath);\n var initialLocation = getDOMLocation();\n var allPaths = [createPath(initialLocation)]; // Public interface\n\n function createHref(location) {\n var baseTag = document.querySelector('base');\n var href = '';\n\n if (baseTag && baseTag.getAttribute('href')) {\n href = stripHash(window.location.href);\n }\n\n return href + '#' + encodePath(basename + createPath(location));\n }\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a PUSH, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n pushHashPath(encodedPath);\n var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n var nextPaths = allPaths.slice(0, prevIndex + 1);\n nextPaths.push(path);\n allPaths = nextPaths;\n setState({\n action: action,\n location: location\n });\n } else {\n process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n setState();\n }\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, undefined, undefined, history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var path = createPath(location);\n var encodedPath = encodePath(basename + path);\n var hashChanged = getHashPath() !== encodedPath;\n\n if (hashChanged) {\n // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n // rather setState here and ignore the hashchange. The caveat here\n // is that other hash histories in the page will consider it a POP.\n ignorePath = path;\n replaceHashPath(encodedPath);\n }\n\n var prevIndex = allPaths.indexOf(createPath(history.location));\n if (prevIndex !== -1) allPaths[prevIndex] = path;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n globalHistory.go(n);\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n var listenerCount = 0;\n\n function checkDOMListeners(delta) {\n listenerCount += delta;\n\n if (listenerCount === 1 && delta === 1) {\n window.addEventListener(HashChangeEvent$1, handleHashChange);\n } else if (listenerCount === 0) {\n window.removeEventListener(HashChangeEvent$1, handleHashChange);\n }\n }\n\n var isBlocked = false;\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n var unblock = transitionManager.setPrompt(prompt);\n\n if (!isBlocked) {\n checkDOMListeners(1);\n isBlocked = true;\n }\n\n return function () {\n if (isBlocked) {\n isBlocked = false;\n checkDOMListeners(-1);\n }\n\n return unblock();\n };\n }\n\n function listen(listener) {\n var unlisten = transitionManager.appendListener(listener);\n checkDOMListeners(1);\n return function () {\n checkDOMListeners(-1);\n unlisten();\n };\n }\n\n var history = {\n length: globalHistory.length,\n action: 'POP',\n location: initialLocation,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n block: block,\n listen: listen\n };\n return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n if (props === void 0) {\n props = {};\n }\n\n var _props = props,\n getUserConfirmation = _props.getUserConfirmation,\n _props$initialEntries = _props.initialEntries,\n initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n _props$initialIndex = _props.initialIndex,\n initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n _props$keyLength = _props.keyLength,\n keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n var transitionManager = createTransitionManager();\n\n function setState(nextState) {\n _extends(history, nextState);\n\n history.length = history.entries.length;\n transitionManager.notifyListeners(history.location, history.action);\n }\n\n function createKey() {\n return Math.random().toString(36).substr(2, keyLength);\n }\n\n var index = clamp(initialIndex, 0, initialEntries.length - 1);\n var entries = initialEntries.map(function (entry) {\n return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n }); // Public interface\n\n var createHref = createPath;\n\n function push(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'PUSH';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n var prevIndex = history.index;\n var nextIndex = prevIndex + 1;\n var nextEntries = history.entries.slice(0);\n\n if (nextEntries.length > nextIndex) {\n nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n } else {\n nextEntries.push(location);\n }\n\n setState({\n action: action,\n location: location,\n index: nextIndex,\n entries: nextEntries\n });\n });\n }\n\n function replace(path, state) {\n process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n var action = 'REPLACE';\n var location = createLocation(path, state, createKey(), history.location);\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (!ok) return;\n history.entries[history.index] = location;\n setState({\n action: action,\n location: location\n });\n });\n }\n\n function go(n) {\n var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n var action = 'POP';\n var location = history.entries[nextIndex];\n transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n if (ok) {\n setState({\n action: action,\n location: location,\n index: nextIndex\n });\n } else {\n // Mimic the behavior of DOM histories by\n // causing a render after a cancelled POP.\n setState();\n }\n });\n }\n\n function goBack() {\n go(-1);\n }\n\n function goForward() {\n go(1);\n }\n\n function canGo(n) {\n var nextIndex = history.index + n;\n return nextIndex >= 0 && nextIndex < history.entries.length;\n }\n\n function block(prompt) {\n if (prompt === void 0) {\n prompt = false;\n }\n\n return transitionManager.setPrompt(prompt);\n }\n\n function listen(listener) {\n return transitionManager.appendListener(listener);\n }\n\n var history = {\n length: entries.length,\n action: 'POP',\n location: entries[index],\n index: index,\n entries: entries,\n createHref: createHref,\n push: push,\n replace: replace,\n go: go,\n goBack: goBack,\n goForward: goForward,\n canGo: canGo,\n block: block,\n listen: listen\n };\n return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","import React, { Component } from 'react';\nimport _inheritsLoose from '@babel/runtime/helpers/inheritsLoose';\nimport PropTypes from 'prop-types';\nimport gud from 'gud';\nimport warning from 'tiny-warning';\n\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nfunction objectIs(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n } else {\n return x !== x && y !== y;\n }\n}\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue, changedBits) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value, changedBits);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nfunction createReactContext(defaultValue, calculateChangedBits) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + gud() + '__';\n\n var Provider =\n /*#__PURE__*/\n function (_Component) {\n _inheritsLoose(Provider, _Component);\n\n function Provider() {\n var _this;\n\n _this = _Component.apply(this, arguments) || this;\n _this.emitter = createEventEmitter(_this.props.value);\n return _this;\n }\n\n var _proto = Provider.prototype;\n\n _proto.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n var oldValue = this.props.value;\n var newValue = nextProps.value;\n var changedBits;\n\n if (objectIs(oldValue, newValue)) {\n changedBits = 0;\n } else {\n changedBits = typeof calculateChangedBits === 'function' ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n if (process.env.NODE_ENV !== 'production') {\n warning((changedBits & MAX_SIGNED_31_BIT_INT) === changedBits, 'calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: ' + changedBits);\n }\n\n changedBits |= 0;\n\n if (changedBits !== 0) {\n this.emitter.set(nextProps.value, changedBits);\n }\n }\n }\n };\n\n _proto.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = PropTypes.object.isRequired, _Provider$childContex);\n\n var Consumer =\n /*#__PURE__*/\n function (_Component2) {\n _inheritsLoose(Consumer, _Component2);\n\n function Consumer() {\n var _this2;\n\n _this2 = _Component2.apply(this, arguments) || this;\n _this2.state = {\n value: _this2.getValue()\n };\n\n _this2.onUpdate = function (newValue, changedBits) {\n var observedBits = _this2.observedBits | 0;\n\n if ((observedBits & changedBits) !== 0) {\n _this2.setState({\n value: _this2.getValue()\n });\n }\n };\n\n return _this2;\n }\n\n var _proto2 = Consumer.prototype;\n\n _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var observedBits = nextProps.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n\n var observedBits = this.props.observedBits;\n this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT : observedBits;\n };\n\n _proto2.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n _proto2.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n _proto2.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = PropTypes.object, _Consumer$contextType);\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nvar index = React.createContext || createReactContext;\n\nexport default index;\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","// TODO: Replace with React.createContext once we can assume React 16+\nimport createContext from \"mini-create-react-context\";\n\nconst createNamedContext = name => {\n const context = createContext();\n context.displayName = name;\n\n return context;\n};\n\nconst context = /*#__PURE__*/ createNamedContext(\"Router\");\nexport default context;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext\";\n\n/**\n * The public API for putting history on context.\n */\nclass Router extends React.Component {\n static computeRootMatch(pathname) {\n return { path: \"/\", url: \"/\", params: {}, isExact: pathname === \"/\" };\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n location: props.history.location\n };\n\n // This is a bit of a hack. We have to start listening for location\n // changes here in the constructor in case there are any s\n // on the initial render. If there are, they will replace/push when\n // they mount and since cDM fires in children before parents, we may\n // get a new location before the is mounted.\n this._isMounted = false;\n this._pendingLocation = null;\n\n if (!props.staticContext) {\n this.unlisten = props.history.listen(location => {\n if (this._isMounted) {\n this.setState({ location });\n } else {\n this._pendingLocation = location;\n }\n });\n }\n }\n\n componentDidMount() {\n this._isMounted = true;\n\n if (this._pendingLocation) {\n this.setState({ location: this._pendingLocation });\n }\n }\n\n componentWillUnmount() {\n if (this.unlisten) this.unlisten();\n }\n\n render() {\n return (\n \n );\n }\n}\n\nif (__DEV__) {\n Router.propTypes = {\n children: PropTypes.node,\n history: PropTypes.object.isRequired,\n staticContext: PropTypes.object\n };\n\n Router.prototype.componentDidUpdate = function(prevProps) {\n warning(\n prevProps.history === this.props.history,\n \"You cannot change \"\n );\n };\n}\n\nexport default Router;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createMemoryHistory as createHistory } from \"history\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router\";\n\n/**\n * The public API for a that stores location in memory.\n */\nclass MemoryRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n MemoryRouter.propTypes = {\n initialEntries: PropTypes.array,\n initialIndex: PropTypes.number,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number,\n children: PropTypes.node\n };\n\n MemoryRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { MemoryRouter as Router }`.\"\n );\n };\n}\n\nexport default MemoryRouter;\n","import React from \"react\";\n\nclass Lifecycle extends React.Component {\n componentDidMount() {\n if (this.props.onMount) this.props.onMount.call(this, this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);\n }\n\n componentWillUnmount() {\n if (this.props.onUnmount) this.props.onUnmount.call(this, this);\n }\n\n render() {\n return null;\n }\n}\n\nexport default Lifecycle;\n","import pathToRegexp from \"path-to-regexp\";\n\nconst cache = {};\nconst cacheLimit = 10000;\nlet cacheCount = 0;\n\nfunction compilePath(path, options) {\n const cacheKey = `${options.end}${options.strict}${options.sensitive}`;\n const pathCache = cache[cacheKey] || (cache[cacheKey] = {});\n\n if (pathCache[path]) return pathCache[path];\n\n const keys = [];\n const regexp = pathToRegexp(path, keys, options);\n const result = { regexp, keys };\n\n if (cacheCount < cacheLimit) {\n pathCache[path] = result;\n cacheCount++;\n }\n\n return result;\n}\n\n/**\n * Public API for matching a URL pathname to a path.\n */\nfunction matchPath(pathname, options = {}) {\n if (typeof options === \"string\" || Array.isArray(options)) {\n options = { path: options };\n }\n\n const { path, exact = false, strict = false, sensitive = false } = options;\n\n const paths = [].concat(path);\n\n return paths.reduce((matched, path) => {\n if (!path && path !== \"\") return null;\n if (matched) return matched;\n\n const { regexp, keys } = compilePath(path, {\n end: exact,\n strict,\n sensitive\n });\n const match = regexp.exec(pathname);\n\n if (!match) return null;\n\n const [url, ...values] = match;\n const isExact = pathname === url;\n\n if (exact && !isExact) return null;\n\n return {\n path, // the path used to match\n url: path === \"/\" && url === \"\" ? \"/\" : url, // the matched portion of the URL\n isExact, // whether or not we matched exactly\n params: keys.reduce((memo, key, index) => {\n memo[key.name] = values[index];\n return memo;\n }, {})\n };\n }, null);\n}\n\nexport default matchPath;\n","import React from \"react\";\nimport { isValidElementType } from \"react-is\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext\";\nimport matchPath from \"./matchPath\";\n\nfunction isEmptyChildren(children) {\n return React.Children.count(children) === 0;\n}\n\nfunction evalChildrenDev(children, props, path) {\n const value = children(props);\n\n warning(\n value !== undefined,\n \"You returned `undefined` from the `children` function of \" +\n `, but you ` +\n \"should have returned a React element or `null`\"\n );\n\n return value || null;\n}\n\n/**\n * The public API for matching a single path and rendering.\n */\nclass Route extends React.Component {\n render() {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const location = this.props.location || context.location;\n const match = this.props.computedMatch\n ? this.props.computedMatch // already computed the match for us\n : this.props.path\n ? matchPath(location.pathname, this.props)\n : context.match;\n\n const props = { ...context, location, match };\n\n let { children, component, render } = this.props;\n\n // Preact uses an empty array as children by\n // default, so use null if that's the case.\n if (Array.isArray(children) && children.length === 0) {\n children = null;\n }\n\n return (\n \n {props.match\n ? children\n ? typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : children\n : component\n ? React.createElement(component, props)\n : render\n ? render(props)\n : null\n : typeof children === \"function\"\n ? __DEV__\n ? evalChildrenDev(children, props, this.props.path)\n : children(props)\n : null}\n \n );\n }}\n \n );\n }\n}\n\nif (__DEV__) {\n Route.propTypes = {\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n component: (props, propName) => {\n if (props[propName] && !isValidElementType(props[propName])) {\n return new Error(\n `Invalid prop 'component' supplied to 'Route': the prop is not a valid React component`\n );\n }\n },\n exact: PropTypes.bool,\n location: PropTypes.object,\n path: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string)\n ]),\n render: PropTypes.func,\n sensitive: PropTypes.bool,\n strict: PropTypes.bool\n };\n\n Route.prototype.componentDidMount = function() {\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.component\n ),\n \"You should not use and in the same route; will be ignored\"\n );\n\n warning(\n !(\n this.props.children &&\n !isEmptyChildren(this.props.children) &&\n this.props.render\n ),\n \"You should not use and in the same route; will be ignored\"\n );\n\n warning(\n !(this.props.component && this.props.render),\n \"You should not use and in the same route; will be ignored\"\n );\n };\n\n Route.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Route;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createLocation, createPath } from \"history\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport Router from \"./Router\";\n\nfunction addLeadingSlash(path) {\n return path.charAt(0) === \"/\" ? path : \"/\" + path;\n}\n\nfunction addBasename(basename, location) {\n if (!basename) return location;\n\n return {\n ...location,\n pathname: addLeadingSlash(basename) + location.pathname\n };\n}\n\nfunction stripBasename(basename, location) {\n if (!basename) return location;\n\n const base = addLeadingSlash(basename);\n\n if (location.pathname.indexOf(base) !== 0) return location;\n\n return {\n ...location,\n pathname: location.pathname.substr(base.length)\n };\n}\n\nfunction createURL(location) {\n return typeof location === \"string\" ? location : createPath(location);\n}\n\nfunction staticHandler(methodName) {\n return () => {\n invariant(false, \"You cannot %s with \", methodName);\n };\n}\n\nfunction noop() {}\n\n/**\n * The public top-level API for a \"static\" , so-called because it\n * can't actually change the current location. Instead, it just records\n * location changes in a context object. Useful mainly in testing and\n * server-rendering scenarios.\n */\nclass StaticRouter extends React.Component {\n navigateTo(location, action) {\n const { basename = \"\", context = {} } = this.props;\n context.action = action;\n context.location = addBasename(basename, createLocation(location));\n context.url = createURL(context.location);\n }\n\n handlePush = location => this.navigateTo(location, \"PUSH\");\n handleReplace = location => this.navigateTo(location, \"REPLACE\");\n handleListen = () => noop;\n handleBlock = () => noop;\n\n render() {\n const { basename = \"\", context = {}, location = \"/\", ...rest } = this.props;\n\n const history = {\n createHref: path => addLeadingSlash(basename + createURL(path)),\n action: \"POP\",\n location: stripBasename(basename, createLocation(location)),\n push: this.handlePush,\n replace: this.handleReplace,\n go: staticHandler(\"go\"),\n goBack: staticHandler(\"goBack\"),\n goForward: staticHandler(\"goForward\"),\n listen: this.handleListen,\n block: this.handleBlock\n };\n\n return ;\n }\n}\n\nif (__DEV__) {\n StaticRouter.propTypes = {\n basename: PropTypes.string,\n context: PropTypes.object,\n location: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n };\n\n StaticRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { StaticRouter as Router }`.\"\n );\n };\n}\n\nexport default StaticRouter;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport warning from \"tiny-warning\";\n\nimport RouterContext from \"./RouterContext\";\nimport matchPath from \"./matchPath\";\n\n/**\n * The public API for rendering the first that matches.\n */\nclass Switch extends React.Component {\n render() {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const location = this.props.location || context.location;\n\n let element, match;\n\n // We use React.Children.forEach instead of React.Children.toArray().find()\n // here because toArray adds keys to all child elements and we do not want\n // to trigger an unmount/remount for two s that render the same\n // component at different URLs.\n React.Children.forEach(this.props.children, child => {\n if (match == null && React.isValidElement(child)) {\n element = child;\n\n const path = child.props.path || child.props.from;\n\n match = path\n ? matchPath(location.pathname, { ...child.props, path })\n : context.match;\n }\n });\n\n return match\n ? React.cloneElement(element, { location, computedMatch: match })\n : null;\n }}\n \n );\n }\n}\n\nif (__DEV__) {\n Switch.propTypes = {\n children: PropTypes.node,\n location: PropTypes.object\n };\n\n Switch.prototype.componentDidUpdate = function(prevProps) {\n warning(\n !(this.props.location && !prevProps.location),\n ' elements should not change from uncontrolled to controlled (or vice versa). You initially used no \"location\" prop and then provided one on a subsequent render.'\n );\n\n warning(\n !(!this.props.location && prevProps.location),\n ' elements should not change from controlled to uncontrolled (or vice versa). You provided a \"location\" prop initially but omitted it on a subsequent render.'\n );\n };\n}\n\nexport default Switch;\n","import React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport Context from \"./RouterContext.js\";\nimport matchPath from \"./matchPath.js\";\n\nconst useContext = React.useContext;\n\nexport function useHistory() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useHistory()\"\n );\n }\n\n return useContext(Context).history;\n}\n\nexport function useLocation() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useLocation()\"\n );\n }\n\n return useContext(Context).location;\n}\n\nexport function useParams() {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useParams()\"\n );\n }\n\n const match = useContext(Context).match;\n return match ? match.params : {};\n}\n\nexport function useRouteMatch(path) {\n if (__DEV__) {\n invariant(\n typeof useContext === \"function\",\n \"You must use React >= 16.8 in order to use useRouteMatch()\"\n );\n }\n\n return path\n ? matchPath(useLocation().pathname, path)\n : useContext(Context).match;\n}\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses HTML5 history.\n */\nclass BrowserRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n BrowserRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n forceRefresh: PropTypes.bool,\n getUserConfirmation: PropTypes.func,\n keyLength: PropTypes.number\n };\n\n BrowserRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\"\n );\n };\n}\n\nexport default BrowserRouter;\n","import React from \"react\";\nimport { Router } from \"react-router\";\nimport { createHashHistory as createHistory } from \"history\";\nimport PropTypes from \"prop-types\";\nimport warning from \"tiny-warning\";\n\n/**\n * The public API for a that uses window.location.hash.\n */\nclass HashRouter extends React.Component {\n history = createHistory(this.props);\n\n render() {\n return ;\n }\n}\n\nif (__DEV__) {\n HashRouter.propTypes = {\n basename: PropTypes.string,\n children: PropTypes.node,\n getUserConfirmation: PropTypes.func,\n hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n };\n\n HashRouter.prototype.componentDidMount = function() {\n warning(\n !this.props.history,\n \" ignores the history prop. To use a custom history, \" +\n \"use `import { Router }` instead of `import { HashRouter as Router }`.\"\n );\n };\n}\n\nexport default HashRouter;\n","import { createLocation } from \"history\";\n\nexport const resolveToLocation = (to, currentLocation) =>\n typeof to === \"function\" ? to(currentLocation) : to;\n\nexport const normalizeToLocation = (to, currentLocation) => {\n return typeof to === \"string\"\n ? createLocation(to, null, null, currentLocation)\n : to;\n};\n","import React from \"react\";\nimport { __RouterContext as RouterContext } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport { resolveToLocation, normalizeToLocation } from \"./utils/locationUtils\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nconst LinkAnchor = forwardRef(\n (\n {\n innerRef, // TODO: deprecate\n navigate,\n onClick,\n ...rest\n },\n forwardedRef\n ) => {\n const { target } = rest;\n\n let props = {\n ...rest,\n onClick: event => {\n try {\n if (onClick) onClick(event);\n } catch (ex) {\n event.preventDefault();\n throw ex;\n }\n\n if (\n !event.defaultPrevented && // onClick prevented default\n event.button === 0 && // ignore everything but left clicks\n (!target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n !isModifiedEvent(event) // ignore clicks with modifier keys\n ) {\n event.preventDefault();\n navigate();\n }\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.ref = innerRef;\n }\n\n return ;\n }\n);\n\nif (__DEV__) {\n LinkAnchor.displayName = \"LinkAnchor\";\n}\n\n/**\n * The public API for rendering a history-aware .\n */\nconst Link = forwardRef(\n (\n {\n component = LinkAnchor,\n replace,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const { history } = context;\n\n const location = normalizeToLocation(\n resolveToLocation(to, context.location),\n context.location\n );\n\n const href = location ? history.createHref(location) : \"\";\n const props = {\n ...rest,\n href,\n navigate() {\n const location = resolveToLocation(to, context.location);\n const method = replace ? history.replace : history.push;\n\n method(location);\n }\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return React.createElement(component, props);\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n const toType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.object,\n PropTypes.func\n ]);\n const refType = PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.shape({ current: PropTypes.any })\n ]);\n\n Link.displayName = \"Link\";\n\n Link.propTypes = {\n innerRef: refType,\n onClick: PropTypes.func,\n replace: PropTypes.bool,\n target: PropTypes.string,\n to: toType.isRequired\n };\n}\n\nexport default Link;\n","import React from \"react\";\nimport { __RouterContext as RouterContext, matchPath } from \"react-router\";\nimport PropTypes from \"prop-types\";\nimport invariant from \"tiny-invariant\";\nimport Link from \"./Link\";\nimport { resolveToLocation, normalizeToLocation } from \"./utils/locationUtils\";\n\n// React 15 compat\nconst forwardRefShim = C => C;\nlet { forwardRef } = React;\nif (typeof forwardRef === \"undefined\") {\n forwardRef = forwardRefShim;\n}\n\nfunction joinClassnames(...classnames) {\n return classnames.filter(i => i).join(\" \");\n}\n\n/**\n * A wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = forwardRef(\n (\n {\n \"aria-current\": ariaCurrent = \"page\",\n activeClassName = \"active\",\n activeStyle,\n className: classNameProp,\n exact,\n isActive: isActiveProp,\n location: locationProp,\n strict,\n style: styleProp,\n to,\n innerRef, // TODO: deprecate\n ...rest\n },\n forwardedRef\n ) => {\n return (\n \n {context => {\n invariant(context, \"You should not use outside a \");\n\n const currentLocation = locationProp || context.location;\n const toLocation = normalizeToLocation(\n resolveToLocation(to, currentLocation),\n currentLocation\n );\n const { pathname: path } = toLocation;\n // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n const escapedPath =\n path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n\n const match = escapedPath\n ? matchPath(currentLocation.pathname, {\n path: escapedPath,\n exact,\n strict\n })\n : null;\n const isActive = !!(isActiveProp\n ? isActiveProp(match, currentLocation)\n : match);\n\n const className = isActive\n ? joinClassnames(classNameProp, activeClassName)\n : classNameProp;\n const style = isActive ? { ...styleProp, ...activeStyle } : styleProp;\n\n const props = {\n \"aria-current\": (isActive && ariaCurrent) || null,\n className,\n style,\n to: toLocation,\n ...rest\n };\n\n // React 15 compat\n if (forwardRefShim !== forwardRef) {\n props.ref = forwardedRef || innerRef;\n } else {\n props.innerRef = innerRef;\n }\n\n return ;\n }}\n \n );\n }\n);\n\nif (__DEV__) {\n NavLink.displayName = \"NavLink\";\n\n const ariaCurrentType = PropTypes.oneOf([\n \"page\",\n \"step\",\n \"location\",\n \"date\",\n \"time\",\n \"true\"\n ]);\n\n NavLink.propTypes = {\n ...Link.propTypes,\n \"aria-current\": ariaCurrentType,\n activeClassName: PropTypes.string,\n activeStyle: PropTypes.object,\n className: PropTypes.string,\n exact: PropTypes.bool,\n isActive: PropTypes.func,\n location: PropTypes.object,\n strict: PropTypes.bool,\n style: PropTypes.object\n };\n}\n\nexport default NavLink;\n","// Interger: format x for display. if x is null return '--' otherwise return x\r\nexport function DispInt(x) {\r\n return(x !== null ? x.toString() : '--')\r\n}\r\n\r\n// Text: format x for display. if x is null return '--' otherwise return x\r\nexport function DispTxt(x) {\r\n return(x !== null ? x : '--');\r\n}\r\n\r\n// Decimal: format x for display. if x is null return '--' otherwise return x rounded to 1 decimal\r\nexport function DispDec(x) {\r\n return(x !== null ? x.toFixed(1) : '--');\r\n}\r\n\r\n// Percent: format x for display. if x is null return '--' otherwise return (x * 100) rounded to 1 decimal\r\nexport function DispPct(x) {\r\n return(x !== null ? (x*100).toFixed(1) : '--');\r\n}\r\n\r\nexport function DispPct0(x) {\r\n return(x !== null ? (x*100).toFixed(0) : '--');\r\n}\r\n\r\n// Comma: format x for display. if x is null return '--' otherwise return x formatted with comma if > 999\r\nexport function DispCom(x) {\r\n return(x !== null ? x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\") : '--');\r\n}\r\n\r\n// test for null\r\nexport function NullTst(x) {\r\n return(x !== null ? x : null);\r\n}\r\n\r\n// sum two numbers. if either is null, return null\r\nexport function NullSum(accumulator, addend) {\r\n return accumulator === null ? null : addend === null ? null : accumulator + addend;\r\n}\r\n\r\n// sum two numbers ignoring any nulls unless both are null\r\nexport function NullBypassSum(accumulator, addend) {\r\n return accumulator === null ? (addend === null ? null : addend) : (addend === null ? accumulator : accumulator + addend);\r\n}\r\n\r\n// sum two numbers. if either is null, bypass it and return the other only. If both are null, return null\r\n//export function NullBypassSum(accumulator, addend) {\r\n// return accumulator !== null ? addend !== null ? accumulator + addend : accumulator : null;\r\n//}\r\n\r\n// subtract two numbers. if either is null, return null\r\nexport function NullSub(minuend, subtrahend) {\r\n return minuend === null ? null : subtrahend === null ? null : minuend - subtrahend;\r\n}\r\n\r\n// determine the greater of two numbers. if either is null, return null\r\nexport function NullMax(currVal, newVal) {\r\n return currVal === null ? null : newVal === null ? null : MaxVal(currVal, newVal);\r\n}\r\n\r\n// determine the lesser of two numbers. if either is null, return null\r\nexport function NullMin(currVal, newVal) {\r\n return currVal === null ? null : newVal === null ? null : MinVal(currVal, newVal);\r\n}\r\n\r\n// determine the greater of two numbers.\r\nexport function MaxVal(val1, val2) {\r\n return val1 > val2 ? val1 : val2;\r\n}\r\n\r\n// determine the lesser of two numbers.\r\nexport function MinVal(val1, val2) {\r\n return val1 > val2 ? val2 : val1;\r\n}\r\n\r\n// divide two numbers. if either is null, return null\r\nexport function NullDiv(dividend, divisor) {\r\n return dividend === null ? null : divisor === null ? null : divisor === 0 ? 0 : dividend/divisor;\r\n}\r\n\r\n// multiply two numbers. if either is null, return null\r\nexport function NullMult(factor1, factor2) {\r\n return factor1 === null ? null : factor2 === null ? null : factor1 * factor2;\r\n}\r\n\r\n// id season is 2015, return null otherwise return passed value\r\nexport function Tst2015(season, passedValue) {\r\n return season === 2015 ? null : passedValue;\r\n}\r\n\r\n// this function implements a standard NFL calculation for passer/receiver rating\r\nexport function CalcPlayerRating(attempts,completions,yards,td,int) {\r\n if (attempts === null || completions === null || yards === null || td === null || int === null) {\r\n return(null); // can't calculate if any value is null\r\n }\r\n if (attempts === 0) {\r\n return(0); // can't calculate if devisor is zero\r\n }\r\n let compPct = ((completions/attempts) - .3) * 5; // NFL completion percentage component\r\n let yardsPerAtt = ((yards/attempts) - 3) * .25; // NFL yards per attempt component\r\n let tdPct = (td/attempts) * 20; // NFL TS percent component\r\n let intPct = 2.375 - ((int/attempts) * 25); // NFL interception percent component\r\n // then next four line ensure that all component values are between 0 and 2.375 per NFL\r\n compPct = (compPct < 0) ? 0 : (compPct > 2.375) ? 2.375 : compPct;\r\n yardsPerAtt = (yardsPerAtt < 0) ? 0 : (yardsPerAtt > 2.375) ? 2.375 : yardsPerAtt;\r\n tdPct = (tdPct > 2.375) ? 2.375 : tdPct;\r\n intPct = (intPct < 0) ? 0 : intPct;\r\n return(((compPct + yardsPerAtt + tdPct + intPct) / 6) * 100); // divide the sum of components by 6 and multiply by 100 per NFL.\r\n}\r\n\r\n// calculate age in years given the birth date as a date type\r\nexport function GetAge(byear,bmonth,bday) {\r\n var today = new Date(); // get current date as a date variable\r\n var birthDate = new Date(parseInt(byear),parseInt(bmonth)-1,parseInt(bday)); // convert parameters to a date variable\r\n var age = today.getFullYear() - birthDate.getFullYear(); // subtract birth year from current year to get full years\r\n var m = today.getMonth() - birthDate.getMonth(); // subtract birth month form current month\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { // if birth month and day are less than current month and day\r\n age--; //reduce age by 1 year since current birthdate hasn't ocurred yet\r\n }\r\n return age;\r\n}\r\n\r\n// this function formats number adding the appropriate 'st' ,'nd', 'rd' or 'th' suffix to any number\r\nexport function FormatNumSuffixed(num) {\r\n let suffix=[\"st\",\"nd\",\"rd\",\"th\"]; // suffixes\r\n let i = 0; // suffix index\r\n if (num === null) {\r\n return('--');\r\n } else {\r\n if (num === 11 || num === 12 || num === 13) { // exception: these allways end in 'th' rather than 'st', 'dn', 'rd'\r\n i = 3; // force index to 3 to point to 'th'\r\n } else {\r\n i = num%10 // get just the ones place\r\n i = (i === 0 || i > 4 ? 4 : i) - 1; // if ones place is 0 or > 4, force 4, otherwise use ones place. subtract 1 to point to array.\r\n }\r\n return(num + suffix[i]); // return the number with the appropriate suffix\r\n }\r\n}\r\n\r\nexport function DispFunc(cell, formatterParams, onRendered, decimals = 0, withComma = false, withPercent = false) {\r\n let val = cell.getValue();\r\n // console.log(\"DispFunc\", cell.getField(), cell.getValue());\r\n if (val === null){\r\n return \"--\";\r\n }\r\n val = val.toFixed(decimals);\r\n if (withComma){\r\n val = val.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\r\n }\r\n if (withPercent){\r\n val = val + \"%\";\r\n }\r\n return val\r\n}\r\n\r\nexport function GameResult(teamScore, opponentScore) {\r\n return (teamScore > opponentScore ? \"W\" : \"L\") + \" \" + teamScore.toString() + \"-\" +opponentScore.toString();\r\n}","// TableColumnWidths\r\n// First value is for leaderboards\r\n// Second column for player pages\r\n// This is used in each tabulator module when creating the data array\r\n// \r\nexport var qbSummary = [\r\n [\"108\", \"0\"], // Player\r\n [\"40\", \"40\"], // Year\r\n [\"75\", \"76\"], // Team\r\n [\"33\", \"33\"], // G\r\n [\"33\", \"33\"], // GS\r\n [\"40\", \"50\"], // Passing Att\r\n [\"40\", \"50\"], // Passing Cmp\r\n [\"40\", \"48\"], // Passing Pct\r\n [\"54\", \"66\"], // Passing Yds\r\n [\"50\", \"50\"], // Passing Yds/Att\r\n [\"50\", \"50\"], // Passing Y/G\r\n [\"40\", \"44\"], // Passing Lg\r\n [\"40\", \"44\"], // Passing TD\r\n [\"40\", \"44\"], // Passing Int\r\n [\"40\", \"50\"], // Rushing Att\r\n [\"44\", \"66\"], // Rushing Yds\r\n [\"40\", \"44\"], // Rushing Avg\r\n [\"40\", \"45\"], // Rushing Lg\r\n [\"40\", \"45\"], // Rushing TD\r\n [\"40\", \"45\"], // Fumbles Fum\r\n [\"40\", \"45\"], // Fumbles Lost\r\n [\"60\", \"65\"], // QB Rating\r\n [\"51\", \"45\"], // IQR\r\n [\"65\", \"65\"] // Total Points Earned\r\n];\r\n\r\nexport var qbAdvPassing = [\r\n [\"119\", \"0\"], // Player\r\n [\"40\", \"40\"], // Year\r\n [\"70\", \"63\"], // Team\r\n [\"50\", \"58\"], // Dropbacks\r\n [\"50\", \"56\"], // Sacks\r\n [\"40\", \"46\"], // Sack Yards\r\n [\"50\", \"56\"], // Sack %\r\n [\"52\", \"58\"], // TD%\r\n [\"51\", \"57\"], // Int %\r\n [\"44\", \"56\"], // On Target\r\n [\"59\", \"62\"], // Catchable\r\n [\"50\", \"57\"], // On Target %\r\n [\"76\", \"80\"], // Catchable %\r\n [\"65\", \"71\"], // Completed Air Yards\r\n [\"75\", \"81\"], // Yards After Catch\r\n [\"50\", \"65\"], // Air Yards%\r\n [\"68\", \"69\"], // Intended Air Yards\r\n [\"78\", \"78\"], // Average Throw Depth\r\n [\"55\", \"89\"] // Passing Points Earned\r\n];\r\n\r\nexport var qbEffectiveness = [\r\n [\"110\", \"0\"], // Player\r\n [\"42\", \"40\"], // Year\r\n [\"89\", \"105\"], // Team\r\n [\"33\", \"33\"], // Behind LOS Attempts\r\n [\"33\", \"33\"], // Behind LOS Completions\r\n [\"40\", \"46\"], // Behind LOS IQR\r\n [\"40\", \"46\"], // Behind LOS Attempts Left %\r\n [\"40\", \"46\"], // Behind LOS Attempts Middle %\r\n [\"40\", \"46\"], // Behind LOS Attempts Right %\r\n [\"33\", \"33\"], // Short Attempts\r\n [\"33\", \"33\"], // Short Completions\r\n [\"40\", \"46\"], // Short IQR\r\n [\"40\", \"46\"], // Short Attempts Left %\r\n [\"40\", \"46\"], // Short Attempts Middle %\r\n [\"40\", \"46\"], // Short Attempts Right %\r\n [\"33\", \"33\"], // Intermediate Attempts\r\n [\"33\", \"33\"], // Intermediate Completiong\r\n [\"40\", \"46\"], // Intermediate IQR\r\n [\"40\", \"46\"], // Intermediate Attempts Left %\r\n [\"40\", \"46\"], // Intermediate Attempts Middle %\r\n [\"40\", \"46\"], // Intermediate Attempts Right %\r\n [\"33\", \"33\"], // Deep Attempts\r\n [\"33\", \"33\"], // Deep Completions\r\n [\"40\", \"46\"], // Deep IQR\r\n [\"40\", \"46\"], // Deep Attempts Left %\r\n [\"40\", \"46\"], // Deep Attempts Middle %\r\n [\"40\", \"46\"], // Deep Attempts Right %\r\n];\r\n\r\nexport var qbRushing = [\r\n [\"120\", \"0\"], // Player\r\n [\"40\", \"40\"], // Year\r\n [\"88\", \"105\"], // Team\r\n [\"68\", \"76\"], // First Downs Total\r\n [\"68\", \"76\"], // First Downs Pct\r\n [\"68\", \"76\"], // Inside Att\r\n [\"68\", \"76\"], // Inside Avg\r\n [\"68\", \"76\"], // Off Tackle Att\r\n [\"68\", \"76\"], // Off Tackle Avg\r\n [\"68\", \"76\"], // Outside Att\r\n [\"68\", \"76\"], // Outside Avg\r\n [\"68\", \"76\"], // Yards After Contact Yards\r\n [\"68\", \"76\"], // Yards After Contact Avg\r\n [\"68\", \"76\"], // Broken Tackles Total\r\n [\"68\", \"76\"], // Broken Tackles Pct\r\n [\"80\", \"87\"] // Rushing Points Earned\r\n];\r\n\r\nexport var rbfbSummary = [\r\n [\"93\", \"0\"], // Player\r\n [\"33\", \"0\"], // Position\r\n [\"40\", \"73\"], // Year\r\n [\"58\", \"85\"], // Team\r\n [\"33\", \"33\"], // G\r\n [\"33\", \"33\"], // GS\r\n [\"33\", \"33\"], // Rushing Att\r\n [\"44\", \"52\"], // Rushing Yds\r\n [\"40\", \"40\"], // Rushing Avg\r\n [\"33\", \"33\"], // Rushing Lg\r\n [\"33\", \"33\"], // Rushing TD\r\n [\"40\", \"50\"], // Rushing Y/G\r\n [\"33\", \"33\"], // Receiving Rec\r\n [\"44\", \"52\"], // Receiving Yds\r\n [\"40\", \"40\"], // Receiving Avg\r\n [\"33\", \"33\"], // Receiving Lg\r\n [\"33\", \"33\"], // Receiving TD\r\n [\"45\", \"50\"], // Receiving Y/G\r\n [\"33\", \"33\"], // Punt Returns Num\r\n [\"40\", \"47\"], // Punt Returns Yds\r\n [\"40\", \"40\"], // Punt Returns Avg\r\n [\"33\", \"33\"], // Punt Returns TD\r\n [\"33\", \"33\"], // Kickoff Returns Num\r\n [\"33\", \"48\"], // Kickoff Returns Yds\r\n [\"40\", \"40\"], // Kickoff Returns Avg\r\n [\"33\", \"33\"], // Kickoff Returns TD\r\n [\"33\", \"33\"], // Fumbles Fum \r\n [\"33\", \"33\"], // Fumbles Lost \r\n [\"43\", \"64\"] // Total Points Earned\r\n];\r\n\r\nexport var advRushing = [\r\n [\"125\", \"0\"], // Player\r\n [\"59\", \"0\"], // Pos\r\n [\"59\", \"73\"], // Year\r\n [\"91\", \"98\"], // Team\r\n [\"60\", \"74\"], // First Downs Total\r\n [\"60\", \"74\"], // First Downs Pct\r\n [\"60\", \"74\"], // Inside Att\r\n [\"60\", \"74\"], // Inside Avg\r\n [\"60\", \"74\"], // Off Tackle Att\r\n [\"60\", \"74\"], // Off Tackle Avg\r\n [\"60\", \"74\"], // Outside Att\r\n [\"60\", \"74\"], // Outside Avg\r\n [\"60\", \"74\"], // Yards After Contact Yards\r\n [\"60\", \"74\"], // Yards After Contact Avg\r\n [\"60\", \"74\"], // Broken Tackles Total\r\n [\"60\", \"74\"], // Broken Tackles Pct\r\n [\"90\", \"85\"] // Rushing Points Earned\r\n];;\r\n\r\nexport var advReceiving = [\r\n [\"120\", \"0\"], // Player\r\n [\"40\", \"0\"], // Pos\r\n [\"40\", \"73\"], // Year\r\n [\"88\", \"89\"], // Team\r\n [\"40\", \"60\"], // Targets All\r\n [\"40\", \"60\"], // Targets Rec\r\n [\"48\", \"60\"], // Targets Rec %\r\n [\"45\", \"60\"], // Targets Share %\r\n [\"60\", \"65\"], // Targets Intended Air Yards\r\n [\"55\", \"60\"], // Targets Avg Depth\r\n [\"41\", \"60\"], // Catchable All\r\n [\"46\", \"62\"], // Catchable Catch %\r\n [\"62\", \"65\"], // Completed Air Yards\r\n [\"59\", \"65\"], // Yards After Catch\r\n [\"57\", \"55\"], // YAC per Rec\r\n [\"40\", \"50\"], // Drops\r\n [\"50\", \"50\"], // Drop %\r\n [\"45\", \"45\"], // First Downs\r\n [\"50\", \"50\"], // First Down %\r\n [\"60\", \"60\"], // Receiver Rating\r\n [\"59\", \"56\"] // Receiving Points Earned\r\n];\r\n\r\nexport var cgtSummary = [\r\n [\"125\", \"0\"], // Player\r\n [\"57\", \"0\"], // Pos\r\n [\"57\", \"71\"], // Year\r\n [\"98\", \"100\"], // Team\r\n [\"53\", \"71\"], // G\r\n [\"54\", \"71\"], // GS\r\n [\"70\", \"71\"], // Total Snaps\r\n [\"58\", \"74\"], // Blown Blocks Total\r\n [\"58\", \"74\"], // Blown Blocks Pass\r\n [\"58\", \"74\"], // Blown Blocks Rush\r\n [\"58\", \"74\"], // Blown Blocks Pct\r\n [\"58\", \"74\"], // Penalties Total\r\n [\"58\", \"74\"], // Penalties Holding\r\n [\"80\", \"84\"], // Penalties False Starts\r\n [\"58\", \"74\"], // Penalties Other\r\n [\"66\", \"80\"], // Penalties Pct\r\n [\"75\", \"75\"] // Total Points Earned\r\n];\r\n\r\nexport var passBlocking = [\r\n [\"125\", \"0\"], // Player\r\n [\"76\", \"0\"], // Pos\r\n [\"76\", \"90\"], // Year\r\n [\"95\", \"100\"], // Team\r\n [\"66\", \"66\"], // Passing Snaps\r\n [\"77\", \"99\"], // Blown Blocks Total\r\n [\"77\", \"99\"], // Blown Blocks Pct\r\n [\"77\", \"99\"], // Penalties Total\r\n [\"77\", \"99\"], // Penalties Holding\r\n [\"77\", \"99\"], // Penalties Other\r\n [\"77\", \"99\"], // Penalties Pct\r\n [\"77\", \"99\"], // Opp Sacks Total\r\n [\"83\", \"103\"], // Opp Sacks Pct\r\n [\"82\", \"90\"] // Pass Block Points Earned\r\n];\r\n\r\nexport var runBlocking = [\r\n [\"125\", \"0\"], // Player\r\n [\"76\", \"0\"], // Pos\r\n [\"76\", \"90\"], // Year\r\n [\"95\", \"100\"], // Team\r\n [\"66\", \"66\"], // Rushing Snaps\r\n [\"77\", \"99\"], // Blown Blocks Total\r\n [\"77\", \"99\"], // Blown Blocks Pct\r\n [\"77\", \"99\"], // Penalties Total\r\n [\"77\", \"99\"], // Penalties Holding\r\n [\"77\", \"99\"], // Penalties Other\r\n [\"77\", \"99\"], // Penalties Pct\r\n [\"77\", \"99\"], // Opp Sacks Total\r\n [\"83\", \"103\"], // Opp Sacks Pct\r\n [\"82\", \"90\"] // Run Block Points Earned\r\n];\r\n\r\nexport var dedtSummary = [\r\n [\"119\", \"0\"], // Player\r\n [\"33\", \"0\"], // Pos\r\n [\"40\", \"60\"], // Year\r\n [\"70\", \"80\"], // Team\r\n [\"33\", \"33\"], // G\r\n [\"33\", \"33\"], // GS\r\n [\"80\", \"95\"], // Taclkes Tackles\r\n [\"80\", \"95\"], // Tackles TFL\r\n [\"80\", \"95\"], // Tackles FF\r\n [\"80\", \"95\"], // Pass Rush Sacks\r\n [\"80\", \"95\"], // Pass Rush Hurries\r\n [\"80\", \"94\"], // Pass Rush Hits\r\n [\"90\", \"94\"], // Pass Rush Knockdowns\r\n [\"80\", \"94\"], // Pass Rush Preassures\r\n [\"92\", \"99\"], // Pass Rush Passes Batted\r\n [\"70\", \"78\"] // Total Points Saved\r\n];\r\n\r\nexport var lbSummary = [\r\n [\"0\", \"0\"], // Player\r\n [\"0\", \"0\"], // Pos\r\n [\"0\", \"0\"], // Year\r\n [\"0\", \"0\"], // Team\r\n [\"0\", \"0\"], // G\r\n [\"0\", \"0\"], // GS\r\n [\"67\", \"78\"], // Tackling Tackles\r\n [\"67\", \"78\"], // Tackling TFL\r\n [\"67\", \"78\"], // Tackling FF\r\n [\"71\", \"78\"], // Pass Rush Sacks\r\n [\"72\", \"78\"], // Pass Rush Preassures\r\n [\"67\", \"78\"], // Coverage Targeted\r\n [\"67\", \"78\"], // Coverage Cmp\r\n [\"67\", \"78\"], // Coverage Cmp%\r\n [\"67\", \"78\"], // Coverage Yards\r\n [\"67\", \"78\"], // Coverage Yds/Trgt\r\n [\"67\", \"78\"], // Coverage Int\r\n [\"67\", \"77\"] // Total Points Saved\r\n];\r\n\r\nexport var cbsSummary = [\r\n [\"0\", \"0\"], // Player\r\n [\"0\", \"0\"], // Pos\r\n [\"0\", \"0\"], // Year\r\n [\"0\", \"0\"], // Team\r\n [\"0\", \"0\"], // G\r\n [\"0\", \"0\"], // GS\r\n [\"41\", \"44\"], // Coverage Targetted\r\n [\"33\", \"33\"], // CoverageCmp\r\n [\"42\", \"56\"], // CoverageCmp%\r\n [\"44\", \"46\"], // CoverageYards\r\n [\"50\", \"60\"], // Coverage Yds/Tgt\r\n [\"33\", \"33\"], // Coverage TD Allowed\r\n [\"48\", \"60\"], // Coverage Pass Breakups\r\n [\"33\", \"33\"], // Coverage Int\r\n [\"42\", \"60\"], // Coverage Int Drops\r\n [\"46\", \"53\"], // Tackling Tackles\r\n [\"33\", \"33\"], // Tackling TFL\r\n [\"33\", \"33\"], // Tackling FF\r\n [\"33\", \"33\"], // Punt Ret Attempts\r\n [\"40\", \"60\"], // Punt Ret Yards\r\n [\"40\", \"40\"], // Punt Ret Yards per Attempt\r\n [\"33\", \"33\"], // Punt Ret TD\r\n [\"33\", \"33\"], // Kick Ret Attempts\r\n [\"40\", \"60\"], // Kick Ret Yards\r\n [\"40\", \"40\"], // Kick Ret Yards per Attempt\r\n [\"33\", \"33\"], // Kick Ret TD\r\n [\"44\", \"60\"] // Total Points Saved\r\n];\r\n\r\nexport var advDefense = [\r\n [\"125\", \"0\"], // Player\r\n [\"51\", \"0\"], // Pos\r\n [\"51\", \"64\"], // Year\r\n [\"80\", \"80\"], // Team\r\n [\"51\", \"66\"], // Snaps Pass\r\n [\"51\", \"66\"], // Snaps Run\r\n [\"70\", \"80\"], // Deserved Catch %\r\n [\"60\", \"70\"], // Pass Breakup Defensed\r\n [\"60\", \"70\"], // Pass Breakup Deflected\r\n [\"60\", \"70\"], // Pass Breakup Batted\r\n [\"60\", \"70\"], // Pass Breakup Total\r\n [\"51\", \"68\"], // Tackling Total\r\n [\"51\", \"68\"], // Tackling Solo\r\n [\"51\", \"68\"], // Tackling Ast\r\n [\"52\", \"68\"], // Tackling TFL\r\n [\"73\", \"80\"], // Avg Tackles Depth\r\n [\"72\", \"77\"], // Broken + Missed\r\n [\"73\", \"77\"] // Broken + Missed%\r\n];\r\n\r\nexport var passRush = [\r\n [\"125\", \"0\"], // Player\r\n [\"54\", \"0\"], // Pos\r\n [\"54\", \"68\"], // Year\r\n [\"80\", \"80\"], // Team\r\n [\"54\", \"73\"], // Pass Rushes Total\r\n [\"54\", \"73\"], // Pass Rushes Rush%\r\n [\"54\", \"73\"], // Pass Rush Totals Sacks\r\n [\"54\", \"73\"], // Pass Rush Totals Hurries\r\n [\"54\", \"73\"], // Pass Rush Totals Hits\r\n [\"75\", \"75\"], // Pass Rush Totals Knockdowns\r\n [\"60\", \"73\"], // Pass Rush Totals Pressures\r\n [\"53\", \"54\"], // Pass Rush Totals Passes Batted\r\n [\"58\", \"73\"], // Pass Rush Percentages Sack%\r\n [\"58\", \"73\"], // Pass Rush Percentages Hurry%\r\n [\"58\", \"73\"], // Pass Rush Percentages Hit%\r\n [\"78\", \"75\"], // Pass Rush Percentages Knockdown%\r\n [\"64\", \"73\"], // Pass Rush Percentages Preassure%\r\n [\"53\", \"58\"] // Pass Rush Percentages Passes Batted%\r\n];\r\n\r\nexport var kicking = [\r\n [\"107\", \"0\"], // Player\r\n [\"40\", \"43\"], // Year\r\n [\"65\", \"85\"], // Team\r\n [\"33\", \"33\"], // G\r\n [\"40\", \"45\"], // Overall Made\r\n [\"40\", \"45\"], // Overall Att\r\n [\"45\", \"46\"], // Overall Pct\r\n [\"40\", \"46\"], // Overall Long\r\n [\"45\", \"46\"], // Overall Pts\r\n [\"40\", \"46\"], // 1-29 Yds Made\r\n [\"40\", \"46\"], // 1-29 Yds Att\r\n [\"45\", \"46\"], // 1-29 Yds Pct\r\n [\"40\", \"46\"], // 30-39 Yds Made\r\n [\"40\", \"46\"], // 30-39 Yds Att\r\n [\"45\", \"46\"], // 30-39 Yds Pct\r\n [\"40\", \"46\"], // 40-49 Yds Made\r\n [\"40\", \"46\"], // 40-49 Yds Att\r\n [\"45\", \"46\"], // 40-49 Yds Pct\r\n [\"40\", \"46\"], // 50+ Yds Made\r\n [\"40\", \"46\"], // 50+ Yds Att\r\n [\"45\", \"46\"], // 50+ Yds Pct\r\n [\"40\", \"46\"], // PAT Made\r\n [\"40\", \"46\"], // PAT Att\r\n [\"45\", \"46\"], // PAT Pct\r\n [\"64\", \"64\"] // Total Points Earned\r\n];\r\n\r\nexport var punting = [\r\n [\"153\", \"0\"], // Player\r\n [\"63\", \"67\"], // Year\r\n [\"80\", \"99\"], // Team\r\n [\"33\", \"33\"], // G\r\n [\"60\", \"64\"], // Punts\r\n [\"60\", \"64\"], // Yards\r\n [\"60\", \"63\"], // Avg\r\n [\"60\", \"72\"], // Opp Ret\r\n [\"60\", \"72\"], // Ret Yards\r\n [\"60\", \"72\"], // Net Avg\r\n [\"50\", \"60\"], // Long\r\n [\"50\", \"60\"], // Blocks\r\n [\"64\", \"80\"], // Partial Blocks\r\n [\"60\", \"80\"], // Fair Catches\r\n [\"78\", \"72\"], // Touchbacks\r\n [\"60\", \"72\"], // Inside 20\r\n [\"90\", \"110\"] // Total Points Earned\r\n];\r\n\r\nexport var advPunting = [\r\n [\"153\", \"0\"], // Player\r\n [\"90\", \"72\"], // Year\r\n [\"65\", \"94\"], // Team\r\n [\"52\", \"76\"], // Fair Catch%\r\n [\"65\", \"76\"], // Return%\r\n [\"65\", \"76\"], // Inside 20%\r\n [\"53\", \"76\"], // Touchback%\r\n [\"70\", \"76\"], // Punts Inside 10\r\n [\"70\", \"76\"], // Punts Inside 10%\r\n [\"65\", \"74\"], // Rushing Att\r\n [\"65\", \"74\"], // Rushing Yards\r\n [\"65\", \"74\"], // Passing Att\r\n [\"65\", \"74\"], // Passing Cmp\r\n [\"65\", \"74\"], // Passing Yards\r\n [\"65\", \"74\"], // Passing TD\r\n [\"68\", \"74\"] // Passing Int\r\n];\r\n\r\nexport var qbGameSummary = [\r\n [\"45\"], // Game Date\r\n [\"33\"], // Week\r\n [\"78\"], // Matchup\r\n [\"60\"], // Score\r\n [\"33\"], // G\r\n [\"33\"], // GS\r\n [\"43\"], // Passing Att\r\n [\"43\"], // Passing Cmp\r\n [\"44\"], // Passing Pct\r\n [\"58\"], // Passing Yds\r\n [\"54\"], // Passing Yds/Att\r\n// [\"50\"], // Passing Y/G // removed as requested by Matt during initial gauntlet\r\n [\"44\"], // Passing Lg\r\n [\"44\"], // Passing TD\r\n [\"44\"], // Passing Int\r\n [\"44\"], // Rushing Att\r\n [\"48\"], // Rushing Yds\r\n [\"44\"], // Rushing Avg\r\n [\"44\"], // Rushing Lg\r\n [\"44\"], // Rushing TD\r\n [\"44\"], // Fumbles Fum\r\n [\"44\"], // Fumbles Lost\r\n [\"68\"], // QB Rating\r\n [\"54\"], // IQR\r\n [\"54\"] // Total Points Earned\r\n];\r\n\r\nexport var rbfbGameSummary = [\r\n [\"45\"], // Game Date\r\n [\"33\"], // Week\r\n [\"78\"], // Matchup\r\n [\"60\"], // Score\r\n [\"33\"], // G\r\n [\"33\"], // GS\r\n [\"41\"], // Rushing Att\r\n [\"41\"], // Rushing Yds\r\n [\"41\"], // Rushing Avg\r\n [\"41\"], // Rushing Lg\r\n [\"41\"], // Rushing TD\r\n// [\"40\"], // Rushing Y/G\r\n [\"41\"], // Receiving Targets - added 12/03/2020 per Matt\r\n [\"41\"], // Receiving Rec\r\n [\"40\"], // Receiving Yds\r\n [\"40\"], // Receiving Avg\r\n [\"40\"], // Receiving Lg\r\n [\"40\"], // Receiving TD\r\n // [\"44\"], // Receiving Y/G\r\n [\"33\"], // Punt Returns Num\r\n [\"40\"], // Punt Returns Yds\r\n [\"40\"], // Punt Returns Avg\r\n [\"33\"], // Punt Returns TD\r\n [\"33\"], // Kickoff Returns Num\r\n [\"33\"], // Kickoff Returns Yds\r\n [\"40\"], // Kickoff Returns Avg\r\n [\"33\"], // Kickoff Returns TD\r\n [\"33\"], // Fumbles Fum \r\n [\"33\"], // Fumbles Lost \r\n [\"57\"] // Total Points Earned\r\n];\r\n\r\nexport var cgtGameSummary = [\r\n [\"45\"], // Game Date\r\n [\"33\"], // Week\r\n [\"108\"], // Matchup\r\n [\"60\"], // Score\r\n [\"33\"], // G\r\n [\"33\"], // GS\r\n [\"85\"], // Total Snaps\r\n [\"74\"], // Blown Blocks Total\r\n [\"74\"], // Blown Blocks Pass\r\n [\"74\"], // Blown Blocks Rush\r\n [\"74\"], // Blown Blocks Pct\r\n [\"74\"], // Penalties Total\r\n [\"74\"], // Penalties Holding\r\n [\"80\"], // Penalties False Starts\r\n [\"74\"], // Penalties Other\r\n [\"73\"], // Penalties Pct\r\n [\"75\"] // Total Points Earned\r\n];\r\n\r\nexport var gameKicking = [\r\n [\"45\"], // Game Date\r\n [\"33\"], // Week\r\n [\"108\"], // Matchup\r\n [\"60\"], // Score\r\n [\"33\"], // G\r\n [\"40\"], // Overall Made\r\n [\"40\"], // Overall Att\r\n [\"42\"], // Overall Pct\r\n [\"40\"], // Overall Long\r\n [\"42\"], // Overall Pts\r\n [\"40\"], // 1-29 Yds Made\r\n [\"40\"], // 1-29 Yds Att\r\n [\"42\"], // 1-29 Yds Pct\r\n [\"40\"], // 30-39 Yds Made\r\n [\"40\"], // 30-39 Yds Att\r\n [\"42\"], // 30-39 Yds Pct\r\n [\"40\"], // 40-49 Yds Made\r\n [\"40\"], // 40-49 Yds Att\r\n [\"42\"], // 40-49 Yds Pct\r\n [\"40\"], // 50+ Yds Made\r\n [\"40\"], // 50+ Yds Att\r\n [\"42\"], // 50+ Yds Pct\r\n [\"40\"], // PAT Made\r\n [\"40\"], // PAT Att\r\n [\"42\"], // PAT Pct\r\n [\"53\"] // Total Points Earned\r\n];\r\n\r\nexport var gamePunting = [\r\n [\"45\"], // Game Date\r\n [\"33\"], // Week\r\n [\"108\"], // Matchup\r\n [\"60\"], // Score\r\n [\"33\"], // G\r\n [\"64\"], // Punts\r\n [\"64\"], // Yards\r\n [\"64\"], // Avg\r\n [\"64\"], // Opp Ret\r\n [\"64\"], // Ret Yards\r\n [\"64\"], // Net Avg\r\n [\"56\"], // Long\r\n [\"56\"], // Blocks\r\n [\"64\"], // Partial Blocks\r\n [\"67\"], // Fair Catches\r\n [\"80\"], // Touchbacks\r\n [\"62\"], // Inside 20\r\n [\"95\"] // Total Points Earned\r\n];\r\n\r\nexport var advGamePunting = [\r\n [\"45\"], // Game Date\r\n [\"33\"], // Week\r\n [\"108\"], // Matchup\r\n [\"60\"], // Score\r\n [\"33\"], // G\r\n [\"33\"], // GS\r\n [\"52\"], // Fair Catch%\r\n [\"65\"], // Return%\r\n [\"65\"], // Inside 20%\r\n [\"53\"], // Touchback%\r\n [\"70\"], // Punts Inside 10\r\n [\"70\"], // Punts Inside 10%\r\n [\"65\"], // Rushing Att\r\n [\"65\"], // Rushing Yards\r\n [\"65\"], // Passing Att\r\n [\"65\"], // Passing Cmp\r\n [\"65\"], // Passing Yards\r\n [\"65\"], // Passing TD\r\n [\"68\"] // Passing Int\r\n];\r\n\r\nexport var dedtGameSummary = [\r\n [\"45\"], // Game Date\r\n [\"33\"], // Week\r\n [\"108\"], // Matchup\r\n [\"60\"], // Score\r\n [\"33\"], // G\r\n [\"33\"], // GS\r\n [\"83\"], // Taclkes Tackles\r\n [\"83\"], // Tackles TFL\r\n [\"83\"], // Tackles FF\r\n [\"83\"], // Pass Rush Sacks\r\n [\"83\"], // Pass Rush Hurries\r\n [\"83\"], // Pass Rush Hits\r\n [\"93\"], // Pass Rush Knockdowns\r\n [\"83\"], // Pass Rush Preassures\r\n [\"93\"], // Pass Rush Passes Batted\r\n [\"63\"] // Total Points Saved\r\n];\r\n\r\nexport var lbGameSummary = [\r\n [\"0\"], // Game Date\r\n [\"0\"], // Week\r\n [\"0\"], // Matchup\r\n [\"0\"], // Score\r\n [\"0\"], // G\r\n [\"0\"], // GS\r\n [\"69\"], // Tackling Tackles\r\n [\"69\"], // Tackling TFL\r\n [\"69\"], // Tackling FF\r\n [\"70\"], // Pass Rush Sacks\r\n [\"70\"], // Pass Rush Preassures\r\n [\"69\"], // Coverage Targeted\r\n [\"69\"], // Coverage Cmp\r\n [\"69\"], // Coverage Cmp%\r\n [\"69\"], // Coverage Yards\r\n [\"69\"], // Coverage Yds/Trgt\r\n [\"69\"], // Coverage Int\r\n [\"70\"] // Total Points Saved\r\n];\r\n\r\nexport var cbsGameSummary = [\r\n [\"0\"], // Game Date\r\n [\"0\"], // Week\r\n [\"0\"], // Matchup\r\n [\"0\"], // Score\r\n [\"0\"], // G\r\n [\"0\"], // GS\r\n [\"46\"], // Coverage Targetted\r\n [\"33\"], // CoverageCmp\r\n [\"46\"], // CoverageCmp%\r\n [\"46\"], // CoverageYards\r\n [\"50\"], // Coverage Yds/Tgt\r\n [\"33\"], // Coverage TD Allowed\r\n [\"48\"], // Coverage Pass Breakups\r\n [\"33\"], // Coverage Int\r\n [\"46\"], // Coverage Int Drops\r\n [\"46\"], // Tackling Tackles\r\n [\"33\"], // Tackling TFL\r\n [\"33\"], // Tackling FF\r\n [\"33\"], // Punt Ret Attempts\r\n [\"40\"], // Punt Ret Yards\r\n [\"40\"], // Punt Ret Yards per Attempt\r\n [\"33\"], // Punt Ret TD\r\n [\"33\"], // Kick Ret Attempts\r\n [\"40\"], // Kick Ret Yards\r\n [\"40\"], // Kick Ret Yards per Attempt\r\n [\"33\"], // Kick Ret TD\r\n [\"47\"] // Total Points Saved\r\n];\r\n","import React, { useState } from 'react';\r\n\r\nfunction Filters(d) {\r\n const [minFilter, setminFilter] = useState(d.minFilter);\r\n if (minFilter < 1 && minFilter !== ''){\r\n setminFilter('');\r\n }\r\n return(\r\n \r\n
\r\n
\r\n
\r\n \r\n setminFilter(Number(event.target.value))} />\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default Filters;","import React from 'react';\r\nimport { CalcPlayerRating, NullSum, NullBypassSum, NullMax, NullDiv, Tst2015, DispFunc, NullSub } from '../common/CommonFunctions';\r\nimport { qbSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.passingstats = this.props.passingstats;\r\n this.rushingstats = this.props.rushingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 1;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards) {\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"playerName\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\",\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"playerName\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\",\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\",\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"GS\", field: \"gamesStarted\", cssClass: \"single-row-header break small-column\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\",\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n } \r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"sumPointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\",\r\n headerSort: false, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\",\r\n headerSort: false, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"GS\", field: \"gamesStarted\", cssClass: \"single-row-header break small-column\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n } \r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"Passing\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"passAttempts\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Cmp\", field: \"passCompletions\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"passCompPct\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Yds\", field: \"passYards\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Yds/Att\", field: \"passYdsPerAttempt\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Y/G\", field: \"passYdsPerGame\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Lg\", field: \"passLong\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"passTD\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int\", field: \"passInt\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Rushing\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"rushAttempts\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Yds\", field: \"rushYds\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"rushYdsPerAttempt\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Lg\", field: \"rushLong\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"TD\", field: \"rushTD\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Fumbles\",\r\n columns:[\r\n { \r\n title: \"Fum\", field: \"sumFumbles\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Lost\", field: \"sumFumblesLost\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"\",\r\n columns:[\r\n { \r\n title: \"QB Rating\", field: \"passQBRating\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"IQR\", field: \"sumIQR\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n { \r\n title: \"Tot Points
Earned\", field: \"sumPointsEarned\",\r\n titleFormatter: \"html\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n // no passing or rushing data\r\n if (this.passingstats.length === 0 && this.rushingstats.length === 0) {\r\n return('');\r\n }\r\n // declare and initialize detail data fields\r\n // these fields will be used to create objects for each season/team pair\r\n let passingstats = this.passingstats;\r\n let rushingstats = this.rushingstats;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let games = 0;\r\n let gamesStarted = 0;\r\n let passAttempts = 0;\r\n let passCompletions = 0;\r\n let passDrops = 0;\r\n let passCompPct = 0;\r\n let passYards = 0;\r\n let passDropYards = 0;\r\n let passYdsPerAttempt = 0;\r\n let passYdsPerGame = 0;\r\n let passLong = 0;\r\n let passTD = 0;\r\n let passThrowAways = 0;\r\n let passSpikes = 0;\r\n let passBatted = 0;\r\n let passMiscommunications = 0;\r\n let passAccurateCompletions = 0;\r\n let passDroppedTD = 0;\r\n let passInt = 0;\r\n let passDroppedInt = 0;\r\n let passQBRating = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumIQR = 0;\r\n let sumPointsEarned = 0;\r\n // define array to hold detail data objects for each season/team pair\r\n var rowdata = [];\r\n var i = 0;\r\n // create rowdata[] object for each row in passingstats data\r\n if (passingstats.length !==0) {\r\n for (i=0; i= this.minFilter){\r\n season = passingstats[i].season;\r\n playerName = passingstats[i].playerName;\r\n playerId = passingstats[i].playerId;\r\n positionName = passingstats[i].positionName;\r\n team = passingstats[i].teamName;\r\n games = passingstats[i].starts > passingstats[i].g ?\r\n passingstats[i].starts :\r\n passingstats[i].g;\r\n gamesStarted = passingstats[i].starts;\r\n passAttempts = passingstats[i].attempts;\r\n passCompletions = passingstats[i].comp;\r\n passDrops = passingstats[i].drops;\r\n passCompPct = passingstats[i].compPerc;\r\n passYards = passingstats[i].yards;\r\n passDropYards = passingstats[i].dropYards;\r\n passYdsPerAttempt = passingstats[i].yardsPerAtt;\r\n passYdsPerGame = NullDiv(passYards,games);\r\n passLong = passingstats[i].passLong;\r\n passTD = passingstats[i].td;\r\n passThrowAways = passingstats[i].throwAways;\r\n passSpikes = passingstats[i].spikes;\r\n passBatted = passingstats[i].passBatted;\r\n passMiscommunications = passingstats[i].miscommunications;\r\n passAccurateCompletions = passingstats[i].accurateCompletions;\r\n passDroppedTD = passingstats[i].droppedTD;\r\n passInt = passingstats[i].int;\r\n passDroppedInt = passingstats[i].droppedInterceptions;\r\n passQBRating = passingstats[i].qbRating;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n sumFumbles = passingstats[i].fumbles;\r\n sumFumblesLost = passingstats[i].fumblesLost;\r\n sumIQR = passingstats[i].iqr\r\n sumPointsEarned = Tst2015(passingstats[i].season,passingstats[i].eps);\r\n rowdata.push({\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n games,\r\n gamesStarted,\r\n passAttempts,\r\n passCompletions,\r\n passDrops,\r\n passCompPct,\r\n passYards,\r\n passDropYards,\r\n passYdsPerAttempt,\r\n passYdsPerGame,\r\n passLong,\r\n passTD,\r\n passThrowAways,\r\n passSpikes,\r\n passBatted,\r\n passMiscommunications,\r\n passAccurateCompletions,\r\n passDroppedTD,\r\n passInt,\r\n passDroppedInt,\r\n passQBRating,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumIQR,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n // for each rushingstats row that nmatch rowdata[] by season/team pair, populate the rushing stat fields\r\n // if the season/team pair is not found create a new rowdata object and populate the season, team, games\r\n // and rushign stat fields only\r\n let j = -1;\r\n if (rushingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === rushingstats[i].season && rowdata[j].team === rushingstats[i].team && rowdata[j].playerId === rushingstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n // j = rowdata.indexOf(season => season === rushingstats[i].season);\r\n if (j > -1) {\r\n rowdata[j].rushAttempts = rushingstats[i].att;\r\n rowdata[j].rushYds = rushingstats[i].yards;\r\n rowdata[j].rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rowdata[j].rushLong = rushingstats[i].long;\r\n rowdata[j].rushTD = rushingstats[i].td;\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,rushingstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,rushingstats[i].fumblesLost);\r\n rowdata[j].sumPointsEarned = NullBypassSum(rowdata[j].sumPointsEarned,Tst2015(rushingstats[i].season,rushingstats[i].eps));\r\n } else if(!this.isLeaderboards) {\r\n season = rushingstats[i].season;\r\n playerName = rushingstats[i].playerName;\r\n playerId = rushingstats[i].playerId;\r\n team = rushingstats[i].team;\r\n games = rushingstats[i].starts > rushingstats[i].g ?\r\n rushingstats[i].starts :\r\n rushingstats[i].g;\r\n gamesStarted = rushingstats[i].starts;\r\n passAttempts = 0;\r\n passCompletions = 0;\r\n passDrops = 0;\r\n passCompPct = 0;\r\n passYards = 0;\r\n passDropYards = 0;\r\n passYdsPerAttempt = 0;\r\n passYdsPerGame = 0;\r\n passLong = 0;\r\n passTD = 0;\r\n passThrowAways = 0;\r\n passSpikes = 0;\r\n passBatted = 0;\r\n passMiscommunications = 0;\r\n passAccurateCompletions = 0;\r\n passDroppedTD = 0;\r\n passInt = 0;\r\n passDroppedInt = 0;\r\n passQBRating = 0;\r\n rushAttempts = rushingstats[i].att;\r\n rushYds = rushingstats[i].yards;\r\n rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rushLong = rushingstats[i].long;\r\n rushTD = rushingstats[i].td;\r\n sumFumbles = rushingstats[i].fumbles;\r\n sumFumblesLost = rushingstats[i].fumblesLost;\r\n sumIQR = 0;\r\n sumPointsEarned = Tst2015(rushingstats[i].season,rushingstats[i].eps);\r\n rowdata.push({\r\n season,\r\n playerName,\r\n playerId,\r\n team,\r\n games,\r\n gamesStarted,\r\n passAttempts,\r\n passCompletions,\r\n passDrops,\r\n passCompPct,\r\n passYards,\r\n passDropYards,\r\n passYdsPerAttempt,\r\n passYdsPerGame,\r\n passLong,\r\n passTD,\r\n passThrowAways,\r\n passSpikes,\r\n passBatted,\r\n passMiscommunications,\r\n passAccurateCompletions,\r\n passDroppedTD,\r\n passInt,\r\n passDroppedInt,\r\n passQBRating,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumIQR,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n this.data = rowdata;\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let playerName = '';\r\n let playerId = '';\r\n let team = '';\r\n let games = 0;\r\n let gamesStarted = 0;\r\n let passAttempts = 0;\r\n let passCompletions = 0;\r\n let passCompPct = 0;\r\n let passYards = 0;\r\n let passYdsPerAttempt = 0;\r\n let passYdsPerGame = 0;\r\n let passLong = 0;\r\n let passTD = 0;\r\n let passInt = 0;\r\n let passQBRating = 0;\r\n let passDrops = 0;\r\n let passDropYards = 0;\r\n let passDroppedTD = 0;\r\n let passDroppedInt = 0;\r\n let sumIQR = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n let passThrowAways = 0;\r\n let passSpikes = 0;\r\n let passBatted = 0;\r\n let passMiscommunications = 0;\r\n let passAccurateCompletions = 0;\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n games = NullBypassSum(games,this.data[i].games);\r\n gamesStarted = NullBypassSum(gamesStarted,this.data[i].gamesStarted);\r\n passAttempts = NullBypassSum(passAttempts,this.data[i].passAttempts);\r\n passCompletions = NullBypassSum(passCompletions,this.data[i].passCompletions);\r\n passYards = NullBypassSum(passYards,this.data[i].passYards);\r\n passDropYards = NullBypassSum(passDropYards,this.data[i].passDropYards);\r\n passLong = NullMax(passLong,this.data[i].passLong);\r\n passTD = NullBypassSum(passTD,this.data[i].passTD);\r\n passDroppedTD = NullBypassSum(passDroppedTD,this.data[i].passDroppedTD);\r\n passDrops = NullBypassSum(passDrops,this.data[i].passDrops);\r\n passInt = NullBypassSum(passInt,this.data[i].passInt);\r\n passDroppedInt = NullBypassSum(passDroppedInt,this.data[i].passDroppedInt);\r\n passThrowAways = NullBypassSum(passThrowAways,this.data[i].passThrowAways);\r\n passSpikes = NullBypassSum(passSpikes,this.data[i].passSpikes);\r\n passBatted = NullBypassSum(passBatted,this.data[i].passBatted);\r\n passMiscommunications = NullBypassSum(passMiscommunications,this.data[i].passMiscommunications);\r\n passAccurateCompletions = NullBypassSum(passAccurateCompletions,this.data[i].passAccurateCompletions);\r\n rushAttempts = NullBypassSum(rushAttempts,this.data[i].rushAttempts);\r\n rushYds = NullBypassSum(rushYds,this.data[i].rushYds);\r\n rushLong = NullMax(rushLong,this.data[i].rushLong);\r\n rushTD = NullBypassSum(rushTD,this.data[i].rushTD);\r\n sumFumbles = NullBypassSum(sumFumbles,this.data[i].sumFumbles);\r\n sumFumblesLost = NullBypassSum(sumFumblesLost,this.data[i].sumFumblesLost);\r\n sumPointsEarned = NullBypassSum(sumPointsEarned,Tst2015(this.data[i].season,this.data[i].sumPointsEarned));\r\n }\r\n if (passAttempts) {\r\n passCompPct = NullDiv(passCompletions,passAttempts)*100;\r\n passYdsPerAttempt = NullDiv(passYards,passAttempts);\r\n // QB Pass Rating\r\n passQBRating = CalcPlayerRating(passAttempts,passCompletions,passYards,passTD,passInt);\r\n let iqrAttempts = NullSub(passAttempts, NullSum(NullSum(passThrowAways,passSpikes),NullSum(passBatted,passMiscommunications)));\r\n let iqrComp = NullSum(passAccurateCompletions,passDrops);\r\n let iqrYards = NullSum(passYards,passDropYards);\r\n let iqrTD = NullSum(passTD,passDroppedTD);\r\n let iqrInt = NullSum(passInt,passDroppedInt);\r\n sumIQR = CalcPlayerRating(iqrAttempts, iqrComp, iqrYards,iqrTD,iqrInt);\r\n }\r\n rushYdsPerAttempt = NullDiv(rushYds,rushAttempts);\r\n passYdsPerGame = NullDiv(passYards,games);\r\n this.data.push({\r\n season,\r\n playerName,\r\n playerId,\r\n team,\r\n games,\r\n gamesStarted,\r\n passAttempts,\r\n passCompletions,\r\n passDrops,\r\n passCompPct,\r\n passYards,\r\n passDropYards,\r\n passYdsPerAttempt,\r\n passYdsPerGame,\r\n passLong,\r\n passTD,\r\n passThrowAways,\r\n passSpikes,\r\n passBatted,\r\n passMiscommunications,\r\n passAccurateCompletions,\r\n passDroppedTD,\r\n passInt,\r\n passDroppedInt,\r\n passQBRating,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumIQR,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n// resizableColumns: false,\r\n// selectable: false,\r\n initialSort: this.initSort\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Summary
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { qbAdvPassing } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBAdvancedPassingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.passingstats = this.props.passingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 1;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n this.cols = [\r\n { \r\n title: \"Player\", field: \"playerName\", cssClass: \"single-row-header textColumn\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"playerName\", \r\n urlPrefix:\"/players/\", \r\n urlField: \"playerId\"\r\n } \r\n },\r\n //{ title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header textColumn\", },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Drop-
backs\", field: \"passDropbacks\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Sacks\", field: \"passSacks\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Sack
Yards\", field: \"passSackYards\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Sack %\", field: \"passSackPct\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n } \r\n },\r\n { \r\n title: \"TD %\", field: \"passTdRate\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Int %\", field: \"passIntRate\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"On
Target\", field: \"passOnTargetThrows\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Catchable\", field: \"passCatchableThrows\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"On
Target%\", field: \"passOnTargetPct\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n } \r\n },\r\n { \r\n title: \"Catchable %\", field: \"passCatchablePct\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Completed
Air-Yards\", field: \"passComplAirYards\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Yards After
Catch\", field: \"passYdsAfterCatch\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Air-
Yards%\", field: \"passAirYardsPct\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Intended
Air-Yards\", field: \"passIntendedAirYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Average
Throw Depth\", field: \"passAvgThrowDepth\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pass Points Earned\", field: \"passPointsEarned\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\",\r\n titleFormatter:\"textarea\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"passPointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n this.cols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\", \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: false, sorter: sortFunc \r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: false, sorter: sortFunc\r\n },\r\n { \r\n title: \"Drop-
backs\", field: \"passDropbacks\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Sacks\", field: \"passSacks\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc,\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Sack
Yards\", field: \"passSackYards\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Sack%\", field: \"passSackPct\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"TD%\", field: \"passTdRate\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Int%\", field: \"passIntRate\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"On Target\", field: \"passOnTargetThrows\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Catchable\", field: \"passCatchableThrows\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"On
Target%\", field: \"passOnTargetPct\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc,\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Catchable%\", field: \"passCatchablePct\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Completed
Air-Yards\", field: \"passComplAirYards\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Yards
After Catch\", field: \"passYdsAfterCatch\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Air-
Yards%\", field: \"passAirYardsPct\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Intended
Air-Yards\", field: \"passIntendedAirYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc,\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Average
Throw Depth\", field: \"passAvgThrowDepth\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pass Points Earned\", field: \"passPointsEarned\", \r\n headerSortStartingDir:\"desc\", headerSort: false, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${qbAdvPassing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n } \r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let rowData = [];\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let passAttempts = 0;\r\n let passTdRate = 0;\r\n let passIntRate = 0;\r\n let passOnTargetThrows = 0;\r\n let passOnTargetPct = null;\r\n let passCatchableThrows = 0;\r\n let passCatchablePct = 0;\r\n let passAirYardsPct = 0;\r\n let passComplAirYards = 0;\r\n let passIntendedAirYards = 0;\r\n let passAvgThrowDepth = 0;\r\n let passYdsAfterCatch = 0;\r\n let passDropbacks = 0;\r\n let passSacks = 0;\r\n let passSackYards = 0;\r\n let passSackPct = 0;\r\n let passScrambles = 0; // only used in calculations at the total level\r\n let passPointsEarned = 0;\r\n if (this.passingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n playerName = this.passingstats[i].playerName;\r\n playerId = this.passingstats[i].playerId;\r\n positionName = this.passingstats[i].positionName;\r\n season = this.passingstats[i].season;\r\n team = this.passingstats[i].teamName;\r\n passAttempts = this.passingstats[i].attempts;\r\n passSacks = this.passingstats[i].sacks;\r\n passSackYards = this.passingstats[i].sackYards*-1;\r\n passDropbacks = this.passingstats[i].attempts + \r\n this.passingstats[i].sacks +\r\n this.passingstats[i].scrambles\r\n passSackPct = (this.passingstats[i].sacks / passDropbacks) * 100;\r\n passScrambles = this.passingstats[i].scrambles;\r\n passTdRate = this.passingstats[i].tdRate;\r\n passIntRate = this.passingstats[i].intRate;\r\n passOnTargetThrows = this.passingstats[i].onTargetThrows;\r\n passCatchableThrows = this.passingstats[i].catchableThrows;\r\n if(this.passingstats[i].onTargetPct){\r\n passOnTargetPct = this.passingstats[i].onTargetPct*100;\r\n }\r\n passCatchablePct = this.passingstats[i].catchablePct*100;\r\n passComplAirYards = this.passingstats[i].completedAirYards;\r\n passYdsAfterCatch = this.passingstats[i].yards - this.passingstats[i].completedAirYards;\r\n passAirYardsPct = this.passingstats[i].airYardPct*100;\r\n passIntendedAirYards = this.passingstats[i].intendedAirYards;\r\n passAvgThrowDepth = this.passingstats[i].intendedAirYards/this.passingstats[i].attempts;\r\n passPointsEarned = Tst2015(this.passingstats[i].season,this.passingstats[i].eps);\r\n rowData.push(\r\n {\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n passAttempts,\r\n passDropbacks,\r\n passSacks,\r\n passSackYards,\r\n passSackPct,\r\n passScrambles,\r\n passTdRate,\r\n passIntRate,\r\n passOnTargetThrows,\r\n passCatchableThrows,\r\n passOnTargetPct,\r\n passCatchablePct,\r\n passComplAirYards,\r\n passYdsAfterCatch,\r\n passAirYardsPct,\r\n passIntendedAirYards,\r\n passAvgThrowDepth,\r\n passPointsEarned\r\n }\r\n );\r\n }\r\n }\r\n this.data = rowData;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let passAttempts = 0;\r\n let passAttemptsPartial = 0;\r\n let passYards = 0;\r\n let passCompletions = 0;\r\n let passTD = 0;\r\n let passInt = 0;\r\n let passTdRate = 0;\r\n let passIntRate = 0;\r\n let passOnTargetThrows = 0;\r\n let passOnTargetPct = null;\r\n let passCatchableThrows = 0;\r\n let passCatchablePct = 0;\r\n let passAirYardsPct = 0;\r\n let passComplAirYards = 0;\r\n let passIntendedAirYards = 0;\r\n let passAvgThrowDepth = 0;\r\n let passYdsAfterCatch = 0;\r\n let passDropbacks = 0;\r\n let passSacks = 0;\r\n let passSackYards = 0;\r\n let passSackPct = 0;\r\n let passScrambles = 0; // used in calculating sack %\r\n let passPointsEarned = 0;\r\n if (this.passingstats.length !== 0){\r\n for (var i = 0; i < this.passingstats.length; i++) {\r\n passAttempts = NullBypassSum(passAttempts,this.passingstats[i].attempts);\r\n passAttemptsPartial = NullBypassSum(passAttemptsPartial,this.passingstats[i].season >= 2018 ? this.passingstats[i].attempts : 0);\r\n passCatchableThrows = NullBypassSum(passCatchableThrows,this.passingstats[i].catchableThrows);\r\n passYards = NullBypassSum(passYards,this.passingstats[i].yards);\r\n passTD = NullBypassSum(passTD,this.passingstats[i].td);\r\n passInt = NullBypassSum(passInt, this.passingstats[i].int);\r\n passOnTargetThrows = NullBypassSum(passOnTargetThrows, this.passingstats[i].season >= 2018 ? this.passingstats[i].onTargetThrows : null);\r\n passComplAirYards = NullBypassSum(passComplAirYards, this.passingstats[i].completedAirYards);\r\n passIntendedAirYards = NullBypassSum(passIntendedAirYards, this.passingstats[i].intendedAirYards);\r\n passCompletions = NullBypassSum(passCompletions,this.passingstats[i].comp);\r\n passDropbacks = NullBypassSum(passDropbacks, NullSum(passAttempts, NullSum(passSacks, passScrambles)));\r\n passSacks = NullBypassSum(passSacks,this.passingstats[i].sacks);\r\n passSackYards = NullBypassSum(passSackYards, this.passingstats[i].sackYards);\r\n passScrambles = NullBypassSum(passScrambles, this.passingstats[i].scrambles);\r\n passPointsEarned = NullBypassSum(passPointsEarned,Tst2015(this.passingstats[i].season,this.passingstats[i].eps));\r\n }\r\n passSackYards = passSackYards * -1;\r\n passYdsAfterCatch = passYards - passComplAirYards;\r\n if (passAttempts > 0) {\r\n passTdRate = NullDiv(passTD,passAttempts)*100;\r\n passIntRate = NullDiv(passInt,passAttempts)*100;\r\n passCatchablePct = NullDiv(passCatchableThrows,passAttempts)*100;\r\n };\r\n passOnTargetPct = passAttemptsPartial ? NullDiv(passOnTargetThrows,passAttemptsPartial)*100 : 0;\r\n passAirYardsPct = NullDiv(passComplAirYards,passYards)*100;\r\n passAvgThrowDepth = NullDiv(passIntendedAirYards,passAttempts);\r\n passSackPct = NullDiv(passSacks, passDropbacks)*100;\r\n this.data.push(\r\n {\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n passAttempts,\r\n passDropbacks,\r\n passSacks,\r\n passSackYards,\r\n passSackPct,\r\n passScrambles,\r\n passTdRate,\r\n passIntRate,\r\n passOnTargetThrows,\r\n passCatchableThrows,\r\n passOnTargetPct,\r\n passCatchablePct,\r\n passComplAirYards,\r\n passYdsAfterCatch,\r\n passAirYardsPct,\r\n passIntendedAirYards,\r\n passAvgThrowDepth,\r\n passPointsEarned\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Advanced Passing
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBAdvancedPassingTabulator;","import React from 'react';\r\nimport {NullSum, NullDiv, NullMult, DispFunc, CalcPlayerRating} from '../common/CommonFunctions';\r\nimport { qbEffectiveness } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBPassingAccuracyTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.accuracystats = this.props.accuracystats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n this.colNum = this.isLeaderboards ? 0 : 1;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n \r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n\r\n this.totals = {\r\n behindlosatt: 0,\r\n behindloscomp: 0,\r\n behindlosIqr: 0,\r\n behindlosIqrAttempts: 0,\r\n behindlosIqrCompletions: 0,\r\n behindlosIqrYards: 0,\r\n behindlosIqrTD: 0,\r\n behindlosIqrInts: 0,\r\n behindlosleftatt: 0,\r\n behindlosmidatt: 0,\r\n behindlosrightatt: 0,\r\n shortatt: 0,\r\n shortcomp: 0,\r\n shortIqr: 0,\r\n shortIqrAttempts: 0,\r\n shortIqrCompletions: 0,\r\n shortIqrYards: 0,\r\n shortIqrTD: 0,\r\n shortIqrInts: 0,\r\n shortleftatt: 0,\r\n shortmidatt: 0,\r\n shortrightatt: 0,\r\n intatt: 0,\r\n intcomp: 0,\r\n intIqr: 0,\r\n intIqrAttempts: 0,\r\n intIqrCompletions: 0,\r\n intIqrYards: 0,\r\n intIqrTD: 0,\r\n intIqrInts: 0,\r\n intleftatt: 0,\r\n intmidatt: 0,\r\n intrightatt: 0,\r\n deepatt: 0,\r\n deepcomp: 0,\r\n deepIqr: 0,\r\n deepIqrAttempts: 0,\r\n deepIqrCompletions: 0,\r\n deepIqrYards: 0,\r\n deepIqrTD: 0,\r\n deepIqrInts: 0,\r\n deepleftatt: 0,\r\n deepmidatt: 0,\r\n deeprightatt: 0\r\n }\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"playerName\", cssClass: \"textColumn\",\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"playerName\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n //{ title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\", headerSortStartingDir:\"desc\" },\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\",\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"deepiqr\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\",\r\n headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { \r\n title: \"\",\r\n columns: [\r\n {\r\n title: \"\",\r\n columns: bioCols\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Behind Line of Scrimmage\",\r\n columns: [\r\n {\r\n title: \"\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"behindlosatt\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field: \"behindloscomp\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"IQR\", field: \"behindlosiqr\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Attempt Pct\",\r\n columns:[\r\n {\r\n title: \"Left\", field: \"behindlosleftpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Mid\", field: \"behindlosmidpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Right\", field: \"behindlosrightpct\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Short\",\r\n columns: [\r\n {\r\n title: \"\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"shortatt\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field: \"shortcomp\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"IQR\", field: \"shortiqr\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Attempt Pct\",\r\n columns:[\r\n {\r\n title: \"Left\", field: \"shortleftpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Mid\", field: \"shortmidpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Right\", field: \"shortrightpct\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Intermediate\",\r\n columns: [\r\n {\r\n title: \"\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"intatt\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field: \"intcomp\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"IQR\", field: \"intiqr\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Attempt Pct\",\r\n columns:[\r\n {\r\n title: \"Left\", field: \"intleftpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Mid\", field: \"intmidpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Right\", field: \"intrightpct\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Deep\",\r\n columns: [\r\n {\r\n title: \"\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"deepatt\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field: \"deepcomp\", cssClass: \"small-column\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"IQR\", field: \"deepiqr\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Attempt Pct\",\r\n columns:[\r\n {\r\n title: \"Left\", field: \"deepleftpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Mid\", field: \"deepmidpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n },\r\n {\r\n title: \"Right\", field: \"deeprightpct\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbEffectiveness[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, true);\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData() {\r\n let qbdd = this.accuracystats;\r\n if (this.isLeaderboards){\r\n qbdd = qbdd.sort( function(a, b) {\r\n if (a.playerId < b.playerId){\r\n return 1;\r\n }\r\n if (a.playerId > b.playerId){\r\n return -1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n this.data = [];\r\n \r\n // loop through accuracy data generating separate lines for each season\r\n if (qbdd.length !== 0){\r\n let rowcontent = {\r\n season: qbdd[0].season,\r\n playerName: qbdd[0].name,\r\n playerId: qbdd[0].playerId,\r\n positionName: 'QB',\r\n team: qbdd[0].teamName,\r\n behindlosatt: 0,\r\n behindloscomp: 0,\r\n behindlosiqr: 0,\r\n behindlosIqrAttempts: 0,\r\n behindlosIqrCompletions: 0,\r\n behindlosIqrYards: 0,\r\n behindlosIqrTD: 0,\r\n behindlosIqrInts: 0,\r\n behindlosleftatt: 0,\r\n behindlosmidatt: 0,\r\n behindlosrightatt: 0,\r\n shortatt: 0,\r\n shortcomp: 0,\r\n shortiqr: 0,\r\n shortIqrAttempts: 0,\r\n shortIqrCompletions: 0,\r\n shortIqrYards: 0,\r\n shortIqrTD: 0,\r\n shortIqrInts: 0,\r\n shortleftatt: 0,\r\n shortmidatt: 0,\r\n shortrightatt: 0,\r\n intatt: 0,\r\n intcomp: 0,\r\n intiqr: 0,\r\n intIqrAttempts: 0,\r\n intIqrCompletions: 0,\r\n intIqrYards: 0,\r\n intIqrTD: 0,\r\n intIqrInts: 0,\r\n intleftatt: 0,\r\n intmidatt: 0,\r\n intrightatt: 0,\r\n deepatt: 0,\r\n deepcomp: 0,\r\n deepiqr: 0,\r\n deepIqrAttempts: 0,\r\n deepIqrCompletions: 0,\r\n deepIqrYards: 0,\r\n deepIqrTD: 0,\r\n deepIqrInts: 0,\r\n deepleftatt: 0,\r\n deepmidatt: 0,\r\n deeprightatt: 0\r\n } \r\n for (var i=0; i= this.minFilter) {\r\n this.data.push(rowcontent);\r\n }\r\n // add seasonal stats to totals\r\n if (!isLeaderboards) {\r\n this.AddSeasonToTotals(rowcontent, totals);\r\n }\r\n }\r\n\r\n GenerateTotalRow(totals) {\r\n let rowcontent = {\r\n season: 'Total',\r\n playerName: '',\r\n playerId: '',\r\n positionName: '',\r\n team: '',\r\n behindlosatt: 0,\r\n behindloscomp: 0,\r\n behindlosiqr: 0,\r\n behindlosIqrAttempts: 0,\r\n behindlosIqrCompletions: 0,\r\n behindlosIqrYards: 0,\r\n behindlosIqrTD: 0,\r\n behindlosIqrInts: 0,\r\n behindlosleftatt: 0,\r\n behindlosmidatt: 0,\r\n behindlosrightatt: 0,\r\n shortatt: 0,\r\n shortcomp: 0,\r\n shortiqr: 0,\r\n shortIqrAttempts: 0,\r\n shortIqrCompletions: 0,\r\n shortIqrYards: 0,\r\n shortIqrTD: 0,\r\n shortIqrInts: 0,\r\n shortleftatt: 0,\r\n shortmidatt: 0,\r\n shortrightatt: 0,\r\n intatt: 0,\r\n intcomp: 0,\r\n intiqr: 0,\r\n intIqrAttempts: 0,\r\n intIqrCompletions: 0,\r\n intIqrYards: 0,\r\n intIqrTD: 0,\r\n intIqrInts: 0,\r\n intleftatt: 0,\r\n intmidatt: 0,\r\n intrightatt: 0,\r\n deepatt: 0,\r\n deepcomp: 0,\r\n deepiqr: 0,\r\n deepIqrAttempts: 0,\r\n deepIqrCompletions: 0,\r\n deepIqrYards: 0,\r\n deepIqrTD: 0,\r\n deepIqrInts: 0,\r\n deepleftatt: 0,\r\n deepmidatt: 0,\r\n deeprightatt: 0\r\n }\r\n // sum directional attempt totals to corresponding rowcontent fields\r\n rowcontent.behindlosatt =\r\n NullSum(totals.behindlosleftatt, NullSum(totals.behindlosmidatt, totals.behindlosrightatt));\r\n rowcontent.shortatt =\r\n NullSum(totals.shortleftatt, NullSum(totals.shortmidatt, totals.shortrightatt));\r\n rowcontent.intatt =\r\n NullSum(totals.intleftatt, NullSum(totals.intmidatt, totals.intrightatt));\r\n rowcontent.deepatt =\r\n NullSum(totals.deepleftatt, NullSum(totals.deepmidatt, totals.deeprightatt));\r\n // move directional completion totals to corresponding rowcontent fields\r\n rowcontent.behindloscomp = totals.behindloscomp;\r\n rowcontent.shortcomp = totals.shortcomp;\r\n rowcontent.intcomp = totals.intcomp;\r\n rowcontent.deepcomp = totals.deepcomp;\r\n // calculate total iqr values into corresponding rowcontent fields\r\n rowcontent.behindlosiqr =\r\n CalcPlayerRating(\r\n totals.behindlosIqrAttempts,\r\n totals.behindlosIqrCompletions,\r\n totals.behindlosIqrYards,\r\n totals.behindlosIqrTD,\r\n totals.behindlosIqrInts\r\n );\r\n rowcontent.shortiqr =\r\n CalcPlayerRating(\r\n totals.shortIqrAttempts,\r\n totals.shortIqrCompletions,\r\n totals.shortIqrYards,\r\n totals.shortIqrTD,\r\n totals.shortIqrInts\r\n );\r\n rowcontent.intiqr =\r\n CalcPlayerRating(\r\n totals.intIqrAttempts,\r\n totals.intIqrCompletions,\r\n totals.intIqrYards,\r\n totals.intIqrTD,\r\n totals.intIqrInts\r\n );\r\n rowcontent.deepiqr =\r\n CalcPlayerRating(\r\n totals.deepIqrAttempts,\r\n totals.deepIqrCompletions,\r\n totals.deepIqrYards,\r\n totals.deepIqrTD,\r\n totals.deepIqrInts\r\n );\r\n // calculate directional percentages\r\n rowcontent.behindlosleftpct = NullDiv(totals.behindlosleftatt, totals.behindlosatt) * 100;\r\n rowcontent.behindlosmidpct = NullDiv(totals.behindlosmidatt, totals.behindlosatt) * 100;\r\n rowcontent.behindlosrightpct = NullDiv(totals.behindlosrightatt, totals.behindlosatt) * 100;\r\n rowcontent.shortleftpct = NullDiv(totals.shortleftatt, totals.shortatt) * 100;\r\n rowcontent.shortmidpct = NullDiv(totals.shortmidatt, totals.shortatt) * 100;\r\n rowcontent.shortrightpct = NullDiv(totals.shortrightatt, totals.shortatt) * 100;\r\n rowcontent.intleftpct = NullDiv(totals.intleftatt, totals.intatt) * 100;\r\n rowcontent.intmidpct = NullDiv(totals.intmidatt, totals.intatt) * 100;\r\n rowcontent.intrightpct = NullDiv(totals.intrightatt, totals.intatt) * 100;\r\n rowcontent.deepleftpct = NullDiv(totals.deepleftatt, totals.deepatt) * 100;\r\n rowcontent.deepmidpct = NullDiv(totals.deepmidatt, totals.deepatt) * 100;\r\n rowcontent.deeprightpct = NullDiv(totals.deeprightatt, totals.deepatt) * 100;\r\n // generate total row\r\n this.data.push(rowcontent);\r\n }\r\n\r\n AddSeasonToTotals(rowcontent,totals) {\r\n // totals for behind los depth\r\n totals.behindlosatt = NullSum(totals.behindlosatt,rowcontent.behindlosatt);\r\n totals.behindloscomp = NullSum(totals.behindloscomp,rowcontent.behindloscomp);\r\n totals.behindlosIqrAttempts = NullSum(totals.behindlosIqrAttempts,rowcontent.behindlosIqrAttempts);\r\n totals.behindlosIqrCompletions = NullSum(totals.behindlosIqrCompletions,rowcontent.behindlosIqrCompletions);\r\n totals.behindlosIqrYards = NullSum(totals.behindlosIqrYards,rowcontent.behindlosIqrYards);\r\n totals.behindlosIqrTD = NullSum(totals.behindlosIqrTD,rowcontent.behindlosIqrTD);\r\n totals.behindlosIqrInts = NullSum(totals.behindlosIqrInts,rowcontent.behindlosIqrInts);\r\n totals.behindlosleftatt = NullSum(totals.behindlosleftatt,rowcontent.behindlosleftatt);\r\n totals.behindlosmidatt = NullSum(totals.behindlosmidatt,rowcontent.behindlosmidatt);\r\n totals.behindlosrightatt = NullSum(totals.behindlosrightatt,rowcontent.behindlosrightatt);\r\n // totals for short depth\r\n totals.shortatt = NullSum(totals.shortatt,rowcontent.shortatt);\r\n totals.shortcomp = NullSum(totals.shortcomp,rowcontent.shortcomp);\r\n totals.shortIqrAttempts = NullSum(totals.shortIqrAttempts,rowcontent.shortIqrAttempts);\r\n totals.shortIqrCompletions = NullSum(totals.shortIqrCompletions,rowcontent.shortIqrCompletions);\r\n totals.shortIqrYards = NullSum(totals.shortIqrYards,rowcontent.shortIqrYards);\r\n totals.shortIqrTD = NullSum(totals.shortIqrTD,rowcontent.shortIqrTD);\r\n totals.shortIqrInts = NullSum(totals.shortIqrInts,rowcontent.shortIqrInts);\r\n totals.shortleftatt = NullSum(totals.shortleftatt,rowcontent.shortleftatt);\r\n totals.shortmidatt = NullSum(totals.shortmidatt,rowcontent.shortmidatt);\r\n totals.shortrightatt = NullSum(totals.shortrightatt,rowcontent.shortrightatt);\r\n // totals for intermediate depth\r\n totals.intatt = NullSum(totals.intatt,rowcontent.intatt);\r\n totals.intcomp = NullSum(totals.intcomp,rowcontent.intcomp);\r\n totals.intIqrAttempts = NullSum(totals.intIqrAttempts,rowcontent.intIqrAttempts);\r\n totals.intIqrCompletions = NullSum(totals.intIqrCompletions,rowcontent.intIqrCompletions);\r\n totals.intIqrYards = NullSum(totals.intIqrYards,rowcontent.intIqrYards);\r\n totals.intIqrTD = NullSum(totals.intIqrTD,rowcontent.intIqrTD);\r\n totals.intIqrInts = NullSum(totals.intIqrInts,rowcontent.intIqrInts);\r\n totals.intleftatt = NullSum(totals.intleftatt,rowcontent.intleftatt);\r\n totals.intmidatt = NullSum(totals.intmidatt,rowcontent.intmidatt);\r\n totals.intrightatt = NullSum(totals.intrightatt,rowcontent.intrightatt);\r\n // totals for deep depth\r\n totals.deepatt = NullSum(totals.deepatt,rowcontent.deepatt);\r\n totals.deepcomp = NullSum(totals.deepcomp,rowcontent.deepcomp);\r\n totals.deepIqrAttempts = NullSum(totals.deepIqrAttempts,rowcontent.deepIqrAttempts);\r\n totals.deepIqrCompletions = NullSum(totals.deepIqrCompletions,rowcontent.deepIqrCompletions);\r\n totals.deepIqrYards = NullSum(totals.deepIqrYards,rowcontent.deepIqrYards);\r\n totals.deepIqrTD = NullSum(totals.deepIqrTD,rowcontent.deepIqrTD);\r\n totals.deepIqrInts = NullSum(totals.deepIqrInts,rowcontent.deepIqrInts);\r\n totals.deepleftatt = NullSum(totals.deepleftatt,rowcontent.deepleftatt);\r\n totals.deepmidatt = NullSum(totals.deepmidatt,rowcontent.deepmidatt);\r\n totals.deeprightatt = NullSum(totals.deeprightatt,rowcontent.deeprightatt);\r\n return;\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n //this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Passing Effectiveness by Distance
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBPassingAccuracyTabulator;","import React from 'react';\r\nimport {NullBypassSum, NullMult, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { qbRushing } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBAdvancedRushingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.rushingstats = this.props.rushingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 1;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"playerName\", cssClass: \"textColumn\",\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"playerName\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n //{ title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\", },\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"break textColumn\",\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"rushPointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: false, sorter: sortFunc\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\",\r\n headerSort: false, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"First Downs\",\r\n columns: [\r\n {\r\n title: \"Total\", field: \"firstDown\", headerSortStartingDir:\"desc\",\r\n headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"firstDownPct\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Inside\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"insideAtt\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"yardsPerInsideAtt\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Off Tackle\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"offtackleAtt\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"yardsPerOffTackleAtt\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Outside\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"outsideAtt\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"yardsPerOutsideAtt\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Yards After Contact\", width: 100,\r\n columns: [\r\n {\r\n title: \"Yards\", field: \"yardsAfterContact\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"yardsAfterContactPct\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Broken Tackles\",\r\n columns: [\r\n {\r\n title: \"Total\", field: \"brokenTackles\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"brokenTacklesPct\", cssClass: \"break\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Rush Points Earned\", field: \"rushPointsEarned\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${qbRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let firstDown = 0;\r\n let firstDownPct = 0;\r\n let insideAtt = 0;\r\n let yardsPerInsideAtt = 0;\r\n let offtackleAtt = 0;\r\n let yardsPerOffTackleAtt = 0;\r\n let outsideAtt = 0;\r\n let yardsPerOutsideAtt = 0;\r\n let yardsAfterContact = 0;\r\n let yardsAfterContactPct = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklesPct = 0;\r\n let rushPointsEarned = 0;\r\n if (this.rushingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n season = this.rushingstats[i].season;\r\n playerName = this.rushingstats[i].player;\r\n playerId = this.rushingstats[i].playerId;\r\n positionName = this.rushingstats[i].positionName;\r\n team = this.rushingstats[i].team;\r\n firstDown = this.rushingstats[i].firstDown;\r\n firstDownPct = this.rushingstats[i].firstDownPct * 100;\r\n insideAtt = this.rushingstats[i].insideAtt;\r\n yardsPerInsideAtt = this.rushingstats[i].yardsPerInsideAtt;\r\n offtackleAtt = this.rushingstats[i].offtackleAtt;\r\n yardsPerOffTackleAtt = this.rushingstats[i].yardsPerOffTackleAtt;\r\n outsideAtt = this.rushingstats[i].outsideAtt;\r\n yardsPerOutsideAtt = this.rushingstats[i].yardsPerOutsideAtt;\r\n yardsAfterContact = this.rushingstats[i].yardsAfterContact;\r\n yardsAfterContactPct = NullDiv(this.rushingstats[i].yardsAfterContact, this.rushingstats[i].att);\r\n brokenTackles = this.rushingstats[i].brokenTackles;\r\n brokenTacklesPct = NullDiv(this.rushingstats[i].brokenTackles, this.rushingstats[i].att)*100;\r\n rushPointsEarned = Tst2015(this.rushingstats[i].season,this.rushingstats[i].eps);\r\n data.push(\r\n {\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n firstDown,\r\n firstDownPct,\r\n insideAtt,\r\n yardsPerInsideAtt,\r\n offtackleAtt,\r\n yardsPerOffTackleAtt,\r\n outsideAtt,\r\n yardsPerOutsideAtt,\r\n yardsAfterContact,\r\n yardsAfterContactPct,\r\n brokenTackles,\r\n brokenTacklesPct,\r\n rushPointsEarned\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let playerName = '';\r\n let playerId = 0;\r\n let team = '';\r\n let rushAttempts = 0;\r\n let firstDown = 0;\r\n let firstDownPct = 0;\r\n let insideAtt = 0;\r\n let rushInsideYards = 0;\r\n let yardsPerInsideAtt = 0;\r\n let yardsPerOffTackleAtt = 0;\r\n let offtackleAtt = 0;\r\n let rushOffTackleYards = 0;\r\n let outsideAtt = 0;\r\n let rushOutsideYards = 0;\r\n let yardsPerOutsideAtt = 0;\r\n let yardsAfterContact = 0;\r\n let yardsAfterContactPct = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklesPct = 0;\r\n let rushPointsEarned = 0;\r\n if (this.rushingstats.length !== 0){\r\n for (var i = 0; i < this.rushingstats.length; i++) {\r\n rushAttempts = NullBypassSum(rushAttempts,this.rushingstats[i].att);\r\n firstDown = NullBypassSum(firstDown,this.rushingstats[i].firstDown);\r\n insideAtt = NullBypassSum(insideAtt,this.rushingstats[i].insideAtt);\r\n rushInsideYards = NullBypassSum(rushInsideYards,NullMult(this.rushingstats[i].insideAtt,this.rushingstats[i].yardsPerInsideAtt));\r\n offtackleAtt = NullBypassSum(offtackleAtt,this.rushingstats[i].offtackleAtt);\r\n rushOffTackleYards = NullBypassSum(rushOffTackleYards,NullMult(this.rushingstats[i].offtackleAtt,this.rushingstats[i].yardsPerOffTackleAtt));\r\n outsideAtt = NullBypassSum(outsideAtt,this.rushingstats[i].outsideAtt);\r\n rushOutsideYards = NullBypassSum(rushOutsideYards,NullMult(this.rushingstats[i].outsideAtt,this.rushingstats[i].yardsPerOutsideAtt));\r\n yardsAfterContact = NullBypassSum(yardsAfterContact,this.rushingstats[i].yardsAfterContact);\r\n brokenTackles = NullBypassSum(brokenTackles,this.rushingstats[i].brokenTackles);\r\n rushPointsEarned = NullBypassSum(rushPointsEarned,Tst2015(this.rushingstats[i].season,this.rushingstats[i].eps));\r\n }\r\n if (rushAttempts) {\r\n firstDownPct = NullDiv(firstDown,rushAttempts)*100;\r\n brokenTacklesPct = NullDiv(brokenTackles,rushAttempts)*100;\r\n yardsAfterContactPct = NullDiv(yardsAfterContact,rushAttempts);\r\n }\r\n yardsPerInsideAtt = NullDiv(rushInsideYards,insideAtt);\r\n yardsPerOffTackleAtt = NullDiv(rushOffTackleYards,offtackleAtt);\r\n yardsPerOutsideAtt = NullDiv(rushOutsideYards,outsideAtt);\r\n this.data.push(\r\n {\r\n season,\r\n playerName,\r\n playerId,\r\n team,\r\n firstDown,\r\n firstDownPct,\r\n insideAtt,\r\n yardsPerInsideAtt,\r\n offtackleAtt,\r\n yardsPerOffTackleAtt,\r\n outsideAtt,\r\n yardsPerOutsideAtt,\r\n yardsAfterContact,\r\n yardsAfterContactPct,\r\n brokenTackles,\r\n brokenTacklesPct,\r\n rushPointsEarned\r\n }\r\n )\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.suppressTable &&\r\n
\r\n }\r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Advanced Rushing
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBAdvancedRushingTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullMax, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { rbfbSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableRBWRSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.rushingstats = this.props.rushingstats;\r\n this.receivingstats = this.props.receivingstats;\r\n this.puntretstats = this.props.puntretstats;\r\n this.kickretstats = this.props.kickretstats;\r\n if (this.props.blockingstats) {\r\n this.blockingstats = this.props.blockingstats;\r\n } else {\r\n this.blockingstats = [];\r\n }\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n { \r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\", \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\", \r\n urlPrefix:\"/players/\", \r\n urlField: \"playerId\"\r\n }\r\n },\r\n { \r\n title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header player-position\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\", \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"G\", field: \"sumGames\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"GS\", field: \"sumGamesStarted\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n } \r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"sumPointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc \r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"G\", field: \"sumGames\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"GS\", field: \"sumGamesStarted\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n } \r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"Rushing\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"rushAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Yds\", field: \"rushYds\", cssClass: \"single-row-header\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter:\"money\", formatterParams:{\r\n thousand:',',\r\n precision:0\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"rushYdsPerAttempt\", cssClass: \"single-row-header\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter:\"money\", formatterParams:{\r\n precision:1\r\n }\r\n },\r\n { \r\n title: \"Lg\", field: \"rushLong\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"TD\", field: \"rushTD\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc \r\n },\r\n { \r\n title: \"Y/G\", field: \"rushYdsPerGame\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter:\"money\", formatterParams:{\r\n precision:1\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Receiving\",\r\n columns:[\r\n { \r\n title: \"Rec\", field: \"receives\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Yds\", field: \"rcvYds\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"rcvYdsPerRcv\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n { \r\n title: \"Lg\", field: \"rcvLong\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc \r\n },\r\n { \r\n title: \"TD\", field: \"rcvTD\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc \r\n },\r\n {\r\n title: \"Y/G\", field: \"rcvYdsPerGame\", cssClass: \"single-row-header break\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Punt Returns\",\r\n columns:[\r\n { \r\n title: \"Num\", field: \"pntretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc \r\n },\r\n { \r\n title: \"Yds\", field: \"pntretYards\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n formatter:\"money\", formatterParams:{\r\n thousand:',',\r\n precision:0\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"pntretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n formatter:\"money\", formatterParams:{\r\n precision:1\r\n }\r\n },\r\n { \r\n title: \"TD\", field: \"pntretTD\", cssClass: \"single-row-header break small-column\", \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Kickoff Returns\",\r\n columns:[\r\n { \r\n title: \"Num\", field: \"kickretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Yds\", field: \"kickretYards\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n formatter:\"money\", formatterParams:{\r\n thousand:',',\r\n precision:0\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"kickretYdsPerAtt\", cssClass: \"single-row-header\", \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n formatter:\"money\", formatterParams:{\r\n precision:1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"kickretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Fumbles\",\r\n columns:[\r\n { \r\n title: \"Fum\", field: \"sumFumbles\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Lost\", field: \"sumFumblesLost\", cssClass: \"single-row-header break small-column\", \r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Tot Points Earned\", field: \"sumPointsEarned\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter: \"textarea\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData() {\r\n // console.log(\"RBWR\");\r\n let rushingstats = this.rushingstats;\r\n let receivingstats = this.receivingstats;\r\n let puntretstats = this.puntretstats;\r\n let kickretstats = this.kickretstats;\r\n let blockingstats = this.blockingstats;\r\n let season = 0;\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let sumGames = 0;\r\n let sumGamesStarted = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let rushYdsPerGame = 0;\r\n let receives = 0;\r\n let rcvYds = 0;\r\n let rcvYdsPerRcv = 0;\r\n let rcvLong = 0;\r\n let rcvTD = 0;\r\n let rcvYdsPerGame = 0;\r\n let pntretAttempts = 0;\r\n let pntretYards = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYards = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n \r\n var rowdata = [];\r\n var i = 0;\r\n \r\n if (rushingstats.length !== 0) {\r\n for (i=0; i= this.minFilter){\r\n season = rushingstats[i].season;\r\n team = rushingstats[i].team;\r\n player = rushingstats[i].player;\r\n playerId = rushingstats[i].playerId;\r\n positionName = rushingstats[i].positionName;\r\n sumGames = rushingstats[i].starts > rushingstats[i].g ?\r\n rushingstats[i].starts :\r\n rushingstats[i].g;\r\n sumGamesStarted = rushingstats[i].starts;\r\n rushAttempts = rushingstats[i].att;\r\n rushYds = rushingstats[i].yards;\r\n rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rushLong = rushingstats[i].long;\r\n rushTD = rushingstats[i].td;\r\n rushYdsPerGame = rushingstats[i].yardsPerG;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = rushingstats[i].fumbles;\r\n sumFumblesLost = rushingstats[i].fumblesLost;\r\n sumPointsEarned = Tst2015(rushingstats[i].season,rushingstats[i].eps);\r\n // consolelogruben(rushingstats[i].playerId, 'Rushing EPS', rushingstats[i].eps);\r\n // spe(rushingstats[i].playerId, 'SUMPOINTSEARNED =', sumPointsEarned);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n positionName,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n let j = -1;\r\n if (receivingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === receivingstats[i].season && rowdata[j].team === receivingstats[i].team && rowdata[j].playerId === receivingstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].receives = receivingstats[i].recs;\r\n rowdata[j].rcvYds = receivingstats[i].yards;\r\n rowdata[j].rcvYdsPerRcv = receivingstats[i].yardsPerRec;\r\n rowdata[j].rcvYdsPerGame = receivingstats[i].yardsPerG;\r\n rowdata[j].rcvLong = receivingstats[i].long;\r\n rowdata[j].rcvTD = receivingstats[i].td;\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,receivingstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,receivingstats[i].fumblesLost);\r\n rowdata[j].sumPointsEarned = NullBypassSum(rowdata[j].sumPointsEarned,Tst2015(receivingstats[i].season,receivingstats[i].eps));\r\n // consolelogruben(receivingstats[i].playerId, 'Receiving EPS', receivingstats[i].eps);\r\n // spe(receivingstats[i].playerId, 'SUMPOINTSEARNED 2 =', rowdata[j].sumPointsEarned);\r\n } else if(!this.isLeaderboards) {\r\n season = receivingstats[i].season;\r\n player = receivingstats[i].player;\r\n playerId = receivingstats[i].playerId;\r\n team = receivingstats[i].team;\r\n sumGames = receivingstats[i].starts > receivingstats[i].g ?\r\n receivingstats[i].starts :\r\n receivingstats[i].g;\r\n sumGamesStarted = receivingstats[i].starts;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = receivingstats[i].recs;\r\n rcvYds = receivingstats[i].yards;\r\n rcvYdsPerRcv = receivingstats[i].yardsPerRec;\r\n rcvYdsPerGame = receivingstats[i].yardsPerG;\r\n rcvLong = receivingstats[i].long;\r\n rcvTD = receivingstats[i].td;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0; \r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = receivingstats[i].fumbles;\r\n sumFumblesLost = receivingstats[i].fumblesLost;\r\n sumPointsEarned = Tst2015(receivingstats[i].season,receivingstats[i].eps);\r\n // consolelogruben(receivingstats[i].playerId, 'Receiving EPS', receivingstats[i].eps);\r\n // spe(receivingstats[i].playerId, 'SUMPOINTSEARNED =', sumPointsEarned);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (puntretstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === puntretstats[i].season && rowdata[j].team === puntretstats[i].teamName && rowdata[j].playerId === puntretstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].pntretAttempts = puntretstats[i].attempts;\r\n rowdata[j].pntretYards = puntretstats[i].yards;\r\n rowdata[j].pntretYdsPerAtt = puntretstats[i].attempts ? puntretstats[i].yards/puntretstats[i].attempts : 0;\r\n rowdata[j].pntretTD = puntretstats[i].tDs;\r\n rowdata[j].sumTDs = NullSum(rowdata[j].sumTDs,puntretstats[i].tDs);\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,puntretstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,puntretstats[i].fumblesLost);\r\n } else if(!this.isLeaderboards) {\r\n season = puntretstats[i].season;\r\n player = puntretstats[i].player;\r\n playerId = puntretstats[i].playerId;\r\n team = puntretstats[i].teamName;\r\n sumGames = puntretstats[i].games;\r\n sumGamesStarted = 0;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = puntretstats[i].attempts;\r\n pntretYards = puntretstats[i].yards;\r\n pntretYdsPerAtt = NullDiv(puntretstats[i].yards,puntretstats[i].attempts);\r\n pntretTD = puntretstats[i].tDs;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = puntretstats[i].fumbles;\r\n sumFumblesLost = puntretstats[i].fumblesLost;\r\n sumPointsEarned = 0;\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (kickretstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === kickretstats[i].season && rowdata[j].team === kickretstats[i].teamName && rowdata[j].playerId === kickretstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].kickretAttempts = kickretstats[i].attempts;\r\n rowdata[j].kickretYards = kickretstats[i].yards;\r\n rowdata[j].kickretYdsPerAtt = NullDiv(kickretstats[i].yards, kickretstats[i].attempts);\r\n rowdata[j].kickretTD = kickretstats[i].tDs;\r\n rowdata[j].sumTDs = NullSum(rowdata[j].sumTDs,kickretstats[i].tDs);\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,kickretstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,kickretstats[i].fumblesLost);\r\n } else if(!this.isLeaderboards) {\r\n season = kickretstats[i].season;\r\n player = kickretstats[i].player;\r\n playerId = kickretstats[i].playerId;\r\n team = kickretstats[i].teamName;\r\n sumGames = kickretstats[i].games;\r\n sumGamesStarted = 0;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = kickretstats[i].attempts;\r\n kickretYards = kickretstats[i].yards;\r\n kickretYdsPerAtt = NullDiv(kickretYards, kickretAttempts);\r\n kickretTD = kickretstats[i].tDs;\r\n sumFumbles = kickretstats[i].fumbles;\r\n sumFumblesLost = kickretstats[i].fumblesLost;\r\n sumPointsEarned = 0;\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (blockingstats.length !== 0) {\r\n for (i = 0; i < blockingstats.length; i++) {\r\n for (j = rowdata.length - 1; j > -1; j--) {\r\n if (rowdata[j].season === blockingstats[i].season && rowdata[j].team === blockingstats[i].team && rowdata[j].playerId === blockingstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].sumPointsEarned =\r\n NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(blockingstats[i].season, blockingstats[i].passBlockEPS));\r\n rowdata[j].sumPointsEarned =\r\n NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(blockingstats[i].season, blockingstats[i].runBlockEPS));\r\n // consolelogruben(blockingstats[i].playerId, 'Blocking EPS', blockingstats[i].passBlockEPS);\r\n // consolelogruben(blockingstats[i].playerId, 'Blocking EPS', blockingstats[i].runBlockEPS);\r\n // spe(blockingstats[i].playerId, 'SUMPOINTSEARNED =', rowdata[j].sumPointsEarned);\r\n } else if (!this.isLeaderboards) {\r\n season = blockingstats[i].season;\r\n player = blockingstats[i].player;\r\n playerId = blockingstats[i].playerId;\r\n team = blockingstats[i].team;\r\n sumGames = blockingstats[i].starts > blockingstats[i].games ?\r\n blockingstats[i].starts :\r\n blockingstats[i].games;\r\n sumGamesStarted = blockingstats[i].starts;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = 0;\r\n sumFumblesLost = 0;\r\n sumPointsEarned =\r\n NullBypassSum(\r\n Tst2015(blockingstats[i].season, blockingstats[i].passBlockEPS),\r\n Tst2015(blockingstats[i].season, blockingstats[i].runBlockEPS)\r\n );\r\n // consolelogruben(blockingstats[i].playerId, 'Blocking EPS', blockingstats[i].passBlockEPS);\r\n // consolelogruben(blockingstats[i].playerId, 'Blocking EPS', blockingstats[i].runBlockEPS);\r\n // spe(blockingstats[i].playerId, 'SUMPOINTSEARNED =', sumPointsEarned);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n this.data = rowdata;\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let sumGames = 0;\r\n let sumGamesStarted = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let rushYdsPerGame = 0;\r\n let receives = 0;\r\n let rcvYds = 0;\r\n let rcvYdsPerRcv = 0;\r\n let rcvLong = 0;\r\n let rcvTD = 0;\r\n let rcvYdsPerGame = 0;\r\n let pntretAttempts = 0;\r\n let pntretYards = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYards = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n sumGames = NullSum(sumGames,this.data[i].sumGames);\r\n sumGamesStarted = NullSum(sumGamesStarted,this.data[i].sumGamesStarted);\r\n rushAttempts = NullSum(rushAttempts,this.data[i].rushAttempts);\r\n rushLong = NullMax(rushLong,this.data[i].rushLong);\r\n rushTD = NullSum(rushTD,this.data[i].rushTD);\r\n rushYds = NullSum(rushYds,this.data[i].rushYds);\r\n receives = NullSum(receives,this.data[i].receives);\r\n rcvYds = NullSum(rcvYds,this.data[i].rcvYds);\r\n rcvLong = NullMax(rcvLong,this.data[i].rcvLong);\r\n rcvTD = NullSum(rcvTD,this.data[i].rcvTD);\r\n pntretAttempts = NullSum(pntretAttempts,this.data[i].pntretAttempts);\r\n pntretYards = NullSum(pntretYards,this.data[i].pntretYards);\r\n pntretTD = NullSum(pntretTD,this.data[i].pntretTD);\r\n kickretAttempts = NullSum(kickretAttempts,this.data[i].kickretAttempts);\r\n kickretYards = NullSum(kickretYards, this.data[i].kickretYards);\r\n kickretTD = NullSum(kickretTD, this.data[i].kickretTD);\r\n sumFumbles = NullSum(sumFumbles,this.data[i].sumFumbles);\r\n sumFumblesLost = NullSum(sumFumblesLost,this.data[i].sumFumblesLost);\r\n sumPointsEarned = NullBypassSum(sumPointsEarned,Tst2015(this.data[i].season,this.data[i].sumPointsEarned));\r\n }\r\n rushYdsPerAttempt = NullDiv(rushYds,rushAttempts);\r\n rushYdsPerGame = NullDiv(rushYds,sumGames);\r\n rcvYdsPerRcv = NullDiv(rcvYds,receives);\r\n rcvYdsPerGame = NullDiv(rcvYds,sumGames);\r\n kickretYdsPerAtt = NullDiv(kickretYards,kickretAttempts);\r\n pntretYdsPerAtt = NullDiv(pntretYards,pntretAttempts);\r\n this.data.push({\r\n season,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Summary
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\n// function consolelogruben(playerId, text, value) {\r\n// //console.log('playerid =', playerId)\r\n// if (playerId === 4866) {\r\n// console.log(playerId, text, value)\r\n// }\r\n// }\r\n\r\n// function spe(playerId, text, value) {\r\n// if (playerId === 4866) {\r\n// console.log(text, value);\r\n// }\r\n// }\r\n\r\nexport default TableRBWRSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullMult, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { advRushing } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableRBWRAdvancedRushingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.rushingstats = this.props.rushingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n { \r\n title: \"Player\", field: \"player\", cssClass: \"textColumn\", \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\", \r\n urlPrefix:\"/players/\", \r\n urlField: \"playerId\"\r\n }\r\n },\r\n { \r\n title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\",\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\", \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"rushPointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\", \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\", \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc \r\n },\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { \r\n title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"First Downs\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"firstDown\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"firstDownPct\", cssClass: \"break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Inside\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"insideAtt\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"yardsPerInsideAtt\", cssClass: \"break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Off Tackle\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"offTackleAtt\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"yardsPerOffTackleAtt\", cssClass: \"break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Outside\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"outsideAtt\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"yardsPerOutsideAtt\", cssClass: \"break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ], \r\n },\r\n {\r\n title: \"Yards After Contact\",\r\n columns:[\r\n { \r\n title: \"Yards\", field: \"yardsAfterContact\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"yardsAfterContactPerAtt\", cssClass: \"break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Brkn + Missed Tkls\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"brokenTackles\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"brokenTacklesPerAtt\", cssClass: \"break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n { \r\n title: \"Rush Points Earned\", field: \"rushPointsEarned\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advRushing[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let rushAttempts = 0;\r\n let firstDown = 0;\r\n let firstDownPct = 0;\r\n let insideAtt = 0;\r\n let yardsPerInsideAtt = 0;\r\n let offTackleAtt = 0;\r\n let yardsPerOffTackleAtt = 0;\r\n let outsideAtt = 0;\r\n let yardsPerOutsideAtt = 0;\r\n let yardsAfterContact = 0;\r\n let yardsAfterContactPerAtt = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklesPerAtt = 0;\r\n let eps = 0;\r\n let rushPointsEarned = 0;\r\n let rushingstats = this.rushingstats;\r\n if (rushingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n player = rushingstats[i].player;\r\n playerId = rushingstats[i].playerId;\r\n positionName = rushingstats[i].positionName;\r\n season = rushingstats[i].season;\r\n team = rushingstats[i].team;\r\n rushAttempts = rushingstats[i].att;\r\n firstDown = rushingstats[i].firstDown;\r\n firstDownPct = rushingstats[i].firstDownPct*100;\r\n insideAtt = rushingstats[i].insideAtt;\r\n yardsPerInsideAtt = rushingstats[i].yardsPerInsideAtt;\r\n offTackleAtt = rushingstats[i].offtackleAtt;\r\n yardsPerOffTackleAtt = rushingstats[i].yardsPerOffTackleAtt;\r\n outsideAtt = rushingstats[i].outsideAtt;\r\n yardsPerOutsideAtt = rushingstats[i].yardsPerOutsideAtt;\r\n yardsAfterContact = rushingstats[i].yardsAfterContact;\r\n yardsAfterContactPerAtt = NullDiv(rushingstats[i].yardsAfterContact, rushingstats[i].att);\r\n brokenTackles = rushingstats[i].brokenTackles;\r\n brokenTacklesPerAtt = NullDiv(rushingstats[i].brokenTackles, rushingstats[i].att)*100;\r\n eps = Tst2015(this.rushingstats[i].season, this.rushingstats[i].eps);\r\n rushPointsEarned = Tst2015(rushingstats[i].season,rushingstats[i].eps);\r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n rushAttempts,\r\n firstDown,\r\n firstDownPct,\r\n insideAtt,\r\n yardsPerInsideAtt,\r\n offTackleAtt,\r\n yardsPerOffTackleAtt,\r\n outsideAtt,\r\n yardsPerOutsideAtt,\r\n yardsAfterContact,\r\n yardsAfterContactPerAtt,\r\n brokenTackles,\r\n brokenTacklesPerAtt,\r\n eps,\r\n rushPointsEarned,\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let rushAttempts = 0;\r\n let firstDown = 0;\r\n let firstDownPct = 0;\r\n let insideAtt = 0;\r\n let rushInsideYards = 0;\r\n let yardsPerInsideAtt = 0;\r\n let yardsPerOffTackleAtt = 0;\r\n let offTackleAtt = 0;\r\n let rushOffTackleYards = 0;\r\n let outsideAtt = 0;\r\n let rushOutsideYards = 0;\r\n let yardsPerOutsideAtt = 0;\r\n let yardsAfterContact = 0;\r\n let yardsAfterContactPerAtt = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklesPerAtt = 0;\r\n let rushPointsEarned = 0;\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n rushAttempts = NullSum(rushAttempts,this.data[i].rushAttempts);\r\n firstDown = NullSum(firstDown,this.data[i].firstDown);\r\n insideAtt = NullSum(insideAtt,this.data[i].insideAtt);\r\n rushInsideYards = NullSum(rushInsideYards,NullMult(this.data[i].insideAtt,this.data[i].yardsPerInsideAtt));\r\n offTackleAtt = NullSum(offTackleAtt,this.data[i].offTackleAtt);\r\n rushOffTackleYards = NullSum(rushOffTackleYards,NullMult(this.data[i].offTackleAtt,this.data[i].yardsPerOffTackleAtt));\r\n outsideAtt = NullSum(outsideAtt,this.data[i].outsideAtt);\r\n rushOutsideYards = NullSum(rushOutsideYards, NullMult(this.data[i].outsideAtt,this.data[i].yardsPerOutsideAtt));\r\n yardsAfterContact = NullSum(yardsAfterContact,this.data[i].yardsAfterContact);\r\n brokenTackles = NullSum(brokenTackles,this.data[i].brokenTackles);\r\n rushPointsEarned = NullBypassSum(rushPointsEarned,Tst2015(this.data[i].season,this.data[i].eps));\r\n }\r\n if (rushAttempts) {\r\n firstDownPct = NullDiv(firstDown,rushAttempts)*100;\r\n brokenTacklesPerAtt = NullDiv(brokenTackles,rushAttempts)*100;\r\n yardsAfterContactPerAtt = NullDiv(yardsAfterContact,rushAttempts);\r\n }\r\n yardsPerInsideAtt = NullDiv(rushInsideYards,insideAtt);\r\n yardsPerOffTackleAtt = NullDiv(rushOffTackleYards,offTackleAtt);\r\n yardsPerOutsideAtt = NullDiv(rushOutsideYards,outsideAtt);\r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n firstDown,\r\n firstDownPct,\r\n insideAtt,\r\n yardsPerInsideAtt,\r\n offTackleAtt,\r\n yardsPerOffTackleAtt,\r\n outsideAtt,\r\n yardsPerOutsideAtt,\r\n yardsAfterContact,\r\n yardsAfterContactPerAtt,\r\n brokenTackles,\r\n brokenTacklesPerAtt,\r\n rushPointsEarned,\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Advanced Rushing
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableRBWRAdvancedRushingTabulator;","import React from 'react';\r\nimport {CalcPlayerRating, NullSum, NullBypassSum, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { advReceiving } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.receivingstats = this.props.receivingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n { \r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\", \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\", \r\n urlPrefix:\"/players/\", \r\n urlField: \"playerId\"\r\n } \r\n },\r\n { \r\n title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header textColumn\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\", \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"eps\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc \r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\", \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n }\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { title: \"\",\r\n columns: bioCols,\r\n cssClass: \"break\",\r\n },\r\n {\r\n title: \"Targets\",\r\n columns:[\r\n { \r\n title: \"All\", field: \"targets\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Rec\", field: \"recs\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Rec%\", field: \"compPct\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Share%\", field: \"targetShare\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Intended Air Yards\", field: \"intendedAirYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter: \"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Avg Depth\", field: \"avgTgtDepth\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter: \"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Catchable\",\r\n columns:[\r\n { \r\n title: \"All\", field: \"catchableTgts\", cssClass: \"single-row-header\", \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Catch%\", field: \"catchablePct\", cssClass: \"single-row-header break\", \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n { \r\n title: \"Complete Air Yards\", field: \"completedAirYards\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Yds After Catch\", field: \"yardsAfterCatch\", cssClass: \"single-row-header\",\r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"YAC Per Rec\", field: \"ydsAftCatchPerReceive\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Drops\", field: \"drops\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Drop%\", field: \"dropPct\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"First Downs\", field: \"firstDowns\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\", \r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"First Down%\", field: \"firstDownPct\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Receiver Rating\", field: \"receiverRating\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Recv Points Earned\", field: \"eps\", cssClass: \"single-row-header\", \r\n headerSortStartingDir:\"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${advReceiving[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let targets = 0;\r\n let recs = 0;\r\n let compPct = 0;\r\n let teamTargets = 0;\r\n let targetShare = 0;\r\n let avgTgtDepth = 0;\r\n let catchableTgts = 0;\r\n let catchablePct = 0;\r\n let completedAirYards = 0;\r\n let intendedAirYards = 0;\r\n let yardsAfterCatch = 0;\r\n let ydsAftCatchPerReceive = 0;\r\n let drops = 0;\r\n let dropPct = 0;\r\n let firstDowns = 0;\r\n let firstDownPct = 0;\r\n let yards = 0;\r\n let td = 0;\r\n let int = 0;\r\n let receiverRating = 0;\r\n let eps = 0;\r\n let receivingstats = this.receivingstats;\r\n if (receivingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n player = receivingstats[i].player;\r\n playerId = receivingstats[i].playerId;\r\n positionName = receivingstats[i].position;\r\n season = receivingstats[i].season;\r\n team = receivingstats[i].team;\r\n targets = receivingstats[i].targets;\r\n recs = receivingstats[i].recs;\r\n compPct = compPct = NullDiv(receivingstats[i].recs,receivingstats[i].targets)*100;\r\n teamTargets = receivingstats[i].teamTargets;\r\n targetShare = NullDiv(receivingstats[i].targets,receivingstats[i].teamTargets)*100;\r\n// avgTgtDepth = NullDiv(receivingstats[i].airYards, receivingstats[i].recs);\r\n intendedAirYards = receivingstats[i].intendedAirYards;\r\n avgTgtDepth = NullDiv(receivingstats[i].intendedAirYards, receivingstats[i].targets);\r\n catchableTgts = receivingstats[i].catchableTgts;\r\n catchablePct = receivingstats[i].catchablePct*100;\r\n completedAirYards = receivingstats[i].completedAirYards;\r\n yardsAfterCatch = receivingstats[i].yardsAfterCatch;\r\n ydsAftCatchPerReceive = NullDiv(receivingstats[i].yardsAfterCatch,receivingstats[i].recs);\r\n drops = receivingstats[i].drops;\r\n dropPct = NullDiv(receivingstats[i].drops,receivingstats[i].catchableTgts)*100;\r\n firstDowns = receivingstats[i].firstDowns;\r\n firstDownPct = receivingstats[i].firstDownPct*100;\r\n yards = receivingstats[i].yards;\r\n td = receivingstats[i].td;\r\n int = receivingstats[i].interceptions;\r\n receiverRating = receivingstats[i].receiverRating;\r\n eps = Tst2015(this.receivingstats[i].season, this.receivingstats[i].eps);\r\n data.push({\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n targets,\r\n recs,\r\n compPct,\r\n teamTargets,\r\n targetShare,\r\n avgTgtDepth,\r\n catchableTgts,\r\n catchablePct,\r\n completedAirYards,\r\n intendedAirYards,\r\n yardsAfterCatch,\r\n ydsAftCatchPerReceive,\r\n drops,\r\n dropPct,\r\n firstDowns,\r\n firstDownPct,\r\n yards,\r\n td,\r\n int,\r\n receiverRating,\r\n eps\r\n });\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let targets = 0;\r\n let recs = 0;\r\n let targetShare = 0;\r\n let teamTargets = 0;\r\n let catchableTgts = 0;\r\n let completedAirYards = 0;\r\n let intendedAirYards = 0;\r\n let yardsAfterCatch = 0;\r\n let drops = 0;\r\n let firstDowns = 0;\r\n let compPct = 0;\r\n let avgTgtDepth = 0;\r\n let catchablePct = 0;\r\n let ydsAftCatchPerReceive = 0;\r\n let dropPct = 0;\r\n let firstDownPct = 0;\r\n let eps = 0;\r\n let yards = 0; //not displayed. for IQR calculation only\r\n let td = 0; //not displayed. for IQR calculation only\r\n let int = 0; //not displayed. for IQR calculation only\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n targets = NullSum(targets,this.data[i].targets);\r\n teamTargets = NullSum(teamTargets,this.data[i].teamTargets);\r\n recs = NullSum(recs,this.data[i].recs);\r\n catchableTgts = NullSum(catchableTgts,this.data[i].catchableTgts);\r\n completedAirYards = NullSum(completedAirYards, this.data[i].completedAirYards);\r\n intendedAirYards = NullSum(intendedAirYards, this.data[i].intendedAirYards);\r\n yardsAfterCatch = NullSum(yardsAfterCatch,this.data[i].yardsAfterCatch);\r\n drops = NullSum(drops,this.data[i].drops);\r\n firstDowns = NullSum(firstDowns,this.data[i].firstDowns);\r\n yards = NullSum(yards,this.data[i].yards);\r\n td = NullSum(td,this.data[i].td);\r\n int = NullSum(int,this.data[i].int);\r\n eps = NullBypassSum(eps,Tst2015(this.data[i].season,this.data[i].eps));\r\n }\r\n compPct = NullDiv(recs,targets)*100;\r\n// avgTgtDepth = NullDiv(airYards, recs);\r\n avgTgtDepth = NullDiv(intendedAirYards, targets);\r\n catchablePct = NullDiv(recs,catchableTgts)*100;\r\n ydsAftCatchPerReceive = NullDiv(yardsAfterCatch,recs);\r\n dropPct = NullDiv(drops,catchableTgts)*100;\r\n firstDownPct = NullDiv(firstDowns,recs)*100;\r\n targetShare = NullDiv(targets,teamTargets)*100;\r\n let receiverRating = CalcPlayerRating(targets,recs,yards,td,int);\r\n this.data.push({\r\n season,\r\n team,\r\n targets,\r\n recs,\r\n compPct,\r\n targetShare,\r\n avgTgtDepth,\r\n catchableTgts,\r\n catchablePct,\r\n completedAirYards,\r\n intendedAirYards,\r\n yardsAfterCatch,\r\n ydsAftCatchPerReceive,\r\n drops,\r\n dropPct,\r\n firstDowns,\r\n firstDownPct,\r\n receiverRating,\r\n eps\r\n });\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Advanced Receiving
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullSub, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { cgtSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.blockingstats = this.props.blockingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n { \r\n title: \"Player\", field: \"player\", cssClass: \"textColumn\", \r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\", \r\n urlPrefix:\"/players/\", \r\n urlField: \"playerId\"\r\n }\r\n },\r\n { \r\n title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\",\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn\", \r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"G\", field: \"games\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"GS\", field: \"starts\", cssClass: \"break\",\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\"\r\n } \r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"pointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn\",\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"G\", field: \"games\", \r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"GS\", field: \"starts\", cssClass: \"break\", \r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n } \r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { \r\n title: \"\",\r\n columns: bioCols\r\n },\r\n { \r\n title: \"Total Snaps\", field: \"snaps\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\", \r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Blown Blocks\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"blownBlocks\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pass\", field: \"bbPass\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Rush\", field: \"bbRuns\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }, \r\n { \r\n title: \"Pct\", field: \"blownBlockPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Penalties\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"penalties\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Holding\", field: \"totalHolds\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"False Starts\", field: \"falseStarts\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Other\", field: \"otherPenalties\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"penaltyPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n { \r\n title: \"Tot Points Earned\", field: \"pointsEarned\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${cgtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let games = 0;\r\n let starts = 0;\r\n let snaps = 0;\r\n let blownBlocks = 0;\r\n let bbPass = 0;\r\n let bbRuns = 0;\r\n let blownBlockPct = 0;\r\n let penalties = 0;\r\n let totalHolds = 0;\r\n let falseStarts = 0;\r\n let otherPenalties = 0;\r\n let penaltyPct = 0;\r\n let pointsEarned = 0;\r\n if (this.blockingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n player = this.blockingstats[i].player;\r\n playerId = this.blockingstats[i].playerId;\r\n positionName = this.blockingstats[i].positionName;\r\n season = this.blockingstats[i].season;\r\n team = this.blockingstats[i].team;\r\n games = this.blockingstats[i].starts > this.blockingstats[i].games ?\r\n this.blockingstats[i].starts :\r\n this.blockingstats[i].games;\r\n starts = this.blockingstats[i].starts;\r\n snaps = NullSum(this.blockingstats[i].passSnap,this.blockingstats[i].rushSnap);\r\n blownBlocks = NullSum(this.blockingstats[i].bbPass,this.blockingstats[i].bbRuns);\r\n bbPass = this.blockingstats[i].bbPass;\r\n bbRuns = this.blockingstats[i].bbRuns;\r\n blownBlockPct = NullDiv(blownBlocks,snaps)*100;\r\n penalties = this.blockingstats[i].penalties;\r\n totalHolds = this.blockingstats[i].passHolds + this.blockingstats[i].rushHolds;\r\n falseStarts = this.blockingstats[i].falseStarts;\r\n otherPenalties = NullSub(this.blockingstats[i].penalties,NullSum(this.blockingstats[i].passHolds,NullSum(this.blockingstats[i].rushHolds,this.blockingstats[i].falseStarts)));\r\n penaltyPct = NullDiv(this.blockingstats[i].penalties,snaps)*100;\r\n pointsEarned = Tst2015(this.blockingstats[i].season,this.blockingstats[i].totalEPS);\r\n \r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n games,\r\n starts,\r\n snaps,\r\n blownBlocks,\r\n bbPass,\r\n bbRuns,\r\n blownBlockPct,\r\n penalties,\r\n totalHolds,\r\n falseStarts,\r\n otherPenalties,\r\n penaltyPct,\r\n pointsEarned\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let games = 0;\r\n let starts = 0;\r\n let snaps = 0;\r\n let blownBlocks = 0;\r\n let bbPass = 0;\r\n let bbRuns = 0;\r\n let blownBlockPct = 0;\r\n let penalties = 0;\r\n let totalHolds = 0;\r\n let falseStarts = 0;\r\n let otherPenalties = 0;\r\n let penaltyPct = 0;\r\n let pointsEarned = 0;\r\n if (this.blockingstats.length !== 0){\r\n for (var i = 0; i < this.blockingstats.length; i++) {\r\n games = NullSum(games,this.blockingstats[i].games);\r\n starts = NullSum(starts,this.blockingstats[i].starts);\r\n snaps = NullSum(snaps,NullSum(this.blockingstats[i].passSnap,this.blockingstats[i].rushSnap));\r\n bbPass = NullSum(bbPass,this.blockingstats[i].bbPass);\r\n bbRuns = NullSum(bbRuns,this.blockingstats[i].bbRuns);\r\n penalties = NullSum(penalties,this.blockingstats[i].penalties);\r\n totalHolds = NullSum(totalHolds,NullSum(this.blockingstats[i].passHolds,this.blockingstats[i].rushHolds));\r\n falseStarts = NullSum(falseStarts,this.blockingstats[i].falseStarts);\r\n pointsEarned = NullBypassSum(pointsEarned,Tst2015(this.blockingstats[i].season,this.blockingstats[i].totalEPS));\r\n };\r\n blownBlocks = NullSum(bbPass,bbRuns);\r\n otherPenalties = NullSub(penalties,NullSum(totalHolds,falseStarts));\r\n if (snaps) {\r\n blownBlockPct = NullDiv(blownBlocks,snaps)*100;\r\n penaltyPct = NullDiv(penalties,snaps)*100;\r\n };\r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n games,\r\n starts,\r\n snaps,\r\n blownBlocks,\r\n bbPass,\r\n bbRuns,\r\n blownBlockPct,\r\n penalties,\r\n totalHolds,\r\n falseStarts,\r\n otherPenalties,\r\n penaltyPct,\r\n pointsEarned\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Summary
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { passBlocking } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.blockingstats = this.props.blockingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n { \r\n title: \"Player\", field: \"player\", cssClass: \"textColumn\", \r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\", \r\n urlPrefix:\"/players/\", \r\n urlField: \"playerId\"\r\n }\r\n },\r\n { \r\n title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\",\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\", \r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"pointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\", \r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\", \r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { \r\n title: \"\",\r\n columns: bioCols\r\n },\r\n { \r\n title: \"Passing Snaps\", field: \"passSnap\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Blown Blocks\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"bbPass\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"bbPerPassSnap\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Penalties\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"passPenalties\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Holding\", field: \"passHolds\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Other\", field: \"otherPenalties\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"passPenaltyPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n \r\n title: \"Opp Sacks\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"sacksAllowed\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"sackPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n { \r\n title: \"Pass Block Points Earned\", field: \"pointsEarned\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${passBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let passSnap = 0;\r\n let bbPass = 0;\r\n let bbPerPassSnap = 0;\r\n let passPenalties = 0;\r\n let passHolds = 0;\r\n let otherPenalties = 0;\r\n let passPenaltyPct = 0;\r\n let sacksAllowed = 0;\r\n let sackPct = 0;\r\n let pointsEarned = 0;\r\n let passBlockEPS = 0;\r\n if (this.blockingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n player = this.blockingstats[i].player;\r\n playerId = this.blockingstats[i].playerId;\r\n positionName = this.blockingstats[i].positionName;\r\n season = this.blockingstats[i].season;\r\n team = this.blockingstats[i].team;\r\n passSnap = this.blockingstats[i].passSnap;\r\n bbPass = this.blockingstats[i].bbPass;\r\n bbPerPassSnap = this.blockingstats[i].bbPerPassSnap*100;\r\n passPenalties = this.blockingstats[i].passPenalties;\r\n passHolds = this.blockingstats[i].passHolds;\r\n otherPenalties = this.blockingstats[i].passPenalties - this.blockingstats[i].passHolds;\r\n passPenaltyPct = this.blockingstats[i].passPenaltyPct*100;\r\n sacksAllowed = this.blockingstats[i].sacksAllowed;\r\n sackPct = this.blockingstats[i].sackPct*100;\r\n pointsEarned = Tst2015(this.blockingstats[i].season,this.blockingstats[i].passBlockEPS);\r\n passBlockEPS = this.blockingstats[i].passBlockEPS;\r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n passSnap,\r\n bbPass,\r\n bbPerPassSnap,\r\n passPenalties,\r\n passHolds,\r\n otherPenalties,\r\n passPenaltyPct,\r\n sacksAllowed,\r\n sackPct,\r\n pointsEarned,\r\n passBlockEPS\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let passSnap = 0;\r\n let bbPass = 0;\r\n let bbPerPassSnap = 0;\r\n let passPenalties = 0;\r\n let passHolds = 0;\r\n let otherPenalties = 0;\r\n let passPenaltyPct = 0;\r\n let sacksAllowed = 0;\r\n let sackPct = 0;\r\n let pointsEarned = 0;\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n passSnap = NullSum(passSnap,this.data[i].passSnap);\r\n bbPass = NullSum(bbPass,this.data[i].bbPass);\r\n passPenalties = NullSum(passPenalties,this.data[i].passPenalties);\r\n passHolds = NullSum(passHolds,this.data[i].passHolds);\r\n sacksAllowed = NullSum(sacksAllowed,this.data[i].sacksAllowed);\r\n pointsEarned = NullBypassSum(pointsEarned,Tst2015(this.data[i].season,this.data[i].passBlockEPS));\r\n };\r\n otherPenalties = (passPenalties - passHolds)\r\n if (passSnap) {\r\n bbPerPassSnap = NullDiv(bbPass,passSnap)*100;\r\n passPenaltyPct = NullDiv(passPenalties,passSnap)*100;\r\n sackPct = NullDiv(sacksAllowed,passSnap)*100;\r\n };\r\n \r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n passSnap,\r\n bbPass,\r\n bbPerPassSnap,\r\n passPenalties,\r\n passHolds,\r\n otherPenalties,\r\n passPenaltyPct,\r\n sacksAllowed,\r\n sackPct,\r\n pointsEarned,\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Pass Blocking
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullSub, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { runBlocking } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.blockingstats = this.props.blockingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n { \r\n title: \"Player\", field: \"player\", cssClass: \"textColumn\", \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\", \r\n urlPrefix:\"/players/\", \r\n urlField: \"playerId\"\r\n }\r\n },\r\n { \r\n title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\",\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\", \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"pointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\", \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\", \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { \r\n title: \"\",\r\n columns: bioCols\r\n },\r\n { \r\n title: \"Rushing Snaps\", field: \"rushSnap\", cssClass: \"break\", \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Blown Blocks\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"bbRuns\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"bBperRushSnap\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Penalties\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"rushPenalties\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Holding\", field: \"rushHolds\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Other\", field: \"otherPenalties\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"rushPenaltyPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Opp Stuffs\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"rushStuffs\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"rushStuffPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n { \r\n title: \"Run Block Points Earned\", field: \"pointsEarned\", \r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${runBlocking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let rushSnap = 0;\r\n let bbRuns = 0;\r\n let bBperRushSnap = 0;\r\n let rushPenalties = 0;\r\n let rushHolds = 0;\r\n let otherPenalties = 0;\r\n let rushPenaltyPct = 0;\r\n let rushStuffs = 0;\r\n let rushStuffPct = 0;\r\n let pointsEarned = 0;\r\n if (this.blockingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n player = this.blockingstats[i].player;\r\n playerId = this.blockingstats[i].playerId;\r\n positionName = this.blockingstats[i].positionName;\r\n season = this.blockingstats[i].season;\r\n team = this.blockingstats[i].team;\r\n rushSnap = this.blockingstats[i].rushSnap;\r\n bbRuns = this.blockingstats[i].bbRuns;\r\n bBperRushSnap = this.blockingstats[i].bBperRushSnap*100;\r\n rushPenalties = this.blockingstats[i].rushPenalties;\r\n rushHolds = this.blockingstats[i].rushHolds;\r\n otherPenalties = NullSub(this.blockingstats[i].rushPenalties,this.blockingstats[i].rushHolds);\r\n rushPenaltyPct = this.blockingstats[i].rushPenaltyPct*100;\r\n rushStuffs = this.blockingstats[i].rushStuffs;\r\n rushStuffPct = this.blockingstats[i].rushStuffPct*100;\r\n pointsEarned = Tst2015(this.blockingstats[i].season,this.blockingstats[i].runBlockEPS);\r\n \r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n rushSnap,\r\n bbRuns,\r\n bBperRushSnap,\r\n rushPenalties,\r\n rushHolds,\r\n otherPenalties,\r\n rushPenaltyPct,\r\n rushStuffs,\r\n rushStuffPct,\r\n pointsEarned\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let rushSnap = 0;\r\n let bbRuns = 0;\r\n let bBperRushSnap = 0;\r\n let rushPenalties = 0;\r\n let rushHolds = 0;\r\n let otherPenalties = 0;\r\n let rushPenaltyPct = 0;\r\n let rushStuffs = 0;\r\n let rushStuffPct = 0;\r\n let pointsEarned = 0;\r\n if (this.blockingstats.length !== 0){\r\n for (var i = 0; i < this.blockingstats.length; i++) {\r\n rushSnap = NullSum(rushSnap,this.blockingstats[i].rushSnap);\r\n bbRuns = NullSum(bbRuns,this.blockingstats[i].bbRuns);\r\n rushPenalties = NullSum(rushPenalties,this.blockingstats[i].rushPenalties);\r\n rushHolds = NullSum(rushHolds,this.blockingstats[i].rushHolds);\r\n rushStuffs = NullSum(rushStuffs,this.blockingstats[i].rushStuffs);\r\n pointsEarned = NullBypassSum(pointsEarned,Tst2015(this.blockingstats[i].season,this.blockingstats[i].runBlockEPS));\r\n };\r\n otherPenalties = NullSub(rushPenalties,rushHolds);\r\n if (rushSnap) {\r\n bBperRushSnap = NullDiv(bbRuns,rushSnap)*100;\r\n rushPenaltyPct = NullDiv(rushPenalties,rushSnap)*100;\r\n rushStuffPct = NullDiv(rushStuffs,rushSnap)*100;\r\n };\r\n \r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n rushSnap,\r\n bbRuns,\r\n bBperRushSnap,\r\n rushPenalties,\r\n rushHolds,\r\n otherPenalties,\r\n rushPenaltyPct,\r\n rushStuffs,\r\n rushStuffPct,\r\n pointsEarned\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Run Blocking
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullMax, NullDiv, DispFunc} from '../common/CommonFunctions';\r\nimport { punting } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableKPPuntingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.puntingstats = this.props.puntingstats;\r\n this.playerlist = this.props.playerlist;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 1;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n this.cols = [\r\n { \r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n // { title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header textColumn\", sorter: sortFunc },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column break\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\"\r\n },\r\n { \r\n title: \"Punts\", field: \"punts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Yards\", field: \"puntYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"puntAvgYards\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Opp Ret\", field: \"puntsReturned\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Ret Yards\", field: \"returnYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Net Avg\", field: \"puntAvgNetYards\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Long\", field: \"long\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Blocks\", field: \"blockedPunts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Partial Blocks\", field: \"partialBlockedPunts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n titleFormatter: \"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Fair Catches\", field: \"fCs\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n titleFormatter:\"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Touchbacks\", field: \"touchBacks\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n titleFormatter:\"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Inside 20\", field: \"puntsInside20\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Tot Points Earned\", field: \"sumPointsEarned\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\",\r\n titleFormatter:\"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"sumPointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n this.cols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\", \r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: false, sorter: sortFunc\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: false, sorter: sortFunc },\r\n { \r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column textColumn break\", \r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc\r\n },\r\n { \r\n title: \"Punts\", field: \"punts\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc,\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Yards\", field: \"puntYards\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"puntAvgYards\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Opp Ret\", field: \"puntsReturned\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Ret Yards\", field: \"returnYards\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc,\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Net Avg\", field: \"puntAvgNetYards\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Long\", field: \"long\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc,\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Blocks\", field: \"blockedPunts\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc,\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Partial Blocks\", field: \"partialBlockedPunts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\",\r\n titleFormatter: \"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Fair Catches\", field: \"fCs\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Touchbacks\", field: \"touchBacks\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc, \r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Inside
20\", field: \"puntsInside20\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Tot Points Earned\", field: \"sumPointsEarned\", cssClass: \"single-row-header\", \r\n headerSortStartingDir: \"desc\", headerSort: false, sorter: sortFunc, \r\n titleFormatter:\"textarea\",\r\n width: `${punting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n \r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let games = 0;\r\n let punts = 0;\r\n let puntYards = 0;\r\n let puntAvgYards = 0;\r\n let puntsReturned = 0;\r\n let returnYards = 0;\r\n let netPuntYards = 0;\r\n let puntAvgNetYards = 0;\r\n let long = 0;\r\n let blockedPunts = 0;\r\n let partialBlockedPunts = 0;\r\n let fCs = 0;\r\n let touchBacks = 0;\r\n let puntsInside20 = 0;\r\n let sumPointsEarned = 0;\r\n if (this.puntingstats.length !== 0){\r\n for (var i=0; i= this.minFilter){\r\n player = this.puntingstats[i].player;\r\n playerId = this.puntingstats[i].playerId;\r\n positionName = this.puntingstats[i].positionName;\r\n season = this.puntingstats[i].season;\r\n team = this.puntingstats[i].team;\r\n games = this.puntingstats[i].games;\r\n punts = this.puntingstats[i].punts;\r\n puntYards = this.puntingstats[i].puntYards;\r\n puntAvgYards = NullDiv(this.puntingstats[i].puntYards,this.puntingstats[i].punts);\r\n puntsReturned = this.puntingstats[i].puntsReturned;\r\n returnYards = this.puntingstats[i].returnYards;\r\n netPuntYards = this.puntingstats[i].netPuntYards;\r\n puntAvgNetYards = NullDiv(this.puntingstats[i].netPuntYards, this.puntingstats[i].punts - this.puntingstats[i].blockedPunts);\r\n long = this.puntingstats[i].long;\r\n blockedPunts = this.puntingstats[i].blockedPunts;\r\n partialBlockedPunts = this.puntingstats[i].partialBlockedPunts;\r\n fCs = this.puntingstats[i].fCs;\r\n touchBacks = this.puntingstats[i].touchBacks;\r\n puntsInside20 = this.puntingstats[i].puntsInside20;\r\n sumPointsEarned = this.puntingstats[i].eps;\r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n games,\r\n punts,\r\n puntYards,\r\n puntAvgYards,\r\n puntsReturned,\r\n returnYards,\r\n netPuntYards,\r\n puntAvgNetYards,\r\n long,\r\n blockedPunts,\r\n partialBlockedPunts,\r\n fCs,\r\n touchBacks,\r\n puntsInside20,\r\n sumPointsEarned\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let games = 0;\r\n let punts = 0;\r\n let puntYards = 0;\r\n let puntsReturned = 0;\r\n let returnYards = 0;\r\n let netPuntYards=0;\r\n let long = 0;\r\n let blockedPunts = 0;\r\n let partialBlockedPunts = 0;\r\n let fCs = 0;\r\n let touchBacks = 0;\r\n let puntsInside20 = 0;\r\n let puntAvgYards = 0;\r\n let puntAvgNetYards = 0;\r\n let sumPointsEarned = 0;\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n games = NullSum(games,this.data[i].games);\r\n punts = NullSum(punts,this.data[i].punts);\r\n puntYards = NullSum(puntYards,this.data[i].puntYards);\r\n puntsReturned = NullSum(puntsReturned,this.data[i].puntsReturned);\r\n returnYards = NullSum(returnYards,this.data[i].returnYards);\r\n netPuntYards = NullSum(netPuntYards,this.data[i].netPuntYards);\r\n long = NullMax(long,this.data[i].long);\r\n blockedPunts = NullSum(blockedPunts, this.data[i].blockedPunts);\r\n partialBlockedPunts = NullSum(partialBlockedPunts, this.data[i].partialBlockedPunts);\r\n touchBacks = NullSum(touchBacks,this.data[i].touchBacks);\r\n fCs = NullSum(fCs,this.data[i].fCs);\r\n puntsInside20 = NullSum(puntsInside20, this.data[i].puntsInside20);\r\n sumPointsEarned = NullBypassSum(sumPointsEarned, this.data[i].sumPointsEarned);\r\n }\r\n puntAvgYards = NullDiv(puntYards,punts);\r\n puntAvgNetYards = NullDiv(netPuntYards, punts - blockedPunts);\r\n \r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n games,\r\n punts,\r\n puntYards,\r\n puntAvgYards,\r\n puntsReturned,\r\n returnYards,\r\n puntAvgNetYards,\r\n long,\r\n blockedPunts,\r\n partialBlockedPunts,\r\n fCs,\r\n touchBacks,\r\n puntsInside20,\r\n sumPointsEarned\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Punting
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableKPPuntingTabulator;","import React from 'react';\r\nimport {NullSum, NullDiv, DispFunc} from '../common/CommonFunctions';\r\nimport { advPunting } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableKPAdvancedPuntingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.puntingstats = this.props.puntingstats;\r\n this.rushingstats = this.props.rushingstats;\r\n this.passingstats = this.props.passingstats;\r\n this.playerlist = this.props.playerlist;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n this.initSort = null;\r\n let sortable = false;\r\n this.colNum = this.isLeaderboards ? 0 : 1;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"player\", cssClass: \"textColumn\",\r\n headerSort: sortable,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n //{ title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\", headerSort: sortable, sorter: sortFunc },\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable\r\n },\r\n \r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"returnPct\", dir: \"asc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"textColumn\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"textColumn break\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n }, \r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"Fair Catch%\", field: \"fairCatchPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Return%\", field: \"returnPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Inside 20%\", field: \"puntIn20Pct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Touch-back%\", field: \"touchBackPct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Punts\",\r\n columns:[\r\n {\r\n title: \"Inside 10 \", field: \"puntIn10\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Inside 10%\", field: \"puntIn10Pct\", cssClass: \"break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Rushing\",\r\n columns:[\r\n {\r\n title: \"Att\", field: \"rushAttempts\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yards\", field: \"rushYds\", cssClass: \"break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Passing\",\r\n columns:[\r\n {\r\n title: \"Att\", field: \"passAttempts\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field: \"passCompletions\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yards\", field: \"passYds\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"passTD\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int\", field: \"passInt\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advPunting[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n \r\n ]\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData() {\r\n \r\n // declare and initialize detail data fields\r\n // these fields will be used to create objects for each season/team pair\r\n let puntingstats = this.puntingstats;\r\n let passingstats = this.passingstats;\r\n let rushingstats = this.rushingstats;\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let games = 0;\r\n let punts = 0;\r\n let fCs = 0;\r\n let returns = 0;\r\n let puntIn20 = 0;\r\n let puntIn20Pct = 0;\r\n let puntIn10 = 0;\r\n let touchBacks = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let passAttempts = 0;\r\n let passCompletions = 0;\r\n let passYds = 0;\r\n let passTD = 0;\r\n let passInt = 0;\r\n let fairCatchPct = 0;\r\n let returnPct = 0;\r\n let touchBackPct= 0;\r\n let puntIn10Pct = 0;\r\n\r\n // define array to hold detail data objects for each season/team pair\r\n var rowdata = [];\r\n var i = 0;\r\n // create rowdata[] object for each row in passingstats data\r\n if (puntingstats.length !==0) {\r\n for (i=0; i= this.minFilter){\r\n player = puntingstats[i].player;\r\n playerId = puntingstats[i].playerId;\r\n positionName = puntingstats[i].positionName;\r\n season = puntingstats[i].season;\r\n team = puntingstats[i].team;\r\n games = puntingstats[i].games;\r\n punts = puntingstats[i].punts;\r\n fCs = puntingstats[i].fCs;\r\n returns = puntingstats[i].puntsReturned;\r\n puntIn20 = puntingstats[i].puntsInside20;\r\n puntIn20Pct = puntingstats[i].puntsInSide20Pct;\r\n puntIn10 = puntingstats[i].puntsInside10;\r\n touchBacks = puntingstats[i].touchBacks;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n passAttempts = 0;\r\n passCompletions = 0;\r\n passYds = 0;\r\n passTD = 0;\r\n passInt = 0;\r\n fairCatchPct = NullDiv(fCs,punts)*100;\r\n returnPct = NullDiv(returns,punts)*100;\r\n puntIn20Pct = NullDiv(puntIn20,punts)*100;\r\n touchBackPct = NullDiv(touchBacks,punts)*100;\r\n puntIn10Pct = NullDiv(puntIn10,punts)*100;\r\n \r\n rowdata.push({\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n games,\r\n punts,\r\n fCs,\r\n returns,\r\n puntIn20,\r\n puntIn20Pct,\r\n puntIn10,\r\n touchBacks,\r\n rushAttempts,\r\n rushYds,\r\n passAttempts,\r\n passCompletions,\r\n passYds,\r\n passTD,\r\n passInt,\r\n fairCatchPct,\r\n returnPct,\r\n touchBackPct,\r\n puntIn10Pct\r\n });\r\n }\r\n }\r\n }\r\n // for each rushingstats row that matches rowdata[] by season/team pair, populate the corresponding fields.\r\n // if the season/team pair is not found create a new rowdata object and populate the appropriate.\r\n let j = -1;\r\n if (rushingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === rushingstats[i].season && rowdata[j].team === rushingstats[i].team && rowdata[j].playerId === rushingstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].rushAttempts = rushingstats[i].att;\r\n rowdata[j].rushYds = rushingstats[i].yards;\r\n } else if(!this.isLeaderboards) {\r\n player = rushingstats[i].player;\r\n playerId = rushingstats[i].playerId\r\n season = rushingstats[i].season;\r\n team = rushingstats[i].team;\r\n games = rushingstats[i].g;\r\n punts = 0;\r\n fCs = 0;\r\n returns = 0;\r\n puntIn20 = 0;\r\n puntIn20Pct = 0;\r\n puntIn10 = 0;\r\n touchBacks = 0;\r\n rushAttempts = rushingstats[i].att;\r\n rushYds = rushingstats[i].yards;\r\n passAttempts = 0;\r\n passCompletions = 0;\r\n passYds = 0;\r\n passTD = 0;\r\n passInt = 0;\r\n fairCatchPct = NullDiv(fCs,punts);\r\n returnPct = NullDiv(returns,punts);\r\n puntIn20Pct = NullDiv(puntIn20,punts);\r\n touchBackPct = NullDiv(touchBacks,punts);\r\n puntIn10Pct = NullDiv(puntIn10,punts);\r\n rowdata.push({\r\n player,\r\n playerId,\r\n season,\r\n team,\r\n games,\r\n punts,\r\n fCs,\r\n returns,\r\n puntIn20,\r\n puntIn20Pct,\r\n puntIn10,\r\n touchBacks,\r\n rushAttempts,\r\n rushYds,\r\n passAttempts,\r\n passCompletions,\r\n passYds,\r\n passTD,\r\n passInt,\r\n fairCatchPct,\r\n returnPct,\r\n touchBackPct,\r\n puntIn10Pct\r\n });\r\n }\r\n }\r\n }\r\n // for each passingstats row that matches rowdata[] by season/team pair, populate the corresponding fields.\r\n // if the season/team pair is not found create a new rowdata object and populate the appropriate.\r\n j = -1;\r\n if (passingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === passingstats[i].season && rowdata[j].team === passingstats[i].teamName && rowdata[j].playerId === passingstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].passAttempts = passingstats[i].attempts;\r\n rowdata[j].passCompletions = passingstats[i].comp;\r\n rowdata[j].passYds = passingstats[i].yards;\r\n rowdata[j].passTD = passingstats[i].td;\r\n rowdata[j].passInt = passingstats[i].int;\r\n } else if(!this.isLeaderboards) {\r\n player = passingstats[i].player;\r\n playerId = passingstats[i].playerId;\r\n season = passingstats[i].season;\r\n team = passingstats[i].team;\r\n games = passingstats[i].g;\r\n punts = 0;\r\n fCs = 0;\r\n returns = 0;\r\n puntIn20 = 0;\r\n puntIn20Pct = 0;\r\n puntIn10 = 0;\r\n touchBacks = 0;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n passAttempts = passingstats[i].attempts;\r\n passCompletions = passingstats[i].comp;\r\n passYds = passingstats[i].yards;\r\n passTD = passingstats[i].td;\r\n passInt = passingstats[i].int;\r\n fairCatchPct = NullDiv(fCs,punts);\r\n returnPct = NullDiv(returns,punts);\r\n puntIn20Pct = NullDiv(puntIn20,punts);\r\n touchBackPct = NullDiv(touchBacks,punts);\r\n puntIn10Pct = NullDiv(puntIn10,punts);\r\n rowdata.push({\r\n player,\r\n playerId,\r\n season,\r\n team,\r\n games,\r\n punts,\r\n fCs,\r\n returns,\r\n puntIn20,\r\n puntIn20Pct,\r\n puntIn10,\r\n touchBacks,\r\n rushAttempts,\r\n rushYds,\r\n passAttempts,\r\n passCompletions,\r\n passYds,\r\n passTD,\r\n passInt,\r\n fairCatchPct,\r\n returnPct,\r\n touchBackPct,\r\n puntIn10Pct\r\n });\r\n }\r\n }\r\n }\r\n this.data = rowdata\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() { \r\n let season = 'Total';\r\n let team = '';\r\n let games = 0;\r\n let punts = 0;\r\n let fCs = 0;\r\n let returns = 0;\r\n let puntIn20 = 0;\r\n let puntIn10 = 0;\r\n let touchBacks = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let passAttempts = 0;\r\n let passCompletions = 0;\r\n let passYds = 0;\r\n let passTD = 0;\r\n let passInt = 0;\r\n let fairCatchPct = 0;\r\n let returnPct = 0;\r\n let touchBackPct = 0;\r\n let puntIn20Pct = 0;\r\n let puntIn10Pct = 0;\r\n if (this.data.length !== 0){\r\n for (var i=0; i\r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Advanced Punting
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableKPAdvancedPuntingTabulator;\r\n","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullDiv, NullMax, DispFunc} from '../common/CommonFunctions';\r\nimport { kicking } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableKPKickingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.kickingstats = this.props.kickingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 1;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\",\r\n headerSort: sortable,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n //{ title: \"Pos\", field: \"positionName\", cssClass: \"textColumn\", headerSort: sortable, sorter: sortFunc },\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column break\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable\r\n }\r\n \r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"PointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n }, \r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column break\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n }, \r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"Overall\",\r\n columns:[\r\n {\r\n title: \"Made\", field: \"overallMade\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Att\", field: \"overallAttempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"overallPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Long\", field: \"overallLong\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pts\", field: \"overallPoints\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"1-29 Yds\",\r\n columns:[ \r\n {\r\n title: \"Made\", field: \"fg1to29Made\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Att\", field: \"fg1to29Attempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"fg1to29Pct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"30-39 Yds\",\r\n columns:[ \r\n {\r\n title: \"Made\", field: \"fg30to39Made\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Att\", field: \"fg30to39Attempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"fg30to39Pct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"40-49 Yds\",\r\n columns: [\r\n {\r\n title: \"Made\", field: \"fg40to49Made\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Att\", field: \"fg40to49Attempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"fg40to49Pct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n title: \"50+ Yds\",\r\n columns: [\r\n { \r\n title: \"Made\", field: \"fg50plusMade\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Att\", field: \"fg50plusAttempts\", cssClass: \"single-row-header\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"fg50plusPct\", cssClass: \"single-row-header break\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n title: \"PAT\",\r\n columns: [\r\n { \r\n title: \"Made\", field: \"patMade\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Att\", field: \"patAttempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"patPct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Tot Points Earned\", field: \"PointsEarned\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${kicking[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ]\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let kickingstats = this.kickingstats;\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let season = 0;\r\n let games = 0;\r\n let overallMade = 0;\r\n let overallAttempts = 0;\r\n let overallPct = 0;\r\n let overallLong = 0;\r\n let overallPoints = 0;\r\n let fg1to29Made = 0;\r\n let fg1to29Attempts = 0;\r\n let fg1to29Pct = 0;\r\n let fg30to39Made = 0;\r\n let fg30to39Attempts = 0;\r\n let fg30to39Pct = 0;\r\n let fg40to49Made = 0;\r\n let fg40to49Attempts = 0;\r\n let fg40to49Pct = 0;\r\n let fg50plusMade = 0;\r\n let fg50plusAttempts = 0;\r\n let fg50plusPct = 0;\r\n let patMade = 0;\r\n let patAttempts = 0;\r\n let patPct = 0;\r\n let PointsEarned = 0;\r\n\r\n // create rowdata[] object for each row in kickingstats data\r\n if(kickingstats.length !==0) {\r\n for (var i = 0; i < kickingstats.length; i++) {\r\n if (!this.isLeaderboards || kickingstats[i].fieldGoalAtt >= this.minFilter){\r\n games = this.kickingstats[i].g;\r\n season =this.kickingstats[i].season;\r\n team = this.kickingstats[i].teamName;\r\n player =this.kickingstats[i].playerName;\r\n playerId = this.kickingstats[i].playerId;\r\n positionName = this.kickingstats[i].positionName;\r\n overallMade = this.kickingstats[i].fieldGoalMakes;\r\n overallAttempts = this.kickingstats[i].fieldGoalAtt;\r\n overallPoints = (this.kickingstats[i].fieldGoalMakes * 3) + this.kickingstats[i].extraPointMakes;;\r\n overallLong = this.kickingstats[i].long;\r\n fg1to29Made = NullSum(this.kickingstats[i].fgMade1to19,this.kickingstats[i].fgMade20to29);\r\n fg1to29Attempts = NullSum(this.kickingstats[i].fgAtt1to19,this.kickingstats[i].fgAtt20to29);\r\n fg30to39Made = this.kickingstats[i].fgMade30to39;\r\n fg30to39Attempts = this.kickingstats[i].fgAtt30to39;\r\n fg40to49Made = this.kickingstats[i].fgMade40to49;\r\n fg40to49Attempts =this.kickingstats[i].fgAtt40to49;\r\n fg50plusMade = this.kickingstats[i].fgMade50Plus;\r\n fg50plusAttempts = this.kickingstats[i].fgAtt50Plus;\r\n patMade = this.kickingstats[i].extraPointMakes;\r\n patAttempts = this.kickingstats[i].extraPointAtt;\r\n overallPct = NullDiv(overallMade,overallAttempts)*100;\r\n fg1to29Pct = NullDiv(fg1to29Made,fg1to29Attempts)*100;\r\n fg30to39Pct = NullDiv(fg30to39Made,fg30to39Attempts)*100;\r\n fg40to49Pct = NullDiv(fg40to49Made,fg40to49Attempts)*100;\r\n fg50plusPct = NullDiv(fg50plusMade,fg50plusAttempts)*100;\r\n patPct = NullDiv(patMade,patAttempts)*100;\r\n PointsEarned = this.kickingstats[i].eps;\r\n data.push({\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n games,\r\n overallMade,\r\n overallAttempts,\r\n overallPct,\r\n overallLong,\r\n overallPoints,\r\n fg1to29Made,\r\n fg1to29Attempts,\r\n fg1to29Pct,\r\n fg30to39Made,\r\n fg30to39Attempts,\r\n fg30to39Pct,\r\n fg40to49Made,\r\n fg40to49Attempts,\r\n fg40to49Pct,\r\n fg50plusMade,\r\n fg50plusAttempts,\r\n fg50plusPct,\r\n patMade,\r\n patAttempts,\r\n patPct,\r\n PointsEarned\r\n });\r\n }\r\n }\r\n }\r\n this.data = data;\r\n }\r\n\r\n SumData(){\r\n let player = '';\r\n let playerId = '';\r\n let positionName = '';\r\n let season = 'Total';\r\n let team = '';\r\n let games = 0;\r\n let overallMade = 0;\r\n let overallAttempts = 0;\r\n let overallPct = 0;\r\n let overallLong = 0;\r\n let overallPoints = 0;\r\n let fg1to29Made = 0;\r\n let fg1to29Attempts = 0;\r\n let fg1to29Pct = 0;\r\n let fg30to39Made = 0;\r\n let fg30to39Attempts = 0;\r\n let fg30to39Pct = 0;\r\n let fg40to49Made = 0;\r\n let fg40to49Attempts = 0;\r\n let fg40to49Pct = 0;\r\n let fg50plusMade = 0;\r\n let fg50plusAttempts = 0;\r\n let fg50plusPct = 0;\r\n let patMade = 0;\r\n let patAttempts = 0;\r\n let patPct = 0;\r\n let PointsEarned = 0;\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n games = NullSum(games, this.data[i].games);\r\n overallMade = NullSum(overallMade,this.data[i].overallMade);\r\n overallAttempts = NullSum(overallAttempts,this.data[i].overallAttempts);\r\n overallPoints = NullSum(overallPoints,(this.kickingstats[i].fieldGoalMakes * 3));\r\n overallLong = NullMax(overallLong,this.data[i].overallLong);\r\n fg1to29Made = NullSum(fg1to29Made,this.data[i].fg1to29Made);\r\n fg1to29Attempts = NullSum(fg1to29Attempts,this.data[i].fg1to29Attempts);\r\n fg30to39Made = NullSum(fg30to39Made,this.data[i].fg30to39Made);\r\n fg30to39Attempts = NullSum(fg30to39Attempts,this.data[i].fg30to39Attempts);\r\n fg40to49Made = NullSum(fg40to49Made,this.data[i].fg40to49Made);\r\n fg40to49Attempts = NullSum(fg40to49Attempts,this.data[i].fg40to49Attempts);\r\n fg50plusMade = NullSum(fg50plusMade,this.data[i].fg50plusMade);\r\n fg50plusAttempts = NullSum(fg50plusAttempts,this.data[i].fg50plusAttempts);\r\n patMade = NullSum(patMade,this.data[i].patMade);\r\n patAttempts = NullSum(patAttempts, this.kickingstats[i].extraPointAtt);\r\n PointsEarned = NullBypassSum(PointsEarned, this.kickingstats[i].eps);\r\n }\r\n overallPct = NullDiv(overallMade,overallAttempts)*100;\r\n fg1to29Pct = NullDiv(fg1to29Made,fg1to29Attempts)*100;\r\n fg30to39Pct = NullDiv(fg30to39Made,fg30to39Attempts)*100;\r\n fg40to49Pct = NullDiv(fg40to49Made,fg40to49Attempts)*100;\r\n fg50plusPct = NullDiv(fg50plusMade,fg50plusAttempts)*100;\r\n patPct = NullDiv(patMade,patAttempts)*100;\r\n \r\n this.data.push({\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n games,\r\n overallMade,\r\n overallAttempts,\r\n overallPct,\r\n overallLong,\r\n overallPoints,\r\n fg1to29Made,\r\n fg1to29Attempts,\r\n fg1to29Pct,\r\n fg30to39Made,\r\n fg30to39Attempts,\r\n fg30to39Pct,\r\n fg40to49Made,\r\n fg40to49Attempts,\r\n fg40to49Pct,\r\n fg50plusMade,\r\n fg50plusAttempts,\r\n fg50plusPct,\r\n patMade,\r\n patAttempts,\r\n patPct,\r\n PointsEarned\r\n });\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n //layout: \"fitColumns\", // added by Ruben 7/25/19\r\n colMinWidth: 33,\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Kicking
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\nexport default TableKPKickingTabulator;\r\n","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { dedtSummary, lbSummary, cbsSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableDefenseSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.defensestats = this.props.defensestats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n this.sortable = false;\r\n this.bioCols = null;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n this.sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n this.sortable = true;\r\n this.bioCols = [\r\n {\r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n {\r\n title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header textColumn small-column\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\"\r\n },\r\n {\r\n title: \"GS\", field: \"starts\", cssClass: \"single-row-header small-column break\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\"\r\n } \r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"pointsSaved\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n this.bioCols = [\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: this.sortable, sorter: this.sortFunc\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: this.sortable, sorter: this.sortFunc\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc\r\n },\r\n {\r\n title: \"GS\", field: \"starts\", cssClass: \"single-row-header small-column break\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc\r\n } \r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let season = '';\r\n let team = 0;\r\n let games = 0;\r\n let starts = 0;\r\n let targets = 0;\r\n let completions = 0;\r\n let completionPct = 0;\r\n let passYards = 0;\r\n let passYardsPerTgt = 0;\r\n let td = 0;\r\n let breakups = 0;\r\n let interceptions = 0;\r\n let droppedInts = 0;\r\n let tackles = 0;\r\n let tackleForLoss = 0;\r\n let forcedFumbles = 0;\r\n let pointsSaved = 0;\r\n let sacks = 0;\r\n let pressures = 0;\r\n let hurries = 0;\r\n let hits = 0;\r\n let knockdowns = 0;\r\n let passesBatted = 0;\r\n let pntretAttempts = 0;\r\n let pntretYds = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYds = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n \r\n let defensestats = this.defensestats;\r\n if (defensestats.length !== 0){\r\n let positionName = this.defensestats[0].positionName;\r\n for (var i=0; i= this.minFilter){\r\n player = defensestats[i].player;\r\n playerId = defensestats[i].playeridpr || defensestats[i].playeridrd || defensestats[i].playeridpd || defensestats[i].playeriddf;\r\n positionName = this.defensestats[i].positionName;\r\n season = defensestats[i].season;\r\n team = defensestats[i].team;\r\n games = defensestats[i].starts > defensestats[i].games ?\r\n defensestats[i].starts :\r\n defensestats[i].games;\r\n starts = defensestats[i].starts;\r\n targets = defensestats[i].targets;\r\n completions = defensestats[i].completions;\r\n completionPct = defensestats[i].completionPct;\r\n passYards = defensestats[i].passYards;\r\n passYardsPerTgt = defensestats[i].passYardsPerTgt;\r\n td = defensestats[i].td;\r\n breakups = defensestats[i].breakups;\r\n interceptions = defensestats[i].interceptions;\r\n droppedInts = defensestats[i].droppedInts;\r\n tackles = defensestats[i].tackles;\r\n tackleForLoss = defensestats[i].tackleForLoss;\r\n forcedFumbles = defensestats[i].forcedFumbles;\r\n sacks = defensestats[i].sacks;\r\n pressures = defensestats[i].pressures;\r\n hurries = defensestats[i].hurries;\r\n hits = defensestats[i].hits;\r\n knockdowns = defensestats[i].knockdowns;\r\n passesBatted = defensestats[i].passesBatted;\r\n pntretAttempts = defensestats[i].pntretAttempts;\r\n pntretYds = defensestats[i].pntretYds;\r\n pntretYdsPerAtt = defensestats[i].pntretYdsPerAtt;\r\n pntretTD = defensestats[i].pntretTD;\r\n kickretAttempts = defensestats[i].kickretAttempts;\r\n kickretYds = defensestats[i].kickretYds;\r\n kickretYdsPerAtt = defensestats[i].kickretYdsPerAtt;\r\n kickretTD = defensestats[i].kickretTD;\r\n pointsSaved = Tst2015(defensestats[i].season, NullSum(defensestats[i].pointsSavedPassDef,NullSum(defensestats[i].pointsSavedPassRush,defensestats[i].pointsSavedRushDef)))\r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n games,\r\n starts,\r\n targets,\r\n completions,\r\n completionPct,\r\n passYards,\r\n passYardsPerTgt,\r\n td,\r\n breakups,\r\n interceptions,\r\n droppedInts,\r\n tackles,\r\n tackleForLoss,\r\n forcedFumbles,\r\n pointsSaved,\r\n sacks,\r\n pressures,\r\n hurries,\r\n hits,\r\n knockdowns,\r\n passesBatted,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let assistedTackles = 0;\r\n let batDowns = 0;\r\n let breakups = 0;\r\n let brokenTackles = 0;\r\n let completionPct = 0;\r\n let completions = 0;\r\n let defensed = 0;\r\n let deflected = 0;\r\n let droppedInts = 0;\r\n let forcedFumbles = 0;\r\n let games = 0;\r\n let hits = 0;\r\n let hurries = 0;\r\n let interceptions = 0;\r\n let knockdowns = 0;\r\n let passesBatted = 0;\r\n let passRushes = 0;\r\n let passRushSacks = 0;\r\n let passSnaps = 0;\r\n let pointsSaved = 0;\r\n let pressures = 0;\r\n let rushsnaps = 0;\r\n let sacks = 0;\r\n let soloTackles = 0;\r\n let starts = 0;\r\n let tackleForLoss = 0;\r\n let tackles = 0;\r\n let targets = 0;\r\n let td = 0;\r\n let passYards = 0;\r\n let passYardsPerTgt = 0;\r\n let pntretAttempts = 0;\r\n let pntretYds = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYds = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n if (this.defensestats.length !== 0){\r\n for (var i = 0; i < this.defensestats.length; i++) {\r\n assistedTackles = NullBypassSum(assistedTackles,this.defensestats[i].assistedTackles);\r\n batDowns = NullBypassSum(batDowns,this.defensestats[i].batDowns);\r\n breakups = NullBypassSum(breakups,this.defensestats[i].breakups);\r\n brokenTackles = NullBypassSum(brokenTackles,this.defensestats[i].brokenTackles);\r\n completions = NullBypassSum(completions,this.defensestats[i].completions);\r\n defensed = NullBypassSum(defensed,this.defensestats[i].defensed);\r\n deflected = NullBypassSum(deflected,this.defensestats[i].deflected);\r\n droppedInts = NullBypassSum(droppedInts,this.defensestats[i].droppedInts);\r\n forcedFumbles = NullBypassSum(forcedFumbles,this.defensestats[i].forcedFumbles);\r\n games = NullBypassSum(games,this.defensestats[i].games);\r\n hits = NullBypassSum(hits,this.defensestats[i].hits);\r\n hurries = NullBypassSum(hurries,this.defensestats[i].hurries);\r\n interceptions = NullBypassSum(interceptions,this.defensestats[i].interceptions);\r\n knockdowns = NullBypassSum(knockdowns,this.defensestats[i].knockdowns);\r\n passesBatted = NullBypassSum(passesBatted,this.defensestats[i].passesBatted);\r\n passRushes = NullBypassSum(passRushes,this.defensestats[i].passRushes);\r\n passRushSacks = NullBypassSum(passRushSacks,this.defensestats[i].passRushSacks);\r\n passSnaps = NullBypassSum(passSnaps,this.defensestats[i].passSnaps);\r\n pointsSaved = NullBypassSum(pointsSaved,Tst2015(this.defensestats[i].season,\r\n NullBypassSum(this.defensestats[i].pointsSavedPassDef,NullBypassSum(this.defensestats[i].pointsSavedPassRush,this.defensestats[i].pointsSavedRushDef))));\r\n pressures = NullBypassSum(pressures,this.defensestats[i].pressures);\r\n rushsnaps = NullBypassSum(rushsnaps,this.defensestats[i].rushsnaps);\r\n sacks = NullBypassSum(sacks,this.defensestats[i].sacks);\r\n soloTackles = NullBypassSum(soloTackles,this.defensestats[i].soloTackles);\r\n starts = NullBypassSum(starts,this.defensestats[i].starts);\r\n tackleForLoss = NullBypassSum(tackleForLoss,this.defensestats[i].tackleForLoss);\r\n tackles = NullBypassSum(tackles,this.defensestats[i].tackles);\r\n targets = NullBypassSum(targets,this.defensestats[i].targets);\r\n td = NullBypassSum(td,this.defensestats[i].td);\r\n passYards = NullBypassSum(passYards,this.defensestats[i].passYards);\r\n pntretAttempts = NullBypassSum(pntretAttempts, this.defensestats[i].pntretAttempts);\r\n pntretYds = NullBypassSum(pntretYds, this.defensestats[i].pntretYds);\r\n pntretTD = NullBypassSum(pntretTD, this.defensestats[i].pntretTD);\r\n kickretAttempts = NullBypassSum(kickretAttempts, this.defensestats[i].kickretAttempts);\r\n kickretYds = NullBypassSum(kickretYds, this.defensestats[i].kickretYds);\r\n kickretTD = NullBypassSum(kickretTD, this.defensestats[i].kickretTD);\r\n }\r\n completionPct = NullDiv(completions,targets)*100;\r\n passYardsPerTgt = NullDiv(passYards,targets);\r\n pntretYdsPerAtt = NullDiv(pntretYds,pntretAttempts);\r\n kickretYdsPerAtt = NullDiv(kickretYds,kickretAttempts);\r\n \r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n games,\r\n starts,\r\n targets,\r\n completions,\r\n completionPct,\r\n passYards,\r\n passYardsPerTgt,\r\n td,\r\n breakups,\r\n interceptions,\r\n droppedInts,\r\n tackles,\r\n tackleForLoss,\r\n forcedFumbles,\r\n pointsSaved,\r\n sacks,\r\n pressures,\r\n hurries,\r\n hits,\r\n knockdowns,\r\n passesBatted,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n if (this.defensestats[0]){\r\n switch (this.defensestats[0].positionName){\r\n case 'CB':\r\n case 'S':\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: this.bioCols,\r\n },\r\n {\r\n title: \"Coverage\",\r\n columns: [\r\n {\r\n title: \"Tgtd\", field:\"targets\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field: \"completions\", cssClass: \"single-row-header small-column\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp%\", field: \"completionPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yards\", field: \"passYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Yds/ Target\", field: \"passYardsPerTgt\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n titleFormatter: \"textarea\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"TD Allwd\", field: \"td\", titleFormatter: \"textarea\", cssClass: \"single-row-header small-column\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pass Brkps\", field: \"breakups\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n titleFormatter: \"textarea\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int\", field: \"interceptions\", cssClass: \"single-row-header small-column\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int Drops\", field: \"droppedInts\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n titleFormatter: \"textarea\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Tkls (exc spl tms)\",\r\n columns:[\r\n {\r\n title: \"Tackles\", field: \"tackles\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n cssClass: \"single-row-header\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TFL\", field: \"tackleForLoss\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n cssClass: \"single-row-header small-column\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"FF\", field: \"forcedFumbles\", cssClass: \"single-row-header small-column break\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Punt Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"pntretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc\r\n },\r\n {\r\n title: \"Yards\", field: \"pntretYds\", cssClass: \"single-row-header\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"pntretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"pntretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Kickoff Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"kickretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc\r\n },\r\n {\r\n title: \"Yards\", field: \"kickretYds\", cssClass: \"single-row-header\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"kickretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"kickretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Tot Pts Saved\", field: \"pointsSaved\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${cbsSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n break;\r\n case 'LB':\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: this.bioCols,\r\n },\r\n {\r\n title: \"Tackling (excl. special teams)\",\r\n columns:[\r\n {\r\n title: \"Tackles\", field: \"tackles\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TFL\", field: \"tackleForLoss\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"FF\", field: \"forcedFumbles\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Pass Rush\",\r\n columns:[\r\n {\r\n title: \"Sacks\", field: \"sacks\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pressures\", field: \"pressures\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Coverage\",\r\n columns: [\r\n {\r\n title: \"Targeted\", field:\"targets\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field:\"completions\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp%\", field:\"completionPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yards\", field:\"passYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yds/Trgt\", field:\"passYardsPerTgt\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int\", field:\"interceptions\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n title: \"Tot Points Saved\", field: \"pointsSaved\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${lbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n break;\r\n default: // DE, DT\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: this.bioCols,\r\n },\r\n {\r\n title: \"Tackling (excl. special teams)\",\r\n columns:[\r\n {\r\n title: \"Tackles\", field: \"tackles\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TFL\", field: \"tackleForLoss\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"FF\", field: \"forcedFumbles\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Pass Rush\",\r\n columns:[\r\n {\r\n title: \"Sacks\", field: \"sacks\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc, \r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Hurries\", field: \"hurries\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Hits\", field: \"hits\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Knockdowns\", field: \"knockdowns\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pressures\", field: \"pressures\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Passes Batted\", field: \"passesBatted\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Tot Points Saved\", field: \"pointsSaved\",\r\n headerSortStartingDir: \"desc\", headerSort: this.sortable, sorter: this.sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${dedtSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n break;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n }); \r\n }\r\n \r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Summary
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableDefenseSummaryTabulator;\r\n","import {NullTst, Tst2015, NullBypassSum} from '../common/CommonFunctions';\r\n\r\nconst TableDefenseBuildData = (d,pd,pr,rd,krt,prt) => {\r\n // This function consolidates defense stats into an array of objects by season/team.\r\n //\r\n // PARAMETERS\r\n // pd is an array of passdefense stats with one object per season'\r\n // pr is an array of passrush stats with one object per season'\r\n // rd is an array of rushdefense stats with one object per season.\r\n // CONSOLIDATION PROCESS\r\n // Data consolidation from the three types of data is accomplished by building an\r\n // array in three steps. The first step adds one object for each passdefense object\r\n // populating the corresponding fields of the new object. The second step checks for\r\n // existings object from step one that match year and team of each passrush object\r\n // If there is a match, appropriate fields are populated or accumulated, otherwise,\r\n // a new object is created. Step three continues in the same way as step two but for\r\n // rushdefense data.\r\n //\r\n // check if there are no stats\r\n if (d.length === 0 &&\r\n pd.length === 0 &&\r\n pr.length === 0 &&\r\n rd.length === 0 &&\r\n krt.length === 0 &&\r\n prt.length === 0) {\r\n // df.length === 0) {\r\n return([]);\r\n }\r\n // initialize variables to be used in generating new consolidated defense objects\r\n let havepassdefense = false;\r\n let havepassrush = false;\r\n let haverushdefense = false;\r\n let havedefense = false;\r\n let assistedTackles = 0;\r\n let avgTackleDepth = 0;\r\n let batDowns = 0;\r\n let breakups = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklePct = 0;\r\n let catchableTgts = 0;\r\n let completionPct = 0;\r\n let completions = 0;\r\n let defensed = 0;\r\n let deflected = 0;\r\n let deservedCatchPct = 0;\r\n let droppedInts = 0;\r\n let drops = 0;\r\n let forcedFumbles = 0;\r\n let games = 0;\r\n let hitPct = 0;\r\n let hits = 0;\r\n let hurries = 0;\r\n let hurryPct = 0;\r\n let interceptions = 0;\r\n let knockdownPct = 0;\r\n let knockdowns = 0;\r\n let passesBatted = 0;\r\n let passesBattedPct = 0;\r\n let passRushes = 0;\r\n let passRushPct = 0;\r\n let passRushSacks = 0;\r\n let passSnaps = 0;\r\n let passYards = 0;\r\n let passYardsPerTgt = 0;\r\n let playeriddf = 0;\r\n let playeridpd = 0;\r\n let playeridpr = 0;\r\n let playeridrd = 0;\r\n let player = '';\r\n let pointsSavedPassDef = 0;\r\n let pointsSavedPassRush = 0\r\n let pointsSavedRushDef = 0;\r\n let positionName = '';\r\n let pressurePct = 0;\r\n let pressures = 0;\r\n let rushSnaps = 0;\r\n let rushTackles = 0;\r\n let rushYards = 0;\r\n let sackPct = 0;\r\n let sacks = 0;\r\n let season = 0;\r\n let soloTackles = 0;\r\n let starts = 0;\r\n let tackleForLoss = 0;\r\n let tackles = 0;\r\n let targets = 0;\r\n let td = 0;\r\n let team = '';\r\n let totCatchable = 0;\r\n let pntretAttempts = 0;\r\n let pntretYds = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYds = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n // initialize array to hold new consolidated defense objects\r\n var consolidatedData = [];\r\n // Consolidation step 1 - build one new consolidated object per defense object\r\n var i = 0;\r\n if (d.length !== 0){\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].season === pd[i].season && consolidatedData[j].team === pd[i].team \r\n && pd[i].playerId === consolidatedData[j].playeriddf) {\r\n break;\r\n }\r\n }\r\n if (j > -1){\r\n consolidatedData[j].havepassdefense = true;\r\n// consolidatedData[j].breakups = pd[i].totalBreakups; // 9/8/19 RA - doesn't always match the sum of breakups. Will calculate programatically\r\n consolidatedData[j].brokenTackles = pd[i].tackleBroken;\r\n consolidatedData[j].catchableTgts = pd[i].catchableTgts;\r\n consolidatedData[j].completionPct = pd[i].compPct;\r\n consolidatedData[j].completions = pd[i].completions;\r\n consolidatedData[j].deservedCatchPct = Tst2015(pd[i].season, pd[i].deservedCatchRateAllowed);\r\n consolidatedData[j].drops = pd[i].drops;\r\n consolidatedData[j].interceptions = pd[i].ints;\r\n consolidatedData[j].passYards = pd[i].yards;\r\n consolidatedData[j].passYardsPerTgt = pd[i].yardsPerTarget;\r\n consolidatedData[j].playeridpd = pd[i].playerId;\r\n consolidatedData[j].pointsSavedPassDef = pd[i].eps;\r\n consolidatedData[j].tackleForLoss = pd[i].tfl;\r\n consolidatedData[j].starts = pd[i].starts; // overriding value on defense endpoint which is incorrect\r\n consolidatedData[j].targets = pd[i].targets;\r\n consolidatedData[j].td = pd[i].td;\r\n consolidatedData[j].totCatchable = pd[i].totCatchable;\r\n }\r\n else{\r\n // populate corresponding passdefense fields\r\n havedefense = false;\r\n havepassdefense = true;\r\n assistedTackles = 0;\r\n batDowns = 0;\r\n// breakups = pd[i].totalBreakups; // 9/8/19 RA - will calculate programatically\r\n brokenTackles = pd[i].tackleBroken;\r\n // brokenTacklePct = pd[i].brokenTacklePct;\r\n catchableTgts = pd[i].catchableTgts;\r\n completionPct = pd[i].compPct;\r\n completions = pd[i].completions;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = pd[i].deservedCatchRateAllowed;\r\n drops = pd[i].drops;\r\n droppedInts = 0;\r\n forcedFumbles = 0; // pd[i].forcedFumbles;\r\n games = pd[i].g;\r\n interceptions = pd[i].ints;\r\n passYards = pd[i].yards;\r\n passYardsPerTgt = pd[i].yardsPerTarget;\r\n playeriddf = 0;\r\n playeridpd = pd[i].playerId;\r\n playeridpr = 0;\r\n playeridrd = 0;\r\n player = pd[i].player\r\n pointsSavedPassDef = pd[i].eps;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = 0;\r\n positionName = pd[i].positionName;\r\n season = pd[i].season;\r\n soloTackles = 0;\r\n starts = pd[i].starts;\r\n tackles = 0;\r\n tackleForLoss = pd[i].tfl;\r\n targets = pd[i].targets;\r\n td = pd[i].td;\r\n team = pd[i].team;\r\n totCatchable = pd[i].totCatchable;\r\n pntretAttempts =0;\r\n pntretYds =0;\r\n pntretYdsPerAtt =0;\r\n pntretTD =0;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n games,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n player,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n positionName,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n season,\r\n soloTackles,\r\n starts,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n team,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n }\r\n }\r\n // Consolidation step 3 - build new or updated existing consolidated object per passrush object\r\n j = -1;\r\n if (pr.length !== 0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].season === pr[i].season && consolidatedData[j].team === pr[i].team \r\n && pr[i].playerId === (consolidatedData[j].playeridpd || consolidatedData[j].playeriddf)) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n consolidatedData[j].havepassrush = true;\r\n// if (consolidatedData[j].forcedFumbles !== null) {\r\n// consolidatedData[j].forcedFumbles += NullTst(pr[i].ff);\r\n// } else {\r\n// consolidatedData[j].forcedFumbles = pr[i].ff;\r\n// }\r\n // consolidatedData[j].hurries = pr[i].hurriedPasser;\r\n // consolidatedData[j].knockdowns = pr[i].knockDownPasser;\r\n consolidatedData[j].passesBatted = pr[i].passesBatted;\r\n consolidatedData[j].passRushes = pr[i].passRushes;\r\n consolidatedData[j].passRushPct = pr[i].passSnaps ? (NullTst(pr[i].passRushes)/pr[i].passSnaps)*100 : 0;\r\n consolidatedData[j].passRushSacks = pr[i].combinedSacks;\r\n consolidatedData[j].passSnaps = pr[i].passSnaps;\r\n consolidatedData[j].playeridpr = pr[i].playerId;\r\n consolidatedData[j].pointsSavedPassRush = pr[i].eps;\r\n consolidatedData[j].pressurePct = pr[i].pressurePct*100;\r\n consolidatedData[j].pressures = pr[i].pressures;\r\n consolidatedData[j].sackPct = pr[i].sackPct*100;\r\n consolidatedData[j].sacks = pr[i].combinedSacks;\r\n consolidatedData[j].season = pr[i].season;\r\n // consolidatedData[j].tackles += pr[i].tackles; // according to Trish, passrush tackles duplicates tackles in other endpoints\r\n if (pr[i].passRushes) {\r\n consolidatedData[j].hitPct = (pr[i].hits/pr[i].passRushes)*100;\r\n consolidatedData[j].hurryPct = (pr[i].hurriedPasser/pr[i].passRushes)*100;\r\n consolidatedData[j].knockdownPct = (pr[i].knockDownPasser/pr[i].passRushes)*100;\r\n consolidatedData[j].passesBattedPct = (pr[i].passesBatted/pr[i].passRushes)*100;\r\n } else {\r\n consolidatedData[j].hitPct = 0;\r\n consolidatedData[j].hurryPct = 0;\r\n consolidatedData[j].knockdownPct = 0;\r\n consolidatedData[j].passesBattedPct = 0;\r\n }\r\n } else {\r\n // if no match, populate corresponding passrush fields and initialize the rest then add object to array\r\n havepassdefense = false;\r\n havepassrush = true;\r\n haverushdefense = false;\r\n havedefense = false;\r\n assistedTackles = 0;\r\n avgTackleDepth = 0;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = 0;\r\n brokenTacklePct = 0;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0; // pr[i].ff;\r\n games = pr[i].gameCount;\r\n hits = 0;\r\n hurries = 0;\r\n interceptions = 0;\r\n knockdowns = 0;\r\n passesBatted = pr[i].passesBatted;\r\n passRushes = pr[i].passRushes;\r\n passRushPct = pr[i].passSnaps ? (NullTst(pr[i].passRushes)/pr[i].passSnaps)*100 : 0;\r\n passRushSacks = pr[i].combinedSacks;\r\n passSnaps = pr[i].passSnaps;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = pr[i].playerId;\r\n playeridpr = pr[i].playerId;\r\n playeridrd = 0;\r\n player = pr[i].player;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = pr[i].eps;\r\n pointsSavedRushDef = 0;\r\n positionName = pr[i].positionName;\r\n pressurePct = pr[i].pressurePct*100;\r\n pressures = Tst2015(pr[i].season,pr[i].pressures);\r\n rushSnaps = 0;\r\n rushTackles = 0;\r\n rushYards = 0;\r\n sackPct = pr[i].sackPct*100;\r\n sacks = pr[i].combinedSacks;\r\n season = pr[i].season;\r\n soloTackles = 0;\r\n starts = 0;\r\n tackleForLoss = 0;\r\n // tackles = pr[i].tackles; // according to Trish, passrush tackles duplicates tackles in other endpoints\r\n tackles = 0;\r\n targets = 0;\r\n td = 0;\r\n team = pr[i].team;\r\n totCatchable = 0;\r\n if (passRushes) {\r\n hitPct = (pr[i].hits/pr[i].passRushes)*100;\r\n hurryPct = (pr[i].hurriedPasser/pr[i].passRushes)*100;\r\n knockdownPct = (pr[i].knockDownPasser/pr[i].passRushes)*100;\r\n passesBattedPct = (pr[i].passesBatted/pr[i].passRushes)*100;\r\n } else {\r\n hitPct = 0;\r\n hurryPct = 0;\r\n knockdownPct = 0;\r\n passesBattedPct = 0;\r\n }\r\n pntretAttempts =0;\r\n pntretYds =0;\r\n pntretYdsPerAtt =0;\r\n pntretTD =0;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n games,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n player,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n positionName,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n season,\r\n soloTackles,\r\n starts,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n team,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n }\r\n } \r\n // Consolidation step 4 - build new or updated existing consolidated object per rushdefense object\r\n if (rd.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].season === rd[i].season && consolidatedData[j].team === rd[i].team \r\n && rd[i].playerId === (consolidatedData[j].playeriddf || consolidatedData[j].playeridpd || consolidatedData[j].playeridpr)) {\r\n break;\r\n }\r\n }\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n // if (rd[i].games) {\r\n if (j > -1) {\r\n consolidatedData[j].haverushdefense = true;\r\n consolidatedData[j].avgTackleDepth = rd[i].avgTackleDepth;\r\n consolidatedData[j].brokenTackles += rd[i].tackleBroken;\r\n// if (consolidatedData[j].forcedFumbles !== null) {\r\n// consolidatedData[j].forcedFumbles += NullTst(rd[i].ff);\r\n// } else {\r\n// consolidatedData[j].forcedFumbles = rd[i].ff;\r\n// }\r\n consolidatedData[j].playeridrd = rd[i].playerId;\r\n consolidatedData[j].pointsSavedRushDef = rd[i].eps;\r\n consolidatedData[j].rushSnaps = rd[i].rushSnaps;\r\n consolidatedData[j].rushTackles = rd[i].combinedTackles;\r\n consolidatedData[j].rushYards = rd[i].totalYards;\r\n if (consolidatedData[j].starts == 0) {\r\n consolidatedData[j].starts = NullTst(rd[i].starts);\r\n }\r\n if (consolidatedData[j].tackleForLoss !== null) {\r\n consolidatedData[j].tackleForLoss += NullTst(rd[i].tfl); // remove *2 when backend fixed\r\n } else {\r\n consolidatedData[j].tackleForLoss = (rd[i].tfl); // remove *2 when backend fixed\r\n }\r\n // if no match, populate corresponding rushdefense fields and initialize the rest then add object to array\r\n } else {\r\n havepassdefense = false;\r\n havepassrush = false;\r\n haverushdefense = true;\r\n havedefense = false;\r\n assistedTackles = 0;\r\n avgTackleDepth = rd[i].avgTackleDepth;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = rd[i].tackleBroken;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0; // rd[i].ff;\r\n games = rd[i].games;\r\n hitPct = 0;\r\n hits = 0;\r\n hurries = 0;\r\n hurryPct = 0;\r\n interceptions = 0;\r\n knockdownPct = 0;\r\n knockdowns = 0;\r\n passesBatted = 0;\r\n passesBattedPct = 0;\r\n passRushes = 0;\r\n passRushPct = 0;\r\n passRushSacks = 0;\r\n passSnaps = 0;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = 0;\r\n playeridpr = 0;\r\n playeridrd = rd[i].playerId;\r\n player = rd[i].player;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = rd[i].eps;\r\n positionName = rd[i].positionName;\r\n pressurePct = 0;\r\n pressures = 0;\r\n rushSnaps = rd[i].rushSnaps;\r\n rushTackles = rd[i].combinedTackles;\r\n rushYards = rd[i].totalYards;\r\n sackPct = 0;\r\n sacks = 0;\r\n season = rd[i].season;\r\n soloTackles = 0;\r\n starts = NullTst(rd[i].starts);\r\n tackleForLoss = rd[i].tfl;\r\n tackles = rd[i].combinedTackles;\r\n targets = 0;\r\n td = 0;\r\n team = rd[i].team;\r\n catchableTgts = 0;\r\n pntretAttempts =0;\r\n pntretYds =0;\r\n pntretYdsPerAtt =0;\r\n pntretTD =0;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n games,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n player,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n positionName,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n season,\r\n soloTackles,\r\n starts,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n team,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n // }\r\n }\r\n }\r\n // Consolidation step 5 - build new or updated existing consolidated object per kick return object\r\n if (krt.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].season === krt[i].season && consolidatedData[j].team === krt[i].teamName \r\n && krt[i].playerId === (consolidatedData[j].playeriddf || consolidatedData[j].playeridpd || consolidatedData[j].playeridpr || consolidatedData[j].playeridrd)) {\r\n break;\r\n }\r\n }\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n if (j > -1) {\r\n consolidatedData[j].kickretAttempts = krt[i].attempts;\r\n consolidatedData[j].kickretYds = krt[i].yards;\r\n consolidatedData[j].kickretYdsPerAtt = krt[i].attempts ? krt[i].yards/krt[i].attempts : 0;\r\n consolidatedData[j].kickretTD = krt[i].tDs;\r\n // if no match, populate corresponding rushdefense fields and initialize the rest then add object to array\r\n } else {\r\n havepassdefense = false;\r\n havepassrush = false;\r\n haverushdefense = true;\r\n havedefense = false;\r\n assistedTackles = 0;\r\n avgTackleDepth = 0;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = 0;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0;\r\n games = krt[i].games;\r\n hitPct = 0;\r\n hits = 0;\r\n hurries = 0;\r\n hurryPct = 0;\r\n interceptions = 0;\r\n knockdownPct = 0;\r\n knockdowns = 0;\r\n passesBatted = 0;\r\n passesBattedPct = 0;\r\n passRushes = 0;\r\n passRushPct = 0;\r\n passRushSacks = 0;\r\n passSnaps = 0;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = 0;\r\n playeridpr = 0;\r\n playeridrd = krt[i].playerId;\r\n player = krt[i].player;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = 0;\r\n positionName = krt[i].positionName;\r\n pressurePct = 0;\r\n pressures = 0;\r\n rushSnaps = 0;\r\n rushTackles = 0;\r\n rushYards = 0;\r\n sackPct = 0;\r\n sacks = 0;\r\n season = krt[i].season;\r\n soloTackles = 0;\r\n starts = 0;\r\n tackleForLoss = 0;\r\n tackles = 0;\r\n targets = 0;\r\n td = 0;\r\n team = krt[i].team;\r\n catchableTgts = 0;\r\n pntretAttempts = 0;\r\n pntretYds = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = krt[i].attempts;\r\n kickretYds = krt[i].yards;\r\n kickretYdsPerAtt = krt[i].attempts ? krt[i].yards/krt[i].attempts : 0;\r\n kickretTD = krt[i].tDs;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n games,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n player,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n positionName,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n season,\r\n soloTackles,\r\n starts,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n team,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n // }\r\n }\r\n }\r\n // Consolidation step 6 - build new or updated existing consolidated object per punt return object\r\n if (prt.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].season === prt[i].season && consolidatedData[j].team === prt[i].teamName \r\n && prt[i].playerId === (consolidatedData[j].playeriddf || consolidatedData[j].playeridpd || consolidatedData[j].playeridpr || consolidatedData[j].playeridrd)) {\r\n break;\r\n }\r\n }\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n if (j > -1) {\r\n consolidatedData[j].pntretAttempts = prt[i].attempts;\r\n consolidatedData[j].pntretYds = prt[i].yards;\r\n consolidatedData[j].pntretYdsPerAtt = prt[i].attempts ? prt[i].yards/prt[i].attempts : 0;\r\n consolidatedData[j].pntretTD = prt[i].tDs;\r\n // if no match, populate corresponding rushdefense fields and initialize the rest then add object to array\r\n } else {\r\n havepassdefense = false;\r\n havepassrush = false;\r\n haverushdefense = true;\r\n havedefense = false;\r\n assistedTackles = 0;\r\n avgTackleDepth = 0;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = 0;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0;\r\n games = prt[i].games;\r\n hitPct = 0;\r\n hits = 0;\r\n hurries = 0;\r\n hurryPct = 0;\r\n interceptions = 0;\r\n knockdownPct = 0;\r\n knockdowns = 0;\r\n passesBatted = 0;\r\n passesBattedPct = 0;\r\n passRushes = 0;\r\n passRushPct = 0;\r\n passRushSacks = 0;\r\n passSnaps = 0;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = 0;\r\n playeridpr = 0;\r\n playeridrd = prt[i].playerId;\r\n player = prt[i].player;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = 0;\r\n positionName = prt[i].positionName;\r\n pressurePct = 0;\r\n pressures = 0;\r\n rushSnaps = 0;\r\n rushTackles = 0;\r\n rushYards = 0;\r\n sackPct = 0;\r\n sacks = 0;\r\n season = prt[i].season;\r\n soloTackles = 0;\r\n starts = 0;\r\n tackleForLoss = 0;\r\n tackles = 0;\r\n targets = 0;\r\n td = 0;\r\n team = prt[i].teamName;\r\n catchableTgts = 0;\r\n pntretAttempts = prt[i].attempts;\r\n pntretYds = prt[i].yards;\r\n pntretYdsPerAtt = prt[i].attempts ? prt[i].yards/prt[i].attempts : 0;\r\n pntretTD = prt[i].tDs;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n games,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n player,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n positionName,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n season,\r\n soloTackles,\r\n starts,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n team,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n // }\r\n }\r\n }\r\n // sort consolidated objects by season\r\n consolidatedData.sort((a, b) => (a.season > b.season) ? 1 : ((b.season > a.season) ? -1 : 0));\r\n //make final adjustments as needed\r\n if (consolidatedData.length !== 0) {\r\n for (i = 0; i < consolidatedData.length; i++) {\r\n if (consolidatedData[i].season === 2015) {\r\n //fields displayed in LB and DT summary that are partially or fully sourced from passrush are not valid in 2015 except sacks\r\n consolidatedData[i].passesBatted = null;\r\n consolidatedData[i].hurries = null\r\n consolidatedData[i].hits = null;\r\n consolidatedData[i].knockdowns = null;\r\n consolidatedData[i].pressures = null;\r\n// consolidatedData[i].sacks = null;\r\n }\r\n }\r\n }\r\n //console.log(\"Defense Data:\", consolidatedData);\r\n return(consolidatedData); // return the result array\r\n}\r\n\r\nexport default TableDefenseBuildData;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullDiv, DispFunc, Tst2015} from '../common/CommonFunctions';\r\nimport { advDefense } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.defensestats = this.props.defensestats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n {\r\n title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header textColumn\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"tackles\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n }\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"Snaps\",\r\n columns:[\r\n {\r\n title: \"Pass\", field: \"passSnaps\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Run\", field: \"rushSnaps\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Deserved Catch%\", field: \"deservedCatchPct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pass Breakups\",\r\n columns:[\r\n {\r\n title: \"Defensed\", field: \"defensed\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Deflected\", field: \"deflected\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Batted\", field: \"batDowns\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Total\", field: \"breakups\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Tackling (excluding special teams)\",\r\n columns:[\r\n {\r\n title: \"Total\", field: \"tackles\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Solo\", field: \"soloTackles\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Ast\", field: \"assistedTackles\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TFL\", field: \"tackleForLoss\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Avg Tackle Depth\", field: \"avgTackleDepth\", cssClass: \"break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n titleFormatter:\"textarea\",\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Broken + Missed\", field: \"brokenTackles\", titleFormatter:\"textarea\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Broken + Missed%\", field: \"brokenTacklePct\", titleFormatter:\"textarea\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${advDefense[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let passSnaps = 0;\r\n let rushSnaps = 0;\r\n let deservedCatchPct = 0;\r\n let defensed = 0;\r\n let deflected = 0;\r\n let batDowns = 0;\r\n let breakups = 0;\r\n let tackles = 0;\r\n let soloTackles = 0;\r\n let assistedTackles = 0;\r\n let tackleForLoss = 0;\r\n let avgTackleDepth = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklePct = 0;\r\n if (this.defensestats.length !== 0){\r\n for (var i = 0; i < this.defensestats.length; i++){\r\n if ((this.defensestats[i].havepassdefense || this.defensestats[i].haverushdefense) \r\n && (!this.isLeaderboards ||\r\n NullBypassSum(this.defensestats[i].tackles, 0) >= this.minFilter)) {\r\n// NullBypassSum(this.defensestats[i].passSnaps, this.defensestats[i].rushSnaps) >= this.minFilter)) {\r\n player = this.defensestats[i].player;\r\n playerId = this.defensestats[i].playeridpr || this.defensestats[i].playeridrd || this.defensestats[i].playeridpd || this.defensestats[i].playeriddf;\r\n positionName = this.defensestats[i].positionName;\r\n season = this.defensestats[i].season;\r\n team = this.defensestats[i].team;\r\n passSnaps = Tst2015(this.defensestats[i].season,this.defensestats[i].passSnaps);\r\n rushSnaps = this.defensestats[i].rushSnaps;\r\n deservedCatchPct = this.defensestats[i].season === 2015 ? null :\r\n this.defensestats[i].deservedCatchPct * 100;\r\n defensed = this.defensestats[i].defensed;\r\n deflected = this.defensestats[i].deflected;\r\n batDowns = this.defensestats[i].batDowns;\r\n breakups = this.defensestats[i].breakups;\r\n tackles = this.defensestats[i].tackles;\r\n soloTackles = this.defensestats[i].soloTackles;\r\n assistedTackles = this.defensestats[i].assistedTackles;\r\n tackleForLoss = this.defensestats[i].tackleForLoss;\r\n// avgTackleDepth = NullDiv(NullSum(this.defensestats[i].passYards, this.defensestats[i].rushYards), this.defensestats[i].tackles); // replaced with line below\r\n avgTackleDepth = NullDiv(this.defensestats[i].rushYards, this.defensestats[i].tackles); // 10-20-21 Ruben Agosto: removed passYards from calculation per Alex V.\r\n brokenTackles = this.defensestats[i].brokenTackles;\r\n brokenTacklePct = NullDiv(this.defensestats[i].brokenTackles,NullSum(this.defensestats[i].brokenTackles,this.defensestats[i].tackles))*100;\r\n \r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n passSnaps,\r\n rushSnaps,\r\n deservedCatchPct,\r\n defensed,\r\n deflected,\r\n batDowns,\r\n breakups,\r\n tackles,\r\n soloTackles,\r\n assistedTackles,\r\n tackleForLoss,\r\n avgTackleDepth,\r\n brokenTackles,\r\n brokenTacklePct\r\n }\r\n );\r\n }\r\n }\r\n this.data = data;\r\n // console.log(\"this.data after details:\", this.data);\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n// let playerId = '';\r\n// let player = '';\r\n// let positionName = '';\r\n let passSnaps = 0;\r\n let rushSnaps = 0;\r\n let rushYards = 0; // not displayed. only used in a calculation\r\n let passYards = 0; // not displayed. only used in a calculation\r\n let deservedCatchPct = 0;\r\n let defensed = 0;\r\n let deflected = 0;\r\n let batDowns = 0;\r\n let breakups = 0;\r\n // let rushTackles = 0; // not displayed. only used in a calculation\r\n let soloTackles = 0;\r\n let tackles = 0;\r\n let assistedTackles = 0;\r\n let tackleForLoss = 0;\r\n let avgTackleDepth = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklePct = 0;\r\n let catchableTgts = 0; // not displayed. only used in a calculation\r\n let completions = 0; // not displayed. only used in a calculation\r\n let drops = 0; // not displayed. only used in a calculation\r\n let totCatchable = 0; // not displayed. only used in a calculation\r\n if (this.defensestats.length !== 0){\r\n for (var i=0; i 2015) {\r\n catchableTgts = NullBypassSum(catchableTgts, this.defensestats[i].catchableTgts);\r\n completions = NullBypassSum(completions, this.defensestats[i].completions);\r\n drops = NullBypassSum(drops, this.defensestats[i].drops);\r\n totCatchable = NullBypassSum(totCatchable, this.defensestats[i].totCatchable);\r\n }\r\n }\r\n deservedCatchPct = NullDiv(NullSum(completions,drops),NullSum(catchableTgts,totCatchable))*100;\r\n// avgTackleDepth = NullDiv(NullSum(passYards, rushYards), tackles); // replaced calculation with line below\r\n avgTackleDepth = NullDiv(rushYards, tackles); // 10-20-21 Ruben Agosto: removed passYards from calculation per Alex V.\r\n brokenTacklePct = NullDiv(brokenTackles,NullSum(brokenTackles,tackles))*100;\r\n\r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n passSnaps,\r\n rushSnaps,\r\n deservedCatchPct,\r\n defensed,\r\n deflected,\r\n batDowns,\r\n breakups,\r\n tackles,\r\n soloTackles,\r\n assistedTackles,\r\n tackleForLoss,\r\n avgTackleDepth,\r\n brokenTackles,\r\n brokenTacklePct\r\n }\r\n );\r\n // console.log(\"this.data after summary:\", this.data);\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Advanced Defense
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBSummaryTabulator;","import React from 'react';\r\nimport {NullBypassSum, NullDiv, NullMin, DispFunc} from '../common/CommonFunctions';\r\nimport { passRush } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.defensestats = this.props.defensestats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards){\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\",\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams:{\r\n labelField: \"player\",\r\n urlPrefix:\"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n {\r\n title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header textColumn\",\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\",\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"pressurePct\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else{\r\n bioCols = [\r\n { \r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n { \r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn break\",\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n }\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n { \r\n title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"Pass Rushes\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"passRushes\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Rush%\", field: \"passRushPct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Pass Rush Totals\",\r\n columns:[\r\n { \r\n title: \"Sacks\", field: \"passRushSacks\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Hurries\", field: \"hurries\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Hits\", field: \"hits\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Knockdowns\", field: \"knockdowns\", cssClass: \"single-row-header\",\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pressures\", field: \"pressures\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Passes Batted\", field: \"passesBatted\", cssClass: \"break\",\r\n titleFormatter:\"textarea\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Pass Rush Percentages\",\r\n columns:[\r\n { \r\n title: \"Sack%\", field: \"sackPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Hurry%\", field: \"hurryPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Hit%\", field: \"hitPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Knockdown%\", field: \"knockdownPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pressure%\", field: \"pressurePct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Passes Batted%\", field: \"passesBattedPct\", titleFormatter:\"textarea\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${passRush[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ],\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let data = [];\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let season = 0;\r\n let team = '';\r\n let passRushes = 0;\r\n let passRushPct = 0;\r\n let passRushSacks = 0;\r\n let hurries = 0;\r\n let hits = 0;\r\n let knockdowns = 0;\r\n let pressures = 0;\r\n let passesBatted = 0;\r\n let sackPct = 0;\r\n let hurryPct = 0;\r\n let hitPct = 0;\r\n let knockdownPct = 0;\r\n let pressurePct = 0;\r\n let passesBattedPct = 0;\r\n if (this.defensestats.length !== 0){\r\n for (var i = 0; i < this.defensestats.length; i++) {\r\n if (this.defensestats[i].season !== 2015) {\r\n if (!this.isLeaderboards || this.defensestats[i].passRushes >= this.minFilter) {\r\n player = this.defensestats[i].player;\r\n playerId = this.defensestats[i].playeridpr || this.defensestats[i].playeridrd || this.defensestats[i].playeridpd || this.defensestats[i].playeriddf;\r\n positionName = this.defensestats[i].positionName;\r\n season = this.defensestats[i].season;\r\n team = this.defensestats[i].team;\r\n passRushes = this.defensestats[i].passRushes;\r\n passRushPct = this.defensestats[i].passRushPct;\r\n passRushSacks = this.defensestats[i].passRushSacks;\r\n hurries = this.defensestats[i].hurries;\r\n hits = this.defensestats[i].hits;\r\n knockdowns = this.defensestats[i].knockdowns;\r\n pressures = this.defensestats[i].pressures;\r\n passesBatted = this.defensestats[i].passesBatted;\r\n sackPct = NullMin(this.defensestats[i].sackPct, 100);\r\n hurryPct = NullMin(this.defensestats[i].hurryPct, 100);\r\n hitPct = NullMin(this.defensestats[i].hitPct, 100);\r\n knockdownPct = NullMin(this.defensestats[i].knockdownPct, 100);\r\n pressurePct = NullMin(this.defensestats[i].pressurePct, 100);\r\n passesBattedPct = NullMin(this.defensestats[i].passesBattedPct, 100);\r\n // zero values to nulls\r\n// passRushes = passRushes ? passRushes : null;\r\n// passRushPct = passRushPct ? passRushPct : null;\r\n// passRushSacks = passRushSacks ? passRushSacks : null;\r\n// hurries = hurries ? hurries : null;\r\n// hits = hits ? hits : null;\r\n// knockdowns = knockdowns ? knockdowns : null;\r\n// pressures = pressures ? pressures : null;\r\n// passesBatted = passesBatted ? passesBatted : null;\r\n// sackPct = sackPct ? sackPct : null;\r\n// hurryPct = hurryPct ? hurryPct : null;\r\n// hitPct = hitPct ? hitPct : null;\r\n// knockdownPct = knockdownPct ? knockdownPct : null;\r\n// pressurePct = pressurePct ? pressurePct : null;\r\n// passesBattedPct = passesBattedPct ? passesBattedPct : null;\r\n data.push(\r\n {\r\n player,\r\n playerId,\r\n positionName,\r\n season,\r\n team,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n hurries,\r\n hits,\r\n knockdowns,\r\n pressures,\r\n passesBatted,\r\n sackPct,\r\n hurryPct,\r\n hitPct,\r\n knockdownPct,\r\n pressurePct,\r\n passesBattedPct,\r\n }\r\n );\r\n }\r\n }\r\n };\r\n this.data = data;\r\n }\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let hits = 0;\r\n let hurries = 0;\r\n let knockdowns = 0;\r\n let passesBatted = 0;\r\n let passRushes = 0;\r\n let passSnaps = 0;\r\n let passRushSacks = 0;\r\n let pressures = 0;\r\n let sacks = 0;\r\n let hitPct = 0;\r\n let hurryPct = 0;\r\n let knockdownPct = 0;\r\n let passesBattedPct = 0;\r\n let passRushPct = 0;\r\n let pressurePct = 0;\r\n let sackPct = 0;\r\n if (this.defensestats.length !== 0){\r\n for (var i = 0; i < this.defensestats.length; i++) {\r\n if (this.defensestats[i].season > 2015) {\r\n hits = NullBypassSum(hits, this.defensestats[i].hits);\r\n hurries = NullBypassSum(hurries, this.defensestats[i].hurries);\r\n knockdowns = NullBypassSum(knockdowns, this.defensestats[i].knockdowns);\r\n passesBatted = NullBypassSum(passesBatted, this.defensestats[i].passesBatted);\r\n passRushes = NullBypassSum(passRushes, this.defensestats[i].passRushes);\r\n passRushSacks = NullBypassSum(passRushSacks, this.defensestats[i].passRushSacks);\r\n pressures = NullBypassSum(pressures, this.defensestats[i].pressures);\r\n sacks = NullBypassSum(sacks, this.defensestats[i].sacks);\r\n passSnaps = NullBypassSum(passSnaps, this.defensestats[i].passSnaps);\r\n }\r\n }\r\n if (passRushes) {\r\n hitPct = NullMin(NullDiv(hits,passRushes) * 100, 100);\r\n hurryPct = NullMin(NullDiv(hurries, passRushes) * 100, 100);\r\n knockdownPct = NullMin(NullDiv(knockdowns, passRushes) * 100, 100);\r\n passesBattedPct = NullMin(NullDiv(passesBatted, passRushes) * 100, 100);\r\n pressurePct = NullMin(NullDiv(pressures, passRushes) * 100, 100);\r\n sackPct = NullMin(NullDiv(sacks, passRushes) * 100, 100);\r\n }\r\n passRushPct = NullDiv(passRushes,passSnaps) * 100;\r\n this.data.push(\r\n {\r\n season,\r\n team,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n hurries,\r\n hits,\r\n knockdowns,\r\n pressures,\r\n passesBatted,\r\n sackPct,\r\n hurryPct,\r\n hitPct,\r\n knockdownPct,\r\n pressurePct,\r\n passesBattedPct,\r\n }\r\n );\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
\r\n \r\n
(this.el = el)} />\r\n
\r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
\r\n
Pass Rush
\r\n
(this.el = el)} />\r\n
\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableQBSummaryTabulator;","import React from 'react';\r\nimport { GetAge, DispTxt, FormatNumSuffixed } from '../common/CommonFunctions.js';\r\n\r\nconst PlayerBio = (parm) => {\r\n let data = parm.data;\r\n let i = data.length - 1;\r\n let byear = '--';\r\n let bmonth = '--';\r\n let bday = '--'\r\n let playername = '--'\r\n let position = '--'\r\n let jersey = '--';\r\n let team = '--';\r\n let height = '-- --';\r\n let weight = '--';\r\n let age = '--';\r\n let birthdate = '--';\r\n let draftRound = '--';\r\n let draftPick = '--';\r\n let draftYear = '--';\r\n let college = '--';\r\n let draftInfo = 'undrafted';\r\n if (i !== -1) {\r\n if (data[i].birthDate !== null) {\r\n byear = data[i].birthDate.substr(0,4);\r\n bmonth = data[i].birthDate.substr(5,2);\r\n bday = data[i].birthDate.substr(8,2);\r\n }\r\n playername = DispTxt(data[i].fullName);\r\n position = DispTxt(data[i].positionName);\r\n let cutOffDate = new Date();\r\n cutOffDate.setMonth(cutOffDate.getMonth() - 3);\r\n if (data[i].status && data[i].season === cutOffDate.getFullYear()) {\r\n team = DispTxt(data[i].team);\r\n jersey = '#'+DispTxt(data[i].jersey);\r\n } else {\r\n team = '';\r\n jersey = '';\r\n }\r\n if (data[i].height !== null) {\r\n height =\r\n parseInt(data[i].height/12).toString()+\"'\"+\r\n (data[i].height%12).toString()+'\"';\r\n } else {\r\n height = '--';\r\n }\r\n if (data[i].weight !== null) {\r\n weight = data[i].weight.toString();\r\n } else {\r\n weight = '---'\r\n }\r\n if (byear === '--') {\r\n age = '--';\r\n birthdate = '--/--/--';\r\n } else {\r\n age = GetAge(byear,bmonth,bday);\r\n birthdate = bmonth+\"/\"+bday+\"/\"+byear;\r\n }\r\n if (data[i].draftRound !== null) {\r\n draftRound = FormatNumSuffixed(data[i].draftRound);\r\n draftPick = FormatNumSuffixed(data[i].draftPick);\r\n draftYear = data[i].draftYear.toString();\r\n draftInfo = draftRound + \" round (\" + draftPick + \" pick) in \"+draftYear;\r\n }\r\n college = DispTxt(data[i].college);\r\n }\r\n return(\r\n \r\n
\r\n

{playername}  {position} {jersey} {team}

\r\n
{height}, {weight}   Age {age}   Born {birthdate}
\r\n
Drafted: {draftInfo}   College: {college}
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default PlayerBio;","import React, { useState, useEffect } from 'react';\r\n\r\nfunction DropDown(props) {\r\n const [showList, setshowList] = useState('none');\r\n const [searchedPlayer, setsearchedPlayer] = useState('');\r\n const [playerList, setplayerList] = useState(null);\r\n let targetPage = props.targetPage ? props.targetPage : 'players';\r\n\r\n useEffect(() => {\r\n let list = [];\r\n let cutOffDate = new Date();\r\n cutOffDate.setMonth(cutOffDate.getMonth() - 3); // new teams not set until May in 2020 due to Covid-19\r\n props.players.forEach(p => {\r\n if ((p.lastName + ', ' + p.firstName + ' (' + p.positionCategory + ', ' + p.teamName + ' #' + p.jersey + ')').toLowerCase().includes(searchedPlayer.toLowerCase())){\r\n list.push(\r\n
  • \r\n {p.lastName + ', ' + p.firstName + ' (' + p.positionCategory + ', ' + (p.season >= cutOffDate.getFullYear() ? p.teamName : 'not on team') + (p.season >= cutOffDate.getFullYear() ? ' #' + p.jersey : '') + ')'}\r\n
  • \r\n )\r\n }\r\n }\r\n )\r\n setplayerList(list);\r\n }, [searchedPlayer, props.players, targetPage]);\r\n\r\n return(\r\n \r\n
    setshowList('block')} onBlur=\r\n {\r\n event => \r\n {\r\n if(event.relatedTarget){\r\n let att = '';\r\n if(event.relatedTarget.attributes){\r\n att = event.relatedTarget.getAttribute('class');\r\n }\r\n else{\r\n att = event.relatedTarget.parentElement.getAttribute('class');\r\n }\r\n if(!att || !att.includes('autocomplete')){\r\n setshowList('none');\r\n }\r\n }\r\n else{\r\n setshowList('none');\r\n }\r\n //if(!event.relatedTarget){setshowList('none')};\r\n }\r\n }>\r\n setsearchedPlayer(event.target.value)}\r\n style={{ padding: 0 }} className=\"autocomplete\" />\r\n
      \r\n {playerList}\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default DropDown;","/* eslint-disable no-prototype-builtins */\nvar g =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n // eslint-disable-next-line no-undef\n (typeof global !== 'undefined' && global) ||\n {}\n\nvar support = {\n searchParams: 'URLSearchParams' in g,\n iterable: 'Symbol' in g && 'iterator' in Symbol,\n blob:\n 'FileReader' in g &&\n 'Blob' in g &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in g,\n arrayBuffer: 'ArrayBuffer' in g\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n if (header.length != 2) {\n throw new TypeError('Headers constructor: expected name/value pair to be length 2, found' + header.length)\n }\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body._noBody) return\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n var match = /charset=([A-Za-z0-9_-]+)/.exec(blob.type)\n var encoding = match ? match[1] : 'utf-8'\n reader.readAsText(blob, encoding)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n // eslint-disable-next-line no-self-assign\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._noBody = true;\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n } else if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else if (support.blob) {\n return this.blob().then(readBlobAsArrayBuffer)\n } else {\n throw new Error('could not read as ArrayBuffer')\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['CONNECT', 'DELETE', 'GET', 'HEAD', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'TRACE']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal || (function () {\n if ('AbortController' in g) {\n var ctrl = new AbortController();\n return ctrl.signal;\n }\n }());\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n try {\n headers.append(key, value)\n } catch (error) {\n console.warn('Response ' + error.message)\n }\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n if (this.status < 200 || this.status > 599) {\n throw new RangeError(\"Failed to construct 'Response': The status provided (0) is outside the range [200, 599].\")\n }\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 200, statusText: ''})\n response.ok = false\n response.status = 0\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = g.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n // This check if specifically for when a user fetches a file locally from the file system\n // Only if the status is out of a normal range\n if (request.url.indexOf('file://') === 0 && (xhr.status < 200 || xhr.status > 599)) {\n options.status = 200;\n } else {\n options.status = xhr.status;\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request timed out'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && g.location.href ? g.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers || (g.Headers && init.headers instanceof g.Headers))) {\n var names = [];\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n names.push(normalizeName(name))\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n request.headers.forEach(function(value, name) {\n if (names.indexOf(name) === -1) {\n xhr.setRequestHeader(name, value)\n }\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!g.fetch) {\n g.fetch = fetch\n g.Headers = Headers\n g.Request = Request\n g.Response = Response\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\n\r\n/**\r\n * This file exists to hold environment utilities that are requied to check and\r\n * validate the current operating environment. Unless otherwise required, please\r\n * only defined methods (functions) in this class so that users of these \r\n * functions/properties only need to include those that are used within their own modules.\r\n */\r\n\r\nexport const strUndefined = \"undefined\";\r\nexport const strObject = \"object\";\r\nexport const strPrototype = \"prototype\";\r\nexport const strFunction = \"function\";\r\n\r\nconst strWindow = \"window\";\r\nconst strDocument = \"document\";\r\nconst strNavigator = \"navigator\";\r\nconst strHistory = \"history\";\r\nconst strLocation = \"location\";\r\nconst strPerformance = \"performance\";\r\nconst strJSON = \"JSON\";\r\n\r\n// To address compile time errors declaring these here\r\ndeclare var globalThis: Window;\r\ndeclare var global: Window;\r\n\r\n/**\r\n * Returns the current global scope object, for a normal web page this will be the current\r\n * window, for a Web Worker this will be current worker global scope via \"self\". The internal \r\n * implementation returns the first available instance object in the following order\r\n * - globalThis (New standard)\r\n * - self (Will return the current window instance for supported browsers)\r\n * - window (fallback for older browser implementations)\r\n * - global (NodeJS standard)\r\n * - (When all else fails)\r\n * While the return type is a Window for the normal case, not all environments will support all\r\n * of the properties or functions.\r\n */\r\nexport function getGlobal(): Window {\r\n if (typeof globalThis !== strUndefined && globalThis) {\r\n return globalThis;\r\n }\r\n\r\n if (typeof self !== strUndefined && self) {\r\n return self;\r\n }\r\n\r\n if (typeof window !== strUndefined && window) {\r\n return window;\r\n }\r\n\r\n if (typeof global !== strUndefined && global) {\r\n return global;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Return the named global object if available, will return null if the object is not available.\r\n * @param name The globally named object\r\n */\r\nexport function getGlobalInst(name:string): T {\r\n let gbl = getGlobal();\r\n if (gbl && gbl[name]) {\r\n return gbl[name] as T;\r\n }\r\n\r\n // Test workaround, for environments where .window (when global == window) doesn't return the base window\r\n if (name === strWindow && hasWindow()) {\r\n // tslint:disable-next-line: no-angle-bracket-type-assertion\r\n return window as T;\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Checks if window object is available, this is required as we support the API running without a \r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a window \r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: window is not defined\" \r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasWindow(): boolean {\r\n return Boolean(typeof window === strObject && window);\r\n}\r\n\r\n/**\r\n * Returns the global window object if it is present otherwise null.\r\n * This helper is used to access the window object without causing an exception\r\n * \"Uncaught ReferenceError: window is not defined\"\r\n */\r\nexport function getWindow(): Window | null {\r\n if (hasWindow()) {\r\n return window;\r\n }\r\n\r\n // Return the global instance or null\r\n return getGlobalInst(strWindow);\r\n}\r\n\r\n/**\r\n * Checks if document object is available, this is required as we support the API running without a \r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a document \r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: document is not defined\" \r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasDocument(): boolean {\r\n return Boolean(typeof document === strObject && document);\r\n}\r\n\r\n/**\r\n * Returns the global document object if it is present otherwise null.\r\n * This helper is used to access the document object without causing an exception\r\n * \"Uncaught ReferenceError: document is not defined\"\r\n */\r\nexport function getDocument(): Document | null {\r\n if (hasDocument()) {\r\n return document;\r\n }\r\n\r\n return getGlobalInst(strDocument);\r\n}\r\n\r\n\r\n/**\r\n * Checks if navigator object is available, this is required as we support the API running without a \r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a navigator \r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: navigator is not defined\" \r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasNavigator(): boolean {\r\n return Boolean(typeof navigator === strObject && navigator);\r\n}\r\n\r\n/**\r\n * Returns the global navigator object if it is present otherwise null.\r\n * This helper is used to access the navigator object without causing an exception\r\n * \"Uncaught ReferenceError: navigator is not defined\"\r\n */\r\nexport function getNavigator(): Navigator | null {\r\n if (hasNavigator()) {\r\n return navigator;\r\n }\r\n\r\n return getGlobalInst(strNavigator);\r\n}\r\n\r\n/**\r\n * Checks if history object is available, this is required as we support the API running without a \r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a history \r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: history is not defined\" \r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasHistory(): boolean {\r\n return Boolean(typeof history === strObject && history);\r\n}\r\n\r\n/**\r\n * Returns the global history object if it is present otherwise null.\r\n * This helper is used to access the history object without causing an exception\r\n * \"Uncaught ReferenceError: history is not defined\"\r\n */\r\nexport function getHistory(): History | null {\r\n if (hasHistory()) {\r\n return history;\r\n }\r\n\r\n return getGlobalInst(strHistory);\r\n}\r\n\r\n/**\r\n * Returns the global location object if it is present otherwise null.\r\n * This helper is used to access the location object without causing an exception\r\n * \"Uncaught ReferenceError: location is not defined\"\r\n */\r\nexport function getLocation(): Location | null {\r\n if (typeof location === strObject && location) {\r\n return location;\r\n }\r\n\r\n return getGlobalInst(strLocation);\r\n}\r\n\r\n/**\r\n * Returns the performance object if it is present otherwise null.\r\n * This helper is used to access the performance object from the current\r\n * global instance which could be window or globalThis for a web worker\r\n */\r\nexport function getPerformance(): Performance | null {\r\n return getGlobalInst(strPerformance);\r\n}\r\n\r\n/**\r\n * Checks if JSON object is available, this is required as we support the API running without a \r\n * window /document (eg. Node server, electron webworkers) and if we attempt to assign a history \r\n * object to a local variable or pass as an argument an \"Uncaught ReferenceError: JSON is not defined\" \r\n * exception will be thrown.\r\n * Defined as a function to support lazy / late binding environments.\r\n */\r\nexport function hasJSON(): boolean {\r\n return Boolean((typeof JSON === strObject && JSON) || getGlobalInst(strJSON) !== null);\r\n}\r\n\r\n/**\r\n * Returns the global JSON object if it is present otherwise null.\r\n * This helper is used to access the JSON object without causing an exception\r\n * \"Uncaught ReferenceError: JSON is not defined\"\r\n */\r\nexport function getJSON(): JSON | null {\r\n if (hasJSON()) {\r\n return JSON || getGlobalInst(strJSON);\r\n }\r\n\r\n return null;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\nimport { getWindow, getDocument, strUndefined, strObject, strFunction, strPrototype } from './EnvUtils';\r\n\r\n// Added to help with minfication\r\nexport const Undefined = strUndefined;\r\nconst strOnPrefix = \"on\";\r\nconst strAttachEvent = \"attachEvent\";\r\nconst strAddEventHelper = \"addEventListener\";\r\nconst strDetachEvent = \"detachEvent\";\r\nconst strRemoveEventListener = \"removeEventListener\";\r\n\r\nfunction _isTypeof(value: any, theType: string): boolean {\r\n return typeof value === theType;\r\n};\r\n\r\nfunction _isUndefined(value: any): boolean {\r\n return _isTypeof(value, strUndefined) || value === undefined;\r\n};\r\n\r\nfunction _isNullOrUndefined(value: any): boolean {\r\n return (_isUndefined(value) || value === null);\r\n}\r\n\r\nfunction _hasOwnProperty(obj:any, prop:string): boolean {\r\n return obj && Object[strPrototype].hasOwnProperty.call(obj, prop);\r\n};\r\n\r\nfunction _isObject(value: any): boolean {\r\n return _isTypeof(value, strObject);\r\n};\r\n\r\nfunction _isFunction(value: any): boolean {\r\n return _isTypeof(value, strFunction);\r\n};\r\n\r\n/**\r\n * Binds the specified function to an event, so that the function gets called whenever the event fires on the object\r\n * @param obj Object to add the event too.\r\n * @param eventNameWithoutOn String that specifies any of the standard DHTML Events without \"on\" prefix\r\n * @param handlerRef Pointer that specifies the function to call when event fires\r\n * @param useCapture [Optional] Defaults to false\r\n * @returns True if the function was bound successfully to the event, otherwise false\r\n */\r\nfunction _attachEvent(obj:any, eventNameWithoutOn:string, handlerRef:any, useCapture:boolean = false) {\r\n let result = false;\r\n if (!_isNullOrUndefined(obj)) {\r\n try {\r\n if (!_isNullOrUndefined(obj[strAddEventHelper])) {\r\n // all browsers except IE before version 9\r\n obj[strAddEventHelper](eventNameWithoutOn, handlerRef, useCapture);\r\n result = true;\r\n } else if (!_isNullOrUndefined(obj[strAttachEvent])) {\r\n // IE before version 9 \r\n obj[strAttachEvent](strOnPrefix + eventNameWithoutOn, handlerRef);\r\n result = true;\r\n }\r\n } catch (e) {\r\n // Just Ignore any error so that we don't break any execution path\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Removes an event handler for the specified event\r\n * @param Object to remove the event from\r\n * @param eventNameWithoutOn {string} - The name of the event\r\n * @param handlerRef {any} - The callback function that needs to be executed for the given event\r\n * @param useCapture [Optional] Defaults to false\r\n */\r\nfunction _detachEvent(obj:any, eventNameWithoutOn:string, handlerRef:any, useCapture:boolean = false) {\r\n if (!_isNullOrUndefined(obj)) {\r\n try {\r\n if (!_isNullOrUndefined(obj[strRemoveEventListener])) {\r\n obj[strRemoveEventListener](eventNameWithoutOn, handlerRef, useCapture);\r\n } else if (!_isNullOrUndefined(obj[strDetachEvent])) {\r\n obj[strDetachEvent](strOnPrefix + eventNameWithoutOn, handlerRef);\r\n }\r\n } catch (e) {\r\n // Just Ignore any error so that we don't break any execution path\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Validates that the string name conforms to the JS IdentifierName specification and if not\r\n * normalizes the name so that it would. This method does not identify or change any keywords\r\n * meaning that if you pass in a known keyword the same value will be returned.\r\n * This is a simplified version\r\n * @param name The name to validate\r\n */\r\nexport function normalizeJsName(name:string):string {\r\n let value = name;\r\n let match = /([^\\w\\d_$])/g;\r\n if (match.test(name)) {\r\n value = name.replace(match, \"_\");\r\n } \r\n\r\n return value;\r\n}\r\n\r\nexport class CoreUtils {\r\n public static _canUseCookies: boolean;\r\n\r\n public static isTypeof:(value: any, theType: string) => boolean = _isTypeof;\r\n \r\n public static isUndefined:(value: any) => boolean = _isUndefined;\r\n \r\n public static isNullOrUndefined:(value: any) => boolean = _isNullOrUndefined;\r\n \r\n public static hasOwnProperty:(obj:any, prop:string) => boolean = _hasOwnProperty;\r\n \r\n /**\r\n * Checks if the passed of value is a function.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a boolean, false otherwise.\r\n */\r\n public static isFunction:(value: any) => boolean = _isFunction;\r\n\r\n /**\r\n * Checks if the passed of value is a function.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a boolean, false otherwise.\r\n */\r\n public static isObject:(value: any) => boolean = _isObject;\r\n\r\n /**\r\n * Check if an object is of type Date\r\n */\r\n public static isDate(obj: any): boolean {\r\n return Object[strPrototype].toString.call(obj) === \"[object Date]\";\r\n }\r\n\r\n /**\r\n * Checks if the type of value is a string.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a string, false otherwise.\r\n */\r\n public static isString(value: any): boolean {\r\n return _isTypeof(value, \"string\");\r\n }\r\n\r\n /**\r\n * Checks if the type of value is a number.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a number, false otherwise.\r\n */\r\n public static isNumber(value: any): boolean {\r\n return _isTypeof(value, \"number\");\r\n }\r\n\r\n /**\r\n * Checks if the type of value is a boolean.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a boolean, false otherwise.\r\n */\r\n public static isBoolean(value: any): boolean {\r\n return _isTypeof(value, \"boolean\");\r\n }\r\n\r\n /**\r\n * Creates a new GUID.\r\n * @return {string} A GUID.\r\n */\r\n\r\n public static disableCookies() {\r\n CoreUtils._canUseCookies = false;\r\n }\r\n\r\n public static newGuid():  string  {\r\n return  'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(GuidRegex,  (c) => {\r\n const  r  =  (Math.random()  *  16  |  0),  v  =  (c  ===  'x'  ?  r  :  r  &  0x3  |  0x8);\r\n return  v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Convert a date to I.S.O. format in IE8\r\n */\r\n public static toISOString(date: Date) {\r\n if (CoreUtils.isDate(date)) {\r\n const pad = (num: number) => {\r\n let r = String(num);\r\n if (r.length === 1) {\r\n r = \"0\" + r;\r\n }\r\n\r\n return r;\r\n }\r\n\r\n return date.getUTCFullYear()\r\n + \"-\" + pad(date.getUTCMonth() + 1)\r\n + \"-\" + pad(date.getUTCDate())\r\n + \"T\" + pad(date.getUTCHours())\r\n + \":\" + pad(date.getUTCMinutes())\r\n + \":\" + pad(date.getUTCSeconds())\r\n + \".\" + String((date.getUTCMilliseconds() / 1000).toFixed(3)).slice(2, 5)\r\n + \"Z\";\r\n }\r\n }\r\n\r\n /**\r\n * Performs the specified action for each element in an array. This helper exists to avoid adding a polyfil for older browsers\r\n * that do not define Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page checks for presence/absence of the prototype\r\n * implementation. Note: For consistency this will not use the Array.prototype.xxxx implementation if it exists as this would\r\n * cause a testing requirement to test with and without the implementations\r\n * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.\r\n * @param thisArg [Optional] An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\r\n */\r\n public static arrForEach(arr: T[], callbackfn: (value: T, index?: number, array?: T[]) => void, thisArg?: any):void {\r\n let len = arr.length;\r\n for (let idx = 0; idx < len; ++idx) {\r\n if (idx in arr) {\r\n callbackfn.call(thisArg || arr, arr[idx], idx, arr);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the index of the first occurrence of a value in an array. This helper exists to avoid adding a polyfil for older browsers\r\n * that do not define Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page checks for presence/absence of the prototype\r\n * implementation. Note: For consistency this will not use the Array.prototype.xxxx implementation if it exists as this would\r\n * cause a testing requirement to test with and without the implementations\r\n * @param searchElement The value to locate in the array.\r\n * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the search starts at index 0.\r\n */\r\n public static arrIndexOf(arr: T[], searchElement: T, fromIndex?: number): number {\r\n let len = arr.length;\r\n let from = fromIndex || 0;\r\n for (let lp = Math.max(from >= 0 ? from : len - Math.abs(from), 0); lp < len; lp++) {\r\n if (lp in arr && arr[lp] === searchElement) {\r\n return lp;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n /**\r\n * Calls a defined callback function on each element of an array, and returns an array that contains the results. This helper exists \r\n * to avoid adding a polyfil for older browsers that do not define Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page \r\n * checks for presence/absence of the prototype implementation. Note: For consistency this will not use the Array.prototype.xxxx \r\n * implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param callbackfn A function that accepts up to three arguments. The map method calls the callbackfn function one time for each element in the array.\r\n * @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.\r\n */\r\n public static arrMap(arr: T[], callbackfn: (value: T, index?: number, array?: T[]) => R, thisArg?: any): R[] {\r\n let len = arr.length;\r\n let _this = thisArg || arr;\r\n let results = new Array(len);\r\n \r\n for (let lp = 0; lp < len; lp++) {\r\n if (lp in arr) {\r\n results[lp] = callbackfn.call(_this, arr[lp], arr);\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is\r\n * provided as an argument in the next call to the callback function. This helper exists to avoid adding a polyfil for older browsers that do not define\r\n * Array.prototype.xxxx (eg. ES3 only, IE8) just in case any page checks for presence/absence of the prototype implementation. Note: For consistency \r\n * this will not use the Array.prototype.xxxx implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.\r\n * @param initialValue If initialValue is specified, it is used as the initial value to start the accumulation. The first call to the callbackfn function provides this value as an argument instead of an array value.\r\n */\r\n public static arrReduce(arr: T[], callbackfn: (previousValue: T|R, currentValue?: T, currentIndex?: number, array?: T[]) => R, initialValue?: R): R {\r\n let len = arr.length;\r\n let lp = 0;\r\n let value;\r\n\r\n // Specifically checking the number of passed arguments as the value could be anything\r\n if (arguments.length >= 3) {\r\n value = arguments[2];\r\n } else {\r\n while (lp < len && !(lp in arr)) {\r\n lp++;\r\n }\r\n\r\n value = arr[lp++];\r\n }\r\n\r\n while (lp < len) {\r\n if (lp in arr) {\r\n value = callbackfn(value, arr[lp], lp, arr);\r\n }\r\n lp++;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Creates an object that has the specified prototype, and that optionally contains specified properties. This helper exists to avoid adding a polyfil\r\n * for older browsers that do not define Object.create eg. ES3 only, IE8 just in case any page checks for presence/absence of the prototype implementation.\r\n * Note: For consistency this will not use the Object.create implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param obj Object to use as a prototype. May be null\r\n */\r\n public static objCreate(obj:object):any {\r\n if (obj == null) {\r\n return {};\r\n }\r\n\r\n if (!_isObject(obj) && !_isFunction(obj)) {\r\n throw new TypeError('Object prototype may only be an Object: ' + obj)\r\n }\r\n\r\n function tmpFunc() {};\r\n tmpFunc[strPrototype] = obj;\r\n\r\n return new (tmpFunc as any)();\r\n }\r\n\r\n /**\r\n * Returns the names of the enumerable string properties and methods of an object. This helper exists to avoid adding a polyfil for older browsers \r\n * that do not define Object.keys eg. ES3 only, IE8 just in case any page checks for presence/absence of the prototype implementation.\r\n * Note: For consistency this will not use the Object.keys implementation if it exists as this would cause a testing requirement to test with and without the implementations\r\n * @param obj Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.\r\n */\r\n public static objKeys(obj: {}): string[] {\r\n var hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString');\r\n\r\n if (!_isFunction(obj) && (!_isObject(obj) || obj === null)) {\r\n throw new TypeError('objKeys called on non-object');\r\n }\r\n\r\n let result:string[] = [];\r\n \r\n for (let prop in obj) {\r\n if (_hasOwnProperty(obj, prop)) {\r\n result.push(prop);\r\n }\r\n }\r\n\r\n if (hasDontEnumBug) {\r\n let dontEnums = [\r\n 'toString',\r\n 'toLocaleString',\r\n 'valueOf',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'constructor'\r\n ];\r\n let dontEnumsLength = dontEnums.length;\r\n \r\n for (let lp = 0; lp < dontEnumsLength; lp++) {\r\n if (_hasOwnProperty(obj, dontEnums[lp])) {\r\n result.push(dontEnums[lp]);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Try to define get/set object property accessors for the target object/prototype, this will provide compatibility with\r\n * existing API definition when run within an ES5+ container that supports accessors but still enable the code to be loaded\r\n * and executed in an ES3 container, providing basic IE8 compatibility.\r\n * @param target The object on which to define the property.\r\n * @param prop The name of the property to be defined or modified.\r\n * @param getProp The getter function to wire against the getter.\r\n * @param setProp The setter function to wire against the setter.\r\n * @returns True if it was able to create the accessors otherwise false\r\n */\r\n public static objDefineAccessors(target:any, prop:string, getProp?:() => T, setProp?: (v:T) => void) : boolean {\r\n let defineProp = Object[\"defineProperty\"];\r\n if (defineProp) {\r\n try {\r\n let descriptor:PropertyDescriptor = {\r\n enumerable: true,\r\n configurable: true\r\n }\r\n\r\n if (getProp) {\r\n descriptor.get = getProp;\r\n }\r\n if (setProp) {\r\n descriptor.set = setProp;\r\n }\r\n\r\n defineProp(target, prop, descriptor);\r\n return true;\r\n } catch (e) {\r\n // IE8 Defines a defineProperty on Object but it's only supported for DOM elements so it will throw\r\n // We will just ignore this here.\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Trys to add an event handler for the specified event to the window, body and document\r\n * @param eventName {string} - The name of the event\r\n * @param callback {any} - The callback function that needs to be executed for the given event\r\n * @return {boolean} - true if the handler was successfully added\r\n */\r\n public static addEventHandler(eventName: string, callback: any): boolean {\r\n let result = false;\r\n let w = getWindow();\r\n if (w) {\r\n result = _attachEvent(w, eventName, callback);\r\n result = _attachEvent(w[\"body\"], eventName, callback) || result;\r\n }\r\n\r\n let doc = getDocument();\r\n if (doc) {\r\n result = EventHelper.Attach(doc, eventName, callback) || result;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nconst GuidRegex = /[xy]/g;\r\n\r\nexport class EventHelper {\r\n /**\r\n * Binds the specified function to an event, so that the function gets called whenever the event fires on the object\r\n * @param obj Object to add the event too.\r\n * @param eventNameWithoutOn String that specifies any of the standard DHTML Events without \"on\" prefix\r\n * @param handlerRef Pointer that specifies the function to call when event fires\r\n * @returns True if the function was bound successfully to the event, otherwise false\r\n */\r\n public static Attach:(obj:any, eventNameWithoutOn:string, handlerRef:any) => boolean = _attachEvent;\r\n\r\n /**\r\n * Binds the specified function to an event, so that the function gets called whenever the event fires on the object\r\n * @deprecated Use {@link EventHelper#Attach} as we are already in a class call EventHelper the extra \"Event\" just causes a larger result\r\n * @param obj Object to add the event too.\r\n * @param eventNameWithoutOn String that specifies any of the standard DHTML Events without \"on\" prefix\r\n * @param handlerRef Pointer that specifies the function to call when event fires\r\n * @returns True if the function was bound successfully to the event, otherwise false\r\n */\r\n public static AttachEvent:(obj:any, eventNameWithoutOn:string, handlerRef:any) => boolean = _attachEvent;\r\n\r\n /**\r\n * Removes an event handler for the specified event\r\n * @param eventName {string} - The name of the event\r\n * @param callback {any} - The callback function that needs to be executed for the given event\r\n * @return {boolean} - true if the handler was successfully added\r\n */\r\n public static Detach:(obj:any, eventNameWithoutOn:string, handlerRef:any) => void = _detachEvent;\r\n\r\n /**\r\n * Removes an event handler for the specified event\r\n * @deprecated Use {@link EventHelper#Detach} as we are already in a class call EventHelper the extra \"Event\" just causes a larger result\r\n * @param eventName {string} - The name of the event\r\n * @param callback {any} - The callback function that needs to be executed for the given event\r\n * @return {boolean} - true if the handler was successfully added\r\n */\r\n public static DetachEvent:(obj:any, eventNameWithoutOn:string, handlerRef:any) => void = _detachEvent;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nexport enum LoggingSeverity {\r\n /**\r\n * Error will be sent as internal telemetry\r\n */\r\n CRITICAL = 1,\r\n\r\n /**\r\n * Error will NOT be sent as internal telemetry, and will only be shown in browser console\r\n */\r\n WARNING = 2,\r\n}\r\n\r\n/**\r\n * Internal message ID. Please create a new one for every conceptually different message. Please keep alphabetically ordered\r\n */\r\nexport const _InternalMessageId = {\r\n // Non user actionable\r\n BrowserDoesNotSupportLocalStorage: 0,\r\n BrowserCannotReadLocalStorage: 1,\r\n BrowserCannotReadSessionStorage: 2,\r\n BrowserCannotWriteLocalStorage: 3,\r\n BrowserCannotWriteSessionStorage: 4,\r\n BrowserFailedRemovalFromLocalStorage: 5,\r\n BrowserFailedRemovalFromSessionStorage: 6,\r\n CannotSendEmptyTelemetry: 7,\r\n ClientPerformanceMathError: 8,\r\n ErrorParsingAISessionCookie: 9,\r\n ErrorPVCalc: 10,\r\n ExceptionWhileLoggingError: 11,\r\n FailedAddingTelemetryToBuffer: 12,\r\n FailedMonitorAjaxAbort: 13,\r\n FailedMonitorAjaxDur: 14,\r\n FailedMonitorAjaxOpen: 15,\r\n FailedMonitorAjaxRSC: 16,\r\n FailedMonitorAjaxSend: 17,\r\n FailedMonitorAjaxGetCorrelationHeader: 18,\r\n FailedToAddHandlerForOnBeforeUnload: 19,\r\n FailedToSendQueuedTelemetry: 20,\r\n FailedToReportDataLoss: 21,\r\n FlushFailed: 22,\r\n MessageLimitPerPVExceeded: 23,\r\n MissingRequiredFieldSpecification: 24,\r\n NavigationTimingNotSupported: 25,\r\n OnError: 26,\r\n SessionRenewalDateIsZero: 27,\r\n SenderNotInitialized: 28,\r\n StartTrackEventFailed: 29,\r\n StopTrackEventFailed: 30,\r\n StartTrackFailed: 31,\r\n StopTrackFailed: 32,\r\n TelemetrySampledAndNotSent: 33,\r\n TrackEventFailed: 34,\r\n TrackExceptionFailed: 35,\r\n TrackMetricFailed: 36,\r\n TrackPVFailed: 37,\r\n TrackPVFailedCalc: 38,\r\n TrackTraceFailed: 39,\r\n TransmissionFailed: 40,\r\n FailedToSetStorageBuffer: 41,\r\n FailedToRestoreStorageBuffer: 42,\r\n InvalidBackendResponse: 43,\r\n FailedToFixDepricatedValues: 44,\r\n InvalidDurationValue: 45,\r\n TelemetryEnvelopeInvalid: 46,\r\n CreateEnvelopeError: 47,\r\n\r\n // User actionable\r\n CannotSerializeObject: 48,\r\n CannotSerializeObjectNonSerializable: 49,\r\n CircularReferenceDetected: 50,\r\n ClearAuthContextFailed: 51,\r\n ExceptionTruncated: 52,\r\n IllegalCharsInName: 53,\r\n ItemNotInArray: 54,\r\n MaxAjaxPerPVExceeded: 55,\r\n MessageTruncated: 56,\r\n NameTooLong: 57,\r\n SampleRateOutOfRange: 58,\r\n SetAuthContextFailed: 59,\r\n SetAuthContextFailedAccountName: 60,\r\n StringValueTooLong: 61,\r\n StartCalledMoreThanOnce: 62,\r\n StopCalledWithoutStart: 63,\r\n TelemetryInitializerFailed: 64,\r\n TrackArgumentsNotSpecified: 65,\r\n UrlTooLong: 66,\r\n SessionStorageBufferFull: 67,\r\n CannotAccessCookie: 68,\r\n IdTooLong: 69,\r\n InvalidEvent: 70,\r\n FailedMonitorAjaxSetRequestHeader: 71,\r\n SendBrowserInfoOnUserInit: 72,\r\n PluginException: 73\r\n};\r\nexport type _InternalMessageId = number | typeof _InternalMessageId;\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\"\r\nimport { IConfiguration } from \"../JavaScriptSDK.Interfaces/IConfiguration\"\r\nimport { _InternalMessageId, LoggingSeverity } from \"../JavaScriptSDK.Enums/LoggingEnums\";\r\nimport { IDiagnosticLogger } from \"../JavaScriptSDK.Interfaces/IDiagnosticLogger\";\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { hasJSON, getJSON } from \"./EnvUtils\";\r\nimport { AppInsightsCore } from \"./AppInsightsCore\";\r\n\r\nexport class _InternalLogMessage{\r\n public static dataType: string = \"MessageData\";\r\n\r\n /**\r\n * For user non actionable traces use AI Internal prefix.\r\n */\r\n private static AiNonUserActionablePrefix = \"AI (Internal): \";\r\n\r\n /**\r\n * Prefix of the traces in portal.\r\n */\r\n private static AiUserActionablePrefix = \"AI: \";\r\n\r\n private static sanitizeDiagnosticText(text: string) {\r\n if (text) {\r\n return \"\\\"\" + text.replace(/\\\"/g, \"\") + \"\\\"\";\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n public message: string;\r\n public messageId: _InternalMessageId;\r\n\r\n constructor(msgId: _InternalMessageId, msg: string, isUserAct = false, properties?: Object) {\r\n\r\n this.messageId = msgId;\r\n this.message =\r\n (isUserAct ? _InternalLogMessage.AiUserActionablePrefix : _InternalLogMessage.AiNonUserActionablePrefix) +\r\n msgId;\r\n\r\n let strProps:string = \"\";\r\n if (hasJSON()) {\r\n strProps = getJSON().stringify(properties);\r\n }\r\n const diagnosticText =\r\n (msg ? \" message:\" + _InternalLogMessage.sanitizeDiagnosticText(msg) : \"\") +\r\n (properties ? \" props:\" + _InternalLogMessage.sanitizeDiagnosticText(strProps) : \"\");\r\n\r\n this.message += diagnosticText;\r\n }\r\n}\r\n\r\nexport class DiagnosticLogger implements IDiagnosticLogger {\r\n\r\n /**\r\n * The internal logging queue\r\n */\r\n public queue: _InternalLogMessage[] = [];\r\n\r\n /**\r\n * Session storage key for the prefix for the key indicating message type already logged\r\n */\r\n private AIInternalMessagePrefix: string = \"AITR_\";\r\n\r\n /**\r\n * Count of internal messages sent\r\n */\r\n private _messageCount = 0;\r\n\r\n /**\r\n * Holds information about what message types were already logged to console or sent to server.\r\n */\r\n private _messageLogged: { [msg: number]: boolean } = {};\r\n\r\n constructor(config?: IConfiguration) {\r\n if (CoreUtils.isNullOrUndefined(config)) {\r\n // TODO: Use default config\r\n // config = AppInsightsCore.defaultConfig;\r\n\r\n // For now, use defaults specified in DiagnosticLogger members;\r\n return;\r\n }\r\n if (!CoreUtils.isNullOrUndefined(config.loggingLevelConsole)) {\r\n this.consoleLoggingLevel = () => config.loggingLevelConsole;\r\n }\r\n if (!CoreUtils.isNullOrUndefined(config.loggingLevelTelemetry)) {\r\n this.telemetryLoggingLevel = () => config.loggingLevelTelemetry;\r\n }\r\n if (!CoreUtils.isNullOrUndefined(config.maxMessageLimit)) {\r\n this.maxInternalMessageLimit = () => config.maxMessageLimit\r\n }\r\n if (!CoreUtils.isNullOrUndefined(config.enableDebugExceptions)) {\r\n this.enableDebugExceptions = () => config.enableDebugExceptions;\r\n }\r\n }\r\n\r\n /**\r\n * When this is true the SDK will throw exceptions to aid in debugging.\r\n */\r\n public enableDebugExceptions = () => false;\r\n\r\n /**\r\n * 0: OFF (default)\r\n * 1: CRITICAL\r\n * 2: >= WARNING\r\n */\r\n public consoleLoggingLevel = () => 0;\r\n\r\n /**\r\n * 0: OFF\r\n * 1: CRITICAL (default)\r\n * 2: >= WARNING\r\n */\r\n public telemetryLoggingLevel = () => 1;\r\n\r\n /**\r\n * The maximum number of internal messages allowed to be sent per page view\r\n */\r\n public maxInternalMessageLimit = () => 25;\r\n\r\n /**\r\n * This method will throw exceptions in debug mode or attempt to log the error as a console warning.\r\n * @param severity {LoggingSeverity} - The severity of the log message\r\n * @param message {_InternalLogMessage} - The log message.\r\n */\r\n public throwInternal(severity: LoggingSeverity, msgId: _InternalMessageId, msg: string, properties?: Object, isUserAct = false) {\r\n const message = new _InternalLogMessage(msgId, msg, isUserAct, properties);\r\n let _this = this;\r\n\r\n if (_this.enableDebugExceptions()) {\r\n throw message;\r\n } else {\r\n if (!CoreUtils.isUndefined(message) && !!message) {\r\n if (!CoreUtils.isUndefined(message.message)) {\r\n if (isUserAct) {\r\n // check if this message type was already logged to console for this page view and if so, don't log it again\r\n const messageKey: number = +message.messageId;\r\n\r\n if (!_this._messageLogged[messageKey] && _this.consoleLoggingLevel() >= LoggingSeverity.WARNING) {\r\n _this.warnToConsole(message.message);\r\n _this._messageLogged[messageKey] = true;\r\n }\r\n } else {\r\n // don't log internal AI traces in the console, unless the verbose logging is enabled\r\n if (_this.consoleLoggingLevel() >= LoggingSeverity.WARNING) {\r\n _this.warnToConsole(message.message);\r\n }\r\n }\r\n\r\n _this.logInternalMessage(severity, message);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * This will write a warning to the console if possible\r\n * @param message {string} - The warning message\r\n */\r\n public warnToConsole(message: string) {\r\n if (!CoreUtils.isUndefined(console) && !!console) {\r\n if (CoreUtils.isFunction(console.warn)) {\r\n console.warn(message);\r\n } else if (CoreUtils.isFunction(console.log)) {\r\n console.log(message);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Resets the internal message count\r\n */\r\n public resetInternalMessageCount(): void {\r\n this._messageCount = 0;\r\n this._messageLogged = {};\r\n }\r\n\r\n /**\r\n * Logs a message to the internal queue.\r\n * @param severity {LoggingSeverity} - The severity of the log message\r\n * @param message {_InternalLogMessage} - The message to log.\r\n */\r\n public logInternalMessage(severity: LoggingSeverity, message: _InternalLogMessage): void {\r\n let _this = this;\r\n if (_this._areInternalMessagesThrottled()) {\r\n return;\r\n }\r\n\r\n // check if this message type was already logged for this session and if so, don't log it again\r\n let logMessage = true;\r\n const messageKey = _this.AIInternalMessagePrefix + message.messageId;\r\n\r\n // if the session storage is not available, limit to only one message type per page view\r\n if (_this._messageLogged[messageKey]) {\r\n logMessage = false;\r\n } else {\r\n _this._messageLogged[messageKey] = true;\r\n }\r\n\r\n if (logMessage) {\r\n // Push the event in the internal queue\r\n if (severity <= _this.telemetryLoggingLevel()) {\r\n _this.queue.push(message);\r\n _this._messageCount++;\r\n }\r\n\r\n // When throttle limit reached, send a special event\r\n if (_this._messageCount === _this.maxInternalMessageLimit()) {\r\n const throttleLimitMessage = \"Internal events throttle limit per PageView reached for this app.\";\r\n const throttleMessage = new _InternalLogMessage(_InternalMessageId.MessageLimitPerPVExceeded, throttleLimitMessage, false);\r\n\r\n _this.queue.push(throttleMessage);\r\n _this.warnToConsole(throttleLimitMessage);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Indicates whether the internal events are throttled\r\n */\r\n private _areInternalMessagesThrottled(): boolean {\r\n return this._messageCount >= this.maxInternalMessageLimit();\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\n\r\nimport { ITelemetryItem } from '../JavaScriptSDK.Interfaces/ITelemetryItem';\r\nimport { IProcessTelemetryContext } from \"../JavaScriptSDK.Interfaces/IProcessTelemetryContext\";\r\nimport { ITelemetryPluginChain } from \"../JavaScriptSDK.Interfaces/ITelemetryPluginChain\";\r\nimport { IPlugin, ITelemetryPlugin } from '../JavaScriptSDK.Interfaces/ITelemetryPlugin';\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { _InternalLogMessage } from \"./DiagnosticLogger\";\r\nimport { LoggingSeverity, _InternalMessageId } from '../JavaScriptSDK.Enums/LoggingEnums';\r\n\r\nlet _isFunction = CoreUtils.isFunction;\r\n\r\nexport class TelemetryPluginChain implements ITelemetryPluginChain {\r\n\r\n /**\r\n * Returns the underlying plugin that is being proxied for the processTelemetry call\r\n */\r\n getPlugin: () => ITelemetryPlugin;\r\n\r\n /**\r\n * Returns the next plugin\r\n */\r\n getNext: () => ITelemetryPluginChain;\r\n\r\n /**\r\n * Sets the next proxy to be executed as the next plugin\r\n * (Should only be used during initialization, which is why it's not defined on the interface)\r\n */\r\n setNext: (nextPlugin:ITelemetryPluginChain) => void;\r\n\r\n /**\r\n * Call back for telemetry processing before it it is sent\r\n * @param env - This is the current event being reported\r\n * @param itemCtx - This is the context for the current request, ITelemetryPlugin instances \r\n * can optionally use this to access the current core instance or define / pass additional information\r\n * to later plugins (vs appending items to the telemetry item)\r\n */\r\n processTelemetry: (env: ITelemetryItem, itemCtx: IProcessTelemetryContext) => void;\r\n\r\n /**\r\n * Internal flag used to try and identify root cause failures\r\n */\r\n private _hasRun: boolean;\r\n\r\n constructor(plugin:ITelemetryPlugin, defItemCtx:IProcessTelemetryContext) {\r\n let _self = this;\r\n let _nextProxy:ITelemetryPluginChain = null;\r\n let _hasProcessTelemetry = _isFunction(plugin.processTelemetry);\r\n let _hasSetNext = _isFunction(plugin.setNextPlugin);\r\n\r\n _self._hasRun = false;\r\n\r\n _self.getPlugin = () => {\r\n return plugin;\r\n };\r\n\r\n _self.getNext = () => {\r\n return _nextProxy;\r\n };\r\n\r\n _self.setNext = (nextPlugin:ITelemetryPluginChain) => {\r\n _nextProxy = nextPlugin;\r\n }\r\n\r\n _self.processTelemetry = (env: ITelemetryItem, itemCtx:IProcessTelemetryContext) => {\r\n if (!itemCtx) {\r\n // Looks like a plugin didn't pass the (optional) context, so restore to the default\r\n itemCtx = defItemCtx;\r\n }\r\n\r\n if (plugin && _hasProcessTelemetry) {\r\n _self._hasRun = true;\r\n try {\r\n\r\n // Ensure that we keep the context in sync (for processNext()), just in case a plugin\r\n // doesn't calls processTelemetry() instead of itemContext.processNext() or some \r\n // other form of error occurred\r\n itemCtx.setNext(_nextProxy);\r\n if (_hasSetNext) {\r\n // Backward compatibility setting the next plugin on the instance\r\n plugin.setNextPlugin(_nextProxy);\r\n }\r\n\r\n // Set a flag on the next plugin so we know if it was attempted to be executed\r\n _nextProxy && ((_nextProxy as TelemetryPluginChain)._hasRun = false);\r\n\r\n plugin.processTelemetry(env, itemCtx);\r\n } catch (error) {\r\n let hasRun = _nextProxy && (_nextProxy as TelemetryPluginChain)._hasRun;\r\n if (!_nextProxy || !hasRun) {\r\n // Either we have no next plugin or the current one did not attempt to call the next plugin\r\n // Which means the current one is the root of the failure so log/report this failure\r\n itemCtx.diagLog().throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.PluginException,\r\n \"Plugin [\" + plugin.identifier + \"] failed during processTelemetry - \" + error);\r\n }\r\n\r\n if (_nextProxy && !hasRun) {\r\n // As part of the failure the current plugin did not attempt to call the next plugin in the cahin\r\n // So rather than leave the pipeline dead in the water we call the next plugin\r\n _nextProxy.processTelemetry(env, itemCtx);\r\n }\r\n }\r\n } else if (_nextProxy) {\r\n _self._hasRun = true;\r\n\r\n // The underlying plugin is either not defined or does not have a processTelemetry implementation\r\n // so we still want the next plugin to be executed.\r\n _nextProxy.processTelemetry(env, itemCtx);\r\n }\r\n };\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\n\r\nimport { IAppInsightsCore } from \"../JavaScriptSDK.Interfaces/IAppInsightsCore\";\r\nimport { IDiagnosticLogger } from '../JavaScriptSDK.Interfaces/IDiagnosticLogger';\r\nimport { IConfiguration } from '../JavaScriptSDK.Interfaces/IConfiguration';\r\nimport { ITelemetryItem } from '../JavaScriptSDK.Interfaces/ITelemetryItem';\r\nimport { IPlugin, ITelemetryPlugin } from '../JavaScriptSDK.Interfaces/ITelemetryPlugin';\r\nimport { IProcessTelemetryContext } from \"../JavaScriptSDK.Interfaces/IProcessTelemetryContext\";\r\nimport { ITelemetryPluginChain } from '../JavaScriptSDK.Interfaces/ITelemetryPluginChain';\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { DiagnosticLogger } from \"./DiagnosticLogger\";\r\nimport { TelemetryPluginChain } from \"./TelemetryPluginChain\";\r\n\r\nlet _isNullOrUndefined = CoreUtils.isNullOrUndefined;\r\n\r\n/**\r\n * Creates the instance execution chain for the plugins\r\n */\r\nfunction _createProxyChain(plugins:IPlugin[], itemCtx:IProcessTelemetryContext) {\r\n let proxies:ITelemetryPluginChain[] = [];\r\n \r\n if (plugins && plugins.length > 0) {\r\n // Create the proxies and wire up the next plugin chain\r\n let lastProxy:TelemetryPluginChain = null;\r\n for (let idx = 0; idx < plugins.length; idx++) {\r\n let thePlugin = plugins[idx] as ITelemetryPlugin;\r\n if (thePlugin && CoreUtils.isFunction(thePlugin.processTelemetry)) {\r\n // Only add plugins that are processors\r\n let newProxy = new TelemetryPluginChain(thePlugin, itemCtx);\r\n proxies.push(newProxy);\r\n if (lastProxy) {\r\n // Set this new proxy as the next for the previous one\r\n lastProxy.setNext(newProxy);\r\n }\r\n \r\n lastProxy = newProxy;\r\n }\r\n }\r\n }\r\n\r\n return proxies.length > 0 ? proxies[0] : null;\r\n}\r\n\r\nfunction _copyProxyChain(proxy:ITelemetryPluginChain, itemCtx:IProcessTelemetryContext, startAt:IPlugin) {\r\n let plugins:IPlugin[] = [];\r\n let add = startAt ? false : true;\r\n\r\n if (proxy) {\r\n while (proxy) {\r\n let thePlugin = proxy.getPlugin();\r\n if (add || thePlugin === startAt) {\r\n add = true;\r\n plugins.push(thePlugin);\r\n }\r\n proxy = proxy.getNext();\r\n }\r\n }\r\n\r\n if (!add) {\r\n plugins.push(startAt);\r\n }\r\n \r\n return _createProxyChain(plugins, itemCtx);\r\n}\r\n\r\nfunction _copyPluginChain(srcPlugins:IPlugin[], itemCtx:IProcessTelemetryContext, startAt:IPlugin) {\r\n let plugins:IPlugin[] = srcPlugins;\r\n let add = false;\r\n if (startAt && srcPlugins) {\r\n plugins = [];\r\n \r\n CoreUtils.arrForEach(srcPlugins, thePlugin => {\r\n if (add || thePlugin === startAt) {\r\n add = true;\r\n plugins.push(thePlugin);\r\n }\r\n });\r\n }\r\n\r\n if (startAt && !add) {\r\n if (!plugins) {\r\n plugins = [];\r\n }\r\n plugins.push(startAt);\r\n }\r\n \r\n return _createProxyChain(plugins, itemCtx);\r\n}\r\n\r\nexport class ProcessTelemetryContext implements IProcessTelemetryContext {\r\n /**\r\n * Gets the current core config instance\r\n */\r\n public getCfg: () => IConfiguration;\r\n\r\n public getExtCfg: (identifier:string, defaultValue?:T|any) => T;\r\n \r\n public getConfig: (identifier:string, field: string, defaultValue?: number | string | boolean) => number | string | boolean;\r\n\r\n /**\r\n * Returns the IAppInsightsCore instance for the current request\r\n */\r\n public core: () => IAppInsightsCore;\r\n\r\n /**\r\n * Returns the current IDiagnosticsLogger for the current request\r\n */\r\n public diagLog: () => IDiagnosticLogger;\r\n\r\n /**\r\n * Helper to allow inherited classes to check and possibly shortcut executing code only\r\n * required if there is a nextPlugin\r\n */\r\n public hasNext: () => boolean;\r\n\r\n /**\r\n * Returns the next configured plugin proxy\r\n */\r\n public getNext: () => ITelemetryPluginChain;\r\n\r\n /**\r\n * Helper to set the next plugin proxy\r\n */\r\n public setNext: (nextCtx:ITelemetryPluginChain) => void;\r\n\r\n /**\r\n * Call back for telemetry processing before it it is sent\r\n * @param env - This is the current event being reported\r\n * @param itemCtx - This is the context for the current request, ITelemetryPlugin instances \r\n * can optionally use this to access the current core instance or define / pass additional information\r\n * to later plugins (vs appending items to the telemetry item)\r\n */\r\n public processNext: (env: ITelemetryItem) => void;\r\n\r\n /**\r\n * Create a new context using the core and config from the current instance\r\n */\r\n public createNew: (plugins?:IPlugin[]|ITelemetryPluginChain, startAt?:IPlugin) => IProcessTelemetryContext;\r\n\r\n /**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n */\r\n constructor(plugins:IPlugin[]|ITelemetryPluginChain, config: IConfiguration, core:IAppInsightsCore, startAt?:IPlugin) {\r\n let _self = this;\r\n let _nextProxy: ITelemetryPluginChain = null; // Null == No next plugin\r\n\r\n // There is no next element (null) vs not defined (undefined)\r\n if (startAt !== null) {\r\n if (plugins && CoreUtils.isFunction((plugins as ITelemetryPluginChain).getPlugin)) {\r\n // We have a proxy chain object\r\n _nextProxy = _copyProxyChain(plugins as ITelemetryPluginChain, _self, startAt||(plugins as ITelemetryPluginChain).getPlugin());\r\n } else {\r\n // We just have an array\r\n if (startAt) {\r\n _nextProxy = _copyPluginChain(plugins as IPlugin[], _self, startAt);\r\n } else if (CoreUtils.isUndefined(startAt)) {\r\n // Undefined means copy the existing chain\r\n _nextProxy = _createProxyChain(plugins as IPlugin[], _self)\r\n }\r\n }\r\n }\r\n\r\n _self.core = () => {\r\n return core;\r\n };\r\n \r\n _self.diagLog = () => {\r\n let logger: IDiagnosticLogger = (core||{} as IAppInsightsCore).logger;\r\n if (!logger) {\r\n // Fallback so we always have a logger\r\n logger = new DiagnosticLogger(config||{});\r\n }\r\n\r\n return logger;\r\n };\r\n\r\n _self.getCfg = () => {\r\n return config;\r\n };\r\n\r\n _self.getExtCfg = (identifier:string, defaultValue:T|any = {}) => {\r\n let theConfig:T;\r\n if (config) {\r\n let extConfig = config.extensionConfig;\r\n if (extConfig && identifier) {\r\n theConfig = extConfig[identifier];\r\n }\r\n }\r\n \r\n return (theConfig ? theConfig : defaultValue) as T;\r\n };\r\n\r\n _self.getConfig = (identifier:string, field: string, defaultValue: number | string | boolean = false) => {\r\n let theValue;\r\n let extConfig = _self.getExtCfg(identifier, null);\r\n if (extConfig && !_isNullOrUndefined(extConfig[field])) {\r\n theValue = extConfig[field];\r\n } else if (config && !_isNullOrUndefined(config[field])) {\r\n theValue = config[field];\r\n }\r\n \r\n return !_isNullOrUndefined(theValue) ? theValue : defaultValue;\r\n };\r\n\r\n _self.hasNext = () => {\r\n return _nextProxy != null;\r\n };\r\n\r\n _self.getNext = () => {\r\n return _nextProxy;\r\n }\r\n\r\n _self.setNext = (nextPlugin:ITelemetryPluginChain) => {\r\n _nextProxy = nextPlugin;\r\n };\r\n\r\n _self.processNext = (env: ITelemetryItem) => {\r\n let nextPlugin = _nextProxy;\r\n\r\n if (nextPlugin) {\r\n // Automatically move to the next plugin\r\n _nextProxy = nextPlugin.getNext();\r\n nextPlugin.processTelemetry(env, _self);\r\n }\r\n };\r\n\r\n _self.createNew = (plugins:IPlugin[]|ITelemetryPluginChain = null, startAt?:IPlugin) => {\r\n return new ProcessTelemetryContext(plugins||_nextProxy, config, core, startAt);\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n\"use strict\";\r\n\r\nimport { IAppInsightsCore } from \"../JavaScriptSDK.Interfaces/IAppInsightsCore\"\r\nimport { IConfiguration } from \"../JavaScriptSDK.Interfaces/IConfiguration\";\r\nimport { IDiagnosticLogger } from '../JavaScriptSDK.Interfaces/IDiagnosticLogger';\r\nimport { IPlugin, ITelemetryPlugin } from \"../JavaScriptSDK.Interfaces/ITelemetryPlugin\";\r\nimport { ITelemetryItem } from \"../JavaScriptSDK.Interfaces/ITelemetryItem\";\r\nimport { IProcessTelemetryContext } from \"../JavaScriptSDK.Interfaces/IProcessTelemetryContext\";\r\nimport { ITelemetryPluginChain } from \"../JavaScriptSDK.Interfaces/ITelemetryPluginChain\";\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { ProcessTelemetryContext } from './ProcessTelemetryContext';\r\n\r\nlet _isFunction = CoreUtils.isFunction;\r\nlet getPlugin = \"getPlugin\";\r\n\r\n/**\r\n * BaseTelemetryPlugin provides a basic implementation of the ITelemetryPlugin interface so that plugins\r\n * can avoid implementation the same set of boiler plate code as well as provide a base\r\n * implementation so that new default implementations can be added without breaking all plugins.\r\n */\r\nexport abstract class BaseTelemetryPlugin implements ITelemetryPlugin {\r\n\r\n /**\r\n * Call back for telemetry processing before it it is sent\r\n * @param env - This is the current event being reported\r\n * @param itemCtx - This is the context for the current request, ITelemetryPlugin instances \r\n * can optionally use this to access the current core instance or define / pass additional information\r\n * to later plugins (vs appending items to the telemetry item)\r\n */\r\n public processNext: (env: ITelemetryItem, itemCtx: IProcessTelemetryContext) => void;\r\n\r\n /**\r\n * Set next extension for telemetry processing\r\n */\r\n public setNextPlugin: (next: ITelemetryPlugin|ITelemetryPluginChain) => void;\r\n\r\n /**\r\n * Returns the current diagnostic logger that can be used to log issues, if no logger is currently\r\n * assigned a new default one will be created and returned.\r\n */\r\n public diagLog: (itemCtx?:IProcessTelemetryContext) => IDiagnosticLogger;\r\n\r\n /**\r\n * Returns whether the plugin has been initialized\r\n */\r\n public isInitialized: () => boolean;\r\n\r\n public identifier: string;\r\n public version?: string;\r\n\r\n /**\r\n * Holds the core instance that was used during initialization\r\n */\r\n public core: IAppInsightsCore; \r\n\r\n priority: number;\r\n\r\n /**\r\n * Helper to return the current IProcessTelemetryContext, if the passed argument exists this just\r\n * returns that value (helps with minification for callers), otherwise it will return the configured\r\n * context or a temporary one.\r\n * @param currentCtx - [Optional] The current execution context\r\n */\r\n protected _getTelCtx: (currentCtx?:IProcessTelemetryContext) => IProcessTelemetryContext;\r\n\r\n /**\r\n * Internal helper to allow setting of the internal initialized setting for inherited instances and unit testing\r\n */\r\n protected setInitialized: (isInitialized: boolean) => void;\r\n\r\n /**\r\n * Internal helper to initialize the instance\r\n */\r\n private _baseTelInit: (config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?:ITelemetryPluginChain) => void;\r\n\r\n constructor() {\r\n let _self = this;\r\n let _isinitialized = false;\r\n let _rootCtx: IProcessTelemetryContext = null; // Used as the root context, holding the current config and initialized core\r\n let _nextPlugin:ITelemetryPlugin|ITelemetryPluginChain = null; // Used for backward compatibility where plugins don't call the main pipeline\r\n\r\n _self.core = null;\r\n\r\n _self.diagLog = (itemCtx:IProcessTelemetryContext): IDiagnosticLogger => {\r\n return _self._getTelCtx(itemCtx).diagLog();\r\n }\r\n\r\n _self.isInitialized = () => {\r\n return _isinitialized;\r\n }\r\n\r\n _self.setInitialized = (isInitialized: boolean):void => {\r\n _isinitialized = isInitialized;\r\n }\r\n\r\n // _self.getNextPlugin = () => DO NOT IMPLEMENT\r\n // Sub-classes of this base class *should* not be relying on this value and instead\r\n // should use processNext() function. If you require access to the plugin use the\r\n // IProcessTelemetryContext.getNext().getPlugin() while in the pipeline, Note getNext() may return null.\r\n\r\n _self.setNextPlugin = (next: ITelemetryPlugin|ITelemetryPluginChain) => {\r\n _nextPlugin = next;\r\n };\r\n\r\n _self.processNext = (env: ITelemetryItem, itemCtx: IProcessTelemetryContext) => {\r\n if (itemCtx) {\r\n // Normal core execution sequence\r\n itemCtx.processNext(env);\r\n } else if (_nextPlugin && _isFunction(_nextPlugin.processTelemetry)) {\r\n // Looks like backward compatibility or out of band processing. And as it looks \r\n // like a ITelemetryPlugin or ITelemetryPluginChain, just call processTelemetry\r\n _nextPlugin.processTelemetry(env, null);\r\n }\r\n };\r\n\r\n _self._getTelCtx = (currentCtx:IProcessTelemetryContext = null) => {\r\n let itemCtx:IProcessTelemetryContext = currentCtx;\r\n if (!itemCtx) {\r\n let rootCtx = _rootCtx || new ProcessTelemetryContext(null, {}, _self.core);\r\n // tslint:disable-next-line: prefer-conditional-expression\r\n if (_nextPlugin && _nextPlugin[getPlugin]) {\r\n // Looks like a chain object\r\n itemCtx = rootCtx.createNew(null, _nextPlugin[getPlugin]);\r\n } else {\r\n itemCtx = rootCtx.createNew(null, _nextPlugin as ITelemetryPlugin);\r\n }\r\n }\r\n \r\n return itemCtx;\r\n }\r\n\r\n _self._baseTelInit = (config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?:ITelemetryPluginChain) => { \r\n if (config) {\r\n // Make sure the extensionConfig exists\r\n config.extensionConfig = config.extensionConfig || [];\r\n }\r\n \r\n if (!pluginChain && core) {\r\n // Get the first plugin from the core\r\n pluginChain = core.getProcessTelContext().getNext();\r\n }\r\n \r\n let nextPlugin:IPlugin = _nextPlugin as IPlugin;\r\n if (_nextPlugin && _nextPlugin[getPlugin]) {\r\n // If it looks like a proxy/chain then get the plugin\r\n nextPlugin = _nextPlugin[getPlugin]();\r\n }\r\n\r\n // Support legacy plugins where core was defined as a property\r\n _self.core = core;\r\n _rootCtx = new ProcessTelemetryContext(pluginChain, config, core, nextPlugin);\r\n _isinitialized = true;\r\n }\r\n }\r\n\r\n public initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?:ITelemetryPluginChain): void {\r\n this._baseTelInit(config, core, extensions, pluginChain);\r\n }\r\n\r\n public abstract processTelemetry(env: ITelemetryItem, itemCtx?: IProcessTelemetryContext): void;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\n\r\nimport { IPlugin, ITelemetryPlugin } from '../JavaScriptSDK.Interfaces/ITelemetryPlugin';\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { _InternalLogMessage } from \"./DiagnosticLogger\";\r\nimport { _InternalMessageId } from '../JavaScriptSDK.Enums/LoggingEnums';\r\nimport { ProcessTelemetryContext } from './ProcessTelemetryContext';\r\nimport { ITelemetryPluginChain } from '../JavaScriptSDK.Interfaces/ITelemetryPluginChain';\r\n\r\nlet _isFunction = CoreUtils.isFunction;\r\nlet processTelemetry = \"processTelemetry\";\r\nlet priority = \"priority\";\r\nlet setNextPlugin = \"setNextPlugin\";\r\nlet isInitialized = \"isInitialized\";\r\n\r\n/**\r\n * Initialize the queue of plugins\r\n * @param plugins - The array of plugins to initialize and setting of the next plugin\r\n * @param config The current config for the instance\r\n * @param core THe current core instance\r\n * @param extensions The extensions\r\n */\r\nexport function initializePlugins(processContext:ProcessTelemetryContext, extensions: IPlugin[]) {\r\n\r\n // Set the next plugin and identified the uninitialized plugins\r\n let initPlugins:ITelemetryPlugin[] = [];\r\n let lastPlugin:ITelemetryPlugin = null;\r\n let proxy:ITelemetryPluginChain = processContext.getNext();\r\n while (proxy) {\r\n let thePlugin = proxy.getPlugin();\r\n if (thePlugin) {\r\n if (lastPlugin &&\r\n _isFunction(lastPlugin[setNextPlugin]) &&\r\n _isFunction(thePlugin[processTelemetry])) {\r\n // Set this plugin as the next for the previous one\r\n lastPlugin[setNextPlugin](thePlugin);\r\n }\r\n\r\n if (!_isFunction(thePlugin[isInitialized]) || !thePlugin[isInitialized]()) {\r\n initPlugins.push(thePlugin);\r\n }\r\n\r\n lastPlugin = thePlugin;\r\n proxy = proxy.getNext();\r\n }\r\n }\r\n\r\n // Now initiatilize the plugins\r\n CoreUtils.arrForEach(initPlugins, thePlugin => {\r\n thePlugin.initialize(\r\n processContext.getCfg(), \r\n processContext.core(), \r\n extensions, \r\n processContext.getNext());\r\n });\r\n}\r\n\r\nexport function sortPlugins(plugins:IPlugin[]) {\r\n // Sort by priority\r\n return plugins.sort((extA, extB) => {\r\n let result = 0;\r\n let bHasProcess = _isFunction(extB[processTelemetry]);\r\n if (_isFunction(extA[processTelemetry])) {\r\n result = bHasProcess ? extA[priority] - extB[priority] : 1;\r\n } else if (bHasProcess) {\r\n result = -1;\r\n }\r\n\r\n return result;\r\n });\r\n // sort complete \r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\n\r\nimport { IAppInsightsCore } from \"../JavaScriptSDK.Interfaces/IAppInsightsCore\"\r\nimport { IConfiguration } from \"../JavaScriptSDK.Interfaces/IConfiguration\";\r\nimport { IChannelControls } from \"../JavaScriptSDK.Interfaces/IChannelControls\";\r\nimport { IPlugin, ITelemetryPlugin } from \"../JavaScriptSDK.Interfaces/ITelemetryPlugin\";\r\nimport { ITelemetryItem } from \"../JavaScriptSDK.Interfaces/ITelemetryItem\";\r\nimport { IProcessTelemetryContext } from \"../JavaScriptSDK.Interfaces/IProcessTelemetryContext\";\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { _InternalLogMessage } from \"./DiagnosticLogger\";\r\nimport { BaseTelemetryPlugin } from './BaseTelemetryPlugin';\r\nimport { ProcessTelemetryContext } from './ProcessTelemetryContext';\r\nimport { initializePlugins } from './TelemetryHelpers';\r\n\r\nconst ChannelControllerPriority = 500;\r\nconst ChannelValidationMessage = \"Channel has invalid priority\";\r\n\r\nlet _arrForEach = CoreUtils.arrForEach;\r\nlet _objDefineAccessors = CoreUtils.objDefineAccessors;\r\n\r\nfunction _checkQueuePriority(queue:IChannelControls[]) {\r\n _arrForEach(queue, queueItem => {\r\n if (queueItem.priority < ChannelControllerPriority) {\r\n throw Error(ChannelValidationMessage + queueItem.identifier);\r\n }\r\n });\r\n}\r\n\r\nfunction _addChannelQueue(channelQueues:IChannelControls[][], queue:IChannelControls[]) {\r\n if (queue && queue.length > 0) {\r\n queue = queue.sort((a, b) => { // sort based on priority within each queue\r\n return a.priority - b.priority;\r\n });\r\n\r\n _checkQueuePriority(queue);\r\n channelQueues.push(queue);\r\n }\r\n}\r\n\r\nfunction _createChannelQueues(channels:IChannelControls[][], extensions: IPlugin[]) {\r\n let channelQueues:IChannelControls[][] = [];\r\n\r\n if (channels) {\r\n // Add and sort the configuration channel queues\r\n _arrForEach(channels, queue => _addChannelQueue(channelQueues, queue));\r\n }\r\n\r\n if (extensions) {\r\n // Create a new channel queue for any extensions with a priority > the ChannelControllerPriority\r\n let extensionQueue:IChannelControls[] = [];\r\n _arrForEach(extensions as IChannelControls[], plugin => {\r\n if (plugin.priority > ChannelControllerPriority) {\r\n extensionQueue.push(plugin);\r\n }\r\n });\r\n \r\n _addChannelQueue(channelQueues, extensionQueue);\r\n }\r\n\r\n return channelQueues;\r\n}\r\n\r\nexport class ChannelController extends BaseTelemetryPlugin {\r\n\r\n identifier: string = \"ChannelControllerPlugin\";\r\n\r\n setNextPlugin: (next: ITelemetryPlugin) => {}; // channel controller is last in pipeline\r\n\r\n priority: number = ChannelControllerPriority; // in reserved range 100 to 200\r\n\r\n private _channelQueue: IChannelControls[][];\r\n\r\n public processTelemetry(item: ITelemetryItem, itemCtx: IProcessTelemetryContext) {\r\n if (this._channelQueue) {\r\n _arrForEach(this._channelQueue, queues => {\r\n // pass on to first item in queue\r\n if (queues.length > 0) {\r\n // Copying the item context as we could have mutiple chains that are executing asynchronously\r\n // and calling _getDefTelCtx as it's possible that the caller doesn't pass any context\r\n let chainCtx = this._getTelCtx(itemCtx).createNew(queues); \r\n chainCtx.processNext(item);\r\n }\r\n });\r\n }\r\n };\r\n\r\n public getChannelControls(): IChannelControls[][] {\r\n return this._channelQueue;\r\n }\r\n\r\n public initialize(config: IConfiguration, core: IAppInsightsCore, extensions: IPlugin[]) {\r\n let _self = this;\r\n if (_self.isInitialized()) {\r\n // already initialized\r\n return;\r\n }\r\n\r\n super.initialize(config, core, extensions);\r\n\r\n if ((config as any).isCookieUseDisabled) {\r\n CoreUtils.disableCookies();\r\n }\r\n \r\n let channelQueue = _self._channelQueue = _createChannelQueues((config||{}).channels, extensions);\r\n\r\n // Initialize the Queues\r\n _arrForEach(channelQueue, queue => initializePlugins(new ProcessTelemetryContext(queue, config, core), extensions));\r\n }\r\n\r\n /**\r\n * Static constructor, attempt to create accessors\r\n */\r\n // tslint:disable-next-line\r\n private static _staticInit = (() => {\r\n // Dynamically create get/set property accessors\r\n _objDefineAccessors(ChannelController.prototype, \"ChannelControls\", ChannelController.prototype.getChannelControls);\r\n _objDefineAccessors(ChannelController.prototype, \"channelQueue\", ChannelController.prototype.getChannelControls);\r\n })();\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * Type of storage to differentiate between local storage and session storage\r\n */\r\nexport enum StorageType {\r\n LocalStorage,\r\n SessionStorage\r\n}\r\n\r\n/**\r\n * Enum is used in aiDataContract to describe how fields are serialized. \r\n * For instance: (Fieldtype.Required | FieldType.Array) will mark the field as required and indicate it's an array\r\n */\r\nexport enum FieldType { Default = 0, Required = 1, Array = 2, Hidden = 4 };\r\n\r\nexport enum DistributedTracingModes {\r\n /**\r\n * (Default) Send Application Insights correlation headers\r\n */\r\n\r\n AI=0,\r\n\r\n /**\r\n * Send both W3C Trace Context headers and back-compatibility Application Insights headers\r\n */\r\n AI_AND_W3C,\r\n\r\n /**\r\n * Send W3C Trace Context headers\r\n */\r\n W3C\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\n\r\nimport { IAppInsightsCore } from \"../JavaScriptSDK.Interfaces/IAppInsightsCore\"\r\nimport { IConfiguration } from \"../JavaScriptSDK.Interfaces/IConfiguration\";\r\nimport { IPlugin, ITelemetryPlugin } from \"../JavaScriptSDK.Interfaces/ITelemetryPlugin\";\r\nimport { IChannelControls } from \"../JavaScriptSDK.Interfaces/IChannelControls\";\r\nimport { ITelemetryItem } from \"../JavaScriptSDK.Interfaces/ITelemetryItem\";\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { INotificationManager } from '../JavaScriptSDK.Interfaces/INotificationManager';\r\nimport { INotificationListener } from \"../JavaScriptSDK.Interfaces/INotificationListener\";\r\nimport { IDiagnosticLogger } from \"../JavaScriptSDK.Interfaces/IDiagnosticLogger\";\r\nimport { ChannelController } from './ChannelController';\r\nimport { IProcessTelemetryContext } from '../JavaScriptSDK.Interfaces/IProcessTelemetryContext';\r\nimport { ProcessTelemetryContext } from './ProcessTelemetryContext';\r\nimport { initializePlugins, sortPlugins } from './TelemetryHelpers';\r\nimport { _InternalMessageId, LoggingSeverity } from \"../JavaScriptSDK.Enums/LoggingEnums\";\r\n\r\nconst validationError = \"Extensions must provide callback to initialize\";\r\n\r\nconst _arrForEach = CoreUtils.arrForEach;\r\nconst _isNullOrUndefined = CoreUtils.isNullOrUndefined;\r\n\r\nexport class BaseCore implements IAppInsightsCore {\r\n public static defaultConfig: IConfiguration;\r\n public config: IConfiguration;\r\n public logger: IDiagnosticLogger;\r\n\r\n public _extensions: IPlugin[];\r\n public isInitialized: () => boolean;\r\n protected _notificationManager: INotificationManager;\r\n private _eventQueue: ITelemetryItem[];\r\n private _channelController: ChannelController;\r\n private _setInit: (value: boolean) => void;\r\n\r\n constructor() {\r\n let _isInitialized = false;\r\n let _this = this;\r\n _this._extensions = new Array();\r\n _this._channelController = new ChannelController();\r\n _this.isInitialized = () => _isInitialized;\r\n _this._setInit = (value: boolean) => { _isInitialized = value; }\r\n _this._eventQueue = [];\r\n }\r\n\r\n initialize(config: IConfiguration, extensions: IPlugin[], logger?: IDiagnosticLogger, notificationManager?: INotificationManager): void {\r\n let _this = this;\r\n\r\n // Make sure core is only initialized once\r\n if (_this.isInitialized()) {\r\n throw Error(\"Core should not be initialized more than once\");\r\n }\r\n\r\n if (!config || _isNullOrUndefined(config.instrumentationKey)) {\r\n throw Error(\"Please provide instrumentation key\");\r\n }\r\n\r\n _this.config = config;\r\n let channelController = _this._channelController;\r\n\r\n if (!notificationManager) {\r\n // Create Dummy notification manager\r\n notificationManager = CoreUtils.objCreate({\r\n addNotificationListener: (listener: INotificationListener) => { },\r\n removeNotificationListener: (listener: INotificationListener) => { },\r\n eventsSent: (events: ITelemetryItem[]) => { },\r\n eventsDiscarded: (events: ITelemetryItem[], reason: number) => { }\r\n })\r\n }\r\n\r\n _this._notificationManager = notificationManager as INotificationManager;\r\n config.extensions = _isNullOrUndefined(config.extensions) ? [] : config.extensions;\r\n\r\n // add notification to the extensions in the config so other plugins can access it\r\n let extConfig = config.extensionConfig = _isNullOrUndefined(config.extensionConfig) ? {} : config.extensionConfig;\r\n extConfig.NotificationManager = notificationManager;\r\n\r\n if (!logger) {\r\n logger = CoreUtils.objCreate({\r\n throwInternal: (severity: LoggingSeverity, msgId: _InternalMessageId, msg: string, properties?: Object, isUserAct = false) => { },\r\n warnToConsole: (message: string) => { },\r\n resetInternalMessageCount: () => { }\r\n });\r\n }\r\n _this.logger = logger;\r\n\r\n // Concat all available extensions\r\n let allExtensions = [];\r\n allExtensions.push(...extensions, ...config.extensions);\r\n allExtensions = sortPlugins(allExtensions);\r\n\r\n let coreExtensions:any[] = [];\r\n let channelExtensions:any[] = [];\r\n\r\n // Check if any two extensions have the same priority, then warn to console\r\n // And extract the local extensions from the \r\n const extPriorities = {};\r\n\r\n // Extension validation\r\n _arrForEach(allExtensions, (ext: ITelemetryPlugin) => {\r\n if (_isNullOrUndefined(ext) || _isNullOrUndefined(ext.initialize)) {\r\n throw Error(validationError);\r\n }\r\n\r\n const extPriority = ext.priority;\r\n const identifier = ext.identifier;\r\n\r\n if (ext && extPriority) {\r\n if (!_isNullOrUndefined(extPriorities[extPriority])) {\r\n logger.warnToConsole(\"Two extensions have same priority #\" + extPriority + \" - \" + extPriorities[extPriority] + \", \" + identifier);\r\n } else {\r\n // set a value\r\n extPriorities[extPriority] = identifier;\r\n }\r\n }\r\n\r\n // Split extensions to core and channelController\r\n if (!extPriority || extPriority < channelController.priority) {\r\n // Add to core extension that will be managed by BaseCore\r\n coreExtensions.push(ext);\r\n } else {\r\n // Add all other extensions to be managed by the channel controller\r\n channelExtensions.push(ext);\r\n }\r\n });\r\n // Validation complete\r\n\r\n // Add the channelController to the complete extension collection and\r\n // to the end of the core extensions\r\n allExtensions.push(channelController);\r\n coreExtensions.push(channelController);\r\n\r\n // Sort the complete set of extensions by priority\r\n allExtensions = sortPlugins(allExtensions);\r\n _this._extensions = allExtensions;\r\n\r\n // initialize channel controller first, this will initialize all channel plugins\r\n initializePlugins(new ProcessTelemetryContext([channelController], config, _this), allExtensions);\r\n initializePlugins(new ProcessTelemetryContext(coreExtensions, config, _this), allExtensions);\r\n\r\n // Now reset the extensions to just those being managed by Basecore\r\n _this._extensions = coreExtensions;\r\n\r\n if (_this.getTransmissionControls().length === 0) {\r\n throw new Error(\"No channels available\");\r\n }\r\n\r\n _this._setInit(true);\r\n }\r\n\r\n getTransmissionControls(): IChannelControls[][] {\r\n return this._channelController.getChannelControls();\r\n }\r\n\r\n track(telemetryItem: ITelemetryItem) {\r\n let _this = this;\r\n if (!telemetryItem.iKey) {\r\n // setup default iKey if not passed in\r\n telemetryItem.iKey = _this.config.instrumentationKey;\r\n }\r\n if (!telemetryItem.time) {\r\n // add default timestamp if not passed in\r\n telemetryItem.time = CoreUtils.toISOString(new Date());\r\n }\r\n if (_isNullOrUndefined(telemetryItem.ver)) {\r\n // CommonSchema 4.0\r\n telemetryItem.ver = \"4.0\";\r\n }\r\n\r\n if (_this.isInitialized()) {\r\n // Release queue\r\n if (_this._eventQueue.length > 0) {\r\n _arrForEach(_this._eventQueue, (event: ITelemetryItem) => {\r\n _this.getProcessTelContext().processNext(event);\r\n });\r\n _this._eventQueue = [];\r\n }\r\n // Process the telemetry plugin chain\r\n _this.getProcessTelContext().processNext(telemetryItem);\r\n } else {\r\n // Queue events until all extensions are initialized\r\n _this._eventQueue.push(telemetryItem);\r\n }\r\n }\r\n\r\n getProcessTelContext(): IProcessTelemetryContext {\r\n let _this = this;\r\n let extensions = _this._extensions;\r\n let thePlugins: IPlugin[] = extensions;\r\n\r\n // invoke any common telemetry processors before sending through pipeline\r\n if (!extensions || extensions.length === 0) {\r\n // Pass to Channel controller so data is sent to correct channel queues\r\n thePlugins = [_this._channelController];\r\n }\r\n\r\n return new ProcessTelemetryContext(thePlugins, _this.config, _this);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n/**\r\n * The EventsDiscardedReason enumeration contains a set of values that specify the reason for discarding an event.\r\n */\r\nexport const EventsDiscardedReason = {\r\n /**\r\n * Unknown.\r\n */\r\n Unknown: 0,\r\n /**\r\n * Status set to non-retryable.\r\n */\r\n NonRetryableStatus: 1,\r\n /**\r\n * The event is invalid.\r\n */\r\n InvalidEvent: 2,\r\n /**\r\n * The size of the event is too large.\r\n */\r\n SizeLimitExceeded: 3,\r\n /**\r\n * The server is not accepting events from this instrumentation key.\r\n */\r\n KillSwitch: 4,\r\n /**\r\n * The event queue is full.\r\n */\r\n QueueFull: 5,\r\n};\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { ITelemetryItem } from \"../JavaScriptSDK.Interfaces/ITelemetryItem\";\r\nimport { INotificationListener } from \"../JavaScriptSDK.Interfaces/INotificationListener\";\r\nimport { INotificationManager } from './../JavaScriptSDK.Interfaces/INotificationManager';\r\nimport { CoreUtils } from \"./CoreUtils\";\r\n\r\n/**\r\n * Class to manage sending notifications to all the listeners.\r\n */\r\nexport class NotificationManager implements INotificationManager {\r\n listeners: INotificationListener[] = [];\r\n\r\n /**\r\n * Adds a notification listener.\r\n * @param {INotificationListener} listener - The notification listener to be added.\r\n */\r\n addNotificationListener(listener: INotificationListener): void {\r\n this.listeners.push(listener);\r\n }\r\n\r\n /**\r\n * Removes all instances of the listener.\r\n * @param {INotificationListener} listener - AWTNotificationListener to remove.\r\n */\r\n removeNotificationListener(listener: INotificationListener): void {\r\n let index: number = CoreUtils.arrIndexOf(this.listeners, listener);\r\n while (index > -1) {\r\n this.listeners.splice(index, 1);\r\n index = CoreUtils.arrIndexOf(this.listeners, listener);\r\n }\r\n }\r\n\r\n /**\r\n * Notification for events sent.\r\n * @param {ITelemetryItem[]} events - The array of events that have been sent.\r\n */\r\n eventsSent(events: ITelemetryItem[]): void {\r\n for (let i: number = 0; i < this.listeners.length; ++i) {\r\n if (this.listeners[i].eventsSent) {\r\n setTimeout(() => this.listeners[i].eventsSent(events), 0);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Notification for events being discarded.\r\n * @param {ITelemetryItem[]} events - The array of events that have been discarded by the SDK.\r\n * @param {number} reason - The reason for which the SDK discarded the events. The EventsDiscardedReason\r\n * constant should be used to check the different values.\r\n */\r\n eventsDiscarded(events: ITelemetryItem[], reason: number): void {\r\n for (let i: number = 0; i < this.listeners.length; ++i) {\r\n if (this.listeners[i].eventsDiscarded) {\r\n setTimeout(() => this.listeners[i].eventsDiscarded(events, reason), 0);\r\n }\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { IAppInsightsCore } from \"../JavaScriptSDK.Interfaces/IAppInsightsCore\"\r\nimport { BaseCore } from './BaseCore';\r\nimport { IConfiguration } from \"../JavaScriptSDK.Interfaces/IConfiguration\";\r\nimport { IPlugin } from \"../JavaScriptSDK.Interfaces/ITelemetryPlugin\";\r\nimport { IChannelControls } from \"../JavaScriptSDK.Interfaces/IChannelControls\";\r\nimport { ITelemetryItem } from \"../JavaScriptSDK.Interfaces/ITelemetryItem\";\r\nimport { INotificationListener } from \"../JavaScriptSDK.Interfaces/INotificationListener\";\r\nimport { EventsDiscardedReason } from \"../JavaScriptSDK.Enums/EventsDiscardedReason\";\r\nimport { NotificationManager } from \"./NotificationManager\";\r\nimport { CoreUtils } from \"./CoreUtils\";\r\nimport { IDiagnosticLogger } from \"../JavaScriptSDK.Interfaces/IDiagnosticLogger\";\r\nimport { _InternalLogMessage, DiagnosticLogger } from \"./DiagnosticLogger\";\r\n\r\n\"use strict\";\r\n\r\nexport class AppInsightsCore extends BaseCore implements IAppInsightsCore {\r\n public config: IConfiguration;\r\n public logger: IDiagnosticLogger;\r\n\r\n protected _notificationManager: NotificationManager;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n initialize(config: IConfiguration, extensions: IPlugin[]): void {\r\n let _self = this;\r\n _self._notificationManager = new NotificationManager();\r\n _self.logger = new DiagnosticLogger(config);\r\n _self.config = config;\r\n \r\n super.initialize(config, extensions, _self.logger, _self._notificationManager);\r\n }\r\n\r\n getTransmissionControls(): IChannelControls[][] {\r\n return super.getTransmissionControls();\r\n }\r\n\r\n track(telemetryItem: ITelemetryItem) {\r\n if (telemetryItem === null) {\r\n this._notifyInvalidEvent(telemetryItem);\r\n // throw error\r\n throw Error(\"Invalid telemetry item\");\r\n }\r\n \r\n // do basic validation before sending it through the pipeline\r\n this._validateTelemetryItem(telemetryItem);\r\n\r\n super.track(telemetryItem);\r\n }\r\n\r\n /**\r\n * Adds a notification listener. The SDK calls methods on the listener when an appropriate notification is raised.\r\n * The added plugins must raise notifications. If the plugins do not implement the notifications, then no methods will be\r\n * called.\r\n * @param {INotificationListener} listener - An INotificationListener object.\r\n */\r\n addNotificationListener(listener: INotificationListener): void {\r\n if (this._notificationManager) {\r\n this._notificationManager.addNotificationListener(listener);\r\n }\r\n }\r\n\r\n /**\r\n * Removes all instances of the listener.\r\n * @param {INotificationListener} listener - INotificationListener to remove.\r\n */\r\n removeNotificationListener(listener: INotificationListener): void {\r\n if (this._notificationManager) {\r\n this._notificationManager.removeNotificationListener(listener);\r\n }\r\n }\r\n\r\n /**\r\n * Periodically check logger.queue for\r\n */\r\n pollInternalLogs(eventName?: string): number {\r\n let interval = this.config.diagnosticLogInterval;\r\n if (!interval || !(interval > 0)) {\r\n interval = 10000;\r\n }\r\n\r\n return setInterval(() => {\r\n let _self = this;\r\n const queue: _InternalLogMessage[] = _self.logger ? _self.logger.queue : [];\r\n\r\n CoreUtils.arrForEach(queue, (logMessage: _InternalLogMessage) => {\r\n const item: ITelemetryItem = {\r\n name: eventName ? eventName : \"InternalMessageId: \" + logMessage.messageId,\r\n iKey: _self.config.instrumentationKey,\r\n time: CoreUtils.toISOString(new Date()),\r\n baseType: _InternalLogMessage.dataType,\r\n baseData: { message: logMessage.message }\r\n };\r\n\r\n _self.track(item);\r\n });\r\n queue.length = 0;\r\n }, interval) as any;\r\n }\r\n\r\n private _validateTelemetryItem(telemetryItem: ITelemetryItem) {\r\n\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.name)) {\r\n this._notifyInvalidEvent(telemetryItem);\r\n throw Error(\"telemetry name required\");\r\n }\r\n }\r\n\r\n private _notifyInvalidEvent(telemetryItem: ITelemetryItem): void {\r\n if (this._notificationManager) {\r\n this._notificationManager.eventsDiscarded([telemetryItem], EventsDiscardedReason.InvalidEvent);\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nexport { Util, CorrelationIdHelper, UrlHelper, DateTimeUtils } from './Util';\r\nexport { ConnectionStringParser } from './ConnectionStringParser';\r\nexport { FieldType } from './Enums';\r\nexport { RequestHeaders } from './RequestResponseHeaders';\r\nexport { DisabledPropertyName, ProcessLegacy, SampleRate, HttpMethod, DEFAULT_BREEZE_ENDPOINT } from './Constants';\r\nexport { Data as AIData } from './Interfaces/Contracts/Generated/Data';\r\nexport { Base as AIBase } from './Interfaces/Contracts/Generated/Base';\r\nexport { ISerializable } from './Interfaces/Telemetry/ISerializable';\r\nexport { IEnvelope } from './Interfaces/Telemetry/IEnvelope';\r\nexport { Envelope } from './Telemetry/Common/Envelope';\r\nexport { Event } from './Telemetry/Event';\r\nexport { Exception } from './Telemetry/Exception';\r\nexport { Metric } from './Telemetry/Metric';\r\nexport { PageView } from './Telemetry/PageView';\r\nexport { PageViewData } from './Interfaces/Contracts/Generated/PageViewData';\r\nexport { RemoteDependencyData } from './Telemetry/RemoteDependencyData';\r\nexport { IEventTelemetry } from './Interfaces/IEventTelemetry';\r\nexport { ITraceTelemetry } from './Interfaces/ITraceTelemetry';\r\nexport { IMetricTelemetry } from './Interfaces/IMetricTelemetry';\r\nexport { IDependencyTelemetry } from './Interfaces/IDependencyTelemetry';\r\nexport { IExceptionTelemetry, IAutoExceptionTelemetry, IExceptionInternal } from './Interfaces/IExceptionTelemetry';\r\nexport { IPageViewTelemetry, IPageViewTelemetryInternal } from './Interfaces/IPageViewTelemetry';\r\nexport { IPageViewPerformanceTelemetry, IPageViewPerformanceTelemetryInternal } from './Interfaces/IPageViewPerformanceTelemetry';\r\nexport { Trace } from './Telemetry/Trace';\r\nexport { PageViewPerformance } from './Telemetry/PageViewPerformance';\r\nexport { Data } from './Telemetry/Common/Data';\r\nexport { SeverityLevel } from './Interfaces/Contracts/Generated/SeverityLevel';\r\nexport { IConfig, ConfigurationManager } from './Interfaces/IConfig';\r\nexport { IChannelControlsAI } from './Interfaces/IChannelControlsAI';\r\nexport { ContextTagKeys } from './Interfaces/Contracts/Generated/ContextTagKeys';\r\nexport { DataSanitizer } from './Telemetry/Common/DataSanitizer';\r\nexport { TelemetryItemCreator } from './TelemetryItemCreator';\r\nexport { ICorrelationConfig } from './Interfaces/ICorrelationConfig';\r\nexport { IAppInsights } from './Interfaces/IAppInsights';\r\nexport { IWeb } from './Interfaces/Context/IWeb';\r\nexport { CtxTagKeys, Extensions } from './Interfaces/PartAExtensions';\r\nexport { ISession } from './Interfaces/Context/ISession';\r\nexport { ITelemetryContext } from './Interfaces/ITelemetryContext';\r\nexport { IApplication } from './Interfaces/Context/IApplication';\r\nexport { IDevice } from './Interfaces/Context/IDevice';\r\nexport { IInternal } from './Interfaces/Context/IInternal';\r\nexport { ILocation } from './Interfaces/Context/ILocation';\r\nexport { ISample } from './Interfaces/Context/ISample';\r\nexport { IOperatingSystem } from './Interfaces/Context/IOperatingSystem';\r\nexport { IPropertiesPlugin } from './Interfaces/IPropertiesPlugin';\r\nexport { IUser, IUserContext } from './Interfaces/Context/IUser';\r\nexport { ITelemetryTrace, ITraceState } from './Interfaces/Context/ITelemetryTrace';\r\nexport { DistributedTracingModes } from './Enums';\r\nexport const PropertiesPluginIdentifier = \"AppInsightsPropertiesPlugin\";\r\nexport const BreezeChannelIdentifier = \"AppInsightsChannelPlugin\";\r\nexport const AnalyticsPluginIdentifier = \"ApplicationInsightsAnalytics\";\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nexport class RequestHeaders {\r\n /**\r\n * Request-Context header\r\n */\r\n public static requestContextHeader = \"Request-Context\";\r\n\r\n /**\r\n * Target instrumentation header that is added to the response and retrieved by the\r\n * calling application when processing incoming responses.\r\n */\r\n public static requestContextTargetKey = \"appId\";\r\n\r\n /**\r\n * Request-Context appId format\r\n */\r\n public static requestContextAppIdFormat = \"appId=cid-v1:\";\r\n\r\n /**\r\n * Request-Id header\r\n */\r\n public static requestIdHeader = \"Request-Id\";\r\n\r\n /**\r\n * W3C distributed tracing protocol header\r\n */\r\n public static traceParentHeader = \"traceparent\";\r\n\r\n /**\r\n * W3C distributed tracing protocol state header\r\n */\r\n public static traceStateHeader: \"tracestate\"; // currently not used\r\n\r\n /**\r\n * Sdk-Context header\r\n * If this header passed with appId in content then appId will be returned back by the backend.\r\n */\r\n public static sdkContextHeader = \"Sdk-Context\";\r\n\r\n /**\r\n * String to pass in header for requesting appId back from the backend.\r\n */\r\n public static sdkContextHeaderAppIdRequest = \"appId\";\r\n\r\n public static requestContextHeaderLowerCase = \"request-context\";\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { IDiagnosticLogger, LoggingSeverity, _InternalMessageId, CoreUtils, hasJSON, getJSON } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class DataSanitizer {\r\n\r\n /**\r\n * Max length allowed for custom names.\r\n */\r\n public static MAX_NAME_LENGTH = 150;\r\n\r\n /**\r\n * Max length allowed for Id field in page views.\r\n */\r\n public static MAX_ID_LENGTH = 128;\r\n\r\n /**\r\n * Max length allowed for custom values.\r\n */\r\n public static MAX_PROPERTY_LENGTH = 8192;\r\n\r\n /**\r\n * Max length allowed for names\r\n */\r\n public static MAX_STRING_LENGTH = 1024;\r\n\r\n /**\r\n * Max length allowed for url.\r\n */\r\n public static MAX_URL_LENGTH = 2048;\r\n\r\n /**\r\n * Max length allowed for messages.\r\n */\r\n public static MAX_MESSAGE_LENGTH = 32768;\r\n\r\n /**\r\n * Max length allowed for exceptions.\r\n */\r\n public static MAX_EXCEPTION_LENGTH = 32768;\r\n\r\n public static sanitizeKeyAndAddUniqueness(logger: IDiagnosticLogger, key: any, map: any) {\r\n const origLength = key.length;\r\n let field = DataSanitizer.sanitizeKey(logger, key);\r\n\r\n // validation truncated the length. We need to add uniqueness\r\n if (field.length !== origLength) {\r\n let i = 0;\r\n let uniqueField = field;\r\n while (map[uniqueField] !== undefined) {\r\n i++;\r\n uniqueField = field.substring(0, DataSanitizer.MAX_NAME_LENGTH - 3) + DataSanitizer.padNumber(i);\r\n }\r\n field = uniqueField;\r\n }\r\n return field;\r\n }\r\n\r\n public static sanitizeKey(logger: IDiagnosticLogger, name: any) {\r\n let nameTrunc: String;\r\n if (name) {\r\n // Remove any leading or trailing whitepace\r\n name = DataSanitizer.trim(name.toString());\r\n\r\n // truncate the string to 150 chars\r\n if (name.length > DataSanitizer.MAX_NAME_LENGTH) {\r\n nameTrunc = name.substring(0, DataSanitizer.MAX_NAME_LENGTH);\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.NameTooLong,\r\n \"name is too long. It has been truncated to \" + DataSanitizer.MAX_NAME_LENGTH + \" characters.\",\r\n { name }, true);\r\n }\r\n }\r\n\r\n return nameTrunc || name;\r\n }\r\n\r\n public static sanitizeString(logger: IDiagnosticLogger, value: any, maxLength: number = DataSanitizer.MAX_STRING_LENGTH) {\r\n let valueTrunc : String;\r\n if (value) {\r\n maxLength = maxLength ? maxLength : DataSanitizer.MAX_STRING_LENGTH; // in case default parameters dont work\r\n value = DataSanitizer.trim(value);\r\n if (value.toString().length > maxLength) {\r\n valueTrunc = value.toString().substring(0, maxLength);\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.StringValueTooLong,\r\n \"string value is too long. It has been truncated to \" + maxLength + \" characters.\",\r\n { value }, true);\r\n }\r\n }\r\n\r\n return valueTrunc || value;\r\n }\r\n\r\n public static sanitizeUrl(logger: IDiagnosticLogger, url: any) {\r\n return DataSanitizer.sanitizeInput(logger, url, DataSanitizer.MAX_URL_LENGTH, _InternalMessageId.UrlTooLong);\r\n }\r\n\r\n public static sanitizeMessage(logger: IDiagnosticLogger, message: any) {\r\n let messageTrunc : String;\r\n if (message) {\r\n if (message.length > DataSanitizer.MAX_MESSAGE_LENGTH) {\r\n messageTrunc = message.substring(0, DataSanitizer.MAX_MESSAGE_LENGTH);\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING, _InternalMessageId.MessageTruncated,\r\n \"message is too long, it has been truncated to \" + DataSanitizer.MAX_MESSAGE_LENGTH + \" characters.\",\r\n { message },\r\n true);\r\n }\r\n }\r\n\r\n return messageTrunc || message;\r\n }\r\n\r\n public static sanitizeException(logger: IDiagnosticLogger, exception: any) {\r\n let exceptionTrunc : String;\r\n if (exception) {\r\n if (exception.length > DataSanitizer.MAX_EXCEPTION_LENGTH) {\r\n exceptionTrunc = exception.substring(0, DataSanitizer.MAX_EXCEPTION_LENGTH);\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING, _InternalMessageId.ExceptionTruncated, \"exception is too long, it has been truncated to \" + DataSanitizer.MAX_EXCEPTION_LENGTH + \" characters.\",\r\n { exception }, true);\r\n }\r\n }\r\n\r\n return exceptionTrunc || exception;\r\n }\r\n\r\n public static sanitizeProperties(logger: IDiagnosticLogger, properties: any) {\r\n if (properties) {\r\n const tempProps = {};\r\n for (let prop in properties) {\r\n let value = properties[prop];\r\n if (CoreUtils.isObject(value) && hasJSON()) {\r\n // Stringify any part C properties\r\n try {\r\n value = getJSON().stringify(value);\r\n } catch (e) {\r\n logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.CannotSerializeObjectNonSerializable, \"custom property is not valid\", { exception: e}, true);\r\n }\r\n }\r\n value = DataSanitizer.sanitizeString(logger, value, DataSanitizer.MAX_PROPERTY_LENGTH);\r\n prop = DataSanitizer.sanitizeKeyAndAddUniqueness(logger, prop, tempProps);\r\n tempProps[prop] = value;\r\n }\r\n properties = tempProps;\r\n }\r\n\r\n return properties;\r\n }\r\n\r\n public static sanitizeMeasurements(logger: IDiagnosticLogger, measurements: any) {\r\n if (measurements) {\r\n const tempMeasurements = {};\r\n for (let measure in measurements) {\r\n const value = measurements[measure];\r\n measure = DataSanitizer.sanitizeKeyAndAddUniqueness(logger, measure, tempMeasurements);\r\n tempMeasurements[measure] = value;\r\n }\r\n measurements = tempMeasurements;\r\n }\r\n\r\n return measurements;\r\n }\r\n\r\n public static sanitizeId(logger: IDiagnosticLogger, id: string): string {\r\n return id ? DataSanitizer.sanitizeInput(logger, id, DataSanitizer.MAX_ID_LENGTH, _InternalMessageId.IdTooLong).toString() : id;\r\n }\r\n\r\n public static sanitizeInput(logger: IDiagnosticLogger, input: any, maxLength: number, _msgId: _InternalMessageId) {\r\n let inputTrunc : String;\r\n if (input) {\r\n input = DataSanitizer.trim(input);\r\n if (input.length > maxLength) {\r\n inputTrunc = input.substring(0, maxLength);\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _msgId,\r\n \"input is too long, it has been truncated to \" + maxLength + \" characters.\",\r\n { data: input },\r\n true);\r\n }\r\n }\r\n\r\n return inputTrunc || input;\r\n }\r\n\r\n public static padNumber(num: number) {\r\n const s = \"00\" + num;\r\n return s.substr(s.length - 3);\r\n }\r\n\r\n /**\r\n * helper method to trim strings (IE8 does not implement String.prototype.trim)\r\n */\r\n public static trim(str: any): string {\r\n if (!CoreUtils.isString(str)) { return str; }\r\n return str.replace(/^\\s+|\\s+$/g, \"\");\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { StorageType } from \"./Enums\";\r\nimport { \r\n CoreUtils, EventHelper, _InternalMessageId, LoggingSeverity, IDiagnosticLogger, IPlugin, \r\n getGlobal, getGlobalInst, getWindow, getDocument, getNavigator, getPerformance, getLocation, hasJSON, getJSON,\r\n strPrototype\r\n} from \"@microsoft/applicationinsights-core-js\";\r\nimport { RequestHeaders } from \"./RequestResponseHeaders\";\r\nimport { DataSanitizer } from \"./Telemetry/Common/DataSanitizer\";\r\nimport { ICorrelationConfig } from \"./Interfaces/ICorrelationConfig\";\r\n\r\nlet _navigator = getNavigator();\r\nlet _isString = CoreUtils.isString;\r\nlet _uaDisallowsSameSiteNone:boolean = null;\r\n\r\nfunction _endsWith(value:string, search:string) {\r\n let len = value.length;\r\n let start = len - search.length;\r\n return value.substring(start >= 0 ? start : 0, len) === search;\r\n}\r\n\r\nexport class Util {\r\n private static document: any = getDocument()||{};\r\n private static _canUseLocalStorage: boolean = undefined;\r\n private static _canUseSessionStorage: boolean = undefined;\r\n // listing only non-geo specific locations\r\n private static _internalEndpoints: string[] = [\r\n \"https://dc.services.visualstudio.com/v2/track\",\r\n \"https://breeze.aimon.applicationinsights.io/v2/track\",\r\n \"https://dc-int.services.visualstudio.com/v2/track\"\r\n ];\r\n public static NotSpecified = \"not_specified\";\r\n\r\n public static createDomEvent(eventName: string): Event {\r\n let event: Event = null;\r\n\r\n if (CoreUtils.isFunction(Event)) { // Use Event constructor when available\r\n event = new Event(eventName);\r\n } else { // Event has no constructor in IE\r\n let doc = getDocument();\r\n if (doc && doc.createEvent) {\r\n event = doc.createEvent(\"Event\");\r\n event.initEvent(eventName, true, true);\r\n }\r\n }\r\n\r\n return event;\r\n }\r\n\r\n /*\r\n * Force the SDK not to use local and session storage\r\n */\r\n public static disableStorage() {\r\n Util._canUseLocalStorage = false;\r\n Util._canUseSessionStorage = false;\r\n }\r\n\r\n /**\r\n * Gets the localStorage object if available\r\n * @return {Storage} - Returns the storage object if available else returns null\r\n */\r\n private static _getLocalStorageObject(): Storage {\r\n if (Util.canUseLocalStorage()) {\r\n return Util._getVerifiedStorageObject(StorageType.LocalStorage);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Tests storage object (localStorage or sessionStorage) to verify that it is usable\r\n * More details here: https://mathiasbynens.be/notes/localstorage-pattern\r\n * @param storageType Type of storage\r\n * @return {Storage} Returns storage object verified that it is usable\r\n */\r\n private static _getVerifiedStorageObject(storageType: StorageType): Storage {\r\n let storage: Storage = null;\r\n let fail: boolean;\r\n let uid: Date;\r\n try {\r\n if (CoreUtils.isNullOrUndefined(getGlobal())) {\r\n return null;\r\n }\r\n uid = new Date;\r\n storage = storageType === StorageType.LocalStorage ? getGlobalInst(\"localStorage\") : getGlobalInst(\"sessionStorage\");\r\n storage.setItem(uid.toString(), uid.toString());\r\n fail = storage.getItem(uid.toString()) !== uid.toString();\r\n storage.removeItem(uid.toString());\r\n if (fail) {\r\n storage = null;\r\n }\r\n } catch (exception) {\r\n storage = null;\r\n }\r\n\r\n return storage;\r\n }\r\n\r\n /**\r\n * Checks if endpoint URL is application insights internal injestion service URL.\r\n *\r\n * @param endpointUrl Endpoint URL to check.\r\n * @returns {boolean} True if if endpoint URL is application insights internal injestion service URL.\r\n */\r\n public static isInternalApplicationInsightsEndpoint(endpointUrl: string): boolean {\r\n return Util._internalEndpoints.indexOf(endpointUrl.toLowerCase()) !== -1;\r\n }\r\n\r\n /**\r\n * Check if the browser supports local storage.\r\n *\r\n * @returns {boolean} True if local storage is supported.\r\n */\r\n public static canUseLocalStorage(): boolean {\r\n if (Util._canUseLocalStorage === undefined) {\r\n Util._canUseLocalStorage = !!Util._getVerifiedStorageObject(StorageType.LocalStorage);\r\n }\r\n\r\n return Util._canUseLocalStorage;\r\n }\r\n\r\n /**\r\n * Get an object from the browser's local storage\r\n *\r\n * @param {string} name - the name of the object to get from storage\r\n * @returns {string} The contents of the storage object with the given name. Null if storage is not supported.\r\n */\r\n public static getStorage(logger: IDiagnosticLogger, name: string): string {\r\n const storage = Util._getLocalStorageObject();\r\n if (storage !== null) {\r\n try {\r\n return storage.getItem(name);\r\n } catch (e) {\r\n Util._canUseLocalStorage = false;\r\n\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.BrowserCannotReadLocalStorage,\r\n \"Browser failed read of local storage. \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Set the contents of an object in the browser's local storage\r\n *\r\n * @param {string} name - the name of the object to set in storage\r\n * @param {string} data - the contents of the object to set in storage\r\n * @returns {boolean} True if the storage object could be written.\r\n */\r\n public static setStorage(logger: IDiagnosticLogger, name: string, data: string): boolean {\r\n const storage = Util._getLocalStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage.setItem(name, data);\r\n return true;\r\n } catch (e) {\r\n Util._canUseLocalStorage = false;\r\n\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.BrowserCannotWriteLocalStorage,\r\n \"Browser failed write to local storage. \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Remove an object from the browser's local storage\r\n *\r\n * @param {string} name - the name of the object to remove from storage\r\n * @returns {boolean} True if the storage object could be removed.\r\n */\r\n public static removeStorage(logger: IDiagnosticLogger, name: string): boolean {\r\n const storage = Util._getLocalStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage.removeItem(name);\r\n return true;\r\n } catch (e) {\r\n Util._canUseLocalStorage = false;\r\n\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.BrowserFailedRemovalFromLocalStorage,\r\n \"Browser failed removal of local storage item. \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets the sessionStorage object if available\r\n * @return {Storage} - Returns the storage object if available else returns null\r\n */\r\n private static _getSessionStorageObject(): Storage {\r\n if (Util.canUseSessionStorage()) {\r\n return Util._getVerifiedStorageObject(StorageType.SessionStorage);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Check if the browser supports session storage.\r\n *\r\n * @returns {boolean} True if session storage is supported.\r\n */\r\n public static canUseSessionStorage(): boolean {\r\n if (Util._canUseSessionStorage === undefined) {\r\n Util._canUseSessionStorage = !!Util._getVerifiedStorageObject(StorageType.SessionStorage);\r\n }\r\n\r\n return Util._canUseSessionStorage;\r\n }\r\n\r\n /**\r\n * Gets the list of session storage keys\r\n *\r\n * @returns {string[]} List of session storage keys\r\n */\r\n public static getSessionStorageKeys(): string[] {\r\n const keys = [];\r\n\r\n if (Util.canUseSessionStorage()) {\r\n for (const key in getGlobalInst(\"sessionStorage\")) {\r\n keys.push(key);\r\n }\r\n }\r\n return keys;\r\n }\r\n\r\n /**\r\n * Get an object from the browser's session storage\r\n *\r\n * @param {string} name - the name of the object to get from storage\r\n * @returns {string} The contents of the storage object with the given name. Null if storage is not supported.\r\n */\r\n public static getSessionStorage(logger: IDiagnosticLogger, name: string): string {\r\n const storage = Util._getSessionStorageObject();\r\n if (storage !== null) {\r\n try {\r\n return storage.getItem(name);\r\n } catch (e) {\r\n Util._canUseSessionStorage = false;\r\n\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.BrowserCannotReadSessionStorage,\r\n \"Browser failed read of session storage. \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Set the contents of an object in the browser's session storage\r\n *\r\n * @param {string} name - the name of the object to set in storage\r\n * @param {string} data - the contents of the object to set in storage\r\n * @returns {boolean} True if the storage object could be written.\r\n */\r\n public static setSessionStorage(logger: IDiagnosticLogger, name: string, data: string): boolean {\r\n const storage = Util._getSessionStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage.setItem(name, data);\r\n return true;\r\n } catch (e) {\r\n Util._canUseSessionStorage = false;\r\n\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.BrowserCannotWriteSessionStorage,\r\n \"Browser failed write to session storage. \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Remove an object from the browser's session storage\r\n *\r\n * @param {string} name - the name of the object to remove from storage\r\n * @returns {boolean} True if the storage object could be removed.\r\n */\r\n public static removeSessionStorage(logger: IDiagnosticLogger, name: string): boolean {\r\n const storage = Util._getSessionStorageObject();\r\n if (storage !== null) {\r\n try {\r\n storage.removeItem(name);\r\n return true;\r\n } catch (e) {\r\n Util._canUseSessionStorage = false;\r\n\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.BrowserFailedRemovalFromSessionStorage,\r\n \"Browser failed removal of session storage item. \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /*\r\n * Force the SDK not to store and read any data from cookies\r\n */\r\n public static disableCookies() {\r\n CoreUtils.disableCookies();\r\n }\r\n\r\n /*\r\n * helper method to tell if document.cookie object is available\r\n */\r\n public static canUseCookies(logger: IDiagnosticLogger): any {\r\n if (CoreUtils._canUseCookies === undefined) {\r\n CoreUtils._canUseCookies = false;\r\n\r\n try {\r\n CoreUtils._canUseCookies = Util.document.cookie !== undefined;\r\n } catch (e) {\r\n logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.CannotAccessCookie,\r\n \"Cannot access document.cookie - \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n };\r\n }\r\n\r\n return CoreUtils._canUseCookies;\r\n }\r\n\r\n public static disallowsSameSiteNone(userAgent:string) {\r\n if (!_isString(userAgent)) {\r\n return false;\r\n }\r\n \r\n // Cover all iOS based browsers here. This includes:\r\n // - Safari on iOS 12 for iPhone, iPod Touch, iPad\r\n // - WkWebview on iOS 12 for iPhone, iPod Touch, iPad\r\n // - Chrome on iOS 12 for iPhone, iPod Touch, iPad\r\n // All of which are broken by SameSite=None, because they use the iOS networking stack\r\n if (userAgent.indexOf(\"CPU iPhone OS 12\") !== -1 || userAgent.indexOf(\"iPad; CPU OS 12\") !== -1) {\r\n return true;\r\n }\r\n \r\n // Cover Mac OS X based browsers that use the Mac OS networking stack. This includes:\r\n // - Safari on Mac OS X\r\n // This does not include:\r\n // - Internal browser on Mac OS X\r\n // - Chrome on Mac OS X\r\n // - Chromium on Mac OS X\r\n // Because they do not use the Mac OS networking stack.\r\n if (userAgent.indexOf(\"Macintosh; Intel Mac OS X 10_14\") !== -1 && userAgent.indexOf(\"Version/\") !== -1 && userAgent.indexOf(\"Safari\") !== -1) {\r\n return true;\r\n }\r\n \r\n // Cover Mac OS X internal browsers that use the Mac OS networking stack. This includes:\r\n // - Internal browser on Mac OS X\r\n // This does not include:\r\n // - Safari on Mac OS X\r\n // - Chrome on Mac OS X\r\n // - Chromium on Mac OS X\r\n // Because they do not use the Mac OS networking stack.\r\n if (userAgent.indexOf(\"Macintosh; Intel Mac OS X 10_14\") !== -1 && _endsWith(userAgent, \"AppleWebKit/605.1.15 (KHTML, like Gecko)\")) {\r\n return true;\r\n }\r\n \r\n // Cover Chrome 50-69, because some versions are broken by SameSite=None, and none in this range require it.\r\n // Note: this covers some pre-Chromium Edge versions, but pre-Chromim Edge does not require SameSite=None, so this is fine.\r\n // Note: this regex applies to Windows, Mac OS X, and Linux, deliberately.\r\n if (userAgent.indexOf(\"Chrome/5\") !== -1 || userAgent.indexOf(\"Chrome/6\") !== -1) {\r\n return true;\r\n }\r\n \r\n // Unreal Engine runs Chromium 59, but does not advertise as Chrome until 4.23. Treat versions of Unreal\r\n // that don't specify their Chrome version as lacking support for SameSite=None.\r\n if (userAgent.indexOf(\"UnrealEngine\") !== -1 && userAgent.indexOf(\"Chrome\") === -1) {\r\n return true;\r\n }\r\n \r\n // UCBrowser < 12.13.2 ignores Set-Cookie headers with SameSite=None\r\n // NB: this rule isn't complete - you need regex to make a complete rule.\r\n // See: https://www.chromium.org/updates/same-site/incompatible-clients\r\n if (userAgent.indexOf(\"UCBrowser/12\") !== -1 || userAgent.indexOf(\"UCBrowser/11\") !== -1) {\r\n return true;\r\n }\r\n \r\n return false;\r\n }\r\n \r\n /**\r\n * helper method to set userId and sessionId cookie\r\n */\r\n public static setCookie(logger: IDiagnosticLogger, name: string, value: string, domain?: string) {\r\n if (Util.canUseCookies(logger)) {\r\n let domainAttrib = \"\";\r\n let secureAttrib = \"\";\r\n\r\n if (domain) {\r\n domainAttrib = \";domain=\" + domain;\r\n }\r\n\r\n let location = getLocation();\r\n if (location && location.protocol === \"https:\") {\r\n secureAttrib = \";secure\";\r\n if (_uaDisallowsSameSiteNone === null) {\r\n _uaDisallowsSameSiteNone = Util.disallowsSameSiteNone((getNavigator()||{} as Navigator).userAgent);\r\n }\r\n \r\n if (!_uaDisallowsSameSiteNone) {\r\n value = value + \";SameSite=None\"; // SameSite can only be set on secure pages\r\n }\r\n }\r\n\r\n Util.document.cookie = name + \"=\" + value + domainAttrib + \";path=/\" + secureAttrib;\r\n }\r\n }\r\n\r\n public static stringToBoolOrDefault(str: any, defaultValue = false): boolean {\r\n if (str === undefined || str === null) {\r\n return defaultValue;\r\n }\r\n\r\n return str.toString().toLowerCase() === \"true\";\r\n }\r\n\r\n /**\r\n * helper method to access userId and sessionId cookie\r\n */\r\n public static getCookie(logger: IDiagnosticLogger, name: string) {\r\n if (!Util.canUseCookies(logger)) {\r\n return;\r\n }\r\n\r\n let value = \"\";\r\n if (name && name.length) {\r\n const cookieName = name + \"=\";\r\n const cookies = Util.document.cookie.split(\";\");\r\n for (let i = 0; i < cookies.length; i++) {\r\n let cookie = cookies[i];\r\n cookie = Util.trim(cookie);\r\n if (cookie && cookie.indexOf(cookieName) === 0) {\r\n value = cookie.substring(cookieName.length, cookies[i].length);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Deletes a cookie by setting it's expiration time in the past.\r\n * @param name - The name of the cookie to delete.\r\n */\r\n public static deleteCookie(logger: IDiagnosticLogger, name: string) {\r\n if (Util.canUseCookies(logger)) {\r\n // Setting the expiration date in the past immediately removes the cookie\r\n Util.document.cookie = name + \"=;path=/;expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\r\n }\r\n }\r\n\r\n /**\r\n * helper method to trim strings (IE8 does not implement String.prototype.trim)\r\n */\r\n public static trim(str: any): string {\r\n if (!_isString(str)) { return str; }\r\n return str.replace(/^\\s+|\\s+$/g, \"\");\r\n }\r\n\r\n /**\r\n * generate random id string\r\n */\r\n public static newId(): string {\r\n const base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n\r\n let result = \"\";\r\n // tslint:disable-next-line:insecure-random\r\n let random = Math.random() * 1073741824; // 5 symbols in base64, almost maxint\r\n\r\n while (random > 0) {\r\n const char = base64chars.charAt(random % 64);\r\n result += char;\r\n random = Math.floor(random / 64);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * generate a random 32bit number (-0x80000000..0x7FFFFFFF).\r\n */\r\n public static random32() {\r\n return (0x100000000 * Math.random()) | 0;\r\n }\r\n\r\n /**\r\n * generate W3C trace id\r\n */\r\n public static generateW3CId() {\r\n const hexValues = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n // rfc4122 version 4 UUID without dashes and with lowercase letters\r\n let oct = \"\", tmp;\r\n for (let a = 0; a < 4; a++) {\r\n tmp = Util.random32();\r\n oct +=\r\n hexValues[tmp & 0xF] +\r\n hexValues[tmp >> 4 & 0xF] +\r\n hexValues[tmp >> 8 & 0xF] +\r\n hexValues[tmp >> 12 & 0xF] +\r\n hexValues[tmp >> 16 & 0xF] +\r\n hexValues[tmp >> 20 & 0xF] +\r\n hexValues[tmp >> 24 & 0xF] +\r\n hexValues[tmp >> 28 & 0xF];\r\n }\r\n\r\n // \"Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively\"\r\n const clockSequenceHi = hexValues[8 + (Math.random() * 4) | 0];\r\n return oct.substr(0, 8) + oct.substr(9, 4) + \"4\" + oct.substr(13, 3) + clockSequenceHi + oct.substr(16, 3) + oct.substr(19, 12);\r\n }\r\n\r\n /**\r\n * Check if an object is of type Array\r\n */\r\n public static isArray(obj: any): boolean {\r\n return Object[strPrototype].toString.call(obj) === \"[object Array]\";\r\n }\r\n\r\n /**\r\n * Check if an object is of type Error\r\n */\r\n public static isError(obj: any): boolean {\r\n return Object[strPrototype].toString.call(obj) === \"[object Error]\";\r\n }\r\n\r\n /**\r\n * Check if an object is of type Date\r\n */\r\n public static isDate = CoreUtils.isDate;\r\n\r\n // Keeping this name for backward compatibility (for now)\r\n public static toISOStringForIE8 = CoreUtils.toISOString;\r\n\r\n /**\r\n * Gets IE version if we are running on IE, or null otherwise\r\n */\r\n public static getIEVersion(userAgentStr: string = null): number {\r\n const myNav = userAgentStr ? userAgentStr.toLowerCase() : (_navigator ? (_navigator.userAgent ||\"\").toLowerCase() : \"\");\r\n return (myNav.indexOf('msie') !== -1) ? parseInt(myNav.split('msie')[1]) : null;\r\n }\r\n\r\n /**\r\n * Convert ms to c# time span format\r\n */\r\n public static msToTimeSpan(totalms: number): string {\r\n if (isNaN(totalms) || totalms < 0) {\r\n totalms = 0;\r\n }\r\n\r\n totalms = Math.round(totalms);\r\n\r\n let ms = \"\" + totalms % 1000;\r\n let sec = \"\" + Math.floor(totalms / 1000) % 60;\r\n let min = \"\" + Math.floor(totalms / (1000 * 60)) % 60;\r\n let hour = \"\" + Math.floor(totalms / (1000 * 60 * 60)) % 24;\r\n const days = Math.floor(totalms / (1000 * 60 * 60 * 24));\r\n\r\n ms = ms.length === 1 ? \"00\" + ms : ms.length === 2 ? \"0\" + ms : ms;\r\n sec = sec.length < 2 ? \"0\" + sec : sec;\r\n min = min.length < 2 ? \"0\" + min : min;\r\n hour = hour.length < 2 ? \"0\" + hour : hour;\r\n\r\n return (days > 0 ? days + \".\" : \"\") + hour + \":\" + min + \":\" + sec + \".\" + ms;\r\n }\r\n\r\n /**\r\n * Checks if error has no meaningful data inside. Ususally such errors are received by window.onerror when error\r\n * happens in a script from other domain (cross origin, CORS).\r\n */\r\n public static isCrossOriginError(message: string, url: string, lineNumber: number, columnNumber: number, error: Error): boolean {\r\n return (message === \"Script error.\" || message === \"Script error\") && !error;\r\n }\r\n\r\n /**\r\n * Returns string representation of an object suitable for diagnostics logging.\r\n */\r\n public static dump(object: any): string {\r\n const objectTypeDump: string = Object[strPrototype].toString.call(object);\r\n let propertyValueDump: string = \"\";\r\n if (objectTypeDump === \"[object Error]\") {\r\n propertyValueDump = \"{ stack: '\" + object.stack + \"', message: '\" + object.message + \"', name: '\" + object.name + \"'\";\r\n } else if (hasJSON()) {\r\n propertyValueDump = getJSON().stringify(object);\r\n }\r\n\r\n return objectTypeDump + propertyValueDump;\r\n }\r\n\r\n /**\r\n * Returns the name of object if it's an Error. Otherwise, returns empty string.\r\n */\r\n public static getExceptionName(object: any): string {\r\n const objectTypeDump: string = Object[strPrototype].toString.call(object);\r\n if (objectTypeDump === \"[object Error]\") {\r\n return object.name;\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Adds an event handler for the specified event to the window\r\n * @param eventName {string} - The name of the event\r\n * @param callback {any} - The callback function that needs to be executed for the given event\r\n * @return {boolean} - true if the handler was successfully added\r\n */\r\n public static addEventHandler(eventName: string, callback: any): boolean {\r\n return EventHelper.Attach(getWindow(), eventName, callback);\r\n }\r\n\r\n /**\r\n * Tells if a browser supports a Beacon API\r\n */\r\n public static IsBeaconApiSupported(): boolean {\r\n return ('sendBeacon' in _navigator && (_navigator as any).sendBeacon);\r\n }\r\n\r\n public static getExtension(extensions: IPlugin[], identifier: string) {\r\n let extension = null;\r\n let extIx = 0;\r\n\r\n while (!extension && extIx < extensions.length) {\r\n if (extensions[extIx] && extensions[extIx].identifier === identifier) {\r\n extension = extensions[extIx];\r\n }\r\n extIx++;\r\n }\r\n\r\n return extension;\r\n }\r\n}\r\n\r\nexport class UrlHelper {\r\n private static document: any = getDocument()||{};\r\n private static htmlAnchorElement: HTMLAnchorElement;\r\n\r\n public static parseUrl(url: string): HTMLAnchorElement {\r\n if (!UrlHelper.htmlAnchorElement) {\r\n UrlHelper.htmlAnchorElement = !!UrlHelper.document.createElement ? UrlHelper.document.createElement('a') : { host: UrlHelper.parseHost(url) }; // fill host field in the fallback case as that is the only externally required field from this fn\r\n }\r\n\r\n UrlHelper.htmlAnchorElement.href = url;\r\n\r\n return UrlHelper.htmlAnchorElement;\r\n }\r\n\r\n public static getAbsoluteUrl(url: string): string {\r\n let result: string;\r\n const a = UrlHelper.parseUrl(url);\r\n if (a) {\r\n result = a.href;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public static getPathName(url: string): string {\r\n let result: string;\r\n const a = UrlHelper.parseUrl(url);\r\n if (a) {\r\n result = a.pathname;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n public static getCompleteUrl(method: string, absoluteUrl: string) {\r\n if (method) {\r\n return method.toUpperCase() + \" \" + absoluteUrl;\r\n } else {\r\n return absoluteUrl;\r\n }\r\n }\r\n\r\n // Fallback method to grab host from url if document.createElement method is not available\r\n public static parseHost(url: string) {\r\n if (url) {\r\n const match = url.match(/:\\/\\/(www[0-9]?\\.)?(.[^/:]+)/i);\r\n if (match != null && match.length > 2 && _isString(match[2]) && match[2].length > 0) {\r\n return match[2];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\nexport class CorrelationIdHelper {\r\n public static correlationIdPrefix = \"cid-v1:\";\r\n\r\n /**\r\n * Checks if a request url is not on a excluded domain list and if it is safe to add correlation headers.\r\n * Headers are always included if the current domain matches the request domain. If they do not match (CORS),\r\n * they are regexed across correlationHeaderDomains and correlationHeaderExcludedDomains to determine if headers are included.\r\n * Some environments don't give information on currentHost via window.location.host (e.g. Cordova). In these cases, the user must\r\n * manually supply domains to include correlation headers on. Else, no headers will be included at all.\r\n */\r\n public static canIncludeCorrelationHeader(config: ICorrelationConfig, requestUrl: string, currentHost?: string) {\r\n if (config && config.disableCorrelationHeaders) {\r\n return false;\r\n }\r\n\r\n if (!requestUrl) {\r\n return false;\r\n }\r\n\r\n const requestHost = UrlHelper.parseUrl(requestUrl).host.toLowerCase();\r\n if ((!config || !config.enableCorsCorrelation) && requestHost !== currentHost) {\r\n return false;\r\n }\r\n\r\n const includedDomains = config && config.correlationHeaderDomains;\r\n if (includedDomains) {\r\n let matchExists: boolean;\r\n CoreUtils.arrForEach(includedDomains, (domain) => {\r\n const regex = new RegExp(domain.toLowerCase().replace(/\\./g, \"\\.\").replace(/\\*/g, \".*\"));\r\n matchExists = matchExists || regex.test(requestHost);\r\n });\r\n\r\n if (!matchExists) {\r\n return false;\r\n }\r\n }\r\n\r\n const excludedDomains = config && config.correlationHeaderExcludedDomains;\r\n if (!excludedDomains || excludedDomains.length === 0) {\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < excludedDomains.length; i++) {\r\n const regex = new RegExp(excludedDomains[i].toLowerCase().replace(/\\./g, \"\\.\").replace(/\\*/g, \".*\"));\r\n if (regex.test(requestHost)) {\r\n return false;\r\n }\r\n }\r\n\r\n // if we don't know anything about the requestHost, require the user to use included/excludedDomains.\r\n // Previously we always returned false for a falsy requestHost\r\n return requestHost && requestHost.length > 0;\r\n }\r\n\r\n /**\r\n * Combines target appId and target role name from response header.\r\n */\r\n public static getCorrelationContext(responseHeader: string) {\r\n if (responseHeader) {\r\n const correlationId = CorrelationIdHelper.getCorrelationContextValue(responseHeader, RequestHeaders.requestContextTargetKey);\r\n if (correlationId && correlationId !== CorrelationIdHelper.correlationIdPrefix) {\r\n return correlationId;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets key from correlation response header\r\n */\r\n public static getCorrelationContextValue(responseHeader: string, key: string) {\r\n if (responseHeader) {\r\n const keyValues = responseHeader.split(\",\");\r\n for (let i = 0; i < keyValues.length; ++i) {\r\n const keyValue = keyValues[i].split(\"=\");\r\n if (keyValue.length === 2 && keyValue[0] === key) {\r\n return keyValue[1];\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class AjaxHelper {\r\n public static ParseDependencyPath(logger: IDiagnosticLogger, absoluteUrl: string, method: string, commandName: string) {\r\n let target, name = commandName, data = commandName;\r\n\r\n if (absoluteUrl && absoluteUrl.length > 0) {\r\n const parsedUrl: HTMLAnchorElement = UrlHelper.parseUrl(absoluteUrl)\r\n target = parsedUrl.host;\r\n if (!name) {\r\n if (parsedUrl.pathname != null) {\r\n let pathName: string = (parsedUrl.pathname.length === 0) ? \"/\" : parsedUrl.pathname;\r\n if (pathName.charAt(0) !== '/') {\r\n pathName = \"/\" + pathName;\r\n }\r\n data = parsedUrl.pathname;\r\n name = DataSanitizer.sanitizeString(logger, method ? method + \" \" + pathName : pathName);\r\n } else {\r\n name = DataSanitizer.sanitizeString(logger, absoluteUrl);\r\n }\r\n }\r\n } else {\r\n target = commandName;\r\n name = commandName;\r\n }\r\n\r\n return {\r\n target,\r\n name,\r\n data\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * A utility class that helps getting time related parameters\r\n */\r\nexport class DateTimeUtils {\r\n /**\r\n * Get the number of milliseconds since 1970/01/01 in local timezone\r\n */\r\n public static Now = () => {\r\n // returns the window or webworker performance object\r\n let perf = getPerformance();\r\n if (perf && perf.now && perf.timing) {\r\n return perf.now() + perf.timing.navigationStart\r\n }\r\n \r\n return new Date().getTime()\r\n };\r\n\r\n /**\r\n * Gets duration between two timestamps\r\n */\r\n public static GetDuration = (start: number, end: number): number => {\r\n let result = null;\r\n if (start !== 0 && end !== 0 && !CoreUtils.isNullOrUndefined(start) && !CoreUtils.isNullOrUndefined(end)) {\r\n result = end - start;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\n/**\r\n * Type of the metric data measurement.\r\n */\r\nexport enum DataPointType {\r\n Measurement = 0,\r\n Aggregation = 1,\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { Util } from \"./Util\";\r\nimport { DataSanitizer } from \"./Telemetry/Common/DataSanitizer\";\r\nimport { ITelemetryItem, CoreUtils, IDiagnosticLogger } from \"@microsoft/applicationinsights-core-js\";\r\n\r\nexport class TelemetryItemCreator {\r\n\r\n /**\r\n * Create a telemetry item that the 1DS channel understands\r\n * @param item domain specific properties; part B\r\n * @param baseType telemetry item type. ie PageViewData\r\n * @param envelopeName name of the envelope. ie Microsoft.ApplicationInsights..PageView\r\n * @param customProperties user defined custom properties; part C\r\n * @param systemProperties system properties that are added to the context; part A\r\n * @returns ITelemetryItem that is sent to channel\r\n */\r\n\r\n public static create(item: T,\r\n baseType: string,\r\n envelopeName: string,\r\n logger: IDiagnosticLogger,\r\n customProperties?: { [key: string]: any },\r\n systemProperties?: { [key: string]: any }): ITelemetryItem {\r\n\r\n envelopeName = DataSanitizer.sanitizeString(logger, envelopeName) || Util.NotSpecified;\r\n\r\n if (CoreUtils.isNullOrUndefined(item) ||\r\n CoreUtils.isNullOrUndefined(baseType) ||\r\n CoreUtils.isNullOrUndefined(envelopeName)) {\r\n throw Error(\"Input doesn't contain all required fields\");\r\n }\r\n\r\n const telemetryItem: ITelemetryItem = {\r\n name: envelopeName,\r\n time: CoreUtils.toISOString(new Date()),\r\n iKey: \"\", // this will be set in TelemetryContext\r\n ext: systemProperties ? systemProperties : {}, // part A\r\n tags: [],\r\n data: {\r\n },\r\n baseType,\r\n baseData: item // Part B\r\n };\r\n\r\n // Part C\r\n if (!CoreUtils.isNullOrUndefined(customProperties)) {\r\n for (const prop in customProperties) {\r\n if (customProperties.hasOwnProperty(prop)) {\r\n telemetryItem.data[prop] = customProperties[prop];\r\n }\r\n }\r\n }\r\n\r\n return telemetryItem;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\n\r\n/**\r\n * The abstract common base of all domains.\r\n */\r\nexport class Domain {\r\n\r\n constructor() {\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { Domain } from './Domain';\r\n\r\n/**\r\n * Instances of Event represent structured event records that can be grouped and searched by their properties. Event data item also creates a metric of event count by name.\r\n */\r\nexport class EventData extends Domain {\r\n\r\n /**\r\n * Schema version\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * Event name. Keep it low cardinality to allow proper grouping and useful metrics.\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Collection of custom properties.\r\n */\r\n public properties: any;\r\n\r\n /**\r\n * Collection of custom measurements.\r\n */\r\n public measurements: any;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.ver = 2;\r\n this.properties = {};\r\n this.measurements = {};\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { IDiagnosticLogger } from '@microsoft/applicationinsights-core-js';\r\nimport { EventData } from '../Interfaces/Contracts/Generated/EventData';\r\nimport { ISerializable } from '../Interfaces/Telemetry/ISerializable';\r\nimport { DataSanitizer } from './Common/DataSanitizer';\r\nimport { FieldType } from '../Enums';\r\nimport { Util } from '../Util';\r\n\r\nexport class Event extends EventData implements ISerializable {\r\n\r\n public static envelopeType = \"Microsoft.ApplicationInsights.{0}.Event\";\r\n public static dataType = \"EventData\";\r\n\r\n public aiDataContract = {\r\n ver: FieldType.Required,\r\n name: FieldType.Required,\r\n properties: FieldType.Default,\r\n measurements: FieldType.Default\r\n }\r\n\r\n /**\r\n * Constructs a new instance of the EventTelemetry object\r\n */\r\n constructor(logger: IDiagnosticLogger, name: string, properties?: any, measurements?: any) {\r\n\r\n super();\r\n\r\n this.name = DataSanitizer.sanitizeString(logger, name) || Util.NotSpecified;\r\n this.properties = DataSanitizer.sanitizeProperties(logger, properties);\r\n this.measurements = DataSanitizer.sanitizeMeasurements(logger, measurements);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { MessageData } from '../Interfaces/Contracts/Generated/MessageData';\r\nimport { ISerializable } from '../Interfaces/Telemetry/ISerializable';\r\nimport { DataSanitizer } from './Common/DataSanitizer';\r\nimport { FieldType } from '../Enums';\r\nimport { SeverityLevel } from '../Interfaces/Contracts/Generated/SeverityLevel';\r\nimport { Util } from '../Util';\r\nimport { IDiagnosticLogger } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class Trace extends MessageData implements ISerializable {\r\n\r\n public static envelopeType = \"Microsoft.ApplicationInsights.{0}.Message\";\r\n public static dataType = \"MessageData\";\r\n\r\n public aiDataContract = {\r\n ver: FieldType.Required,\r\n message: FieldType.Required,\r\n severityLevel: FieldType.Default,\r\n properties: FieldType.Default\r\n };\r\n\r\n /**\r\n * Constructs a new instance of the TraceTelemetry object\r\n */\r\n constructor(logger: IDiagnosticLogger, message: string, severityLevel?: SeverityLevel, properties?: any, measurements?: { [key: string]: number }) {\r\n super();\r\n message = message || Util.NotSpecified;\r\n this.message = DataSanitizer.sanitizeMessage(logger, message);\r\n this.properties = DataSanitizer.sanitizeProperties(logger, properties);\r\n this.measurements = DataSanitizer.sanitizeMeasurements(logger, measurements);\r\n\r\n if (severityLevel) {\r\n this.severityLevel = severityLevel;\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { Domain } from './Domain';\r\nimport { SeverityLevel } from './SeverityLevel';\r\n\r\n/**\r\n * Instances of Message represent printf-like trace statements that are text-searched. Log4Net, NLog and other text-based log file entries are translated into intances of this type. The message does not have measurements.\r\n */\r\nexport class MessageData extends Domain {\r\n\r\n /**\r\n * Schema version\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * Trace message\r\n */\r\n public message: string;\r\n\r\n /**\r\n * Trace severity level.\r\n */\r\n public severityLevel: SeverityLevel;\r\n\r\n /**\r\n * Collection of custom properties.\r\n */\r\n public properties: any;\r\n\r\n /**\r\n * Collection of custom measurements.\r\n */\r\n public measurements: any;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.ver = 2;\r\n this.properties = {};\r\n this.measurements = {};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { Domain } from './Domain';\r\nimport { DataPoint } from './DataPoint';\r\n\r\n/**\r\n * An instance of the Metric item is a list of measurements (single data points) and/or aggregations.\r\n */\r\nexport class MetricData extends Domain {\r\n\r\n /**\r\n * Schema version\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * List of metrics. Only one metric in the list is currently supported by Application Insights storage. If multiple data points were sent only the first one will be used.\r\n */\r\n public metrics: DataPoint[];\r\n\r\n /**\r\n * Collection of custom properties.\r\n */\r\n public properties: any;\r\n\r\n /**\r\n * Collection of custom measurements.\r\n */\r\n public measurements: any;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.ver = 2;\r\n this.metrics = [];\r\n this.properties = {};\r\n this.measurements = {};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { DataPointType } from './DataPointType';\r\n\r\n/**\r\n * Metric data single measurement.\r\n */\r\nexport class DataPoint {\r\n\r\n /**\r\n * Name of the metric.\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Metric type. Single measurement or the aggregated value.\r\n */\r\n public kind: DataPointType;\r\n\r\n /**\r\n * Single value for measurement. Sum of individual measurements for the aggregation.\r\n */\r\n public value: number;\r\n\r\n /**\r\n * Metric weight of the aggregated metric. Should not be set for a measurement.\r\n */\r\n public count: number;\r\n\r\n /**\r\n * Minimum value of the aggregated metric. Should not be set for a measurement.\r\n */\r\n public min: number;\r\n\r\n /**\r\n * Maximum value of the aggregated metric. Should not be set for a measurement.\r\n */\r\n public max: number;\r\n\r\n /**\r\n * Standard deviation of the aggregated metric. Should not be set for a measurement.\r\n */\r\n public stdDev: number;\r\n\r\n constructor() {\r\n this.kind = DataPointType.Measurement;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\n\r\n/**\r\n * Defines the level of severity for the event.\r\n */\r\nexport enum SeverityLevel {\r\n Verbose = 0,\r\n Information = 1,\r\n Warning = 2,\r\n Error = 3,\r\n Critical = 4,\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { DataPoint as AIDataPoint } from '../../Interfaces/Contracts/Generated/DataPoint';\r\nimport { ISerializable } from '../../Interfaces/Telemetry/ISerializable';\r\nimport { FieldType } from '../../Enums';\r\n\r\nexport class DataPoint extends AIDataPoint implements ISerializable {\r\n\r\n /**\r\n * The data contract for serializing this object.\r\n */\r\n public aiDataContract = {\r\n name: FieldType.Required,\r\n kind: FieldType.Default,\r\n value: FieldType.Required,\r\n count: FieldType.Default,\r\n min: FieldType.Default,\r\n max: FieldType.Default,\r\n stdDev: FieldType.Default\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { MetricData } from '../Interfaces/Contracts/Generated/MetricData';\r\nimport { ISerializable } from '../Interfaces/Telemetry/ISerializable';\r\nimport { DataSanitizer } from './Common/DataSanitizer';\r\nimport { FieldType } from '../Enums';\r\nimport { DataPoint } from './Common/DataPoint';\r\nimport { Util } from '../Util';\r\nimport { IDiagnosticLogger } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class Metric extends MetricData implements ISerializable {\r\n\r\n public static envelopeType = \"Microsoft.ApplicationInsights.{0}.Metric\";\r\n public static dataType = \"MetricData\";\r\n\r\n public aiDataContract = {\r\n ver: FieldType.Required,\r\n metrics: FieldType.Required,\r\n properties: FieldType.Default\r\n }\r\n\r\n /**\r\n * Constructs a new instance of the MetricTelemetry object\r\n */\r\n constructor(logger: IDiagnosticLogger, name: string, value: number, count?: number, min?: number, max?: number, properties?: any, measurements?: { [key: string]: number }) {\r\n super();\r\n\r\n const dataPoint = new DataPoint();\r\n dataPoint.count = count > 0 ? count : undefined;\r\n dataPoint.max = isNaN(max) || max === null ? undefined : max;\r\n dataPoint.min = isNaN(min) || min === null ? undefined : min;\r\n dataPoint.name = DataSanitizer.sanitizeString(logger, name) || Util.NotSpecified;\r\n dataPoint.value = value;\r\n\r\n this.metrics = [dataPoint];\r\n this.properties = DataSanitizer.sanitizeProperties(logger, properties);\r\n this.measurements = DataSanitizer.sanitizeMeasurements(logger, measurements);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { EventData } from './EventData';\r\n\r\n/**\r\n * An instance of PageView represents a generic action on a page like a button click. It is also the base type for PageView.\r\n */\r\nexport class PageViewData extends EventData {\r\n\r\n /**\r\n * Schema version\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * Request URL with all query string parameters\r\n */\r\n public url: string;\r\n\r\n /**\r\n * Event name. Keep it low cardinality to allow proper grouping and useful metrics.\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Request duration in format: DD.HH:MM:SS.MMMMMM. For a page view (PageViewData), this is the duration. For a page view with performance information (PageViewPerfData), this is the page load time. Must be less than 1000 days.\r\n */\r\n public duration: string;\r\n\r\n /**\r\n * Identifier of a page view instance. Used for correlation between page view and other telemetry items.\r\n */\r\n public id: string;\r\n\r\n /**\r\n * Collection of custom properties.\r\n */\r\n public properties: any;\r\n\r\n /**\r\n * Collection of custom measurements.\r\n */\r\n public measurements: any;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.ver = 2;\r\n this.properties = {};\r\n this.measurements = {};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { PageViewData } from '../Interfaces/Contracts/Generated/PageViewData';\r\nimport { DataSanitizer } from './Common/DataSanitizer';\r\nimport { ISerializable } from '../Interfaces/Telemetry/ISerializable';\r\nimport { FieldType } from '../Enums';\r\nimport { Util } from '../Util';\r\nimport { IDiagnosticLogger } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class PageView extends PageViewData implements ISerializable {\r\n\r\n public static envelopeType = \"Microsoft.ApplicationInsights.{0}.Pageview\";\r\n public static dataType = \"PageviewData\";\r\n\r\n public aiDataContract = {\r\n ver: FieldType.Required,\r\n name: FieldType.Default,\r\n url: FieldType.Default,\r\n duration: FieldType.Default,\r\n properties: FieldType.Default,\r\n measurements: FieldType.Default,\r\n id: FieldType.Default\r\n }\r\n\r\n /**\r\n * Constructs a new instance of the PageEventTelemetry object\r\n */\r\n constructor(logger: IDiagnosticLogger, name?: string, url?: string, durationMs?: number, properties?: {[key: string]: string}, measurements?: {[key: string]: number}, id?: string) {\r\n super();\r\n\r\n this.id = DataSanitizer.sanitizeId(logger, id);\r\n this.url = DataSanitizer.sanitizeUrl(logger, url);\r\n this.name = DataSanitizer.sanitizeString(logger, name) || Util.NotSpecified;\r\n if (!isNaN(durationMs)) {\r\n this.duration = Util.msToTimeSpan(durationMs);\r\n }\r\n this.properties = DataSanitizer.sanitizeProperties(logger, properties);\r\n this.measurements = DataSanitizer.sanitizeMeasurements(logger, measurements);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { PageViewPerfData } from '../Interfaces/Contracts/Generated/PageViewPerfData';\r\nimport { FieldType } from '../Enums';\r\nimport { ISerializable } from '../Interfaces/Telemetry/ISerializable';\r\nimport { DataSanitizer } from './Common/DataSanitizer';\r\nimport { Util } from '../Util';\r\nimport { IDiagnosticLogger, _InternalMessageId, LoggingSeverity } from '@microsoft/applicationinsights-core-js';\r\nimport { IPageViewPerformanceTelemetry } from '../Interfaces/IPageViewPerformanceTelemetry';\r\n\r\n\r\nexport class PageViewPerformance extends PageViewPerfData implements ISerializable {\r\n\r\n public static envelopeType = \"Microsoft.ApplicationInsights.{0}.PageviewPerformance\";\r\n public static dataType = \"PageviewPerformanceData\";\r\n\r\n public aiDataContract = {\r\n ver: FieldType.Required,\r\n name: FieldType.Default,\r\n url: FieldType.Default,\r\n duration: FieldType.Default,\r\n perfTotal: FieldType.Default,\r\n networkConnect: FieldType.Default,\r\n sentRequest: FieldType.Default,\r\n receivedResponse: FieldType.Default,\r\n domProcessing: FieldType.Default,\r\n properties: FieldType.Default,\r\n measurements: FieldType.Default\r\n };\r\n\r\n /**\r\n * Constructs a new instance of the PageEventTelemetry object\r\n */\r\n constructor(logger: IDiagnosticLogger, name: string, url: string, unused: number, properties?: { [key: string]: string }, measurements?: { [key: string]: number }, cs4BaseData?: IPageViewPerformanceTelemetry) {\r\n super();\r\n this.url = DataSanitizer.sanitizeUrl(logger, url);\r\n this.name = DataSanitizer.sanitizeString(logger, name) || Util.NotSpecified;\r\n\r\n this.properties = DataSanitizer.sanitizeProperties(logger, properties);\r\n this.measurements = DataSanitizer.sanitizeMeasurements(logger, measurements);\r\n\r\n if (cs4BaseData) {\r\n this.domProcessing = cs4BaseData.domProcessing;\r\n this.duration = cs4BaseData.duration\r\n this.networkConnect = cs4BaseData.networkConnect;\r\n this.perfTotal = cs4BaseData.perfTotal;\r\n this.receivedResponse = cs4BaseData.receivedResponse;\r\n this.sentRequest = cs4BaseData.sentRequest;\r\n }\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { PageViewData } from './PageViewData';\r\n\r\n/**\r\n * An instance of PageViewPerf represents: a page view with no performance data, a page view with performance data, or just the performance data of an earlier page request.\r\n */\r\nexport class PageViewPerfData extends PageViewData {\r\n\r\n /**\r\n * Schema version\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * Request URL with all query string parameters\r\n */\r\n public url: string;\r\n\r\n /**\r\n * Performance total in TimeSpan 'G' (general long) format: d:hh:mm:ss.fffffff\r\n */\r\n public perfTotal: string;\r\n\r\n /**\r\n * Event name. Keep it low cardinality to allow proper grouping and useful metrics.\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Request duration in format: DD.HH:MM:SS.MMMMMM. For a page view (PageViewData), this is the duration. For a page view with performance information (PageViewPerfData), this is the page load time. Must be less than 1000 days.\r\n */\r\n public duration: string;\r\n\r\n /**\r\n * Network connection time in TimeSpan 'G' (general long) format: d:hh:mm:ss.fffffff\r\n */\r\n public networkConnect: string;\r\n\r\n /**\r\n * Sent request time in TimeSpan 'G' (general long) format: d:hh:mm:ss.fffffff\r\n */\r\n public sentRequest: string;\r\n\r\n /**\r\n * Received response time in TimeSpan 'G' (general long) format: d:hh:mm:ss.fffffff\r\n */\r\n public receivedResponse: string;\r\n\r\n /**\r\n * DOM processing time in TimeSpan 'G' (general long) format: d:hh:mm:ss.fffffff\r\n */\r\n public domProcessing: string;\r\n\r\n /**\r\n * Collection of custom properties.\r\n */\r\n public properties: any;\r\n\r\n /**\r\n * Collection of custom measurements.\r\n */\r\n public measurements: any;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.ver = 2;\r\n this.properties = {};\r\n this.measurements = {};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\n/**\r\n * Stack frame information.\r\n */\r\nexport class StackFrame {\r\n\r\n /**\r\n * Level in the call stack. For the long stacks SDK may not report every function in a call stack.\r\n */\r\n public level: number;\r\n\r\n /**\r\n * Method name.\r\n */\r\n public method: string;\r\n\r\n /**\r\n * Name of the assembly (dll, jar, etc.) containing this function.\r\n */\r\n public assembly: string;\r\n\r\n /**\r\n * File name or URL of the method implementation.\r\n */\r\n public fileName: string;\r\n\r\n /**\r\n * Line number of the code implementation.\r\n */\r\n public line: number;\r\n\r\n constructor() {\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { StackFrame } from './StackFrame';\r\n\r\n/**\r\n * Exception details of the exception in a chain.\r\n */\r\nexport class ExceptionDetails {\r\n\r\n /**\r\n * In case exception is nested (outer exception contains inner one), the id and outerId properties are used to represent the nesting.\r\n */\r\n public id: number;\r\n\r\n /**\r\n * The value of outerId is a reference to an element in ExceptionDetails that represents the outer exception\r\n */\r\n public outerId: number;\r\n\r\n /**\r\n * Exception type name.\r\n */\r\n public typeName: string;\r\n\r\n /**\r\n * Exception message.\r\n */\r\n public message: string;\r\n\r\n /**\r\n * Indicates if full exception stack is provided in the exception. The stack may be trimmed, such as in the case of a StackOverflow exception.\r\n */\r\n public hasFullStack: boolean;\r\n\r\n /**\r\n * Text describing the stack. Either stack or parsedStack should have a value.\r\n */\r\n public stack: string;\r\n\r\n /**\r\n * List of stack frames. Either stack or parsedStack should have a value.\r\n */\r\n public parsedStack: StackFrame[];\r\n\r\n constructor() {\r\n this.hasFullStack = true;\r\n this.parsedStack = [];\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { StackFrame } from '../Interfaces/Contracts/Generated/StackFrame';\r\nimport { ExceptionData } from '../Interfaces/Contracts/Generated/ExceptionData';\r\nimport { ExceptionDetails } from '../Interfaces/Contracts/Generated/ExceptionDetails';\r\nimport { ISerializable } from '../Interfaces/Telemetry/ISerializable';\r\nimport { DataSanitizer } from './Common/DataSanitizer';\r\nimport { FieldType } from '../Enums';\r\nimport { SeverityLevel } from '../Interfaces/Contracts/Generated/SeverityLevel';\r\nimport { Util } from '../Util';\r\nimport { IDiagnosticLogger, CoreUtils } from '@microsoft/applicationinsights-core-js';\r\nimport { IExceptionInternal, IExceptionDetailsInternal, IExceptionStackFrameInternal } from '../Interfaces/IExceptionTelemetry';\r\n\r\nexport class Exception extends ExceptionData implements ISerializable {\r\n\r\n public static envelopeType = \"Microsoft.ApplicationInsights.{0}.Exception\";\r\n public static dataType = \"ExceptionData\";\r\n\r\n public id?: string;\r\n public problemGroup?: string;\r\n public isManual?: boolean;\r\n\r\n\r\n public aiDataContract = {\r\n ver: FieldType.Required,\r\n exceptions: FieldType.Required,\r\n severityLevel: FieldType.Default,\r\n properties: FieldType.Default,\r\n measurements: FieldType.Default\r\n }\r\n\r\n /**\r\n * Constructs a new instance of the ExceptionTelemetry object\r\n */\r\n constructor(logger: IDiagnosticLogger, exception: Error | IExceptionInternal, properties?: {[key: string]: any}, measurements?: {[key: string]: number}, severityLevel?: SeverityLevel, id?: string) {\r\n super();\r\n\r\n if (exception instanceof Error) {\r\n this.exceptions = [new _ExceptionDetails(logger, exception)];\r\n this.properties = DataSanitizer.sanitizeProperties(logger, properties);\r\n this.measurements = DataSanitizer.sanitizeMeasurements(logger, measurements);\r\n if (severityLevel) { this.severityLevel = severityLevel; }\r\n if (id) { this.id = id; }\r\n } else {\r\n this.exceptions = exception.exceptions;\r\n this.properties = exception.properties;\r\n this.measurements = exception.measurements;\r\n if (exception.severityLevel) { this.severityLevel = exception.severityLevel; }\r\n if (exception.id) { this.id = exception.id; }\r\n if (exception.problemGroup) { this.problemGroup = exception.problemGroup; }\r\n\r\n // bool/int types, use isNullOrUndefined\r\n this.ver = 2; // TODO: handle the CS\"4.0\" ==> breeze 2 conversion in a better way\r\n if (!CoreUtils.isNullOrUndefined(exception.isManual)) { this.isManual = exception.isManual; }\r\n }\r\n\r\n }\r\n\r\n public static CreateFromInterface(logger: IDiagnosticLogger, exception: IExceptionInternal): Exception {\r\n const exceptions: _ExceptionDetails[] = exception.exceptions\r\n && CoreUtils.arrMap(exception.exceptions, (ex: IExceptionDetailsInternal) => _ExceptionDetails.CreateFromInterface(logger, ex));\r\n const exceptionData = new Exception(logger, {...exception, exceptions});\r\n return exceptionData;\r\n }\r\n\r\n public toInterface(): IExceptionInternal {\r\n const { exceptions, properties, measurements, severityLevel, ver, problemGroup, id, isManual } = this;\r\n\r\n const exceptionDetailsInterface = exceptions instanceof Array\r\n && CoreUtils.arrMap(exceptions, (exception: _ExceptionDetails) => exception.toInterface())\r\n || undefined;\r\n\r\n return {\r\n ver: \"4.0\", // TODO: handle the CS\"4.0\" ==> breeze 2 conversion in a better way\r\n exceptions: exceptionDetailsInterface,\r\n severityLevel,\r\n properties,\r\n measurements,\r\n problemGroup,\r\n id,\r\n isManual\r\n } as IExceptionInternal;\r\n }\r\n\r\n /**\r\n * Creates a simple exception with 1 stack frame. Useful for manual constracting of exception.\r\n */\r\n public static CreateSimpleException(message: string, typeName: string, assembly: string, fileName: string,\r\n details: string, line: number): Exception {\r\n\r\n return {\r\n exceptions: [\r\n {\r\n hasFullStack: true,\r\n message,\r\n stack: details,\r\n typeName\r\n } as ExceptionDetails\r\n ]\r\n } as Exception;\r\n }\r\n}\r\n\r\nexport class _ExceptionDetails extends ExceptionDetails implements ISerializable {\r\n\r\n public aiDataContract = {\r\n id: FieldType.Default,\r\n outerId: FieldType.Default,\r\n typeName: FieldType.Required,\r\n message: FieldType.Required,\r\n hasFullStack: FieldType.Default,\r\n stack: FieldType.Default,\r\n parsedStack: FieldType.Array\r\n };\r\n\r\n constructor(logger: IDiagnosticLogger, exception: Error | IExceptionDetailsInternal) {\r\n super();\r\n\r\n if (exception instanceof Error) {\r\n this.typeName = DataSanitizer.sanitizeString(logger, exception.name) || Util.NotSpecified;\r\n this.message = DataSanitizer.sanitizeMessage(logger, exception.message) || Util.NotSpecified;\r\n const stack = exception.stack;\r\n this.parsedStack = _ExceptionDetails.parseStack(stack);\r\n this.stack = DataSanitizer.sanitizeException(logger, stack);\r\n this.hasFullStack = Util.isArray(this.parsedStack) && this.parsedStack.length > 0;\r\n } else {\r\n this.typeName = exception.typeName;\r\n this.message = exception.message;\r\n this.stack = exception.stack;\r\n this.parsedStack = exception.parsedStack\r\n this.hasFullStack = exception.hasFullStack\r\n }\r\n }\r\n\r\n public toInterface(): IExceptionDetailsInternal {\r\n const parsedStack = this.parsedStack instanceof Array\r\n && CoreUtils.arrMap(this.parsedStack, (frame: _StackFrame) => frame.toInterface());\r\n\r\n const exceptionDetailsInterface: IExceptionDetailsInternal = {\r\n id: this.id,\r\n outerId: this.outerId,\r\n typeName: this.typeName,\r\n message: this.message,\r\n hasFullStack: this.hasFullStack,\r\n stack: this.stack,\r\n parsedStack: parsedStack || undefined\r\n };\r\n\r\n return exceptionDetailsInterface;\r\n }\r\n\r\n public static CreateFromInterface(logger:IDiagnosticLogger, exception: IExceptionDetailsInternal): _ExceptionDetails {\r\n const parsedStack = (exception.parsedStack instanceof Array\r\n &&CoreUtils.arrMap(exception.parsedStack, frame => _StackFrame.CreateFromInterface(frame)))\r\n || exception.parsedStack;\r\n\r\n const exceptionDetails = new _ExceptionDetails(logger, {...exception, parsedStack});\r\n\r\n return exceptionDetails;\r\n }\r\n\r\n private static parseStack(stack?:string): _StackFrame[] {\r\n let parsedStack: _StackFrame[];\r\n if (CoreUtils.isString(stack)) {\r\n const frames = stack.split('\\n');\r\n parsedStack = [];\r\n let level = 0;\r\n\r\n let totalSizeInBytes = 0;\r\n for (let i = 0; i <= frames.length; i++) {\r\n const frame = frames[i];\r\n if (_StackFrame.regex.test(frame)) {\r\n const parsedFrame = new _StackFrame(frames[i], level++);\r\n totalSizeInBytes += parsedFrame.sizeInBytes;\r\n parsedStack.push(parsedFrame);\r\n }\r\n }\r\n\r\n // DP Constraint - exception parsed stack must be < 32KB\r\n // remove frames from the middle to meet the threshold\r\n const exceptionParsedStackThreshold = 32 * 1024;\r\n if (totalSizeInBytes > exceptionParsedStackThreshold) {\r\n let left = 0;\r\n let right = parsedStack.length - 1;\r\n let size = 0;\r\n let acceptedLeft = left;\r\n let acceptedRight = right;\r\n\r\n while (left < right) {\r\n // check size\r\n const lSize = parsedStack[left].sizeInBytes;\r\n const rSize = parsedStack[right].sizeInBytes;\r\n size += lSize + rSize;\r\n\r\n if (size > exceptionParsedStackThreshold) {\r\n\r\n // remove extra frames from the middle\r\n const howMany = acceptedRight - acceptedLeft + 1;\r\n parsedStack.splice(acceptedLeft, howMany);\r\n break;\r\n }\r\n\r\n // update pointers\r\n acceptedLeft = left;\r\n acceptedRight = right;\r\n\r\n left++;\r\n right--;\r\n }\r\n }\r\n }\r\n\r\n return parsedStack;\r\n }\r\n}\r\n\r\nexport class _StackFrame extends StackFrame implements ISerializable {\r\n\r\n // regex to match stack frames from ie/chrome/ff\r\n // methodName=$2, fileName=$4, lineNo=$5, column=$6\r\n public static regex = /^([\\s]+at)?(.*?)(\\@|\\s\\(|\\s)([^\\(\\@\\n]+):([0-9]+):([0-9]+)(\\)?)$/;\r\n public static baseSize = 58; // '{\"method\":\"\",\"level\":,\"assembly\":\"\",\"fileName\":\"\",\"line\":}'.length\r\n public sizeInBytes = 0;\r\n\r\n public aiDataContract = {\r\n level: FieldType.Required,\r\n method: FieldType.Required,\r\n assembly: FieldType.Default,\r\n fileName: FieldType.Default,\r\n line: FieldType.Default,\r\n };\r\n\r\n constructor(sourceFrame: string | IExceptionStackFrameInternal, level: number) {\r\n super();\r\n\r\n // Not converting this to CoreUtils.isString() as typescript uses this logic to \"understand\" the different\r\n // types for the 2 different code paths\r\n if (typeof sourceFrame === \"string\") {\r\n const frame: string = sourceFrame;\r\n this.level = level;\r\n this.method = \"\";\r\n this.assembly = Util.trim(frame);\r\n this.fileName = \"\";\r\n this.line = 0;\r\n const matches = frame.match(_StackFrame.regex);\r\n if (matches && matches.length >= 5) {\r\n this.method = Util.trim(matches[2]) || this.method;\r\n this.fileName = Util.trim(matches[4]);\r\n this.line = parseInt(matches[5]) || 0;\r\n }\r\n } else {\r\n this.level = sourceFrame.level;\r\n this.method = sourceFrame.method;\r\n this.assembly = sourceFrame.assembly;\r\n this.fileName = sourceFrame.fileName;\r\n this.line = sourceFrame.line;\r\n this.sizeInBytes = 0;\r\n }\r\n\r\n this.sizeInBytes += this.method.length;\r\n this.sizeInBytes += this.fileName.length;\r\n this.sizeInBytes += this.assembly.length;\r\n\r\n // todo: these might need to be removed depending on how the back-end settles on their size calculation\r\n this.sizeInBytes += _StackFrame.baseSize;\r\n this.sizeInBytes += this.level.toString().length;\r\n this.sizeInBytes += this.line.toString().length;\r\n }\r\n\r\n public static CreateFromInterface(frame: IExceptionStackFrameInternal) {\r\n return new _StackFrame(frame, null /* level is available in frame interface */);\r\n }\r\n\r\n public toInterface() {\r\n return {\r\n level: this.level,\r\n method: this.method,\r\n assembly: this.assembly,\r\n fileName: this.fileName,\r\n line: this.line\r\n };\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { ExceptionDetails } from './ExceptionDetails';\r\nimport { Domain } from './Domain';\r\nimport { SeverityLevel } from './SeverityLevel';\r\n\r\n/**\r\n * An instance of Exception represents a handled or unhandled exception that occurred during execution of the monitored application.\r\n */\r\nexport class ExceptionData extends Domain {\r\n\r\n /**\r\n * Schema version\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * Exception chain - list of inner exceptions.\r\n */\r\n public exceptions: ExceptionDetails[];\r\n\r\n /**\r\n * Severity level. Mostly used to indicate exception severity level when it is reported by logging library.\r\n */\r\n public severityLevel: SeverityLevel;\r\n\r\n /**\r\n * Collection of custom properties.\r\n */\r\n public properties: any;\r\n\r\n /**\r\n * Collection of custom measurements.\r\n */\r\n public measurements: any;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.ver = 2;\r\n this.exceptions = [];\r\n this.properties = {};\r\n this.measurements = {};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { Domain } from './Domain';\r\n\r\n/**\r\n * An instance of Remote Dependency represents an interaction of the monitored component with a remote component/service like SQL or an HTTP endpoint.\r\n */\r\nexport class RemoteDependencyData extends Domain {\r\n\r\n /**\r\n * Schema version\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * Name of the command initiated with this dependency call. Low cardinality value. Examples are stored procedure name and URL path template.\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Identifier of a dependency call instance. Used for correlation with the request telemetry item corresponding to this dependency call.\r\n */\r\n public id: string;\r\n\r\n /**\r\n * Result code of a dependency call. Examples are SQL error code and HTTP status code.\r\n */\r\n public resultCode: string;\r\n\r\n /**\r\n * Request duration in format: DD.HH:MM:SS.MMMMMM. Must be less than 1000 days.\r\n */\r\n public duration: string;\r\n\r\n /**\r\n * Indication of successfull or unsuccessfull call.\r\n */\r\n public success: boolean;\r\n\r\n /**\r\n * Command initiated by this dependency call. Examples are SQL statement and HTTP URL's with all query parameters.\r\n */\r\n public data: string;\r\n\r\n /**\r\n * Target site of a dependency call. Examples are server name, host address.\r\n */\r\n public target: string;\r\n\r\n /**\r\n * Dependency type name. Very low cardinality value for logical grouping of dependencies and interpretation of other fields like commandName and resultCode. Examples are SQL, Azure table, and HTTP.\r\n */\r\n public type: string;\r\n\r\n /**\r\n * Collection of custom properties.\r\n */\r\n public properties: any;\r\n\r\n /**\r\n * Collection of custom measurements.\r\n */\r\n public measurements: any;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.ver = 2;\r\n this.success = true;\r\n this.properties = {};\r\n this.measurements = {};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { DataSanitizer } from './Common/DataSanitizer';\r\nimport { FieldType } from '../Enums';\r\nimport { ISerializable } from '../Interfaces/Telemetry/ISerializable';\r\nimport { Util, AjaxHelper} from '../Util';\r\nimport { RemoteDependencyData as GeneratedRemoteDependencyData } from '../Interfaces/Contracts/Generated/RemoteDependencyData';\r\nimport { IDiagnosticLogger } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class RemoteDependencyData extends GeneratedRemoteDependencyData implements ISerializable {\r\n\r\n public static envelopeType = \"Microsoft.ApplicationInsights.{0}.RemoteDependency\";\r\n public static dataType = \"RemoteDependencyData\";\r\n\r\n public aiDataContract = {\r\n id: FieldType.Required,\r\n ver: FieldType.Required,\r\n name: FieldType.Default,\r\n resultCode: FieldType.Default,\r\n duration: FieldType.Default,\r\n success: FieldType.Default,\r\n data: FieldType.Default,\r\n target: FieldType.Default,\r\n type: FieldType.Default,\r\n properties: FieldType.Default,\r\n measurements: FieldType.Default,\r\n\r\n kind: FieldType.Default,\r\n value: FieldType.Default,\r\n count: FieldType.Default,\r\n min: FieldType.Default,\r\n max: FieldType.Default,\r\n stdDev: FieldType.Default,\r\n dependencyKind: FieldType.Default,\r\n dependencySource: FieldType.Default,\r\n commandName: FieldType.Default,\r\n dependencyTypeName: FieldType.Default,\r\n }\r\n\r\n /**\r\n * Constructs a new instance of the RemoteDependencyData object\r\n */\r\n constructor(logger: IDiagnosticLogger, id: string, absoluteUrl: string, commandName: string, value: number, success: boolean, resultCode: number, method?: string, requestAPI: string = \"Ajax\", correlationContext?: string, properties?: Object, measurements?: Object) {\r\n super();\r\n\r\n this.id = id;\r\n\r\n this.duration = Util.msToTimeSpan(value);\r\n this.success = success;\r\n this.resultCode = resultCode + \"\";\r\n\r\n this.type = DataSanitizer.sanitizeString(logger, requestAPI);\r\n\r\n const dependencyFields = AjaxHelper.ParseDependencyPath(logger, absoluteUrl, method, commandName);\r\n this.data = DataSanitizer.sanitizeUrl(logger, commandName) || dependencyFields.data; // get a value from hosturl if commandName not available\r\n this.target = DataSanitizer.sanitizeString(logger, dependencyFields.target);\r\n if (correlationContext) {\r\n this.target = `${this.target} | ${correlationContext}`;\r\n }\r\n this.name = DataSanitizer.sanitizeString(logger, dependencyFields.name);\r\n\r\n this.properties = DataSanitizer.sanitizeProperties(logger, properties);\r\n this.measurements = DataSanitizer.sanitizeMeasurements(logger, measurements);\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar Constructor = 'constructor';\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar Prototype = 'prototype';\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar strFunction = 'function';\r\n/**\r\n * Used to define the name of the instance function lookup table\r\n * @ignore\r\n */\r\nvar DynInstFuncTable = '_dynInstFuncs';\r\n/**\r\n * Name used to tag the dynamic prototype function\r\n * @ignore\r\n */\r\nvar DynProxyTag = '_isDynProxy';\r\n/**\r\n * Name added to a prototype to define the dynamic prototype \"class\" name used to lookup the function table\r\n * @ignore\r\n */\r\nvar DynClassName = '_dynClass';\r\n/**\r\n * Prefix added to the classname to avoid any name clashes with other instance level properties\r\n * @ignore\r\n */\r\nvar DynClassNamePrefix = '_dynCls$';\r\n/**\r\n * Value used as the name of a class when it cannot be determined\r\n * @ignore\r\n */\r\nvar UnknownValue = '_unknown_';\r\n/**\r\n * Constant string defined to support minimization\r\n * @ignore\r\n */\r\nvar str__Proto = \"__proto__\";\r\n/**\r\n * Pre-lookup to check if we are running on a modern browser (i.e. not IE8)\r\n * @ignore\r\n */\r\nvar _objGetPrototypeOf = Object[\"getPrototypeOf\"];\r\n/**\r\n * Internal Global used to generate a unique dynamic class name, every new class will increase this value\r\n * @ignore\r\n */\r\nvar _dynamicNames = 0;\r\n/**\r\n * Helper to check if the object contains a property of the name\r\n * @ignore\r\n */\r\nfunction _hasOwnProperty(obj, prop) {\r\n return obj && Object[Prototype].hasOwnProperty.call(obj, prop);\r\n}\r\n/**\r\n * Checks if the passed of value is a function.\r\n * @param {any} value - Value to be checked.\r\n * @return {boolean} True if the value is a boolean, false otherwise.\r\n * @ignore\r\n */\r\nfunction _isFunction(value) {\r\n return typeof value === strFunction;\r\n}\r\n/**\r\n * Helper used to check whether the target is an Object prototype or Array prototype\r\n * @ignore\r\n */\r\nfunction _isObjectOrArrayPrototype(target) {\r\n return target && (target === Object[Prototype] || target === Array[Prototype]);\r\n}\r\n/**\r\n * Helper used to check whether the target is an Object prototype, Array prototype or Function prototype\r\n * @ignore\r\n */\r\nfunction _isObjectArrayOrFunctionPrototype(target) {\r\n return _isObjectOrArrayPrototype(target) || target === Function[Prototype];\r\n}\r\n/**\r\n * Helper used to get the prototype of the target object as getPrototypeOf is not available in an ES3 environment.\r\n * @ignore\r\n */\r\nfunction _getObjProto(target) {\r\n if (target) {\r\n // This method doesn't existing in older browsers (e.g. IE8)\r\n if (_objGetPrototypeOf) {\r\n return _objGetPrototypeOf(target);\r\n }\r\n // target[Constructor] May break if the constructor has been changed or removed\r\n var newProto = target[str__Proto] || target[Prototype] || target[Constructor];\r\n if (newProto) {\r\n return newProto;\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Helper function to check whether the provided function name is a potential candidate for dynamic\r\n * callback and prototype generation.\r\n * @param target The target object, may be a prototpe or class object\r\n * @param funcName The function name\r\n * @param skipOwn Skips the check for own property\r\n * @ignore\r\n */\r\nfunction _isDynamicCandidate(target, funcName, skipOwn) {\r\n return (funcName !== Constructor && _isFunction(target[funcName]) && (skipOwn || _hasOwnProperty(target, funcName)));\r\n}\r\n/**\r\n * Helper to throw a TypeError exception\r\n * @param message the message\r\n * @ignore\r\n */\r\nfunction _throwTypeError(message) {\r\n throw new TypeError(\"DynamicProto: \" + message);\r\n}\r\n/**\r\n * Returns a collection of the instance functions that are defined directly on the thisTarget object, it does\r\n * not return any inherited functions\r\n * @param thisTarget The object to get the instance functions from\r\n * @ignore\r\n */\r\nfunction _getInstanceFuncs(thisTarget) {\r\n // Get the base proto\r\n var instFuncs = {};\r\n // Save any existing instance functions\r\n for (var name in thisTarget) {\r\n // Don't include any dynamic prototype instances - as we only want the real functions\r\n if (!instFuncs[name] && _isDynamicCandidate(thisTarget, name, false)) {\r\n // Create an instance callback for pasing the base function to the caller\r\n instFuncs[name] = thisTarget[name];\r\n }\r\n }\r\n return instFuncs;\r\n}\r\n/**\r\n * Returns whether the value is included in the array\r\n * @param values The array of values\r\n * @param value The value\r\n */\r\nfunction _hasVisited(values, value) {\r\n for (var lp = values.length - 1; lp >= 0; lp--) {\r\n if (values[lp] === value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Returns an object that contains callback functions for all \"base/super\" functions, this is used to \"save\"\r\n * enabling calling super.xxx() functions without requiring that the base \"class\" has defined a prototype references\r\n * @param target The current instance\r\n * @ignore\r\n */\r\nfunction _getBaseFuncs(classProto, thisTarget, instFuncs) {\r\n function _instFuncProxy(target, theFunc) {\r\n return function () {\r\n return theFunc.apply(target, arguments);\r\n };\r\n }\r\n // Start creating a new baseFuncs by creating proxies for the instance functions (as they may get replaced)\r\n var baseFuncs = {};\r\n for (var name in instFuncs) {\r\n // Create an instance callback for pasing the base function to the caller\r\n baseFuncs[name] = _instFuncProxy(thisTarget, instFuncs[name]);\r\n }\r\n // Get the base prototype functions\r\n var baseProto = _getObjProto(classProto);\r\n var visited = [];\r\n // Don't include base object functions for Object, Array or Function\r\n while (baseProto && !_isObjectArrayOrFunctionPrototype(baseProto) && !_hasVisited(visited, baseProto)) {\r\n // look for prototype functions\r\n for (var name in baseProto) {\r\n // Don't include any dynamic prototype instances - as we only want the real functions\r\n // For IE 7/8 the prototype lookup doesn't provide the full chain so we need to bypass the \r\n // hasOwnProperty check we get all of the methods, main difference is that IE7/8 doesn't return\r\n // the Object prototype methods while bypassing the check\r\n if (!baseFuncs[name] && _isDynamicCandidate(baseProto, name, !_objGetPrototypeOf)) {\r\n // Create an instance callback for pasing the base function to the caller\r\n baseFuncs[name] = _instFuncProxy(thisTarget, baseProto[name]);\r\n }\r\n }\r\n // We need to find all possible functions that might be overloaded by walking the entire prototype chain\r\n // This avoids the caller from needing to check whether it's direct base class implements the function or not\r\n // by walking the entire chain it simplifies the usage and issues from upgrading any of the base classes.\r\n visited.push(baseProto);\r\n baseProto = _getObjProto(baseProto);\r\n }\r\n return baseFuncs;\r\n}\r\n/**\r\n * Add the required dynamic prototype methods to the the class prototype\r\n * @param proto The class prototype\r\n * @param className The instance classname\r\n * @param target The target instance\r\n * @param baseInstFuncs The base instance functions\r\n * @ignore\r\n */\r\nfunction _populatePrototype(proto, className, target, baseInstFuncs) {\r\n function _createDynamicPrototype(proto, funcName) {\r\n var dynProtoProxy = function () {\r\n var _this = this;\r\n // We need to check whether the class name is defined directly on this prototype otherwise\r\n // it will walk the proto chain and return any parent proto classname.\r\n if (_this && _hasOwnProperty(proto, DynClassName)) {\r\n var instFunc = ((_this[DynInstFuncTable] || {})[proto[DynClassName]] || {})[funcName];\r\n if (instFunc) {\r\n // Used the instance function property\r\n return instFunc.apply(_this, arguments);\r\n }\r\n // Avoid stack overflow from recursive calling the same function\r\n _throwTypeError(\"Missing [\" + funcName + \"] \" + strFunction);\r\n }\r\n var protoFunc = proto[funcName];\r\n // Check that the prototype function is not a self reference -- try to avoid stack overflow!\r\n if (protoFunc === dynProtoProxy) {\r\n // It is so lookup the base prototype\r\n protoFunc = _getObjProto(proto)[funcName];\r\n }\r\n if (!_isFunction(protoFunc)) {\r\n _throwTypeError(\"[\" + funcName + \"] is not a \" + strFunction);\r\n }\r\n return protoFunc.apply(_this, arguments);\r\n };\r\n // Tag this function as a proxy to support replacing dynamic proxy elements (primary use case is for unit testing\r\n // via which can dynamically replace the prototype function reference)\r\n dynProtoProxy[DynProxyTag] = 1;\r\n return dynProtoProxy;\r\n }\r\n if (!_isObjectOrArrayPrototype(proto)) {\r\n var instFuncTable = target[DynInstFuncTable] = target[DynInstFuncTable] || {};\r\n var instFuncs = instFuncTable[className] = (instFuncTable[className] || {}); // fetch and assign if as it may not exist yet\r\n for (var name in target) {\r\n // Only add overriden functions\r\n if (_isDynamicCandidate(target, name, false) && target[name] !== baseInstFuncs[name]) {\r\n // Save the instance Function to the lookup table and remove it from the instance as it's not a dynamic proto function\r\n instFuncs[name] = target[name];\r\n delete target[name];\r\n // Add a dynamic proto if one doesn't exist or if a prototype function exists and it's not a dynamic one\r\n if (!_hasOwnProperty(proto, name) || (proto[name] && !proto[name][DynProxyTag])) {\r\n proto[name] = _createDynamicPrototype(proto, name);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Checks whether the passed prototype object appears to be correct by walking the prototype heirarchy of the instance\r\n * @param classProto The class prototype instance\r\n * @param thisTarget The current instance that will be checked whther the passed prototype instance is in the heirarchy\r\n * @ignore\r\n */\r\nfunction _checkPrototype(classProto, thisTarget) {\r\n var thisProto = _getObjProto(thisTarget);\r\n while (thisProto && !_isObjectArrayOrFunctionPrototype(thisProto)) {\r\n if (thisProto === classProto) {\r\n return true;\r\n }\r\n thisProto = _getObjProto(thisProto);\r\n }\r\n return false;\r\n}\r\n/**\r\n * Gets the current prototype name using the ES6 name if available otherwise falling back to a use unknown as the name.\r\n * It's not critical for this to return a name, it's used to decorate the generated unique name for easier debugging only.\r\n * @param target\r\n * @param unknownValue\r\n * @ignore\r\n */\r\nfunction _getObjName(target, unknownValue) {\r\n if (_hasOwnProperty(target, Prototype)) {\r\n // Look like a prototype\r\n return target.name || unknownValue || UnknownValue;\r\n }\r\n return (((target || {})[Constructor]) || {}).name || unknownValue || UnknownValue;\r\n}\r\n/**\r\n * Helper function when creating dynamic (inline) functions for classes, this helper performs the following tasks :-\r\n * - Saves references to all defined base class functions\r\n * - Calls the delegateFunc with the current target (this) and a base object reference that can be used to call all \"super\" functions.\r\n * - Will populate the class prototype for all overridden functions to support class extension that call the prototype instance.\r\n * Callers should use this helper when declaring all function within the constructor of a class, as mentioned above the delegateFunc is\r\n * passed both the target \"this\" and an object that can be used to call any base (super) functions, using this based object in place of\r\n * super.XXX() (which gets expanded to _super.prototype.XXX()) provides a better minification outcome and also ensures the correct \"this\"\r\n * context is maintained as TypeScript creates incorrect references using super.XXXX() for dynamically defined functions i.e. Functions\r\n * defined in the constructor or some other function (rather than declared as complete typescript functions).\r\n * ### Usage\r\n * ```typescript\r\n * import dynamicProto from \"@microsoft/dynamicproto-js\";\r\n * class ExampleClass extends BaseClass {\r\n * constructor() {\r\n * dynamicProto(ExampleClass, this, (_self, base) => {\r\n * // This will define a function that will be converted to a prototype function\r\n * _self.newFunc = () => {\r\n * // Access any \"this\" instance property\r\n * if (_self.someProperty) {\r\n * ...\r\n * }\r\n * }\r\n * // This will define a function that will be converted to a prototype function\r\n * _self.myFunction = () => {\r\n * // Access any \"this\" instance property\r\n * if (_self.someProperty) {\r\n * // Call the base version of the function that we are overriding\r\n * base.myFunction();\r\n * }\r\n * ...\r\n * }\r\n * _self.initialize = () => {\r\n * ...\r\n * }\r\n * // Warnings: While the following will work as _self is simply a reference to\r\n * // this, if anyone overrides myFunction() the overridden will be called first\r\n * // as the normal JavaScript method resolution will occur and the defined\r\n * // _self.initialize() function is actually gets removed from the instance and\r\n * // a proxy prototype version is created to reference the created method.\r\n * _self.initialize();\r\n * });\r\n * }\r\n * }\r\n * ```\r\n * @typeparam DPType This is the generic type of the class, used to keep intellisense valid\r\n * @typeparam DPCls The type that contains the prototype of the current class\r\n * @param theClass This is the current class instance which contains the prototype for the current class\r\n * @param target The current \"this\" (target) reference, when the class has been extended this.prototype will not be the 'theClass' value.\r\n * @param delegateFunc The callback function (closure) that will create the dynamic function\r\n */\r\nexport default function dynamicProto(theClass, target, delegateFunc) {\r\n // Make sure that the passed theClass argument looks correct\r\n if (!_hasOwnProperty(theClass, Prototype)) {\r\n _throwTypeError(\"theClass is an invalid class definition.\");\r\n }\r\n // Quick check to make sure that the passed theClass argument looks correct (this is a common copy/paste error)\r\n var classProto = theClass[Prototype];\r\n if (!_checkPrototype(classProto, target)) {\r\n _throwTypeError(\"[\" + _getObjName(theClass) + \"] is not in class heirarchy of [\" + _getObjName(target) + \"]\");\r\n }\r\n var className = null;\r\n if (_hasOwnProperty(classProto, DynClassName)) {\r\n // Only grab the class name if it's defined on this prototype (i.e. don't walk the prototype chain)\r\n className = classProto[DynClassName];\r\n }\r\n else {\r\n // As not all browser support name on the prototype creating a unique dynamic one if we have not already\r\n // assigned one, so we can use a simple string as the lookup rather than an object for the dynamic instance\r\n // function table lookup.\r\n className = DynClassNamePrefix + _getObjName(theClass, \"_\") + \"$\" + _dynamicNames;\r\n _dynamicNames++;\r\n classProto[DynClassName] = className;\r\n }\r\n // Get the current instance functions\r\n var instFuncs = _getInstanceFuncs(target);\r\n // Get all of the functions for any base instance (before they are potentially overriden)\r\n var baseFuncs = _getBaseFuncs(classProto, target, instFuncs);\r\n // Execute the delegate passing in both the current target \"this\" and \"base\" function references\r\n // Note casting the same type as we don't actually have the base class here and this will provide some intellisense support\r\n delegateFunc(target, baseFuncs);\r\n // Populate the Prototype for any overidden instance functions\r\n _populatePrototype(classProto, className, target, instFuncs);\r\n}\r\n//# sourceMappingURL=DynamicProto.js.map","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { DateTimeUtils, Util } from '@microsoft/applicationinsights-common';\r\nimport { CoreUtils, LoggingSeverity, _InternalMessageId, getDocument, getLocation } from '@microsoft/applicationinsights-core-js';\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\n/**\r\n * Class encapsulates sending page views and page view performance telemetry.\r\n */\r\nvar PageViewManager = /** @class */ (function () {\r\n function PageViewManager(appInsights, overridePageViewDuration, core, pageViewPerformanceManager) {\r\n dynamicProto(PageViewManager, this, function (_self) {\r\n var arrForEach = CoreUtils.arrForEach;\r\n var isNullOrUndefined = CoreUtils.isNullOrUndefined;\r\n var intervalHandle = null;\r\n var itemQueue = [];\r\n var pageViewPerformanceSent = false;\r\n var _logger;\r\n if (core) {\r\n _logger = core.logger;\r\n }\r\n function _flushChannels() {\r\n if (core) {\r\n arrForEach(core.getTransmissionControls(), function (queues) {\r\n arrForEach(queues, function (q) { return q.flush(true); });\r\n });\r\n }\r\n }\r\n function _addQueue(cb) {\r\n itemQueue.push(cb);\r\n if (!intervalHandle) {\r\n intervalHandle = setInterval((function () {\r\n var allItems = itemQueue.slice(0);\r\n var doFlush = false;\r\n itemQueue = [];\r\n arrForEach(allItems, function (item) {\r\n if (!item()) {\r\n // Not processed so rescheduled\r\n itemQueue.push(item);\r\n }\r\n else {\r\n doFlush = true;\r\n }\r\n });\r\n if (itemQueue.length === 0) {\r\n clearInterval(intervalHandle);\r\n intervalHandle = null;\r\n }\r\n if (doFlush) {\r\n // We process at least one item so flush the queue\r\n _flushChannels();\r\n }\r\n }), 100);\r\n }\r\n }\r\n _self.trackPageView = function (pageView, customProperties) {\r\n var name = pageView.name;\r\n if (isNullOrUndefined(name) || typeof name !== \"string\") {\r\n var doc = getDocument();\r\n name = pageView.name = doc && doc.title || \"\";\r\n }\r\n var uri = pageView.uri;\r\n if (isNullOrUndefined(uri) || typeof uri !== \"string\") {\r\n var location_1 = getLocation();\r\n uri = pageView.uri = location_1 && location_1.href || \"\";\r\n }\r\n // case 1a. if performance timing is not supported by the browser, send the page view telemetry with the duration provided by the user. If the user\r\n // do not provide the duration, set duration to undefined\r\n // Also this is case 4\r\n if (!pageViewPerformanceManager.isPerformanceTimingSupported()) {\r\n appInsights.sendPageViewInternal(pageView, customProperties);\r\n _flushChannels();\r\n // no navigation timing (IE 8, iOS Safari 8.4, Opera Mini 8 - see http://caniuse.com/#feat=nav-timing)\r\n _logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.NavigationTimingNotSupported, \"trackPageView: navigation timing API used for calculation of page duration is not supported in this browser. This page view will be collected without duration and timing info.\");\r\n return;\r\n }\r\n var pageViewSent = false;\r\n var customDuration;\r\n // if the performance timing is supported by the browser, calculate the custom duration\r\n var start = pageViewPerformanceManager.getPerformanceTiming().navigationStart;\r\n customDuration = DateTimeUtils.GetDuration(start, +new Date);\r\n if (!pageViewPerformanceManager.shouldCollectDuration(customDuration)) {\r\n customDuration = undefined;\r\n }\r\n // if the user has provided duration, send a page view telemetry with the provided duration. Otherwise, if\r\n // overridePageViewDuration is set to true, send a page view telemetry with the custom duration calculated earlier\r\n var duration;\r\n if (!isNullOrUndefined(customProperties) &&\r\n !isNullOrUndefined(customProperties.duration)) {\r\n duration = customProperties.duration;\r\n }\r\n if (overridePageViewDuration || !isNaN(duration)) {\r\n if (isNaN(duration)) {\r\n // case 3\r\n if (!customProperties) {\r\n customProperties = {};\r\n }\r\n customProperties[\"duration\"] = customDuration;\r\n }\r\n // case 2\r\n appInsights.sendPageViewInternal(pageView, customProperties);\r\n _flushChannels();\r\n pageViewSent = true;\r\n }\r\n // now try to send the page view performance telemetry\r\n var maxDurationLimit = 60000;\r\n if (!customProperties) {\r\n customProperties = {};\r\n }\r\n // Queue the event for processing\r\n _addQueue(function () {\r\n var processed = false;\r\n try {\r\n if (pageViewPerformanceManager.isPerformanceTimingDataReady()) {\r\n processed = true;\r\n var pageViewPerformance = {\r\n name: name,\r\n uri: uri\r\n };\r\n pageViewPerformanceManager.populatePageViewPerformanceEvent(pageViewPerformance);\r\n if (!pageViewPerformance.isValid && !pageViewSent) {\r\n // If navigation timing gives invalid numbers, then go back to \"override page view duration\" mode.\r\n // That's the best value we can get that makes sense.\r\n customProperties[\"duration\"] = customDuration;\r\n appInsights.sendPageViewInternal(pageView, customProperties);\r\n }\r\n else {\r\n if (!pageViewSent) {\r\n customProperties[\"duration\"] = pageViewPerformance.durationMs;\r\n appInsights.sendPageViewInternal(pageView, customProperties);\r\n }\r\n if (!pageViewPerformanceSent) {\r\n appInsights.sendPageViewPerformanceInternal(pageViewPerformance, customProperties);\r\n pageViewPerformanceSent = true;\r\n }\r\n }\r\n }\r\n else if (DateTimeUtils.GetDuration(start, +new Date) > maxDurationLimit) {\r\n // if performance timings are not ready but we exceeded the maximum duration limit, just log a page view telemetry\r\n // with the maximum duration limit. Otherwise, keep waiting until performance timings are ready\r\n processed = true;\r\n if (!pageViewSent) {\r\n customProperties[\"duration\"] = maxDurationLimit;\r\n appInsights.sendPageViewInternal(pageView, customProperties);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _logger.throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.TrackPVFailedCalc, \"trackPageView failed on page load calculation: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n return processed;\r\n });\r\n };\r\n });\r\n }\r\n /**\r\n * Currently supported cases:\r\n * 1) (default case) track page view called with default parameters, overridePageViewDuration = false. Page view is sent with page view performance when navigation timing data is available.\r\n * a. If navigation timing is not supported then page view is sent right away with undefined duration. Page view performance is not sent.\r\n * 2) overridePageViewDuration = true, custom duration provided. Custom duration is used, page view sends right away.\r\n * 3) overridePageViewDuration = true, custom duration NOT provided. Page view is sent right away, duration is time spent from page load till now (or undefined if navigation timing is not supported).\r\n * 4) overridePageViewDuration = false, custom duration is provided. Page view is sent right away with custom duration.\r\n *\r\n * In all cases page view performance is sent once (only for the 1st call of trackPageView), or not sent if navigation timing is not supported.\r\n */\r\n PageViewManager.prototype.trackPageView = function (pageView, customProperties) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return PageViewManager;\r\n}());\r\nexport { PageViewManager };\r\n//# sourceMappingURL=PageViewManager.js.map","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { Util } from '@microsoft/applicationinsights-common';\r\nimport { hasJSON, getJSON } from '@microsoft/applicationinsights-core-js';\r\n/**\r\n * Used to track page visit durations\r\n */\r\nvar PageVisitTimeManager = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of PageVisitTimeManager\r\n * @param pageVisitTimeTrackingHandler Delegate that will be called to send telemetry data to AI (when trackPreviousPageVisit is called)\r\n * @returns {}\r\n */\r\n function PageVisitTimeManager(logger, pageVisitTimeTrackingHandler) {\r\n this.prevPageVisitDataKeyName = \"prevPageVisitData\";\r\n this.pageVisitTimeTrackingHandler = pageVisitTimeTrackingHandler;\r\n this._logger = logger;\r\n }\r\n /**\r\n * Tracks the previous page visit time telemetry (if exists) and starts timing of new page visit time\r\n * @param currentPageName Name of page to begin timing for visit duration\r\n * @param currentPageUrl Url of page to begin timing for visit duration\r\n */\r\n PageVisitTimeManager.prototype.trackPreviousPageVisit = function (currentPageName, currentPageUrl) {\r\n try {\r\n // Restart timer for new page view\r\n var prevPageVisitTimeData = this.restartPageVisitTimer(currentPageName, currentPageUrl);\r\n // If there was a page already being timed, track the visit time for it now.\r\n if (prevPageVisitTimeData) {\r\n this.pageVisitTimeTrackingHandler(prevPageVisitTimeData.pageName, prevPageVisitTimeData.pageUrl, prevPageVisitTimeData.pageVisitTime);\r\n }\r\n }\r\n catch (e) {\r\n this._logger.warnToConsole(\"Auto track page visit time failed, metric will not be collected: \" + Util.dump(e));\r\n }\r\n };\r\n /**\r\n * Stops timing of current page (if exists) and starts timing for duration of visit to pageName\r\n * @param pageName Name of page to begin timing visit duration\r\n * @returns {PageVisitData} Page visit data (including duration) of pageName from last call to start or restart, if exists. Null if not.\r\n */\r\n PageVisitTimeManager.prototype.restartPageVisitTimer = function (pageName, pageUrl) {\r\n try {\r\n var prevPageVisitData = this.stopPageVisitTimer();\r\n this.startPageVisitTimer(pageName, pageUrl);\r\n return prevPageVisitData;\r\n }\r\n catch (e) {\r\n this._logger.warnToConsole(\"Call to restart failed: \" + Util.dump(e));\r\n return null;\r\n }\r\n };\r\n /**\r\n * Starts timing visit duration of pageName\r\n * @param pageName\r\n * @returns {}\r\n */\r\n PageVisitTimeManager.prototype.startPageVisitTimer = function (pageName, pageUrl) {\r\n try {\r\n if (Util.canUseSessionStorage()) {\r\n if (Util.getSessionStorage(this._logger, this.prevPageVisitDataKeyName) != null) {\r\n throw new Error(\"Cannot call startPageVisit consecutively without first calling stopPageVisit\");\r\n }\r\n var currPageVisitData = new PageVisitData(pageName, pageUrl);\r\n var currPageVisitDataStr = getJSON().stringify(currPageVisitData);\r\n Util.setSessionStorage(this._logger, this.prevPageVisitDataKeyName, currPageVisitDataStr);\r\n }\r\n }\r\n catch (e) {\r\n // TODO: Remove this catch in next phase, since if start is called twice in a row the exception needs to be propagated out\r\n this._logger.warnToConsole(\"Call to start failed: \" + Util.dump(e));\r\n }\r\n };\r\n /**\r\n * Stops timing of current page, if exists.\r\n * @returns {PageVisitData} Page visit data (including duration) of pageName from call to start, if exists. Null if not.\r\n */\r\n PageVisitTimeManager.prototype.stopPageVisitTimer = function () {\r\n try {\r\n if (Util.canUseSessionStorage()) {\r\n // Define end time of page's visit\r\n var pageVisitEndTime = Date.now();\r\n // Try to retrieve page name and start time from session storage\r\n var pageVisitDataJsonStr = Util.getSessionStorage(this._logger, this.prevPageVisitDataKeyName);\r\n if (pageVisitDataJsonStr && hasJSON()) {\r\n // if previous page data exists, set end time of visit\r\n var prevPageVisitData = getJSON().parse(pageVisitDataJsonStr);\r\n prevPageVisitData.pageVisitTime = pageVisitEndTime - prevPageVisitData.pageVisitStartTime;\r\n // Remove data from storage since we already used it\r\n Util.removeSessionStorage(this._logger, this.prevPageVisitDataKeyName);\r\n // Return page visit data\r\n return prevPageVisitData;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n return null;\r\n }\r\n catch (e) {\r\n this._logger.warnToConsole(\"Stop page visit timer failed: \" + Util.dump(e));\r\n return null;\r\n }\r\n };\r\n return PageVisitTimeManager;\r\n}());\r\nexport { PageVisitTimeManager };\r\nvar PageVisitData = /** @class */ (function () {\r\n function PageVisitData(pageName, pageUrl) {\r\n this.pageVisitStartTime = Date.now();\r\n this.pageName = pageName;\r\n this.pageUrl = pageUrl;\r\n }\r\n return PageVisitData;\r\n}());\r\nexport { PageVisitData };\r\n//# sourceMappingURL=PageVisitTimeManager.js.map","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { Util, DateTimeUtils } from '@microsoft/applicationinsights-common';\r\nimport { LoggingSeverity, _InternalMessageId, getNavigator, getPerformance } from '@microsoft/applicationinsights-core-js';\r\n/**\r\n * Class encapsulates sending page view performance telemetry.\r\n */\r\nvar PageViewPerformanceManager = /** @class */ (function () {\r\n function PageViewPerformanceManager(core) {\r\n this.MAX_DURATION_ALLOWED = 3600000; // 1h\r\n if (core) {\r\n this._logger = core.logger;\r\n }\r\n }\r\n PageViewPerformanceManager.prototype.populatePageViewPerformanceEvent = function (pageViewPerformance) {\r\n pageViewPerformance.isValid = false;\r\n /*\r\n * http://www.w3.org/TR/navigation-timing/#processing-model\r\n * |-navigationStart\r\n * | |-connectEnd\r\n * | ||-requestStart\r\n * | || |-responseStart\r\n * | || | |-responseEnd\r\n * | || | |\r\n * | || | | |-loadEventEnd\r\n * |---network---||---request---|---response---|---dom---|\r\n * |--------------------------total----------------------|\r\n */\r\n var navigationTiming = this.getPerformanceNavigationTiming();\r\n var timing = this.getPerformanceTiming();\r\n if (navigationTiming || timing) {\r\n if (navigationTiming) {\r\n var total = navigationTiming.duration;\r\n var network = DateTimeUtils.GetDuration(navigationTiming.startTime, navigationTiming.connectEnd);\r\n var request = DateTimeUtils.GetDuration(navigationTiming.requestStart, navigationTiming.responseStart);\r\n var response = DateTimeUtils.GetDuration(navigationTiming.responseStart, navigationTiming.responseEnd);\r\n var dom = DateTimeUtils.GetDuration(navigationTiming.responseEnd, navigationTiming.loadEventEnd);\r\n }\r\n else {\r\n var total = DateTimeUtils.GetDuration(timing.navigationStart, timing.loadEventEnd);\r\n var network = DateTimeUtils.GetDuration(timing.navigationStart, timing.connectEnd);\r\n var request = DateTimeUtils.GetDuration(timing.requestStart, timing.responseStart);\r\n var response = DateTimeUtils.GetDuration(timing.responseStart, timing.responseEnd);\r\n var dom = DateTimeUtils.GetDuration(timing.responseEnd, timing.loadEventEnd);\r\n }\r\n if (total === 0) {\r\n this._logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.ErrorPVCalc, \"error calculating page view performance.\", { total: total, network: network, request: request, response: response, dom: dom });\r\n }\r\n else if (!this.shouldCollectDuration(total, network, request, response, dom)) {\r\n this._logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.InvalidDurationValue, \"Invalid page load duration value. Browser perf data won't be sent.\", { total: total, network: network, request: request, response: response, dom: dom });\r\n }\r\n else if (total < Math.floor(network) + Math.floor(request) + Math.floor(response) + Math.floor(dom)) {\r\n // some browsers may report individual components incorrectly so that the sum of the parts will be bigger than total PLT\r\n // in this case, don't report client performance from this page\r\n this._logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.ClientPerformanceMathError, \"client performance math error.\", { total: total, network: network, request: request, response: response, dom: dom });\r\n }\r\n else {\r\n pageViewPerformance.durationMs = total;\r\n // // convert to timespans\r\n pageViewPerformance.perfTotal = pageViewPerformance.duration = Util.msToTimeSpan(total);\r\n pageViewPerformance.networkConnect = Util.msToTimeSpan(network);\r\n pageViewPerformance.sentRequest = Util.msToTimeSpan(request);\r\n pageViewPerformance.receivedResponse = Util.msToTimeSpan(response);\r\n pageViewPerformance.domProcessing = Util.msToTimeSpan(dom);\r\n pageViewPerformance.isValid = true;\r\n }\r\n }\r\n };\r\n PageViewPerformanceManager.prototype.getPerformanceTiming = function () {\r\n if (this.isPerformanceTimingSupported()) {\r\n return getPerformance().timing;\r\n }\r\n return null;\r\n };\r\n PageViewPerformanceManager.prototype.getPerformanceNavigationTiming = function () {\r\n if (this.isPerformanceNavigationTimingSupported()) {\r\n return getPerformance().getEntriesByType(\"navigation\")[0];\r\n }\r\n return null;\r\n };\r\n /**\r\n * Returns true is window PerformanceNavigationTiming API is supported, false otherwise.\r\n */\r\n PageViewPerformanceManager.prototype.isPerformanceNavigationTimingSupported = function () {\r\n var perf = getPerformance();\r\n return perf && perf.getEntriesByType && perf.getEntriesByType(\"navigation\").length > 0;\r\n };\r\n /**\r\n * Returns true is window performance timing API is supported, false otherwise.\r\n */\r\n PageViewPerformanceManager.prototype.isPerformanceTimingSupported = function () {\r\n var perf = getPerformance();\r\n return perf && perf.timing;\r\n };\r\n /**\r\n * As page loads different parts of performance timing numbers get set. When all of them are set we can report it.\r\n * Returns true if ready, false otherwise.\r\n */\r\n PageViewPerformanceManager.prototype.isPerformanceTimingDataReady = function () {\r\n var perf = getPerformance();\r\n var timing = perf ? perf.timing : 0;\r\n return timing\r\n && timing.domainLookupStart > 0\r\n && timing.navigationStart > 0\r\n && timing.responseStart > 0\r\n && timing.requestStart > 0\r\n && timing.loadEventEnd > 0\r\n && timing.responseEnd > 0\r\n && timing.connectEnd > 0\r\n && timing.domLoading > 0;\r\n };\r\n /**\r\n * This method tells if given durations should be excluded from collection.\r\n */\r\n PageViewPerformanceManager.prototype.shouldCollectDuration = function () {\r\n var durations = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n durations[_i] = arguments[_i];\r\n }\r\n var _navigator = getNavigator() || {};\r\n // a full list of Google crawlers user agent strings - https://support.google.com/webmasters/answer/1061943?hl=en\r\n var botAgentNames = ['googlebot', 'adsbot-google', 'apis-google', 'mediapartners-google'];\r\n var userAgent = _navigator.userAgent;\r\n var isGoogleBot = false;\r\n if (userAgent) {\r\n for (var i = 0; i < botAgentNames.length; i++) {\r\n isGoogleBot = isGoogleBot || userAgent.toLowerCase().indexOf(botAgentNames[i]) !== -1;\r\n }\r\n }\r\n if (isGoogleBot) {\r\n // Don't report durations for GoogleBot, it is returning invalid values in performance.timing API.\r\n return false;\r\n }\r\n else {\r\n // for other page views, don't report if it's outside of a reasonable range\r\n for (var i = 0; i < durations.length; i++) {\r\n if (durations[i] >= this.MAX_DURATION_ALLOWED) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n return PageViewPerformanceManager;\r\n}());\r\nexport { PageViewPerformanceManager };\r\n//# sourceMappingURL=PageViewPerformanceManager.js.map","/**\r\n * ApplicationInsights.ts\r\n * @copyright Microsoft 2018\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { Util, PageViewPerformance, PageView, RemoteDependencyData, Event as EventTelemetry, TelemetryItemCreator, Metric, Exception, SeverityLevel, Trace, DateTimeUtils, PropertiesPluginIdentifier, AnalyticsPluginIdentifier } from \"@microsoft/applicationinsights-common\";\r\nimport { BaseTelemetryPlugin, CoreUtils, LoggingSeverity, _InternalMessageId, getWindow, getDocument, getHistory, getLocation } from \"@microsoft/applicationinsights-core-js\";\r\nimport { PageViewManager } from \"./Telemetry/PageViewManager\";\r\nimport { PageVisitTimeManager } from \"./Telemetry/PageVisitTimeManager\";\r\nimport { PageViewPerformanceManager } from './Telemetry/PageViewPerformanceManager';\r\n\"use strict\";\r\nvar durationProperty = \"duration\";\r\nfunction _dispatchEvent(target, evnt) {\r\n if (target && target.dispatchEvent && evnt) {\r\n target.dispatchEvent(evnt);\r\n }\r\n}\r\nvar ApplicationInsights = /** @class */ (function (_super) {\r\n tslib_1.__extends(ApplicationInsights, _super);\r\n function ApplicationInsights() {\r\n var _this = _super.call(this) || this;\r\n _this.identifier = AnalyticsPluginIdentifier; // do not change name or priority\r\n _this.priority = 180; // take from reserved priority range 100- 200\r\n _this.autoRoutePVDelay = 500; // ms; Time to wait after a route change before triggering a pageview to allow DOM changes to take place\r\n // Counts number of trackAjax invokations.\r\n // By default we only monitor X ajax call per view to avoid too much load.\r\n // Default value is set in config.\r\n // This counter keeps increasing even after the limit is reached.\r\n _this._trackAjaxAttempts = 0;\r\n var location = getLocation();\r\n _this._prevUri = location && location.href || \"\";\r\n return _this;\r\n }\r\n ApplicationInsights.getDefaultConfig = function (config) {\r\n if (!config) {\r\n config = {};\r\n }\r\n // set default values\r\n config.sessionRenewalMs = 30 * 60 * 1000;\r\n config.sessionExpirationMs = 24 * 60 * 60 * 1000;\r\n config.disableExceptionTracking = Util.stringToBoolOrDefault(config.disableExceptionTracking);\r\n config.autoTrackPageVisitTime = Util.stringToBoolOrDefault(config.autoTrackPageVisitTime);\r\n config.overridePageViewDuration = Util.stringToBoolOrDefault(config.overridePageViewDuration);\r\n config.enableUnhandledPromiseRejectionTracking = Util.stringToBoolOrDefault(config.enableUnhandledPromiseRejectionTracking);\r\n if (isNaN(config.samplingPercentage) || config.samplingPercentage <= 0 || config.samplingPercentage >= 100) {\r\n config.samplingPercentage = 100;\r\n }\r\n config.isCookieUseDisabled = Util.stringToBoolOrDefault(config.isCookieUseDisabled);\r\n config.isStorageUseDisabled = Util.stringToBoolOrDefault(config.isStorageUseDisabled);\r\n config.isBrowserLinkTrackingEnabled = Util.stringToBoolOrDefault(config.isBrowserLinkTrackingEnabled);\r\n config.enableAutoRouteTracking = Util.stringToBoolOrDefault(config.enableAutoRouteTracking);\r\n config.namePrefix = config.namePrefix || \"\";\r\n return config;\r\n };\r\n ApplicationInsights.prototype.processTelemetry = function (env, itemCtx) {\r\n var doNotSendItem = false;\r\n var telemetryInitializersCount = this._telemetryInitializers.length;\r\n itemCtx = this._getTelCtx(itemCtx);\r\n for (var i = 0; i < telemetryInitializersCount; ++i) {\r\n var telemetryInitializer = this._telemetryInitializers[i];\r\n if (telemetryInitializer) {\r\n try {\r\n if (telemetryInitializer.apply(null, [env]) === false) {\r\n doNotSendItem = true;\r\n break;\r\n }\r\n }\r\n catch (e) {\r\n // log error but dont stop executing rest of the telemetry initializers\r\n // doNotSendItem = true;\r\n itemCtx.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.TelemetryInitializerFailed, \"One of telemetry initializers failed, telemetry item will not be sent: \" + Util.getExceptionName(e), { exception: Util.dump(e) }, true);\r\n }\r\n }\r\n }\r\n if (!doNotSendItem) {\r\n this.processNext(env, itemCtx);\r\n }\r\n };\r\n ApplicationInsights.prototype.trackEvent = function (event, customProperties) {\r\n try {\r\n var telemetryItem = TelemetryItemCreator.create(event, EventTelemetry.dataType, EventTelemetry.envelopeType, this.diagLog(), customProperties);\r\n this.core.track(telemetryItem);\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.WARNING, _InternalMessageId.TrackTraceFailed, \"trackTrace failed, trace will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * Start timing an extended event. Call `stopTrackEvent` to log the event when it ends.\r\n * @param name A string that identifies this event uniquely within the document.\r\n */\r\n ApplicationInsights.prototype.startTrackEvent = function (name) {\r\n try {\r\n this._eventTracking.start(name);\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.StartTrackEventFailed, \"startTrackEvent failed, event will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * Log an extended event that you started timing with `startTrackEvent`.\r\n * @param name The string you used to identify this event in `startTrackEvent`.\r\n * @param properties map[string, string] - additional data used to filter events and metrics in the portal. Defaults to empty.\r\n * @param measurements map[string, number] - metrics associated with this event, displayed in Metrics Explorer on the portal. Defaults to empty.\r\n */\r\n ApplicationInsights.prototype.stopTrackEvent = function (name, properties, measurements) {\r\n try {\r\n this._eventTracking.stop(name, undefined, properties); // Todo: Fix to pass measurements once type is updated\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.StopTrackEventFailed, \"stopTrackEvent failed, event will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * @description Log a diagnostic message\r\n * @param {ITraceTelemetry} trace\r\n * @param ICustomProperties.\r\n * @memberof ApplicationInsights\r\n */\r\n ApplicationInsights.prototype.trackTrace = function (trace, customProperties) {\r\n try {\r\n var telemetryItem = TelemetryItemCreator.create(trace, Trace.dataType, Trace.envelopeType, this.diagLog(), customProperties);\r\n this.core.track(telemetryItem);\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.WARNING, _InternalMessageId.TrackTraceFailed, \"trackTrace failed, trace will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * @description Log a numeric value that is not associated with a specific event. Typically\r\n * used to send regular reports of performance indicators. To send single measurement, just\r\n * use the name and average fields of {@link IMetricTelemetry}. If you take measurements\r\n * frequently, you can reduce the telemetry bandwidth by aggregating multiple measurements\r\n * and sending the resulting average at intervals\r\n * @param {IMetricTelemetry} metric input object argument. Only name and average are mandatory.\r\n * @param {{[key: string]: any}} customProperties additional data used to filter metrics in the\r\n * portal. Defaults to empty.\r\n * @memberof ApplicationInsights\r\n */\r\n ApplicationInsights.prototype.trackMetric = function (metric, customProperties) {\r\n try {\r\n var telemetryItem = TelemetryItemCreator.create(metric, Metric.dataType, Metric.envelopeType, this.diagLog(), customProperties);\r\n this.core.track(telemetryItem);\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.TrackMetricFailed, \"trackMetric failed, metric will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * Logs that a page or other item was viewed.\r\n * @param IPageViewTelemetry The string you used as the name in startTrackPage. Defaults to the document title.\r\n * @param customProperties Additional data used to filter events and metrics. Defaults to empty.\r\n * If a user wants to provide duration for pageLoad, it'll have to be in pageView.properties.duration\r\n */\r\n ApplicationInsights.prototype.trackPageView = function (pageView, customProperties) {\r\n try {\r\n var inPv = pageView || {};\r\n this._pageViewManager.trackPageView(inPv, tslib_1.__assign({}, inPv.properties, inPv.measurements, customProperties));\r\n if (this.config.autoTrackPageVisitTime) {\r\n this._pageVisitTimeManager.trackPreviousPageVisit(inPv.name, inPv.uri);\r\n }\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.TrackPVFailed, \"trackPageView failed, page view will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * Create a page view telemetry item and send it to the SDK pipeline through the core.track API\r\n * @param pageView Page view item to be sent\r\n * @param properties Custom properties (Part C) that a user can add to the telemetry item\r\n * @param systemProperties System level properties (Part A) that a user can add to the telemetry item\r\n */\r\n ApplicationInsights.prototype.sendPageViewInternal = function (pageView, properties, systemProperties) {\r\n var doc = getDocument();\r\n if (doc) {\r\n pageView.refUri = pageView.refUri === undefined ? doc.referrer : pageView.refUri;\r\n }\r\n var telemetryItem = TelemetryItemCreator.create(pageView, PageView.dataType, PageView.envelopeType, this.diagLog(), properties, systemProperties);\r\n this.core.track(telemetryItem);\r\n // reset ajaxes counter\r\n this._trackAjaxAttempts = 0;\r\n };\r\n /**\r\n * @ignore INTERNAL ONLY\r\n * @param pageViewPerformance\r\n * @param properties\r\n */\r\n ApplicationInsights.prototype.sendPageViewPerformanceInternal = function (pageViewPerformance, properties, systemProperties) {\r\n var telemetryItem = TelemetryItemCreator.create(pageViewPerformance, PageViewPerformance.dataType, PageViewPerformance.envelopeType, this.diagLog(), properties, systemProperties);\r\n this.core.track(telemetryItem);\r\n };\r\n /**\r\n * Send browser performance metrics.\r\n * @param pageViewPerformance\r\n * @param customProperties\r\n */\r\n ApplicationInsights.prototype.trackPageViewPerformance = function (pageViewPerformance, customProperties) {\r\n try {\r\n this._pageViewPerformanceManager.populatePageViewPerformanceEvent(pageViewPerformance);\r\n this.sendPageViewPerformanceInternal(pageViewPerformance, customProperties);\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.TrackPVFailed, \"trackPageViewPerformance failed, page view will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * Starts the timer for tracking a page load time. Use this instead of `trackPageView` if you want to control when the page view timer starts and stops,\r\n * but don't want to calculate the duration yourself. This method doesn't send any telemetry. Call `stopTrackPage` to log the end of the page view\r\n * and send the event.\r\n * @param name A string that idenfities this item, unique within this HTML document. Defaults to the document title.\r\n */\r\n ApplicationInsights.prototype.startTrackPage = function (name) {\r\n try {\r\n if (typeof name !== \"string\") {\r\n var doc = getDocument();\r\n name = doc && doc.title || \"\";\r\n }\r\n this._pageTracking.start(name);\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.StartTrackFailed, \"startTrackPage failed, page view may not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * Stops the timer that was started by calling `startTrackPage` and sends the pageview load time telemetry with the specified properties and measurements.\r\n * The duration of the page view will be the time between calling `startTrackPage` and `stopTrackPage`.\r\n * @param name The string you used as the name in startTrackPage. Defaults to the document title.\r\n * @param url String - a relative or absolute URL that identifies the page or other item. Defaults to the window location.\r\n * @param properties map[string, string] - additional data used to filter pages and metrics in the portal. Defaults to empty.\r\n * @param measurements map[string, number] - metrics associated with this page, displayed in Metrics Explorer on the portal. Defaults to empty.\r\n */\r\n ApplicationInsights.prototype.stopTrackPage = function (name, url, properties, measurement) {\r\n try {\r\n if (typeof name !== \"string\") {\r\n var doc = getDocument();\r\n name = doc && doc.title || \"\";\r\n }\r\n if (typeof url !== \"string\") {\r\n var loc = getLocation();\r\n url = loc && loc.href || \"\";\r\n }\r\n this._pageTracking.stop(name, url, properties, measurement);\r\n if (this.config.autoTrackPageVisitTime) {\r\n this._pageVisitTimeManager.trackPreviousPageVisit(name, url);\r\n }\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.StopTrackFailed, \"stopTrackPage failed, page view will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * @ignore INTERNAL ONLY\r\n * @param exception\r\n * @param properties\r\n * @param systemProperties\r\n */\r\n ApplicationInsights.prototype.sendExceptionInternal = function (exception, customProperties, systemProperties) {\r\n var exceptionPartB = new Exception(this.diagLog(), exception.exception || new Error(Util.NotSpecified), exception.properties, exception.measurements, exception.severityLevel, exception.id).toInterface();\r\n var telemetryItem = TelemetryItemCreator.create(exceptionPartB, Exception.dataType, Exception.envelopeType, this.diagLog(), customProperties, systemProperties);\r\n this.core.track(telemetryItem);\r\n };\r\n /**\r\n * Log an exception you have caught.\r\n *\r\n * @param {IExceptionTelemetry} exception Object which contains exception to be sent\r\n * @param {{[key: string]: any}} customProperties Additional data used to filter pages and metrics in the portal. Defaults to empty.\r\n *\r\n * Any property of type double will be considered a measurement, and will be treated by Application Insights as a metric.\r\n * @memberof ApplicationInsights\r\n */\r\n ApplicationInsights.prototype.trackException = function (exception, customProperties) {\r\n try {\r\n this.sendExceptionInternal(exception, customProperties);\r\n }\r\n catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.TrackExceptionFailed, \"trackException failed, exception will not be collected: \" + Util.getExceptionName(e), { exception: Util.dump(e) });\r\n }\r\n };\r\n /**\r\n * @description Custom error handler for Application Insights Analytics\r\n * @param {IAutoExceptionTelemetry} exception\r\n * @memberof ApplicationInsights\r\n */\r\n ApplicationInsights.prototype._onerror = function (exception) {\r\n try {\r\n var properties_1 = {\r\n url: (exception && exception.url) || (getDocument() || {}).URL,\r\n lineNumber: exception.lineNumber,\r\n columnNumber: exception.columnNumber,\r\n message: exception.message\r\n };\r\n if (Util.isCrossOriginError(exception.message, exception.url, exception.lineNumber, exception.columnNumber, exception.error)) {\r\n this._sendCORSException(properties_1.url);\r\n }\r\n else {\r\n if (!Util.isError(exception.error)) {\r\n var stack = \"window.onerror@\" + properties_1.url + \":\" + exception.lineNumber + \":\" + (exception.columnNumber || 0);\r\n exception.error = new Error(exception.message);\r\n exception.error.stack = stack;\r\n }\r\n this.trackException({ exception: exception.error, severityLevel: SeverityLevel.Error }, properties_1);\r\n }\r\n }\r\n catch (e) {\r\n var errorString = exception.error ?\r\n (exception.error.name + \", \" + exception.error.message)\r\n : \"null\";\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.ExceptionWhileLoggingError, \"_onError threw exception while logging error, error will not be collected: \"\r\n + Util.getExceptionName(e), { exception: Util.dump(e), errorString: errorString });\r\n }\r\n };\r\n ApplicationInsights.prototype.addTelemetryInitializer = function (telemetryInitializer) {\r\n this._telemetryInitializers.push(telemetryInitializer);\r\n };\r\n ApplicationInsights.prototype.initialize = function (config, core, extensions, pluginChain) {\r\n var _this = this;\r\n if (this.isInitialized()) {\r\n return;\r\n }\r\n if (CoreUtils.isNullOrUndefined(core)) {\r\n throw Error(\"Error initializing\");\r\n }\r\n _super.prototype.initialize.call(this, config, core, extensions, pluginChain);\r\n this.setInitialized(false); // resetting the initialized state, just in case the following fails\r\n var ctx = this._getTelCtx();\r\n var identifier = this.identifier;\r\n this._globalconfig = {\r\n instrumentationKey: config.instrumentationKey,\r\n endpointUrl: config.endpointUrl || \"https://dc.services.visualstudio.com/v2/track\"\r\n };\r\n this.config = ctx.getExtCfg(identifier);\r\n // load default values if specified\r\n var defaults = ApplicationInsights.getDefaultConfig();\r\n if (defaults !== undefined) {\r\n for (var field in defaults) {\r\n // for each unspecified field, set the default value\r\n this.config[field] = ctx.getConfig(identifier, field, defaults[field]);\r\n }\r\n if (this._globalconfig) {\r\n for (var field in defaults) {\r\n if (this._globalconfig[field] === undefined) {\r\n this._globalconfig[field] = defaults[field];\r\n }\r\n }\r\n }\r\n }\r\n // Todo: move this out of static state\r\n if (this.config.isCookieUseDisabled) {\r\n Util.disableCookies();\r\n }\r\n // Todo: move this out of static state\r\n if (this.config.isStorageUseDisabled) {\r\n Util.disableStorage();\r\n }\r\n var configGetters = {\r\n instrumentationKey: function () { return config.instrumentationKey; },\r\n accountId: function () { return _this.config.accountId || config.accountId; },\r\n sessionRenewalMs: function () { return _this.config.sessionRenewalMs || config.sessionRenewalMs; },\r\n sessionExpirationMs: function () { return _this.config.sessionExpirationMs || config.sessionExpirationMs; },\r\n sampleRate: function () { return _this.config.samplingPercentage || config.samplingPercentage; },\r\n cookieDomain: function () { return _this.config.cookieDomain || config.cookieDomain; },\r\n sdkExtension: function () { return _this.config.sdkExtension || config.sdkExtension; },\r\n isBrowserLinkTrackingEnabled: function () { return _this.config.isBrowserLinkTrackingEnabled || config.isBrowserLinkTrackingEnabled; },\r\n appId: function () { return _this.config.appId || config.appId; }\r\n };\r\n this._pageViewPerformanceManager = new PageViewPerformanceManager(this.core);\r\n this._pageViewManager = new PageViewManager(this, this.config.overridePageViewDuration, this.core, this._pageViewPerformanceManager);\r\n this._pageVisitTimeManager = new PageVisitTimeManager(this.diagLog(), function (pageName, pageUrl, pageVisitTime) { return _this.trackPageVisitTime(pageName, pageUrl, pageVisitTime); });\r\n this._telemetryInitializers = this._telemetryInitializers || [];\r\n this._addDefaultTelemetryInitializers(configGetters);\r\n this._eventTracking = new Timing(this.diagLog(), \"trackEvent\");\r\n this._eventTracking.action =\r\n function (name, url, duration, properties) {\r\n if (!properties) {\r\n properties = {};\r\n }\r\n properties[durationProperty] = duration.toString();\r\n _this.trackEvent({ name: name, properties: properties });\r\n };\r\n // initialize page view timing\r\n this._pageTracking = new Timing(this.diagLog(), \"trackPageView\");\r\n this._pageTracking.action = function (name, url, duration, properties, measurements) {\r\n // duration must be a custom property in order for the collector to extract it\r\n if (CoreUtils.isNullOrUndefined(properties)) {\r\n properties = {};\r\n }\r\n properties[durationProperty] = duration.toString();\r\n var pageViewItem = {\r\n name: name,\r\n uri: url,\r\n properties: properties,\r\n measurements: measurements\r\n };\r\n _this.sendPageViewInternal(pageViewItem, properties);\r\n };\r\n var _window = getWindow();\r\n var _history = getHistory();\r\n var _location = getLocation();\r\n var instance = this;\r\n if (this.config.disableExceptionTracking === false &&\r\n !this.config.autoExceptionInstrumented && _window) {\r\n // We want to enable exception auto collection and it has not been done so yet\r\n var onerror_1 = \"onerror\";\r\n var originalOnError_1 = _window[onerror_1];\r\n _window.onerror = function (message, url, lineNumber, columnNumber, error) {\r\n var handled = originalOnError_1 && originalOnError_1(message, url, lineNumber, columnNumber, error);\r\n if (handled !== true) {\r\n instance._onerror({\r\n message: message,\r\n url: url,\r\n lineNumber: lineNumber,\r\n columnNumber: columnNumber,\r\n error: error\r\n });\r\n }\r\n return handled;\r\n };\r\n this.config.autoExceptionInstrumented = true;\r\n }\r\n if (this.config.disableExceptionTracking === false &&\r\n this.config.enableUnhandledPromiseRejectionTracking === true &&\r\n !this.config.autoUnhandledPromiseInstrumented && _window) {\r\n // We want to enable exception auto collection and it has not been done so yet\r\n var onunhandledrejection = \"onunhandledrejection\";\r\n var originalOnUnhandledRejection_1 = _window[onunhandledrejection];\r\n _window[onunhandledrejection] = function (error) {\r\n var handled = originalOnUnhandledRejection_1 && originalOnUnhandledRejection_1.call(_window, error);\r\n if (handled !== true) {\r\n instance._onerror({\r\n message: error.reason.toString(),\r\n error: error.reason instanceof Error ? error.reason : new Error(error.reason.toString()),\r\n url: _location ? _location.href : \"\",\r\n lineNumber: 0,\r\n columnNumber: 0\r\n });\r\n }\r\n return handled;\r\n };\r\n this.config.autoUnhandledPromiseInstrumented = true;\r\n }\r\n /**\r\n * Create a custom \"locationchange\" event which is triggered each time the history object is changed\r\n */\r\n if (this.config.enableAutoRouteTracking === true\r\n && _history && CoreUtils.isFunction(_history.pushState) && CoreUtils.isFunction(_history.replaceState)\r\n && _window\r\n && typeof Event !== \"undefined\") {\r\n var _self_1 = this;\r\n // Find the properties plugin\r\n CoreUtils.arrForEach(extensions, function (extension) {\r\n if (extension.identifier === PropertiesPluginIdentifier) {\r\n _this._properties = extension;\r\n }\r\n });\r\n _history.pushState = (function (f) { return function pushState() {\r\n var ret = f.apply(this, arguments);\r\n _dispatchEvent(_window, Util.createDomEvent(_self_1.config.namePrefix + \"pushState\"));\r\n _dispatchEvent(_window, Util.createDomEvent(_self_1.config.namePrefix + \"locationchange\"));\r\n return ret;\r\n }; })(_history.pushState);\r\n _history.replaceState = (function (f) { return function replaceState() {\r\n var ret = f.apply(this, arguments);\r\n _dispatchEvent(_window, Util.createDomEvent(_self_1.config.namePrefix + \"replaceState\"));\r\n _dispatchEvent(_window, Util.createDomEvent(_self_1.config.namePrefix + \"locationchange\"));\r\n return ret;\r\n }; })(_history.replaceState);\r\n if (_window.addEventListener) {\r\n _window.addEventListener(_self_1.config.namePrefix + \"popstate\", function () {\r\n _dispatchEvent(_window, Util.createDomEvent(_self_1.config.namePrefix + \"locationchange\"));\r\n });\r\n _window.addEventListener(_self_1.config.namePrefix + \"locationchange\", function () {\r\n if (_self_1._properties && _self_1._properties.context && _self_1._properties.context.telemetryTrace) {\r\n _self_1._properties.context.telemetryTrace.traceID = Util.generateW3CId();\r\n _self_1._properties.context.telemetryTrace.name = _location && _location.pathname || \"_unknown_\";\r\n }\r\n if (_this._currUri) {\r\n _this._prevUri = _this._currUri;\r\n _this._currUri = _location && _location.href || \"\";\r\n }\r\n else {\r\n _this._currUri = _location && _location.href || \"\";\r\n }\r\n setTimeout((function (uri) {\r\n // todo: override start time so that it is not affected by autoRoutePVDelay\r\n _self_1.trackPageView({ refUri: uri, properties: { duration: 0 } }); // SPA route change loading durations are undefined, so send 0\r\n }).bind(_this, _this._prevUri), _self_1.autoRoutePVDelay);\r\n });\r\n }\r\n }\r\n this.setInitialized(true);\r\n };\r\n /**\r\n * Log a page visit time\r\n * @param pageName Name of page\r\n * @param pageVisitDuration Duration of visit to the page in milleseconds\r\n */\r\n ApplicationInsights.prototype.trackPageVisitTime = function (pageName, pageUrl, pageVisitTime) {\r\n var properties = { PageName: pageName, PageUrl: pageUrl };\r\n this.trackMetric({\r\n name: \"PageVisitTime\",\r\n average: pageVisitTime,\r\n max: pageVisitTime,\r\n min: pageVisitTime,\r\n sampleCount: 1\r\n }, properties);\r\n };\r\n ApplicationInsights.prototype._addDefaultTelemetryInitializers = function (configGetters) {\r\n if (!configGetters.isBrowserLinkTrackingEnabled()) {\r\n var browserLinkPaths_1 = ['/browserLinkSignalR/', '/__browserLink/'];\r\n var dropBrowserLinkRequests = function (envelope) {\r\n if (envelope.baseType === RemoteDependencyData.dataType) {\r\n var remoteData = envelope.baseData;\r\n if (remoteData) {\r\n for (var i = 0; i < browserLinkPaths_1.length; i++) {\r\n if (remoteData.target && remoteData.target.indexOf(browserLinkPaths_1[i]) >= 0) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n this._addTelemetryInitializer(dropBrowserLinkRequests);\r\n }\r\n };\r\n ApplicationInsights.prototype._addTelemetryInitializer = function (telemetryInitializer) {\r\n this._telemetryInitializers.push(telemetryInitializer);\r\n };\r\n ApplicationInsights.prototype._sendCORSException = function (url) {\r\n var exception = {\r\n message: \"Script error: The browser's same-origin policy prevents us from getting the details of this exception. Consider using the 'crossorigin' attribute.\",\r\n url: url,\r\n lineNumber: 0,\r\n columnNumber: 0,\r\n error: undefined\r\n };\r\n var telemetryItem = TelemetryItemCreator.create(exception, Exception.dataType, Exception.envelopeType, this.diagLog(), { url: url });\r\n this.core.track(telemetryItem);\r\n };\r\n ApplicationInsights.Version = \"2.5.4\"; // Not currently used anywhere\r\n return ApplicationInsights;\r\n}(BaseTelemetryPlugin));\r\nexport { ApplicationInsights };\r\n/**\r\n * Used to record timed events and page views.\r\n */\r\nvar Timing = /** @class */ (function () {\r\n function Timing(logger, name) {\r\n this._name = name;\r\n this._events = {};\r\n this._logger = logger;\r\n }\r\n Timing.prototype.start = function (name) {\r\n if (typeof this._events[name] !== \"undefined\") {\r\n this._logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.StartCalledMoreThanOnce, \"start was called more than once for this event without calling stop.\", { name: this._name, key: name }, true);\r\n }\r\n this._events[name] = +new Date;\r\n };\r\n Timing.prototype.stop = function (name, url, properties, measurements) {\r\n var start = this._events[name];\r\n if (isNaN(start)) {\r\n this._logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.StopCalledWithoutStart, \"stop was called without a corresponding start.\", { name: this._name, key: name }, true);\r\n }\r\n else {\r\n var end = +new Date;\r\n var duration = DateTimeUtils.GetDuration(start, end);\r\n this.action(name, url, duration, properties, measurements);\r\n }\r\n delete this._events[name];\r\n this._events[name] = undefined;\r\n };\r\n return Timing;\r\n}());\r\n//# sourceMappingURL=ApplicationInsights.js.map","import { Util } from '@microsoft/applicationinsights-common';\r\nimport { IDiagnosticLogger, LoggingSeverity, _InternalMessageId, getJSON } from '@microsoft/applicationinsights-core-js';\r\nimport { ISenderConfig } from './Interfaces';\r\n\r\nexport interface ISendBuffer {\r\n /**\r\n * Enqueue the payload\r\n */\r\n enqueue: (payload: string) => void;\r\n\r\n /**\r\n * Returns the number of elements in the buffer\r\n */\r\n count: () => number;\r\n\r\n /**\r\n * Clears the buffer\r\n */\r\n clear: () => void;\r\n\r\n /**\r\n * Returns items stored in the buffer\r\n */\r\n getItems: () => string[];\r\n\r\n /**\r\n * Build a batch of all elements in the payload array\r\n */\r\n batchPayloads: (payload: string[]) => string;\r\n\r\n /**\r\n * Moves items to the SENT_BUFFER.\r\n * The buffer holds items which were sent, but we haven't received any response from the backend yet.\r\n */\r\n markAsSent: (payload: string[]) => void;\r\n\r\n /**\r\n * Removes items from the SENT_BUFFER. Should be called on successful response from the backend.\r\n */\r\n clearSent: (payload: string[]) => void;\r\n}\r\n\r\n/*\r\n * An array based send buffer.\r\n */\r\nexport class ArraySendBuffer implements ISendBuffer {\r\n private _config: ISenderConfig;\r\n private _buffer: string[];\r\n\r\n constructor(config: ISenderConfig) {\r\n this._config = config;\r\n\r\n this._buffer = [];\r\n }\r\n\r\n public enqueue(payload: string) {\r\n this._buffer.push(payload);\r\n }\r\n\r\n public count(): number {\r\n return this._buffer.length;\r\n }\r\n\r\n public clear() {\r\n this._buffer.length = 0;\r\n }\r\n\r\n public getItems(): string[] {\r\n return this._buffer.slice(0);\r\n }\r\n\r\n public batchPayloads(payload: string[]): string {\r\n if (payload && payload.length > 0) {\r\n const batch = this._config.emitLineDelimitedJson() ?\r\n payload.join(\"\\n\") :\r\n \"[\" + payload.join(\",\") + \"]\";\r\n\r\n return batch;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public markAsSent(payload: string[]) {\r\n this.clear();\r\n }\r\n\r\n public clearSent(payload: string[]) {\r\n // not supported\r\n }\r\n}\r\n\r\n/*\r\n * Session storege buffer holds a copy of all unsent items in the browser session storage.\r\n */\r\nexport class SessionStorageSendBuffer implements ISendBuffer {\r\n static BUFFER_KEY = \"AI_buffer\";\r\n static SENT_BUFFER_KEY = \"AI_sentBuffer\";\r\n\r\n // Maximum number of payloads stored in the buffer. If the buffer is full, new elements will be dropped.\r\n static MAX_BUFFER_SIZE = 2000;\r\n private _bufferFullMessageSent = false;\r\n\r\n // An in-memory copy of the buffer. A copy is saved to the session storage on enqueue() and clear().\r\n // The buffer is restored in a constructor and contains unsent events from a previous page.\r\n private _buffer: string[];\r\n private _config: ISenderConfig;\r\n\r\n private _logger: IDiagnosticLogger;\r\n\r\n constructor(logger: IDiagnosticLogger, config: ISenderConfig) {\r\n this._logger = logger;\r\n this._config = config;\r\n\r\n const bufferItems = this.getBuffer(SessionStorageSendBuffer.BUFFER_KEY);\r\n const notDeliveredItems = this.getBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY);\r\n\r\n this._buffer = bufferItems.concat(notDeliveredItems);\r\n\r\n // If the buffer has too many items, drop items from the end.\r\n if (this._buffer.length > SessionStorageSendBuffer.MAX_BUFFER_SIZE) {\r\n this._buffer.length = SessionStorageSendBuffer.MAX_BUFFER_SIZE;\r\n }\r\n\r\n // update DataLossAnalyzer with the number of recovered items\r\n // Uncomment if you want to use DataLossanalyzer\r\n // DataLossAnalyzer.itemsRestoredFromSessionBuffer = this._buffer.length;\r\n\r\n this.setBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY, []);\r\n this.setBuffer(SessionStorageSendBuffer.BUFFER_KEY, this._buffer);\r\n }\r\n\r\n public enqueue(payload: string) {\r\n if (this._buffer.length >= SessionStorageSendBuffer.MAX_BUFFER_SIZE) {\r\n // sent internal log only once per page view\r\n if (!this._bufferFullMessageSent) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.SessionStorageBufferFull,\r\n \"Maximum buffer size reached: \" + this._buffer.length,\r\n true);\r\n this._bufferFullMessageSent = true;\r\n }\r\n return;\r\n }\r\n\r\n this._buffer.push(payload);\r\n this.setBuffer(SessionStorageSendBuffer.BUFFER_KEY, this._buffer);\r\n }\r\n\r\n public count(): number {\r\n return this._buffer.length;\r\n }\r\n\r\n public clear() {\r\n this._buffer.length = 0;\r\n this.setBuffer(SessionStorageSendBuffer.BUFFER_KEY, []);\r\n this.setBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY, []);\r\n\r\n this._bufferFullMessageSent = false;\r\n }\r\n\r\n public getItems(): string[] {\r\n return this._buffer.slice(0)\r\n }\r\n\r\n public batchPayloads(payload: string[]): string {\r\n if (payload && payload.length > 0) {\r\n const batch = this._config.emitLineDelimitedJson() ?\r\n payload.join(\"\\n\") :\r\n \"[\" + payload.join(\",\") + \"]\";\r\n\r\n return batch;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public markAsSent(payload: string[]) {\r\n this._buffer = this.removePayloadsFromBuffer(payload, this._buffer);\r\n this.setBuffer(SessionStorageSendBuffer.BUFFER_KEY, this._buffer);\r\n\r\n let sentElements = this.getBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY);\r\n if (sentElements instanceof Array && payload instanceof Array) {\r\n sentElements = sentElements.concat(payload);\r\n\r\n if (sentElements.length > SessionStorageSendBuffer.MAX_BUFFER_SIZE) {\r\n // We send telemetry normally. If the SENT_BUFFER is too big we don't add new elements\r\n // until we receive a response from the backend and the buffer has free space again (see clearSent method)\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.SessionStorageBufferFull,\r\n \"Sent buffer reached its maximum size: \" + sentElements.length,\r\n true);\r\n\r\n sentElements.length = SessionStorageSendBuffer.MAX_BUFFER_SIZE;\r\n }\r\n\r\n this.setBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY, sentElements);\r\n }\r\n }\r\n\r\n public clearSent(payload: string[]) {\r\n let sentElements = this.getBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY);\r\n sentElements = this.removePayloadsFromBuffer(payload, sentElements);\r\n\r\n this.setBuffer(SessionStorageSendBuffer.SENT_BUFFER_KEY, sentElements);\r\n }\r\n\r\n private removePayloadsFromBuffer(payloads: string[], buffer: string[]): string[] {\r\n const remaining: string[] = [];\r\n\r\n for (const i in buffer) {\r\n let contains = false;\r\n for (const j in payloads) {\r\n if (payloads[j] === buffer[i]) {\r\n contains = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!contains) {\r\n remaining.push(buffer[i]);\r\n }\r\n };\r\n\r\n return remaining;\r\n }\r\n\r\n private getBuffer(key: string): string[] {\r\n let prefixedKey = key;\r\n try {\r\n prefixedKey = this._config.namePrefix && this._config.namePrefix() ? this._config.namePrefix() + \"_\" + prefixedKey : prefixedKey;\r\n const bufferJson = Util.getSessionStorage(this._logger, prefixedKey);\r\n if (bufferJson) {\r\n const buffer: string[] = getJSON().parse(bufferJson);\r\n if (buffer) {\r\n return buffer;\r\n }\r\n }\r\n } catch (e) {\r\n this._logger.throwInternal(LoggingSeverity.CRITICAL,\r\n _InternalMessageId.FailedToRestoreStorageBuffer,\r\n \" storage key: \" + prefixedKey + \", \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private setBuffer(key: string, buffer: string[]) {\r\n let prefixedKey = key;\r\n try {\r\n prefixedKey = this._config.namePrefix && this._config.namePrefix() ? this._config.namePrefix() + \"_\" + prefixedKey : prefixedKey;\r\n const bufferJson = JSON.stringify(buffer);\r\n Util.setSessionStorage(this._logger, prefixedKey, bufferJson);\r\n } catch (e) {\r\n // if there was an error, clear the buffer\r\n // telemetry is stored in the _buffer array so we won't loose any items\r\n Util.setSessionStorage(this._logger, prefixedKey, JSON.stringify([]));\r\n\r\n this._logger.throwInternal(LoggingSeverity.WARNING,\r\n _InternalMessageId.FailedToSetStorageBuffer,\r\n \" storage key: \" + prefixedKey + \", \" + Util.getExceptionName(e) + \". Buffer cleared\",\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { Envelope as AIEnvelope } from '../../Interfaces/Contracts/Generated/Envelope';\r\nimport { Base } from '../../Interfaces/Contracts/Generated/Base';\r\nimport { IEnvelope } from '../../Interfaces/Telemetry/IEnvelope';\r\nimport { DataSanitizer } from './DataSanitizer';\r\nimport { FieldType } from '../../Enums';\r\nimport { Util } from '../../Util';\r\nimport { IDiagnosticLogger, CoreUtils } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class Envelope extends AIEnvelope implements IEnvelope {\r\n\r\n /**\r\n * The data contract for serializing this object.\r\n */\r\n public aiDataContract: any;\r\n\r\n /**\r\n * Constructs a new instance of telemetry data.\r\n */\r\n constructor(logger: IDiagnosticLogger, data: Base, name: string) {\r\n super();\r\n\r\n this.name = DataSanitizer.sanitizeString(logger, name) || Util.NotSpecified;\r\n this.data = data;\r\n this.time = CoreUtils.toISOString(new Date());\r\n\r\n this.aiDataContract = {\r\n time: FieldType.Required,\r\n iKey: FieldType.Required,\r\n name: FieldType.Required,\r\n sampleRate: () => {\r\n return (this.sampleRate === 100) ? FieldType.Hidden : FieldType.Required;\r\n },\r\n tags: FieldType.Required,\r\n data: FieldType.Required\r\n };\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { Base } from './Base';\r\n\r\n/**\r\n * System variables for a telemetry item.\r\n */\r\nexport class Envelope {\r\n\r\n /**\r\n * Envelope version. For internal use only. By assigning this the default, it will not be serialized within the payload unless changed to a value other than #1.\r\n */\r\n public ver: number;\r\n\r\n /**\r\n * Type name of telemetry data item.\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Event date time when telemetry item was created. This is the wall clock time on the client when the event was generated. There is no guarantee that the client's time is accurate. This field must be formatted in UTC ISO 8601 format, with a trailing 'Z' character, as described publicly on https://en.wikipedia.org/wiki/ISO_8601#UTC. Note: the number of decimal seconds digits provided are variable (and unspecified). Consumers should handle this, i.e. managed code consumers should not use format 'O' for parsing as it specifies a fixed length. Example: 2009-06-15T13:45:30.0000000Z.\r\n */\r\n public time: string;\r\n\r\n /**\r\n * Sampling rate used in application. This telemetry item represents 1 / sampleRate actual telemetry items.\r\n */\r\n public sampleRate: number;\r\n\r\n /**\r\n * Sequence field used to track absolute order of uploaded events.\r\n */\r\n public seq: string;\r\n\r\n /**\r\n * The application's instrumentation key. The key is typically represented as a GUID, but there are cases when it is not a guid. No code should rely on iKey being a GUID. Instrumentation key is case insensitive.\r\n */\r\n public iKey: string;\r\n\r\n /**\r\n * Key/value collection of context properties. See ContextTagKeys for information on available properties.\r\n */\r\n public tags: any;\r\n\r\n /**\r\n * Telemetry data item.\r\n */\r\n public data: Base;\r\n\r\n constructor() {\r\n this.ver = 1;\r\n this.sampleRate = 100.0;\r\n this.tags = {};\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n/**\r\n * This is an internal property used to cause internal (reporting) requests to be ignored from reporting\r\n * additional telemetry, to handle polyfil implementations ALL urls used with a disabled request will \r\n * also be ignored for future requests even when this property is not provided.\r\n * Tagging as Ignore as this is an internal value and is not expected to be used outside of the SDK\r\n * @ignore\r\n */\r\nexport const DisabledPropertyName: string = \"Microsoft_ApplicationInsights_BypassAjaxInstrumentation\";\r\nexport const SampleRate = \"sampleRate\";\r\nexport const ProcessLegacy = \"ProcessLegacy\";\r\nexport const HttpMethod = \"http.method\";\r\nexport const DEFAULT_BREEZE_ENDPOINT = \"https://dc.services.visualstudio.com\";","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nexport class ContextTagKeys {\r\n\r\n /**\r\n * Application version. Information in the application context fields is always about the application that is sending the telemetry.\r\n */\r\n public applicationVersion: string;\r\n\r\n /**\r\n * Application build.\r\n */\r\n public applicationBuild: string;\r\n\r\n /**\r\n * Application type id.\r\n */\r\n public applicationTypeId: string;\r\n\r\n /**\r\n * Application id.\r\n */\r\n public applicationId: string;\r\n\r\n /**\r\n * Application layer.\r\n */\r\n public applicationLayer: string;\r\n\r\n /**\r\n * Unique client device id. Computer name in most cases.\r\n */\r\n public deviceId: string;\r\n public deviceIp: string;\r\n public deviceLanguage: string;\r\n\r\n /**\r\n * Device locale using - pattern, following RFC 5646. Example 'en-US'.\r\n */\r\n public deviceLocale: string;\r\n\r\n /**\r\n * Model of the device the end user of the application is using. Used for client scenarios. If this field is empty then it is derived from the user agent.\r\n */\r\n public deviceModel: string;\r\n public deviceFriendlyName: string;\r\n public deviceNetwork: string;\r\n public deviceNetworkName: string;\r\n\r\n /**\r\n * Client device OEM name taken from the browser.\r\n */\r\n public deviceOEMName: string;\r\n public deviceOS: string;\r\n\r\n /**\r\n * Operating system name and version of the device the end user of the application is using. If this field is empty then it is derived from the user agent. Example 'Windows 10 Pro 10.0.10586.0'\r\n */\r\n public deviceOSVersion: string;\r\n\r\n /**\r\n * Name of the instance where application is running. Computer name for on-premisis, instance name for Azure.\r\n */\r\n public deviceRoleInstance: string;\r\n\r\n /**\r\n * Name of the role application is part of. Maps directly to the role name in azure.\r\n */\r\n public deviceRoleName: string;\r\n public deviceScreenResolution: string;\r\n\r\n /**\r\n * The type of the device the end user of the application is using. Used primarily to distinguish JavaScript telemetry from server side telemetry. Examples: 'PC', 'Phone', 'Browser'. 'PC' is the default value.\r\n */\r\n public deviceType: string;\r\n public deviceMachineName: string;\r\n public deviceVMName: string;\r\n public deviceBrowser: string;\r\n\r\n /**\r\n * The browser name and version as reported by the browser.\r\n */\r\n public deviceBrowserVersion: string;\r\n\r\n /**\r\n * The IP address of the client device. IPv4 and IPv6 are supported. Information in the location context fields is always about the end user. When telemetry is sent from a service, the location context is about the user that initiated the operation in the service.\r\n */\r\n public locationIp: string;\r\n\r\n /**\r\n * The country of the client device. If any of Country, Province, or City is specified, those values will be preferred over geolocation of the IP address field. Information in the location context fields is always about the end user. When telemetry is sent from a service, the location context is about the user that initiated the operation in the service.\r\n */\r\n public locationCountry: string;\r\n\r\n /**\r\n * The province/state of the client device. If any of Country, Province, or City is specified, those values will be preferred over geolocation of the IP address field. Information in the location context fields is always about the end user. When telemetry is sent from a service, the location context is about the user that initiated the operation in the service.\r\n */\r\n public locationProvince: string;\r\n\r\n /**\r\n * The city of the client device. If any of Country, Province, or City is specified, those values will be preferred over geolocation of the IP address field. Information in the location context fields is always about the end user. When telemetry is sent from a service, the location context is about the user that initiated the operation in the service.\r\n */\r\n public locationCity: string;\r\n\r\n /**\r\n * A unique identifier for the operation instance. The operation.id is created by either a request or a page view. All other telemetry sets this to the value for the containing request or page view. Operation.id is used for finding all the telemetry items for a specific operation instance.\r\n */\r\n public operationId: string;\r\n\r\n /**\r\n * The name (group) of the operation. The operation.name is created by either a request or a page view. All other telemetry items set this to the value for the containing request or page view. Operation.name is used for finding all the telemetry items for a group of operations (i.e. 'GET Home/Index').\r\n */\r\n public operationName: string;\r\n\r\n /**\r\n * The unique identifier of the telemetry item's immediate parent.\r\n */\r\n public operationParentId: string;\r\n public operationRootId: string;\r\n\r\n /**\r\n * Name of synthetic source. Some telemetry from the application may represent a synthetic traffic. It may be web crawler indexing the web site, site availability tests or traces from diagnostic libraries like Application Insights SDK itself.\r\n */\r\n public operationSyntheticSource: string;\r\n\r\n /**\r\n * The correlation vector is a light weight vector clock which can be used to identify and order related events across clients and services.\r\n */\r\n public operationCorrelationVector: string;\r\n\r\n /**\r\n * Session ID - the instance of the user's interaction with the app. Information in the session context fields is always about the end user. When telemetry is sent from a service, the session context is about the user that initiated the operation in the service.\r\n */\r\n public sessionId: string;\r\n\r\n /**\r\n * Boolean value indicating whether the session identified by ai.session.id is first for the user or not.\r\n */\r\n public sessionIsFirst: string;\r\n public sessionIsNew: string;\r\n public userAccountAcquisitionDate: string;\r\n\r\n /**\r\n * In multi-tenant applications this is the account ID or name which the user is acting with. Examples may be subscription ID for Azure portal or blog name blogging platform.\r\n */\r\n public userAccountId: string;\r\n\r\n /**\r\n * The browser's user agent string as reported by the browser. This property will be used to extract informaiton regarding the customer's browser but will not be stored. Use custom properties to store the original user agent.\r\n */\r\n public userAgent: string;\r\n\r\n /**\r\n * Anonymous user id. Represents the end user of the application. When telemetry is sent from a service, the user context is about the user that initiated the operation in the service.\r\n */\r\n public userId: string;\r\n\r\n /**\r\n * Store region for UWP applications.\r\n */\r\n public userStoreRegion: string;\r\n\r\n /**\r\n * Authenticated user id. The opposite of ai.user.id, this represents the user with a friendly name. Since it's PII information it is not collected by default by most SDKs.\r\n */\r\n public userAuthUserId: string;\r\n public userAnonymousUserAcquisitionDate: string;\r\n public userAuthenticatedUserAcquisitionDate: string;\r\n public cloudName: string;\r\n\r\n /**\r\n * Name of the role the application is a part of. Maps directly to the role name in azure.\r\n */\r\n public cloudRole: string;\r\n public cloudRoleVer: string;\r\n\r\n /**\r\n * Name of the instance where the application is running. Computer name for on-premisis, instance name for Azure.\r\n */\r\n public cloudRoleInstance: string;\r\n public cloudEnvironment: string;\r\n public cloudLocation: string;\r\n public cloudDeploymentUnit: string;\r\n\r\n /**\r\n * SDK version. See https://github.com/microsoft/ApplicationInsights-Home/blob/master/SDK-AUTHORING.md#sdk-version-specification for information.\r\n */\r\n public internalSdkVersion: string;\r\n\r\n /**\r\n * Agent version. Used to indicate the version of StatusMonitor installed on the computer if it is used for data collection.\r\n */\r\n public internalAgentVersion: string;\r\n\r\n /**\r\n * This is the node name used for billing purposes. Use it to override the standard detection of nodes.\r\n */\r\n public internalNodeName: string;\r\n\r\n constructor() {\r\n this.applicationVersion = \"ai.application.ver\";\r\n this.applicationBuild = \"ai.application.build\";\r\n this.applicationTypeId = \"ai.application.typeId\";\r\n this.applicationId = \"ai.application.applicationId\";\r\n this.applicationLayer = \"ai.application.layer\";\r\n this.deviceId = \"ai.device.id\";\r\n this.deviceIp = \"ai.device.ip\";\r\n this.deviceLanguage = \"ai.device.language\";\r\n this.deviceLocale = \"ai.device.locale\";\r\n this.deviceModel = \"ai.device.model\";\r\n this.deviceFriendlyName = \"ai.device.friendlyName\";\r\n this.deviceNetwork = \"ai.device.network\";\r\n this.deviceNetworkName = \"ai.device.networkName\";\r\n this.deviceOEMName = \"ai.device.oemName\";\r\n this.deviceOS = \"ai.device.os\";\r\n this.deviceOSVersion = \"ai.device.osVersion\";\r\n this.deviceRoleInstance = \"ai.device.roleInstance\";\r\n this.deviceRoleName = \"ai.device.roleName\";\r\n this.deviceScreenResolution = \"ai.device.screenResolution\";\r\n this.deviceType = \"ai.device.type\";\r\n this.deviceMachineName = \"ai.device.machineName\";\r\n this.deviceVMName = \"ai.device.vmName\";\r\n this.deviceBrowser = \"ai.device.browser\";\r\n this.deviceBrowserVersion = \"ai.device.browserVersion\";\r\n this.locationIp = \"ai.location.ip\";\r\n this.locationCountry = \"ai.location.country\";\r\n this.locationProvince = \"ai.location.province\";\r\n this.locationCity = \"ai.location.city\";\r\n this.operationId = \"ai.operation.id\";\r\n this.operationName = \"ai.operation.name\";\r\n this.operationParentId = \"ai.operation.parentId\";\r\n this.operationRootId = \"ai.operation.rootId\";\r\n this.operationSyntheticSource = \"ai.operation.syntheticSource\";\r\n this.operationCorrelationVector = \"ai.operation.correlationVector\";\r\n\r\n this.sessionId = \"ai.session.id\";\r\n this.sessionIsFirst = \"ai.session.isFirst\";\r\n this.sessionIsNew = \"ai.session.isNew\";\r\n this.userAccountAcquisitionDate = \"ai.user.accountAcquisitionDate\";\r\n this.userAccountId = \"ai.user.accountId\";\r\n this.userAgent = \"ai.user.userAgent\";\r\n this.userId = \"ai.user.id\";\r\n this.userStoreRegion = \"ai.user.storeRegion\";\r\n this.userAuthUserId = \"ai.user.authUserId\";\r\n this.userAnonymousUserAcquisitionDate = \"ai.user.anonUserAcquisitionDate\";\r\n this.userAuthenticatedUserAcquisitionDate = \"ai.user.authUserAcquisitionDate\";\r\n\r\n this.cloudName = \"ai.cloud.name\";\r\n this.cloudRole = \"ai.cloud.role\";\r\n this.cloudRoleVer = \"ai.cloud.roleVer\";\r\n this.cloudRoleInstance = \"ai.cloud.roleInstance\";\r\n this.cloudEnvironment = \"ai.cloud.environment\";\r\n this.cloudLocation = \"ai.cloud.location\";\r\n this.cloudDeploymentUnit = \"ai.cloud.deploymentUnit\";\r\n this.internalNodeName = \"ai.internal.nodeName\";\r\n this.internalSdkVersion = \"ai.internal.sdkVersion\";\r\n this.internalAgentVersion = \"ai.internal.agentVersion\";\r\n }\r\n}\r\n","import { ContextTagKeys } from \"./Contracts/Generated/ContextTagKeys\";\r\n\r\nexport class Extensions {\r\n public static UserExt = \"user\";\r\n public static DeviceExt = \"device\";\r\n public static TraceExt = \"trace\";\r\n public static WebExt = \"web\";\r\n public static AppExt = \"app\";\r\n public static OSExt = \"os\";\r\n public static SessionExt = \"ses\";\r\n public static SDKExt = \"sdk\";\r\n}\r\n\r\nexport let CtxTagKeys = new ContextTagKeys();","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { Data as AIData } from '../../Interfaces/Contracts/Generated/Data';\r\nimport { ISerializable } from '../../Interfaces/Telemetry/ISerializable';\r\nimport { FieldType } from '../../Enums';\r\n\r\nexport class Data extends AIData implements ISerializable {\r\n\r\n /**\r\n * The data contract for serializing this object.\r\n */\r\n public aiDataContract = {\r\n baseType: FieldType.Required,\r\n baseData: FieldType.Required\r\n }\r\n\r\n /**\r\n * Constructs a new instance of telemetry data.\r\n */\r\n constructor(baseType: string, data: TDomain) {\r\n super();\r\n\r\n this.baseType = baseType;\r\n this.baseData = data;\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\nimport { Base } from './Base';\r\n\r\n/**\r\n * Data struct to contain both B and C sections.\r\n */\r\nexport class Data extends Base {\r\n\r\n /**\r\n * Name of item (B section) if any. If telemetry data is derived straight from this, this should be null.\r\n */\r\n public baseType: string;\r\n\r\n /**\r\n * Container for data item (B section).\r\n */\r\n public baseData: TDomain;\r\n\r\n constructor() {\r\n super();\r\n\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// THIS FILE WAS AUTOGENERATED\r\n\r\n/**\r\n * Data struct to contain only C section with custom fields.\r\n */\r\nexport class Base {\r\n\r\n /**\r\n * Name of item (B section) if any. If telemetry data is derived straight from this, this should be null.\r\n */\r\n public baseType: string;\r\n\r\n constructor() {\r\n }\r\n}\r\n","import {\r\n IEnvelope, Data, Envelope,\r\n RemoteDependencyData, Event, Exception,\r\n Metric, PageView, Trace, PageViewPerformance, IDependencyTelemetry,\r\n IPageViewPerformanceTelemetry, CtxTagKeys,\r\n HttpMethod, IPageViewTelemetryInternal, IWeb,\r\n Util,\r\n IExceptionTelemetry,\r\n IExceptionInternal,\r\n SampleRate\r\n} from '@microsoft/applicationinsights-common';\r\nimport {\r\n ITelemetryItem, CoreUtils,\r\n IDiagnosticLogger, LoggingSeverity, _InternalMessageId,\r\n hasJSON, getJSON\r\n} from '@microsoft/applicationinsights-core-js';\r\n\r\n// these two constants are used to filter out properties not needed when trying to extract custom properties and measurements from the incoming payload\r\nconst baseType: string = \"baseType\";\r\nconst baseData: string = \"baseData\";\r\n\r\nexport abstract class EnvelopeCreator {\r\n public static Version = \"2.5.4\";\r\n\r\n protected static extractPropsAndMeasurements(data: { [key: string]: any }, properties: { [key: string]: any }, measurements: { [key: string]: any }) {\r\n if (!CoreUtils.isNullOrUndefined(data)) {\r\n for (const key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n const value = data[key];\r\n if (CoreUtils.isNumber(value)) {\r\n measurements[key] = value;\r\n } else if (CoreUtils.isString(value)) {\r\n properties[key] = value;\r\n } else if (hasJSON()) {\r\n properties[key] = getJSON().stringify(value);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // TODO: Do we want this to take logger as arg or use this._logger as nonstatic?\r\n protected static createEnvelope(logger: IDiagnosticLogger, envelopeType: string, telemetryItem: ITelemetryItem, data: Data): IEnvelope {\r\n const envelope = new Envelope(logger, data, envelopeType);\r\n if (telemetryItem[SampleRate]) {\r\n envelope.sampleRate = telemetryItem[SampleRate];\r\n }\r\n envelope.iKey = telemetryItem.iKey;\r\n const iKeyNoDashes = telemetryItem.iKey.replace(/-/g, \"\");\r\n envelope.name = envelope.name.replace(\"{0}\", iKeyNoDashes);\r\n\r\n // extract all extensions from ctx\r\n EnvelopeCreator.extractPartAExtensions(telemetryItem, envelope);\r\n\r\n // loop through the envelope tags (extension of Part A) and pick out the ones that should go in outgoing envelope tags\r\n if (!telemetryItem.tags) {\r\n telemetryItem.tags = [];\r\n }\r\n\r\n return envelope;\r\n }\r\n\r\n /*\r\n * Maps Part A data from CS 4.0\r\n */\r\n private static extractPartAExtensions(item: ITelemetryItem, env: IEnvelope) {\r\n // todo: switch to keys from common in this method\r\n if (!env.tags) {\r\n env.tags = {};\r\n }\r\n\r\n if (!item.ext) {\r\n item.ext = {};\r\n }\r\n\r\n if (!item.tags) {\r\n item.tags = [];\r\n }\r\n\r\n if (item.ext.user) {\r\n if (item.ext.user.authId) {\r\n env.tags[CtxTagKeys.userAuthUserId] = item.ext.user.authId;\r\n }\r\n\r\n const userId = item.ext.user.id || item.ext.user.localId;\r\n if (userId) {\r\n env.tags[CtxTagKeys.userId] = userId;\r\n }\r\n }\r\n\r\n if (item.ext.app) {\r\n if (item.ext.app.sesId) {\r\n env.tags[CtxTagKeys.sessionId] = item.ext.app.sesId;\r\n }\r\n }\r\n\r\n if (item.ext.device) {\r\n if (item.ext.device.id || item.ext.device.localId) {\r\n env.tags[CtxTagKeys.deviceId] = item.ext.device.id || item.ext.device.localId;\r\n }\r\n\r\n if (item.ext.device.deviceClass) {\r\n env.tags[CtxTagKeys.deviceType] = item.ext.device.deviceClass;\r\n }\r\n\r\n if (item.ext.device.ip) {\r\n env.tags[CtxTagKeys.deviceIp] = item.ext.device.ip;\r\n }\r\n }\r\n\r\n\r\n if (item.ext.web) {\r\n const web: IWeb = item.ext.web as IWeb;\r\n\r\n if (web.browserLang) {\r\n env.tags[CtxTagKeys.deviceLanguage] = web.browserLang;\r\n }\r\n if (web.browserVer) {\r\n env.tags[CtxTagKeys.deviceBrowserVersion] = web.browserVer;\r\n }\r\n\r\n if (web.browser) {\r\n env.tags[CtxTagKeys.deviceBrowser] = web.browser;\r\n }\r\n env.data = env.data || {};\r\n env.data.baseData = env.data.baseData || {};\r\n env.data.baseData.properties = env.data.baseData.properties || {};\r\n\r\n if (web.domain) {\r\n env.data.baseData.properties['domain'] = web.domain;\r\n }\r\n\r\n if (web.isManual) {\r\n env.data.baseData.properties['isManual'] = web.isManual.toString();\r\n }\r\n\r\n if (web.screenRes) {\r\n env.data.baseData.properties['screenRes'] = web.screenRes;\r\n }\r\n\r\n if (web.userConsent) {\r\n env.data.baseData.properties['userConsent'] = web.userConsent.toString();\r\n }\r\n }\r\n\r\n if (item.ext.device) {\r\n if (item.ext.device.model) {\r\n env.tags[CtxTagKeys.deviceModel] = item.ext.device.model;\r\n }\r\n }\r\n\r\n if (item.ext.os && item.ext.os.name) {\r\n env.tags[CtxTagKeys.deviceOS] = item.ext.os.name;\r\n }\r\n\r\n if (item.ext.device) {\r\n if (item.ext.device.deviceType) {\r\n env.tags[CtxTagKeys.deviceType] = item.ext.device.deviceType;\r\n }\r\n }\r\n\r\n // No support for mapping Trace.traceState to 2.0 as it is currently empty\r\n\r\n if (item.ext.trace) {\r\n if (item.ext.trace.parentID) {\r\n env.tags[CtxTagKeys.operationParentId] = item.ext.trace.parentID;\r\n }\r\n\r\n if (item.ext.trace.name) {\r\n env.tags[CtxTagKeys.operationName] = item.ext.trace.name;\r\n }\r\n\r\n if (item.ext.trace.traceID) {\r\n env.tags[CtxTagKeys.operationId] = item.ext.trace.traceID;\r\n }\r\n }\r\n\r\n // Sample 4.0 schema\r\n // {\r\n // \"time\" : \"2018-09-05T22:51:22.4936Z\",\r\n // \"name\" : \"MetricWithNamespace\",\r\n // \"iKey\" : \"ABC-5a4cbd20-e601-4ef5-a3c6-5d6577e4398e\",\r\n // \"ext\": { \"cloud\": {\r\n // \"role\": \"WATSON3\",\r\n // \"roleInstance\": \"CO4AEAP00000260\"\r\n // },\r\n // \"device\": {}, \"correlation\": {} },\r\n // \"tags\": [\r\n // { \"amazon.region\" : \"east2\" },\r\n // { \"os.expid\" : \"wp:02df239\" }\r\n // ]\r\n // }\r\n\r\n const tgs = {};\r\n // deals with tags.push({object})\r\n for(let i = item.tags.length - 1; i >= 0; i--){\r\n const tg = item.tags[i];\r\n // CoreUtils.objKeys returns an array of keys\r\n CoreUtils.arrForEach(CoreUtils.objKeys(tg), key => {\r\n tgs[key] = tg[key];\r\n })\r\n item.tags.splice(i, 1);\r\n }\r\n // deals with tags[key]=value\r\n for(const tg in item.tags){\r\n tgs[tg] = item.tags[tg];\r\n }\r\n\r\n env.tags = { ...env.tags, ...tgs };\r\n if(!env.tags[CtxTagKeys.internalSdkVersion]) {\r\n // Append a version in case it is not already set\r\n env.tags[CtxTagKeys.internalSdkVersion] = `javascript:${EnvelopeCreator.Version}`;\r\n }\r\n }\r\n protected _logger: IDiagnosticLogger;\r\n\r\n abstract Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope;\r\n}\r\n\r\nexport class DependencyEnvelopeCreator extends EnvelopeCreator {\r\n static DependencyEnvelopeCreator = new DependencyEnvelopeCreator();\r\n\r\n Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope {\r\n this._logger = logger;\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.baseData)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TelemetryEnvelopeInvalid, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n\r\n const customMeasurements = telemetryItem.baseData.measurements || {};\r\n const customProperties = telemetryItem.baseData.properties || {};\r\n EnvelopeCreator.extractPropsAndMeasurements(telemetryItem.data, customProperties, customMeasurements);\r\n const bd = telemetryItem.baseData as IDependencyTelemetry;\r\n if (CoreUtils.isNullOrUndefined(bd)) {\r\n logger.warnToConsole(\"Invalid input for dependency data\");\r\n return null;\r\n }\r\n\r\n const id = bd.id;\r\n const absoluteUrl = bd.target;\r\n const command = bd.name;\r\n const duration = bd.duration;\r\n const success = bd.success;\r\n const resultCode = bd.responseCode;\r\n const requestAPI = bd.type;\r\n const correlationContext = bd.correlationContext;\r\n const method = bd.properties && bd.properties[HttpMethod] ? bd.properties[HttpMethod] : \"GET\";\r\n const baseData = new RemoteDependencyData(logger, id, absoluteUrl, command, duration, success, resultCode, method, requestAPI, correlationContext, customProperties, customMeasurements);\r\n const data = new Data(RemoteDependencyData.dataType, baseData);\r\n return EnvelopeCreator.createEnvelope(logger, RemoteDependencyData.envelopeType, telemetryItem, data);\r\n }\r\n}\r\n\r\nexport class EventEnvelopeCreator extends EnvelopeCreator {\r\n static EventEnvelopeCreator = new EventEnvelopeCreator();\r\n\r\n Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope {\r\n this._logger = logger;\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.baseData)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TelemetryEnvelopeInvalid, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n\r\n let customProperties = {};\r\n let customMeasurements = {};\r\n if (telemetryItem.baseType !== Event.dataType) {\r\n customProperties['baseTypeSource'] = telemetryItem.baseType; // save the passed in base type as a property\r\n }\r\n\r\n if (telemetryItem.baseType === Event.dataType) { // take collection\r\n customProperties = telemetryItem.baseData.properties || {};\r\n customMeasurements = telemetryItem.baseData.measurements || {};\r\n } else { // if its not a known type, convert to custom event\r\n if (telemetryItem.baseData) {\r\n EnvelopeCreator.extractPropsAndMeasurements(telemetryItem.baseData, customProperties, customMeasurements);\r\n }\r\n }\r\n\r\n // Exract root level properties from part C telemetryItem.data\r\n EnvelopeCreator.extractPropsAndMeasurements(telemetryItem.data, customProperties, customMeasurements);\r\n const eventName = telemetryItem.baseData.name;\r\n const baseData = new Event(logger, eventName, customProperties, customMeasurements);\r\n const data = new Data(Event.dataType, baseData);\r\n return EnvelopeCreator.createEnvelope(logger, Event.envelopeType, telemetryItem, data);\r\n }\r\n}\r\n\r\nexport class ExceptionEnvelopeCreator extends EnvelopeCreator {\r\n static ExceptionEnvelopeCreator = new ExceptionEnvelopeCreator();\r\n\r\n Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope {\r\n this._logger = logger;\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.baseData)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TelemetryEnvelopeInvalid, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n const bd = telemetryItem.baseData as IExceptionInternal;\r\n const baseData = Exception.CreateFromInterface(logger, bd);\r\n const data = new Data(Exception.dataType, baseData);\r\n return EnvelopeCreator.createEnvelope(logger, Exception.envelopeType, telemetryItem, data);\r\n }\r\n}\r\n\r\nexport class MetricEnvelopeCreator extends EnvelopeCreator {\r\n static MetricEnvelopeCreator = new MetricEnvelopeCreator();\r\n\r\n Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope {\r\n this._logger = logger;\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.baseData)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TelemetryEnvelopeInvalid, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n\r\n const props = telemetryItem.baseData.properties || {};\r\n const measurements = telemetryItem.baseData.measurements || {};\r\n EnvelopeCreator.extractPropsAndMeasurements(telemetryItem.data, props, measurements);\r\n const name = telemetryItem.baseData.name;\r\n const average = telemetryItem.baseData.average;\r\n const sampleCount = telemetryItem.baseData.sampleCount;\r\n const min = telemetryItem.baseData.min;\r\n const max = telemetryItem.baseData.max;\r\n const baseData = new Metric(logger, name, average, sampleCount, min, max, props, measurements);\r\n const data = new Data(Metric.dataType, baseData);\r\n return EnvelopeCreator.createEnvelope(logger, Metric.envelopeType, telemetryItem, data);\r\n }\r\n}\r\n\r\nexport class PageViewEnvelopeCreator extends EnvelopeCreator {\r\n static PageViewEnvelopeCreator = new PageViewEnvelopeCreator();\r\n\r\n Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope {\r\n this._logger = logger;\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.baseData)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TelemetryEnvelopeInvalid, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n\r\n // Since duration is not part of the domain properties in Common Schema, extract it from part C\r\n let duration;\r\n if (!CoreUtils.isNullOrUndefined(telemetryItem.baseData) &&\r\n !CoreUtils.isNullOrUndefined(telemetryItem.baseData.properties) &&\r\n !CoreUtils.isNullOrUndefined(telemetryItem.baseData.properties.duration)) { // from part B properties\r\n duration = telemetryItem.baseData.properties.duration;\r\n delete telemetryItem.baseData.properties.duration;\r\n } else if (!CoreUtils.isNullOrUndefined(telemetryItem.data) &&\r\n !CoreUtils.isNullOrUndefined(telemetryItem.data[\"duration\"])) { // from custom properties\r\n duration = telemetryItem.data[\"duration\"];\r\n delete telemetryItem.data[\"duration\"];\r\n }\r\n\r\n const bd = telemetryItem.baseData as IPageViewTelemetryInternal;\r\n\r\n // special case: pageview.id is grabbed from current operation id. Analytics plugin is decoupled from properties plugin, so this is done here instead. This can be made a default telemetry intializer instead if needed to be decoupled from channel\r\n let currentContextId;\r\n if (telemetryItem.ext && telemetryItem.ext.trace && telemetryItem.ext.trace.traceID) {\r\n currentContextId = telemetryItem.ext.trace.traceID;\r\n }\r\n const id = bd.id || currentContextId\r\n const name = bd.name;\r\n const url = bd.uri;\r\n const properties = bd.properties || {};\r\n const measurements = bd.measurements || {};\r\n\r\n // refUri is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!CoreUtils.isNullOrUndefined(bd.refUri)) {\r\n properties[\"refUri\"] = bd.refUri;\r\n }\r\n\r\n // pageType is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!CoreUtils.isNullOrUndefined(bd.pageType)) {\r\n properties[\"pageType\"] = bd.pageType;\r\n }\r\n\r\n // isLoggedIn is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!CoreUtils.isNullOrUndefined(bd.isLoggedIn)) {\r\n properties[\"isLoggedIn\"] = bd.isLoggedIn.toString();\r\n }\r\n\r\n // pageTags is a field that Breeze still does not recognize as part of Part B. For now, put it in Part C until it supports it as a domain property\r\n if (!CoreUtils.isNullOrUndefined(bd.properties)) {\r\n const pageTags = bd.properties;\r\n for (const key in pageTags) {\r\n if (pageTags.hasOwnProperty(key)) {\r\n properties[key] = pageTags[key];\r\n }\r\n }\r\n }\r\n\r\n EnvelopeCreator.extractPropsAndMeasurements(telemetryItem.data, properties, measurements);\r\n const baseData = new PageView(logger, name, url, duration, properties, measurements, id);\r\n const data = new Data(PageView.dataType, baseData);\r\n return EnvelopeCreator.createEnvelope(logger, PageView.envelopeType, telemetryItem, data);\r\n }\r\n}\r\n\r\nexport class PageViewPerformanceEnvelopeCreator extends EnvelopeCreator {\r\n static PageViewPerformanceEnvelopeCreator = new PageViewPerformanceEnvelopeCreator();\r\n\r\n Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope {\r\n this._logger = logger;\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.baseData)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TelemetryEnvelopeInvalid, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n\r\n const bd = telemetryItem.baseData as IPageViewPerformanceTelemetry;\r\n const name = bd.name;\r\n const url = bd.uri || (bd as any).url;\r\n const properties = bd.properties || {};\r\n const measurements = bd.measurements || {};\r\n EnvelopeCreator.extractPropsAndMeasurements(telemetryItem.data, properties, measurements);\r\n const baseData = new PageViewPerformance(logger, name, url, undefined, properties, measurements, bd);\r\n const data = new Data(PageViewPerformance.dataType, baseData);\r\n return EnvelopeCreator.createEnvelope(logger, PageViewPerformance.envelopeType, telemetryItem, data);\r\n }\r\n}\r\n\r\nexport class TraceEnvelopeCreator extends EnvelopeCreator {\r\n static TraceEnvelopeCreator = new TraceEnvelopeCreator();\r\n\r\n Create(logger: IDiagnosticLogger, telemetryItem: ITelemetryItem): IEnvelope {\r\n this._logger = logger;\r\n if (CoreUtils.isNullOrUndefined(telemetryItem.baseData)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TelemetryEnvelopeInvalid, \"telemetryItem.baseData cannot be null.\");\r\n }\r\n\r\n const message = telemetryItem.baseData.message;\r\n const severityLevel = telemetryItem.baseData.severityLevel;\r\n const props = telemetryItem.baseData.properties || {};\r\n const measurements = telemetryItem.baseData.measurements || {};\r\n EnvelopeCreator.extractPropsAndMeasurements(telemetryItem.data, props, measurements);\r\n const baseData = new Trace(logger, message, severityLevel, props, measurements);\r\n const data = new Data(Trace.dataType, baseData);\r\n return EnvelopeCreator.createEnvelope(logger, Trace.envelopeType, telemetryItem, data);\r\n }\r\n}\r\n","import { Util, ISerializable, FieldType } from '@microsoft/applicationinsights-common';\r\nimport { IDiagnosticLogger, LoggingSeverity, _InternalMessageId, CoreUtils, getJSON } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class Serializer {\r\n\r\n private _logger: IDiagnosticLogger;\r\n\r\n constructor(logger: IDiagnosticLogger) {\r\n this._logger = logger;\r\n }\r\n\r\n /**\r\n * Serializes the current object to a JSON string.\r\n */\r\n public serialize(input: ISerializable): string {\r\n const output = this._serializeObject(input, \"root\");\r\n try {\r\n return getJSON().stringify(output);\r\n } catch (e) {\r\n // if serialization fails return an empty string\r\n this._logger.throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.CannotSerializeObject, (e && CoreUtils.isFunction(e.toString)) ? e.toString() : \"Error serializing object\", null, true);\r\n }\r\n }\r\n\r\n private _serializeObject(source: ISerializable, name: string): any {\r\n const circularReferenceCheck = \"__aiCircularRefCheck\";\r\n let output = {};\r\n\r\n if (!source) {\r\n this._logger.throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.CannotSerializeObject, \"cannot serialize object because it is null or undefined\", { name }, true);\r\n return output;\r\n }\r\n\r\n if (source[circularReferenceCheck]) {\r\n this._logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.CircularReferenceDetected, \"Circular reference detected while serializing object\", { name }, true);\r\n return output;\r\n }\r\n\r\n if (!source.aiDataContract) {\r\n // special case for measurements/properties/tags\r\n if (name === \"measurements\") {\r\n output = this._serializeStringMap(source, \"number\", name);\r\n } else if (name === \"properties\") {\r\n output = this._serializeStringMap(source, \"string\", name);\r\n } else if (name === \"tags\") {\r\n output = this._serializeStringMap(source, \"string\", name);\r\n } else if (Util.isArray(source)) {\r\n output = this._serializeArray(source as any, name);\r\n } else {\r\n this._logger.throwInternal(LoggingSeverity.WARNING, _InternalMessageId.CannotSerializeObjectNonSerializable, \"Attempting to serialize an object which does not implement ISerializable\", { name }, true);\r\n\r\n try {\r\n // verify that the object can be stringified\r\n getJSON().stringify(source);\r\n output = source;\r\n } catch (e) {\r\n // if serialization fails return an empty string\r\n this._logger.throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.CannotSerializeObject, (e && CoreUtils.isFunction(e.toString)) ? e.toString() : \"Error serializing object\", null, true);\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n source[circularReferenceCheck] = true;\r\n for (const field in source.aiDataContract) {\r\n\r\n const contract = source.aiDataContract[field];\r\n const isRequired = (CoreUtils.isFunction(contract)) ? (contract() & FieldType.Required) : (contract & FieldType.Required);\r\n const isHidden = (CoreUtils.isFunction(contract)) ? (contract() & FieldType.Hidden) : (contract & FieldType.Hidden);\r\n const isArray = contract & FieldType.Array;\r\n\r\n const isPresent = source[field] !== undefined;\r\n const isObject = CoreUtils.isObject(source[field]) && source[field] !== null;\r\n\r\n if (isRequired && !isPresent && !isArray) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.MissingRequiredFieldSpecification,\r\n \"Missing required field specification. The field is required but not present on source\",\r\n { field, name });\r\n\r\n // If not in debug mode, continue and hope the error is permissible\r\n continue;\r\n }\r\n\r\n if (isHidden) {\r\n // Don't serialize hidden fields\r\n continue;\r\n }\r\n\r\n let value;\r\n if (isObject) {\r\n if (isArray) {\r\n // special case; resurse on each object in the source array\r\n value = this._serializeArray(source[field], field);\r\n } else {\r\n // recurse on the source object in this field\r\n value = this._serializeObject(source[field], field);\r\n }\r\n } else {\r\n // assign the source field to the output even if undefined or required\r\n value = source[field];\r\n }\r\n\r\n // only emit this field if the value is defined\r\n if (value !== undefined) {\r\n output[field] = value;\r\n }\r\n }\r\n\r\n delete source[circularReferenceCheck];\r\n return output;\r\n }\r\n\r\n private _serializeArray(sources: ISerializable[], name: string): any[] {\r\n let output;\r\n\r\n if (!!sources) {\r\n if (!Util.isArray(sources)) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.ItemNotInArray,\r\n \"This field was specified as an array in the contract but the item is not an array.\\r\\n\",\r\n { name }, true);\r\n } else {\r\n output = [];\r\n for (let i = 0; i < sources.length; i++) {\r\n const source = sources[i];\r\n const item = this._serializeObject(source, name + \"[\" + i + \"]\");\r\n output.push(item);\r\n }\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n private _serializeStringMap(map: any, expectedType: string, name: string) {\r\n let output;\r\n if (map) {\r\n output = {};\r\n for (const field in map) {\r\n const value = map[field];\r\n if (expectedType === \"string\") {\r\n if (value === undefined) {\r\n output[field] = \"undefined\";\r\n } else if (value === null) {\r\n output[field] = \"null\";\r\n } else if (!value.toString) {\r\n output[field] = \"invalid field: toString() is not defined.\";\r\n }\r\n else {\r\n output[field] = value.toString();\r\n }\r\n }\r\n else if (expectedType === \"number\") {\r\n if (value === undefined) {\r\n output[field] = \"undefined\";\r\n } else if (value === null) {\r\n output[field] = \"null\";\r\n } else {\r\n const num = parseFloat(value);\r\n if (isNaN(num)) {\r\n output[field] = \"NaN\";\r\n }\r\n else {\r\n output[field] = num;\r\n }\r\n }\r\n }\r\n else {\r\n output[field] = \"invalid field: \" + name + \" is of unknown type.\";\r\n this._logger.throwInternal(LoggingSeverity.CRITICAL, output[field], null, true);\r\n }\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n}","import { CoreUtils, EventHelper, getWindow, getDocument, getNavigator } from '@microsoft/applicationinsights-core-js';\r\n\r\n/**\r\n * @description Monitors browser for offline events\r\n * @export default - Offline: Static instance of OfflineListener\r\n * @class OfflineListener\r\n */\r\nexport class OfflineListener {\r\n public static Offline = new OfflineListener;\r\n public isListening: boolean;\r\n private _onlineStatus: boolean = true;\r\n \r\n constructor() {\r\n let _window = getWindow();\r\n let _document = getDocument();\r\n let isListening = false;\r\n let _this = this;\r\n\r\n try {\r\n if (_window) {\r\n if (EventHelper.Attach(_window, 'online', this._setOnline.bind(_this))) {\r\n EventHelper.Attach(_window, 'offline', this._setOffline.bind(_this));\r\n isListening = true;\r\n }\r\n }\r\n \r\n if (_document) {\r\n // Also attach to the document.body or document\r\n let target:any = _document.body || _document;\r\n\r\n if (!CoreUtils.isUndefined(target.ononline)) {\r\n target.ononline = this._setOnline.bind(_this);\r\n target.onoffline = this._setOffline.bind(_this)\r\n isListening = true;\r\n }\r\n }\r\n } catch (e) {\r\n\r\n // this makes react-native less angry\r\n isListening = false;\r\n }\r\n\r\n this.isListening = isListening;\r\n }\r\n\r\n public isOnline(): boolean {\r\n var _navigator = getNavigator();\r\n if (this.isListening) {\r\n return this._onlineStatus\r\n } else if (_navigator && !CoreUtils.isNullOrUndefined(_navigator.onLine)) { // navigator.onLine is undefined in react-native\r\n return _navigator.onLine;\r\n } else {\r\n // Cannot determine online status - report as online\r\n return true;\r\n }\r\n }\r\n\r\n public isOffline(): boolean {\r\n return !this.isOnline();\r\n }\r\n\r\n private _setOnline() {\r\n this._onlineStatus = true;\r\n }\r\n private _setOffline() {\r\n this._onlineStatus = false;\r\n }\r\n}\r\n\r\nexport const Offline = OfflineListener.Offline;\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nexport class HashCodeScoreGenerator {\r\n // We're using 32 bit math, hence max value is (2^31 - 1)\r\n public static INT_MAX_VALUE: number = 2147483647;\r\n\r\n // (Magic number) DJB algorithm can't work on shorter strings (results in poor distribution\r\n private static MIN_INPUT_LENGTH: number = 8;\r\n\r\n public getHashCodeScore(key: string): number {\r\n const score = this.getHashCode(key) / HashCodeScoreGenerator.INT_MAX_VALUE;\r\n return score * 100;\r\n }\r\n\r\n public getHashCode(input: string): number {\r\n if (input === \"\") { return 0; }\r\n\r\n while (input.length < HashCodeScoreGenerator.MIN_INPUT_LENGTH) {\r\n input = input.concat(input);\r\n }\r\n\r\n // 5381 is a magic number: http://stackoverflow.com/questions/10696223/reason-for-5381-number-in-djb-hash-function\r\n let hash: number = 5381;\r\n\r\n for (let i: number = 0; i < input.length; ++i) {\r\n hash = ((hash << 5) + hash) + input.charCodeAt(i);\r\n // 'hash' is of number type which means 53 bit integer (http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types-number-type)\r\n // 'hash & hash' will keep it 32 bit integer - just to make it clearer what the result is.\r\n hash = hash & hash;\r\n }\r\n\r\n return Math.abs(hash);\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { HashCodeScoreGenerator } from './HashCodeScoreGenerator';\r\nimport { ITelemetryItem } from '@microsoft/applicationinsights-core-js';\r\nimport { ContextTagKeys } from '@microsoft/applicationinsights-common';\r\n\r\nexport class SamplingScoreGenerator {\r\n private hashCodeGeneragor: HashCodeScoreGenerator;\r\n private keys: ContextTagKeys;\r\n\r\n constructor() {\r\n this.hashCodeGeneragor = new HashCodeScoreGenerator();\r\n this.keys = new ContextTagKeys();\r\n }\r\n\r\n public getSamplingScore(item: ITelemetryItem): number {\r\n let score: number = 0;\r\n if (item.tags && item.tags[this.keys.userId]) { // search in tags first, then ext\r\n score = this.hashCodeGeneragor.getHashCodeScore(item.tags[this.keys.userId]);\r\n } else if (item.ext && item.ext.user && item.ext.user.id) {\r\n score = this.hashCodeGeneragor.getHashCodeScore(item.ext.user.id);\r\n } else if (item.tags && item.tags[this.keys.operationId]) { // search in tags first, then ext\r\n score = this.hashCodeGeneragor.getHashCodeScore(item.tags[this.keys.operationId]);\r\n } else if (item.ext && item.ext.telemetryTrace && item.ext.telemetryTrace.traceID) {\r\n score = this.hashCodeGeneragor.getHashCodeScore(item.ext.telemetryTrace.traceID);\r\n } else {\r\n // tslint:disable-next-line:insecure-random\r\n score = (Math.random() * 100);\r\n }\r\n\r\n return score;\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { SamplingScoreGenerator } from './SamplingScoreGenerators/SamplingScoreGenerator';\r\nimport { ISample, Metric } from '@microsoft/applicationinsights-common';\r\nimport { ITelemetryItem, IDiagnosticLogger, _InternalMessageId, LoggingSeverity, DiagnosticLogger, CoreUtils } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class Sample implements ISample {\r\n public sampleRate: number;\r\n\r\n // We're using 32 bit math, hence max value is (2^31 - 1)\r\n public INT_MAX_VALUE: number = 2147483647;\r\n private samplingScoreGenerator: SamplingScoreGenerator;\r\n private _logger: IDiagnosticLogger;\r\n\r\n constructor(sampleRate: number, logger?: IDiagnosticLogger) {\r\n this._logger = CoreUtils.isNullOrUndefined(logger) ? new DiagnosticLogger() : logger;\r\n \r\n if (sampleRate > 100 || sampleRate < 0) {\r\n this._logger.throwInternal(LoggingSeverity.WARNING,\r\n _InternalMessageId.SampleRateOutOfRange,\r\n \"Sampling rate is out of range (0..100). Sampling will be disabled, you may be sending too much data which may affect your AI service level.\",\r\n { samplingRate: sampleRate }, true);\r\n this.sampleRate = 100;\r\n }\r\n\r\n this.sampleRate = sampleRate;\r\n this.samplingScoreGenerator = new SamplingScoreGenerator();\r\n }\r\n\r\n /**\r\n * Determines if an envelope is sampled in (i.e. will be sent) or not (i.e. will be dropped).\r\n */\r\n public isSampledIn(envelope: ITelemetryItem): boolean {\r\n const samplingPercentage = this.sampleRate; // 0 - 100\r\n let isSampledIn = false;\r\n\r\n if (samplingPercentage === null || samplingPercentage === undefined || samplingPercentage >= 100) {\r\n return true;\r\n } else if (envelope.baseType === Metric.dataType) {\r\n // exclude MetricData telemetry from sampling\r\n return true;\r\n }\r\n\r\n isSampledIn = this.samplingScoreGenerator.getSamplingScore(envelope) < samplingPercentage;\r\n return isSampledIn;\r\n }\r\n}","import { ISenderConfig, XDomainRequest as IXDomainRequest, IBackendResponse } from './Interfaces';\r\nimport { ISendBuffer, SessionStorageSendBuffer, ArraySendBuffer } from './SendBuffer';\r\nimport {\r\n EnvelopeCreator, DependencyEnvelopeCreator, EventEnvelopeCreator,\r\n ExceptionEnvelopeCreator, MetricEnvelopeCreator, PageViewEnvelopeCreator,\r\n PageViewPerformanceEnvelopeCreator, TraceEnvelopeCreator\r\n} from './EnvelopeCreator';\r\nimport { Serializer } from './Serializer'; // todo move to channel\r\nimport {\r\n DisabledPropertyName, RequestHeaders, Util,\r\n IEnvelope, PageView, Event,\r\n Trace, Exception, Metric,\r\n PageViewPerformance, RemoteDependencyData,\r\n IChannelControlsAI,\r\n IConfig,\r\n ProcessLegacy,\r\n BreezeChannelIdentifier,\r\n SampleRate\r\n} from '@microsoft/applicationinsights-common';\r\nimport {\r\n ITelemetryItem, IProcessTelemetryContext, IConfiguration, CoreUtils,\r\n _InternalMessageId, LoggingSeverity, IDiagnosticLogger, IAppInsightsCore, IPlugin,\r\n getWindow, getNavigator, getJSON, BaseTelemetryPlugin, ITelemetryPluginChain\r\n} from '@microsoft/applicationinsights-core-js';\r\nimport { Offline } from './Offline';\r\nimport { Sample } from './TelemetryProcessors/Sample'\r\n\r\ndeclare var XDomainRequest: {\r\n prototype: IXDomainRequest;\r\n new(): IXDomainRequest;\r\n};\r\n\r\nexport type SenderFunction = (payload: string[], isAsync: boolean) => void;\r\n\r\nfunction _getResponseText(xhr: XMLHttpRequest | IXDomainRequest) {\r\n try {\r\n return xhr.responseText;\r\n } catch (e) {\r\n // Best effort, as XHR may throw while XDR wont so just ignore\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport class Sender extends BaseTelemetryPlugin implements IChannelControlsAI {\r\n\r\n public static constructEnvelope(orig: ITelemetryItem, iKey: string, logger: IDiagnosticLogger): IEnvelope {\r\n let envelope: ITelemetryItem;\r\n if (iKey !== orig.iKey && !CoreUtils.isNullOrUndefined(iKey)) {\r\n envelope = {\r\n ...orig,\r\n iKey\r\n };\r\n } else {\r\n envelope = orig;\r\n }\r\n\r\n switch (envelope.baseType) {\r\n case Event.dataType:\r\n return EventEnvelopeCreator.EventEnvelopeCreator.Create(logger, envelope);\r\n case Trace.dataType:\r\n return TraceEnvelopeCreator.TraceEnvelopeCreator.Create(logger, envelope);\r\n case PageView.dataType:\r\n return PageViewEnvelopeCreator.PageViewEnvelopeCreator.Create(logger, envelope);\r\n case PageViewPerformance.dataType:\r\n return PageViewPerformanceEnvelopeCreator.PageViewPerformanceEnvelopeCreator.Create(logger, envelope);\r\n case Exception.dataType:\r\n return ExceptionEnvelopeCreator.ExceptionEnvelopeCreator.Create(logger, envelope);\r\n case Metric.dataType:\r\n return MetricEnvelopeCreator.MetricEnvelopeCreator.Create(logger, envelope);\r\n case RemoteDependencyData.dataType:\r\n return DependencyEnvelopeCreator.DependencyEnvelopeCreator.Create(logger, envelope);\r\n default:\r\n\r\n return EventEnvelopeCreator.EventEnvelopeCreator.Create(logger, envelope);\r\n }\r\n }\r\n\r\n private static _getDefaultAppInsightsChannelConfig(): ISenderConfig {\r\n // set default values\r\n return {\r\n endpointUrl: () => \"https://dc.services.visualstudio.com/v2/track\",\r\n emitLineDelimitedJson: () => false,\r\n maxBatchInterval: () => 15000,\r\n maxBatchSizeInBytes: () => 102400, // 100kb\r\n disableTelemetry: () => false,\r\n enableSessionStorageBuffer: () => true,\r\n isRetryDisabled: () => false,\r\n isBeaconApiDisabled: () => true,\r\n onunloadDisableBeacon: () => false,\r\n instrumentationKey: () => undefined, // Channel doesn't need iKey, it should be set already\r\n namePrefix: () => undefined,\r\n samplingPercentage: () => 100\r\n }\r\n }\r\n\r\n private static _getEmptyAppInsightsChannelConfig(): ISenderConfig {\r\n return {\r\n endpointUrl: undefined,\r\n emitLineDelimitedJson: undefined,\r\n maxBatchInterval: undefined,\r\n maxBatchSizeInBytes: undefined,\r\n disableTelemetry: undefined,\r\n enableSessionStorageBuffer: undefined,\r\n isRetryDisabled: undefined,\r\n isBeaconApiDisabled: undefined,\r\n onunloadDisableBeacon: undefined,\r\n instrumentationKey: undefined,\r\n namePrefix: undefined,\r\n samplingPercentage: undefined\r\n };\r\n }\r\n \r\n public priority: number = 1001;\r\n\r\n public identifier: string = BreezeChannelIdentifier;\r\n\r\n /**\r\n * The configuration for this sender instance\r\n */\r\n public _senderConfig: ISenderConfig;\r\n\r\n /**\r\n * A method which will cause data to be send to the url\r\n */\r\n public _sender: SenderFunction;\r\n /**\r\n * A send buffer object\r\n */\r\n public _buffer: ISendBuffer;\r\n\r\n /**\r\n * AppId of this component parsed from some backend response.\r\n */\r\n public _appId: string;\r\n\r\n /**\r\n * Whether XMLHttpRequest object is supported. Older version of IE (8,9) do not support it.\r\n */\r\n public _XMLHttpRequestSupported: boolean = false;\r\n\r\n protected _sample: Sample;\r\n /**\r\n * How many times in a row a retryable error condition has occurred.\r\n */\r\n private _consecutiveErrors: number;\r\n\r\n /**\r\n * The time to retry at in milliseconds from 1970/01/01 (this makes the timer calculation easy).\r\n */\r\n private _retryAt: number;\r\n\r\n /**\r\n * The time of the last send operation.\r\n */\r\n private _lastSend: number;\r\n\r\n /**\r\n * Handle to the timer for delayed sending of batches of data.\r\n */\r\n private _timeoutHandle: any;\r\n\r\n private _serializer: Serializer;\r\n\r\n public pause(): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public resume(): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public flush() {\r\n try {\r\n this.triggerSend();\r\n } catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL,\r\n _InternalMessageId.FlushFailed,\r\n \"flush failed, telemetry will not be collected: \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n\r\n public onunloadFlush() {\r\n if ((this._senderConfig.onunloadDisableBeacon() === false || this._senderConfig.isBeaconApiDisabled() === false) && Util.IsBeaconApiSupported()) {\r\n try {\r\n this.triggerSend(true, this._beaconSender);\r\n } catch (e) {\r\n this.diagLog().throwInternal(LoggingSeverity.CRITICAL,\r\n _InternalMessageId.FailedToSendQueuedTelemetry,\r\n \"failed to flush with beacon sender on page unload, telemetry will not be collected: \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n } else {\r\n this.flush();\r\n }\r\n }\r\n\r\n public teardown(): void {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n public initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?:ITelemetryPluginChain): void {\r\n super.initialize(config, core, extensions, pluginChain);\r\n let ctx = this._getTelCtx();\r\n let identifier = this.identifier;\r\n this._serializer = new Serializer(core.logger);\r\n\r\n this._consecutiveErrors = 0;\r\n this._retryAt = null;\r\n this._lastSend = 0;\r\n this._sender = null;\r\n const defaultConfig = Sender._getDefaultAppInsightsChannelConfig();\r\n this._senderConfig = Sender._getEmptyAppInsightsChannelConfig();\r\n for (const field in defaultConfig) {\r\n this._senderConfig[field] = () => ctx.getConfig(identifier, field, defaultConfig[field]());\r\n }\r\n\r\n this._buffer = (this._senderConfig.enableSessionStorageBuffer && Util.canUseSessionStorage())\r\n ? new SessionStorageSendBuffer(this.diagLog(), this._senderConfig) : new ArraySendBuffer(this._senderConfig);\r\n this._sample = new Sample(this._senderConfig.samplingPercentage(), this.diagLog());\r\n\r\n if (!this._senderConfig.isBeaconApiDisabled() && Util.IsBeaconApiSupported()) {\r\n this._sender = this._beaconSender;\r\n } else {\r\n if (!CoreUtils.isUndefined(XMLHttpRequest)) {\r\n const testXhr = new XMLHttpRequest();\r\n if (\"withCredentials\" in testXhr) {\r\n this._sender = this._xhrSender;\r\n this._XMLHttpRequestSupported = true;\r\n } else if (!CoreUtils.isUndefined(XDomainRequest)) {\r\n this._sender = this._xdrSender; // IE 8 and 9\r\n }\r\n }\r\n }\r\n }\r\n\r\n public processTelemetry(telemetryItem: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n itemCtx = this._getTelCtx(itemCtx);\r\n \r\n try {\r\n // if master off switch is set, don't send any data\r\n if (this._senderConfig.disableTelemetry()) {\r\n // Do not send/save data\r\n return;\r\n }\r\n\r\n // validate input\r\n if (!telemetryItem) {\r\n itemCtx.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.CannotSendEmptyTelemetry, \"Cannot send empty telemetry\");\r\n return;\r\n }\r\n\r\n // validate event\r\n if (telemetryItem.baseData && !telemetryItem.baseType) {\r\n itemCtx.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.InvalidEvent, \"Cannot send telemetry without baseData and baseType\");\r\n return;\r\n }\r\n\r\n if (!telemetryItem.baseType) {\r\n // Default\r\n telemetryItem.baseType = \"EventData\";\r\n }\r\n\r\n // ensure a sender was constructed\r\n if (!this._sender) {\r\n itemCtx.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.SenderNotInitialized, \"Sender was not initialized\");\r\n return;\r\n }\r\n \r\n // check if this item should be sampled in, else add sampleRate tag\r\n if (!this._isSampledIn(telemetryItem)) {\r\n // Item is sampled out, do not send it\r\n itemCtx.diagLog().throwInternal(LoggingSeverity.WARNING, _InternalMessageId.TelemetrySampledAndNotSent,\r\n \"Telemetry item was sampled out and not sent\", { SampleRate: this._sample.sampleRate });\r\n return;\r\n } else {\r\n telemetryItem[SampleRate] = this._sample.sampleRate;\r\n }\r\n\r\n // construct an envelope that Application Insights endpoint can understand\r\n const aiEnvelope = Sender.constructEnvelope(telemetryItem, this._senderConfig.instrumentationKey(), itemCtx.diagLog());\r\n if (!aiEnvelope) {\r\n itemCtx.diagLog().throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.CreateEnvelopeError, \"Unable to create an AppInsights envelope\");\r\n return;\r\n }\r\n\r\n let doNotSendItem = false;\r\n // this is for running in legacy mode, where customer may already have a custom initializer present\r\n if (telemetryItem.tags && telemetryItem.tags[ProcessLegacy]) {\r\n CoreUtils.arrForEach(telemetryItem.tags[ProcessLegacy], (callBack: (env: IEnvelope) => boolean | void) => {\r\n try {\r\n if (callBack && callBack(aiEnvelope) === false) {\r\n doNotSendItem = true;\r\n itemCtx.diagLog().warnToConsole(\"Telemetry processor check returns false\");\r\n }\r\n } catch (e) {\r\n // log error but dont stop executing rest of the telemetry initializers\r\n // doNotSendItem = true;\r\n itemCtx.diagLog().throwInternal(\r\n LoggingSeverity.CRITICAL, _InternalMessageId.TelemetryInitializerFailed, \"One of telemetry initializers failed, telemetry item will not be sent: \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) }, true);\r\n }\r\n });\r\n\r\n delete telemetryItem.tags[ProcessLegacy];\r\n }\r\n if (doNotSendItem) {\r\n return; // do not send, no need to execute next plugin\r\n }\r\n\r\n // check if the incoming payload is too large, truncate if necessary\r\n const payload: string = this._serializer.serialize(aiEnvelope);\r\n\r\n // flush if we would exceed the max-size limit by adding this item\r\n const bufferPayload = this._buffer.getItems();\r\n const batch = this._buffer.batchPayloads(bufferPayload);\r\n\r\n if (batch && (batch.length + payload.length > this._senderConfig.maxBatchSizeInBytes())) {\r\n this.triggerSend();\r\n }\r\n\r\n // enqueue the payload\r\n this._buffer.enqueue(payload);\r\n\r\n // ensure an invocation timeout is set\r\n this._setupTimer();\r\n\r\n } catch (e) {\r\n itemCtx.diagLog().throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.FailedAddingTelemetryToBuffer,\r\n \"Failed adding telemetry to the sender's buffer, some telemetry will be lost: \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n\r\n // hand off the telemetry item to the next plugin\r\n this.processNext(telemetryItem, itemCtx);\r\n }\r\n\r\n /**\r\n * xhr state changes\r\n */\r\n public _xhrReadyStateChange(xhr: XMLHttpRequest, payload: string[], countOfItemsInPayload: number) {\r\n if (xhr.readyState === 4) {\r\n let response: IBackendResponse = null;\r\n if (!this._appId) {\r\n response = this._parseResponse(_getResponseText(xhr) || xhr.response);\r\n if (response && response.appId) {\r\n this._appId = response.appId;\r\n }\r\n }\r\n\r\n if ((xhr.status < 200 || xhr.status >= 300) && xhr.status !== 0) {\r\n if (!this._senderConfig.isRetryDisabled() && this._isRetriable(xhr.status)) {\r\n this._resendPayload(payload);\r\n\r\n this.diagLog().throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.TransmissionFailed, \". \" +\r\n \"Response code \" + xhr.status + \". Will retry to send \" + payload.length + \" items.\");\r\n } else {\r\n this._onError(payload, this._formatErrorMessageXhr(xhr));\r\n }\r\n } else if (Offline.isOffline()) { // offline\r\n // Note: Don't check for staus == 0, since adblock gives this code\r\n if (!this._senderConfig.isRetryDisabled()) {\r\n const offlineBackOffMultiplier = 10; // arbritrary number\r\n this._resendPayload(payload, offlineBackOffMultiplier);\r\n\r\n this.diagLog().throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.TransmissionFailed, `. Offline - Response Code: ${xhr.status}. Offline status: ${Offline.isOffline()}. Will retry to send ${payload.length} items.`);\r\n }\r\n } else {\r\n if (xhr.status === 206) {\r\n if (!response) {\r\n response = this._parseResponse(_getResponseText(xhr) || xhr.response);\r\n }\r\n\r\n if (response && !this._senderConfig.isRetryDisabled()) {\r\n this._onPartialSuccess(payload, response);\r\n } else {\r\n this._onError(payload, this._formatErrorMessageXhr(xhr));\r\n }\r\n } else {\r\n this._consecutiveErrors = 0;\r\n this._onSuccess(payload, countOfItemsInPayload);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Immediately send buffered data\r\n * @param async {boolean} - Indicates if the events should be sent asynchronously\r\n * @param forcedSender {SenderFunction} - Indicates the forcedSender, undefined if not passed\r\n */\r\n public triggerSend(async = true, forcedSender?: SenderFunction) {\r\n try {\r\n // Send data only if disableTelemetry is false\r\n if (!this._senderConfig.disableTelemetry()) {\r\n\r\n if (this._buffer.count() > 0) {\r\n const payload = this._buffer.getItems();\r\n\r\n // invoke send\r\n if (forcedSender) {\r\n forcedSender.call(this, payload, async);\r\n } else {\r\n this._sender(payload, async);\r\n }\r\n }\r\n\r\n // update lastSend time to enable throttling\r\n this._lastSend = +new Date;\r\n } else {\r\n this._buffer.clear();\r\n }\r\n\r\n clearTimeout(this._timeoutHandle);\r\n this._timeoutHandle = null;\r\n this._retryAt = null;\r\n } catch (e) {\r\n /* Ignore this error for IE under v10 */\r\n if (!Util.getIEVersion() || Util.getIEVersion() > 9) {\r\n this.diagLog().throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.TransmissionFailed,\r\n \"Telemetry transmission failed, some telemetry will be lost: \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * error handler\r\n */\r\n public _onError(payload: string[], message: string, event?: ErrorEvent) {\r\n this.diagLog().throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.OnError,\r\n \"Failed to send telemetry.\",\r\n { message });\r\n\r\n this._buffer.clearSent(payload);\r\n }\r\n\r\n /**\r\n * partial success handler\r\n */\r\n public _onPartialSuccess(payload: string[], results: IBackendResponse) {\r\n const failed = [];\r\n const retry = [];\r\n\r\n // Iterate through the reversed array of errors so that splicing doesn't have invalid indexes after the first item.\r\n const errors = results.errors.reverse();\r\n for (const error of errors) {\r\n const extracted = payload.splice(error.index, 1)[0];\r\n if (this._isRetriable(error.statusCode)) {\r\n retry.push(extracted);\r\n } else {\r\n // All other errors, including: 402 (Monthly quota exceeded) and 439 (Too many requests and refresh cache).\r\n failed.push(extracted);\r\n }\r\n }\r\n\r\n if (payload.length > 0) {\r\n this._onSuccess(payload, results.itemsAccepted);\r\n }\r\n\r\n if (failed.length > 0) {\r\n this._onError(failed, this._formatErrorMessageXhr(null, ['partial success', results.itemsAccepted, 'of', results.itemsReceived].join(' ')));\r\n }\r\n\r\n if (retry.length > 0) {\r\n this._resendPayload(retry);\r\n\r\n this.diagLog().throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.TransmissionFailed, \"Partial success. \" +\r\n \"Delivered: \" + payload.length + \", Failed: \" + failed.length +\r\n \". Will retry to send \" + retry.length + \" our of \" + results.itemsReceived + \" items\");\r\n }\r\n }\r\n\r\n /**\r\n * success handler\r\n */\r\n public _onSuccess(payload: string[], countOfItemsInPayload: number) {\r\n this._buffer.clearSent(payload);\r\n }\r\n\r\n /**\r\n * xdr state changes\r\n */\r\n public _xdrOnLoad(xdr: IXDomainRequest, payload: string[]) {\r\n const responseText = _getResponseText(xdr);\r\n if (xdr && (responseText + \"\" === \"200\" || responseText === \"\")) {\r\n this._consecutiveErrors = 0;\r\n this._onSuccess(payload, 0);\r\n } else {\r\n const results = this._parseResponse(responseText);\r\n\r\n if (results && results.itemsReceived && results.itemsReceived > results.itemsAccepted\r\n && !this._senderConfig.isRetryDisabled()) {\r\n this._onPartialSuccess(payload, results);\r\n } else {\r\n this._onError(payload, this._formatErrorMessageXdr(xdr));\r\n }\r\n }\r\n }\r\n\r\n private _isSampledIn(envelope: ITelemetryItem): boolean {\r\n return this._sample.isSampledIn(envelope);\r\n }\r\n\r\n /**\r\n * Send Beacon API request\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - not used\r\n * Note: Beacon API does not support custom headers and we are not able to get\r\n * appId from the backend for the correct correlation.\r\n */\r\n private _beaconSender(payload: string[], isAsync: boolean) {\r\n const url = this._senderConfig.endpointUrl();\r\n const batch = this._buffer.batchPayloads(payload);\r\n\r\n // Chrome only allows CORS-safelisted values for the sendBeacon data argument\r\n // see: https://bugs.chromium.org/p/chromium/issues/detail?id=720283\r\n const plainTextBatch = new Blob([batch], { type: 'text/plain;charset=UTF-8' });\r\n\r\n // The sendBeacon method returns true if the user agent is able to successfully queue the data for transfer. Otherwise it returns false.\r\n const queued = getNavigator().sendBeacon(url, plainTextBatch);\r\n\r\n if (queued) {\r\n this._buffer.markAsSent(payload);\r\n // no response from beaconSender, clear buffer\r\n this._onSuccess(payload, payload.length);\r\n } else {\r\n this._xhrSender(payload, true);\r\n this.diagLog().throwInternal(LoggingSeverity.WARNING, _InternalMessageId.TransmissionFailed, \". \" + \"Failed to send telemetry with Beacon API, retried with xhrSender.\");\r\n }\r\n }\r\n\r\n /**\r\n * Send XMLHttpRequest\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - Indicates if the request should be sent asynchronously\r\n */\r\n private _xhrSender(payload: string[], isAsync: boolean) {\r\n const xhr = new XMLHttpRequest();\r\n const endPointUrl = this._senderConfig.endpointUrl();\r\n try {\r\n xhr[DisabledPropertyName] = true;\r\n } catch(e) {\r\n // If the environment has locked down the XMLHttpRequest (preventExtensions and/or freeze), this would\r\n // cause the request to fail and we no telemetry would be sent\r\n }\r\n xhr.open(\"POST\", endPointUrl, isAsync);\r\n xhr.setRequestHeader(\"Content-type\", \"application/json\");\r\n\r\n // append Sdk-Context request header only in case of breeze endpoint\r\n if (Util.isInternalApplicationInsightsEndpoint(endPointUrl)) {\r\n xhr.setRequestHeader(RequestHeaders.sdkContextHeader, RequestHeaders.sdkContextHeaderAppIdRequest);\r\n }\r\n\r\n xhr.onreadystatechange = () => this._xhrReadyStateChange(xhr, payload, payload.length);\r\n xhr.onerror = (event: ErrorEvent) => this._onError(payload, this._formatErrorMessageXhr(xhr), event);\r\n\r\n // compose an array of payloads\r\n const batch = this._buffer.batchPayloads(payload);\r\n xhr.send(batch);\r\n\r\n this._buffer.markAsSent(payload);\r\n }\r\n\r\n /**\r\n * Parses the response from the backend.\r\n * @param response - XMLHttpRequest or XDomainRequest response\r\n */\r\n private _parseResponse(response: any): IBackendResponse {\r\n try {\r\n if (response && response !== \"\") {\r\n const result = getJSON().parse(response);\r\n\r\n if (result && result.itemsReceived && result.itemsReceived >= result.itemsAccepted &&\r\n result.itemsReceived - result.itemsAccepted === result.errors.length) {\r\n return result;\r\n }\r\n }\r\n } catch (e) {\r\n this.diagLog().throwInternal(\r\n LoggingSeverity.CRITICAL,\r\n _InternalMessageId.InvalidBackendResponse,\r\n \"Cannot parse the response. \" + Util.getExceptionName(e),\r\n {\r\n response\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Resend payload. Adds payload back to the send buffer and setup a send timer (with exponential backoff).\r\n * @param payload\r\n */\r\n private _resendPayload(payload: string[], linearFactor: number = 1) {\r\n if (!payload || payload.length === 0) {\r\n return;\r\n }\r\n\r\n this._buffer.clearSent(payload);\r\n this._consecutiveErrors++;\r\n\r\n for (const item of payload) {\r\n this._buffer.enqueue(item);\r\n }\r\n\r\n // setup timer\r\n this._setRetryTime(linearFactor);\r\n this._setupTimer();\r\n }\r\n\r\n /** \r\n * Calculates the time to wait before retrying in case of an error based on\r\n * http://en.wikipedia.org/wiki/Exponential_backoff\r\n */\r\n private _setRetryTime(linearFactor: number) {\r\n const SlotDelayInSeconds = 10;\r\n let delayInSeconds: number;\r\n\r\n if (this._consecutiveErrors <= 1) {\r\n delayInSeconds = SlotDelayInSeconds;\r\n } else {\r\n const backOffSlot = (Math.pow(2, this._consecutiveErrors) - 1) / 2;\r\n // tslint:disable-next-line:insecure-random\r\n let backOffDelay = Math.floor(Math.random() * backOffSlot * SlotDelayInSeconds) + 1;\r\n backOffDelay = linearFactor * backOffDelay;\r\n delayInSeconds = Math.max(Math.min(backOffDelay, 3600), SlotDelayInSeconds);\r\n }\r\n\r\n // TODO: Log the backoff time like the C# version does.\r\n const retryAfterTimeSpan = Date.now() + (delayInSeconds * 1000);\r\n\r\n // TODO: Log the retry at time like the C# version does.\r\n this._retryAt = retryAfterTimeSpan;\r\n }\r\n\r\n /**\r\n * Sets up the timer which triggers actually sending the data.\r\n */\r\n private _setupTimer() {\r\n if (!this._timeoutHandle) {\r\n const retryInterval = this._retryAt ? Math.max(0, this._retryAt - Date.now()) : 0;\r\n const timerValue = Math.max(this._senderConfig.maxBatchInterval(), retryInterval);\r\n\r\n this._timeoutHandle = setTimeout(() => {\r\n this.triggerSend();\r\n }, timerValue);\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the SDK should resend the payload after receiving this status code from the backend.\r\n * @param statusCode\r\n */\r\n private _isRetriable(statusCode: number): boolean {\r\n return statusCode === 408 // Timeout\r\n || statusCode === 429 // Too many requests.\r\n || statusCode === 500 // Internal server error.\r\n || statusCode === 503; // Service unavailable.\r\n }\r\n\r\n private _formatErrorMessageXhr(xhr: XMLHttpRequest, message?: string): string {\r\n if (xhr) {\r\n return \"XMLHttpRequest,Status:\" + xhr.status + \",Response:\" + _getResponseText(xhr) || xhr.response || \"\";\r\n }\r\n\r\n return message;\r\n }\r\n\r\n /**\r\n * Send XDomainRequest\r\n * @param payload {string} - The data payload to be sent.\r\n * @param isAsync {boolean} - Indicates if the request should be sent asynchronously\r\n *\r\n * Note: XDomainRequest does not support sync requests. This 'isAsync' parameter is added\r\n * to maintain consistency with the xhrSender's contract\r\n * Note: XDomainRequest does not support custom headers and we are not able to get\r\n * appId from the backend for the correct correlation.\r\n */\r\n private _xdrSender(payload: string[], isAsync: boolean) {\r\n let _window = getWindow();\r\n const xdr = new XDomainRequest();\r\n xdr.onload = () => this._xdrOnLoad(xdr, payload);\r\n xdr.onerror = (event: ErrorEvent) => this._onError(payload, this._formatErrorMessageXdr(xdr), event);\r\n\r\n // XDomainRequest requires the same protocol as the hosting page.\r\n // If the protocol doesn't match, we can't send the telemetry :(.\r\n const hostingProtocol = _window && _window.location && _window.location.protocol || \"\";\r\n if (this._senderConfig.endpointUrl().lastIndexOf(hostingProtocol, 0) !== 0) {\r\n this.diagLog().throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.TransmissionFailed, \". \" +\r\n \"Cannot send XDomain request. The endpoint URL protocol doesn't match the hosting page protocol.\");\r\n\r\n this._buffer.clear();\r\n return;\r\n }\r\n\r\n const endpointUrl = this._senderConfig.endpointUrl().replace(/^(https?:)/, \"\");\r\n xdr.open('POST', endpointUrl);\r\n\r\n // compose an array of payloads\r\n const batch = this._buffer.batchPayloads(payload);\r\n xdr.send(batch);\r\n\r\n this._buffer.markAsSent(payload);\r\n }\r\n\r\n private _formatErrorMessageXdr(xdr: IXDomainRequest, message?: string): string {\r\n if (xdr) {\r\n return \"XDomainRequest,Response:\" + _getResponseText(xdr) || \"\";\r\n }\r\n\r\n return message;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { ISession, Util, DateTimeUtils } from '@microsoft/applicationinsights-common';\r\nimport { IDiagnosticLogger, _InternalMessageId, LoggingSeverity, CoreUtils, DiagnosticLogger } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport interface ISessionConfig {\r\n sessionRenewalMs?: () => number;\r\n sessionExpirationMs?: () => number;\r\n cookieDomain?: () => string;\r\n namePrefix?: () => string;\r\n}\r\n\r\nexport class Session implements ISession {\r\n /**\r\n * The session ID.\r\n */\r\n public id?: string;\r\n\r\n /**\r\n * The date at which this guid was genereated.\r\n * Per the spec the ID will be regenerated if more than acquisitionSpan milliseconds ellapse from this time.\r\n */\r\n public acquisitionDate?: number;\r\n\r\n /**\r\n * The date at which this session ID was last reported.\r\n * This value should be updated whenever telemetry is sent using this ID.\r\n * Per the spec the ID will be regenerated if more than renewalSpan milliseconds elapse from this time with no activity.\r\n */\r\n public renewalDate?: number;\r\n}\r\n\r\nexport class _SessionManager {\r\n\r\n public static acquisitionSpan = 86400000; // 24 hours in ms\r\n public static renewalSpan = 1800000; // 30 minutes in ms\r\n public static cookieUpdateInterval = 60000 // 1 minute in ms\r\n private static cookieNameConst = 'ai_session';\r\n public automaticSession: Session;\r\n public config: ISessionConfig;\r\n\r\n private cookieUpdatedTimestamp: number;\r\n private _logger: IDiagnosticLogger;\r\n private _storageNamePrefix: () => string;\r\n\r\n constructor(config: ISessionConfig, logger?: IDiagnosticLogger) {\r\n if(CoreUtils.isNullOrUndefined(logger)) {\r\n this._logger = new DiagnosticLogger();\r\n } else {\r\n this._logger = logger;\r\n }\r\n\r\n if (!config) {\r\n config = ({} as any);\r\n }\r\n\r\n if (!(typeof config.sessionExpirationMs === \"function\")) {\r\n config.sessionExpirationMs = () => _SessionManager.acquisitionSpan;\r\n }\r\n\r\n if (!(typeof config.sessionRenewalMs === \"function\")) {\r\n config.sessionRenewalMs = () => _SessionManager.renewalSpan;\r\n }\r\n\r\n this.config = config;\r\n this._storageNamePrefix = () => this.config.namePrefix && this.config.namePrefix() ? _SessionManager.cookieNameConst + this.config.namePrefix() : _SessionManager.cookieNameConst;\r\n\r\n this.automaticSession = new Session();\r\n }\r\n\r\n public update() {\r\n if (!this.automaticSession.id) {\r\n this.initializeAutomaticSession();\r\n }\r\n\r\n const now = DateTimeUtils.Now();\r\n\r\n const acquisitionExpired = this.config.sessionExpirationMs() === 0 ? false : now - this.automaticSession.acquisitionDate > this.config.sessionExpirationMs();\r\n const renewalExpired = this.config.sessionExpirationMs() === 0 ? false : now - this.automaticSession.renewalDate > this.config.sessionRenewalMs();\r\n\r\n // renew if acquisitionSpan or renewalSpan has ellapsed\r\n if (acquisitionExpired || renewalExpired) {\r\n // update automaticSession so session state has correct id\r\n this.renew();\r\n } else {\r\n // do not update the cookie more often than cookieUpdateInterval\r\n if (!this.cookieUpdatedTimestamp || now - this.cookieUpdatedTimestamp > _SessionManager.cookieUpdateInterval) {\r\n this.automaticSession.renewalDate = now;\r\n this.setCookie(this.automaticSession.id, this.automaticSession.acquisitionDate, this.automaticSession.renewalDate);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Record the current state of the automatic session and store it in our cookie string format\r\n * into the browser's local storage. This is used to restore the session data when the cookie\r\n * expires.\r\n */\r\n public backup() {\r\n this.setStorage(this.automaticSession.id, this.automaticSession.acquisitionDate, this.automaticSession.renewalDate);\r\n }\r\n\r\n /**\r\n * Use config.namePrefix + ai_session cookie data or local storage data (when the cookie is unavailable) to\r\n * initialize the automatic session.\r\n */\r\n private initializeAutomaticSession() {\r\n const cookie = Util.getCookie(this._logger, this._storageNamePrefix());\r\n if (cookie && typeof cookie.split === \"function\") {\r\n this.initializeAutomaticSessionWithData(cookie);\r\n } else {\r\n // There's no cookie, but we might have session data in local storage\r\n // This can happen if the session expired or the user actively deleted the cookie\r\n // We only want to recover data if the cookie is missing from expiry. We should respect the user's wishes if the cookie was deleted actively.\r\n // The User class handles this for us and deletes our local storage object if the persistent user cookie was removed.\r\n const storage = Util.getStorage(this._logger, this._storageNamePrefix());\r\n if (storage) {\r\n this.initializeAutomaticSessionWithData(storage);\r\n }\r\n }\r\n\r\n if (!this.automaticSession.id) {\r\n this.renew();\r\n }\r\n }\r\n\r\n /**\r\n * Extract id, aquisitionDate, and renewalDate from an ai_session payload string and\r\n * use this data to initialize automaticSession.\r\n *\r\n * @param {string} sessionData - The string stored in an ai_session cookie or local storage backup\r\n */\r\n private initializeAutomaticSessionWithData(sessionData: string) {\r\n const params = sessionData.split(\"|\");\r\n\r\n if (params.length > 0) {\r\n this.automaticSession.id = params[0];\r\n }\r\n\r\n try {\r\n if (params.length > 1) {\r\n const acq = +params[1];\r\n this.automaticSession.acquisitionDate = +new Date(acq);\r\n this.automaticSession.acquisitionDate = this.automaticSession.acquisitionDate > 0 ? this.automaticSession.acquisitionDate : 0;\r\n }\r\n\r\n if (params.length > 2) {\r\n const renewal = +params[2];\r\n this.automaticSession.renewalDate = +new Date(renewal);\r\n this.automaticSession.renewalDate = this.automaticSession.renewalDate > 0 ? this.automaticSession.renewalDate : 0;\r\n }\r\n } catch (e) {\r\n this._logger.throwInternal(LoggingSeverity.CRITICAL,\r\n\r\n _InternalMessageId.ErrorParsingAISessionCookie,\r\n \"Error parsing ai_session cookie, session will be reset: \" + Util.getExceptionName(e),\r\n { exception: Util.dump(e) });\r\n }\r\n\r\n if (this.automaticSession.renewalDate === 0) {\r\n this._logger.throwInternal(LoggingSeverity.WARNING,\r\n _InternalMessageId.SessionRenewalDateIsZero,\r\n \"AI session renewal date is 0, session will be reset.\");\r\n }\r\n }\r\n\r\n private renew() {\r\n const now = DateTimeUtils.Now();\r\n\r\n this.automaticSession.id = Util.newId();\r\n this.automaticSession.acquisitionDate = now;\r\n this.automaticSession.renewalDate = now;\r\n\r\n this.setCookie(this.automaticSession.id, this.automaticSession.acquisitionDate, this.automaticSession.renewalDate);\r\n\r\n // If this browser does not support local storage, fire an internal log to keep track of it at this point\r\n if (!Util.canUseLocalStorage()) {\r\n this._logger.throwInternal(LoggingSeverity.WARNING,\r\n _InternalMessageId.BrowserDoesNotSupportLocalStorage,\r\n \"Browser does not support local storage. Session durations will be inaccurate.\");\r\n }\r\n }\r\n\r\n private setCookie(guid: string, acq: number, renewal: number) {\r\n // Set cookie to expire after the session expiry time passes or the session renewal deadline, whichever is sooner\r\n // Expiring the cookie will cause the session to expire even if the user isn't on the page\r\n const acquisitionExpiry = acq + this.config.sessionExpirationMs();\r\n const renewalExpiry = renewal + this.config.sessionRenewalMs();\r\n const cookieExpiry = new Date();\r\n const cookie = [guid, acq, renewal];\r\n\r\n if (acquisitionExpiry < renewalExpiry) {\r\n cookieExpiry.setTime(acquisitionExpiry);\r\n } else {\r\n cookieExpiry.setTime(renewalExpiry);\r\n }\r\n\r\n const cookieDomnain = this.config.cookieDomain ? this.config.cookieDomain() : null;\r\n\r\n // if sessionExpirationMs is set to 0, it means the expiry is set to 0 for this session cookie\r\n // A cookie with 0 expiry in the session cookie will never expire for that browser session. If the browser is closed the cookie expires. \r\n // Another browser instance does not inherit this cookie.\r\n const UTCString = this.config.sessionExpirationMs() === 0 ? '0' : cookieExpiry.toUTCString();\r\n Util.setCookie(this._logger, this._storageNamePrefix(), cookie.join('|') + ';expires=' + UTCString, cookieDomnain);\r\n\r\n this.cookieUpdatedTimestamp = DateTimeUtils.Now();\r\n }\r\n\r\n private setStorage(guid: string, acq: number, renewal: number) {\r\n // Keep data in local storage to retain the last session id, allowing us to cleanly end the session when it expires\r\n // Browsers that don't support local storage won't be able to end sessions cleanly from the client\r\n // The server will notice this and end the sessions itself, with loss of accurate session duration\r\n Util.setStorage(this._logger, this._storageNamePrefix(), [guid, acq, renewal].join('|'));\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { IApplication } from '@microsoft/applicationinsights-common';\r\n\r\nexport class Application implements IApplication {\r\n /**\r\n * The application version.\r\n */\r\n public ver: string;\r\n\r\n /**\r\n * The application build version.\r\n */\r\n public build: string;\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { IDevice } from '@microsoft/applicationinsights-common';\r\n\r\nexport class Device implements IDevice {\r\n\r\n /**\r\n * The type for the current device.\r\n */\r\n public deviceClass: string;\r\n\r\n /**\r\n * A device unique ID.\r\n */\r\n public id: string;\r\n\r\n /**\r\n * The application screen resolution.\r\n */\r\n resolution: string;\r\n\r\n /**\r\n * The device model for the current device.\r\n */\r\n public model: string;\r\n\r\n /**\r\n * Device identifier known at instrumentation time\r\n */\r\n public localId: string;\r\n\r\n /**\r\n * Device identifier known at instrumentation time\r\n */\r\n public ip: string;\r\n\r\n /**\r\n * Constructs a new instance of the Device class\r\n */\r\n constructor() {\r\n // don't attempt to fingerprint browsers\r\n this.id = \"browser\";\r\n\r\n // Device type is a dimension in our data platform\r\n // Setting it to 'Browser' allows to separate client and server dependencies/exceptions\r\n this.deviceClass = \"Browser\";\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { IInternal } from '@microsoft/applicationinsights-common';\r\nimport { ITelemetryConfig } from '../Interfaces/ITelemetryConfig';\r\n\r\nconst Version = \"2.5.4\";\r\n\r\nexport class Internal implements IInternal {\r\n\r\n /**\r\n * The SDK version used to create this telemetry item.\r\n */\r\n public sdkVersion: string;\r\n\r\n /**\r\n * The SDK agent version.\r\n */\r\n public agentVersion: string;\r\n\r\n /**\r\n * Constructs a new instance of the internal telemetry data class.\r\n */\r\n constructor(config: ITelemetryConfig) {\r\n this.sdkVersion = (config.sdkExtension && config.sdkExtension() ? config.sdkExtension() + \"_\" : \"\") + \"javascript:\" + Version;\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { ITelemetryConfig } from '../Interfaces/ITelemetryConfig';\r\nimport { Util, IUser } from '@microsoft/applicationinsights-common';\r\nimport { IDiagnosticLogger, _InternalMessageId, LoggingSeverity, CoreUtils } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class User implements IUser {\r\n\r\n static cookieSeparator: string = '|';\r\n static userCookieName: string = 'ai_user';\r\n static authUserCookieName: string = 'ai_authUser';\r\n\r\n /**\r\n * The telemetry configuration.\r\n */\r\n public config: ITelemetryConfig;\r\n\r\n /**\r\n * The user ID.\r\n */\r\n public id: string;\r\n\r\n /**\r\n * Authenticated user id\r\n */\r\n public authenticatedId: string;\r\n\r\n /**\r\n * The localId\r\n */\r\n public localId: string;\r\n\r\n /**\r\n * The account ID.\r\n */\r\n public accountId: string;\r\n\r\n /**\r\n * The account acquisition date.\r\n */\r\n public accountAcquisitionDate: string;\r\n\r\n public isNewUser = false;\r\n\r\n private _logger: IDiagnosticLogger;\r\n\r\n constructor(config: ITelemetryConfig, logger: IDiagnosticLogger) {\r\n this._logger = logger;\r\n\r\n // get userId or create new one if none exists\r\n const cookie = Util.getCookie(this._logger, User.userCookieName);\r\n if (cookie) {\r\n this.isNewUser = false;\r\n const params = cookie.split(User.cookieSeparator);\r\n if (params.length > 0) {\r\n this.id = params[0];\r\n }\r\n }\r\n\r\n this.config = config;\r\n\r\n if (!this.id) {\r\n this.id = Util.newId();\r\n const date = new Date();\r\n const acqStr = CoreUtils.toISOString(date);\r\n this.accountAcquisitionDate = acqStr;\r\n this.isNewUser = true;\r\n // without expiration, cookies expire at the end of the session\r\n // set it to 365 days from now\r\n // 365 * 24 * 60 * 60 * 1000 = 31536000000 \r\n date.setTime(date.getTime() + 31536000000);\r\n const newCookie = [this.id, acqStr];\r\n const cookieDomain = this.config.cookieDomain ? this.config.cookieDomain() : undefined;\r\n\r\n Util.setCookie(this._logger, User.userCookieName, newCookie.join(User.cookieSeparator) + ';expires=' + date.toUTCString(), cookieDomain);\r\n\r\n // If we have an config.namePrefix() + ai_session in local storage this means the user actively removed our cookies.\r\n // We should respect their wishes and clear ourselves from local storage\r\n const name = config.namePrefix && config.namePrefix() ? config.namePrefix() + 'ai_session' : 'ai_session';\r\n Util.removeStorage(this._logger, name);\r\n }\r\n\r\n // We still take the account id from the ctor param for backward compatibility. \r\n // But if the the customer set the accountId through the newer setAuthenticatedUserContext API, we will override it.\r\n this.accountId = config.accountId ? config.accountId() : undefined;\r\n\r\n // Get the auth user id and account id from the cookie if exists\r\n // Cookie is in the pattern: |\r\n let authCookie = Util.getCookie(this._logger, User.authUserCookieName);\r\n if (authCookie) {\r\n authCookie = decodeURI(authCookie);\r\n const authCookieString = authCookie.split(User.cookieSeparator);\r\n if (authCookieString[0]) {\r\n this.authenticatedId = authCookieString[0];\r\n }\r\n if (authCookieString.length > 1 && authCookieString[1]) {\r\n this.accountId = authCookieString[1];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the authenticated user id and the account id in this session.\r\n * \r\n * @param authenticatedUserId {string} - The authenticated user id. A unique and persistent string that represents each authenticated user in the service.\r\n * @param accountId {string} - An optional string to represent the account associated with the authenticated user.\r\n */\r\n public setAuthenticatedUserContext(authenticatedUserId: string, accountId?: string, storeInCookie = false) {\r\n\r\n // Validate inputs to ensure no cookie control characters.\r\n const isInvalidInput = !this.validateUserInput(authenticatedUserId) || (accountId && !this.validateUserInput(accountId));\r\n if (isInvalidInput) {\r\n this._logger.throwInternal(\r\n LoggingSeverity.WARNING,\r\n _InternalMessageId.SetAuthContextFailedAccountName,\r\n \"Setting auth user context failed. \" +\r\n \"User auth/account id should be of type string, and not contain commas, semi-colons, equal signs, spaces, or vertical-bars.\",\r\n true);\r\n return;\r\n }\r\n\r\n // Create cookie string.\r\n this.authenticatedId = authenticatedUserId;\r\n let authCookie = this.authenticatedId;\r\n if (accountId) {\r\n this.accountId = accountId;\r\n authCookie = [this.authenticatedId, this.accountId].join(User.cookieSeparator);\r\n }\r\n\r\n if (storeInCookie) {\r\n // Set the cookie. No expiration date because this is a session cookie (expires when browser closed).\r\n // Encoding the cookie to handle unexpected unicode characters.\r\n Util.setCookie(this._logger, User.authUserCookieName, encodeURI(authCookie), this.config.cookieDomain());\r\n }\r\n }\r\n\r\n /**\r\n * Clears the authenticated user id and the account id from the user context.\r\n * @returns {} \r\n */\r\n public clearAuthenticatedUserContext() {\r\n this.authenticatedId = null;\r\n this.accountId = null;\r\n Util.deleteCookie(this._logger, User.authUserCookieName);\r\n }\r\n\r\n private validateUserInput(id: string): boolean {\r\n // Validate:\r\n // 1. Id is a non-empty string.\r\n // 2. It does not contain special characters for cookies.\r\n if (typeof id !== 'string' ||\r\n !id ||\r\n id.match(/,|;|=| |\\|/)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { ILocation } from '@microsoft/applicationinsights-common';\r\n\r\nexport class Location implements ILocation {\r\n\r\n /**\r\n * Client IP address for reverse lookup\r\n */\r\n public ip: string;\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { Util, ITelemetryTrace, ITraceState, DataSanitizer } from '@microsoft/applicationinsights-common';\r\nimport { getLocation, IDiagnosticLogger } from '@microsoft/applicationinsights-core-js';\r\n\r\nexport class TelemetryTrace implements ITelemetryTrace {\r\n\r\n public traceID: string;\r\n public parentID: string;\r\n public traceState: ITraceState;\r\n public name: string;\r\n\r\n constructor(id?: string, parentId?: string, name?: string, logger?: IDiagnosticLogger) {\r\n this.traceID = id || Util.generateW3CId();\r\n this.parentID = parentId;\r\n this.name = name;\r\n let location = getLocation();\r\n if (!name && location && location.pathname) {\r\n this.name = location.pathname;\r\n }\r\n this.name = DataSanitizer.sanitizeString(logger, this.name);\r\n }\r\n}","/**\r\n * PropertiesPlugin.ts\r\n * @copyright Microsoft 2018\r\n */\r\n\r\nimport { ITelemetryItem, IProcessTelemetryContext, IDiagnosticLogger, CoreUtils, hasWindow } from '@microsoft/applicationinsights-core-js';\r\nimport { Session, _SessionManager } from './Context/Session';\r\nimport { Extensions, ITelemetryContext, IOperatingSystem, ITelemetryTrace, IWeb, SampleRate, CtxTagKeys } from '@microsoft/applicationinsights-common';\r\nimport { Application } from './Context/Application';\r\nimport { Device } from './Context/Device';\r\nimport { Internal } from './Context/Internal';\r\nimport { User } from './Context/User';\r\nimport { Location } from './Context/Location';\r\nimport { ITelemetryConfig } from './Interfaces/ITelemetryConfig';\r\nimport { TelemetryTrace } from './Context/TelemetryTrace';\r\n\r\nexport class TelemetryContext implements ITelemetryContext {\r\n\r\n public application: Application; // The object describing a component tracked by this object - legacy\r\n public device: Device; // The object describing a device tracked by this object.\r\n public location: Location; // The object describing a location tracked by this object -legacy\r\n public telemetryTrace: TelemetryTrace; // The object describing a operation tracked by this object.\r\n public user: User; // The object describing a user tracked by this object.\r\n public internal: Internal; // legacy\r\n public session: Session; // The object describing a session tracked by this object.\r\n public sessionManager: _SessionManager; // The session manager that manages session on the base of cookies.\r\n public os: IOperatingSystem;\r\n public web: IWeb;\r\n public appId: () => string;\r\n\r\n constructor(logger: IDiagnosticLogger, defaultConfig: ITelemetryConfig) {\r\n if (hasWindow()) {\r\n this.sessionManager = new _SessionManager(defaultConfig, logger);\r\n this.application = new Application();\r\n this.device = new Device();\r\n this.internal = new Internal(defaultConfig);\r\n this.location = new Location();\r\n this.user = new User(defaultConfig, logger);\r\n this.telemetryTrace = new TelemetryTrace(undefined, undefined, undefined, logger);\r\n this.session = new Session();\r\n }\r\n this.appId = () => null;\r\n }\r\n\r\n public applySessionContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n const sessionContext = this.session || (this.sessionManager && this.sessionManager.automaticSession);\r\n if (sessionContext) {\r\n if (typeof sessionContext.id === \"string\") {\r\n event.ext.app.sesId = sessionContext.id;\r\n }\r\n }\r\n\r\n if (this.session) {\r\n // If customer set session info, apply his context; otherwise apply context automatically generated\r\n if (typeof this.session.id === \"string\") {\r\n event.ext.app.sesId = this.session.id;\r\n } else {\r\n event.ext.app.sesId = this.sessionManager.automaticSession.id;\r\n }\r\n }\r\n }\r\n\r\n public applyOperatingSystemContxt(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (this.os && this.os.name) {\r\n event.ext.os = this.os;\r\n }\r\n }\r\n\r\n public applyApplicationContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (this.application) {\r\n\r\n if (typeof this.application.ver === \"string\") {\r\n event.tags[CtxTagKeys.applicationVersion] = this.application.ver;\r\n }\r\n if (typeof this.application.build === \"string\") {\r\n event.tags[CtxTagKeys.applicationBuild] = this.application.build;\r\n }\r\n }\r\n }\r\n\r\n public applyDeviceContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n\r\n if (this.device) {\r\n if (typeof this.device.id === \"string\") {\r\n event.ext.device.localId = this.device.id;\r\n }\r\n\r\n if (typeof this.device.ip === \"string\") {\r\n event.ext.device.ip = this.device.ip;\r\n }\r\n\r\n if (typeof this.device.model === \"string\") {\r\n event.ext.device.model = this.device.model;\r\n }\r\n\r\n if (typeof this.device.deviceClass === \"string\") {\r\n event.ext.device.deviceClass = this.device.deviceClass;\r\n }\r\n }\r\n }\r\n\r\n public applyInternalContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (this.internal) {\r\n if (typeof this.internal.agentVersion === \"string\") {\r\n event.tags[CtxTagKeys.internalAgentVersion] = this.internal.agentVersion; // not mapped in CS 4.0\r\n }\r\n if (typeof this.internal.sdkVersion === \"string\") {\r\n event.tags[CtxTagKeys.internalSdkVersion] = this.internal.sdkVersion;\r\n }\r\n }\r\n }\r\n\r\n public applyLocationContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (this.location) {\r\n if (typeof this.location.ip === \"string\") {\r\n event.tags[CtxTagKeys.locationIp] = this.location.ip;\r\n }\r\n }\r\n }\r\n\r\n public applyOperationContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (this.telemetryTrace) {\r\n const trace = event.ext.trace || ({traceID: undefined, parentID: undefined} as ITelemetryTrace);\r\n if (typeof this.telemetryTrace.traceID === \"string\") {\r\n trace.traceID = this.telemetryTrace.traceID;\r\n }\r\n\r\n if (typeof this.telemetryTrace.name === \"string\") {\r\n trace.name = this.telemetryTrace.name;\r\n }\r\n\r\n if (typeof this.telemetryTrace.parentID === \"string\") {\r\n trace.parentID = this.telemetryTrace.parentID;\r\n }\r\n\r\n event.ext.trace = trace;\r\n }\r\n }\r\n\r\n public applyWebContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (this.web) {\r\n event.ext.web = event.ext.web || {};\r\n event.ext.web = this.web;\r\n }\r\n }\r\n\r\n public applyUserContext(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (this.user) {\r\n if (!event.tags) {\r\n event.tags = [];\r\n }\r\n\r\n // stays in tags\r\n if (typeof this.user.accountId === \"string\") {\r\n const item = {};\r\n event.tags[CtxTagKeys.userAccountId] = this.user.accountId;\r\n }\r\n\r\n // CS 4.0\r\n if (typeof this.user.id === \"string\") {\r\n event.ext.user.id = this.user.id;\r\n }\r\n\r\n if (typeof this.user.authenticatedId === \"string\") {\r\n event.ext.user.authId = this.user.authenticatedId;\r\n }\r\n }\r\n }\r\n\r\n public cleanUp(event:ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (event.ext[Extensions.DeviceExt] && CoreUtils.objKeys(event.ext[Extensions.DeviceExt]).length === 0) {\r\n delete event.ext[Extensions.DeviceExt];\r\n }\r\n if (event.ext[Extensions.UserExt] && CoreUtils.objKeys(event.ext[Extensions.UserExt]).length === 0) {\r\n delete event.ext[Extensions.UserExt];\r\n }\r\n if (event.ext[Extensions.WebExt] && CoreUtils.objKeys(event.ext[Extensions.WebExt]).length === 0) {\r\n delete event.ext[Extensions.WebExt];\r\n }\r\n if (event.ext[Extensions.OSExt] && CoreUtils.objKeys(event.ext[Extensions.OSExt]).length === 0) {\r\n delete event.ext[Extensions.OSExt];\r\n }\r\n if (event.ext[Extensions.AppExt] && CoreUtils.objKeys(event.ext[Extensions.AppExt]).length === 0) {\r\n delete event.ext[Extensions.AppExt];\r\n }\r\n if (event.ext[Extensions.TraceExt] && CoreUtils.objKeys(event.ext[Extensions.TraceExt]).length === 0) {\r\n delete event.ext[Extensions.TraceExt];\r\n }\r\n }\r\n}","/**\r\n * PropertiesPlugin.ts\r\n * @copyright Microsoft 2018\r\n */\r\n\r\nimport {\r\n BaseTelemetryPlugin, IConfiguration, CoreUtils,\r\n IAppInsightsCore, IPlugin, ITelemetryItem, IProcessTelemetryContext, _InternalLogMessage, LoggingSeverity, _InternalMessageId, getNavigator,\r\n ITelemetryPluginChain \r\n} from '@microsoft/applicationinsights-core-js';\r\nimport { TelemetryContext } from './TelemetryContext';\r\nimport { PageView, ConfigurationManager,\r\n IConfig, BreezeChannelIdentifier, PropertiesPluginIdentifier, IPropertiesPlugin, Extensions, Util } from '@microsoft/applicationinsights-common';\r\nimport { ITelemetryConfig } from './Interfaces/ITelemetryConfig';\r\n\r\nexport default class PropertiesPlugin extends BaseTelemetryPlugin implements IPropertiesPlugin {\r\n\r\n public static getDefaultConfig(): ITelemetryConfig {\r\n const defaultConfig: ITelemetryConfig = {\r\n instrumentationKey: () => undefined,\r\n accountId: () => null,\r\n sessionRenewalMs: () => 30 * 60 * 1000,\r\n samplingPercentage: () => 100,\r\n sessionExpirationMs: () => 24 * 60 * 60 * 1000,\r\n cookieDomain: () => null,\r\n sdkExtension: () => null,\r\n isBrowserLinkTrackingEnabled: () => false,\r\n appId: () => null,\r\n namePrefix: () => undefined\r\n }\r\n return defaultConfig;\r\n }\r\n public context: TelemetryContext;\r\n\r\n public priority = 110;\r\n public identifier = PropertiesPluginIdentifier;\r\n private _breezeChannel: IPlugin; // optional. If exists, grab appId from it\r\n\r\n private _extensionConfig: ITelemetryConfig;\r\n\r\n initialize(config: IConfiguration & IConfig, core: IAppInsightsCore, extensions: IPlugin[], pluginChain?:ITelemetryPluginChain) {\r\n super.initialize(config, core, extensions, pluginChain);\r\n let ctx = this._getTelCtx();\r\n let identifier = this.identifier;\r\n const defaultConfig: ITelemetryConfig = PropertiesPlugin.getDefaultConfig();\r\n this._extensionConfig = this._extensionConfig || PropertiesPlugin.getDefaultConfig();\r\n for (const field in defaultConfig) {\r\n this._extensionConfig[field] = () => ctx.getConfig(identifier, field, defaultConfig[field]());\r\n }\r\n\r\n this.context = new TelemetryContext(core.logger, this._extensionConfig);\r\n this._breezeChannel = Util.getExtension(extensions, BreezeChannelIdentifier);\r\n this.context.appId = () => this._breezeChannel ? this._breezeChannel[\"_appId\"] : null;\r\n }\r\n\r\n /**\r\n * Add Part A fields to the event\r\n * @param event The event that needs to be processed\r\n */\r\n processTelemetry(event: ITelemetryItem, itemCtx?: IProcessTelemetryContext) {\r\n if (CoreUtils.isNullOrUndefined(event)) {\r\n // TODO(barustum): throw an internal event once we have support for internal logging\r\n } else {\r\n itemCtx = this._getTelCtx(itemCtx);\r\n // If the envelope is PageView, reset the internal message count so that we can send internal telemetry for the new page.\r\n if (event.name === PageView.envelopeType) {\r\n itemCtx.diagLog().resetInternalMessageCount();\r\n }\r\n\r\n if (this.context.session) {\r\n // If customer did not provide custom session id update the session manager\r\n if (typeof this.context.session.id !== \"string\") {\r\n this.context.sessionManager.update();\r\n }\r\n }\r\n\r\n this._processTelemetryInternal(event, itemCtx);\r\n\r\n if (this.context && this.context.user && this.context.user.isNewUser) {\r\n this.context.user.isNewUser = false;\r\n const message = new _InternalLogMessage(_InternalMessageId.SendBrowserInfoOnUserInit, ((getNavigator()||{} as any).userAgent||\"\"));\r\n itemCtx.diagLog().logInternalMessage(LoggingSeverity.CRITICAL, message);\r\n }\r\n\r\n this.processNext(event, itemCtx);\r\n }\r\n }\r\n\r\n private _processTelemetryInternal(event: ITelemetryItem, itemCtx: IProcessTelemetryContext) {\r\n // set part A fields\r\n if (!event.tags) {\r\n event.tags = [];\r\n }\r\n\r\n if (!event.ext) {\r\n event.ext = {};\r\n }\r\n\r\n let ext = event.ext;\r\n ext[Extensions.DeviceExt] = ext[Extensions.DeviceExt] || {};\r\n ext[Extensions.WebExt] = ext[Extensions.WebExt] || {};\r\n ext[Extensions.UserExt] = ext[Extensions.UserExt] || {};\r\n ext[Extensions.OSExt] = ext[Extensions.OSExt] || {};\r\n ext[Extensions.AppExt] = ext[Extensions.AppExt] || {};\r\n ext[Extensions.TraceExt] = ext[Extensions.TraceExt] || {};\r\n\r\n let context = this.context;\r\n context.applySessionContext(event, itemCtx);\r\n context.applyApplicationContext(event, itemCtx);\r\n context.applyDeviceContext(event, itemCtx);\r\n context.applyOperationContext(event, itemCtx);\r\n context.applyUserContext(event, itemCtx);\r\n context.applyOperatingSystemContxt(event, itemCtx);\r\n context.applyWebContext(event, itemCtx);\r\n\r\n context.applyLocationContext(event, itemCtx); // legacy tags\r\n context.applyInternalContext(event, itemCtx); // legacy tags\r\n context.cleanUp(event, itemCtx);\r\n }\r\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\nimport { \r\n IInstrumentHooksCallbacks, IInstrumentHooks, IInstrumentHook, IInstrumentCallDetails, InstrumentorHooksCallback \r\n} from \"../JavaScriptSDK.Interfaces/IInstrumentHooks\";\r\nimport {\r\n strFunction, strPrototype\r\n} from \"./EnvUtils\"\r\nimport { CoreUtils } from './CoreUtils';\r\n\r\nconst aiInstrumentHooks = \"_aiHooks\";\r\n\r\nconst enum CallbackType {\r\n Request = 0,\r\n Response = 1,\r\n HookError = 2,\r\n FunctionError = 3\r\n};\r\n\r\nconst cbNames = [\r\n \"req\", \"rsp\", \"hkErr\", \"fnErr\"\r\n];\r\n\r\n/** @ignore */\r\nfunction _arrLoop(arr:T[], fn:(value:T, idx:number) => boolean|number|void) {\r\n if (arr) {\r\n for (let lp = 0; lp < arr.length; lp++) {\r\n if (fn(arr[lp], lp)) {\r\n break;\r\n }\r\n } \r\n }\r\n}\r\n\r\n/** @ignore */\r\nfunction _doCallbacks(hooks:IInstrumentHook[], callDetails: IInstrumentCallDetails, cbArgs:any[], hookCtx:any[], type:CallbackType): void {\r\n if (type >= CallbackType.Request && type <= CallbackType.HookError) {\r\n _arrLoop(hooks, (hook, idx) => {\r\n let cbks = hook.cbks;\r\n let cb:InstrumentorHooksCallback = cbks[cbNames[type]];\r\n if (cb) {\r\n \r\n // Set the specific hook context implementation using a lazy creation pattern\r\n callDetails.ctx = () => {\r\n let ctx = hookCtx[idx] = (hookCtx[idx] || {});\r\n return ctx;\r\n };\r\n\r\n try {\r\n cb.apply(callDetails.inst, cbArgs);\r\n } catch (err) {\r\n let orgEx = callDetails.err;\r\n try {\r\n // Report Hook error via the callback\r\n let hookErrorCb:InstrumentorHooksCallback = cbks[cbNames[CallbackType.HookError]];\r\n if (hookErrorCb) {\r\n callDetails.err = err;\r\n hookErrorCb.apply(callDetails.inst, cbArgs);\r\n }\r\n } catch(e) {\r\n // Not much we can do here -- swallowing the exception to avoid crashing the hosting app\r\n } finally {\r\n // restore the original exception (if any)\r\n callDetails.err = orgEx;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n/** @ignore */\r\nfunction _createFunctionHook(aiHook:IInstrumentHooks) {\r\n \r\n // Define a temporary method that queues-up a the real method call\r\n return function () {\r\n let funcThis = this;\r\n // Capture the original arguments passed to the method\r\n let orgArgs = arguments as any;\r\n let hooks = aiHook.h;\r\n\r\n let funcArgs:IInstrumentCallDetails = {\r\n name: aiHook.n,\r\n inst: funcThis,\r\n ctx: null,\r\n set: _replaceArg\r\n };\r\n\r\n let hookCtx: any[] = [];\r\n let cbArgs = _createArgs([funcArgs], orgArgs);\r\n\r\n function _createArgs(target:any[], theArgs:any[]): any[] {\r\n _arrLoop((theArgs as any), (arg) => {\r\n target.push(arg);\r\n });\r\n\r\n return target;\r\n }\r\n\r\n function _replaceArg(idx:number, value:any) {\r\n orgArgs = _createArgs([], orgArgs);\r\n orgArgs[idx] = value;\r\n cbArgs = _createArgs([funcArgs], orgArgs);\r\n }\r\n\r\n // Call the pre-request hooks\r\n _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, CallbackType.Request);\r\n\r\n // Call the original function was called\r\n let theFunc = aiHook.f;\r\n try {\r\n funcArgs.rslt = theFunc.apply(funcThis, orgArgs);\r\n } catch (err) {\r\n // Report the request callback\r\n funcArgs.err = err;\r\n _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, CallbackType.FunctionError);\r\n\r\n // rethrow the original exception so anyone listening for it can catch the exception\r\n throw err;\r\n }\r\n\r\n // Call the post-request hooks\r\n _doCallbacks(hooks, funcArgs, cbArgs, hookCtx, CallbackType.Response);\r\n\r\n return funcArgs.rslt;\r\n };\r\n}\r\n\r\n/** @ignore */\r\nfunction _getOwner(target:any, name:string, checkPrototype:boolean): any {\r\n let owner = null;\r\n if (target) {\r\n if (CoreUtils.hasOwnProperty(target, name)) {\r\n owner = target;\r\n } else if (checkPrototype) {\r\n owner = _getOwner(target[strPrototype], name, false);\r\n }\r\n }\r\n\r\n return owner;\r\n}\r\n\r\n/**\r\n * Intercept the named prototype functions for the target class / object\r\n * @param target - The target object\r\n * @param funcName - The function name\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n */\r\nexport function InstrumentProto(target:any, funcName:string, callbacks: IInstrumentHooksCallbacks): IInstrumentHook {\r\n if (target) {\r\n return InstrumentFunc(target[strPrototype], funcName, callbacks, false);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Intercept the named prototype functions for the target class / object\r\n * @param target - The target object\r\n * @param funcNames - The function names to intercept and call\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n */\r\nexport function InstrumentProtos(target:any, funcNames:string[], callbacks: IInstrumentHooksCallbacks): IInstrumentHook[] {\r\n if (target) {\r\n return InstrumentFuncs(target[strPrototype], funcNames, callbacks, false);\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Intercept the named prototype functions for the target class / object\r\n * @param target - The target object\r\n * @param funcName - The function name\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n * @param checkPrototype - If the function doesn't exist on the target should it attempt to hook the prototype function\r\n */\r\nexport function InstrumentFunc(target:any, funcName:string, callbacks: IInstrumentHooksCallbacks, checkPrototype:boolean = true): IInstrumentHook {\r\n if (target && funcName && callbacks) {\r\n let owner = _getOwner(target, funcName, checkPrototype);\r\n let fn = owner[funcName]\r\n if (typeof fn === strFunction) {\r\n let aiHook:IInstrumentHooks = fn[aiInstrumentHooks];\r\n if (!aiHook) {\r\n // Only hook the function once\r\n aiHook = {\r\n i: 0,\r\n n: funcName,\r\n f: fn,\r\n h: []\r\n };\r\n\r\n // Override (hook) the original function\r\n let newFunc = _createFunctionHook(aiHook);\r\n newFunc[aiInstrumentHooks] = aiHook; // Tag and store the function hooks\r\n owner[funcName] = newFunc;\r\n }\r\n\r\n const theHook: IInstrumentHook = {\r\n // tslint:disable:object-literal-shorthand\r\n id: aiHook.i,\r\n cbks: callbacks,\r\n rm: function() {\r\n // DO NOT Use () => { shorthand for the function as the this gets replaced\r\n // with the outer this and not the this for theHook instance.\r\n let id = this.id;\r\n _arrLoop(aiHook.h, (hook, idx) => {\r\n if (hook.id === id) {\r\n aiHook.h.splice(idx, 1);\r\n return 1;\r\n }\r\n });\r\n }\r\n // tslint:enable:object-literal-shorthand\r\n }\r\n\r\n aiHook.i ++;\r\n aiHook.h.push(theHook);\r\n\r\n return theHook;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * Intercept the named functions for the target class / object\r\n * @param target - The target object\r\n * @param funcNames - The function names to intercept and call\r\n * @param callbacks - The callbacks to configure and call whenever the function is called\r\n * @param checkPrototype - If the function doesn't exist on the target should it attempt to hook the prototype function\r\n */\r\nexport function InstrumentFuncs(target:any, funcNames:string[], callbacks: IInstrumentHooksCallbacks, checkPrototype:boolean = true): IInstrumentHook[] {\r\n let hooks: IInstrumentHook[] = null;\r\n _arrLoop(funcNames, (funcName) => {\r\n let hook = InstrumentFunc(target, funcName, callbacks, checkPrototype);\r\n if (hook) {\r\n if (!hooks) {\r\n hooks = [];\r\n }\r\n\r\n hooks.push(hook);\r\n }\r\n });\r\n\r\n return hooks;\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { DataSanitizer, UrlHelper, DateTimeUtils, Util } from '@microsoft/applicationinsights-common';\r\nimport { CoreUtils, normalizeJsName } from '@microsoft/applicationinsights-core-js';\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nvar strProperties = \"properties\";\r\nvar _objKeys = CoreUtils.objKeys;\r\nvar _arrForEach = CoreUtils.arrForEach;\r\n/** @ignore */\r\nfunction _calcPerfDuration(resourceEntry, start, end) {\r\n var result = 0;\r\n var from = resourceEntry[start];\r\n var to = resourceEntry[end];\r\n if (from && to) {\r\n result = DateTimeUtils.GetDuration(from, to);\r\n }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _setPerfDuration(props, name, resourceEntry, start, end) {\r\n var result = 0;\r\n var value = _calcPerfDuration(resourceEntry, start, end);\r\n if (value) {\r\n result = _setPerfValue(props, name, Util.msToTimeSpan(value));\r\n }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _setPerfValue(props, name, value) {\r\n var strPerf = \"ajaxPerf\";\r\n var result = 0;\r\n if (props && name && value) {\r\n var perfData = props[strPerf] = (props[strPerf] || {});\r\n perfData[name] = value;\r\n result = 1;\r\n }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _populatePerfData(ajaxData, dependency) {\r\n /*\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API/Using_the_Resource_Timing_API\r\n * | -startTime\r\n * | -redirectStart\r\n * | | -redirectEnd\r\n * | | | -fetchStart\r\n * | | | | -domainLookupStart\r\n * | | | | |- domainLookupEnd\r\n * | | | | | | -connectStart\r\n * | | | | | | | -secureConnectionStart\r\n * | | | | | | | | -connectEnd\r\n * | | | | | | | | | -requestStart\r\n * | | | | | | | | | | | -responseStart\r\n * | | | | | | | | | | | | | -responseEnd\r\n * +------------+-+---+----------------+-+--+--------+-+-----------+-+------------+-+\r\n * |--redirect--| |---|--domainLookup--| |--connect--| |--request--| |--response--| |\r\n * |-------------------networkConnect----------------|\r\n * | |---------sentRequest--------|\r\n * |------------------------------------perfTotal-----------------------------------|\r\n */\r\n var resourceEntry = ajaxData.perfTiming;\r\n var props = dependency[strProperties] || {};\r\n var propsSet = 0;\r\n var _isString = CoreUtils.isString;\r\n var strName = \"name\";\r\n var strStart = \"Start\";\r\n var strEnd = \"End\";\r\n var strDomainLookup = \"domainLookup\";\r\n var strConnect = \"connect\";\r\n var strRedirect = \"redirect\";\r\n var strRequest = \"request\";\r\n var strResponse = \"response\";\r\n var strDuration = \"duration\";\r\n var strStartTime = \"startTime\";\r\n var strDomainLookupStart = strDomainLookup + strStart;\r\n var strDomainLookupEnd = strDomainLookup + strEnd;\r\n var strConnectStart = strConnect + strStart;\r\n var strConnectEnd = strConnect + strEnd;\r\n var strRequestStart = strRequest + strStart;\r\n var strRequestEnd = strRequest + strEnd;\r\n var strResponseStart = strResponse + strStart;\r\n var strResponseEnd = strResponse + strEnd;\r\n var strRedirectStart = strRedirect + strStart;\r\n var strRedirectEnd = strRedirect = strEnd;\r\n var strTransferSize = \"transferSize\";\r\n var strEncodedBodySize = \"encodedBodySize\";\r\n var strDecodedBodySize = \"decodedBodySize\";\r\n var strServerTiming = \"serverTiming\";\r\n if (resourceEntry) {\r\n // redirect\r\n propsSet |= _setPerfDuration(props, strRedirect, resourceEntry, strRedirectStart, strRedirectEnd);\r\n // domainLookup\r\n propsSet |= _setPerfDuration(props, strDomainLookup, resourceEntry, strDomainLookupStart, strDomainLookupEnd);\r\n // connect\r\n propsSet |= _setPerfDuration(props, strConnect, resourceEntry, strConnectStart, strConnectEnd);\r\n // request\r\n propsSet |= _setPerfDuration(props, strRequest, resourceEntry, strRequestStart, strRequestEnd);\r\n // response\r\n propsSet |= _setPerfDuration(props, strResponse, resourceEntry, strResponseStart, strResponseEnd);\r\n // Network connection time\r\n propsSet |= _setPerfDuration(props, \"networkConnect\", resourceEntry, strStartTime, strConnectEnd);\r\n // Sent Request\r\n propsSet |= _setPerfDuration(props, \"sentRequest\", resourceEntry, strRequestStart, strResponseEnd);\r\n // PerfTotal / Duration\r\n var duration = resourceEntry[strDuration];\r\n if (!duration) {\r\n duration = _calcPerfDuration(resourceEntry, strStartTime, strResponseEnd) || 0;\r\n }\r\n propsSet |= _setPerfValue(props, strDuration, duration);\r\n propsSet |= _setPerfValue(props, \"perfTotal\", duration);\r\n var serverTiming = resourceEntry[strServerTiming];\r\n if (serverTiming) {\r\n var server_1 = {};\r\n _arrForEach(serverTiming, function (value, idx) {\r\n var name = normalizeJsName(value[strName] || \"\" + idx);\r\n var newValue = server_1[name] || {};\r\n _arrForEach(_objKeys(value), function (key) {\r\n var val = value[key];\r\n if (key !== strName && _isString(val) || CoreUtils.isNumber(val)) {\r\n if (newValue[key]) {\r\n val = newValue[key] + \";\" + val;\r\n }\r\n if (val || !_isString(val)) {\r\n // Only set the value if it has a value and it's not an empty string\r\n newValue[key] = val;\r\n }\r\n }\r\n });\r\n server_1[name] = newValue;\r\n });\r\n propsSet |= _setPerfValue(props, strServerTiming, server_1);\r\n }\r\n propsSet |= _setPerfValue(props, strTransferSize, resourceEntry[strTransferSize]);\r\n propsSet |= _setPerfValue(props, strEncodedBodySize, resourceEntry[strEncodedBodySize]);\r\n propsSet |= _setPerfValue(props, strDecodedBodySize, resourceEntry[strDecodedBodySize]);\r\n }\r\n else {\r\n if (ajaxData.perfMark) {\r\n propsSet |= _setPerfValue(props, \"missing\", ajaxData.perfAttempts);\r\n }\r\n }\r\n if (propsSet) {\r\n dependency[strProperties] = props;\r\n }\r\n}\r\nvar XHRMonitoringState = /** @class */ (function () {\r\n function XHRMonitoringState() {\r\n var self = this;\r\n self.openDone = false;\r\n self.setRequestHeaderDone = false;\r\n self.sendDone = false;\r\n self.abortDone = false;\r\n // True, if onreadyStateChangeCallback function attached to xhr, otherwise false\r\n self.stateChangeAttached = false;\r\n }\r\n return XHRMonitoringState;\r\n}());\r\nexport { XHRMonitoringState };\r\nvar ajaxRecord = /** @class */ (function () {\r\n function ajaxRecord(traceID, spanID, logger) {\r\n var self = this;\r\n var _logger = logger;\r\n var strResponseText = \"responseText\";\r\n // Assigning the initial/default values within the constructor to avoid typescript from creating a bunch of\r\n // this.XXXX = null\r\n self.perfMark = null;\r\n self.completed = false;\r\n self.requestHeadersSize = null;\r\n self.requestHeaders = null;\r\n self.responseReceivingDuration = null;\r\n self.callbackDuration = null;\r\n self.ajaxTotalDuration = null;\r\n self.aborted = 0;\r\n self.pageUrl = null;\r\n self.requestUrl = null;\r\n self.requestSize = 0;\r\n self.method = null;\r\n self.status = null;\r\n self.requestSentTime = null;\r\n self.responseStartedTime = null;\r\n self.responseFinishedTime = null;\r\n self.callbackFinishedTime = null;\r\n self.endTime = null;\r\n self.xhrMonitoringState = new XHRMonitoringState();\r\n self.clientFailure = 0;\r\n self.traceID = traceID;\r\n self.spanID = spanID;\r\n dynamicProto(ajaxRecord, self, function (self) {\r\n self.getAbsoluteUrl = function () {\r\n return self.requestUrl ? UrlHelper.getAbsoluteUrl(self.requestUrl) : null;\r\n };\r\n self.getPathName = function () {\r\n return self.requestUrl ? DataSanitizer.sanitizeUrl(_logger, UrlHelper.getCompleteUrl(self.method, self.requestUrl)) : null;\r\n };\r\n self.CreateTrackItem = function (ajaxType, enableRequestHeaderTracking, getResponse) {\r\n // round to 3 decimal points\r\n self.ajaxTotalDuration = Math.round(DateTimeUtils.GetDuration(self.requestSentTime, self.responseFinishedTime) * 1000) / 1000;\r\n if (self.ajaxTotalDuration < 0) {\r\n return null;\r\n }\r\n var dependency = (_a = {\r\n id: \"|\" + self.traceID + \".\" + self.spanID,\r\n target: self.getAbsoluteUrl(),\r\n name: self.getPathName(),\r\n type: ajaxType,\r\n duration: self.ajaxTotalDuration,\r\n success: (+(self.status)) >= 200 && (+(self.status)) < 400,\r\n responseCode: (+(self.status)),\r\n method: self.method\r\n },\r\n _a[strProperties] = { HttpMethod: self.method },\r\n _a);\r\n // Add Ajax perf details if available\r\n _populatePerfData(self, dependency);\r\n if (enableRequestHeaderTracking) {\r\n if (_objKeys(self.requestHeaders).length > 0) {\r\n dependency[strProperties] = dependency[strProperties] || {};\r\n dependency[strProperties].requestHeaders = self.requestHeaders;\r\n }\r\n }\r\n if (getResponse) {\r\n var response = getResponse();\r\n if (response) {\r\n // enrich dependency target with correlation context from the server\r\n var correlationContext = response.correlationContext;\r\n if (correlationContext) {\r\n dependency.correlationContext = /* dependency.target + \" | \" + */ correlationContext;\r\n }\r\n if (response.headerMap) {\r\n if (_objKeys(response.headerMap).length > 0) {\r\n dependency[strProperties] = dependency[strProperties] || {};\r\n dependency[strProperties].responseHeaders = response.headerMap;\r\n }\r\n }\r\n if (self.status >= 400) {\r\n var responseType = response.type;\r\n dependency[strProperties] = dependency[strProperties] || {};\r\n if (responseType === \"\" || responseType === \"text\") {\r\n dependency[strProperties][strResponseText] = response[strResponseText] ? response.statusText + \" - \" + response[strResponseText] : response.statusText;\r\n }\r\n if (responseType === \"json\") {\r\n dependency[strProperties][strResponseText] = response.response ? response.statusText + \" - \" + JSON.stringify(response.response) : response.statusText;\r\n }\r\n }\r\n }\r\n }\r\n return dependency;\r\n var _a;\r\n };\r\n });\r\n }\r\n ajaxRecord.prototype.getAbsoluteUrl = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n ajaxRecord.prototype.getPathName = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n ajaxRecord.prototype.CreateTrackItem = function (ajaxType, enableRequestHeaderTracking, getResponse) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return null;\r\n };\r\n return ajaxRecord;\r\n}());\r\nexport { ajaxRecord };\r\n;\r\n//# sourceMappingURL=ajaxRecord.js.map","import { Util } from '@microsoft/applicationinsights-common';\r\nvar Traceparent = /** @class */ (function () {\r\n function Traceparent(traceId, spanId) {\r\n var self = this;\r\n self.traceFlag = Traceparent.DEFAULT_TRACE_FLAG;\r\n self.version = Traceparent.DEFAULT_VERSION;\r\n if (traceId && Traceparent.isValidTraceId(traceId)) {\r\n self.traceId = traceId;\r\n }\r\n else {\r\n self.traceId = Util.generateW3CId();\r\n }\r\n if (spanId && Traceparent.isValidSpanId(spanId)) {\r\n self.spanId = spanId;\r\n }\r\n else {\r\n self.spanId = Util.generateW3CId().substr(0, 16);\r\n }\r\n }\r\n Traceparent.isValidTraceId = function (id) {\r\n return id.match(/^[0-9a-f]{32}$/) && id !== \"00000000000000000000000000000000\";\r\n };\r\n Traceparent.isValidSpanId = function (id) {\r\n return id.match(/^[0-9a-f]{16}$/) && id !== \"0000000000000000\";\r\n };\r\n Traceparent.prototype.toString = function () {\r\n var self = this;\r\n return self.version + \"-\" + self.traceId + \"-\" + self.spanId + \"-\" + self.traceFlag;\r\n };\r\n Traceparent.DEFAULT_TRACE_FLAG = \"01\";\r\n Traceparent.DEFAULT_VERSION = \"00\";\r\n return Traceparent;\r\n}());\r\nexport { Traceparent };\r\n//# sourceMappingURL=TraceParent.js.map","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport * as tslib_1 from \"tslib\";\r\nimport { RequestHeaders, Util, CorrelationIdHelper, TelemetryItemCreator, RemoteDependencyData, DateTimeUtils, DisabledPropertyName, PropertiesPluginIdentifier, DistributedTracingModes } from '@microsoft/applicationinsights-common';\r\nimport { CoreUtils, LoggingSeverity, _InternalMessageId, BaseTelemetryPlugin, getLocation, getGlobal, strUndefined, strPrototype, InstrumentFunc, InstrumentProto, getPerformance } from '@microsoft/applicationinsights-core-js';\r\nimport { ajaxRecord } from './ajaxRecord';\r\nimport { EventHelper } from './ajaxUtils';\r\nimport { Traceparent } from './TraceParent';\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nvar AJAX_MONITOR_PREFIX = \"ai.ajxmn.\";\r\nvar strDiagLog = \"diagLog\";\r\nvar strAjaxData = \"ajaxData\";\r\nvar strThrowInternal = \"throwInternal\";\r\nvar strFetch = \"fetch\";\r\nvar _isNullOrUndefined = CoreUtils.isNullOrUndefined;\r\nvar _arrForEach = CoreUtils.arrForEach;\r\nvar _objKeys = CoreUtils.objKeys;\r\n// Using a global value so that to handle same iKey with multiple app insights instances (mostly for testing)\r\nvar _markCount = 0;\r\n/** @Ignore */\r\nfunction _supportsFetch() {\r\n var _global = getGlobal();\r\n if (!_global ||\r\n _isNullOrUndefined(_global.Request) ||\r\n _isNullOrUndefined(_global.Request[strPrototype]) ||\r\n _isNullOrUndefined(_global[strFetch])) {\r\n return null;\r\n }\r\n return _global[strFetch];\r\n}\r\n/**\r\n * Determines whether ajax monitoring can be enabled on this document\r\n * @returns True if Ajax monitoring is supported on this page, otherwise false\r\n * @ignore\r\n */\r\nfunction _supportsAjaxMonitoring(ajaxMonitorInstance) {\r\n var result = false;\r\n if (typeof XMLHttpRequest !== strUndefined && !_isNullOrUndefined(XMLHttpRequest)) {\r\n var proto = XMLHttpRequest[strPrototype];\r\n result = !_isNullOrUndefined(proto) &&\r\n !_isNullOrUndefined(proto.open) &&\r\n !_isNullOrUndefined(proto.send) &&\r\n !_isNullOrUndefined(proto.abort);\r\n }\r\n // disable in IE8 or older (https://www.w3schools.com/jsref/jsref_trim_string.asp)\r\n try {\r\n \" a \".trim();\r\n }\r\n catch (ex) {\r\n result = false;\r\n }\r\n if (result) {\r\n // Disable if the XmlHttpRequest can't be extended or hooked\r\n try {\r\n var xhr = new XMLHttpRequest();\r\n xhr[strAjaxData] = {};\r\n // Check that we can update the prototype\r\n var theOpen = XMLHttpRequest[strPrototype].open;\r\n XMLHttpRequest[strPrototype].open = theOpen;\r\n }\r\n catch (e) {\r\n // We can't decorate the xhr object so disable monitoring\r\n result = false;\r\n _throwInternalCritical(ajaxMonitorInstance, _InternalMessageId.FailedMonitorAjaxOpen, \"Failed to enable XMLHttpRequest monitoring, extension is not supported\", {\r\n exception: Util.dump(e)\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\n/** @Ignore */\r\nfunction _getFailedAjaxDiagnosticsMessage(xhr) {\r\n var result = \"\";\r\n try {\r\n if (!_isNullOrUndefined(xhr) &&\r\n !_isNullOrUndefined(xhr[strAjaxData]) &&\r\n !_isNullOrUndefined(xhr[strAjaxData].requestUrl)) {\r\n result += \"(url: '\" + xhr[strAjaxData].requestUrl + \"')\";\r\n }\r\n }\r\n catch (e) { }\r\n return result;\r\n}\r\n/** @ignore */\r\nfunction _throwInternalCritical(ajaxMonitorInstance, msgId, message, properties, isUserAct) {\r\n ajaxMonitorInstance[strDiagLog]()[strThrowInternal](LoggingSeverity.CRITICAL, msgId, message, properties, isUserAct);\r\n}\r\n/** @ignore */\r\nfunction _throwInternalWarning(ajaxMonitorInstance, msgId, message, properties, isUserAct) {\r\n ajaxMonitorInstance[strDiagLog]()[strThrowInternal](LoggingSeverity.WARNING, msgId, message, properties, isUserAct);\r\n}\r\n/** @Ignore */\r\nfunction _createErrorCallbackFunc(ajaxMonitorInstance, internalMessage, message) {\r\n // tslint:disable-next-line\r\n return function (args) {\r\n _throwInternalCritical(ajaxMonitorInstance, internalMessage, message, {\r\n ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(args.inst),\r\n exception: Util.dump(args.err)\r\n });\r\n };\r\n}\r\nfunction _indexOf(value, match) {\r\n if (value && match) {\r\n return value.indexOf(match);\r\n }\r\n return -1;\r\n}\r\nvar AjaxMonitor = /** @class */ (function (_super) {\r\n tslib_1.__extends(AjaxMonitor, _super);\r\n function AjaxMonitor() {\r\n var _this = _super.call(this) || this;\r\n _this.identifier = AjaxMonitor.identifier;\r\n _this.priority = 120;\r\n var strTrackDependencyDataInternal = \"trackDependencyDataInternal\"; // Using string to help with minification\r\n var location = getLocation();\r\n var _fetchInitialized = false; // fetch monitoring initialized\r\n var _xhrInitialized = false; // XHR monitoring initialized\r\n var _currentWindowHost = location && location.host && location.host.toLowerCase();\r\n var _config = AjaxMonitor.getEmptyConfig();\r\n var _enableRequestHeaderTracking = false;\r\n var _trackAjaxAttempts = 0;\r\n var _context;\r\n var _isUsingW3CHeaders;\r\n var _isUsingAIHeaders;\r\n var _markPrefix;\r\n var _enableAjaxPerfTracking = false;\r\n var _maxAjaxCallsPerView = 0;\r\n var _enableResponseHeaderTracking = false;\r\n var _hooks = [];\r\n var _disabledUrls = {};\r\n dynamicProto(AjaxMonitor, _this, function (_self, base) {\r\n _self.initialize = function (config, core, extensions, pluginChain) {\r\n if (!_self.isInitialized()) {\r\n base.initialize(config, core, extensions, pluginChain);\r\n var ctx_1 = _self._getTelCtx();\r\n var defaultConfig_1 = AjaxMonitor.getDefaultConfig();\r\n _arrForEach(_objKeys(defaultConfig_1), function (field) {\r\n _config[field] = ctx_1.getConfig(AjaxMonitor.identifier, field, defaultConfig_1[field]);\r\n });\r\n var distributedTracingMode = _config.distributedTracingMode;\r\n _enableRequestHeaderTracking = _config.enableRequestHeaderTracking;\r\n _enableAjaxPerfTracking = _config.enableAjaxPerfTracking;\r\n _maxAjaxCallsPerView = _config.maxAjaxCallsPerView;\r\n _enableResponseHeaderTracking = _config.enableResponseHeaderTracking;\r\n _isUsingAIHeaders = distributedTracingMode === DistributedTracingModes.AI || distributedTracingMode === DistributedTracingModes.AI_AND_W3C;\r\n _isUsingW3CHeaders = distributedTracingMode === DistributedTracingModes.AI_AND_W3C || distributedTracingMode === DistributedTracingModes.W3C;\r\n if (_enableAjaxPerfTracking) {\r\n var iKey = config.instrumentationKey || \"unkwn\";\r\n if (iKey.length > 5) {\r\n _markPrefix = AJAX_MONITOR_PREFIX + iKey.substring(iKey.length - 5) + \".\";\r\n }\r\n else {\r\n _markPrefix = AJAX_MONITOR_PREFIX + iKey + \".\";\r\n }\r\n }\r\n if (_config.disableAjaxTracking === false) {\r\n _instrumentXhr();\r\n }\r\n _instrumentFetch();\r\n if (extensions.length > 0 && extensions) {\r\n var propExt = void 0, extIx = 0;\r\n while (!propExt && extIx < extensions.length) {\r\n if (extensions[extIx] && extensions[extIx].identifier === PropertiesPluginIdentifier) {\r\n propExt = extensions[extIx];\r\n }\r\n extIx++;\r\n }\r\n if (propExt) {\r\n _context = propExt.context; // we could move IPropertiesPlugin to common as well\r\n }\r\n }\r\n }\r\n };\r\n _self.teardown = function () {\r\n // Remove all instrumentation hooks\r\n _arrForEach(_hooks, function (fn) {\r\n fn.rm();\r\n });\r\n _hooks = [];\r\n _fetchInitialized = false;\r\n _xhrInitialized = false;\r\n _self.setInitialized(false);\r\n };\r\n _self.trackDependencyData = function (dependency, properties) {\r\n _self[strTrackDependencyDataInternal](dependency, properties);\r\n };\r\n _self.includeCorrelationHeaders = function (ajaxData, input, init, xhr) {\r\n // Test Hook to allow the overriding of the location host\r\n var currentWindowHost = _self[\"_currentWindowHost\"] || _currentWindowHost;\r\n if (input) {\r\n if (CorrelationIdHelper.canIncludeCorrelationHeader(_config, ajaxData.getAbsoluteUrl(), currentWindowHost)) {\r\n if (!init) {\r\n init = {};\r\n }\r\n // init headers override original request headers\r\n // so, if they exist use only them, otherwise use request's because they should have been applied in the first place\r\n // not using original request headers will result in them being lost\r\n init.headers = new Headers(init.headers || (input instanceof Request ? (input.headers || {}) : {}));\r\n if (_isUsingAIHeaders) {\r\n var id = \"|\" + ajaxData.traceID + \".\" + ajaxData.spanID;\r\n init.headers.set(RequestHeaders.requestIdHeader, id);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData.requestHeaders[RequestHeaders.requestIdHeader] = id;\r\n }\r\n }\r\n var appId = _config.appId || (_context && _context.appId());\r\n if (appId) {\r\n init.headers.set(RequestHeaders.requestContextHeader, RequestHeaders.requestContextAppIdFormat + appId);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData.requestHeaders[RequestHeaders.requestContextHeader] = RequestHeaders.requestContextAppIdFormat + appId;\r\n }\r\n }\r\n if (_isUsingW3CHeaders) {\r\n var traceparent = new Traceparent(ajaxData.traceID, ajaxData.spanID);\r\n init.headers.set(RequestHeaders.traceParentHeader, traceparent.toString());\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData.requestHeaders[RequestHeaders.traceParentHeader] = traceparent.toString();\r\n }\r\n }\r\n }\r\n return init;\r\n }\r\n else if (xhr) {\r\n if (CorrelationIdHelper.canIncludeCorrelationHeader(_config, ajaxData.getAbsoluteUrl(), currentWindowHost)) {\r\n if (_isUsingAIHeaders) {\r\n var id = \"|\" + ajaxData.traceID + \".\" + ajaxData.spanID;\r\n xhr.setRequestHeader(RequestHeaders.requestIdHeader, id);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData.requestHeaders[RequestHeaders.requestIdHeader] = id;\r\n }\r\n }\r\n var appId = _config.appId || (_context && _context.appId());\r\n if (appId) {\r\n xhr.setRequestHeader(RequestHeaders.requestContextHeader, RequestHeaders.requestContextAppIdFormat + appId);\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData.requestHeaders[RequestHeaders.requestContextHeader] = RequestHeaders.requestContextAppIdFormat + appId;\r\n }\r\n }\r\n if (_isUsingW3CHeaders) {\r\n var traceparent = new Traceparent(ajaxData.traceID, ajaxData.spanID);\r\n xhr.setRequestHeader(RequestHeaders.traceParentHeader, traceparent.toString());\r\n if (_enableRequestHeaderTracking) {\r\n ajaxData.requestHeaders[RequestHeaders.traceParentHeader] = traceparent.toString();\r\n }\r\n }\r\n }\r\n return xhr;\r\n }\r\n return undefined;\r\n };\r\n _self[strTrackDependencyDataInternal] = function (dependency, properties, systemProperties) {\r\n if (_maxAjaxCallsPerView === -1 || _trackAjaxAttempts < _maxAjaxCallsPerView) {\r\n // Hack since expected format in w3c mode is |abc.def.\r\n // Non-w3c format is |abc.def\r\n // @todo Remove if better solution is available, e.g. handle in portal \r\n if ((_config.distributedTracingMode === DistributedTracingModes.W3C\r\n || _config.distributedTracingMode === DistributedTracingModes.AI_AND_W3C)\r\n && typeof dependency.id === \"string\" && dependency.id[dependency.id.length - 1] !== \".\") {\r\n dependency.id += \".\";\r\n }\r\n var item = TelemetryItemCreator.create(dependency, RemoteDependencyData.dataType, RemoteDependencyData.envelopeType, _self[strDiagLog](), properties, systemProperties);\r\n _self.core.track(item);\r\n }\r\n else if (_trackAjaxAttempts === _maxAjaxCallsPerView) {\r\n _throwInternalCritical(_self, _InternalMessageId.MaxAjaxPerPVExceeded, \"Maximum ajax per page view limit reached, ajax monitoring is paused until the next trackPageView(). In order to increase the limit set the maxAjaxCallsPerView configuration parameter.\", true);\r\n }\r\n ++_trackAjaxAttempts;\r\n };\r\n // Fetch Stuff\r\n function _instrumentFetch() {\r\n var fetch = _supportsFetch();\r\n if (!fetch) {\r\n return;\r\n }\r\n var global = getGlobal();\r\n var isPolyfill = fetch.polyfill;\r\n if (_config.disableFetchTracking === false) {\r\n _hooks.push(InstrumentFunc(global, strFetch, {\r\n // Add request hook\r\n req: function (callDetails, input, init) {\r\n var fetchData;\r\n if (_fetchInitialized &&\r\n !_isDisabledRequest(null, input, init) &&\r\n // If we have a polyfil and XHR instrumented then let XHR report otherwise we get duplicates\r\n !(isPolyfill && _xhrInitialized)) {\r\n var ctx = callDetails.ctx();\r\n fetchData = _createFetchRecord(input, init);\r\n var newInit = _self.includeCorrelationHeaders(fetchData, input, init);\r\n if (newInit !== init) {\r\n callDetails.set(1, newInit);\r\n }\r\n ctx.data = fetchData;\r\n }\r\n },\r\n rsp: function (callDetails, input) {\r\n var fetchData = callDetails.ctx().data;\r\n if (fetchData) {\r\n // Replace the result with the new promise from this code\r\n callDetails.rslt = callDetails.rslt.then(function (response) {\r\n _reportFetchMetrics(callDetails, (response || {}).status, response, fetchData, function () {\r\n var ajaxResponse = {\r\n statusText: response.statusText,\r\n headerMap: null,\r\n correlationContext: _getFetchCorrelationContext(response)\r\n };\r\n if (_enableResponseHeaderTracking) {\r\n var responseHeaderMap_1 = {};\r\n response.headers.forEach(function (value, name) {\r\n responseHeaderMap_1[name] = value;\r\n });\r\n ajaxResponse.headerMap = responseHeaderMap_1;\r\n }\r\n return ajaxResponse;\r\n });\r\n return response;\r\n })[\"catch\"](function (reason) {\r\n _reportFetchMetrics(callDetails, 0, input, fetchData, null, { error: reason.message });\r\n throw reason;\r\n });\r\n }\r\n },\r\n // Create an error callback to report any hook errors\r\n hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxOpen, \"Failed to monitor Window.fetch, monitoring data for this fetch call may be incorrect.\")\r\n }));\r\n _fetchInitialized = true;\r\n }\r\n else if (isPolyfill) {\r\n // If fetch is a polyfill we need to capture the request to ensure that we correctly track\r\n // disabled request URLS (i.e. internal urls) to ensure we don't end up in a constant loop\r\n // of reporting ourselves, for example React Native uses a polyfill for fetch\r\n // Note: Polyfill implementations that don't support the \"poyyfill\" tag are not supported\r\n // the workaround is to add a polyfill property to your fetch implementation before initializing\r\n // App Insights\r\n _hooks.push(InstrumentFunc(global, strFetch, {\r\n req: function (callDetails, input, init) {\r\n // Just call so that we record any disabled URL\r\n _isDisabledRequest(null, input, init);\r\n }\r\n }));\r\n }\r\n if (isPolyfill) {\r\n // retag the instrumented fetch with the same polyfill settings this is mostly for testing\r\n // But also supports multiple App Insights usages\r\n global[strFetch].polyfill = isPolyfill;\r\n }\r\n }\r\n function _hookProto(target, funcName, callbacks) {\r\n _hooks.push(InstrumentProto(target, funcName, callbacks));\r\n }\r\n function _instrumentXhr() {\r\n if (_supportsAjaxMonitoring(_self) && !_xhrInitialized) {\r\n // Instrument open\r\n _hookProto(XMLHttpRequest, \"open\", {\r\n req: function (args, method, url, async) {\r\n var xhr = args.inst;\r\n var ajaxData = xhr[strAjaxData];\r\n if (!_isDisabledRequest(xhr, url) && _isMonitoredXhrInstance(xhr, true) &&\r\n (!ajaxData || !ajaxData.xhrMonitoringState.openDone)) {\r\n _openHandler(xhr, method, url, async);\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxOpen, \"Failed to monitor XMLHttpRequest.open, monitoring data for this ajax call may be incorrect.\")\r\n });\r\n // Instrument send\r\n _hookProto(XMLHttpRequest, \"send\", {\r\n req: function (args, context) {\r\n var xhr = args.inst;\r\n var ajaxData = xhr[strAjaxData];\r\n if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState.sendDone) {\r\n _createMarkId(\"xhr\", ajaxData);\r\n ajaxData.requestSentTime = DateTimeUtils.Now();\r\n xhr = _self.includeCorrelationHeaders(ajaxData, undefined, undefined, xhr);\r\n ajaxData.xhrMonitoringState.sendDone = true;\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxSend, \"Failed to monitor XMLHttpRequest, monitoring data for this ajax call may be incorrect.\")\r\n });\r\n // Instrument abort\r\n _hookProto(XMLHttpRequest, \"abort\", {\r\n req: function (args) {\r\n var xhr = args.inst;\r\n var ajaxData = xhr[strAjaxData];\r\n if (_isMonitoredXhrInstance(xhr) && !ajaxData.xhrMonitoringState.abortDone) {\r\n ajaxData.aborted = 1;\r\n ajaxData.xhrMonitoringState.abortDone = true;\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxAbort, \"Failed to monitor XMLHttpRequest.abort, monitoring data for this ajax call may be incorrect.\")\r\n });\r\n // Instrument setRequestHeader\r\n if (_enableRequestHeaderTracking) {\r\n _hookProto(XMLHttpRequest, \"setRequestHeader\", {\r\n req: function (args, header, value) {\r\n var xhr = args.inst;\r\n if (_isMonitoredXhrInstance(xhr)) {\r\n xhr[strAjaxData].requestHeaders[header] = value;\r\n }\r\n },\r\n hkErr: _createErrorCallbackFunc(_self, _InternalMessageId.FailedMonitorAjaxSetRequestHeader, \"Failed to monitor XMLHttpRequest.setRequestHeader, monitoring data for this ajax call may be incorrect.\")\r\n });\r\n }\r\n _xhrInitialized = true;\r\n }\r\n }\r\n function _isDisabledRequest(xhr, request, init) {\r\n var isDisabled = false;\r\n var theUrl = ((!CoreUtils.isString(request) ? (request || {}).url || \"\" : request) || \"\").toLowerCase();\r\n var idx = _indexOf(theUrl, \"?\");\r\n var idx2 = _indexOf(theUrl, \"#\");\r\n if (idx === -1 || (idx2 !== -1 && idx2 < idx)) {\r\n idx = idx2;\r\n }\r\n if (idx !== -1) {\r\n // Strip off any Query string\r\n theUrl = theUrl.substring(0, idx);\r\n }\r\n // check that this instance is not not used by ajax call performed inside client side monitoring to send data to collector\r\n if (!_isNullOrUndefined(xhr)) {\r\n // Look on the XMLHttpRequest of the URL string value\r\n isDisabled = xhr[DisabledPropertyName] === true || theUrl[DisabledPropertyName] === true;\r\n }\r\n else if (!_isNullOrUndefined(request)) {\r\n // Look for DisabledPropertyName in either Request or RequestInit\r\n isDisabled = (typeof request === 'object' ? request[DisabledPropertyName] === true : false) ||\r\n (init ? init[DisabledPropertyName] === true : false);\r\n }\r\n if (isDisabled) {\r\n // Add the disabled url if not present\r\n if (!_disabledUrls[theUrl]) {\r\n _disabledUrls[theUrl] = 1;\r\n }\r\n }\r\n else {\r\n // Check to see if the url is listed as disabled\r\n if (_disabledUrls[theUrl]) {\r\n isDisabled = true;\r\n }\r\n }\r\n return isDisabled;\r\n }\r\n /// Verifies that particalar instance of XMLHttpRequest needs to be monitored\r\n /// Optional parameter. True if ajaxData must be excluded from verification\r\n /// True if instance needs to be monitored, otherwise false\r\n function _isMonitoredXhrInstance(xhr, excludeAjaxDataValidation) {\r\n var ajaxValidation = true;\r\n var initialized = _xhrInitialized;\r\n if (!_isNullOrUndefined(xhr)) {\r\n ajaxValidation = excludeAjaxDataValidation === true || !_isNullOrUndefined(xhr[strAjaxData]);\r\n }\r\n // checking to see that all interested functions on xhr were instrumented\r\n return initialized\r\n // checking on ajaxData to see that it was not removed in user code\r\n && ajaxValidation;\r\n }\r\n function _openHandler(xhr, method, url, async) {\r\n var traceID = (_context && _context.telemetryTrace && _context.telemetryTrace.traceID) || Util.generateW3CId();\r\n var spanID = Util.generateW3CId().substr(0, 16);\r\n var ajaxData = new ajaxRecord(traceID, spanID, _self[strDiagLog]());\r\n ajaxData.method = method;\r\n ajaxData.requestUrl = url;\r\n ajaxData.xhrMonitoringState.openDone = true;\r\n ajaxData.requestHeaders = {};\r\n ajaxData.async = async;\r\n xhr[strAjaxData] = ajaxData;\r\n _attachToOnReadyStateChange(xhr);\r\n }\r\n function _attachToOnReadyStateChange(xhr) {\r\n xhr[strAjaxData].xhrMonitoringState.stateChangeAttached = EventHelper.Attach(xhr, \"readystatechange\", function () {\r\n try {\r\n if (xhr && xhr.readyState === 4 && _isMonitoredXhrInstance(xhr)) {\r\n _onAjaxComplete(xhr);\r\n }\r\n }\r\n catch (e) {\r\n var exceptionText = Util.dump(e);\r\n // ignore messages with c00c023f, as this a known IE9 XHR abort issue\r\n if (!exceptionText || _indexOf(exceptionText.toLowerCase(), \"c00c023f\") === -1) {\r\n _throwInternalCritical(_self, _InternalMessageId.FailedMonitorAjaxRSC, \"Failed to monitor XMLHttpRequest 'readystatechange' event handler, monitoring data for this ajax call may be incorrect.\", {\r\n ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),\r\n exception: exceptionText\r\n });\r\n }\r\n }\r\n });\r\n }\r\n function _getResponseText(xhr) {\r\n try {\r\n var responseType = xhr.responseType;\r\n if (responseType === \"\" || responseType === \"text\") {\r\n // As per the specification responseText is only valid if the type is an empty string or \"text\"\r\n return xhr.responseText;\r\n }\r\n }\r\n catch (e) {\r\n // This shouldn't happend because of the above check -- but just in case, so just ignore\r\n }\r\n return null;\r\n }\r\n function _onAjaxComplete(xhr) {\r\n var ajaxData = xhr[strAjaxData];\r\n ajaxData.responseFinishedTime = DateTimeUtils.Now();\r\n ajaxData.status = xhr.status;\r\n function _reportXhrError(e, failedProps) {\r\n var errorProps = failedProps || {};\r\n errorProps[\"ajaxDiagnosticsMessage\"] = _getFailedAjaxDiagnosticsMessage(xhr);\r\n if (e) {\r\n errorProps[\"exception\"] = Util.dump(e);\r\n }\r\n _throwInternalWarning(_self, _InternalMessageId.FailedMonitorAjaxDur, \"Failed to calculate the duration of the ajax call, monitoring data for this ajax call won't be sent.\", errorProps);\r\n }\r\n _findPerfResourceEntry(\"xmlhttprequest\", ajaxData, function () {\r\n try {\r\n var dependency = ajaxData.CreateTrackItem(\"Ajax\", _enableRequestHeaderTracking, function () {\r\n var ajaxResponse = {\r\n statusText: xhr.statusText,\r\n headerMap: null,\r\n correlationContext: _getAjaxCorrelationContext(xhr),\r\n type: xhr.responseType,\r\n responseText: _getResponseText(xhr),\r\n response: xhr.response\r\n };\r\n if (_enableResponseHeaderTracking) {\r\n var headers = xhr.getAllResponseHeaders();\r\n if (headers) {\r\n // xhr.getAllResponseHeaders() method returns all the response headers, separated by CRLF, as a string or null\r\n // the regex converts the header string into an array of individual headers\r\n var arr = headers.trim().split(/[\\r\\n]+/);\r\n var responseHeaderMap_2 = {};\r\n _arrForEach(arr, function (line) {\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n responseHeaderMap_2[header] = value;\r\n });\r\n ajaxResponse.headerMap = responseHeaderMap_2;\r\n }\r\n }\r\n return ajaxResponse;\r\n });\r\n if (dependency) {\r\n _self[strTrackDependencyDataInternal](dependency);\r\n }\r\n else {\r\n _reportXhrError(null, {\r\n requestSentTime: ajaxData.requestSentTime,\r\n responseFinishedTime: ajaxData.responseFinishedTime\r\n });\r\n }\r\n }\r\n finally {\r\n // cleanup telemetry data\r\n try {\r\n xhr[strAjaxData] = null;\r\n }\r\n catch (e) {\r\n // May throw in environments that prevent extension or freeze xhr\r\n }\r\n }\r\n }, function (e) {\r\n _reportXhrError(e, null);\r\n });\r\n }\r\n function _getAjaxCorrelationContext(xhr) {\r\n try {\r\n var responseHeadersString = xhr.getAllResponseHeaders();\r\n if (responseHeadersString !== null) {\r\n var index = _indexOf(responseHeadersString.toLowerCase(), RequestHeaders.requestContextHeaderLowerCase);\r\n if (index !== -1) {\r\n var responseHeader = xhr.getResponseHeader(RequestHeaders.requestContextHeader);\r\n return CorrelationIdHelper.getCorrelationContext(responseHeader);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _throwInternalWarning(_self, _InternalMessageId.FailedMonitorAjaxGetCorrelationHeader, \"Failed to get Request-Context correlation header as it may be not included in the response or not accessible.\", {\r\n ajaxDiagnosticsMessage: _getFailedAjaxDiagnosticsMessage(xhr),\r\n exception: Util.dump(e)\r\n });\r\n }\r\n }\r\n function _createMarkId(type, ajaxData) {\r\n if (ajaxData.requestUrl && _markPrefix && _enableAjaxPerfTracking) {\r\n var performance_1 = getPerformance();\r\n if (performance_1 && CoreUtils.isFunction(performance_1.mark)) {\r\n _markCount++;\r\n var markId = _markPrefix + type + \"#\" + _markCount;\r\n performance_1.mark(markId);\r\n var entries = performance_1.getEntriesByName(markId);\r\n if (entries && entries.length === 1) {\r\n ajaxData.perfMark = entries[0];\r\n }\r\n }\r\n }\r\n }\r\n function _findPerfResourceEntry(initiatorType, ajaxData, trackCallback, reportError) {\r\n var perfMark = ajaxData.perfMark;\r\n var performance = getPerformance();\r\n var maxAttempts = _config.maxAjaxPerfLookupAttempts;\r\n var retryDelay = _config.ajaxPerfLookupDelay;\r\n var requestUrl = ajaxData.requestUrl;\r\n var attempt = 0;\r\n (function locateResourceTiming() {\r\n try {\r\n if (performance && perfMark) {\r\n attempt++;\r\n var perfTiming = null;\r\n var entries = performance.getEntries();\r\n for (var lp = entries.length - 1; lp >= 0; lp--) {\r\n var entry = entries[lp];\r\n if (entry) {\r\n if (entry.entryType === \"resource\") {\r\n if (entry.initiatorType === initiatorType &&\r\n (_indexOf(entry.name, requestUrl) !== -1 || _indexOf(requestUrl, entry.name) !== -1)) {\r\n perfTiming = entry;\r\n }\r\n }\r\n else if (entry.entryType === \"mark\" && entry.name === perfMark.name) {\r\n // We hit the start event\r\n ajaxData.perfTiming = perfTiming;\r\n break;\r\n }\r\n if (entry.startTime < perfMark.startTime - 1000) {\r\n // Fallback to try and reduce the time spent looking for the perf entry\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!perfMark || // - we don't have a perfMark or\r\n ajaxData.perfTiming || // - we have not found the perf entry or \r\n attempt >= maxAttempts || // - we have tried too many attempts or\r\n ajaxData.async === false) {\r\n if (perfMark && CoreUtils.isFunction(performance.clearMarks)) {\r\n // Remove the mark so we don't fill up the performance resources too much\r\n performance.clearMarks(perfMark.name);\r\n }\r\n ajaxData.perfAttempts = attempt;\r\n // just continue and report the track event\r\n trackCallback();\r\n }\r\n else {\r\n // We need to wait for the browser to populate the window.performance entry\r\n // This needs to be at least 1ms as waiting <= 1 (on firefox) is not enough time for fetch or xhr, \r\n // this is a scheduling issue for the browser implementation\r\n setTimeout(locateResourceTiming, retryDelay);\r\n }\r\n }\r\n catch (e) {\r\n reportError(e);\r\n }\r\n })();\r\n }\r\n function _createFetchRecord(input, init) {\r\n var traceID = (_context && _context.telemetryTrace && _context.telemetryTrace.traceID) || Util.generateW3CId();\r\n var spanID = Util.generateW3CId().substr(0, 16);\r\n var ajaxData = new ajaxRecord(traceID, spanID, _self[strDiagLog]());\r\n ajaxData.requestSentTime = DateTimeUtils.Now();\r\n if (input instanceof Request) {\r\n ajaxData.requestUrl = input ? input.url : \"\";\r\n }\r\n else {\r\n ajaxData.requestUrl = input;\r\n }\r\n var method = \"GET\";\r\n if (init && init.method) {\r\n method = init.method;\r\n }\r\n else if (input && input instanceof Request) {\r\n method = input.method;\r\n }\r\n ajaxData.method = method;\r\n var requestHeaders = {};\r\n if (_enableRequestHeaderTracking) {\r\n var headers = new Headers((init ? init.headers : 0) || (input instanceof Request ? (input.headers || {}) : {}));\r\n headers.forEach(function (value, key) {\r\n requestHeaders[key] = value;\r\n });\r\n }\r\n ajaxData.requestHeaders = requestHeaders;\r\n _createMarkId(\"fetch\", ajaxData);\r\n return ajaxData;\r\n }\r\n function _getFailedFetchDiagnosticsMessage(input) {\r\n var result = \"\";\r\n try {\r\n if (!_isNullOrUndefined(input)) {\r\n if (typeof (input) === \"string\") {\r\n result += \"(url: '\" + input + \"')\";\r\n }\r\n else {\r\n result += \"(url: '\" + input.url + \"')\";\r\n }\r\n }\r\n }\r\n catch (e) {\r\n _throwInternalCritical(_self, _InternalMessageId.FailedMonitorAjaxOpen, \"Failed to grab failed fetch diagnostics message\", { exception: Util.dump(e) });\r\n }\r\n return result;\r\n }\r\n function _reportFetchMetrics(callDetails, status, input, ajaxData, getResponse, properties) {\r\n if (!ajaxData) {\r\n return;\r\n }\r\n function _reportFetchError(msgId, e, failedProps) {\r\n var errorProps = failedProps || {};\r\n errorProps[\"fetchDiagnosticsMessage\"] = _getFailedFetchDiagnosticsMessage(input);\r\n if (e) {\r\n errorProps[\"exception\"] = Util.dump(e);\r\n }\r\n _throwInternalWarning(_self, msgId, \"Failed to calculate the duration of the fetch call, monitoring data for this fetch call won't be sent.\", errorProps);\r\n }\r\n ajaxData.responseFinishedTime = DateTimeUtils.Now();\r\n ajaxData.status = status;\r\n _findPerfResourceEntry(\"fetch\", ajaxData, function () {\r\n var dependency = ajaxData.CreateTrackItem(\"Fetch\", _enableRequestHeaderTracking, getResponse);\r\n if (dependency) {\r\n _self[strTrackDependencyDataInternal](dependency);\r\n }\r\n else {\r\n _reportFetchError(_InternalMessageId.FailedMonitorAjaxDur, null, {\r\n requestSentTime: ajaxData.requestSentTime,\r\n responseFinishedTime: ajaxData.responseFinishedTime\r\n });\r\n }\r\n }, function (e) {\r\n _reportFetchError(_InternalMessageId.FailedMonitorAjaxGetCorrelationHeader, e, null);\r\n });\r\n }\r\n function _getFetchCorrelationContext(response) {\r\n if (response && response.headers) {\r\n try {\r\n var responseHeader = response.headers.get(RequestHeaders.requestContextHeader);\r\n return CorrelationIdHelper.getCorrelationContext(responseHeader);\r\n }\r\n catch (e) {\r\n _throwInternalWarning(_self, _InternalMessageId.FailedMonitorAjaxGetCorrelationHeader, \"Failed to get Request-Context correlation header as it may be not included in the response or not accessible.\", {\r\n fetchDiagnosticsMessage: _getFailedFetchDiagnosticsMessage(response),\r\n exception: Util.dump(e)\r\n });\r\n }\r\n }\r\n }\r\n });\r\n return _this;\r\n }\r\n AjaxMonitor.getDefaultConfig = function () {\r\n var config = {\r\n maxAjaxCallsPerView: 500,\r\n disableAjaxTracking: false,\r\n disableFetchTracking: true,\r\n disableCorrelationHeaders: false,\r\n distributedTracingMode: DistributedTracingModes.AI,\r\n correlationHeaderExcludedDomains: [\r\n \"*.blob.core.windows.net\",\r\n \"*.blob.core.chinacloudapi.cn\",\r\n \"*.blob.core.cloudapi.de\",\r\n \"*.blob.core.usgovcloudapi.net\"\r\n ],\r\n correlationHeaderDomains: undefined,\r\n appId: undefined,\r\n enableCorsCorrelation: false,\r\n enableRequestHeaderTracking: false,\r\n enableResponseHeaderTracking: false,\r\n enableAjaxErrorStatusText: false,\r\n enableAjaxPerfTracking: false,\r\n maxAjaxPerfLookupAttempts: 3,\r\n ajaxPerfLookupDelay: 25\r\n };\r\n return config;\r\n };\r\n AjaxMonitor.getEmptyConfig = function () {\r\n var emptyConfig = this.getDefaultConfig();\r\n _arrForEach(_objKeys(emptyConfig), function (value) {\r\n emptyConfig[value] = undefined;\r\n });\r\n return emptyConfig;\r\n };\r\n AjaxMonitor.prototype.initialize = function (config, core, extensions, pluginChain) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n AjaxMonitor.prototype.teardown = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n AjaxMonitor.prototype.processTelemetry = function (item, itemCtx) {\r\n this.processNext(item, itemCtx);\r\n };\r\n /**\r\n * Logs dependency call\r\n * @param dependencyData dependency data object\r\n */\r\n AjaxMonitor.prototype.trackDependencyData = function (dependency, properties) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n AjaxMonitor.prototype.includeCorrelationHeaders = function (ajaxData, input, init, xhr) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Protected function to allow sub classes the chance to add additional properties to the delendency event\r\n * before it's sent. This function calls track, so sub-classes must call this function after they have\r\n * populated their properties.\r\n * @param dependencyData dependency data object\r\n */\r\n AjaxMonitor.prototype.trackDependencyDataInternal = function (dependency, properties, systemProperties) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n AjaxMonitor.identifier = \"AjaxDependencyPlugin\";\r\n return AjaxMonitor;\r\n}(BaseTelemetryPlugin));\r\nexport { AjaxMonitor };\r\n//# sourceMappingURL=ajax.js.map","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\r\n// @duplicate of https://github.com/microsoft/ApplicationInsights-node.js/blob/develop/Library/ConnectionStringParser.ts\r\n\r\nimport { ConnectionString, ConnectionStringKey } from \"./Interfaces/ConnectionString\";\r\nimport { DEFAULT_BREEZE_ENDPOINT } from \"./Constants\";\r\nimport { CoreUtils } from \"@microsoft/applicationinsights-core-js\";\r\n\r\nexport class ConnectionStringParser {\r\n private static _FIELDS_SEPARATOR = \";\";\r\n private static _FIELD_KEY_VALUE_SEPARATOR = \"=\";\r\n\r\n public static parse(connectionString?: string): ConnectionString {\r\n if (!connectionString) {\r\n return {};\r\n }\r\n\r\n const kvPairs = connectionString.split(ConnectionStringParser._FIELDS_SEPARATOR);\r\n\r\n const result: ConnectionString = CoreUtils.arrReduce(kvPairs, (fields: ConnectionString, kv: string) => {\r\n const kvParts = kv.split(ConnectionStringParser._FIELD_KEY_VALUE_SEPARATOR);\r\n\r\n if (kvParts.length === 2) { // only save fields with valid formats\r\n const key = kvParts[0].toLowerCase() as ConnectionStringKey;\r\n const value = kvParts[1];\r\n fields[key] = value as string;\r\n }\r\n return fields;\r\n }, {});\r\n\r\n if (CoreUtils.objKeys(result).length > 0) {\r\n // this is a valid connection string, so parse the results\r\n\r\n if (result.endpointsuffix) {\r\n // use endpoint suffix where overrides are not provided\r\n const locationPrefix = result.location ? result.location + \".\" : \"\";\r\n result.ingestionendpoint = result.ingestionendpoint || (\"https://\" + locationPrefix + \"dc.\" + result.endpointsuffix);\r\n }\r\n\r\n // apply the default endpoints\r\n result.ingestionendpoint = result.ingestionendpoint || DEFAULT_BREEZE_ENDPOINT;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { CoreUtils, AppInsightsCore, LoggingSeverity, _InternalMessageId, hasWindow, hasDocument } from \"@microsoft/applicationinsights-core-js\";\r\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-analytics-js\";\r\nimport { Sender } from \"@microsoft/applicationinsights-channel-js\";\r\nimport { PropertiesPlugin } from \"@microsoft/applicationinsights-properties-js\";\r\nimport { AjaxPlugin as DependenciesPlugin } from '@microsoft/applicationinsights-dependencies-js';\r\nimport * as Common from \"@microsoft/applicationinsights-common\";\r\n\"use strict\";\r\n;\r\n/**\r\n * Telemetry type classes, e.g. PageView, Exception, etc\r\n */\r\nexport var Telemetry = Common;\r\n/**\r\n * Application Insights API\r\n * @class Initialization\r\n * @implements {IApplicationInsights}\r\n */\r\nvar Initialization = /** @class */ (function () {\r\n function Initialization(snippet) {\r\n var _this = this;\r\n // initialize the queue and config in case they are undefined\r\n snippet.queue = snippet.queue || [];\r\n snippet.version = snippet.version || 2.0; // Default to new version\r\n var config = snippet.config || {};\r\n if (config.connectionString) {\r\n var cs = Common.ConnectionStringParser.parse(config.connectionString);\r\n var ingest = cs.ingestionendpoint;\r\n config.endpointUrl = ingest ? ingest + \"/v2/track\" : config.endpointUrl; // only add /v2/track when from connectionstring\r\n config.instrumentationKey = cs.instrumentationkey || config.instrumentationKey;\r\n }\r\n _this.appInsights = new ApplicationInsights();\r\n _this.properties = new PropertiesPlugin();\r\n _this.dependencies = new DependenciesPlugin();\r\n _this.core = new AppInsightsCore();\r\n _this.snippet = snippet;\r\n _this.config = config;\r\n _this.getSKUDefaults();\r\n }\r\n // Analytics Plugin\r\n /**\r\n * Log a user action or other occurrence.\r\n * @param {IEventTelemetry} event\r\n * @param {ICustomProperties} [customProperties]\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.trackEvent = function (event, customProperties) {\r\n this.appInsights.trackEvent(event, customProperties);\r\n };\r\n /**\r\n * Logs that a page, or similar container was displayed to the user.\r\n * @param {IPageViewTelemetry} pageView\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.trackPageView = function (pageView) {\r\n var inPv = pageView || {};\r\n this.appInsights.trackPageView(inPv);\r\n };\r\n /**\r\n * Log a bag of performance information via the customProperties field.\r\n * @param {IPageViewPerformanceTelemetry} pageViewPerformance\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.trackPageViewPerformance = function (pageViewPerformance) {\r\n var inPvp = pageViewPerformance || {};\r\n this.appInsights.trackPageViewPerformance(inPvp);\r\n };\r\n /**\r\n * Log an exception that you have caught.\r\n * @param {IExceptionTelemetry} exception\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.trackException = function (exception) {\r\n if (!exception.exception && exception.error) {\r\n exception.exception = exception.error;\r\n }\r\n this.appInsights.trackException(exception);\r\n };\r\n /**\r\n * Manually send uncaught exception telemetry. This method is automatically triggered\r\n * on a window.onerror event.\r\n * @param {IAutoExceptionTelemetry} exception\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype._onerror = function (exception) {\r\n this.appInsights._onerror(exception);\r\n };\r\n /**\r\n * Log a diagnostic scenario such entering or leaving a function.\r\n * @param {ITraceTelemetry} trace\r\n * @param {ICustomProperties} [customProperties]\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.trackTrace = function (trace, customProperties) {\r\n this.appInsights.trackTrace(trace, customProperties);\r\n };\r\n /**\r\n * Log a numeric value that is not associated with a specific event. Typically used\r\n * to send regular reports of performance indicators.\r\n *\r\n * To send a single measurement, just use the `name` and `average` fields\r\n * of {@link IMetricTelemetry}.\r\n *\r\n * If you take measurements frequently, you can reduce the telemetry bandwidth by\r\n * aggregating multiple measurements and sending the resulting average and modifying\r\n * the `sampleCount` field of {@link IMetricTelemetry}.\r\n * @param {IMetricTelemetry} metric input object argument. Only `name` and `average` are mandatory.\r\n * @param {ICustomProperties} [customProperties]\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.trackMetric = function (metric, customProperties) {\r\n this.appInsights.trackMetric(metric, customProperties);\r\n };\r\n /**\r\n * Starts the timer for tracking a page load time. Use this instead of `trackPageView` if you want to control when the page view timer starts and stops,\r\n * but don't want to calculate the duration yourself. This method doesn't send any telemetry. Call `stopTrackPage` to log the end of the page view\r\n * and send the event.\r\n * @param name A string that idenfities this item, unique within this HTML document. Defaults to the document title.\r\n */\r\n Initialization.prototype.startTrackPage = function (name) {\r\n this.appInsights.startTrackPage(name);\r\n };\r\n /**\r\n * Stops the timer that was started by calling `startTrackPage` and sends the pageview load time telemetry with the specified properties and measurements.\r\n * The duration of the page view will be the time between calling `startTrackPage` and `stopTrackPage`.\r\n * @param name The string you used as the name in startTrackPage. Defaults to the document title.\r\n * @param url String - a relative or absolute URL that identifies the page or other item. Defaults to the window location.\r\n * @param properties map[string, string] - additional data used to filter pages and metrics in the portal. Defaults to empty.\r\n * @param measurements map[string, number] - metrics associated with this page, displayed in Metrics Explorer on the portal. Defaults to empty.\r\n */\r\n Initialization.prototype.stopTrackPage = function (name, url, customProperties, measurements) {\r\n this.appInsights.stopTrackPage(name, url, customProperties, measurements);\r\n };\r\n Initialization.prototype.startTrackEvent = function (name) {\r\n this.appInsights.startTrackEvent(name);\r\n };\r\n /**\r\n * Log an extended event that you started timing with `startTrackEvent`.\r\n * @param name The string you used to identify this event in `startTrackEvent`.\r\n * @param properties map[string, string] - additional data used to filter events and metrics in the portal. Defaults to empty.\r\n * @param measurements map[string, number] - metrics associated with this event, displayed in Metrics Explorer on the portal. Defaults to empty.\r\n */\r\n Initialization.prototype.stopTrackEvent = function (name, properties, measurements) {\r\n this.appInsights.stopTrackEvent(name, properties, measurements); // Todo: Fix to pass measurements once type is updated\r\n };\r\n Initialization.prototype.addTelemetryInitializer = function (telemetryInitializer) {\r\n return this.appInsights.addTelemetryInitializer(telemetryInitializer);\r\n };\r\n // Properties Plugin\r\n /**\r\n * Set the authenticated user id and the account id. Used for identifying a specific signed-in user. Parameters must not contain whitespace or ,;=|\r\n *\r\n * The method will only set the `authenticatedUserId` and `accountId` in the current page view. To set them for the whole session, you should set `storeInCookie = true`\r\n * @param {string} authenticatedUserId\r\n * @param {string} [accountId]\r\n * @param {boolean} [storeInCookie=false]\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.setAuthenticatedUserContext = function (authenticatedUserId, accountId, storeInCookie) {\r\n if (storeInCookie === void 0) { storeInCookie = false; }\r\n this.properties.context.user.setAuthenticatedUserContext(authenticatedUserId, accountId, storeInCookie);\r\n };\r\n /**\r\n * Clears the authenticated user id and account id. The associated cookie is cleared, if present.\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.clearAuthenticatedUserContext = function () {\r\n this.properties.context.user.clearAuthenticatedUserContext();\r\n };\r\n // Dependencies Plugin\r\n /**\r\n * Log a dependency call (e.g. ajax)\r\n * @param {IDependencyTelemetry} dependency\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.trackDependencyData = function (dependency) {\r\n this.dependencies.trackDependencyData(dependency);\r\n };\r\n // Misc\r\n /**\r\n * Manually trigger an immediate send of all telemetry still in the buffer.\r\n * @param {boolean} [async=true]\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.flush = function (async) {\r\n if (async === void 0) { async = true; }\r\n CoreUtils.arrForEach(this.core.getTransmissionControls(), function (channels) {\r\n CoreUtils.arrForEach(channels, function (channel) {\r\n channel.flush(async);\r\n });\r\n });\r\n };\r\n /**\r\n * Manually trigger an immediate send of all telemetry still in the buffer using beacon Sender.\r\n * Fall back to xhr sender if beacon is not supported.\r\n * @param {boolean} [async=true]\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.onunloadFlush = function (async) {\r\n if (async === void 0) { async = true; }\r\n CoreUtils.arrForEach(this.core.getTransmissionControls(), function (channels) {\r\n CoreUtils.arrForEach(channels, function (channel) {\r\n if (channel.onunloadFlush) {\r\n channel.onunloadFlush();\r\n }\r\n else {\r\n channel.flush(async);\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Initialize this instance of ApplicationInsights\r\n * @returns {IApplicationInsights}\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.loadAppInsights = function (legacyMode) {\r\n if (legacyMode === void 0) { legacyMode = false; }\r\n var _this = this;\r\n function _updateSnippetProperties(snippet) {\r\n if (snippet) {\r\n // apply updated properties to the global instance (snippet)\r\n for (var field in _this) {\r\n if (CoreUtils.isString(field) &&\r\n !CoreUtils.isFunction(_this[field]) &&\r\n field.substring(0, 1) !== \"_\") {\r\n snippet[field] = _this[field];\r\n }\r\n }\r\n }\r\n }\r\n // dont allow additional channels/other extensions for legacy mode; legacy mode is only to allow users to switch with no code changes!\r\n if (legacyMode && _this.config.extensions && _this.config.extensions.length > 0) {\r\n throw new Error(\"Extensions not allowed in legacy mode\");\r\n }\r\n var extensions = [];\r\n var appInsightsChannel = new Sender();\r\n extensions.push(appInsightsChannel);\r\n extensions.push(_this.properties);\r\n extensions.push(_this.dependencies);\r\n extensions.push(_this.appInsights);\r\n // initialize core\r\n _this.core.initialize(_this.config, extensions);\r\n _this.context = _this.properties.context;\r\n _updateSnippetProperties(_this.snippet);\r\n // Empty queue of all api calls logged prior to sdk download\r\n _this.emptyQueue();\r\n _this.pollInternalLogs();\r\n _this.addHousekeepingBeforeUnload(this);\r\n return _this;\r\n };\r\n /**\r\n * Overwrite the lazy loaded fields of global window snippet to contain the\r\n * actual initialized API methods\r\n * @param {Snippet} snippet\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.updateSnippetDefinitions = function (snippet) {\r\n // apply full appInsights to the global instance\r\n // Note: This must be called before loadAppInsights is called\r\n for (var field in this) {\r\n if (CoreUtils.isString(field)) {\r\n snippet[field] = this[field];\r\n }\r\n }\r\n };\r\n /**\r\n * Call any functions that were queued before the main script was loaded\r\n * @memberof Initialization\r\n */\r\n Initialization.prototype.emptyQueue = function () {\r\n var _this = this;\r\n // call functions that were queued before the main script was loaded\r\n try {\r\n if (Common.Util.isArray(_this.snippet.queue)) {\r\n // note: do not check length in the for-loop conditional in case something goes wrong and the stub methods are not overridden.\r\n var length_1 = _this.snippet.queue.length;\r\n for (var i = 0; i < length_1; i++) {\r\n var call = _this.snippet.queue[i];\r\n call();\r\n }\r\n _this.snippet.queue = undefined;\r\n delete _this.snippet.queue;\r\n }\r\n }\r\n catch (exception) {\r\n var properties = {};\r\n if (exception && CoreUtils.isFunction(exception.toString)) {\r\n properties.exception = exception.toString();\r\n }\r\n // need from core\r\n // Microsoft.ApplicationInsights._InternalLogging.throwInternal(\r\n // LoggingSeverity.WARNING,\r\n // _InternalMessageId.FailedToSendQueuedTelemetry,\r\n // \"Failed to send queued telemetry\",\r\n // properties);\r\n }\r\n };\r\n Initialization.prototype.pollInternalLogs = function () {\r\n this.core.pollInternalLogs();\r\n };\r\n Initialization.prototype.addHousekeepingBeforeUnload = function (appInsightsInstance) {\r\n // Add callback to push events when the user navigates away\r\n if (hasWindow() || hasDocument()) {\r\n var performHousekeeping = function () {\r\n // Adds the ability to flush all data before the page unloads.\r\n // Note: This approach tries to push a sync request with all the pending events onbeforeunload.\r\n // Firefox does not respect this.Other browsers DO push out the call with < 100% hit rate.\r\n // Telemetry here will help us analyze how effective this approach is.\r\n // Another approach would be to make this call sync with a acceptable timeout to reduce the\r\n // impact on user experience.\r\n // appInsightsInstance.context._sender.triggerSend();\r\n appInsightsInstance.onunloadFlush(false);\r\n // Back up the current session to local storage\r\n // This lets us close expired sessions after the cookies themselves expire\r\n var ext = appInsightsInstance.appInsights.core['_extensions'][Common.PropertiesPluginIdentifier];\r\n if (ext && ext.context && ext.context._sessionManager) {\r\n ext.context._sessionManager.backup();\r\n }\r\n };\r\n if (!appInsightsInstance.appInsights.config.disableFlushOnBeforeUnload) {\r\n // Hook the unload event for the document, window and body to ensure that the client events are flushed to the server\r\n // As just hooking the window does not always fire (on chrome) for page navigations.\r\n var added = CoreUtils.addEventHandler('beforeunload', performHousekeeping);\r\n added = CoreUtils.addEventHandler('pagehide', performHousekeeping) || added;\r\n if (!added) {\r\n appInsightsInstance.appInsights.core.logger.throwInternal(LoggingSeverity.CRITICAL, _InternalMessageId.FailedToAddHandlerForOnBeforeUnload, 'Could not add handler for beforeunload and pagehide');\r\n }\r\n }\r\n // We also need to hook the pagehide event as not all versions of Safari support load/unload events.\r\n if (!appInsightsInstance.appInsights.config.disableFlushOnUnload) {\r\n // Not adding any telemetry as pagehide as it's not supported on all browsers\r\n CoreUtils.addEventHandler('pagehide', performHousekeeping);\r\n }\r\n }\r\n };\r\n Initialization.prototype.getSKUDefaults = function () {\r\n var _this = this;\r\n _this.config.diagnosticLogInterval =\r\n _this.config.diagnosticLogInterval && _this.config.diagnosticLogInterval > 0 ? _this.config.diagnosticLogInterval : 10000;\r\n };\r\n return Initialization;\r\n}());\r\nexport { Initialization };\r\n//# sourceMappingURL=Initialization.js.map","import React, { Component } from 'react';\r\nimport TableQBSummaryTabulator from './components/pageQB/TableQBSummaryTabulator';\r\nimport TableQBAdvancedPassingTabulator from './components/pageQB/TableQBAdvancedPassingTabulator';\r\nimport TableQBPassingAccuracyTabulator from './components/pageQB/TableQBPassingAccuracyTabulator';\r\nimport TableQBAdvancedRushingTabulator from './components/pageQB/TableQBAdvancedRushingTabulator';\r\nimport TableRBWRSummaryTabulator from './components/pageRBWR/TableRBWRSummaryTabulator';\r\nimport TableRBWRAdvancedRushingTabulator from './components/pageRBWR/TableRBWRAdvancedRushingTabulator';\r\nimport TableRBWRAdvancedReceivingTabulator from './components/pageRBWR/TableRBWRAdvancedReceivingTabulator';\r\nimport TableOLSummaryTabulator from './components/pageOL/TableOLSummaryTabulator';\r\nimport TableOLPassBlockingTabulator from './components/pageOL/TableOLPassBlockingTabulator';\r\nimport TableOLRushBlockingTabulator from './components/pageOL/TableOLRushBlockingTabulator';\r\nimport TableKPPuntingTabulator from './components/pageKP/TableKPPuntingTabulator';\r\nimport TableKPAdvancedPuntingTabulator from './components/pageKP/TableKPAdvancedPuntingTabulator';\r\nimport TableKPKickingTabulator from './components/pageKP/TableKPKickingTabulator';\r\nimport TableDefenseSummaryTabulator from './components/pageDefense/TableDefenseSummaryTabulator';\r\nimport TableDefenseBuildData from './components/pageDefense/TableDefenseBuildData';\r\nimport TableDefenseAdvancedDefenseTabulator from './components/pageDefense/TableDefenseAdvancedDefenseTabulator';\r\nimport TableDefensePassRushTabulator from './components/pageDefense/TableDefensePassRushTabulator';\r\nimport PlayerBio from './components/common/PlayerBio';\r\nimport DropDown from './components/common/DropDown';\r\nimport {fetch as fetchPolyfill} from 'whatwg-fetch';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nlet InstrumentationKey = \"c6c148de-7a33-4f4e-81d1-f0522c53f12f\";\r\nlet appInsights = new ApplicationInsights({config: {\r\n instrumentationKey: InstrumentationKey,\r\n maxBatchInterval: 0\r\n}});\r\nappInsights.loadAppInsights();\r\n\r\n//////////////////////////////////////////////////////\r\n// PolyFill stuff //\r\n//////////////////////////////////////////////////////\r\nif (!window.fetch) {\r\n window.fetch = fetchPolyfill;\r\n}\r\n\r\nif (!Array.prototype.find) {\r\n // eslint-disable-next-line\r\n Object.defineProperty(Array.prototype, 'find', {\r\n value: function(predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n \r\n var o = Object(this);\r\n \r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n \r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n \r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n \r\n // 5. Let k be 0.\r\n var k = 0;\r\n \r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n \r\n // 7. Return undefined.\r\n return undefined;\r\n }\r\n });\r\n }\r\n//////////////////////////////////////////////////////\r\n// End PolyFill stuff //\r\n//////////////////////////////////////////////////////\r\n\r\nclass Players extends Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n searchUserInput: '', // user input from autocomplete. triggers selection list updates\r\n selectedPlayerID: '' // set to true when API calls complete for a given player. triggers page update\r\n }\r\n this.version = '2022-09-13a';\r\n this.alldependenciescomplete = false;\r\n this.loadingmessage = 'Loading...';\r\n this.passingstats =[]; // passing data retrieved from data API \r\n this.rushingstats=[]; // rushing data retrieved from data API\r\n this.accuracystats=[]; // accuracy data retrieved from data API\r\n this.receivingstats=[]; // receiving data retrieved from data API\r\n this.passdefensestats = []; // passdefense data retrieved from data API\r\n this.havepassdefense = false;\r\n this.passrushstats = []; // passrush data retrieved from data API\r\n this.havepassrush = false;\r\n this.rushdefensestats = []; // rushdefense data retrieved from data API\r\n this.haverushdefense = false;\r\n this.kickingstats=[]; // kicking data retrieved from data API\r\n this.kickretstats=[]; // kickret data retrieved from data API\r\n this.puntingstats=[]; // punting data retrieved from data API\r\n this.puntretstats=[]; // puntret data retrieved from data API\r\n this.blockingstats=[]; // blocking data retrieved from data API\r\n this.globalstats=[]; // global stats regardless of position - currently not in use\r\n this.defenseData=[]; // array to consolidate defense data - unique to defense due to condiional layout\r\n this.token = ''; // token value retrieved from authorization API and used for data API\r\n this.playerSelectionList = []; // all NFL players to be listed in the Autocomplete dropdown\r\n this.asyncAPIcount = 0; // number of API calls completed for a given player position\r\n this.asyncAPIcallstocomplete = 0; // number of API call to be completed for a given player position\r\n this.playername = '(No player selected)'; // player name to be displayed on page\r\n this.playerposition = ''; // indicates which stats to be displayed. also displayed on page. \r\n this.playerid = 0; // populated on autocomplete choice and used to retrieve data\r\n this.usererrormessage = ''; // error message to be displayed on the page in place of stats\r\n this.pagelayout = ''; // indicate which type of page to be rendered\r\n this.scrollY = 0;\r\n\r\n this.reScroll = this.reScroll.bind(this);\r\n\r\n if (this.props.match.params.id && !isNaN(this.props.match.params.id)){\r\n this.playerid = this.props.match.params.id; //id of player in route\r\n }\r\n else{\r\n this.playerid = 5048;\r\n }\r\n }\r\n\r\n // called by React when the page initially renders. It invokes a chain\r\n // of three API calls. Note that the page has already rendered at this\r\n // point so the API calls occur in the background after the user sees\r\n // the page. It should complete before the user begins typing in the\r\n // input box. Any delay would be experienced by the user as a delay in\r\n // dropdown being displayed as the user types into the player selection\r\n // input box. If this chain fails the dropdown will not work and the\r\n // page must be reloaded/refreshed by the user so that the intial API\r\n // calls are reinvoked.\r\n //\r\n // possible improvement: display error message and action on the page upon API failures\r\n //\r\n componentDidMount() {\r\n window.addEventListener('scroll', this.handleScroll.bind(this));\r\n console.log('Players - Winterhold');\r\n this.getSecurityToken();\r\n //this.loadNFLPlayers();\r\n }\r\n\r\n componentWillUnmount(){\r\n window.removeEventListener('scroll', this.handleScroll.bind(this));\r\n }\r\n\r\n // There are three API calls that must complete in sequence when this page loads:\r\n //\r\n // 1) obtain token from security API\r\n // 2) use token to access the data API\r\n // 3) load NFL players to an array for user selection\r\n //\r\n // API chaining is accomplished by each API routine invoking the next on successfull completion:\r\n // 1) getSecurityToken --> 2) accessNFLdata --> 3) loadNFLplayers\r\n //\r\n getSecurityToken = () => {\r\n this.executeHTTPRequestPost(\r\n 'https://auth.sportsinfosolutions.com/connect/token',\r\n (response) => {\r\n this.token = response.access_token;\r\n this.getGlobalStats();\r\n \r\n //this.accessNFLdata();\r\n },\r\n (error) => {\r\n console.log(\"getSecurityToken\",error);\r\n }\r\n )\r\n }\r\n \r\n // Gain access to NFL data API using the token obtained from the secutiry API\r\n getAllPlayers = (event) => {\r\n const reqUrl = 'https://api.sportsinfosolutions.com/api/v1/nfl/players/allplayerswithteamnew';\r\n this.executeHTTPRequest(\r\n reqUrl,\r\n 'get',\r\n (response) => {\r\n this.playerSelectionList = response;\r\n //this.displayFeaturedPlayer(); // generate report with featured player\r\n this.asyncAPImonitor(this.playerSelectionList);\r\n },\r\n (error) => {\r\n console.log(\"getAllPlayers\",error);\r\n }\r\n )\r\n }\r\n\r\n displayFeaturedPlayer = () => {\r\n // this.playerid = 5048;\r\n // this.getGlobalStats()\r\n if (this.playerid !== 0){\r\n var player = this.playerSelectionList.filter((p) =>{\r\n if (p.playerId.toString() === this.playerid){\r\n return p;\r\n }\r\n return null;\r\n });\r\n this.handlePlayerSelected(' ',{playerId: player[0].playerId, positionCategory: player[0].positionCategory, firstName: player[0].firstName, lastName: player[0].lastName})\r\n }\r\n else{\r\n this.handlePlayerSelected(' ',{playerId: 5048, positionCategory: \"QB\", firstName: \"Patrick\", lastName: \"Mahomes\"}) // load default player\r\n }\r\n }\r\n\r\n // Load NFL players from a json file on sisdatahub\r\n loadNFLPlayers = () => {\r\n fetch('http://sismetrics.com/players.json').then(function(response) {\r\n\t return response.json();\r\n }).then(json => {\r\n this.playerSelectionList = json;\r\n }).catch(err => {\r\n console.log('loadNFLPlayers - problem fetching player list:',err.message);\r\n });\r\n }\r\n\r\n // get passing stats from NFL data API\r\n getPassingStats = (event) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passing?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passingstats = response.data;\r\n this.asyncAPImonitor(this.passingstats);\r\n },\r\n (error) => {\r\n console.log(\"getPassingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get rushing stats from NFL API\r\n getRushingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/rushing?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.rushingstats = response.data;\r\n this.asyncAPImonitor(this.rushingstats);\r\n },\r\n (error) => {\r\n console.log(\"getRushingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get accuracy stats from NFL API\r\n getAccuracyStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/qb_dd?playerId=${this.playerid}&startSeason=2015&endSeason=${(new Date()).getFullYear()}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.accuracystats = response.data;\r\n this.asyncAPImonitor(this.accuracystats);\r\n },\r\n (error) => {\r\n console.log(\"getAccuracyStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get receiving stats from NFL API\r\n getReceivingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/receiving?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.receivingstats = response.data;\r\n this.asyncAPImonitor(this.receivingstats);\r\n },\r\n (error) => {\r\n console.log(\"getReceivingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get blocking stats from NFL API\r\n getBlockingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/blocking?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.blockingstats = response.data;\r\n this.asyncAPImonitor(this.blockingstats);\r\n },\r\n (error) => {\r\n console.log(\"getBlockingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get puntret stats from NFL API\r\n getPuntRetStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/puntret?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.puntretstats = response.data;\r\n this.asyncAPImonitor(this.puntretstats);\r\n },\r\n (error) => {\r\n console.log(\"getPuntRetStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get kickret stats from NFL API\r\n getKickRetStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/kickret?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.kickretstats = response.data;\r\n this.asyncAPImonitor(this.kickretstats);\r\n },\r\n (error) => {\r\n console.log(\"getKickRetStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get punting stats from NFL API\r\n getPuntingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/punting?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.puntingstats = response.data;\r\n this.asyncAPImonitor(this.puntingstats);\r\n },\r\n (error) => {\r\n console.log(\"getPuntingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get kicking stats from NFL API\r\n getKickingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/kicking?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.kickingstats = response.data;\r\n this.asyncAPImonitor(this.kickingstats);\r\n },\r\n (error) => {\r\n console.log(\"getKickingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get passdefense stats from NFL API\r\n getPassDefenseStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passdefense?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passdefensestats = response.data;\r\n this.asyncAPImonitor(this.passdefensestats);\r\n },\r\n (error) => {\r\n console.log(\"getPassDefenseStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get passrush stats from NFL API\r\n getPassRushStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passrush?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passrushstats = response.data;\r\n// let i = 0;\r\n// for (i = 0; i < this.passrushstats.length; i++) {\r\n// if (this.passrushstats[i].season === 2015) {\r\n// this.passrushstats.splice(i, 1);\r\n// i--;\r\n// }\r\n// }\r\n this.asyncAPImonitor(this.passrushstats);\r\n },\r\n (error) => {\r\n console.log(\"getPassRushStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get rushdefense stats from NFL API\r\n getRushDefenseStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/rushdefense?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.rushdefensestats = response.data;\r\n this.asyncAPImonitor(this.rushdefensestats);\r\n },\r\n (error) => {\r\n console.log(\"getRushDefenseStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get defense stats from NFL API\r\n getDefenseStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/defense?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.defensestats = response.data;\r\n this.asyncAPImonitor(this.defensestats);\r\n },\r\n (error) => {\r\n console.log(\"getDefenseStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get global stats and player bio info\r\n getGlobalStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/players/globalinfo?PlayerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.globalstats = response.data;\r\n this.handlePlayerSelected();\r\n //this.asyncAPImonitor(this.globalstats);\r\n // this.asyncAPImonitor(this.defensestats);\r\n },\r\n (error) => {\r\n console.log(\"getGlobalStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // general purpose fetch method called by each API related method\r\n executeHTTPRequest = (url, method, callback, failback) => {\r\n fetch(\r\n url, {\r\n method: method,\r\n headers: {\r\n Accept: 'application/json, text/plain, */*',\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${this.token}`\r\n },\r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if(response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n executeHTTPRequestPost = (url, callback, failback) => {\r\n var details = {'client_id': 'FootballApp@sportsinfosolutions.com',\r\n 'client_secret': 'xPc14+wU2zHtydg12AgglRCkL+ALNlX/miH2JJHp2/k=',\r\n 'grant_type': 'client_credentials',\r\n 'scope': 'sisapi'};\r\n\r\n var formBody = [];\r\n for (var property in details){\r\n var encodedKey = encodeURIComponent(property);\r\n var encodedValue = encodeURIComponent(details[property]);\r\n formBody.push(encodedKey + \"=\" + encodedValue);\r\n }\r\n formBody = formBody.join(\"&\");\r\n\r\n fetch(\r\n url, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},\r\n body: formBody, \r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if (response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n // Replacement for Promise.all to ensure that parallel async\r\n // dependencies complete before triggering a render by updating\r\n // state.\r\n //\r\n // Prior to launching parallel async tasks, set dependencycount\r\n // to zero and dependenciestocomplete to the number of async tasks\r\n // to be complete. Each task must call this function upon successful\r\n // completion. When dependencycount is equal to dependenciestocomplete,\r\n // state will be updated and dependencycount and dependenciestocomplete\r\n // are reset to zero.\r\n //\r\n asyncAPImonitor = (d) => {\r\n this.asyncAPIcount += 1;\r\n this.asyncAPIrows += d.length;\r\n if (this.asyncAPIcount === this.asyncAPIcallstocomplete) {\r\n // this.GetPlayerBioInfo()\r\n this.alldependenciescomplete = true;\r\n this.asyncAPIcount = 0;\r\n this.asyncAPIcallstocomplete = 0;\r\n this.usererrormessage = '';\r\n this.loadingmessage = '';\r\n this.setState({\r\n selectedPlayerId: this.playerid\r\n });\r\n } \r\n }\r\n\r\n // this method is invoked when the user selects a player\r\n // from the autocomplete list. it uses the player position\r\n // to set the number of dependencies to be monitored and\r\n // launch the appropriate async NFL API calls.\r\n //\r\n handlePlayerSelected = (value) => {\r\n //this.playerid = this.playerId; // used in the NFL API calls\r\n let globalStats = this.globalstats[this.globalstats.length - 1];\r\n this.playername = globalStats.fullName; //selection.firstName+\" \"+selection.lastName; // displayed on the page\r\n this.playerposition = globalStats.positionName; // selection.positionCategory; // displayed on page and used in the switch below\r\n this.setCookie();\r\n this.usererrormessage = '';\r\n this.alldependenciescomplete = false; // reset the async API completion indicator to false\r\n this.loadingmessage = '\"Loading...'; // displayed on initial page load and whenever react triggers a refresh while player data is being retrieved\r\n this.asyncAPIcount = 0; // reset the number of async API calls completed\r\n this.asyncAPIrows = 0; // reset the number of async API rows fetched\r\n this.forceUpdate();\r\n //this.asyncAPIcallstocomplete = 1; // reset the number of async API calls completed\r\n //this.getGlobalStats(); // retrieve player bio info\r\n switch (this.playerposition) { // evalute the value of player position\r\n case 'QB': // when quarterback\r\n this.pagelayout = this.playerposition; // indicate the QB page format\r\n this.asyncAPIcallstocomplete += 4; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getPassingStats(); //***************************************\r\n this.getRushingStats(); //** lanch async API calls for QB data **\r\n this.getAccuracyStats(); //***************************************\r\n break;\r\n case 'DE': // when defensive end or (Defense)\r\n case 'DT': // when defensive tackle or (Defense)\r\n case 'LB': // when line backer or (Defense)\r\n this.pagelayout = 'Defense'; // indicate the Defenst page format for positions DE, DT, LB, CB, S\r\n this.asyncAPIcallstocomplete += 5; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getDefenseStats();\r\n this.getPassDefenseStats(); //*****************************************************\r\n this.getPassRushStats(); //** launch async API calls for DE, DT, LB, CB and S **\r\n this.getRushDefenseStats(); //*****************************************************\r\n break;\r\n case 'CB': // when cornerback or (Defense)\r\n case 'S': // when safety (Defense)\r\n this.pagelayout = 'Defense'; // indicate the Defenst page format for positions DE, DT, LB, CB, S\r\n this.asyncAPIcallstocomplete += 7; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getDefenseStats();\r\n this.getPassDefenseStats(); //*****************************************************\r\n this.getPassRushStats(); //** launch async API calls for DE, DT, LB, CB and S **\r\n this.getRushDefenseStats(); //*****************************************************\r\n this.getPuntRetStats(); //******************************************\r\n this.getKickRetStats(); //******************************************\r\n break;\r\n case 'TE': // when tight end or (Offensive Line)\r\n this.pagelayout = 'TE'; // indicate the OL page format for positions TE, T, G, or C\r\n this.asyncAPIcallstocomplete += 6; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getBlockingStats(); //***********************************************\r\n this.getRushingStats(); //******************************************\r\n this.getReceivingStats(); //** launch async API calls for WR and RB **\r\n this.getPuntRetStats(); //******************************************\r\n this.getKickRetStats(); //******************************************\r\n break;\r\n case 'RB': // when running back or\r\n case 'FB': // when running back or\r\n case 'WR': // when wide receiver\r\n this.pagelayout = this.playerposition; // indicate the WR or RB page format (same data but different page format)\r\n this.asyncAPIcallstocomplete += 6; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getBlockingStats(); //***********************************************\r\n this.getRushingStats(); //******************************************\r\n this.getReceivingStats(); //** launch async API calls for WR and RB **\r\n this.getPuntRetStats(); //******************************************\r\n this.getKickRetStats(); //******************************************\r\n this.blockingstats = []; // RB, WR and TE use the same summary but only TE needs blocking stats\r\n break;\r\n case 'T': // when tackle or (Offensive Line)\r\n case 'G': // when guard or (Offensive Line)\r\n case 'C': // when center (Offensive Line)\r\n this.pagelayout = 'OL'; // indicate the OL page format for positions TE, T, G, or C\r\n this.asyncAPIcallstocomplete += 3; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getBlockingStats(); //***********************************************\r\n this.getRushingStats(); //** launch async API calls for TE, T, G and C **\r\n break;\r\n case 'K': // when kicker or (Kicking)\r\n case 'P': // when punter (Kicking)\r\n this.pagelayout = this.playerposition; // indicate the K or PB page format (same data but different page format)\r\n this.asyncAPIcallstocomplete += 5; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getKickingStats(); //****************************************\r\n this.getPuntingStats(); //** launch async API calls for K and P **\r\n this.getPassingStats(); //****************************************\r\n this.getRushingStats(); //****************************************\r\n break;\r\n default: // when anything else\r\n// this.usererrormessage = '(' + this.playerposition + ' not supported at this time)';\r\n console.log(\"handlePlayerSelected - invalid position:\", this.playerposition);\r\n }\r\n }\r\n\r\n setCookie(){\r\n document.cookie = 'playerId=' + this.playerid + '; path=/;';\r\n document.cookie = 'playerPos=' + this.playerposition + '; path=/;';\r\n }\r\n\r\n handleScroll(){\r\n this.scrollY = window.scrollY;\r\n }\r\n \r\n reScroll(){\r\n window.scrollTo(0, this.scrollY);\r\n }\r\n\r\n // What is rendered out to the page\r\n render() {\r\n // the following is the filtering function used by Autocomplete\r\n // const filterSelectionList = function filterSelectionList(state, value) {\r\n // return(state.fullInfo.toLowerCase().indexOf(value.toLowerCase()) !== -1);\r\n // }\r\n // for non defense positions, only the summary needs data consolidation so it can be done\r\n // within the summary table module. However, for defense, consolidation is needed for all tables\r\n // so the data is pre-consolidated then reused rather than re-consolidate it for each table.\r\n if (this.pagelayout === 'Defense' && this.alldependenciescomplete) {\r\n this.defenseData = [];\r\n this.defenseData = TableDefenseBuildData(this.defensestats, this.passdefensestats, this.passrushstats, this.rushdefensestats, this.kickretstats, this.puntretstats);\r\n this.havepassdefense = false;\r\n this.haverushdefense = false;\r\n this.havepassrush = false;\r\n this.defenseData.forEach(season => {\r\n if (season.havepassdefense) { this.havepassdefense = true; }\r\n if (season.haverushdefense) { this.haverushdefense = true; }\r\n if (season.havepassrush) { this.havepassrush = true; }\r\n })\r\n }\r\n let playerLink = '/players/' + this.playerid;\r\n let playerGameLogLink = '/playergamelogs/' + this.playerid;\r\n let leaderboardsLink = '/leaderboards/' + this.playerposition;\r\n let glossaryLink = '/glossary/';\r\n return (\r\n
    \r\n
    \r\n \r\n\r\n
    \r\n

    \r\n {\r\n this.alldependenciescomplete &&\r\n \r\n }\r\n {\r\n !this.alldependenciescomplete &&\r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'QB' && this.alldependenciescomplete && this.asyncAPIrows !== 0 && this.asyncAPIrows !== this.accuracystats.length &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'QB' && this.alldependenciescomplete && this.passingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'QB' && this.alldependenciescomplete && this.accuracystats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'QB' && this.alldependenciescomplete && this.rushingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'Defense' && this.alldependenciescomplete && this.defenseData.length !== 0 && (this.havepassdefense || this.haverushdefense || this.havepassrush) &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'Defense' && this.alldependenciescomplete && this.defenseData.length !== 0 && (this.havepassdefense || this.haverushdefense || this.havepassrush) &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'Defense' && this.alldependenciescomplete && this.defenseData.length !== 0 && this.havepassrush &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'TE' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'TE' && this.alldependenciescomplete && this.receivingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'TE' && this.alldependenciescomplete && this.blockingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'TE' && this.alldependenciescomplete && this.blockingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'TE' && this.alldependenciescomplete && this.rushingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'WR' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'WR' && this.alldependenciescomplete && this.receivingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'WR' && this.alldependenciescomplete && this.rushingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'RB' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'RB' && this.alldependenciescomplete && this.rushingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'RB' && this.alldependenciescomplete && this.receivingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'FB' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'FB' && this.alldependenciescomplete && this.rushingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'FB' && this.alldependenciescomplete && this.receivingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'OL' && this.alldependenciescomplete && this.blockingstats.length !== 0 &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'K' && this.alldependenciescomplete && this.kickingstats.length !== 0 && this.globalstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'K' && this.alldependenciescomplete && this.puntingstats.length !== 0 && this.globalstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'K' && this.alldependenciescomplete && this.asyncAPIrows !== 0 && (this.puntingstats.length !== 0 || this.passingstats.length !== 0 || this.rushingstats.length !== 0) &&\r\n \r\n \r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'P' && this.alldependenciescomplete && this.puntingstats.length !== 0 && this.globalstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'P' && this.alldependenciescomplete && this.asyncAPIrows !== 0 && (this.puntingstats.length !== 0 || this.passingstats.length !== 0 || this.rushingstats.length !== 0) &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'P' && this.alldependenciescomplete && this.kickingstats.length !== 0 && this.globalstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n\r\n
    \r\n
    \r\n
    \r\n

    v. {this.version}

    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default Players;","import React from 'react';\r\nimport { CalcPlayerRating, NullSum, NullBypassSum, NullMax, NullDiv, Tst2015, DispFunc, NullSub, GameResult, GameDayFormat } from '../common/CommonFunctions';\r\nimport { qbGameSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\n\r\nclass GameLogQBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.passingstats = this.props.passingstats;\r\n this.rushingstats = this.props.rushingstats;\r\n this.data = [];\r\n let gameInfoCols = null;\r\n this.colNum = 0;\r\n this.maxPlayerSeason = ''\r\n\r\n // Set game information columns\r\n gameInfoCols = [\r\n {\r\n title: \"Date\", field: \"gameSeasonDateSSSSYYYYMMDD\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return (cell.getValue().substr(9, 1) === 'T' ? 'Total' : parseInt(cell.getValue().substr(9, 2)) + '/' + parseInt(cell.getValue().substr(12, 2)));\r\n },\r\n width: `${qbGameSummary[this.colNum++]}`\r\n },\r\n { \r\n title: \"Wk\", field: \"gameWeek\", cssClass: \"single-row-header small-column-center\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n// formatter: function (cell, formatterParams, onRendered) {\r\n// return cell = 99 ? '' : cell;\r\n// }\r\n },\r\n { \r\n title: \"Teams\", field: \"matchup\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`\r\n }, \r\n {\r\n title: \"Score\", field: \"gameResult\", cssClass: \"single-row-header break textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"GS\", field: \"gamesStarted\", cssClass: \"single-row-header break small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`\r\n } \r\n ];\r\n\r\n // Set Remaining Columns\r\n this.cols = [\r\n { title: \"\",\r\n columns: gameInfoCols\r\n },\r\n {\r\n title: \"Passing\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"passAttempts\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Cmp\", field: \"passCompletions\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"passCompPct\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Yds\", field: \"passYards\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Y/A\", field: \"passYdsPerAttempt\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n // { // removed as requested by Matt during initial gauntlet\r\n // title: \"Y/G\", field: \"passYdsPerGame\", cssClass: \"single-row-header break\",\r\n // titleFormatter: \"html\", headerSort: false,\r\n // width: `${qbGameSummary[this.colNum++]}`,\r\n // formatter: function(cell, formatterParams, onRendered){\r\n // return DispFunc(cell, formatterParams, onRendered, 1, true, false);\r\n // }\r\n // },\r\n {\r\n title: \"Lg\", field: \"passLong\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"passTD\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int\", field: \"passInt\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Rushing\",\r\n columns:[\r\n { \r\n title: \"Att\", field: \"rushAttempts\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Yds\", field: \"rushYds\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n { \r\n title: \"Avg\", field: \"rushYdsPerAttempt\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"Lg\", field: \"rushLong\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"TD\", field: \"rushTD\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Fumbles\",\r\n columns:[\r\n { \r\n title: \"Fum\", field: \"sumFumbles\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Lost\", field: \"sumFumblesLost\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"\",\r\n columns:[\r\n { \r\n title: \"QB Rating\", field: \"passQBRating\", cssClass: \"single-row-header\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n { \r\n title: \"IQR\", field: \"sumIQR\", cssClass: \"single-row-header break\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n { \r\n title: \"Tot Pts
    Earned\", field: \"sumPointsEarned\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${qbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n // no passing or rushing data\r\n if (this.passingstats.length === 0 && this.rushingstats.length === 0) {\r\n return('');\r\n }\r\n // declare and initialize detail data fields\r\n // these fields will be used to create objects for each game\r\n let passingstats = this.passingstats;\r\n let rushingstats = this.rushingstats;\r\n let sortKey = 0;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let oppTeam = '';\r\n let gameWeek = 0;\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gamesStarted = 0;\r\n let passAttempts = 0;\r\n let passCompletions = 0;\r\n let passDrops = 0;\r\n let passCompPct = 0;\r\n let passYards = 0;\r\n let passDropYards = 0;\r\n let passYdsPerAttempt = 0;\r\n let passYdsPerGame = 0;\r\n let passLong = 0;\r\n let passTD = 0;\r\n let passThrowAways = 0;\r\n let passSpikes = 0;\r\n let passBatted = 0;\r\n let passMiscommunications = 0;\r\n let passAccurateCompletions = 0;\r\n let passDroppedTD = 0;\r\n let passInt = 0;\r\n let passDroppedInt = 0;\r\n let passQBRating = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumIQR = 0;\r\n let sumPointsEarned = 0;\r\n // define array to hold detail data objects for each game\r\n var rowdata = [];\r\n var i = 0;\r\n // create rowdata[] object for each row in passingstats data\r\n if (passingstats.length !==0) {\r\n for (i = 0; i < passingstats.length; i++) {\r\n sortKey = (9999 - passingstats[i].season) * 1000000 + passingstats[i].season * 100 + passingstats[i].week; //XXXXYYYYWW\r\n season = passingstats[i].season;\r\n playerName = passingstats[i].playerName;\r\n playerId = passingstats[i].playerId;\r\n positionName = passingstats[i].positionName;\r\n team = passingstats[i].teamName;\r\n matchup = passingstats[i].teamName.trim() + ' ' + passingstats[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = passingstats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = passingstats[i].season.toString() + passingstats[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(passingstats[i].teamScore, passingstats[i].oppTeamScore);\r\n gameWeek = passingstats[i].week;\r\n gamesStarted = passingstats[i].starts;\r\n oppTeam = passingstats[i].oppTeamName;\r\n passAttempts = passingstats[i].attempts;\r\n passCompletions = passingstats[i].comp;\r\n passDrops = passingstats[i].drops;\r\n passCompPct = passingstats[i].compPerc;\r\n passYards = passingstats[i].yards;\r\n passDropYards = passingstats[i].dropYards;\r\n passYdsPerAttempt = passingstats[i].yardsPerAtt;\r\n passYdsPerGame = passingstats[i].yards;\r\n passLong = passingstats[i].passLong;\r\n passTD = passingstats[i].td;\r\n passThrowAways = passingstats[i].throwAways;\r\n passSpikes = passingstats[i].spikes;\r\n passBatted = passingstats[i].passBatted;\r\n passMiscommunications = passingstats[i].miscommunications;\r\n passAccurateCompletions = passingstats[i].accurateCompletions;\r\n passDroppedTD = passingstats[i].droppedTD;\r\n passInt = passingstats[i].int;\r\n passDroppedInt = passingstats[i].droppedInterceptions;\r\n passQBRating = passingstats[i].qbRating;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n sumFumbles = passingstats[i].fumbles;\r\n sumFumblesLost = passingstats[i].fumblesLost;\r\n sumIQR = passingstats[i].iqr\r\n sumPointsEarned = Tst2015(passingstats[i].season,passingstats[i].eps);\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n passAttempts,\r\n passCompletions,\r\n passDrops,\r\n passCompPct,\r\n passYards,\r\n passDropYards,\r\n passYdsPerAttempt,\r\n passYdsPerGame,\r\n passLong,\r\n passTD,\r\n passThrowAways,\r\n passSpikes,\r\n passBatted,\r\n passMiscommunications,\r\n passAccurateCompletions,\r\n passDroppedTD,\r\n passInt,\r\n passDroppedInt,\r\n passQBRating,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumIQR,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n // for each rushingstats row that nmatch rowdata[] by gameDate, populate the rushing stat fields.\r\n // if the gameDate is not found, create a new rowdata object.\r\n let j = -1;\r\n if (rushingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].gameDate === rushingstats[i].gameDate) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].rushAttempts = rushingstats[i].att;\r\n rowdata[j].rushYds = rushingstats[i].yards;\r\n rowdata[j].rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rowdata[j].rushLong = rushingstats[i].long;\r\n rowdata[j].rushTD = rushingstats[i].td;\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,rushingstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,rushingstats[i].fumblesLost);\r\n rowdata[j].sumPointsEarned = NullBypassSum(rowdata[j].sumPointsEarned,Tst2015(rushingstats[i].season,rushingstats[i].eps));\r\n } else {\r\n sortKey = (9999 - rushingstats[i].season) * 1000000 + rushingstats[i].season * 100 + rushingstats[i].week; //XXXXYYYYWW\r\n season = rushingstats[i].season;\r\n playerName = rushingstats[i].playerName;\r\n playerId = rushingstats[i].playerId;\r\n team = rushingstats[i].teamName;\r\n matchup = rushingstats[i].teamName + ' ' + rushingstats[i].oppTeamName;\r\n positionName = rushingstats[i].positionName;\r\n games = 1;\r\n gameDate = rushingstats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = rushingstats[i].season.toString() + rushingstats[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(rushingstats[i].teamScore, rushingstats[i].oppTeamScore);\r\n gameWeek = rushingstats[i].week;\r\n gamesStarted = rushingstats[i].starts;\r\n oppTeam = rushingstats[i].oppTeamName;\r\n passAttempts = 0;\r\n passCompletions = 0;\r\n passDrops = 0;\r\n passCompPct = 0;\r\n passYards = 0;\r\n passDropYards = 0;\r\n passYdsPerAttempt = 0;\r\n passYdsPerGame = 0;\r\n passLong = 0;\r\n passTD = 0;\r\n passThrowAways = 0;\r\n passSpikes = 0;\r\n passBatted = 0;\r\n passMiscommunications = 0;\r\n passAccurateCompletions = 0;\r\n passDroppedTD = 0;\r\n passInt = 0;\r\n passDroppedInt = 0;\r\n passQBRating = 0;\r\n rushAttempts = rushingstats[i].att;\r\n rushYds = rushingstats[i].yards;\r\n rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rushLong = rushingstats[i].long;\r\n rushTD = rushingstats[i].td;\r\n sumFumbles = rushingstats[i].fumbles;\r\n sumFumblesLost = rushingstats[i].fumblesLost;\r\n sumIQR = 0;\r\n sumPointsEarned = Tst2015(rushingstats[i].season,rushingstats[i].eps);\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n passAttempts,\r\n passCompletions,\r\n passDrops,\r\n passCompPct,\r\n passYards,\r\n passDropYards,\r\n passYdsPerAttempt,\r\n passYdsPerGame,\r\n passLong,\r\n passTD,\r\n passThrowAways,\r\n passSpikes,\r\n passBatted,\r\n passMiscommunications,\r\n passAccurateCompletions,\r\n passDroppedTD,\r\n passInt,\r\n passDroppedInt,\r\n passQBRating,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumIQR,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (rowdata.length !== 0) {\r\n rowdata.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // orders rows by sortkey\r\n this.SumData(rowdata); // insert seasonal totals\r\n }\r\n this.data = rowdata\r\n }\r\n\r\n SumData(d) {\r\n let sortKey = 0;\r\n let season = d[0].season;\r\n let playerName = '';\r\n let playerId = '';\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gameWeek = '';\r\n let gamesStarted = 0;\r\n let oppTeam = ''\r\n let passAttempts = 0;\r\n let passCompletions = 0;\r\n let passCompPct = 0;\r\n let passYards = 0;\r\n let passYdsPerAttempt = 0;\r\n let passYdsPerGame = 0;\r\n let passLong = 0;\r\n let passTD = 0;\r\n let passInt = 0;\r\n let passQBRating = 0;\r\n let passDrops = 0;\r\n let passDropYards = 0;\r\n let passDroppedTD = 0;\r\n let passDroppedInt = 0;\r\n let sumIQR = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n let passThrowAways = 0;\r\n let passSpikes = 0;\r\n let passBatted = 0;\r\n let passMiscommunications = 0;\r\n let passAccurateCompletions = 0;\r\n let iqrAttempts = 0;\r\n let iqrComp = 0;\r\n let iqrYards = 0;\r\n let iqrTD = 0;\r\n let iqrInt = 0;\r\n let rowcount = d.length;\r\n for (var i = 0; i < rowcount; i++) {\r\n if (season !== d[i].season) {\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n if (passAttempts) {\r\n passCompPct = NullDiv(passCompletions, passAttempts) * 100;\r\n passYdsPerAttempt = NullDiv(passYards, passAttempts);\r\n // QB Pass Rating\r\n passQBRating = CalcPlayerRating(passAttempts, passCompletions, passYards, passTD, passInt);\r\n iqrAttempts = NullSub(passAttempts, NullSum(NullSum(passThrowAways, passSpikes), NullSum(passBatted, passMiscommunications)));\r\n iqrComp = NullSum(passAccurateCompletions, passDrops);\r\n iqrYards = NullSum(passYards, passDropYards);\r\n iqrTD = NullSum(passTD, passDroppedTD);\r\n iqrInt = NullSum(passInt, passDroppedInt);\r\n sumIQR = CalcPlayerRating(iqrAttempts, iqrComp, iqrYards, iqrTD, iqrInt);\r\n }\r\n rushYdsPerAttempt = NullDiv(rushYds, rushAttempts);\r\n passYdsPerGame = NullDiv(passYards, games);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n passAttempts,\r\n passCompletions,\r\n passDrops,\r\n passCompPct,\r\n passYards,\r\n passDropYards,\r\n passYdsPerAttempt,\r\n passYdsPerGame,\r\n passLong,\r\n passTD,\r\n passThrowAways,\r\n passSpikes,\r\n passBatted,\r\n passMiscommunications,\r\n passAccurateCompletions,\r\n passDroppedTD,\r\n passInt,\r\n passDroppedInt,\r\n passQBRating,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumIQR,\r\n sumPointsEarned\r\n });\r\n season = d[i].season;\r\n playerName = '';\r\n playerId = '';\r\n positionName = '';\r\n team = '';\r\n matchup = '';\r\n games = 0;\r\n gameDate = '';\r\n gameSeasonDateSSSSYYYYMMDD ='';\r\n gameResult = '';\r\n gameWeek = '';\r\n gamesStarted = 0;\r\n oppTeam = ''\r\n passAttempts = 0;\r\n passCompletions = 0;\r\n passCompPct = 0;\r\n passYards = 0;\r\n passYdsPerAttempt = 0;\r\n passYdsPerGame = 0;\r\n passLong = 0;\r\n passTD = 0;\r\n passInt = 0;\r\n passQBRating = 0;\r\n passDrops = 0;\r\n passDropYards = 0;\r\n passDroppedTD = 0;\r\n passDroppedInt = 0;\r\n sumIQR = 0;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n sumFumbles = 0;\r\n sumFumblesLost = 0;\r\n sumPointsEarned = 0;\r\n passThrowAways = 0;\r\n passSpikes = 0;\r\n passBatted = 0;\r\n passMiscommunications = 0;\r\n passAccurateCompletions = 0;\r\n iqrAttempts = 0;\r\n iqrComp = 0;\r\n iqrYards = 0;\r\n iqrTD = 0;\r\n iqrInt = 0;\r\n }\r\n games = NullBypassSum(games, d[i].games);\r\n gamesStarted = NullBypassSum(gamesStarted, d[i].gamesStarted);\r\n passAttempts = NullBypassSum(passAttempts, d[i].passAttempts);\r\n passCompletions = NullBypassSum(passCompletions, d[i].passCompletions);\r\n passYards = NullBypassSum(passYards, d[i].passYards);\r\n passDropYards = NullBypassSum(passDropYards, d[i].passDropYards);\r\n passLong = NullMax(passLong, d[i].passLong);\r\n passTD = NullBypassSum(passTD, d[i].passTD);\r\n passDroppedTD = NullBypassSum(passDroppedTD, d[i].passDroppedTD);\r\n passDrops = NullBypassSum(passDrops, d[i].passDrops);\r\n passInt = NullBypassSum(passInt, d[i].passInt);\r\n passDroppedInt = NullBypassSum(passDroppedInt, d[i].passDroppedInt);\r\n passThrowAways = NullBypassSum(passThrowAways, d[i].passThrowAways);\r\n passSpikes = NullBypassSum(passSpikes, d[i].passSpikes);\r\n passBatted = NullBypassSum(passBatted, d[i].passBatted);\r\n passMiscommunications = NullBypassSum(passMiscommunications, d[i].passMiscommunications);\r\n passAccurateCompletions = NullBypassSum(passAccurateCompletions, d[i].passAccurateCompletions);\r\n rushAttempts = NullBypassSum(rushAttempts, d[i].rushAttempts);\r\n rushYds = NullBypassSum(rushYds, d[i].rushYds);\r\n rushLong = NullMax(rushLong, d[i].rushLong);\r\n rushTD = NullBypassSum(rushTD, d[i].rushTD);\r\n sumFumbles = NullBypassSum(sumFumbles, d[i].sumFumbles);\r\n sumFumblesLost = NullBypassSum(sumFumblesLost, d[i].sumFumblesLost);\r\n sumPointsEarned = NullBypassSum(sumPointsEarned, Tst2015(d[i].season, d[i].sumPointsEarned));\r\n }\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n if (passAttempts) {\r\n passCompPct = NullDiv(passCompletions, passAttempts) * 100;\r\n passYdsPerAttempt = NullDiv(passYards, passAttempts);\r\n // QB Pass Rating\r\n passQBRating = CalcPlayerRating(passAttempts, passCompletions, passYards, passTD, passInt);\r\n iqrAttempts = NullSub(passAttempts, NullSum(NullSum(passThrowAways, passSpikes), NullSum(passBatted, passMiscommunications)));\r\n iqrComp = NullSum(passAccurateCompletions, passDrops);\r\n iqrYards = NullSum(passYards, passDropYards);\r\n iqrTD = NullSum(passTD, passDroppedTD);\r\n iqrInt = NullSum(passInt, passDroppedInt);\r\n sumIQR = CalcPlayerRating(iqrAttempts, iqrComp, iqrYards, iqrTD, iqrInt);\r\n }\r\n rushYdsPerAttempt = NullDiv(rushYds, rushAttempts);\r\n passYdsPerGame = NullDiv(passYards, games);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n passAttempts,\r\n passCompletions,\r\n passDrops,\r\n passCompPct,\r\n passYards,\r\n passDropYards,\r\n passYdsPerAttempt,\r\n passYdsPerGame,\r\n passLong,\r\n passTD,\r\n passThrowAways,\r\n passSpikes,\r\n passBatted,\r\n passMiscommunications,\r\n passAccurateCompletions,\r\n passDroppedTD,\r\n passInt,\r\n passDroppedInt,\r\n passQBRating,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumIQR,\r\n sumPointsEarned\r\n });\r\n d.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // corrects for new season total rows\r\n }\r\n\r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n// let maxPlayerSeason = this.data.length ? this.data[this.data.length - 1].season : 0;\r\n let maxPlayerSeason = this.data.length ? this.data[0].season : 0;\r\n pagination = null;\r\n paginationSize = 0;\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.gameSeasonDateSSSSYYYYMMDD.substr(9, 5) === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n groupBy: function (row) {\r\n return row.gameSeasonDateSSSSYYYYMMDD.substr(0, 4);\r\n },\r\n groupHeader: function (groupKey, rowcount, data, group) {\r\n return groupKey + ' Season ';\r\n },\r\n groupStartOpen: function (groupKey, rowcount, data, group) {\r\n return groupKey === maxPlayerSeason.toString();\r\n },\r\n groupToggleElement: \"header\",\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
    \r\n
    Summary
    \r\n
    (this.el = el)} />\r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default GameLogQBSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullSub, NullDiv, Tst2015, DispFunc, GameResult} from '../common/CommonFunctions';\r\nimport { cgtGameSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\n\r\nclass GameLogOLSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.blockingstats = this.props.blockingstats;\r\n this.data = [];\r\n let gameInfoCols = null;\r\n this.colNum = 0;\r\n this.maxPlayerSeason = ''\r\n\r\n // Set game information columns\r\n gameInfoCols = [\r\n {\r\n title: \"Date\", field: \"gameSeasonDateSSSSYYYYMMDD\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return (cell.getValue().substr(9, 1) === 'T' ? 'Total' : parseInt(cell.getValue().substr(9, 2)) + '/' + parseInt(cell.getValue().substr(12, 2)));\r\n },\r\n width: `${cgtGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"Wk\", field: \"gameWeek\", cssClass: \"single-row-header small-column-center\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n // formatter: function (cell, formatterParams, onRendered) {\r\n // return cell = 99 ? '' : cell;\r\n // }\r\n },\r\n {\r\n title: \"Teams\", field: \"matchup\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"Score\", field: \"gameResult\", cssClass: \"single-row-header break textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"GS\", field: \"gamesStarted\", cssClass: \"single-row-header break small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`\r\n }\r\n ];\r\n\r\n // Set Remaining Columns\r\n this.cols = [\r\n { \r\n title: \"\",\r\n columns: gameInfoCols\r\n },\r\n { \r\n title: \"Total Snaps\", field: \"snaps\", cssClass: \"single-row-header break\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter:\"textarea\", \r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Blown Blocks\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"blownBlocks\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pass\", field: \"bbPass\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Rush\", field: \"bbRuns\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }, \r\n { \r\n title: \"Pct\", field: \"blownBlockPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Penalties\",\r\n columns:[\r\n { \r\n title: \"Total\", field: \"penalties\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Holding\", field: \"totalHolds\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"False Starts\", field: \"falseStarts\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Other\", field: \"otherPenalties\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"penaltyPct\", cssClass: \"break\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n { \r\n title: \"Tot Points Earned\", field: \"pointsEarned\", \r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter:\"textarea\",\r\n width: `${cgtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n // no blocking data\r\n if (this.blockingstats.length === 0) {\r\n return ('');\r\n }\r\n // declare and initialize detail data fields\r\n // these fields will be used to create objects for each game\r\n let blockingstats = this.blockingstats;\r\n let sortKey = 0;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let oppTeam = '';\r\n let gameWeek = 0;\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gamesStarted = 0;\r\n let snaps = 0;\r\n let blownBlocks = 0;\r\n let bbPass = 0;\r\n let bbRuns = 0;\r\n let blownBlockPct = 0;\r\n let penalties = 0;\r\n let totalHolds = 0;\r\n let falseStarts = 0;\r\n let otherPenalties = 0;\r\n let penaltyPct = 0;\r\n let pointsEarned = 0;\r\n let data = [];\r\n for (var i=0; i a.sortKey > b.sortKey ? 1 : -1); // ensure rows are in season and gamedate order\r\n this.SumData(data);\r\n }\r\n this.data = data;\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData(d) {\r\n let sortKey = 0;\r\n let season = d[0].season;\r\n let playerName = '';\r\n let playerId = '';\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gameWeek = '';\r\n let gamesStarted = 0;\r\n let oppTeam = ''\r\n let snaps = 0;\r\n let blownBlocks = 0;\r\n let bbPass = 0;\r\n let bbRuns = 0;\r\n let blownBlockPct = 0;\r\n let penalties = 0;\r\n let totalHolds = 0;\r\n let falseStarts = 0;\r\n let otherPenalties = 0;\r\n let penaltyPct = 0;\r\n let pointsEarned = 0;\r\n let rowcount = d.length;\r\n for (var i = 0; i < rowcount; i++) {\r\n if (season !== d[i].season) {\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n blownBlocks = NullSum(bbPass, bbRuns);\r\n otherPenalties = NullSub(penalties, NullSum(totalHolds, falseStarts));\r\n if (snaps) {\r\n blownBlockPct = NullDiv(blownBlocks, snaps) * 100;\r\n penaltyPct = NullDiv(penalties, snaps) * 100;\r\n };\r\n d.push(\r\n {\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n snaps,\r\n blownBlocks,\r\n bbPass,\r\n bbRuns,\r\n blownBlockPct,\r\n penalties,\r\n totalHolds,\r\n falseStarts,\r\n otherPenalties,\r\n penaltyPct,\r\n pointsEarned\r\n }\r\n );\r\n season = d[i].season;\r\n playerName = '';\r\n playerId = '';\r\n positionName = '';\r\n team = '';\r\n matchup = '';\r\n games = 0;\r\n gameDate = '';\r\n gameSeasonDateSSSSYYYYMMDD = '';\r\n gameResult = '';\r\n gameWeek = '';\r\n gamesStarted = 0;\r\n oppTeam = ''\r\n snaps = 0;\r\n blownBlocks = 0;\r\n bbPass = 0;\r\n bbRuns = 0;\r\n blownBlockPct = 0;\r\n penalties = 0;\r\n totalHolds = 0;\r\n falseStarts = 0;\r\n otherPenalties = 0;\r\n penaltyPct = 0;\r\n pointsEarned = 0;\r\n }\r\n games = NullSum(games,d[i].games);\r\n gamesStarted = NullSum(gamesStarted, d[i].gamesStarted);\r\n snaps = NullSum(snaps,d[i].snaps);\r\n bbPass = NullSum(bbPass,d[i].bbPass);\r\n bbRuns = NullSum(bbRuns,d[i].bbRuns);\r\n penalties = NullSum(penalties,d[i].penalties);\r\n totalHolds = NullSum(totalHolds,d[i].totalHolds);\r\n falseStarts = NullSum(falseStarts,d[i].falseStarts);\r\n pointsEarned = NullBypassSum(pointsEarned, Tst2015(d[i].season, d[i].pointsEarned));\r\n };\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n blownBlocks = NullSum(bbPass,bbRuns);\r\n otherPenalties = NullSub(penalties,NullSum(totalHolds,falseStarts));\r\n if (snaps) {\r\n blownBlockPct = NullDiv(blownBlocks,snaps)*100;\r\n penaltyPct = NullDiv(penalties,snaps)*100;\r\n };\r\n d.push(\r\n {\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n snaps,\r\n blownBlocks,\r\n bbPass,\r\n bbRuns,\r\n blownBlockPct,\r\n penalties,\r\n totalHolds,\r\n falseStarts,\r\n otherPenalties,\r\n penaltyPct,\r\n pointsEarned\r\n }\r\n );\r\n d.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // places season totals after corresponding season's games\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n let maxPlayerSeason = this.data.length ? this.data[0].season : 0;\r\n pagination = null;\r\n paginationSize = 0;\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.gameSeasonDateSSSSYYYYMMDD.substr(9, 5) === 'Total') {\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n groupBy: function (row) {\r\n return row.gameSeasonDateSSSSYYYYMMDD.substr(0, 4);\r\n },\r\n groupHeader: function (groupKey, rowcount, data, group) {\r\n return groupKey + ' Season ';\r\n },\r\n groupStartOpen: function (groupKey, rowcount, data, group) {\r\n return groupKey === maxPlayerSeason.toString();\r\n },\r\n groupToggleElement: \"header\",\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
    \r\n
    Summary
    \r\n
    (this.el = el)} />\r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default GameLogOLSummaryTabulator;","import React from 'react';\r\nimport { NullSum, NullBypassSum, NullMax, NullDiv, Tst2015, DispFunc, GameResult} from '../common/CommonFunctions';\r\nimport { rbfbGameSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\n\r\nclass GameLogWRTERBFBSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.rushingstats = this.props.rushingstats;\r\n this.receivingstats = this.props.receivingstats;\r\n this.puntretstats = this.props.puntretstats;\r\n this.kickretstats = this.props.kickretstats;\r\n this.blockingstats = this.props.blockingstats;\r\n this.data = [];\r\n let gameInfoCols = null;\r\n this.colNum = 0;\r\n this.maxPlayerSeason = ''\r\n\r\n // Set game information columns\r\n gameInfoCols = [\r\n {\r\n title: \"Date\", field: \"gameSeasonDateSSSSYYYYMMDD\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return (cell.getValue().substr(9, 1) === 'T' ? 'Total' : parseInt(cell.getValue().substr(9, 2)) + '/' + parseInt(cell.getValue().substr(12, 2)));\r\n },\r\n width: `${rbfbGameSummary[this.colNum++]}`\r\n },\r\n { \r\n title: \"Wk\", field: \"gameWeek\", cssClass: \"single-row-header small-column-center\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n// formatter: function (cell, formatterParams, onRendered) {\r\n// return cell = 99 ? '' : cell;\r\n// }\r\n },\r\n { \r\n title: \"Teams\", field: \"matchup\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`\r\n }, \r\n {\r\n title: \"Score\", field: \"gameResult\", cssClass: \"single-row-header break textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"GS\", field: \"gamesStarted\", cssClass: \"single-row-header break small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`\r\n } \r\n ];\r\n\r\n // Set Remaining Columns\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: gameInfoCols\r\n },\r\n {\r\n title: \"Rushing\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"rushAttempts\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n },\r\n {\r\n title: \"Yds\", field: \"rushYds\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"rushYdsPerAttempt\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"Lg\", field: \"rushLong\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"TD\", field: \"rushTD\", cssClass: \"single-row-header break\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n // { // remove per Matt gauntlet\r\n // title: \"Y/G\", field: \"rushYdsPerGame\", cssClass: \"single-row-header break\",\r\n // headerSortStartingDir: \"desc\", headerSort: false,\r\n // width: `${rbfbGameSummary[this.colNum++]}`,\r\n // formatter: \"money\", formatterParams: {\r\n // precision: 1\r\n // }\r\n // },\r\n ],\r\n },\r\n {\r\n title: \"Receiving\",\r\n columns: [\r\n {\r\n title: \"Tgts\", field: \"rcvTargets\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"Rec\", field: \"receives\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"Yds\", field: \"rcvYds\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"rcvYdsPerRcv\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"Lg\", field: \"rcvLong\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"TD\", field: \"rcvTD\", cssClass: \"single-row-header break\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n // { // remove per Matt gauntlet\r\n // title: \"Y/G\", field: \"rcvYdsPerGame\", cssClass: \"single-row-header break\",\r\n // width: `${rbfbGameSummary[this.colNum++]}`,\r\n // headerSortStartingDir: \"desc\", headerSort: false,\r\n // formatter: \"money\", formatterParams: {\r\n // precision: 1\r\n // }\r\n // }\r\n ],\r\n },\r\n {\r\n title: \"Punt Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"pntretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"Yds\", field: \"pntretYards\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"pntretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"pntretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Kickoff Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"kickretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"Yds\", field: \"kickretYards\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"kickretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"kickretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Fumbles\",\r\n columns: [\r\n {\r\n title: \"Fum\", field: \"sumFumbles\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"Lost\", field: \"sumFumblesLost\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Tot Pts
    Earned\", field: \"sumPointsEarned\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${rbfbGameSummary[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate game data into one data array to be used for tabulator (called on component mount)\r\n ConsolidateData() {\r\n // console.log('CONSOLIDATE GAMELOG DATA');\r\n let rushingstats = this.rushingstats;\r\n let receivingstats = this.receivingstats;\r\n let puntretstats = this.puntretstats;\r\n let kickretstats = this.kickretstats;\r\n let blockingstats = this.blockingstats; // only used for TE position\r\n let sortKey = 0;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let oppTeam = '';\r\n let gameWeek = 0;\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gamesStarted = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let rushYdsPerGame = 0;\r\n let receives = 0;\r\n let rcvYds = 0;\r\n let rcvYdsPerRcv = 0;\r\n let rcvLong = 0;\r\n let rcvTargets = 0;\r\n let rcvTD = 0;\r\n let rcvYdsPerGame = 0;\r\n let pntretAttempts = 0;\r\n let pntretYards = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYards = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n \r\n var rowdata = [];\r\n var i = 0;\r\n if (receivingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].gameDate === rushingstats[i].gameDate) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].rushAttempts = rushingstats[i].att;\r\n rowdata[j].rushYds = rushingstats[i].yards;\r\n rowdata[j].rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rowdata[j].rushLong = rushingstats[i].long;\r\n rowdata[j].rushTD = rushingstats[i].td;\r\n rowdata[j].rushYdsPerGame = rushingstats[i].yards;\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles, rushingstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost, rushingstats[i].fumblesLost);\r\n rowdata[j].sumPointsEarned = NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(rushingstats[i].season, rushingstats[i].eps));\r\n // consolelogruben(rushingstats[i].playerId, 'Rushing EPSa', rushingstats[i].eps);\r\n } else {\r\n sortKey = (9999 - rushingstats[i].season) * 1000000 + rushingstats[i].season * 100 + rushingstats[i].week; //XXXXYYYYWW\r\n season = rushingstats[i].season;\r\n playerName = rushingstats[i].playerName;\r\n playerId = rushingstats[i].playerId;\r\n positionName = rushingstats[i].positionName;\r\n team = rushingstats[i].teamName;\r\n matchup = rushingstats[i].teamName.trim() + ' ' + rushingstats[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = rushingstats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = rushingstats[i].season.toString() + rushingstats[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(rushingstats[i].teamScore, rushingstats[i].oppTeamScore);\r\n gameWeek = rushingstats[i].week;\r\n gamesStarted = rushingstats[i].starts;\r\n oppTeam = rushingstats[i].oppTeamName;\r\n rushAttempts = rushingstats[i].att;\r\n rushYds = rushingstats[i].yards;\r\n rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rushLong = rushingstats[i].long;\r\n rushTD = rushingstats[i].td;\r\n rushYdsPerGame = rushingstats[i].yardsPerG;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTargets = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = rushingstats[i].fumbles;\r\n sumFumblesLost = rushingstats[i].fumblesLost;\r\n sumPointsEarned = Tst2015(rushingstats[i].season, rushingstats[i].eps);\r\n // consolelogruben(rushingstats[i].playerId, 'Rushing EPSb', rushingstats[i].eps);\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTargets,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (puntretstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].gameDate === puntretstats[i].gameDate) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].pntretAttempts = puntretstats[i].attempts;\r\n rowdata[j].pntretYards = puntretstats[i].yards;\r\n rowdata[j].pntretYdsPerAtt = puntretstats[i].attempts ? puntretstats[i].yards/puntretstats[i].attempts : 0;\r\n rowdata[j].pntretTD = puntretstats[i].tDs;\r\n rowdata[j].sumTDs = NullSum(rowdata[j].sumTDs,puntretstats[i].tDs);\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,puntretstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,puntretstats[i].fumblesLost);\r\n } else {\r\n sortKey = (9999 - puntretstats[i].season) * 1000000 + puntretstats[i].season * 100 + puntretstats[i].week; //XXXXYYYYWW\r\n season = puntretstats[i].season;\r\n playerName = puntretstats[i].playerName;\r\n playerId = puntretstats[i].playerId;\r\n positionName = puntretstats[i].positionName;\r\n team = puntretstats[i].teamName;\r\n matchup = puntretstats[i].teamName.trim() + ' ' + puntretstats[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = puntretstats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = puntretstats[i].season.toString() + puntretstats[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(puntretstats[i].teamScore, puntretstats[i].oppTeamScore);\r\n gameWeek = puntretstats[i].week;\r\n gamesStarted = puntretstats[i].starts;\r\n oppTeam = puntretstats[i].oppTeamName;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTargets = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = puntretstats[i].attempts;\r\n pntretYards = puntretstats[i].yards;\r\n pntretYdsPerAtt = NullDiv(puntretstats[i].yards,puntretstats[i].attempts);\r\n pntretTD = puntretstats[i].tDs;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = puntretstats[i].fumbles;\r\n sumFumblesLost = puntretstats[i].fumblesLost;\r\n sumPointsEarned = 0;\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTargets,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (kickretstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].gameDate === kickretstats[i].gameDate) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].kickretAttempts = kickretstats[i].attempts;\r\n rowdata[j].kickretYards = kickretstats[i].yards;\r\n rowdata[j].kickretYdsPerAtt = NullDiv(kickretstats[i].yards, kickretstats[i].attempts);\r\n rowdata[j].kickretTD = kickretstats[i].tDs;\r\n rowdata[j].sumTDs = NullSum(rowdata[j].sumTDs,kickretstats[i].tDs);\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,kickretstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,kickretstats[i].fumblesLost);\r\n } else {\r\n sortKey = (9999 - kickretstats[i].season) * 1000000 + kickretstats[i].season * 100 + kickretstats[i].week; //XXXXYYYYWW\r\n season = kickretstats[i].season;\r\n playerName = kickretstats[i].playerName;\r\n playerId = kickretstats[i].playerId;\r\n positionName = kickretstats[i].positionName;\r\n team = kickretstats[i].teamName;\r\n matchup = kickretstats[i].teamName.trim() + ' ' + kickretstats[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = kickretstats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = kickretstats[i].season.toString() + kickretstats[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(kickretstats[i].teamScore, kickretstats[i].oppTeamScore);\r\n gameWeek = kickretstats[i].week;\r\n gamesStarted = kickretstats[i].starts;\r\n oppTeam = kickretstats[i].oppTeamName;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTargets = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = kickretstats[i].attempts;\r\n kickretYards = kickretstats[i].yards;\r\n kickretYdsPerAtt = NullDiv(kickretYards, kickretAttempts);\r\n kickretTD = kickretstats[i].tDs;\r\n sumFumbles = kickretstats[i].fumbles;\r\n sumFumblesLost = kickretstats[i].fumblesLost;\r\n sumPointsEarned = 0;\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTargets,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (blockingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].gameDate === blockingstats[i].gameDate) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].sumPointsEarned =\r\n NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(blockingstats[i].season, blockingstats[i].passBlockEPS));\r\n // consolelogruben(blockingstats[i].playerId, 'PassBlock EPS', blockingstats[i].passBlockEPS);\r\n rowdata[j].sumPointsEarned =\r\n NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(blockingstats[i].season, blockingstats[i].runBlockEPS));\r\n // consolelogruben(blockingstats[i].playerId, 'RunBlock EPS', blockingstats[i].runBlockEPS);\r\n } else if(!this.isLeaderboards) {\r\n sortKey = (9999 - blockingstats[i].season) * 1000000 + blockingstats[i].season * 100 + blockingstats[i].week; //XXXXYYYYWW\r\n season = blockingstats[i].season;\r\n playerName = blockingstats[i].playerName;\r\n playerId = blockingstats[i].playerId;\r\n positionName = blockingstats[i].positionName;\r\n team = blockingstats[i].teamName;\r\n matchup = blockingstats[i].teamName.trim() + ' ' + blockingstats[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = blockingstats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = blockingstats[i].season.toString() + blockingstats[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(blockingstats[i].teamScore, blockingstats[i].oppTeamScore);\r\n gameWeek = blockingstats[i].week;\r\n gamesStarted = blockingstats[i].starts;\r\n oppTeam = blockingstats[i].oppTeamName;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTargets = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = 0;\r\n sumFumblesLost = 0;\r\n sumPointsEarned =\r\n NullBypassSum(\r\n Tst2015(blockingstats[i].season, blockingstats[i].passBlockEPS),\r\n Tst2015(blockingstats[i].season, blockingstats[i].runBlockEPS)\r\n );\r\n // consolelogruben(blockingstats[i].playerId, 'PassBlock EPS', blockingstats[i].passBlockEPS);\r\n // consolelogruben(blockingstats[i].playerId, 'RunBlock EPS', blockingstats[i].runBlockEPS);\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTargets,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (rowdata.length !== 0) {\r\n rowdata.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // orders rows by sortkey\r\n this.SumData(rowdata); // insert seasonal totals\r\n }\r\n this.data = rowdata;\r\n }\r\n\r\n SumData(d) {\r\n let sortKey = 0;\r\n let season = d[0].season;\r\n let playerName = '';\r\n let playerId = '';\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gameWeek = '';\r\n let gamesStarted = 0;\r\n let oppTeam = ''\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let rushYdsPerGame = 0;\r\n let receives = 0;\r\n let rcvYds = 0;\r\n let rcvYdsPerRcv = 0;\r\n let rcvLong = 0;\r\n let rcvTargets = 0;\r\n let rcvTD = 0;\r\n let rcvYdsPerGame = 0;\r\n let pntretAttempts = 0;\r\n let pntretYards = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYards = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n let rowcount = d.length;\r\n for (var i = 0; i < rowcount; i++) {\r\n if (season !== d[i].season) {\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n rushYdsPerAttempt = NullDiv(rushYds, rushAttempts);\r\n rushYdsPerGame = NullDiv(rushYds, games);\r\n rcvYdsPerRcv = NullDiv(rcvYds, receives);\r\n rcvYdsPerGame = NullDiv(rcvYds, games);\r\n kickretYdsPerAtt = NullDiv(kickretYards, kickretAttempts);\r\n pntretYdsPerAtt = NullDiv(pntretYards, pntretAttempts);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTargets,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n season = d[i].season;\r\n playerName = '';\r\n playerId = '';\r\n positionName = '';\r\n team = '';\r\n matchup = '';\r\n games = 0;\r\n gameDate = '';\r\n gameSeasonDateSSSSYYYYMMDD = '';\r\n gameResult = '';\r\n gameWeek = '';\r\n gamesStarted = 0;\r\n oppTeam = ''\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTargets = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = 0;\r\n sumFumblesLost = 0;\r\n sumPointsEarned = 0;\r\n }\r\n games = NullSum(games, d[i].games);\r\n gamesStarted = NullSum(gamesStarted,d[i].gamesStarted);\r\n rushAttempts = NullSum(rushAttempts,d[i].rushAttempts);\r\n rushLong = NullMax(rushLong,d[i].rushLong);\r\n rushTD = NullSum(rushTD,d[i].rushTD);\r\n rushYds = NullSum(rushYds,d[i].rushYds);\r\n receives = NullSum(receives,d[i].receives);\r\n rcvYds = NullSum(rcvYds,d[i].rcvYds);\r\n rcvLong = NullMax(rcvLong,d[i].rcvLong);\r\n rcvTargets = NullSum(rcvTargets,d[i].rcvTargets)\r\n rcvTD = NullSum(rcvTD,d[i].rcvTD);\r\n pntretAttempts = NullSum(pntretAttempts,d[i].pntretAttempts);\r\n pntretYards = NullSum(pntretYards,d[i].pntretYards);\r\n pntretTD = NullSum(pntretTD,d[i].pntretTD);\r\n kickretAttempts = NullSum(kickretAttempts,d[i].kickretAttempts);\r\n kickretYards = NullSum(kickretYards, d[i].kickretYards);\r\n kickretTD = NullSum(kickretTD, d[i].kickretTD);\r\n sumFumbles = NullSum(sumFumbles,d[i].sumFumbles);\r\n sumFumblesLost = NullSum(sumFumblesLost,d[i].sumFumblesLost);\r\n sumPointsEarned = NullBypassSum(sumPointsEarned,Tst2015(d[i].season,d[i].sumPointsEarned));\r\n // consolelogruben(d[i].playerId, 'SUMMING', d[i].sumPointsEarned)\r\n }\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n rushYdsPerAttempt = NullDiv(rushYds,rushAttempts);\r\n rushYdsPerGame = NullDiv(rushYds,games);\r\n rcvYdsPerRcv = NullDiv(rcvYds,receives);\r\n rcvYdsPerGame = NullDiv(rcvYds,games);\r\n kickretYdsPerAtt = NullDiv(kickretYards,kickretAttempts);\r\n pntretYdsPerAtt = NullDiv(pntretYards,pntretAttempts);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTargets,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n d.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // corrects for new season total rows\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n let maxPlayerSeason = this.data.length ? this.data[0].season : 0;\r\n pagination = null;\r\n paginationSize = 0;\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter: function (row) {\r\n var data = row.getData();\r\n if (data.gameSeasonDateSSSSYYYYMMDD.substr(9, 5) === 'Total') {\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n groupBy: function (row) {\r\n return row.gameSeasonDateSSSSYYYYMMDD.substr(0, 4);\r\n },\r\n groupHeader: function (groupKey, rowcount, data, group) {\r\n return groupKey + ' Season ';\r\n },\r\n groupStartOpen: function (groupKey, rowcount, data, group) {\r\n return groupKey === maxPlayerSeason.toString();\r\n },\r\n groupToggleElement: \"header\",\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
    \r\n
    Summary
    \r\n
    (this.el = el)} />\r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nfunction consolelogruben(playerId, text, value) {\r\n //console.log('playerid =', playerId)\r\n if (playerId === 3938) {\r\n console.log(playerId, text, value)\r\n }\r\n}\r\n\r\nexport default GameLogWRTERBFBSummaryTabulator;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { dedtGameSummary, lbGameSummary, cbsGameSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\n\r\nclass GameLogDefenseSummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.defensestats = this.props.defensestats;\r\n this.data = [];\r\n this.gameInfoCols = null;\r\n this.colNum = 0;\r\n this.maxPlayerSeason = ''\r\n\r\n // Set game information columns\r\n this.gameInfoCols = [\r\n {\r\n title: \"Date\", field: \"gameSeasonDateSSSSYYYYMMDD\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return (cell.getValue().substr(9, 1) === 'T' ? 'Total' : parseInt(cell.getValue().substr(9, 2)) + '/' + parseInt(cell.getValue().substr(12, 2)));\r\n }\r\n },\r\n {\r\n title: \"Wk\", field: \"gameWeek\", cssClass: \"single-row-header small-column-center\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n },\r\n {\r\n title: \"Teams\", field: \"matchup\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"Score\", field: \"gameResult\", cssClass: \"single-row-header break textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`\r\n },\r\n {\r\n title: \"GS\", field: \"gamesStarted\", cssClass: \"single-row-header break small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`\r\n } \r\n ];\r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let defensestats = this.defensestats;\r\n let sortKey = 0;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let oppTeam = '';\r\n let gameWeek = 0;\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gamesStarted = 0;\r\n let targets = 0;\r\n let completions = 0;\r\n let completionPct = 0;\r\n let passYards = 0;\r\n let passYardsPerTgt = 0;\r\n let td = 0;\r\n let breakups = 0;\r\n let interceptions = 0;\r\n let droppedInts = 0;\r\n let tackles = 0;\r\n let tackleForLoss = 0;\r\n let forcedFumbles = 0;\r\n let pointsSaved = 0;\r\n let sacks = 0;\r\n let pressures = 0;\r\n let hurries = 0;\r\n let hits = 0;\r\n let knockdowns = 0;\r\n let passesBatted = 0;\r\n let pntretAttempts = 0;\r\n let pntretYds = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYds = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let rowdata = [];\r\n if (defensestats.length !== 0){\r\n positionName = defensestats[0].positionName;\r\n for (var i = 0; i < defensestats.length; i++) {\r\n sortKey = defensestats[i].sortKey;\r\n season = defensestats[i].season;\r\n playerName = defensestats[i].playerName;\r\n playerId = defensestats[i].playerId;\r\n team = defensestats[i].teamName;\r\n matchup = defensestats[i].matchup;\r\n games = defensestats[i].games;\r\n gameDate = defensestats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = defensestats[i].gameSeasonDateSSSSYYYYMMDD;\r\n gameResult = defensestats[i].gameResult;\r\n gameWeek = defensestats[i].gameWeek;\r\n gamesStarted = defensestats[i].gamesStarted;\r\n targets = defensestats[i].targets;\r\n completions = defensestats[i].completions;\r\n completionPct = defensestats[i].completionPct;\r\n passYards = defensestats[i].passYards;\r\n passYardsPerTgt = defensestats[i].passYardsPerTgt;\r\n td = defensestats[i].td;\r\n breakups = defensestats[i].breakups;\r\n interceptions = defensestats[i].interceptions;\r\n droppedInts = defensestats[i].droppedInts;\r\n tackles = defensestats[i].tackles;\r\n tackleForLoss = defensestats[i].tackleForLoss;\r\n forcedFumbles = defensestats[i].forcedFumbles;\r\n sacks = defensestats[i].sacks;\r\n pressures = defensestats[i].pressures;\r\n hurries = defensestats[i].hurries;\r\n hits = defensestats[i].hits;\r\n knockdowns = defensestats[i].knockdowns;\r\n passesBatted = defensestats[i].passesBatted;\r\n pntretAttempts = defensestats[i].pntretAttempts;\r\n pntretYds = defensestats[i].pntretYds;\r\n pntretYdsPerAtt = defensestats[i].pntretYdsPerAtt;\r\n pntretTD = defensestats[i].pntretTD;\r\n kickretAttempts = defensestats[i].kickretAttempts;\r\n kickretYds = defensestats[i].kickretYds;\r\n kickretYdsPerAtt = defensestats[i].kickretYdsPerAtt;\r\n kickretTD = defensestats[i].kickretTD;\r\n pointsSaved = Tst2015(defensestats[i].season, NullSum(defensestats[i].pointsSavedPassDef, NullSum(defensestats[i].pointsSavedPassRush, defensestats[i].pointsSavedRushDef)))\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n targets,\r\n completions,\r\n completionPct,\r\n passYards,\r\n passYardsPerTgt,\r\n td,\r\n breakups,\r\n interceptions,\r\n droppedInts,\r\n tackles,\r\n tackleForLoss,\r\n forcedFumbles,\r\n pointsSaved,\r\n sacks,\r\n pressures,\r\n hurries,\r\n hits,\r\n knockdowns,\r\n passesBatted,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n }\r\n if (rowdata.length !== 0) {\r\n rowdata.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // orders rows by sortkey\r\n this.SumData(rowdata); // insert seasonal totals\r\n }\r\n this.data = rowdata;\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData(d) {\r\n let sortKey = 0;\r\n let season = d[0].season;\r\n let playerName = '';\r\n let playerId = '';\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gameWeek = '';\r\n let gamesStarted = 0;\r\n let oppTeam = ''\r\n let assistedTackles = 0;\r\n let batDowns = 0;\r\n let breakups = 0;\r\n let brokenTackles = 0;\r\n let completionPct = 0;\r\n let completions = 0;\r\n let defensed = 0;\r\n let deflected = 0;\r\n let droppedInts = 0;\r\n let forcedFumbles = 0;\r\n let hits = 0;\r\n let hurries = 0;\r\n let interceptions = 0;\r\n let knockdowns = 0;\r\n let passesBatted = 0;\r\n let passRushes = 0;\r\n let passRushSacks = 0;\r\n let passSnaps = 0;\r\n let pointsSaved = 0;\r\n let pressures = 0;\r\n let rushsnaps = 0;\r\n let sacks = 0;\r\n let soloTackles = 0;\r\n let starts = 0;\r\n let tackleForLoss = 0;\r\n let tackles = 0;\r\n let targets = 0;\r\n let td = 0;\r\n let passYards = 0;\r\n let passYardsPerTgt = 0;\r\n let pntretAttempts = 0;\r\n let pntretYds = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYds = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let rowcount = d.length;\r\n for (var i = 0; i < rowcount; i++) {\r\n if (season !== d[i].season) {\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n completionPct = NullDiv(completions, targets) * 100;\r\n passYardsPerTgt = NullDiv(passYards, targets);\r\n pntretYdsPerAtt = NullDiv(pntretYds, pntretAttempts);\r\n kickretYdsPerAtt = NullDiv(kickretYds, kickretAttempts);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n targets,\r\n completions,\r\n completionPct,\r\n passYards,\r\n passYardsPerTgt,\r\n td,\r\n breakups,\r\n interceptions,\r\n droppedInts,\r\n tackles,\r\n tackleForLoss,\r\n forcedFumbles,\r\n pointsSaved,\r\n sacks,\r\n pressures,\r\n hurries,\r\n hits,\r\n knockdowns,\r\n passesBatted,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n season = d[i].season;\r\n playerName = '';\r\n playerId = '';\r\n positionName = '';\r\n team = '';\r\n matchup = '';\r\n games = 0;\r\n gameDate = '';\r\n gameSeasonDateSSSSYYYYMMDD = '';\r\n gameResult = '';\r\n gameWeek = '';\r\n gamesStarted = 0;\r\n oppTeam = ''\r\n assistedTackles = 0;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0;\r\n games = 0;\r\n hits = 0;\r\n hurries = 0;\r\n interceptions = 0;\r\n knockdowns = 0;\r\n passesBatted = 0;\r\n passRushes = 0;\r\n passRushSacks = 0;\r\n passSnaps = 0;\r\n pointsSaved = 0;\r\n pressures = 0;\r\n rushsnaps = 0;\r\n sacks = 0;\r\n soloTackles = 0;\r\n starts = 0;\r\n tackleForLoss = 0;\r\n tackles = 0;\r\n targets = 0;\r\n td = 0;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n pntretAttempts = 0;\r\n pntretYds = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n }\r\n gamesStarted = NullSum(gamesStarted, d[i].gamesStarted);\r\n assistedTackles = NullBypassSum(assistedTackles,d[i].assistedTackles);\r\n batDowns = NullBypassSum(batDowns,d[i].batDowns);\r\n breakups = NullBypassSum(breakups,d[i].breakups);\r\n brokenTackles = NullBypassSum(brokenTackles,d[i].brokenTackles);\r\n completions = NullBypassSum(completions,d[i].completions);\r\n defensed = NullBypassSum(defensed,d[i].defensed);\r\n deflected = NullBypassSum(deflected,d[i].deflected);\r\n droppedInts = NullBypassSum(droppedInts,d[i].droppedInts);\r\n forcedFumbles = NullBypassSum(forcedFumbles,d[i].forcedFumbles);\r\n games = NullBypassSum(games,d[i].games);\r\n hits = NullBypassSum(hits,d[i].hits);\r\n hurries = NullBypassSum(hurries,d[i].hurries);\r\n interceptions = NullBypassSum(interceptions,d[i].interceptions);\r\n knockdowns = NullBypassSum(knockdowns,d[i].knockdowns);\r\n passesBatted = NullBypassSum(passesBatted,d[i].passesBatted);\r\n passRushes = NullBypassSum(passRushes,d[i].passRushes);\r\n passRushSacks = NullBypassSum(passRushSacks,d[i].passRushSacks);\r\n passSnaps = NullBypassSum(passSnaps,d[i].passSnaps);\r\n pointsSaved = NullBypassSum(pointsSaved, Tst2015(d[i].season, d[i].pointsSaved));\r\n pressures = NullBypassSum(pressures,d[i].pressures);\r\n rushsnaps = NullBypassSum(rushsnaps,d[i].rushsnaps);\r\n sacks = NullBypassSum(sacks,d[i].sacks);\r\n soloTackles = NullBypassSum(soloTackles,d[i].soloTackles);\r\n starts = NullBypassSum(starts,d[i].starts);\r\n tackleForLoss = NullBypassSum(tackleForLoss,d[i].tackleForLoss);\r\n tackles = NullBypassSum(tackles,d[i].tackles);\r\n targets = NullBypassSum(targets,d[i].targets);\r\n td = NullBypassSum(td,d[i].td);\r\n passYards = NullBypassSum(passYards,d[i].passYards);\r\n pntretAttempts = NullBypassSum(pntretAttempts, d[i].pntretAttempts);\r\n pntretYds = NullBypassSum(pntretYds, d[i].pntretYds);\r\n pntretTD = NullBypassSum(pntretTD, d[i].pntretTD);\r\n kickretAttempts = NullBypassSum(kickretAttempts, d[i].kickretAttempts);\r\n kickretYds = NullBypassSum(kickretYds, d[i].kickretYds);\r\n kickretTD = NullBypassSum(kickretTD, d[i].kickretTD);\r\n }\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n completionPct = NullDiv(completions,targets)*100;\r\n passYardsPerTgt = NullDiv(passYards,targets);\r\n pntretYdsPerAtt = NullDiv(pntretYds,pntretAttempts);\r\n kickretYdsPerAtt = NullDiv(kickretYds,kickretAttempts);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n targets,\r\n completions,\r\n completionPct,\r\n passYards,\r\n passYardsPerTgt,\r\n td,\r\n breakups,\r\n interceptions,\r\n droppedInts,\r\n tackles,\r\n tackleForLoss,\r\n forcedFumbles,\r\n pointsSaved,\r\n sacks,\r\n pressures,\r\n hurries,\r\n hits,\r\n knockdowns,\r\n passesBatted,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n d.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // corrects for new season total rows\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n let maxPlayerSeason = this.data.length ? this.data[0].season : 0;\r\n pagination = null;\r\n paginationSize = 0;\r\n if (this.defensestats[0]) {\r\n switch (this.defensestats[0].positionName){\r\n case 'CB':\r\n case 'S':\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: this.gameInfoCols,\r\n },\r\n {\r\n title: \"Coverage\",\r\n columns: [\r\n {\r\n title: \"Tgtd\", field:\"targets\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field: \"completions\", cssClass: \"single-row-header small-column\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp%\", field: \"completionPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yards\", field: \"passYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Yds/ Target\", field: \"passYardsPerTgt\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter: \"textarea\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"TD Allwd\", field: \"td\", titleFormatter: \"textarea\", cssClass: \"single-row-header small-column\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pass Brkps\", field: \"breakups\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter: \"textarea\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int\", field: \"interceptions\", cssClass: \"single-row-header small-column\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int Drops\", field: \"droppedInts\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter: \"textarea\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"Tkls (exc spl tms)\",\r\n columns:[\r\n {\r\n title: \"Tackles\", field: \"tackles\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n cssClass: \"single-row-header\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TFL\", field: \"tackleForLoss\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n cssClass: \"single-row-header small-column\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"FF\", field: \"forcedFumbles\", cssClass: \"single-row-header small-column break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Punt Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"pntretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"Yards\", field: \"pntretYds\", cssClass: \"single-row-header\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"pntretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"pntretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Kickoff Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"kickretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n {\r\n title: \"Yards\", field: \"kickretYds\", cssClass: \"single-row-header\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"kickretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"kickretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Tot Pts Saved\", field: \"pointsSaved\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter:\"textarea\",\r\n width: `${cbsGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n break;\r\n case 'LB':\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: this.gameInfoCols,\r\n },\r\n {\r\n title: \"Tackling (excl. special teams)\",\r\n columns:[\r\n {\r\n title: \"Tackles\", field: \"tackles\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TFL\", field: \"tackleForLoss\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"FF\", field: \"forcedFumbles\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Pass Rush\",\r\n columns:[\r\n {\r\n title: \"Sacks\", field: \"sacks\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pressures\", field: \"pressures\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Coverage\",\r\n columns: [\r\n {\r\n title: \"Targeted\", field:\"targets\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp\", field:\"completions\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Cmp%\", field:\"completionPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yards\", field:\"passYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yds/Trgt\", field:\"passYardsPerTgt\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Int\", field:\"interceptions\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n title: \"Tot Points Saved\", field: \"pointsSaved\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter:\"textarea\",\r\n width: `${lbGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n break;\r\n default: // DE, DT\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: this.gameInfoCols,\r\n },\r\n {\r\n title: \"Tackling (excl. special teams)\",\r\n columns:[\r\n {\r\n title: \"Tackles\", field: \"tackles\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"TFL\", field: \"tackleForLoss\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"FF\", field: \"forcedFumbles\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n } \r\n ],\r\n },\r\n {\r\n title: \"Pass Rush\",\r\n columns:[\r\n {\r\n title: \"Sacks\", field: \"sacks\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Hurries\", field: \"hurries\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Hits\", field: \"hits\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Knockdowns\", field: \"knockdowns\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pressures\", field: \"pressures\",cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Passes Batted\", field: \"passesBatted\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Tot Points Saved\", field: \"pointsSaved\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter:\"textarea\",\r\n width: `${dedtGameSummary[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n break;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter: function (row) {\r\n var data = row.getData();\r\n if (data.gameSeasonDateSSSSYYYYMMDD.substr(9, 5) === 'Total') {\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n groupBy: function (row) {\r\n return row.gameSeasonDateSSSSYYYYMMDD.substr(0, 4);\r\n },\r\n groupHeader: function (groupKey, rowcount, data, group) {\r\n return groupKey + ' Season ';\r\n },\r\n groupStartOpen: function (groupKey, rowcount, data, group) {\r\n return groupKey === maxPlayerSeason.toString();\r\n },\r\n groupToggleElement: \"header\",\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n \r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
    \r\n
    Summary
    \r\n
    (this.el = el)} />\r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default GameLogDefenseSummaryTabulator;\r\n","import {NullTst, Tst2015, NullBypassSum, GameResult} from '../common/CommonFunctions';\r\n\r\nconst GameLogDefenseBuildData = (d,pd,pr,rd,krt,prt) => {\r\n // This function consolidates defense stats into an array of objects by season/team.\r\n //\r\n // PARAMETERS\r\n // pd is an array of passdefense stats with one object per season'\r\n // pr is an array of passrush stats with one object per season'\r\n // rd is an array of rushdefense stats with one object per season.\r\n // CONSOLIDATION PROCESS\r\n // Data consolidation from the three types of data is accomplished by building an\r\n // array in three steps. The first step adds one object for each passdefense object\r\n // populating the corresponding fields of the new object. The second step checks for\r\n // existings object from step one that match year and team of each passrush object\r\n // If there is a match, appropriate fields are populated or accumulated, otherwise,\r\n // a new object is created. Step three continues in the same way as step two but for\r\n // rushdefense data.\r\n //\r\n // check if there are no stats\r\n if (d.length === 0 &&\r\n pd.length === 0 &&\r\n pr.length === 0 &&\r\n rd.length === 0 &&\r\n krt.length === 0 &&\r\n prt.length === 0) {\r\n return([]);\r\n }\r\n // initialize variables to be used in generating new consolidated defense objects\r\n let havepassdefense = false;\r\n let havepassrush = false;\r\n let haverushdefense = false;\r\n let havedefense = false;\r\n let havekickret = false;\r\n let havepuntret = false;\r\n let sortKey = 0;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let oppTeam = '';\r\n let gameWeek = 0;\r\n let games = 0;\r\n let gamesStarted = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let playeriddf = 0;\r\n let playeridpd = 0;\r\n let playeridpr = 0;\r\n let playeridrd = 0;\r\n let assistedTackles = 0;\r\n let avgTackleDepth = 0;\r\n let batDowns = 0;\r\n let breakups = 0;\r\n let brokenTackles = 0;\r\n let brokenTacklePct = 0;\r\n let catchableTgts = 0;\r\n let completionPct = 0;\r\n let completions = 0;\r\n let defensed = 0;\r\n let deflected = 0;\r\n let deservedCatchPct = 0;\r\n let droppedInts = 0;\r\n let drops = 0;\r\n let forcedFumbles = 0;\r\n let hitPct = 0;\r\n let hits = 0;\r\n let hurries = 0;\r\n let hurryPct = 0;\r\n let interceptions = 0;\r\n let knockdownPct = 0;\r\n let knockdowns = 0;\r\n let passesBatted = 0;\r\n let passesBattedPct = 0;\r\n let passRushes = 0;\r\n let passRushPct = 0;\r\n let passRushSacks = 0;\r\n let passSnaps = 0;\r\n let passYards = 0;\r\n let passYardsPerTgt = 0;\r\n let pointsSavedPassDef = 0;\r\n let pointsSavedPassRush = 0\r\n let pointsSavedRushDef = 0;\r\n let pressurePct = 0;\r\n let pressures = 0;\r\n let rushSnaps = 0;\r\n let rushTackles = 0;\r\n let rushYards = 0;\r\n let sackPct = 0;\r\n let sacks = 0;\r\n let soloTackles = 0;\r\n let tackleForLoss = 0;\r\n let tackles = 0;\r\n let targets = 0;\r\n let td = 0;\r\n let totCatchable = 0;\r\n let pntretAttempts = 0;\r\n let pntretYds = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYds = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n // initialize array to hold new consolidated defense objects\r\n var consolidatedData = [];\r\n // Consolidation step 1 - build one new consolidated object per defense object\r\n var i = 0;\r\n if (d.length !== 0){\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].gameDate === pd[i].gameDate) {\r\n break;\r\n }\r\n }\r\n if (j > -1){\r\n consolidatedData[j].havepassdefense = true;\r\n// consolidatedData[j].breakups = pd[i].totalBreakups; // 9/8/19 RA - doesn't always match the sum of breakups. Will calculate programatically\r\n consolidatedData[j].brokenTackles = pd[i].tackleBroken;\r\n consolidatedData[j].catchableTgts = pd[i].catchableTgts;\r\n consolidatedData[j].completionPct = pd[i].compPct;\r\n consolidatedData[j].completions = pd[i].completions;\r\n consolidatedData[j].deservedCatchPct = Tst2015(pd[i].season, pd[i].deservedCatchRateAllowed);\r\n consolidatedData[j].drops = pd[i].drops;\r\n consolidatedData[j].interceptions = pd[i].ints;\r\n consolidatedData[j].passYards = pd[i].yards;\r\n consolidatedData[j].passYardsPerTgt = pd[i].yardsPerTarget;\r\n consolidatedData[j].playeridpd = pd[i].playerId;\r\n consolidatedData[j].pointsSavedPassDef = pd[i].eps;\r\n consolidatedData[j].tackleForLoss = pd[i].tfl;\r\n consolidatedData[j].gamesStarted = pd[i].starts; // overriding value on defense endpoint which is incorrect\r\n consolidatedData[j].targets = pd[i].targets;\r\n consolidatedData[j].td = pd[i].td;\r\n consolidatedData[j].totCatchable = pd[i].totCatchable;\r\n }\r\n else{\r\n // populate corresponding passdefense fields\r\n havedefense = false;\r\n havepassdefense = true;\r\n havepassrush = false;\r\n haverushdefense = false;\r\n havekickret = false;\r\n havepuntret = false;\r\n sortKey = ((9999 - pd[i].season) * 1000000) + (pd[i].season * 100) + (pd[i].week);\r\n season = pd[i].season;\r\n playerName = pd[i].playerName;\r\n playerId = pd[i].playerId;\r\n positionName = pd[i].positionName;\r\n team = pd[i].teamName;\r\n matchup = pd[i].teamName.trim() + ' ' + pd[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = pd[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = pd[i].season.toString() + pd[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(pd[i].teamScore, pd[i].oppTeamScore);\r\n gameWeek = pd[i].week;\r\n gamesStarted = pd[i].starts;\r\n oppTeam = pd[i].oppTeamName;\r\n assistedTackles = 0;\r\n batDowns = 0;\r\n// breakups = pd[i].totalBreakups; // 9/8/19 RA - will calculate programatically\r\n brokenTackles = pd[i].tackleBroken;\r\n // brokenTacklePct = pd[i].brokenTacklePct;\r\n catchableTgts = pd[i].catchableTgts;\r\n completionPct = pd[i].compPct;\r\n completions = pd[i].completions;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = pd[i].deservedCatchRateAllowed;\r\n drops = pd[i].drops;\r\n droppedInts = 0;\r\n forcedFumbles = 0; // pd[i].forcedFumbles;\r\n interceptions = pd[i].ints;\r\n passYards = pd[i].yards;\r\n passYardsPerTgt = pd[i].yardsPerTarget;\r\n playeriddf = 0;\r\n playeridpd = pd[i].playerId;\r\n playeridpr = 0;\r\n playeridrd = 0;\r\n pointsSavedPassDef = pd[i].eps;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = 0;\r\n positionName = pd[i].positionName;\r\n soloTackles = 0;\r\n tackles = 0;\r\n tackleForLoss = pd[i].tfl;\r\n targets = pd[i].targets;\r\n td = pd[i].td;\r\n totCatchable = pd[i].totCatchable;\r\n pntretAttempts =0;\r\n pntretYds =0;\r\n pntretYdsPerAtt =0;\r\n pntretTD =0;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n havekickret,\r\n havepuntret,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n soloTackles,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n }\r\n }\r\n // Consolidation step 3 - build new or updated existing consolidated object per passrush object\r\n j = -1;\r\n if (pr.length !== 0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].gameDate === pr[i].gameDate) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n consolidatedData[j].havepassrush = true;\r\n consolidatedData[j].passesBatted = pr[i].passesBatted;\r\n consolidatedData[j].passRushes = pr[i].passRushes;\r\n consolidatedData[j].passRushPct = pr[i].passSnaps ? (NullTst(pr[i].passRushes)/pr[i].passSnaps)*100 : 0;\r\n consolidatedData[j].passRushSacks = pr[i].combinedSacks;\r\n consolidatedData[j].passSnaps = pr[i].passSnaps;\r\n consolidatedData[j].playeridpr = pr[i].playerId;\r\n consolidatedData[j].pointsSavedPassRush = pr[i].eps;\r\n consolidatedData[j].pressurePct = pr[i].pressurePct*100;\r\n consolidatedData[j].pressures = pr[i].pressures;\r\n consolidatedData[j].sackPct = pr[i].sackPct*100;\r\n consolidatedData[j].sacks = pr[i].combinedSacks;\r\n consolidatedData[j].season = pr[i].season;\r\n // consolidatedData[j].tackles += pr[i].tackles; // according to Trish, passrush tackles duplicates tackles in other endpoints\r\n if (pr[i].passRushes) {\r\n consolidatedData[j].hitPct = (pr[i].hits/pr[i].passRushes)*100;\r\n consolidatedData[j].hurryPct = (pr[i].hurriedPasser/pr[i].passRushes)*100;\r\n consolidatedData[j].knockdownPct = (pr[i].knockDownPasser/pr[i].passRushes)*100;\r\n consolidatedData[j].passesBattedPct = (pr[i].passesBatted/pr[i].passRushes)*100;\r\n } else {\r\n consolidatedData[j].hitPct = 0;\r\n consolidatedData[j].hurryPct = 0;\r\n consolidatedData[j].knockdownPct = 0;\r\n consolidatedData[j].passesBattedPct = 0;\r\n }\r\n } else {\r\n // if no match, populate corresponding passrush fields and initialize the rest then add object to array\r\n havedefense = false;\r\n havepassdefense = false;\r\n havepassrush = true;\r\n haverushdefense = false;\r\n havekickret = false;\r\n havepuntret = false;\r\n sortKey = ((9999 - pr[i].season) * 1000000) + (pr[i].season * 100) + (pr[i].week);\r\n season = pr[i].season;\r\n playerName = pr[i].playerName;\r\n playerId = pr[i].playerId;\r\n positionName = pr[i].positionName;\r\n team = pr[i].teamName;\r\n matchup = pr[i].teamName.trim() + ' ' + pr[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = pr[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = pr[i].season.toString() + pr[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(pr[i].teamScore, pr[i].oppTeamScore);\r\n gameWeek = pr[i].week;\r\n gamesStarted = pr[i].starts;\r\n oppTeam = pr[i].oppTeamName;\r\n assistedTackles = 0;\r\n avgTackleDepth = 0;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = 0;\r\n brokenTacklePct = 0;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0; // pr[i].ff;\r\n hits = 0;\r\n hurries = 0;\r\n interceptions = 0;\r\n knockdowns = 0;\r\n passesBatted = pr[i].passesBatted;\r\n passRushes = pr[i].passRushes;\r\n passRushPct = pr[i].passSnaps ? (NullTst(pr[i].passRushes)/pr[i].passSnaps)*100 : 0;\r\n passRushSacks = pr[i].combinedSacks;\r\n passSnaps = pr[i].passSnaps;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = pr[i].playerId;\r\n playeridpr = pr[i].playerId;\r\n playeridrd = 0;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = pr[i].eps;\r\n pointsSavedRushDef = 0;\r\n pressurePct = pr[i].pressurePct*100;\r\n pressures = Tst2015(pr[i].season,pr[i].pressures);\r\n rushSnaps = 0;\r\n rushTackles = 0;\r\n rushYards = 0;\r\n sackPct = pr[i].sackPct*100;\r\n sacks = pr[i].combinedSacks;\r\n soloTackles = 0;\r\n tackleForLoss = 0;\r\n // tackles = pr[i].tackles; // according to Trish, passrush tackles duplicates tackles in other endpoints\r\n tackles = 0;\r\n targets = 0;\r\n td = 0;\r\n totCatchable = 0;\r\n if (passRushes) {\r\n hitPct = (pr[i].hits/pr[i].passRushes)*100;\r\n hurryPct = (pr[i].hurriedPasser/pr[i].passRushes)*100;\r\n knockdownPct = (pr[i].knockDownPasser/pr[i].passRushes)*100;\r\n passesBattedPct = (pr[i].passesBatted/pr[i].passRushes)*100;\r\n } else {\r\n hitPct = 0;\r\n hurryPct = 0;\r\n knockdownPct = 0;\r\n passesBattedPct = 0;\r\n }\r\n pntretAttempts =0;\r\n pntretYds =0;\r\n pntretYdsPerAtt =0;\r\n pntretTD =0;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n havekickret,\r\n havepuntret,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n soloTackles,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n }\r\n } \r\n // Consolidation step 4 - build new or updated existing consolidated object per rushdefense object\r\n if (rd.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].gameDate === rd[i].gameDate) {\r\n break;\r\n }\r\n }\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n // if (rd[i].games) {\r\n if (j > -1) {\r\n consolidatedData[j].haverushdefense = true;\r\n consolidatedData[j].avgTackleDepth = rd[i].avgTackleDepth;\r\n consolidatedData[j].brokenTackles += rd[i].tackleBroken;\r\n consolidatedData[j].playeridrd = rd[i].playerId;\r\n consolidatedData[j].pointsSavedRushDef = rd[i].eps;\r\n consolidatedData[j].rushSnaps = rd[i].rushSnaps;\r\n consolidatedData[j].rushTackles = rd[i].combinedTackles;\r\n consolidatedData[j].rushYards = rd[i].totalYards;\r\n if (consolidatedData[j].tackleForLoss !== null) {\r\n consolidatedData[j].tackleForLoss += NullTst(rd[i].tfl); // remove *2 when backend fixed\r\n } else {\r\n consolidatedData[j].tackleForLoss = (rd[i].tfl); // remove *2 when backend fixed\r\n }\r\n // if no match, populate corresponding rushdefense fields and initialize the rest then add object to array\r\n } else {\r\n havepassdefense = false;\r\n havepassrush = false;\r\n haverushdefense = true;\r\n havedefense = false;\r\n havekickret = false;\r\n havepuntret = false;\r\n sortKey = ((9999 - rd[i].season) * 1000000) + (rd[i].season * 100) + (rd[i].week);\r\n season = rd[i].season;\r\n playerName = rd[i].playerName;\r\n playerId = rd[i].playerId;\r\n positionName = rd[i].positionName;\r\n team = rd[i].teamName;\r\n matchup = rd[i].teamName.trim() + ' ' + rd[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = rd[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = rd[i].season.toString() + rd[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(rd[i].teamScore, rd[i].oppTeamScore);\r\n gameWeek = rd[i].week;\r\n gamesStarted = rd[i].starts;\r\n oppTeam = rd[i].oppTeamName;\r\n assistedTackles = 0;\r\n avgTackleDepth = rd[i].avgTackleDepth;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = rd[i].tackleBroken;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0; // rd[i].ff;\r\n hitPct = 0;\r\n hits = 0;\r\n hurries = 0;\r\n hurryPct = 0;\r\n interceptions = 0;\r\n knockdownPct = 0;\r\n knockdowns = 0;\r\n passesBatted = 0;\r\n passesBattedPct = 0;\r\n passRushes = 0;\r\n passRushPct = 0;\r\n passRushSacks = 0;\r\n passSnaps = 0;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = 0;\r\n playeridpr = 0;\r\n playeridrd = rd[i].playerId;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = rd[i].eps;\r\n pressurePct = 0;\r\n pressures = 0;\r\n rushSnaps = rd[i].rushSnaps;\r\n rushTackles = rd[i].combinedTackles;\r\n rushYards = rd[i].totalYards;\r\n sackPct = 0;\r\n sacks = 0;\r\n soloTackles = 0;\r\n tackleForLoss = rd[i].tfl;\r\n tackles = rd[i].combinedTackles;\r\n targets = 0;\r\n td = 0;\r\n catchableTgts = 0;\r\n pntretAttempts =0;\r\n pntretYds =0;\r\n pntretYdsPerAtt =0;\r\n pntretTD =0;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n havekickret,\r\n havepuntret,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n soloTackles,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n // }\r\n }\r\n }\r\n // Consolidation step 5 - build new or updated existing consolidated object per kick return object\r\n if (krt.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].gameDate === krt[i].gameDate) {\r\n break;\r\n }\r\n }\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n if (j > -1) {\r\n consolidatedData[j].kickretAttempts = krt[i].attempts;\r\n consolidatedData[j].kickretYds = krt[i].yards;\r\n consolidatedData[j].kickretYdsPerAtt = krt[i].attempts ? krt[i].yards/krt[i].attempts : 0;\r\n consolidatedData[j].kickretTD = krt[i].tDs;\r\n // if no match, populate corresponding rushdefense fields and initialize the rest then add object to array\r\n } else {\r\n havepassdefense = false;\r\n havepassrush = false;\r\n haverushdefense = true;\r\n havedefense = false;\r\n havekickret = false;\r\n havepuntret = false;\r\n sortKey = ((9999 - krt[i].season) * 1000000) + (krt[i].season * 100) + (krt[i].week);\r\n season = krt[i].season;\r\n playerName = krt[i].playerName;\r\n playerId = krt[i].playerId;\r\n positionName = krt[i].positionName;\r\n team = krt[i].teamName;\r\n matchup = krt[i].teamName.trim() + ' ' + krt[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = krt[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = krt[i].season.toString() + krt[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(krt[i].teamScore, krt[i].oppTeamScore);\r\n gameWeek = krt[i].week;\r\n gamesStarted = krt[i].starts;\r\n oppTeam = krt[i].oppTeamName;\r\n assistedTackles = 0;\r\n avgTackleDepth = 0;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = 0;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0;\r\n hitPct = 0;\r\n hits = 0;\r\n hurries = 0;\r\n hurryPct = 0;\r\n interceptions = 0;\r\n knockdownPct = 0;\r\n knockdowns = 0;\r\n passesBatted = 0;\r\n passesBattedPct = 0;\r\n passRushes = 0;\r\n passRushPct = 0;\r\n passRushSacks = 0;\r\n passSnaps = 0;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = 0;\r\n playeridpr = 0;\r\n playeridrd = krt[i].playerId;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = 0;\r\n pressurePct = 0;\r\n pressures = 0;\r\n rushSnaps = 0;\r\n rushTackles = 0;\r\n rushYards = 0;\r\n sackPct = 0;\r\n sacks = 0;\r\n season = krt[i].season;\r\n soloTackles = 0;\r\n tackleForLoss = 0;\r\n tackles = 0;\r\n targets = 0;\r\n td = 0;\r\n catchableTgts = 0;\r\n pntretAttempts = 0;\r\n pntretYds = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = krt[i].attempts;\r\n kickretYds = krt[i].yards;\r\n kickretYdsPerAtt = krt[i].attempts ? krt[i].yards/krt[i].attempts : 0;\r\n kickretTD = krt[i].tDs;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n havekickret,\r\n havepuntret,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n soloTackles,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n // }\r\n }\r\n }\r\n // Consolidation step 6 - build new or updated existing consolidated object per punt return object\r\n if (prt.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (consolidatedData[j].gameDate === prt[i].gameDate) {\r\n break;\r\n }\r\n }\r\n // if matching object is found update(=)/accumulate(+=) fields as appropriate\r\n if (j > -1) {\r\n consolidatedData[j].pntretAttempts = prt[i].attempts;\r\n consolidatedData[j].pntretYds = prt[i].yards;\r\n consolidatedData[j].pntretYdsPerAtt = prt[i].attempts ? prt[i].yards/prt[i].attempts : 0;\r\n consolidatedData[j].pntretTD = prt[i].tDs;\r\n // if no match, populate corresponding rushdefense fields and initialize the rest then add object to array\r\n } else {\r\n havepassdefense = false;\r\n havepassrush = false;\r\n haverushdefense = true;\r\n havedefense = false;\r\n havekickret = false;\r\n havepuntret = false;\r\n sortKey = ((9999 - prt[i].season) * 1000000) + (prt[i].season * 100) + (prt[i].week);\r\n season = prt[i].season;\r\n playerName = prt[i].playerName;\r\n playerId = prt[i].playerId;\r\n positionName = prt[i].positionName;\r\n team = prt[i].teamName;\r\n matchup = prt[i].teamName.trim() + ' ' + prt[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = prt[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = prt[i].season.toString() + prt[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(prt[i].teamScore, prt[i].oppTeamScore);\r\n gameWeek = prt[i].week;\r\n gamesStarted = prt[i].starts;\r\n oppTeam = prt[i].oppTeamName;\r\n assistedTackles = 0;\r\n avgTackleDepth = 0;\r\n batDowns = 0;\r\n breakups = 0;\r\n brokenTackles = 0;\r\n catchableTgts = 0;\r\n completionPct = 0;\r\n completions = 0;\r\n defensed = 0;\r\n deflected = 0;\r\n deservedCatchPct = 0;\r\n drops = 0;\r\n droppedInts = 0;\r\n forcedFumbles = 0;\r\n hitPct = 0;\r\n hits = 0;\r\n hurries = 0;\r\n hurryPct = 0;\r\n interceptions = 0;\r\n knockdownPct = 0;\r\n knockdowns = 0;\r\n passesBatted = 0;\r\n passesBattedPct = 0;\r\n passRushes = 0;\r\n passRushPct = 0;\r\n passRushSacks = 0;\r\n passSnaps = 0;\r\n passYards = 0;\r\n passYardsPerTgt = 0;\r\n playeriddf = 0;\r\n playeridpd = 0;\r\n playeridpr = 0;\r\n playeridrd = prt[i].playerId;\r\n pointsSavedPassDef = 0;\r\n pointsSavedPassRush = 0;\r\n pointsSavedRushDef = 0;\r\n pressurePct = 0;\r\n pressures = 0;\r\n rushSnaps = 0;\r\n rushTackles = 0;\r\n rushYards = 0;\r\n sackPct = 0;\r\n sacks = 0;\r\n soloTackles = 0;\r\n tackleForLoss = 0;\r\n tackles = 0;\r\n targets = 0;\r\n td = 0;\r\n catchableTgts = 0;\r\n pntretAttempts = prt[i].attempts;\r\n pntretYds = prt[i].yards;\r\n pntretYdsPerAtt = prt[i].attempts ? prt[i].yards/prt[i].attempts : 0;\r\n pntretTD = prt[i].tDs;\r\n kickretAttempts = 0;\r\n kickretYds = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n // add new consolidated object to the array\r\n consolidatedData.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n gamesStarted,\r\n oppTeam,\r\n havepassdefense,\r\n havepassrush,\r\n haverushdefense,\r\n havedefense,\r\n havekickret,\r\n havepuntret,\r\n assistedTackles,\r\n avgTackleDepth,\r\n catchableTgts,\r\n batDowns,\r\n breakups,\r\n brokenTackles,\r\n brokenTacklePct,\r\n completionPct,\r\n completions,\r\n defensed,\r\n deflected,\r\n deservedCatchPct,\r\n drops,\r\n droppedInts,\r\n forcedFumbles,\r\n hitPct,\r\n hits,\r\n hurries,\r\n hurryPct,\r\n interceptions,\r\n knockdownPct,\r\n knockdowns,\r\n passesBatted,\r\n passesBattedPct,\r\n passRushes,\r\n passRushPct,\r\n passRushSacks,\r\n passSnaps,\r\n passYards,\r\n passYardsPerTgt,\r\n playeriddf,\r\n playeridpd,\r\n playeridpr,\r\n playeridrd,\r\n pointsSavedPassDef,\r\n pointsSavedPassRush,\r\n pointsSavedRushDef,\r\n pressurePct,\r\n pressures,\r\n rushSnaps,\r\n rushTackles,\r\n rushYards,\r\n sackPct,\r\n sacks,\r\n soloTackles,\r\n tackleForLoss,\r\n tackles,\r\n targets,\r\n td,\r\n totCatchable,\r\n pntretAttempts,\r\n pntretYds,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYds,\r\n kickretYdsPerAtt,\r\n kickretTD\r\n });\r\n }\r\n // }\r\n }\r\n }\r\n // sort consolidated objects by season\r\n //make final adjustments as needed\r\n if (consolidatedData.length !== 0) {\r\n consolidatedData.sort((a, b) => (a.sortKey > b.sortKey) ? 1 : -1);\r\n for (i = 0; i < consolidatedData.length; i++) {\r\n if (consolidatedData[i].season === 2015) {\r\n //fields displayed in LB and DT summary that are partially or fully sourced from passrush are not valid in 2015 except sacks\r\n consolidatedData[i].passesBatted = null;\r\n consolidatedData[i].hurries = null\r\n consolidatedData[i].hits = null;\r\n consolidatedData[i].knockdowns = null;\r\n consolidatedData[i].pressures = null;\r\n }\r\n }\r\n }\r\n return(consolidatedData); // return the result array\r\n}\r\n\r\nexport default GameLogDefenseBuildData;","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullDiv, NullMax, DispFunc, GameResult} from '../common/CommonFunctions';\r\nimport { gameKicking } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\n\r\nclass GameLogKPKickingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.kickingstats = this.props.kickingstats;\r\n this.data = [];\r\n let gameInfoCols = null;\r\n this.colNum = 0;\r\n this.maxPlayerSeason = ''\r\n\r\n // Set game information columns\r\n gameInfoCols = [\r\n {\r\n title: \"Date\", field: \"gameSeasonDateSSSSYYYYMMDD\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return (cell.getValue().substr(9, 1) === 'T' ? 'Total' : parseInt(cell.getValue().substr(9, 2)) + '/' + parseInt(cell.getValue().substr(12, 2)));\r\n },\r\n width: `${gameKicking[this.colNum++]}`\r\n },\r\n {\r\n title: \"Wk\", field: \"gameWeek\", cssClass: \"single-row-header small-column-center\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gameKicking[this.colNum++]}`,\r\n // formatter: function (cell, formatterParams, onRendered) {\r\n // return cell = 99 ? '' : cell;\r\n // }\r\n },\r\n {\r\n title: \"Teams\", field: \"matchup\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gameKicking[this.colNum++]}`\r\n },\r\n {\r\n title: \"Score\", field: \"gameResult\", cssClass: \"single-row-header break textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gameKicking[this.colNum++]}`\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column break\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gameKicking[this.colNum++]}`\r\n }\r\n ];\r\n\r\n // Set Remaining Columns\r\n this.cols = [\r\n { title: \"\",\r\n columns: gameInfoCols\r\n },\r\n {\r\n title: \"Overall\",\r\n columns:[\r\n {\r\n title: \"Made\", field: \"overallMade\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Att\", field: \"overallAttempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"overallPct\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Long\", field: \"overallLong\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pts\", field: \"overallPoints\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"1-29 Yds\",\r\n columns:[ \r\n {\r\n title: \"Made\", field: \"fg1to29Made\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Att\", field: \"fg1to29Attempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"fg1to29Pct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"30-39 Yds\",\r\n columns:[ \r\n {\r\n title: \"Made\", field: \"fg30to39Made\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Att\", field: \"fg30to39Attempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Pct\", field: \"fg30to39Pct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n title: \"40-49 Yds\",\r\n columns: [\r\n {\r\n title: \"Made\", field: \"fg40to49Made\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Att\", field: \"fg40to49Attempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"fg40to49Pct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n title: \"50+ Yds\",\r\n columns: [\r\n { \r\n title: \"Made\", field: \"fg50plusMade\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Att\", field: \"fg50plusAttempts\", cssClass: \"single-row-header\",\r\n width: `${gameKicking[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"fg50plusPct\", cssClass: \"single-row-header break\",\r\n width: `${gameKicking[this.colNum++]}`,\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ]\r\n },\r\n {\r\n title: \"PAT\",\r\n columns: [\r\n { \r\n title: \"Made\", field: \"patMade\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Att\", field: \"patAttempts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n { \r\n title: \"Pct\", field: \"patPct\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Tot Pts Earned\", field: \"PointsEarned\",\r\n headerSortStartingDir: \"desc\", headerSort: false, \r\n titleFormatter:\"textarea\",\r\n width: `${gameKicking[this.colNum++]}`,\r\n formatter: function(cell, formatterParams, onRendered){\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n ]\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let kickingstats = this.kickingstats;\r\n let sortKey = 0;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let oppTeam = '';\r\n let gameWeek = 0;\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let overallMade = 0;\r\n let overallAttempts = 0;\r\n let overallPct = 0;\r\n let overallLong = 0;\r\n let overallPoints = 0;\r\n let fg1to29Made = 0;\r\n let fg1to29Attempts = 0;\r\n let fg1to29Pct = 0;\r\n let fg30to39Made = 0;\r\n let fg30to39Attempts = 0;\r\n let fg30to39Pct = 0;\r\n let fg40to49Made = 0;\r\n let fg40to49Attempts = 0;\r\n let fg40to49Pct = 0;\r\n let fg50plusMade = 0;\r\n let fg50plusAttempts = 0;\r\n let fg50plusPct = 0;\r\n let patMade = 0;\r\n let patAttempts = 0;\r\n let patPct = 0;\r\n let PointsEarned = 0;\r\n\r\n let rowdata = [];\r\n // create rowdata[] object for each row in kickingstats data\r\n if(kickingstats.length !==0) {\r\n for (var i = 0; i < kickingstats.length; i++) {\r\n sortKey = (9999 - kickingstats[i].season) * 1000000 + kickingstats[i].season * 100 + kickingstats[i].week; //XXXXYYYYWW\r\n season = kickingstats[i].season;\r\n playerName = kickingstats[i].playerName;\r\n playerId = kickingstats[i].playerId;\r\n positionName = kickingstats[i].positionName;\r\n team = kickingstats[i].teamName;\r\n matchup = kickingstats[i].teamName.trim() + ' ' + kickingstats[i].oppTeamName.trim();\r\n games = 1;\r\n gameDate = kickingstats[i].gameDate;\r\n gameSeasonDateSSSSYYYYMMDD = kickingstats[i].season.toString() + kickingstats[i].gameDate.substring(0, 10);\r\n gameResult = GameResult(kickingstats[i].teamScore, kickingstats[i].oppTeamScore);\r\n gameWeek = kickingstats[i].week;\r\n overallMade = kickingstats[i].fieldGoalMakes;\r\n overallAttempts = kickingstats[i].fieldGoalAtt;\r\n overallPoints = (kickingstats[i].fieldGoalMakes * 3) + kickingstats[i].extraPointMakes;;\r\n overallLong = kickingstats[i].long;\r\n fg1to29Made = NullSum(kickingstats[i].fgMade1to19,kickingstats[i].fgMade20to29);\r\n fg1to29Attempts = NullSum(kickingstats[i].fgAtt1to19,kickingstats[i].fgAtt20to29);\r\n fg30to39Made = kickingstats[i].fgMade30to39;\r\n fg30to39Attempts = kickingstats[i].fgAtt30to39;\r\n fg40to49Made = kickingstats[i].fgMade40to49;\r\n fg40to49Attempts = kickingstats[i].fgAtt40to49;\r\n fg50plusMade = kickingstats[i].fgMade50Plus;\r\n fg50plusAttempts = kickingstats[i].fgAtt50Plus;\r\n patMade = kickingstats[i].extraPointMakes;\r\n patAttempts = kickingstats[i].extraPointAtt;\r\n overallPct = NullDiv(overallMade,overallAttempts)*100;\r\n fg1to29Pct = NullDiv(fg1to29Made,fg1to29Attempts)*100;\r\n fg30to39Pct = NullDiv(fg30to39Made,fg30to39Attempts)*100;\r\n fg40to49Pct = NullDiv(fg40to49Made,fg40to49Attempts)*100;\r\n fg50plusPct = NullDiv(fg50plusMade,fg50plusAttempts)*100;\r\n patPct = NullDiv(patMade,patAttempts)*100;\r\n PointsEarned = kickingstats[i].eps;\r\n rowdata.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n oppTeam,\r\n overallMade,\r\n overallAttempts,\r\n overallPct,\r\n overallLong,\r\n overallPoints,\r\n fg1to29Made,\r\n fg1to29Attempts,\r\n fg1to29Pct,\r\n fg30to39Made,\r\n fg30to39Attempts,\r\n fg30to39Pct,\r\n fg40to49Made,\r\n fg40to49Attempts,\r\n fg40to49Pct,\r\n fg50plusMade,\r\n fg50plusAttempts,\r\n fg50plusPct,\r\n patMade,\r\n patAttempts,\r\n patPct,\r\n PointsEarned\r\n });\r\n }\r\n }\r\n if (rowdata.length !== 0) {\r\n rowdata.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // orders rows by sortkey\r\n this.SumData(rowdata); // insert seasonal totals\r\n }\r\n this.data = rowdata;\r\n }\r\n\r\n SumData(d){\r\n let sortKey = 0;\r\n let season = d[0].season;\r\n let playerName = '';\r\n let playerId = '';\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gameWeek = '';\r\n let oppTeam = ''\r\n let overallMade = 0;\r\n let overallAttempts = 0;\r\n let overallPct = 0;\r\n let overallLong = 0;\r\n let overallPoints = 0;\r\n let fg1to29Made = 0;\r\n let fg1to29Attempts = 0;\r\n let fg1to29Pct = 0;\r\n let fg30to39Made = 0;\r\n let fg30to39Attempts = 0;\r\n let fg30to39Pct = 0;\r\n let fg40to49Made = 0;\r\n let fg40to49Attempts = 0;\r\n let fg40to49Pct = 0;\r\n let fg50plusMade = 0;\r\n let fg50plusAttempts = 0;\r\n let fg50plusPct = 0;\r\n let patMade = 0;\r\n let patAttempts = 0;\r\n let patPct = 0;\r\n let PointsEarned = 0;\r\n let rowcount = d.length;\r\n for (var i = 0; i < rowcount; i++) {\r\n if (season !== d[i].season) {\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n overallPct = NullDiv(overallMade, overallAttempts) * 100;\r\n fg1to29Pct = NullDiv(fg1to29Made, fg1to29Attempts) * 100;\r\n fg30to39Pct = NullDiv(fg30to39Made, fg30to39Attempts) * 100;\r\n fg40to49Pct = NullDiv(fg40to49Made, fg40to49Attempts) * 100;\r\n fg50plusPct = NullDiv(fg50plusMade, fg50plusAttempts) * 100;\r\n patPct = NullDiv(patMade, patAttempts) * 100;\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n oppTeam,\r\n overallMade,\r\n overallAttempts,\r\n overallPct,\r\n overallLong,\r\n overallPoints,\r\n fg1to29Made,\r\n fg1to29Attempts,\r\n fg1to29Pct,\r\n fg30to39Made,\r\n fg30to39Attempts,\r\n fg30to39Pct,\r\n fg40to49Made,\r\n fg40to49Attempts,\r\n fg40to49Pct,\r\n fg50plusMade,\r\n fg50plusAttempts,\r\n fg50plusPct,\r\n patMade,\r\n patAttempts,\r\n patPct,\r\n PointsEarned\r\n });\r\n season = d[i].season;\r\n playerName = '';\r\n playerId = '';\r\n positionName = '';\r\n team = '';\r\n matchup = '';\r\n games = 0;\r\n gameDate = '';\r\n gameSeasonDateSSSSYYYYMMDD = '';\r\n gameResult = '';\r\n gameWeek = '';\r\n oppTeam = ''\r\n overallMade = 0;\r\n overallAttempts = 0;\r\n overallPct = 0;\r\n overallLong = 0;\r\n overallPoints = 0;\r\n fg1to29Made = 0;\r\n fg1to29Attempts = 0;\r\n fg1to29Pct = 0;\r\n fg30to39Made = 0;\r\n fg30to39Attempts = 0;\r\n fg30to39Pct = 0;\r\n fg40to49Made = 0;\r\n fg40to49Attempts = 0;\r\n fg40to49Pct = 0;\r\n fg50plusMade = 0;\r\n fg50plusAttempts = 0;\r\n fg50plusPct = 0;\r\n patMade = 0;\r\n patAttempts = 0;\r\n patPct = 0;\r\n PointsEarned = 0;\r\n }\r\n games = NullSum(games, d[i].games);\r\n overallMade = NullSum(overallMade,d[i].overallMade);\r\n overallAttempts = NullSum(overallAttempts,d[i].overallAttempts);\r\n overallPoints = NullSum(overallPoints, (d[i].overallMade * 3));\r\n overallLong = NullMax(overallLong,d[i].overallLong);\r\n fg1to29Made = NullSum(fg1to29Made,d[i].fg1to29Made);\r\n fg1to29Attempts = NullSum(fg1to29Attempts,d[i].fg1to29Attempts);\r\n fg30to39Made = NullSum(fg30to39Made,d[i].fg30to39Made);\r\n fg30to39Attempts = NullSum(fg30to39Attempts,d[i].fg30to39Attempts);\r\n fg40to49Made = NullSum(fg40to49Made,d[i].fg40to49Made);\r\n fg40to49Attempts = NullSum(fg40to49Attempts,d[i].fg40to49Attempts);\r\n fg50plusMade = NullSum(fg50plusMade,d[i].fg50plusMade);\r\n fg50plusAttempts = NullSum(fg50plusAttempts,d[i].fg50plusAttempts);\r\n patMade = NullSum(patMade,d[i].patMade);\r\n patAttempts = NullSum(patAttempts, d[i].patAttempts);\r\n PointsEarned = NullBypassSum(PointsEarned, d[i].PointsEarned);\r\n }\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n overallPct = NullDiv(overallMade,overallAttempts)*100;\r\n fg1to29Pct = NullDiv(fg1to29Made,fg1to29Attempts)*100;\r\n fg30to39Pct = NullDiv(fg30to39Made,fg30to39Attempts)*100;\r\n fg40to49Pct = NullDiv(fg40to49Made,fg40to49Attempts)*100;\r\n fg50plusPct = NullDiv(fg50plusMade,fg50plusAttempts)*100;\r\n patPct = NullDiv(patMade,patAttempts)*100;\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n oppTeam,\r\n overallMade,\r\n overallAttempts,\r\n overallPct,\r\n overallLong,\r\n overallPoints,\r\n fg1to29Made,\r\n fg1to29Attempts,\r\n fg1to29Pct,\r\n fg30to39Made,\r\n fg30to39Attempts,\r\n fg30to39Pct,\r\n fg40to49Made,\r\n fg40to49Attempts,\r\n fg40to49Pct,\r\n fg50plusMade,\r\n fg50plusAttempts,\r\n fg50plusPct,\r\n patMade,\r\n patAttempts,\r\n patPct,\r\n PointsEarned\r\n });\r\n d.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // corrects for new season total rows\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n let maxPlayerSeason = this.data.length ? this.data[0].season : 0;\r\n pagination = null;\r\n paginationSize = 0;\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter: function (row) {\r\n var data = row.getData();\r\n if (data.gameSeasonDateSSSSYYYYMMDD.substr(9, 5) === 'Total') {\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n groupBy: function (row) {\r\n return row.gameSeasonDateSSSSYYYYMMDD.substr(0, 4);\r\n },\r\n groupHeader: function (groupKey, rowcount, data, group) {\r\n return groupKey + ' Season ';\r\n },\r\n groupStartOpen: function (groupKey, rowcount, data, group) {\r\n return groupKey === maxPlayerSeason.toString();\r\n },\r\n groupToggleElement: \"header\",\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
    \r\n
    Kicking
    \r\n
    (this.el = el)} />\r\n
    \r\n \r\n );\r\n }\r\n}\r\nexport default GameLogKPKickingTabulator;\r\n","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullMax, NullDiv, DispFunc, GameResult} from '../common/CommonFunctions';\r\nimport { gamePunting } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\n\r\nclass GameLogKPPuntingTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.puntingstats = this.props.puntingstats;\r\n this.data = [];\r\n let gameInfoCols = null;\r\n this.colNum = 0;\r\n this.maxPlayerSeason = ''\r\n\r\n // Set game information columns\r\n gameInfoCols = [\r\n {\r\n title: \"Date\", field: \"gameSeasonDateSSSSYYYYMMDD\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return (cell.getValue().substr(9, 1) === 'T' ? 'Total' : parseInt(cell.getValue().substr(9, 2)) + '/' + parseInt(cell.getValue().substr(12, 2)));\r\n },\r\n width: `${gamePunting[this.colNum++]}`\r\n },\r\n {\r\n title: \"Wk\", field: \"gameWeek\", cssClass: \"single-row-header small-column\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n // formatter: function (cell, formatterParams, onRendered) {\r\n // return cell = 99 ? '' : cell;\r\n // }\r\n },\r\n {\r\n title: \"Teams\", field: \"matchup\", cssClass: \"single-row-header textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`\r\n },\r\n {\r\n title: \"Score\", field: \"gameResult\", cssClass: \"single-row-header break textColumn\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`\r\n },\r\n {\r\n title: \"G\", field: \"games\", cssClass: \"single-row-header small-column break\",\r\n titleFormatter: \"html\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`\r\n }\r\n ];\r\n\r\n // Set Remaining Columns\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: gameInfoCols\r\n },\r\n {\r\n title: \"Punts\", field: \"punts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Yards\", field: \"puntYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"puntAvgYards\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Opp Ret\", field: \"puntsReturned\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, true, false);\r\n }\r\n },\r\n {\r\n title: \"Ret Yards\", field: \"returnYards\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Net Avg\", field: \"puntAvgNetYards\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 1, false, false);\r\n }\r\n },\r\n {\r\n title: \"Long\", field: \"long\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Blocks\", field: \"blockedPunts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Partial Blocks\", field: \"partialBlockedPunts\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter: \"textarea\",\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Fair Catches\", field: \"fCs\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter: \"textarea\",\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Touchbacks\", field: \"touchBacks\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter: \"textarea\",\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Inside 20\", field: \"puntsInside20\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n },\r\n {\r\n title: \"Tot Points Earned\", field: \"sumPointsEarned\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: false,\r\n titleFormatter: \"textarea\",\r\n width: `${gamePunting[this.colNum++]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ]\r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData(){\r\n let puntingstats = this.puntingstats;\r\n let sortKey = 0;\r\n let season = 0;\r\n let playerName = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let oppTeam = '';\r\n let gameWeek = 0;\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let punts = 0;\r\n let puntYards = 0;\r\n let puntAvgYards = 0;\r\n let puntsReturned = 0;\r\n let returnYards = 0;\r\n let netPuntYards = 0;\r\n let puntAvgNetYards = 0;\r\n let long = 0;\r\n let blockedPunts = 0;\r\n let partialBlockedPunts = 0;\r\n let fCs = 0;\r\n let touchBacks = 0;\r\n let puntsInside20 = 0;\r\n let sumPointsEarned = 0;\r\n\r\n let rowdata = [];\r\n // create rowdata[] object for each row in puntingstats data\r\n if (puntingstats.length !== 0){\r\n for (var i=0; i a.sortKey > b.sortKey ? 1 : -1); // orders rows by sortkey\r\n this.SumData(rowdata); // insert seasonal totals\r\n }\r\n this.data = rowdata;\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData(d) {\r\n let sortKey = 0;\r\n let season = d[0].season;\r\n let playerName = '';\r\n let playerId = '';\r\n let positionName = '';\r\n let team = '';\r\n let matchup = '';\r\n let games = 0;\r\n let gameDate = '';\r\n let gameSeasonDateSSSSYYYYMMDD = '';\r\n let gameResult = '';\r\n let gameWeek = '';\r\n let oppTeam = ''\r\n let punts = 0;\r\n let puntYards = 0;\r\n let puntsReturned = 0;\r\n let returnYards = 0;\r\n let netPuntYards=0;\r\n let long = 0;\r\n let blockedPunts = 0;\r\n let partialBlockedPunts = 0;\r\n let fCs = 0;\r\n let touchBacks = 0;\r\n let puntsInside20 = 0;\r\n let puntAvgYards = 0;\r\n let puntAvgNetYards = 0;\r\n let sumPointsEarned = 0;\r\n let rowcount = d.length;\r\n for (var i = 0; i < rowcount; i++) {\r\n if (season !== d[i].season) {\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n puntAvgYards = NullDiv(puntYards, punts);\r\n puntAvgNetYards = NullDiv(netPuntYards, punts - blockedPunts);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n oppTeam,\r\n punts,\r\n puntYards,\r\n puntAvgYards,\r\n puntsReturned,\r\n returnYards,\r\n netPuntYards,\r\n puntAvgNetYards,\r\n long,\r\n blockedPunts,\r\n partialBlockedPunts,\r\n fCs,\r\n touchBacks,\r\n puntsInside20,\r\n sumPointsEarned\r\n });\r\n season = d[i].season;\r\n playerName = '';\r\n playerId = '';\r\n positionName = '';\r\n team = '';\r\n matchup = '';\r\n games = 0;\r\n gameDate = '';\r\n gameSeasonDateSSSSYYYYMMDD = '';\r\n gameResult = '';\r\n gameWeek = '';\r\n oppTeam = ''\r\n punts = 0;\r\n puntYards = 0;\r\n puntsReturned = 0;\r\n returnYards = 0;\r\n netPuntYards = 0;\r\n long = 0;\r\n blockedPunts = 0;\r\n partialBlockedPunts = 0;\r\n fCs = 0;\r\n touchBacks = 0;\r\n puntsInside20 = 0;\r\n puntAvgYards = 0;\r\n puntAvgNetYards = 0;\r\n sumPointsEarned = 0;\r\n }\r\n games = NullSum(games, d[i].games);\r\n punts = NullSum(punts, d[i].punts);\r\n puntYards = NullSum(puntYards, d[i].puntYards);\r\n puntsReturned = NullSum(puntsReturned, d[i].puntsReturned);\r\n returnYards = NullSum(returnYards, d[i].returnYards);\r\n netPuntYards = NullSum(netPuntYards, d[i].netPuntYards);\r\n long = NullMax(long, d[i].long);\r\n blockedPunts = NullSum(blockedPunts, d[i].blockedPunts);\r\n partialBlockedPunts = NullSum(partialBlockedPunts, d[i].partialBlockedPunts);\r\n touchBacks = NullSum(touchBacks, d[i].touchBacks);\r\n fCs = NullSum(fCs, d[i].fCs);\r\n puntsInside20 = NullSum(puntsInside20, d[i].puntsInside20);\r\n sumPointsEarned = NullBypassSum(sumPointsEarned, d[i].sumPointsEarned);\r\n }\r\n sortKey = (9999 - season) * 1000000 + season * 100 + 99; //XXXXYYYY99\r\n gameSeasonDateSSSSYYYYMMDD = season.toString() + season.toString() + \" Total\";\r\n puntAvgYards = NullDiv(puntYards, punts);\r\n puntAvgNetYards = NullDiv(netPuntYards, punts - blockedPunts);\r\n d.push({\r\n sortKey,\r\n season,\r\n playerName,\r\n playerId,\r\n positionName,\r\n team,\r\n matchup,\r\n games,\r\n gameDate,\r\n gameSeasonDateSSSSYYYYMMDD,\r\n gameResult,\r\n gameWeek,\r\n oppTeam,\r\n punts,\r\n puntYards,\r\n puntAvgYards,\r\n puntsReturned,\r\n returnYards,\r\n netPuntYards,\r\n puntAvgNetYards,\r\n long,\r\n blockedPunts,\r\n partialBlockedPunts,\r\n fCs,\r\n touchBacks,\r\n puntsInside20,\r\n sumPointsEarned\r\n });\r\n d.sort((a, b) => a.sortKey > b.sortKey ? 1 : -1); // corrects for new season total rows\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n let maxPlayerSeason = this.data.length ? this.data[0].season : 0;\r\n pagination = null;\r\n paginationSize = 0;\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter: function (row) {\r\n var data = row.getData();\r\n if (data.gameSeasonDateSSSSYYYYMMDD.substr(9, 5) === 'Total') {\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n groupBy: function (row) {\r\n return row.gameSeasonDateSSSSYYYYMMDD.substr(0, 4);\r\n },\r\n groupHeader: function (groupKey, rowcount, data, group) {\r\n return groupKey + ' Season ';\r\n },\r\n groupStartOpen: function (groupKey, rowcount, data, group) {\r\n return groupKey === maxPlayerSeason.toString();\r\n },\r\n groupToggleElement: \"header\",\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
    \r\n
    Punting
    \r\n
    (this.el = el)} />\r\n
    \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default GameLogKPPuntingTabulator;","import React, { Component } from 'react';\r\nimport GameLogQBSummaryTabulator from './components/pageQB/GameLogQBSummaryTabulator';\r\nimport GameLogOLSummaryTabulator from './components/pageOL/GameLogOLSummaryTabulator';\r\nimport GameLogWRTERBFBSummaryTabulator from './components/pageRBWR/GameLogWRTERBFBSummaryTabulator';\r\nimport GameLogDefenseSummaryTabulator from './components/pageDefense/GameLogDefenseSummaryTabulator';\r\nimport GameLogDefenseBuildData from './components/pageDefense/GameLogDefenseBuildData';\r\nimport GameLogKPKickingTabulator from './components/pageKP/GameLogKPKickingTabulator';\r\nimport GameLogKPPuntingTabulator from './components/pageKP/GameLogKPPuntingTabulator';\r\nimport PlayerBio from './components/common/PlayerBio';\r\nimport DropDown from './components/common/DropDown';\r\nimport {fetch as fetchPolyfill} from 'whatwg-fetch';\r\nimport { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\n//import TableDefenseBuildData from './components/pageDefense/TableDefenseBuildData';\r\nlet InstrumentationKey = \"c6c148de-7a33-4f4e-81d1-f0522c53f12f\";\r\nlet appInsights = new ApplicationInsights({config: {\r\n instrumentationKey: InstrumentationKey,\r\n maxBatchInterval: 0\r\n}});\r\nappInsights.loadAppInsights();\r\n\r\n//////////////////////////////////////////////////////\r\n// PolyFill stuff //\r\n//////////////////////////////////////////////////////\r\nif (!window.fetch) {\r\n window.fetch = fetchPolyfill;\r\n}\r\n\r\nif (!Array.prototype.find) {\r\n // eslint-disable-next-line\r\n Object.defineProperty(Array.prototype, 'find', {\r\n value: function(predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n \r\n var o = Object(this);\r\n \r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n \r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n \r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n \r\n // 5. Let k be 0.\r\n var k = 0;\r\n \r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n \r\n // 7. Return undefined.\r\n return undefined;\r\n }\r\n });\r\n }\r\n//////////////////////////////////////////////////////\r\n// End PolyFill stuff //\r\n//////////////////////////////////////////////////////\r\n\r\nclass PlayerGameLogs extends Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n\r\n this.state = {\r\n searchUserInput: '', // user input from autocomplete. triggers selection list updates\r\n selectedPlayerID: '' // set to true when API calls complete for a given player. triggers page update\r\n }\r\n this.version = '2022-09-13a';\r\n this.alldependenciescomplete = false;\r\n this.loadingmessage = 'Loading...';\r\n this.passingstats =[]; // passing data retrieved from data API \r\n this.rushingstats=[]; // rushing data retrieved from data API\r\n this.accuracystats=[]; // accuracy data retrieved from data API\r\n this.receivingstats=[]; // receiving data retrieved from data API\r\n this.defensestats = []; // defense data retrieved from data API\r\n this.havedefense = false;\r\n this.passdefensestats = []; // passdefense data retrieved from data API\r\n this.havepassdefense = false;\r\n this.passrushstats = []; // passrush data retrieved from data API\r\n this.havepassrush = false;\r\n this.rushdefensestats = []; // rushdefense data retrieved from data API\r\n this.haverushdefense = false;\r\n this.kickingstats=[]; // kicking data retrieved from data API\r\n this.kickretstats = []; // kickret data retrieved from data API\r\n this.havekickret = false;\r\n this.puntingstats=[]; // punting data retrieved from data API\r\n this.puntretstats = []; // puntret data retrieved from data API\r\n this.havepuntret = false;\r\n this.blockingstats=[]; // blocking data retrieved from data API\r\n this.globalstats=[]; // global stats regardless of position - currently not in use\r\n this.defenseData=[]; // array to consolidate defense data - unique to defense due to condiional layout\r\n this.token = ''; // token value retrieved from authorization API and used for data API\r\n this.playerSelectionList = []; // all NFL players to be listed in the Autocomplete dropdown\r\n this.asyncAPIcount = 0; // number of API calls completed for a given player position\r\n this.asyncAPIcallstocomplete = 0; // number of API call to be completed for a given player position\r\n this.playername = '(No player selected)'; // player name to be displayed on page\r\n this.playerposition = ''; // indicates which stats to be displayed. also displayed on page. \r\n this.playerid = 0; // populated on autocomplete choice and used to retrieve data\r\n this.usererrormessage = ''; // error message to be displayed on the page in place of stats\r\n this.pagelayout = ''; // indicate which type of page to be rendered\r\n this.scrollY = 0;\r\n this.targetPage = 'playergamelogs';\r\n //console.log(\"0 - Initialize PlayerGameLogs\");\r\n\r\n this.reScroll = this.reScroll.bind(this);\r\n\r\n if (this.props.match.params.id && !isNaN(this.props.match.params.id)){\r\n this.playerid = this.props.match.params.id; //id of player in route\r\n }\r\n else{\r\n this.playerid = 5048;\r\n }\r\n }\r\n\r\n // called by React when the page initially renders. It invokes a chain\r\n // of three API calls. Note that the page has already rendered at this\r\n // point so the API calls occur in the background after the user sees\r\n // the page. It should complete before the user begins typing in the\r\n // input box. Any delay would be experienced by the user as a delay in\r\n // dropdown being displayed as the user types into the player selection\r\n // input box. If this chain fails the dropdown will not work and the\r\n // page must be reloaded/refreshed by the user so that the intial API\r\n // calls are reinvoked.\r\n //\r\n // possible improvement: display error message and action on the page upon API failures\r\n //\r\n componentDidMount() {\r\n //console.log(\"0 - componentDidMount\");\r\n window.addEventListener('scroll', this.handleScroll.bind(this));\r\n this.getSecurityToken();\r\n //this.loadNFLPlayers();\r\n }\r\n\r\n componentWillUnmount(){\r\n window.removeEventListener('scroll', this.handleScroll.bind(this));\r\n }\r\n\r\n // There are three API calls that must complete in sequence when this page loads:\r\n //\r\n // 1) obtain token from security API\r\n // 2) use token to access the data API\r\n // 3) load NFL players to an array for user selection\r\n //\r\n // API chaining is accomplished by each API routine invoking the next on successfull completion:\r\n // 1) getSecurityToken --> 2) accessNFLdata --> 3) loadNFLplayers\r\n //\r\n getSecurityToken = () => {\r\n //console.log(\"0 - getSecurityToken\");\r\n this.executeHTTPRequestPost(\r\n 'https://auth.sportsinfosolutions.com/connect/token',\r\n (response) => {\r\n this.token = response.access_token;\r\n this.getGlobalStats();\r\n \r\n //this.accessNFLdata();\r\n },\r\n (error) => {\r\n console.log(\"getSecurityToken\",error);\r\n }\r\n )\r\n }\r\n \r\n // Gain access to NFL data API using the token obtained from the secutiry API\r\n getAllPlayers = (event) => {\r\n //console.log(\"0 - getAllPlayers\");\r\n const reqUrl = 'https://api.sportsinfosolutions.com/api/v1/nfl/players/allplayerswithteamnew';\r\n this.executeHTTPRequest(\r\n reqUrl,\r\n 'get',\r\n (response) => {\r\n this.playerSelectionList = response;\r\n //this.displayFeaturedPlayer(); // generate report with featured player\r\n this.asyncAPImonitor(this.playerSelectionList);\r\n },\r\n (error) => {\r\n console.log(\"getAllPlayers\",error);\r\n }\r\n )\r\n }\r\n\r\n displayFeaturedPlayer = () => {\r\n //console.log(\"0 - getFeaturedPlayer\");\r\n // this.playerid = 5048;\r\n // this.getGlobalStats()\r\n if (this.playerid !== 0){\r\n var player = this.playerSelectionList.filter((p) =>{\r\n if (p.playerId.toString() === this.playerid){\r\n return p;\r\n }\r\n return null;\r\n });\r\n this.handlePlayerSelected(' ',{playerId: player[0].playerId, positionCategory: player[0].positionCategory, firstName: player[0].firstName, lastName: player[0].lastName})\r\n }\r\n else{\r\n this.handlePlayerSelected(' ',{playerId: 5048, positionCategory: \"QB\", firstName: \"Patrick\", lastName: \"Mahomes\"}) // load default player\r\n }\r\n }\r\n\r\n // Load NFL players from a json file on sisdatahub\r\n loadNFLPlayers = () => {\r\n fetch('http://sismetrics.com/players.json').then(function(response) {\r\n\t return response.json();\r\n }).then(json => {\r\n this.playerSelectionList = json;\r\n }).catch(err => {\r\n console.log('loadNFLPlayers - problem fetching player list:',err.message);\r\n });\r\n }\r\n\r\n // get passing stats by game from NFL data API\r\n getPassingStats = (event) => {\r\n //console.log(\"0 - getPassingStats\");\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passingbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passingstats = response.data;\r\n this.asyncAPImonitor(this.passingstats);\r\n },\r\n (error) => {\r\n console.log(\"getPassingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get rushing stats by game from NFL API\r\n getRushingStats = () => {\r\n //console.log(\"0 - getRushingStats\");\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/rushingbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.rushingstats = response.data;\r\n this.asyncAPImonitor(this.rushingstats);\r\n },\r\n (error) => {\r\n console.log(\"getRushingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get accuracy stats by game from NFL API\r\n getAccuracyStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/qb_ddByGame?playerId=${this.playerid}&startSeason=2015&endSeason=${(new Date()).getFullYear()}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.accuracystats = response.data;\r\n this.asyncAPImonitor(this.accuracystats);\r\n },\r\n (error) => {\r\n console.log(\"getAccuracyStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get receiving stats by game from NFL API\r\n getReceivingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/receivingbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.receivingstats = response.data;\r\n this.asyncAPImonitor(this.receivingstats);\r\n },\r\n (error) => {\r\n console.log(\"getReceivingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get blocking stats by game from NFL API\r\n getBlockingStats = () => {\r\n //console.log(\"0 - getBlockingStats\");\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/blockingbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.blockingstats = response.data;\r\n this.asyncAPImonitor(this.blockingstats);\r\n },\r\n (error) => {\r\n console.log(\"getBlockingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get puntret stats by game from NFL API\r\n getPuntRetStats = () => {\r\n //console.log(\"0 - getPuntRetStats\");\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/puntreturningbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.puntretstats = response.data;\r\n this.asyncAPImonitor(this.puntretstats);\r\n },\r\n (error) => {\r\n console.log(\"getPuntRetStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get kickret stats by game from NFL API\r\n getKickRetStats = () => {\r\n //console.log(\"0 - getKickRetStats\");\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/kickreturningbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.kickretstats = response.data;\r\n this.asyncAPImonitor(this.kickretstats);\r\n },\r\n (error) => {\r\n console.log(\"getKickRetStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get punting stats by game from NFL API\r\n getPuntingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/puntingbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.puntingstats = response.data;\r\n this.asyncAPImonitor(this.puntingstats);\r\n },\r\n (error) => {\r\n console.log(\"getPuntingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get kicking stats by game from NFL API\r\n getKickingStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/kickingbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.kickingstats = response.data;\r\n this.asyncAPImonitor(this.kickingstats);\r\n },\r\n (error) => {\r\n console.log(\"getKickingStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get passdefense stats by game from NFL API\r\n getPassDefenseStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passdefensebygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passdefensestats = response.data;\r\n this.asyncAPImonitor(this.passdefensestats);\r\n },\r\n (error) => {\r\n console.log(\"getPassDefenseStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get passrush stats by game from NFL API\r\n getPassRushStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passrushbygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passrushstats = response.data;\r\n// let i = 0;\r\n// for (i = 0; i < this.passrushstats.length; i++) {\r\n// if (this.passrushstats[i].season === 2015) {\r\n// this.passrushstats.splice(i, 1);\r\n// i--;\r\n// }\r\n// }\r\n this.asyncAPImonitor(this.passrushstats);\r\n },\r\n (error) => {\r\n console.log(\"getPassRushStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get rushdefense stats by game from NFL API\r\n getRushDefenseStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/rushdefensebygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.rushdefensestats = response.data;\r\n this.asyncAPImonitor(this.rushdefensestats);\r\n },\r\n (error) => {\r\n console.log(\"getRushDefenseStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get defense stats by game from NFL API\r\n getDefenseStats = () => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/defensebygame?playerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.defensestats = response.data;\r\n this.asyncAPImonitor(this.defensestats);\r\n },\r\n (error) => {\r\n console.log(\"getDefenseStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // get global stats and player bio info\r\n getGlobalStats = () => {\r\n //console.log(\"0 - getGlobalStats\");\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/players/globalinfo?PlayerId=${this.playerid}`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.globalstats = response.data;\r\n this.handlePlayerSelected();\r\n //this.asyncAPImonitor(this.globalstats);\r\n // this.asyncAPImonitor(this.defensestats);\r\n },\r\n (error) => {\r\n console.log(\"getGlobalStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // general purpose fetch method called by each API related method\r\n executeHTTPRequest = (url, method, callback, failback) => {\r\n fetch(\r\n url, {\r\n method: method,\r\n headers: {\r\n Accept: 'application/json, text/plain, */*',\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${this.token}`\r\n },\r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if(response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n executeHTTPRequestPost = (url, callback, failback) => {\r\n var details = {'client_id': 'FootballApp@sportsinfosolutions.com',\r\n 'client_secret': 'xPc14+wU2zHtydg12AgglRCkL+ALNlX/miH2JJHp2/k=',\r\n 'grant_type': 'client_credentials',\r\n 'scope': 'sisapi'};\r\n\r\n var formBody = [];\r\n for (var property in details){\r\n var encodedKey = encodeURIComponent(property);\r\n var encodedValue = encodeURIComponent(details[property]);\r\n formBody.push(encodedKey + \"=\" + encodedValue);\r\n }\r\n formBody = formBody.join(\"&\");\r\n\r\n fetch(\r\n url, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},\r\n body: formBody, \r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if (response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n // Replacement for Promise.all to ensure that parallel async\r\n // dependencies complete before triggering a render by updating\r\n // state.\r\n //\r\n // Prior to launching parallel async tasks, set dependencycount\r\n // to zero and dependenciestocomplete to the number of async tasks\r\n // to be complete. Each task must call this function upon successful\r\n // completion. When dependencycount is equal to dependenciestocomplete,\r\n // state will be updated and dependencycount and dependenciestocomplete\r\n // are reset to zero.\r\n //\r\n asyncAPImonitor = (d) => {\r\n this.asyncAPIcount += 1;\r\n this.asyncAPIrows += d.length;\r\n if (this.asyncAPIcount === this.asyncAPIcallstocomplete) {\r\n // this.GetPlayerBioInfo()\r\n this.alldependenciescomplete = true;\r\n this.asyncAPIcount = 0;\r\n this.asyncAPIcallstocomplete = 0;\r\n this.usererrormessage = '';\r\n this.loadingmessage = '';\r\n this.setState({\r\n selectedPlayerId: this.playerid\r\n });\r\n } \r\n }\r\n\r\n // this method is invoked when the user selects a player\r\n // from the autocomplete list. it uses the player position\r\n // to set the number of dependencies to be monitored and\r\n // launch the appropriate async NFL API calls.\r\n //\r\n handlePlayerSelected = (value) => {\r\n //this.playerid = this.playerId; // used in the NFL API calls\r\n let globalStats = this.globalstats[this.globalstats.length - 1];\r\n this.playername = globalStats.fullName; //selection.firstName+\" \"+selection.lastName; // displayed on the page\r\n this.playerposition = globalStats.positionName; // selection.positionCategory; // displayed on page and used in the switch below\r\n //console.log(\"0 - handlePlayerSelected, Player =\", this.playerposition, this.playername);\r\n this.setCookie();\r\n this.usererrormessage = '';\r\n this.alldependenciescomplete = false; // reset the async API completion indicator to false\r\n this.loadingmessage = '\"Loading...'; // displayed on initial page load and whenever react triggers a refresh while player data is being retrieved\r\n this.asyncAPIcount = 0; // reset the number of async API calls completed\r\n this.asyncAPIrows = 0; // reset the number of async API rows fetched\r\n this.forceUpdate();\r\n //this.asyncAPIcallstocomplete = 1; // reset the number of async API calls completed\r\n //this.getGlobalStats(); // retrieve player bio info\r\n switch (this.playerposition) { // evalute the value of player position\r\n case 'QB': // when quarterback\r\n this.pagelayout = this.playerposition; // indicate the QB page format\r\n this.asyncAPIcallstocomplete += 3; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getPassingStats(); //***************************************\r\n this.getRushingStats(); //** lanch async API calls for QB data **\r\n //this.getAccuracyStats(); //***************************************\r\n break;\r\n case 'DE': // when defensive end or (Defense)\r\n case 'DT': // when defensive tackle or (Defense)\r\n case 'LB': // when line backer or (Defense)\r\n this.pagelayout = 'Defense'; // indicate the Defenst page format for positions DE, DT, LB, CB, S\r\n this.asyncAPIcallstocomplete += 5; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getDefenseStats();\r\n this.getPassDefenseStats(); //*****************************************************\r\n this.getPassRushStats(); //** launch async API calls for DE, DT, LB, CB and S **\r\n this.getRushDefenseStats(); //*****************************************************\r\n this.puntretstats = [];\r\n this.kickretstats = [];\r\n break;\r\n case 'CB': // when cornerback or (Defense)\r\n case 'S': // when safety (Defense)\r\n this.pagelayout = 'Defense'; // indicate the Defenst page format for positions DE, DT, LB, CB, S\r\n this.asyncAPIcallstocomplete += 7; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getDefenseStats();\r\n this.getPassDefenseStats(); //*****************************************************\r\n this.getPassRushStats(); //** launch async API calls for DE, DT, LB, CB and S **\r\n this.getRushDefenseStats(); //*****************************************************\r\n this.getPuntRetStats(); //******************************************\r\n this.getKickRetStats(); //******************************************\r\n break;\r\n case 'TE': // when tight end or (Offensive Line)\r\n this.pagelayout = 'Receiver'; // indicate the receiver page format for positions TE\r\n this.asyncAPIcallstocomplete += 6; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getBlockingStats(); //***********************************************\r\n this.getRushingStats(); //******************************************\r\n this.getReceivingStats(); //** launch async API calls for WR and RB **\r\n this.getPuntRetStats(); //******************************************\r\n this.getKickRetStats(); //******************************************\r\n break;\r\n case 'RB': // when running back or\r\n case 'FB': // when running back or\r\n case 'WR': // when wide receiver\r\n this.pagelayout = 'Receiver'; // indicate the receiver format (same data but different page format)\r\n this.asyncAPIcallstocomplete += 6; // set the number of async API calls to launch\r\n this.blockingstats = []; // RB, FB and WR do not use blocking stats\r\n this.getAllPlayers();\r\n this.getBlockingStats(); //***********************************************\r\n this.getRushingStats(); //******************************************\r\n this.getReceivingStats(); //** launch async API calls for WR and RB **\r\n this.getPuntRetStats(); //******************************************\r\n this.getKickRetStats(); //******************************************\r\n break;\r\n case 'T': // when tackle or (Offensive Line)\r\n case 'G': // when guard or (Offensive Line)\r\n case 'C': // when center (Offensive Line)\r\n this.pagelayout = 'OL'; // indicate the OL page format for positions TE, T, G, or C\r\n this.asyncAPIcallstocomplete += 3; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getBlockingStats(); //***********************************************\r\n this.getRushingStats(); //** launch async API calls for TE, T, G and C **\r\n break;\r\n case 'K': // when kicker or (Kicking)\r\n case 'P': // when punter (Kicking)\r\n this.pagelayout = this.playerposition; // indicate the K or PB page format (same data but different page format)\r\n this.asyncAPIcallstocomplete += 5; // set the number of async API calls to launch\r\n this.getAllPlayers();\r\n this.getKickingStats(); //****************************************\r\n this.getPuntingStats(); //** launch async API calls for K and P **\r\n this.getPassingStats(); //****************************************\r\n this.getRushingStats(); //****************************************\r\n break;\r\n default: // when anything else\r\n//// this.usererrormessage = '(' + this.playerposition + ' not supported at this time)';\r\n console.log(\"handlePlayerSelected - invalid position:\", this.playerposition);\r\n }\r\n }\r\n\r\n setCookie(){\r\n document.cookie = 'playerId=' + this.playerid + '; path=/;';\r\n document.cookie = 'playerPos=' + this.playerposition + '; path=/;';\r\n }\r\n\r\n handleScroll(){\r\n this.scrollY = window.scrollY;\r\n }\r\n \r\n reScroll(){\r\n window.scrollTo(0, this.scrollY);\r\n }\r\n\r\n // What is rendered out to the page\r\n render() {\r\n //console.log(\"0 - Render\")\r\n if (this.pagelayout === 'Defense' && this.alldependenciescomplete) {\r\n this.defenseData = [];\r\n this.defenseData = GameLogDefenseBuildData(this.defensestats, this.passdefensestats, this.passrushstats, this.rushdefensestats, this.kickretstats, this.puntretstats);\r\n this.havepassdefense = false;\r\n this.haverushdefense = false;\r\n this.havepassrush = false;\r\n this.defenseData.forEach(season => {\r\n if (season.havedefense) { this.havedefense = true; }\r\n if (season.havepassdefense) { this.havepassdefense = true; }\r\n if (season.haverushdefense) { this.haverushdefense = true; }\r\n if (season.havepassrush) { this.havepassrush = true; }\r\n if (season.havekickret) { this.havekickret = true; }\r\n if (season.havepuntret) { this.havepuntret = true; }\r\n })\r\n }\r\n let playerLink = '/players/' + this.playerid;\r\n let playerGameLogLink = '/playergamelogs/' + this.playerid;\r\n let leaderboardsLink = '/leaderboards/' + this.playerposition;\r\n let glossaryLink = '/glossary/';\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n \r\n \"logo\"\r\n \r\n
    \r\n
    \r\n
    \r\n

    Player Search:

    \r\n {\r\n this.playerSelectionList &&\r\n \r\n }\r\n last, first name (pos, team #jersey)\r\n
    \r\n
    \r\n

    \r\n \r\n\r\n
    SIS DataHub
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n

    \r\n {\r\n this.alldependenciescomplete &&\r\n \r\n }\r\n {\r\n !this.alldependenciescomplete &&\r\n \r\n }\r\n\r\n {\r\n this.pagelayout === 'QB' && this.alldependenciescomplete && this.asyncAPIrows !== 0 && this.asyncAPIrows !== this.accuracystats.length &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'OL' && this.alldependenciescomplete && this.blockingstats.length &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'Receiver' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'K' && this.alldependenciescomplete && this.kickingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'P' && this.alldependenciescomplete && this.puntingstats.length !== 0 &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout === 'Defense' && this.alldependenciescomplete && this.defenseData.length !== 0 && (this.havedefense || this.havepassdefense || this.haverushdefense || this.havepassrush || this.havepuntret || this.havekickret) &&\r\n \r\n \r\n \r\n }\r\n {\r\n this.pagelayout !== 'QB' && this.pagelayout !== 'OL' && this.pagelayout !== 'Receiver' && this.pagelayout !== 'Defense' && this.pagelayout !== 'K' && this.pagelayout !== 'P' && this.alldependenciescomplete &&\r\n \r\n
    \r\n
    \r\n
    \r\n

    *** Position no supported at this time. Coming soon ***

    \r\n
    \r\n
    \r\n }\r\n\r\n
    \r\n
    \r\n
    \r\n

    v. {this.version}

    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default PlayerGameLogs;","import React, { useState } from 'react';\r\nimport TableQBSummaryTabulator from '../pageQB/TableQBSummaryTabulator';\r\nimport TableQBAdvancedPassingTabulator from '../pageQB/TableQBAdvancedPassingTabulator';\r\nimport TableQBPassingAccuracyTabulator from '../pageQB/TableQBPassingAccuracyTabulator';\r\nimport TableQBAdvancedRushingTabulator from '../pageQB/TableQBAdvancedRushingTabulator';\r\n\r\nfunction QBSection(d) {\r\n const [startSeason, setStartSeason] = useState(d.filters.startSeason);\r\n const [endSeason, setEndSeason] = useState(d.filters.endSeason);\r\n const [tabName, setTabName] = useState(\"summary\");\r\n\r\n let fromSeasons = [];\r\n let toSeasons = [];\r\n for(var i = new Date().getFullYear(); i >= 2015; i--){\r\n if (i.toString() === d.filters.startSeason){\r\n fromSeasons.push()\r\n }\r\n else{\r\n fromSeasons.push()\r\n } \r\n if (i.toString() === d.filters.endSeason){\r\n toSeasons.push()\r\n }\r\n else{\r\n toSeasons.push()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n \r\n\r\n
    d.reScroll()}>\r\n {\r\n tabName === \"summary\" &&\r\n \r\n }\r\n {\r\n tabName === \"advpassing\" &&\r\n \r\n }\r\n {\r\n tabName === \"passaccuracy\" &&\r\n \r\n }\r\n {\r\n tabName === \"rushing\" &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n\r\n\r\nexport default QBSection;","import React, { useState } from 'react';\r\nimport TableDefenseSummaryTabulator from '../pageDefense/TableDefenseSummaryTabulator';\r\nimport TableDefenseAdvancedDefenseTabulator from '../pageDefense/TableDefenseAdvancedDefenseTabulator';\r\nimport TableDefensePassRushTabulator from '../pageDefense/TableDefensePassRushTabulator';\r\n\r\nconst DefenseSection = (d) => {\r\n const [startSeason, setStartSeason] = useState(d.filters.startSeason);\r\n const [endSeason, setEndSeason] = useState(d.filters.endSeason);\r\n const [tabName, setTabName] = useState(\"summary\");\r\n\r\n let fromSeasons = [];\r\n let toSeasons = [];\r\n for(var i = new Date().getFullYear(); i >= 2015; i--){\r\n if (i.toString() === d.filters.startSeason){\r\n fromSeasons.push()\r\n }\r\n else{\r\n fromSeasons.push()\r\n } \r\n if (i.toString() === d.filters.endSeason){\r\n toSeasons.push()\r\n }\r\n else{\r\n toSeasons.push()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n \r\n\r\n
    d.reScroll()}>\r\n {\r\n tabName === \"summary\" &&\r\n \r\n }\r\n \r\n {\r\n tabName === \"advdefense\" &&\r\n \r\n }\r\n \r\n {\r\n tabName === \"passrush\" &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default DefenseSection;\r\n","import React, { useState } from 'react';\r\nimport TableRBWRSummaryTabulator from '../pageRBWR/TableRBWRSummaryTabulator';\r\nimport TableRBWRAdvancedRushingTabulator from '../pageRBWR/TableRBWRAdvancedRushingTabulator';\r\nimport TableRBWRAdvancedReceivingTabulator from '../pageRBWR/TableRBWRAdvancedReceivingTabulator';\r\n\r\nconst WRRBSection = (d) => {\r\n const [startSeason, setStartSeason] = useState(d.filters.startSeason);\r\n const [endSeason, setEndSeason] = useState(d.filters.endSeason);\r\n const [tabName, setTabName] = useState(\"summary\");\r\n\r\n let fromSeasons = [];\r\n let toSeasons = [];\r\n for(var i = new Date().getFullYear(); i >= 2015; i--){\r\n if (i.toString() === d.filters.startSeason){\r\n fromSeasons.push()\r\n }\r\n else{\r\n fromSeasons.push()\r\n } \r\n if (i.toString() === d.filters.endSeason){\r\n toSeasons.push()\r\n }\r\n else{\r\n toSeasons.push()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n
    d.reScroll()}>\r\n {\r\n tabName === \"summary\" &&\r\n \r\n }\r\n {\r\n tabName === \"advrushing\" &&\r\n \r\n } \r\n {\r\n tabName === \"advreceiving\" &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default WRRBSection;\r\n","import React from 'react';\r\nimport {NullSum, NullBypassSum, NullMax, NullDiv, Tst2015, DispFunc} from '../common/CommonFunctions';\r\nimport { rbfbSummary } from '../common/TableColumnWidths';\r\nimport Tabulator from 'tabulator-tables';\r\nimport \"tabulator-tables/dist/css/tabulator.min.css\";\r\nimport Filters from '../common/Filters';\r\n\r\nclass TableWRTESummaryTabulator extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.rushingstats = this.props.rushingstats;\r\n this.receivingstats = this.props.receivingstats;\r\n this.puntretstats = this.props.puntretstats;\r\n this.kickretstats = this.props.kickretstats;\r\n this.blockingstats = this.props.blockingstats;\r\n this.isLeaderboards = this.props.isLeaderboards;\r\n this.minFilter = 1;\r\n this.data = [];\r\n let bioCols = null;\r\n let sortable = false;\r\n this.initSort = null;\r\n this.colNum = this.isLeaderboards ? 0 : 2;\r\n\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n // Custom sort function for players page so Total stays at the bottom of the table.\r\n let sortFunc = (a, b, aRow, bRow, column, dir, sorterParams) => {\r\n var aData = aRow.getData();\r\n var bData = bRow.getData();\r\n if (aData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return -1;\r\n }\r\n else if (dir === 'asc'){\r\n return 1\r\n }\r\n }\r\n else if (bData.season === 'Total'){\r\n if (dir === 'desc'){\r\n return 1;\r\n }\r\n else if (dir === 'asc'){\r\n return -1;\r\n } \r\n }\r\n else {\r\n return a-b;\r\n }\r\n };\r\n\r\n // Set first group of columns\r\n // If this is a leaderboards page include player name, remove custom sorter and set initial sort to proper column.\r\n if (this.isLeaderboards) {\r\n sortable = true;\r\n bioCols = [\r\n {\r\n title: \"Player\", field: \"player\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"link\", formatterParams: {\r\n labelField: \"player\",\r\n urlPrefix: \"/players/\",\r\n urlField: \"playerId\"\r\n }\r\n },\r\n {\r\n title: \"Pos\", field: \"positionName\", cssClass: \"single-row-header player-position\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"G\", field: \"sumGames\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n },\r\n {\r\n title: \"GS\", field: \"sumGamesStarted\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`\r\n }\r\n ];\r\n this.sorterFunc = null;\r\n this.initSort = [\r\n { column: \"sumPointsEarned\", dir: \"desc\" }\r\n ];\r\n }\r\n // Else don't include player name and set initial sort to season.\r\n else {\r\n bioCols = [\r\n {\r\n title: \"Year\", field: \"season\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Team\", field: \"team\", cssClass: \"single-row-header textColumn\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"G\", field: \"sumGames\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"GS\", field: \"sumGamesStarted\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSort: sortable, sorter: sortFunc\r\n }\r\n ];\r\n this.initSort = [\r\n { column: \"season\", dir: \"asc\" }\r\n ];\r\n }\r\n // Set Remaining Columns\r\n this.cols = [\r\n {\r\n title: \"\",\r\n columns: bioCols\r\n },\r\n {\r\n title: \"Rushing\",\r\n columns: [\r\n {\r\n title: \"Att\", field: \"rushAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Yds\", field: \"rushYds\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"rushYdsPerAttempt\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"Lg\", field: \"rushLong\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"TD\", field: \"rushTD\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Y/G\", field: \"rushYdsPerGame\", cssClass: \"single-row-header break\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Receiving\",\r\n columns: [\r\n {\r\n title: \"Rec\", field: \"receives\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Yds\", field: \"rcvYds\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"rcvYdsPerRcv\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"Lg\", field: \"rcvLong\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"TD\", field: \"rcvTD\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Y/G\", field: \"rcvYdsPerGame\", cssClass: \"single-row-header break\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Punt Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"pntretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Yds\", field: \"pntretYards\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"pntretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"pntretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Kickoff Returns\",\r\n columns: [\r\n {\r\n title: \"Num\", field: \"kickretAttempts\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Yds\", field: \"kickretYards\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n thousand: ',',\r\n precision: 0\r\n }\r\n },\r\n {\r\n title: \"Avg\", field: \"kickretYdsPerAtt\", cssClass: \"single-row-header\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n formatter: \"money\", formatterParams: {\r\n precision: 1\r\n }\r\n },\r\n {\r\n title: \"TD\", field: \"kickretTD\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n ],\r\n },\r\n {\r\n title: \"Fumbles\",\r\n columns: [\r\n {\r\n title: \"Fum\", field: \"sumFumbles\", cssClass: \"single-row-header small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n },\r\n {\r\n title: \"Lost\", field: \"sumFumblesLost\", cssClass: \"single-row-header break small-column\",\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc\r\n }\r\n ],\r\n },\r\n {\r\n title: \"Tot
    Points
    Earned\", field: \"sumPointsEarned\", cssClass: \"single-row-header\",\r\n headerSortStartingDir: \"desc\", headerSort: sortable, sorter: sortFunc,\r\n width: `${rbfbSummary[this.colNum++][this.isLeaderboards ? 0 : 1]}`,\r\n formatter: function (cell, formatterParams, onRendered) {\r\n return DispFunc(cell, formatterParams, onRendered, 0, false, false);\r\n }\r\n }\r\n ];\r\n \r\n this.el = React.createRef();\r\n this.tabulator = null;\r\n\r\n }\r\n\r\n // Consolidate the data into one data array to be used for tabulator(called on component mount)\r\n ConsolidateData() {\r\n // console.log(\"WRTE\");\r\n let rushingstats = this.rushingstats;\r\n let receivingstats = this.receivingstats;\r\n let puntretstats = this.puntretstats;\r\n let kickretstats = this.kickretstats;\r\n let blockingstats = this.blockingstats; // only used for TE position\r\n let season = 0;\r\n let player = '';\r\n let playerId = 0;\r\n let positionName = '';\r\n let team = '';\r\n let sumGames = 0;\r\n let sumGamesStarted = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let rushYdsPerGame = 0;\r\n let receives = 0;\r\n let rcvYds = 0;\r\n let rcvYdsPerRcv = 0;\r\n let rcvLong = 0;\r\n let rcvTD = 0;\r\n let rcvYdsPerGame = 0;\r\n let pntretAttempts = 0;\r\n let pntretYards = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYards = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n \r\n var rowdata = [];\r\n var i = 0;\r\n if (receivingstats.length !==0) {\r\n for (i=0; i= this.minFilter){\r\n season = receivingstats[i].season;\r\n player = receivingstats[i].player;\r\n playerId = receivingstats[i].playerId;\r\n positionName = receivingstats[i].position;\r\n team = receivingstats[i].team;\r\n sumGames =\r\n receivingstats[i].starts > receivingstats[i].g ?\r\n receivingstats[i].starts :\r\n receivingstats[i].g;\r\n sumGamesStarted = receivingstats[i].starts;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = receivingstats[i].recs;\r\n rcvYds = receivingstats[i].yards;\r\n rcvYdsPerRcv = receivingstats[i].yardsPerRec;\r\n rcvYdsPerGame = receivingstats[i].yardsPerG;\r\n rcvLong = receivingstats[i].long;\r\n rcvTD = receivingstats[i].td;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0; \r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = receivingstats[i].fumbles;\r\n sumFumblesLost = receivingstats[i].fumblesLost;\r\n sumPointsEarned = Tst2015(receivingstats[i].season,receivingstats[i].eps);\r\n // consolelogruben(receivingstats[i].playerId, 'Receiving EPS', receivingstats[i].eps);\r\n // spe(receivingstats[i].playerId, 'SUMPOINTSEARNED =', sumPointsEarned);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n positionName,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n let j = -1;\r\n if (rushingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === rushingstats[i].season && rowdata[j].team === rushingstats[i].team && rowdata[j].playerId === rushingstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1){\r\n rowdata[j].rushAttempts = rushingstats[i].att;\r\n rowdata[j].rushYds = rushingstats[i].yards;\r\n rowdata[j].rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rowdata[j].rushLong = rushingstats[i].long;\r\n rowdata[j].rushTD = rushingstats[i].td;\r\n rowdata[j].rushYdsPerGame = rushingstats[i].yardsPerG;\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,rushingstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,rushingstats[i].fumblesLost);\r\n rowdata[j].sumPointsEarned = NullBypassSum(rowdata[j].sumPointsEarned,Tst2015(rushingstats[i].season,rushingstats[i].eps));\r\n // consolelogruben(rushingstats[i].playerId, 'Rushing EPS', rushingstats[i].eps);\r\n // spe(rushingstats[i].playerId, 'SUMPOINTSEARNED =', rowdata[j].sumPointsEarned);\r\n }\r\n else if (!this.isLeaderboards){\r\n season = rushingstats[i].season;\r\n team = rushingstats[i].team;\r\n player = rushingstats[i].player;\r\n playerId = rushingstats[i].playerId;\r\n positionName = rushingstats[i].positionName;\r\n sumGames = rushingstats[i].starts > rushingstats[i].g ?\r\n rushingstats[i].starts :\r\n rushingstats[i].g;\r\n sumGamesStarted = rushingstats[i].starts;\r\n rushAttempts = rushingstats[i].att;\r\n rushYds = rushingstats[i].yards;\r\n rushYdsPerAttempt = rushingstats[i].yardsPerAtt;\r\n rushLong = rushingstats[i].long;\r\n rushTD = rushingstats[i].td;\r\n rushYdsPerGame = rushingstats[i].yardsPerG;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = rushingstats[i].fumbles;\r\n sumFumblesLost = rushingstats[i].fumblesLost;\r\n sumPointsEarned = Tst2015(rushingstats[i].season,rushingstats[i].eps);\r\n // consolelogruben(rushingstats[i].playerId, 'Rushing EPS', rushingstats[i].eps);\r\n // spe(rushingstats[i].playerId, 'SUMPOINTSEARNED =', sumPointsEarned);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n positionName,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (puntretstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === puntretstats[i].season && rowdata[j].team === puntretstats[i].teamName && rowdata[j].playerId === puntretstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].pntretAttempts = puntretstats[i].attempts;\r\n rowdata[j].pntretYards = puntretstats[i].yards;\r\n rowdata[j].pntretYdsPerAtt = puntretstats[i].attempts ? puntretstats[i].yards/puntretstats[i].attempts : 0;\r\n rowdata[j].pntretTD = puntretstats[i].tDs;\r\n rowdata[j].sumTDs = NullSum(rowdata[j].sumTDs,puntretstats[i].tDs);\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,puntretstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,puntretstats[i].fumblesLost);\r\n// rowdata[j].sumPointsEarned = NullBypassSum(rowdata[j].sumPointsEarned,Tst2015(puntretstats[i].season, puntretstats[i].eps)); // no eps field available on putret\r\n } else if(!this.isLeaderboards) {\r\n season = puntretstats[i].season;\r\n player = puntretstats[i].player;\r\n playerId = puntretstats[i].playerId;\r\n team = puntretstats[i].teamName;\r\n sumGames = puntretstats[i].games;\r\n sumGamesStarted = 0;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = puntretstats[i].attempts;\r\n pntretYards = puntretstats[i].yards;\r\n pntretYdsPerAtt = NullDiv(puntretstats[i].yards,puntretstats[i].attempts);\r\n pntretTD = puntretstats[i].tDs;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = puntretstats[i].fumbles;\r\n sumFumblesLost = puntretstats[i].fumblesLost;\r\n// sumPointsEarned = Tst2015(puntretstats[i].season, puntretstats[i].eps);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (kickretstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === kickretstats[i].season && rowdata[j].team === kickretstats[i].teamName && rowdata[j].playerId === kickretstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n rowdata[j].kickretAttempts = kickretstats[i].attempts;\r\n rowdata[j].kickretYards = kickretstats[i].yards;\r\n rowdata[j].kickretYdsPerAtt = NullDiv(kickretstats[i].yards, kickretstats[i].attempts);\r\n rowdata[j].kickretTD = kickretstats[i].tDs;\r\n rowdata[j].sumTDs = NullSum(rowdata[j].sumTDs,kickretstats[i].tDs);\r\n rowdata[j].sumFumbles = NullSum(rowdata[j].sumFumbles,kickretstats[i].fumbles);\r\n rowdata[j].sumFumblesLost = NullSum(rowdata[j].sumFumblesLost,kickretstats[i].fumblesLost);\r\n// no such field rowdata[j].sumPointsEarned = NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(kickretstats[i].season, kickretstats[i].eps));\r\n } else if(!this.isLeaderboards) {\r\n season = kickretstats[i].season;\r\n player = kickretstats[i].player;\r\n playerId = kickretstats[i].playerId;\r\n team = kickretstats[i].teamName;\r\n sumGames = kickretstats[i].games;\r\n sumGamesStarted = 0;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = kickretstats[i].attempts;\r\n kickretYards = kickretstats[i].yards;\r\n kickretYdsPerAtt = NullDiv(kickretYards, kickretAttempts);\r\n kickretTD = kickretstats[i].tDs;\r\n sumFumbles = kickretstats[i].fumbles;\r\n sumFumblesLost = kickretstats[i].fumblesLost;\r\n// no such field sumPointsEarned = Tst2015(kickretstats[i].season, kickretstats[i].eps);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n if (blockingstats.length !==0) {\r\n for (i=0; i -1; j--) {\r\n if (rowdata[j].season === blockingstats[i].season && rowdata[j].team === blockingstats[i].team && rowdata[j].playerId === blockingstats[i].playerId) {\r\n break;\r\n }\r\n }\r\n if (j > -1) {\r\n// console.log(\"rowdata[j].sumPointsEarned before:\", rowdata[j].sumPointsEarned);\r\n rowdata[j].sumPointsEarned =\r\n NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(blockingstats[i].season, blockingstats[i].passBlockEPS));\r\n rowdata[j].sumPointsEarned =\r\n NullBypassSum(rowdata[j].sumPointsEarned, Tst2015(blockingstats[i].season, blockingstats[i].runBlockEPS));\r\n// console.log(\"rowdata[j].sumPointsEarned after:\", rowdata[j].sumPointsEarned);\r\n // consolelogruben(blockingstats[i].playerId, 'PassBlock EPS', blockingstats[i].passBlockEPS);\r\n // consolelogruben(blockingstats[i].playerId, 'RunBlock EPS', blockingstats[i].runBlockEPS);\r\n // spe(blockingstats[i].playerId, 'SUMPOINTSEARNED =', rowdata[j].sumPointsEarned);\r\n } else if(!this.isLeaderboards) {\r\n season = blockingstats[i].season;\r\n player = blockingstats[i].player;\r\n playerId = blockingstats[i].playerId;\r\n team = blockingstats[i].team;\r\n sumGames = blockingstats[i].starts > blockingstats[i].games ?\r\n blockingstats[i].starts :\r\n blockingstats[i].games;\r\n sumGamesStarted = blockingstats[i].starts;\r\n rushAttempts = 0;\r\n rushYds = 0;\r\n rushYdsPerAttempt = 0;\r\n rushLong = 0;\r\n rushTD = 0;\r\n rushYdsPerGame = 0;\r\n receives = 0;\r\n rcvYds = 0;\r\n rcvYdsPerRcv = 0;\r\n rcvLong = 0;\r\n rcvTD = 0;\r\n rcvYdsPerGame = 0;\r\n pntretAttempts = 0;\r\n pntretYards = 0;\r\n pntretYdsPerAtt = 0;\r\n pntretTD = 0;\r\n kickretAttempts = 0;\r\n kickretYards = 0;\r\n kickretYdsPerAtt = 0;\r\n kickretTD = 0;\r\n sumFumbles = 0;\r\n sumFumblesLost = 0;\r\n sumPointsEarned =\r\n NullBypassSum(\r\n Tst2015(blockingstats[i].season, blockingstats[i].passBlockEPS),\r\n Tst2015(blockingstats[i].season, blockingstats[i].runBlockEPS)\r\n );\r\n// console.log(\"sumPointsEarned new:\", sumPointsEarned);\r\n // consolelogruben(blockingstats[i].playerId, 'PassBlock EPS', blockingstats[i].passBlockEPS);\r\n // consolelogruben(blockingstats[i].playerId, 'RunBlock EPS', blockingstats[i].runBlockEPS);\r\n // spe(blockingstats[i].playerId, 'SUMPOINTSEARNED =', sumPointsEarned);\r\n rowdata.push({\r\n season,\r\n player,\r\n playerId,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n }\r\n this.data = rowdata;\r\n }\r\n\r\n // Add totals row to data.(called on component mount if this is the players page.)\r\n SumData() {\r\n let season = 'Total';\r\n let team = '';\r\n let sumGames = 0;\r\n let sumGamesStarted = 0;\r\n let rushAttempts = 0;\r\n let rushYds = 0;\r\n let rushYdsPerAttempt = 0;\r\n let rushLong = 0;\r\n let rushTD = 0;\r\n let rushYdsPerGame = 0;\r\n let receives = 0;\r\n let rcvYds = 0;\r\n let rcvYdsPerRcv = 0;\r\n let rcvLong = 0;\r\n let rcvTD = 0;\r\n let rcvYdsPerGame = 0;\r\n let pntretAttempts = 0;\r\n let pntretYards = 0;\r\n let pntretYdsPerAtt = 0;\r\n let pntretTD = 0;\r\n let kickretAttempts = 0;\r\n let kickretYards = 0;\r\n let kickretYdsPerAtt = 0;\r\n let kickretTD = 0;\r\n let sumFumbles = 0;\r\n let sumFumblesLost = 0;\r\n let sumPointsEarned = 0;\r\n if (this.data.length !== 0){\r\n for (var i = 0; i < this.data.length; i++) {\r\n sumGames = NullSum(sumGames,this.data[i].sumGames);\r\n sumGamesStarted = NullSum(sumGamesStarted,this.data[i].sumGamesStarted);\r\n rushAttempts = NullSum(rushAttempts,this.data[i].rushAttempts);\r\n rushLong = NullMax(rushLong,this.data[i].rushLong);\r\n rushTD = NullSum(rushTD,this.data[i].rushTD);\r\n rushYds = NullSum(rushYds,this.data[i].rushYds);\r\n receives = NullSum(receives,this.data[i].receives);\r\n rcvYds = NullSum(rcvYds,this.data[i].rcvYds);\r\n rcvLong = NullMax(rcvLong,this.data[i].rcvLong);\r\n rcvTD = NullSum(rcvTD,this.data[i].rcvTD);\r\n pntretAttempts = NullSum(pntretAttempts,this.data[i].pntretAttempts);\r\n pntretYards = NullSum(pntretYards,this.data[i].pntretYards);\r\n pntretTD = NullSum(pntretTD,this.data[i].pntretTD);\r\n kickretAttempts = NullSum(kickretAttempts,this.data[i].kickretAttempts);\r\n kickretYards = NullSum(kickretYards, this.data[i].kickretYards);\r\n kickretTD = NullSum(kickretTD, this.data[i].kickretTD);\r\n sumFumbles = NullSum(sumFumbles,this.data[i].sumFumbles);\r\n sumFumblesLost = NullSum(sumFumblesLost,this.data[i].sumFumblesLost);\r\n sumPointsEarned = NullBypassSum(sumPointsEarned,Tst2015(this.data[i].season,this.data[i].sumPointsEarned));\r\n }\r\n rushYdsPerAttempt = NullDiv(rushYds,rushAttempts);\r\n rushYdsPerGame = NullDiv(rushYds,sumGames);\r\n rcvYdsPerRcv = NullDiv(rcvYds,receives);\r\n rcvYdsPerGame = NullDiv(rcvYds,sumGames);\r\n kickretYdsPerAtt = NullDiv(kickretYards,kickretAttempts);\r\n pntretYdsPerAtt = NullDiv(pntretYards,pntretAttempts);\r\n this.data.push({\r\n season,\r\n team,\r\n sumGames,\r\n sumGamesStarted,\r\n rushAttempts,\r\n rushYds,\r\n rushYdsPerAttempt,\r\n rushLong,\r\n rushTD,\r\n rushYdsPerGame,\r\n receives,\r\n rcvYds,\r\n rcvYdsPerRcv,\r\n rcvLong,\r\n rcvTD,\r\n rcvYdsPerGame,\r\n pntretAttempts,\r\n pntretYards,\r\n pntretYdsPerAtt,\r\n pntretTD,\r\n kickretAttempts,\r\n kickretYards,\r\n kickretYdsPerAtt,\r\n kickretTD,\r\n sumFumbles,\r\n sumFumblesLost,\r\n sumPointsEarned\r\n });\r\n }\r\n }\r\n \r\n componentDidMount() {\r\n this.ConsolidateData();\r\n let pagination = 'local';\r\n let paginationSize = 50;\r\n if (!this.isLeaderboards){\r\n this.SumData();\r\n pagination = null;\r\n paginationSize = 0;\r\n }\r\n this.tabulator = new Tabulator(this.el, {\r\n data: this.data,\r\n reactiveData: true,\r\n columns: this.cols,\r\n layout: \"fitColumns\", // added by Ruben 7/25/19\r\n rowFormatter:function(row){\r\n var data = row.getData();\r\n if (data.season === 'Total'){\r\n row.getElement().style.borderTop = \"2px solid #6f88a8\";\r\n row.getElement().style.borderBottom = \"2px solid #6f88a8\";\r\n }\r\n },\r\n pagination: pagination,\r\n paginationSize: paginationSize,\r\n initialSort: this.initSort,\r\n resizableColumns: false,\r\n selectable: false\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n this.tabulator.replaceData(this.data);\r\n }\r\n\r\n onSubmit(e, minFilter){\r\n this.minFilter = minFilter;\r\n this.ConsolidateData();\r\n this.forceUpdate();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {\r\n this.isLeaderboards &&\r\n
    \r\n \r\n
    (this.el = el)} />\r\n
    \r\n }\r\n {\r\n !this.isLeaderboards &&\r\n
    \r\n
    Summary
    \r\n
    (this.el = el)} />\r\n
    \r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\n// function consolelogruben(playerId, text, value) {\r\n// //console.log('playerid =', playerId)\r\n// if (playerId === 4866) {\r\n// console.log(playerId, text, value)\r\n// }\r\n// }\r\n\r\n// function spe(playerId, text, value) {\r\n// if (playerId === 4866) {\r\n// console.log(text, value);\r\n// }\r\n// }\r\n\r\nexport default TableWRTESummaryTabulator;","import React, { useState } from 'react';\r\nimport TableWRTESummaryTabulator from '../pageRBWR/TableWRTESummaryTabulator';\r\nimport TableRBWRAdvancedRushingTabulator from '../pageRBWR/TableRBWRAdvancedRushingTabulator';\r\nimport TableRBWRAdvancedReceivingTabulator from '../pageRBWR/TableRBWRAdvancedReceivingTabulator';\r\nimport TableOLPassBlockingTabulator from '../pageOL/TableOLPassBlockingTabulator';\r\nimport TableOLRushBlockingTabulator from '../pageOL/TableOLRushBlockingTabulator';\r\n\r\nconst TESection = (d) => {\r\n const [startSeason, setStartSeason] = useState(d.filters.startSeason);\r\n const [endSeason, setEndSeason] = useState(d.filters.endSeason);\r\n const [tabName, setTabName] = useState(\"summary\");\r\n\r\n let fromSeasons = [];\r\n let toSeasons = [];\r\n for(var i = new Date().getFullYear(); i >= 2015; i--){\r\n if (i.toString() === d.filters.startSeason){\r\n fromSeasons.push()\r\n }\r\n else{\r\n fromSeasons.push()\r\n } \r\n if (i.toString() === d.filters.endSeason){\r\n toSeasons.push()\r\n }\r\n else{\r\n toSeasons.push()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n\r\n \r\n\r\n
    d.reScroll()}>\r\n {\r\n tabName === \"summary\" &&\r\n \r\n }\r\n {\r\n tabName === \"advreceiving\" &&\r\n \r\n }\r\n {\r\n tabName === \"advrushing\" &&\r\n \r\n } \r\n {\r\n tabName === \"passblocking\" &&\r\n \r\n }\r\n {\r\n tabName === \"rushblocking\" &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default TESection;","import React, { useState } from 'react';\r\nimport TableOLSummaryTabulator from '../pageOL/TableOLSummaryTabulator';\r\nimport TableOLPassBlockingTabulator from '../pageOL/TableOLPassBlockingTabulator';\r\nimport TableOLRushBlockingTabulator from '../pageOL/TableOLRushBlockingTabulator';\r\n\r\nconst OLSection = (d) => {\r\n const [startSeason, setStartSeason] = useState(d.filters.startSeason);\r\n const [endSeason, setEndSeason] = useState(d.filters.endSeason);\r\n const [tabName, setTabName] = useState(\"summary\");\r\n\r\n let fromSeasons = [];\r\n let toSeasons = [];\r\n for(var i = new Date().getFullYear(); i >= 2015; i--){\r\n if (i.toString() === d.filters.startSeason){\r\n fromSeasons.push()\r\n }\r\n else{\r\n fromSeasons.push()\r\n } \r\n if (i.toString() === d.filters.endSeason){\r\n toSeasons.push()\r\n }\r\n else{\r\n toSeasons.push()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n \r\n\r\n
    d.reScroll()}>\r\n {\r\n tabName === \"summary\" &&\r\n \r\n }\r\n \r\n {\r\n tabName === \"passblocking\" &&\r\n \r\n }\r\n \r\n {\r\n tabName === \"rushblocking\" &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default OLSection;\r\n","import React, { useState } from 'react';\r\nimport TableKPKickingTabulator from '../pageKP/TableKPKickingTabulator';\r\n\r\nconst KickingSection = (d) => {\r\n const [startSeason, setStartSeason] = useState(d.filters.startSeason);\r\n const [endSeason, setEndSeason] = useState(d.filters.endSeason);\r\n const [tabName, setTabName] = useState(\"kicking\");\r\n\r\n let fromSeasons = [];\r\n let toSeasons = [];\r\n for(var i = new Date().getFullYear(); i >= 2015; i--){\r\n if (i.toString() === d.filters.startSeason){\r\n fromSeasons.push()\r\n }\r\n else{\r\n fromSeasons.push()\r\n } \r\n if (i.toString() === d.filters.endSeason){\r\n toSeasons.push()\r\n }\r\n else{\r\n toSeasons.push()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n\r\n
    d.reScroll()}>\r\n {\r\n tabName === \"kicking\" &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default KickingSection;\r\n","import React, { useState } from 'react';\r\nimport TableKPAdvancedPuntingTabulator from '../pageKP/TableKPAdvancedPuntingTabulator';\r\nimport TableKPPuntingTabulator from '../pageKP/TableKPPuntingTabulator';\r\n\r\nconst PuntingSection = (d) => {\r\n const [startSeason, setStartSeason] = useState(d.filters.startSeason);\r\n const [endSeason, setEndSeason] = useState(d.filters.endSeason);\r\n const [tabName, setTabName] = useState(\"punting\");\r\n\r\n let fromSeasons = [];\r\n let toSeasons = [];\r\n for(var i = new Date().getFullYear(); i >= 2015; i--){\r\n if (i.toString() === d.filters.startSeason){\r\n fromSeasons.push()\r\n }\r\n else{\r\n fromSeasons.push()\r\n } \r\n if (i.toString() === d.filters.endSeason){\r\n toSeasons.push()\r\n }\r\n else{\r\n toSeasons.push()\r\n }\r\n }\r\n\r\n return (\r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n \r\n\r\n
    d.reScroll()}>\r\n {\r\n tabName === \"punting\" &&\r\n \r\n }\r\n {\r\n tabName === \"advpunting\" &&\r\n \r\n }\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport default PuntingSection;\r\n","import React, { Component } from 'react';\r\nimport QBSection from './components/leaderboards/QBSection';\r\nimport DefenseSection from './components/leaderboards/DefenseSection';\r\nimport WRRBSection from './components/leaderboards/WRRBSection';\r\nimport TESection from './components/leaderboards/TESection';\r\nimport OLSection from './components/leaderboards/OLSection';\r\nimport KickingSection from './components/leaderboards/KickingSection';\r\nimport PuntingSection from './components/leaderboards/PuntingSection';\r\nimport TableDefenseBuildData from './components/pageDefense/TableDefenseBuildData';\r\nimport DropDown from './components/common/DropDown';\r\n\r\n\r\nclass Leaderboards extends Component {\r\n constructor(props, context) {\r\n const currentDate = new Date();\r\n const currentMonth = currentDate.getMonth();\r\n const currentYear = currentDate.getFullYear();\r\n\r\n super(props, context);\r\n this.state = {\r\n searchUserInput: '', // user input from autocomplete. triggers selection list updates\r\n selectedPlayerID: '' // set to true when API calls complete for a given player. triggers page update\r\n }\r\n this.version = '2022-09-13a';\r\n this.alldependenciescomplete = false;\r\n this.loadingmessage = 'Loading...';\r\n this.passingstats = []; // passing data retrieved from data API \r\n this.rushingstats = []; // rushing data retrieved from data API\r\n this.accuracystats = []; // accuracy data retrieved from data API\r\n this.receivingstats = []; // receiving data retrieved from data API\r\n this.passdefensestats = []; // passdefense data retrieved from data API\r\n this.passrushstats = []; // passrush data retrieved from data API\r\n this.rushdefensestats = []; // rushdefense data retrieved from data API\r\n this.defensestats = []; // defense data retrieved from data API\r\n this.kickingstats = []; // kicking data retrieved from data API\r\n this.kickretstats = []; // kickret data retrieved from data API\r\n this.puntingstats = []; // punting data retrieved from data API\r\n this.puntretstats = []; // puntret data retrieved from data API\r\n this.blockingstats = []; // blocking data retrieved from data API\r\n this.globalstats = []; // global stats regardless of position - currently not in use\r\n this.defenseData = []; // array to consolidate defense data - unique to defense due to condiional layout\r\n this.token = ''; // token value retrieved from authorization API and used for data API\r\n this.playerSelectionList = []; // all NFL players to be listed in the Autocomplete dropdown\r\n this.asyncAPIcount = 0; // number of API calls completed for a given player position\r\n this.asyncAPIcallstocomplete = 0; // number of API call to be completed for a given player position\r\n this.playername = '(No player selected)'; // player name to be displayed on page\r\n this.playerposition = ''; // indicates which stats to be displayed. also displayed on page. \r\n this.playerid = 0; // populated on autocomplete choice and used to retrieve data\r\n this.usererrormessage = ''; // error message to be displayed on the page in place of stats\r\n this.pagelayout = ''; // indicate which type of page to be rendered\r\n this.category = 'QB';\r\n this.startSeason = currentMonth >= 8 ? currentYear : currentYear - 1;\r\n this.endSeason = currentMonth >= 8 ? currentYear : currentYear - 1;\r\n this.minAttempts = 0;\r\n this.filter = { startSeason: String(this.startSeason), endSeason: String(this.endSeason), minAttempts: '1' };\r\n this.scrollY = 0;\r\n \r\n this.reScroll = this.reScroll.bind(this);\r\n this.onSubmit = this.onSubmit.bind(this);\r\n\r\n if (this.props.match.params.cat){\r\n switch (this.props.match.params.cat){\r\n case 'QB':\r\n this.category = 'QB';\r\n break;\r\n case 'DE':\r\n case 'DT':\r\n case 'DE/DT': \r\n this.category = 'DE/DT';\r\n break;\r\n case 'LB':\r\n this.category = 'LB';\r\n break;\r\n case 'CB':\r\n case 'S':\r\n case 'CB/S':\r\n this.category = 'CB/S';\r\n break;\r\n case 'RB':\r\n case 'FB':\r\n case 'RB/FB':\r\n this.category = 'RB/FB';\r\n break;\r\n case 'WR':\r\n case 'TE':\r\n case 'WR/TE':\r\n this.category = 'WR/TE';\r\n break;\r\n case 'T':\r\n case 'G':\r\n case 'C':\r\n case 'C/G/T':\r\n this.category = 'C/G/T';\r\n break;\r\n case 'K':\r\n this.category = 'K';\r\n break;\r\n case 'P':\r\n this.category = 'P';\r\n break;\r\n default:\r\n this.category= 'QB';\r\n break;\r\n }\r\n };\r\n this.setCookie();\r\n let cookies = document.cookie.split(';');\r\n for (var i=0; i < cookies.length; i++){\r\n let c = cookies[i];\r\n while(c.substring(0, 1) === ' ') c = c.substring(1, c.length);\r\n if (c.indexOf('playerId') === 0 && !isNaN(c.substring(9, c.length))) {\r\n this.playerId = c.substring(9, c.length);\r\n }\r\n }\r\n }\r\n\r\n setCookie(){\r\n document.cookie = 'playerPos=' + this.category + '; path=/;';\r\n }\r\n\r\n componentDidMount(){\r\n window.addEventListener('scroll', this.handleScroll.bind(this));\r\n this.getSecurityToken();\r\n }\r\n\r\n componentWillUnmount(){\r\n window.removeEventListener('scroll', this.handleScroll.bind(this));\r\n }\r\n\r\n // There are three API calls that must complete in sequence when this page loads:\r\n //\r\n // 1) obtain token from security API\r\n // 2) use token to access the data API\r\n // 3) load NFL players to an array for user selection\r\n //\r\n // API chaining is accomplished by each API routine invoking the next on successfull completion:\r\n // 1) getSecurityToken --> 2) accessNFLdata --> 3) loadNFLplayers\r\n //\r\n getSecurityToken = () => {\r\n this.executeHTTPRequestPost(\r\n 'https://auth.sportsinfosolutions.com/connect/token',\r\n (response) => {\r\n this.token = response.access_token;\r\n this.changeCategory(this.category, null);\r\n },\r\n (error) => {\r\n console.log(\"getSecurityToken\",error);\r\n }\r\n )\r\n }\r\n \r\n // Gain access to NFL data API using the token obtained from the secutiry API\r\n getAllPlayers = (event) => {\r\n const reqUrl = 'https://api.sportsinfosolutions.com/api/v1/nfl/players/allplayerswithteamnew';\r\n this.executeHTTPRequest(\r\n reqUrl,\r\n 'get',\r\n (response) => {\r\n this.playerSelectionList = response;\r\n this.asyncAPImonitor(this.playerSelectionList);\r\n },\r\n (error) => {\r\n console.log(\"getAllPlayers\",error);\r\n }\r\n )\r\n }\r\n\r\n filterPlayers = (ids, data) => {\r\n return data.filter(d => ids.indexOf(d.playerId) > -1);\r\n }\r\n\r\n // get passing stats from NFL data API\r\n getPassingStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passing`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passingstats = response.data;\r\n this.asyncAPImonitor(this.passingstats);\r\n },\r\n (error) => {\r\n console.log(\"getPassingStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get rushing stats from NFL API\r\n getRushingStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/rushing`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.rushingstats = response.data;\r\n this.asyncAPImonitor(this.rushingstats);\r\n },\r\n (error) => {\r\n console.log(\"getRushingStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get accuracy stats from NFL API\r\n getAccuracyStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/qb_dd`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.accuracystats = response.data;\r\n this.asyncAPImonitor(this.accuracystats);\r\n },\r\n (error) => {\r\n console.log(\"getAccuracyStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get receiving stats from NFL API\r\n getReceivingStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/receiving`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.receivingstats = response.data;\r\n this.asyncAPImonitor(this.receivingstats);\r\n },\r\n (error) => {\r\n console.log(\"getReceivingStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get blocking stats from NFL API\r\n getBlockingStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/blocking`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.blockingstats = response.data;\r\n this.asyncAPImonitor(this.blockingstats);\r\n },\r\n (error) => {\r\n console.log(\"getBlockingStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get puntret stats from NFL API\r\n getPuntRetStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/puntret`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.puntretstats = response.data;\r\n this.asyncAPImonitor(this.puntretstats);\r\n },\r\n (error) => {\r\n console.log(\"getPuntRetStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get kickret stats from NFL API\r\n getKickRetStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/kickret`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.kickretstats = response.data;\r\n this.asyncAPImonitor(this.kickretstats);\r\n },\r\n (error) => {\r\n console.log(\"getKickRetStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get punting stats from NFL API\r\n getPuntingStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/punting`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.puntingstats = response.data;\r\n this.asyncAPImonitor(this.puntingstats);\r\n },\r\n (error) => {\r\n console.log(\"getPuntingStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get kicking stats from NFL API\r\n getKickingStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/kicking`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.kickingstats = response.data;\r\n this.asyncAPImonitor(this.kickingstats);\r\n },\r\n (error) => {\r\n console.log(\"getKickingStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get passdefense stats from NFL API\r\n getPassDefenseStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passdefense`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passdefensestats = response.data;\r\n this.asyncAPImonitor(this.passdefensestats);\r\n },\r\n (error) => {\r\n console.log(\"getPassDefenseStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get passrush stats from NFL API\r\n getPassRushStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/passrush`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.passrushstats = response.data;\r\n this.asyncAPImonitor(this.passrushstats);\r\n },\r\n (error) => {\r\n console.log(\"getPassRushStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get rushdefense stats from NFL API\r\n getRushDefenseStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/rushdefense`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.rushdefensestats = response.data;\r\n this.asyncAPImonitor(this.rushdefensestats);\r\n },\r\n (error) => {\r\n console.log(\"getRushDefenseStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get defense stats from NFL API\r\n getDefenseStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/v1/nfl/seasons/players/defense`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.defensestats = response.data;\r\n this.asyncAPImonitor(this.defensestats);\r\n },\r\n (error) => {\r\n console.log(\"getDefenseStats\",error);\r\n },\r\n true\r\n )\r\n }\r\n\r\n // get global stats and player bio info\r\n getGlobalStats = (ids) => {\r\n const requesturl = `https://api.sportsinfosolutions.com/api/va/nfl/players/globalinfo?PlayerId=0`;\r\n this.executeHTTPRequest(\r\n requesturl,\r\n 'get',\r\n (response) => {\r\n this.globalstats = response.data;\r\n this.asyncAPImonitor();\r\n },\r\n (error) => {\r\n console.log(\"getGlobalStats\",error);\r\n }\r\n )\r\n }\r\n\r\n // general purpose fetch method called by each API related method\r\n executeHTTPRequest = (url, method, callback, failback, incParameters) => {\r\n if (incParameters){\r\n url += '?startSeason=' + this.filter.startSeason + '&endSeason=' + this.filter.endSeason;\r\n }\r\n fetch(\r\n url, {\r\n method: method,\r\n headers: {\r\n Accept: 'application/json, text/plain, */*',\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${this.token}`\r\n },\r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if(response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n executeHTTPRequestPost = (url, callback, failback) => {\r\n var details = {'client_id': 'FootballApp@sportsinfosolutions.com',\r\n 'client_secret': 'xPc14+wU2zHtydg12AgglRCkL+ALNlX/miH2JJHp2/k=',\r\n 'grant_type': 'client_credentials',\r\n 'scope': 'sisapi'};\r\n\r\n var formBody = [];\r\n for (var property in details){\r\n var encodedKey = encodeURIComponent(property);\r\n var encodedValue = encodeURIComponent(details[property]);\r\n formBody.push(encodedKey + \"=\" + encodedValue);\r\n }\r\n formBody = formBody.join(\"&\");\r\n\r\n fetch(\r\n url, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},\r\n body: formBody, \r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if (response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n // Replacement for Promise.all to ensure that parallel async\r\n // dependencies complete before triggering a render by updating\r\n // state.\r\n //\r\n // Prior to launching parallel async tasks, set dependencycount\r\n // to zero and dependenciestocomplete to the number of async tasks\r\n // to be complete. Each task must call this function upon successful\r\n // completion. When dependencycount is equal to dependenciestocomplete,\r\n // state will be updated and dependencycount and dependenciestocomplete\r\n // are reset to zero.\r\n //\r\n asyncAPImonitor = (d) => {\r\n this.asyncAPIcount += 1;\r\n this.asyncAPIrows += d.length;\r\n if (this.asyncAPIcount === this.asyncAPIcallstocomplete) {\r\n var filteredPlayers = [];\r\n switch (this.category) {\r\n case 'QB':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (p.positionCategory === 'QB'){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.passingstats = this.filterPlayers(filteredPlayers, this.passingstats);\r\n this.rushingstats = this.filterPlayers(filteredPlayers, this.rushingstats);\r\n this.accuracystats = this.filterPlayers(filteredPlayers, this.accuracystats);\r\n break;\r\n case 'DE/DT': \r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (['DE', 'DT'].indexOf(p.positionCategory) > -1){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.passdefensestats = this.filterPlayers(filteredPlayers, this.passdefensestats);\r\n this.passrushstats = this.filterPlayers(filteredPlayers, this.passrushstats);\r\n this.rushdefensestats = this.filterPlayers(filteredPlayers, this.rushdefensestats);\r\n this.defensestats = this.filterPlayers(filteredPlayers, this.defensestats);\r\n break;\r\n case 'LB':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (p.positionCategory === 'LB'){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.passdefensestats = this.filterPlayers(filteredPlayers, this.passdefensestats);\r\n this.passrushstats = this.filterPlayers(filteredPlayers, this.passrushstats);\r\n this.rushdefensestats = this.filterPlayers(filteredPlayers, this.rushdefensestats);\r\n this.defensestats = this.filterPlayers(filteredPlayers, this.defensestats);\r\n break;\r\n case 'CB/S':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (['CB', 'S'].indexOf(p.positionCategory) > -1){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.passdefensestats = this.filterPlayers(filteredPlayers, this.passdefensestats);\r\n this.passrushstats = this.filterPlayers(filteredPlayers, this.passrushstats);\r\n this.rushdefensestats = this.filterPlayers(filteredPlayers, this.rushdefensestats);\r\n this.defensestats = this.filterPlayers(filteredPlayers, this.defensestats);\r\n this.puntretstats = this.filterPlayers(filteredPlayers, this.puntretstats);\r\n this.kickretstats = this.filterPlayers(filteredPlayers, this.kickretstats);\r\n break;\r\n case 'RB/FB':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (['RB', 'FB'].indexOf(p.positionCategory) > -1){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.rushingstats = this.filterPlayers(filteredPlayers, this.rushingstats);\r\n this.receivingstats = this.filterPlayers(filteredPlayers, this.receivingstats);\r\n this.puntretstats = this.filterPlayers(filteredPlayers, this.puntretstats);\r\n this.kickretstats = this.filterPlayers(filteredPlayers, this.kickretstats);\r\n break;\r\n case 'WR/TE':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (['WR', 'TE'].indexOf(p.positionCategory) > -1){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.blockingstats = this.filterPlayers(filteredPlayers, this.blockingstats);\r\n this.rushingstats = this.filterPlayers(filteredPlayers, this.rushingstats);\r\n this.receivingstats = this.filterPlayers(filteredPlayers, this.receivingstats);\r\n this.puntretstats = this.filterPlayers(filteredPlayers, this.puntretstats);\r\n this.kickretstats = this.filterPlayers(filteredPlayers, this.kickretstats);\r\n break;\r\n case 'C/G/T':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (['T', 'G', 'C'].indexOf(p.positionCategory) > -1){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.blockingstats = this.filterPlayers(filteredPlayers, this.blockingstats);\r\n this.rushingstats = this.filterPlayers(filteredPlayers, this.rushingstats);\r\n break;\r\n case 'K':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (p.positionCategory === 'K'){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.kickingstats = this.filterPlayers(filteredPlayers, this.kickingstats);\r\n break;\r\n case 'P':\r\n filteredPlayers = this.playerSelectionList.map(p => {\r\n if (p.positionCategory === 'P'){\r\n return p.playerId;\r\n };\r\n return null;\r\n });\r\n this.puntingstats = this.filterPlayers(filteredPlayers, this.puntingstats);\r\n this.passingstats = this.filterPlayers(filteredPlayers, this.passingstats);\r\n this.rushingstats = this.filterPlayers(filteredPlayers, this.rushingstats);\r\n break;\r\n default:\r\n console.log(\"Leaderboard asyncAPImonitor - invalid category:\", this.category);\r\n }\r\n this.alldependenciescomplete = true;\r\n this.asyncAPIcount = 0;\r\n this.asyncAPIcallstocomplete = 0;\r\n this.usererrormessage = '';\r\n this.loadingmessage = '';\r\n this.forceUpdate();\r\n } \r\n }\r\n\r\n changeCategory(category, event){\r\n this.category = category;\r\n this.alldependenciescomplete = false; \r\n this.asyncAPIcount = 0;\r\n this.asyncAPIrows = 0; \r\n this.asyncAPIcallstocomplete = 0;\r\n this.setCookie();\r\n window.history.replaceState({prevCategory: category}, 'NFL Player Stats' + this.category, '/leaderboards/' + this.category.split(\"/\")[0]);\r\n this.forceUpdate();\r\n switch (this.category){\r\n case 'QB':\r\n this.asyncAPIcallstocomplete += 4;\r\n this.getAllPlayers();\r\n this.getPassingStats();\r\n this.getRushingStats();\r\n this.getAccuracyStats();\r\n break;\r\n case 'DE/DT': \r\n this.asyncAPIcallstocomplete += 5;\r\n this.getAllPlayers();\r\n this.getDefenseStats();\r\n this.getPassDefenseStats();\r\n this.getPassRushStats();\r\n this.getRushDefenseStats();\r\n break;\r\n case 'LB':\r\n this.asyncAPIcallstocomplete += 5;\r\n this.getAllPlayers();\r\n this.getDefenseStats();\r\n this.getPassDefenseStats();\r\n this.getPassRushStats();\r\n this.getRushDefenseStats();\r\n break;\r\n case 'CB/S':\r\n this.asyncAPIcallstocomplete += 7;\r\n this.getAllPlayers();\r\n this.getDefenseStats();\r\n this.getPassDefenseStats();\r\n this.getPassRushStats();\r\n this.getRushDefenseStats();\r\n this.getPuntRetStats();\r\n this.getKickRetStats();\r\n break;\r\n case 'RB/FB':\r\n this.asyncAPIcallstocomplete += 5;\r\n this.getAllPlayers();\r\n this.getRushingStats();\r\n this.getReceivingStats();\r\n this.getPuntRetStats();\r\n this.getKickRetStats();\r\n break;\r\n case 'WR/TE':\r\n this.asyncAPIcallstocomplete += 6;\r\n this.getAllPlayers();\r\n this.getBlockingStats();\r\n this.getRushingStats();\r\n this.getReceivingStats();\r\n this.getPuntRetStats();\r\n this.getKickRetStats();\r\n this.blockingstats = [];\r\n break;\r\n case 'C/G/T':\r\n this.asyncAPIcallstocomplete += 3;\r\n this.getAllPlayers();\r\n this.getBlockingStats();\r\n this.getRushingStats();\r\n break;\r\n case 'K':\r\n this.asyncAPIcallstocomplete += 2;\r\n this.getAllPlayers();\r\n this.getKickingStats();\r\n break;\r\n case 'P':\r\n this.asyncAPIcallstocomplete += 4;\r\n this.getAllPlayers();\r\n this.getPuntingStats();\r\n this.getPassingStats();\r\n this.getRushingStats();\r\n break;\r\n default:\r\n this.usererrormessage = '('+this.category+' not supported at this time)';\r\n this.alldependenciescomplete = true;\r\n break;\r\n }\r\n }\r\n\r\n onSubmit(event, startSeason, endSeason, minAttempts){\r\n this.filter.minAttempts = minAttempts;\r\n if (this.filter.startSeason !== startSeason || this.filter.endSeason !== endSeason){\r\n this.filter.startSeason = startSeason;\r\n this.filter.endSeason = endSeason;\r\n this.changeCategory(this.category, null);\r\n }\r\n else{\r\n this.forceUpdate();\r\n }\r\n }\r\n\r\n tabSelected(pos){\r\n if (pos === this.category){\r\n return 'true';\r\n }\r\n else{\r\n return 'false';\r\n }\r\n }\r\n\r\n tabActive(pos){\r\n if (pos === this.category){\r\n return 'nav-link active';\r\n }\r\n else{\r\n return 'nav-link';\r\n }\r\n }\r\n\r\n handleScroll(){\r\n if (window.scrollY > 0){\r\n this.scrollY = window.scrollY;\r\n }\r\n else{\r\n this.reScroll(this.scrollY);\r\n }\r\n }\r\n \r\n reScroll(scrollY = this.scrollY){\r\n window.scrollTo(0, scrollY);\r\n }\r\n\r\n render() {\r\n if (['DE/DT', 'LB', 'CB/S'].indexOf(this.category) > -1 && this.alldependenciescomplete) {\r\n this.defenseData = [];\r\n this.defenseData = TableDefenseBuildData(this.defensestats, this.passdefensestats,this.passrushstats,this.rushdefensestats,this.kickretstats,this.puntretstats);\r\n }\r\n if (!this.playerId){\r\n this.playerId = '';\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n \r\n \"logo\"\r\n \r\n
    \r\n
    \r\n
    \r\n

    Player Search:

    \r\n {\r\n this.playerSelectionList &&\r\n \r\n }\r\n last, first name (pos, team #jersey)\r\n
    \r\n
    \r\n

    \r\n \r\n \r\n
    SIS DataHub
    \r\n \r\n
    \r\n
    \r\n
    \r\n
      \r\n
    • \r\n QB\r\n
    • \r\n
    • \r\n RB/FB\r\n
    • \r\n
    • \r\n WR/TE\r\n
    • \r\n
    • \r\n C/G/T\r\n
    • \r\n
    • \r\n DE/DT\r\n
    • \r\n
    • \r\n LB\r\n
    • \r\n
    • \r\n CB/S\r\n
    • \r\n
    • \r\n K\r\n
    • \r\n
    • \r\n P\r\n
    • \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {\r\n !this.alldependenciescomplete &&\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n }\r\n {\r\n this.category === 'QB' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'RB/FB' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'WR/TE' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'C/G/T' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'DE/DT' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'LB' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'CB/S' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'K' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n {\r\n this.category === 'P' && this.alldependenciescomplete && this.asyncAPIrows !== 0 &&\r\n \r\n }\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    v. {this.version}

    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default Leaderboards;","import React, { Component } from 'react';\r\nimport DropDown from './components/common/DropDown';\r\n\r\nclass Glossary extends Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.version = '2022-09-13a';\r\n this.state = {\r\n searchUserInput: '', // user input from autocomplete. triggers selection list updates\r\n selectedPlayerID: '', // set to true when API calls complete for a given player. triggers page update\r\n searchGlossaryKey: '' // used to filter the display of glossary items\r\n }\r\n// this.onGlossaryFilterChange = this.onGlossaryFilterChange.bind(this);\r\n this.playerSelectionList = []; // all NFL players to be listed in the Autocomplete dropdown\r\n this.token = ''; // token value retrieved from authorization API and used for data API\r\n this.playerId = 0;\r\n this.playerCategory = 'QB';\r\n let cookies = document.cookie.split(';');\r\n for (var i=0; i < cookies.length; i++){\r\n let c = cookies[i];\r\n while(c.substring(0, 1) === ' ') c = c.substring(1, c.length);\r\n if (c.indexOf('playerId') === 0 && !isNaN(c.substring(9, c.length))) {\r\n this.playerId = c.substring(9, c.length);\r\n } else if (c.indexOf('playerPos') === 0) {\r\n this.playerCategory = c.substring(10, c.length);\r\n }\r\n }\r\n let key = 0;\r\n this.glossaryEntries = [\r\n [key++,\"Passing\",\"\"],\r\n [key++,\"Air-Yards%:\",\"Percent of passing yards gained through Air-Yards.\"],\r\n [key++,\"AirYards or Air-Yards:\",\"The number of yards the ball travels downfield from the line of scrimmage to where the wide receiver catches the ball.\"],\r\n [key++,\"Average Throw Depth:\",\"Average depth of each of the quarterback's pass attempts.\"],\r\n [key++,\"Behind Line of Scrimmage:\",\"Throws where the target depth was behind the line of scrimmage.\"],\r\n [key++,\"Catchable:\",\"Number of passes that were catchable, according to SIS Video Scouts.\"],\r\n [key++,\"Catchable%:\",\"Percent of passes that were catchable, according to SIS Video Scouts.\"],\r\n [key++,\"Deep:\",\"Throws where the target depth was at least 20 yards.\"],\r\n [key++,\"EPA (Pro only):\",\"Expected Points Added; the total change in the offense's Expected Points that came on passes thrown by the player.\"],\r\n [key++,\"Int%:\",\"Percent of passes resulting in interception.\"],\r\n [key++,\"Intermediate:\",\"Throws where the target depth was between 10 and 19 yards.\"],\r\n [key++,\"IQR:\",\"Sports Info Solutions' proprietary quarterback metric builds on the traditional Passer Rating formula by considering the value of a quarterback independent of results outside of his control such as dropped passes, dropped interceptions, throwaways, etc.\"],\r\n [key++,\"Left - Attempt Pct:\",\"Throws to the left of the hashmarks.\"],\r\n [key++,\"Lg:\",\"Longest pass.\"],\r\n [key++,\"Mid - Attempt Pct:\",\"Throws between the hashmarks.\"],\r\n [key++,\"On-Tgt or On Target:\",\"The number of times a quarterback's throw is deemed catchable by the wide receiver, regardless of whether or not the receiver catches the pass.\"],\r\n [key++,\"On-Tgt% or On Target%:\",\"The number of on-target/catchable throws a quarterback makes divided by the total number of pass attempts.\"],\r\n [key++,\"Points Earned or Passing Points Earned:\",\"The total of a player's EPA responsibility on passes using the Total Points system that distributes credit among all players on the field for a given play. For passers, this includes accounting for offensive line play, sacks, off-target passes, dropped passes, and dropped interceptions.\"],\r\n [key++,\"Positive% (Pro only):\",\"Positive Play Percentage; the percentage of passes thrown by the player that resulted in a positive EPA (i.e. a successful play for the offense).\"],\r\n [key++,\"Rating or QB Rating:\",\"Traditional Passer Rating.\"],\r\n [key++,\"Right - Attempt Pct:\",\"Throws to the right of the hashmarks.\"],\r\n [key++,\"Sack%:\",\"Percent of dropbacks resulting in a sack.\"],\r\n [key++,\"Short:\",\"Throws where the target depth was between 0 and 9 yards.\"],\r\n [key++,\"TD%:\",\"Percent of passes resulting in touchdown.\"],\r\n [key++,\"Y/A or Yds/Att:\",\"Yards per pass attempt.\"],\r\n [key++,\"Y/G:\",\"Passing yards per game played.\"],\r\n [key++,\"Rushing\",\"\"],\r\n [key++,\"1st Down% (Pro only):\",\"The percentage of rushes in which the rusher achieves a first down.\"],\r\n [key++,\"Brkn Tkls or Broken Tackles:\",\"The number of times a defender was in position to make a tackle and made contact with the ball carrier, but failed to bring them down.\"],\r\n [key++,\"BT/A (Renamed from 'Brkn Tkl%') or Broken Tackles Pct.:\",\"The total number of broken tackles on rushes divided by the number of rush attempts.\"],\r\n [key++,\"EPA (Pro only):\",\"Expected Points Added; the total change in the offense's Expected Points that came on carries by the player.\"],\r\n [key++,\"Inside:\",\"Runs where the intended direction was between the center and guard (excluding kneeldowns).\"],\r\n [key++,\"Lg:\",\"Longest run.\"],\r\n [key++,\"Off Tackle:\",\"Runs where the intended direction was between the guard and the tackle.\"],\r\n [key++,\"Outside:\",\"Runs where the intended direction was outside the tackles.\"],\r\n [key++,\"Points Earned or Rushing Points Earned:\",\"The total of a player's EPA responsibility on rushes using the Total Points system that distributes credit among all players on the field for a given play. For rushers, this includes accounting for offensive line play, run direction, broken tackles, and fumbles.\"],\r\n [key++,\"Positive% (Pro only):\",\"Positive Play Percentage; the percentage of rushes by the player that resulted in a positive EPA (i.e. a successful play for the offense).\"],\r\n [key++,\"Y/A or Rushing Avg:\",\"Yards per rush attempt.\"],\r\n [key++,\"Y/G:\",\"Rushing yards per game played.\"],\r\n [key++,\"YAC/Att or Yards After Contact Avg.:\",\"Yards after contact per rush attempt.\"],\r\n [key++,\"YAContact or Yards After Contact:\",\"The amount of additional yards the ball carrier achieves after first contact is made by a defender.\"],\r\n [key++,\"Receiving\",\"\"],\r\n [key++,\"1st Down% or First Down%:\",\"The percentage of receptions in which the receiver achieves a first down.\"],\r\n [key++,\"AirYards:\",\"The number of yards the ball travels downfield from the line of scrimmage to where the wide receiver catches the ball.\"],\r\n [key++,\"Avg Depth:\",\"Average depth of each reception relative to the line of scrimmage.\"],\r\n [key++,\"Brkn Tkls:\",\"The number of times a defender was in position to make a tackle and made contact with the ball carrier after a reception, but failed to bring them down.\"],\r\n [key++,\"Catchable - All:\",\"Total Number of catchable throws targeting a receiver.\"],\r\n [key++,\"Catchable:\",\"Pass attempts that the receiver was capable of catching.\"],\r\n [key++,\"Comp% or Rec%:\",\"The percentage of passes thrown to the receiver that result in a catch.\"],\r\n [key++,\"Drop %:\",\"Drops/catchable targets.\"],\r\n [key++,\"EPA (Pro only):\",\"Expected Points Added; the total change in the offense's Expected Points that came on passes thrown to the player.\"],\r\n [key++,\"Lg:\",\"Longest reception.\"],\r\n [key++,\"On-Tgt Catch % or Catch%:\",\"Total receptions divided by the number of catchable targets.\"],\r\n [key++,\"Points Earned or Receiving Points Earned:\",\"The total of a player's EPA responsibility on targets using the Total Points system that distributes credit among all players on the field for a given play. For receivers, this includes accounting for offensive line play, off-target passes, dropped passes, and broken tackles.\"],\r\n [key++,\"Positive% (Pro only):\",\"Positive Play Percentage; the percentage of passes thrown to the player that resulted in a positive EPA (i.e. a successful play for the offense).\"],\r\n [key++,\"Rec. Rtg or Receiver Rating:\",\"The quarterback's traditional Passer Rating on throws when targeting the receiver.\"],\r\n [key++,\"Share%:\",\"aka Target Share, the Percent of the team's targets directed toward a specific player.\"],\r\n [key++,\"Y/G:\",\"Receiving yards per game played.\"],\r\n [key++,\"Y/R or Receiving Avg.:\",\"Yards per reception.\"],\r\n [key++,\"Y/Tgt (Pro only):\",\"Receiving yards per pass attempt in which the receiver is targeted, including incompletions.\"],\r\n [key++,\"YAC or Yds After Catch:\",\"Yards after catch, the amount of additional yards the ball carrier is a.\"],\r\n [key++,\"YAC Per Rec:\",\"Avg. yards after catch per reception.\"],\r\n [key++,\"YAContact:\",\"The amount of additional receiving yards the ball carrier achieves after first contact is made by a defender.\"],\r\n [key++,\"Blocking\",\"\"],\r\n [key++,\"AdjBB% (Pro only):\",\"Strength of schedule Adjusted Blown Block Rate. Takes the extent to which a player's defensive opponents had forced blown blocks in their other matchups above those offenses' averages, and uses that as a strength-of-schedule adjustment for Blown Block Rate.\"],\r\n [key++,\"BB or Total Blown Blocks:\",\"A blown block, any time a blocker does not successfully block the defender they attempted to engage with and, as a result, gives the defender an opportunity to negatively affect the play.\"],\r\n [key++,\"BB% or Blown Blocks Pct:\",\"Blown Block Rate, the percentage of blocking snaps that the player had a blown block.\"],\r\n [key++,\"Blown Blocks - Pass:\",\"Number of blown blocks on a passing play.\"],\r\n [key++,\"Blown Blocks - Rush:\",\"Number of blown blocks on a rushing play.\"],\r\n [key++,\"Bounce Rate (Pro only):\",\"Bounces per run-blocking snap.\"],\r\n [key++,\"Bounces (Pro only):\",\"The number of times the player was run blocking and the rusher did not go through the designed gap.\"],\r\n [key++,\"Designed Run Pct. (Pro only):\",\"The percentage of run-blocking snaps that the player was on the field where the design of the play was for the rusher to run through their gap.\"],\r\n [key++,\"Designed Runs (Pro only):\",\"The number of times a rush attempt was designed to go through the blocker's gap.\"],\r\n [key++,\"EPA (Pro only):\",\"Expected Points Added; the total change in the offense's Expected Points that came on plays in which the player was blocking.\"],\r\n [key++,\"Opp Sacks - Pct:\",\"Percent of sacks allowed to the opponent on passing snaps.\"],\r\n [key++,\"Opp Sacks - Total:\",\"Number of sacks allowed to the opponent.\"],\r\n [key++,\"Opp Stuffs - Pct:\",\"Percent of run plays where the ballcarrier was stopped behind the line of scrimmage.\"],\r\n [key++,\"Opp Stuffs - Total:\",\"Number of run plays where the ballcarrier was stopped behind the line of scrimmage.\"],\r\n [key++,\"Passing Snaps:\",\"Number of passing snaps player was used as a blocker.\"],\r\n [key++,\"Points Earned (Pro only):\",\"The total of a player's EPA responsibility while blocking using the Total Points system that distributes credit among all players on the field for a given play. For blockers, this includes accounting for blown blocks, yards before contact on running plays, and performance given the defenders in the box.\"],\r\n [key++,\"Positive% (Pro only):\",\"Positive Play Percentage; the percentage of plays in which the player was blocking that resulted in a positive EPA (i.e. a successful play for the offense).\"],\r\n [key++,\"Total Run Snaps or Rushing Snaps:\",\"The number of run-blocking snaps on which the player was blocking.\"],\r\n [key++,\"Pass Defense\",\"\"],\r\n [key++,\"Catchable (Pro only):\",\"Pass attempts that the receiver was capable of catching when the player was the primary defender.\"],\r\n [key++,\"Cmp:\",\"Number of completions allowed by a player while in pass coverage as the primary defender.\"],\r\n [key++,\"Cmp%:\",\"Percent of passes targeted at a player in pass coverage that resulted in a completion.\"],\r\n [key++,\"Cov. Snaps (Pro only):\",\"The number of pass snaps on which the player was in coverage.\"],\r\n [key++,\"Deserved Catch %:\",\"The percentage of targets as the primary defender that the receiver either caught or dropped the ball when the pass was catchable.\"],\r\n [key++,\"Int Drops:\",\"Number of easily catchable interception opportunities that did not result in an interception.\"],\r\n [key++,\"Pass Batted or Passes Batted:\",\"The number of times the defender knocked a pass down at the line of scrimmage by a defender rendering the pass entirely uncatchable.\"],\r\n [key++,\"Pass Breakups:\",\"Number of times a player physically prevented a receiver from making the catch.\"],\r\n [key++,\"Pass Def. or Defensed:\",\"Passes defensed; the number of times the defender broke up a throw at the catch point. This can be done by either knocking the ball away or hitting the receiver as the ball reaches them to disrupt the catch.\"],\r\n [key++,\"Pass Defl. or Deflected:\",\"Passes deflected; the number of times the defender made contact with a pass either at the line of scrimmage or in the secondary, but without entirely stopping the pass from moving downfield.\"],\r\n [key++,\"Points Saved - Pass Defense:\",\"The total of a player's EPA responsibility while in coverage using the Total Points system that distributes credit among all players on the field for a given play (with positive numbers being good). For pass defenders, this includes accounting for pass rush, broken tackles, dropped interceptions, turnovers, and turnover returns.\"],\r\n [key++,\"Positive% (Pro only):\",\"Positive Play Percentage; the percentage of plays with the player in coverage that resulted in a positive EPA (i.e. a successful play for the offense).\"],\r\n [key++,\"QBR Against (Pro only):\",\"Traditional Passer Rating allowed as the primary defender EPA.\"],\r\n [key++,\"Targeted:\",\"Number of times a player was targeted by a pass while in pass coverage as the primary defender.\"],\r\n [key++,\"TD Allowed:\",\"Number of touchdowns allowed on passes targeting a defensive player in pass coverage.\"],\r\n [key++,\"Y/A (renamed from 'YPA') or Yds/Trgt:\",\"Yards per pass attempt allowed as the primary pass defender.\"],\r\n [key++,\"Y/G (Renamed from 'YPG') (Pro only):\",\"Yards allowed as the primary pass defender per game played.\"],\r\n [key++,\"Pass Rushing\",\"\"],\r\n [key++,\"Ast. Sacks (Pro only):\",\"Assisted sacks; the number of times the defender helped sack the QB with the assistance of another defender.\"],\r\n [key++,\"Comb. Sacks or Sacks:\",\"Combined sacks; the number of solo sacks added to half of the amount of assisted sacks.\"],\r\n [key++,\"EPA (Pro only):\",\"Expected Points Added; the total change in the offense's Expected Points that came when the player was rushing the passer.\"],\r\n [key++,\"FF:\",\"Forced fumbles.\"],\r\n [key++,\"FR (renamed from 'RF') (Pro only):\",\"Fumbles recovered.\"],\r\n [key++,\"Hit%:\",\"Percent of pass rushes that resulted in a QB hit.\"],\r\n [key++,\"Hits:\",\"Any meaningful contact (more than a light brush) made by the defender on the quarterback before or as he releases the football.\"],\r\n [key++,\"Hurries:\",\"When a defender gets close to the quarterback and forces him to rush a throw before he may have otherwise thrown it.\"],\r\n [key++,\"Hurry%:\",\"Percent of pass rushes that resulted in a QB hurry.\"],\r\n [key++,\"Knockdown%:\",\"Percent of pass rushes that resulted in a QB knockdown.\"],\r\n [key++,\"Knockdowns:\",\"Whenever a quarterback gets knocked down to the ground by a defender.\"],\r\n [key++,\"Pass Defl. (Pro only):\",\"Passes deflected; the number of times the defender made contact with a pass either at the line of scrimmage or in the secondary, but without entirely stopping the pass from moving downfield.\"],\r\n [key++,\"Pass Rushes:\",\"The number of pass snaps on which the player was rushing the passer.\"],\r\n [key++,\"Pass Snaps:\",\"The number of pass snaps on which the player was on the field.\"],\r\n [key++,\"Passes Batted:\",\"The number of times the defender knocked a pass down at the line of scrimmage by a defender rendering the pass entirely uncatchable.\"],\r\n [key++,\"Passes Batted%:\",\"Percent of pass rushes that resulted in a pass batted.\"],\r\n [key++,\"Points Saved - Pass Rush:\",\"The total of a player's EPA responsibility while rushing the passer using the Total Points system that distributes credit among all players on the field for a given play (with positive numbers being good). For pass rushers, this includes accounting for sacks, blown blocks forced, turnovers, turnover returns, and other disruptions at the line of scrimmage.\"],\r\n [key++,\"Positive% (Pro only):\",\"Positive Play Percentage; the percentage of plays with the player rushing the passer that resulted in a positive EPA (i.e. a successful play for the offense).\"],\r\n [key++,\"Pressure%:\",\"Percent of pass rushes that resulted in a QB pressure.\"],\r\n [key++,\"Pressures:\",\"Any play in which there is a quarterback hurry, hit, or knockdown.\"],\r\n [key++,\"Rush%:\",\"Percent of pass snaps the player rushed the passer.\"],\r\n [key++,\"Sack%:\",\"Percent of pass rushes that resulted in a sack.\"],\r\n [key++,\"Solo Sacks (Pro only):\",\"Sacks in which the defender brought down the quarterback by himself.\"],\r\n [key++,\"Unblocked Sacks (Pro only):\",\"A sack in which the rusher was able to reach the quarterback without anyone blocking them.\"],\r\n [key++,\"Run Defense\",\"\"],\r\n [key++,\"Ast. Tkl:\",\"Assisted tackles; tackles by the defender in which they brought down the ball carrier with the assistance of another defender.\"],\r\n [key++,\"Avg Tackle Depth:\",\"Avg. distance from line of scrimmage on tackles in yards (positive value is beyond the line of scrimmage, negative value is behind the line of scrimmage).\"],\r\n [key++,\"Broken + Missed:\",\"Total Number of broken and missed tackles by a player.\"],\r\n [key++,\"Broken + Missed%:\",\"Percent of tackle opportunities that resulted in a broken or missed tackle.\"],\r\n [key++,\"Broken Tkl Yds (Pro only):\",\"The amount of extra yards gained as a result of broken tackles.\"],\r\n [key++,\"Broken Tkl (Pro only):\",\"The number of times the defender was in position to make a tackle and made contact with the ball carrier, but failed to bring them down.\"],\r\n [key++,\"Comb. Tkl or Tackles:\",\"Combined tackles; the number of solo tackles added to the number of assisted tackles.\"],\r\n [key++,\"EPA (Pro only):\",\"Expected Points Added; the total change in the offense's Expected Points that came on run plays when the player was on the field.\"],\r\n [key++,\"FF:\",\"Forced fumbles.\"],\r\n [key++,\"FR TD (Pro only):\",\"The number of times a player recovered a fumble and returned it for a touchdown.\"],\r\n [key++,\"FR (Pro only):\",\"Fumbles recovered.\"],\r\n [key++,\"Missed Tackle Rate or Broken + Missed%:\",\"The percentage of attempted tackles that result in a player failing to bring down the ball carrier when they are in position to do so.\"],\r\n [key++,\"Points Saved - Run Defense:\",\"The total of a player's EPA responsibility on run plays using the Total Points system that distributes credit among all players on the field for a given play (with positive numbers being good). For run defense, that includes accounting for defenders in the box, blown blocks forced, broken tackles, turnovers, and turnover returns.\"],\r\n [key++,\"Positive% (Pro only):\",\"Positive Play Percentage; the percentage of run plays with the player on the field that resulted in a positive EPA (i.e. a successful play for the offense).\"],\r\n [key++,\"Rush Snaps:\",\"The number of running plays on which the defender was on the field.\"],\r\n [key++,\"Solo Tkl:\",\"Solo tackles.\"],\r\n [key++,\"TFL:\",\"Tackles for a loss.\"],\r\n [key++,\"Tkl Short of 1st (Pro only):\",\"Number of times a player tackled a runner before they could achieve a first down on the play.\"],\r\n [key++,\"Tkl/G (Pro only):\",\"The amount of tackles a defender averages per game.\"],\r\n [key++,\"Punting\",\"\"],\r\n [key++,\"Blocks:\",\"Blocked punts that do not cross the line of scrimmage.\"],\r\n [key++,\"FCs or Fair Catches:\",\"Fair catches; punts in which the receiving player called for a fair catch.\"],\r\n [key++,\"Net Avg.:\",\"Total punt yards minus return yards and touchback yards equals the Net total. Net total divided by the number of punts (not including Blocks) gives the Net Avg.\"],\r\n [key++,\"Partial Blocks:\",\"Punts that are deflected but still cross the line of scrimmage.\"],\r\n [key++,\"TBs or Touchbacks:\",\"Touchbacks; punts that resulted in a touchback.\"]\r\n ];\r\n this.filteredGlossary = this.glossaryEntries\r\n }\r\n\r\n componentDidMount() {\r\n this.getSecurityToken();\r\n }\r\n\r\n // There are three API calls that must complete in sequence when this page loads:\r\n //\r\n // 1) obtain token from security API\r\n // 2) use token to access the data API\r\n // 3) load NFL players to an array for user selection\r\n //\r\n // API chaining is accomplished by each API routine invoking the next on successfull completion:\r\n // 1) getSecurityToken --> 2) accessNFLdata --> 3) loadNFLplayers\r\n //\r\n getSecurityToken = () => {\r\n this.executeHTTPRequestPost(\r\n 'https://auth.sportsinfosolutions.com/connect/token',\r\n (response) => {\r\n this.token = response.access_token;\r\n this.getAllPlayers();\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n )\r\n }\r\n\r\n // Gain access to NFL data API using the token obtained from the secutiry API\r\n getAllPlayers = (event) => {\r\n const reqUrl = 'https://api.sportsinfosolutions.com/api/v1/nfl/players/allplayerswithteamnew';\r\n this.executeHTTPRequest(\r\n reqUrl,\r\n 'get',\r\n (response) => {\r\n this.playerSelectionList = response;\r\n this.forceUpdate()\r\n },\r\n (error) => {\r\n console.log(error);\r\n }\r\n )\r\n }\r\n\r\n // general purpose fetch method called by each API related method\r\n executeHTTPRequest = (url, method, callback, failback) => {\r\n fetch(\r\n url, {\r\n method: method,\r\n headers: {\r\n Accept: 'application/json, text/plain, */*',\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${this.token}`\r\n },\r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if (response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n executeHTTPRequestPost = (url, callback, failback) => {\r\n var details = {'client_id': 'FootballApp@sportsinfosolutions.com',\r\n 'client_secret': 'xPc14+wU2zHtydg12AgglRCkL+ALNlX/miH2JJHp2/k=',\r\n 'grant_type': 'client_credentials',\r\n 'scope': 'sisapi'};\r\n\r\n var formBody = [];\r\n for (var property in details){\r\n var encodedKey = encodeURIComponent(property);\r\n var encodedValue = encodeURIComponent(details[property]);\r\n formBody.push(encodedKey + \"=\" + encodedValue);\r\n }\r\n formBody = formBody.join(\"&\");\r\n\r\n fetch(\r\n url, {\r\n method: \"POST\",\r\n cache: \"no-cache\",\r\n headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},\r\n body: formBody,\r\n })\r\n .then((response) => {\r\n let json = response.json();\r\n if (response.ok) {\r\n if (callback) {\r\n json.then((result) => {\r\n callback(result);\r\n });\r\n }\r\n } else {\r\n return json.then(Promise.reject.bind(Promise));\r\n }\r\n })\r\n .catch((error) => {\r\n if (failback) {\r\n failback(error);\r\n }\r\n });\r\n }\r\n\r\n filterPlayers = (ids, data) => {\r\n return data.filter(d => ids.indexOf(d.playerId) > -1);\r\n }\r\n\r\n onGlossaryFilterChange = e => {\r\n let keep = false;\r\n this.filteredGlossary = this.glossaryEntries.filter( ([key, heading, definition]) => {\r\n if (definition === \"\" || e.target.value === \"\") {\r\n keep = true;\r\n } else if (heading.toLowerCase().search(e.target.value.toLowerCase()) > -1) {\r\n keep= true;\r\n } else if (definition.toLowerCase().search(e.target.value.toLowerCase()) > -1) {\r\n keep = true;\r\n } else {\r\n keep = false;\r\n }\r\n return keep;\r\n });\r\n this.setState({searchGlossaryKey: e.target.value});\r\n }\r\n\r\n render() {\r\n let playerLink = '/players/' + this.playerId;\r\n let playerGameLogLink = '/playergamelogs/' + this.playerId;\r\n let leaderboardLink = '/leaderboards/' + this.playerCategory;\r\n let glossaryLink = '/glossary/';\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n
    \r\n \r\n \"logo\"\r\n \r\n
    \r\n
    \r\n
    \r\n

    Player Search:

    \r\n {\r\n this.playerSelectionList &&\r\n \r\n }\r\n last, first name (pos, team #jersey)\r\n
    \r\n
    \r\n

    \r\n \r\n \r\n
    SIS DataHub
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n
    Glossary
    \r\n
    \r\n \r\n
    \r\n
    \r\n {this.filteredGlossary.map( (g) => (\r\n (g[2] &&

    {g[1]} {g[2]}

    ) || (

    {g[1]}

    )\r\n ))}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    v. {this.version}

    \r\n
    \r\n
    \r\n\r\n )\r\n }\r\n}\r\n\r\nexport default Glossary;\r\n\r\n\r\n\r\n\r\n","import React, { Component } from 'react';\r\n\r\nclass BrowserRedirect extends Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.version = '2019-10-17a';\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n \r\n
    \"logo\"\r\n
    \r\n
    \r\n

    \r\n
    \r\n


    Sorry. SISDatahub.com is not supported on Internet Explorer.

    \r\n

    Consider using another browser like:

    \r\n \r\n
    \r\n
    \r\n
    \r\n

    v. {this.version}

    \r\n
    \r\n
    \r\n\r\n )\r\n }\r\n}\r\n\r\nexport default BrowserRedirect;","import React from 'react';\r\nimport { BrowserRouter, Route } from 'react-router-dom';\r\nimport Players from './Players';\r\nimport PlayerGameLogs from './PlayerGameLogs';\r\nimport LeaderBoards from './Leaderboards';\r\nimport Glossary from './Glossary';\r\nimport BrowserRedirect from './BrowserRedirect'\r\n\r\nfunction Router() {\r\n const isIE2 = /*@cc_on!@*/false || !!document.documentMode;\r\n if (isIE2 === false) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n } else {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default Router;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read http://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Router from './Router';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"names":["key","module","exports","global","reactIs","require","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","type","KNOWN_STATICS","name","length","prototype","caller","callee","arguments","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","defineProperty","Object","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","keys","concat","targetStatics","sourceStatics","i","descriptor","e","Array","isArray","arr","toString","call","hasOwnProperty","propIsEnumerable","propertyIsEnumerable","assign","test1","String","test2","fromCharCode","map","n","join","test3","split","forEach","letter","err","shouldUseNative","target","source","from","symbols","to","val","undefined","TypeError","toObject","s","isarray","pathToRegexp","parse","compile","str","options","tokensToFunction","tokensToRegExp","PATH_REGEXP","RegExp","res","tokens","index","path","defaultDelimiter","delimiter","exec","m","escaped","offset","slice","next","prefix","capture","group","modifier","asterisk","push","partial","repeat","optional","pattern","escapeGroup","escapeString","substr","encodeURIComponentPretty","encodeURI","replace","c","charCodeAt","toUpperCase","matches","flags","obj","opts","data","encode","pretty","encodeURIComponent","token","segment","value","JSON","stringify","j","test","attachKeys","re","sensitive","strict","end","route","endsWithDelimiter","groups","match","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","location","propFullName","secret","Error","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","aa","r","u","a","b","ba","d","f","g","h","k","l","apply","this","onError","da","ea","fa","ha","ia","ja","la","ma","na","oa","currentTarget","ka","pa","qa","ra","indexOf","sa","extractEvents","eventTypes","ta","phasedRegistrationNames","ua","registrationName","va","wa","dependencies","xa","ya","window","document","createElement","za","Aa","Ba","Ca","stateNode","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","v","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","C","toLowerCase","Ua","Va","xlinkHref","Wa","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","Xa","Sa","isNaN","Ta","Ra","removeAttribute","setAttribute","setAttributeNS","ReactCurrentDispatcher","current","ReactCurrentBatchConfig","suspense","Ya","E","Symbol","for","Za","$a","ab","bb","cb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","iterator","nb","pb","$$typeof","_status","_result","qb","tag","_debugOwner","_debugSource","fileName","lineNumber","return","rb","sb","nodeName","xb","_valueTracker","constructor","get","set","configurable","enumerable","getValue","setValue","stopTracking","tb","yb","checked","zb","defaultChecked","defaultValue","_wrapperState","initialChecked","Ab","initialValue","controlled","Bb","Cb","Db","Eb","ownerDocument","activeElement","Gb","children","Children","Fb","Hb","selected","defaultSelected","disabled","Ib","dangerouslySetInnerHTML","Jb","Kb","Lb","textContent","Mb","Nb","Ob","Pb","Qb","namespaceURI","innerHTML","valueOf","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","Rb","lastChild","nodeType","nodeValue","Sb","Tb","animationend","animationiteration","animationstart","transitionend","Ub","Vb","Wb","style","animation","transition","Xb","Yb","Zb","$b","ac","bc","WeakMap","Map","cc","dc","alternate","effectTag","ec","memoizedState","dehydrated","fc","hc","child","sibling","gc","ic","jc","kc","lc","_dispatchListeners","_dispatchInstances","isPropagationStopped","isPersistent","release","mc","nc","srcElement","correspondingUseElement","parentNode","oc","pc","qc","topLevelType","nativeEvent","targetInst","ancestors","rc","pop","eventSystemFlags","sc","containerInfo","tc","uc","has","vc","F","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Kc","blockedOn","container","Lc","delete","pointerId","Mc","Nc","Pc","unstable_runWithPriority","priority","hydrate","Qc","Rc","Sc","Tc","shift","Uc","unstable_scheduleCallback","unstable_NormalPriority","Vc","Wc","Yc","Zc","$c","ad","bubbled","captured","eventPriority","bd","cd","dd","unstable_UserBlockingPriority","ed","fd","gd","bind","hd","id","addEventListener","Oc","jd","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","kd","ld","trim","md","setProperty","charAt","substring","nd","menuitem","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","track","wbr","od","pd","is","qd","rd","sd","td","body","ud","vd","nextSibling","wd","contains","compareDocumentPosition","xd","HTMLIFrameElement","contentWindow","href","yd","contentEditable","zd","Ad","Bd","Cd","Dd","Ed","Fd","autoFocus","Gd","__html","Hd","setTimeout","Id","clearTimeout","Jd","Kd","previousSibling","Ld","Math","random","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","dispatchConfig","Ud","_targetInst","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","G","Interface","isDefaultPrevented","defaultPrevented","returnValue","ee","eventPool","fe","destructor","de","getPooled","preventDefault","stopPropagation","cancelBubble","persist","eventPhase","bubbles","cancelable","timeStamp","Date","now","isTrusted","extend","ge","he","ie","je","ke","documentMode","le","me","ne","oe","beforeInput","compositionEnd","compositionStart","compositionUpdate","pe","qe","keyCode","detail","se","ve","locale","which","te","ctrlKey","altKey","metaKey","char","ue","we","color","date","datetime","email","month","password","range","search","tel","text","time","url","week","xe","ye","change","ze","Ae","Be","Ce","De","Ee","Fe","Ge","detachEvent","He","Ie","attachEvent","Je","Ke","Le","Me","_isInputEventSupported","Ne","view","Oe","Alt","Control","Meta","Shift","Pe","getModifierState","Qe","Re","Se","Te","Ue","Ve","screenX","screenY","clientX","clientY","pageX","pageY","shiftKey","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","We","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Xe","mouseEnter","mouseLeave","pointerEnter","pointerLeave","Ye","defaultView","parentWindow","p","$e","af","bf","cf","df","select","ef","ff","gf","hf","jf","start","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","kf","onSelect","lf","animationName","elapsedTime","pseudoElement","mf","clipboardData","nf","of","charCode","pf","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","qf","rf","sf","dataTransfer","tf","touches","targetTouches","changedTouches","uf","vf","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","wf","SimpleEventPlugin","EnterLeaveEventPlugin","ChangeEventPlugin","SelectEventPlugin","BeforeInputEventPlugin","yf","zf","H","I","Af","J","K","Bf","Cf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","L","Df","Ef","Ff","getChildContext","Gf","__reactInternalMemoizedMergedChildContext","Hf","If","Jf","Kf","unstable_cancelCallback","Lf","unstable_requestPaint","Mf","unstable_now","Nf","unstable_getCurrentPriorityLevel","Of","unstable_ImmediatePriority","Pf","Qf","Rf","unstable_LowPriority","Sf","unstable_IdlePriority","Tf","Uf","unstable_shouldYield","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","_context","_currentValue","pg","childExpirationTime","qg","firstContext","expirationTime","rg","sg","context","observedBits","responders","tg","ug","updateQueue","baseState","baseQueue","shared","pending","effects","vg","wg","suspenseConfig","payload","callback","xg","yg","zg","x","z","ca","Ag","D","t","Bg","Cg","Dg","Eg","Component","refs","Fg","Jg","isMounted","_reactInternalFiber","enqueueSetState","Gg","Hg","Ig","enqueueReplaceState","enqueueForceUpdate","Kg","shouldComponentUpdate","isPureReactComponent","Lg","state","updater","Mg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Ng","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Og","Pg","ref","_owner","_stringRef","Qg","Rg","lastEffect","nextEffect","firstEffect","Sg","Tg","mode","Ug","implementation","Vg","Wg","y","A","q","done","Xg","Yg","Zg","$g","ah","bh","ch","dh","documentElement","tagName","eh","fh","gh","M","hh","memoizedProps","revealOrder","ih","responder","jh","kh","lh","N","O","P","mh","Q","nh","oh","ph","qh","rh","sh","th","queue","uh","vh","wh","lastRenderedReducer","action","eagerReducer","eagerState","lastRenderedState","dispatch","xh","yh","zh","Ah","create","destroy","deps","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","readContext","useCallback","useContext","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useResponder","useDeferredValue","useTransition","Oh","Ph","Qh","Rh","Sh","Th","pendingProps","Uh","Vh","Wh","Xh","Yh","ReactCurrentOwner","R","Zh","$h","ai","bi","ci","di","ei","fi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","gi","hi","pendingContext","ni","oi","pi","qi","ii","retryTime","ji","fallback","unstable_avoidThisFallback","ki","li","isBackwards","rendering","renderingStartTime","last","tail","tailExpiration","tailMode","mi","ri","si","wasMultiple","multiple","onClick","onclick","size","createElementNS","createTextNode","S","ti","ui","vi","wi","T","xi","U","yi","zi","Ai","stack","Bi","WeakSet","Set","Ci","console","error","Fi","Ei","Gi","__reactInternalSnapshotBeforeUpdate","Hi","Ii","Ji","focus","Ki","Li","componentWillUnmount","Di","Mi","Ni","Oi","Pi","Qi","Ri","instance","insertBefore","_reactRootContainer","Si","Ti","display","Ui","Vi","add","then","Wi","Xi","Yi","Zi","$i","componentDidCatch","aj","componentStack","Rj","bj","ceil","cj","dj","V","ej","fj","gj","hj","ij","jj","W","X","kj","lj","mj","nj","oj","pj","Y","qj","rj","sj","tj","uj","vj","wj","timeoutMs","xj","yj","Z","zj","lastExpiredTime","Aj","firstPendingTime","lastPingedTime","nextKnownPendingLevel","callbackExpirationTime","callbackPriority","callbackNode","Bj","timeout","Cj","Dj","Ej","Fj","Gj","Hj","finishedWork","finishedExpirationTime","lastSuspendedTime","Ij","timeoutHandle","Jj","busyMinDurationMs","busyDelayMs","Kj","Mj","Nj","pingCache","Oj","w","ub","Pj","Xc","Qj","Sj","firstSuspendedTime","rangeCount","wb","activeElementDetached","focusedElem","selectionRange","Tj","B","min","createRange","setStart","removeAllRanges","addRange","setEnd","left","scrollLeft","top","scrollTop","vb","Uj","Vj","Wj","hidden","_ctor","default","ob","Xj","_calculateChangedBits","unstable_observedBits","Zj","isReactComponent","pendingChildren","ak","bk","ck","dk","ek","fk","Jc","_internalRoot","gk","ik","hasAttribute","hk","kk","jk","unmount","querySelectorAll","form","Lj","lk","Events","findFiberByHostInstance","__REACT_DEVTOOLS_GLOBAL_HOOK__","isDisabled","supportsFiber","inject","onCommitFiberRoot","onCommitFiberUnmount","Yj","overrideHookState","overrideProps","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","bundleType","version","rendererPackageName","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","setState","forceUpdate","__self","__source","result","keyPrefix","count","escape","IsSomeRendererActing","toArray","only","PureComponent","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","createFactory","createRef","forwardRef","isValidElement","lazy","memo","MessageChannel","unstable_forceFrameRate","performance","cancelAnimationFrame","requestAnimationFrame","floor","port2","port1","onmessage","postMessage","sortIndex","startTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","factory","_typeof","findIndex","predicate","o","len","thisArg","kValue","find","ColumnManager","table","blockHozScrollEvent","headersElement","createHeadersElement","createHeaderElement","rowManager","columnsByIndex","columnsByField","el","classList","headerVisible","initialize","setRowManager","manager","getElement","getHeadersElement","scrollHorizontal","hozAdjust","scrollWidth","clientWidth","marginLeft","modExists","modules","frozenColumns","generateColumnsFromRowData","row","sorter","cols","field","title","setColumns","self","reset","def","_addColumn","_reIndexColumns","responsiveLayout","redraw","definition","before","nextToColumn","column","Column","colEl","findColumnIndex","parentIndex","getTopColumn","nextEl","splice","unshift","columnRendered","registerColumnField","registerColumnPosition","reRegisterPosition","_verticalAlignHeaders","minHeight","clearVerticalAlign","getHeight","verticalAlign","columnHeaderVertAlign","adjustTableSize","findColumn","subject","ColumnComponent","_getSelf","HTMLElement","getColumnByField","getColumnsByFieldRoot","root","_this","getColumnByIndex","getFirstVisibileColumn","visible","getColumns","getRealColumns","traverse","getDefinitions","active","output","getDefinition","getDefinitionTree","getComponents","structured","getComponent","getWidth","moveColumn","after","moveColumnActual","columnCalcs","recalc","activeRows","reinitialize","parent","isGroup","_moveColumnInArray","columnMoved","columnManager","persistence","config","save","updateRows","toIndex","fromIndex","rows","cells","cell","scrollToColumn","position","ifVisible","_this2","adjust","Promise","resolve","reject","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","offsetWidth","max","warn","generateCells","generateCell","getFlexBaseWidth","totalWidth","fixedWidth","scrollHeight","clientHeight","minWidth","colWidth","columnMinWidth","parseInt","addColumn","_this3","layout","getMode","reinitializeWidth","deregisterColumn","getField","force","Tabulator","helpers","elVisible","resetScroll","update","footerManager","_column","getCells","getVisibility","show","hide","toggle","getSubColumns","getParentColumn","scrollTo","getTable","headerFilterFocus","filter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","move","toColumn","getNextColumn","nextCol","nextColumn","getPrevColumn","prevCol","prevColumn","updateDefinition","updates","contentElement","titleElement","groupElement","createGroupElement","tooltip","hozAlign","vertAlign","fieldStructure","getFieldValue","setFieldValue","titleFormatterRendered","setField","invalidOptionWarnings","checkDefinition","cellEvents","cellClick","cellDblClick","cellContext","cellTap","cellDblTap","cellTapHold","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","widthStyled","minWidthStyled","widthFixed","_mapDepricatedFunctionality","newCol","attachColumn","checkColumnVisibility","rowHandle","movableRows","moveRow","setHandle","_buildHeader","bindModuleColumns","_this4","defaultOptionList","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","hideInHtml","htmlOutput","align","setTooltip","headerTooltip","tooltipsHeader","localize","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","resizableColumns","resizeColumns","initializeColumn","headerFilter","headerFilterPlaceholder","setHeaderFilterColumnPlaceholder","movableColumns","topCalc","bottomCalc","dblTap","tapHold","tap","headerClick","headerDblClick","headerContext","headerTap","passive","headerDblTap","headerTapHold","cellEdited","cellEditing","cellEditCancelled","sort","headerContextMenu","headerMenu","menu","initializeColumnHeader","format","editor","edit","validator","validate","mutator","accessor","cssClass","className","setMinWidth","tooltips","cellHozAlign","cellVertAlign","_buildColumnHeaderTitle","titleHolderElement","editableTitle","columnTitleChanged","_formatColumnHeaderTitle","formatter","contents","params","mockCell","onRendered","_this5","titleFormatter","getFormatter","titleFormatterParams","Node","_this6","dataObj","structure","alignment","parentHeight","getGroupElement","offsetHeight","paddingTop","rowNumColumn","getFirstColumn","getLastColumn","updateBranches","colDefs","columnVisibilityChanged","silent","responsiveToggle","updateColumnVisibility","matchChildWidths","childWidth","maxWidth","setWidth","setWidthActual","checkCellHeights","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","_this7","cellCount","Cell","_nextVisibleColumn","_prevVisibleColumn","hideHeaderFilterElements","fitToData","showHeaderFilterElements","clearWidth","_this8","catch","deleteCell","RowManager","createHolderElement","tableElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsCount","displayRows","displayRowsCount","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","redrawBlock","redrawBlockRestoreConfig","redrawBlockRederInPosition","getTableElement","getRowPosition","setColumnManager","setRenderMode","groupBy","groupRows","scrollHeaders","dir","scrollVertical","ajaxProgressiveLoad","ajax","nextPage","findRow","Row","RowComponent","getRowFromDataObject","getRowFromPosition","scrollToRow","rowTop","_this9","rowIndex","getDisplayRows","rowEl","scrollToRowPosition","scrollToRowIfVisible","elOffset","abs","_virtualRenderFill","offsetTop","setData","renderInPosition","columnsChanged","_this10","pagination","_setDataActual","reRenderInPosition","autoColumns","dataLoading","_wipeElements","history","clear","selectRow","clearSelectionData","reactiveData","watchData","dataLoaded","refreshActiveData","wipe","deleteRow","blockRedraw","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","rowDeleted","dataEdited","getData","updateGroupRows","addRow","pos","addRowActual","addRows","_this11","findAddRowPos","reverse","item","addRowPos","dispRows","paginationAddRow","page","getPageSize","assignRowToGroup","getGroup","_moveRowInArray","rowAdded","posFrom","posTo","moveRowActual","rowMoved","toGroup","fromGroup","removeRow","insertRow","styleRow","clearData","getRowIndex","findRowIndex","getDisplayRowIndex","nextDisplayRow","rowOnly","nextRow","prevDisplayRow","prevRow","list","transform","getRows","getDataCount","_genRemoteRequest","_this12","ajaxSorting","sorters","getSort","paginationDataSentNames","ajaxFiltering","filters","getFilters","setParams","sendRequest","filterRefresh","setPage","loadData","sorterRefresh","loadOrignalData","progressiveLoad","stage","skipStage","cascadeOrder","cancelEdit","selectable","selectablePersistence","deselectRows","resetDisplayRows","frozenRows","isFrozen","getDisplayIndex","setDisplayIndex","getNextDisplayIndex","setDisplayRows","dataTree","setMaxRows","renderTable","layoutColumnsOnNewData","_this13","getCell","_generateContents","getVisibleRows","viewable","topEdge","bottomEdge","topFound","topRow","bottomRow","getRenderMode","topOffset","diff","virtualDom","renderStarted","_simpleRender","renderEmptyScroll","placeholder","renderComplete","_clearVirtualDom","checkClassicModeGroupHeaderWidth","onlyGroupHeaders","visibility","paddingBottom","remove","forceMove","holder","topPad","rowsHeight","topPadHeight","heightOccupied","rowHeight","initialized","normalizeHeight","vDomScrollHeight","countGroups","topDiff","bottomDiff","margin","_addTopRow","_removeBottomRow","_removeTopRow","_addBottomRow","topRowHeight","_quickNormalizeRowHeight","bottomRowHeight","initialHeight","otherHeight","external","maxHeight","virtualDomBuffer","resizeTable","autoResize","restoreRedraw","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","_row","getIndex","getPosition","pageTo","setPageToRow","moveToRow","updateData","selectRows","deselect","toggleSelect","toggleRow","isSelected","isRowSelected","freeze","freezeRow","unfreeze","unfreezeRow","treeCollapse","collapseRow","treeExpand","expandRow","treeToggle","getTreeParent","getTreeChildren","reformat","getNextRow","getPrevRow","heightStyled","manualHeight","outerHeight","generateElement","detachElement","initializeRow","rowContextMenu","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","deleteCells","layoutRow","cellRendered","rowFormatter","resizableRows","resizeRows","reinitializeHeight","setHeight","clearHeight","transformRow","watchRow","updatedData","newRowData","_this14","tempData","attrname","block","unblock","setValueProcessData","redrawNeeded","rowUpdated","getCellIndex","findCell","findNextEditableCell","nextCell","allowEdit","check","findPrevEditableCell","prevCell","toRow","_this15","deleteActual","_deselectRow","recalcRowGroup","CellComponent","_cell","getOldValue","getRow","getColumn","mutate","restoreOldValue","setValueActual","nav","checkHeight","oldValue","build","_configureCell","textAlign","alignItems","bottom","middle","justifyContent","right","center","tooltipGenerationMode","_generateTooltip","_bindClickEvents","_bindTouchEvents","_bindMouseEvents","bindEditor","initializeCell","formatValue","newValue","changed","transformCell","contextMenu","layoutElement","editCell","editing","getCurrentCell","calcs","prev","up","down","FooterManager","links","_initialize","footerElement","querySelector","append","activate","prepend","deactivate","footerRedraw","browserSlow","browserMobile","initializeElement","initializeOptions","_create","comms","register","defaultOptions","columnVertAlign","initialSort","initialFilter","initialHeaderFilter","columnHeaderSortMulti","sortOrderReverse","headerSort","headerSortTristate","keybindings","tabEndNewRow","clipboard","clipboardCopyStyled","clipboardCopyConfig","clipboardCopyFormatter","clipboardCopyRowRange","clipboardPasteParser","clipboardPasteAction","clipboardCopied","clipboardPasted","clipboardPasteError","downloadDataFormatter","downloadReady","blob","downloadComplete","downloadConfig","dataTreeElementColumn","dataTreeBranchElement","dataTreeChildIndent","dataTreeChildField","dataTreeCollapseElement","dataTreeExpandElement","dataTreeStartExpanded","dataTreeRowExpanded","dataTreeRowCollapsed","dataTreeChildColumnCalcs","dataTreeSelectPropagate","printAsHtml","printFormatter","printHeader","printFooter","printCopyStyle","printStyled","printVisibleRows","printRowRange","printConfig","selectableRangeMode","selectableRollingSelection","selectableCheck","headerFilterLiveFilterDelay","langs","persistentLayout","persistentSort","persistentFilter","persistenceID","persistenceMode","persistenceReaderFunc","persistenceWriterFunc","responsiveLayoutCollapseStartOpen","responsiveLayoutCollapseUseFormatters","responsiveLayoutCollapseFormatter","paginationSize","paginationInitialPage","paginationButtonCount","paginationSizeSelector","paginationElement","paginationDataSent","paginationDataReceived","ajaxURL","ajaxURLGenerator","ajaxParams","ajaxConfig","ajaxContentType","ajaxRequestFunc","ajaxLoader","ajaxLoaderLoading","ajaxLoaderError","ajaxProgressiveLoadDelay","ajaxProgressiveLoadScrollMargin","groupStartOpen","groupValues","groupHeader","htmlOutputConfig","movableRowsConnectedTables","movableRowsSender","movableRowsReceiver","movableRowsSendingStart","movableRowsSent","movableRowsSentFailed","movableRowsSendingStop","movableRowsReceivingStart","movableRowsReceived","movableRowsReceivedFailed","movableRowsReceivingStop","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","tableBuilding","tableBuilt","rowSelectionChanged","rowSelected","rowDeselected","rowResized","columnResized","htmlImporting","htmlImported","ajaxRequesting","ajaxResponse","ajaxError","dataFiltering","dataFiltered","dataSorting","dataSorted","groupToggleElement","groupClosedShowCalcs","dataGrouping","dataGrouped","groupVisibilityChanged","groupClick","groupDblClick","groupContext","groupTap","groupDblTap","groupTapHold","pageLoaded","localized","validationFailed","historyUndo","historyRedo","clipboardCopyHeader","columnHeaders","_clearSelection","empty","selection","_clearObjectPointers","bindModules","htmlTableImport","parseTable","_buildElement","_loadInitialData","_this16","mod","_detectBrowser","setHeaderFilterPlaceholder","installLang","setLocale","span","load","setSort","setFilter","print","deregister","unwatchData","clearBindings","navigator","userAgent","vendor","opera","setDataFromLocalFile","extensions","_this17","accept","file","files","reader","FileReader","readAsText","onload","_setData","onerror","click","blockActiveRequest","inPosition","getUrl","setConfig","setUrl","searchRows","searchData","getHtml","export","printFullscreen","getAjaxUrl","replaceData","_this18","responses","addData","_this19","updateOrAddData","_this20","newRows","_this21","successCount","foundRows","doneCheck","_this22","updateOrAddRow","_this23","updateRow","_this24","_this25","fromRow","copyToClipboard","selector","copy","getColumnDefinitions","getColumnLayout","parseColumns","setColumnLayout","mergeDefinition","showColumn","hideColumn","toggleColumn","_this26","deleteColumn","_this27","updateColumnDefinition","_this28","fromColumn","_this29","getLocale","getLang","sortList","getSorters","clearSort","addFilter","all","getHeaderFilters","removeFilter","clearFilter","clearHeaderFilter","deselectRow","toggleSelectRow","getSelectedRows","getSelectedData","setMaxPage","_this30","setPageSize","previousPage","getPage","getPageMax","setGroupBy","setGroupStartOpen","values","setGroupHeader","getGroups","getGroupedData","getCalcResults","getResults","recalcAll","navigatePrev","currentCell","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","undo","redo","getHistoryUndoSize","getHistoryRedoSize","download","filename","downloadToTab","tableComms","receive","moduleBindings","extendModule","property","registerModule","plugin","required","box","getBoundingClientRect","pageYOffset","clientTop","pageXOffset","clientLeft","deepClone","clone","tables","lookupTable","query","results","matchElement","findTable","Layout","modes","_this31","colsWidth","gap","lastCol","responsive","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Localize","lang","bindings","headerFilters","_setLangProp","desiredLocale","language","traverseLang","trans","prop","_executeBindings","getText","pathArray","_getLangElement","level","rootPath","_loop","binding","Comms","getConnections","selectors","connections","con","send","connection","commsReceived","Accessor","allowedTypes","lookupAccessor","accessors","dataIn","Ajax","urlGenerator","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","loaderPromise","loading","requestOrder","template","content","defaultLoaderPromise","defaultURLGenerator","initializeProgressive","getParams","_loadDefaultConfig","method","defaultConfig","_loadDataProgressive","_loadDataStandard","_this32","generateParamsList","serializeParams","encoded","requestNo","_this33","showLoader","hideLoader","showError","includes","contentType","contentTypeFormatters","headers","Accept","origin","credentials","fetch","response","ok","json","status","statusText","FormData","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","removeCalcs","rowsToData","generateRow","recalcGroup","getRowGroup","_this34","getChildGroups","rowData","generateRowData","generateTopRow","generateBottomRow","_this35","open","getFilteredTreeChildren","disable","enable","paramKey","hasTopCalcs","hasBottomCalcs","getKey","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","_this36","plain","html","generatePlainContent","originalEvent","paste","setPasteParser","setPasteAction","originalSelectionText","getElementsByTagName","internal","sel","textRange","selectNodeContents","createTextRange","moveToElementText","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","valid","headerFindSuccess","columnMap","insert","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","dummyEl","firstCol","tabIndex","childArray","controlEl","generateControlElement","cloneNode","marginRight","paddingLeft","getComputedStyle","getPropertyValue","_this37","oldControl","replaceChild","_this38","getChildren","_this39","generateChildren","sub","_this40","childData","childRow","checkForRestyle","getChildField","Download","fields","interceptCallback","downloadFunc","processConfig","downloaders","processColumns","processDefinitions","processData","mime","triggerDownload","columnGroups","rowGroups","processedDefinitions","colData","processColumnGroup","processDefinition","_this41","maxDepth","processedColumn","groupData","depth","subGroup","subGroupData","downloadTitle","_this42","processGroupData","visRows","_this43","newTab","Blob","URL","createObjectURL","msSaveOrOpenBlob","intercept","csv","setFileContents","fileContents","titles","parseColumnGroup","parseRows","parseGroup","bom","pdf","header","headerDepth","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","colSpan","rowSpan","orientation","unit","parseValue","parseRow","styles","calcObj","addCalcRow","calcData","doc","autoTable","addPageContent","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","groupRowIndexs","groupColumnIndexs","calcRowIndexs","generateSheet","worksheet","padColumnTitles","sheet","sheet_add_aoa","encode_range","merges","merge","generateMerges","rowsToSheet","SheetNames","Sheets","sheetOnly","sheets","buf","ArrayBuffer","Uint8Array","s2ab","write","bookType","bookSST","Edit","mouseClick","recursionBlock","invalidEdit","editable","editorParams","editors","clearEditor","cellEl","preventScroll","focusCellNoEvent","forceEdit","focusScrollAdjust","cellEditor","rendered","blur","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","maskAutoFill","success","cancel","cellValue","padding","boxSizing","elementAttributes","getAttribute","onChange","textarea","vertNav","verticalNavigation","whiteSpace","resize","heightNow","stopImmediatePropagation","step","blurFunc","removeEventListener","initialDisplayValue","listEl","dataItems","displayItems","currentItem","blurable","getUniqueColumnValues","sortValuesList","parseItems","inputValues","curentValue","dataList","displayList","processComplexListItem","label","listItemFormatter","setCurrentItem","chooseItem","fillList","hideList","cancelItem","cursor","readOnly","showList","autocomplete","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","showListOnEmpty","notice","searchEl","clearList","itemList","emptyPlaceholder","freetext","allowEmpty","showInputValue","star","maxStars","stars","starsHolder","starChange","buildStar","starHolder","nextStar","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","handle","bar","updateValue","calcVal","round","backgroundColor","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","indeterminate","Export","cloneTableStyle","colVisProp","genereateTable","generateHeaderElements","generateBodyElements","rowLookup","mapElementStyles","_this44","selectedRows","generateColumnGroupHeaders","_this45","_this46","columnVisCheck","groupHeadersToRows","_this47","headerEl","classNames","oddRow","evenRow","calcRow","firstRow","firstCell","firstGroup","styleCells","treeElementField","_this48","getElementsByClassName","bodyEl","cellWrapper","formatCells","formatExportValue","renderedCallback","rowComponent","lookup","fromStyle","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","filterFunc","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","headerFilterFuncParams","fieldVal","colVal","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","_this49","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilter","hasChanged","findFilter","findSubFilters","filtersToArray","_this50","searchType","filterRecurse","rowList","activeRowComponents","filterRow","subFilter","filterVal","rowVal","filterParams","Format","lookupFormatter","formatterPrint","formatterClipboard","formatterHtmlOutput","crossElement","formatters","plaintext","sanitizeHTML","entityMap","emptyToSpace","formatterParams","money","integer","decimal","rgx","floatVal","decimalSym","thousandSym","thousand","symbolAfter","urlPrefix","labelField","urlField","image","truthy","allowTruthy","tick","tickElement","cross","inputFormat","outputFormat","invalid","invalidPlaceholder","newDatetime","moment","isValid","datetimediff","suffix","humanize","duration","traffic","percentValue","colors","legend","legendColor","legendAlign","barEl","legendEl","holderEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","_this51","checkbox","registerRowSelectCheckbox","registerHeaderSelectCheckbox","FrozenColumns","leftColumns","rightColumns","leftMargin","rightMargin","rightPadding","initializationMode","scrollEndTimer","paddingRight","edge","frozenCheck","frozen","_this52","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","allCells","_this53","leftParents","parentEl","getColGroupParentElement","_this54","FrozenRows","styleRows","GroupComponent","_group","getParentGroup","toggleVisibility","groupManager","Group","generator","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","old","groupList","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","initializeGroupHeader","_this55","allowedValues","_createGroup","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","scrollHeader","removeGroup","getHeadersAndRows","noCalc","_visSet","getRowCount","compoment","addBindingsd","childNodes","GroupRows","langValue","lookupFunc","generateGroups","groupComponents","_this56","pullGroupListData","groupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","History","undoers","redoers","cellEdit","rowAdd","rowDelete","newRow","_rebindRow","rowMove","oldRow","HtmlTableImport","fieldIndex","hasIndex","_extractOptions","_extractHeaders","_generateBlankHeaders","newElement","attributes","optionsArr","optionsList","attrib","_attribValue","_findCol","exists","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","mergedBindings","_key","mapBindings","bindEvents","_this57","_loop2","actions","mapBinding","symbolsList","ctrl","code","checkBinding","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","keyBlock","newPos","scrollMax","navLeft","navRight","menuEl","blurEvent","hideMenu","headerMenuEl","_this58","loadMenu","_this59","_this60","_this61","docHeight","innerHeight","itemEl","separator","menus","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","mousemove","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","moveToCol","_bindMouseMove","_unbindMouseMove","movingCells","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectedTable","connectedRow","mouseup","tableRowDrop","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connect","disconnect","dropComplete","sender","senders","receiver","receivers","fromTable","toTable","Mutator","enabled","lookupMutator","mutators","mutatorEdit","Page","initialLoad","pageSizes","dataReceivedNames","dataSentNames","pagesElement","firstBut","prevBut","nextBut","lastBut","pageSizeSelect","generatePageSizeSelectList","_this62","pageSelectLabel","testElRow","testElCell","paginationDataReceivedNames","trigger","_this63","_this64","_setPageButtons","leftSize","rightSize","_generatePageButton","_this65","_this66","_this67","_getRemotePage","oldParams","pageParams","_this68","_parseRemoteData","last_page","footer","Persistence","defWatcherBlock","readFunc","writeFunc","localStorageTest","testKey","localStorage","setItem","removeItem","retreivedData","readers","writers","retreiveData","oldCols","newCols","_findColumn","validateSorters","getGroupConfig","getPageConfig","definitions","defStore","colDef","local","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Print","manualBlock","replaceTable","cleanup","footerContent","scrollX","scrollY","footerEl","tableEl","ReactiveData","origFuncs","currentVersion","args","arg","startRow","oldRows","writable","watchKey","unwatchRow","ResizeColumns","startColumn","startWidth","prevHandle","variableHeight","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","resizable","mouseMove","mouseUp","ResizeRows","startHeight","ResizeTable","observer","containerObserver","tableHeight","containerHeight","containerWidth","tableStyle","_this69","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","formatCollapsedData","generateCollapsedContent","_iterator","_isArray","_i","_ref","generateCollapsedRowContent","colCount","working","generateCollapsedRowData","mockCellComponent","listContents","div","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","_rowSelectionChanged","endSelect","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","_selectRow","rowMatch","_this70","rowInfo","checkboxEl","childRowSelection","selectedRow","_iterator2","_isArray2","_i2","_ref2","_iterator3","_isArray3","_i3","_ref3","_child","Sort","arrowEl","sorterParams","startingDir","headerSortStartingDir","newSortList","findSorter","sortListActual","clearColumnHeaders","setColumnHeader","sortObj","_sortItems","_this71","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","aRow","bRow","alignEmptyValues","decimalSeparator","thousandSeparator","emptyAlign","localeCompare","boolean","calc","alphanum","as","bs","a1","b1","rx","isFinite","Validate","_extractValidator","_buildValidator","parameters","validators","float","numeric","minLength","maxLength","in","regex","unique","cellData","define","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","globalThis","Function","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","isAbsolute","pathname","spliceOne","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","part","condition","message","addLeadingSlash","stripLeadingSlash","stripBasename","hasBasename","stripTrailingSlash","createPath","hash","createLocation","currentLocation","hashIndex","searchIndex","parsePath","_extends","decodeURI","URIError","resolvePathname","createTransitionManager","prompt","listeners","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","appendListener","fn","isActive","listener","notifyListeners","_len","canUseDOM","getConfirmation","confirm","PopStateEvent","HashChangeEvent","getHistoryState","createBrowserHistory","invariant","globalHistory","canUseHistory","supportsHistory","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_window$location","createKey","transitionManager","nextState","handlePopState","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","fromLocation","toLocation","allKeys","delta","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","isBlocked","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","listen","unlisten","HashChangeEvent$1","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","stripHash","getHashPath","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","ignorePath","encodedPath","prevLocation","allPaths","lastIndexOf","baseTag","pushHashPath","nextPaths","clamp","lowerBound","upperBound","MAX_SIGNED_31_BIT_INT","React","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","gud","_Component","emitter","handlers","on","handler","off","changedBits","createEventEmitter","_proto","nextProps","_Component2","onUpdate","_proto2","excluded","sourceKeys","createNamedContext","Router","_isMounted","_pendingLocation","staticContext","computeRootMatch","isExact","cache$1","cacheLimit$1","cacheCount$1","matchPath","_options","_options$exact","_options$strict","_options$sensitive","matched","cacheKey","pathCache","regexp","compilePath$1","_compilePath","Route","context$1","computedMatch","_this$props","createURL","staticHandler","methodName","noop","BrowserRouter","resolveToLocation","normalizeToLocation","forwardRefShim","LinkAnchor","forwardedRef","innerRef","navigate","_onClick","rest","_objectWithoutPropertiesLoose","ex","isModifiedEvent","Link","_ref2$component","__RouterContext","forwardRefShim$1","forwardRef$1","ariaCurrent","_ref$ariaCurrent","activeClassName","_ref$activeClassName","activeStyle","classNameProp","isActiveProp","locationProp","styleProp","escapedPath","classnames","joinClassnames","DispTxt","NullTst","NullSum","accumulator","addend","NullBypassSum","NullSub","minuend","subtrahend","NullMax","currVal","newVal","val1","val2","NullMin","NullDiv","dividend","divisor","NullMult","factor1","factor2","Tst2015","season","passedValue","CalcPlayerRating","attempts","completions","yards","int","compPct","yardsPerAtt","tdPct","intPct","FormatNumSuffixed","num","DispFunc","decimals","withComma","withPercent","GameResult","teamScore","opponentScore","qbSummary","qbAdvPassing","qbEffectiveness","qbRushing","rbfbSummary","advRushing","advReceiving","cgtSummary","passBlocking","runBlocking","dedtSummary","lbSummary","cbsSummary","advDefense","passRush","kicking","punting","advPunting","qbGameSummary","rbfbGameSummary","cgtGameSummary","gameKicking","gamePunting","dedtGameSummary","lbGameSummary","cbsGameSummary","minFilter","setminFilter","htmlFor","onSubmit","TableQBSummaryTabulator","super","passingstats","rushingstats","isLeaderboards","bioCols","sortable","initSort","colNum","sortFunc","aData","bData","sorterFunc","tabulator","ConsolidateData","playerName","playerId","positionName","team","games","gamesStarted","passAttempts","passCompletions","passDrops","passCompPct","passYards","passDropYards","passYdsPerAttempt","passYdsPerGame","passLong","passTD","passThrowAways","passSpikes","passBatted","passMiscommunications","passAccurateCompletions","passDroppedTD","passInt","passDroppedInt","passQBRating","rushAttempts","rushYds","rushYdsPerAttempt","rushLong","rushTD","sumFumbles","sumFumblesLost","sumIQR","sumPointsEarned","rowdata","teamName","starts","comp","drops","compPerc","dropYards","throwAways","spikes","miscommunications","accurateCompletions","droppedTD","droppedInterceptions","qbRating","fumbles","fumblesLost","iqr","eps","att","long","SumData","borderTop","borderBottom","Filters","TableQBAdvancedPassingTabulator","passTdRate","passIntRate","passOnTargetThrows","passOnTargetPct","passCatchableThrows","passCatchablePct","passAirYardsPct","passComplAirYards","passIntendedAirYards","passAvgThrowDepth","passYdsAfterCatch","passDropbacks","passSacks","passSackYards","passSackPct","passScrambles","passPointsEarned","sacks","sackYards","scrambles","tdRate","intRate","onTargetThrows","catchableThrows","onTargetPct","catchablePct","completedAirYards","airYardPct","intendedAirYards","passAttemptsPartial","TableQBPassingAccuracyTabulator","accuracystats","totals","behindlosatt","behindloscomp","behindlosIqr","behindlosIqrAttempts","behindlosIqrCompletions","behindlosIqrYards","behindlosIqrTD","behindlosIqrInts","behindlosleftatt","behindlosmidatt","behindlosrightatt","shortatt","shortcomp","shortIqr","shortIqrAttempts","shortIqrCompletions","shortIqrYards","shortIqrTD","shortIqrInts","shortleftatt","shortmidatt","shortrightatt","intatt","intcomp","intIqr","intIqrAttempts","intIqrCompletions","intIqrYards","intIqrTD","intIqrInts","intleftatt","intmidatt","intrightatt","deepatt","deepcomp","deepIqr","deepIqrAttempts","deepIqrCompletions","deepIqrYards","deepIqrTD","deepIqrInts","deepleftatt","deepmidatt","deeprightatt","qbdd","rowcontent","behindlosiqr","shortiqr","intiqr","deepiqr","GenerateSeasonRow","depthIQR","iqrAttempts","accCmplDrop","tDandTDDrops","intsDroppedInts","GenerateTotalRow","behindlosleftpct","behindlosmidpct","behindlosrightpct","shortleftpct","shortmidpct","shortrightpct","intleftpct","intmidpct","intrightpct","deepleftpct","deepmidpct","deeprightpct","AddSeasonToTotals","TableQBAdvancedRushingTabulator","firstDown","firstDownPct","insideAtt","yardsPerInsideAtt","offtackleAtt","yardsPerOffTackleAtt","outsideAtt","yardsPerOutsideAtt","yardsAfterContact","yardsAfterContactPct","brokenTackles","brokenTacklesPct","rushPointsEarned","player","rushInsideYards","rushOffTackleYards","rushOutsideYards","suppressTable","TableRBWRSummaryTabulator","receivingstats","puntretstats","kickretstats","blockingstats","sumGames","sumGamesStarted","rushYdsPerGame","receives","rcvYds","rcvYdsPerRcv","rcvLong","rcvTD","rcvYdsPerGame","pntretAttempts","pntretYards","pntretYdsPerAtt","pntretTD","kickretAttempts","kickretYards","kickretYdsPerAtt","kickretTD","yardsPerG","recs","yardsPerRec","tDs","sumTDs","passBlockEPS","runBlockEPS","TableRBWRAdvancedRushingTabulator","offTackleAtt","yardsAfterContactPerAtt","brokenTacklesPerAtt","targets","teamTargets","targetShare","avgTgtDepth","catchableTgts","yardsAfterCatch","ydsAftCatchPerReceive","dropPct","firstDowns","receiverRating","interceptions","snaps","blownBlocks","bbPass","bbRuns","blownBlockPct","penalties","totalHolds","falseStarts","otherPenalties","penaltyPct","pointsEarned","passSnap","rushSnap","passHolds","rushHolds","totalEPS","bbPerPassSnap","passPenalties","passPenaltyPct","sacksAllowed","sackPct","bBperRushSnap","rushPenalties","rushPenaltyPct","rushStuffs","rushStuffPct","TableKPPuntingTabulator","puntingstats","playerlist","punts","puntYards","puntAvgYards","puntsReturned","returnYards","netPuntYards","puntAvgNetYards","blockedPunts","partialBlockedPunts","fCs","touchBacks","puntsInside20","TableKPAdvancedPuntingTabulator","returns","puntIn20","puntIn20Pct","puntIn10","passYds","fairCatchPct","returnPct","touchBackPct","puntIn10Pct","puntsInSide20Pct","puntsInside10","TableKPKickingTabulator","kickingstats","overallMade","overallAttempts","overallPct","overallLong","overallPoints","fg1to29Made","fg1to29Attempts","fg1to29Pct","fg30to39Made","fg30to39Attempts","fg30to39Pct","fg40to49Made","fg40to49Attempts","fg40to49Pct","fg50plusMade","fg50plusAttempts","fg50plusPct","patMade","patAttempts","patPct","PointsEarned","fieldGoalAtt","fieldGoalMakes","extraPointMakes","fgMade1to19","fgMade20to29","fgAtt1to19","fgAtt20to29","fgMade30to39","fgAtt30to39","fgMade40to49","fgAtt40to49","fgMade50Plus","fgAtt50Plus","extraPointAtt","colMinWidth","TableDefenseSummaryTabulator","defensestats","completionPct","passYardsPerTgt","breakups","droppedInts","tackles","tackleForLoss","forcedFumbles","pointsSaved","pressures","hurries","hits","knockdowns","passesBatted","pntretYds","kickretYds","playeridpr","playeridrd","playeridpd","playeriddf","pointsSavedPassDef","pointsSavedPassRush","pointsSavedRushDef","assistedTackles","batDowns","defensed","deflected","passRushes","passRushSacks","passSnaps","rushsnaps","soloTackles","TableDefenseBuildData","pr","krt","prt","havepassdefense","havepassrush","haverushdefense","havedefense","avgTackleDepth","brokenTacklePct","deservedCatchPct","hitPct","hurryPct","knockdownPct","passesBattedPct","passRushPct","pressurePct","rushSnaps","rushTackles","rushYards","totCatchable","consolidatedData","passBatDowns","passesDefensed","deflections","hitPasser","ints","passerKnockDowns","totalTackles","tackleBroken","deservedCatchRateAllowed","yardsPerTarget","tfl","combinedSacks","hurriedPasser","knockDownPasser","gameCount","combinedTackles","totalYards","parm","byear","bmonth","bday","playername","jersey","weight","age","birthdate","draftRound","draftPick","draftYear","college","draftInfo","birthDate","fullName","cutOffDate","setMonth","getMonth","getFullYear","today","GetAge","setshowList","searchedPlayer","setsearchedPlayer","playerList","setplayerList","targetPage","players","lastName","firstName","positionCategory","onFocus","onBlur","parentElement","support","viewClasses","isArrayBufferView","isView","normalizeName","normalizeValue","iteratorFor","Headers","consumed","_noBody","bodyUsed","fileReaderReady","readBlobAsArrayBuffer","promise","readAsArrayBuffer","bufferClone","byteLength","buffer","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","_bodyFormData","URLSearchParams","DataView","_bodyArrayBuffer","rejected","arrayBuffer","isConsumed","byteOffset","encoding","readBlobAsText","chars","readArrayBufferAsText","formData","decode","entries","methods","Request","signal","upcased","normalizeMethod","AbortController","referrer","cache","reParamSearch","getTime","bytes","decodeURIComponent","parseHeaders","rawHeaders","line","Response","bodyInit","RangeError","redirectStatuses","redirect","DOMException","init","request","aborted","xhr","XMLHttpRequest","abortXhr","abort","getAllResponseHeaders","responseURL","responseText","ontimeout","onabort","fixUrl","withCredentials","responseType","names","setRequestHeader","onreadystatechange","readyState","polyfill","extendStatics","__extends","__","__assign","strUndefined","strObject","strPrototype","strFunction","strWindow","strJSON","getGlobal","getGlobalInst","gbl","hasWindow","Boolean","getWindow","hasDocument","getDocument","getNavigator","getHistory","getLocation","getPerformance","hasJSON","getJSON","strAttachEvent","strAddEventHelper","strDetachEvent","strRemoveEventListener","_isTypeof","theType","_isUndefined","_isNullOrUndefined","_hasOwnProperty","_isObject","_isFunction","_attachEvent","eventNameWithoutOn","handlerRef","useCapture","_detachEvent","LoggingSeverity","CoreUtils","isDate","isString","isNumber","isBoolean","disableCookies","_canUseCookies","newGuid","GuidRegex","toISOString","pad","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","arrForEach","callbackfn","idx","arrIndexOf","searchElement","lp","arrMap","arrReduce","objCreate","tmpFunc","objKeys","hasDontEnumBug","dontEnums","dontEnumsLength","objDefineAccessors","getProp","setProp","defineProp","addEventHandler","eventName","EventHelper","Attach","isTypeof","isUndefined","isNullOrUndefined","isFunction","isObject","AttachEvent","Detach","DetachEvent","_InternalMessageId","_InternalLogMessage","msgId","msg","isUserAct","properties","messageId","AiUserActionablePrefix","AiNonUserActionablePrefix","strProps","diagnosticText","sanitizeDiagnosticText","dataType","DiagnosticLogger","AIInternalMessagePrefix","_messageCount","_messageLogged","enableDebugExceptions","consoleLoggingLevel","telemetryLoggingLevel","maxInternalMessageLimit","loggingLevelConsole","loggingLevelTelemetry","maxMessageLimit","throwInternal","severity","messageKey","WARNING","warnToConsole","logInternalMessage","log","resetInternalMessageCount","_areInternalMessagesThrottled","logMessage","throttleLimitMessage","throttleMessage","TelemetryPluginChain","defItemCtx","_self","_nextProxy","_hasProcessTelemetry","processTelemetry","_hasSetNext","setNextPlugin","_hasRun","getPlugin","getNext","setNext","nextPlugin","env","itemCtx","hasRun","diagLog","CRITICAL","identifier","_createProxyChain","plugins","proxies","lastProxy","thePlugin","newProxy","ProcessTelemetryContext","core","startAt","proxy","_copyProxyChain","srcPlugins","_copyPluginChain","logger","getCfg","getExtCfg","theConfig","extConfig","extensionConfig","getConfig","theValue","hasNext","processNext","createNew","BaseTelemetryPlugin","_isinitialized","_rootCtx","_nextPlugin","_getTelCtx","isInitialized","setInitialized","currentCtx","rootCtx","_baseTelInit","pluginChain","getProcessTelContext","initializePlugins","processContext","initPlugins","lastPlugin","sortPlugins","extA","extB","bHasProcess","ChannelControllerPriority","ChannelValidationMessage","_arrForEach","_objDefineAccessors","_addChannelQueue","channelQueues","queueItem","_checkQueuePriority","StorageType","FieldType","DistributedTracingModes","ChannelController","_super","tslib_1","_channelQueue","queues","getChannelControls","isCookieUseDisabled","channelQueue","channels","extensionQueue_1","_createChannelQueues","_staticInit","BaseCore","_isInitialized","_extensions","_channelController","_setInit","_eventQueue","notificationManager","instrumentationKey","channelController","addNotificationListener","removeNotificationListener","eventsSent","events","eventsDiscarded","reason","_notificationManager","NotificationManager","allExtensions","coreExtensions","channelExtensions","extPriorities","ext","extPriority","getTransmissionControls","telemetryItem","iKey","ver","thePlugins","EventsDiscardedReason","this_1","this_2","AppInsightsCore","_notifyInvalidEvent","_validateTelemetryItem","pollInternalLogs","interval","diagnosticLogInterval","setInterval","baseType","baseData","PropertiesPluginIdentifier","BreezeChannelIdentifier","RequestHeaders","requestContextHeader","requestContextTargetKey","requestContextAppIdFormat","requestIdHeader","traceParentHeader","sdkContextHeader","sdkContextHeaderAppIdRequest","requestContextHeaderLowerCase","DataSanitizer","sanitizeKeyAndAddUniqueness","origLength","sanitizeKey","uniqueField","MAX_NAME_LENGTH","padNumber","nameTrunc","sanitizeString","valueTrunc","MAX_STRING_LENGTH","sanitizeUrl","sanitizeInput","MAX_URL_LENGTH","sanitizeMessage","messageTrunc","MAX_MESSAGE_LENGTH","sanitizeException","exception","exceptionTrunc","MAX_EXCEPTION_LENGTH","sanitizeProperties","tempProps","MAX_PROPERTY_LENGTH","sanitizeMeasurements","measurements","tempMeasurements","measure","sanitizeId","MAX_ID_LENGTH","_msgId","inputTrunc","_navigator","_isString","_uaDisallowsSameSiteNone","DataPointType","Util","createDomEvent","disableStorage","_canUseLocalStorage","_canUseSessionStorage","_getLocalStorageObject","canUseLocalStorage","_getVerifiedStorageObject","LocalStorage","storageType","fail","uid","storage","isInternalApplicationInsightsEndpoint","endpointUrl","_internalEndpoints","getStorage","getExceptionName","dump","setStorage","removeStorage","_getSessionStorageObject","canUseSessionStorage","SessionStorage","getSessionStorageKeys","getSessionStorage","setSessionStorage","removeSessionStorage","canUseCookies","disallowsSameSiteNone","_endsWith","setCookie","domain","domainAttrib","secureAttrib","location_1","protocol","stringToBoolOrDefault","getCookie","cookieName","cookies","deleteCookie","newId","random32","generateW3CId","tmp","hexValues","oct","clockSequenceHi","isError","getIEVersion","userAgentStr","myNav","msToTimeSpan","totalms","ms","sec","hour","days","isCrossOriginError","columnNumber","objectTypeDump","propertyValueDump","IsBeaconApiSupported","sendBeacon","getExtension","extension","extIx","NotSpecified","toISOStringForIE8","UrlHelper","parseUrl","htmlAnchorElement","host","parseHost","getAbsoluteUrl","getPathName","getCompleteUrl","absoluteUrl","CorrelationIdHelper","canIncludeCorrelationHeader","requestUrl","currentHost","disableCorrelationHeaders","requestHost","enableCorsCorrelation","matchExists_1","includedDomains","correlationHeaderDomains","excludedDomains","correlationHeaderExcludedDomains","getCorrelationContext","responseHeader","correlationId","getCorrelationContextValue","correlationIdPrefix","keyValues","keyValue","AjaxHelper","ParseDependencyPath","commandName","parsedUrl","pathName","DateTimeUtils","Now","perf","timing","navigationStart","GetDuration","TelemetryItemCreator","envelopeName","customProperties","systemProperties","tags","Domain","EventData","aiDataContract","Required","Default","envelopeType","Trace","severityLevel","MessageData","MetricData","metrics","SeverityLevel","DataPoint","kind","stdDev","Measurement","Metric","dataPoint","PageViewData","PageView","durationMs","PageViewPerformance","unused","cs4BaseData","perfTotal","networkConnect","sentRequest","receivedResponse","domProcessing","PageViewPerfData","StackFrame","ExceptionDetails","hasFullStack","parsedStack","Exception","exceptions","_ExceptionDetails","problemGroup","isManual","CreateFromInterface","toInterface","_a","CreateSimpleException","typeName","assembly","details","ExceptionData","outerId","parseStack","frame","_StackFrame","frames_1","totalSizeInBytes","parsedFrame","sizeInBytes","acceptedLeft","acceptedRight","howMany","sourceFrame","baseSize","RemoteDependencyData","resultCode","requestAPI","correlationContext","dependencyKind","dependencySource","dependencyTypeName","dependencyFields","Constructor","Prototype","DynInstFuncTable","DynProxyTag","DynClassName","UnknownValue","str__Proto","_objGetPrototypeOf","_dynamicNames","_isObjectOrArrayPrototype","_isObjectArrayOrFunctionPrototype","_getObjProto","newProto","_isDynamicCandidate","funcName","skipOwn","_throwTypeError","_hasVisited","_getObjName","unknownValue","theClass","delegateFunc","classProto","thisTarget","thisProto","_checkPrototype","instFuncs","_getInstanceFuncs","baseFuncs","_instFuncProxy","theFunc","baseProto","visited","_getBaseFuncs","proto","baseInstFuncs","_createDynamicPrototype","dynProtoProxy","instFunc","protoFunc","instFuncTable","_populatePrototype","PageViewManager","appInsights","overridePageViewDuration","pageViewPerformanceManager","dynamicProto","_logger","intervalHandle","itemQueue","pageViewPerformanceSent","_flushChannels","flush","trackPageView","pageView","uri","isPerformanceTimingSupported","sendPageViewInternal","customDuration","pageViewSent","getPerformanceTiming","shouldCollectDuration","processed","isPerformanceTimingDataReady","pageViewPerformance","populatePageViewPerformanceEvent","sendPageViewPerformanceInternal","allItems","doFlush","clearInterval","PageVisitTimeManager","pageVisitTimeTrackingHandler","prevPageVisitDataKeyName","trackPreviousPageVisit","currentPageName","currentPageUrl","prevPageVisitTimeData","restartPageVisitTimer","pageName","pageUrl","pageVisitTime","prevPageVisitData","stopPageVisitTimer","startPageVisitTimer","currPageVisitData","PageVisitData","currPageVisitDataStr","pageVisitEndTime","pageVisitDataJsonStr","pageVisitStartTime","PageViewPerformanceManager","MAX_DURATION_ALLOWED","navigationTiming","getPerformanceNavigationTiming","total","network","connectEnd","requestStart","responseStart","responseEnd","dom","loadEventEnd","isPerformanceNavigationTimingSupported","getEntriesByType","domainLookupStart","domLoading","durations","botAgentNames","isGoogleBot","durationProperty","_dispatchEvent","evnt","ApplicationInsights","autoRoutePVDelay","_trackAjaxAttempts","_prevUri","getDefaultConfig","sessionRenewalMs","sessionExpirationMs","disableExceptionTracking","autoTrackPageVisitTime","enableUnhandledPromiseRejectionTracking","samplingPercentage","isStorageUseDisabled","isBrowserLinkTrackingEnabled","enableAutoRouteTracking","namePrefix","doNotSendItem","telemetryInitializersCount","_telemetryInitializers","telemetryInitializer","trackEvent","EventTelemetry","startTrackEvent","_eventTracking","stopTrackEvent","stop","trackTrace","trace","trackMetric","metric","inPv","_pageViewManager","_pageVisitTimeManager","refUri","trackPageViewPerformance","_pageViewPerformanceManager","startTrackPage","_pageTracking","stopTrackPage","measurement","loc","sendExceptionInternal","exceptionPartB","trackException","_onerror","properties_1","_sendCORSException","errorString","addTelemetryInitializer","ctx","_globalconfig","defaults","configGetters","accountId","sampleRate","cookieDomain","sdkExtension","appId","trackPageVisitTime","_addDefaultTelemetryInitializers","Timing","pageViewItem","_window","_history","_location","autoExceptionInstrumented","originalOnError_1","handled","autoUnhandledPromiseInstrumented","onunhandledrejection","originalOnUnhandledRejection_1","_self_1","_properties","ret","telemetryTrace","traceID","_currUri","PageName","PageUrl","average","sampleCount","browserLinkPaths_1","_addTelemetryInitializer","envelope","remoteData","Version","_name","_events","ArraySendBuffer","_config","_buffer","enqueue","getItems","batchPayloads","emitLineDelimitedJson","markAsSent","clearSent","SessionStorageSendBuffer","_bufferFullMessageSent","bufferItems","getBuffer","BUFFER_KEY","notDeliveredItems","SENT_BUFFER_KEY","MAX_BUFFER_SIZE","setBuffer","removePayloadsFromBuffer","sentElements","payloads","remaining","prefixedKey","bufferJson","Envelope","Hidden","DisabledPropertyName","SampleRate","ProcessLegacy","HttpMethod","ContextTagKeys","applicationVersion","applicationBuild","applicationTypeId","applicationId","applicationLayer","deviceId","deviceIp","deviceLanguage","deviceLocale","deviceModel","deviceFriendlyName","deviceNetwork","deviceNetworkName","deviceOEMName","deviceOS","deviceOSVersion","deviceRoleInstance","deviceRoleName","deviceScreenResolution","deviceType","deviceMachineName","deviceVMName","deviceBrowser","deviceBrowserVersion","locationIp","locationCountry","locationProvince","locationCity","operationId","operationName","operationParentId","operationRootId","operationSyntheticSource","operationCorrelationVector","sessionId","sessionIsFirst","sessionIsNew","userAccountAcquisitionDate","userAccountId","userId","userStoreRegion","userAuthUserId","userAnonymousUserAcquisitionDate","userAuthenticatedUserAcquisitionDate","cloudName","cloudRole","cloudRoleVer","cloudRoleInstance","cloudEnvironment","cloudLocation","cloudDeploymentUnit","internalNodeName","internalSdkVersion","internalAgentVersion","Extensions","UserExt","DeviceExt","TraceExt","WebExt","AppExt","OSExt","SessionExt","SDKExt","CtxTagKeys","Data","EnvelopeCreator","extractPropsAndMeasurements","createEnvelope","iKeyNoDashes","extractPartAExtensions","user","authId","localId","app","sesId","device","deviceClass","ip","web","browserLang","browserVer","screenRes","userConsent","model","os","parentID","tgs","DependencyEnvelopeCreator","Create","customMeasurements","command","responseCode","EventEnvelopeCreator","ExceptionEnvelopeCreator","MetricEnvelopeCreator","PageViewEnvelopeCreator","currentContextId","pageType","isLoggedIn","pageTags","PageViewPerformanceEnvelopeCreator","TraceEnvelopeCreator","Serializer","serialize","_serializeObject","circularReferenceCheck","_serializeStringMap","_serializeArray","contract","isHidden","isPresent","sources","expectedType","OfflineListener","_onlineStatus","_document","isListening","_setOnline","_setOffline","ononline","onoffline","isOnline","onLine","isOffline","Offline","HashCodeScoreGenerator","getHashCodeScore","getHashCode","INT_MAX_VALUE","MIN_INPUT_LENGTH","SamplingScoreGenerator","hashCodeGeneragor","getSamplingScore","Sample","samplingRate","samplingScoreGenerator","isSampledIn","_getResponseText","Sender","_XMLHttpRequestSupported","constructEnvelope","orig","_getDefaultAppInsightsChannelConfig","maxBatchInterval","maxBatchSizeInBytes","disableTelemetry","enableSessionStorageBuffer","isRetryDisabled","isBeaconApiDisabled","onunloadDisableBeacon","_getEmptyAppInsightsChannelConfig","pause","resume","triggerSend","onunloadFlush","_senderConfig","_beaconSender","teardown","_serializer","_consecutiveErrors","_retryAt","_lastSend","_sender","_sample","_xhrSender","XDomainRequest","_xdrSender","_isSampledIn","aiEnvelope_1","doNotSendItem_1","callBack","bufferPayload","batch","_setupTimer","_xhrReadyStateChange","countOfItemsInPayload","_appId","_parseResponse","_isRetriable","_resendPayload","_onError","_formatErrorMessageXhr","_onPartialSuccess","_onSuccess","async","forcedSender","_timeoutHandle","failed","retry","errors_1","errors","extracted","statusCode","itemsAccepted","itemsReceived","_xdrOnLoad","xdr","_formatErrorMessageXdr","isAsync","plainTextBatch","endPointUrl","linearFactor","payload_1","_setRetryTime","delayInSeconds","backOffSlot","pow","backOffDelay","retryAfterTimeSpan","retryInterval","timerValue","hostingProtocol","Session","_SessionManager","acquisitionSpan","renewalSpan","_storageNamePrefix","cookieNameConst","automaticSession","initializeAutomaticSession","acquisitionExpired","acquisitionDate","renewalExpired","renewalDate","renew","cookieUpdatedTimestamp","cookieUpdateInterval","backup","initializeAutomaticSessionWithData","sessionData","acq","renewal","guid","acquisitionExpiry","renewalExpiry","cookieExpiry","setTime","cookieDomnain","UTCString","Application","Device","Internal","sdkVersion","User","isNewUser","userCookieName","cookieSeparator","acqStr","accountAcquisitionDate","newCookie","name_1","authCookie","authUserCookieName","authCookieString","authenticatedId","setAuthenticatedUserContext","authenticatedUserId","storeInCookie","validateUserInput","clearAuthenticatedUserContext","Location","TelemetryTrace","parentId","TelemetryContext","sessionManager","application","session","applySessionContext","sessionContext","applyOperatingSystemContxt","applyApplicationContext","applyDeviceContext","applyInternalContext","agentVersion","applyLocationContext","applyOperationContext","applyWebContext","applyUserContext","cleanUp","PropertiesPlugin","_extensionConfig","_breezeChannel","_processTelemetryInternal","aiInstrumentHooks","cbNames","_arrLoop","_doCallbacks","hooks","callDetails","cbArgs","hookCtx","hook","cbks","inst","orgEx","hookErrorCb","_getOwner","checkPrototype","owner","InstrumentFunc","callbacks","aiHook_1","newFunc","aiHook","orgArgs","funcArgs","_createArgs","theArgs","rslt","theHook","rm","strProperties","_objKeys","_calcPerfDuration","resourceEntry","_setPerfDuration","_setPerfValue","strPerf","XHRMonitoringState","openDone","setRequestHeaderDone","sendDone","abortDone","stateChangeAttached","ajaxRecord","spanID","strResponseText","perfMark","completed","requestHeadersSize","requestHeaders","responseReceivingDuration","callbackDuration","ajaxTotalDuration","requestSize","requestSentTime","responseStartedTime","responseFinishedTime","callbackFinishedTime","endTime","xhrMonitoringState","clientFailure","CreateTrackItem","ajaxType","enableRequestHeaderTracking","getResponse","dependency","ajaxData","perfTiming","propsSet","strName","strStart","strEnd","strDomainLookup","strConnect","strRedirect","strRequest","strResponse","strDuration","strStartTime","strDomainLookupStart","strDomainLookupEnd","strConnectStart","strConnectEnd","strRequestStart","strRequestEnd","strResponseStart","strResponseEnd","strRedirectStart","strRedirectEnd","strTransferSize","strEncodedBodySize","strDecodedBodySize","strServerTiming","serverTiming","server_1","normalizeJsName","perfAttempts","_populatePerfData","headerMap","responseHeaders","Traceparent","traceId","spanId","traceFlag","DEFAULT_TRACE_FLAG","DEFAULT_VERSION","isValidTraceId","isValidSpanId","AJAX_MONITOR_PREFIX","strDiagLog","strAjaxData","strThrowInternal","strFetch","_markCount","_getFailedAjaxDiagnosticsMessage","_throwInternalCritical","ajaxMonitorInstance","_throwInternalWarning","_createErrorCallbackFunc","internalMessage","ajaxDiagnosticsMessage","_indexOf","AjaxMonitor","_isUsingW3CHeaders","_isUsingAIHeaders","_markPrefix","strTrackDependencyDataInternal","_fetchInitialized","_xhrInitialized","_currentWindowHost","getEmptyConfig","_enableRequestHeaderTracking","_enableAjaxPerfTracking","_maxAjaxCallsPerView","_enableResponseHeaderTracking","_hooks","_disabledUrls","_hookProto","InstrumentProto","_isDisabledRequest","theUrl","idx2","_isMonitoredXhrInstance","excludeAjaxDataValidation","ajaxValidation","_getAjaxCorrelationContext","responseHeadersString","getResponseHeader","_createMarkId","performance_1","mark","markId","getEntriesByName","_findPerfResourceEntry","initiatorType","trackCallback","reportError","maxAttempts","maxAjaxPerfLookupAttempts","retryDelay","ajaxPerfLookupDelay","attempt","locateResourceTiming","getEntries","entryType","clearMarks","_getFailedFetchDiagnosticsMessage","_reportFetchMetrics","_reportFetchError","failedProps","errorProps","_getFetchCorrelationContext","fetchDiagnosticsMessage","ctx_1","defaultConfig_1","distributedTracingMode","enableAjaxPerfTracking","maxAjaxCallsPerView","enableResponseHeaderTracking","AI","AI_AND_W3C","W3C","disableAjaxTracking","theOpen","_supportsAjaxMonitoring","req","_reportXhrError","responseHeaderMap_2","_onAjaxComplete","exceptionText","_attachToOnReadyStateChange","_openHandler","hkErr","includeCorrelationHeaders","_global","_supportsFetch","isPolyfill","disableFetchTracking","fetchData","_createFetchRecord","newInit","rsp","responseHeaderMap_1","_instrumentFetch","propExt","trackDependencyData","currentWindowHost","traceparent","enableAjaxErrorStatusText","emptyConfig","ConnectionStringParser","connectionString","kvPairs","_FIELDS_SEPARATOR","kv","kvParts","_FIELD_KEY_VALUE_SEPARATOR","endpointsuffix","locationPrefix","ingestionendpoint","Initialization","snippet","cs","Common","ingest","instrumentationkey","DependenciesPlugin","getSKUDefaults","inPvp","channel","loadAppInsights","legacyMode","appInsightsChannel","_updateSnippetProperties","emptyQueue","addHousekeepingBeforeUnload","updateSnippetDefinitions","length_1","appInsightsInstance","performHousekeeping","_sessionManager","disableFlushOnBeforeUnload","added","disableFlushOnUnload","fetchPolyfill","Players","getSecurityToken","executeHTTPRequestPost","access_token","getGlobalStats","getAllPlayers","executeHTTPRequest","playerSelectionList","asyncAPImonitor","displayFeaturedPlayer","playerid","handlePlayerSelected","loadNFLPlayers","getPassingStats","requesturl","getRushingStats","getAccuracyStats","getReceivingStats","getBlockingStats","getPuntRetStats","getKickRetStats","getPuntingStats","getKickingStats","getPassDefenseStats","passdefensestats","getPassRushStats","passrushstats","getRushDefenseStats","rushdefensestats","getDefenseStats","globalstats","failback","Authorization","formBody","encodedKey","encodedValue","asyncAPIcount","asyncAPIrows","asyncAPIcallstocomplete","alldependenciescomplete","usererrormessage","loadingmessage","selectedPlayerId","globalStats","playerposition","pagelayout","searchUserInput","selectedPlayerID","defenseData","reScroll","handleScroll","playerLink","playerGameLogLink","leaderboardsLink","src","alt","DropDown","role","PlayerBio","TableDefenseAdvancedDefenseTabulator","TableDefensePassRushTabulator","TableRBWRAdvancedReceivingTabulator","TableOLPassBlockingTabulator","TableOLRushBlockingTabulator","TableOLSummaryTabulator","GameLogQBSummaryTabulator","gameInfoCols","maxPlayerSeason","sortKey","matchup","oppTeam","gameWeek","gameDate","gameSeasonDateSSSSYYYYMMDD","gameResult","oppTeamName","oppTeamScore","iqrComp","iqrYards","iqrTD","iqrInt","rowcount","GameLogOLSummaryTabulator","bBpass","bBruns","GameLogWRTERBFBSummaryTabulator","rcvTargets","GameLogDefenseSummaryTabulator","GameLogDefenseBuildData","havekickret","havepuntret","GameLogKPKickingTabulator","GameLogKPPuntingTabulator","touchbacks","PlayerGameLogs","startSeason","setStartSeason","endSeason","setEndSeason","tabName","setTabName","fromSeasons","toSeasons","class","TableWRTESummaryTabulator","Leaderboards","currentDate","currentMonth","currentYear","changeCategory","category","filterPlayers","ids","incParameters","filteredPlayers","minAttempts","cat","prevCategory","tabSelected","tabActive","QBSection","WRRBSection","TESection","OLSection","DefenseSection","KickingSection","PuntingSection","Glossary","onGlossaryFilterChange","keep","filteredGlossary","glossaryEntries","heading","searchGlossaryKey","playerCategory","leaderboardLink","BrowserRedirect","LeaderBoards","hostname","ReactDOM","getElementById","serviceWorker","ready","registration","unregister"],"sourceRoot":""}