REJack 4 lat temu
rodzic
commit
e8476fa5a4
100 zmienionych plików z 2409 dodań i 12901 usunięć
  1. 31 41
      package-lock.json
  2. 6 6
      package.json
  3. 206 270
      plugins/bootstrap/js/bootstrap.bundle.js
  4. 0 0
      plugins/bootstrap/js/bootstrap.bundle.js.map
  5. 3 3
      plugins/bootstrap/js/bootstrap.bundle.min.js
  6. 0 0
      plugins/bootstrap/js/bootstrap.bundle.min.js.map
  7. 207 271
      plugins/bootstrap/js/bootstrap.js
  8. 0 0
      plugins/bootstrap/js/bootstrap.js.map
  9. 3 3
      plugins/bootstrap/js/bootstrap.min.js
  10. 0 0
      plugins/bootstrap/js/bootstrap.min.js.map
  11. 3 1
      plugins/codemirror/addon/comment/comment.js
  12. 12 0
      plugins/codemirror/addon/display/placeholder.js
  13. 16 7
      plugins/codemirror/addon/hint/xml-hint.js
  14. 11 13
      plugins/codemirror/addon/lint/lint.css
  15. 4 4
      plugins/codemirror/addon/lint/lint.js
  16. 8 2
      plugins/codemirror/addon/scroll/annotatescrollbar.js
  17. 1 0
      plugins/codemirror/codemirror.css
  18. 28 18
      plugins/codemirror/codemirror.js
  19. 186 16
      plugins/codemirror/keymap/vim.js
  20. 19 16
      plugins/codemirror/mode/css/css.js
  21. 1 1
      plugins/codemirror/mode/javascript/javascript.js
  22. 2 2
      plugins/codemirror/mode/julia/julia.js
  23. 2 2
      plugins/codemirror/mode/meta.js
  24. 0 0
      plugins/codemirror/mode/nsis/nsis.js
  25. 23 18
      plugins/codemirror/mode/ruby/ruby.js
  26. 35 38
      plugins/datatables-bs4/css/dataTables.bootstrap4.css
  27. 0 0
      plugins/datatables-bs4/css/dataTables.bootstrap4.min.css
  28. 1 1
      plugins/datatables-bs4/js/dataTables.bootstrap4.js
  29. 4 4
      plugins/datatables-bs4/js/dataTables.bootstrap4.min.js
  30. 7 1
      plugins/datatables-buttons/js/buttons.colVis.js
  31. 5 5
      plugins/datatables-buttons/js/buttons.colVis.min.js
  32. 1 1
      plugins/datatables-buttons/js/buttons.flash.js
  33. 16 16
      plugins/datatables-buttons/js/buttons.flash.min.js
  34. 1 1
      plugins/datatables-buttons/js/buttons.html5.js
  35. 10 10
      plugins/datatables-buttons/js/buttons.html5.min.js
  36. 75 22
      plugins/datatables-buttons/js/dataTables.buttons.js
  37. 32 31
      plugins/datatables-buttons/js/dataTables.buttons.min.js
  38. 15 4
      plugins/datatables-fixedcolumns/js/dataTables.fixedColumns.js
  39. 23 22
      plugins/datatables-fixedcolumns/js/dataTables.fixedColumns.min.js
  40. 11 6
      plugins/datatables-keytable/js/dataTables.keyTable.js
  41. 17 17
      plugins/datatables-keytable/js/dataTables.keyTable.min.js
  42. 20 14
      plugins/datatables-responsive/css/responsive.bootstrap4.css
  43. 0 0
      plugins/datatables-responsive/css/responsive.bootstrap4.min.css
  44. 8 6
      plugins/datatables-responsive/js/dataTables.responsive.js
  45. 7 7
      plugins/datatables-responsive/js/dataTables.responsive.min.js
  46. 4 4
      plugins/datatables-scroller/js/dataTables.scroller.js
  47. 3 3
      plugins/datatables-scroller/js/dataTables.scroller.min.js
  48. 73 40
      plugins/datatables/jquery.dataTables.js
  49. 156 154
      plugins/datatables/jquery.dataTables.min.js
  50. 48 48
      plugins/fontawesome-free/css/all.css
  51. 1 1
      plugins/fontawesome-free/css/all.min.css
  52. 1 1
      plugins/fontawesome-free/css/brands.css
  53. 1 1
      plugins/fontawesome-free/css/brands.min.css
  54. 48 48
      plugins/fontawesome-free/css/fontawesome.css
  55. 1 1
      plugins/fontawesome-free/css/fontawesome.min.css
  56. 1 1
      plugins/fontawesome-free/css/regular.css
  57. 1 1
      plugins/fontawesome-free/css/regular.min.css
  58. 1 1
      plugins/fontawesome-free/css/solid.css
  59. 1 1
      plugins/fontawesome-free/css/solid.min.css
  60. 1 1
      plugins/fontawesome-free/css/svg-with-js.css
  61. 1 1
      plugins/fontawesome-free/css/svg-with-js.min.css
  62. 1 1
      plugins/fontawesome-free/css/v4-shims.css
  63. 1 1
      plugins/fontawesome-free/css/v4-shims.min.css
  64. BIN
      plugins/fontawesome-free/webfonts/fa-brands-400.eot
  65. 408 273
      plugins/fontawesome-free/webfonts/fa-brands-400.svg
  66. BIN
      plugins/fontawesome-free/webfonts/fa-brands-400.ttf
  67. BIN
      plugins/fontawesome-free/webfonts/fa-brands-400.woff
  68. BIN
      plugins/fontawesome-free/webfonts/fa-brands-400.woff2
  69. BIN
      plugins/fontawesome-free/webfonts/fa-regular-400.eot
  70. 93 91
      plugins/fontawesome-free/webfonts/fa-regular-400.svg
  71. BIN
      plugins/fontawesome-free/webfonts/fa-regular-400.ttf
  72. BIN
      plugins/fontawesome-free/webfonts/fa-regular-400.woff
  73. BIN
      plugins/fontawesome-free/webfonts/fa-regular-400.woff2
  74. BIN
      plugins/fontawesome-free/webfonts/fa-solid-900.eot
  75. 504 217
      plugins/fontawesome-free/webfonts/fa-solid-900.svg
  76. BIN
      plugins/fontawesome-free/webfonts/fa-solid-900.ttf
  77. BIN
      plugins/fontawesome-free/webfonts/fa-solid-900.woff
  78. BIN
      plugins/fontawesome-free/webfonts/fa-solid-900.woff2
  79. 0 20
      plugins/fullcalendar-bootstrap/LICENSE.txt
  80. 0 36
      plugins/fullcalendar-bootstrap/main.css
  81. 0 83
      plugins/fullcalendar-bootstrap/main.esm.js
  82. 0 91
      plugins/fullcalendar-bootstrap/main.js
  83. 0 1
      plugins/fullcalendar-bootstrap/main.min.css
  84. 0 6
      plugins/fullcalendar-bootstrap/main.min.js
  85. 0 20
      plugins/fullcalendar-daygrid/LICENSE.txt
  86. 0 78
      plugins/fullcalendar-daygrid/main.css
  87. 0 1655
      plugins/fullcalendar-daygrid/main.esm.js
  88. 0 1669
      plugins/fullcalendar-daygrid/main.js
  89. 0 1
      plugins/fullcalendar-daygrid/main.min.css
  90. 0 5
      plugins/fullcalendar-daygrid/main.min.js
  91. 0 20
      plugins/fullcalendar-interaction/LICENSE.txt
  92. 0 2141
      plugins/fullcalendar-interaction/main.esm.js
  93. 0 2152
      plugins/fullcalendar-interaction/main.js
  94. 0 5
      plugins/fullcalendar-interaction/main.min.js
  95. 0 20
      plugins/fullcalendar-timegrid/LICENSE.txt
  96. 0 309
      plugins/fullcalendar-timegrid/main.css
  97. 0 1391
      plugins/fullcalendar-timegrid/main.esm.js
  98. 0 1403
      plugins/fullcalendar-timegrid/main.js
  99. 0 0
      plugins/fullcalendar-timegrid/main.min.css
  100. 0 5
      plugins/fullcalendar-timegrid/main.min.js

+ 31 - 41
package-lock.json

@@ -2890,9 +2890,9 @@
       "dev": true
     },
     "codemirror": {
-      "version": "5.56.0",
-      "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.56.0.tgz",
-      "integrity": "sha512-MfKVmYgifXjQpLSgpETuih7A7WTTIsxvKfSLGseTY5+qt0E1UD1wblZGM6WLenORo8sgmf+3X+WTe2WF7mufyw=="
+      "version": "5.58.0",
+      "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.58.0.tgz",
+      "integrity": "sha512-OUK+7EgaYnLyC0F09UWjckLWvviy02IDDGTW5Zmj60a3gdGnFtUM6rVsqrfl5+YSylQVQBNfAGG4KF7tQOb4/Q=="
     },
     "collapse-white-space": {
       "version": "1.0.6",
@@ -3284,40 +3284,30 @@
       }
     },
     "datatables.net-bs4": {
-      "version": "1.10.21",
-      "resolved": "https://registry.npmjs.org/datatables.net-bs4/-/datatables.net-bs4-1.10.21.tgz",
-      "integrity": "sha512-F9zabYw8ZLXfjvj2S+BdnbkEUsL48bJwWxQFrA47cOXrIvsMhW8nmqPZcIMK4ko3k1i74nbpWLO1t+vueQKoXQ==",
+      "version": "1.10.22",
+      "resolved": "https://registry.npmjs.org/datatables.net-bs4/-/datatables.net-bs4-1.10.22.tgz",
+      "integrity": "sha512-si0eOiaKmuURURpXhPRba7b3vCZsVfJK8pfrlM5WtaOaCEBa62DG/S9guMxUBmcAmvEC3FA2CKc/iKya3gb9qg==",
       "requires": {
-        "datatables.net": "1.10.21",
+        "datatables.net": "1.10.22",
         "jquery": ">=1.7"
-      },
-      "dependencies": {
-        "datatables.net": {
-          "version": "1.10.21",
-          "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.21.tgz",
-          "integrity": "sha512-/bSZtxmf3GTpYcvEmwZ8q26I1yhSx8qklR2B+s1K8+/51UW/zc2zTYwJMqr/Z+iCYixAc00ildj4g2x0Qamolw==",
-          "requires": {
-            "jquery": ">=1.7"
-          }
-        }
       }
     },
     "datatables.net-buttons": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.6.3.tgz",
-      "integrity": "sha512-wZBt/zkW1EUL1S+CFkmMVuN+wKkVTt4Vy5BfxsCuTFGRcbkko9WdcEYID2YLSnE/jaIcqBaolCzGSbH057V68Q==",
+      "version": "1.6.4",
+      "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.6.4.tgz",
+      "integrity": "sha512-KxiQs1UdczsT26sptLE9P550G9QFPdwcAO9o57NHIME/lfNp9qLxL0ho0mmjQfugEBrJxqff7xGkPpK6CyKDRw==",
       "requires": {
         "datatables.net": "^1.10.15",
         "jquery": ">=1.7"
       }
     },
     "datatables.net-buttons-bs4": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs4/-/datatables.net-buttons-bs4-1.6.3.tgz",
-      "integrity": "sha512-PV8Ghm/qO+YDOF++r9Ky8IZLJCy0rvq+3Nft8sG3Lsoyx8NPeOzERASaYbasTTyGbw4PajD9uimZXJuCcmaSkg==",
+      "version": "1.6.4",
+      "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs4/-/datatables.net-buttons-bs4-1.6.4.tgz",
+      "integrity": "sha512-HvfRGW1qf+fAs63SYTavZI0/3aF3tBkDtUS1Is+ZKZ5ncpAwjh0FhzrTtQ8YS4jyDDMDy2x6G8kUIzKyNmGoHg==",
       "requires": {
         "datatables.net-bs4": "^1.10.15",
-        "datatables.net-buttons": "1.6.3",
+        "datatables.net-buttons": "1.6.4",
         "jquery": ">=1.7"
       }
     },
@@ -3341,21 +3331,21 @@
       }
     },
     "datatables.net-fixedcolumns": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns/-/datatables.net-fixedcolumns-3.3.1.tgz",
-      "integrity": "sha512-r5zbISAo7XBDZVivor5Hj1Jg9hbpFxbD+H6tJFJLdGJXUA2BSTddA70DBBEM9jwj7Zjts/dnfROwflWl3DfZJw==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns/-/datatables.net-fixedcolumns-3.3.2.tgz",
+      "integrity": "sha512-LKWJZDSU9R8Z7rz/YSxSyAhxvtBvrA08oCY7y9h8ExynfEG3XUzAPejb2Y1I0YznPcnaYEnukUXLRHU6DjTnWQ==",
       "requires": {
         "datatables.net": "^1.10.15",
         "jquery": ">=1.7"
       }
     },
     "datatables.net-fixedcolumns-bs4": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns-bs4/-/datatables.net-fixedcolumns-bs4-3.3.1.tgz",
-      "integrity": "sha512-6k4IGPmo44gBFNvelOan7JWLISNjGUzwOa2l0UqNFS7Ms2SfgipykHBAvrMOm86Fuw2YRlk2HF5X815PXDYmLw==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/datatables.net-fixedcolumns-bs4/-/datatables.net-fixedcolumns-bs4-3.3.2.tgz",
+      "integrity": "sha512-pmZ/yg4bCQ9Rij1Zk6LApF4UCxFRezsj00p3Eol8eDnw20y0JFF2YSC+xxDAhqmnozLOKq8ILButMaavtyEHyA==",
       "requires": {
         "datatables.net-bs4": "^1.10.15",
-        "datatables.net-fixedcolumns": "3.3.1",
+        "datatables.net-fixedcolumns": "3.3.2",
         "jquery": ">=1.7"
       }
     },
@@ -3455,21 +3445,21 @@
       }
     },
     "datatables.net-scroller": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/datatables.net-scroller/-/datatables.net-scroller-2.0.2.tgz",
-      "integrity": "sha512-O0x2fCXA5j54qqgSrsdk9cTWc0c2Na/IMOnNdRAC57vHTDWyPDRWIJ62/RkM2JGgFjgk/deMMOKkddr0yhvzPA==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/datatables.net-scroller/-/datatables.net-scroller-2.0.3.tgz",
+      "integrity": "sha512-ijqGdWN3GR2KXjP0gt4HSY4HgaTqDhdGdzEf4gVOUHe0nH3th9XxLhlvld6G4qqpP5GXaF4OWlhH0ZBzcpeTQA==",
       "requires": {
         "datatables.net": "^1.10.15",
         "jquery": ">=1.7"
       }
     },
     "datatables.net-scroller-bs4": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/datatables.net-scroller-bs4/-/datatables.net-scroller-bs4-2.0.2.tgz",
-      "integrity": "sha512-fjvv7vz5XmXkkskWF8RM9ItX6CGZ+bIDx1ZNDMEyoZSrYyUtpHLHSIFVdk3d17Nt0xXuMwhEH5TH1PJuiEjvpg==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/datatables.net-scroller-bs4/-/datatables.net-scroller-bs4-2.0.3.tgz",
+      "integrity": "sha512-rFkl9Axr2KdYVs0f/BmvOlGsyi+8AXh/QPk/IrTWfMxL864EwLXtsXmQmsORuUBq56lULXaJDbZQVINqqT+/Yg==",
       "requires": {
         "datatables.net-bs4": "^1.10.15",
-        "datatables.net-scroller": "2.0.2",
+        "datatables.net-scroller": "2.0.3",
         "jquery": ">=1.7"
       }
     },
@@ -10801,9 +10791,9 @@
       }
     },
     "sweetalert2": {
-      "version": "9.17.1",
-      "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-9.17.1.tgz",
-      "integrity": "sha512-D/VE2lT/bKd64/RBglLUtQ+3nsftzjzIiP2iqN6zPzPwf+2djIY+4k8Bg430zxRUn4DkZzyIuU58q3n0J43lvw=="
+      "version": "9.17.2",
+      "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-9.17.2.tgz",
+      "integrity": "sha512-HkpPZVMYsnhFUBLdy/LvkU9snggKP3VAuSVnPhVXjxdg02lWbFx0W8H3m7A+WMWw2diXZS1wIa4m67XkNxdvew=="
     },
     "symbol-observable": {
       "version": "1.0.1",

+ 6 - 6
package.json

@@ -79,19 +79,19 @@
     "bs-custom-file-input": "^1.3.4",
     "bs-stepper": "^1.7.0",
     "chart.js": "^2.9.3",
-    "codemirror": "^5.56.0",
+    "codemirror": "^5.58.0",
     "datatables.net": "^1.10.22",
     "datatables.net-autofill-bs4": "^2.3.5",
-    "datatables.net-bs4": "^1.10.21",
-    "datatables.net-buttons-bs4": "^1.6.3",
+    "datatables.net-bs4": "^1.10.22",
+    "datatables.net-buttons-bs4": "^1.6.4",
     "datatables.net-colreorder-bs4": "^1.5.2",
-    "datatables.net-fixedcolumns-bs4": "^3.3.1",
+    "datatables.net-fixedcolumns-bs4": "^3.3.2",
     "datatables.net-fixedheader-bs4": "^3.1.7",
     "datatables.net-keytable-bs4": "^2.5.3",
     "datatables.net-responsive-bs4": "^2.2.6",
     "datatables.net-rowgroup-bs4": "^1.1.2",
     "datatables.net-rowreorder-bs4": "^1.2.7",
-    "datatables.net-scroller-bs4": "^2.0.2",
+    "datatables.net-scroller-bs4": "^2.0.3",
     "datatables.net-select-bs4": "^1.3.1",
     "daterangepicker": "^3.1.0",
     "dropzone": "^5.7.2",
@@ -122,7 +122,7 @@
     "select2": "^4.0.13",
     "sparklines": "^1.2.0",
     "summernote": "^0.8.18",
-    "sweetalert2": "^9.17.1",
+    "sweetalert2": "^9.17.2",
     "tempusdominus-bootstrap-4": "^5.1.2",
     "toastr": "^2.1.4"
   },

Plik diff jest za duży
+ 206 - 270
plugins/bootstrap/js/bootstrap.bundle.js


Plik diff jest za duży
+ 0 - 0
plugins/bootstrap/js/bootstrap.bundle.js.map


Plik diff jest za duży
+ 3 - 3
plugins/bootstrap/js/bootstrap.bundle.min.js


Plik diff jest za duży
+ 0 - 0
plugins/bootstrap/js/bootstrap.bundle.min.js.map


Plik diff jest za duży
+ 207 - 271
plugins/bootstrap/js/bootstrap.js


Plik diff jest za duży
+ 0 - 0
plugins/bootstrap/js/bootstrap.js.map


Plik diff jest za duży
+ 3 - 3
plugins/bootstrap/js/bootstrap.min.js


Plik diff jest za duży
+ 0 - 0
plugins/bootstrap/js/bootstrap.min.js.map


+ 3 - 1
plugins/codemirror/addon/comment/comment.js

@@ -13,7 +13,7 @@
 
   var noOptions = {};
   var nonWS = /[^\s\u00a0]/;
-  var Pos = CodeMirror.Pos;
+  var Pos = CodeMirror.Pos, cmp = CodeMirror.cmpPos;
 
   function firstNonWS(str) {
     var found = str.search(nonWS);
@@ -126,7 +126,9 @@
           if (i != end || lastLineHasText)
             self.replaceRange(lead + pad, Pos(i, 0));
       } else {
+        var atCursor = cmp(self.getCursor("to"), to) == 0, empty = !self.somethingSelected()
         self.replaceRange(endString, to);
+        if (atCursor) self.setSelection(empty ? to : self.getCursor("from"), to)
         self.replaceRange(startString, from);
       }
     });

+ 12 - 0
plugins/codemirror/addon/display/placeholder.js

@@ -15,11 +15,13 @@
       cm.on("blur", onBlur);
       cm.on("change", onChange);
       cm.on("swapDoc", onChange);
+      CodeMirror.on(cm.getInputField(), "compositionupdate", cm.state.placeholderCompose = () => onComposition(cm))
       onChange(cm);
     } else if (!val && prev) {
       cm.off("blur", onBlur);
       cm.off("change", onChange);
       cm.off("swapDoc", onChange);
+      CodeMirror.off(cm.getInputField(), "compositionupdate", cm.state.placeholderCompose)
       clearPlaceholder(cm);
       var wrapper = cm.getWrapperElement();
       wrapper.className = wrapper.className.replace(" CodeMirror-empty", "");
@@ -46,6 +48,16 @@
     cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);
   }
 
+  function onComposition(cm) {
+    var empty = true, input = cm.getInputField()
+    if (input.nodeName == "TEXTAREA")
+      empty = !input.value
+    else if (cm.lineCount() == 1)
+      empty = !/[^\u200b]/.test(input.querySelector(".CodeMirror-line").textContent)
+    if (empty) clearPlaceholder(cm)
+    else setPlaceholder(cm)
+  }
+
   function onBlur(cm) {
     if (isEmpty(cm)) setPlaceholder(cm);
   }

+ 16 - 7
plugins/codemirror/addon/hint/xml-hint.js

@@ -101,8 +101,14 @@
           }
           replaceToken = true;
         }
-        for (var i = 0; i < atValues.length; ++i) if (!prefix || matches(atValues[i], prefix, matchInMiddle))
-          result.push(quote + atValues[i] + quote);
+        function returnHintsFromAtValues(atValues) {
+          if (atValues)
+            for (var i = 0; i < atValues.length; ++i) if (!prefix || matches(atValues[i], prefix, matchInMiddle))
+              result.push(quote + atValues[i] + quote);
+          return returnHints();
+        }
+        if (atValues && atValues.then) return atValues.then(returnHintsFromAtValues);
+        return returnHintsFromAtValues(atValues);
       } else { // An attribute name
         if (token.type == "attribute") {
           prefix = token.string;
@@ -112,11 +118,14 @@
           result.push(attr);
       }
     }
-    return {
-      list: result,
-      from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur,
-      to: replaceToken ? Pos(cur.line, token.end) : cur
-    };
+    function returnHints() {
+      return {
+        list: result,
+        from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur,
+        to: replaceToken ? Pos(cur.line, token.end) : cur
+      };
+    }
+    return returnHints();
   }
 
   CodeMirror.registerHelper("hint", "xml", getHints);

+ 11 - 13
plugins/codemirror/addon/lint/lint.css

@@ -25,22 +25,20 @@
   -ms-transition: opacity .4s;
 }
 
-.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning {
+.CodeMirror-lint-mark {
   background-position: left bottom;
   background-repeat: repeat-x;
 }
 
-.CodeMirror-lint-mark-error {
-  background-image:
-  url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==")
-  ;
-}
-
 .CodeMirror-lint-mark-warning {
   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=");
 }
 
-.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning {
+.CodeMirror-lint-mark-error {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==");
+}
+
+.CodeMirror-lint-marker {
   background-position: center center;
   background-repeat: no-repeat;
   cursor: pointer;
@@ -51,20 +49,20 @@
   position: relative;
 }
 
-.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning {
+.CodeMirror-lint-message {
   padding-left: 18px;
   background-position: top left;
   background-repeat: no-repeat;
 }
 
-.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {
-  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=");
-}
-
 .CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning {
   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=");
 }
 
+.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=");
+}
+
 .CodeMirror-lint-marker-multiple {
   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC");
   background-repeat: no-repeat;

+ 4 - 4
plugins/codemirror/addon/lint/lint.js

@@ -83,10 +83,10 @@
 
   function makeMarker(cm, labels, severity, multiple, tooltips) {
     var marker = document.createElement("div"), inner = marker;
-    marker.className = "CodeMirror-lint-marker-" + severity;
+    marker.className = "CodeMirror-lint-marker CodeMirror-lint-marker-" + severity;
     if (multiple) {
       inner = marker.appendChild(document.createElement("div"));
-      inner.className = "CodeMirror-lint-marker-multiple";
+      inner.className = "CodeMirror-lint-marker CodeMirror-lint-marker-multiple";
     }
 
     if (tooltips != false) CodeMirror.on(inner, "mouseover", function(e) {
@@ -114,7 +114,7 @@
     var severity = ann.severity;
     if (!severity) severity = "error";
     var tip = document.createElement("div");
-    tip.className = "CodeMirror-lint-message-" + severity;
+    tip.className = "CodeMirror-lint-message CodeMirror-lint-message-" + severity;
     if (typeof ann.messageHTML != 'undefined') {
       tip.innerHTML = ann.messageHTML;
     } else {
@@ -183,7 +183,7 @@
         if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann));
 
         if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, {
-          className: "CodeMirror-lint-mark-" + severity,
+          className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + severity,
           __annotation: ann
         }));
       }

+ 8 - 2
plugins/codemirror/addon/scroll/annotatescrollbar.js

@@ -72,10 +72,16 @@
     var wrapping = cm.getOption("lineWrapping");
     var singleLineH = wrapping && cm.defaultTextHeight() * 1.5;
     var curLine = null, curLineObj = null;
+
     function getY(pos, top) {
       if (curLine != pos.line) {
-        curLine = pos.line;
-        curLineObj = cm.getLineHandle(curLine);
+        curLine = pos.line
+        curLineObj = cm.getLineHandle(pos.line)
+        var visual = cm.getLineHandleVisualStart(curLineObj)
+        if (visual != curLineObj) {
+          curLine = cm.getLineNumber(visual)
+          curLineObj = visual
+        }
       }
       if ((curLineObj.widgets && curLineObj.widgets.length) ||
           (wrapping && curLineObj.height > singleLineH))

+ 1 - 0
plugins/codemirror/codemirror.css

@@ -184,6 +184,7 @@ div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
   position: absolute;
   z-index: 6;
   display: none;
+  outline: none;
 }
 .CodeMirror-vscrollbar {
   right: 0; top: 0;

+ 28 - 18
plugins/codemirror/codemirror.js

@@ -1841,7 +1841,7 @@
       }
     }
     builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
-    if (style || startStyle || endStyle || mustWrap || css) {
+    if (style || startStyle || endStyle || mustWrap || css || attributes) {
       var fullStyle = style || "";
       if (startStyle) { fullStyle += startStyle; }
       if (endStyle) { fullStyle += endStyle; }
@@ -3276,8 +3276,10 @@
     var on = true;
     display.cursorDiv.style.visibility = "";
     if (cm.options.cursorBlinkRate > 0)
-      { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; },
-        cm.options.cursorBlinkRate); }
+      { display.blinker = setInterval(function () {
+        if (!cm.hasFocus()) { onBlur(cm); }
+        display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
+      }, cm.options.cursorBlinkRate); }
     else if (cm.options.cursorBlinkRate < 0)
       { display.cursorDiv.style.visibility = "hidden"; }
   }
@@ -6641,7 +6643,7 @@
     46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
     106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock",
     173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
-    221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+    221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
     63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
   };
 
@@ -6776,7 +6778,7 @@
     var base = name;
     if (event.altKey && base != "Alt") { name = "Alt-" + name; }
     if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; }
-    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name; }
+    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") { name = "Cmd-" + name; }
     if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; }
     return name
   }
@@ -7002,7 +7004,7 @@
     goGroupRight: function (cm) { return cm.moveH(1, "group"); },
     goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
     goWordRight: function (cm) { return cm.moveH(1, "word"); },
-    delCharBefore: function (cm) { return cm.deleteH(-1, "char"); },
+    delCharBefore: function (cm) { return cm.deleteH(-1, "codepoint"); },
     delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
     delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
     delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
@@ -7877,7 +7879,9 @@
     attachDoc(this, doc);
 
     if ((options.autofocus && !mobile) || this.hasFocus())
-      { setTimeout(bind(onFocus, this), 20); }
+      { setTimeout(function () {
+        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }
+      }, 20); }
     else
       { onBlur(this); }
 
@@ -8640,14 +8644,14 @@
   }
 
   // Used for horizontal relative motion. Dir is -1 or 1 (left or
-  // right), unit can be "char", "column" (like char, but doesn't
-  // cross line boundaries), "word" (across next word), or "group" (to
-  // the start of next group of word or non-word-non-whitespace
-  // chars). The visually param controls whether, in right-to-left
-  // text, direction 1 means to move towards the next index in the
-  // string, or towards the character to the right of the current
-  // position. The resulting position will have a hitSide=true
-  // property if it reached the end of the document.
+  // right), unit can be "codepoint", "char", "column" (like char, but
+  // doesn't cross line boundaries), "word" (across next word), or
+  // "group" (to the start of next group of word or
+  // non-word-non-whitespace chars). The visually param controls
+  // whether, in right-to-left text, direction 1 means to move towards
+  // the next index in the string, or towards the character to the right
+  // of the current position. The resulting position will have a
+  // hitSide=true property if it reached the end of the document.
   function findPosH(doc, pos, dir, unit, visually) {
     var oldPos = pos;
     var origDir = dir;
@@ -8661,7 +8665,12 @@
     }
     function moveOnce(boundToLine) {
       var next;
-      if (visually) {
+      if (unit == "codepoint") {
+        var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));
+        if (isNaN(ch)) { next = null; }
+        else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),
+                            -dir); }
+      } else if (visually) {
         next = moveVisually(doc.cm, lineObj, pos, dir);
       } else {
         next = moveLogically(lineObj, pos, dir);
@@ -8677,7 +8686,7 @@
       return true
     }
 
-    if (unit == "char") {
+    if (unit == "char" || unit == "codepoint") {
       moveOnce();
     } else if (unit == "column") {
       moveOnce(true);
@@ -9621,6 +9630,7 @@
   TextareaInput.prototype.readOnlyChanged = function (val) {
     if (!val) { this.reset(); }
     this.textarea.disabled = val == "nocursor";
+    this.textarea.readOnly = !!val;
   };
 
   TextareaInput.prototype.setUneditable = function () {};
@@ -9771,7 +9781,7 @@
 
   addLegacyProps(CodeMirror);
 
-  CodeMirror.version = "5.56.0";
+  CodeMirror.version = "5.58.0";
 
   return CodeMirror;
 

+ 186 - 16
plugins/codemirror/keymap/vim.js

@@ -8,7 +8,7 @@
  * Supported Ex commands:
  *   Refer to defaultExCommandMap below.
  *
- * Registers: unnamed, -, a-z, A-Z, 0-9
+ * Registers: unnamed, -, ., :, /, _, a-z, A-Z, 0-9
  *   (Does not respect the special case for number registers when delete
  *    operator is made with these commands: %, (, ),  , /, ?, n, N, {, } )
  *   TODO: Implement the remaining registers.
@@ -141,6 +141,8 @@
     { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true },
     { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }},
     { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }},
+    { keys: 'gn', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: true }},
+    { keys: 'gN', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: false }},
     // Operator-Motion dual commands
     { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }},
     { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }},
@@ -416,7 +418,7 @@
     var lowerCaseAlphabet = makeKeyRange(97, 26);
     var numbers = makeKeyRange(48, 10);
     var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);
-    var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '"', '.', ':', '/']);
+    var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '"', '.', ':', '_', '/']);
 
     function isLine(cm, line) {
       return line >= cm.firstLine() && line <= cm.lastLine();
@@ -1128,6 +1130,8 @@
     }
     RegisterController.prototype = {
       pushText: function(registerName, operator, text, linewise, blockwise) {
+        // The black hole register, "_, means delete/yank to nowhere.
+        if (registerName === '_') return;
         if (linewise && text.charAt(text.length - 1) !== '\n'){
           text += '\n';
         }
@@ -1574,7 +1578,7 @@
         motionArgs.repeat = repeat;
         clearInputState(cm);
         if (motion) {
-          var motionResult = motions[motion](cm, origHead, motionArgs, vim);
+          var motionResult = motions[motion](cm, origHead, motionArgs, vim, inputState);
           vim.lastMotion = motions[motion];
           if (!motionResult) {
             return;
@@ -1772,6 +1776,87 @@
         highlightSearchMatches(cm, query);
         return findNext(cm, prev/** prev */, query, motionArgs.repeat);
       },
+      /**
+       * Find and select the next occurrence of the search query. If the cursor is currently
+       * within a match, then find and select the current match. Otherwise, find the next occurrence in the
+       * appropriate direction.
+       *
+       * This differs from `findNext` in the following ways:
+       *
+       * 1. Instead of only returning the "from", this returns a "from", "to" range.
+       * 2. If the cursor is currently inside a search match, this selects the current match
+       *    instead of the next match.
+       * 3. If there is no associated operator, this will turn on visual mode.
+       */
+      findAndSelectNextInclusive: function(cm, _head, motionArgs, vim, prevInputState) {
+        var state = getSearchState(cm);
+        var query = state.getQuery();
+
+        if (!query) {
+          return;
+        }
+
+        var prev = !motionArgs.forward;
+        prev = (state.isReversed()) ? !prev : prev;
+
+        // next: [from, to] | null
+        var next = findNextFromAndToInclusive(cm, prev, query, motionArgs.repeat, vim);
+
+        // No matches.
+        if (!next) {
+          return;
+        }
+
+        // If there's an operator that will be executed, return the selection.
+        if (prevInputState.operator) {
+          return next;
+        }
+
+        // At this point, we know that there is no accompanying operator -- let's
+        // deal with visual mode in order to select an appropriate match.
+
+        var from = next[0];
+        // For whatever reason, when we use the "to" as returned by searchcursor.js directly,
+        // the resulting selection is extended by 1 char. Let's shrink it so that only the
+        // match is selected.
+        var to = Pos(next[1].line, next[1].ch - 1);
+
+        if (vim.visualMode) {
+          // If we were in visualLine or visualBlock mode, get out of it.
+          if (vim.visualLine || vim.visualBlock) {
+            vim.visualLine = false;
+            vim.visualBlock = false;
+            CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: ""});
+          }
+
+          // If we're currently in visual mode, we should extend the selection to include
+          // the search result.
+          var anchor = vim.sel.anchor;
+          if (anchor) {
+            if (state.isReversed()) {
+              if (motionArgs.forward) {
+                return [anchor, from];
+              }
+
+              return [anchor, to];
+            } else {
+              if (motionArgs.forward) {
+                return [anchor, to];
+              }
+
+              return [anchor, from];
+            }
+          }
+        } else {
+          // Let's turn visual mode on.
+          vim.visualMode = true;
+          vim.visualLine = false;
+          vim.visualBlock = false;
+          CodeMirror.signal(cm, "vim-mode-change", {mode: "visual", subMode: ""});
+        }
+
+        return prev ? [to, from] : [from, to];
+      },
       goToMark: function(cm, _head, motionArgs, vim) {
         var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter);
         if (pos) {
@@ -1867,8 +1952,8 @@
         // move to previous/next line is triggered.
         if (line < first && cur.line == first){
           return this.moveToStartOfLine(cm, head, motionArgs, vim);
-        }else if (line > last && cur.line == last){
-            return this.moveToEol(cm, head, motionArgs, vim, true);
+        } else if (line > last && cur.line == last){
+            return moveToEol(cm, head, motionArgs, vim, true);
         }
         if (motionArgs.toFirstChar){
           endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));
@@ -1970,16 +2055,8 @@
         vim.lastHSPos = cm.charCoords(head,'div').left;
         return moveToColumn(cm, repeat);
       },
-      moveToEol: function(cm, head, motionArgs, vim, keepHPos) {
-        var cur = head;
-        var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);
-        var end=cm.clipPos(retval);
-        end.ch--;
-        if (!keepHPos) {
-          vim.lastHPos = Infinity;
-          vim.lastHSPos = cm.charCoords(end,'div').left;
-        }
-        return retval;
+      moveToEol: function(cm, head, motionArgs, vim) {
+        return moveToEol(cm, head, motionArgs, vim, false);
       },
       moveToFirstNonWhiteSpaceCharacter: function(cm, head) {
         // Go to the start of the line where the text begins, or the end for
@@ -2069,6 +2146,8 @@
             if (operatorArgs) { operatorArgs.linewise = true; }
             tmp.end.line--;
           }
+        } else if (character === 't') {
+          tmp = expandTagUnderCursor(cm, head, inclusive);
         } else {
           // No text object defined for this, don't move.
           return null;
@@ -3295,6 +3374,49 @@
       return { start: Pos(cur.line, start), end: Pos(cur.line, end) };
     }
 
+    /**
+     * Depends on the following:
+     *
+     * - editor mode should be htmlmixedmode / xml
+     * - mode/xml/xml.js should be loaded
+     * - addon/fold/xml-fold.js should be loaded
+     *
+     * If any of the above requirements are not true, this function noops.
+     *
+     * This is _NOT_ a 100% accurate implementation of vim tag text objects.
+     * The following caveats apply (based off cursory testing, I'm sure there
+     * are other discrepancies):
+     *
+     * - Does not work inside comments:
+     *   ```
+     *   <!-- <div>broken</div> -->
+     *   ```
+     * - Does not work when tags have different cases:
+     *   ```
+     *   <div>broken</DIV>
+     *   ```
+     * - Does not work when cursor is inside a broken tag:
+     *   ```
+     *   <div><brok><en></div>
+     *   ```
+     */
+    function expandTagUnderCursor(cm, head, inclusive) {
+      var cur = head;
+      if (!CodeMirror.findMatchingTag || !CodeMirror.findEnclosingTag) {
+        return { start: cur, end: cur };
+      }
+
+      var tags = CodeMirror.findMatchingTag(cm, head) || CodeMirror.findEnclosingTag(cm, head);
+      if (!tags || !tags.open || !tags.close) {
+        return { start: cur, end: cur };
+      }
+
+      if (inclusive) {
+        return { start: tags.open.from, end: tags.close.to };
+      }
+      return { start: tags.open.to, end: tags.close.from };
+    }
+
     function recordJumpPosition(cm, oldCur, newCur) {
       if (!cursorEqual(oldCur, newCur)) {
         vimGlobalState.jumpList.add(cm, oldCur, newCur);
@@ -3562,6 +3684,18 @@
       }
     }
 
+    function moveToEol(cm, head, motionArgs, vim, keepHPos) {
+      var cur = head;
+      var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);
+      var end=cm.clipPos(retval);
+      end.ch--;
+      if (!keepHPos) {
+        vim.lastHPos = Infinity;
+        vim.lastHSPos = cm.charCoords(end,'div').left;
+      }
+      return retval;
+    }
+
     function moveToCharacter(cm, repeat, forward, character) {
       var cur = cm.getCursor();
       var start = cur.ch;
@@ -3836,7 +3970,7 @@
       return Pos(curr_index.ln, curr_index.pos);
     }
 
-    // TODO: perhaps this finagling of start and end positions belonds
+    // TODO: perhaps this finagling of start and end positions belongs
     // in codemirror/replaceRange?
     function selectCompanionObject(cm, head, symb, inclusive) {
       var cur = head, start, end;
@@ -4303,6 +4437,42 @@
         return cursor.from();
       });
     }
+    /**
+     * Pretty much the same as `findNext`, except for the following differences:
+     *
+     * 1. Before starting the search, move to the previous search. This way if our cursor is
+     * already inside a match, we should return the current match.
+     * 2. Rather than only returning the cursor's from, we return the cursor's from and to as a tuple.
+     */
+    function findNextFromAndToInclusive(cm, prev, query, repeat, vim) {
+      if (repeat === undefined) { repeat = 1; }
+      return cm.operation(function() {
+        var pos = cm.getCursor();
+        var cursor = cm.getSearchCursor(query, pos);
+
+        // Go back one result to ensure that if the cursor is currently a match, we keep it.
+        var found = cursor.find(!prev);
+
+        // If we haven't moved, go back one more (similar to if i==0 logic in findNext).
+        if (!vim.visualMode && found && cursorEqual(cursor.from(), pos)) {
+          cursor.find(!prev);
+        }
+
+        for (var i = 0; i < repeat; i++) {
+          found = cursor.find(prev);
+          if (!found) {
+            // SearchCursor may have returned null because it hit EOF, wrap
+            // around and try again.
+            cursor = cm.getSearchCursor(query,
+                (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );
+            if (!cursor.find(prev)) {
+              return;
+            }
+          }
+        }
+        return [cursor.from(), cursor.to()];
+      });
+    }
     function clearSearchHighlight(cm) {
       var state = getSearchState(cm);
       cm.removeOverlay(getSearchState(cm).getOverlay());

+ 19 - 16
plugins/codemirror/mode/css/css.js

@@ -442,17 +442,18 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "monochrome", "min-monochrome", "max-monochrome", "resolution",
     "min-resolution", "max-resolution", "scan", "grid", "orientation",
     "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio",
-    "pointer", "any-pointer", "hover", "any-hover"
+    "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme"
   ], mediaFeatures = keySet(mediaFeatures_);
 
   var mediaValueKeywords_ = [
     "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover",
-    "interlace", "progressive"
+    "interlace", "progressive",
+    "dark", "light"
   ], mediaValueKeywords = keySet(mediaValueKeywords_);
 
   var propertyKeywords_ = [
     "align-content", "align-items", "align-self", "alignment-adjust",
-    "alignment-baseline", "anchor-point", "animation", "animation-delay",
+    "alignment-baseline", "all", "anchor-point", "animation", "animation-delay",
     "animation-direction", "animation-duration", "animation-fill-mode",
     "animation-iteration-count", "animation-name", "animation-play-state",
     "animation-timing-function", "appearance", "azimuth", "backdrop-filter",
@@ -503,7 +504,9 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "list-style-image", "list-style-position", "list-style-type", "margin",
     "margin-bottom", "margin-left", "margin-right", "margin-top", "marks",
     "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed",
-    "marquee-style", "max-block-size", "max-height", "max-inline-size",
+    "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode",
+    "mask-origin", "mask-position", "mask-repeat", "mask-size","mask-type",
+    "max-block-size", "max-height", "max-inline-size",
     "max-width", "min-block-size", "min-height", "min-inline-size", "min-width",
     "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right",
     "nav-up", "object-fit", "object-position", "offset", "offset-anchor",
@@ -540,7 +543,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "text-height", "text-indent", "text-justify", "text-orientation",
     "text-outline", "text-overflow", "text-rendering", "text-shadow",
     "text-size-adjust", "text-space-collapse", "text-transform",
-    "text-underline-position", "text-wrap", "top", "transform", "transform-origin",
+    "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin",
     "transform-style", "transition", "transition-delay", "transition-duration",
     "transition-property", "transition-timing-function", "translate",
     "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance",
@@ -552,11 +555,11 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
     "color-interpolation", "color-interpolation-filters",
     "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
-    "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke",
+    "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke",
     "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
     "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
     "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
-    "glyph-orientation-vertical", "text-anchor", "writing-mode"
+    "glyph-orientation-vertical", "text-anchor", "writing-mode",
   ], propertyKeywords = keySet(propertyKeywords_);
 
   var nonStandardPropertyKeywords_ = [
@@ -623,7 +626,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate",
     "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
     "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page",
-    "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary",
+    "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary",
     "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
     "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel",
     "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian",
@@ -647,7 +650,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
     "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig",
     "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed",
-    "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes",
+    "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes",
     "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove",
     "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew",
     "help", "hidden", "hide", "higher", "highlight", "highlighttext",
@@ -662,7 +665,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem",
     "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
     "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
-    "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d",
+    "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d",
     "media-controls-background", "media-current-time-display",
     "media-fullscreen-button", "media-mute-button", "media-play-button",
     "media-return-to-realtime-button", "media-rewind-button",
@@ -671,13 +674,13 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "media-volume-slider-container", "media-volume-sliderthumb", "medium",
     "menu", "menulist", "menulist-button", "menulist-text",
     "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic",
-    "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize",
+    "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize",
     "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
     "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
     "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote",
     "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
     "outside", "outside-shape", "overlay", "overline", "padding", "padding-box",
-    "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter",
+    "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter",
     "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d",
     "progress", "push-button", "radial-gradient", "radio", "read-only",
     "read-write", "read-write-plaintext-only", "rectangle", "region",
@@ -695,8 +698,8 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
     "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali",
     "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square",
-    "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub",
-    "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table",
+    "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub",
+    "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table",
     "table-caption", "table-cell", "table-column", "table-column-group",
     "table-footer-group", "table-header-group", "table-row", "table-row-group",
     "tamil",
@@ -706,10 +709,10 @@ CodeMirror.defineMode("css", function(config, parserConfig) {
     "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
     "trad-chinese-formal", "trad-chinese-informal", "transform",
     "translate", "translate3d", "translateX", "translateY", "translateZ",
-    "transparent", "ultra-condensed", "ultra-expanded", "underline", "unset", "up",
+    "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up",
     "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
     "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
-    "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted",
+    "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted",
     "visibleStroke", "visual", "w-resize", "wait", "wave", "wider",
     "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor",
     "xx-large", "xx-small"

+ 1 - 1
plugins/codemirror/mode/javascript/javascript.js

@@ -111,7 +111,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
       if (ch != ">" || !state.lexical || state.lexical.type != ">") {
         if (stream.eat("=")) {
           if (ch == "!" || ch == "=") stream.eat("=")
-        } else if (/[<>*+\-]/.test(ch)) {
+        } else if (/[<>*+\-|&?]/.test(ch)) {
           stream.eat(ch)
           if (ch == ">") stream.eat(ch)
         }

+ 2 - 2
plugins/codemirror/mode/julia/julia.js

@@ -401,8 +401,8 @@ CodeMirror.defineMode("julia", function(config, parserConf) {
 
     indent: function(state, textAfter) {
       var delta = 0;
-      if ( textAfter === ']' || textAfter === ')' || /^end/.test(textAfter) ||
-           /^else/.test(textAfter) || /^catch/.test(textAfter) || /^elseif/.test(textAfter) ||
+      if ( textAfter === ']' || textAfter === ')' || /^end\b/.test(textAfter) ||
+           /^else/.test(textAfter) || /^catch\b/.test(textAfter) || /^elseif\b/.test(textAfter) ||
            /^finally/.test(textAfter) ) {
         delta = -1;
       }

+ 2 - 2
plugins/codemirror/mode/meta.js

@@ -24,7 +24,7 @@
     {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj", "cljc", "cljx"]},
     {name: "ClojureScript", mime: "text/x-clojurescript", mode: "clojure", ext: ["cljs"]},
     {name: "Closure Stylesheets (GSS)", mime: "text/x-gss", mode: "css", ext: ["gss"]},
-    {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists.txt$/},
+    {name: "CMake", mime: "text/x-cmake", mode: "cmake", ext: ["cmake", "cmake.in"], file: /^CMakeLists\.txt$/},
     {name: "CoffeeScript", mimes: ["application/vnd.coffeescript", "text/coffeescript", "text/x-coffeescript"], mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]},
     {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]},
     {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]},
@@ -55,7 +55,7 @@
     {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]},
     {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]},
     {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]},
-    {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history).md$/i},
+    {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history)\.md$/i},
     {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]},
     {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy", "gradle"], file: /^Jenkinsfile$/},
     {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]},

Plik diff jest za duży
+ 0 - 0
plugins/codemirror/mode/nsis/nsis.js


+ 23 - 18
plugins/codemirror/mode/ruby/ruby.js

@@ -11,25 +11,28 @@
 })(function(CodeMirror) {
 "use strict";
 
+function wordObj(words) {
+  var o = {};
+  for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;
+  return o;
+}
+
+var keywordList = [
+  "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else",
+  "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or",
+  "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless",
+  "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc",
+  "caller", "lambda", "proc", "public", "protected", "private", "require", "load",
+  "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__"
+], keywords = wordObj(keywordList);
+
+var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then",
+                           "catch", "loop", "proc", "begin"]);
+var dedentWords = wordObj(["end", "until"]);
+var opening = {"[": "]", "{": "}", "(": ")"};
+var closing = {"]": "[", "}": "{", ")": "("};
+
 CodeMirror.defineMode("ruby", function(config) {
-  function wordObj(words) {
-    var o = {};
-    for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true;
-    return o;
-  }
-  var keywords = wordObj([
-    "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else",
-    "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or",
-    "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless",
-    "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc",
-    "caller", "lambda", "proc", "public", "protected", "private", "require", "load",
-    "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__"
-  ]);
-  var indentWords = wordObj(["def", "class", "case", "for", "while", "until", "module", "then",
-                             "catch", "loop", "proc", "begin"]);
-  var dedentWords = wordObj(["end", "until"]);
-  var opening = {"[": "]", "{": "}", "(": ")"};
-  var closing = {"]": "[", "}": "{", ")": "("};
   var curPunc;
 
   function chain(newtok, stream, state) {
@@ -295,4 +298,6 @@ CodeMirror.defineMode("ruby", function(config) {
 
 CodeMirror.defineMIME("text/x-ruby", "ruby");
 
+CodeMirror.registerHelper("hintWords", "ruby", keywordList);
+
 });

+ 35 - 38
plugins/datatables-bs4/css/dataTables.bootstrap4.css

@@ -44,7 +44,6 @@ div.dataTables_wrapper div.dataTables_filter input {
 }
 div.dataTables_wrapper div.dataTables_info {
   padding-top: 0.85em;
-  white-space: nowrap;
 }
 div.dataTables_wrapper div.dataTables_paginate {
   margin: 0;
@@ -67,60 +66,58 @@ div.dataTables_wrapper div.dataTables_processing {
   padding: 1em 0;
 }
 
-table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
-table.dataTable thead > tr > td.sorting_asc,
-table.dataTable thead > tr > td.sorting_desc,
-table.dataTable thead > tr > td.sorting {
-  padding-right: 30px;
-}
-table.dataTable thead > tr > th:active,
-table.dataTable thead > tr > td:active {
+table.dataTable > thead > tr > th:active,
+table.dataTable > thead > tr > td:active {
   outline: none;
 }
-table.dataTable thead .sorting,
-table.dataTable thead .sorting_asc,
-table.dataTable thead .sorting_desc,
-table.dataTable thead .sorting_asc_disabled,
-table.dataTable thead .sorting_desc_disabled {
+table.dataTable > thead > tr > th:not(.sorting_disabled),
+table.dataTable > thead > tr > td:not(.sorting_disabled) {
+  padding-right: 30px;
+}
+table.dataTable > thead .sorting,
+table.dataTable > thead .sorting_asc,
+table.dataTable > thead .sorting_desc,
+table.dataTable > thead .sorting_asc_disabled,
+table.dataTable > thead .sorting_desc_disabled {
   cursor: pointer;
   position: relative;
 }
-table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_asc:after,
-table.dataTable thead .sorting_desc:before,
-table.dataTable thead .sorting_desc:after,
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:after {
+table.dataTable > thead .sorting:before, table.dataTable > thead .sorting:after,
+table.dataTable > thead .sorting_asc:before,
+table.dataTable > thead .sorting_asc:after,
+table.dataTable > thead .sorting_desc:before,
+table.dataTable > thead .sorting_desc:after,
+table.dataTable > thead .sorting_asc_disabled:before,
+table.dataTable > thead .sorting_asc_disabled:after,
+table.dataTable > thead .sorting_desc_disabled:before,
+table.dataTable > thead .sorting_desc_disabled:after {
   position: absolute;
   bottom: 0.9em;
   display: block;
   opacity: 0.3;
 }
-table.dataTable thead .sorting:before,
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_desc:before,
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:before {
+table.dataTable > thead .sorting:before,
+table.dataTable > thead .sorting_asc:before,
+table.dataTable > thead .sorting_desc:before,
+table.dataTable > thead .sorting_asc_disabled:before,
+table.dataTable > thead .sorting_desc_disabled:before {
   right: 1em;
   content: "\2191";
 }
-table.dataTable thead .sorting:after,
-table.dataTable thead .sorting_asc:after,
-table.dataTable thead .sorting_desc:after,
-table.dataTable thead .sorting_asc_disabled:after,
-table.dataTable thead .sorting_desc_disabled:after {
+table.dataTable > thead .sorting:after,
+table.dataTable > thead .sorting_asc:after,
+table.dataTable > thead .sorting_desc:after,
+table.dataTable > thead .sorting_asc_disabled:after,
+table.dataTable > thead .sorting_desc_disabled:after {
   right: 0.5em;
   content: "\2193";
 }
-table.dataTable thead .sorting_asc:before,
-table.dataTable thead .sorting_desc:after {
+table.dataTable > thead .sorting_asc:before,
+table.dataTable > thead .sorting_desc:after {
   opacity: 1;
 }
-table.dataTable thead .sorting_asc_disabled:before,
-table.dataTable thead .sorting_desc_disabled:after {
+table.dataTable > thead .sorting_asc_disabled:before,
+table.dataTable > thead .sorting_desc_disabled:after {
   opacity: 0;
 }
 
@@ -165,7 +162,7 @@ div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
     justify-content: center !important;
   }
 }
-table.dataTable.table-sm > thead > tr > th :not(.sorting_disabled) {
+table.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) {
   padding-right: 20px;
 }
 table.dataTable.table-sm .sorting:before,

Plik diff jest za duży
+ 0 - 0
plugins/datatables-bs4/css/dataTables.bootstrap4.min.css


+ 1 - 1
plugins/datatables-bs4/js/dataTables.bootstrap4.js

@@ -83,7 +83,7 @@ DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, bu
 		for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
 			button = buttons[i];
 
-			if ( $.isArray( button ) ) {
+			if ( Array.isArray( button ) ) {
 				attach( container, button );
 			}
 			else {

+ 4 - 4
plugins/datatables-bs4/js/dataTables.bootstrap4.min.js

@@ -2,7 +2,7 @@
  DataTables Bootstrap 4 integration
  ©2011-2017 SpryMedia Ltd - datatables.net/license
 */
-(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
-renderer:"bootstrap"});b.extend(f.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();
-!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")};l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="&#x2026;";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",
-{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("<a>",{href:"#","aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").trigger("focus")};return f});
+(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return c(d,a,a.document)}:c(jQuery,window,document)})(function(c,a,d,m){var f=c.fn.dataTable;c.extend(!0,f.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
+renderer:"bootstrap"});c.extend(f.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,b,m=function(a){a.preventDefault();
+!c(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")};l=0;for(h=f.length;l<h;l++)if(b=f[l],Array.isArray(b))q(d,b);else{g=e="";switch(b){case "ellipsis":e="&#x2026;";g="disabled";break;case "first":e=k.sFirst;g=b+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=b+(0<j?"":" disabled");break;case "next":e=k.sNext;g=b+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=b+(j<n-1?"":" disabled");break;default:e=b+1,g=j===b?"active":""}e&&(i=c("<li>",
+{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof b?a.sTableId+"_"+b:null}).append(c("<a>",{href:"#","aria-controls":a.sTableId,"aria-label":u[b],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:b},m),p++)}},i;try{i=c(h).find(d.activeElement).data("dt-idx")}catch(v){}q(c(h).empty().html('<ul class="pagination"/>').children("ul"),s);i!==m&&c(h).find("[data-dt-idx="+i+"]").trigger("focus")};return f});

+ 7 - 1
plugins/datatables-buttons/js/buttons.colVis.js

@@ -143,7 +143,13 @@ $.extend( DataTable.ext.buttons, {
 			// `$( column(col).node() ).text()` but the node might not have been
 			// populated when Buttons is constructed.
 			var idx = dt.column( conf.columns ).index();
-			var title = dt.settings()[0].aoColumns[ idx ].sTitle
+			var title = dt.settings()[0].aoColumns[ idx ].sTitle;
+
+			if (! title) {
+				title = dt.column(idx).header().innerHTML;
+			}
+
+			title = title
 				.replace(/\n/g," ")        // remove new lines
 				.replace(/<br\s*\/?>/gi, " ")  // replace line breaks with spaces
 				.replace(/<select(.*?)<\/select>/g, "") // remove select tags, including options text

+ 5 - 5
plugins/datatables-buttons/js/buttons.colVis.min.js

@@ -1,6 +1,6 @@
-(function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(d){return g(d,window,document)}):"object"===typeof exports?module.exports=function(d,f){d||(d=window);if(!f||!f.fn.dataTable)f=require("datatables.net")(d,f).$;f.fn.dataTable.Buttons||require("datatables.net-buttons")(d,f);return g(f,d,d.document)}:g(jQuery,window,document)})(function(g,d,f,h){d=g.fn.dataTable;g.extend(d.ext.buttons,{colvis:function(a,b){return{extend:"collection",
+(function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(e){return g(e,window,document)}):"object"===typeof exports?module.exports=function(e,f){e||(e=window);if(!f||!f.fn.dataTable)f=require("datatables.net")(e,f).$;f.fn.dataTable.Buttons||require("datatables.net-buttons")(e,f);return g(f,e,e.document)}:g(jQuery,window,document)})(function(g,e,f,h){e=g.fn.dataTable;g.extend(e.ext.buttons,{colvis:function(a,b){return{extend:"collection",
 text:function(b){return b.i18n("buttons.colvis","Column visibility")},className:"buttons-colvis",buttons:[{extend:"columnsToggle",columns:b.columns,columnText:b.columnText}]}},columnsToggle:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnToggle",columns:a,columnText:b.columnText}}).toArray()},columnToggle:function(a,b){return{extend:"columnVisibility",columns:b.columns,columnText:b.columnText}},columnsVisibility:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnVisibility",
-columns:a,visibility:b.visibility,columnText:b.columnText}}).toArray()},columnVisibility:{columns:h,text:function(a,b,c){return c._columnText(a,c)},className:"buttons-columnVisibility",action:function(a,b,c,e){a=b.columns(e.columns);b=a.visible();a.visible(e.visibility!==h?e.visibility:!(b.length&&b[0]))},init:function(a,b,c){var e=this;b.attr("data-cv-idx",c.columns);a.on("column-visibility.dt"+c.namespace,function(b,d){!d.bDestroying&&d.nTable==a.settings()[0].nTable&&e.active(a.column(c.columns).visible())}).on("column-reorder.dt"+
-c.namespace,function(){1===a.columns(c.columns).count()&&(e.text(c._columnText(a,c)),e.active(a.column(c.columns).visible()))});this.active(a.column(c.columns).visible())},destroy:function(a,b,c){a.off("column-visibility.dt"+c.namespace).off("column-reorder.dt"+c.namespace)},_columnText:function(a,b){var c=a.column(b.columns).index(),e=a.settings()[0].aoColumns[c].sTitle.replace(/\n/g," ").replace(/<br\s*\/?>/gi," ").replace(/<select(.*?)<\/select>/g,"").replace(/<!\-\-.*?\-\->/g,"").replace(/<.*?>/g,
-"").replace(/^\s+|\s+$/g,"");return b.columnText?b.columnText(a,c,e):e}},colvisRestore:{className:"buttons-colvisRestore",text:function(a){return a.i18n("buttons.colvisRestore","Restore visibility")},init:function(a,b,c){c._visOriginal=a.columns().indexes().map(function(b){return a.column(b).visible()}).toArray()},action:function(a,b,c,d){b.columns().every(function(a){a=b.colReorder&&b.colReorder.transpose?b.colReorder.transpose(a,"toOriginal"):a;this.visible(d._visOriginal[a])})}},colvisGroup:{className:"buttons-colvisGroup",
-action:function(a,b,c,d){b.columns(d.show).visible(!0,!1);b.columns(d.hide).visible(!1,!1);b.columns.adjust()},show:[],hide:[]}});return d.Buttons});
+columns:a,visibility:b.visibility,columnText:b.columnText}}).toArray()},columnVisibility:{columns:h,text:function(a,b,c){return c._columnText(a,c)},className:"buttons-columnVisibility",action:function(a,b,c,d){a=b.columns(d.columns);b=a.visible();a.visible(d.visibility!==h?d.visibility:!(b.length&&b[0]))},init:function(a,b,c){var d=this;b.attr("data-cv-idx",c.columns);a.on("column-visibility.dt"+c.namespace,function(b,e){!e.bDestroying&&e.nTable==a.settings()[0].nTable&&d.active(a.column(c.columns).visible())}).on("column-reorder.dt"+
+c.namespace,function(){1===a.columns(c.columns).count()&&(d.text(c._columnText(a,c)),d.active(a.column(c.columns).visible()))});this.active(a.column(c.columns).visible())},destroy:function(a,b,c){a.off("column-visibility.dt"+c.namespace).off("column-reorder.dt"+c.namespace)},_columnText:function(a,b){var c=a.column(b.columns).index(),d=a.settings()[0].aoColumns[c].sTitle;d||(d=a.column(c).header().innerHTML);d=d.replace(/\n/g," ").replace(/<br\s*\/?>/gi," ").replace(/<select(.*?)<\/select>/g,"").replace(/<!\-\-.*?\-\->/g,
+"").replace(/<.*?>/g,"").replace(/^\s+|\s+$/g,"");return b.columnText?b.columnText(a,c,d):d}},colvisRestore:{className:"buttons-colvisRestore",text:function(a){return a.i18n("buttons.colvisRestore","Restore visibility")},init:function(a,b,c){c._visOriginal=a.columns().indexes().map(function(b){return a.column(b).visible()}).toArray()},action:function(a,b,c,d){b.columns().every(function(a){a=b.colReorder&&b.colReorder.transpose?b.colReorder.transpose(a,"toOriginal"):a;this.visible(d._visOriginal[a])})}},
+colvisGroup:{className:"buttons-colvisGroup",action:function(a,b,c,d){b.columns(d.show).visible(!0,!1);b.columns(d.hide).visible(!1,!1);b.columns.adjust()},show:[],hide:[]}});return e.Buttons});

+ 1 - 1
plugins/datatables-buttons/js/buttons.flash.js

@@ -1235,7 +1235,7 @@ DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, {
 					}
 				}
 
-				row[i] = $.trim( row[i] );
+				row[i] = row[i].trim();
 
 				// Special number formatting options
 				for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {

Plik diff jest za duży
+ 16 - 16
plugins/datatables-buttons/js/buttons.flash.min.js


+ 1 - 1
plugins/datatables-buttons/js/buttons.html5.js

@@ -1063,7 +1063,7 @@ DataTable.ext.buttons.excelHtml5 = {
 				}
 
 				var originalContent = row[i];
-				row[i] = $.trim( row[i] );
+				row[i] = row[i].trim();
 
 				// Special number formatting options
 				for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {

Plik diff jest za duży
+ 10 - 10
plugins/datatables-buttons/js/buttons.html5.min.js


+ 75 - 22
plugins/datatables-buttons/js/dataTables.buttons.js

@@ -1,4 +1,4 @@
-/*! Buttons for DataTables 1.6.2
+/*! Buttons for DataTables 1.6.4
  * ©2016-2020 SpryMedia Ltd - datatables.net/license
  */
 
@@ -99,7 +99,7 @@ var Buttons = function( dt, config )
 	}
 
 	// For easy configuration of buttons an array can be given
-	if ( $.isArray( config ) ) {
+	if ( Array.isArray( config ) ) {
 		config = { buttons: config };
 	}
 
@@ -508,7 +508,7 @@ $.extend( Buttons.prototype, {
 	{
 		var dt = this.s.dt;
 		var buttonCounter = 0;
-		var buttons = ! $.isArray( button ) ?
+		var buttons = ! Array.isArray( button ) ?
 			[ button ] :
 			button;
 
@@ -521,7 +521,7 @@ $.extend( Buttons.prototype, {
 
 			// If the configuration is an array, then expand the buttons at this
 			// point
-			if ( $.isArray( conf ) ) {
+			if ( Array.isArray( conf ) ) {
 				this._expandButton( attachTo, conf, inCollection, attachPoint );
 				continue;
 			}
@@ -854,7 +854,7 @@ $.extend( Buttons.prototype, {
 			// Loop until we have resolved to a button configuration, or an
 			// array of button configurations (which will be iterated
 			// separately)
-			while ( ! $.isPlainObject(base) && ! $.isArray(base) ) {
+			while ( ! $.isPlainObject(base) && ! Array.isArray(base) ) {
 				if ( base === undefined ) {
 					return;
 				}
@@ -881,7 +881,7 @@ $.extend( Buttons.prototype, {
 				}
 			}
 
-			return $.isArray( base ) ?
+			return Array.isArray( base ) ?
 				base :
 				$.extend( {}, base );
 		};
@@ -896,7 +896,7 @@ $.extend( Buttons.prototype, {
 			}
 
 			var objArray = toConfObject( _dtButtons[ conf.extend ] );
-			if ( $.isArray( objArray ) ) {
+			if ( Array.isArray( objArray ) ) {
 				return objArray;
 			}
 			else if ( ! objArray ) {
@@ -1029,7 +1029,7 @@ $.extend( Buttons.prototype, {
 			display.prepend('<div class="dt-button-collection-title">'+options.collectionTitle+'</div>');
 		}
 
-		_fadeIn( display.insertAfter( hostNode ) );
+		_fadeIn( display.insertAfter( hostNode ), options.fade );
 
 		var tableContainer = $( hostButton.table().container() );
 		var position = display.css( 'position' );
@@ -1039,7 +1039,16 @@ $.extend( Buttons.prototype, {
 			display.css('width', tableContainer.width());
 		}
 
-		if ( position === 'absolute' ) {
+		// Align the popover relative to the DataTables container
+		// Useful for wide popovers such as SearchPanes
+		if (
+			position === 'absolute' &&
+			(
+				display.hasClass( options.rightAlignClassName ) ||
+				display.hasClass( options.leftAlignClassName ) ||
+				options.align === 'dt-container'
+			)
+		) {
 
 			var hostPosition = hostNode.position();
 
@@ -1050,7 +1059,6 @@ $.extend( Buttons.prototype, {
 
 			// calculate overflow when positioned beneath
 			var collectionHeight = display.outerHeight();
-			var collectionWidth = display.outerWidth();
 			var tableBottom = tableContainer.offset().top + tableContainer.height();
 			var listBottom = hostPosition.top + hostNode.outerHeight() + collectionHeight;
 			var bottomOverflow = listBottom - tableBottom;
@@ -1083,12 +1091,12 @@ $.extend( Buttons.prototype, {
 			
 			// You've then got all the numbers you need to do some calculations and if statements,
 			//  so we can do some quick JS maths and apply it only once
-			// If it has the right align class OR the buttons are right aligned,
+			// If it has the right align class OR the buttons are right aligned OR the button container is floated right,
 			//  then calculate left position for the popover to align the popover to the right hand
 			//  side of the button - check to see if the left of the popover is inside the table container.
 			// If not, move the popover so it is, but not more than it means that the popover is to the right of the table container
 			var popoverShuffle = 0;
-			if ( display.hasClass( options.rightAlignClassName ) || options.align === 'button-right' ) {
+			if ( display.hasClass( options.rightAlignClassName )) {
 				popoverShuffle = buttonsRight - popoverRight;
 				if(tableLeft > (popoverLeft + popoverShuffle)){
 					var leftGap = tableLeft - (popoverLeft + popoverShuffle);
@@ -1124,6 +1132,50 @@ $.extend( Buttons.prototype, {
 			display.css('left', display.position().left + popoverShuffle);
 			
 		}
+		else if (position === 'absolute') {
+			// Align relative to the host button
+			var hostPosition = hostNode.position();
+
+			display.css( {
+				top: hostPosition.top + hostNode.outerHeight(),
+				left: hostPosition.left
+			} );
+
+			// calculate overflow when positioned beneath
+			var collectionHeight = display.outerHeight();
+			var top = hostNode.offset().top
+			var popoverShuffle = 0;
+
+			// Get the size of the host buttons (left and width - and ...)
+			var buttonsLeft = hostNode.offset().left;
+			var buttonsWidth = hostNode.outerWidth()
+			var buttonsRight = buttonsLeft + buttonsWidth;
+
+			// Get the size of the popover (left and width - and ...)
+			var popoverLeft = display.offset().left;
+			var popoverWidth = content.width();
+			var popoverRight = popoverLeft + popoverWidth;
+
+			var moveTop = hostPosition.top - collectionHeight - 5;
+			var tableBottom = tableContainer.offset().top + tableContainer.height();
+			var listBottom = hostPosition.top + hostNode.outerHeight() + collectionHeight;
+			var bottomOverflow = listBottom - tableBottom;
+
+			// calculate overflow when positioned above
+			var listTop = hostPosition.top - collectionHeight;
+			var tableTop = tableContainer.offset().top;
+			var topOverflow = tableTop - listTop;
+
+			if ( (bottomOverflow > topOverflow || options.dropup) && -moveTop < tableTop ) {
+				display.css( 'top', moveTop);
+			}
+
+			popoverShuffle = options.align === 'button-right'
+				? buttonsRight - popoverRight
+				: buttonsLeft - popoverLeft;
+
+			display.css('left', display.position().left + popoverShuffle);
+		}
 		else {
 			// Fix position - centre on screen
 			var top = display.height() / 2;
@@ -1148,8 +1200,9 @@ $.extend( Buttons.prototype, {
 			.on( 'click.dtb-collection', function (e) {
 				// andSelf is deprecated in jQ1.8, but we want 1.7 compat
 				var back = $.fn.addBack ? 'addBack' : 'andSelf';
+				var parent = $(e.target).parent()[0];
 
-				if ( ! $(e.target).parents()[back]().filter( content ).length ) {
+				if (( ! $(e.target).parents()[back]().filter( content ).length  && !$(parent).hasClass('dt-buttons')) || $(e.target).hasClass('dt-button-background')) {
 					close();
 				}
 			} )
@@ -1243,7 +1296,7 @@ Buttons.instanceSelector = function ( group, buttons )
 
 	// Flatten the group selector into an array of single options
 	var process = function ( input ) {
-		if ( $.isArray( input ) ) {
+		if ( Array.isArray( input ) ) {
 			for ( var i=0, ien=input.length ; i<ien ; i++ ) {
 				process( input[i] );
 			}
@@ -1257,7 +1310,7 @@ Buttons.instanceSelector = function ( group, buttons )
 			}
 			else {
 				// String selector individual name
-				var idx = $.inArray( $.trim(input), names );
+				var idx = $.inArray( input.trim(), names );
 
 				if ( idx !== -1 ) {
 					ret.push( buttons[ idx ].inst );
@@ -1322,7 +1375,7 @@ Buttons.buttonSelector = function ( insts, selector )
 			return v.node;
 		} );
 
-		if ( $.isArray( selector ) || selector instanceof $ ) {
+		if ( Array.isArray( selector ) || selector instanceof $ ) {
 			for ( i=0, ien=selector.length ; i<ien ; i++ ) {
 				run( selector[i], inst );
 			}
@@ -1351,7 +1404,7 @@ Buttons.buttonSelector = function ( insts, selector )
 				var a = selector.split(',');
 
 				for ( i=0, ien=a.length ; i<ien ; i++ ) {
-					run( $.trim(a[i]), inst );
+					run( a[i].trim(), inst );
 				}
 			}
 			else if ( selector.match( /^\d+(\-\d+)*$/ ) ) {
@@ -1452,7 +1505,7 @@ Buttons.defaults = {
  * @type {string}
  * @static
  */
-Buttons.version = '1.6.2';
+Buttons.version = '1.6.4';
 
 
 $.extend( _dtButtons, {
@@ -1516,8 +1569,8 @@ $.extend( _dtButtons, {
 	},
 	pageLength: function ( dt ) {
 		var lengthMenu = dt.settings()[0].aLengthMenu;
-		var vals = $.isArray( lengthMenu[0] ) ? lengthMenu[0] : lengthMenu;
-		var lang = $.isArray( lengthMenu[0] ) ? lengthMenu[1] : lengthMenu;
+		var vals = Array.isArray( lengthMenu[0] ) ? lengthMenu[0] : lengthMenu;
+		var lang = Array.isArray( lengthMenu[0] ) ? lengthMenu[1] : lengthMenu;
 		var text = function ( dt ) {
 			return dt.i18n( 'buttons.pageLength', {
 				"-1": 'Show all rows',
@@ -1856,7 +1909,7 @@ var _filename = function ( config )
 	}
 
 	if ( filename.indexOf( '*' ) !== -1 ) {
-		filename = $.trim( filename.replace( '*', $('head > title').text() ) );
+		filename = filename.replace( '*', $('head > title').text() ).trim();
 	}
 
 	// Strip characters which the OS will object to
@@ -1971,7 +2024,7 @@ var _exportData = function ( dt, inOpts )
 		str = str.replace( /<!\-\-.*?\-\->/g, '' );
 
 		if ( config.stripHtml ) {
-			str = str.replace( /<[^>]*>/g, '' );
+			str = str.replace( /<([^>'"]*('[^']*'|"[^"]*")?)*>/g, '' );
 		}
 
 		if ( config.trim ) {

+ 32 - 31
plugins/datatables-buttons/js/dataTables.buttons.min.js

@@ -1,43 +1,44 @@
 /*!
- Buttons for DataTables 1.6.2
+ Buttons for DataTables 1.6.4
  ©2016-2020 SpryMedia Ltd - datatables.net/license
 */
-(function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(q){return e(q,window,document)}):"object"===typeof exports?module.exports=function(q,r){q||(q=window);if(!r||!r.fn.dataTable)r=require("datatables.net")(q,r).$;return e(r,q,q.document)}:e(jQuery,window,document)})(function(e,q,r,m){function t(a,b,c){e.fn.animate?a.stop().fadeIn(b,c):(a.css("display","block"),c&&c.call(a))}function u(a,b,c){e.fn.animate?a.stop().fadeOut(b,c):(a.css("display","none"),c&&
-c.call(a))}function w(a,b){var c=new i.Api(a),d=b?b:c.init().buttons||i.defaults.buttons;return(new l(c,d)).container()}var i=e.fn.dataTable,z=0,A=0,o=i.ext.buttons,l=function(a,b){if(!(this instanceof l))return function(b){return(new l(b,a)).container()};"undefined"===typeof b&&(b={});!0===b&&(b={});e.isArray(b)&&(b={buttons:b});this.c=e.extend(!0,{},l.defaults,b);b.buttons&&(this.c.buttons=b.buttons);this.s={dt:new i.Api(a),buttons:[],listenKeys:"",namespace:"dtb"+z++};this.dom={container:e("<"+
-this.c.dom.container.tag+"/>").addClass(this.c.dom.container.className)};this._constructor()};e.extend(l.prototype,{action:function(a,b){var c=this._nodeToButton(a);if(b===m)return c.conf.action;c.conf.action=b;return this},active:function(a,b){var c=this._nodeToButton(a),d=this.c.dom.button.active,c=e(c.node);if(b===m)return c.hasClass(d);c.toggleClass(d,b===m?!0:b);return this},add:function(a,b){var c=this.s.buttons;if("string"===typeof b){for(var d=b.split("-"),e=this.s,c=0,f=d.length-1;c<f;c++)e=
+(function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(q){return e(q,window,document)}):"object"===typeof exports?module.exports=function(q,r){q||(q=window);if(!r||!r.fn.dataTable)r=require("datatables.net")(q,r).$;return e(r,q,q.document)}:e(jQuery,window,document)})(function(e,q,r,m){function w(a,b,c){e.fn.animate?a.stop().fadeIn(b,c):(a.css("display","block"),c&&c.call(a))}function x(a,b,c){e.fn.animate?a.stop().fadeOut(b,c):(a.css("display","none"),c&&
+c.call(a))}function z(a,b){var c=new i.Api(a),d=b?b:c.init().buttons||i.defaults.buttons;return(new p(c,d)).container()}var i=e.fn.dataTable,C=0,D=0,l=i.ext.buttons,p=function(a,b){if(!(this instanceof p))return function(b){return(new p(b,a)).container()};"undefined"===typeof b&&(b={});!0===b&&(b={});Array.isArray(b)&&(b={buttons:b});this.c=e.extend(!0,{},p.defaults,b);b.buttons&&(this.c.buttons=b.buttons);this.s={dt:new i.Api(a),buttons:[],listenKeys:"",namespace:"dtb"+C++};this.dom={container:e("<"+
+this.c.dom.container.tag+"/>").addClass(this.c.dom.container.className)};this._constructor()};e.extend(p.prototype,{action:function(a,b){var c=this._nodeToButton(a);if(b===m)return c.conf.action;c.conf.action=b;return this},active:function(a,b){var c=this._nodeToButton(a),d=this.c.dom.button.active,c=e(c.node);if(b===m)return c.hasClass(d);c.toggleClass(d,b===m?!0:b);return this},add:function(a,b){var c=this.s.buttons;if("string"===typeof b){for(var d=b.split("-"),e=this.s,c=0,f=d.length-1;c<f;c++)e=
 e.buttons[1*d[c]];c=e.buttons;b=1*d[d.length-1]}this._expandButton(c,a,e!==m,b);this._draw();return this},container:function(){return this.dom.container},disable:function(a){a=this._nodeToButton(a);e(a.node).addClass(this.c.dom.button.disabled).attr("disabled",!0);return this},destroy:function(){e("body").off("keyup."+this.s.namespace);var a=this.s.buttons.slice(),b,c;b=0;for(c=a.length;b<c;b++)this.remove(a[b].node);this.dom.container.remove();a=this.s.dt.settings()[0];b=0;for(c=a.length;b<c;b++)if(a.inst===
 this){a.splice(b,1);break}return this},enable:function(a,b){if(!1===b)return this.disable(a);var c=this._nodeToButton(a);e(c.node).removeClass(this.c.dom.button.disabled).removeAttr("disabled");return this},name:function(){return this.c.name},node:function(a){if(!a)return this.dom.container;a=this._nodeToButton(a);return e(a.node)},processing:function(a,b){var c=this.s.dt,d=this._nodeToButton(a);if(b===m)return e(d.node).hasClass("processing");e(d.node).toggleClass("processing",b);e(c.table().node()).triggerHandler("buttons-processing.dt",
 [b,c.button(a),c,e(a),d.conf]);return this},remove:function(a){var b=this._nodeToButton(a),c=this._nodeToHost(a),d=this.s.dt;if(b.buttons.length)for(var g=b.buttons.length-1;0<=g;g--)this.remove(b.buttons[g].node);b.conf.destroy&&b.conf.destroy.call(d.button(a),d,e(a),b.conf);this._removeKey(b.conf);e(b.node).remove();a=e.inArray(b,c);c.splice(a,1);return this},text:function(a,b){var c=this._nodeToButton(a),d=this.c.dom.collection.buttonLiner,d=c.inCollection&&d&&d.tag?d.tag:this.c.dom.buttonLiner.tag,
 g=this.s.dt,f=e(c.node),h=function(a){return"function"===typeof a?a(g,f,c.conf):a};if(b===m)return h(c.conf.text);c.conf.text=b;d?f.children(d).html(h(b)):f.html(h(b));return this},_constructor:function(){var a=this,b=this.s.dt,c=b.settings()[0],d=this.c.buttons;c._buttons||(c._buttons=[]);c._buttons.push({inst:this,name:this.c.name});for(var g=0,f=d.length;g<f;g++)this.add(d[g]);b.on("destroy",function(b,d){d===c&&a.destroy()});e("body").on("keyup."+this.s.namespace,function(b){if(!r.activeElement||
 r.activeElement===r.body){var c=String.fromCharCode(b.keyCode).toLowerCase();a.s.listenKeys.toLowerCase().indexOf(c)!==-1&&a._keypress(c,b)}})},_addKey:function(a){a.key&&(this.s.listenKeys+=e.isPlainObject(a.key)?a.key.key:a.key)},_draw:function(a,b){a||(a=this.dom.container,b=this.s.buttons);a.children().detach();for(var c=0,d=b.length;c<d;c++)a.append(b[c].inserter),a.append(" "),b[c].buttons&&b[c].buttons.length&&this._draw(b[c].collection,b[c].buttons)},_expandButton:function(a,b,c,d){for(var g=
-this.s.dt,f=0,b=!e.isArray(b)?[b]:b,h=0,k=b.length;h<k;h++){var p=this._resolveExtends(b[h]);if(p)if(e.isArray(p))this._expandButton(a,p,c,d);else{var j=this._buildButton(p,c);j&&(d!==m&&null!==d?(a.splice(d,0,j),d++):a.push(j),j.conf.buttons&&(j.collection=e("<"+this.c.dom.collection.tag+"/>"),j.conf._collection=j.collection,this._expandButton(j.buttons,j.conf.buttons,!0,d)),p.init&&p.init.call(g.button(j.node),g,e(j.node),p),f++)}}},_buildButton:function(a,b){var c=this.c.dom.button,d=this.c.dom.buttonLiner,
-g=this.c.dom.collection,f=this.s.dt,h=function(b){return"function"===typeof b?b(f,j,a):b};b&&g.button&&(c=g.button);b&&g.buttonLiner&&(d=g.buttonLiner);if(a.available&&!a.available(f,a))return!1;var k=function(a,b,c,d){d.action.call(b.button(c),a,b,c,d);e(b.table().node()).triggerHandler("buttons-action.dt",[b.button(c),b,c,d])},g=a.tag||c.tag,p=a.clickBlurs===m?!0:a.clickBlurs,j=e("<"+g+"/>").addClass(c.className).attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",this.s.dt.table().node().id).on("click.dtb",
-function(b){b.preventDefault();!j.hasClass(c.disabled)&&a.action&&k(b,f,j,a);p&&j.trigger("blur")}).on("keyup.dtb",function(b){b.keyCode===13&&!j.hasClass(c.disabled)&&a.action&&k(b,f,j,a)});"a"===g.toLowerCase()&&j.attr("href","#");"button"===g.toLowerCase()&&j.attr("type","button");d.tag?(g=e("<"+d.tag+"/>").html(h(a.text)).addClass(d.className),"a"===d.tag.toLowerCase()&&g.attr("href","#"),j.append(g)):j.html(h(a.text));!1===a.enabled&&j.addClass(c.disabled);a.className&&j.addClass(a.className);
-a.titleAttr&&j.attr("title",h(a.titleAttr));a.attr&&j.attr(a.attr);a.namespace||(a.namespace=".dt-button-"+A++);d=(d=this.c.dom.buttonContainer)&&d.tag?e("<"+d.tag+"/>").addClass(d.className).append(j):j;this._addKey(a);this.c.buttonCreated&&(d=this.c.buttonCreated(a,d));return{conf:a,node:j.get(0),inserter:d,buttons:[],inCollection:b,collection:null}},_nodeToButton:function(a,b){b||(b=this.s.buttons);for(var c=0,d=b.length;c<d;c++){if(b[c].node===a)return b[c];if(b[c].buttons.length){var e=this._nodeToButton(a,
+this.s.dt,f=0,b=!Array.isArray(b)?[b]:b,h=0,k=b.length;h<k;h++){var n=this._resolveExtends(b[h]);if(n)if(Array.isArray(n))this._expandButton(a,n,c,d);else{var j=this._buildButton(n,c);j&&(d!==m&&null!==d?(a.splice(d,0,j),d++):a.push(j),j.conf.buttons&&(j.collection=e("<"+this.c.dom.collection.tag+"/>"),j.conf._collection=j.collection,this._expandButton(j.buttons,j.conf.buttons,!0,d)),n.init&&n.init.call(g.button(j.node),g,e(j.node),n),f++)}}},_buildButton:function(a,b){var c=this.c.dom.button,d=this.c.dom.buttonLiner,
+g=this.c.dom.collection,f=this.s.dt,h=function(b){return"function"===typeof b?b(f,j,a):b};b&&g.button&&(c=g.button);b&&g.buttonLiner&&(d=g.buttonLiner);if(a.available&&!a.available(f,a))return!1;var k=function(a,b,c,d){d.action.call(b.button(c),a,b,c,d);e(b.table().node()).triggerHandler("buttons-action.dt",[b.button(c),b,c,d])},g=a.tag||c.tag,n=a.clickBlurs===m?!0:a.clickBlurs,j=e("<"+g+"/>").addClass(c.className).attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",this.s.dt.table().node().id).on("click.dtb",
+function(b){b.preventDefault();!j.hasClass(c.disabled)&&a.action&&k(b,f,j,a);n&&j.trigger("blur")}).on("keyup.dtb",function(b){b.keyCode===13&&!j.hasClass(c.disabled)&&a.action&&k(b,f,j,a)});"a"===g.toLowerCase()&&j.attr("href","#");"button"===g.toLowerCase()&&j.attr("type","button");d.tag?(g=e("<"+d.tag+"/>").html(h(a.text)).addClass(d.className),"a"===d.tag.toLowerCase()&&g.attr("href","#"),j.append(g)):j.html(h(a.text));!1===a.enabled&&j.addClass(c.disabled);a.className&&j.addClass(a.className);
+a.titleAttr&&j.attr("title",h(a.titleAttr));a.attr&&j.attr(a.attr);a.namespace||(a.namespace=".dt-button-"+D++);d=(d=this.c.dom.buttonContainer)&&d.tag?e("<"+d.tag+"/>").addClass(d.className).append(j):j;this._addKey(a);this.c.buttonCreated&&(d=this.c.buttonCreated(a,d));return{conf:a,node:j.get(0),inserter:d,buttons:[],inCollection:b,collection:null}},_nodeToButton:function(a,b){b||(b=this.s.buttons);for(var c=0,d=b.length;c<d;c++){if(b[c].node===a)return b[c];if(b[c].buttons.length){var e=this._nodeToButton(a,
 b[c].buttons);if(e)return e}}},_nodeToHost:function(a,b){b||(b=this.s.buttons);for(var c=0,d=b.length;c<d;c++){if(b[c].node===a)return b;if(b[c].buttons.length){var e=this._nodeToHost(a,b[c].buttons);if(e)return e}}},_keypress:function(a,b){if(!b._buttonsHandled){var c=function(d){for(var g=0,f=d.length;g<f;g++){var h=d[g].conf,k=d[g].node;if(h.key)if(h.key===a)b._buttonsHandled=!0,e(k).click();else if(e.isPlainObject(h.key)&&h.key.key===a&&(!h.key.shiftKey||b.shiftKey))if(!h.key.altKey||b.altKey)if(!h.key.ctrlKey||
-b.ctrlKey)if(!h.key.metaKey||b.metaKey)b._buttonsHandled=!0,e(k).click();d[g].buttons.length&&c(d[g].buttons)}};c(this.s.buttons)}},_removeKey:function(a){if(a.key){var b=e.isPlainObject(a.key)?a.key.key:a.key,a=this.s.listenKeys.split(""),b=e.inArray(b,a);a.splice(b,1);this.s.listenKeys=a.join("")}},_resolveExtends:function(a){for(var b=this.s.dt,c,d,g=function(c){for(var d=0;!e.isPlainObject(c)&&!e.isArray(c);){if(c===m)return;if("function"===typeof c){if(c=c(b,a),!c)return!1}else if("string"===
-typeof c){if(!o[c])throw"Unknown button type: "+c;c=o[c]}d++;if(30<d)throw"Buttons: Too many iterations";}return e.isArray(c)?c:e.extend({},c)},a=g(a);a&&a.extend;){if(!o[a.extend])throw"Cannot extend unknown button type: "+a.extend;var f=g(o[a.extend]);if(e.isArray(f))return f;if(!f)return!1;c=f.className;a=e.extend({},f,a);c&&a.className!==c&&(a.className=c+" "+a.className);var h=a.postfixButtons;if(h){a.buttons||(a.buttons=[]);c=0;for(d=h.length;c<d;c++)a.buttons.push(h[c]);a.postfixButtons=null}if(h=
-a.prefixButtons){a.buttons||(a.buttons=[]);c=0;for(d=h.length;c<d;c++)a.buttons.splice(c,0,h[c]);a.prefixButtons=null}a.extend=f.extend}return a},_popover:function(a,b,c){var d=this.c,g=e.extend({align:"button-left",autoClose:!1,background:!0,backgroundClassName:"dt-button-background",contentClassName:d.dom.collection.className,collectionLayout:"",collectionTitle:"",dropup:!1,fade:400,rightAlignClassName:"dt-button-right",tag:d.dom.collection.tag},c),f=b.node(),h=function(){u(e(".dt-button-collection"),
-g.fade,function(){e(this).detach()});e(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes()).attr("aria-expanded","false");e("div.dt-button-background").off("click.dtb-collection");l.background(!1,g.backgroundClassName,g.fade,f);e("body").off(".dtb-collection");b.off("buttons-action.b-internal")};!1===a&&h();c=e(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes());c.length&&(f=c.eq(0),h());c=e("<div/>").addClass("dt-button-collection").addClass(g.collectionLayout).css("display",
-"none");a=e(a).addClass(g.contentClassName).attr("role","menu").appendTo(c);f.attr("aria-expanded","true");f.parents("body")[0]!==r.body&&(f=r.body.lastChild);g.collectionTitle&&c.prepend('<div class="dt-button-collection-title">'+g.collectionTitle+"</div>");t(c.insertAfter(f));var k=e(b.table().container()),d=c.css("position");"dt-container"===g.align&&(f=f.parent(),c.css("width",k.width()));if("absolute"===d){d=f.position();c.css({top:d.top+f.outerHeight(),left:d.left});var p=c.outerHeight();c.outerWidth();
-var j=k.offset().top+k.height(),j=d.top+f.outerHeight()+p-j,n=d.top-p,i=k.offset().top,d=d.top-p-5;(j>i-n||g.dropup)&&-d<i&&c.css("top",d);d=k.offset().left;k=k.width();k=d+k;p=c.offset().left;j=c.width();j=p+j;n=f.offset().left;i=f.outerWidth();i=n+i;n=0;c.hasClass(g.rightAlignClassName)||"button-right"===g.align?(n=i-j,d>p+n&&(d-=p+n,k-=j+n,n=d>k?n+k:n+d)):(n=d-p,k<j+n&&(d-=p+n,k-=j+n,n=d>k?n+k:n+d));c.css("left",c.position().left+n)}else d=c.height()/2,d>e(q).height()/2&&(d=e(q).height()/2),c.css("marginTop",
--1*d);g.background&&l.background(!0,g.backgroundClassName,g.fade,f);e("div.dt-button-background").on("click.dtb-collection",function(){});e("body").on("click.dtb-collection",function(b){var c=e.fn.addBack?"addBack":"andSelf";e(b.target).parents()[c]().filter(a).length||h()}).on("keyup.dtb-collection",function(a){a.keyCode===27&&h()});g.autoClose&&setTimeout(function(){b.on("buttons-action.b-internal",function(a,b,c,d){d[0]!==f[0]&&h()})},0);e(c).trigger("buttons-popover.dt")}});l.background=function(a,
-b,c,d){c===m&&(c=400);d||(d=r.body);a?t(e("<div/>").addClass(b).css("display","none").insertAfter(d),c):u(e("div."+b),c,function(){e(this).removeClass(b).remove()})};l.instanceSelector=function(a,b){if(a===m||null===a)return e.map(b,function(a){return a.inst});var c=[],d=e.map(b,function(a){return a.name}),g=function(a){if(e.isArray(a))for(var h=0,k=a.length;h<k;h++)g(a[h]);else"string"===typeof a?-1!==a.indexOf(",")?g(a.split(",")):(a=e.inArray(e.trim(a),d),-1!==a&&c.push(b[a].inst)):"number"===
-typeof a&&c.push(b[a].inst)};g(a);return c};l.buttonSelector=function(a,b){for(var c=[],d=function(a,b,c){for(var e,g,f=0,h=b.length;f<h;f++)if(e=b[f])g=c!==m?c+f:f+"",a.push({node:e.node,name:e.conf.name,idx:g}),e.buttons&&d(a,e.buttons,g+"-")},g=function(a,b){var f,h,i=[];d(i,b.s.buttons);f=e.map(i,function(a){return a.node});if(e.isArray(a)||a instanceof e){f=0;for(h=a.length;f<h;f++)g(a[f],b)}else if(null===a||a===m||"*"===a){f=0;for(h=i.length;f<h;f++)c.push({inst:b,node:i[f].node})}else if("number"===
-typeof a)c.push({inst:b,node:b.s.buttons[a].node});else if("string"===typeof a)if(-1!==a.indexOf(",")){i=a.split(",");f=0;for(h=i.length;f<h;f++)g(e.trim(i[f]),b)}else if(a.match(/^\d+(\-\d+)*$/))f=e.map(i,function(a){return a.idx}),c.push({inst:b,node:i[e.inArray(a,f)].node});else if(-1!==a.indexOf(":name")){var l=a.replace(":name","");f=0;for(h=i.length;f<h;f++)i[f].name===l&&c.push({inst:b,node:i[f].node})}else e(f).filter(a).each(function(){c.push({inst:b,node:this})});else"object"===typeof a&&
-a.nodeName&&(i=e.inArray(a,f),-1!==i&&c.push({inst:b,node:f[i]}))},f=0,h=a.length;f<h;f++)g(b,a[f]);return c};l.defaults={buttons:["copy","excel","csv","pdf","print"],name:"main",tabIndex:0,dom:{container:{tag:"div",className:"dt-buttons"},collection:{tag:"div",className:""},button:{tag:"ActiveXObject"in q?"a":"button",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"span",className:""}}};l.version="1.6.2";e.extend(o,{collection:{text:function(a){return a.i18n("buttons.collection",
-"Collection")},className:"buttons-collection",init:function(a,b){b.attr("aria-expanded",!1)},action:function(a,b,c,d){a.stopPropagation();d._collection.parents("body").length?this.popover(!1,d):this.popover(d._collection,d)},attr:{"aria-haspopup":!0}},copy:function(a,b){if(o.copyHtml5)return"copyHtml5";if(o.copyFlash&&o.copyFlash.available(a,b))return"copyFlash"},csv:function(a,b){if(o.csvHtml5&&o.csvHtml5.available(a,b))return"csvHtml5";if(o.csvFlash&&o.csvFlash.available(a,b))return"csvFlash"},
-excel:function(a,b){if(o.excelHtml5&&o.excelHtml5.available(a,b))return"excelHtml5";if(o.excelFlash&&o.excelFlash.available(a,b))return"excelFlash"},pdf:function(a,b){if(o.pdfHtml5&&o.pdfHtml5.available(a,b))return"pdfHtml5";if(o.pdfFlash&&o.pdfFlash.available(a,b))return"pdfFlash"},pageLength:function(a){var a=a.settings()[0].aLengthMenu,b=e.isArray(a[0])?a[0]:a,c=e.isArray(a[0])?a[1]:a;return{extend:"collection",text:function(a){return a.i18n("buttons.pageLength",{"-1":"Show all rows",_:"Show %d rows"},
+b.ctrlKey)if(!h.key.metaKey||b.metaKey)b._buttonsHandled=!0,e(k).click();d[g].buttons.length&&c(d[g].buttons)}};c(this.s.buttons)}},_removeKey:function(a){if(a.key){var b=e.isPlainObject(a.key)?a.key.key:a.key,a=this.s.listenKeys.split(""),b=e.inArray(b,a);a.splice(b,1);this.s.listenKeys=a.join("")}},_resolveExtends:function(a){for(var b=this.s.dt,c,d,g=function(c){for(var d=0;!e.isPlainObject(c)&&!Array.isArray(c);){if(c===m)return;if("function"===typeof c){if(c=c(b,a),!c)return!1}else if("string"===
+typeof c){if(!l[c])throw"Unknown button type: "+c;c=l[c]}d++;if(30<d)throw"Buttons: Too many iterations";}return Array.isArray(c)?c:e.extend({},c)},a=g(a);a&&a.extend;){if(!l[a.extend])throw"Cannot extend unknown button type: "+a.extend;var f=g(l[a.extend]);if(Array.isArray(f))return f;if(!f)return!1;c=f.className;a=e.extend({},f,a);c&&a.className!==c&&(a.className=c+" "+a.className);var h=a.postfixButtons;if(h){a.buttons||(a.buttons=[]);c=0;for(d=h.length;c<d;c++)a.buttons.push(h[c]);a.postfixButtons=
+null}if(h=a.prefixButtons){a.buttons||(a.buttons=[]);c=0;for(d=h.length;c<d;c++)a.buttons.splice(c,0,h[c]);a.prefixButtons=null}a.extend=f.extend}return a},_popover:function(a,b,c){var d=this.c,g=e.extend({align:"button-left",autoClose:!1,background:!0,backgroundClassName:"dt-button-background",contentClassName:d.dom.collection.className,collectionLayout:"",collectionTitle:"",dropup:!1,fade:400,rightAlignClassName:"dt-button-right",tag:d.dom.collection.tag},c),f=b.node(),h=function(){x(e(".dt-button-collection"),
+g.fade,function(){e(this).detach()});e(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes()).attr("aria-expanded","false");e("div.dt-button-background").off("click.dtb-collection");p.background(!1,g.backgroundClassName,g.fade,f);e("body").off(".dtb-collection");b.off("buttons-action.b-internal")};!1===a&&h();c=e(b.buttons('[aria-haspopup="true"][aria-expanded="true"]').nodes());c.length&&(f=c.eq(0),h());c=e("<div/>").addClass("dt-button-collection").addClass(g.collectionLayout).css("display",
+"none");a=e(a).addClass(g.contentClassName).attr("role","menu").appendTo(c);f.attr("aria-expanded","true");f.parents("body")[0]!==r.body&&(f=r.body.lastChild);g.collectionTitle&&c.prepend('<div class="dt-button-collection-title">'+g.collectionTitle+"</div>");w(c.insertAfter(f),g.fade);var d=e(b.table().container()),k=c.css("position");"dt-container"===g.align&&(f=f.parent(),c.css("width",d.width()));if("absolute"===k&&(c.hasClass(g.rightAlignClassName)||c.hasClass(g.leftAlignClassName)||"dt-container"===
+g.align)){var n=f.position();c.css({top:n.top+f.outerHeight(),left:n.left});var j=c.outerHeight(),i=d.offset().top+d.height(),t=n.top+f.outerHeight()+j,i=t-i,t=n.top-j,m=d.offset().top,l=n.top-j-5;(i>m-t||g.dropup)&&-l<m&&c.css("top",l);var n=d.offset().left,d=d.width(),d=n+d,k=c.offset().left,s=c.width(),s=k+s,o=f.offset().left,u=f.outerWidth(),u=o+u,o=0;c.hasClass(g.rightAlignClassName)?(o=u-s,n>k+o&&(k=n-(k+o),d-=s+o,o=k>d?o+d:o+k)):(o=n-k,d<s+o&&(k=n-(k+o),d-=s+o,o=k>d?o+d:o+k));c.css("left",
+c.position().left+o)}else"absolute"===k?(n=f.position(),c.css({top:n.top+f.outerHeight(),left:n.left}),j=c.outerHeight(),k=f.offset().top,o=0,o=f.offset().left,u=f.outerWidth(),u=o+u,k=c.offset().left,s=a.width(),s=k+s,l=n.top-j-5,i=d.offset().top+d.height(),t=n.top+f.outerHeight()+j,i=t-i,t=n.top-j,m=d.offset().top,(i>m-t||g.dropup)&&-l<m&&c.css("top",l),o="button-right"===g.align?u-s:o-k,c.css("left",c.position().left+o)):(k=c.height()/2,k>e(q).height()/2&&(k=e(q).height()/2),c.css("marginTop",
+-1*k));g.background&&p.background(!0,g.backgroundClassName,g.fade,f);e("div.dt-button-background").on("click.dtb-collection",function(){});e("body").on("click.dtb-collection",function(b){var c=e.fn.addBack?"addBack":"andSelf",d=e(b.target).parent()[0];(!e(b.target).parents()[c]().filter(a).length&&!e(d).hasClass("dt-buttons")||e(b.target).hasClass("dt-button-background"))&&h()}).on("keyup.dtb-collection",function(a){a.keyCode===27&&h()});g.autoClose&&setTimeout(function(){b.on("buttons-action.b-internal",
+function(a,b,c,d){d[0]!==f[0]&&h()})},0);e(c).trigger("buttons-popover.dt")}});p.background=function(a,b,c,d){c===m&&(c=400);d||(d=r.body);a?w(e("<div/>").addClass(b).css("display","none").insertAfter(d),c):x(e("div."+b),c,function(){e(this).removeClass(b).remove()})};p.instanceSelector=function(a,b){if(a===m||null===a)return e.map(b,function(a){return a.inst});var c=[],d=e.map(b,function(a){return a.name}),g=function(a){if(Array.isArray(a))for(var h=0,k=a.length;h<k;h++)g(a[h]);else"string"===typeof a?
+-1!==a.indexOf(",")?g(a.split(",")):(a=e.inArray(a.trim(),d),-1!==a&&c.push(b[a].inst)):"number"===typeof a&&c.push(b[a].inst)};g(a);return c};p.buttonSelector=function(a,b){for(var c=[],d=function(a,b,c){for(var e,g,f=0,h=b.length;f<h;f++)if(e=b[f])g=c!==m?c+f:f+"",a.push({node:e.node,name:e.conf.name,idx:g}),e.buttons&&d(a,e.buttons,g+"-")},g=function(a,b){var f,h,i=[];d(i,b.s.buttons);f=e.map(i,function(a){return a.node});if(Array.isArray(a)||a instanceof e){f=0;for(h=a.length;f<h;f++)g(a[f],b)}else if(null===
+a||a===m||"*"===a){f=0;for(h=i.length;f<h;f++)c.push({inst:b,node:i[f].node})}else if("number"===typeof a)c.push({inst:b,node:b.s.buttons[a].node});else if("string"===typeof a)if(-1!==a.indexOf(",")){i=a.split(",");f=0;for(h=i.length;f<h;f++)g(i[f].trim(),b)}else if(a.match(/^\d+(\-\d+)*$/))f=e.map(i,function(a){return a.idx}),c.push({inst:b,node:i[e.inArray(a,f)].node});else if(-1!==a.indexOf(":name")){var l=a.replace(":name","");f=0;for(h=i.length;f<h;f++)i[f].name===l&&c.push({inst:b,node:i[f].node})}else e(f).filter(a).each(function(){c.push({inst:b,
+node:this})});else"object"===typeof a&&a.nodeName&&(i=e.inArray(a,f),-1!==i&&c.push({inst:b,node:f[i]}))},f=0,h=a.length;f<h;f++)g(b,a[f]);return c};p.defaults={buttons:["copy","excel","csv","pdf","print"],name:"main",tabIndex:0,dom:{container:{tag:"div",className:"dt-buttons"},collection:{tag:"div",className:""},button:{tag:"ActiveXObject"in q?"a":"button",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"span",className:""}}};p.version="1.6.4";e.extend(l,{collection:{text:function(a){return a.i18n("buttons.collection",
+"Collection")},className:"buttons-collection",init:function(a,b){b.attr("aria-expanded",!1)},action:function(a,b,c,d){a.stopPropagation();d._collection.parents("body").length?this.popover(!1,d):this.popover(d._collection,d)},attr:{"aria-haspopup":!0}},copy:function(a,b){if(l.copyHtml5)return"copyHtml5";if(l.copyFlash&&l.copyFlash.available(a,b))return"copyFlash"},csv:function(a,b){if(l.csvHtml5&&l.csvHtml5.available(a,b))return"csvHtml5";if(l.csvFlash&&l.csvFlash.available(a,b))return"csvFlash"},
+excel:function(a,b){if(l.excelHtml5&&l.excelHtml5.available(a,b))return"excelHtml5";if(l.excelFlash&&l.excelFlash.available(a,b))return"excelFlash"},pdf:function(a,b){if(l.pdfHtml5&&l.pdfHtml5.available(a,b))return"pdfHtml5";if(l.pdfFlash&&l.pdfFlash.available(a,b))return"pdfFlash"},pageLength:function(a){var a=a.settings()[0].aLengthMenu,b=Array.isArray(a[0])?a[0]:a,c=Array.isArray(a[0])?a[1]:a;return{extend:"collection",text:function(a){return a.i18n("buttons.pageLength",{"-1":"Show all rows",_:"Show %d rows"},
 a.page.len())},className:"buttons-page-length",autoClose:!0,buttons:e.map(b,function(a,b){return{text:c[b],className:"button-page-length",action:function(b,c){c.page.len(a).draw()},init:function(b,c,e){var g=this,c=function(){g.active(b.page.len()===a)};b.on("length.dt"+e.namespace,c);c()},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}),init:function(a,b,c){var e=this;a.on("length.dt"+c.namespace,function(){e.text(c.text)})},destroy:function(a,b,c){a.off("length.dt"+c.namespace)}}}});i.Api.register("buttons()",
-function(a,b){b===m&&(b=a,a=m);this.selector.buttonGroup=a;var c=this.iterator(!0,"table",function(c){if(c._buttons)return l.buttonSelector(l.instanceSelector(a,c._buttons),b)},!0);c._groupSelector=a;return c});i.Api.register("button()",function(a,b){var c=this.buttons(a,b);1<c.length&&c.splice(1,c.length);return c});i.Api.registerPlural("buttons().active()","button().active()",function(a){return a===m?this.map(function(a){return a.inst.active(a.node)}):this.each(function(b){b.inst.active(b.node,
+function(a,b){b===m&&(b=a,a=m);this.selector.buttonGroup=a;var c=this.iterator(!0,"table",function(c){if(c._buttons)return p.buttonSelector(p.instanceSelector(a,c._buttons),b)},!0);c._groupSelector=a;return c});i.Api.register("button()",function(a,b){var c=this.buttons(a,b);1<c.length&&c.splice(1,c.length);return c});i.Api.registerPlural("buttons().active()","button().active()",function(a){return a===m?this.map(function(a){return a.inst.active(a.node)}):this.each(function(b){b.inst.active(b.node,
 a)})});i.Api.registerPlural("buttons().action()","button().action()",function(a){return a===m?this.map(function(a){return a.inst.action(a.node)}):this.each(function(b){b.inst.action(b.node,a)})});i.Api.register(["buttons().enable()","button().enable()"],function(a){return this.each(function(b){b.inst.enable(b.node,a)})});i.Api.register(["buttons().disable()","button().disable()"],function(){return this.each(function(a){a.inst.disable(a.node)})});i.Api.registerPlural("buttons().nodes()","button().node()",
 function(){var a=e();e(this.each(function(b){a=a.add(b.inst.node(b.node))}));return a});i.Api.registerPlural("buttons().processing()","button().processing()",function(a){return a===m?this.map(function(a){return a.inst.processing(a.node)}):this.each(function(b){b.inst.processing(b.node,a)})});i.Api.registerPlural("buttons().text()","button().text()",function(a){return a===m?this.map(function(a){return a.inst.text(a.node)}):this.each(function(b){b.inst.text(b.node,a)})});i.Api.registerPlural("buttons().trigger()",
-"button().trigger()",function(){return this.each(function(a){a.inst.node(a.node).trigger("click")})});i.Api.register("button().popover()",function(a,b){return this.map(function(c){return c.inst._popover(a,this.button(this[0].node),b)})});i.Api.register("buttons().containers()",function(){var a=e(),b=this._groupSelector;this.iterator(!0,"table",function(c){if(c._buttons)for(var c=l.instanceSelector(b,c._buttons),d=0,e=c.length;d<e;d++)a=a.add(c[d].container())});return a});i.Api.register("buttons().container()",
-function(){return this.containers().eq(0)});i.Api.register("button().add()",function(a,b){var c=this.context;c.length&&(c=l.instanceSelector(this._groupSelector,c[0]._buttons),c.length&&c[0].add(b,a));return this.button(this._groupSelector,a)});i.Api.register("buttons().destroy()",function(){this.pluck("inst").unique().each(function(a){a.destroy()});return this});i.Api.registerPlural("buttons().remove()","buttons().remove()",function(){this.each(function(a){a.inst.remove(a.node)});return this});var s;
-i.Api.register("buttons.info()",function(a,b,c){var d=this;if(!1===a)return this.off("destroy.btn-info"),u(e("#datatables_buttons_info"),400,function(){e(this).remove()}),clearTimeout(s),s=null,this;s&&clearTimeout(s);e("#datatables_buttons_info").length&&e("#datatables_buttons_info").remove();t(e('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a?"<h2>"+a+"</h2>":"").append(e("<div/>")["string"===typeof b?"html":"append"](b)).css("display","none").appendTo("body"));c!==m&&0!==c&&
-(s=setTimeout(function(){d.buttons.info(!1)},c));this.on("destroy.btn-info",function(){d.buttons.info(!1)});return this});i.Api.register("buttons.exportData()",function(a){if(this.context.length){var b=new i.Api(this.context[0]),c=e.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,decodeEntities:!0,trim:!0,format:{header:function(a){return d(a)},footer:function(a){return d(a)},body:function(a){return d(a)}},customizeData:null},
-a),d=function(a){if("string"!==typeof a)return a;a=a.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"");a=a.replace(/<!\-\-.*?\-\->/g,"");c.stripHtml&&(a=a.replace(/<[^>]*>/g,""));c.trim&&(a=a.replace(/^\s+|\s+$/g,""));c.stripNewlines&&(a=a.replace(/\n/g," "));c.decodeEntities&&(x.innerHTML=a,a=x.value);return a},a=b.columns(c.columns).indexes().map(function(a){var d=b.column(a).header();return c.format.header(d.innerHTML,a,d)}).toArray(),g=b.table().footer()?b.columns(c.columns).indexes().map(function(a){var d=
-b.column(a).footer();return c.format.footer(d?d.innerHTML:"",a,d)}).toArray():null,f=e.extend({},c.modifier);b.select&&"function"===typeof b.select.info&&f.selected===m&&b.rows(c.rows,e.extend({selected:!0},f)).any()&&e.extend(f,{selected:!0});for(var f=b.rows(c.rows,f).indexes().toArray(),h=b.cells(f,c.columns),f=h.render(c.orthogonal).toArray(),h=h.nodes().toArray(),k=a.length,l=[],j=0,n=0,o=0<k?f.length/k:0;n<o;n++){for(var r=[k],q=0;q<k;q++)r[q]=c.format.body(f[j],n,q,h[j]),j++;l[n]=r}a={header:a,
-footer:g,body:l};c.customizeData&&c.customizeData(a);return a}});i.Api.register("buttons.exportInfo()",function(a){a||(a={});var b;var c=a;b="*"===c.filename&&"*"!==c.title&&c.title!==m&&null!==c.title&&""!==c.title?c.title:c.filename;"function"===typeof b&&(b=b());b===m||null===b?b=null:(-1!==b.indexOf("*")&&(b=e.trim(b.replace("*",e("head > title").text()))),b=b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""),(c=v(c.extension))||(c=""),b+=c);c=v(a.title);c=null===c?null:-1!==c.indexOf("*")?
-c.replace("*",e("head > title").text()||"Exported data"):c;return{filename:b,title:c,messageTop:y(this,a.message||a.messageTop,"top"),messageBottom:y(this,a.messageBottom,"bottom")}});var v=function(a){return null===a||a===m?null:"function"===typeof a?a():a},y=function(a,b,c){b=v(b);if(null===b)return null;a=e("caption",a.table().container()).eq(0);return"*"===b?a.css("caption-side")!==c?null:a.length?a.text():"":b},x=e("<textarea/>")[0];e.fn.dataTable.Buttons=l;e.fn.DataTable.Buttons=l;e(r).on("init.dt plugin-init.dt",
-function(a,b){if("dt"===a.namespace){var c=b.oInit.buttons||i.defaults.buttons;c&&!b._buttons&&(new l(b,c)).container()}});i.ext.feature.push({fnInit:w,cFeature:"B"});i.ext.features&&i.ext.features.register("buttons",w);return l});
+"button().trigger()",function(){return this.each(function(a){a.inst.node(a.node).trigger("click")})});i.Api.register("button().popover()",function(a,b){return this.map(function(c){return c.inst._popover(a,this.button(this[0].node),b)})});i.Api.register("buttons().containers()",function(){var a=e(),b=this._groupSelector;this.iterator(!0,"table",function(c){if(c._buttons)for(var c=p.instanceSelector(b,c._buttons),d=0,e=c.length;d<e;d++)a=a.add(c[d].container())});return a});i.Api.register("buttons().container()",
+function(){return this.containers().eq(0)});i.Api.register("button().add()",function(a,b){var c=this.context;c.length&&(c=p.instanceSelector(this._groupSelector,c[0]._buttons),c.length&&c[0].add(b,a));return this.button(this._groupSelector,a)});i.Api.register("buttons().destroy()",function(){this.pluck("inst").unique().each(function(a){a.destroy()});return this});i.Api.registerPlural("buttons().remove()","buttons().remove()",function(){this.each(function(a){a.inst.remove(a.node)});return this});var v;
+i.Api.register("buttons.info()",function(a,b,c){var d=this;if(!1===a)return this.off("destroy.btn-info"),x(e("#datatables_buttons_info"),400,function(){e(this).remove()}),clearTimeout(v),v=null,this;v&&clearTimeout(v);e("#datatables_buttons_info").length&&e("#datatables_buttons_info").remove();w(e('<div id="datatables_buttons_info" class="dt-button-info"/>').html(a?"<h2>"+a+"</h2>":"").append(e("<div/>")["string"===typeof b?"html":"append"](b)).css("display","none").appendTo("body"));c!==m&&0!==c&&
+(v=setTimeout(function(){d.buttons.info(!1)},c));this.on("destroy.btn-info",function(){d.buttons.info(!1)});return this});i.Api.register("buttons.exportData()",function(a){if(this.context.length){var b=new i.Api(this.context[0]),c=e.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,decodeEntities:!0,trim:!0,format:{header:function(a){return d(a)},footer:function(a){return d(a)},body:function(a){return d(a)}},customizeData:null},
+a),d=function(a){if("string"!==typeof a)return a;a=a.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"");a=a.replace(/<!\-\-.*?\-\->/g,"");c.stripHtml&&(a=a.replace(/<([^>'"]*('[^']*'|"[^"]*")?)*>/g,""));c.trim&&(a=a.replace(/^\s+|\s+$/g,""));c.stripNewlines&&(a=a.replace(/\n/g," "));c.decodeEntities&&(A.innerHTML=a,a=A.value);return a},a=b.columns(c.columns).indexes().map(function(a){var d=b.column(a).header();return c.format.header(d.innerHTML,a,d)}).toArray(),g=b.table().footer()?
+b.columns(c.columns).indexes().map(function(a){var d=b.column(a).footer();return c.format.footer(d?d.innerHTML:"",a,d)}).toArray():null,f=e.extend({},c.modifier);b.select&&"function"===typeof b.select.info&&f.selected===m&&b.rows(c.rows,e.extend({selected:!0},f)).any()&&e.extend(f,{selected:!0});for(var f=b.rows(c.rows,f).indexes().toArray(),h=b.cells(f,c.columns),f=h.render(c.orthogonal).toArray(),h=h.nodes().toArray(),k=a.length,n=[],j=0,l=0,p=0<k?f.length/k:0;l<p;l++){for(var r=[k],q=0;q<k;q++)r[q]=
+c.format.body(f[j],l,q,h[j]),j++;n[l]=r}a={header:a,footer:g,body:n};c.customizeData&&c.customizeData(a);return a}});i.Api.register("buttons.exportInfo()",function(a){a||(a={});var b;var c=a;b="*"===c.filename&&"*"!==c.title&&c.title!==m&&null!==c.title&&""!==c.title?c.title:c.filename;"function"===typeof b&&(b=b());b===m||null===b?b=null:(-1!==b.indexOf("*")&&(b=b.replace("*",e("head > title").text()).trim()),b=b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""),(c=y(c.extension))||(c=""),b+=
+c);c=y(a.title);c=null===c?null:-1!==c.indexOf("*")?c.replace("*",e("head > title").text()||"Exported data"):c;return{filename:b,title:c,messageTop:B(this,a.message||a.messageTop,"top"),messageBottom:B(this,a.messageBottom,"bottom")}});var y=function(a){return null===a||a===m?null:"function"===typeof a?a():a},B=function(a,b,c){b=y(b);if(null===b)return null;a=e("caption",a.table().container()).eq(0);return"*"===b?a.css("caption-side")!==c?null:a.length?a.text():"":b},A=e("<textarea/>")[0];e.fn.dataTable.Buttons=
+p;e.fn.DataTable.Buttons=p;e(r).on("init.dt plugin-init.dt",function(a,b){if("dt"===a.namespace){var c=b.oInit.buttons||i.defaults.buttons;c&&!b._buttons&&(new p(b,c)).container()}});i.ext.feature.push({fnInit:z,cFeature:"B"});i.ext.features&&i.ext.features.register("buttons",z);return p});

+ 15 - 4
plugins/datatables-fixedcolumns/js/dataTables.fixedColumns.js

@@ -1,11 +1,11 @@
-/*! FixedColumns 3.3.1
+/*! FixedColumns 3.3.2
  * ©2010-2020 SpryMedia Ltd - datatables.net/license
  */
 
 /**
  * @summary     FixedColumns
  * @description Freeze columns in place on a scrolling DataTable
- * @version     3.3.1
+ * @version     3.3.2
  * @file        dataTables.fixedColumns.js
  * @author      SpryMedia Ltd (www.sprymedia.co.uk)
  * @contact     www.sprymedia.co.uk/contact
@@ -585,6 +585,11 @@ $.extend( FixedColumns.prototype , {
 						e.originalEvent.wheelDeltaX;
 					that.dom.scroller.scrollLeft -= xDelta;
 				} );
+
+			// Header will not trigger scroll on left column, but might on `main` (sorting)
+			$(that.dom.grid.left.head).on( 'mouseover.DTFC touchstart.DTFC', function () {
+				mouseController = 'main';
+			});
 		}
 
 		if ( that.s.iRightColumns > 0 ) {
@@ -608,7 +613,7 @@ $.extend( FixedColumns.prototype , {
 					}
 				} )
 				.on( wheelType, function(e) {
-					mouseController = 'left';
+					mouseController = 'right';
 
 					// Pass horizontal scrolling through
 					var xDelta = e.type === 'wheel' ?
@@ -616,6 +621,10 @@ $.extend( FixedColumns.prototype , {
 						e.originalEvent.wheelDeltaX;
 					that.dom.scroller.scrollLeft -= xDelta;
 				} );
+
+			$(that.dom.grid.right.head).on( 'mouseover.DTFC touchstart.DTFC', function () {
+				mouseController = 'main';
+			});
 		}
 
 		$(window).on( 'resize.DTFC', function () {
@@ -997,6 +1006,8 @@ $.extend( FixedColumns.prototype , {
 		this._fnCloneLeft( bAll );
 		this._fnCloneRight( bAll );
 
+		$(this.dom.scroller).trigger('scroll');
+
 		/* Draw callback function */
 		if ( this.s.fnDrawCallback !== null )
 		{
@@ -1562,7 +1573,7 @@ FixedColumns.defaults = /** @lends FixedColumns.defaults */{
  *  @default   See code
  *  @static
  */
-FixedColumns.version = "3.3.1";
+FixedColumns.version = "3.3.2";
 
 
 

+ 23 - 22
plugins/datatables-fixedcolumns/js/dataTables.fixedColumns.min.js

@@ -1,5 +1,5 @@
 /*!
- FixedColumns 3.3.1
+ FixedColumns 3.3.2
  ©2010-2020 SpryMedia Ltd - datatables.net/license
 */
 (function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(p){return d(p,window,document)}):"object"===typeof exports?module.exports=function(p,r){p||(p=window);if(!r||!r.fn.dataTable)r=require("datatables.net")(p,r).$;return d(r,p,p.document)}:d(jQuery,window,document)})(function(d,p,r,t){var s=d.fn.dataTable,u,m=function(a,b){var c=this;if(this instanceof m){if(b===t||!0===b)b={};var e=d.fn.dataTable.camelToHungarian;e&&(e(m.defaults,m.defaults,!0),e(m.defaults,
@@ -8,29 +8,30 @@ e._oFixedColumns=this;e._bInitComplete?this._fnConstruct(b):e.oApi._fnCallbackRe
 b+"px"},fnGetPosition:function(a){var b=this.s.dt.oInstance;if(d(a).parents(".DTFC_Cloned").length){if("tr"===a.nodeName.toLowerCase())return a=d(a).index(),b.fnGetPosition(d("tr",this.s.dt.nTBody)[a]);var c=d(a).index(),a=d(a.parentNode).index();return[b.fnGetPosition(d("tr",this.s.dt.nTBody)[a]),c,b.oApi._fnVisibleToColumnIndex(this.s.dt,c)]}return b.fnGetPosition(a)},fnToFixedNode:function(a,b){var c;b<this.s.iLeftColumns?c=d(this.dom.clone.left.body).find("[data-dt-row="+a+"][data-dt-column="+
 b+"]"):b>=this.s.iRightColumns&&(c=d(this.dom.clone.right.body).find("[data-dt-row="+a+"][data-dt-column="+b+"]"));return c&&c.length?c[0]:(new d.fn.dataTable.Api(this.s.dt)).cell(a,b).node()},_fnConstruct:function(a){var b=this;if("function"!=typeof this.s.dt.oInstance.fnVersionCheck||!0!==this.s.dt.oInstance.fnVersionCheck("1.8.0"))alert("FixedColumns "+m.VERSION+" required DataTables 1.8.0 or later. Please upgrade your DataTables installation");else if(""===this.s.dt.oScroll.sX)this.s.dt.oInstance.oApi._fnLog(this.s.dt,
 1,"FixedColumns is not needed (no x-scrolling in DataTables enabled), so no action will be taken. Use 'FixedHeader' for column fixing when scrolling is not enabled");else{this.s=d.extend(!0,this.s,m.defaults,a);a=this.s.dt.oClasses;this.dom.grid.dt=d(this.s.dt.nTable).parents("div."+a.sScrollWrapper)[0];this.dom.scroller=d("div."+a.sScrollBody,this.dom.grid.dt)[0];this._fnColCalc();this._fnGridSetup();var c,e=!1;d(this.s.dt.nTableWrapper).on("mousedown.DTFC",function(a){0===a.button&&(e=!0,d(r).one("mouseup",
-function(){e=!1}))});d(this.dom.scroller).on("mouseover.DTFC touchstart.DTFC",function(){e||(c="main")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="main");if("main"===c||"key"===c)if(0<b.s.iLeftColumns&&(b.dom.grid.left.liner.scrollTop=b.dom.scroller.scrollTop),0<b.s.iRightColumns)b.dom.grid.right.liner.scrollTop=b.dom.scroller.scrollTop});var f="onwheel"in r.createElement("div")?"wheel.DTFC":"mousewheel.DTFC";if(0<b.s.iLeftColumns)d(b.dom.grid.left.liner).on("mouseover.DTFC touchstart.DTFC",
-function(){!e&&"key"!==c&&(c="left")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="left");"left"===c&&(b.dom.scroller.scrollTop=b.dom.grid.left.liner.scrollTop,0<b.s.iRightColumns&&(b.dom.grid.right.liner.scrollTop=b.dom.grid.left.liner.scrollTop))}).on(f,function(a){c="left";b.dom.scroller.scrollLeft-="wheel"===a.type?-a.originalEvent.deltaX:a.originalEvent.wheelDeltaX});if(0<b.s.iRightColumns)d(b.dom.grid.right.liner).on("mouseover.DTFC touchstart.DTFC",function(){!e&&"key"!==c&&(c="right")}).on("scroll.DTFC",
-function(a){!c&&a.originalEvent&&(c="right");"right"===c&&(b.dom.scroller.scrollTop=b.dom.grid.right.liner.scrollTop,0<b.s.iLeftColumns&&(b.dom.grid.left.liner.scrollTop=b.dom.grid.right.liner.scrollTop))}).on(f,function(a){c="left";b.dom.scroller.scrollLeft-="wheel"===a.type?-a.originalEvent.deltaX:a.originalEvent.wheelDeltaX});d(p).on("resize.DTFC",function(){b._fnGridLayout.call(b)});var g=!0,h=d(this.s.dt.nTable);h.on("draw.dt.DTFC",function(){b._fnColCalc();b._fnDraw.call(b,g);g=!1}).on("key-focus.dt.DTFC",
-function(){c="key"}).on("column-sizing.dt.DTFC",function(){b._fnColCalc();b._fnGridLayout(b)}).on("column-visibility.dt.DTFC",function(a,c,d,e,f){if(f===t||f)b._fnColCalc(),b._fnGridLayout(b),b._fnDraw(!0)}).on("select.dt.DTFC deselect.dt.DTFC",function(a){"dt"===a.namespace&&b._fnDraw(!1)}).on("position.dts.dt.DTFC",function(a,c){b.dom.grid.left.body&&d(b.dom.grid.left.body).find("table").eq(0).css("top",c);b.dom.grid.right.body&&d(b.dom.grid.right.body).find("table").eq(0).css("top",c)}).on("destroy.dt.DTFC",
-function(){h.off(".DTFC");d(b.dom.scroller).off(".DTFC");d(p).off(".DTFC");d(b.s.dt.nTableWrapper).off(".DTFC");d(b.dom.grid.left.liner).off(".DTFC "+f);d(b.dom.grid.left.wrapper).remove();d(b.dom.grid.right.liner).off(".DTFC "+f);d(b.dom.grid.right.wrapper).remove()});this._fnGridLayout();this.s.dt.oInstance.fnDraw(!1)}},_fnColCalc:function(){var a=this,b=0,c=0;this.s.aiInnerWidths=[];this.s.aiOuterWidths=[];d.each(this.s.dt.aoColumns,function(e,f){var g=d(f.nTh),h;if(g.filter(":visible").length){var i=
-g.outerWidth();0===a.s.aiOuterWidths.length&&(h=d(a.s.dt.nTable).css("border-left-width"),i+="string"===typeof h&&-1===h.indexOf("px")?1:parseInt(h,10));a.s.aiOuterWidths.length===a.s.dt.aoColumns.length-1&&(h=d(a.s.dt.nTable).css("border-right-width"),i+="string"===typeof h&&-1===h.indexOf("px")?1:parseInt(h,10));a.s.aiOuterWidths.push(i);a.s.aiInnerWidths.push(g.width());e<a.s.iLeftColumns&&(b+=i);a.s.iTableColumns-a.s.iRightColumns<=e&&(c+=i)}else a.s.aiInnerWidths.push(0),a.s.aiOuterWidths.push(0)});
-this.s.iLeftWidth=b;this.s.iRightWidth=c},_fnGridSetup:function(){var a=this._fnDTOverflow(),b;this.dom.body=this.s.dt.nTable;this.dom.header=this.s.dt.nTHead.parentNode;this.dom.header.parentNode.parentNode.style.position="relative";var c=d('<div class="DTFC_ScrollWrapper" style="position:relative; clear:both;"><div class="DTFC_LeftWrapper" style="position:absolute; top:0; left:0;" aria-hidden="true"><div class="DTFC_LeftHeadWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div><div class="DTFC_LeftBodyWrapper" style="position:relative; top:0; left:0; height:0; overflow:hidden;"><div class="DTFC_LeftBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_LeftFootWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div></div><div class="DTFC_RightWrapper" style="position:absolute; top:0; right:0;" aria-hidden="true"><div class="DTFC_RightHeadWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightHeadBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div><div class="DTFC_RightBodyWrapper" style="position:relative; top:0; left:0; height:0; overflow:hidden;"><div class="DTFC_RightBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_RightFootWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightFootBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div></div></div>')[0],
+function(){e=!1}))});d(this.dom.scroller).on("mouseover.DTFC touchstart.DTFC",function(){e||(c="main")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="main");if("main"===c||"key"===c)if(0<b.s.iLeftColumns&&(b.dom.grid.left.liner.scrollTop=b.dom.scroller.scrollTop),0<b.s.iRightColumns)b.dom.grid.right.liner.scrollTop=b.dom.scroller.scrollTop});var f="onwheel"in r.createElement("div")?"wheel.DTFC":"mousewheel.DTFC";0<b.s.iLeftColumns&&(d(b.dom.grid.left.liner).on("mouseover.DTFC touchstart.DTFC",
+function(){!e&&"key"!==c&&(c="left")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="left");"left"===c&&(b.dom.scroller.scrollTop=b.dom.grid.left.liner.scrollTop,0<b.s.iRightColumns&&(b.dom.grid.right.liner.scrollTop=b.dom.grid.left.liner.scrollTop))}).on(f,function(a){c="left";b.dom.scroller.scrollLeft-="wheel"===a.type?-a.originalEvent.deltaX:a.originalEvent.wheelDeltaX}),d(b.dom.grid.left.head).on("mouseover.DTFC touchstart.DTFC",function(){c="main"}));0<b.s.iRightColumns&&(d(b.dom.grid.right.liner).on("mouseover.DTFC touchstart.DTFC",
+function(){!e&&c!=="key"&&(c="right")}).on("scroll.DTFC",function(a){!c&&a.originalEvent&&(c="right");if(c==="right"){b.dom.scroller.scrollTop=b.dom.grid.right.liner.scrollTop;if(b.s.iLeftColumns>0)b.dom.grid.left.liner.scrollTop=b.dom.grid.right.liner.scrollTop}}).on(f,function(a){c="right";b.dom.scroller.scrollLeft=b.dom.scroller.scrollLeft-(a.type==="wheel"?-a.originalEvent.deltaX:a.originalEvent.wheelDeltaX)}),d(b.dom.grid.right.head).on("mouseover.DTFC touchstart.DTFC",function(){c="main"}));
+d(p).on("resize.DTFC",function(){b._fnGridLayout.call(b)});var g=!0,h=d(this.s.dt.nTable);h.on("draw.dt.DTFC",function(){b._fnColCalc();b._fnDraw.call(b,g);g=false}).on("key-focus.dt.DTFC",function(){c="key"}).on("column-sizing.dt.DTFC",function(){b._fnColCalc();b._fnGridLayout(b)}).on("column-visibility.dt.DTFC",function(a,c,d,e,f){if(f===t||f){b._fnColCalc();b._fnGridLayout(b);b._fnDraw(true)}}).on("select.dt.DTFC deselect.dt.DTFC",function(a){a.namespace==="dt"&&b._fnDraw(false)}).on("position.dts.dt.DTFC",
+function(a,c){b.dom.grid.left.body&&d(b.dom.grid.left.body).find("table").eq(0).css("top",c);b.dom.grid.right.body&&d(b.dom.grid.right.body).find("table").eq(0).css("top",c)}).on("destroy.dt.DTFC",function(){h.off(".DTFC");d(b.dom.scroller).off(".DTFC");d(p).off(".DTFC");d(b.s.dt.nTableWrapper).off(".DTFC");d(b.dom.grid.left.liner).off(".DTFC "+f);d(b.dom.grid.left.wrapper).remove();d(b.dom.grid.right.liner).off(".DTFC "+f);d(b.dom.grid.right.wrapper).remove()});this._fnGridLayout();this.s.dt.oInstance.fnDraw(!1)}},
+_fnColCalc:function(){var a=this,b=0,c=0;this.s.aiInnerWidths=[];this.s.aiOuterWidths=[];d.each(this.s.dt.aoColumns,function(e,f){var g=d(f.nTh),h;if(g.filter(":visible").length){var i=g.outerWidth();0===a.s.aiOuterWidths.length&&(h=d(a.s.dt.nTable).css("border-left-width"),i+="string"===typeof h&&-1===h.indexOf("px")?1:parseInt(h,10));a.s.aiOuterWidths.length===a.s.dt.aoColumns.length-1&&(h=d(a.s.dt.nTable).css("border-right-width"),i+="string"===typeof h&&-1===h.indexOf("px")?1:parseInt(h,10));
+a.s.aiOuterWidths.push(i);a.s.aiInnerWidths.push(g.width());e<a.s.iLeftColumns&&(b+=i);a.s.iTableColumns-a.s.iRightColumns<=e&&(c+=i)}else a.s.aiInnerWidths.push(0),a.s.aiOuterWidths.push(0)});this.s.iLeftWidth=b;this.s.iRightWidth=c},_fnGridSetup:function(){var a=this._fnDTOverflow(),b;this.dom.body=this.s.dt.nTable;this.dom.header=this.s.dt.nTHead.parentNode;this.dom.header.parentNode.parentNode.style.position="relative";var c=d('<div class="DTFC_ScrollWrapper" style="position:relative; clear:both;"><div class="DTFC_LeftWrapper" style="position:absolute; top:0; left:0;" aria-hidden="true"><div class="DTFC_LeftHeadWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div><div class="DTFC_LeftBodyWrapper" style="position:relative; top:0; left:0; height:0; overflow:hidden;"><div class="DTFC_LeftBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_LeftFootWrapper" style="position:relative; top:0; left:0; overflow:hidden;"></div></div><div class="DTFC_RightWrapper" style="position:absolute; top:0; right:0;" aria-hidden="true"><div class="DTFC_RightHeadWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightHeadBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div><div class="DTFC_RightBodyWrapper" style="position:relative; top:0; left:0; height:0; overflow:hidden;"><div class="DTFC_RightBodyLiner" style="position:relative; top:0; left:0; overflow-y:scroll;"></div></div><div class="DTFC_RightFootWrapper" style="position:relative; top:0; left:0;"><div class="DTFC_RightFootBlocker DTFC_Blocker" style="position:absolute; top:0; bottom:0;"></div></div></div></div>')[0],
 e=c.childNodes[0],f=c.childNodes[1];this.dom.grid.dt.parentNode.insertBefore(c,this.dom.grid.dt);c.appendChild(this.dom.grid.dt);this.dom.grid.wrapper=c;0<this.s.iLeftColumns&&(this.dom.grid.left.wrapper=e,this.dom.grid.left.head=e.childNodes[0],this.dom.grid.left.body=e.childNodes[1],this.dom.grid.left.liner=d("div.DTFC_LeftBodyLiner",c)[0],c.appendChild(e));0<this.s.iRightColumns&&(this.dom.grid.right.wrapper=f,this.dom.grid.right.head=f.childNodes[0],this.dom.grid.right.body=f.childNodes[1],this.dom.grid.right.liner=
 d("div.DTFC_RightBodyLiner",c)[0],f.style.right=a.bar+"px",b=d("div.DTFC_RightHeadBlocker",c)[0],b.style.width=a.bar+"px",b.style.right=-a.bar+"px",this.dom.grid.right.headBlock=b,b=d("div.DTFC_RightFootBlocker",c)[0],b.style.width=a.bar+"px",b.style.right=-a.bar+"px",this.dom.grid.right.footBlock=b,c.appendChild(f));if(this.s.dt.nTFoot&&(this.dom.footer=this.s.dt.nTFoot.parentNode,0<this.s.iLeftColumns&&(this.dom.grid.left.foot=e.childNodes[2]),0<this.s.iRightColumns))this.dom.grid.right.foot=f.childNodes[2];
 this.s.rtl&&d("div.DTFC_RightHeadBlocker",c).css({left:-a.bar+"px",right:""})},_fnGridLayout:function(){var a=this,b=this.dom.grid;d(b.wrapper).width();var c=this.s.dt.nTable.parentNode.offsetHeight,e=this.s.dt.nTable.parentNode.parentNode.offsetHeight,f=this._fnDTOverflow(),g=this.s.iLeftWidth,h=this.s.iRightWidth,i="rtl"===d(this.dom.body).css("direction"),j=function(b,c){f.bar?a._firefoxScrollError()?34<d(b).height()&&(b.style.width=c+f.bar+"px"):b.style.width=c+f.bar+"px":(b.style.width=c+20+
 "px",b.style.paddingRight="20px",b.style.boxSizing="border-box")};f.x&&(c-=f.bar);b.wrapper.style.height=e+"px";0<this.s.iLeftColumns&&(e=b.left.wrapper,e.style.width=g+"px",e.style.height="1px",i?(e.style.left="",e.style.right=0):(e.style.left=0,e.style.right=""),b.left.body.style.height=c+"px",b.left.foot&&(b.left.foot.style.top=(f.x?f.bar:0)+"px"),j(b.left.liner,g),b.left.liner.style.height=c+"px",b.left.liner.style.maxHeight=c+"px");0<this.s.iRightColumns&&(e=b.right.wrapper,e.style.width=h+"px",
 e.style.height="1px",this.s.rtl?(e.style.left=f.y?f.bar+"px":0,e.style.right=""):(e.style.left="",e.style.right=f.y?f.bar+"px":0),b.right.body.style.height=c+"px",b.right.foot&&(b.right.foot.style.top=(f.x?f.bar:0)+"px"),j(b.right.liner,h),b.right.liner.style.height=c+"px",b.right.liner.style.maxHeight=c+"px",b.right.headBlock.style.display=f.y?"block":"none",b.right.footBlock.style.display=f.y?"block":"none")},_fnDTOverflow:function(){var a=this.s.dt.nTable,b=a.parentNode,c={x:!1,y:!1,bar:this.s.dt.oScroll.iBarWidth};
-a.offsetWidth>b.clientWidth&&(c.x=!0);a.offsetHeight>b.clientHeight&&(c.y=!0);return c},_fnDraw:function(a){this._fnGridLayout();this._fnCloneLeft(a);this._fnCloneRight(a);null!==this.s.fnDrawCallback&&this.s.fnDrawCallback.call(this,this.dom.clone.left,this.dom.clone.right);d(this).trigger("draw.dtfc",{leftClone:this.dom.clone.left,rightClone:this.dom.clone.right})},_fnCloneRight:function(a){if(!(0>=this.s.iRightColumns)){var b,c=[];for(b=this.s.iTableColumns-this.s.iRightColumns;b<this.s.iTableColumns;b++)this.s.dt.aoColumns[b].bVisible&&
-c.push(b);this._fnClone(this.dom.clone.right,this.dom.grid.right,c,a)}},_fnCloneLeft:function(a){if(!(0>=this.s.iLeftColumns)){var b,c=[];for(b=0;b<this.s.iLeftColumns;b++)this.s.dt.aoColumns[b].bVisible&&c.push(b);this._fnClone(this.dom.clone.left,this.dom.grid.left,c,a)}},_fnCopyLayout:function(a,b,c){for(var e=[],f=[],g=[],h=0,i=a.length;h<i;h++){var j=[];j.nTr=d(a[h].nTr).clone(c,!1)[0];for(var l=0,o=this.s.iTableColumns;l<o;l++)if(-1!==d.inArray(l,b)){var q=d.inArray(a[h][l].cell,g);-1===q?(q=
-d(a[h][l].cell).clone(c,!1)[0],f.push(q),g.push(a[h][l].cell),j.push({cell:q,unique:a[h][l].unique})):j.push({cell:f[q],unique:a[h][l].unique})}e.push(j)}return e},_fnClone:function(a,b,c,e){var f=this,g,h,i,j,l,o,q,n,m,k=this.s.dt;if(e){d(a.header).remove();a.header=d(this.dom.header).clone(!0,!1)[0];a.header.className+=" DTFC_Cloned";a.header.style.width="100%";b.head.appendChild(a.header);n=this._fnCopyLayout(k.aoHeader,c,!0);j=d(">thead",a.header);j.empty();g=0;for(h=n.length;g<h;g++)j[0].appendChild(n[g].nTr);
-k.oApi._fnDrawHead(k,n,!0)}else{n=this._fnCopyLayout(k.aoHeader,c,!1);m=[];k.oApi._fnDetectHeader(m,d(">thead",a.header)[0]);g=0;for(h=n.length;g<h;g++){i=0;for(j=n[g].length;i<j;i++)m[g][i].cell.className=n[g][i].cell.className,d("span.DataTables_sort_icon",m[g][i].cell).each(function(){this.className=d("span.DataTables_sort_icon",n[g][i].cell)[0].className})}}this._fnEqualiseHeights("thead",this.dom.header,a.header);"auto"==this.s.sHeightMatch&&d(">tbody>tr",f.dom.body).css("height","auto");null!==
-a.body&&(d(a.body).remove(),a.body=null);a.body=d(this.dom.body).clone(!0)[0];a.body.className+=" DTFC_Cloned";a.body.style.paddingBottom=k.oScroll.iBarWidth+"px";a.body.style.marginBottom=2*k.oScroll.iBarWidth+"px";null!==a.body.getAttribute("id")&&a.body.removeAttribute("id");d(">thead>tr",a.body).empty();d(">tfoot",a.body).remove();var p=d("tbody",a.body)[0];d(p).empty();if(0<k.aiDisplay.length){h=d(">thead>tr",a.body)[0];for(q=0;q<c.length;q++)l=c[q],o=d(k.aoColumns[l].nTh).clone(!0)[0],o.innerHTML=
-"",j=o.style,j.paddingTop="0",j.paddingBottom="0",j.borderTopWidth="0",j.borderBottomWidth="0",j.height=0,j.width=f.s.aiInnerWidths[l]+"px",h.appendChild(o);d(">tbody>tr",f.dom.body).each(function(a){var a=f.s.dt.oFeatures.bServerSide===false?f.s.dt.aiDisplay[f.s.dt._iDisplayStart+a]:a,b=f.s.dt.aoData[a].anCells||d(this).children("td, th"),e=this.cloneNode(false);e.removeAttribute("id");e.setAttribute("data-dt-row",a);for(q=0;q<c.length;q++){l=c[q];if(b.length>0){o=d(b[l]).clone(true,true)[0];o.removeAttribute("id");
-o.setAttribute("data-dt-row",a);o.setAttribute("data-dt-column",l);e.appendChild(o)}}p.appendChild(e)})}else d(">tbody>tr",f.dom.body).each(function(){o=this.cloneNode(true);o.className=o.className+" DTFC_NoData";d("td",o).html("");p.appendChild(o)});a.body.style.width="100%";a.body.style.margin="0";a.body.style.padding="0";k.oScroller!==t&&(h=k.oScroller.dom.force,b.forcer?b.forcer.style.height=h.style.height:(b.forcer=h.cloneNode(!0),b.liner.appendChild(b.forcer)));b.liner.appendChild(a.body);this._fnEqualiseHeights("tbody",
-f.dom.body,a.body);if(null!==k.nTFoot){if(e){null!==a.footer&&a.footer.parentNode.removeChild(a.footer);a.footer=d(this.dom.footer).clone(!0,!0)[0];a.footer.className+=" DTFC_Cloned";a.footer.style.width="100%";b.foot.appendChild(a.footer);n=this._fnCopyLayout(k.aoFooter,c,!0);b=d(">tfoot",a.footer);b.empty();g=0;for(h=n.length;g<h;g++)b[0].appendChild(n[g].nTr);k.oApi._fnDrawHead(k,n,!0)}else{n=this._fnCopyLayout(k.aoFooter,c,!1);b=[];k.oApi._fnDetectHeader(b,d(">tfoot",a.footer)[0]);g=0;for(h=n.length;g<
-h;g++){i=0;for(j=n[g].length;i<j;i++)b[g][i].cell.className=n[g][i].cell.className}}this._fnEqualiseHeights("tfoot",this.dom.footer,a.footer)}b=k.oApi._fnGetUniqueThs(k,d(">thead",a.header)[0]);d(b).each(function(a){l=c[a];this.style.width=f.s.aiInnerWidths[l]+"px"});null!==f.s.dt.nTFoot&&(b=k.oApi._fnGetUniqueThs(k,d(">tfoot",a.footer)[0]),d(b).each(function(a){l=c[a];this.style.width=f.s.aiInnerWidths[l]+"px"}))},_fnGetTrNodes:function(a){for(var b=[],c=0,d=a.childNodes.length;c<d;c++)"TR"==a.childNodes[c].nodeName.toUpperCase()&&
-b.push(a.childNodes[c]);return b},_fnEqualiseHeights:function(a,b,c){if(!("none"==this.s.sHeightMatch&&"thead"!==a&&"tfoot"!==a)){var e,f,g=b.getElementsByTagName(a)[0],c=c.getElementsByTagName(a)[0],a=d(">"+a+">tr:eq(0)",b).children(":first");a.outerHeight();a.height();for(var g=this._fnGetTrNodes(g),b=this._fnGetTrNodes(c),h=[],c=0,a=b.length;c<a;c++)e=g[c].offsetHeight,f=b[c].offsetHeight,e=f>e?f:e,"semiauto"==this.s.sHeightMatch&&(g[c]._DTTC_iHeight=e),h.push(e);c=0;for(a=b.length;c<a;c++)b[c].style.height=
-h[c]+"px",g[c].style.height=h[c]+"px"}},_firefoxScrollError:function(){if(u===t){var a=d("<div/>").css({position:"absolute",top:0,left:0,height:10,width:50,overflow:"scroll"}).appendTo("body");u=a[0].clientWidth===a[0].offsetWidth&&0!==this._fnDTOverflow().bar;a.remove()}return u}});m.defaults={iLeftColumns:1,iRightColumns:0,fnDrawCallback:null,sHeightMatch:"semiauto"};m.version="3.3.1";s.Api.register("fixedColumns()",function(){return this});s.Api.register("fixedColumns().update()",function(){return this.iterator("table",
-function(a){a._oFixedColumns&&a._oFixedColumns.fnUpdate()})});s.Api.register("fixedColumns().relayout()",function(){return this.iterator("table",function(a){a._oFixedColumns&&a._oFixedColumns.fnRedrawLayout()})});s.Api.register("rows().recalcHeight()",function(){return this.iterator("row",function(a,b){a._oFixedColumns&&a._oFixedColumns.fnRecalculateHeight(this.row(b).node())})});s.Api.register("fixedColumns().rowIndex()",function(a){a=d(a);return a.parents(".DTFC_Cloned").length?this.rows({page:"current"}).indexes()[a.index()]:
-this.row(a).index()});s.Api.register("fixedColumns().cellIndex()",function(a){a=d(a);if(a.parents(".DTFC_Cloned").length){var b=a.parent().index(),b=this.rows({page:"current"}).indexes()[b],a=a.parents(".DTFC_LeftWrapper").length?a.index():this.columns().flatten().length-this.context[0]._oFixedColumns.s.iRightColumns+a.index();return{row:b,column:this.column.index("toData",a),columnVisible:a}}return this.cell(a).index()});s.Api.registerPlural("cells().fixedNodes()","cell().fixedNode()",function(){return this.iterator("cell",
-function(a,b,c){return a._oFixedColumns?a._oFixedColumns.fnToFixedNode(b,c):this.cell(b,c).node()},1)});d(r).on("init.dt.fixedColumns",function(a,b){if("dt"===a.namespace){var c=b.oInit.fixedColumns,e=s.defaults.fixedColumns;if(c||e)e=d.extend({},c,e),!1!==c&&new m(b,e)}});d.fn.dataTable.FixedColumns=m;return d.fn.DataTable.FixedColumns=m});
+a.offsetWidth>b.clientWidth&&(c.x=!0);a.offsetHeight>b.clientHeight&&(c.y=!0);return c},_fnDraw:function(a){this._fnGridLayout();this._fnCloneLeft(a);this._fnCloneRight(a);d(this.dom.scroller).trigger("scroll");null!==this.s.fnDrawCallback&&this.s.fnDrawCallback.call(this,this.dom.clone.left,this.dom.clone.right);d(this).trigger("draw.dtfc",{leftClone:this.dom.clone.left,rightClone:this.dom.clone.right})},_fnCloneRight:function(a){if(!(0>=this.s.iRightColumns)){var b,c=[];for(b=this.s.iTableColumns-
+this.s.iRightColumns;b<this.s.iTableColumns;b++)this.s.dt.aoColumns[b].bVisible&&c.push(b);this._fnClone(this.dom.clone.right,this.dom.grid.right,c,a)}},_fnCloneLeft:function(a){if(!(0>=this.s.iLeftColumns)){var b,c=[];for(b=0;b<this.s.iLeftColumns;b++)this.s.dt.aoColumns[b].bVisible&&c.push(b);this._fnClone(this.dom.clone.left,this.dom.grid.left,c,a)}},_fnCopyLayout:function(a,b,c){for(var e=[],f=[],g=[],h=0,i=a.length;h<i;h++){var j=[];j.nTr=d(a[h].nTr).clone(c,!1)[0];for(var l=0,o=this.s.iTableColumns;l<
+o;l++)if(-1!==d.inArray(l,b)){var q=d.inArray(a[h][l].cell,g);-1===q?(q=d(a[h][l].cell).clone(c,!1)[0],f.push(q),g.push(a[h][l].cell),j.push({cell:q,unique:a[h][l].unique})):j.push({cell:f[q],unique:a[h][l].unique})}e.push(j)}return e},_fnClone:function(a,b,c,e){var f=this,g,h,i,j,l,o,q,n,m,k=this.s.dt;if(e){d(a.header).remove();a.header=d(this.dom.header).clone(!0,!1)[0];a.header.className+=" DTFC_Cloned";a.header.style.width="100%";b.head.appendChild(a.header);n=this._fnCopyLayout(k.aoHeader,c,
+!0);j=d(">thead",a.header);j.empty();g=0;for(h=n.length;g<h;g++)j[0].appendChild(n[g].nTr);k.oApi._fnDrawHead(k,n,!0)}else{n=this._fnCopyLayout(k.aoHeader,c,!1);m=[];k.oApi._fnDetectHeader(m,d(">thead",a.header)[0]);g=0;for(h=n.length;g<h;g++){i=0;for(j=n[g].length;i<j;i++)m[g][i].cell.className=n[g][i].cell.className,d("span.DataTables_sort_icon",m[g][i].cell).each(function(){this.className=d("span.DataTables_sort_icon",n[g][i].cell)[0].className})}}this._fnEqualiseHeights("thead",this.dom.header,
+a.header);"auto"==this.s.sHeightMatch&&d(">tbody>tr",f.dom.body).css("height","auto");null!==a.body&&(d(a.body).remove(),a.body=null);a.body=d(this.dom.body).clone(!0)[0];a.body.className+=" DTFC_Cloned";a.body.style.paddingBottom=k.oScroll.iBarWidth+"px";a.body.style.marginBottom=2*k.oScroll.iBarWidth+"px";null!==a.body.getAttribute("id")&&a.body.removeAttribute("id");d(">thead>tr",a.body).empty();d(">tfoot",a.body).remove();var p=d("tbody",a.body)[0];d(p).empty();if(0<k.aiDisplay.length){h=d(">thead>tr",
+a.body)[0];for(q=0;q<c.length;q++)l=c[q],o=d(k.aoColumns[l].nTh).clone(!0)[0],o.innerHTML="",j=o.style,j.paddingTop="0",j.paddingBottom="0",j.borderTopWidth="0",j.borderBottomWidth="0",j.height=0,j.width=f.s.aiInnerWidths[l]+"px",h.appendChild(o);d(">tbody>tr",f.dom.body).each(function(a){var a=f.s.dt.oFeatures.bServerSide===false?f.s.dt.aiDisplay[f.s.dt._iDisplayStart+a]:a,b=f.s.dt.aoData[a].anCells||d(this).children("td, th"),e=this.cloneNode(false);e.removeAttribute("id");e.setAttribute("data-dt-row",
+a);for(q=0;q<c.length;q++){l=c[q];if(b.length>0){o=d(b[l]).clone(true,true)[0];o.removeAttribute("id");o.setAttribute("data-dt-row",a);o.setAttribute("data-dt-column",l);e.appendChild(o)}}p.appendChild(e)})}else d(">tbody>tr",f.dom.body).each(function(){o=this.cloneNode(true);o.className=o.className+" DTFC_NoData";d("td",o).html("");p.appendChild(o)});a.body.style.width="100%";a.body.style.margin="0";a.body.style.padding="0";k.oScroller!==t&&(h=k.oScroller.dom.force,b.forcer?b.forcer.style.height=
+h.style.height:(b.forcer=h.cloneNode(!0),b.liner.appendChild(b.forcer)));b.liner.appendChild(a.body);this._fnEqualiseHeights("tbody",f.dom.body,a.body);if(null!==k.nTFoot){if(e){null!==a.footer&&a.footer.parentNode.removeChild(a.footer);a.footer=d(this.dom.footer).clone(!0,!0)[0];a.footer.className+=" DTFC_Cloned";a.footer.style.width="100%";b.foot.appendChild(a.footer);n=this._fnCopyLayout(k.aoFooter,c,!0);b=d(">tfoot",a.footer);b.empty();g=0;for(h=n.length;g<h;g++)b[0].appendChild(n[g].nTr);k.oApi._fnDrawHead(k,
+n,!0)}else{n=this._fnCopyLayout(k.aoFooter,c,!1);b=[];k.oApi._fnDetectHeader(b,d(">tfoot",a.footer)[0]);g=0;for(h=n.length;g<h;g++){i=0;for(j=n[g].length;i<j;i++)b[g][i].cell.className=n[g][i].cell.className}}this._fnEqualiseHeights("tfoot",this.dom.footer,a.footer)}b=k.oApi._fnGetUniqueThs(k,d(">thead",a.header)[0]);d(b).each(function(a){l=c[a];this.style.width=f.s.aiInnerWidths[l]+"px"});null!==f.s.dt.nTFoot&&(b=k.oApi._fnGetUniqueThs(k,d(">tfoot",a.footer)[0]),d(b).each(function(a){l=c[a];this.style.width=
+f.s.aiInnerWidths[l]+"px"}))},_fnGetTrNodes:function(a){for(var b=[],c=0,d=a.childNodes.length;c<d;c++)"TR"==a.childNodes[c].nodeName.toUpperCase()&&b.push(a.childNodes[c]);return b},_fnEqualiseHeights:function(a,b,c){if(!("none"==this.s.sHeightMatch&&"thead"!==a&&"tfoot"!==a)){var e,f,g=b.getElementsByTagName(a)[0],c=c.getElementsByTagName(a)[0],a=d(">"+a+">tr:eq(0)",b).children(":first");a.outerHeight();a.height();for(var g=this._fnGetTrNodes(g),b=this._fnGetTrNodes(c),h=[],c=0,a=b.length;c<a;c++)e=
+g[c].offsetHeight,f=b[c].offsetHeight,e=f>e?f:e,"semiauto"==this.s.sHeightMatch&&(g[c]._DTTC_iHeight=e),h.push(e);c=0;for(a=b.length;c<a;c++)b[c].style.height=h[c]+"px",g[c].style.height=h[c]+"px"}},_firefoxScrollError:function(){if(u===t){var a=d("<div/>").css({position:"absolute",top:0,left:0,height:10,width:50,overflow:"scroll"}).appendTo("body");u=a[0].clientWidth===a[0].offsetWidth&&0!==this._fnDTOverflow().bar;a.remove()}return u}});m.defaults={iLeftColumns:1,iRightColumns:0,fnDrawCallback:null,
+sHeightMatch:"semiauto"};m.version="3.3.2";s.Api.register("fixedColumns()",function(){return this});s.Api.register("fixedColumns().update()",function(){return this.iterator("table",function(a){a._oFixedColumns&&a._oFixedColumns.fnUpdate()})});s.Api.register("fixedColumns().relayout()",function(){return this.iterator("table",function(a){a._oFixedColumns&&a._oFixedColumns.fnRedrawLayout()})});s.Api.register("rows().recalcHeight()",function(){return this.iterator("row",function(a,b){a._oFixedColumns&&
+a._oFixedColumns.fnRecalculateHeight(this.row(b).node())})});s.Api.register("fixedColumns().rowIndex()",function(a){a=d(a);return a.parents(".DTFC_Cloned").length?this.rows({page:"current"}).indexes()[a.index()]:this.row(a).index()});s.Api.register("fixedColumns().cellIndex()",function(a){a=d(a);if(a.parents(".DTFC_Cloned").length){var b=a.parent().index(),b=this.rows({page:"current"}).indexes()[b],a=a.parents(".DTFC_LeftWrapper").length?a.index():this.columns().flatten().length-this.context[0]._oFixedColumns.s.iRightColumns+
+a.index();return{row:b,column:this.column.index("toData",a),columnVisible:a}}return this.cell(a).index()});s.Api.registerPlural("cells().fixedNodes()","cell().fixedNode()",function(){return this.iterator("cell",function(a,b,c){return a._oFixedColumns?a._oFixedColumns.fnToFixedNode(b,c):this.cell(b,c).node()},1)});d(r).on("init.dt.fixedColumns",function(a,b){if("dt"===a.namespace){var c=b.oInit.fixedColumns,e=s.defaults.fixedColumns;if(c||e)e=d.extend({},c,e),!1!==c&&new m(b,e)}});d.fn.dataTable.FixedColumns=
+m;return d.fn.DataTable.FixedColumns=m});

+ 11 - 6
plugins/datatables-keytable/js/dataTables.keyTable.js

@@ -1,11 +1,11 @@
-/*! KeyTable 2.5.2
+/*! KeyTable 2.5.3
  * ©2009-2020 SpryMedia Ltd - datatables.net/license
  */
 
 /**
  * @summary     KeyTable
  * @description Spreadsheet like keyboard navigation for DataTables
- * @version     2.5.2
+ * @version     2.5.3
  * @file        dataTables.keyTable.js
  * @author      SpryMedia Ltd (www.sprymedia.co.uk)
  * @contact     www.sprymedia.co.uk/contact
@@ -50,6 +50,7 @@
 'use strict';
 var DataTable = $.fn.dataTable;
 var namespaceCounter = 0;
+var editorNamespaceCounter = 0;
 
 
 var KeyTable = function ( dt, opts ) {
@@ -275,6 +276,10 @@ $.extend( KeyTable.prototype, {
 					return;
 				}
 
+				if ( that.s.lastFocus && this !== that.s.lastFocus.cell.node() ) {
+					return;
+				}
+
 				that._editor( null, e, true );
 			} );
 
@@ -314,7 +319,7 @@ $.extend( KeyTable.prototype, {
 
 			var lastFocus = that.s.lastFocus;
 
-			if ( lastFocus && lastFocus.node && $(lastFocus.node).closest('body') === document.body ) {
+			if ( lastFocus ) {
 				var relative = that.s.lastFocus.relative;
 				var info = dt.page.info();
 				var row = relative.row + info.start;
@@ -512,7 +517,7 @@ $.extend( KeyTable.prototype, {
 		var dt = this.s.dt;
 		var editor = this.c.editor;
 		var editCell = this.s.lastFocus.cell;
-		var namespace = this.s.namespace;
+		var namespace = this.s.namespace + 'e' + editorNamespaceCounter++;
 
 		// Do nothing if there is already an inline edit in this cell
 		if ( $('div.DTE', editCell.node()).length ) {
@@ -577,7 +582,7 @@ $.extend( KeyTable.prototype, {
 					} );
 
 					// Restore full key navigation on close
-					editor.one( 'close', function () {
+					editor.one( 'close'+namespace, function () {
 						dt.keys.enable( true );
 						dt.off( 'key-blur.editor' );
 						editor.off( namespace );
@@ -1175,7 +1180,7 @@ KeyTable.defaults = {
 
 
 
-KeyTable.version = "2.5.2";
+KeyTable.version = "2.5.3";
 
 
 $.fn.dataTable.KeyTable = KeyTable;

+ 17 - 17
plugins/datatables-keytable/js/dataTables.keyTable.min.js

@@ -1,25 +1,25 @@
 /*!
- KeyTable 2.5.2
+ KeyTable 2.5.3
  ©2009-2020 SpryMedia Ltd - datatables.net/license
 */
-(function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return e(k,window,document)}):"object"===typeof exports?module.exports=function(k,i){k||(k=window);if(!i||!i.fn.dataTable)i=require("datatables.net")(k,i).$;return e(i,k,k.document)}:e(jQuery,window,document)})(function(e,k,i,o){var l=e.fn.dataTable,p=0,m=function(a,b){if(!l.versionCheck||!l.versionCheck("1.10.8"))throw"KeyTable requires DataTables 1.10.8 or newer";this.c=e.extend(!0,{},l.defaults.keyTable,
+(function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(k){return e(k,window,document)}):"object"===typeof exports?module.exports=function(k,i){k||(k=window);if(!i||!i.fn.dataTable)i=require("datatables.net")(k,i).$;return e(i,k,k.document)}:e(jQuery,window,document)})(function(e,k,i,o){var l=e.fn.dataTable,p=0,q=0,m=function(a,b){if(!l.versionCheck||!l.versionCheck("1.10.8"))throw"KeyTable requires DataTables 1.10.8 or newer";this.c=e.extend(!0,{},l.defaults.keyTable,
 m.defaults,b);this.s={dt:new l.Api(a),enable:!0,focusDraw:!1,waitingForDraw:!1,lastFocus:null,namespace:".keyTable-"+p++,tabInput:null};this.dom={};var c=this.s.dt.settings()[0],d=c.keytable;if(d)return d;c.keytable=this;this._constructor()};e.extend(m.prototype,{blur:function(){this._blur()},enable:function(a){this.s.enable=a},focus:function(a,b){this._focus(this.s.dt.cell(a,b))},focused:function(a){if(!this.s.lastFocus)return!1;var b=this.s.lastFocus.cell.index();return a.row===b.row&&a.column===
 b.column},_constructor:function(){this._tabInput();var a=this,b=this.s.dt,c=e(b.table().node()),d=this.s.namespace,f=!1;"static"===c.css("position")&&c.css("position","relative");e(b.table().body()).on("click"+d,"th, td",function(d){if(!1!==a.s.enable){var c=b.cell(this);c.any()&&a._focus(c,null,!1,d)}});e(i).on("keydown"+d,function(b){f||a._key(b)});if(this.c.blurable)e(i).on("mousedown"+d,function(d){e(d.target).parents(".dataTables_filter").length&&a._blur();e(d.target).parents().filter(b.table().container()).length||
 e(d.target).parents("div.DTE").length||e(d.target).parents("div.editor-datetime").length||e(d.target).parents().filter(".DTFC_Cloned").length||a._blur()});if(this.c.editor){var j=this.c.editor;j.on("open.keyTableMain",function(b,c){"inline"!==c&&a.s.enable&&(a.enable(!1),j.one("close"+d,function(){a.enable(!0)}))});if(this.c.editOnFocus)b.on("key-focus"+d+" key-refocus"+d,function(b,d,c,f){a._editor(null,f,!0)});b.on("key"+d,function(b,d,c,f,e){a._editor(c,e,!1)});e(b.table().body()).on("dblclick"+
-d,"th, td",function(d){!1!==a.s.enable&&b.cell(this).any()&&a._editor(null,d,!0)});j.on("preSubmit",function(){f=!0}).on("preSubmitCancelled",function(){f=!1}).on("submitComplete",function(){f=!1})}if(b.settings()[0].oFeatures.bStateSave)b.on("stateSaveParams"+d,function(b,d,c){c.keyTable=a.s.lastFocus?a.s.lastFocus.cell.index():null});b.on("column-visibility"+d,function(){a._tabInput()});b.on("draw"+d,function(d){a._tabInput();if(!a.s.focusDraw){var c=a.s.lastFocus;if(c&&c.node&&e(c.node).closest("body")===
-i.body){var c=a.s.lastFocus.relative,f=b.page.info(),g=c.row+f.start;0!==f.recordsDisplay&&(g>=f.recordsDisplay&&(g=f.recordsDisplay-1),a._focus(g,c.column,!0,d))}}});this.c.clipboard&&this._clipboard();b.on("destroy"+d,function(){a._blur(!0);b.off(d);e(b.table().body()).off("click"+d,"th, td").off("dblclick"+d,"th, td");e(i).off("mousedown"+d).off("keydown"+d).off("copy"+d).off("paste"+d)});var g=b.state.loaded();if(g&&g.keyTable)b.one("init",function(){var a=b.cell(g.keyTable);a.any()&&a.focus()});
+d,"th, td",function(d){!1!==a.s.enable&&b.cell(this).any()&&(a.s.lastFocus&&this!==a.s.lastFocus.cell.node()||a._editor(null,d,!0))});j.on("preSubmit",function(){f=!0}).on("preSubmitCancelled",function(){f=!1}).on("submitComplete",function(){f=!1})}if(b.settings()[0].oFeatures.bStateSave)b.on("stateSaveParams"+d,function(b,d,c){c.keyTable=a.s.lastFocus?a.s.lastFocus.cell.index():null});b.on("column-visibility"+d,function(){a._tabInput()});b.on("draw"+d,function(d){a._tabInput();if(!a.s.focusDraw&&
+a.s.lastFocus){var c=a.s.lastFocus.relative,f=b.page.info(),e=c.row+f.start;0!==f.recordsDisplay&&(e>=f.recordsDisplay&&(e=f.recordsDisplay-1),a._focus(e,c.column,!0,d))}});this.c.clipboard&&this._clipboard();b.on("destroy"+d,function(){a._blur(!0);b.off(d);e(b.table().body()).off("click"+d,"th, td").off("dblclick"+d,"th, td");e(i).off("mousedown"+d).off("keydown"+d).off("copy"+d).off("paste"+d)});var g=b.state.loaded();if(g&&g.keyTable)b.one("init",function(){var a=b.cell(g.keyTable);a.any()&&a.focus()});
 else this.c.focus&&b.cell(this.c.focus).focus()},_blur:function(a){if(this.s.enable&&this.s.lastFocus){var b=this.s.lastFocus.cell;e(b.node()).removeClass(this.c.className);this.s.lastFocus=null;a||(this._updateFixedColumns(b.index().column),this._emitEvent("key-blur",[this.s.dt,b]))}},_clipboard:function(){var a=this.s.dt,b=this,c=this.s.namespace;k.getSelection&&(e(i).on("copy"+c,function(a){var a=a.originalEvent,c=k.getSelection().toString(),e=b.s.lastFocus;!c&&e&&(a.clipboardData.setData("text/plain",
 e.cell.render(b.c.clipboardOrthogonal)),a.preventDefault())}),e(i).on("paste"+c,function(d){var d=d.originalEvent,c=b.s.lastFocus,e=i.activeElement,g=b.c.editor,h;if(c&&(!e||"body"===e.nodeName.toLowerCase()))d.preventDefault(),k.clipboardData&&k.clipboardData.getData?h=k.clipboardData.getData("Text"):d.clipboardData&&d.clipboardData.getData&&(h=d.clipboardData.getData("text/plain")),g?g.inline(c.cell.index()).set(g.displayed()[0],h).submit():(c.cell.data(h),a.draw(!1))}))},_columns:function(){var a=
-this.s.dt,b=a.columns(this.c.columns).indexes(),c=[];a.columns(":visible").every(function(a){-1!==b.indexOf(a)&&c.push(a)});return c},_editor:function(a,b,c){if(this.s.lastFocus){var d=this,f=this.s.dt,j=this.c.editor,g=this.s.lastFocus.cell,h=this.s.namespace;if(!e("div.DTE",g.node()).length&&!(null!==a&&(0<=a&&9>=a||11===a||12===a||14<=a&&31>=a||112<=a&&123>=a||127<=a&&159>=a))){b.stopPropagation();13===a&&b.preventDefault();var n=function(){j.one("open"+h,function(){j.off("cancelOpen"+h);c||e("div.DTE_Field_InputControl input, div.DTE_Field_InputControl textarea").select();
-f.keys.enable(c?"tab-only":"navigation-only");f.on("key-blur.editor",function(a,b,c){j.displayed()&&c.node()===g.node()&&j.submit()});c&&e(f.table().container()).addClass("dtk-focus-alt");j.on("preSubmitCancelled"+h,function(){setTimeout(function(){d._focus(g,null,!1)},50)});j.on("submitUnsuccessful"+h,function(){d._focus(g,null,!1)});j.one("close",function(){f.keys.enable(!0);f.off("key-blur.editor");j.off(h);e(f.table().container()).removeClass("dtk-focus-alt")})}).one("cancelOpen"+h,function(){j.off(h)}).inline(g.index())};
-13===a?(c=!0,e(i).one("keyup",function(){n()})):n()}}},_emitEvent:function(a,b){this.s.dt.iterator("table",function(c){e(c.nTable).triggerHandler(a,b)})},_focus:function(a,b,c,d){var f=this,j=this.s.dt,g=j.page.info(),h=this.s.lastFocus;d||(d=null);if(this.s.enable){if("number"!==typeof a){if(!a.any())return;var n=a.index(),b=n.column,a=j.rows({filter:"applied",order:"applied"}).indexes().indexOf(n.row);if(0>a)return;g.serverSide&&(a+=g.start)}if(-1!==g.length&&(a<g.start||a>=g.start+g.length))this.s.focusDraw=
-!0,this.s.waitingForDraw=!0,j.one("draw",function(){f.s.focusDraw=!1;f.s.waitingForDraw=!1;f._focus(a,b,o,d)}).page(Math.floor(a/g.length)).draw(!1);else if(-1!==e.inArray(b,this._columns())){g.serverSide&&(a-=g.start);g=j.cells(null,b,{search:"applied",order:"applied"}).flatten();g=j.cell(g[a]);if(h){if(h.node===g.node()){this._emitEvent("key-refocus",[this.s.dt,g,d||null]);return}this._blur()}this._removeOtherFocus();h=e(g.node());h.addClass(this.c.className);this._updateFixedColumns(b);if(c===
-o||!0===c)this._scroll(e(k),e(i.body),h,"offset"),c=j.table().body().parentNode,c!==j.table().header().parentNode&&(c=e(c.parentNode),this._scroll(c,c,h,"position"));this.s.lastFocus={cell:g,node:g.node(),relative:{row:j.rows({page:"current"}).indexes().indexOf(g.index().row),column:g.index().column}};this._emitEvent("key-focus",[this.s.dt,g,d||null]);j.state.save()}}},_key:function(a){if(this.s.waitingForDraw)a.preventDefault();else{var b=this.s.enable,c=!0===b||"navigation-only"===b;if(b&&(!(0===
-a.keyCode||a.ctrlKey||a.metaKey||a.altKey)||a.ctrlKey&&a.altKey)){var d=this.s.lastFocus;if(d)if(this.s.dt.cell(d.node).any()){var d=this.s.dt,f=this.s.dt.settings()[0].oScroll.sY?!0:!1;if(!(this.c.keys&&-1===e.inArray(a.keyCode,this.c.keys)))switch(a.keyCode){case 9:this._shift(a,a.shiftKey?"left":"right",!0);break;case 27:this.s.blurable&&!0===b&&this._blur();break;case 33:case 34:c&&!f&&(a.preventDefault(),d.page(33===a.keyCode?"previous":"next").draw(!1));break;case 35:case 36:c&&(a.preventDefault(),
-b=d.cells({page:"current"}).indexes(),c=this._columns(),this._focus(d.cell(b[35===a.keyCode?b.length-1:c[0]]),null,!0,a));break;case 37:c&&this._shift(a,"left");break;case 38:c&&this._shift(a,"up");break;case 39:c&&this._shift(a,"right");break;case 40:c&&this._shift(a,"down");break;case 113:if(this.c.editor){this._editor(null,a,!0);break}default:!0===b&&this._emitEvent("key",[d,a.keyCode,this.s.lastFocus.cell,a])}}else this.s.lastFocus=null}}},_removeOtherFocus:function(){var a=this.s.dt.table().node();
-e.fn.dataTable.tables({api:!0}).iterator("table",function(){this.table().node()!==a&&this.cell.blur()})},_scroll:function(a,b,c,d){var f=c[d](),e=c.outerHeight(),g=c.outerWidth(),h=b.scrollTop(),n=b.scrollLeft(),i=a.height(),a=a.width();"position"===d&&(f.top+=parseInt(c.closest("table").css("top"),10));f.top<h&&b.scrollTop(f.top);f.left<n&&b.scrollLeft(f.left);f.top+e>h+i&&e<i&&b.scrollTop(f.top+e-i);f.left+g>n+a&&g<a&&b.scrollLeft(f.left+g-a)},_shift:function(a,b,c){var d=this.s.dt,f=d.page.info(),
-j=f.recordsDisplay,g=this.s.lastFocus.cell,h=this._columns();if(g){var i=d.rows({filter:"applied",order:"applied"}).indexes().indexOf(g.index().row);f.serverSide&&(i+=f.start);d=d.columns(h).indexes().indexOf(g.index().column);f=h[d];"right"===b?d>=h.length-1?(i++,f=h[0]):f=h[d+1]:"left"===b?0===d?(i--,f=h[h.length-1]):f=h[d-1]:"up"===b?i--:"down"===b&&i++;0<=i&&i<j&&-1!==e.inArray(f,h)?(a&&a.preventDefault(),this._focus(i,f,!0,a)):!c||!this.c.blurable?a&&a.preventDefault():this._blur()}},_tabInput:function(){var a=
-this,b=this.s.dt,c=null!==this.c.tabIndex?this.c.tabIndex:b.settings()[0].iTabIndex;-1!=c&&(this.s.tabInput||(c=e('<div><input type="text" tabindex="'+c+'"/></div>').css({position:"absolute",height:1,width:0,overflow:"hidden"}),c.children().on("focus",function(c){var f=b.cell(":eq(0)",a._columns(),{page:"current"});f.any()&&a._focus(f,null,!0,c)}),this.s.tabInput=c),(c=this.s.dt.cell(":eq(0)","0:visible",{page:"current",order:"current"}).node())&&e(c).prepend(this.s.tabInput))},_updateFixedColumns:function(a){var b=
-this.s.dt,c=b.settings()[0];if(c._oFixedColumns){var d=c.aoColumns.length-c._oFixedColumns.s.iRightColumns;(a<c._oFixedColumns.s.iLeftColumns||a>=d)&&b.fixedColumns().update()}}});m.defaults={blurable:!0,className:"focus",clipboard:!0,clipboardOrthogonal:"display",columns:"",editor:null,editOnFocus:!1,focus:null,keys:null,tabIndex:null};m.version="2.5.2";e.fn.dataTable.KeyTable=m;e.fn.DataTable.KeyTable=m;l.Api.register("cell.blur()",function(){return this.iterator("table",function(a){a.keytable&&
-a.keytable.blur()})});l.Api.register("cell().focus()",function(){return this.iterator("cell",function(a,b,c){a.keytable&&a.keytable.focus(b,c)})});l.Api.register("keys.disable()",function(){return this.iterator("table",function(a){a.keytable&&a.keytable.enable(!1)})});l.Api.register("keys.enable()",function(a){return this.iterator("table",function(b){b.keytable&&b.keytable.enable(a===o?!0:a)})});l.Api.register("keys.move()",function(a){return this.iterator("table",function(b){b.keytable&&b.keytable._shift(null,
-a,!1)})});l.ext.selector.cell.push(function(a,b,c){var b=b.focused,a=a.keytable,d=[];if(!a||b===o)return c;for(var f=0,e=c.length;f<e;f++)(!0===b&&a.focused(c[f])||!1===b&&!a.focused(c[f]))&&d.push(c[f]);return d});e(i).on("preInit.dt.dtk",function(a,b){if("dt"===a.namespace){var c=b.oInit.keys,d=l.defaults.keys;if(c||d)d=e.extend({},d,c),!1!==c&&new m(b,d)}});return m});
+this.s.dt,b=a.columns(this.c.columns).indexes(),c=[];a.columns(":visible").every(function(a){-1!==b.indexOf(a)&&c.push(a)});return c},_editor:function(a,b,c){if(this.s.lastFocus){var d=this,f=this.s.dt,j=this.c.editor,g=this.s.lastFocus.cell,h=this.s.namespace+"e"+q++;if(!e("div.DTE",g.node()).length&&!(null!==a&&(0<=a&&9>=a||11===a||12===a||14<=a&&31>=a||112<=a&&123>=a||127<=a&&159>=a))){b.stopPropagation();13===a&&b.preventDefault();var n=function(){j.one("open"+h,function(){j.off("cancelOpen"+
+h);c||e("div.DTE_Field_InputControl input, div.DTE_Field_InputControl textarea").select();f.keys.enable(c?"tab-only":"navigation-only");f.on("key-blur.editor",function(a,b,c){j.displayed()&&c.node()===g.node()&&j.submit()});c&&e(f.table().container()).addClass("dtk-focus-alt");j.on("preSubmitCancelled"+h,function(){setTimeout(function(){d._focus(g,null,!1)},50)});j.on("submitUnsuccessful"+h,function(){d._focus(g,null,!1)});j.one("close"+h,function(){f.keys.enable(!0);f.off("key-blur.editor");j.off(h);
+e(f.table().container()).removeClass("dtk-focus-alt")})}).one("cancelOpen"+h,function(){j.off(h)}).inline(g.index())};13===a?(c=!0,e(i).one("keyup",function(){n()})):n()}}},_emitEvent:function(a,b){this.s.dt.iterator("table",function(c){e(c.nTable).triggerHandler(a,b)})},_focus:function(a,b,c,d){var f=this,j=this.s.dt,g=j.page.info(),h=this.s.lastFocus;d||(d=null);if(this.s.enable){if("number"!==typeof a){if(!a.any())return;var n=a.index(),b=n.column,a=j.rows({filter:"applied",order:"applied"}).indexes().indexOf(n.row);
+if(0>a)return;g.serverSide&&(a+=g.start)}if(-1!==g.length&&(a<g.start||a>=g.start+g.length))this.s.focusDraw=!0,this.s.waitingForDraw=!0,j.one("draw",function(){f.s.focusDraw=!1;f.s.waitingForDraw=!1;f._focus(a,b,o,d)}).page(Math.floor(a/g.length)).draw(!1);else if(-1!==e.inArray(b,this._columns())){g.serverSide&&(a-=g.start);g=j.cells(null,b,{search:"applied",order:"applied"}).flatten();g=j.cell(g[a]);if(h){if(h.node===g.node()){this._emitEvent("key-refocus",[this.s.dt,g,d||null]);return}this._blur()}this._removeOtherFocus();
+h=e(g.node());h.addClass(this.c.className);this._updateFixedColumns(b);if(c===o||!0===c)this._scroll(e(k),e(i.body),h,"offset"),c=j.table().body().parentNode,c!==j.table().header().parentNode&&(c=e(c.parentNode),this._scroll(c,c,h,"position"));this.s.lastFocus={cell:g,node:g.node(),relative:{row:j.rows({page:"current"}).indexes().indexOf(g.index().row),column:g.index().column}};this._emitEvent("key-focus",[this.s.dt,g,d||null]);j.state.save()}}},_key:function(a){if(this.s.waitingForDraw)a.preventDefault();
+else{var b=this.s.enable,c=!0===b||"navigation-only"===b;if(b&&(!(0===a.keyCode||a.ctrlKey||a.metaKey||a.altKey)||a.ctrlKey&&a.altKey)){var d=this.s.lastFocus;if(d)if(this.s.dt.cell(d.node).any()){var d=this.s.dt,f=this.s.dt.settings()[0].oScroll.sY?!0:!1;if(!(this.c.keys&&-1===e.inArray(a.keyCode,this.c.keys)))switch(a.keyCode){case 9:this._shift(a,a.shiftKey?"left":"right",!0);break;case 27:this.s.blurable&&!0===b&&this._blur();break;case 33:case 34:c&&!f&&(a.preventDefault(),d.page(33===a.keyCode?
+"previous":"next").draw(!1));break;case 35:case 36:c&&(a.preventDefault(),b=d.cells({page:"current"}).indexes(),c=this._columns(),this._focus(d.cell(b[35===a.keyCode?b.length-1:c[0]]),null,!0,a));break;case 37:c&&this._shift(a,"left");break;case 38:c&&this._shift(a,"up");break;case 39:c&&this._shift(a,"right");break;case 40:c&&this._shift(a,"down");break;case 113:if(this.c.editor){this._editor(null,a,!0);break}default:!0===b&&this._emitEvent("key",[d,a.keyCode,this.s.lastFocus.cell,a])}}else this.s.lastFocus=
+null}}},_removeOtherFocus:function(){var a=this.s.dt.table().node();e.fn.dataTable.tables({api:!0}).iterator("table",function(){this.table().node()!==a&&this.cell.blur()})},_scroll:function(a,b,c,d){var f=c[d](),e=c.outerHeight(),g=c.outerWidth(),h=b.scrollTop(),n=b.scrollLeft(),i=a.height(),a=a.width();"position"===d&&(f.top+=parseInt(c.closest("table").css("top"),10));f.top<h&&b.scrollTop(f.top);f.left<n&&b.scrollLeft(f.left);f.top+e>h+i&&e<i&&b.scrollTop(f.top+e-i);f.left+g>n+a&&g<a&&b.scrollLeft(f.left+
+g-a)},_shift:function(a,b,c){var d=this.s.dt,f=d.page.info(),j=f.recordsDisplay,g=this.s.lastFocus.cell,h=this._columns();if(g){var i=d.rows({filter:"applied",order:"applied"}).indexes().indexOf(g.index().row);f.serverSide&&(i+=f.start);d=d.columns(h).indexes().indexOf(g.index().column);f=h[d];"right"===b?d>=h.length-1?(i++,f=h[0]):f=h[d+1]:"left"===b?0===d?(i--,f=h[h.length-1]):f=h[d-1]:"up"===b?i--:"down"===b&&i++;0<=i&&i<j&&-1!==e.inArray(f,h)?(a&&a.preventDefault(),this._focus(i,f,!0,a)):!c||
+!this.c.blurable?a&&a.preventDefault():this._blur()}},_tabInput:function(){var a=this,b=this.s.dt,c=null!==this.c.tabIndex?this.c.tabIndex:b.settings()[0].iTabIndex;-1!=c&&(this.s.tabInput||(c=e('<div><input type="text" tabindex="'+c+'"/></div>').css({position:"absolute",height:1,width:0,overflow:"hidden"}),c.children().on("focus",function(c){var e=b.cell(":eq(0)",a._columns(),{page:"current"});e.any()&&a._focus(e,null,!0,c)}),this.s.tabInput=c),(c=this.s.dt.cell(":eq(0)","0:visible",{page:"current",
+order:"current"}).node())&&e(c).prepend(this.s.tabInput))},_updateFixedColumns:function(a){var b=this.s.dt,c=b.settings()[0];if(c._oFixedColumns){var d=c.aoColumns.length-c._oFixedColumns.s.iRightColumns;(a<c._oFixedColumns.s.iLeftColumns||a>=d)&&b.fixedColumns().update()}}});m.defaults={blurable:!0,className:"focus",clipboard:!0,clipboardOrthogonal:"display",columns:"",editor:null,editOnFocus:!1,focus:null,keys:null,tabIndex:null};m.version="2.5.3";e.fn.dataTable.KeyTable=m;e.fn.DataTable.KeyTable=
+m;l.Api.register("cell.blur()",function(){return this.iterator("table",function(a){a.keytable&&a.keytable.blur()})});l.Api.register("cell().focus()",function(){return this.iterator("cell",function(a,b,c){a.keytable&&a.keytable.focus(b,c)})});l.Api.register("keys.disable()",function(){return this.iterator("table",function(a){a.keytable&&a.keytable.enable(!1)})});l.Api.register("keys.enable()",function(a){return this.iterator("table",function(b){b.keytable&&b.keytable.enable(a===o?!0:a)})});l.Api.register("keys.move()",
+function(a){return this.iterator("table",function(b){b.keytable&&b.keytable._shift(null,a,!1)})});l.ext.selector.cell.push(function(a,b,c){var b=b.focused,a=a.keytable,d=[];if(!a||b===o)return c;for(var e=0,i=c.length;e<i;e++)(!0===b&&a.focused(c[e])||!1===b&&!a.focused(c[e]))&&d.push(c[e]);return d});e(i).on("preInit.dt.dtk",function(a,b){if("dt"===a.namespace){var c=b.oInit.keys,d=l.defaults.keys;if(c||d)d=e.extend({},d,c),!1!==c&&new m(b,d)}});return m});

+ 20 - 14
plugins/datatables-responsive/css/responsive.bootstrap4.css

@@ -18,20 +18,20 @@ table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td.dtr-control:b
 table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th.dtr-control:before {
   top: 50%;
   left: 5px;
-  height: 14px;
-  width: 14px;
+  height: 1em;
+  width: 1em;
   margin-top: -9px;
   display: block;
   position: absolute;
   color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
+  border: 0.15em solid white;
+  border-radius: 1em;
+  box-shadow: 0 0 0.2em #444;
   box-sizing: content-box;
   text-align: center;
   text-indent: 0 !important;
   font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
+  line-height: 1em;
   content: '+';
   background-color: #0275d8;
 }
@@ -53,33 +53,39 @@ table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:befor
   line-height: 14px;
   text-indent: 3px;
 }
+table.dataTable.dtr-column > tbody > tr > td.dtr-control,
+table.dataTable.dtr-column > tbody > tr > th.dtr-control,
 table.dataTable.dtr-column > tbody > tr > td.control,
 table.dataTable.dtr-column > tbody > tr > th.control {
   position: relative;
   cursor: pointer;
 }
+table.dataTable.dtr-column > tbody > tr > td.dtr-control:before,
+table.dataTable.dtr-column > tbody > tr > th.dtr-control:before,
 table.dataTable.dtr-column > tbody > tr > td.control:before,
 table.dataTable.dtr-column > tbody > tr > th.control:before {
   top: 50%;
   left: 50%;
-  height: 16px;
-  width: 16px;
-  margin-top: -10px;
-  margin-left: -10px;
+  height: 0.8em;
+  width: 0.8em;
+  margin-top: -0.5em;
+  margin-left: -0.5em;
   display: block;
   position: absolute;
   color: white;
-  border: 2px solid white;
-  border-radius: 14px;
-  box-shadow: 0 0 3px #444;
+  border: 0.15em solid white;
+  border-radius: 1em;
+  box-shadow: 0 0 0.2em #444;
   box-sizing: content-box;
   text-align: center;
   text-indent: 0 !important;
   font-family: 'Courier New', Courier, monospace;
-  line-height: 14px;
+  line-height: 1em;
   content: '+';
   background-color: #0275d8;
 }
+table.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,
+table.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,
 table.dataTable.dtr-column > tbody > tr.parent td.control:before,
 table.dataTable.dtr-column > tbody > tr.parent th.control:before {
   content: '-';

Plik diff jest za duży
+ 0 - 0
plugins/datatables-responsive/css/responsive.bootstrap4.min.css


+ 8 - 6
plugins/datatables-responsive/js/dataTables.responsive.js

@@ -1,11 +1,11 @@
-/*! Responsive 2.2.5
+/*! Responsive 2.2.6
  * 2014-2020 SpryMedia Ltd - datatables.net/license
  */
 
 /**
  * @summary     Responsive
  * @description Responsive tables plug-in for DataTables
- * @version     2.2.5
+ * @version     2.2.6
  * @file        dataTables.responsive.js
  * @author      SpryMedia Ltd (www.sprymedia.co.uk)
  * @contact     www.sprymedia.co.uk/contact
@@ -220,7 +220,7 @@ $.extend( Responsive.prototype, {
 
 					that._classLogic();
 					that._resizeAuto();
-					that._resize();
+					that._resize(true);
 
 					that._redrawChildren();
 				}, 100 );
@@ -522,7 +522,7 @@ $.extend( Responsive.prototype, {
 
 			// Split the class name up so multiple rules can be applied if needed
 			for ( var k=0, ken=classNames.length ; k<ken ; k++ ) {
-				var className = $.trim( classNames[k] );
+				var className = classNames[k].trim();
 
 				if ( className === 'all' ) {
 					// Include in all
@@ -537,7 +537,7 @@ $.extend( Responsive.prototype, {
 					hasClass = true;
 					return;
 				}
-				else if ( className === 'control' ) {
+				else if ( className === 'control' || className === 'dtr-control' ) {
 					// Special column that is only visible, when one of the other
 					// columns is hidden. This is used for the details control
 					hasClass = true;
@@ -855,6 +855,8 @@ $.extend( Responsive.prototype, {
 				$('td', dt.table().body()).eq(0).attr('colspan', visible);
 			}
 		}
+
+		that._controlClass();
 	},
 
 
@@ -1441,7 +1443,7 @@ Api.registerPlural( 'columns().responsiveHidden()', 'column().responsiveHidden()
  * @name Responsive.version
  * @static
  */
-Responsive.version = '2.2.5';
+Responsive.version = '2.2.6';
 
 
 $.fn.dataTable.Responsive = Responsive;

+ 7 - 7
plugins/datatables-responsive/js/dataTables.responsive.min.js

@@ -1,23 +1,23 @@
 /*!
- Responsive 2.2.5
+ Responsive 2.2.6
  2014-2020 SpryMedia Ltd - datatables.net/license
 */
 (function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(m){return d(m,window,document)}):"object"===typeof exports?module.exports=function(m,l){m||(m=window);if(!l||!l.fn.dataTable)l=require("datatables.net")(m,l).$;return d(l,m,m.document)}:d(jQuery,window,document)})(function(d,m,l,q){function t(a,b,c){var e=b+"-"+c;if(n[e])return n[e];for(var d=[],a=a.cell(b,c).node().childNodes,b=0,c=a.length;b<c;b++)d.push(a[b]);return n[e]=d}function r(a,b,c){var e=b+
 "-"+c;if(n[e]){for(var a=a.cell(b,c).node(),c=n[e][0].parentNode.childNodes,b=[],d=0,g=c.length;d<g;d++)b.push(c[d]);c=0;for(d=b.length;c<d;c++)a.appendChild(b[c]);n[e]=q}}var o=d.fn.dataTable,i=function(a,b){if(!o.versionCheck||!o.versionCheck("1.10.10"))throw"DataTables Responsive requires DataTables 1.10.10 or newer";this.s={dt:new o.Api(a),columns:[],current:[]};this.s.dt.settings()[0].responsive||(b&&"string"===typeof b.details?b.details={type:b.details}:b&&!1===b.details?b.details={type:!1}:
 b&&!0===b.details&&(b.details={type:"inline"}),this.c=d.extend(!0,{},i.defaults,o.defaults.responsive,b),a.responsive=this,this._constructor())};d.extend(i.prototype,{_constructor:function(){var a=this,b=this.s.dt,c=b.settings()[0],e=d(m).innerWidth();b.settings()[0]._responsive=this;d(m).on("resize.dtr orientationchange.dtr",o.util.throttle(function(){var b=d(m).innerWidth();b!==e&&(a._resize(),e=b)}));c.oApi._fnCallbackReg(c,"aoRowCreatedCallback",function(c){-1!==d.inArray(!1,a.s.current)&&d(">td, >th",
 c).each(function(c){c=b.column.index("toData",c);!1===a.s.current[c]&&d(this).css("display","none")})});b.on("destroy.dtr",function(){b.off(".dtr");d(b.table().body()).off(".dtr");d(m).off("resize.dtr orientationchange.dtr");b.cells(".dtr-control").nodes().to$().removeClass("dtr-control");d.each(a.s.current,function(b,c){!1===c&&a._setColumnVis(b,!0)})});this.c.breakpoints.sort(function(a,b){return a.width<b.width?1:a.width>b.width?-1:0});this._classLogic();this._resizeAuto();c=this.c.details;!1!==
-c.type&&(a._detailsInit(),b.on("column-visibility.dtr",function(){a._timer&&clearTimeout(a._timer);a._timer=setTimeout(function(){a._timer=null;a._classLogic();a._resizeAuto();a._resize();a._redrawChildren()},100)}),b.on("draw.dtr",function(){a._redrawChildren()}),d(b.table().node()).addClass("dtr-"+c.type));b.on("column-reorder.dtr",function(){a._classLogic();a._resizeAuto();a._resize(true)});b.on("column-sizing.dtr",function(){a._resizeAuto();a._resize()});b.on("preXhr.dtr",function(){var c=[];
+c.type&&(a._detailsInit(),b.on("column-visibility.dtr",function(){a._timer&&clearTimeout(a._timer);a._timer=setTimeout(function(){a._timer=null;a._classLogic();a._resizeAuto();a._resize(!0);a._redrawChildren()},100)}),b.on("draw.dtr",function(){a._redrawChildren()}),d(b.table().node()).addClass("dtr-"+c.type));b.on("column-reorder.dtr",function(){a._classLogic();a._resizeAuto();a._resize(true)});b.on("column-sizing.dtr",function(){a._resizeAuto();a._resize()});b.on("preXhr.dtr",function(){var c=[];
 b.rows().every(function(){this.child.isShown()&&c.push(this.id(true))});b.one("draw.dtr",function(){a._resizeAuto();a._resize();b.rows(c).every(function(){a._detailsDisplay(this,false)})})});b.on("draw.dtr",function(){a._controlClass()}).on("init.dtr",function(c){if(c.namespace==="dt"){a._resizeAuto();a._resize();d.inArray(false,a.s.current)&&b.columns.adjust()}});this._resize()},_columnsVisiblity:function(a){var b=this.s.dt,c=this.s.columns,e,f,g=c.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a,
 b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),j=d.map(c,function(c,e){return!1===b.column(e).visible()?"not-visible":c.auto&&null===c.minWidth?!1:!0===c.auto?"-":-1!==d.inArray(a,c.includeIn)}),h=0;e=0;for(f=j.length;e<f;e++)!0===j[e]&&(h+=c[e].minWidth);e=b.settings()[0].oScroll;e=e.sY||e.sX?e.iBarWidth:0;h=b.table().container().offsetWidth-e-h;e=0;for(f=j.length;e<f;e++)c[e].control&&(h-=c[e].minWidth);var s=!1;e=0;for(f=g.length;e<f;e++){var k=g[e].columnIdx;
 "-"===j[k]&&(!c[k].control&&c[k].minWidth)&&(s||0>h-c[k].minWidth?(s=!0,j[k]=!1):j[k]=!0,h-=c[k].minWidth)}g=!1;e=0;for(f=c.length;e<f;e++)if(!c[e].control&&!c[e].never&&!1===j[e]){g=!0;break}e=0;for(f=c.length;e<f;e++)c[e].control&&(j[e]=g),"not-visible"===j[e]&&(j[e]=!1);-1===d.inArray(!0,j)&&(j[0]=!0);return j},_classLogic:function(){var a=this,b=this.c.breakpoints,c=this.s.dt,e=c.columns().eq(0).map(function(a){var b=this.column(a),e=b.header().className,a=c.settings()[0].aoColumns[a].responsivePriority,
 b=b.header().getAttribute("data-priority");a===q&&(a=b===q||null===b?1E4:1*b);return{className:e,includeIn:[],auto:!1,control:!1,never:e.match(/\bnever\b/)?!0:!1,priority:a}}),f=function(a,b){var c=e[a].includeIn;-1===d.inArray(b,c)&&c.push(b)},g=function(c,d,g,k){if(g)if("max-"===g){k=a._find(d).width;d=0;for(g=b.length;d<g;d++)b[d].width<=k&&f(c,b[d].name)}else if("min-"===g){k=a._find(d).width;d=0;for(g=b.length;d<g;d++)b[d].width>=k&&f(c,b[d].name)}else{if("not-"===g){d=0;for(g=b.length;d<g;d++)-1===
-b[d].name.indexOf(k)&&f(c,b[d].name)}}else e[c].includeIn.push(d)};e.each(function(a,c){for(var e=a.className.split(" "),f=!1,i=0,m=e.length;i<m;i++){var l=d.trim(e[i]);if("all"===l){f=!0;a.includeIn=d.map(b,function(a){return a.name});return}if("none"===l||a.never){f=!0;return}if("control"===l){f=!0;a.control=!0;return}d.each(b,function(a,b){var d=b.name.split("-"),e=l.match(RegExp("(min\\-|max\\-|not\\-)?("+d[0]+")(\\-[_a-zA-Z0-9])?"));e&&(f=!0,e[2]===d[0]&&e[3]==="-"+d[1]?g(c,b.name,e[1],e[2]+
-e[3]):e[2]===d[0]&&!e[3]&&g(c,b.name,e[1],e[2]))})}f||(a.auto=!0)});this.s.columns=e},_controlClass:function(){if("inline"===this.c.details.type){var a=this.s.dt,b=d.inArray(!0,this.s.current);a.cells(null,function(a){return a!==b},{page:"current"}).nodes().to$().filter(".dtr-control").removeClass("dtr-control");a.cells(null,b,{page:"current"}).nodes().to$().addClass("dtr-control")}},_detailsDisplay:function(a,b){var c=this,e=this.s.dt,f=this.c.details;if(f&&!1!==f.type){var g=f.display(a,b,function(){return f.renderer(e,
-a[0],c._detailsObj(a[0]))});(!0===g||!1===g)&&d(e.table().node()).triggerHandler("responsive-display.dt",[e,a,g,b])}},_detailsInit:function(){var a=this,b=this.s.dt,c=this.c.details;"inline"===c.type&&(c.target="td.dtr-control, th.dtr-control");b.on("draw.dtr",function(){a._tabIndexes()});a._tabIndexes();d(b.table().body()).on("keyup.dtr","td, th",function(a){a.keyCode===13&&d(this).data("dtr-keyboard")&&d(this).click()});var e=c.target;if(e!==q||null!==e)d(b.table().body()).on("click.dtr mousedown.dtr mouseup.dtr",
+b[d].name.indexOf(k)&&f(c,b[d].name)}}else e[c].includeIn.push(d)};e.each(function(a,c){for(var e=a.className.split(" "),f=!1,i=0,m=e.length;i<m;i++){var l=e[i].trim();if("all"===l){f=!0;a.includeIn=d.map(b,function(a){return a.name});return}if("none"===l||a.never){f=!0;return}if("control"===l||"dtr-control"===l){f=!0;a.control=!0;return}d.each(b,function(a,b){var d=b.name.split("-"),e=l.match(RegExp("(min\\-|max\\-|not\\-)?("+d[0]+")(\\-[_a-zA-Z0-9])?"));e&&(f=!0,e[2]===d[0]&&e[3]==="-"+d[1]?g(c,
+b.name,e[1],e[2]+e[3]):e[2]===d[0]&&!e[3]&&g(c,b.name,e[1],e[2]))})}f||(a.auto=!0)});this.s.columns=e},_controlClass:function(){if("inline"===this.c.details.type){var a=this.s.dt,b=d.inArray(!0,this.s.current);a.cells(null,function(a){return a!==b},{page:"current"}).nodes().to$().filter(".dtr-control").removeClass("dtr-control");a.cells(null,b,{page:"current"}).nodes().to$().addClass("dtr-control")}},_detailsDisplay:function(a,b){var c=this,e=this.s.dt,f=this.c.details;if(f&&!1!==f.type){var g=f.display(a,
+b,function(){return f.renderer(e,a[0],c._detailsObj(a[0]))});(!0===g||!1===g)&&d(e.table().node()).triggerHandler("responsive-display.dt",[e,a,g,b])}},_detailsInit:function(){var a=this,b=this.s.dt,c=this.c.details;"inline"===c.type&&(c.target="td.dtr-control, th.dtr-control");b.on("draw.dtr",function(){a._tabIndexes()});a._tabIndexes();d(b.table().body()).on("keyup.dtr","td, th",function(a){a.keyCode===13&&d(this).data("dtr-keyboard")&&d(this).click()});var e=c.target;if(e!==q||null!==e)d(b.table().body()).on("click.dtr mousedown.dtr mouseup.dtr",
 "string"===typeof e?e:"td, th",function(c){if(d(b.table().node()).hasClass("collapsed")&&d.inArray(d(this).closest("tr").get(0),b.rows().nodes().toArray())!==-1){if(typeof e==="number"){var g=e<0?b.columns().eq(0).length+e:e;if(b.cell(this).index().column!==g)return}g=b.row(d(this).closest("tr"));c.type==="click"?a._detailsDisplay(g,false):c.type==="mousedown"?d(this).css("outline","none"):c.type==="mouseup"&&d(this).trigger("blur").css("outline","")}})},_detailsObj:function(a){var b=this,c=this.s.dt;
 return d.map(this.s.columns,function(e,f){if(!e.never&&!e.control){var g=c.settings()[0].aoColumns[f];return{className:g.sClass,columnIndex:f,data:c.cell(a,f).render(b.c.orthogonal),hidden:c.column(f).visible()&&!b.s.current[f],rowIndex:a,title:null!==g.sTitle?g.sTitle:d(c.column(f).header()).text()}}})},_find:function(a){for(var b=this.c.breakpoints,c=0,d=b.length;c<d;c++)if(b[c].name===a)return b[c]},_redrawChildren:function(){var a=this,b=this.s.dt;b.rows({page:"current"}).iterator("row",function(c,
 d){b.row(d);a._detailsDisplay(b.row(d),!0)})},_resize:function(a){var b=this,c=this.s.dt,e=d(m).innerWidth(),f=this.c.breakpoints,g=f[0].name,j=this.s.columns,h,i=this.s.current.slice();for(h=f.length-1;0<=h;h--)if(e<=f[h].width){g=f[h].name;break}var k=this._columnsVisiblity(g);this.s.current=k;f=!1;h=0;for(e=j.length;h<e;h++)if(!1===k[h]&&!j[h].never&&!j[h].control&&!1===!c.column(h).visible()){f=!0;break}d(c.table().node()).toggleClass("collapsed",f);var l=!1,n=0;c.columns().eq(0).each(function(c,
-d){!0===k[d]&&n++;if(a||k[d]!==i[d])l=!0,b._setColumnVis(c,k[d])});l&&(this._redrawChildren(),d(c.table().node()).trigger("responsive-resize.dt",[c,this.s.current]),0===c.page.info().recordsDisplay&&d("td",c.table().body()).eq(0).attr("colspan",n))},_resizeAuto:function(){var a=this.s.dt,b=this.s.columns;if(this.c.auto&&-1!==d.inArray(!0,d.map(b,function(a){return a.auto}))){d.isEmptyObject(n)||d.each(n,function(b){b=b.split("-");r(a,1*b[0],1*b[1])});a.table().node();var c=a.table().node().cloneNode(!1),
+d){!0===k[d]&&n++;if(a||k[d]!==i[d])l=!0,b._setColumnVis(c,k[d])});l&&(this._redrawChildren(),d(c.table().node()).trigger("responsive-resize.dt",[c,this.s.current]),0===c.page.info().recordsDisplay&&d("td",c.table().body()).eq(0).attr("colspan",n));b._controlClass()},_resizeAuto:function(){var a=this.s.dt,b=this.s.columns;if(this.c.auto&&-1!==d.inArray(!0,d.map(b,function(a){return a.auto}))){d.isEmptyObject(n)||d.each(n,function(b){b=b.split("-");r(a,1*b[0],1*b[1])});a.table().node();var c=a.table().node().cloneNode(!1),
 e=d(a.table().header().cloneNode(!1)).appendTo(c),f=d(a.table().body()).clone(!1,!1).empty().appendTo(c);c.style.width="auto";var g=a.columns().header().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display","table-cell").css("width","auto").css("min-width",0);d(f).append(d(a.rows({page:"current"}).nodes()).clone(!1)).find("th, td").css("display","");if(f=a.table().footer()){var f=d(f.cloneNode(!1)).appendTo(c),j=a.columns().footer().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display",
 "table-cell");d("<tr/>").append(j).appendTo(f)}d("<tr/>").append(g).appendTo(e);"inline"===this.c.details.type&&d(c).addClass("dtr-inline collapsed");d(c).find("[name]").removeAttr("name");d(c).css("position","relative");c=d("<div/>").css({width:1,height:1,overflow:"hidden",clear:"both"}).append(c);c.insertBefore(a.table().node());g.each(function(d){d=a.column.index("fromVisible",d);b[d].minWidth=this.offsetWidth||0});c.remove()}},_responsiveOnlyHidden:function(){var a=this.s.dt;return d.map(this.s.current,
 function(b,d){return!1===a.column(d).visible()?!0:b})},_setColumnVis:function(a,b){var c=this.s.dt,e=b?"":"none";d(c.column(a).header()).css("display",e);d(c.column(a).footer()).css("display",e);c.column(a).nodes().to$().css("display",e);d.isEmptyObject(n)||c.cells(null,a).indexes().each(function(a){r(c,a.row,a.column)})},_tabIndexes:function(){var a=this.s.dt,b=a.cells({page:"current"}).nodes().to$(),c=a.settings()[0],e=this.c.details.target;b.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");
@@ -28,5 +28,5 @@ d(l).off("keypress.dtr")},g=d('<div class="dtr-modal"/>').append(d('<div class="
 b,c){return(a=d.map(c,function(a){var b=a.className?'class="'+a.className+'"':"";return a.hidden?"<li "+b+' data-dtr-index="'+a.columnIndex+'" data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><span class="dtr-title">'+a.title+'</span> <span class="dtr-data">'+a.data+"</span></li>":""}).join(""))?d('<ul data-dtr-index="'+b+'" class="dtr-details"/>').append(a):!1}},tableAll:function(a){a=d.extend({tableClass:""},a);return function(b,c,e){b=d.map(e,function(a){return"<tr "+(a.className?
 'class="'+a.className+'"':"")+' data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><td>'+a.title+":</td> <td>"+a.data+"</td></tr>"}).join("");return d('<table class="'+a.tableClass+' dtr-details" width="100%"/>').append(b)}}};i.defaults={breakpoints:i.breakpoints,auto:!0,details:{display:i.display.childRow,renderer:i.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var p=d.fn.dataTable.Api;p.register("responsive()",function(){return this});p.register("responsive.index()",
 function(a){a=d(a);return{column:a.data("dtr-index"),row:a.parent().data("dtr-index")}});p.register("responsive.rebuild()",function(){return this.iterator("table",function(a){a._responsive&&a._responsive._classLogic()})});p.register("responsive.recalc()",function(){return this.iterator("table",function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});p.register("responsive.hasHidden()",function(){var a=this.context[0];return a._responsive?-1!==d.inArray(!1,a._responsive._responsiveOnlyHidden()):
-!1});p.registerPlural("columns().responsiveHidden()","column().responsiveHidden()",function(){return this.iterator("column",function(a,b){return a._responsive?a._responsive._responsiveOnlyHidden()[b]:!1},1)});i.version="2.2.5";d.fn.dataTable.Responsive=i;d.fn.DataTable.Responsive=i;d(l).on("preInit.dt.dtr",function(a,b){if("dt"===a.namespace&&(d(b.nTable).hasClass("responsive")||d(b.nTable).hasClass("dt-responsive")||b.oInit.responsive||o.defaults.responsive)){var c=b.oInit.responsive;!1!==c&&new i(b,
+!1});p.registerPlural("columns().responsiveHidden()","column().responsiveHidden()",function(){return this.iterator("column",function(a,b){return a._responsive?a._responsive._responsiveOnlyHidden()[b]:!1},1)});i.version="2.2.6";d.fn.dataTable.Responsive=i;d.fn.DataTable.Responsive=i;d(l).on("preInit.dt.dtr",function(a,b){if("dt"===a.namespace&&(d(b.nTable).hasClass("responsive")||d(b.nTable).hasClass("dt-responsive")||b.oInit.responsive||o.defaults.responsive)){var c=b.oInit.responsive;!1!==c&&new i(b,
 d.isPlainObject(c)?c:{})}});return i});

+ 4 - 4
plugins/datatables-scroller/js/dataTables.scroller.js

@@ -1,11 +1,11 @@
-/*! Scroller 2.0.2
+/*! Scroller 2.0.3
  * ©2011-2020 SpryMedia Ltd - datatables.net/license
  */
 
 /**
  * @summary     Scroller
  * @description Virtual rendering for DataTables
- * @version     2.0.2
+ * @version     2.0.3
  * @file        dataTables.scroller.js
  * @author      SpryMedia Ltd (www.sprymedia.co.uk)
  * @contact     www.sprymedia.co.uk/contact
@@ -527,7 +527,7 @@ $.extend( Scroller.prototype, {
 		var loadedState = dt.state.loaded();
 
 		dt.on( 'stateSaveParams.scroller', function ( e, settings, data ) {
-			if ( initialStateSave ) {
+			if ( initialStateSave && loadedState ) {
 				data.scroller = loadedState.scroller;
 				initialStateSave = false;
 			}
@@ -1191,7 +1191,7 @@ Scroller.oDefaults = Scroller.defaults;
  *  @name      Scroller.version
  *  @static
  */
-Scroller.version = "2.0.2";
+Scroller.version = "2.0.3";
 
 
 

+ 3 - 3
plugins/datatables-scroller/js/dataTables.scroller.min.js

@@ -1,5 +1,5 @@
 /*!
- Scroller 2.0.2
+ Scroller 2.0.3
  ©2011-2020 SpryMedia Ltd - datatables.net/license
 */
 (function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(g){return e(g,window,document)}):"object"===typeof exports?module.exports=function(g,i){g||(g=window);if(!i||!i.fn.dataTable)i=require("datatables.net")(g,i).$;return e(i,g,g.document)}:e(jQuery,window,document)})(function(e,g,i,l){var m=e.fn.dataTable,h=function(a,b){if(this instanceof h){b===l&&(b={});var c=e.fn.dataTable.Api(a);this.s={dt:c.settings()[0],dtApi:c,tableTop:0,tableBottom:0,redrawTop:0,
@@ -10,7 +10,7 @@ loader:null};this.s.dt.oScroller||(this.s.dt.oScroller=this,this.construct())}el
 (this.s.forceReposition=!0,b=!1);b===l||b?(this.s.ani=d,e(this.dom.scroller).animate({scrollTop:f},function(){setTimeout(function(){c.s.ani=!1},250)})):e(this.dom.scroller).scrollTop(f)},construct:function(){var a=this,b=this.s.dtApi;if(this.s.dt.oFeatures.bPaginate){this.dom.force.style.position="relative";this.dom.force.style.top="0px";this.dom.force.style.left="0px";this.dom.force.style.width="1px";this.dom.scroller=e("div."+this.s.dt.oClasses.sScrollBody,this.s.dt.nTableWrapper)[0];this.dom.scroller.appendChild(this.dom.force);
 this.dom.scroller.style.position="relative";this.dom.table=e(">table",this.dom.scroller)[0];this.dom.table.style.position="absolute";this.dom.table.style.top="0px";this.dom.table.style.left="0px";e(b.table().container()).addClass("dts DTS");this.s.loadingIndicator&&(this.dom.loader=e('<div class="dataTables_processing dts_loading">'+this.s.dt.oLanguage.sLoadingRecords+"</div>").css("display","none"),e(this.dom.scroller.parentNode).css("position","relative").append(this.dom.loader));this.dom.label.appendTo(this.dom.scroller);
 this.s.heights.row&&"auto"!=this.s.heights.row&&(this.s.autoHeight=!1);this.s.ingnoreScroll=!0;e(this.dom.scroller).on("scroll.dt-scroller",function(){a._scroll.call(a)});e(this.dom.scroller).on("touchstart.dt-scroller",function(){a._scroll.call(a)});e(this.dom.scroller).on("mousedown.dt-scroller",function(){a.s.mousedown=true}).on("mouseup.dt-scroller",function(){a.s.labelVisible=false;a.s.mousedown=false;a.dom.label.css("display","none")});e(g).on("resize.dt-scroller",function(){a.measure(false);
-a._info()});var c=!0,d=b.state.loaded();b.on("stateSaveParams.scroller",function(b,e,g){if(c){g.scroller=d.scroller;c=false}else g.scroller={topRow:a.s.topRowFloat,baseScrollTop:a.s.baseScrollTop,baseRowTop:a.s.baseRowTop,scrollTop:a.s.lastScrollTop}});d&&d.scroller&&(this.s.topRowFloat=d.scroller.topRow,this.s.baseScrollTop=d.scroller.baseScrollTop,this.s.baseRowTop=d.scroller.baseRowTop);this.measure(!1);a.s.stateSaveThrottle=a.s.dt.oApi._fnThrottle(function(){a.s.dtApi.state.save()},500);b.on("init.scroller",
+a._info()});var c=!0,d=b.state.loaded();b.on("stateSaveParams.scroller",function(b,e,g){if(c&&d){g.scroller=d.scroller;c=false}else g.scroller={topRow:a.s.topRowFloat,baseScrollTop:a.s.baseScrollTop,baseRowTop:a.s.baseRowTop,scrollTop:a.s.lastScrollTop}});d&&d.scroller&&(this.s.topRowFloat=d.scroller.topRow,this.s.baseScrollTop=d.scroller.baseScrollTop,this.s.baseRowTop=d.scroller.baseRowTop);this.measure(!1);a.s.stateSaveThrottle=a.s.dt.oApi._fnThrottle(function(){a.s.dtApi.state.save()},500);b.on("init.scroller",
 function(){a.measure(false);a.s.scrollType="jump";a._draw();b.on("draw.scroller",function(){a._draw()})});b.on("preDraw.dt.scroller",function(){a._scrollForce()});b.on("destroy.scroller",function(){e(g).off("resize.dt-scroller");e(a.dom.scroller).off(".dt-scroller");e(a.s.dt.nTable).off(".scroller");e(a.s.dt.nTableWrapper).removeClass("DTS");e("div.DTS_Loading",a.dom.scroller.parentNode).remove();a.dom.table.style.position="";a.dom.table.style.top="";a.dom.table.style.left=""})}else this.s.dt.oApi._fnLog(this.s.dt,
 0,"Pagination must be enabled for Scroller")},_calcRowHeight:function(){var a=this.s.dt,b=a.nTable,c=b.cloneNode(!1),d=e("<tbody/>").appendTo(c),f=e('<div class="'+a.oClasses.sWrapper+' DTS"><div class="'+a.oClasses.sScrollWrapper+'"><div class="'+a.oClasses.sScrollBody+'"></div></div></div>');e("tbody tr:lt(4)",b).clone().appendTo(d);var k=e("tr",d).length;if(1===k)d.prepend("<tr><td>&#160;</td></tr>"),d.append("<tr><td>&#160;</td></tr>");else for(;3>k;k++)d.append("<tr><td>&#160;</td></tr>");e("div."+
 a.oClasses.sScrollBody,f).append(c);a=this.s.dt.nHolding||b.parentNode;e(a).is(":visible")||(a="body");f.find("input").removeAttr("name");f.appendTo(a);this.s.heights.row=e("tr",d).eq(1).outerHeight();f.remove()},_draw:function(){var a=this,b=this.s.heights,c=this.dom.scroller.scrollTop,d=e(this.s.dt.nTable).height(),f=this.s.dt._iDisplayStart,k=this.s.dt._iDisplayLength,g=this.s.dt.fnRecordsDisplay();this.s.skip=!0;if((this.s.dt.bSorted||this.s.dt.bFiltered)&&0===f&&!this.s.dt._drawHold)this.s.topRowFloat=
@@ -23,6 +23,6 @@ if(null===c)return 0;a=parseFloat(c[1]);c=c[2];"px"===c?b=a:"vh"===c?b=a/100*e(g
 250);this.s.scrollType=Math.abs(c-this.s.lastScrollTop)>b.viewport?"jump":"cont";this.s.topRowFloat="cont"===this.s.scrollType?this.pixelsToRow(c,!1,!1):this._domain("physicalToVirtual",c)/b.row;0>this.s.topRowFloat&&(this.s.topRowFloat=0);if(this.s.forceReposition||c<this.s.redrawTop||c>this.s.redrawBottom){if(d=Math.ceil((this.s.displayBuffer-1)/2*this.s.viewportRows),d=parseInt(this.s.topRowFloat,10)-d,this.s.forceReposition=!1,0>=d?d=0:d+this.s.dt._iDisplayLength>this.s.dt.fnRecordsDisplay()?
 (d=this.s.dt.fnRecordsDisplay()-this.s.dt._iDisplayLength,0>d&&(d=0)):0!==d%2&&d++,this.s.targetTop=d,d!=this.s.dt._iDisplayStart)if(this.s.tableTop=e(this.s.dt.nTable).offset().top,this.s.tableBottom=e(this.s.dt.nTable).height()+this.s.tableTop,d=function(){a.s.dt._iDisplayStart=a.s.targetTop;a.s.dt.oApi._fnDraw(a.s.dt)},this.s.dt.oFeatures.bServerSide?(this.s.forceReposition=!0,clearTimeout(this.s.drawTO),this.s.drawTO=setTimeout(d,this.s.serverWait)):d(),this.dom.loader&&!this.s.loaderVisible)this.dom.loader.css("display",
 "block"),this.s.loaderVisible=!0}else this.s.topRowFloat=this.pixelsToRow(c,!1,!0);this.s.lastScrollTop=c;this.s.stateSaveThrottle();"jump"===this.s.scrollType&&this.s.mousedown&&(this.s.labelVisible=!0);this.s.labelVisible&&this.dom.label.html(this.s.dt.fnFormatNumber(parseInt(this.s.topRowFloat,10)+1)).css("top",c+c*b.labelFactor).css("display","block")}},_scrollForce:function(){var a=this.s.heights;a.virtual=a.row*this.s.dt.fnRecordsDisplay();a.scroll=a.virtual;1E6<a.scroll&&(a.scroll=1E6);this.dom.force.style.height=
-a.scroll>this.s.heights.row?a.scroll+"px":this.s.heights.row+"px"}});h.defaults={boundaryScale:0.5,displayBuffer:9,loadingIndicator:!1,rowHeight:"auto",serverWait:200};h.oDefaults=h.defaults;h.version="2.0.2";e(i).on("preInit.dt.dtscroller",function(a,b){if("dt"===a.namespace){var c=b.oInit.scroller,d=m.defaults.scroller;if(c||d)d=e.extend({},c,d),!1!==c&&new h(b,d)}});e.fn.dataTable.Scroller=h;e.fn.DataTable.Scroller=h;var j=e.fn.dataTable.Api;j.register("scroller()",function(){return this});j.register("scroller().rowToPixels()",
+a.scroll>this.s.heights.row?a.scroll+"px":this.s.heights.row+"px"}});h.defaults={boundaryScale:0.5,displayBuffer:9,loadingIndicator:!1,rowHeight:"auto",serverWait:200};h.oDefaults=h.defaults;h.version="2.0.3";e(i).on("preInit.dt.dtscroller",function(a,b){if("dt"===a.namespace){var c=b.oInit.scroller,d=m.defaults.scroller;if(c||d)d=e.extend({},c,d),!1!==c&&new h(b,d)}});e.fn.dataTable.Scroller=h;e.fn.DataTable.Scroller=h;var j=e.fn.dataTable.Api;j.register("scroller()",function(){return this});j.register("scroller().rowToPixels()",
 function(a,b,c){var d=this.context;if(d.length&&d[0].oScroller)return d[0].oScroller.rowToPixels(a,b,c)});j.register("scroller().pixelsToRow()",function(a,b,c){var d=this.context;if(d.length&&d[0].oScroller)return d[0].oScroller.pixelsToRow(a,b,c)});j.register(["scroller().scrollToRow()","scroller.toPosition()"],function(a,b){this.iterator("table",function(c){c.oScroller&&c.oScroller.scrollToRow(a,b)});return this});j.register("row().scrollTo()",function(a){var b=this;this.iterator("row",function(c,
 d){if(c.oScroller){var e=b.rows({order:"applied",search:"applied"}).indexes().indexOf(d);c.oScroller.scrollToRow(e,a)}});return this});j.register("scroller.measure()",function(a){this.iterator("table",function(b){b.oScroller&&b.oScroller.measure(a)});return this});j.register("scroller.page()",function(){var a=this.context;if(a.length&&a[0].oScroller)return a[0].oScroller.pageInfo()});return h});

+ 73 - 40
plugins/datatables/jquery.dataTables.js

@@ -1,11 +1,11 @@
-/*! DataTables 1.10.21
+/*! DataTables 1.10.22
  * ©2008-2020 SpryMedia Ltd - datatables.net/license
  */
 
 /**
  * @summary     DataTables
  * @description Paginate, search and order HTML tables
- * @version     1.10.21
+ * @version     1.10.22
  * @file        jquery.dataTables.js
  * @author      SpryMedia Ltd
  * @contact     www.datatables.net
@@ -251,7 +251,7 @@
 			var api = this.api( true );
 		
 			/* Check if we want to add multiple rows or not */
-			var rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?
+			var rows = Array.isArray(data) && ( Array.isArray(data[0]) || $.isPlainObject(data[0]) ) ?
 				api.rows.add( data ) :
 				api.row.add( data );
 		
@@ -975,7 +975,7 @@
 			// If the length menu is given, but the init display length is not, use the length menu
 			if ( oInit.aLengthMenu && ! oInit.iDisplayLength )
 			{
-				oInit.iDisplayLength = $.isArray( oInit.aLengthMenu[0] ) ?
+				oInit.iDisplayLength = Array.isArray( oInit.aLengthMenu[0] ) ?
 					oInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];
 			}
 			
@@ -1066,7 +1066,7 @@
 			if ( oInit.iDeferLoading !== null )
 			{
 				oSettings.bDeferLoading = true;
-				var tmp = $.isArray( oInit.iDeferLoading );
+				var tmp = Array.isArray( oInit.iDeferLoading );
 				oSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;
 				oSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;
 			}
@@ -1356,7 +1356,7 @@
 	// - Ƀ - Bitcoin
 	// - Ξ - Ethereum
 	//   standards as thousands separators.
-	var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi;
+	var _re_formatted_numeric = /['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi;
 	
 	
 	var _empty = function ( d ) {
@@ -1584,6 +1584,36 @@
 		return out;
 	};
 	
+	// Surprisingly this is faster than [].concat.apply
+	// https://jsperf.com/flatten-an-array-loop-vs-reduce/2
+	var _flatten = function (out, val) {
+		if (Array.isArray(val)) {
+			for (var i=0 ; i<val.length ; i++) {
+				_flatten(out, val[i]);
+			}
+		}
+		else {
+			out.push(val);
+		}
+	  
+		return out;
+	}
+	
+	// Array.isArray polyfill.
+	// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
+	if (! Array.isArray) {
+	    Array.isArray = function(arg) {
+	        return Object.prototype.toString.call(arg) === '[object Array]';
+	    };
+	}
+	
+	// .trim() polyfill
+	// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim
+	if (!String.prototype.trim) {
+	  String.prototype.trim = function () {
+	    return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+	  };
+	}
 	
 	/**
 	 * DataTables utility methods
@@ -1841,7 +1871,7 @@
 	
 		// orderData can be given as an integer
 		var dataSort = init.aDataSort;
-		if ( typeof dataSort === 'number' && ! $.isArray( dataSort ) ) {
+		if ( typeof dataSort === 'number' && ! Array.isArray( dataSort ) ) {
 			init.aDataSort = [ dataSort ];
 		}
 	}
@@ -2325,7 +2355,7 @@
 					def.targets :
 					def.aTargets;
 	
-				if ( ! $.isArray( aTargets ) )
+				if ( ! Array.isArray( aTargets ) )
 				{
 					aTargets = [ aTargets ];
 				}
@@ -2644,7 +2674,7 @@
 							innerSrc = a.join('.');
 	
 							// Traverse each entry in the array getting the properties requested
-							if ( $.isArray( data ) ) {
+							if ( Array.isArray( data ) ) {
 								for ( var j=0, jLen=data.length ; j<jLen ; j++ ) {
 									out.push( fetchData( data[j], type, innerSrc ) );
 								}
@@ -2732,6 +2762,11 @@
 	
 				for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )
 				{
+					// Protect against prototype pollution
+					if (a[i] === '__proto__') {
+						throw new Error('Cannot set prototype values');
+					}
+	
 					// Check if we are dealing with an array notation request
 					arrayNotation = a[i].match(__reArray);
 					funcNotation = a[i].match(__reFn);
@@ -2747,7 +2782,7 @@
 						innerSrc = b.join('.');
 	
 						// Traverse each entry in the array setting the properties requested
-						if ( $.isArray( val ) )
+						if ( Array.isArray( val ) )
 						{
 							for ( var j=0, jLen=val.length ; j<jLen ; j++ )
 							{
@@ -2994,7 +3029,7 @@
 		var cellProcess = function ( cell ) {
 			if ( colIdx === undefined || colIdx === i ) {
 				col = columns[i];
-				contents = $.trim(cell.innerHTML);
+				contents = (cell.innerHTML).trim();
 	
 				if ( col && col._bAttrSrc ) {
 					var setter = _fnSetObjectDataFn( col.mData._ );
@@ -3244,11 +3279,11 @@
 		}
 		
 		/* ARIA role for the rows */
-	 	$(thead).find('>tr').attr('role', 'row');
+		$(thead).children('tr').attr('role', 'row');
 	
 		/* Deal with the footer - add classes if required */
-		$(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );
-		$(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );
+		$(thead).children('tr').children('th, td').addClass( classes.sHeaderTH );
+		$(tfoot).children('tr').children('th, td').addClass( classes.sFooterTH );
 	
 		// Cache the footer cells. Note that we only take the cells from the first
 		// row in the footer. If there is more than one row the user wants to
@@ -3834,7 +3869,7 @@
 	
 		// Convert to object based for 1.10+ if using the old array scheme which can
 		// come from server-side processing or serverParams
-		if ( data && $.isArray(data) ) {
+		if ( data && Array.isArray(data) ) {
 			var tmp = {};
 			var rbracket = /(.*?)\[\]$/;
 	
@@ -4819,7 +4854,7 @@
 			classes  = settings.oClasses,
 			tableId  = settings.sTableId,
 			menu     = settings.aLengthMenu,
-			d2       = $.isArray( menu[0] ),
+			d2       = Array.isArray( menu[0] ),
 			lengths  = d2 ? menu[0] : menu,
 			language = d2 ? menu[1] : menu;
 	
@@ -5865,7 +5900,7 @@
 			fixedObj = $.isPlainObject( fixed ),
 			nestedSort = [],
 			add = function ( a ) {
-				if ( a.length && ! $.isArray( a[0] ) ) {
+				if ( a.length && ! Array.isArray( a[0] ) ) {
 					// 1D array
 					nestedSort.push( a );
 				}
@@ -5877,7 +5912,7 @@
 	
 		// Build the sort array, with pre-fix and post-fix options if they have been
 		// specified
-		if ( $.isArray( fixed ) ) {
+		if ( Array.isArray( fixed ) ) {
 			add( fixed );
 		}
 	
@@ -6506,9 +6541,9 @@
 	 */
 	function _fnMap( ret, src, name, mappedName )
 	{
-		if ( $.isArray( name ) ) {
+		if ( Array.isArray( name ) ) {
 			$.each( name, function (i, val) {
-				if ( $.isArray( val ) ) {
+				if ( Array.isArray( val ) ) {
 					_fnMap( ret, src, val[0], val[1] );
 				}
 				else {
@@ -6560,7 +6595,7 @@
 					}
 					$.extend( true, out[prop], val );
 				}
-				else if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $.isArray(val) ) {
+				else if ( breakRefs && prop !== 'data' && prop !== 'aaData' && Array.isArray(val) ) {
 					out[prop] = val.slice();
 				}
 				else {
@@ -6904,7 +6939,7 @@
 			}
 		};
 	
-		if ( $.isArray( context ) ) {
+		if ( Array.isArray( context ) ) {
 			for ( var i=0, ien=context.length ; i<ien ; i++ ) {
 				ctxSettings( context[i] );
 			}
@@ -7262,7 +7297,7 @@
 	
 	_Api.register = _api_register = function ( name, val )
 	{
-		if ( $.isArray( name ) ) {
+		if ( Array.isArray( name ) ) {
 			for ( var j=0, jen=name.length ; j<jen ; j++ ) {
 				_Api.register( name[j], val );
 			}
@@ -7332,7 +7367,7 @@
 				// New API instance returned, want the value from the first item
 				// in the returned array for the singular result.
 				return ret.length ?
-					$.isArray( ret[0] ) ?
+					Array.isArray( ret[0] ) ?
 						new _Api( ret.context, ret[0] ) : // Array results are 'enhanced'
 						ret[0] :
 					undefined;
@@ -7355,7 +7390,7 @@
 	 */
 	var __table_selector = function ( selector, a )
 	{
-		if ( $.isArray(selector) ) {
+		if ( Array.isArray(selector) ) {
 			return $.map( selector, function (item) {
 				return __table_selector(item, a);
 			} );
@@ -7744,7 +7779,7 @@
 				[ selector[i] ];
 	
 			for ( j=0, jen=a.length ; j<jen ; j++ ) {
-				res = selectFn( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );
+				res = selectFn( typeof a[j] === 'string' ? (a[j]).trim() : a[j] );
 	
 				if ( res && res.length ) {
 					out = out.concat( res );
@@ -8170,7 +8205,7 @@
 		row._aData = data;
 	
 		// If the DOM has an id, and the data source is an array
-		if ( $.isArray( data ) && row.nTr && row.nTr.id ) {
+		if ( Array.isArray( data ) && row.nTr && row.nTr.id ) {
 			_fnSetObjectDataFn( ctx[0].rowId )( data, row.nTr.id );
 		}
 	
@@ -8216,7 +8251,7 @@
 		var rows = [];
 		var addRow = function ( r, k ) {
 			// Recursion to allow for arrays of jQuery objects
-			if ( $.isArray( r ) || r instanceof $ ) {
+			if ( Array.isArray( r ) || r instanceof $ ) {
 				for ( var i=0, ien=r.length ; i<ien ; i++ ) {
 					addRow( r[i], k );
 				}
@@ -8230,7 +8265,7 @@
 			}
 			else {
 				// Otherwise create a row with a wrapper
-				var created = $('<tr><td/></tr>').addClass( k );
+				var created = $('<tr><td></td></tr>').addClass( k );
 				$('td', created)
 					.addClass( k )
 					.html( r )
@@ -8726,14 +8761,12 @@
 		return _selector_first( this.columns( selector, opts ) );
 	} );
 	
-	
-	
 	var __cell_selector = function ( settings, selector, opts )
 	{
 		var data = settings.aoData;
 		var rows = _selector_row_indexes( settings, opts );
 		var cells = _removeEmpty( _pluck_order( data, rows, 'anCells' ) );
-		var allCells = $( [].concat.apply([], cells) );
+		var allCells = $(_flatten( [], cells ));
 		var row;
 		var columns = settings.aoColumns.length;
 		var a, i, ien, j, o, host;
@@ -9005,7 +9038,7 @@
 			// Simple column / direction passed in
 			order = [ [ order, dir ] ];
 		}
-		else if ( order.length && ! $.isArray( order[0] ) ) {
+		else if ( order.length && ! Array.isArray( order[0] ) ) {
 			// Arguments passed in (list of 1D arrays)
 			order = Array.prototype.slice.call( arguments );
 		}
@@ -9041,7 +9074,7 @@
 				ctx[0].aaSortingFixed :
 				undefined;
 	
-			return $.isArray( fixed ) ?
+			return Array.isArray( fixed ) ?
 				{ pre: fixed } :
 				fixed;
 		}
@@ -9501,7 +9534,7 @@
 	 *  @type string
 	 *  @default Version number
 	 */
-	DataTable.version = "1.10.21";
+	DataTable.version = "1.10.22";
 
 	/**
 	 * Private data store, containing all of the settings objects that are
@@ -9919,8 +9952,8 @@
 	 * version is still, internally the primary interface, but is is not documented
 	 * - hence the @name tags in each doc comment. This allows a Javascript function
 	 * to create a map from Hungarian notation to camel case (going the other direction
-	 * would require each property to be listed, which would at around 3K to the size
-	 * of DataTables, while this method is about a 0.5K hit.
+	 * would require each property to be listed, which would add around 3K to the size
+	 * of DataTables, while this method is about a 0.5K hit).
 	 *
 	 * Ultimately this does pave the way for Hungarian notation to be dropped
 	 * completely, but that is a massive amount of work and will break current
@@ -14575,7 +14608,7 @@
 					for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
 						button = buttons[i];
 	
-						if ( $.isArray( button ) ) {
+						if ( Array.isArray( button ) ) {
 							var inner = $( '<'+(button.DT_el || 'div')+'/>' )
 								.appendTo( container );
 							attach( inner, button );
@@ -14620,14 +14653,14 @@
 								case 'last':
 									btnDisplay = lang.sLast;
 	
-									if ( page === pages-1 ) {
+									if ( pages === 0 || page === pages-1 ) {
 										tabIndex = -1;
 										btnClass += ' ' + disabledClass;
 									}
 									break;
 	
 								default:
-									btnDisplay = button + 1;
+									btnDisplay = settings.fnFormatNumber( button + 1 );
 									btnClass = page === button ?
 										classes.sPageButtonActive : '';
 									break;

+ 156 - 154
plugins/datatables/jquery.dataTables.min.js

@@ -1,166 +1,168 @@
 /*!
- DataTables 1.10.21
+ DataTables 1.10.22
  ©2008-2020 SpryMedia Ltd - datatables.net/license
 */
 (function(h){"function"===typeof define&&define.amd?define(["jquery"],function(E){return h(E,window,document)}):"object"===typeof exports?module.exports=function(E,H){E||(E=window);H||(H="undefined"!==typeof window?require("jquery"):require("jquery")(E));return h(H,E,E.document)}:h(jQuery,window,document)})(function(h,E,H,k){function $(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()),
 d[c]=e,"o"===b[1]&&$(a[e])});a._hungarianMap=d}function J(a,b,c){a._hungarianMap||$(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),J(a[d],b[d],c)):b[d]=b[e]})}function Ea(a){var b=n.defaults.oLanguage,c=b.sDecimal;c&&Fa(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&(d&&"No data available in table"===b.sEmptyTable)&&F(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(d&&"Loading..."===b.sLoadingRecords)&&F(a,
 a,"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Fa(a)}}function gb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
-"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&J(n.models.oSearch,a[b])}function hb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"===typeof b&&!h.isArray(b)&&(a.aDataSort=[b])}function ib(a){if(!n.__browser){var b={};n.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:-1*h(E).scrollLeft(),height:1,width:1,
-overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,n.__browser);a.oScroll.iBarWidth=n.__browser.barWidth}
+"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&J(n.models.oSearch,a[b])}function hb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"===typeof b&&!Array.isArray(b)&&(a.aDataSort=[b])}function ib(a){if(!n.__browser){var b={};n.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:-1*h(E).scrollLeft(),height:1,
+width:1,overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,n.__browser);a.oScroll.iBarWidth=n.__browser.barWidth}
 function jb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==e;)a.hasOwnProperty(d)&&(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ga(a,b){var c=n.defaults.column,d=a.aoColumns.length,c=h.extend({},n.models.oColumn,c,{nTh:b?b:H.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},n.models.oSearch,c[d]);la(a,d,h(b).data())}function la(a,b,c){var b=a.aoColumns[b],
 d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(hb(c),J(n.defaults.column,c,!0),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),h.extend(b,c),F(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),F(b,c,"aDataSort"));var g=b.mData,j=S(g),i=
 b.mRender?S(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return N(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=
 d.sSortableNone,b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function aa(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ha(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&ma(a);t(a,null,"column-sizing",[a])}function ba(a,b){var c=na(a,"bVisible");
-return"number"===typeof c[b]?c[b]:null}function ca(a,b){var c=na(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}function W(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function na(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ia(a){var b=a.aoColumns,c=a.aoData,d=n.ext.type.detect,e,f,g,j,i,h,m,q,u;e=0;for(f=b.length;e<f;e++)if(m=b[e],u=[],!m.sType&&m._sManualType)m.sType=m._sManualType;else if(!m.sType){g=
-0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){u[i]===k&&(u[i]=B(a,i,e,"type"));q=d[g](u[i],a);if(!q&&g!==d.length-1)break;if("html"===q)break}if(q){m.sType=q;break}}m.sType||(m.sType="string")}}function kb(a,b,c,d){var e,f,g,j,i,l,m=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){l=b[e];var q=l.targets!==k?l.targets:l.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;m.length<=q[f];)Ga(a);d(q[f],l)}else if("number"===typeof q[f]&&0>q[f])d(m.length+
-q[f],l);else if("string"===typeof q[f]){j=0;for(i=m.length;j<i;j++)("_all"==q[f]||h(m[j].nTh).hasClass(q[f]))&&d(j,l)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function O(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},n.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ja(a,e,c,d);return e}function oa(a,b){var c;b instanceof
+return"number"===typeof c[b]?c[b]:null}function ca(a,b){var c=na(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}function W(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function na(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ia(a){var b=a.aoColumns,c=a.aoData,d=n.ext.type.detect,e,f,g,j,i,h,l,q,u;e=0;for(f=b.length;e<f;e++)if(l=b[e],u=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=
+0;for(j=d.length;g<j;g++){i=0;for(h=c.length;i<h;i++){u[i]===k&&(u[i]=B(a,i,e,"type"));q=d[g](u[i],a);if(!q&&g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function kb(a,b,c,d){var e,f,g,j,i,m,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){m=b[e];var q=m.targets!==k?m.targets:m.aTargets;Array.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Ga(a);d(q[f],m)}else if("number"===typeof q[f]&&0>q[f])d(l.length+
+q[f],m);else if("string"===typeof q[f]){j=0;for(i=l.length;j<i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&&d(j,m)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function O(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},n.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ja(a,e,c,d);return e}function oa(a,b){var c;b instanceof
 h||(b=h(b));return b.map(function(b,e){c=Ka(a,e);return O(a,c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});if(i===k)return a.iDrawError!=e&&null===j&&(K(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j&&d!==k)i=j;else if("function"===typeof i)return i.call(g);return null===
 i&&"display"==d?"":i}function lb(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function La(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function S(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=S(c))});return function(a,c,f,g){var j=b[c]||b._;return j!==k?j(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"===typeof a&&
-(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,b,f){var g,j;if(""!==f){j=La(f);for(var i=0,l=j.length;i<l;i++){f=j[i].match(da);g=j[i].match(X);if(f){j[i]=j[i].replace(da,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(h.isArray(a)){i=0;for(l=a.length;i<l;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(X,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};
-return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}function N(a){if(h.isPlainObject(a))return N(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=La(e),f;f=e[e.length-1];for(var g,j,i=0,l=e.length-1;i<l;i++){g=e[i].match(da);j=e[i].match(X);if(g){e[i]=e[i].replace(da,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");
-if(h.isArray(d)){j=0;for(l=d.length;j<l;j++)f={},b(f,d[j],g),a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(X,""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(X))a[f.replace(X,"")](d);else a[f.replace(da,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ma(a){return C(a.aoData,"_aData")}function pa(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function qa(a,b,c){for(var d=-1,e=0,f=a.length;e<
-f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function ea(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ka(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;
-Na(a,e)}}function Ka(a,b,c,d){var e=[],f=b.firstChild,g,j,i=0,l,m=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],u=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),N(a)(d,b.getAttribute(c)))}},G=function(a){if(c===k||c===i)j=m[i],l=h.trim(a.innerHTML),j&&j._bAttrSrc?(N(j.mData._)(d,l),u(j.mData.sort,a),u(j.mData.type,a),u(j.mData.filter,a)):q?(j._setter||(j._setter=N(j.mData)),j._setter(d,l)):d[i]=l;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||
-"TH"==g)G(f),e.push(f);f=f.nextSibling}else{e=b.anCells;f=0;for(g=e.length;f<g;f++)G(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&N(a.rowId)(d,b);return{data:d,cells:e}}function Ja(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,l,m,q,k;if(null===e.nTr){j=c||H.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;Na(a,e);m=0;for(q=a.aoColumns.length;m<q;m++){l=a.aoColumns[m];i=(k=c?!1:!0)?H.createElement(l.sCellType):d[m];i._DT_CellIndex={row:b,column:m};g.push(i);if(k||(!c||l.mRender||
-l.mData!==m)&&(!h.isPlainObject(l.mData)||l.mData._!==m+".display"))i.innerHTML=B(a,b,m,"display");l.sClass&&(i.className+=" "+l.sClass);l.bVisible&&!c?j.appendChild(i):!l.bVisible&&c&&i.parentNode.removeChild(i);l.fnCreatedCell&&l.fnCreatedCell.call(a.oInstance,i,B(a,b,m),f,b,m)}t(a,"aoRowCreatedCallback",null,[j,f,b,g])}e.nTr.setAttribute("role","row")}function Na(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?ra(b.__rowc.concat(e)):
-e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function mb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0===h("th, td",g).length,l=a.oClasses,m=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=m.length;b<c;b++)f=m[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Oa(a,f.nTh,b))),
-f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Pa(a,"header")(a,d,f,l);i&&fa(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(l.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(l.sFooterTH);if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=m[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function ga(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,l;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&
-!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(l=i=1,j[d][f]===k){a.appendChild(g[d][f].cell);for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+l]!==k&&g[d][f].cell==g[d][f+l].cell;){for(c=0;c<i;c++)j[d+c][f+l]=1;l++}h(g[d][f].cell).attr("rowspan",i).attr("colspan",l)}}}}function P(a){var b=t(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))D(a,!1);else{var b=
-[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);var g=a._iDisplayStart,l=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,D(a,!1);else if(j){if(!a.bDestroying&&!nb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:l;for(j=j?0:g;j<f;j++){var m=i[j],q=a.aoData[m];null===q.nTr&&Ja(a,m);var u=q.nTr;if(0!==e){var G=d[c%
-e];q._sRowStripe!=G&&(h(u).removeClass(q._sRowStripe).addClass(G),q._sRowStripe=G)}t(a,"aoRowCallback",null,[u,q._aData,c,j,m]);b.push(u);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords:f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:W(a),"class":a.oClasses.sRowEmpty}).html(c))[0];t(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ma(a),g,l,i]);t(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],
-Ma(a),g,l,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));t(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&ob(a);d?ha(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;P(a);a._drawHold=!1}function pb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});
-a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,l,m,q,k=0;k<f.length;k++){g=null;j=f[k];if("<"==j){i=h("<div/>")[0];l=f[k+1];if("'"==l||'"'==l){m="";for(q=2;f[k+q]!=l;)m+=f[k+q],q++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(l=m.split("."),i.id=l[0].substr(1,l[0].length-1),i.className=l[1]):"#"==m.charAt(0)?i.id=m.substr(1,m.length-1):i.className=m;k+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==
-j&&d.bPaginate&&d.bLengthChange)g=qb(a);else if("f"==j&&d.bFilter)g=rb(a);else if("r"==j&&d.bProcessing)g=sb(a);else if("t"==j)g=tb(a);else if("i"==j&&d.bInfo)g=ub(a);else if("p"==j&&d.bPaginate)g=vb(a);else if(0!==n.ext.feature.length){i=n.ext.feature;q=0;for(l=i.length;q<l;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function fa(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,l,m,q,k;a.splice(0,a.length);
-f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){m=1*e.getAttribute("colspan");q=1*e.getAttribute("rowspan");m=!m||0===m||1===m?1:m;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;l=g;k=1===m?!0:!1;for(j=0;j<m;j++)for(g=0;g<q;g++)a[f+g][l+j]={cell:e,unique:k},a[f+g].nTr=d}e=e.nextSibling}}}function sa(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],fa(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=
-0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function ta(a,b,c){t(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={},e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){t(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var l="function"===typeof f?f(b,a):f,b="function"===typeof f&&l?l:h.extend(!0,
-b,l);delete g.data}l={data:b,success:function(b){var c=b.error||b.sError;c&&K(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=t(a,null,"xhr",[a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?K(a,0,"Invalid JSON response",1):4===b.readyState&&K(a,0,"Ajax error",7));D(a,!1)}};a.oAjaxData=b;t(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?
-a.jqXHR=h.ajax(h.extend(l,{url:g||a.sAjaxSource})):"function"===typeof g?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(l,g)),g.data=f)}function nb(a){return a.bAjaxDataGet?(a.iDraw++,D(a,!0),ta(a,wb(a),function(b){xb(a,b)}),!1):!0}function wb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,l,m,k=Y(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var u=function(a,b){j.push({name:a,value:b})};u("sEcho",a.iDraw);u("iColumns",c);u("sColumns",
-C(b,"sName").join(","));u("iDisplayStart",g);u("iDisplayLength",i);var G={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)l=b[g],m=f[g],i="function"==typeof l.mData?"function":l.mData,G.columns.push({data:i,name:l.sName,searchable:l.bSearchable,orderable:l.bSortable,search:{value:m.sSearch,regex:m.bRegex}}),u("mDataProp_"+g,i),d.bFilter&&(u("sSearch_"+g,m.sSearch),u("bRegex_"+g,m.bRegex),u("bSearchable_"+g,l.bSearchable)),d.bSort&&u("bSortable_"+
-g,l.bSortable);d.bFilter&&(u("sSearch",e.sSearch),u("bRegex",e.bRegex));d.bSort&&(h.each(k,function(a,b){G.order.push({column:b.col,dir:b.dir});u("iSortCol_"+a,b.col);u("sSortDir_"+a,b.dir)}),u("iSortingCols",k.length));b=n.ext.legacy.ajax;return null===b?a.sAjaxSource?j:G:b?j:G}function xb(a,b){var c=ua(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d!==k){if(1*d<a.iDraw)return;a.iDraw=
-1*d}pa(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,10);d=0;for(e=c.length;d<e;d++)O(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;P(a);a._bInitComplete||va(a,b);a.bAjaxDataGet=!0;D(a,!1)}function ua(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?S(c)(b):b}function rb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+
-b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),i=function(){var b=!this.value?"":this.value;b!=e.sSearch&&(ha(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,P(a))},f=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,l=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",
-f?Qa(i,f):i).on("mouseup",function(){setTimeout(function(){i.call(l[0])},10)}).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{l[0]!==H.activeElement&&l.val(e.sSearch)}catch(d){}});return b[0]}function ha(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ia(a);if("ssp"!=y(a)){yb(a,b.sSearch,c,b.bEscapeRegex!==
-k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)zb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);Ab(a)}else f(b);a.bFiltered=!0;t(a,null,"search",[a])}function Ab(a){for(var b=n.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var j=[],i=0,l=c.length;i<l;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function zb(a,b,c,d,e,f){if(""!==b){for(var g=
-[],j=a.aiDisplay,d=Ra(b,d,e,f),e=0;e<j.length;e++)b=a.aoData[j[e]]._aFilterData[c],d.test(b)&&g.push(j[e]);a.aiDisplay=g}}function yb(a,b,c,d,e,f){var e=Ra(b,d,e,f),g=a.oPreviousSearch.sSearch,j=a.aiDisplayMaster,i,f=[];0!==n.ext.search.length&&(c=!0);i=Bb(a);if(0>=b.length)a.aiDisplay=j.slice();else{if(i||c||d||g.length>b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=j.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&f.push(b[c]);a.aiDisplay=f}}function Ra(a,b,c,
-d){a=b?a:Sa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function Bb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,m=n.ext.type.search;c=!1;d=0;for(f=a.aoData.length;d<f;d++)if(h=a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),m[c.sType]&&(i=m[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&
-(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(wa.innerHTML=i,i=Yb?wa.textContent:wa.innerText),i.replace&&(i=i.replace(/[\r\n\u2028]/g,"")),j.push(i);h._aFilterData=j;h._sFilterRow=j.join("  ");c=!0}return c}function Cb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Db(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function ub(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,
-id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Eb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Eb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Fb(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}
-function Fb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ia(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){pb(a);mb(a);
-ga(a,a.aoHeader);ga(a,a.aoFooter);D(a,!0);c.bAutoWidth&&Ha(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=w(f.sWidth));t(a,null,"preInit",[a]);T(a);e=y(a);if("ssp"!=e||g)"ajax"==e?ta(a,[],function(c){var f=ua(a,c);for(b=0;b<f.length;b++)O(a,f[b]);a.iInitDisplayStart=d;T(a);D(a,!1);va(a,c)},a):(D(a,!1),va(a))}else setTimeout(function(){ia(a)},200)}function va(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&aa(a);t(a,null,"plugin-init",[a,b]);t(a,"aoInitComplete","init",[a,b])}function Ta(a,
-b){var c=parseInt(b,10);a._iDisplayLength=c;Ua(a);t(a,null,"length",[a,c])}function qb(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],f[g]);var i=h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",
-e[0].outerHTML));h("select",i).val(a._iDisplayLength).on("change.DT",function(){Ta(a,h(this).val());P(a)});h(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function vb(a){var b=a.sPaginationType,c=n.ext.pager[b],d="function"===typeof c,e=function(a){P(a)},b=h("<div/>").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=
-a.fnRecordsDisplay(),m=-1===i,b=m?0:Math.ceil(b/i),i=m?1:Math.ceil(h/i),h=c(b,i),k,m=0;for(k=f.p.length;m<k;m++)Pa(a,"pageButton")(a,f.p[m],m,h,b,i)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Va(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:K(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==
-d;a._iDisplayStart=d;b&&(t(a,null,"page",[a]),c&&P(a));return b}function sb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function D(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");t(a,null,"processing",[a,b])}function tb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=
-b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),l=h(b[0].cloneNode(!1)),m=b.children("tfoot");m.length||(m=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:w(d):"100%"}).append(h("<div/>",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",
-{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:w(d)}).append(b));m&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:w(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(l.removeAttr("id").css("margin-left",0).append("bottom"===j?g:null).append(b.children("tfoot")))));var b=i.children(),k=b[0],f=b[1],u=m?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;m&&(u.scrollLeft=a)});
-h(f).css("max-height",e);c.bCollapse||h(f).css("height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=u;a.aoDrawCallback.push({fn:ma,sName:"scrolling"});return i[0]}function ma(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,l=j.children("table"),j=a.nScrollBody,m=h(j),q=j.style,u=h(a.nScrollFoot).children("div"),n=u.children("table"),o=h(a.nTHead),p=h(a.nTable),r=p[0],t=r.style,s=a.nTFoot?h(a.nTFoot):null,U=a.oBrowser,
-V=U.bScrollOversize,Zb=C(a.aoColumns,"nTh"),Q,L,R,xa,v=[],x=[],y=[],z=[],A,B=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};L=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==L&&a.scrollBarVis!==k)a.scrollBarVis=L,aa(a);else{a.scrollBarVis=L;p.children("thead, tfoot").remove();s&&(R=s.clone().prependTo(p),Q=s.find("tr"),R=R.find("tr"));xa=o.clone().prependTo(p);o=o.find("tr");L=xa.find("tr");xa.find("th, td").removeAttr("tabindex");
-c||(q.width="100%",f[0].style.width="100%");h.each(sa(a,xa),function(b,c){A=ba(a,b);c.style.width=a.aoColumns[A].sWidth});s&&I(function(a){a.style.width=""},R);f=p.outerWidth();if(""===c){t.width="100%";if(V&&(p.find("tbody").height()>j.offsetHeight||"scroll"==m.css("overflow-y")))t.width=w(p.outerWidth()-b);f=p.outerWidth()}else""!==d&&(t.width=w(d),f=p.outerWidth());I(B,L);I(function(a){y.push(a.innerHTML);v.push(w(h(a).css("width")))},L);I(function(a,b){if(h.inArray(a,Zb)!==-1)a.style.width=v[b]},
-o);h(L).height(0);s&&(I(B,R),I(function(a){z.push(a.innerHTML);x.push(w(h(a).css("width")))},R),I(function(a,b){a.style.width=x[b]},Q),h(R).height(0));I(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+y[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=v[b]},L);s&&I(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+z[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=x[b]},R);if(p.outerWidth()<
-f){Q=j.scrollHeight>j.offsetHeight||"scroll"==m.css("overflow-y")?f+b:f;if(V&&(j.scrollHeight>j.offsetHeight||"scroll"==m.css("overflow-y")))t.width=w(Q-b);(""===c||""!==d)&&K(a,1,"Possible column misalignment",6)}else Q="100%";q.width=w(Q);g.width=w(Q);s&&(a.nScrollFoot.style.width=w(Q));!e&&V&&(q.height=w(r.offsetHeight+b));c=p.outerWidth();l[0].style.width=w(c);i.width=w(c);d=p.height()>j.clientHeight||"scroll"==m.css("overflow-y");e="padding"+(U.bScrollbarLeft?"Left":"Right");i[e]=d?b+"px":"0px";
-s&&(n[0].style.width=w(c),u[0].style.width=w(c),u[0].style[e]=d?b+"px":"0px");p.children("colgroup").insertBefore(p.children("thead"));m.trigger("scroll");if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function I(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Ha(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,j=c.length,i=na(a,
-"bVisible"),l=h("th",a.nTHead),m=b.getAttribute("width"),k=b.parentNode,u=!1,n,o,p=a.oBrowser,d=p.bScrollOversize;(n=b.style.width)&&-1!==n.indexOf("%")&&(m=n);for(n=0;n<i.length;n++)o=c[i[n]],null!==o.sWidth&&(o.sWidth=Gb(o.sWidthOrig,k),u=!0);if(d||!u&&!f&&!e&&j==W(a)&&j==l.length)for(n=0;n<j;n++)i=ba(a,n),null!==i&&(c[i].sWidth=w(l.eq(n).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var r=h("<tr/>").appendTo(j.find("tbody"));j.find("thead, tfoot").remove();
-j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");l=sa(a,j.find("thead")[0]);for(n=0;n<i.length;n++)o=c[i[n]],l[n].style.width=null!==o.sWidthOrig&&""!==o.sWidthOrig?w(o.sWidthOrig):"",o.sWidthOrig&&f&&h(l[n]).append(h("<div/>").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(n=0;n<i.length;n++)u=i[n],o=c[u],h(Hb(a,u)).clone(!1).append(o.sContentPadding).appendTo(r);h("[name]",j).removeAttr("name");o=h("<div/>").css(f||
-e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&m&&j.width(k.clientWidth)):e?j.width(k.clientWidth):m&&j.width(m);for(n=e=0;n<i.length;n++)k=h(l[n]),g=k.outerWidth()-k.width(),k=p.bBounding?Math.ceil(l[n].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[n]].sWidth=w(k-g);b.style.width=w(e);o.remove()}m&&(b.style.width=w(m));if((m||f)&&!a._reszEvt)b=function(){h(E).on("resize.DT-"+
-a.sInstance,Qa(function(){aa(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Gb(a,b){if(!a)return 0;var c=h("<div/>").css("width",w(a)).appendTo(b||H.body),d=c[0].offsetWidth;c.remove();return d}function Hb(a,b){var c=Ib(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Ib(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace($b,""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=f);return e}
-function w(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function Y(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var l=[];f=function(a){a.length&&!h.isArray(a[0])?l.push(a):h.merge(l,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<l.length;a++){i=l[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType||"string",l[a]._idx===k&&(l[a]._idx=h.inArray(l[a][1],e[g].asSorting)),
-d.push({src:i,col:g,dir:l[a][1],index:l[a]._idx,type:j,formatter:n.ext.type.order[j+"-pre"]})}return d}function ob(a){var b,c,d=[],e=n.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Ia(a);h=Y(a);b=0;for(c=h.length;b<c;b++)j=h[b],j.formatter&&g++,Jb(a,j.col);if("ssp"!=y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,n=f[b]._aSortData;for(g=0;g<i;g++)if(j=h[g],c=k[j.col],e=n[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===
-j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,n=f[a]._aSortData,o=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=n[i.col],g=o[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Kb(a){for(var b,c,d=a.aoColumns,e=Y(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g,"");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<
-e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Wa(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b,C(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&
-(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);T(a);"function"==typeof d&&d(a)}function Oa(a,b,c,d){var e=a.aoColumns[c];Xa(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(D(a,!0),setTimeout(function(){Wa(a,c,b.shiftKey,d);"ssp"!==y(a)&&D(a,!1)},0)):Wa(a,c,b.shiftKey,d))})}function ya(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,
-d=Y(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(C(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(C(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Jb(a,b){var c=a.aoColumns[b],d=n.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ca(a,b)));for(var f,g=n.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=
-d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function za(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:Cb(a.oPreviousSearch),columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Cb(a.aoPreSearchCols[d])}})};t(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Lb(a,b,c){var d,e,f=a.aoColumns,b=function(b){if(b&&
-b.time){var g=t(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===h.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g)&&!(b.columns&&f.length!==b.columns.length))){a.oLoadedState=h.extend(!0,{},b);b.start!==k&&(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==k&&(a._iDisplayLength=b.length);b.order!==k&&(a.aaSorting=[],h.each(b.order,function(b,c){a.aaSorting.push(c[0]>=f.length?[0,c[1]]:c)}));b.search!==k&&h.extend(a.oPreviousSearch,Db(b.search));if(b.columns){d=
-0;for(e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==k&&(f[d].bVisible=g.visible),g.search!==k&&h.extend(a.aoPreSearchCols[d],Db(g.search))}t(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==k&&b(g)}else c()}function Aa(a){var b=n.settings,a=h.inArray(a,C(b,"nTable"));return-1!==a?b[a]:null}function K(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+
-d);if(b)E.console&&console.log&&console.log(c);else if(b=n.ext,b=b.sErrMode||b.errMode,a&&t(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function F(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?F(a,b,d[0],d[1]):F(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Ya(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==
-e&&h.isArray(d)?d.slice():d);return a}function Xa(a,b,c){h(a).on("click.DT",b,function(b){h(a).trigger("blur");c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function t(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Ua(a){var b=a._iDisplayStart,
-c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Pa(a,b){var c=a.renderer,d=n.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ja(a,b){var c=[],c=Mb.numbers_length,d=Math.floor(c/2);b<=c?c=Z(0,b):a<=d?(c=Z(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=Z(b-(c-2),b):(c=Z(a-d+2,a+d-1),c.push("ellipsis"),
-c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function Fa(a){h.each({num:function(b){return Ba(b,a)},"num-fmt":function(b){return Ba(b,a,Za)},"html-num":function(b){return Ba(b,a,Ca)},"html-num-fmt":function(b){return Ba(b,a,Ca,Za)}},function(b,c){v.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(v.type.search[b+a]=v.type.search.html)})}function Nb(a){return function(){var b=[Aa(this[n.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return n.ext.internal[a].apply(this,
-b)}}var n=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new r(Aa(this[v.iApiIndex])):new r(this)};this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):
-(""!==d.sX||""!==d.sY)&&ma(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,
-c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),
-[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Aa(this[v.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=
-function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=v.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=v.internal;for(var e in n.ext.internal)e&&(this[e]=Nb(e));this.each(function(){var e={},g=1<d?Ya(e,a,!0):a,j=0,i,e=this.getAttribute("id"),l=!1,m=n.defaults,q=h(this);if("table"!=
-this.nodeName.toLowerCase())K(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{gb(m);hb(m.column);J(m,m,!0);J(m.column,m.column,!0);J(m,h.extend(g,q.data()),!0);var u=n.settings,j=0;for(i=u.length;j<i;j++){var o=u[j];if(o.nTable==this||o.nTHead&&o.nTHead.parentNode==this||o.nTFoot&&o.nTFoot.parentNode==this){var r=g.bRetrieve!==k?g.bRetrieve:m.bRetrieve;if(c||r)return o.oInstance;if(g.bDestroy!==k?g.bDestroy:m.bDestroy){o.oInstance.fnDestroy();break}else{K(o,0,"Cannot reinitialise DataTable",
-3);return}}if(o.sTableId==this.id){u.splice(j,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+n.ext._unique++;var p=h.extend(!0,{},n.models.oSettings,{sDestroyWidth:q[0].style.width,sInstance:e,sTableId:e});p.nTable=this;p.oApi=b.internal;p.oInit=g;u.push(p);p.oInstance=1===b.length?b:q.dataTable();gb(g);Ea(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=h.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=Ya(h.extend(!0,{},m),g);F(p.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
-F(p,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);F(p.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],
-["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);F(p.oLanguage,g,"fnInfoCallback");z(p,"aoDrawCallback",g.fnDrawCallback,"user");z(p,"aoServerParams",g.fnServerParams,"user");z(p,"aoStateSaveParams",g.fnStateSaveParams,"user");z(p,"aoStateLoadParams",g.fnStateLoadParams,"user");z(p,"aoStateLoaded",g.fnStateLoaded,"user");z(p,"aoRowCallback",g.fnRowCallback,"user");z(p,"aoRowCreatedCallback",g.fnCreatedRow,"user");z(p,"aoHeaderCallback",g.fnHeaderCallback,"user");z(p,"aoFooterCallback",g.fnFooterCallback,
-"user");z(p,"aoInitComplete",g.fnInitComplete,"user");z(p,"aoPreDrawCallback",g.fnPreDrawCallback,"user");p.rowIdFn=S(g.rowId);ib(p);var s=p.oClasses;h.extend(s,n.ext.classes,g.oClasses);q.addClass(s.sTable);p.iInitDisplayStart===k&&(p.iInitDisplayStart=g.iDisplayStart,p._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(p.bDeferLoading=!0,e=h.isArray(g.iDeferLoading),p._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,p._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var w=p.oLanguage;
-h.extend(!0,w,g.oLanguage);w.sUrl&&(h.ajax({dataType:"json",url:w.sUrl,success:function(a){Ea(a);J(m.oLanguage,a);h.extend(true,w,a);ia(p)},error:function(){ia(p)}}),l=!0);null===g.asStripeClasses&&(p.asStripeClasses=[s.sStripeOdd,s.sStripeEven]);var e=p.asStripeClasses,v=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(e,function(a){return v.hasClass(a)}))&&(h("tbody tr",this).removeClass(e.join(" ")),p.asDestroyStripes=e.slice());e=[];u=this.getElementsByTagName("thead");0!==u.length&&
-(fa(p.aoHeader,u[0]),e=sa(p));if(null===g.aoColumns){u=[];j=0;for(i=e.length;j<i;j++)u.push(null)}else u=g.aoColumns;j=0;for(i=u.length;j<i;j++)Ga(p,e?e[j]:null);kb(p,g.aoColumnDefs,u,function(a,b){la(p,a,b)});if(v.length){var U=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(v[0]).children("th, td").each(function(a,b){var c=p.aoColumns[a];if(c.mData===a){var d=U(b,"sort")||U(b,"order"),e=U(b,"filter")||U(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+
-d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};la(p,a)}}})}var V=p.oFeatures,e=function(){if(g.aaSorting===k){var a=p.aaSorting;j=0;for(i=a.length;j<i;j++)a[j][1]=p.aoColumns[j].asSorting[0]}ya(p);V.bSort&&z(p,"aoDrawCallback",function(){if(p.bSorted){var a=Y(p),b={};h.each(a,function(a,c){b[c.src]=c.dir});t(p,null,"order",[p,a,b]);Kb(p)}});z(p,"aoDrawCallback",function(){(p.bSorted||y(p)==="ssp"||V.bDeferRender)&&ya(p)},"sc");var a=q.children("caption").each(function(){this._captionSide=
-h(this).css("caption-side")}),b=q.children("thead");b.length===0&&(b=h("<thead/>").appendTo(q));p.nTHead=b[0];b=q.children("tbody");b.length===0&&(b=h("<tbody/>").appendTo(q));p.nTBody=b[0];b=q.children("tfoot");if(b.length===0&&a.length>0&&(p.oScroll.sX!==""||p.oScroll.sY!==""))b=h("<tfoot/>").appendTo(q);if(b.length===0||b.children().length===0)q.addClass(s.sNoFooter);else if(b.length>0){p.nTFoot=b[0];fa(p.aoFooter,p.nTFoot)}if(g.aaData)for(j=0;j<g.aaData.length;j++)O(p,g.aaData[j]);else(p.bDeferLoading||
-y(p)=="dom")&&oa(p,h(p.nTBody).children("tr"));p.aiDisplay=p.aiDisplayMaster.slice();p.bInitialised=true;l===false&&ia(p)};g.bStateSave?(V.bStateSave=!0,z(p,"aoDrawCallback",za,"state_save"),Lb(p,g,e)):e()}});b=null;return this},v,r,o,s,$a={},Ob=/[\r\n\u2028]/g,Ca=/<.*?>/g,ac=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,bc=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Za=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,M=function(a){return!a||
-!0===a||"-"===a?!0:!1},Pb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Qb=function(a,b){$a[b]||($a[b]=RegExp(Sa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace($a[b],"."):a},ab=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Qb(a,b));c&&d&&(a=a.replace(Za,""));return!isNaN(parseFloat(a))&&isFinite(a)},Rb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:ab(a.replace(Ca,""),b,c)?!0:null},C=function(a,b,c){var d=[],
-e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);return d},ka=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&&e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},Z=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Sb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},ra=function(a){var b;a:{if(!(2>a.length)){b=a.slice().sort();
-for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];var e=a.length,f,g=0,d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b};n.util={throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=this,g=+new Date,j=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=k;a.apply(b,j)},c)):(d=g,a.apply(b,j))}},escapeRegex:function(a){return a.replace(bc,"\\$1")}};var A=function(a,b,c){a[b]!==k&&
-(a[c]=a[b])},da=/\[.*?\]$/,X=/\(\)$/,Sa=n.util.escapeRegex,wa=h("<div>")[0],Yb=wa.textContent!==k,$b=/<.*?>/g,Qa=n.util.throttle,Tb=[],x=Array.prototype,cc=function(a){var b,c,d=n.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=
-h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};r=function(a,b){if(!(this instanceof r))return new r(a,b);var c=[],d=function(a){(a=cc(a))&&c.push.apply(c,a)};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=ra(c);b&&h.merge(this,b);this.selector={rows:null,cols:null,opts:null};r.extend(this,this,Tb)};n.Api=r;h.extend(r.prototype,{any:function(){return 0!==this.count()},concat:x.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=
-0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new r(b[a],this[a]):null},filter:function(a){var b=[];if(x.filter)b=x.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new r(this.context,b)},flatten:function(){var a=[];return new r(this.context,a.concat.apply(a,this.toArray()))},join:x.join,indexOf:x.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===
-a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,j,h,l,m=this.context,n,o,s=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);g=0;for(j=m.length;g<j;g++){var t=new r(m[g]);if("table"===b)f=c.call(t,m[g],g),f!==k&&e.push(f);else if("columns"===b||"rows"===b)f=c.call(t,m[g],this[g],g),f!==k&&e.push(f);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){o=this[g];"column-rows"===b&&(n=Da(m[g],s.opts));h=0;for(l=o.length;h<l;h++)f=o[h],f="cell"===b?c.call(t,m[g],f.row,f.column,
-g,h):c.call(t,m[g],f,g,h,n),f!==k&&e.push(f)}}return e.length||d?(a=new r(m,a?e.concat.apply([],e):e),b=a.selector,b.rows=s.rows,b.cols=s.cols,b.opts=s.opts,a):this},lastIndexOf:x.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(x.map)b=x.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new r(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:x.pop,
-push:x.push,reduce:x.reduce||function(a,b){return jb(this,a,b,0,this.length,1)},reduceRight:x.reduceRight||function(a,b){return jb(this,a,b,this.length-1,-1,-1)},reverse:x.reverse,selector:null,shift:x.shift,slice:function(){return new r(this.context,this)},sort:x.sort,splice:x.splice,toArray:function(){return x.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},unique:function(){return new r(this.context,ra(this))},unshift:x.unshift});r.extend=function(a,b,c){if(c.length&&
-b&&(b instanceof r||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);r.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===f.type?g(a,f.val,f):"object"===f.type?{}:f.val,b[f.name].__dt_wrapper=!0,r.extend(a,b[f.name],f.propExt)}};r.register=o=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c<d;c++)r.register(a[c],b);else for(var e=a.split("."),f=Tb,g,j,c=0,d=e.length;c<d;c++){g=(j=-1!==e[c].indexOf("()"))?e[c].replace("()",
-""):e[c];var i;a:{i=0;for(var l=f.length;i<l;i++)if(f[i].name===g){i=f[i];break a}i=null}i||(i={name:g,val:{},methodExt:[],propExt:[],type:"object"},f.push(i));c===d-1?(i.val=b,i.type="function"===typeof b?"function":h.isPlainObject(b)?"object":"other"):f=j?i.methodExt:i.propExt}};r.registerPlural=s=function(a,b,c){r.register(a,c);r.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof r?a.length?h.isArray(a[0])?new r(a.context,a[0]):a[0]:k:a})};var Ub=function(a,b){if(h.isArray(a))return h.map(a,
-function(a){return Ub(a,b)});if("number"===typeof a)return[b[a]];var c=h.map(b,function(a){return a.nTable});return h(c).filter(a).map(function(){var a=h.inArray(this,c);return b[a]}).toArray()};o("tables()",function(a){return a!==k&&null!==a?new r(Ub(a,this.context)):this});o("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new r(b[0]):a});s("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});s("tables().body()","table().body()",
-function(){return this.iterator("table",function(a){return a.nTBody},1)});s("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});s("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});s("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});o("draw()",function(a){return this.iterator("table",function(b){"page"===
-a?P(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),T(b,!1===a))})});o("page()",function(a){return a===k?this.page.info().page:this.iterator("table",function(b){Va(b,a)})});o("page.info()",function(){if(0===this.context.length)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,
-serverSide:"ssp"===y(a)}});o("page.len()",function(a){return a===k?0!==this.context.length?this.context[0]._iDisplayLength:k:this.iterator("table",function(b){Ta(b,a)})});var Vb=function(a,b,c){if(c){var d=new r(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==y(a))T(a,b);else{D(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();ta(a,[],function(c){pa(a);for(var c=ua(a,c),d=0,e=c.length;d<e;d++)O(a,c[d]);T(a,b);D(a,!1)})}};o("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});
-o("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});o("ajax.reload()",function(a,b){return this.iterator("table",function(c){Vb(c,!1===b,a)})});o("ajax.url()",function(a){var b=this.context;if(a===k){if(0===b.length)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});o("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Vb(c,
-!1===b,a)})});var bb=function(a,b,c,d,e){var f=[],g,j,i,l,m,n;i=typeof b;if(!b||"string"===i||"function"===i||b.length===k)b=[b];i=0;for(l=b.length;i<l;i++){j=b[i]&&b[i].split&&!b[i].match(/[\[\(:]/)?b[i].split(","):[b[i]];m=0;for(n=j.length;m<n;m++)(g=c("string"===typeof j[m]?h.trim(j[m]):j[m]))&&g.length&&(f=f.concat(g))}a=v.selector[a];if(a.length){i=0;for(l=a.length;i<l;i++)f=a[i](d,e,f)}return ra(f)},cb=function(a){a||(a={});a.filter&&a.search===k&&(a.search=a.filter);return h.extend({search:"none",
-order:"current",page:"all"},a)},db=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Da=function(a,b){var c,d,e,f=[],g=a.aiDisplay;e=a.aiDisplayMaster;var j=b.search;c=b.order;d=b.page;if("ssp"==y(a))return"removed"===j?[]:Z(0,e.length);if("current"==d){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"==c||"applied"==c)if("none"==j)f=e.slice();else if("applied"==j)f=g.slice();
-else{if("removed"==j){var i={};c=0;for(d=g.length;c<d;c++)i[g[c]]=null;f=h.map(e,function(a){return!i.hasOwnProperty(a)?a:null})}}else if("index"==c||"original"==c){c=0;for(d=a.aoData.length;c<d;c++)"none"==j?f.push(c):(e=h.inArray(c,g),(-1===e&&"removed"==j||0<=e&&"applied"==j)&&f.push(c))}return f};o("rows()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=cb(b),c=this.iterator("table",function(c){var e=b,f;return bb("row",a,function(a){var b=Pb(a),i=c.aoData;if(b!==null&&!e)return[b];
-f||(f=Da(c,e));if(b!==null&&h.inArray(b,f)!==-1)return[b];if(a===null||a===k||a==="")return f;if(typeof a==="function")return h.map(f,function(b){var c=i[b];return a(b,c._aData,c.nTr)?b:null});if(a.nodeName){var b=a._DT_RowIndex,l=a._DT_CellIndex;if(b!==k)return i[b]&&i[b].nTr===a?[b]:[];if(l)return i[l.row]&&i[l.row].nTr===a.parentNode?[l.row]:[];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){b=c.aIds[a.replace(/^#/,"")];if(b!==k)return[b.idx]}b=
-Sb(ka(c.aoData,f,"nTr"));return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()},c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});o("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||k},1)});o("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ka(a.aoData,b,"_aData")},1)});s("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:
-d._aSortData},1)});s("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ea(b,c,a)})});s("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b},1)});s("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new r(c,b)});s("rows().remove()","row().remove()",function(){var a=
-this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,l,m;e.splice(c,1);g=0;for(h=e.length;g<h;g++)if(i=e[g],m=i.anCells,null!==i.nTr&&(i.nTr._DT_RowIndex=g),null!==m){i=0;for(l=m.length;i<l;i++)m[i]._DT_CellIndex.row=g}qa(b.aiDisplayMaster,c);qa(b.aiDisplay,c);qa(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;Ua(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});o("rows.add()",
-function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()?h.push(oa(b,c)[0]):h.push(O(b,c));return h},1),c=this.rows(-1);c.pop();h.merge(c,b);return c});o("row()",function(a,b){return db(this.rows(a,b))});o("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;var c=b[0].aoData[this[0]];c._aData=a;h.isArray(a)&&(c.nTr&&c.nTr.id)&&N(b[0].rowId)(a,c.nTr.id);
-ea(b[0],this[0],"data");return this});o("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});o("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?oa(b,a)[0]:O(b,a)});return this.row(b[0])});var eb=function(a,b){var c=a.context;if(c.length&&(c=c[0].aoData[b!==k?b:a[0]])&&c._details)c._details.remove(),c._detailsShow=k,c._details=k},Wb=function(a,
-b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();var e=c[0],f=new r(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<C(g,"_details").length&&(f.on("draw.dt.DT_details",function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===
-b)for(var c,d=W(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&eb(f,c)}))}}};o("row().child()",function(a,b){var c=this.context;if(a===k)return c.length&&this.length?c[0].aoData[this[0]]._details:k;if(!0===a)this.child.show();else if(!1===a)eb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(h.isArray(a)||
-a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else a.nodeName&&"tr"===a.nodeName.toLowerCase()?e.push(a):(c=h("<tr><td/></tr>").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=W(d),e.push(c[0]))};f(a,b);c._details&&c._details.detach();c._details=h(e);c._detailsShow&&c._details.insertAfter(c.nTr)}return this});o(["row().child.show()","row().child().show()"],function(){Wb(this,!0);return this});o(["row().child.hide()","row().child().hide()"],function(){Wb(this,!1);return this});o(["row().child.remove()",
-"row().child().remove()"],function(){eb(this);return this});o("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var dc=/^([^:]+):(name|visIdx|visible)$/,Xb=function(a,b,c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b));return c};o("columns()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=cb(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=C(g,"sName"),i=C(g,"nTh");return bb("column",
-e,function(a){var b=Pb(a);if(a==="")return Z(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Da(c,f);return h.map(g,function(b,f){return a(f,Xb(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(dc):"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],10);if(b<0){var n=h.map(g,function(a,b){return a.bVisible?b:null});return[n[n.length+b]]}return[ba(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&
-a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)},1);c.selector.cols=a;c.selector.opts=b;return c});s("columns().header()","column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});s("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,
-b){return a.aoColumns[b].nTf},1)});s("columns().data()","column().data()",function(){return this.iterator("column-rows",Xb,1)});s("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});s("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ka(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});s("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",
-function(a,b,c,d,e){return ka(a.aoData,e,"anCells",b)},1)});s("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var d=b.aoColumns,j=d[c],i=b.aoData,l,m,n;if(a!==k&&j.bVisible!==a){if(a){var o=h.inArray(!0,C(d,"bVisible"),c+1);l=0;for(m=i.length;l<m;l++)n=i[l].nTr,d=i[l].anCells,n&&n.insertBefore(d[c],d[o]||null)}else h(C(b.aoData,"anCells",c)).detach();j.bVisible=a}});a!==k&&this.iterator("table",function(d){ga(d,
-d.aoHeader);ga(d,d.aoFooter);d.aiDisplay.length||h(d.nTBody).find("td[colspan]").attr("colspan",W(d));za(d);c.iterator("column",function(c,d){t(c,null,"column-visibility",[c,d,a,b])});(b===k||b)&&c.columns.adjust()});return d});s("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?ca(b,c):c},1)});o("columns.adjust()",function(){return this.iterator("table",function(a){aa(a)},1)});o("column.index()",function(a,b){if(0!==this.context.length){var c=
-this.context[0];if("fromVisible"===a||"toData"===a)return ba(c,b);if("fromData"===a||"toVisible"===a)return ca(c,b)}});o("column()",function(a,b){return db(this.columns(a,b))});o("cells()",function(a,b,c){h.isPlainObject(a)&&(a.row===k?(c=a,a=null):(c=b,b=null));h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===k)return this.iterator("table",function(b){var d=a,e=cb(c),f=b.aoData,g=Da(b,e),j=Sb(ka(f,g,"anCells")),i=h([].concat.apply([],j)),l,n=b.aoColumns.length,o,s,r,t,w,v;return bb("cell",d,function(a){var c=
-typeof a==="function";if(a===null||a===k||c){o=[];s=0;for(r=g.length;s<r;s++){l=g[s];for(t=0;t<n;t++){w={row:l,column:t};if(c){v=f[l];a(w,B(b,l,t),v.anCells?v.anCells[t]:null)&&o.push(w)}else o.push(w)}}return o}if(h.isPlainObject(a))return a.column!==k&&a.row!==k&&h.inArray(a.row,g)!==-1?[a]:[];c=i.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||!a.nodeName)return c;v=h(a).closest("*[data-dt-row]");return v.length?[{row:v.data("dt-row"),
-column:v.data("dt-column")}]:[]},b,e)});var d=c?{page:c.page,order:c.order,search:c.search}:{},e=this.columns(b,d),f=this.rows(a,d),g,j,i,l,d=this.iterator("table",function(a,b){var c=[];g=0;for(j=f[b].length;g<j;g++){i=0;for(l=e[b].length;i<l;i++)c.push({row:f[b][g],column:e[b][i]})}return c},1),d=c&&c.selected?this.cells(d,c):d;h.extend(d.selector,{cols:b,rows:a,opts:c});return d});s("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&
-a.anCells?a.anCells[c]:k},1)});o("cells().data()",function(){return this.iterator("cell",function(a,b,c){return B(a,b,c)},1)});s("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});s("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});s("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,
-b,c){return{row:b,column:c,columnVisible:ca(a,c)}},1)});s("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){ea(b,c,a,d)})});o("cell()",function(a,b,c){return db(this.cells(a,b,c))});o("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],c[0].row,c[0].column):k;lb(b[0],c[0].row,c[0].column,a);ea(b[0],c[0].row,"data",c[0].column);return this});o("order()",function(a,b){var c=this.context;if(a===k)return 0!==
-c.length?c[0].aaSorting:k;"number"===typeof a?a=[[a,b]]:a.length&&!h.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});o("order.listener()",function(a,b,c){return this.iterator("table",function(d){Oa(d,a,b,c)})});o("order.fixed()",function(a){if(!a){var b=this.context,b=b.length?b[0].aaSortingFixed:k;return h.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(!0,{},a)})});o(["columns().order()",
-"column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});o("search()",function(a,b,c,d){var e=this.context;return a===k?0!==e.length?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&ha(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});s("columns().search()","column().search()",function(a,
-b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ha(e,e.oPreviousSearch,1))})});o("state()",function(){return this.context.length?this.context[0].oSavedState:null});o("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});o("state.loaded()",function(){return this.context.length?
-this.context[0].oLoadedState:null});o("state.save()",function(){return this.iterator("table",function(a){za(a)})});n.versionCheck=n.fnVersionCheck=function(a){for(var b=n.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};n.isDataTable=n.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;if(a instanceof n.Api)return!0;h.each(n.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?
-h("table",e.nScrollFoot)[0]:null;if(e.nTable===b||f===b||g===b)c=!0});return c};n.tables=n.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(n.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new r(c):c};n.camelToHungarian=J;o("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){o(b+"()",function(){var a=Array.prototype.slice.call(arguments);
-a[0]=h.map(a[0].split(/\s/),function(a){return!a.match(/\.dt\b/)?a+".dt":a}).join(" ");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});o("clear()",function(){return this.iterator("table",function(a){pa(a)})});o("settings()",function(){return new r(this.context,this.context)});o("init()",function(){var a=this.context;return a.length?a[0].oInit:null});o("data()",function(){return this.iterator("table",function(a){return C(a.aoData,"_aData")}).flatten()});o("destroy()",function(a){a=a||
-!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),m=h.map(b.aoData,function(a){return a.nTr}),o;b.bDestroying=!0;t(b,"aoDestroyCallback","destroy",[b]);a||(new r(b)).columns().visible(!0);k.off(".DT").find(":not(tbody *)").off(".DT");h(E).off(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j));
-b.aaSorting=[];b.aaSortingFixed=[];ya(b);h(m).removeClass(b.asStripeClasses.join(" "));h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);f.children().detach();f.append(m);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width",b.sDestroyWidth).removeClass(d.sTable),(o=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%o])}));c=h.inArray(b,n.settings);-1!==c&&n.settings.splice(c,
-1)})});h.each(["column","row","cell"],function(a,b){o(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,l){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,l)})})});o("i18n()",function(a,b,c){var d=this.context[0],a=S(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});n.version="1.10.21";n.settings=[];n.models={};n.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};n.models.oRow=
-{nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};n.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,
-sWidthOrig:null};n.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
-this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+
-a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",
-sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},n.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};
-$(n.defaults);n.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};$(n.defaults.column);n.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,
-bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],
-aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,
-aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,
-b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};n.ext=v={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},
-order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:n.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:n.version};h.extend(v,{afnFiltering:v.search,aTypes:v.type.detect,ofnSearch:v.type.search,oSort:v.type.order,afnSortData:v.order,aoFeatures:v.feature,oApi:v.internal,oStdClasses:v.classes,oPagination:v.pager});h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",
-sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",
-sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Mb=n.ext.pager;h.extend(Mb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ja(a,
-b)]},simple_numbers:function(a,b){return["previous",ja(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ja(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ja(a,b),"last"]},_numbers:ja,numbers_length:7});h.extend(!0,n.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},l,m,n=0,o=function(b,d){var k,s,r,t,v=g.sPageButtonDisabled,w=function(b){Va(a,b.data.action,true)};k=0;for(s=d.length;k<
-s;k++){t=d[k];if(h.isArray(t)){r=h("<"+(t.DT_el||"div")+"/>").appendTo(b);o(r,t)}else{l=null;m=t;r=a.iTabIndex;switch(t){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":l=j.sFirst;if(e===0){r=-1;m=m+(" "+v)}break;case "previous":l=j.sPrevious;if(e===0){r=-1;m=m+(" "+v)}break;case "next":l=j.sNext;if(f===0||e===f-1){r=-1;m=m+(" "+v)}break;case "last":l=j.sLast;if(e===f-1){r=-1;m=m+(" "+v)}break;default:l=t+1;m=e===t?g.sPageButtonActive:""}if(l!==null){r=h("<a>",
-{"class":g.sPageButton+" "+m,"aria-controls":a.sTableId,"aria-label":i[t],"data-dt-idx":n,tabindex:r,id:c===0&&typeof t==="string"?a.sTableId+"_"+t:null}).html(l).appendTo(b);Xa(r,{action:t},w);n++}}}},s;try{s=h(b).find(H.activeElement).data("dt-idx")}catch(r){}o(h(b).empty(),d);s!==k&&h(b).find("[data-dt-idx="+s+"]").trigger("focus")}}});h.extend(n.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return ab(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&!ac.test(a))return null;
-var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date":null},function(a,b){var c=b.oLanguage.sDecimal;return ab(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c,!0)?"html-num-fmt"+c:null},function(a){return M(a)||"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(n.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Ob," ").replace(Ca,""):""},string:function(a){return M(a)?
-a:"string"===typeof a?a.replace(Ob," "):a}});var Ba=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Qb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(v.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return M(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,
-b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});Fa("");h.extend(!0,n.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);
-h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var fb=function(a){return"string"===typeof a?a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,
-"&gt;").replace(/"/g,"&quot;"):a};n.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return fb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:fb,filter:fb}}};h.extend(n.ext.internal,{_fnExternApiFunc:Nb,_fnBuildAjax:ta,_fnAjaxUpdate:nb,_fnAjaxParameters:wb,
-_fnAjaxUpdateDraw:xb,_fnAjaxDataSrc:ua,_fnAddColumn:Ga,_fnColumnOptions:la,_fnAdjustColumnSizing:aa,_fnVisibleToColumnIndex:ba,_fnColumnIndexToVisible:ca,_fnVisbleColumns:W,_fnGetColumns:na,_fnColumnTypes:Ia,_fnApplyColumnDefs:kb,_fnHungarianMap:$,_fnCamelToHungarian:J,_fnLanguageCompat:Ea,_fnBrowserDetect:ib,_fnAddData:O,_fnAddTr:oa,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,
-_fnSetCellData:lb,_fnSplitObjNotation:La,_fnGetObjectDataFn:S,_fnSetObjectDataFn:N,_fnGetDataMaster:Ma,_fnClearTable:pa,_fnDeleteIndex:qa,_fnInvalidate:ea,_fnGetRowElements:Ka,_fnCreateTr:Ja,_fnBuildHead:mb,_fnDrawHead:ga,_fnDraw:P,_fnReDraw:T,_fnAddOptionsHtml:pb,_fnDetectHeader:fa,_fnGetUniqueThs:sa,_fnFeatureHtmlFilter:rb,_fnFilterComplete:ha,_fnFilterCustom:Ab,_fnFilterColumn:zb,_fnFilter:yb,_fnFilterCreateSearch:Ra,_fnEscapeRegex:Sa,_fnFilterData:Bb,_fnFeatureHtmlInfo:ub,_fnUpdateInfo:Eb,_fnInfoMacros:Fb,
-_fnInitialise:ia,_fnInitComplete:va,_fnLengthChange:Ta,_fnFeatureHtmlLength:qb,_fnFeatureHtmlPaginate:vb,_fnPageChange:Va,_fnFeatureHtmlProcessing:sb,_fnProcessingDisplay:D,_fnFeatureHtmlTable:tb,_fnScrollDraw:ma,_fnApplyToChildren:I,_fnCalculateColumnWidths:Ha,_fnThrottle:Qa,_fnConvertToWidth:Gb,_fnGetWidestNode:Hb,_fnGetMaxLenString:Ib,_fnStringToCss:w,_fnSortFlatten:Y,_fnSort:ob,_fnSortAria:Kb,_fnSortListener:Wa,_fnSortAttachListener:Oa,_fnSortingClasses:ya,_fnSortData:Jb,_fnSaveState:za,_fnLoadState:Lb,
-_fnSettingsFromNode:Aa,_fnLog:K,_fnMap:F,_fnBindAction:Xa,_fnCallbackReg:z,_fnCallbackFire:t,_fnLengthOverflow:Ua,_fnRenderer:Pa,_fnDataSource:y,_fnRowAttributes:Na,_fnExtend:Ya,_fnCalculateEnd:function(){}});h.fn.dataTable=n;n.$=h;h.fn.dataTableSettings=n.settings;h.fn.dataTableExt=n.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(n,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable});
+(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var c=function(a,b,f){var g,j;if(""!==f){j=La(f);for(var i=0,h=j.length;i<h;i++){f=j[i].match(da);g=j[i].match(X);if(f){j[i]=j[i].replace(da,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(Array.isArray(a)){i=0;for(h=a.length;i<h;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(X,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};
+return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}function N(a){if(h.isPlainObject(a))return N(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=La(e),f;f=e[e.length-1];for(var g,j,i=0,h=e.length-1;i<h;i++){if("__proto__"===e[i])throw Error("Cannot set prototype values");g=e[i].match(da);j=e[i].match(X);if(g){e[i]=
+e[i].replace(da,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");if(Array.isArray(d)){j=0;for(h=d.length;j<h;j++)f={},b(f,d[j],g),a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(X,""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(X))a[f.replace(X,"")](d);else a[f.replace(da,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ma(a){return C(a.aoData,"_aData")}function pa(a){a.aoData.length=0;a.aiDisplayMaster.length=
+0;a.aiDisplay.length=0;a.aIds={}}function qa(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,1)}function ea(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ka(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=
+a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;Na(a,e)}}function Ka(a,b,c,d){var e=[],f=b.firstChild,g,j,i=0,h,l=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],u=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),N(a)(d,b.getAttribute(c)))}},G=function(a){if(c===k||c===i)j=l[i],h=a.innerHTML.trim(),j&&j._bAttrSrc?(N(j.mData._)(d,h),u(j.mData.sort,a),u(j.mData.type,a),u(j.mData.filter,a)):q?(j._setter||(j._setter=N(j.mData)),
+j._setter(d,h)):d[i]=h;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)G(f),e.push(f);f=f.nextSibling}else{e=b.anCells;f=0;for(g=e.length;f<g;f++)G(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&N(a.rowId)(d,b);return{data:d,cells:e}}function Ja(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,m,l,q,k;if(null===e.nTr){j=c||H.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;Na(a,e);l=0;for(q=a.aoColumns.length;l<q;l++){m=a.aoColumns[l];i=(k=c?!1:!0)?H.createElement(m.sCellType):
+d[l];i._DT_CellIndex={row:b,column:l};g.push(i);if(k||(!c||m.mRender||m.mData!==l)&&(!h.isPlainObject(m.mData)||m.mData._!==l+".display"))i.innerHTML=B(a,b,l,"display");m.sClass&&(i.className+=" "+m.sClass);m.bVisible&&!c?j.appendChild(i):!m.bVisible&&c&&i.parentNode.removeChild(i);m.fnCreatedCell&&m.fnCreatedCell.call(a.oInstance,i,B(a,b,l),f,b,l)}t(a,"aoRowCreatedCallback",null,[j,f,b,g])}e.nTr.setAttribute("role","row")}function Na(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=
+e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?ra(b.__rowc.concat(e)):e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function mb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0===h("th, td",g).length,m=a.oClasses,l=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=l.length;b<c;b++)f=l[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&
+(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Oa(a,f.nTh,b))),f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Pa(a,"header")(a,d,f,m);i&&fa(a.aoHeader,g);h(g).children("tr").attr("role","row");h(g).children("tr").children("th, td").addClass(m.sHeaderTH);h(j).children("tr").children("th, td").addClass(m.sFooterTH);if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=l[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function ga(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,
+m;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(m=i=1,j[d][f]===k){a.appendChild(g[d][f].cell);for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+m]!==k&&g[d][f].cell==g[d][f+m].cell;){for(c=0;c<i;c++)j[d+c][f+m]=1;m++}h(g[d][f].cell).attr("rowspan",
+i).attr("colspan",m)}}}}function P(a){var b=t(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))D(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);var g=a._iDisplayStart,m=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,D(a,!1);else if(j){if(!a.bDestroying&&!nb(a))return}else a.iDraw++;if(0!==i.length){f=
+j?a.aoData.length:m;for(j=j?0:g;j<f;j++){var l=i[j],q=a.aoData[l];null===q.nTr&&Ja(a,l);var u=q.nTr;if(0!==e){var G=d[c%e];q._sRowStripe!=G&&(h(u).removeClass(q._sRowStripe).addClass(G),q._sRowStripe=G)}t(a,"aoRowCallback",null,[u,q._aData,c,j,l]);b.push(u);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords:f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:W(a),"class":a.oClasses.sRowEmpty}).html(c))[0];
+t(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ma(a),g,m,i]);t(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ma(a),g,m,i]);d=h(a.nTBody);d.children().detach();d.append(h(b));t(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&ob(a);d?ha(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;P(a);a._drawHold=!1}function pb(a){var b=a.oClasses,
+c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,m,l,q,k=0;k<f.length;k++){g=null;j=f[k];if("<"==j){i=h("<div/>")[0];m=f[k+1];if("'"==m||'"'==m){l="";for(q=2;f[k+q]!=m;)l+=f[k+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(m=l.split("."),i.id=m[0].substr(1,m[0].length-
+1),i.className=m[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;k+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=qb(a);else if("f"==j&&d.bFilter)g=rb(a);else if("r"==j&&d.bProcessing)g=sb(a);else if("t"==j)g=tb(a);else if("i"==j&&d.bInfo)g=ub(a);else if("p"==j&&d.bPaginate)g=vb(a);else if(0!==n.ext.feature.length){i=n.ext.feature;q=0;for(m=i.length;q<m;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=
+[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function fa(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,m,l,q,k;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan");q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;m=g;k=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][m+j]=
+{cell:e,unique:k},a[f+g].nTr=d}e=e.nextSibling}}}function sa(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],fa(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function ta(a,b,c){t(a,"aoServerParams","serverParams",[b]);if(b&&Array.isArray(b)){var d={},e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,
+i=function(b){t(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var m="function"===typeof f?f(b,a):f,b="function"===typeof f&&m?m:h.extend(!0,b,m);delete g.data}m={data:b,success:function(b){var c=b.error||b.sError;c&&K(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=t(a,null,"xhr",[a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?K(a,0,"Invalid JSON response",1):4===b.readyState&&K(a,0,"Ajax error",7));D(a,!1)}};a.oAjaxData=
+b;t(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(m,{url:g||a.sAjaxSource})):"function"===typeof g?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(m,g)),g.data=f)}function nb(a){return a.bAjaxDataGet?(a.iDraw++,D(a,!0),ta(a,wb(a),function(b){xb(a,b)}),!1):!0}function wb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=
+[],i,m,l,k=Y(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var u=function(a,b){j.push({name:a,value:b})};u("sEcho",a.iDraw);u("iColumns",c);u("sColumns",C(b,"sName").join(","));u("iDisplayStart",g);u("iDisplayLength",i);var G={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)m=b[g],l=f[g],i="function"==typeof m.mData?"function":m.mData,G.columns.push({data:i,name:m.sName,searchable:m.bSearchable,orderable:m.bSortable,search:{value:l.sSearch,
+regex:l.bRegex}}),u("mDataProp_"+g,i),d.bFilter&&(u("sSearch_"+g,l.sSearch),u("bRegex_"+g,l.bRegex),u("bSearchable_"+g,m.bSearchable)),d.bSort&&u("bSortable_"+g,m.bSortable);d.bFilter&&(u("sSearch",e.sSearch),u("bRegex",e.bRegex));d.bSort&&(h.each(k,function(a,b){G.order.push({column:b.col,dir:b.dir});u("iSortCol_"+a,b.col);u("sSortDir_"+a,b.dir)}),u("iSortingCols",k.length));b=n.ext.legacy.ajax;return null===b?a.sAjaxSource?j:G:b?j:G}function xb(a,b){var c=ua(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=
+b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d!==k){if(1*d<a.iDraw)return;a.iDraw=1*d}pa(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,10);d=0;for(e=c.length;d<e;d++)O(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;P(a);a._bInitComplete||va(a,b);a.bAjaxDataGet=!0;D(a,!1)}function ua(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?
+b.aaData||b[c]:""!==c?S(c)(b):b}function rb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),i=function(){var b=!this.value?"":this.value;b!=e.sSearch&&(ha(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,P(a))},
+f=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,m=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",f?Qa(i,f):i).on("mouseup",function(){setTimeout(function(){i.call(m[0])},10)}).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{m[0]!==H.activeElement&&m.val(e.sSearch)}catch(d){}});return b[0]}function ha(a,b,c){var d=a.oPreviousSearch,
+e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ia(a);if("ssp"!=y(a)){yb(a,b.sSearch,c,b.bEscapeRegex!==k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)zb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,e[b].bSmart,e[b].bCaseInsensitive);Ab(a)}else f(b);a.bFiltered=!0;t(a,null,"search",[a])}function Ab(a){for(var b=n.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<
+g;f++){for(var j=[],i=0,m=c.length;i<m;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function zb(a,b,c,d,e,f){if(""!==b){for(var g=[],j=a.aiDisplay,d=Ra(b,d,e,f),e=0;e<j.length;e++)b=a.aoData[j[e]]._aFilterData[c],d.test(b)&&g.push(j[e]);a.aiDisplay=g}}function yb(a,b,c,d,e,f){var e=Ra(b,d,e,f),g=a.oPreviousSearch.sSearch,j=a.aiDisplayMaster,i,f=[];0!==n.ext.search.length&&(c=!0);i=Bb(a);if(0>=b.length)a.aiDisplay=j.slice();else{if(i||c||d||g.length>
+b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=j.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&f.push(b[c]);a.aiDisplay=f}}function Ra(a,b,c,d){a=b?a:Sa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function Bb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,l=n.ext.type.search;c=!1;d=0;for(f=a.aoData.length;d<f;d++)if(h=
+a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),l[c.sType]&&(i=l[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(wa.innerHTML=i,i=Zb?wa.textContent:wa.innerText),i.replace&&(i=i.replace(/[\r\n\u2028]/g,"")),j.push(i);h._aFilterData=j;h._sFilterRow=j.join("  ");c=!0}return c}function Cb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}
+function Db(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function ub(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Eb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Eb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),
+g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Fb(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}function Fb(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/
+e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ia(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){pb(a);mb(a);ga(a,a.aoHeader);ga(a,a.aoFooter);D(a,!0);c.bAutoWidth&&Ha(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=w(f.sWidth));t(a,null,"preInit",[a]);T(a);e=y(a);if("ssp"!=e||g)"ajax"==e?ta(a,[],function(c){var f=ua(a,c);for(b=0;b<f.length;b++)O(a,f[b]);a.iInitDisplayStart=d;T(a);D(a,!1);va(a,c)},a):(D(a,!1),
+va(a))}else setTimeout(function(){ia(a)},200)}function va(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&aa(a);t(a,null,"plugin-init",[a,b]);t(a,"aoInitComplete","init",[a,b])}function Ta(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Ua(a);t(a,null,"length",[a,c])}function qb(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=Array.isArray(d[0]),f=e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]=new Option("number"===
+typeof d[g]?a.fnFormatNumber(d[g]):d[g],f[g]);var i=h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).on("change.DT",function(){Ta(a,h(this).val());P(a)});h(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&h("select",i).val(d)});return i[0]}function vb(a){var b=a.sPaginationType,c=n.ext.pager[b],d="function"===typeof c,e=function(a){P(a)},b=h("<div/>").addClass(a.oClasses.sPaging+
+b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;l<k;l++)Pa(a,"pageButton")(a,f.p[l],l,h,b,i)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Va(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&
+(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:K(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(t(a,null,"page",[a]),c&&P(a));return b}function sb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function D(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");
+t(a,null,"processing",[a,b])}function tb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),m=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?!d?null:w(d):"100%"}).append(h("<div/>",
+{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:w(d)}).append(b));l&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:w(d):"100%"}).append(h("<div/>",{"class":f.sScrollFootInner}).append(m.removeAttr("id").css("margin-left",
+0).append("bottom"===j?g:null).append(b.children("tfoot")))));var b=i.children(),k=b[0],f=b[1],u=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(u.scrollLeft=a)});h(f).css("max-height",e);c.bCollapse||h(f).css("height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=u;a.aoDrawCallback.push({fn:ma,sName:"scrolling"});return i[0]}function ma(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,
+m=j.children("table"),j=a.nScrollBody,l=h(j),q=j.style,u=h(a.nScrollFoot).children("div"),n=u.children("table"),o=h(a.nTHead),p=h(a.nTable),r=p[0],t=r.style,s=a.nTFoot?h(a.nTFoot):null,U=a.oBrowser,V=U.bScrollOversize,$b=C(a.aoColumns,"nTh"),Q,L,R,xa,v=[],x=[],y=[],z=[],A,B=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};L=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==L&&a.scrollBarVis!==k)a.scrollBarVis=L,aa(a);else{a.scrollBarVis=
+L;p.children("thead, tfoot").remove();s&&(R=s.clone().prependTo(p),Q=s.find("tr"),R=R.find("tr"));xa=o.clone().prependTo(p);o=o.find("tr");L=xa.find("tr");xa.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(sa(a,xa),function(b,c){A=ba(a,b);c.style.width=a.aoColumns[A].sWidth});s&&I(function(a){a.style.width=""},R);f=p.outerWidth();if(""===c){t.width="100%";if(V&&(p.find("tbody").height()>j.offsetHeight||"scroll"==l.css("overflow-y")))t.width=w(p.outerWidth()-
+b);f=p.outerWidth()}else""!==d&&(t.width=w(d),f=p.outerWidth());I(B,L);I(function(a){y.push(a.innerHTML);v.push(w(h(a).css("width")))},L);I(function(a,b){if(h.inArray(a,$b)!==-1)a.style.width=v[b]},o);h(L).height(0);s&&(I(B,R),I(function(a){z.push(a.innerHTML);x.push(w(h(a).css("width")))},R),I(function(a,b){a.style.width=x[b]},Q),h(R).height(0));I(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+y[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=
+v[b]},L);s&&I(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+z[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=x[b]},R);if(p.outerWidth()<f){Q=j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(V&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))t.width=w(Q-b);(""===c||""!==d)&&K(a,1,"Possible column misalignment",6)}else Q="100%";q.width=w(Q);g.width=w(Q);s&&(a.nScrollFoot.style.width=w(Q));!e&&V&&(q.height=
+w(r.offsetHeight+b));c=p.outerWidth();m[0].style.width=w(c);i.width=w(c);d=p.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+(U.bScrollbarLeft?"Left":"Right");i[e]=d?b+"px":"0px";s&&(n[0].style.width=w(c),u[0].style.width=w(c),u[0].style[e]=d?b+"px":"0px");p.children("colgroup").insertBefore(p.children("thead"));l.trigger("scroll");if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function I(a,b,c){for(var d=0,e=0,f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:
+null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Ha(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,j=c.length,i=na(a,"bVisible"),m=h("th",a.nTHead),l=b.getAttribute("width"),k=b.parentNode,u=!1,n,o,p=a.oBrowser,d=p.bScrollOversize;(n=b.style.width)&&-1!==n.indexOf("%")&&(l=n);for(n=0;n<i.length;n++)o=c[i[n]],null!==o.sWidth&&(o.sWidth=Gb(o.sWidthOrig,k),u=!0);if(d||!u&&!f&&!e&&j==W(a)&&j==m.length)for(n=0;n<j;n++)i=ba(a,n),
+null!==i&&(c[i].sWidth=w(m.eq(n).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var r=h("<tr/>").appendTo(j.find("tbody"));j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");m=sa(a,j.find("thead")[0]);for(n=0;n<i.length;n++)o=c[i[n]],m[n].style.width=null!==o.sWidthOrig&&""!==o.sWidthOrig?w(o.sWidthOrig):"",o.sWidthOrig&&f&&h(m[n]).append(h("<div/>").css({width:o.sWidthOrig,
+margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(n=0;n<i.length;n++)u=i[n],o=c[u],h(Hb(a,u)).clone(!1).append(o.sContentPadding).appendTo(r);h("[name]",j).removeAttr("name");o=h("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&l&&j.width(k.clientWidth)):e?j.width(k.clientWidth):l&&j.width(l);for(n=e=0;n<i.length;n++)k=h(m[n]),g=k.outerWidth()-
+k.width(),k=p.bBounding?Math.ceil(m[n].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[n]].sWidth=w(k-g);b.style.width=w(e);o.remove()}l&&(b.style.width=w(l));if((l||f)&&!a._reszEvt)b=function(){h(E).on("resize.DT-"+a.sInstance,Qa(function(){aa(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Gb(a,b){if(!a)return 0;var c=h("<div/>").css("width",w(a)).appendTo(b||H.body),d=c[0].offsetWidth;c.remove();return d}function Hb(a,b){var c=Ib(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?
+h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Ib(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace(ac,""),c=c.replace(/&nbsp;/g," "),c.length>d&&(d=c.length,e=f);return e}function w(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function Y(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var m=[];f=function(a){a.length&&!Array.isArray(a[0])?m.push(a):h.merge(m,a)};Array.isArray(b)&&
+f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<m.length;a++){i=m[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType||"string",m[a]._idx===k&&(m[a]._idx=h.inArray(m[a][1],e[g].asSorting)),d.push({src:i,col:g,dir:m[a][1],index:m[a]._idx,type:j,formatter:n.ext.type.order[j+"-pre"]})}return d}function ob(a){var b,c,d=[],e=n.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Ia(a);h=Y(a);b=0;for(c=h.length;b<c;b++)j=h[b],j.formatter&&g++,Jb(a,j.col);if("ssp"!=
+y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,n=f[b]._aSortData;for(g=0;g<i;g++)if(j=h[g],c=k[j.col],e=n[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,n=f[a]._aSortData,o=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=n[i.col],g=o[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<
+g?-1:c>g?1:0})}a.bSorted=!0}function Kb(a){for(var b,c,d=a.aoColumns,e=Y(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g,"");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Wa(a,b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,
+g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b,C(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);T(a);"function"==typeof d&&d(a)}function Oa(a,b,c,d){var e=
+a.aoColumns[c];Xa(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(D(a,!0),setTimeout(function(){Wa(a,c,b.shiftKey,d);"ssp"!==y(a)&&D(a,!1)},0)):Wa(a,c,b.shiftKey,d))})}function ya(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=Y(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(C(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(C(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Jb(a,
+b){var c=a.aoColumns[b],d=n.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ca(a,b)));for(var f,g=n.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function za(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:Cb(a.oPreviousSearch),columns:h.map(a.aoColumns,
+function(b,d){return{visible:b.bVisible,search:Cb(a.aoPreSearchCols[d])}})};t(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Lb(a,b,c){var d,e,f=a.aoColumns,b=function(b){if(b&&b.time){var g=t(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===h.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g)&&!(b.columns&&f.length!==b.columns.length))){a.oLoadedState=h.extend(!0,{},b);b.start!==k&&(a._iDisplayStart=b.start,
+a.iInitDisplayStart=b.start);b.length!==k&&(a._iDisplayLength=b.length);b.order!==k&&(a.aaSorting=[],h.each(b.order,function(b,c){a.aaSorting.push(c[0]>=f.length?[0,c[1]]:c)}));b.search!==k&&h.extend(a.oPreviousSearch,Db(b.search));if(b.columns){d=0;for(e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==k&&(f[d].bVisible=g.visible),g.search!==k&&h.extend(a.aoPreSearchCols[d],Db(g.search))}t(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,
+a,b);g!==k&&b(g)}else c()}function Aa(a){var b=n.settings,a=h.inArray(a,C(b,"nTable"));return-1!==a?b[a]:null}function K(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)E.console&&console.log&&console.log(c);else if(b=n.ext,b=b.sErrMode||b.errMode,a&&t(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function F(a,b,c,d){Array.isArray(c)?
+h.each(c,function(c,d){Array.isArray(d)?F(a,b,d[0],d[1]):F(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Ya(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==e&&Array.isArray(d)?d.slice():d);return a}function Xa(a,b,c){h(a).on("click.DT",b,function(b){h(a).trigger("blur");c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}
+function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function t(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Ua(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Pa(a,b){var c=a.renderer,d=n.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===typeof c?d[c]||
+d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ja(a,b){var c=[],c=Mb.numbers_length,d=Math.floor(c/2);b<=c?c=Z(0,b):a<=d?(c=Z(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=Z(b-(c-2),b):(c=Z(a-d+2,a+d-1),c.push("ellipsis"),c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function Fa(a){h.each({num:function(b){return Ba(b,a)},"num-fmt":function(b){return Ba(b,a,Za)},"html-num":function(b){return Ba(b,a,Ca)},"html-num-fmt":function(b){return Ba(b,
+a,Ca,Za)}},function(b,c){v.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(v.type.search[b+a]=v.type.search.html)})}function Nb(a){return function(){var b=[Aa(this[n.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return n.ext.internal[a].apply(this,b)}}var n=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new r(Aa(this[v.iApiIndex])):new r(this)};this.fnAddData=function(a,b){var c=this.api(!0),
+d=Array.isArray(a)&&(Array.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&ma(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0),a=d.rows(a),e=
+a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};
+this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);
+(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Aa(this[v.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();(d===k||d)&&h.draw();return 0};this.fnVersionCheck=
+v.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=v.internal;for(var e in n.ext.internal)e&&(this[e]=Nb(e));this.each(function(){var e={},g=1<d?Ya(e,a,!0):a,j=0,i,e=this.getAttribute("id"),m=!1,l=n.defaults,q=h(this);if("table"!=this.nodeName.toLowerCase())K(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{gb(l);hb(l.column);J(l,l,!0);J(l.column,l.column,!0);J(l,h.extend(g,q.data()),!0);var u=n.settings,j=0;for(i=u.length;j<i;j++){var o=u[j];if(o.nTable==
+this||o.nTHead&&o.nTHead.parentNode==this||o.nTFoot&&o.nTFoot.parentNode==this){var r=g.bRetrieve!==k?g.bRetrieve:l.bRetrieve;if(c||r)return o.oInstance;if(g.bDestroy!==k?g.bDestroy:l.bDestroy){o.oInstance.fnDestroy();break}else{K(o,0,"Cannot reinitialise DataTable",3);return}}if(o.sTableId==this.id){u.splice(j,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+n.ext._unique++;var p=h.extend(!0,{},n.models.oSettings,{sDestroyWidth:q[0].style.width,sInstance:e,sTableId:e});p.nTable=this;p.oApi=
+b.internal;p.oInit=g;u.push(p);p.oInstance=1===b.length?b:q.dataTable();gb(g);Ea(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=Array.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=Ya(h.extend(!0,{},l),g);F(p.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));F(p,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu",
+"sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);F(p.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);F(p.oLanguage,g,"fnInfoCallback");z(p,"aoDrawCallback",g.fnDrawCallback,
+"user");z(p,"aoServerParams",g.fnServerParams,"user");z(p,"aoStateSaveParams",g.fnStateSaveParams,"user");z(p,"aoStateLoadParams",g.fnStateLoadParams,"user");z(p,"aoStateLoaded",g.fnStateLoaded,"user");z(p,"aoRowCallback",g.fnRowCallback,"user");z(p,"aoRowCreatedCallback",g.fnCreatedRow,"user");z(p,"aoHeaderCallback",g.fnHeaderCallback,"user");z(p,"aoFooterCallback",g.fnFooterCallback,"user");z(p,"aoInitComplete",g.fnInitComplete,"user");z(p,"aoPreDrawCallback",g.fnPreDrawCallback,"user");p.rowIdFn=
+S(g.rowId);ib(p);var s=p.oClasses;h.extend(s,n.ext.classes,g.oClasses);q.addClass(s.sTable);p.iInitDisplayStart===k&&(p.iInitDisplayStart=g.iDisplayStart,p._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(p.bDeferLoading=!0,e=Array.isArray(g.iDeferLoading),p._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,p._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var w=p.oLanguage;h.extend(!0,w,g.oLanguage);w.sUrl&&(h.ajax({dataType:"json",url:w.sUrl,success:function(a){Ea(a);J(l.oLanguage,
+a);h.extend(true,w,a);ia(p)},error:function(){ia(p)}}),m=!0);null===g.asStripeClasses&&(p.asStripeClasses=[s.sStripeOdd,s.sStripeEven]);var e=p.asStripeClasses,v=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(e,function(a){return v.hasClass(a)}))&&(h("tbody tr",this).removeClass(e.join(" ")),p.asDestroyStripes=e.slice());e=[];u=this.getElementsByTagName("thead");0!==u.length&&(fa(p.aoHeader,u[0]),e=sa(p));if(null===g.aoColumns){u=[];j=0;for(i=e.length;j<i;j++)u.push(null)}else u=g.aoColumns;
+j=0;for(i=u.length;j<i;j++)Ga(p,e?e[j]:null);kb(p,g.aoColumnDefs,u,function(a,b){la(p,a,b)});if(v.length){var U=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(v[0]).children("th, td").each(function(a,b){var c=p.aoColumns[a];if(c.mData===a){var d=U(b,"sort")||U(b,"order"),e=U(b,"filter")||U(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};la(p,a)}}})}var V=p.oFeatures,e=function(){if(g.aaSorting===
+k){var a=p.aaSorting;j=0;for(i=a.length;j<i;j++)a[j][1]=p.aoColumns[j].asSorting[0]}ya(p);V.bSort&&z(p,"aoDrawCallback",function(){if(p.bSorted){var a=Y(p),b={};h.each(a,function(a,c){b[c.src]=c.dir});t(p,null,"order",[p,a,b]);Kb(p)}});z(p,"aoDrawCallback",function(){(p.bSorted||y(p)==="ssp"||V.bDeferRender)&&ya(p)},"sc");var a=q.children("caption").each(function(){this._captionSide=h(this).css("caption-side")}),b=q.children("thead");b.length===0&&(b=h("<thead/>").appendTo(q));p.nTHead=b[0];b=q.children("tbody");
+b.length===0&&(b=h("<tbody/>").appendTo(q));p.nTBody=b[0];b=q.children("tfoot");if(b.length===0&&a.length>0&&(p.oScroll.sX!==""||p.oScroll.sY!==""))b=h("<tfoot/>").appendTo(q);if(b.length===0||b.children().length===0)q.addClass(s.sNoFooter);else if(b.length>0){p.nTFoot=b[0];fa(p.aoFooter,p.nTFoot)}if(g.aaData)for(j=0;j<g.aaData.length;j++)O(p,g.aaData[j]);else(p.bDeferLoading||y(p)=="dom")&&oa(p,h(p.nTBody).children("tr"));p.aiDisplay=p.aiDisplayMaster.slice();p.bInitialised=true;m===false&&ia(p)};
+g.bStateSave?(V.bStateSave=!0,z(p,"aoDrawCallback",za,"state_save"),Lb(p,g,e)):e()}});b=null;return this},v,r,o,s,$a={},Ob=/[\r\n\u2028]/g,Ca=/<.*?>/g,bc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,cc=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Za=/['\u00A0,$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Pb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Qb=
+function(a,b){$a[b]||($a[b]=RegExp(Sa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace($a[b],"."):a},ab=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Qb(a,b));c&&d&&(a=a.replace(Za,""));return!isNaN(parseFloat(a))&&isFinite(a)},Rb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:ab(a.replace(Ca,""),b,c)?!0:null},C=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<f;e++)a[e]&&d.push(a[e][b]);
+return d},ka=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&&e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},Z=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Sb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},ra=function(a){var b;a:{if(!(2>a.length)){b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];var e=
+a.length,f,g=0,d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b},Tb=function(a,b){if(Array.isArray(b))for(var c=0;c<b.length;c++)Tb(a,b[c]);else a.push(b);return a};Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)});String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")});n.util={throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=
+this,g=+new Date,j=arguments;if(d&&g<d+c){clearTimeout(e);e=setTimeout(function(){d=k;a.apply(b,j)},c)}else{d=g;a.apply(b,j)}}},escapeRegex:function(a){return a.replace(cc,"\\$1")}};var A=function(a,b,c){a[b]!==k&&(a[c]=a[b])},da=/\[.*?\]$/,X=/\(\)$/,Sa=n.util.escapeRegex,wa=h("<div>")[0],Zb=wa.textContent!==k,ac=/<.*?>/g,Qa=n.util.throttle,Ub=[],x=Array.prototype,dc=function(a){var b,c,d=n.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&a.nodeName.toLowerCase()===
+"table"){b=h.inArray(a,e);return b!==-1?[d[b]]:null}if(a&&typeof a.settings==="function")return a.settings().toArray();typeof a==="string"?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return b!==-1?d[b]:null}).toArray()};r=function(a,b){if(!(this instanceof r))return new r(a,b);var c=[],d=function(a){(a=dc(a))&&c.push.apply(c,a)};if(Array.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=ra(c);b&&h.merge(this,b);this.selector={rows:null,
+cols:null,opts:null};r.extend(this,this,Ub)};n.Api=r;h.extend(r.prototype,{any:function(){return this.count()!==0},concat:x.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new r(b[a],this[a]):null},filter:function(a){var b=[];if(x.filter)b=x.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);
+return new r(this.context,b)},flatten:function(){var a=[];return new r(this.context,a.concat.apply(a,this.toArray()))},join:x.join,indexOf:x.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,j,i,h,l=this.context,n,o,s=this.selector;if(typeof a==="string"){d=c;c=b;b=a;a=false}g=0;for(j=l.length;g<j;g++){var t=new r(l[g]);if(b==="table"){f=c.call(t,l[g],g);f!==k&&e.push(f)}else if(b==="columns"||b==="rows"){f=c.call(t,
+l[g],this[g],g);f!==k&&e.push(f)}else if(b==="column"||b==="column-rows"||b==="row"||b==="cell"){o=this[g];b==="column-rows"&&(n=Da(l[g],s.opts));i=0;for(h=o.length;i<h;i++){f=o[i];f=b==="cell"?c.call(t,l[g],f.row,f.column,g,i):c.call(t,l[g],f,g,i,n);f!==k&&e.push(f)}}}if(e.length||d){a=new r(l,a?e.concat.apply([],e):e);b=a.selector;b.rows=s.rows;b.cols=s.cols;b.opts=s.opts;return a}return this},lastIndexOf:x.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},
+length:0,map:function(a){var b=[];if(x.map)b=x.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new r(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:x.pop,push:x.push,reduce:x.reduce||function(a,b){return jb(this,a,b,0,this.length,1)},reduceRight:x.reduceRight||function(a,b){return jb(this,a,b,this.length-1,-1,-1)},reverse:x.reverse,selector:null,shift:x.shift,slice:function(){return new r(this.context,this)},sort:x.sort,
+splice:x.splice,toArray:function(){return x.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},unique:function(){return new r(this.context,ra(this))},unshift:x.unshift});r.extend=function(a,b,c){if(c.length&&b&&(b instanceof r||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=b.apply(a,arguments);r.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++){f=c[d];b[f.name]=f.type==="function"?g(a,f.val,f):f.type==="object"?{}:f.val;b[f.name].__dt_wrapper=
+true;r.extend(a,b[f.name],f.propExt)}}};r.register=o=function(a,b){if(Array.isArray(a))for(var c=0,d=a.length;c<d;c++)r.register(a[c],b);else for(var e=a.split("."),f=Ub,g,j,c=0,d=e.length;c<d;c++){g=(j=e[c].indexOf("()")!==-1)?e[c].replace("()",""):e[c];var i;a:{i=0;for(var k=f.length;i<k;i++)if(f[i].name===g){i=f[i];break a}i=null}if(!i){i={name:g,val:{},methodExt:[],propExt:[],type:"object"};f.push(i)}if(c===d-1){i.val=b;i.type=typeof b==="function"?"function":h.isPlainObject(b)?"object":"other"}else f=
+j?i.methodExt:i.propExt}};r.registerPlural=s=function(a,b,c){r.register(a,c);r.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof r?a.length?Array.isArray(a[0])?new r(a.context,a[0]):a[0]:k:a})};var Vb=function(a,b){if(Array.isArray(a))return h.map(a,function(a){return Vb(a,b)});if(typeof a==="number")return[b[a]];var c=h.map(b,function(a){return a.nTable});return h(c).filter(a).map(function(){var a=h.inArray(this,c);return b[a]}).toArray()};o("tables()",function(a){return a!==
+k&&a!==null?new r(Vb(a,this.context)):this});o("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new r(b[0]):a});s("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});s("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},1)});s("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});s("tables().footer()","table().footer()",
+function(){return this.iterator("table",function(a){return a.nTFoot},1)});s("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});o("draw()",function(a){return this.iterator("table",function(b){if(a==="page")P(b);else{typeof a==="string"&&(a=a==="full-hold"?false:true);T(b,a===false)}})});o("page()",function(a){return a===k?this.page.info().page:this.iterator("table",function(b){Va(b,a)})});o("page.info()",function(){if(this.context.length===
+0)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=c===-1;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:y(a)==="ssp"}});o("page.len()",function(a){return a===k?this.context.length!==0?this.context[0]._iDisplayLength:k:this.iterator("table",function(b){Ta(b,a)})});var Wb=function(a,b,c){if(c){var d=new r(a);d.one("draw",
+function(){c(d.ajax.json())})}if(y(a)=="ssp")T(a,b);else{D(a,true);var e=a.jqXHR;e&&e.readyState!==4&&e.abort();ta(a,[],function(c){pa(a);for(var c=ua(a,c),d=0,e=c.length;d<e;d++)O(a,c[d]);T(a,b);D(a,false)})}};o("ajax.json()",function(){var a=this.context;if(a.length>0)return a[0].json});o("ajax.params()",function(){var a=this.context;if(a.length>0)return a[0].oAjaxData});o("ajax.reload()",function(a,b){return this.iterator("table",function(c){Wb(c,b===false,a)})});o("ajax.url()",function(a){var b=
+this.context;if(a===k){if(b.length===0)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});o("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Wb(c,b===false,a)})});var bb=function(a,b,c,d,e){var f=[],g,j,h,m,l,n;h=typeof b;if(!b||h==="string"||h==="function"||b.length===k)b=[b];h=0;for(m=b.length;h<m;h++){j=b[h]&&b[h].split&&!b[h].match(/[\[\(:]/)?
+b[h].split(","):[b[h]];l=0;for(n=j.length;l<n;l++)(g=c(typeof j[l]==="string"?j[l].trim():j[l]))&&g.length&&(f=f.concat(g))}a=v.selector[a];if(a.length){h=0;for(m=a.length;h<m;h++)f=a[h](d,e,f)}return ra(f)},cb=function(a){a||(a={});if(a.filter&&a.search===k)a.search=a.filter;return h.extend({search:"none",order:"current",page:"all"},a)},db=function(a){for(var b=0,c=a.length;b<c;b++)if(a[b].length>0){a[0]=a[b];a[0].length=1;a.length=1;a.context=[a.context[b]];return a}a.length=0;return a},Da=function(a,
+b){var c,d,e,f=[],g=a.aiDisplay;e=a.aiDisplayMaster;var j=b.search;c=b.order;d=b.page;if(y(a)=="ssp")return j==="removed"?[]:Z(0,e.length);if(d=="current"){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if(c=="current"||c=="applied")if(j=="none")f=e.slice();else if(j=="applied")f=g.slice();else{if(j=="removed"){var i={};c=0;for(d=g.length;c<d;c++)i[g[c]]=null;f=h.map(e,function(a){return!i.hasOwnProperty(a)?a:null})}}else if(c=="index"||c=="original"){c=0;for(d=a.aoData.length;c<
+d;c++)if(j=="none")f.push(c);else{e=h.inArray(c,g);(e===-1&&j=="removed"||e>=0&&j=="applied")&&f.push(c)}}return f};o("rows()",function(a,b){if(a===k)a="";else if(h.isPlainObject(a)){b=a;a=""}var b=cb(b),c=this.iterator("table",function(c){var e=b,f;return bb("row",a,function(a){var b=Pb(a),i=c.aoData;if(b!==null&&!e)return[b];f||(f=Da(c,e));if(b!==null&&h.inArray(b,f)!==-1)return[b];if(a===null||a===k||a==="")return f;if(typeof a==="function")return h.map(f,function(b){var c=i[b];return a(b,c._aData,
+c.nTr)?b:null});if(a.nodeName){var b=a._DT_RowIndex,m=a._DT_CellIndex;if(b!==k)return i[b]&&i[b].nTr===a?[b]:[];if(m)return i[m.row]&&i[m.row].nTr===a.parentNode?[m.row]:[];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){b=c.aIds[a.replace(/^#/,"")];if(b!==k)return[b.idx]}b=Sb(ka(c.aoData,f,"nTr"));return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()},c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});o("rows().nodes()",
+function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||k},1)});o("rows().data()",function(){return this.iterator(true,"rows",function(a,b){return ka(a.aoData,b,"_aData")},1)});s("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return a==="search"?d._aFilterData:d._aSortData},1)});s("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ea(b,c,a)})});s("rows().indexes()","row().index()",
+function(){return this.iterator("row",function(a,b){return b},1)});s("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((a===true?"#":"")+h)}return new r(c,b)});s("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,m,l;e.splice(c,1);g=0;for(h=e.length;g<h;g++){i=e[g];l=i.anCells;if(i.nTr!==null)i.nTr._DT_RowIndex=
+g;if(l!==null){i=0;for(m=l.length;i<m;i++)l[i]._DT_CellIndex.row=g}}qa(b.aiDisplayMaster,c);qa(b.aiDisplay,c);qa(a[d],c,false);b._iRecordsDisplay>0&&b._iRecordsDisplay--;Ua(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});o("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++){c=a[f];c.nodeName&&c.nodeName.toUpperCase()==="TR"?h.push(oa(b,
+c)[0]):h.push(O(b,c))}return h},1),c=this.rows(-1);c.pop();h.merge(c,b);return c});o("row()",function(a,b){return db(this.rows(a,b))});o("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;var c=b[0].aoData[this[0]];c._aData=a;Array.isArray(a)&&(c.nTr&&c.nTr.id)&&N(b[0].rowId)(a,c.nTr.id);ea(b[0],this[0],"data");return this});o("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});
+o("row.add()",function(a){a instanceof h&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&a.nodeName.toUpperCase()==="TR"?oa(b,a)[0]:O(b,a)});return this.row(b[0])});var eb=function(a,b){var c=a.context;if(c.length)if((c=c[0].aoData[b!==k?b:a[0]])&&c._details){c._details.remove();c._detailsShow=k;c._details=k}},Xb=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();
+var e=c[0],f=new r(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");if(C(g,"_details").length>0){f.on("draw.dt.DT_details",function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})});f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=W(b),f=0,h=g.length;f<h;f++){c=g[f];c._details&&c._details.children("td[colspan]").attr("colspan",d)}});f.on("destroy.dt.DT_details",
+function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&eb(f,c)})}}}};o("row().child()",function(a,b){var c=this.context;if(a===k)return c.length&&this.length?c[0].aoData[this[0]]._details:k;if(a===true)this.child.show();else if(a===false)eb(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(Array.isArray(a)||a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else if(a.nodeName&&a.nodeName.toLowerCase()==="tr")e.push(a);else{c=h("<tr><td></td></tr>").addClass(b);
+h("td",c).addClass(b).html(a)[0].colSpan=W(d);e.push(c[0])}};f(a,b);c._details&&c._details.detach();c._details=h(e);c._detailsShow&&c._details.insertAfter(c.nTr)}return this});o(["row().child.show()","row().child().show()"],function(){Xb(this,true);return this});o(["row().child.hide()","row().child().hide()"],function(){Xb(this,false);return this});o(["row().child.remove()","row().child().remove()"],function(){eb(this);return this});o("row().child.isShown()",function(){var a=this.context;return a.length&&
+this.length?a[0].aoData[this[0]]._detailsShow||false:false});var ec=/^([^:]+):(name|visIdx|visible)$/,Yb=function(a,b,c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b));return c};o("columns()",function(a,b){if(a===k)a="";else if(h.isPlainObject(a)){b=a;a=""}var b=cb(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=C(g,"sName"),i=C(g,"nTh");return bb("column",e,function(a){var b=Pb(a);if(a==="")return Z(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=
+Da(c,f);return h.map(g,function(b,f){return a(f,Yb(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(ec):"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],10);if(b<0){var n=h.map(g,function(a,b){return a.bVisible?b:null});return[n[n.length+b]]}return[ba(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||
+!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)},1);c.selector.cols=a;c.selector.opts=b;return c});s("columns().header()","column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});s("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});s("columns().data()","column().data()",function(){return this.iterator("column-rows",Yb,
+1)});s("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});s("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ka(b.aoData,f,a==="search"?"_aFilterData":"_aSortData",c)},1)});s("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ka(a.aoData,e,"anCells",b)},1)});s("columns().visible()","column().visible()",
+function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var d=b.aoColumns,j=d[c],i=b.aoData,m,l,n;if(a!==k&&j.bVisible!==a){if(a){var o=h.inArray(true,C(d,"bVisible"),c+1);m=0;for(l=i.length;m<l;m++){n=i[m].nTr;d=i[m].anCells;n&&n.insertBefore(d[c],d[o]||null)}}else h(C(b.aoData,"anCells",c)).detach();j.bVisible=a}});a!==k&&this.iterator("table",function(d){ga(d,d.aoHeader);ga(d,d.aoFooter);d.aiDisplay.length||h(d.nTBody).find("td[colspan]").attr("colspan",
+W(d));za(d);c.iterator("column",function(c,d){t(c,null,"column-visibility",[c,d,a,b])});(b===k||b)&&c.columns.adjust()});return d});s("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return a==="visible"?ca(b,c):c},1)});o("columns.adjust()",function(){return this.iterator("table",function(a){aa(a)},1)});o("column.index()",function(a,b){if(this.context.length!==0){var c=this.context[0];if(a==="fromVisible"||a==="toData")return ba(c,b);if(a==="fromData"||
+a==="toVisible")return ca(c,b)}});o("column()",function(a,b){return db(this.columns(a,b))});o("cells()",function(a,b,c){if(h.isPlainObject(a))if(a.row===k){c=a;a=null}else{c=b;b=null}if(h.isPlainObject(b)){c=b;b=null}if(b===null||b===k)return this.iterator("table",function(b){var d=a,e=cb(c),f=b.aoData,g=Da(b,e),j=Sb(ka(f,g,"anCells")),i=h(Tb([],j)),m,n=b.aoColumns.length,o,s,r,t,w,v;return bb("cell",d,function(a){var c=typeof a==="function";if(a===null||a===k||c){o=[];s=0;for(r=g.length;s<r;s++){m=
+g[s];for(t=0;t<n;t++){w={row:m,column:t};if(c){v=f[m];a(w,B(b,m,t),v.anCells?v.anCells[t]:null)&&o.push(w)}else o.push(w)}}return o}if(h.isPlainObject(a))return a.column!==k&&a.row!==k&&h.inArray(a.row,g)!==-1?[a]:[];c=i.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||!a.nodeName)return c;v=h(a).closest("*[data-dt-row]");return v.length?[{row:v.data("dt-row"),column:v.data("dt-column")}]:[]},b,e)});var d=c?{page:c.page,order:c.order,
+search:c.search}:{},e=this.columns(b,d),f=this.rows(a,d),g,j,i,m,d=this.iterator("table",function(a,b){var c=[];g=0;for(j=f[b].length;g<j;g++){i=0;for(m=e[b].length;i<m;i++)c.push({row:f[b][g],column:e[b][i]})}return c},1),d=c&&c.selected?this.cells(d,c):d;h.extend(d.selector,{cols:b,rows:a,opts:c});return d});s("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:k},1)});o("cells().data()",function(){return this.iterator("cell",
+function(a,b,c){return B(a,b,c)},1)});s("cells().cache()","cell().cache()",function(a){a=a==="search"?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});s("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});s("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ca(a,c)}},1)});s("cells().invalidate()","cell().invalidate()",
+function(a){return this.iterator("cell",function(b,c,d){ea(b,c,a,d)})});o("cell()",function(a,b,c){return db(this.cells(a,b,c))});o("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],c[0].row,c[0].column):k;lb(b[0],c[0].row,c[0].column,a);ea(b[0],c[0].row,"data",c[0].column);return this});o("order()",function(a,b){var c=this.context;if(a===k)return c.length!==0?c[0].aaSorting:k;typeof a==="number"?a=[[a,b]]:a.length&&!Array.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));
+return this.iterator("table",function(b){b.aaSorting=a.slice()})});o("order.listener()",function(a,b,c){return this.iterator("table",function(d){Oa(d,a,b,c)})});o("order.fixed()",function(a){if(!a){var b=this.context,b=b.length?b[0].aaSortingFixed:k;return Array.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(true,{},a)})});o(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,
+c){e.push([c,a])});c.aaSorting=e})});o("search()",function(a,b,c,d){var e=this.context;return a===k?e.length!==0?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&ha(e,h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:b===null?false:b,bSmart:c===null?true:c,bCaseInsensitive:d===null?true:d}),1)})});s("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;if(e.oFeatures.bFilter){h.extend(g[f],
+{sSearch:a+"",bRegex:b===null?false:b,bSmart:c===null?true:c,bCaseInsensitive:d===null?true:d});ha(e,e.oPreviousSearch,1)}})});o("state()",function(){return this.context.length?this.context[0].oSavedState:null});o("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});o("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});o("state.save()",function(){return this.iterator("table",function(a){za(a)})});
+n.versionCheck=n.fnVersionCheck=function(a){for(var b=n.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++){c=parseInt(b[e],10)||0;d=parseInt(a[e],10)||0;if(c!==d)return c>d}return true};n.isDataTable=n.fnIsDataTable=function(a){var b=h(a).get(0),c=false;if(a instanceof n.Api)return true;h.each(n.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?h("table",e.nScrollFoot)[0]:null;if(e.nTable===b||f===b||g===b)c=true});return c};n.tables=n.fnTables=
+function(a){var b=false;if(h.isPlainObject(a)){b=a.api;a=a.visible}var c=h.map(n.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new r(c):c};n.camelToHungarian=J;o("$()",function(a,b){var c=this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){o(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=h.map(a[0].split(/\s/),function(a){return!a.match(/\.dt\b/)?a+".dt":a}).join(" ");
+var d=h(this.tables().nodes());d[b].apply(d,a);return this})});o("clear()",function(){return this.iterator("table",function(a){pa(a)})});o("settings()",function(){return new r(this.context,this.context)});o("init()",function(){var a=this.context;return a.length?a[0].oInit:null});o("data()",function(){return this.iterator("table",function(a){return C(a.aoData,"_aData")}).flatten()});o("destroy()",function(a){a=a||false;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,
+e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),o;b.bDestroying=true;t(b,"aoDestroyCallback","destroy",[b]);a||(new r(b)).columns().visible(true);k.off(".DT").find(":not(tbody *)").off(".DT");h(E).off(".DT-"+b.sInstance);if(e!=g.parentNode){i.children("thead").detach();i.append(g)}if(j&&e!=j.parentNode){i.children("tfoot").detach();i.append(j)}b.aaSorting=[];b.aaSortingFixed=[];ya(b);h(l).removeClass(b.asStripeClasses.join(" "));
+h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();if(!a&&c){c.insertBefore(e,b.nTableReinsertBefore);i.css("width",b.sDestroyWidth).removeClass(d.sTable);(o=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%o])})}c=h.inArray(b,n.settings);c!==-1&&n.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){o(b+"s().every()",
+function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,m){a.call(e[b](g,b==="cell"?h:d,b==="cell"?d:k),g,h,i,m)})})});o("i18n()",function(a,b,c){var d=this.context[0],a=S(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:a._);return a.replace("%d",c)});n.version="1.10.22";n.settings=[];n.models={};n.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};n.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,
+_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};n.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};n.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],
+ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,
+fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((a.iStateDuration===-1?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){return{}}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(a.iStateDuration===-1?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},
+fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",
+sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},n.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};$(n.defaults);n.defaults.column={aDataSort:null,
+iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};$(n.defaults.column);n.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,
+iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],
+aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,
+iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return y(this)=="ssp"?this._iRecordsTotal*1:this.aiDisplayMaster.length},fnRecordsDisplay:function(){return y(this)=="ssp"?this._iRecordsDisplay*1:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,
+f=e.bPaginate;return e.bServerSide?f===false||a===-1?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||a===-1?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};n.ext=v={buttons:{},classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:n.fnVersionCheck,
+iApiIndex:0,oJUIClasses:{},sVersion:n.version};h.extend(v,{afnFiltering:v.search,aTypes:v.type.detect,ofnSearch:v.type.search,oSort:v.type.order,afnSortData:v.order,aoFeatures:v.feature,oApi:v.internal,oStdClasses:v.classes,oPagination:v.pager});h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",
+sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",
+sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sJUIHeader:"",sJUIFooter:""});var Mb=n.ext.pager;h.extend(Mb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ja(a,b)]},simple_numbers:function(a,b){return["previous",ja(a,b),"next"]},full_numbers:function(a,
+b){return["first","previous",ja(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ja(a,b),"last"]},_numbers:ja,numbers_length:7});h.extend(!0,n.ext.renderer,{pageButton:{_:function(a,b,c,d,e,f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},m,l,n=0,o=function(b,d){var k,s,r,t,v=g.sPageButtonDisabled,w=function(b){Va(a,b.data.action,true)};k=0;for(s=d.length;k<s;k++){t=d[k];if(Array.isArray(t)){r=h("<"+(t.DT_el||"div")+"/>").appendTo(b);o(r,t)}else{m=null;
+l=t;r=a.iTabIndex;switch(t){case "ellipsis":b.append('<span class="ellipsis">&#x2026;</span>');break;case "first":m=j.sFirst;if(e===0){r=-1;l=l+(" "+v)}break;case "previous":m=j.sPrevious;if(e===0){r=-1;l=l+(" "+v)}break;case "next":m=j.sNext;if(f===0||e===f-1){r=-1;l=l+(" "+v)}break;case "last":m=j.sLast;if(f===0||e===f-1){r=-1;l=l+(" "+v)}break;default:m=a.fnFormatNumber(t+1);l=e===t?g.sPageButtonActive:""}if(m!==null){r=h("<a>",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[t],
+"data-dt-idx":n,tabindex:r,id:c===0&&typeof t==="string"?a.sTableId+"_"+t:null}).html(m).appendTo(b);Xa(r,{action:t},w);n++}}}},s;try{s=h(b).find(H.activeElement).data("dt-idx")}catch(r){}o(h(b).empty(),d);s!==k&&h(b).find("[data-dt-idx="+s+"]").trigger("focus")}}});h.extend(n.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return ab(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&!bc.test(a))return null;var b=Date.parse(a);return b!==null&&!isNaN(b)||M(a)?"date":null},function(a,
+b){var c=b.oLanguage.sDecimal;return ab(a,c,true)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Rb(a,c,true)?"html-num-fmt"+c:null},function(a){return M(a)||typeof a==="string"&&a.indexOf("<")!==-1?"html":null}]);h.extend(n.ext.type.search,{html:function(a){return M(a)?a:typeof a==="string"?a.replace(Ob," ").replace(Ca,""):""},string:function(a){return M(a)?a:typeof a==="string"?a.replace(Ob," "):a}});var Ba=
+function(a,b,c,d){if(a!==0&&(!a||a==="-"))return-Infinity;b&&(a=Qb(a,b));if(a.replace){c&&(a=a.replace(c,""));d&&(a=a.replace(d,""))}return a*1};h.extend(v.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return M(a)?"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":typeof a==="string"?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,
+b){return a<b?1:a>b?-1:0}});Fa("");h.extend(!0,n.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,
+f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]=="asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var fb=function(a){return typeof a==="string"?a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"):
+a};n.render={number:function(a,b,c,d,e){return{display:function(f){if(typeof f!=="number"&&typeof f!=="string")return f;var g=f<0?"-":"",h=parseFloat(f);if(isNaN(h))return fb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,a)+f+(e||"")}}},text:function(){return{display:fb,filter:fb}}};h.extend(n.ext.internal,{_fnExternApiFunc:Nb,_fnBuildAjax:ta,_fnAjaxUpdate:nb,_fnAjaxParameters:wb,_fnAjaxUpdateDraw:xb,
+_fnAjaxDataSrc:ua,_fnAddColumn:Ga,_fnColumnOptions:la,_fnAdjustColumnSizing:aa,_fnVisibleToColumnIndex:ba,_fnColumnIndexToVisible:ca,_fnVisbleColumns:W,_fnGetColumns:na,_fnColumnTypes:Ia,_fnApplyColumnDefs:kb,_fnHungarianMap:$,_fnCamelToHungarian:J,_fnLanguageCompat:Ea,_fnBrowserDetect:ib,_fnAddData:O,_fnAddTr:oa,_fnNodeToDataIndex:function(a,b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:lb,
+_fnSplitObjNotation:La,_fnGetObjectDataFn:S,_fnSetObjectDataFn:N,_fnGetDataMaster:Ma,_fnClearTable:pa,_fnDeleteIndex:qa,_fnInvalidate:ea,_fnGetRowElements:Ka,_fnCreateTr:Ja,_fnBuildHead:mb,_fnDrawHead:ga,_fnDraw:P,_fnReDraw:T,_fnAddOptionsHtml:pb,_fnDetectHeader:fa,_fnGetUniqueThs:sa,_fnFeatureHtmlFilter:rb,_fnFilterComplete:ha,_fnFilterCustom:Ab,_fnFilterColumn:zb,_fnFilter:yb,_fnFilterCreateSearch:Ra,_fnEscapeRegex:Sa,_fnFilterData:Bb,_fnFeatureHtmlInfo:ub,_fnUpdateInfo:Eb,_fnInfoMacros:Fb,_fnInitialise:ia,
+_fnInitComplete:va,_fnLengthChange:Ta,_fnFeatureHtmlLength:qb,_fnFeatureHtmlPaginate:vb,_fnPageChange:Va,_fnFeatureHtmlProcessing:sb,_fnProcessingDisplay:D,_fnFeatureHtmlTable:tb,_fnScrollDraw:ma,_fnApplyToChildren:I,_fnCalculateColumnWidths:Ha,_fnThrottle:Qa,_fnConvertToWidth:Gb,_fnGetWidestNode:Hb,_fnGetMaxLenString:Ib,_fnStringToCss:w,_fnSortFlatten:Y,_fnSort:ob,_fnSortAria:Kb,_fnSortListener:Wa,_fnSortAttachListener:Oa,_fnSortingClasses:ya,_fnSortData:Jb,_fnSaveState:za,_fnLoadState:Lb,_fnSettingsFromNode:Aa,
+_fnLog:K,_fnMap:F,_fnBindAction:Xa,_fnCallbackReg:z,_fnCallbackFire:t,_fnLengthOverflow:Ua,_fnRenderer:Pa,_fnDataSource:y,_fnRowAttributes:Na,_fnExtend:Ya,_fnCalculateEnd:function(){}});h.fn.dataTable=n;n.$=h;h.fn.dataTableSettings=n.settings;h.fn.dataTableExt=n.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};h.each(n,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable});

+ 48 - 48
plugins/fontawesome-free/css/all.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 .fa,
@@ -442,10 +442,10 @@ readers do not read off random characters that represent icons */
   content: "\f7e5"; }
 
 .fa-bacteria:before {
-  content: "\f959"; }
+  content: "\e059"; }
 
 .fa-bacterium:before {
-  content: "\f95a"; }
+  content: "\e05a"; }
 
 .fa-bahai:before {
   content: "\f666"; }
@@ -637,7 +637,7 @@ readers do not read off random characters that represent icons */
   content: "\f49e"; }
 
 .fa-box-tissue:before {
-  content: "\f95b"; }
+  content: "\e05b"; }
 
 .fa-boxes:before {
   content: "\f468"; }
@@ -1213,7 +1213,7 @@ readers do not read off random characters that represent icons */
   content: "\f6ca"; }
 
 .fa-dailymotion:before {
-  content: "\f952"; }
+  content: "\e052"; }
 
 .fa-dashcube:before {
   content: "\f210"; }
@@ -1225,7 +1225,7 @@ readers do not read off random characters that represent icons */
   content: "\f2a4"; }
 
 .fa-deezer:before {
-  content: "\f977"; }
+  content: "\e077"; }
 
 .fa-delicious:before {
   content: "\f1a5"; }
@@ -1411,7 +1411,7 @@ readers do not read off random characters that represent icons */
   content: "\f282"; }
 
 .fa-edge-legacy:before {
-  content: "\f978"; }
+  content: "\e078"; }
 
 .fa-edit:before {
   content: "\f044"; }
@@ -1543,7 +1543,7 @@ readers do not read off random characters that represent icons */
   content: "\f050"; }
 
 .fa-faucet:before {
-  content: "\f905"; }
+  content: "\e005"; }
 
 .fa-fax:before {
   content: "\f1ac"; }
@@ -1666,7 +1666,7 @@ readers do not read off random characters that represent icons */
   content: "\f269"; }
 
 .fa-firefox-browser:before {
-  content: "\f907"; }
+  content: "\e007"; }
 
 .fa-first-aid:before {
   content: "\f479"; }
@@ -1906,7 +1906,7 @@ readers do not read off random characters that represent icons */
   content: "\f3aa"; }
 
 .fa-google-pay:before {
-  content: "\f979"; }
+  content: "\e079"; }
 
 .fa-google-play:before {
   content: "\f3ab"; }
@@ -2035,7 +2035,7 @@ readers do not read off random characters that represent icons */
   content: "\f4be"; }
 
 .fa-hand-holding-medical:before {
-  content: "\f95c"; }
+  content: "\e05c"; }
 
 .fa-hand-holding-usd:before {
   content: "\f4c0"; }
@@ -2077,7 +2077,7 @@ readers do not read off random characters that represent icons */
   content: "\f257"; }
 
 .fa-hand-sparkles:before {
-  content: "\f95d"; }
+  content: "\e05d"; }
 
 .fa-hand-spock:before {
   content: "\f259"; }
@@ -2089,16 +2089,16 @@ readers do not read off random characters that represent icons */
   content: "\f4c4"; }
 
 .fa-hands-wash:before {
-  content: "\f95e"; }
+  content: "\e05e"; }
 
 .fa-handshake:before {
   content: "\f2b5"; }
 
 .fa-handshake-alt-slash:before {
-  content: "\f95f"; }
+  content: "\e05f"; }
 
 .fa-handshake-slash:before {
-  content: "\f960"; }
+  content: "\e060"; }
 
 .fa-hanukiah:before {
   content: "\f6e6"; }
@@ -2122,16 +2122,16 @@ readers do not read off random characters that represent icons */
   content: "\f0a0"; }
 
 .fa-head-side-cough:before {
-  content: "\f961"; }
+  content: "\e061"; }
 
 .fa-head-side-cough-slash:before {
-  content: "\f962"; }
+  content: "\e062"; }
 
 .fa-head-side-mask:before {
-  content: "\f963"; }
+  content: "\e063"; }
 
 .fa-head-side-virus:before {
-  content: "\f964"; }
+  content: "\e064"; }
 
 .fa-heading:before {
   content: "\f1dc"; }
@@ -2236,7 +2236,7 @@ readers do not read off random characters that represent icons */
   content: "\f6f1"; }
 
 .fa-house-user:before {
-  content: "\f965"; }
+  content: "\e065"; }
 
 .fa-houzz:before {
   content: "\f27c"; }
@@ -2272,7 +2272,7 @@ readers do not read off random characters that represent icons */
   content: "\f47f"; }
 
 .fa-ideal:before {
-  content: "\f913"; }
+  content: "\e013"; }
 
 .fa-igloo:before {
   content: "\f7ae"; }
@@ -2308,7 +2308,7 @@ readers do not read off random characters that represent icons */
   content: "\f16d"; }
 
 .fa-instagram-square:before {
-  content: "\f955"; }
+  content: "\e055"; }
 
 .fa-intercom:before {
   content: "\f7af"; }
@@ -2425,7 +2425,7 @@ readers do not read off random characters that represent icons */
   content: "\f5fc"; }
 
 .fa-laptop-house:before {
-  content: "\f966"; }
+  content: "\e066"; }
 
 .fa-laptop-medical:before {
   content: "\f812"; }
@@ -2548,7 +2548,7 @@ readers do not read off random characters that represent icons */
   content: "\f604"; }
 
 .fa-lungs-virus:before {
-  content: "\f967"; }
+  content: "\e067"; }
 
 .fa-lyft:before {
   content: "\f3c3"; }
@@ -2677,7 +2677,7 @@ readers do not read off random characters that represent icons */
   content: "\f753"; }
 
 .fa-microblog:before {
-  content: "\f91a"; }
+  content: "\e01a"; }
 
 .fa-microchip:before {
   content: "\f2db"; }
@@ -2719,7 +2719,7 @@ readers do not read off random characters that represent icons */
   content: "\f289"; }
 
 .fa-mixer:before {
-  content: "\f956"; }
+  content: "\e056"; }
 
 .fa-mizuni:before {
   content: "\f3cc"; }
@@ -2959,7 +2959,7 @@ readers do not read off random characters that represent icons */
   content: "\f704"; }
 
 .fa-people-arrows:before {
-  content: "\f968"; }
+  content: "\e068"; }
 
 .fa-people-carry:before {
   content: "\f4ce"; }
@@ -3025,7 +3025,7 @@ readers do not read off random characters that represent icons */
   content: "\f1a7"; }
 
 .fa-pied-piper-square:before {
-  content: "\f91e"; }
+  content: "\e01e"; }
 
 .fa-piggy-bank:before {
   content: "\f4d3"; }
@@ -3058,7 +3058,7 @@ readers do not read off random characters that represent icons */
   content: "\f5b0"; }
 
 .fa-plane-slash:before {
-  content: "\f969"; }
+  content: "\e069"; }
 
 .fa-play:before {
   content: "\f04b"; }
@@ -3136,10 +3136,10 @@ readers do not read off random characters that represent icons */
   content: "\f542"; }
 
 .fa-pump-medical:before {
-  content: "\f96a"; }
+  content: "\e06a"; }
 
 .fa-pump-soap:before {
-  content: "\f96b"; }
+  content: "\e06b"; }
 
 .fa-pushed:before {
   content: "\f3e1"; }
@@ -3331,7 +3331,7 @@ readers do not read off random characters that represent icons */
   content: "\f156"; }
 
 .fa-rust:before {
-  content: "\f97a"; }
+  content: "\e07a"; }
 
 .fa-sad-cry:before {
   content: "\f5b3"; }
@@ -3430,7 +3430,7 @@ readers do not read off random characters that represent icons */
   content: "\f3ed"; }
 
 .fa-shield-virus:before {
-  content: "\f96c"; }
+  content: "\e06c"; }
 
 .fa-ship:before {
   content: "\f21a"; }
@@ -3445,7 +3445,7 @@ readers do not read off random characters that represent icons */
   content: "\f54b"; }
 
 .fa-shopify:before {
-  content: "\f957"; }
+  content: "\e057"; }
 
 .fa-shopping-bag:before {
   content: "\f290"; }
@@ -3490,7 +3490,7 @@ readers do not read off random characters that represent icons */
   content: "\f215"; }
 
 .fa-sink:before {
-  content: "\f96d"; }
+  content: "\e06d"; }
 
 .fa-sistrix:before {
   content: "\f3ee"; }
@@ -3586,7 +3586,7 @@ readers do not read off random characters that represent icons */
   content: "\f7d2"; }
 
 .fa-soap:before {
-  content: "\f96e"; }
+  content: "\e06e"; }
 
 .fa-socks:before {
   content: "\f696"; }
@@ -3754,7 +3754,7 @@ readers do not read off random characters that represent icons */
   content: "\f2f2"; }
 
 .fa-stopwatch-20:before {
-  content: "\f96f"; }
+  content: "\e06f"; }
 
 .fa-store:before {
   content: "\f54e"; }
@@ -3763,10 +3763,10 @@ readers do not read off random characters that represent icons */
   content: "\f54f"; }
 
 .fa-store-alt-slash:before {
-  content: "\f970"; }
+  content: "\e070"; }
 
 .fa-store-slash:before {
-  content: "\f971"; }
+  content: "\e071"; }
 
 .fa-strava:before {
   content: "\f428"; }
@@ -3979,7 +3979,7 @@ readers do not read off random characters that represent icons */
   content: "\f3ff"; }
 
 .fa-tiktok:before {
-  content: "\f97b"; }
+  content: "\e07b"; }
 
 .fa-times:before {
   content: "\f00d"; }
@@ -4009,7 +4009,7 @@ readers do not read off random characters that represent icons */
   content: "\f71e"; }
 
 .fa-toilet-paper-slash:before {
-  content: "\f972"; }
+  content: "\e072"; }
 
 .fa-toolbox:before {
   content: "\f552"; }
@@ -4039,7 +4039,7 @@ readers do not read off random characters that represent icons */
   content: "\f637"; }
 
 .fa-trailer:before {
-  content: "\f941"; }
+  content: "\e041"; }
 
 .fa-train:before {
   content: "\f238"; }
@@ -4150,7 +4150,7 @@ readers do not read off random characters that represent icons */
   content: "\f404"; }
 
 .fa-unity:before {
-  content: "\f949"; }
+  content: "\e049"; }
 
 .fa-universal-access:before {
   content: "\f29a"; }
@@ -4168,7 +4168,7 @@ readers do not read off random characters that represent icons */
   content: "\f13e"; }
 
 .fa-unsplash:before {
-  content: "\f97c"; }
+  content: "\e07c"; }
 
 .fa-untappd:before {
   content: "\f405"; }
@@ -4261,7 +4261,7 @@ readers do not read off random characters that represent icons */
   content: "\f509"; }
 
 .fa-users-slash:before {
-  content: "\f973"; }
+  content: "\e073"; }
 
 .fa-usps:before {
   content: "\f7e1"; }
@@ -4330,13 +4330,13 @@ readers do not read off random characters that represent icons */
   content: "\f1ca"; }
 
 .fa-virus:before {
-  content: "\f974"; }
+  content: "\e074"; }
 
 .fa-virus-slash:before {
-  content: "\f975"; }
+  content: "\e075"; }
 
 .fa-viruses:before {
-  content: "\f976"; }
+  content: "\e076"; }
 
 .fa-vk:before {
   content: "\f189"; }

Plik diff jest za duży
+ 1 - 1
plugins/fontawesome-free/css/all.min.css


+ 1 - 1
plugins/fontawesome-free/css/brands.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 @font-face {

+ 1 - 1
plugins/fontawesome-free/css/brands.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 @font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands";font-weight:400}

+ 48 - 48
plugins/fontawesome-free/css/fontawesome.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 .fa,
@@ -442,10 +442,10 @@ readers do not read off random characters that represent icons */
   content: "\f7e5"; }
 
 .fa-bacteria:before {
-  content: "\f959"; }
+  content: "\e059"; }
 
 .fa-bacterium:before {
-  content: "\f95a"; }
+  content: "\e05a"; }
 
 .fa-bahai:before {
   content: "\f666"; }
@@ -637,7 +637,7 @@ readers do not read off random characters that represent icons */
   content: "\f49e"; }
 
 .fa-box-tissue:before {
-  content: "\f95b"; }
+  content: "\e05b"; }
 
 .fa-boxes:before {
   content: "\f468"; }
@@ -1213,7 +1213,7 @@ readers do not read off random characters that represent icons */
   content: "\f6ca"; }
 
 .fa-dailymotion:before {
-  content: "\f952"; }
+  content: "\e052"; }
 
 .fa-dashcube:before {
   content: "\f210"; }
@@ -1225,7 +1225,7 @@ readers do not read off random characters that represent icons */
   content: "\f2a4"; }
 
 .fa-deezer:before {
-  content: "\f977"; }
+  content: "\e077"; }
 
 .fa-delicious:before {
   content: "\f1a5"; }
@@ -1411,7 +1411,7 @@ readers do not read off random characters that represent icons */
   content: "\f282"; }
 
 .fa-edge-legacy:before {
-  content: "\f978"; }
+  content: "\e078"; }
 
 .fa-edit:before {
   content: "\f044"; }
@@ -1543,7 +1543,7 @@ readers do not read off random characters that represent icons */
   content: "\f050"; }
 
 .fa-faucet:before {
-  content: "\f905"; }
+  content: "\e005"; }
 
 .fa-fax:before {
   content: "\f1ac"; }
@@ -1666,7 +1666,7 @@ readers do not read off random characters that represent icons */
   content: "\f269"; }
 
 .fa-firefox-browser:before {
-  content: "\f907"; }
+  content: "\e007"; }
 
 .fa-first-aid:before {
   content: "\f479"; }
@@ -1906,7 +1906,7 @@ readers do not read off random characters that represent icons */
   content: "\f3aa"; }
 
 .fa-google-pay:before {
-  content: "\f979"; }
+  content: "\e079"; }
 
 .fa-google-play:before {
   content: "\f3ab"; }
@@ -2035,7 +2035,7 @@ readers do not read off random characters that represent icons */
   content: "\f4be"; }
 
 .fa-hand-holding-medical:before {
-  content: "\f95c"; }
+  content: "\e05c"; }
 
 .fa-hand-holding-usd:before {
   content: "\f4c0"; }
@@ -2077,7 +2077,7 @@ readers do not read off random characters that represent icons */
   content: "\f257"; }
 
 .fa-hand-sparkles:before {
-  content: "\f95d"; }
+  content: "\e05d"; }
 
 .fa-hand-spock:before {
   content: "\f259"; }
@@ -2089,16 +2089,16 @@ readers do not read off random characters that represent icons */
   content: "\f4c4"; }
 
 .fa-hands-wash:before {
-  content: "\f95e"; }
+  content: "\e05e"; }
 
 .fa-handshake:before {
   content: "\f2b5"; }
 
 .fa-handshake-alt-slash:before {
-  content: "\f95f"; }
+  content: "\e05f"; }
 
 .fa-handshake-slash:before {
-  content: "\f960"; }
+  content: "\e060"; }
 
 .fa-hanukiah:before {
   content: "\f6e6"; }
@@ -2122,16 +2122,16 @@ readers do not read off random characters that represent icons */
   content: "\f0a0"; }
 
 .fa-head-side-cough:before {
-  content: "\f961"; }
+  content: "\e061"; }
 
 .fa-head-side-cough-slash:before {
-  content: "\f962"; }
+  content: "\e062"; }
 
 .fa-head-side-mask:before {
-  content: "\f963"; }
+  content: "\e063"; }
 
 .fa-head-side-virus:before {
-  content: "\f964"; }
+  content: "\e064"; }
 
 .fa-heading:before {
   content: "\f1dc"; }
@@ -2236,7 +2236,7 @@ readers do not read off random characters that represent icons */
   content: "\f6f1"; }
 
 .fa-house-user:before {
-  content: "\f965"; }
+  content: "\e065"; }
 
 .fa-houzz:before {
   content: "\f27c"; }
@@ -2272,7 +2272,7 @@ readers do not read off random characters that represent icons */
   content: "\f47f"; }
 
 .fa-ideal:before {
-  content: "\f913"; }
+  content: "\e013"; }
 
 .fa-igloo:before {
   content: "\f7ae"; }
@@ -2308,7 +2308,7 @@ readers do not read off random characters that represent icons */
   content: "\f16d"; }
 
 .fa-instagram-square:before {
-  content: "\f955"; }
+  content: "\e055"; }
 
 .fa-intercom:before {
   content: "\f7af"; }
@@ -2425,7 +2425,7 @@ readers do not read off random characters that represent icons */
   content: "\f5fc"; }
 
 .fa-laptop-house:before {
-  content: "\f966"; }
+  content: "\e066"; }
 
 .fa-laptop-medical:before {
   content: "\f812"; }
@@ -2548,7 +2548,7 @@ readers do not read off random characters that represent icons */
   content: "\f604"; }
 
 .fa-lungs-virus:before {
-  content: "\f967"; }
+  content: "\e067"; }
 
 .fa-lyft:before {
   content: "\f3c3"; }
@@ -2677,7 +2677,7 @@ readers do not read off random characters that represent icons */
   content: "\f753"; }
 
 .fa-microblog:before {
-  content: "\f91a"; }
+  content: "\e01a"; }
 
 .fa-microchip:before {
   content: "\f2db"; }
@@ -2719,7 +2719,7 @@ readers do not read off random characters that represent icons */
   content: "\f289"; }
 
 .fa-mixer:before {
-  content: "\f956"; }
+  content: "\e056"; }
 
 .fa-mizuni:before {
   content: "\f3cc"; }
@@ -2959,7 +2959,7 @@ readers do not read off random characters that represent icons */
   content: "\f704"; }
 
 .fa-people-arrows:before {
-  content: "\f968"; }
+  content: "\e068"; }
 
 .fa-people-carry:before {
   content: "\f4ce"; }
@@ -3025,7 +3025,7 @@ readers do not read off random characters that represent icons */
   content: "\f1a7"; }
 
 .fa-pied-piper-square:before {
-  content: "\f91e"; }
+  content: "\e01e"; }
 
 .fa-piggy-bank:before {
   content: "\f4d3"; }
@@ -3058,7 +3058,7 @@ readers do not read off random characters that represent icons */
   content: "\f5b0"; }
 
 .fa-plane-slash:before {
-  content: "\f969"; }
+  content: "\e069"; }
 
 .fa-play:before {
   content: "\f04b"; }
@@ -3136,10 +3136,10 @@ readers do not read off random characters that represent icons */
   content: "\f542"; }
 
 .fa-pump-medical:before {
-  content: "\f96a"; }
+  content: "\e06a"; }
 
 .fa-pump-soap:before {
-  content: "\f96b"; }
+  content: "\e06b"; }
 
 .fa-pushed:before {
   content: "\f3e1"; }
@@ -3331,7 +3331,7 @@ readers do not read off random characters that represent icons */
   content: "\f156"; }
 
 .fa-rust:before {
-  content: "\f97a"; }
+  content: "\e07a"; }
 
 .fa-sad-cry:before {
   content: "\f5b3"; }
@@ -3430,7 +3430,7 @@ readers do not read off random characters that represent icons */
   content: "\f3ed"; }
 
 .fa-shield-virus:before {
-  content: "\f96c"; }
+  content: "\e06c"; }
 
 .fa-ship:before {
   content: "\f21a"; }
@@ -3445,7 +3445,7 @@ readers do not read off random characters that represent icons */
   content: "\f54b"; }
 
 .fa-shopify:before {
-  content: "\f957"; }
+  content: "\e057"; }
 
 .fa-shopping-bag:before {
   content: "\f290"; }
@@ -3490,7 +3490,7 @@ readers do not read off random characters that represent icons */
   content: "\f215"; }
 
 .fa-sink:before {
-  content: "\f96d"; }
+  content: "\e06d"; }
 
 .fa-sistrix:before {
   content: "\f3ee"; }
@@ -3586,7 +3586,7 @@ readers do not read off random characters that represent icons */
   content: "\f7d2"; }
 
 .fa-soap:before {
-  content: "\f96e"; }
+  content: "\e06e"; }
 
 .fa-socks:before {
   content: "\f696"; }
@@ -3754,7 +3754,7 @@ readers do not read off random characters that represent icons */
   content: "\f2f2"; }
 
 .fa-stopwatch-20:before {
-  content: "\f96f"; }
+  content: "\e06f"; }
 
 .fa-store:before {
   content: "\f54e"; }
@@ -3763,10 +3763,10 @@ readers do not read off random characters that represent icons */
   content: "\f54f"; }
 
 .fa-store-alt-slash:before {
-  content: "\f970"; }
+  content: "\e070"; }
 
 .fa-store-slash:before {
-  content: "\f971"; }
+  content: "\e071"; }
 
 .fa-strava:before {
   content: "\f428"; }
@@ -3979,7 +3979,7 @@ readers do not read off random characters that represent icons */
   content: "\f3ff"; }
 
 .fa-tiktok:before {
-  content: "\f97b"; }
+  content: "\e07b"; }
 
 .fa-times:before {
   content: "\f00d"; }
@@ -4009,7 +4009,7 @@ readers do not read off random characters that represent icons */
   content: "\f71e"; }
 
 .fa-toilet-paper-slash:before {
-  content: "\f972"; }
+  content: "\e072"; }
 
 .fa-toolbox:before {
   content: "\f552"; }
@@ -4039,7 +4039,7 @@ readers do not read off random characters that represent icons */
   content: "\f637"; }
 
 .fa-trailer:before {
-  content: "\f941"; }
+  content: "\e041"; }
 
 .fa-train:before {
   content: "\f238"; }
@@ -4150,7 +4150,7 @@ readers do not read off random characters that represent icons */
   content: "\f404"; }
 
 .fa-unity:before {
-  content: "\f949"; }
+  content: "\e049"; }
 
 .fa-universal-access:before {
   content: "\f29a"; }
@@ -4168,7 +4168,7 @@ readers do not read off random characters that represent icons */
   content: "\f13e"; }
 
 .fa-unsplash:before {
-  content: "\f97c"; }
+  content: "\e07c"; }
 
 .fa-untappd:before {
   content: "\f405"; }
@@ -4261,7 +4261,7 @@ readers do not read off random characters that represent icons */
   content: "\f509"; }
 
 .fa-users-slash:before {
-  content: "\f973"; }
+  content: "\e073"; }
 
 .fa-usps:before {
   content: "\f7e1"; }
@@ -4330,13 +4330,13 @@ readers do not read off random characters that represent icons */
   content: "\f1ca"; }
 
 .fa-virus:before {
-  content: "\f974"; }
+  content: "\e074"; }
 
 .fa-virus-slash:before {
-  content: "\f975"; }
+  content: "\e075"; }
 
 .fa-viruses:before {
-  content: "\f976"; }
+  content: "\e076"; }
 
 .fa-vk:before {
   content: "\f189"; }

Plik diff jest za duży
+ 1 - 1
plugins/fontawesome-free/css/fontawesome.min.css


+ 1 - 1
plugins/fontawesome-free/css/regular.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 @font-face {

+ 1 - 1
plugins/fontawesome-free/css/regular.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400}

+ 1 - 1
plugins/fontawesome-free/css/solid.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 @font-face {

+ 1 - 1
plugins/fontawesome-free/css/solid.min.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900}

+ 1 - 1
plugins/fontawesome-free/css/svg-with-js.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 svg:not(:root).svg-inline--fa {

Plik diff jest za duży
+ 1 - 1
plugins/fontawesome-free/css/svg-with-js.min.css


+ 1 - 1
plugins/fontawesome-free/css/v4-shims.css

@@ -1,5 +1,5 @@
 /*!
- * Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+ * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
  * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
  */
 .fa.fa-glass:before {

Plik diff jest za duży
+ 1 - 1
plugins/fontawesome-free/css/v4-shims.min.css


BIN
plugins/fontawesome-free/webfonts/fa-brands-400.eot


Plik diff jest za duży
+ 408 - 273
plugins/fontawesome-free/webfonts/fa-brands-400.svg


BIN
plugins/fontawesome-free/webfonts/fa-brands-400.ttf


BIN
plugins/fontawesome-free/webfonts/fa-brands-400.woff


BIN
plugins/fontawesome-free/webfonts/fa-brands-400.woff2


BIN
plugins/fontawesome-free/webfonts/fa-regular-400.eot


+ 93 - 91
plugins/fontawesome-free/webfonts/fa-regular-400.svg

@@ -1,12 +1,12 @@
 <?xml version="1.0" standalone="no"?>
 <!--
-Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
+Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com
 License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
 -->
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
 <metadata>
-Created by FontForge 20190801 at Thu Jun 18 14:52:21 2020
+Created by FontForge 20200314 at Wed Jul 15 11:59:40 2020
  By Robert Madole
 Copyright (c) Font Awesome
 </metadata>
@@ -20,7 +20,7 @@ Copyright (c) Font Awesome
     panose-1="2 0 5 3 0 0 0 0 0 0"
     ascent="448"
     descent="-64"
-    bbox="-0.0663408 -64.0662 640.01 448.1"
+    bbox="-0.0663408 -64.0662 640.004 448.1"
     underline-thickness="25"
     underline-position="-50"
     unicode-range="U+0020-F5C8"
@@ -50,7 +50,7 @@ s-36 16.1182 -36 36s16.1182 36 36 36s36 -16.1182 36 -36zM164 192c0 -19.8818 -16.
     <glyph glyph-name="flag" unicode="&#xf024;" 
 d="M336.174 368c35.4668 0 73.0195 12.6914 108.922 28.1797c31.6406 13.6514 66.9043 -9.65723 66.9043 -44.1162v-239.919c0 -16.1953 -8.1543 -31.3057 -21.7129 -40.1631c-26.5762 -17.3643 -70.0693 -39.9814 -128.548 -39.9814c-68.6084 0 -112.781 32 -161.913 32
 c-56.5674 0 -89.957 -11.2803 -127.826 -28.5566v-83.4434c0 -8.83691 -7.16309 -16 -16 -16h-16c-8.83691 0 -16 7.16309 -16 16v406.438c-14.3428 8.2998 -24 23.7979 -24 41.5615c0 27.5693 23.2422 49.71 51.2012 47.8965
-c22.9658 -1.49023 41.8662 -19.4717 44.4805 -42.3379c0.177734 -1.52441 0.321289 -4.00781 0.321289 -5.54199c0 -4.30176 -1.10352 -11.1035 -2.46289 -15.1846c22.418 8.68555 49.4199 15.168 80.7207 15.168c68.6084 0 112.781 -32 161.913 -32zM464 112v240
+c22.9658 -1.49023 41.8662 -19.4717 44.4805 -42.3379c0.213867 -1.83398 0.308594 -3.65918 0.308594 -5.5498c0 -5.30273 -0.860352 -10.4053 -2.4502 -15.1768c22.418 8.68555 49.4199 15.168 80.7207 15.168c68.6084 0 112.781 -32 161.913 -32zM464 112v240
 c-31.5059 -14.6338 -84.5547 -32 -127.826 -32c-59.9111 0 -101.968 32 -161.913 32c-41.4365 0 -80.4766 -16.5879 -102.261 -32v-232c31.4473 14.5967 84.4648 24 127.826 24c59.9111 0 101.968 -32 161.913 -32c41.4365 0 80.4775 16.5879 102.261 32z" />
     <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="384" 
 d="M336 448c26.5098 0 48 -21.4902 48 -48v-464l-192 112l-192 -112v464c0 26.5098 21.4902 48 48 48h288zM336 19.5703v374.434c0 3.31348 -2.68555 5.99609 -6 5.99609h-276c-3.31152 0 -6 -2.68848 -6 -6v-374.43l144 84z" />
@@ -77,17 +77,17 @@ c0 -110.569 89.4678 -200 200 -200zM363.244 247.2c0 -67.0518 -72.4209 -68.084 -72
 c17.5615 9.84473 28.3242 16.541 28.3242 29.5791c0 17.2461 -21.999 28.6934 -39.7842 28.6934c-23.1885 0 -33.8936 -10.9775 -48.9424 -29.9697c-4.05664 -5.11914 -11.46 -6.07031 -16.666 -2.12402l-27.8232 21.0986
 c-5.10742 3.87207 -6.25098 11.0654 -2.64453 16.3633c23.627 34.6934 53.7217 54.1846 100.575 54.1846c49.0713 0 101.45 -38.3037 101.45 -88.7998zM298 80c0 -23.1592 -18.8408 -42 -42 -42s-42 18.8408 -42 42s18.8408 42 42 42s42 -18.8408 42 -42z" />
     <glyph glyph-name="eye" unicode="&#xf06e;" horiz-adv-x="576" 
-d="M288 304c0.0927734 0 0.244141 0.000976562 0.336914 0.000976562c61.6641 0 111.71 -50.0469 111.71 -111.711c0 -61.6631 -50.0459 -111.71 -111.71 -111.71s-111.71 50.0469 -111.71 111.71c0 8.71289 1.95898 22.5781 4.37305 30.9502
-c6.93066 -3.94141 19.0273 -7.18457 27 -7.24023c30.9121 0 56 25.0879 56 56c-0.0556641 7.97266 -3.29883 20.0693 -7.24023 27c8.42383 2.62207 22.4189 4.8623 31.2402 5zM572.52 206.6c1.9209 -3.79883 3.47949 -10.3379 3.47949 -14.5947
-s-1.55859 -10.7959 -3.47949 -14.5947c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c54.1992 105.771 161.59 177.41 284.52 177.41
-s230.29 -71.5898 284.52 -177.4zM288 48c98.6602 0 189.1 55 237.93 144c-48.8398 89 -139.27 144 -237.93 144s-189.09 -55 -237.93 -144c48.8398 -89 139.279 -144 237.93 -144z" />
+d="M288 304c0.114258 0 0.240234 -0.0175781 0.354492 -0.0175781c61.6543 0 111.71 -50.0557 111.71 -111.71s-50.0557 -111.71 -111.71 -111.71s-111.71 50.0557 -111.71 111.71c0 10.7422 1.51953 21.1328 4.35547 30.9678
+c7.95898 -4.52637 17.2129 -7.17188 27 -7.24023c30.9072 0 56 25.0928 56 56c-0.0683594 9.78711 -2.71387 19.041 -7.24023 27c9.88379 3.07617 20.3896 4.83008 31.2402 5zM572.52 206.6c2.21387 -4.37793 3.46094 -9.38965 3.46094 -14.626
+c0 -5.2373 -1.24707 -10.1855 -3.46094 -14.5635c-54.1992 -105.771 -161.59 -177.41 -284.52 -177.41s-230.29 71.5898 -284.52 177.4c-2.21387 4.37793 -3.46094 9.38965 -3.46094 14.626c0 5.2373 1.24707 10.1855 3.46094 14.5635
+c54.1992 105.771 161.59 177.41 284.52 177.41s230.29 -71.5898 284.52 -177.4zM288 48c98.6602 0 189.1 55 237.93 144c-48.8398 89 -139.27 144 -237.93 144s-189.09 -55 -237.93 -144c48.8398 -89 139.279 -144 237.93 -144z" />
     <glyph glyph-name="eye-slash" unicode="&#xf070;" horiz-adv-x="640" 
-d="M634 -23c3.31738 -2.65137 6.00977 -8.25098 6.00977 -12.498c0 -3.10449 -1.57715 -7.58984 -3.51953 -10.0117l-10 -12.4902c-2.65234 -3.31152 -8.24707 -6 -12.4902 -6c-3.09961 0 -7.58008 1.57227 -10 3.50977l-598 467.49
-c-3.31738 2.65137 -6.00977 8.25098 -6.00977 12.498c0 3.10449 1.57715 7.58984 3.51953 10.0117l10 12.4902c2.65234 3.31152 8.24707 6 12.4902 6c3.09961 0 7.58008 -1.57227 10 -3.50977zM296.79 301.53c6.33496 1.35059 16.7324 2.45801 23.21 2.46973
-c60.4805 0 109.36 -47.9102 111.58 -107.85zM343.21 82.46c-6.33496 -1.34375 -16.7334 -2.44629 -23.21 -2.45996c-60.4697 0 -109.35 47.9102 -111.58 107.84zM320 336c-19.8799 0 -39.2803 -2.7998 -58.2197 -7.09961l-46.4102 36.29
-c32.9199 11.8096 67.9297 18.8096 104.63 18.8096c122.93 0 230.29 -71.5898 284.57 -177.4c1.91992 -3.79883 3.47949 -10.3379 3.47949 -14.5947s-1.55957 -10.7959 -3.47949 -14.5947c-11.7197 -22.7598 -35.4189 -56.4092 -52.9004 -75.1104l-37.7402 29.5
-c14.333 15.0156 34.0449 41.9854 44 60.2002c-48.8398 89 -139.279 144 -237.93 144zM320 48c19.8896 0 39.2803 2.7998 58.2197 7.08984l46.4102 -36.2803c-32.9199 -11.7598 -67.9297 -18.8096 -104.63 -18.8096c-122.92 0 -230.28 71.5898 -284.51 177.4
-c-1.9209 3.79883 -3.47949 10.3379 -3.47949 14.5947s1.55859 10.7959 3.47949 14.5947c11.7168 22.7568 35.4111 56.4014 52.8896 75.1006l37.7402 -29.5c-14.3467 -15.0107 -34.0811 -41.9756 -44.0498 -60.1904c48.8496 -89 139.279 -144 237.93 -144z" />
+d="M634 -23c3.66895 -2.93262 6.00391 -7.45117 6.00391 -12.5088c0 -3.7832 -1.31543 -7.26074 -3.51367 -10.001l-10 -12.4902c-2.93359 -3.66309 -7.44824 -5.99414 -12.502 -5.99414c-3.77637 0 -7.25 1.31152 -9.98828 3.50391l-598 467.49
+c-3.66895 2.93262 -6.00391 7.45117 -6.00391 12.5088c0 3.7832 1.31543 7.26074 3.51367 10.001l10 12.4902c2.93359 3.66309 7.44824 5.99414 12.502 5.99414c3.77637 0 7.25 -1.31152 9.98828 -3.50391zM296.79 301.53c7.51172 1.60254 15.2266 2.45508 23.21 2.46973
+c60.4805 0 109.36 -47.9102 111.58 -107.85zM343.21 82.46c-7.51367 -1.59375 -15.2285 -2.44336 -23.21 -2.45996c-60.4697 0 -109.35 47.9102 -111.58 107.84zM320 336c-19.8799 0 -39.2803 -2.7998 -58.2197 -7.09961l-46.4102 36.29
+c32.9199 11.8096 67.9297 18.8096 104.63 18.8096c122.93 0 230.29 -71.5898 284.57 -177.4c2.21289 -4.37793 3.45996 -9.38965 3.45996 -14.626c0 -5.2373 -1.24707 -10.1855 -3.45996 -14.5635c-14.1924 -27.5625 -31.9229 -52.6689 -52.9004 -75.1104l-37.7402 29.5
+c17.2305 18.0527 31.9385 38.1318 44 60.2002c-48.8398 89 -139.279 144 -237.93 144zM320 48c19.8896 0 39.2803 2.7998 58.2197 7.08984l46.4102 -36.2803c-32.9199 -11.7598 -67.9297 -18.8096 -104.63 -18.8096c-122.92 0 -230.28 71.5898 -284.51 177.4
+c-2.21387 4.37793 -3.46094 9.38965 -3.46094 14.626c0 5.2373 1.24707 10.1855 3.46094 14.5635c14.1885 27.5586 31.916 52.6621 52.8896 75.1006l37.7402 -29.5c-17.249 -18.0469 -31.9727 -38.1221 -44.0498 -60.1904c48.8496 -89 139.279 -144 237.93 -144z" />
     <glyph glyph-name="calendar-alt" unicode="&#xf073;" horiz-adv-x="448" 
 d="M148 160h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40c0 -6.59961 -5.40039 -12 -12 -12zM256 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40
 c6.59961 0 12 -5.40039 12 -12v-40zM352 172c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-40zM256 76c0 -6.59961 -5.40039 -12 -12 -12h-40c-6.59961 0 -12 5.40039 -12 12v40
@@ -131,47 +131,47 @@ d="M527.9 416c26.5996 0 48.0996 -21.5 48.0996 -48v-352c0 -26.5 -21.5 -48 -48.099
 h-467.801zM521.9 16c3.2998 0 6 2.7002 6 6v170h-479.801v-170c0 -3.2998 2.7002 -6 6 -6h467.801zM192 116v-40c0 -6.59961 -5.40039 -12 -12 -12h-72c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h72c6.59961 0 12 -5.40039 12 -12zM384 116v-40
 c0 -6.59961 -5.40039 -12 -12 -12h-136c-6.59961 0 -12 5.40039 -12 12v40c0 6.59961 5.40039 12 12 12h136c6.59961 0 12 -5.40039 12 -12z" />
     <glyph glyph-name="hdd" unicode="&#xf0a0;" horiz-adv-x="576" 
-d="M567.403 212.358c5.59668 -8.04688 8.59668 -17.6113 8.59668 -27.4121v-136.946c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v136.946c0 8.30957 3.85156 20.5898 8.59668 27.4121l105.08 151.053
-c7.90625 11.3652 25.5596 20.5889 39.4033 20.5889h0.000976562h269.838h0.000976562c13.8438 0 31.4971 -9.22363 39.4033 -20.5889zM153.081 336l-77.9131 -112h425.664l-77.9131 112h-269.838zM528 48v128h-480v-128h480zM496 112c0 -17.6729 -14.3271 -32 -32 -32
-s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32zM400 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z" />
+d="M567.403 212.358c5.59668 -8.04688 8.59668 -17.6113 8.59668 -27.4121v-136.946c0 -26.5098 -21.4902 -48 -48 -48h-480c-26.5098 0 -48 21.4902 -48 48v136.946c0 10.167 3.19531 19.6465 8.59668 27.4121l105.08 151.053
+c8.67383 12.4678 23.0791 20.5889 39.4043 20.5889h269.838c16.3252 0 30.7305 -8.12109 39.4043 -20.5889zM153.081 336l-77.9131 -112h425.664l-77.9131 112h-269.838zM528 48v128h-480v-128h480zM496 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32
+s14.3271 32 32 32s32 -14.3271 32 -32zM400 112c0 -17.6729 -14.3271 -32 -32 -32s-32 14.3271 -32 32s14.3271 32 32 32s32 -14.3271 32 -32z" />
     <glyph glyph-name="hand-point-right" unicode="&#xf0a4;" 
-d="M428.8 310.4c45.0996 0 83.2002 -38.1016 83.2002 -83.2002c0 -45.6162 -37.7646 -83.2002 -83.2002 -83.2002h-35.6475c-1.41602 -6.36719 -4.96875 -16.252 -7.92969 -22.0645c2.50586 -22.0059 -3.50293 -44.9775 -15.9844 -62.791
+d="M428.8 310.4c45.0996 0 83.2002 -38.1016 83.2002 -83.2002c0 -45.6162 -37.7646 -83.2002 -83.2002 -83.2002h-35.6475c-1.71387 -7.70605 -4.43555 -15.2051 -7.92969 -22.0645c2.50586 -22.0059 -3.50293 -44.9775 -15.9844 -62.791
 c-1.14062 -52.4863 -37.3984 -91.1445 -99.9404 -91.1445h-21.2988c-60.0635 0 -98.5117 40 -127.2 40h-2.67871c-5.74707 -4.95215 -13.5361 -8 -22.1201 -8h-64c-17.6729 0 -32 12.8936 -32 28.7998v230.4c0 15.9062 14.3271 28.7998 32 28.7998h64.001
 c8.58398 0 16.373 -3.04785 22.1201 -8h2.67871c6.96387 0 14.8623 6.19336 30.1816 23.6689l0.128906 0.148438l0.130859 0.145508c8.85645 9.93652 18.1162 20.8398 25.8506 33.2529c18.7051 30.2471 30.3936 78.7842 75.707 78.7842c56.9277 0 92 -35.2861 92 -83.2002
-v-0.0839844c0 -6.21777 -0.974609 -16.2148 -2.17578 -22.3154h86.1768zM428.8 192c18.9756 0 35.2002 16.2246 35.2002 35.2002c0 18.7002 -16.7754 35.2002 -35.2002 35.2002h-158.399c0 17.3242 26.3994 35.1992 26.3994 70.3994c0 26.4004 -20.625 35.2002 -44 35.2002
-c-8.79395 0 -20.4443 -32.7119 -34.9258 -56.0996c-9.07422 -14.5752 -19.5244 -27.2256 -30.7988 -39.875c-16.1094 -18.374 -33.8359 -36.6328 -59.0752 -39.5967v-176.753c42.79 -3.7627 74.5088 -39.6758 120 -39.6758h21.2988
+c0 -0.0283203 0 0.0361328 0 0.0078125c0 -7.66602 -0.748047 -15.1582 -2.17578 -22.4072h86.1768zM428.8 192c18.9756 0 35.2002 16.2246 35.2002 35.2002c0 18.7002 -16.7754 35.2002 -35.2002 35.2002h-158.399c0 17.3242 26.3994 35.1992 26.3994 70.3994
+c0 26.4004 -20.625 35.2002 -44 35.2002c-8.79395 0 -20.4443 -32.7119 -34.9258 -56.0996c-9.07422 -14.5752 -19.5244 -27.2256 -30.7988 -39.875c-16.1094 -18.374 -33.8359 -36.6328 -59.0752 -39.5967v-176.753c42.79 -3.7627 74.5088 -39.6758 120 -39.6758h21.2988
 c40.5244 0 57.124 22.1973 50.6006 61.3252c14.6113 8.00098 24.1514 33.9785 12.9248 53.625c19.3652 18.2246 17.7871 46.3809 4.9502 61.0498h91.0254zM88 64c0 13.2549 -10.7451 24 -24 24s-24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24z" />
     <glyph glyph-name="hand-point-left" unicode="&#xf0a5;" 
 d="M0 227.2c0 45.0986 38.1006 83.2002 83.2002 83.2002h86.1758c-1.3623 6.91016 -2.17578 14.374 -2.17578 22.3994c0 47.9141 35.0723 83.2002 92 83.2002c45.3135 0 57.002 -48.5371 75.7061 -78.7852c7.73438 -12.4121 16.9951 -23.3154 25.8506 -33.2529
 l0.130859 -0.145508l0.128906 -0.148438c15.3213 -17.4746 23.2197 -23.668 30.1836 -23.668h2.67871c5.74707 4.95215 13.5361 8 22.1201 8h64c17.6729 0 32 -12.8936 32 -28.7998v-230.4c0 -15.9062 -14.3271 -28.7998 -32 -28.7998h-64
-c-8.58398 0 -16.373 3.04785 -22.1201 8h-2.67871c-28.6885 0 -67.1367 -40 -127.2 -40h-21.2988c-62.542 0 -98.8008 38.6582 -99.9404 91.1445c-12.4814 17.8135 -18.4922 40.7852 -15.9844 62.791c-2.96094 5.8125 -6.51367 15.6973 -7.92969 22.0645h-35.6465
+c-8.58398 0 -16.373 3.04785 -22.1201 8h-2.67871c-28.6885 0 -67.1367 -40 -127.2 -40h-21.2988c-62.542 0 -98.8008 38.6582 -99.9404 91.1445c-12.4814 17.8135 -18.4922 40.7852 -15.9844 62.791c-3.49414 6.85938 -6.21582 14.3584 -7.92969 22.0645h-35.6465
 c-45.4355 0 -83.2002 37.584 -83.2002 83.2002zM48 227.2c0 -18.9756 16.2246 -35.2002 35.2002 -35.2002h91.0244c-12.8369 -14.6689 -14.415 -42.8252 4.9502 -61.0498c-11.2256 -19.6465 -1.68652 -45.624 12.9248 -53.625
 c-6.52246 -39.1279 10.0771 -61.3252 50.6016 -61.3252h21.2988c45.4912 0 77.21 35.9131 120 39.6768v176.752c-25.2393 2.96289 -42.9658 21.2227 -59.0752 39.5967c-11.2744 12.6494 -21.7246 25.2998 -30.7988 39.875
 c-14.4814 23.3877 -26.1318 56.0996 -34.9258 56.0996c-23.375 0 -44 -8.7998 -44 -35.2002c0 -35.2002 26.3994 -53.0752 26.3994 -70.3994h-158.399c-18.4248 0 -35.2002 -16.5 -35.2002 -35.2002zM448 88c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24
 s24 10.7451 24 24s-10.7451 24 -24 24z" />
     <glyph glyph-name="hand-point-up" unicode="&#xf0a6;" horiz-adv-x="448" 
-d="M105.6 364.8c0 45.0996 38.1016 83.2002 83.2002 83.2002c45.6162 0 83.2002 -37.7646 83.2002 -83.2002v-35.6465c6.36719 -1.41602 16.252 -4.96875 22.0645 -7.92969c22.0059 2.50684 44.9775 -3.50293 62.791 -15.9844
+d="M105.6 364.8c0 45.0996 38.1016 83.2002 83.2002 83.2002c45.6162 0 83.2002 -37.7646 83.2002 -83.2002v-35.6465c7.70605 -1.71387 15.2051 -4.43555 22.0645 -7.92969c22.0059 2.50684 44.9775 -3.50293 62.791 -15.9844
 c52.4863 -1.14062 91.1445 -37.3984 91.1445 -99.9404v-21.2988c0 -60.0635 -40 -98.5117 -40 -127.2v-2.67871c4.95215 -5.74707 8 -13.5361 8 -22.1201v-64c0 -17.6729 -12.8936 -32 -28.7998 -32h-230.4c-15.9062 0 -28.7998 14.3271 -28.7998 32v64
 c0 8.58398 3.04785 16.373 8 22.1201v2.67871c0 6.96387 -6.19336 14.8623 -23.6689 30.1816l-0.148438 0.128906l-0.145508 0.130859c-9.93652 8.85645 -20.8398 18.1162 -33.2529 25.8506c-30.2471 18.7051 -78.7842 30.3936 -78.7842 75.707
-c0 56.9277 35.2861 92 83.2002 92h0.0839844c6.21777 0 16.2148 -0.974609 22.3154 -2.17578v86.1768zM224 364.8c0 18.9756 -16.2246 35.2002 -35.2002 35.2002c-18.7002 0 -35.2002 -16.7754 -35.2002 -35.2002v-158.399c-17.3242 0 -35.1992 26.3994 -70.3994 26.3994
-c-26.4004 0 -35.2002 -20.625 -35.2002 -44c0 -8.79395 32.7119 -20.4443 56.0996 -34.9258c14.5752 -9.07422 27.2256 -19.5244 39.875 -30.7988c18.374 -16.1094 36.6328 -33.8359 39.5967 -59.0752h176.753c3.7627 42.79 39.6758 74.5088 39.6758 120v21.2988
-c0 40.5244 -22.1973 57.124 -61.3252 50.6006c-8.00098 14.6113 -33.9785 24.1514 -53.625 12.9248c-18.2246 19.3652 -46.3809 17.7871 -61.0498 4.9502v91.0254zM352 24c-13.2549 0 -24 -10.7451 -24 -24s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24z" />
+c0 56.9277 35.2861 92 83.2002 92c0.0283203 0 -0.0361328 0 -0.0078125 0c7.66602 0 15.1582 -0.748047 22.4072 -2.17578v86.1768zM224 364.8c0 18.9756 -16.2246 35.2002 -35.2002 35.2002c-18.7002 0 -35.2002 -16.7754 -35.2002 -35.2002v-158.399
+c-17.3242 0 -35.1992 26.3994 -70.3994 26.3994c-26.4004 0 -35.2002 -20.625 -35.2002 -44c0 -8.79395 32.7119 -20.4443 56.0996 -34.9258c14.5752 -9.07422 27.2256 -19.5244 39.875 -30.7988c18.374 -16.1094 36.6328 -33.8359 39.5967 -59.0752h176.753
+c3.7627 42.79 39.6758 74.5088 39.6758 120v21.2988c0 40.5244 -22.1973 57.124 -61.3252 50.6006c-8.00098 14.6113 -33.9785 24.1514 -53.625 12.9248c-18.2246 19.3652 -46.3809 17.7871 -61.0498 4.9502v91.0254zM352 24c-13.2549 0 -24 -10.7451 -24 -24
+s10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24z" />
     <glyph glyph-name="hand-point-down" unicode="&#xf0a7;" horiz-adv-x="448" 
 d="M188.8 -64c-45.0986 0 -83.2002 38.1006 -83.2002 83.2002v86.1758c-6.91016 -1.3623 -14.374 -2.17578 -22.3994 -2.17578c-47.9141 0 -83.2002 35.0723 -83.2002 92c0 45.3135 48.5371 57.002 78.7852 75.707c12.4121 7.73438 23.3154 16.9951 33.2529 25.8506
 l0.145508 0.130859l0.148438 0.128906c17.4746 15.3213 23.668 23.2197 23.668 30.1836v2.67871c-4.95215 5.74707 -8 13.5361 -8 22.1201v64c0 17.6729 12.8936 32 28.7998 32h230.4c15.9062 0 28.7998 -14.3271 28.7998 -32v-64.001
-c0 -8.58398 -3.04785 -16.373 -8 -22.1201v-2.67871c0 -28.6885 40 -67.1367 40 -127.2v-21.2988c0 -62.542 -38.6582 -98.8008 -91.1445 -99.9404c-17.8135 -12.4814 -40.7852 -18.4922 -62.791 -15.9844c-5.8125 -2.96094 -15.6973 -6.51367 -22.0645 -7.92969v-35.6465
+c0 -8.58398 -3.04785 -16.373 -8 -22.1201v-2.67871c0 -28.6885 40 -67.1367 40 -127.2v-21.2988c0 -62.542 -38.6582 -98.8008 -91.1445 -99.9404c-17.8135 -12.4814 -40.7852 -18.4922 -62.791 -15.9844c-6.85938 -3.49414 -14.3584 -6.21582 -22.0645 -7.92969v-35.6465
 c0 -45.4355 -37.584 -83.2002 -83.2002 -83.2002zM188.8 -16c18.9756 0 35.2002 16.2246 35.2002 35.2002v91.0244c14.6689 -12.8369 42.8252 -14.415 61.0498 4.9502c19.6465 -11.2256 45.624 -1.68652 53.625 12.9248c39.1279 -6.52246 61.3252 10.0771 61.3252 50.6016
 v21.2988c0 45.4912 -35.9131 77.21 -39.6768 120h-176.752c-2.96289 -25.2393 -21.2227 -42.9658 -39.5967 -59.0752c-12.6494 -11.2744 -25.2998 -21.7246 -39.875 -30.7988c-23.3877 -14.4814 -56.0996 -26.1318 -56.0996 -34.9258c0 -23.375 8.7998 -44 35.2002 -44
 c35.2002 0 53.0752 26.3994 70.3994 26.3994v-158.399c0 -18.4248 16.5 -35.2002 35.2002 -35.2002zM328 384c0 -13.2549 10.7451 -24 24 -24s24 10.7451 24 24s-10.7451 24 -24 24s-24 -10.7451 -24 -24z" />
     <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="448" 
-d="M433.941 382.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-80v-48c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h80v48c0 26.5098 21.4902 48 48 48
-h172.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM266 -16c3.31152 0 6 2.68848 6 6v42h-96c-26.5098 0 -48 21.4902 -48 48v224h-74c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM394 80c3.31152 0 6 2.68848 6 6v202h-88
-c-13.2549 0 -24 10.7451 -24 24v88h-106c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM400 336v9.63184v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-48.3682 48.3682c-1.12598 1.125 -2.65234 1.75684 -4.24316 1.75684h-9.63184
-v-64h64z" />
+d="M433.941 382.059c8.68848 -8.68848 14.0586 -20.6943 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-80v-48c0 -26.5098 -21.4902 -48 -48 -48h-224c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h80v48c0 26.5098 21.4902 48 48 48
+h172.118c13.2461 0 25.252 -5.37012 33.9404 -14.0586zM266 -16c3.31152 0 6 2.68848 6 6v42h-96c-26.5098 0 -48 21.4902 -48 48v224h-74c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM394 80c3.31152 0 6 2.68848 6 6v202h-88
+c-13.2549 0 -24 10.7451 -24 24v88h-106c-3.31152 0 -6 -2.68848 -6 -6v-308c0 -3.31152 2.68848 -6 6 -6h212zM400 336v9.63184c0 1.65527 -0.670898 3.15723 -1.75684 4.24316l-48.3682 48.3682c-1.12598 1.125 -2.65234 1.75684 -4.24316 1.75684h-9.63184v-64h64z" />
     <glyph glyph-name="save" unicode="&#xf0c7;" horiz-adv-x="448" 
-d="M433.941 318.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM272 368h-128v-80h128v80
-zM394 16c3.31152 0 6 2.68848 6 6v259.632v0.000976562c0 1.37207 -0.787109 3.27246 -1.75684 4.24219l-78.2432 78.2432v-100.118c0 -13.2549 -10.7451 -24 -24 -24h-176c-13.2549 0 -24 10.7451 -24 24v104h-42c-3.31152 0 -6 -2.68848 -6 -6v-340
-c0 -3.31152 2.68848 -6 6 -6h340zM224 216c48.5234 0 88 -39.4766 88 -88s-39.4766 -88 -88 -88s-88 39.4766 -88 88s39.4766 88 88 88zM224 88c22.0557 0 40 17.9443 40 40s-17.9443 40 -40 40s-40 -17.9443 -40 -40s17.9443 -40 40 -40z" />
+d="M433.941 318.059c8.68848 -8.68848 14.0586 -20.6943 14.0586 -33.9404v-268.118c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h268.118c13.2461 0 25.252 -5.37012 33.9404 -14.0586zM272 368h-128v-80h128v80z
+M394 16c3.31152 0 6 2.68848 6 6v259.632c0 1.65527 -0.670898 3.15723 -1.75684 4.24316l-78.2432 78.2432v-100.118c0 -13.2549 -10.7451 -24 -24 -24h-176c-13.2549 0 -24 10.7451 -24 24v104h-42c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340z
+M224 216c48.5234 0 88 -39.4766 88 -88s-39.4766 -88 -88 -88s-88 39.4766 -88 88s39.4766 88 88 88zM224 88c22.0557 0 40 17.9443 40 40s-17.9443 40 -40 40s-40 -17.9443 -40 -40s17.9443 -40 40 -40z" />
     <glyph glyph-name="square" unicode="&#xf0c8;" horiz-adv-x="448" 
 d="M400 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h352zM394 16c3.2998 0 6 2.7002 6 6v340c0 3.2998 -2.7002 6 -6 6h-340c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h340z" />
     <glyph glyph-name="envelope" unicode="&#xf0e0;" 
@@ -181,7 +181,7 @@ c-22.5439 -17.748 -60.3359 -55.1787 -103.053 -54.9473c-42.9277 -0.231445 -81.205
     <glyph glyph-name="lightbulb" unicode="&#xf0eb;" horiz-adv-x="352" 
 d="M176 368c8.83984 0 16 -7.16016 16 -16s-7.16016 -16 -16 -16c-35.2803 0 -64 -28.7002 -64 -64c0 -8.83984 -7.16016 -16 -16 -16s-16 7.16016 -16 16c0 52.9404 43.0596 96 96 96zM96.0596 -11.1699l-0.0400391 43.1797h159.961l-0.0507812 -43.1797
 c-0.00976562 -3.13965 -0.939453 -6.21973 -2.67969 -8.83984l-24.5098 -36.8398c-2.95996 -4.45996 -7.95996 -7.14062 -13.3203 -7.14062h-78.8496c-5.35059 0 -10.3506 2.68066 -13.3203 7.14062l-24.5098 36.8398c-1.75 2.62012 -2.68066 5.68945 -2.68066 8.83984z
-M176 448c97.2002 0 176 -78.7998 176 -176c0 -44.3701 -16.4502 -84.8496 -43.5498 -115.79c-16.6406 -18.9795 -42.7402 -58.79 -52.4199 -92.1602v-0.0498047h-48v0.0996094c0.00390625 4.04199 0.999023 10.4482 2.21973 14.3008
+M176 448c97.2002 0 176 -78.7998 176 -176c0 -44.3701 -16.4502 -84.8496 -43.5498 -115.79c-16.6406 -18.9795 -42.7402 -58.79 -52.4199 -92.1602v-0.0498047h-48v0.0996094c0.00488281 4.98145 0.790039 9.78809 2.21973 14.3008
 c5.67969 17.9893 22.9902 64.8496 62.0996 109.46c20.4102 23.29 31.6504 53.1699 31.6504 84.1396c0 70.5801 -57.4199 128 -128 128c-68.2803 0 -128.15 -54.3604 -127.95 -128c0.0898438 -30.9902 11.0703 -60.71 31.6104 -84.1396
 c39.3496 -44.9004 56.5801 -91.8604 62.1699 -109.67c1.42969 -4.56055 2.13965 -9.30078 2.15039 -14.0703v-0.120117h-48v0.0595703c-9.68066 33.3604 -35.7803 73.1709 -52.4209 92.1602c-27.1094 30.9307 -43.5596 71.4102 -43.5596 115.78
 c0 93.0303 73.7197 176 176 176z" />
@@ -241,13 +241,13 @@ c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0683594l22.5361 -22.7178c4.66699 -4.
     <glyph glyph-name="share-square" unicode="&#xf14d;" horiz-adv-x="576" 
 d="M561.938 289.94c18.75 -18.7402 18.75 -49.1406 0 -67.8809l-143.998 -144c-29.9727 -29.9727 -81.9404 -9.05273 -81.9404 33.9404v53.7998c-101.266 -7.83691 -99.625 -31.6406 -84.1104 -78.7598c14.2285 -43.0889 -33.4736 -79.248 -71.0195 -55.7402
 c-51.6924 32.3057 -84.8701 83.0635 -84.8701 144.76c0 39.3408 12.2197 72.7402 36.3301 99.3008c19.8398 21.8398 47.7402 38.4697 82.9102 49.4199c36.7295 11.4395 78.3096 16.1094 120.76 17.9893v57.1982c0 42.9355 51.9258 63.9541 81.9404 33.9404zM384 112l144 144
-l-144 144v-104.09c-110.86 -0.90332 -240 -10.5166 -240 -119.851c0 -52.1396 32.79 -85.6094 62.3096 -104.06c-39.8174 120.65 48.999 141.918 177.69 143.84v-103.84zM408.74 27.5068c6.14844 1.75684 15.5449 5.92383 20.9736 9.30273
+l-144 144v-104.09c-110.86 -0.90332 -240 -10.5166 -240 -119.851c0 -52.1396 32.79 -85.6094 62.3096 -104.06c-39.8174 120.65 48.999 141.918 177.69 143.84v-103.84zM408.74 27.5068c7.4375 2.125 14.5508 5.30566 20.9736 9.30273
 c7.97656 4.95215 18.2861 -0.825195 18.2861 -10.2139v-42.5957c0 -26.5098 -21.4902 -48 -48 -48h-352c-26.5098 0 -48 21.4902 -48 48v352c0 26.5098 21.4902 48 48 48h132c6.62695 0 12 -5.37305 12 -12v-4.48633c0 -4.91699 -2.9873 -9.36914 -7.56934 -11.1514
-c-13.7021 -5.33105 -26.3955 -11.5371 -38.0498 -18.585c-1.59668 -0.974609 -4.41016 -1.77051 -6.28027 -1.77734h-86.1006c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340c3.31152 0 6 2.68848 6 6v25.9658c0 5.37012 3.5791 10.0596 8.74023 11.541
-z" />
+c-13.7021 -5.33105 -26.3955 -11.5371 -38.0498 -18.585c-1.82715 -1.11523 -3.98633 -1.76953 -6.28027 -1.77734h-86.1006c-3.31152 0 -6 -2.68848 -6 -6v-340c0 -3.31152 2.68848 -6 6 -6h340c3.31152 0 6 2.68848 6 6v25.9658c0 5.37012 3.5791 10.0596 8.74023 11.541z
+" />
     <glyph glyph-name="compass" unicode="&#xf14e;" horiz-adv-x="496" 
-d="M347.94 318.14c16.6592 7.61035 33.8096 -9.54004 26.1992 -26.1992l-65.9697 -144.341c-2.73047 -5.97363 -9.7959 -13.0391 -15.7695 -15.7695l-144.341 -65.9697c-16.6592 -7.61035 -33.8096 9.5498 -26.1992 26.1992l65.9697 144.341
-c2.73047 5.97363 9.7959 13.0391 15.7695 15.7695zM270.58 169.42c12.4697 12.4697 12.4697 32.6904 0 45.1602s-32.6904 12.4697 -45.1602 0s-12.4697 -32.6904 0 -45.1602s32.6904 -12.4697 45.1602 0zM248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248
+d="M347.94 318.14c16.6592 7.61035 33.8096 -9.54004 26.1992 -26.1992l-65.9697 -144.341c-3.19238 -6.9834 -8.78613 -12.5771 -15.7695 -15.7695l-144.341 -65.9697c-16.6592 -7.61035 -33.8096 9.5498 -26.1992 26.1992l65.9697 144.341
+c3.19238 6.9834 8.78613 12.5771 15.7695 15.7695zM270.58 169.42c12.4697 12.4697 12.4697 32.6904 0 45.1602s-32.6904 12.4697 -45.1602 0s-12.4697 -32.6904 0 -45.1602s32.6904 -12.4697 45.1602 0zM248 440c136.97 0 248 -111.03 248 -248s-111.03 -248 -248 -248
 s-248 111.03 -248 248s111.03 248 248 248zM248 -8c110.28 0 200 89.7197 200 200s-89.7197 200 -200 200s-200 -89.7197 -200 -200s89.7197 -200 200 -200z" />
     <glyph glyph-name="caret-square-down" unicode="&#xf150;" horiz-adv-x="448" 
 d="M125.1 240h197.801c10.6992 0 16.0996 -13 8.5 -20.5l-98.9004 -98.2998c-4.7002 -4.7002 -12.2002 -4.7002 -16.9004 0l-98.8994 98.2998c-7.7002 7.5 -2.2998 20.5 8.39941 20.5zM448 368v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352
@@ -287,7 +287,7 @@ l40.4004 -59.8994l70.8994 13.6992c13 2.60059 26.6006 -1.59961 36.2002 -11.0996c9
 l-91 17.5996l17.5996 -91.2002l-76.7998 -52l76.7998 -52l-17.5996 -91.1992l90.8994 17.5996l51.9004 -77l51.9004 76.9004l91 -17.6006zM256 296c57.2998 0 104 -46.7002 104 -104s-46.7002 -104 -104 -104s-104 46.7002 -104 104s46.7002 104 104 104zM256 136
 c30.9004 0 56 25.0996 56 56s-25.0996 56 -56 56s-56 -25.0996 -56 -56s25.0996 -56 56 -56z" />
     <glyph glyph-name="moon" unicode="&#xf186;" 
-d="M279.135 -64c-141.424 0 -256 114.64 -256 256c0 141.425 114.641 256 256 256c13.0068 -0.00195312 33.9443 -1.91797 46.7354 -4.27734c44.0205 -8.13086 53.7666 -66.8691 15.0215 -88.9189c-41.374 -23.5439 -67.4336 -67.4121 -67.4336 -115.836
+d="M279.135 -64c-141.424 0 -256 114.64 -256 256c0 141.425 114.641 256 256 256c16.0342 -0.00292969 31.5078 -1.46875 46.7354 -4.27734c44.0205 -8.13086 53.7666 -66.8691 15.0215 -88.9189c-41.374 -23.5439 -67.4336 -67.4121 -67.4336 -115.836
 c0 -83.5234 75.9238 -146.475 158.272 -130.792c43.6904 8.32129 74.5186 -42.5693 46.248 -77.4004c-47.8613 -58.9717 -120.088 -94.7754 -198.844 -94.7754zM279.135 400c-114.875 0 -208 -93.125 -208 -208s93.125 -208 208 -208
 c65.2314 0 123.439 30.0361 161.575 77.0244c-111.611 -21.2568 -215.252 64.0957 -215.252 177.943c0 67.5127 36.9326 126.392 91.6934 157.555c-12.3271 2.27637 -25.0312 3.47754 -38.0166 3.47754z" />
     <glyph glyph-name="caret-square-left" unicode="&#xf191;" horiz-adv-x="448" 
@@ -334,12 +334,12 @@ c12.7002 0 24.9004 -5.09961 33.9004 -14.0996zM256 396.1v-76.0996h76.0996zM336 -1
 c-33.2002 0 -58 30.4004 -51.4004 62.9004l19.7002 97.0996v32h32v-32h22.1006c5.7998 0 10.6992 -4.09961 11.7998 -9.7002zM160.3 57.9004c17.9004 0 32.4004 12.0996 32.4004 27c0 14.8994 -14.5 27 -32.4004 27c-17.8994 0 -32.3994 -12.1006 -32.3994 -27
 c0 -14.9004 14.5 -27 32.3994 -27zM192.3 256v-32h-32v32h32z" />
     <glyph glyph-name="file-audio" unicode="&#xf1c7;" horiz-adv-x="384" 
-d="M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320
+d="M369.941 350.059c8.68848 -8.68848 14.0586 -20.6943 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c13.2461 0 25.252 -5.37012 33.9404 -14.0586zM332.118 320
 l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM192 60.0244c0 -10.6914 -12.9258 -16.0459 -20.4854 -8.48535l-35.5146 35.9746h-28c-6.62695 0 -12 5.37305 -12 12v56c0 6.62695 5.37305 12 12 12h28
 l35.5146 36.9473c7.56055 7.56055 20.4854 2.20605 20.4854 -8.48535v-135.951zM233.201 107.154c9.05078 9.29688 9.05957 24.1328 0.000976562 33.4385c-22.1494 22.752 12.2344 56.2461 34.3945 33.4814c27.1982 -27.9404 27.2119 -72.4443 0.000976562 -100.401
 c-21.793 -22.3857 -56.9463 10.3154 -34.3965 33.4814z" />
     <glyph glyph-name="file-video" unicode="&#xf1c8;" horiz-adv-x="384" 
-d="M369.941 350.059c7.75977 -7.75977 14.0586 -22.9658 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c10.9746 0 26.1807 -6.29883 33.9404 -14.0586zM332.118 320
+d="M369.941 350.059c8.68848 -8.68848 14.0586 -20.6943 14.0586 -33.9404v-332.118c0 -26.5098 -21.4902 -48 -48 -48h-288c-26.5098 0 -48 21.4902 -48 48v416c0 26.5098 21.4902 48 48 48h204.118c13.2461 0 25.252 -5.37012 33.9404 -14.0586zM332.118 320
 l-76.1182 76.1182v-76.1182h76.1182zM48 -16h288v288h-104c-13.2549 0 -24 10.7451 -24 24v104h-160v-416zM276.687 195.303c10.0049 10.0049 27.3135 2.99707 27.3135 -11.3135v-111.976c0 -14.2939 -17.2959 -21.332 -27.3135 -11.3135l-52.6865 52.6738v-37.374
 c0 -11.0459 -8.9541 -20 -20 -20h-104c-11.0459 0 -20 8.9541 -20 20v104c0 11.0459 8.9541 20 20 20h104c11.0459 0 20 -8.9541 20 -20v-37.374z" />
     <glyph glyph-name="file-code" unicode="&#xf1c9;" horiz-adv-x="384" 
@@ -376,9 +376,9 @@ c73.46 -15.2598 127.939 -77.46 127.939 -155.16c0 -41.3604 6.03027 -70.7197 14.33
 c-35.3203 0 -63.9697 28.6504 -63.9697 64h127.939c0 -35.3496 -28.6494 -64 -63.9697 -64z" />
     <glyph glyph-name="copyright" unicode="&#xf1f9;" 
 d="M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z
-M363.351 93.0645c-9.61328 -9.71289 -45.5293 -41.3965 -104.064 -41.3965c-82.4297 0 -140.484 61.4248 -140.484 141.567c0 79.1514 60.2754 139.4 139.763 139.4c55.5303 0 88.7373 -26.6201 97.5928 -34.7783c2.13379 -1.96289 3.86523 -5.9082 3.86523 -8.80762
-c0 -1.95508 -0.864258 -4.87402 -1.92969 -6.51465l-18.1543 -28.1133c-3.8418 -5.9502 -11.9668 -7.28223 -17.499 -2.9209c-8.5957 6.77637 -31.8145 22.5381 -61.708 22.5381c-48.3037 0 -77.916 -35.3301 -77.916 -80.082c0 -41.5889 26.8877 -83.6924 78.2764 -83.6924
-c32.6572 0 56.8428 19.0391 65.7266 27.2256c5.26953 4.85645 13.5957 4.03906 17.8193 -1.73828l19.8652 -27.1699c1.28613 -1.74512 2.33008 -4.91992 2.33008 -7.08789c0 -2.72363 -1.56055 -6.5 -3.48242 -8.42969z" />
+M363.351 93.0645c-9.61328 -9.71289 -45.5293 -41.3965 -104.064 -41.3965c-82.4297 0 -140.484 61.4248 -140.484 141.567c0 79.1514 60.2754 139.4 139.763 139.4c55.5303 0 88.7373 -26.6201 97.5928 -34.7783c2.37793 -2.1875 3.86914 -5.3252 3.86914 -8.80762
+c0 -2.39746 -0.717773 -4.64258 -1.93359 -6.51465l-18.1543 -28.1133c-3.8418 -5.9502 -11.9668 -7.28223 -17.499 -2.9209c-8.5957 6.77637 -31.8145 22.5381 -61.708 22.5381c-48.3037 0 -77.916 -35.3301 -77.916 -80.082c0 -41.5889 26.8877 -83.6924 78.2764 -83.6924
+c32.6572 0 56.8428 19.0391 65.7266 27.2256c5.26953 4.85645 13.5957 4.03906 17.8193 -1.73828l19.8652 -27.1699c1.45996 -1.98145 2.32422 -4.42969 2.32422 -7.07715c0 -3.28809 -1.32422 -6.2793 -3.47656 -8.44043z" />
     <glyph glyph-name="closed-captioning" unicode="&#xf20a;" 
 d="M464 384c26.5 0 48 -21.5 48 -48v-288c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v288c0 26.5 21.5 48 48 48h416zM458 48c3.2998 0 6 2.7002 6 6v276c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-276c0 -3.2998 2.7002 -6 6 -6h404z
 M246.9 133.7c1.69922 -2.40039 1.5 -5.60059 -0.5 -7.7002c-53.6006 -56.7998 -172.801 -32.0996 -172.801 67.9004c0 97.2998 121.7 119.5 172.5 70.0996c2.10059 -2 2.5 -3.2002 1 -5.7002l-17.5 -30.5c-1.89941 -3.09961 -6.19922 -4 -9.09961 -1.7002
@@ -398,7 +398,7 @@ c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-12v-24h88v12c
 h-32v-32h32zM96 136h224v12c0 6.62695 5.37305 12 12 12h12v160h-12c-6.62695 0 -12 5.37305 -12 12v12h-224v-12c0 -6.62695 -5.37305 -12 -12 -12h-12v-160h12c6.62695 0 12 -5.37305 12 -12v-12zM224 0v32h-32v-32h32zM504 64v160h-12c-6.62695 0 -12 5.37305 -12 12v12
 h-88v-88h12c6.62695 0 12 -5.37305 12 -12v-72c0 -6.62695 -5.37305 -12 -12 -12h-72c-6.62695 0 -12 5.37305 -12 12v12h-88v-24h12c6.62695 0 12 -5.37305 12 -12v-12h224v12c0 6.62695 5.37305 12 12 12h12zM544 0v32h-32v-32h32zM544 256v32h-32v-32h32z" />
     <glyph glyph-name="sticky-note" unicode="&#xf249;" horiz-adv-x="448" 
-d="M448 99.8936c0 -10.9746 -6.29883 -26.1797 -14.0586 -33.9404l-83.8828 -83.8818c-7.75977 -7.76074 -22.9658 -14.0596 -33.9404 -14.0596h-268.118c-26.5098 0 -48 21.4902 -48 48v351.988c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-268.106z
+d="M448 99.8936c0 -13.2451 -5.37012 -25.252 -14.0586 -33.9404l-83.8828 -83.8818c-8.68848 -8.68848 -20.6943 -14.0596 -33.9404 -14.0596h-268.118c-26.5098 0 -48 21.4902 -48 48v351.988c0 26.5098 21.4902 48 48 48h352c26.5098 0 48 -21.4902 48 -48v-268.106z
 M320 19.8936l76.1182 76.1182h-76.1182v-76.1182zM400 368h-352v-351.988h224v104c0 13.2549 10.7451 24 24 24h104v223.988z" />
     <glyph glyph-name="clone" unicode="&#xf24d;" 
 d="M464 448c26.5098 0 48 -21.4902 48 -48v-320c0 -26.5098 -21.4902 -48 -48 -48h-48v-48c0 -26.5098 -21.4902 -48 -48 -48h-320c-26.5098 0 -48 21.4902 -48 48v320c0 26.5098 21.4902 48 48 48h48v48c0 26.5098 21.4902 48 48 48h320zM362 -16c3.31152 0 6 2.68848 6 6
@@ -412,11 +412,11 @@ d="M408.864 368.948c48.8213 20.751 103.136 -15.0723 103.136 -67.9111v-114.443c0
 c-17.6729 0 -32 14.3271 -32 32c0 27.3301 1.1416 29.2012 -3.11035 32.9033l-97.71 85.0811c-24.8994 21.6797 -39.1797 52.8926 -39.1797 85.6338v56.9531c0 47.4277 44.8457 82.0215 91.0459 71.1807c1.96094 55.751 63.5107 87.8262 110.671 60.8057
 c29.1895 31.0713 78.8604 31.4473 108.334 -0.0214844c32.7051 18.6846 76.4121 10.3096 98.8135 -23.5879zM464 186.594v114.445c0 34.29 -52 33.8232 -52 0.676758c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v26.751
 c0 34.457 -52 33.707 -52 0.676758v-27.4287c0 -8.83594 -7.16309 -16 -16 -16h-7c-8.83691 0 -16 7.16406 -16 16v40.4658c0 34.3525 -52 33.8115 -52 0.677734v-41.1436c0 -8.83594 -7.16406 -16 -16 -16h-7c-8.83594 0 -16 7.16406 -16 16v26.751
-c0 34.4023 -52 33.7744 -52 0.676758v-116.571c0 -8.83203 -7.16797 -16 -16 -16c-3.30664 0 -8.01367 1.7627 -10.5068 3.93359l-7 6.09473c-3.03223 2.64062 -5.49316 8.04688 -5.49316 12.0674v0v41.2275c0 34.2148 -52 33.8857 -52 0.677734v-56.9531
-c0 -18.8555 8.27441 -36.874 22.7002 -49.4365l97.71 -85.0801c12.4502 -10.8398 19.5898 -26.4463 19.5898 -42.8164v-10.2861h220v7.07617c0 13.21 2.65332 26.0791 7.88281 38.25l42.835 99.6553c2.91602 6.75391 5.28223 18.207 5.28223 25.5635v0.0488281z" />
+c0 34.4023 -52 33.7744 -52 0.676758v-116.571c0 -8.83105 -7.17773 -15.9961 -16.0078 -15.9961c-4.0166 0 -7.68848 1.48242 -10.499 3.92969l-7 6.09473c-3.37012 2.93457 -5.49316 7.25293 -5.49316 12.0674v41.2275c0 34.2148 -52 33.8857 -52 0.677734v-56.9531
+c0 -18.8555 8.27441 -36.874 22.7002 -49.4365l97.71 -85.0801c12.4502 -10.8398 19.5898 -26.4463 19.5898 -42.8164v-10.2861h220v7.07617c0 13.21 2.65332 26.0791 7.88281 38.25l42.835 99.6553c3.37891 7.82715 5.28223 16.501 5.28223 25.5625v0.0498047z" />
     <glyph glyph-name="hand-paper" unicode="&#xf256;" horiz-adv-x="448" 
-d="M372.57 335.359c39.9062 5.63281 75.4297 -25.7393 75.4297 -66.3594v-131.564c-0.00195312 -12.7666 -2.33008 -33.2246 -5.19531 -45.666l-30.1836 -130.958c-3.34668 -14.5234 -16.2783 -24.8125 -31.1816 -24.8125h-222.897
-c-9.10352 0 -20.7793 6.01758 -26.0615 13.4316l-119.97 168.415c-21.2441 29.8203 -14.8047 71.3574 14.5498 93.1533c18.7754 13.9395 42.1309 16.2979 62.083 8.87109v126.13c0 44.0547 41.125 75.5439 82.4053 64.9834c23.8926 48.1963 92.3535 50.2471 117.982 0.74707
+d="M372.57 335.359c39.9062 5.63281 75.4297 -25.7393 75.4297 -66.3594v-131.564c-0.00292969 -15.7393 -1.80566 -30.9482 -5.19531 -45.666l-30.1836 -130.958c-3.34668 -14.5234 -16.2783 -24.8125 -31.1816 -24.8125h-222.897
+c-10.7539 0 -20.2588 5.28613 -26.0615 13.4316l-119.97 168.415c-21.2441 29.8203 -14.8047 71.3574 14.5498 93.1533c18.7754 13.9395 42.1309 16.2979 62.083 8.87109v126.13c0 44.0547 41.125 75.5439 82.4053 64.9834c23.8926 48.1963 92.3535 50.2471 117.982 0.74707
 c42.5186 11.1445 83.0391 -21.9346 83.0391 -65.5469v-10.8242zM399.997 137.437l-0.00195312 131.563c0 24.9492 -36.5703 25.5508 -36.5703 -0.691406v-76.3086c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v154.184
 c0 25.501 -36.5703 26.3633 -36.5703 0.691406v-154.875c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v188.309c0 25.501 -36.5703 26.3545 -36.5703 0.691406v-189c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16
 v153.309c0 25.501 -36.5713 26.3359 -36.5713 0.691406v-206.494c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832l-27.1279 38.0791c-14.3711 20.1709 -43.833 -2.33496 -29.3945 -22.6045l115.196 -161.697h201.92l27.3252 118.551
@@ -424,45 +424,46 @@ c2.63086 11.417 3.96484 23.1553 3.96484 34.8857z" />
     <glyph glyph-name="hand-scissors" unicode="&#xf257;" 
 d="M256 -32c-44.9561 0 -77.3428 43.2627 -64.0244 85.8535c-21.6484 13.71 -34.0156 38.7617 -30.3408 65.0068h-87.6348c-40.8037 0 -74 32.8105 -74 73.1406c0 40.3291 33.1963 73.1396 74 73.1396l94 -9.14062l-78.8496 18.6787
 c-38.3076 14.7422 -57.04 57.4707 -41.9424 95.1123c15.0303 37.4736 57.7549 55.7803 95.6416 41.2012l144.929 -55.7568c24.9551 30.5566 57.8086 43.9932 92.2178 24.7324l97.999 -54.8525c20.9746 -11.7393 34.0049 -33.8457 34.0049 -57.6904v-205.702
-c0 -30.7422 -21.4404 -57.5576 -51.7979 -64.5537l-118.999 -27.4268c-4.97168 -1.14648 -10.0889 -1.72949 -15.2031 -1.72949zM256 16.0127l70 -0.000976562c1.23633 0 3.21777 0.225586 4.42285 0.501953l119.001 27.4277
-c8.58203 1.97754 14.5762 9.29102 14.5762 17.7812v205.701c0 6.4873 -3.62109 12.542 -9.44922 15.8047l-98 54.8545c-8.13965 4.55566 -18.668 2.61914 -24.4873 -4.50781l-21.7646 -26.6475c-2.65039 -3.24512 -8.20215 -5.87891 -12.3926 -5.87891
-c-1.64062 0 -4.21484 0.477539 -5.74609 1.06738l-166.549 64.0908c-32.6543 12.5664 -50.7744 -34.5771 -19.2227 -46.7168l155.357 -59.7852c5.66016 -2.17773 10.2539 -8.86816 10.2539 -14.9326v0v-11.6328c0 -8.83691 -7.16309 -16 -16 -16h-182
+c0 -30.7422 -21.4404 -57.5576 -51.7979 -64.5537l-118.999 -27.4268c-4.97168 -1.14648 -10.0889 -1.72949 -15.2031 -1.72949zM256 16.0127l70 -0.000976562c1.52441 0 2.99707 0.174805 4.42285 0.501953l119.001 27.4277
+c8.58203 1.97754 14.5762 9.29102 14.5762 17.7812v205.701c0 6.4873 -3.62109 12.542 -9.44922 15.8047l-98 54.8545c-8.13965 4.55566 -18.668 2.61914 -24.4873 -4.50781l-21.7646 -26.6475c-2.93457 -3.59375 -7.40332 -5.87305 -12.4004 -5.87305
+c-2.02246 0 -3.95703 0.375977 -5.73828 1.06152l-166.549 64.0908c-32.6543 12.5664 -50.7744 -34.5771 -19.2227 -46.7168l155.357 -59.7852c6 -2.30859 10.2539 -8.12402 10.2539 -14.9326v-11.6328c0 -8.83691 -7.16309 -16 -16 -16h-182
 c-34.375 0 -34.4297 -50.2803 0 -50.2803h182c8.83691 0 16 -7.16309 16 -16v-6.85645c0 -8.83691 -7.16309 -16 -16 -16h-28c-25.1221 0 -25.1592 -36.5674 0 -36.5674h28c8.83691 0 16 -7.16211 16 -16v-6.85547c0 -8.83691 -7.16309 -16 -16 -16
 c-25.1201 0 -25.1602 -36.5674 0 -36.5674z" />
     <glyph glyph-name="hand-lizard" unicode="&#xf258;" horiz-adv-x="576" 
 d="M556.686 157.458c12.6357 -19.4863 19.3145 -42.0615 19.3145 -65.2871v-124.171h-224v71.582l-99.751 38.7871c-2.7832 1.08203 -5.70996 1.63086 -8.69727 1.63086h-131.552c-30.8789 0 -56 25.1211 -56 56c0 48.5234 39.4766 88 88 88h113.709l18.333 48h-196.042
-c-44.1123 0 -80 35.8877 -80 80v8c0 30.8779 25.1211 56 56 56h293.917c24.5 0 47.084 -12.2725 60.4111 -32.8291zM528 16v76.1709v0.0478516c0 11.7461 -5.19141 29.2734 -11.5879 39.124l-146.358 225.715c-4.44336 6.85254 -11.9707 10.9424 -20.1367 10.9424h-293.917
-c-4.41113 0 -8 -3.58887 -8 -8v-8c0 -17.6445 14.3555 -32 32 -32h213.471c25.2021 0 42.626 -25.293 33.6299 -48.8457l-24.5518 -64.2812c-7.05371 -18.4658 -25.0732 -30.873 -44.8398 -30.873h-113.709c-22.0557 0 -40 -17.9443 -40 -40c0 -4.41113 3.58887 -8 8 -8
-h131.552h0.0517578c7.44141 0 19.1074 -2.19238 26.041 -4.89355l99.752 -38.7881c18.5898 -7.22852 30.6035 -24.7881 30.6035 -44.7363v-23.582h128z" />
+c-44.1123 0 -80 35.8877 -80 80v8c0 30.8779 25.1211 56 56 56h293.917c24.5 0 47.084 -12.2725 60.4111 -32.8291zM528 16v76.1709c0 0.0166016 -0.0439453 0.106445 -0.0439453 0.12207c0 14.3945 -4.24219 27.8057 -11.5439 39.0498l-146.358 225.715
+c-4.44336 6.85254 -11.9707 10.9424 -20.1367 10.9424h-293.917c-4.41113 0 -8 -3.58887 -8 -8v-8c0 -17.6445 14.3555 -32 32 -32h213.471c25.2021 0 42.626 -25.293 33.6299 -48.8457l-24.5518 -64.2812c-7.05371 -18.4658 -25.0732 -30.873 -44.8398 -30.873h-113.709
+c-22.0557 0 -40 -17.9443 -40 -40c0 -4.41113 3.58887 -8 8 -8h131.552c0.0175781 0 0.0712891 -0.0273438 0.0888672 -0.0273438c9.16992 0 17.9404 -1.72461 26.0039 -4.86621l99.752 -38.7881c18.5898 -7.22852 30.6035 -24.7881 30.6035 -44.7363v-23.582h128z" />
     <glyph glyph-name="hand-spock" unicode="&#xf259;" 
-d="M501.03 331.824c6.05762 -9.77832 10.9746 -27.0498 10.9746 -38.5518c0 -4.80664 -0.915039 -12.499 -2.04297 -17.1709l-57.623 -241.963c-12.748 -54.1729 -68.2627 -98.1387 -123.915 -98.1387h-0.345703h-107.455h-0.224609
-c-33.8135 0 -81.2148 18.834 -105.807 42.041l-91.3652 85.9766c-12.8213 12.0469 -23.2266 36.1016 -23.2266 53.6943c0 16.1299 8.97266 38.7529 20.0273 50.499c5.31836 5.66406 29.875 29.3926 68.1152 21.8477l-24.3594 82.1973
-c-1.68164 5.66406 -3.0459 15.0576 -3.0459 20.9668c0 37.5938 30.417 70.502 67.8955 73.4551c-0.204102 2.03125 -0.369141 5.33691 -0.369141 7.37891c0 31.627 24.8594 63.6895 55.4902 71.5684c43.248 10.9785 80.5645 -17.7012 89.6602 -53.0723l13.6836 -53.207
-l4.64648 22.6602c6.76074 32.417 39.123 58.8115 72.2373 58.916c8.73438 0 56.625 -3.26953 70.7383 -54.0801c15.0664 0.710938 46.9199 -3.50977 66.3105 -35.0176zM463.271 287.219c7.86914 32.9844 -42.1211 45.2695 -50.0859 11.9219l-24.8008 -104.146
-c-4.38867 -18.4141 -31.7783 -11.8926 -28.0557 6.2168l28.5479 139.166c7.39844 36.0703 -43.3076 45.0703 -50.1182 11.9629l-31.791 -154.971c-3.54883 -17.3086 -28.2832 -18.0469 -32.7109 -0.804688l-47.3262 184.035
-c-8.43359 32.8105 -58.3691 20.2676 -49.8652 -12.8359l42.4414 -165.039c4.81641 -18.7207 -23.3711 -26.9121 -28.9648 -8.00781l-31.3438 105.779c-9.6875 32.6465 -59.1191 18.2578 -49.3867 -14.625l36.0137 -121.539
-c5.61816 -18.9521 10.1777 -50.377 10.1777 -70.1436v-0.00878906c0 -6.54297 -8.05664 -10.9355 -13.4824 -5.82617l-51.123 48.1074c-24.7852 23.4082 -60.0527 -14.1875 -35.2793 -37.4902l91.3691 -85.9805c16.9629 -16.0068 49.6592 -28.998 72.9824 -28.998h0.154297
-h107.455h0.216797c34.7402 0 69.3936 27.4443 77.3525 61.2598z" />
+d="M501.03 331.824c6.92773 -11.1826 10.9697 -24.4053 10.9697 -38.5146c0 -5.92676 -0.706055 -11.6885 -2.03809 -17.208l-57.623 -241.963c-13.2236 -56.1904 -63.707 -98.1387 -123.908 -98.1387h-0.352539h-107.455
+c-0.0761719 0 -0.193359 0.00195312 -0.270508 0.00195312c-40.9248 0 -78.1475 15.9814 -105.761 42.0391l-91.3652 85.9766c-14.3076 13.4434 -23.2246 32.5547 -23.2246 53.7168c0 19.5254 7.61035 37.2861 20.0254 50.4766
+c5.31836 5.66406 29.875 29.3926 68.1152 21.8477l-24.3594 82.1973c-1.97363 6.64844 -2.97656 13.6836 -2.97656 20.9688c0 38.6953 29.8926 70.4639 67.8262 73.4531c-0.246094 2.45117 -0.34082 4.85547 -0.34082 7.37207c0 34.4199 23.585 63.376 55.4619 71.5752
+c43.248 10.9785 80.5645 -17.7012 89.6602 -53.0723l13.6836 -53.207l4.64648 22.6602c6.99023 33.5186 36.6826 58.8037 72.2373 58.916c8.73438 0 56.625 -3.26953 70.7383 -54.0801c15.0664 0.710938 46.9199 -3.50977 66.3105 -35.0176zM463.271 287.219
+c7.86914 32.9844 -42.1211 45.2695 -50.0859 11.9219l-24.8008 -104.146c-4.38867 -18.4141 -31.7783 -11.8926 -28.0557 6.2168l28.5479 139.166c7.39844 36.0703 -43.3076 45.0703 -50.1182 11.9629l-31.791 -154.971
+c-3.54883 -17.3086 -28.2832 -18.0469 -32.7109 -0.804688l-47.3262 184.035c-8.43359 32.8105 -58.3691 20.2676 -49.8652 -12.8359l42.4414 -165.039c4.81641 -18.7207 -23.3711 -26.9121 -28.9648 -8.00781l-31.3438 105.779
+c-9.6875 32.6465 -59.1191 18.2578 -49.3867 -14.625l36.0137 -121.539c6.59375 -22.2441 10.1777 -45.7803 10.1777 -70.1523c0 -6.54297 -8.05664 -10.9355 -13.4824 -5.82617l-51.123 48.1074c-24.7852 23.4082 -60.0527 -14.1875 -35.2793 -37.4902l91.3691 -85.9805
+c19.0469 -17.9736 44.75 -28.998 72.9795 -28.998h0.157227h107.455c0.0732422 0 0.138672 0.0429688 0.212891 0.0429688c37.5791 0 69.1016 26.1416 77.3564 61.2168z" />
     <glyph glyph-name="hand-pointer" unicode="&#xf25a;" horiz-adv-x="448" 
-d="M358.182 268.639c43.1934 16.6348 89.8184 -15.7949 89.8184 -62.6387v-84c-0.000976562 -4.25 -0.775391 -11.0615 -1.72754 -15.2041l-27.4297 -118.999c-6.98242 -30.2969 -33.7549 -51.7969 -64.5566 -51.7969h-178.286c-21.2588 0 -41.3682 10.4102 -53.791 27.8457
-l-109.699 154.001c-21.2432 29.8193 -14.8047 71.3574 14.5498 93.1523c18.8115 13.9658 42.1748 16.2822 62.083 8.87207v161.129c0 36.9443 29.7363 67 66.2861 67s66.2861 -30.0557 66.2861 -67v-73.6338c20.4131 2.85742 41.4678 -3.94238 56.5947 -19.6289
-c27.1934 12.8467 60.3799 5.66992 79.8721 -19.0986zM80.9854 168.303c-14.4004 20.2119 -43.8008 -2.38281 -29.3945 -22.6055l109.712 -154c3.43457 -4.81934 8.92871 -7.69727 14.6973 -7.69727h178.285c8.49219 0 15.8037 5.99414 17.7822 14.5762l27.4297 119.001
-c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285v84c0 25.1602 -36.5713 25.1211 -36.5713 0c0 -8.83594 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16406 -16 16v21c0 25.1602 -36.5713 25.1201 -36.5713 0v-21c0 -8.83594 -7.16309 -16 -16 -16h-6.85938
-c-8.83691 0 -16 7.16406 -16 16v35c0 25.1602 -36.5703 25.1201 -36.5703 0v-35c0 -8.83594 -7.16309 -16 -16 -16h-6.85742c-8.83691 0 -16 7.16406 -16 16v175c0 25.1602 -36.5713 25.1201 -36.5713 0v-241.493c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832z
-M176.143 48v96c0 8.83691 6.26855 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM251.571 48v96c0 8.83691 6.26758 16 14 16h6c7.73145 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26855 -16 -14 -16h-6
-c-7.73242 0 -14 7.16309 -14 16zM327 48v96c0 8.83691 6.26758 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16z" />
+d="M358.182 268.639c43.1934 16.6348 89.8184 -15.7949 89.8184 -62.6387v-84c-0.000976562 -5.24023 -0.600586 -10.3037 -1.72754 -15.2041l-27.4297 -118.999c-6.98242 -30.2969 -33.7549 -51.7969 -64.5566 -51.7969h-178.286
+c-21.2588 0 -41.3682 10.4102 -53.791 27.8457l-109.699 154.001c-21.2432 29.8193 -14.8047 71.3574 14.5498 93.1523c18.8115 13.9658 42.1748 16.2822 62.083 8.87207v161.129c0 36.9443 29.7363 67 66.2861 67s66.2861 -30.0557 66.2861 -67v-73.6338
+c20.4131 2.85742 41.4678 -3.94238 56.5947 -19.6289c27.1934 12.8467 60.3799 5.66992 79.8721 -19.0986zM80.9854 168.303c-14.4004 20.2119 -43.8008 -2.38281 -29.3945 -22.6055l109.712 -154c3.43457 -4.81934 8.92871 -7.69727 14.6973 -7.69727h178.285
+c8.49219 0 15.8037 5.99414 17.7822 14.5762l27.4297 119.001c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285v84c0 25.1602 -36.5713 25.1211 -36.5713 0c0 -8.83594 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16406 -16 16v21
+c0 25.1602 -36.5713 25.1201 -36.5713 0v-21c0 -8.83594 -7.16309 -16 -16 -16h-6.85938c-8.83691 0 -16 7.16406 -16 16v35c0 25.1602 -36.5703 25.1201 -36.5703 0v-35c0 -8.83594 -7.16309 -16 -16 -16h-6.85742c-8.83691 0 -16 7.16406 -16 16v175
+c0 25.1602 -36.5713 25.1201 -36.5713 0v-241.493c0 -15.5703 -20.0352 -21.9092 -29.0303 -9.2832zM176.143 48v96c0 8.83691 6.26855 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM251.571 48v96
+c0 8.83691 6.26758 16 14 16h6c7.73145 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26855 -16 -14 -16h-6c-7.73242 0 -14 7.16309 -14 16zM327 48v96c0 8.83691 6.26758 16 14 16h6c7.73242 0 14 -7.16309 14 -16v-96c0 -8.83691 -6.26758 -16 -14 -16h-6
+c-7.73242 0 -14 7.16309 -14 16z" />
     <glyph glyph-name="hand-peace" unicode="&#xf25b;" horiz-adv-x="448" 
-d="M362.146 256.024c42.5908 13.3184 85.8535 -19.0684 85.8535 -64.0244l-0.0117188 -70.001c-0.000976562 -4.25 -0.775391 -11.0615 -1.72949 -15.2031l-27.4268 -118.999c-6.99707 -30.3564 -33.8105 -51.7969 -64.5547 -51.7969h-205.702
+d="M362.146 256.024c42.5908 13.3184 85.8535 -19.0684 85.8535 -64.0244l-0.0117188 -70.001c-0.000976562 -5.24023 -0.600586 -10.3027 -1.72949 -15.2031l-27.4268 -118.999c-6.99707 -30.3564 -33.8105 -51.7969 -64.5547 -51.7969h-205.702
 c-23.8447 0 -45.9502 13.0303 -57.6904 34.0059l-54.8525 97.999c-19.2607 34.4092 -5.82422 67.2617 24.7324 92.2178l-55.7568 144.928c-14.5791 37.8867 3.72754 80.6113 41.2012 95.6416c37.6406 15.0977 80.3691 -3.63477 95.1123 -41.9424l18.6787 -78.8496
 l-9.14062 94c0 40.8037 32.8096 74 73.1396 74s73.1406 -33.1963 73.1406 -74v-87.6348c26.2451 3.6748 51.2959 -8.69238 65.0068 -30.3408zM399.987 122l-0.000976562 70c0 25.1602 -36.5674 25.1201 -36.5674 0c0 -8.83691 -7.16309 -16 -16 -16h-6.85547
-c-8.83789 0 -16 7.16309 -16 16v28c0 25.1592 -36.5674 25.1221 -36.5674 0v-28c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v182c0 34.4297 -50.2803 34.375 -50.2803 0v-182c0 -8.83691 -7.16309 -16 -16 -16h-11.6328v0
-c-6.06445 0 -12.7549 4.59375 -14.9326 10.2539l-59.7842 155.357c-12.1396 31.5518 -59.2842 13.4326 -46.7168 -19.2227l64.0898 -166.549c0.589844 -1.53125 1.06738 -4.10547 1.06738 -5.74609c0 -4.19043 -2.63379 -9.74219 -5.87891 -12.3926l-26.6475 -21.7646
+c-8.83789 0 -16 7.16309 -16 16v28c0 25.1592 -36.5674 25.1221 -36.5674 0v-28c0 -8.83691 -7.16309 -16 -16 -16h-6.85645c-8.83691 0 -16 7.16309 -16 16v182c0 34.4297 -50.2803 34.375 -50.2803 0v-182c0 -8.83691 -7.16309 -16 -16 -16h-11.6328
+c-6.80859 0 -12.624 4.25391 -14.9326 10.2539l-59.7842 155.357c-12.1396 31.5518 -59.2842 13.4326 -46.7168 -19.2227l64.0898 -166.549c0.685547 -1.78125 1.07812 -3.71875 1.07812 -5.74121c0 -4.99707 -2.2959 -9.46289 -5.88965 -12.3975l-26.6475 -21.7646
 c-7.12695 -5.81934 -9.06445 -16.3467 -4.50781 -24.4873l54.8535 -98c3.26367 -5.82812 9.31934 -9.44922 15.8057 -9.44922h205.701c8.49121 0 15.8037 5.99414 17.7812 14.5762l27.4277 119.001c0.333008 1.44629 0.501953 2.93457 0.501953 4.42285z" />
     <glyph glyph-name="registered" unicode="&#xf25d;" 
 d="M256 440c136.967 0 248 -111.033 248 -248s-111.033 -248 -248 -248s-248 111.033 -248 248s111.033 248 248 248zM256 -8c110.549 0 200 89.4678 200 200c0 110.549 -89.4678 200 -200 200c-110.549 0 -200 -89.4688 -200 -200c0 -110.549 89.4678 -200 200 -200z
-M366.442 73.791c4.40332 -7.99219 -1.37012 -17.791 -10.5107 -17.791h-42.8096h-0.0126953c-3.97559 0 -8.71582 2.84961 -10.5801 6.36035l-47.5156 89.3027h-31.958v-83.6631c0 -6.61719 -5.38281 -12 -12 -12h-38.5674c-6.61719 0 -12 5.38281 -12 12v248.304
-c0 6.61719 5.38281 12 12 12h78.667c71.251 0 101.498 -32.749 101.498 -85.252c0 -31.6123 -15.2148 -59.2969 -39.4824 -73.1758c3.02148 -4.61719 0.225586 0.199219 53.2715 -96.085zM256.933 208.094c20.9131 0 32.4307 11.5186 32.4316 32.4316
-c0 19.5752 -6.5127 31.709 -38.9297 31.709h-27.377v-64.1406h33.875z" />
+M366.442 73.791c4.40332 -7.99219 -1.37012 -17.791 -10.5107 -17.791h-42.8096c-0.00488281 0 -0.000976562 -0.0126953 -0.00585938 -0.0126953c-4.58594 0 -8.57422 2.58301 -10.5869 6.37305l-47.5156 89.3027h-31.958v-83.6631c0 -6.61719 -5.38281 -12 -12 -12
+h-38.5674c-6.61719 0 -12 5.38281 -12 12v248.304c0 6.61719 5.38281 12 12 12h78.667c71.251 0 101.498 -32.749 101.498 -85.252c0 -31.6123 -15.2148 -59.2969 -39.4824 -73.1758c3.02148 -4.61719 0.225586 0.199219 53.2715 -96.085zM256.933 208.094
+c20.9131 0 32.4307 11.5186 32.4316 32.4316c0 19.5752 -6.5127 31.709 -38.9297 31.709h-27.377v-64.1406h33.875z" />
     <glyph glyph-name="calendar-plus" unicode="&#xf271;" horiz-adv-x="448" 
 d="M336 156v-24c0 -6.59961 -5.40039 -12 -12 -12h-76v-76c0 -6.59961 -5.40039 -12 -12 -12h-24c-6.59961 0 -12 5.40039 -12 12v76h-76c-6.59961 0 -12 5.40039 -12 12v24c0 6.59961 5.40039 12 12 12h76v76c0 6.59961 5.40039 12 12 12h24c6.59961 0 12 -5.40039 12 -12
 v-76h76c6.59961 0 12 -5.40039 12 -12zM448 336v-352c0 -26.5 -21.5 -48 -48 -48h-352c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h48v52c0 6.59961 5.40039 12 12 12h40c6.59961 0 12 -5.40039 12 -12v-52h128v52c0 6.59961 5.40039 12 12 12h40
@@ -481,9 +482,9 @@ c6.62695 0 12 -5.37305 12 -12v-52h48zM394 -16c3.31152 0 6 2.68848 6 6v298h-352v-
 c-4.66699 4.70508 -4.6377 12.3027 0.0673828 16.9707l22.7197 22.5361c4.70508 4.66699 12.3027 4.63672 16.9697 -0.0693359l44.1035 -44.4609l111.072 110.182c4.70508 4.66699 12.3027 4.63672 16.9707 -0.0683594l22.5361 -22.7178
 c4.66699 -4.70508 4.63672 -12.3027 -0.0683594 -16.9697z" />
     <glyph glyph-name="map" unicode="&#xf279;" horiz-adv-x="576" 
-d="M560.02 416c8.4502 0 15.9805 -6.83008 15.9805 -16.0195v-346.32c0 -11.9609 -9.01367 -25.2705 -20.1201 -29.71l-151.83 -52.8105c-5.32617 -1.7334 -14.1953 -3.13965 -19.7969 -3.13965c-5.7373 0 -14.8105 1.47363 -20.2529 3.29004l-172 60.71l-170.05 -62.8398
-c-1.99023 -0.790039 -4 -1.16016 -5.95996 -1.16016c-8.45996 0 -15.9902 6.83008 -15.9902 16.0195v346.32c0.00292969 11.959 9.0166 25.2686 20.1201 29.71l151.83 52.8105c6.43945 2.08984 13.1201 3.13965 19.8096 3.13965
-c5.73242 -0.00195312 14.8008 -1.47168 20.2402 -3.28027l172 -60.7197h0.00976562l170.05 62.8398c1.98047 0.790039 4 1.16016 5.95996 1.16016zM224 357.58v-285.97l128 -45.1904v285.97zM48 29.9502l127.36 47.0801l0.639648 0.229492v286.2l-128 -44.5303v-288.979z
+d="M560.02 416c8.4502 0 15.9805 -6.83008 15.9805 -16.0195v-346.32c0 -13.4707 -8.32422 -24.9951 -20.1201 -29.71l-151.83 -52.8105c-6.23242 -2.02832 -12.9023 -3.12305 -19.8076 -3.12305c-7.07324 0 -13.8799 1.15039 -20.2422 3.27344l-172 60.71l-170.05 -62.8398
+c-1.99023 -0.790039 -4 -1.16016 -5.95996 -1.16016c-8.45996 0 -15.9902 6.83008 -15.9902 16.0195v346.32c0.00292969 13.4697 8.32617 24.9932 20.1201 29.71l151.83 52.8105c6.43945 2.08984 13.1201 3.13965 19.8096 3.13965
+c7.06641 -0.00292969 13.8789 -1.16602 20.2402 -3.28027l172 -60.7197h0.00976562l170.05 62.8398c1.98047 0.790039 4 1.16016 5.95996 1.16016zM224 357.58v-285.97l128 -45.1904v285.97zM48 29.9502l127.36 47.0801l0.639648 0.229492v286.2l-128 -44.5303v-288.979z
 M528 65.0801v288.97l-127.36 -47.0693l-0.639648 -0.240234v-286.19z" />
     <glyph glyph-name="comment-alt" unicode="&#xf27a;" 
 d="M448 448c35.2998 0 64 -28.7002 64 -64v-288c0 -35.2998 -28.7002 -64 -64 -64h-144l-124.9 -93.5996c-2.19922 -1.7002 -4.69922 -2.40039 -7.09961 -2.40039c-6.2002 0 -12 4.90039 -12 12v84h-96c-35.2998 0 -64 28.7002 -64 64v288c0 35.2998 28.7002 64 64 64h384z
@@ -497,16 +498,16 @@ c-8.7998 0 -16 7.2002 -16 16v160c0 8.7998 7.2002 16 16 16h160c8.7998 0 16 -7.200
     <glyph glyph-name="handshake" unicode="&#xf2b5;" horiz-adv-x="640" 
 d="M519.2 320.1h120.8v-255.699h-64c-17.5 0 -31.7998 14.1992 -31.9004 31.6992h-57.8994c-1.7998 -8.19922 -5.2998 -16.0996 -10.9004 -23l-26.2002 -32.2998c-15.7998 -19.3994 -41.8994 -25.5 -64 -16.7998c-13.5 -16.5996 -30.5996 -24 -48.7998 -24
 c-15.0996 0 -28.5996 5.09961 -41.0996 15.9004c-31.7998 -21.9004 -74.7002 -21.3008 -105.601 3.7998l-84.5996 76.3994h-9.09961c-0.100586 -17.5 -14.3008 -31.6992 -31.9004 -31.6992h-64v255.699h118l47.5996 47.6006c10.5 10.3994 24.8008 16.2998 39.6006 16.2998
-h226.8v0c12.7812 0 30.5225 -7.30273 39.5996 -16.2998zM48 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16zM438 103.3c2.7002 3.40039 2.2002 8.5 -1.2002 11.2998l-108.2 87.8008l-8.19922 -7.5
+h226.8c15.4326 0 29.4326 -6.22168 39.5996 -16.2998zM48 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16zM438 103.3c2.7002 3.40039 2.2002 8.5 -1.2002 11.2998l-108.2 87.8008l-8.19922 -7.5
 c-40.3008 -36.8008 -86.7002 -11.8008 -101.5 4.39941c-26.7002 29 -25 74.4004 4.39941 101.3l38.7002 35.5h-56.7002c-2 -0.799805 -3.7002 -1.5 -5.7002 -2.2998l-61.6992 -61.5996h-41.9004v-128.101h27.7002l97.2998 -88
 c16.0996 -13.0996 41.4004 -10.5 55.2998 6.60059l15.6006 19.2002l36.7998 -31.5c3 -2.40039 12 -4.90039 18 2.39941l30 36.5l23.8994 -19.3994c3.5 -2.80078 8.5 -2.2002 11.3008 1.19922zM544 144.1v128h-44.7002l-61.7002 61.6006
 c-1.39941 1.5 -3.39941 2.2998 -5.5 2.2998l-83.6992 -0.200195c-10 0 -19.6006 -3.7002 -27 -10.5l-65.6006 -60.0996c-9.7002 -8.7998 -10.5 -24 -1.2002 -33.9004c8.90039 -9.39941 25.1006 -8.7002 34.6006 0l55.2002 50.6006c6.5 5.89941 16.5996 5.5 22.5996 -1
 l10.9004 -11.7002c6 -6.5 5.5 -16.6006 -1 -22.6006l-12.5 -11.3994l102.699 -83.4004c2.80078 -2.2998 5.40039 -4.89941 7.7002 -7.7002h69.2002zM592 96.4004c8.7998 0 16 7.09961 16 16c0 8.7998 -7.2002 16 -16 16s-16 -7.2002 -16 -16c0 -8.80078 7.2002 -16 16 -16z
 " />
     <glyph glyph-name="envelope-open" unicode="&#xf2b6;" 
-d="M494.586 283.484c9.6123 -7.94824 17.4141 -24.5205 17.4141 -36.9932v-262.491c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v262.515c0 12.5166 7.84668 29.1279 17.5146 37.0771c4.08008 3.35449 110.688 89.0996 135.15 108.549
-c22.6992 18.1426 60.1299 55.8594 103.335 55.8594c43.4365 0 81.2314 -38.1914 103.335 -55.8594c23.5283 -18.707 130.554 -104.773 135.251 -108.656zM464 -10v253.632v0.00488281c0 1.5791 -0.996094 3.66602 -2.22363 4.6582
-c-15.8633 12.8232 -108.793 87.5752 -132.366 106.316c-17.5527 14.0195 -49.7168 45.3887 -73.4102 45.3887c-23.6016 0 -55.2451 -30.8799 -73.4102 -45.3887c-23.5713 -18.7393 -116.494 -93.4795 -132.364 -106.293
+d="M494.586 283.484c10.6523 -8.80762 17.4141 -22.1064 17.4141 -36.9932v-262.491c0 -26.5098 -21.4902 -48 -48 -48h-416c-26.5098 0 -48 21.4902 -48 48v262.515c0 14.9355 6.80469 28.2705 17.5146 37.0771c4.08008 3.35449 110.688 89.0996 135.15 108.549
+c22.6992 18.1426 60.1299 55.8594 103.335 55.8594c43.4365 0 81.2314 -38.1914 103.335 -55.8594c23.5283 -18.707 130.554 -104.773 135.251 -108.656zM464 -10v253.632c0 0.00195312 0.00390625 0.000976562 0.00390625 0.00292969
+c0 1.88184 -0.869141 3.56152 -2.22754 4.66016c-15.8633 12.8232 -108.793 87.5752 -132.366 106.316c-17.5527 14.0195 -49.7168 45.3887 -73.4102 45.3887c-23.6016 0 -55.2451 -30.8799 -73.4102 -45.3887c-23.5713 -18.7393 -116.494 -93.4795 -132.364 -106.293
 c-1.40918 -1.13965 -2.22559 -2.85254 -2.22559 -4.66504v-253.653c0 -3.31152 2.68848 -6 6 -6h404c3.31152 0 6 2.68848 6 6zM432.009 177.704c4.24902 -5.15918 3.46484 -12.7949 -1.74512 -16.9814c-28.9746 -23.2822 -59.2734 -47.5967 -70.9287 -56.8623
 c-22.6992 -18.1436 -60.1299 -55.8604 -103.335 -55.8604c-43.4521 0 -81.2871 38.2373 -103.335 55.8604c-11.2793 8.9668 -41.7441 33.4131 -70.9268 56.8643c-5.20996 4.1875 -5.99316 11.8223 -1.74512 16.9814l15.2578 18.5283
 c4.17773 5.07227 11.6572 5.84277 16.7793 1.72559c28.6182 -23.001 58.5654 -47.0352 70.5596 -56.5713c17.5527 -14.0195 49.7168 -45.3887 73.4102 -45.3887c23.6016 0 55.2461 30.8799 73.4102 45.3887c11.9941 9.53516 41.9434 33.5703 70.5625 56.5684
@@ -555,10 +556,11 @@ c6.09961 -6.2002 6.09961 -16.4004 0 -22.6006l-58.2998 -59.2998v-84.5l71.8994 42.
 c7.5 4.39941 17.2002 1.7998 21.5 -5.90039l7.90039 -13.9004c4.2998 -7.69922 1.7002 -17.5 -5.7998 -21.8994l-39.2002 -23l34.0996 -9.2998c8.40039 -2.30078 13.3008 -11.1006 11.1006 -19.6006l-4.10059 -15.5c-2.2998 -8.5 -10.8994 -13.5996 -19.2998 -11.2998
 l-79.7002 21.7002l-71.8994 -42.2002l71.7998 -42.2002l79.7002 21.7002c8.39941 2.2998 17.0996 -2.7998 19.2998 -11.2998l4.09961 -15.5c2.30078 -8.5 -2.69922 -17.2998 -11.0996 -19.6006l-34.0996 -9.2998z" />
     <glyph glyph-name="trash-alt" unicode="&#xf2ed;" horiz-adv-x="448" 
-d="M268 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24zM432 368c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16h-16v-336
-c0 -26.4961 -21.5039 -48 -48 -48h-288c-26.4961 0 -48 21.5039 -48 48v336h-16c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h82.4102l34.0195 56.7002c7.71875 12.8613 26.1572 23.2998 41.1572 23.2998h0.00292969h100.82h0.0224609
-c15 0 33.4385 -10.4385 41.1572 -23.2998l34 -56.7002h82.4102zM171.84 397.09l-17.4502 -29.0898h139.221l-17.46 29.0898c-0.96582 1.60645 -3.26953 2.91016 -5.14355 2.91016h-0.00683594h-94h-0.0166016c-1.87402 0 -4.17871 -1.30371 -5.14355 -2.91016zM368 -16v336
-h-288v-336h288zM156 32c-6.62402 0 -12 5.37598 -12 12v216c0 6.62402 5.37598 12 12 12h24c6.62402 0 12 -5.37598 12 -12v-216c0 -6.62402 -5.37598 -12 -12 -12h-24z" />
+d="M268 32c-6.62305 0 -12 5.37695 -12 12v216c0 6.62305 5.37695 12 12 12h24c6.62305 0 12 -5.37695 12 -12v-216c0 -6.62305 -5.37695 -12 -12 -12h-24zM432 368c8.83105 0 16 -7.16895 16 -16v-16c0 -8.83105 -7.16895 -16 -16 -16h-16v-336
+c0 -26.4922 -21.5078 -48 -48 -48h-288c-26.4922 0 -48 21.5078 -48 48v336h-16c-8.83105 0 -16 7.16895 -16 16v16c0 8.83105 7.16895 16 16 16h82.4102l34.0195 56.7002c8.39258 13.9844 23.6777 23.2998 41.1602 23.2998h100.82
+c0.0078125 0 -0.015625 0.0517578 -0.0078125 0.0517578c17.4824 0 32.7949 -9.36719 41.1875 -23.3516l34 -56.7002h82.4102zM171.84 397.09l-17.4502 -29.0898h139.221l-17.46 29.0898c-1.0498 1.74707 -2.95898 2.91016 -5.14355 2.91016h-0.00683594h-94
+c-0.00585938 0 -0.00683594 0.00683594 -0.0126953 0.00683594c-2.18457 0 -4.09766 -1.16992 -5.14746 -2.91699zM368 -16v336h-288v-336h288zM156 32c-6.62305 0 -12 5.37695 -12 12v216c0 6.62305 5.37695 12 12 12h24c6.62305 0 12 -5.37695 12 -12v-216
+c0 -6.62305 -5.37695 -12 -12 -12h-24z" />
     <glyph glyph-name="images" unicode="&#xf302;" horiz-adv-x="576" 
 d="M480 32v-16c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256c0 26.5098 21.4902 48 48 48h16v-48h-10c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v10h48zM522 368h-372
 c-3.31152 0 -6 -2.68848 -6 -6v-244c0 -3.31152 2.68848 -6 6 -6h372c3.31152 0 6 2.68848 6 6v244c0 3.31152 -2.68848 6 -6 6zM528 416c26.5098 0 48 -21.4902 48 -48v-256c0 -26.5098 -21.4902 -48 -48 -48h-384c-26.5098 0 -48 21.4902 -48 48v256
@@ -584,9 +586,9 @@ d="M464 448c4.09961 0 7.7998 -2 10.0996 -5.40039l99.9004 -147.199c2.90039 -4.400
 c2.2002 3.40039 6 5.40039 10 5.40039h352zM444.7 400h-56.7998l51.6992 -96h68.4004zM242.6 400l-51.5996 -96h194l-51.7002 96h-90.7002zM131.3 400l-63.2998 -96h68.4004l51.6992 96h-56.7998zM88.2998 256l119.7 -160l-68.2998 160h-51.4004zM191.2 256l96.7998 -243.3
 l96.7998 243.3h-193.6zM368 96l119.6 160h-51.3994z" />
     <glyph glyph-name="money-bill-alt" unicode="&#xf3d1;" horiz-adv-x="640" 
-d="M320 304c53.0195 0 96 -50.1396 96 -112c0 -61.8701 -43 -112 -96 -112c-53.0195 0 -96 50.1504 -96 112c0 61.8604 42.9805 112 96 112zM360 136v16c0 4.41992 -3.58008 8 -8 8h-16v88c0 4.41992 -3.58008 8 -8 8h-13.5801h-0.000976562
-c-4.01074 0 -9.97266 -1.80566 -13.3086 -4.03027l-15.3301 -10.2197c-1.96777 -1.30957 -3.56445 -4.29004 -3.56445 -6.65332c0 -1.33691 0.601562 -3.32422 1.34375 -4.43652l8.88086 -13.3105c1.30859 -1.9668 4.29004 -3.56445 6.65332 -3.56445
-c1.33691 0 3.32422 0.602539 4.43652 1.34473l0.469727 0.310547v-55.4404h-16c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h64c4.41992 0 8 3.58008 8 8zM608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576
+d="M320 304c53.0195 0 96 -50.1396 96 -112c0 -61.8701 -43 -112 -96 -112c-53.0195 0 -96 50.1504 -96 112c0 61.8604 42.9805 112 96 112zM360 136v16c0 4.41992 -3.58008 8 -8 8h-16v88c0 4.41992 -3.58008 8 -8 8h-13.5801
+c-4.91113 0 -9.50586 -1.49316 -13.3096 -4.03027l-15.3301 -10.2197c-2.15332 -1.43262 -3.55957 -3.88379 -3.55957 -6.66113c0 -1.6377 0.493164 -3.16113 1.33887 -4.42871l8.88086 -13.3105c1.43164 -2.15234 3.88379 -3.55957 6.66113 -3.55957
+c1.6377 0 3.16016 0.494141 4.42871 1.33984l0.469727 0.310547v-55.4404h-16c-4.41992 0 -8 -3.58008 -8 -8v-16c0 -4.41992 3.58008 -8 8 -8h64c4.41992 0 8 3.58008 8 8zM608 384c17.6699 0 32 -14.3301 32 -32v-320c0 -17.6699 -14.3301 -32 -32 -32h-576
 c-17.6699 0 -32 14.3301 -32 32v320c0 17.6699 14.3301 32 32 32h576zM592 112v160c-35.3496 0 -64 28.6504 -64 64h-416c0 -35.3496 -28.6504 -64 -64 -64v-160c35.3496 0 64 -28.6504 64 -64h416c0 35.3496 28.6504 64 64 64z" />
     <glyph glyph-name="window-close" unicode="&#xf410;" 
 d="M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM464 22v340c0 3.2998 -2.7002 6 -6 6h-404c-3.2998 0 -6 -2.7002 -6 -6v-340c0 -3.2998 2.7002 -6 6 -6h404c3.2998 0 6 2.7002 6 6z

BIN
plugins/fontawesome-free/webfonts/fa-regular-400.ttf


BIN
plugins/fontawesome-free/webfonts/fa-regular-400.woff


BIN
plugins/fontawesome-free/webfonts/fa-regular-400.woff2


BIN
plugins/fontawesome-free/webfonts/fa-solid-900.eot


Plik diff jest za duży
+ 504 - 217
plugins/fontawesome-free/webfonts/fa-solid-900.svg


BIN
plugins/fontawesome-free/webfonts/fa-solid-900.ttf


BIN
plugins/fontawesome-free/webfonts/fa-solid-900.woff


BIN
plugins/fontawesome-free/webfonts/fa-solid-900.woff2


+ 0 - 20
plugins/fullcalendar-bootstrap/LICENSE.txt

@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 36
plugins/fullcalendar-bootstrap/main.css

@@ -1,36 +0,0 @@
-.fc.fc-bootstrap a {
-  text-decoration: none;
-}
-
-.fc.fc-bootstrap a[data-goto]:hover {
-  text-decoration: underline;
-}
-
-.fc-bootstrap hr.fc-divider {
-  border-color: inherit;
-}
-
-.fc-bootstrap .fc-today.alert {
-  border-radius: 0;
-}
-
-.fc-bootstrap a.fc-event:not([href]):not([tabindex]) {
-  color: #fff;
-}
-
-.fc-bootstrap .fc-popover.card {
-  position: absolute;
-}
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap .fc-popover .card-body {
-  padding: 0;
-}
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap .fc-time-grid .fc-slats table {
-  /* some themes have background color. see through to slats */
-  background: none;
-}

+ 0 - 83
plugins/fullcalendar-bootstrap/main.esm.js

@@ -1,83 +0,0 @@
-/*!
-FullCalendar Bootstrap Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { createPlugin, Theme } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
-    extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return extendStatics(d, b);
-};
-
-function __extends(d, b) {
-    extendStatics(d, b);
-    function __() { this.constructor = d; }
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var BootstrapTheme = /** @class */ (function (_super) {
-    __extends(BootstrapTheme, _super);
-    function BootstrapTheme() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    return BootstrapTheme;
-}(Theme));
-BootstrapTheme.prototype.classes = {
-    widget: 'fc-bootstrap',
-    tableGrid: 'table-bordered',
-    tableList: 'table',
-    tableListHeading: 'table-active',
-    buttonGroup: 'btn-group',
-    button: 'btn btn-primary',
-    buttonActive: 'active',
-    today: 'alert alert-info',
-    popover: 'card card-primary',
-    popoverHeader: 'card-header',
-    popoverContent: 'card-body',
-    // day grid
-    // for left/right border color when border is inset from edges (all-day in timeGrid view)
-    // avoid `table` class b/c don't want margins/padding/structure. only border color.
-    headerRow: 'table-bordered',
-    dayRow: 'table-bordered',
-    // list view
-    listView: 'card card-primary'
-};
-BootstrapTheme.prototype.baseIconClass = 'fa';
-BootstrapTheme.prototype.iconClasses = {
-    close: 'fa-times',
-    prev: 'fa-chevron-left',
-    next: 'fa-chevron-right',
-    prevYear: 'fa-angle-double-left',
-    nextYear: 'fa-angle-double-right'
-};
-BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome';
-BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
-BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
-var main = createPlugin({
-    themeClasses: {
-        bootstrap: BootstrapTheme
-    }
-});
-
-export default main;
-export { BootstrapTheme };

+ 0 - 91
plugins/fullcalendar-bootstrap/main.js

@@ -1,91 +0,0 @@
-/*!
-FullCalendar Bootstrap Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
-    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
-    typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
-    (global = global || self, factory(global.FullCalendarBootstrap = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
-    /*! *****************************************************************************
-    Copyright (c) Microsoft Corporation.
-
-    Permission to use, copy, modify, and/or distribute this software for any
-    purpose with or without fee is hereby granted.
-
-    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-    PERFORMANCE OF THIS SOFTWARE.
-    ***************************************************************************** */
-    /* global Reflect, Promise */
-
-    var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-
-    function __extends(d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    }
-
-    var BootstrapTheme = /** @class */ (function (_super) {
-        __extends(BootstrapTheme, _super);
-        function BootstrapTheme() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        return BootstrapTheme;
-    }(core.Theme));
-    BootstrapTheme.prototype.classes = {
-        widget: 'fc-bootstrap',
-        tableGrid: 'table-bordered',
-        tableList: 'table',
-        tableListHeading: 'table-active',
-        buttonGroup: 'btn-group',
-        button: 'btn btn-primary',
-        buttonActive: 'active',
-        today: 'alert alert-info',
-        popover: 'card card-primary',
-        popoverHeader: 'card-header',
-        popoverContent: 'card-body',
-        // day grid
-        // for left/right border color when border is inset from edges (all-day in timeGrid view)
-        // avoid `table` class b/c don't want margins/padding/structure. only border color.
-        headerRow: 'table-bordered',
-        dayRow: 'table-bordered',
-        // list view
-        listView: 'card card-primary'
-    };
-    BootstrapTheme.prototype.baseIconClass = 'fa';
-    BootstrapTheme.prototype.iconClasses = {
-        close: 'fa-times',
-        prev: 'fa-chevron-left',
-        next: 'fa-chevron-right',
-        prevYear: 'fa-angle-double-left',
-        nextYear: 'fa-angle-double-right'
-    };
-    BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome';
-    BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
-    BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
-    var main = core.createPlugin({
-        themeClasses: {
-            bootstrap: BootstrapTheme
-        }
-    });
-
-    exports.BootstrapTheme = BootstrapTheme;
-    exports.default = main;
-
-    Object.defineProperty(exports, '__esModule', { value: true });
-
-}));

+ 0 - 1
plugins/fullcalendar-bootstrap/main.min.css

@@ -1 +0,0 @@
-.fc.fc-bootstrap a{text-decoration:none}.fc.fc-bootstrap a[data-goto]:hover{text-decoration:underline}.fc-bootstrap hr.fc-divider{border-color:inherit}.fc-bootstrap .fc-today.alert{border-radius:0}.fc-bootstrap a.fc-event:not([href]):not([tabindex]){color:#fff}.fc-bootstrap .fc-popover.card{position:absolute}.fc-bootstrap .fc-popover .card-body{padding:0}.fc-bootstrap .fc-time-grid .fc-slats table{background:0 0}

+ 0 - 6
plugins/fullcalendar-bootstrap/main.min.js

@@ -1,6 +0,0 @@
-/*!
-FullCalendar Bootstrap Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarBootstrap={},e.FullCalendar)}(this,(function(e,t){"use strict";var o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)};var r=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return function(e,t){function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}(t,e),t}(t.Theme);r.prototype.classes={widget:"fc-bootstrap",tableGrid:"table-bordered",tableList:"table",tableListHeading:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",today:"alert alert-info",popover:"card card-primary",popoverHeader:"card-header",popoverContent:"card-body",headerRow:"table-bordered",dayRow:"table-bordered",listView:"card card-primary"},r.prototype.baseIconClass="fa",r.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},r.prototype.iconOverrideOption="bootstrapFontAwesome",r.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",r.prototype.iconOverridePrefix="fa-";var a=t.createPlugin({themeClasses:{bootstrap:r}});e.BootstrapTheme=r,e.default=a,Object.defineProperty(e,"__esModule",{value:!0})}));

+ 0 - 20
plugins/fullcalendar-daygrid/LICENSE.txt

@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 78
plugins/fullcalendar-daygrid/main.css

@@ -1,78 +0,0 @@
-/* DayGridView
---------------------------------------------------------------------------------------------------*/
-/* day row structure */
-.fc-dayGridWeek-view .fc-content-skeleton,
-.fc-dayGridDay-view .fc-content-skeleton {
-  /* there may be week numbers in these views, so no padding-top */
-  padding-bottom: 1em;
-  /* ensure a space at bottom of cell for user selecting/clicking */
-}
-
-.fc-dayGrid-view .fc-body .fc-row {
-  min-height: 4em;
-  /* ensure that all rows are at least this tall */
-}
-
-/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */
-.fc-row.fc-rigid {
-  overflow: hidden;
-}
-
-.fc-row.fc-rigid .fc-content-skeleton {
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-}
-
-/* week and day number styling */
-.fc-day-top.fc-other-month {
-  opacity: 0.3;
-}
-
-.fc-dayGrid-view .fc-week-number,
-.fc-dayGrid-view .fc-day-number {
-  padding: 2px;
-}
-
-.fc-dayGrid-view th.fc-week-number,
-.fc-dayGrid-view th.fc-day-number {
-  padding: 0 2px;
-  /* column headers can't have as much v space */
-}
-
-.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number {
-  float: right;
-}
-
-.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number {
-  float: left;
-}
-
-.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number {
-  float: left;
-  border-radius: 0 0 3px 0;
-}
-
-.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number {
-  float: right;
-  border-radius: 0 0 0 3px;
-}
-
-.fc-dayGrid-view .fc-day-top .fc-week-number {
-  min-width: 1.5em;
-  text-align: center;
-  background-color: #f2f2f2;
-  color: #808080;
-}
-
-/* when week/day number have own column */
-.fc-dayGrid-view td.fc-week-number {
-  text-align: center;
-}
-
-.fc-dayGrid-view td.fc-week-number > * {
-  /* work around the way we do column resizing and ensure a minimum width */
-  display: inline-block;
-  min-width: 1.25em;
-}

+ 0 - 1655
plugins/fullcalendar-daygrid/main.esm.js

@@ -1,1655 +0,0 @@
-/*!
-FullCalendar Day Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { addWeeks, diffWeeks, DateProfileGenerator, createElement, listenBySelector, removeElement, computeRect, computeClippingRect, applyStyle, computeEventDraggable, computeEventStartResizable, computeEventEndResizable, cssToStr, htmlEscape, FgEventRenderer, appendToElement, prependToElement, htmlToElement, FillRenderer, memoizeRendering, createFormatter, addDays, DateComponent, rangeContainsMarker, getDayClasses, findElements, PositionCache, buildGotoAnchorHtml, findChildren, insertAfterElement, intersectRanges, memoize, ScrollComponent, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, distributeHeight, undistributeHeight, View, Slicer, DayHeader, DaySeries, DayTable, createPlugin } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
-    extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return extendStatics(d, b);
-};
-
-function __extends(d, b) {
-    extendStatics(d, b);
-    function __() { this.constructor = d; }
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
-    __assign = Object.assign || function __assign(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-        }
-        return t;
-    };
-    return __assign.apply(this, arguments);
-};
-
-var DayGridDateProfileGenerator = /** @class */ (function (_super) {
-    __extends(DayGridDateProfileGenerator, _super);
-    function DayGridDateProfileGenerator() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    // Computes the date range that will be rendered.
-    DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
-        var dateEnv = this.dateEnv;
-        var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);
-        var start = renderRange.start;
-        var end = renderRange.end;
-        var endOfWeek;
-        // year and month views should be aligned with weeks. this is already done for week
-        if (/^(year|month)$/.test(currentRangeUnit)) {
-            start = dateEnv.startOfWeek(start);
-            // make end-of-week if not already
-            endOfWeek = dateEnv.startOfWeek(end);
-            if (endOfWeek.valueOf() !== end.valueOf()) {
-                end = addWeeks(endOfWeek, 1);
-            }
-        }
-        // ensure 6 weeks
-        if (this.options.monthMode &&
-            this.options.fixedWeekCount) {
-            var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
-            diffWeeks(start, end));
-            end = addWeeks(end, 6 - rowCnt);
-        }
-        return { start: start, end: end };
-    };
-    return DayGridDateProfileGenerator;
-}(DateProfileGenerator));
-
-/* A rectangular panel that is absolutely positioned over other content
-------------------------------------------------------------------------------------------------------------------------
-Options:
-  - className (string)
-  - content (HTML string, element, or element array)
-  - parentEl
-  - top
-  - left
-  - right (the x coord of where the right edge should be. not a "CSS" right)
-  - autoHide (boolean)
-  - show (callback)
-  - hide (callback)
-*/
-var Popover = /** @class */ (function () {
-    function Popover(options) {
-        var _this = this;
-        this.isHidden = true;
-        this.margin = 10; // the space required between the popover and the edges of the scroll container
-        // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
-        this.documentMousedown = function (ev) {
-            // only hide the popover if the click happened outside the popover
-            if (_this.el && !_this.el.contains(ev.target)) {
-                _this.hide();
-            }
-        };
-        this.options = options;
-    }
-    // Shows the popover on the specified position. Renders it if not already
-    Popover.prototype.show = function () {
-        if (this.isHidden) {
-            if (!this.el) {
-                this.render();
-            }
-            this.el.style.display = '';
-            this.position();
-            this.isHidden = false;
-            this.trigger('show');
-        }
-    };
-    // Hides the popover, through CSS, but does not remove it from the DOM
-    Popover.prototype.hide = function () {
-        if (!this.isHidden) {
-            this.el.style.display = 'none';
-            this.isHidden = true;
-            this.trigger('hide');
-        }
-    };
-    // Creates `this.el` and renders content inside of it
-    Popover.prototype.render = function () {
-        var _this = this;
-        var options = this.options;
-        var el = this.el = createElement('div', {
-            className: 'fc-popover ' + (options.className || ''),
-            style: {
-                top: '0',
-                left: '0'
-            }
-        });
-        if (typeof options.content === 'function') {
-            options.content(el);
-        }
-        options.parentEl.appendChild(el);
-        // when a click happens on anything inside with a 'fc-close' className, hide the popover
-        listenBySelector(el, 'click', '.fc-close', function (ev) {
-            _this.hide();
-        });
-        if (options.autoHide) {
-            document.addEventListener('mousedown', this.documentMousedown);
-        }
-    };
-    // Hides and unregisters any handlers
-    Popover.prototype.destroy = function () {
-        this.hide();
-        if (this.el) {
-            removeElement(this.el);
-            this.el = null;
-        }
-        document.removeEventListener('mousedown', this.documentMousedown);
-    };
-    // Positions the popover optimally, using the top/left/right options
-    Popover.prototype.position = function () {
-        var options = this.options;
-        var el = this.el;
-        var elDims = el.getBoundingClientRect(); // only used for width,height
-        var origin = computeRect(el.offsetParent);
-        var clippingRect = computeClippingRect(options.parentEl);
-        var top; // the "position" (not "offset") values for the popover
-        var left; //
-        // compute top and left
-        top = options.top || 0;
-        if (options.left !== undefined) {
-            left = options.left;
-        }
-        else if (options.right !== undefined) {
-            left = options.right - elDims.width; // derive the left value from the right value
-        }
-        else {
-            left = 0;
-        }
-        // constrain to the view port. if constrained by two edges, give precedence to top/left
-        top = Math.min(top, clippingRect.bottom - elDims.height - this.margin);
-        top = Math.max(top, clippingRect.top + this.margin);
-        left = Math.min(left, clippingRect.right - elDims.width - this.margin);
-        left = Math.max(left, clippingRect.left + this.margin);
-        applyStyle(el, {
-            top: top - origin.top,
-            left: left - origin.left
-        });
-    };
-    // Triggers a callback. Calls a function in the option hash of the same name.
-    // Arguments beyond the first `name` are forwarded on.
-    // TODO: better code reuse for this. Repeat code
-    // can kill this???
-    Popover.prototype.trigger = function (name) {
-        if (this.options[name]) {
-            this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));
-        }
-    };
-    return Popover;
-}());
-
-/* Event-rendering methods for the DayGrid class
-----------------------------------------------------------------------------------------------------------------------*/
-// "Simple" is bad a name. has nothing to do with SimpleDayGrid
-var SimpleDayGridEventRenderer = /** @class */ (function (_super) {
-    __extends(SimpleDayGridEventRenderer, _super);
-    function SimpleDayGridEventRenderer() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    // Builds the HTML to be used for the default element for an individual segment
-    SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
-        var context = this.context;
-        var eventRange = seg.eventRange;
-        var eventDef = eventRange.def;
-        var eventUi = eventRange.ui;
-        var allDay = eventDef.allDay;
-        var isDraggable = computeEventDraggable(context, eventDef, eventUi);
-        var isResizableFromStart = allDay && seg.isStart && computeEventStartResizable(context, eventDef, eventUi);
-        var isResizableFromEnd = allDay && seg.isEnd && computeEventEndResizable(context, eventDef, eventUi);
-        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
-        var skinCss = cssToStr(this.getSkinCss(eventUi));
-        var timeHtml = '';
-        var timeText;
-        var titleHtml;
-        classes.unshift('fc-day-grid-event', 'fc-h-event');
-        // Only display a timed events time if it is the starting segment
-        if (seg.isStart) {
-            timeText = this.getTimeText(eventRange);
-            if (timeText) {
-                timeHtml = '<span class="fc-time">' + htmlEscape(timeText) + '</span>';
-            }
-        }
-        titleHtml =
-            '<span class="fc-title">' +
-                (htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height
-                '</span>';
-        return '<a class="' + classes.join(' ') + '"' +
-            (eventDef.url ?
-                ' href="' + htmlEscape(eventDef.url) + '"' :
-                '') +
-            (skinCss ?
-                ' style="' + skinCss + '"' :
-                '') +
-            '>' +
-            '<div class="fc-content">' +
-            (context.options.dir === 'rtl' ?
-                titleHtml + ' ' + timeHtml : // put a natural space in between
-                timeHtml + ' ' + titleHtml //
-            ) +
-            '</div>' +
-            (isResizableFromStart ?
-                '<div class="fc-resizer fc-start-resizer"></div>' :
-                '') +
-            (isResizableFromEnd ?
-                '<div class="fc-resizer fc-end-resizer"></div>' :
-                '') +
-            '</a>';
-    };
-    // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
-    SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () {
-        return {
-            hour: 'numeric',
-            minute: '2-digit',
-            omitZeroMinute: true,
-            meridiem: 'narrow'
-        };
-    };
-    SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
-        return false; // TODO: somehow consider the originating DayGrid's column count
-    };
-    return SimpleDayGridEventRenderer;
-}(FgEventRenderer));
-
-/* Event-rendering methods for the DayGrid class
-----------------------------------------------------------------------------------------------------------------------*/
-var DayGridEventRenderer = /** @class */ (function (_super) {
-    __extends(DayGridEventRenderer, _super);
-    function DayGridEventRenderer(dayGrid) {
-        var _this = _super.call(this) || this;
-        _this.dayGrid = dayGrid;
-        return _this;
-    }
-    // Renders the given foreground event segments onto the grid
-    DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-        var rowStructs = this.rowStructs = this.renderSegRows(segs);
-        // append to each row's content skeleton
-        this.dayGrid.rowEls.forEach(function (rowNode, i) {
-            rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl);
-        });
-        // removes the "more.." events popover
-        if (!mirrorInfo) {
-            this.dayGrid.removeSegPopover();
-        }
-    };
-    // Unrenders all currently rendered foreground event segments
-    DayGridEventRenderer.prototype.detachSegs = function () {
-        var rowStructs = this.rowStructs || [];
-        var rowStruct;
-        while ((rowStruct = rowStructs.pop())) {
-            removeElement(rowStruct.tbodyEl);
-        }
-        this.rowStructs = null;
-    };
-    // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.
-    // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).
-    // PRECONDITION: each segment shoud already have a rendered and assigned `.el`
-    DayGridEventRenderer.prototype.renderSegRows = function (segs) {
-        var rowStructs = [];
-        var segRows;
-        var row;
-        segRows = this.groupSegRows(segs); // group into nested arrays
-        // iterate each row of segment groupings
-        for (row = 0; row < segRows.length; row++) {
-            rowStructs.push(this.renderSegRow(row, segRows[row]));
-        }
-        return rowStructs;
-    };
-    // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains
-    // the segments. Returns object with a bunch of internal data about how the render was calculated.
-    // NOTE: modifies rowSegs
-    DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {
-        var isRtl = this.context.isRtl;
-        var dayGrid = this.dayGrid;
-        var colCnt = dayGrid.colCnt;
-        var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels
-        var levelCnt = Math.max(1, segLevels.length); // ensure at least one level
-        var tbody = document.createElement('tbody');
-        var segMatrix = []; // lookup for which segments are rendered into which level+col cells
-        var cellMatrix = []; // lookup for all <td> elements of the level+col matrix
-        var loneCellMatrix = []; // lookup for <td> elements that only take up a single column
-        var i;
-        var levelSegs;
-        var col;
-        var tr;
-        var j;
-        var seg;
-        var td;
-        // populates empty cells from the current column (`col`) to `endCol`
-        function emptyCellsUntil(endCol) {
-            while (col < endCol) {
-                // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell
-                td = (loneCellMatrix[i - 1] || [])[col];
-                if (td) {
-                    td.rowSpan = (td.rowSpan || 1) + 1;
-                }
-                else {
-                    td = document.createElement('td');
-                    tr.appendChild(td);
-                }
-                cellMatrix[i][col] = td;
-                loneCellMatrix[i][col] = td;
-                col++;
-            }
-        }
-        for (i = 0; i < levelCnt; i++) { // iterate through all levels
-            levelSegs = segLevels[i];
-            col = 0;
-            tr = document.createElement('tr');
-            segMatrix.push([]);
-            cellMatrix.push([]);
-            loneCellMatrix.push([]);
-            // levelCnt might be 1 even though there are no actual levels. protect against this.
-            // this single empty row is useful for styling.
-            if (levelSegs) {
-                for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
-                    seg = levelSegs[j];
-                    var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
-                    var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
-                    emptyCellsUntil(leftCol);
-                    // create a container that occupies or more columns. append the event element.
-                    td = createElement('td', { className: 'fc-event-container' }, seg.el);
-                    if (leftCol !== rightCol) {
-                        td.colSpan = rightCol - leftCol + 1;
-                    }
-                    else { // a single-column segment
-                        loneCellMatrix[i][col] = td;
-                    }
-                    while (col <= rightCol) {
-                        cellMatrix[i][col] = td;
-                        segMatrix[i][col] = seg;
-                        col++;
-                    }
-                    tr.appendChild(td);
-                }
-            }
-            emptyCellsUntil(colCnt); // finish off the row
-            var introHtml = dayGrid.renderProps.renderIntroHtml();
-            if (introHtml) {
-                if (isRtl) {
-                    appendToElement(tr, introHtml);
-                }
-                else {
-                    prependToElement(tr, introHtml);
-                }
-            }
-            tbody.appendChild(tr);
-        }
-        return {
-            row: row,
-            tbodyEl: tbody,
-            cellMatrix: cellMatrix,
-            segMatrix: segMatrix,
-            segLevels: segLevels,
-            segs: rowSegs
-        };
-    };
-    // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.
-    // NOTE: modifies segs
-    DayGridEventRenderer.prototype.buildSegLevels = function (segs) {
-        var isRtl = this.context.isRtl;
-        var colCnt = this.dayGrid.colCnt;
-        var levels = [];
-        var i;
-        var seg;
-        var j;
-        // Give preference to elements with certain criteria, so they have
-        // a chance to be closer to the top.
-        segs = this.sortEventSegs(segs);
-        for (i = 0; i < segs.length; i++) {
-            seg = segs[i];
-            // loop through levels, starting with the topmost, until the segment doesn't collide with other segments
-            for (j = 0; j < levels.length; j++) {
-                if (!isDaySegCollision(seg, levels[j])) {
-                    break;
-                }
-            }
-            // `j` now holds the desired subrow index
-            seg.level = j;
-            seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only
-            seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only
-            ;
-            (levels[j] || (levels[j] = [])).push(seg);
-        }
-        // order segments left-to-right. very important if calendar is RTL
-        for (j = 0; j < levels.length; j++) {
-            levels[j].sort(compareDaySegCols);
-        }
-        return levels;
-    };
-    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row
-    DayGridEventRenderer.prototype.groupSegRows = function (segs) {
-        var segRows = [];
-        var i;
-        for (i = 0; i < this.dayGrid.rowCnt; i++) {
-            segRows.push([]);
-        }
-        for (i = 0; i < segs.length; i++) {
-            segRows[segs[i].row].push(segs[i]);
-        }
-        return segRows;
-    };
-    // Computes a default `displayEventEnd` value if one is not expliclty defined
-    DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
-        return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day
-    };
-    return DayGridEventRenderer;
-}(SimpleDayGridEventRenderer));
-// Computes whether two segments' columns collide. They are assumed to be in the same row.
-function isDaySegCollision(seg, otherSegs) {
-    var i;
-    var otherSeg;
-    for (i = 0; i < otherSegs.length; i++) {
-        otherSeg = otherSegs[i];
-        if (otherSeg.firstCol <= seg.lastCol &&
-            otherSeg.lastCol >= seg.firstCol) {
-            return true;
-        }
-    }
-    return false;
-}
-// A cmp function for determining the leftmost event
-function compareDaySegCols(a, b) {
-    return a.leftCol - b.leftCol;
-}
-
-var DayGridMirrorRenderer = /** @class */ (function (_super) {
-    __extends(DayGridMirrorRenderer, _super);
-    function DayGridMirrorRenderer() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-        var sourceSeg = mirrorInfo.sourceSeg;
-        var rowStructs = this.rowStructs = this.renderSegRows(segs);
-        // inject each new event skeleton into each associated row
-        this.dayGrid.rowEls.forEach(function (rowNode, row) {
-            var skeletonEl = htmlToElement('<div class="fc-mirror-skeleton"><table></table></div>'); // will be absolutely positioned
-            var skeletonTopEl;
-            var skeletonTop;
-            // If there is an original segment, match the top position. Otherwise, put it at the row's top level
-            if (sourceSeg && sourceSeg.row === row) {
-                skeletonTopEl = sourceSeg.el;
-            }
-            else {
-                skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody');
-                if (!skeletonTopEl) { // when no events
-                    skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table');
-                }
-            }
-            skeletonTop = skeletonTopEl.getBoundingClientRect().top -
-                rowNode.getBoundingClientRect().top; // the offsetParent origin
-            skeletonEl.style.top = skeletonTop + 'px';
-            skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl);
-            rowNode.appendChild(skeletonEl);
-        });
-    };
-    return DayGridMirrorRenderer;
-}(DayGridEventRenderer));
-
-var EMPTY_CELL_HTML = '<td style="pointer-events:none"></td>';
-var DayGridFillRenderer = /** @class */ (function (_super) {
-    __extends(DayGridFillRenderer, _super);
-    function DayGridFillRenderer(dayGrid) {
-        var _this = _super.call(this) || this;
-        _this.fillSegTag = 'td'; // override the default tag name
-        _this.dayGrid = dayGrid;
-        return _this;
-    }
-    DayGridFillRenderer.prototype.renderSegs = function (type, context, segs) {
-        // don't render timed background events
-        if (type === 'bgEvent') {
-            segs = segs.filter(function (seg) {
-                return seg.eventRange.def.allDay;
-            });
-        }
-        _super.prototype.renderSegs.call(this, type, context, segs);
-    };
-    DayGridFillRenderer.prototype.attachSegs = function (type, segs) {
-        var els = [];
-        var i;
-        var seg;
-        var skeletonEl;
-        for (i = 0; i < segs.length; i++) {
-            seg = segs[i];
-            skeletonEl = this.renderFillRow(type, seg);
-            this.dayGrid.rowEls[seg.row].appendChild(skeletonEl);
-            els.push(skeletonEl);
-        }
-        return els;
-    };
-    // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.
-    DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {
-        var dayGrid = this.dayGrid;
-        var isRtl = this.context.isRtl;
-        var colCnt = dayGrid.colCnt;
-        var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
-        var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
-        var startCol = leftCol;
-        var endCol = rightCol + 1;
-        var className;
-        var skeletonEl;
-        var trEl;
-        if (type === 'businessHours') {
-            className = 'bgevent';
-        }
-        else {
-            className = type.toLowerCase();
-        }
-        skeletonEl = htmlToElement('<div class="fc-' + className + '-skeleton">' +
-            '<table><tr></tr></table>' +
-            '</div>');
-        trEl = skeletonEl.getElementsByTagName('tr')[0];
-        if (startCol > 0) {
-            appendToElement(trEl, 
-            // will create (startCol + 1) td's
-            new Array(startCol + 1).join(EMPTY_CELL_HTML));
-        }
-        seg.el.colSpan = endCol - startCol;
-        trEl.appendChild(seg.el);
-        if (endCol < colCnt) {
-            appendToElement(trEl, 
-            // will create (colCnt - endCol) td's
-            new Array(colCnt - endCol + 1).join(EMPTY_CELL_HTML));
-        }
-        var introHtml = dayGrid.renderProps.renderIntroHtml();
-        if (introHtml) {
-            if (isRtl) {
-                appendToElement(trEl, introHtml);
-            }
-            else {
-                prependToElement(trEl, introHtml);
-            }
-        }
-        return skeletonEl;
-    };
-    return DayGridFillRenderer;
-}(FillRenderer));
-
-var DayTile = /** @class */ (function (_super) {
-    __extends(DayTile, _super);
-    function DayTile(el) {
-        var _this = _super.call(this, el) || this;
-        var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this);
-        var renderFrame = _this.renderFrame = memoizeRendering(_this._renderFrame);
-        _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]);
-        _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
-        _this.renderEventDrag = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
-        _this.renderEventResize = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
-        return _this;
-    }
-    DayTile.prototype.firstContext = function (context) {
-        context.calendar.registerInteractiveComponent(this, {
-            el: this.el,
-            useEventCenter: false
-        });
-    };
-    DayTile.prototype.render = function (props, context) {
-        this.renderFrame(props.date);
-        this.renderFgEvents(context, props.fgSegs);
-        this.renderEventSelection(props.eventSelection);
-        this.renderEventDrag(props.eventDragInstances);
-        this.renderEventResize(props.eventResizeInstances);
-    };
-    DayTile.prototype.destroy = function () {
-        _super.prototype.destroy.call(this);
-        this.renderFrame.unrender(); // should unrender everything else
-        this.context.calendar.unregisterInteractiveComponent(this);
-    };
-    DayTile.prototype._renderFrame = function (date) {
-        var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
-        var title = dateEnv.format(date, createFormatter(options.dayPopoverFormat) // TODO: cache
-        );
-        this.el.innerHTML =
-            '<div class="fc-header ' + theme.getClass('popoverHeader') + '">' +
-                '<span class="fc-title">' +
-                htmlEscape(title) +
-                '</span>' +
-                '<span class="fc-close ' + theme.getIconClass('close') + '"></span>' +
-                '</div>' +
-                '<div class="fc-body ' + theme.getClass('popoverContent') + '">' +
-                '<div class="fc-event-container"></div>' +
-                '</div>';
-        this.segContainerEl = this.el.querySelector('.fc-event-container');
-    };
-    DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
-        var date = this.props.date; // HACK
-        if (positionLeft < elWidth && positionTop < elHeight) {
-            return {
-                component: this,
-                dateSpan: {
-                    allDay: true,
-                    range: { start: date, end: addDays(date, 1) }
-                },
-                dayEl: this.el,
-                rect: {
-                    left: 0,
-                    top: 0,
-                    right: elWidth,
-                    bottom: elHeight
-                },
-                layer: 1
-            };
-        }
-    };
-    return DayTile;
-}(DateComponent));
-var DayTileEventRenderer = /** @class */ (function (_super) {
-    __extends(DayTileEventRenderer, _super);
-    function DayTileEventRenderer(dayTile) {
-        var _this = _super.call(this) || this;
-        _this.dayTile = dayTile;
-        return _this;
-    }
-    DayTileEventRenderer.prototype.attachSegs = function (segs) {
-        for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
-            var seg = segs_1[_i];
-            this.dayTile.segContainerEl.appendChild(seg.el);
-        }
-    };
-    DayTileEventRenderer.prototype.detachSegs = function (segs) {
-        for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
-            var seg = segs_2[_i];
-            removeElement(seg.el);
-        }
-    };
-    return DayTileEventRenderer;
-}(SimpleDayGridEventRenderer));
-
-var DayBgRow = /** @class */ (function () {
-    function DayBgRow(context) {
-        this.context = context;
-    }
-    DayBgRow.prototype.renderHtml = function (props) {
-        var parts = [];
-        if (props.renderIntroHtml) {
-            parts.push(props.renderIntroHtml());
-        }
-        for (var _i = 0, _a = props.cells; _i < _a.length; _i++) {
-            var cell = _a[_i];
-            parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs));
-        }
-        if (!props.cells.length) {
-            parts.push('<td class="fc-day ' + this.context.theme.getClass('widgetContent') + '"></td>');
-        }
-        if (this.context.options.dir === 'rtl') {
-            parts.reverse();
-        }
-        return '<tr>' + parts.join('') + '</tr>';
-    };
-    return DayBgRow;
-}());
-function renderCellHtml(date, dateProfile, context, otherAttrs) {
-    var dateEnv = context.dateEnv, theme = context.theme;
-    var isDateValid = rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
-    var classes = getDayClasses(date, dateProfile, context);
-    classes.unshift('fc-day', theme.getClass('widgetContent'));
-    return '<td class="' + classes.join(' ') + '"' +
-        (isDateValid ?
-            ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
-            '') +
-        (otherAttrs ?
-            ' ' + otherAttrs :
-            '') +
-        '></td>';
-}
-
-var DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
-var WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' });
-var DayGrid = /** @class */ (function (_super) {
-    __extends(DayGrid, _super);
-    function DayGrid(el, renderProps) {
-        var _this = _super.call(this, el) || this;
-        _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid
-        _this.isCellSizesDirty = false;
-        _this.renderProps = renderProps;
-        var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this);
-        var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this);
-        _this.mirrorRenderer = new DayGridMirrorRenderer(_this);
-        var renderCells = _this.renderCells = memoizeRendering(_this._renderCells, _this._unrenderCells);
-        _this.renderBusinessHours = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]);
-        _this.renderDateSelection = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]);
-        _this.renderBgEvents = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]);
-        _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]);
-        _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
-        _this.renderEventDrag = memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]);
-        _this.renderEventResize = memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]);
-        return _this;
-    }
-    DayGrid.prototype.render = function (props, context) {
-        var cells = props.cells;
-        this.rowCnt = cells.length;
-        this.colCnt = cells[0].length;
-        this.renderCells(cells, props.isRigid);
-        this.renderBusinessHours(context, props.businessHourSegs);
-        this.renderDateSelection(context, props.dateSelectionSegs);
-        this.renderBgEvents(context, props.bgEventSegs);
-        this.renderFgEvents(context, props.fgEventSegs);
-        this.renderEventSelection(props.eventSelection);
-        this.renderEventDrag(props.eventDrag);
-        this.renderEventResize(props.eventResize);
-        if (this.segPopoverTile) {
-            this.updateSegPopoverTile();
-        }
-    };
-    DayGrid.prototype.destroy = function () {
-        _super.prototype.destroy.call(this);
-        this.renderCells.unrender(); // will unrender everything else
-    };
-    DayGrid.prototype.getCellRange = function (row, col) {
-        var start = this.props.cells[row][col].date;
-        var end = addDays(start, 1);
-        return { start: start, end: end };
-    };
-    DayGrid.prototype.updateSegPopoverTile = function (date, segs) {
-        var ownProps = this.props;
-        this.segPopoverTile.receiveProps({
-            date: date || this.segPopoverTile.props.date,
-            fgSegs: segs || this.segPopoverTile.props.fgSegs,
-            eventSelection: ownProps.eventSelection,
-            eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null,
-            eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null
-        }, this.context);
-    };
-    /* Date Rendering
-    ------------------------------------------------------------------------------------------------------------------*/
-    DayGrid.prototype._renderCells = function (cells, isRigid) {
-        var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, dateEnv = _a.dateEnv;
-        var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt;
-        var html = '';
-        var row;
-        var col;
-        for (row = 0; row < rowCnt; row++) {
-            html += this.renderDayRowHtml(row, isRigid);
-        }
-        this.el.innerHTML = html;
-        this.rowEls = findElements(this.el, '.fc-row');
-        this.cellEls = findElements(this.el, '.fc-day, .fc-disabled-day');
-        if (isRtl) {
-            this.cellEls.reverse();
-        }
-        this.rowPositions = new PositionCache(this.el, this.rowEls, false, true // vertical
-        );
-        this.colPositions = new PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row
-        true, false // horizontal
-        );
-        // trigger dayRender with each cell's element
-        for (row = 0; row < rowCnt; row++) {
-            for (col = 0; col < colCnt; col++) {
-                calendar.publiclyTrigger('dayRender', [
-                    {
-                        date: dateEnv.toDate(cells[row][col].date),
-                        el: this.getCellEl(row, col),
-                        view: view
-                    }
-                ]);
-            }
-        }
-        this.isCellSizesDirty = true;
-    };
-    DayGrid.prototype._unrenderCells = function () {
-        this.removeSegPopover();
-    };
-    // Generates the HTML for a single row, which is a div that wraps a table.
-    // `row` is the row number.
-    DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {
-        var theme = this.context.theme;
-        var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];
-        if (isRigid) {
-            classes.push('fc-rigid');
-        }
-        var bgRow = new DayBgRow(this.context);
-        return '' +
-            '<div class="' + classes.join(' ') + '">' +
-            '<div class="fc-bg">' +
-            '<table class="' + theme.getClass('tableGrid') + '">' +
-            bgRow.renderHtml({
-                cells: this.props.cells[row],
-                dateProfile: this.props.dateProfile,
-                renderIntroHtml: this.renderProps.renderBgIntroHtml
-            }) +
-            '</table>' +
-            '</div>' +
-            '<div class="fc-content-skeleton">' +
-            '<table>' +
-            (this.getIsNumbersVisible() ?
-                '<thead>' +
-                    this.renderNumberTrHtml(row) +
-                    '</thead>' :
-                '') +
-            '</table>' +
-            '</div>' +
-            '</div>';
-    };
-    DayGrid.prototype.getIsNumbersVisible = function () {
-        return this.getIsDayNumbersVisible() ||
-            this.renderProps.cellWeekNumbersVisible ||
-            this.renderProps.colWeekNumbersVisible;
-    };
-    DayGrid.prototype.getIsDayNumbersVisible = function () {
-        return this.rowCnt > 1;
-    };
-    /* Grid Number Rendering
-    ------------------------------------------------------------------------------------------------------------------*/
-    DayGrid.prototype.renderNumberTrHtml = function (row) {
-        var isRtl = this.context.isRtl;
-        var intro = this.renderProps.renderNumberIntroHtml(row, this);
-        return '' +
-            '<tr>' +
-            (isRtl ? '' : intro) +
-            this.renderNumberCellsHtml(row) +
-            (isRtl ? intro : '') +
-            '</tr>';
-    };
-    DayGrid.prototype.renderNumberCellsHtml = function (row) {
-        var htmls = [];
-        var col;
-        var date;
-        for (col = 0; col < this.colCnt; col++) {
-            date = this.props.cells[row][col].date;
-            htmls.push(this.renderNumberCellHtml(date));
-        }
-        if (this.context.isRtl) {
-            htmls.reverse();
-        }
-        return htmls.join('');
-    };
-    // Generates the HTML for the <td>s of the "number" row in the DayGrid's content skeleton.
-    // The number row will only exist if either day numbers or week numbers are turned on.
-    DayGrid.prototype.renderNumberCellHtml = function (date) {
-        var _a = this.context, dateEnv = _a.dateEnv, options = _a.options;
-        var html = '';
-        var isDateValid = rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
-        var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;
-        var classes;
-        var weekCalcFirstDow;
-        if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) {
-            // no numbers in day cell (week number must be along the side)
-            return '<td></td>'; //  will create an empty space above events :(
-        }
-        classes = getDayClasses(date, this.props.dateProfile, this.context);
-        classes.unshift('fc-day-top');
-        if (this.renderProps.cellWeekNumbersVisible) {
-            weekCalcFirstDow = dateEnv.weekDow;
-        }
-        html += '<td class="' + classes.join(' ') + '"' +
-            (isDateValid ?
-                ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
-                '') +
-            '>';
-        if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) {
-            html += buildGotoAnchorHtml(options, dateEnv, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML
-            );
-        }
-        if (isDayNumberVisible) {
-            html += buildGotoAnchorHtml(options, dateEnv, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML
-            );
-        }
-        html += '</td>';
-        return html;
-    };
-    /* Sizing
-    ------------------------------------------------------------------------------------------------------------------*/
-    DayGrid.prototype.updateSize = function (isResize) {
-        var calendar = this.context.calendar;
-        var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
-        if (isResize ||
-            this.isCellSizesDirty ||
-            calendar.isEventsUpdated // hack
-        ) {
-            this.buildPositionCaches();
-            this.isCellSizesDirty = false;
-        }
-        fillRenderer.computeSizes(isResize);
-        eventRenderer.computeSizes(isResize);
-        mirrorRenderer.computeSizes(isResize);
-        fillRenderer.assignSizes(isResize);
-        eventRenderer.assignSizes(isResize);
-        mirrorRenderer.assignSizes(isResize);
-    };
-    DayGrid.prototype.buildPositionCaches = function () {
-        this.buildColPositions();
-        this.buildRowPositions();
-    };
-    DayGrid.prototype.buildColPositions = function () {
-        this.colPositions.build();
-    };
-    DayGrid.prototype.buildRowPositions = function () {
-        this.rowPositions.build();
-        this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack
-    };
-    /* Hit System
-    ------------------------------------------------------------------------------------------------------------------*/
-    DayGrid.prototype.positionToHit = function (leftPosition, topPosition) {
-        var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;
-        var col = colPositions.leftToIndex(leftPosition);
-        var row = rowPositions.topToIndex(topPosition);
-        if (row != null && col != null) {
-            return {
-                row: row,
-                col: col,
-                dateSpan: {
-                    range: this.getCellRange(row, col),
-                    allDay: true
-                },
-                dayEl: this.getCellEl(row, col),
-                relativeRect: {
-                    left: colPositions.lefts[col],
-                    right: colPositions.rights[col],
-                    top: rowPositions.tops[row],
-                    bottom: rowPositions.bottoms[row]
-                }
-            };
-        }
-    };
-    /* Cell System
-    ------------------------------------------------------------------------------------------------------------------*/
-    // FYI: the first column is the leftmost column, regardless of date
-    DayGrid.prototype.getCellEl = function (row, col) {
-        return this.cellEls[row * this.colCnt + col];
-    };
-    /* Event Drag Visualization
-    ------------------------------------------------------------------------------------------------------------------*/
-    DayGrid.prototype._renderEventDrag = function (state) {
-        if (state) {
-            this.eventRenderer.hideByHash(state.affectedInstances);
-            this.fillRenderer.renderSegs('highlight', this.context, state.segs);
-        }
-    };
-    DayGrid.prototype._unrenderEventDrag = function (state) {
-        if (state) {
-            this.eventRenderer.showByHash(state.affectedInstances);
-            this.fillRenderer.unrender('highlight', this.context);
-        }
-    };
-    /* Event Resize Visualization
-    ------------------------------------------------------------------------------------------------------------------*/
-    DayGrid.prototype._renderEventResize = function (state) {
-        if (state) {
-            this.eventRenderer.hideByHash(state.affectedInstances);
-            this.fillRenderer.renderSegs('highlight', this.context, state.segs);
-            this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-        }
-    };
-    DayGrid.prototype._unrenderEventResize = function (state) {
-        if (state) {
-            this.eventRenderer.showByHash(state.affectedInstances);
-            this.fillRenderer.unrender('highlight', this.context);
-            this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-        }
-    };
-    /* More+ Link Popover
-    ------------------------------------------------------------------------------------------------------------------*/
-    DayGrid.prototype.removeSegPopover = function () {
-        if (this.segPopover) {
-            this.segPopover.hide(); // in handler, will call segPopover's removeElement
-        }
-    };
-    // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid.
-    // `levelLimit` can be false (don't limit), a number, or true (should be computed).
-    DayGrid.prototype.limitRows = function (levelLimit) {
-        var rowStructs = this.eventRenderer.rowStructs || [];
-        var row; // row #
-        var rowLevelLimit;
-        for (row = 0; row < rowStructs.length; row++) {
-            this.unlimitRow(row);
-            if (!levelLimit) {
-                rowLevelLimit = false;
-            }
-            else if (typeof levelLimit === 'number') {
-                rowLevelLimit = levelLimit;
-            }
-            else {
-                rowLevelLimit = this.computeRowLevelLimit(row);
-            }
-            if (rowLevelLimit !== false) {
-                this.limitRow(row, rowLevelLimit);
-            }
-        }
-    };
-    // Computes the number of levels a row will accomodate without going outside its bounds.
-    // Assumes the row is "rigid" (maintains a constant height regardless of what is inside).
-    // `row` is the row number.
-    DayGrid.prototype.computeRowLevelLimit = function (row) {
-        var rowEl = this.rowEls[row]; // the containing "fake" row div
-        var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport!
-        var trEls = findChildren(this.eventRenderer.rowStructs[row].tbodyEl);
-        var i;
-        var trEl;
-        // Reveal one level <tr> at a time and stop when we find one out of bounds
-        for (i = 0; i < trEls.length; i++) {
-            trEl = trEls[i];
-            trEl.classList.remove('fc-limited'); // reset to original state (reveal)
-            if (trEl.getBoundingClientRect().bottom > rowBottom) {
-                return i;
-            }
-        }
-        return false; // should not limit at all
-    };
-    // Limits the given grid row to the maximum number of levels and injects "more" links if necessary.
-    // `row` is the row number.
-    // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.
-    DayGrid.prototype.limitRow = function (row, levelLimit) {
-        var _this = this;
-        var colCnt = this.colCnt;
-        var isRtl = this.context.isRtl;
-        var rowStruct = this.eventRenderer.rowStructs[row];
-        var moreNodes = []; // array of "more" <a> links and <td> DOM nodes
-        var col = 0; // col #, left-to-right (not chronologically)
-        var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right
-        var cellMatrix; // a matrix (by level, then column) of all <td> elements in the row
-        var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes
-        var i;
-        var seg;
-        var segsBelow; // array of segment objects below `seg` in the current `col`
-        var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies
-        var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)
-        var td;
-        var rowSpan;
-        var segMoreNodes; // array of "more" <td> cells that will stand-in for the current seg's cell
-        var j;
-        var moreTd;
-        var moreWrap;
-        var moreLink;
-        // Iterates through empty level cells and places "more" links inside if need be
-        var emptyCellsUntil = function (endCol) {
-            while (col < endCol) {
-                segsBelow = _this.getCellSegs(row, col, levelLimit);
-                if (segsBelow.length) {
-                    td = cellMatrix[levelLimit - 1][col];
-                    moreLink = _this.renderMoreLink(row, col, segsBelow);
-                    moreWrap = createElement('div', null, moreLink);
-                    td.appendChild(moreWrap);
-                    moreNodes.push(moreWrap);
-                }
-                col++;
-            }
-        };
-        if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?
-            levelSegs = rowStruct.segLevels[levelLimit - 1];
-            cellMatrix = rowStruct.cellMatrix;
-            limitedNodes = findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level <tr> elements past the limit
-            limitedNodes.forEach(function (node) {
-                node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array
-            });
-            // iterate though segments in the last allowable level
-            for (i = 0; i < levelSegs.length; i++) {
-                seg = levelSegs[i];
-                var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
-                var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
-                emptyCellsUntil(leftCol); // process empty cells before the segment
-                // determine *all* segments below `seg` that occupy the same columns
-                colSegsBelow = [];
-                totalSegsBelow = 0;
-                while (col <= rightCol) {
-                    segsBelow = this.getCellSegs(row, col, levelLimit);
-                    colSegsBelow.push(segsBelow);
-                    totalSegsBelow += segsBelow.length;
-                    col++;
-                }
-                if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
-                    td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell
-                    rowSpan = td.rowSpan || 1;
-                    segMoreNodes = [];
-                    // make a replacement <td> for each column the segment occupies. will be one for each colspan
-                    for (j = 0; j < colSegsBelow.length; j++) {
-                        moreTd = createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan });
-                        segsBelow = colSegsBelow[j];
-                        moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too
-                        );
-                        moreWrap = createElement('div', null, moreLink);
-                        moreTd.appendChild(moreWrap);
-                        segMoreNodes.push(moreTd);
-                        moreNodes.push(moreTd);
-                    }
-                    td.classList.add('fc-limited');
-                    insertAfterElement(td, segMoreNodes);
-                    limitedNodes.push(td);
-                }
-            }
-            emptyCellsUntil(this.colCnt); // finish off the level
-            rowStruct.moreEls = moreNodes; // for easy undoing later
-            rowStruct.limitedEls = limitedNodes; // for easy undoing later
-        }
-    };
-    // Reveals all levels and removes all "more"-related elements for a grid's row.
-    // `row` is a row number.
-    DayGrid.prototype.unlimitRow = function (row) {
-        var rowStruct = this.eventRenderer.rowStructs[row];
-        if (rowStruct.moreEls) {
-            rowStruct.moreEls.forEach(removeElement);
-            rowStruct.moreEls = null;
-        }
-        if (rowStruct.limitedEls) {
-            rowStruct.limitedEls.forEach(function (limitedEl) {
-                limitedEl.classList.remove('fc-limited');
-            });
-            rowStruct.limitedEls = null;
-        }
-    };
-    // Renders an <a> element that represents hidden event element for a cell.
-    // Responsible for attaching click handler as well.
-    DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {
-        var _this = this;
-        var _a = this.context, calendar = _a.calendar, view = _a.view, dateEnv = _a.dateEnv, options = _a.options, isRtl = _a.isRtl;
-        var a = createElement('a', { className: 'fc-more' });
-        a.innerText = this.getMoreLinkText(hiddenSegs.length);
-        a.addEventListener('click', function (ev) {
-            var clickOption = options.eventLimitClick;
-            var _col = isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
-            var date = _this.props.cells[row][_col].date;
-            var moreEl = ev.currentTarget;
-            var dayEl = _this.getCellEl(row, col);
-            var allSegs = _this.getCellSegs(row, col);
-            // rescope the segments to be within the cell's date
-            var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);
-            var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);
-            if (typeof clickOption === 'function') {
-                // the returned value can be an atomic option
-                clickOption = calendar.publiclyTrigger('eventLimitClick', [
-                    {
-                        date: dateEnv.toDate(date),
-                        allDay: true,
-                        dayEl: dayEl,
-                        moreEl: moreEl,
-                        segs: reslicedAllSegs,
-                        hiddenSegs: reslicedHiddenSegs,
-                        jsEvent: ev,
-                        view: view
-                    }
-                ]);
-            }
-            if (clickOption === 'popover') {
-                _this.showSegPopover(row, col, moreEl, reslicedAllSegs);
-            }
-            else if (typeof clickOption === 'string') { // a view name
-                calendar.zoomTo(date, clickOption);
-            }
-        });
-        return a;
-    };
-    // Reveals the popover that displays all events within a cell
-    DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {
-        var _this = this;
-        var _a = this.context, calendar = _a.calendar, view = _a.view, theme = _a.theme, isRtl = _a.isRtl;
-        var _col = isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
-        var moreWrap = moreLink.parentNode; // the <div> wrapper around the <a>
-        var topEl; // the element we want to match the top coordinate of
-        var options;
-        if (this.rowCnt === 1) {
-            topEl = view.el; // will cause the popover to cover any sort of header
-        }
-        else {
-            topEl = this.rowEls[row]; // will align with top of row
-        }
-        options = {
-            className: 'fc-more-popover ' + theme.getClass('popover'),
-            parentEl: view.el,
-            top: computeRect(topEl).top,
-            autoHide: true,
-            content: function (el) {
-                _this.segPopoverTile = new DayTile(el);
-                _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs);
-            },
-            hide: function () {
-                _this.segPopoverTile.destroy();
-                _this.segPopoverTile = null;
-                _this.segPopover.destroy();
-                _this.segPopover = null;
-            }
-        };
-        // Determine horizontal coordinate.
-        // We use the moreWrap instead of the <td> to avoid border confusion.
-        if (isRtl) {
-            options.right = computeRect(moreWrap).right + 1; // +1 to be over cell border
-        }
-        else {
-            options.left = computeRect(moreWrap).left - 1; // -1 to be over cell border
-        }
-        this.segPopover = new Popover(options);
-        this.segPopover.show();
-        calendar.releaseAfterSizingTriggers(); // hack for eventPositioned
-    };
-    // Given the events within an array of segment objects, reslice them to be in a single day
-    DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {
-        var dayStart = dayDate;
-        var dayEnd = addDays(dayStart, 1);
-        var dayRange = { start: dayStart, end: dayEnd };
-        var newSegs = [];
-        for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
-            var seg = segs_1[_i];
-            var eventRange = seg.eventRange;
-            var origRange = eventRange.range;
-            var slicedRange = intersectRanges(origRange, dayRange);
-            if (slicedRange) {
-                newSegs.push(__assign({}, seg, { eventRange: {
-                        def: eventRange.def,
-                        ui: __assign({}, eventRange.ui, { durationEditable: false }),
-                        instance: eventRange.instance,
-                        range: slicedRange
-                    }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() }));
-            }
-        }
-        return newSegs;
-    };
-    // Generates the text that should be inside a "more" link, given the number of events it represents
-    DayGrid.prototype.getMoreLinkText = function (num) {
-        var opt = this.context.options.eventLimitText;
-        if (typeof opt === 'function') {
-            return opt(num);
-        }
-        else {
-            return '+' + num + ' ' + opt;
-        }
-    };
-    // Returns segments within a given cell.
-    // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.
-    DayGrid.prototype.getCellSegs = function (row, col, startLevel) {
-        var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;
-        var level = startLevel || 0;
-        var segs = [];
-        var seg;
-        while (level < segMatrix.length) {
-            seg = segMatrix[level][col];
-            if (seg) {
-                segs.push(seg);
-            }
-            level++;
-        }
-        return segs;
-    };
-    return DayGrid;
-}(DateComponent));
-
-var WEEK_NUM_FORMAT$1 = createFormatter({ week: 'numeric' });
-/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
-----------------------------------------------------------------------------------------------------------------------*/
-// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.
-// It is responsible for managing width/height.
-var AbstractDayGridView = /** @class */ (function (_super) {
-    __extends(AbstractDayGridView, _super);
-    function AbstractDayGridView() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.processOptions = memoize(_this._processOptions);
-        _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
-        /* Header Rendering
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Generates the HTML that will go before the day-of week header cells
-        _this.renderHeadIntroHtml = function () {
-            var _a = _this.context, theme = _a.theme, options = _a.options;
-            if (_this.colWeekNumbersVisible) {
-                return '' +
-                    '<th class="fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.weekNumberStyleAttr() + '>' +
-                    '<span>' + // needed for matchCellWidths
-                    htmlEscape(options.weekLabel) +
-                    '</span>' +
-                    '</th>';
-            }
-            return '';
-        };
-        /* Day Grid Rendering
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Generates the HTML that will go before content-skeleton cells that display the day/week numbers
-        _this.renderDayGridNumberIntroHtml = function (row, dayGrid) {
-            var _a = _this.context, options = _a.options, dateEnv = _a.dateEnv;
-            var weekStart = dayGrid.props.cells[row][0].date;
-            if (_this.colWeekNumbersVisible) {
-                return '' +
-                    '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '>' +
-                    buildGotoAnchorHtml(// aside from link, important for matchCellWidths
-                    options, dateEnv, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML
-                    ) +
-                    '</td>';
-            }
-            return '';
-        };
-        // Generates the HTML that goes before the day bg cells for each day-row
-        _this.renderDayGridBgIntroHtml = function () {
-            var theme = _this.context.theme;
-            if (_this.colWeekNumbersVisible) {
-                return '<td class="fc-week-number ' + theme.getClass('widgetContent') + '" ' + _this.weekNumberStyleAttr() + '></td>';
-            }
-            return '';
-        };
-        // Generates the HTML that goes before every other type of row generated by DayGrid.
-        // Affects mirror-skeleton and highlight-skeleton rows.
-        _this.renderDayGridIntroHtml = function () {
-            if (_this.colWeekNumbersVisible) {
-                return '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '></td>';
-            }
-            return '';
-        };
-        return _this;
-    }
-    AbstractDayGridView.prototype._processOptions = function (options) {
-        if (options.weekNumbers) {
-            if (options.weekNumbersWithinDays) {
-                this.cellWeekNumbersVisible = true;
-                this.colWeekNumbersVisible = false;
-            }
-            else {
-                this.cellWeekNumbersVisible = false;
-                this.colWeekNumbersVisible = true;
-            }
-        }
-        else {
-            this.colWeekNumbersVisible = false;
-            this.cellWeekNumbersVisible = false;
-        }
-    };
-    AbstractDayGridView.prototype.render = function (props, context) {
-        _super.prototype.render.call(this, props, context);
-        this.processOptions(context.options);
-        this.renderSkeleton(context);
-    };
-    AbstractDayGridView.prototype.destroy = function () {
-        _super.prototype.destroy.call(this);
-        this.renderSkeleton.unrender();
-    };
-    AbstractDayGridView.prototype._renderSkeleton = function (context) {
-        this.el.classList.add('fc-dayGrid-view');
-        this.el.innerHTML = this.renderSkeletonHtml();
-        this.scroller = new ScrollComponent('hidden', // overflow x
-        'auto' // overflow y
-        );
-        var dayGridContainerEl = this.scroller.el;
-        this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl);
-        dayGridContainerEl.classList.add('fc-day-grid-container');
-        var dayGridEl = createElement('div', { className: 'fc-day-grid' });
-        dayGridContainerEl.appendChild(dayGridEl);
-        this.dayGrid = new DayGrid(dayGridEl, {
-            renderNumberIntroHtml: this.renderDayGridNumberIntroHtml,
-            renderBgIntroHtml: this.renderDayGridBgIntroHtml,
-            renderIntroHtml: this.renderDayGridIntroHtml,
-            colWeekNumbersVisible: this.colWeekNumbersVisible,
-            cellWeekNumbersVisible: this.cellWeekNumbersVisible
-        });
-    };
-    AbstractDayGridView.prototype._unrenderSkeleton = function () {
-        this.el.classList.remove('fc-dayGrid-view');
-        this.dayGrid.destroy();
-        this.scroller.destroy();
-    };
-    // Builds the HTML skeleton for the view.
-    // The day-grid component will render inside of a container defined by this HTML.
-    AbstractDayGridView.prototype.renderSkeletonHtml = function () {
-        var _a = this.context, theme = _a.theme, options = _a.options;
-        return '' +
-            '<table class="' + theme.getClass('tableGrid') + '">' +
-            (options.columnHeader ?
-                '<thead class="fc-head">' +
-                    '<tr>' +
-                    '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
-                    '</tr>' +
-                    '</thead>' :
-                '') +
-            '<tbody class="fc-body">' +
-            '<tr>' +
-            '<td class="' + theme.getClass('widgetContent') + '"></td>' +
-            '</tr>' +
-            '</tbody>' +
-            '</table>';
-    };
-    // Generates an HTML attribute string for setting the width of the week number column, if it is known
-    AbstractDayGridView.prototype.weekNumberStyleAttr = function () {
-        if (this.weekNumberWidth != null) {
-            return 'style="width:' + this.weekNumberWidth + 'px"';
-        }
-        return '';
-    };
-    // Determines whether each row should have a constant height
-    AbstractDayGridView.prototype.hasRigidRows = function () {
-        var eventLimit = this.context.options.eventLimit;
-        return eventLimit && typeof eventLimit !== 'number';
-    };
-    /* Dimensions
-    ------------------------------------------------------------------------------------------------------------------*/
-    AbstractDayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
-        _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
-        this.dayGrid.updateSize(isResize);
-    };
-    // Refreshes the horizontal dimensions of the view
-    AbstractDayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
-        var dayGrid = this.dayGrid;
-        var eventLimit = this.context.options.eventLimit;
-        var headRowEl = this.header ? this.header.el : null; // HACK
-        var scrollerHeight;
-        var scrollbarWidths;
-        // hack to give the view some height prior to dayGrid's columns being rendered
-        // TODO: separate setting height from scroller VS dayGrid.
-        if (!dayGrid.rowEls) {
-            if (!isAuto) {
-                scrollerHeight = this.computeScrollerHeight(viewHeight);
-                this.scroller.setHeight(scrollerHeight);
-            }
-            return;
-        }
-        if (this.colWeekNumbersVisible) {
-            // Make sure all week number cells running down the side have the same width.
-            this.weekNumberWidth = matchCellWidths(findElements(this.el, '.fc-week-number'));
-        }
-        // reset all heights to be natural
-        this.scroller.clear();
-        if (headRowEl) {
-            uncompensateScroll(headRowEl);
-        }
-        dayGrid.removeSegPopover(); // kill the "more" popover if displayed
-        // is the event limit a constant level number?
-        if (eventLimit && typeof eventLimit === 'number') {
-            dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after
-        }
-        // distribute the height to the rows
-        // (viewHeight is a "recommended" value if isAuto)
-        scrollerHeight = this.computeScrollerHeight(viewHeight);
-        this.setGridHeight(scrollerHeight, isAuto);
-        // is the event limit dynamically calculated?
-        if (eventLimit && typeof eventLimit !== 'number') {
-            dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set
-        }
-        if (!isAuto) { // should we force dimensions of the scroll container?
-            this.scroller.setHeight(scrollerHeight);
-            scrollbarWidths = this.scroller.getScrollbarWidths();
-            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
-                if (headRowEl) {
-                    compensateScroll(headRowEl, scrollbarWidths);
-                }
-                // doing the scrollbar compensation might have created text overflow which created more height. redo
-                scrollerHeight = this.computeScrollerHeight(viewHeight);
-                this.scroller.setHeight(scrollerHeight);
-            }
-            // guarantees the same scrollbar widths
-            this.scroller.lockOverflow(scrollbarWidths);
-        }
-    };
-    // given a desired total height of the view, returns what the height of the scroller should be
-    AbstractDayGridView.prototype.computeScrollerHeight = function (viewHeight) {
-        return viewHeight -
-            subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
-    };
-    // Sets the height of just the DayGrid component in this view
-    AbstractDayGridView.prototype.setGridHeight = function (height, isAuto) {
-        if (this.context.options.monthMode) {
-            // if auto, make the height of each row the height that it would be if there were 6 weeks
-            if (isAuto) {
-                height *= this.dayGrid.rowCnt / 6;
-            }
-            distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows
-        }
-        else {
-            if (isAuto) {
-                undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding
-            }
-            else {
-                distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows
-            }
-        }
-    };
-    /* Scroll
-    ------------------------------------------------------------------------------------------------------------------*/
-    AbstractDayGridView.prototype.computeDateScroll = function (duration) {
-        return { top: 0 };
-    };
-    AbstractDayGridView.prototype.queryDateScroll = function () {
-        return { top: this.scroller.getScrollTop() };
-    };
-    AbstractDayGridView.prototype.applyDateScroll = function (scroll) {
-        if (scroll.top !== undefined) {
-            this.scroller.setScrollTop(scroll.top);
-        }
-    };
-    return AbstractDayGridView;
-}(View));
-AbstractDayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator;
-
-var SimpleDayGrid = /** @class */ (function (_super) {
-    __extends(SimpleDayGrid, _super);
-    function SimpleDayGrid(dayGrid) {
-        var _this = _super.call(this, dayGrid.el) || this;
-        _this.slicer = new DayGridSlicer();
-        _this.dayGrid = dayGrid;
-        return _this;
-    }
-    SimpleDayGrid.prototype.firstContext = function (context) {
-        context.calendar.registerInteractiveComponent(this, { el: this.dayGrid.el });
-    };
-    SimpleDayGrid.prototype.destroy = function () {
-        _super.prototype.destroy.call(this);
-        this.context.calendar.unregisterInteractiveComponent(this);
-    };
-    SimpleDayGrid.prototype.render = function (props, context) {
-        var dayGrid = this.dayGrid;
-        var dateProfile = props.dateProfile, dayTable = props.dayTable;
-        dayGrid.receiveContext(context); // hack because context is used in sliceProps
-        dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, context.calendar, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }), context);
-    };
-    SimpleDayGrid.prototype.buildPositionCaches = function () {
-        this.dayGrid.buildPositionCaches();
-    };
-    SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) {
-        var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop);
-        if (rawHit) {
-            return {
-                component: this.dayGrid,
-                dateSpan: rawHit.dateSpan,
-                dayEl: rawHit.dayEl,
-                rect: {
-                    left: rawHit.relativeRect.left,
-                    right: rawHit.relativeRect.right,
-                    top: rawHit.relativeRect.top,
-                    bottom: rawHit.relativeRect.bottom
-                },
-                layer: 0
-            };
-        }
-    };
-    return SimpleDayGrid;
-}(DateComponent));
-var DayGridSlicer = /** @class */ (function (_super) {
-    __extends(DayGridSlicer, _super);
-    function DayGridSlicer() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) {
-        return dayTable.sliceRange(dateRange);
-    };
-    return DayGridSlicer;
-}(Slicer));
-
-var DayGridView = /** @class */ (function (_super) {
-    __extends(DayGridView, _super);
-    function DayGridView() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.buildDayTable = memoize(buildDayTable);
-        return _this;
-    }
-    DayGridView.prototype.render = function (props, context) {
-        _super.prototype.render.call(this, props, context); // will call _renderSkeleton/_unrenderSkeleton
-        var dateProfile = this.props.dateProfile;
-        var dayTable = this.dayTable =
-            this.buildDayTable(dateProfile, props.dateProfileGenerator);
-        if (this.header) {
-            this.header.receiveProps({
-                dateProfile: dateProfile,
-                dates: dayTable.headerDates,
-                datesRepDistinctDays: dayTable.rowCnt === 1,
-                renderIntroHtml: this.renderHeadIntroHtml
-            }, context);
-        }
-        this.simpleDayGrid.receiveProps({
-            dateProfile: dateProfile,
-            dayTable: dayTable,
-            businessHours: props.businessHours,
-            dateSelection: props.dateSelection,
-            eventStore: props.eventStore,
-            eventUiBases: props.eventUiBases,
-            eventSelection: props.eventSelection,
-            eventDrag: props.eventDrag,
-            eventResize: props.eventResize,
-            isRigid: this.hasRigidRows(),
-            nextDayThreshold: this.context.nextDayThreshold
-        }, context);
-    };
-    DayGridView.prototype._renderSkeleton = function (context) {
-        _super.prototype._renderSkeleton.call(this, context);
-        if (context.options.columnHeader) {
-            this.header = new DayHeader(this.el.querySelector('.fc-head-container'));
-        }
-        this.simpleDayGrid = new SimpleDayGrid(this.dayGrid);
-    };
-    DayGridView.prototype._unrenderSkeleton = function () {
-        _super.prototype._unrenderSkeleton.call(this);
-        if (this.header) {
-            this.header.destroy();
-        }
-        this.simpleDayGrid.destroy();
-    };
-    return DayGridView;
-}(AbstractDayGridView));
-function buildDayTable(dateProfile, dateProfileGenerator) {
-    var daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator);
-    return new DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
-}
-
-var main = createPlugin({
-    defaultView: 'dayGridMonth',
-    views: {
-        dayGrid: DayGridView,
-        dayGridDay: {
-            type: 'dayGrid',
-            duration: { days: 1 }
-        },
-        dayGridWeek: {
-            type: 'dayGrid',
-            duration: { weeks: 1 }
-        },
-        dayGridMonth: {
-            type: 'dayGrid',
-            duration: { months: 1 },
-            monthMode: true,
-            fixedWeekCount: true
-        }
-    }
-});
-
-export default main;
-export { AbstractDayGridView, DayBgRow, DayGrid, DayGridSlicer, DayGridView, SimpleDayGrid, buildDayTable as buildBasicDayTable };

+ 0 - 1669
plugins/fullcalendar-daygrid/main.js

@@ -1,1669 +0,0 @@
-/*!
-FullCalendar Day Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
-    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
-    typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
-    (global = global || self, factory(global.FullCalendarDayGrid = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
-    /*! *****************************************************************************
-    Copyright (c) Microsoft Corporation.
-
-    Permission to use, copy, modify, and/or distribute this software for any
-    purpose with or without fee is hereby granted.
-
-    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-    PERFORMANCE OF THIS SOFTWARE.
-    ***************************************************************************** */
-    /* global Reflect, Promise */
-
-    var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-
-    function __extends(d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    }
-
-    var __assign = function() {
-        __assign = Object.assign || function __assign(t) {
-            for (var s, i = 1, n = arguments.length; i < n; i++) {
-                s = arguments[i];
-                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-            }
-            return t;
-        };
-        return __assign.apply(this, arguments);
-    };
-
-    var DayGridDateProfileGenerator = /** @class */ (function (_super) {
-        __extends(DayGridDateProfileGenerator, _super);
-        function DayGridDateProfileGenerator() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        // Computes the date range that will be rendered.
-        DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
-            var dateEnv = this.dateEnv;
-            var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);
-            var start = renderRange.start;
-            var end = renderRange.end;
-            var endOfWeek;
-            // year and month views should be aligned with weeks. this is already done for week
-            if (/^(year|month)$/.test(currentRangeUnit)) {
-                start = dateEnv.startOfWeek(start);
-                // make end-of-week if not already
-                endOfWeek = dateEnv.startOfWeek(end);
-                if (endOfWeek.valueOf() !== end.valueOf()) {
-                    end = core.addWeeks(endOfWeek, 1);
-                }
-            }
-            // ensure 6 weeks
-            if (this.options.monthMode &&
-                this.options.fixedWeekCount) {
-                var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
-                core.diffWeeks(start, end));
-                end = core.addWeeks(end, 6 - rowCnt);
-            }
-            return { start: start, end: end };
-        };
-        return DayGridDateProfileGenerator;
-    }(core.DateProfileGenerator));
-
-    /* A rectangular panel that is absolutely positioned over other content
-    ------------------------------------------------------------------------------------------------------------------------
-    Options:
-      - className (string)
-      - content (HTML string, element, or element array)
-      - parentEl
-      - top
-      - left
-      - right (the x coord of where the right edge should be. not a "CSS" right)
-      - autoHide (boolean)
-      - show (callback)
-      - hide (callback)
-    */
-    var Popover = /** @class */ (function () {
-        function Popover(options) {
-            var _this = this;
-            this.isHidden = true;
-            this.margin = 10; // the space required between the popover and the edges of the scroll container
-            // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
-            this.documentMousedown = function (ev) {
-                // only hide the popover if the click happened outside the popover
-                if (_this.el && !_this.el.contains(ev.target)) {
-                    _this.hide();
-                }
-            };
-            this.options = options;
-        }
-        // Shows the popover on the specified position. Renders it if not already
-        Popover.prototype.show = function () {
-            if (this.isHidden) {
-                if (!this.el) {
-                    this.render();
-                }
-                this.el.style.display = '';
-                this.position();
-                this.isHidden = false;
-                this.trigger('show');
-            }
-        };
-        // Hides the popover, through CSS, but does not remove it from the DOM
-        Popover.prototype.hide = function () {
-            if (!this.isHidden) {
-                this.el.style.display = 'none';
-                this.isHidden = true;
-                this.trigger('hide');
-            }
-        };
-        // Creates `this.el` and renders content inside of it
-        Popover.prototype.render = function () {
-            var _this = this;
-            var options = this.options;
-            var el = this.el = core.createElement('div', {
-                className: 'fc-popover ' + (options.className || ''),
-                style: {
-                    top: '0',
-                    left: '0'
-                }
-            });
-            if (typeof options.content === 'function') {
-                options.content(el);
-            }
-            options.parentEl.appendChild(el);
-            // when a click happens on anything inside with a 'fc-close' className, hide the popover
-            core.listenBySelector(el, 'click', '.fc-close', function (ev) {
-                _this.hide();
-            });
-            if (options.autoHide) {
-                document.addEventListener('mousedown', this.documentMousedown);
-            }
-        };
-        // Hides and unregisters any handlers
-        Popover.prototype.destroy = function () {
-            this.hide();
-            if (this.el) {
-                core.removeElement(this.el);
-                this.el = null;
-            }
-            document.removeEventListener('mousedown', this.documentMousedown);
-        };
-        // Positions the popover optimally, using the top/left/right options
-        Popover.prototype.position = function () {
-            var options = this.options;
-            var el = this.el;
-            var elDims = el.getBoundingClientRect(); // only used for width,height
-            var origin = core.computeRect(el.offsetParent);
-            var clippingRect = core.computeClippingRect(options.parentEl);
-            var top; // the "position" (not "offset") values for the popover
-            var left; //
-            // compute top and left
-            top = options.top || 0;
-            if (options.left !== undefined) {
-                left = options.left;
-            }
-            else if (options.right !== undefined) {
-                left = options.right - elDims.width; // derive the left value from the right value
-            }
-            else {
-                left = 0;
-            }
-            // constrain to the view port. if constrained by two edges, give precedence to top/left
-            top = Math.min(top, clippingRect.bottom - elDims.height - this.margin);
-            top = Math.max(top, clippingRect.top + this.margin);
-            left = Math.min(left, clippingRect.right - elDims.width - this.margin);
-            left = Math.max(left, clippingRect.left + this.margin);
-            core.applyStyle(el, {
-                top: top - origin.top,
-                left: left - origin.left
-            });
-        };
-        // Triggers a callback. Calls a function in the option hash of the same name.
-        // Arguments beyond the first `name` are forwarded on.
-        // TODO: better code reuse for this. Repeat code
-        // can kill this???
-        Popover.prototype.trigger = function (name) {
-            if (this.options[name]) {
-                this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));
-            }
-        };
-        return Popover;
-    }());
-
-    /* Event-rendering methods for the DayGrid class
-    ----------------------------------------------------------------------------------------------------------------------*/
-    // "Simple" is bad a name. has nothing to do with SimpleDayGrid
-    var SimpleDayGridEventRenderer = /** @class */ (function (_super) {
-        __extends(SimpleDayGridEventRenderer, _super);
-        function SimpleDayGridEventRenderer() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        // Builds the HTML to be used for the default element for an individual segment
-        SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
-            var context = this.context;
-            var eventRange = seg.eventRange;
-            var eventDef = eventRange.def;
-            var eventUi = eventRange.ui;
-            var allDay = eventDef.allDay;
-            var isDraggable = core.computeEventDraggable(context, eventDef, eventUi);
-            var isResizableFromStart = allDay && seg.isStart && core.computeEventStartResizable(context, eventDef, eventUi);
-            var isResizableFromEnd = allDay && seg.isEnd && core.computeEventEndResizable(context, eventDef, eventUi);
-            var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
-            var skinCss = core.cssToStr(this.getSkinCss(eventUi));
-            var timeHtml = '';
-            var timeText;
-            var titleHtml;
-            classes.unshift('fc-day-grid-event', 'fc-h-event');
-            // Only display a timed events time if it is the starting segment
-            if (seg.isStart) {
-                timeText = this.getTimeText(eventRange);
-                if (timeText) {
-                    timeHtml = '<span class="fc-time">' + core.htmlEscape(timeText) + '</span>';
-                }
-            }
-            titleHtml =
-                '<span class="fc-title">' +
-                    (core.htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height
-                    '</span>';
-            return '<a class="' + classes.join(' ') + '"' +
-                (eventDef.url ?
-                    ' href="' + core.htmlEscape(eventDef.url) + '"' :
-                    '') +
-                (skinCss ?
-                    ' style="' + skinCss + '"' :
-                    '') +
-                '>' +
-                '<div class="fc-content">' +
-                (context.options.dir === 'rtl' ?
-                    titleHtml + ' ' + timeHtml : // put a natural space in between
-                    timeHtml + ' ' + titleHtml //
-                ) +
-                '</div>' +
-                (isResizableFromStart ?
-                    '<div class="fc-resizer fc-start-resizer"></div>' :
-                    '') +
-                (isResizableFromEnd ?
-                    '<div class="fc-resizer fc-end-resizer"></div>' :
-                    '') +
-                '</a>';
-        };
-        // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
-        SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () {
-            return {
-                hour: 'numeric',
-                minute: '2-digit',
-                omitZeroMinute: true,
-                meridiem: 'narrow'
-            };
-        };
-        SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
-            return false; // TODO: somehow consider the originating DayGrid's column count
-        };
-        return SimpleDayGridEventRenderer;
-    }(core.FgEventRenderer));
-
-    /* Event-rendering methods for the DayGrid class
-    ----------------------------------------------------------------------------------------------------------------------*/
-    var DayGridEventRenderer = /** @class */ (function (_super) {
-        __extends(DayGridEventRenderer, _super);
-        function DayGridEventRenderer(dayGrid) {
-            var _this = _super.call(this) || this;
-            _this.dayGrid = dayGrid;
-            return _this;
-        }
-        // Renders the given foreground event segments onto the grid
-        DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-            var rowStructs = this.rowStructs = this.renderSegRows(segs);
-            // append to each row's content skeleton
-            this.dayGrid.rowEls.forEach(function (rowNode, i) {
-                rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl);
-            });
-            // removes the "more.." events popover
-            if (!mirrorInfo) {
-                this.dayGrid.removeSegPopover();
-            }
-        };
-        // Unrenders all currently rendered foreground event segments
-        DayGridEventRenderer.prototype.detachSegs = function () {
-            var rowStructs = this.rowStructs || [];
-            var rowStruct;
-            while ((rowStruct = rowStructs.pop())) {
-                core.removeElement(rowStruct.tbodyEl);
-            }
-            this.rowStructs = null;
-        };
-        // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.
-        // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).
-        // PRECONDITION: each segment shoud already have a rendered and assigned `.el`
-        DayGridEventRenderer.prototype.renderSegRows = function (segs) {
-            var rowStructs = [];
-            var segRows;
-            var row;
-            segRows = this.groupSegRows(segs); // group into nested arrays
-            // iterate each row of segment groupings
-            for (row = 0; row < segRows.length; row++) {
-                rowStructs.push(this.renderSegRow(row, segRows[row]));
-            }
-            return rowStructs;
-        };
-        // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains
-        // the segments. Returns object with a bunch of internal data about how the render was calculated.
-        // NOTE: modifies rowSegs
-        DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {
-            var isRtl = this.context.isRtl;
-            var dayGrid = this.dayGrid;
-            var colCnt = dayGrid.colCnt;
-            var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels
-            var levelCnt = Math.max(1, segLevels.length); // ensure at least one level
-            var tbody = document.createElement('tbody');
-            var segMatrix = []; // lookup for which segments are rendered into which level+col cells
-            var cellMatrix = []; // lookup for all <td> elements of the level+col matrix
-            var loneCellMatrix = []; // lookup for <td> elements that only take up a single column
-            var i;
-            var levelSegs;
-            var col;
-            var tr;
-            var j;
-            var seg;
-            var td;
-            // populates empty cells from the current column (`col`) to `endCol`
-            function emptyCellsUntil(endCol) {
-                while (col < endCol) {
-                    // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell
-                    td = (loneCellMatrix[i - 1] || [])[col];
-                    if (td) {
-                        td.rowSpan = (td.rowSpan || 1) + 1;
-                    }
-                    else {
-                        td = document.createElement('td');
-                        tr.appendChild(td);
-                    }
-                    cellMatrix[i][col] = td;
-                    loneCellMatrix[i][col] = td;
-                    col++;
-                }
-            }
-            for (i = 0; i < levelCnt; i++) { // iterate through all levels
-                levelSegs = segLevels[i];
-                col = 0;
-                tr = document.createElement('tr');
-                segMatrix.push([]);
-                cellMatrix.push([]);
-                loneCellMatrix.push([]);
-                // levelCnt might be 1 even though there are no actual levels. protect against this.
-                // this single empty row is useful for styling.
-                if (levelSegs) {
-                    for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
-                        seg = levelSegs[j];
-                        var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
-                        var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
-                        emptyCellsUntil(leftCol);
-                        // create a container that occupies or more columns. append the event element.
-                        td = core.createElement('td', { className: 'fc-event-container' }, seg.el);
-                        if (leftCol !== rightCol) {
-                            td.colSpan = rightCol - leftCol + 1;
-                        }
-                        else { // a single-column segment
-                            loneCellMatrix[i][col] = td;
-                        }
-                        while (col <= rightCol) {
-                            cellMatrix[i][col] = td;
-                            segMatrix[i][col] = seg;
-                            col++;
-                        }
-                        tr.appendChild(td);
-                    }
-                }
-                emptyCellsUntil(colCnt); // finish off the row
-                var introHtml = dayGrid.renderProps.renderIntroHtml();
-                if (introHtml) {
-                    if (isRtl) {
-                        core.appendToElement(tr, introHtml);
-                    }
-                    else {
-                        core.prependToElement(tr, introHtml);
-                    }
-                }
-                tbody.appendChild(tr);
-            }
-            return {
-                row: row,
-                tbodyEl: tbody,
-                cellMatrix: cellMatrix,
-                segMatrix: segMatrix,
-                segLevels: segLevels,
-                segs: rowSegs
-            };
-        };
-        // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.
-        // NOTE: modifies segs
-        DayGridEventRenderer.prototype.buildSegLevels = function (segs) {
-            var isRtl = this.context.isRtl;
-            var colCnt = this.dayGrid.colCnt;
-            var levels = [];
-            var i;
-            var seg;
-            var j;
-            // Give preference to elements with certain criteria, so they have
-            // a chance to be closer to the top.
-            segs = this.sortEventSegs(segs);
-            for (i = 0; i < segs.length; i++) {
-                seg = segs[i];
-                // loop through levels, starting with the topmost, until the segment doesn't collide with other segments
-                for (j = 0; j < levels.length; j++) {
-                    if (!isDaySegCollision(seg, levels[j])) {
-                        break;
-                    }
-                }
-                // `j` now holds the desired subrow index
-                seg.level = j;
-                seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only
-                seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only
-                ;
-                (levels[j] || (levels[j] = [])).push(seg);
-            }
-            // order segments left-to-right. very important if calendar is RTL
-            for (j = 0; j < levels.length; j++) {
-                levels[j].sort(compareDaySegCols);
-            }
-            return levels;
-        };
-        // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row
-        DayGridEventRenderer.prototype.groupSegRows = function (segs) {
-            var segRows = [];
-            var i;
-            for (i = 0; i < this.dayGrid.rowCnt; i++) {
-                segRows.push([]);
-            }
-            for (i = 0; i < segs.length; i++) {
-                segRows[segs[i].row].push(segs[i]);
-            }
-            return segRows;
-        };
-        // Computes a default `displayEventEnd` value if one is not expliclty defined
-        DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
-            return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day
-        };
-        return DayGridEventRenderer;
-    }(SimpleDayGridEventRenderer));
-    // Computes whether two segments' columns collide. They are assumed to be in the same row.
-    function isDaySegCollision(seg, otherSegs) {
-        var i;
-        var otherSeg;
-        for (i = 0; i < otherSegs.length; i++) {
-            otherSeg = otherSegs[i];
-            if (otherSeg.firstCol <= seg.lastCol &&
-                otherSeg.lastCol >= seg.firstCol) {
-                return true;
-            }
-        }
-        return false;
-    }
-    // A cmp function for determining the leftmost event
-    function compareDaySegCols(a, b) {
-        return a.leftCol - b.leftCol;
-    }
-
-    var DayGridMirrorRenderer = /** @class */ (function (_super) {
-        __extends(DayGridMirrorRenderer, _super);
-        function DayGridMirrorRenderer() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-            var sourceSeg = mirrorInfo.sourceSeg;
-            var rowStructs = this.rowStructs = this.renderSegRows(segs);
-            // inject each new event skeleton into each associated row
-            this.dayGrid.rowEls.forEach(function (rowNode, row) {
-                var skeletonEl = core.htmlToElement('<div class="fc-mirror-skeleton"><table></table></div>'); // will be absolutely positioned
-                var skeletonTopEl;
-                var skeletonTop;
-                // If there is an original segment, match the top position. Otherwise, put it at the row's top level
-                if (sourceSeg && sourceSeg.row === row) {
-                    skeletonTopEl = sourceSeg.el;
-                }
-                else {
-                    skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody');
-                    if (!skeletonTopEl) { // when no events
-                        skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table');
-                    }
-                }
-                skeletonTop = skeletonTopEl.getBoundingClientRect().top -
-                    rowNode.getBoundingClientRect().top; // the offsetParent origin
-                skeletonEl.style.top = skeletonTop + 'px';
-                skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl);
-                rowNode.appendChild(skeletonEl);
-            });
-        };
-        return DayGridMirrorRenderer;
-    }(DayGridEventRenderer));
-
-    var EMPTY_CELL_HTML = '<td style="pointer-events:none"></td>';
-    var DayGridFillRenderer = /** @class */ (function (_super) {
-        __extends(DayGridFillRenderer, _super);
-        function DayGridFillRenderer(dayGrid) {
-            var _this = _super.call(this) || this;
-            _this.fillSegTag = 'td'; // override the default tag name
-            _this.dayGrid = dayGrid;
-            return _this;
-        }
-        DayGridFillRenderer.prototype.renderSegs = function (type, context, segs) {
-            // don't render timed background events
-            if (type === 'bgEvent') {
-                segs = segs.filter(function (seg) {
-                    return seg.eventRange.def.allDay;
-                });
-            }
-            _super.prototype.renderSegs.call(this, type, context, segs);
-        };
-        DayGridFillRenderer.prototype.attachSegs = function (type, segs) {
-            var els = [];
-            var i;
-            var seg;
-            var skeletonEl;
-            for (i = 0; i < segs.length; i++) {
-                seg = segs[i];
-                skeletonEl = this.renderFillRow(type, seg);
-                this.dayGrid.rowEls[seg.row].appendChild(skeletonEl);
-                els.push(skeletonEl);
-            }
-            return els;
-        };
-        // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.
-        DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {
-            var dayGrid = this.dayGrid;
-            var isRtl = this.context.isRtl;
-            var colCnt = dayGrid.colCnt;
-            var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
-            var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
-            var startCol = leftCol;
-            var endCol = rightCol + 1;
-            var className;
-            var skeletonEl;
-            var trEl;
-            if (type === 'businessHours') {
-                className = 'bgevent';
-            }
-            else {
-                className = type.toLowerCase();
-            }
-            skeletonEl = core.htmlToElement('<div class="fc-' + className + '-skeleton">' +
-                '<table><tr></tr></table>' +
-                '</div>');
-            trEl = skeletonEl.getElementsByTagName('tr')[0];
-            if (startCol > 0) {
-                core.appendToElement(trEl, 
-                // will create (startCol + 1) td's
-                new Array(startCol + 1).join(EMPTY_CELL_HTML));
-            }
-            seg.el.colSpan = endCol - startCol;
-            trEl.appendChild(seg.el);
-            if (endCol < colCnt) {
-                core.appendToElement(trEl, 
-                // will create (colCnt - endCol) td's
-                new Array(colCnt - endCol + 1).join(EMPTY_CELL_HTML));
-            }
-            var introHtml = dayGrid.renderProps.renderIntroHtml();
-            if (introHtml) {
-                if (isRtl) {
-                    core.appendToElement(trEl, introHtml);
-                }
-                else {
-                    core.prependToElement(trEl, introHtml);
-                }
-            }
-            return skeletonEl;
-        };
-        return DayGridFillRenderer;
-    }(core.FillRenderer));
-
-    var DayTile = /** @class */ (function (_super) {
-        __extends(DayTile, _super);
-        function DayTile(el) {
-            var _this = _super.call(this, el) || this;
-            var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this);
-            var renderFrame = _this.renderFrame = core.memoizeRendering(_this._renderFrame);
-            _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]);
-            _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
-            _this.renderEventDrag = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
-            _this.renderEventResize = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
-            return _this;
-        }
-        DayTile.prototype.firstContext = function (context) {
-            context.calendar.registerInteractiveComponent(this, {
-                el: this.el,
-                useEventCenter: false
-            });
-        };
-        DayTile.prototype.render = function (props, context) {
-            this.renderFrame(props.date);
-            this.renderFgEvents(context, props.fgSegs);
-            this.renderEventSelection(props.eventSelection);
-            this.renderEventDrag(props.eventDragInstances);
-            this.renderEventResize(props.eventResizeInstances);
-        };
-        DayTile.prototype.destroy = function () {
-            _super.prototype.destroy.call(this);
-            this.renderFrame.unrender(); // should unrender everything else
-            this.context.calendar.unregisterInteractiveComponent(this);
-        };
-        DayTile.prototype._renderFrame = function (date) {
-            var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
-            var title = dateEnv.format(date, core.createFormatter(options.dayPopoverFormat) // TODO: cache
-            );
-            this.el.innerHTML =
-                '<div class="fc-header ' + theme.getClass('popoverHeader') + '">' +
-                    '<span class="fc-title">' +
-                    core.htmlEscape(title) +
-                    '</span>' +
-                    '<span class="fc-close ' + theme.getIconClass('close') + '"></span>' +
-                    '</div>' +
-                    '<div class="fc-body ' + theme.getClass('popoverContent') + '">' +
-                    '<div class="fc-event-container"></div>' +
-                    '</div>';
-            this.segContainerEl = this.el.querySelector('.fc-event-container');
-        };
-        DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
-            var date = this.props.date; // HACK
-            if (positionLeft < elWidth && positionTop < elHeight) {
-                return {
-                    component: this,
-                    dateSpan: {
-                        allDay: true,
-                        range: { start: date, end: core.addDays(date, 1) }
-                    },
-                    dayEl: this.el,
-                    rect: {
-                        left: 0,
-                        top: 0,
-                        right: elWidth,
-                        bottom: elHeight
-                    },
-                    layer: 1
-                };
-            }
-        };
-        return DayTile;
-    }(core.DateComponent));
-    var DayTileEventRenderer = /** @class */ (function (_super) {
-        __extends(DayTileEventRenderer, _super);
-        function DayTileEventRenderer(dayTile) {
-            var _this = _super.call(this) || this;
-            _this.dayTile = dayTile;
-            return _this;
-        }
-        DayTileEventRenderer.prototype.attachSegs = function (segs) {
-            for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
-                var seg = segs_1[_i];
-                this.dayTile.segContainerEl.appendChild(seg.el);
-            }
-        };
-        DayTileEventRenderer.prototype.detachSegs = function (segs) {
-            for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
-                var seg = segs_2[_i];
-                core.removeElement(seg.el);
-            }
-        };
-        return DayTileEventRenderer;
-    }(SimpleDayGridEventRenderer));
-
-    var DayBgRow = /** @class */ (function () {
-        function DayBgRow(context) {
-            this.context = context;
-        }
-        DayBgRow.prototype.renderHtml = function (props) {
-            var parts = [];
-            if (props.renderIntroHtml) {
-                parts.push(props.renderIntroHtml());
-            }
-            for (var _i = 0, _a = props.cells; _i < _a.length; _i++) {
-                var cell = _a[_i];
-                parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs));
-            }
-            if (!props.cells.length) {
-                parts.push('<td class="fc-day ' + this.context.theme.getClass('widgetContent') + '"></td>');
-            }
-            if (this.context.options.dir === 'rtl') {
-                parts.reverse();
-            }
-            return '<tr>' + parts.join('') + '</tr>';
-        };
-        return DayBgRow;
-    }());
-    function renderCellHtml(date, dateProfile, context, otherAttrs) {
-        var dateEnv = context.dateEnv, theme = context.theme;
-        var isDateValid = core.rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
-        var classes = core.getDayClasses(date, dateProfile, context);
-        classes.unshift('fc-day', theme.getClass('widgetContent'));
-        return '<td class="' + classes.join(' ') + '"' +
-            (isDateValid ?
-                ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
-                '') +
-            (otherAttrs ?
-                ' ' + otherAttrs :
-                '') +
-            '></td>';
-    }
-
-    var DAY_NUM_FORMAT = core.createFormatter({ day: 'numeric' });
-    var WEEK_NUM_FORMAT = core.createFormatter({ week: 'numeric' });
-    var DayGrid = /** @class */ (function (_super) {
-        __extends(DayGrid, _super);
-        function DayGrid(el, renderProps) {
-            var _this = _super.call(this, el) || this;
-            _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid
-            _this.isCellSizesDirty = false;
-            _this.renderProps = renderProps;
-            var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this);
-            var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this);
-            _this.mirrorRenderer = new DayGridMirrorRenderer(_this);
-            var renderCells = _this.renderCells = core.memoizeRendering(_this._renderCells, _this._unrenderCells);
-            _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]);
-            _this.renderDateSelection = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]);
-            _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]);
-            _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]);
-            _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
-            _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]);
-            _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]);
-            return _this;
-        }
-        DayGrid.prototype.render = function (props, context) {
-            var cells = props.cells;
-            this.rowCnt = cells.length;
-            this.colCnt = cells[0].length;
-            this.renderCells(cells, props.isRigid);
-            this.renderBusinessHours(context, props.businessHourSegs);
-            this.renderDateSelection(context, props.dateSelectionSegs);
-            this.renderBgEvents(context, props.bgEventSegs);
-            this.renderFgEvents(context, props.fgEventSegs);
-            this.renderEventSelection(props.eventSelection);
-            this.renderEventDrag(props.eventDrag);
-            this.renderEventResize(props.eventResize);
-            if (this.segPopoverTile) {
-                this.updateSegPopoverTile();
-            }
-        };
-        DayGrid.prototype.destroy = function () {
-            _super.prototype.destroy.call(this);
-            this.renderCells.unrender(); // will unrender everything else
-        };
-        DayGrid.prototype.getCellRange = function (row, col) {
-            var start = this.props.cells[row][col].date;
-            var end = core.addDays(start, 1);
-            return { start: start, end: end };
-        };
-        DayGrid.prototype.updateSegPopoverTile = function (date, segs) {
-            var ownProps = this.props;
-            this.segPopoverTile.receiveProps({
-                date: date || this.segPopoverTile.props.date,
-                fgSegs: segs || this.segPopoverTile.props.fgSegs,
-                eventSelection: ownProps.eventSelection,
-                eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null,
-                eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null
-            }, this.context);
-        };
-        /* Date Rendering
-        ------------------------------------------------------------------------------------------------------------------*/
-        DayGrid.prototype._renderCells = function (cells, isRigid) {
-            var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, dateEnv = _a.dateEnv;
-            var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt;
-            var html = '';
-            var row;
-            var col;
-            for (row = 0; row < rowCnt; row++) {
-                html += this.renderDayRowHtml(row, isRigid);
-            }
-            this.el.innerHTML = html;
-            this.rowEls = core.findElements(this.el, '.fc-row');
-            this.cellEls = core.findElements(this.el, '.fc-day, .fc-disabled-day');
-            if (isRtl) {
-                this.cellEls.reverse();
-            }
-            this.rowPositions = new core.PositionCache(this.el, this.rowEls, false, true // vertical
-            );
-            this.colPositions = new core.PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row
-            true, false // horizontal
-            );
-            // trigger dayRender with each cell's element
-            for (row = 0; row < rowCnt; row++) {
-                for (col = 0; col < colCnt; col++) {
-                    calendar.publiclyTrigger('dayRender', [
-                        {
-                            date: dateEnv.toDate(cells[row][col].date),
-                            el: this.getCellEl(row, col),
-                            view: view
-                        }
-                    ]);
-                }
-            }
-            this.isCellSizesDirty = true;
-        };
-        DayGrid.prototype._unrenderCells = function () {
-            this.removeSegPopover();
-        };
-        // Generates the HTML for a single row, which is a div that wraps a table.
-        // `row` is the row number.
-        DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {
-            var theme = this.context.theme;
-            var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];
-            if (isRigid) {
-                classes.push('fc-rigid');
-            }
-            var bgRow = new DayBgRow(this.context);
-            return '' +
-                '<div class="' + classes.join(' ') + '">' +
-                '<div class="fc-bg">' +
-                '<table class="' + theme.getClass('tableGrid') + '">' +
-                bgRow.renderHtml({
-                    cells: this.props.cells[row],
-                    dateProfile: this.props.dateProfile,
-                    renderIntroHtml: this.renderProps.renderBgIntroHtml
-                }) +
-                '</table>' +
-                '</div>' +
-                '<div class="fc-content-skeleton">' +
-                '<table>' +
-                (this.getIsNumbersVisible() ?
-                    '<thead>' +
-                        this.renderNumberTrHtml(row) +
-                        '</thead>' :
-                    '') +
-                '</table>' +
-                '</div>' +
-                '</div>';
-        };
-        DayGrid.prototype.getIsNumbersVisible = function () {
-            return this.getIsDayNumbersVisible() ||
-                this.renderProps.cellWeekNumbersVisible ||
-                this.renderProps.colWeekNumbersVisible;
-        };
-        DayGrid.prototype.getIsDayNumbersVisible = function () {
-            return this.rowCnt > 1;
-        };
-        /* Grid Number Rendering
-        ------------------------------------------------------------------------------------------------------------------*/
-        DayGrid.prototype.renderNumberTrHtml = function (row) {
-            var isRtl = this.context.isRtl;
-            var intro = this.renderProps.renderNumberIntroHtml(row, this);
-            return '' +
-                '<tr>' +
-                (isRtl ? '' : intro) +
-                this.renderNumberCellsHtml(row) +
-                (isRtl ? intro : '') +
-                '</tr>';
-        };
-        DayGrid.prototype.renderNumberCellsHtml = function (row) {
-            var htmls = [];
-            var col;
-            var date;
-            for (col = 0; col < this.colCnt; col++) {
-                date = this.props.cells[row][col].date;
-                htmls.push(this.renderNumberCellHtml(date));
-            }
-            if (this.context.isRtl) {
-                htmls.reverse();
-            }
-            return htmls.join('');
-        };
-        // Generates the HTML for the <td>s of the "number" row in the DayGrid's content skeleton.
-        // The number row will only exist if either day numbers or week numbers are turned on.
-        DayGrid.prototype.renderNumberCellHtml = function (date) {
-            var _a = this.context, dateEnv = _a.dateEnv, options = _a.options;
-            var html = '';
-            var isDateValid = core.rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
-            var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;
-            var classes;
-            var weekCalcFirstDow;
-            if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) {
-                // no numbers in day cell (week number must be along the side)
-                return '<td></td>'; //  will create an empty space above events :(
-            }
-            classes = core.getDayClasses(date, this.props.dateProfile, this.context);
-            classes.unshift('fc-day-top');
-            if (this.renderProps.cellWeekNumbersVisible) {
-                weekCalcFirstDow = dateEnv.weekDow;
-            }
-            html += '<td class="' + classes.join(' ') + '"' +
-                (isDateValid ?
-                    ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
-                    '') +
-                '>';
-            if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) {
-                html += core.buildGotoAnchorHtml(options, dateEnv, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML
-                );
-            }
-            if (isDayNumberVisible) {
-                html += core.buildGotoAnchorHtml(options, dateEnv, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML
-                );
-            }
-            html += '</td>';
-            return html;
-        };
-        /* Sizing
-        ------------------------------------------------------------------------------------------------------------------*/
-        DayGrid.prototype.updateSize = function (isResize) {
-            var calendar = this.context.calendar;
-            var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
-            if (isResize ||
-                this.isCellSizesDirty ||
-                calendar.isEventsUpdated // hack
-            ) {
-                this.buildPositionCaches();
-                this.isCellSizesDirty = false;
-            }
-            fillRenderer.computeSizes(isResize);
-            eventRenderer.computeSizes(isResize);
-            mirrorRenderer.computeSizes(isResize);
-            fillRenderer.assignSizes(isResize);
-            eventRenderer.assignSizes(isResize);
-            mirrorRenderer.assignSizes(isResize);
-        };
-        DayGrid.prototype.buildPositionCaches = function () {
-            this.buildColPositions();
-            this.buildRowPositions();
-        };
-        DayGrid.prototype.buildColPositions = function () {
-            this.colPositions.build();
-        };
-        DayGrid.prototype.buildRowPositions = function () {
-            this.rowPositions.build();
-            this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack
-        };
-        /* Hit System
-        ------------------------------------------------------------------------------------------------------------------*/
-        DayGrid.prototype.positionToHit = function (leftPosition, topPosition) {
-            var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;
-            var col = colPositions.leftToIndex(leftPosition);
-            var row = rowPositions.topToIndex(topPosition);
-            if (row != null && col != null) {
-                return {
-                    row: row,
-                    col: col,
-                    dateSpan: {
-                        range: this.getCellRange(row, col),
-                        allDay: true
-                    },
-                    dayEl: this.getCellEl(row, col),
-                    relativeRect: {
-                        left: colPositions.lefts[col],
-                        right: colPositions.rights[col],
-                        top: rowPositions.tops[row],
-                        bottom: rowPositions.bottoms[row]
-                    }
-                };
-            }
-        };
-        /* Cell System
-        ------------------------------------------------------------------------------------------------------------------*/
-        // FYI: the first column is the leftmost column, regardless of date
-        DayGrid.prototype.getCellEl = function (row, col) {
-            return this.cellEls[row * this.colCnt + col];
-        };
-        /* Event Drag Visualization
-        ------------------------------------------------------------------------------------------------------------------*/
-        DayGrid.prototype._renderEventDrag = function (state) {
-            if (state) {
-                this.eventRenderer.hideByHash(state.affectedInstances);
-                this.fillRenderer.renderSegs('highlight', this.context, state.segs);
-            }
-        };
-        DayGrid.prototype._unrenderEventDrag = function (state) {
-            if (state) {
-                this.eventRenderer.showByHash(state.affectedInstances);
-                this.fillRenderer.unrender('highlight', this.context);
-            }
-        };
-        /* Event Resize Visualization
-        ------------------------------------------------------------------------------------------------------------------*/
-        DayGrid.prototype._renderEventResize = function (state) {
-            if (state) {
-                this.eventRenderer.hideByHash(state.affectedInstances);
-                this.fillRenderer.renderSegs('highlight', this.context, state.segs);
-                this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-            }
-        };
-        DayGrid.prototype._unrenderEventResize = function (state) {
-            if (state) {
-                this.eventRenderer.showByHash(state.affectedInstances);
-                this.fillRenderer.unrender('highlight', this.context);
-                this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-            }
-        };
-        /* More+ Link Popover
-        ------------------------------------------------------------------------------------------------------------------*/
-        DayGrid.prototype.removeSegPopover = function () {
-            if (this.segPopover) {
-                this.segPopover.hide(); // in handler, will call segPopover's removeElement
-            }
-        };
-        // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid.
-        // `levelLimit` can be false (don't limit), a number, or true (should be computed).
-        DayGrid.prototype.limitRows = function (levelLimit) {
-            var rowStructs = this.eventRenderer.rowStructs || [];
-            var row; // row #
-            var rowLevelLimit;
-            for (row = 0; row < rowStructs.length; row++) {
-                this.unlimitRow(row);
-                if (!levelLimit) {
-                    rowLevelLimit = false;
-                }
-                else if (typeof levelLimit === 'number') {
-                    rowLevelLimit = levelLimit;
-                }
-                else {
-                    rowLevelLimit = this.computeRowLevelLimit(row);
-                }
-                if (rowLevelLimit !== false) {
-                    this.limitRow(row, rowLevelLimit);
-                }
-            }
-        };
-        // Computes the number of levels a row will accomodate without going outside its bounds.
-        // Assumes the row is "rigid" (maintains a constant height regardless of what is inside).
-        // `row` is the row number.
-        DayGrid.prototype.computeRowLevelLimit = function (row) {
-            var rowEl = this.rowEls[row]; // the containing "fake" row div
-            var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport!
-            var trEls = core.findChildren(this.eventRenderer.rowStructs[row].tbodyEl);
-            var i;
-            var trEl;
-            // Reveal one level <tr> at a time and stop when we find one out of bounds
-            for (i = 0; i < trEls.length; i++) {
-                trEl = trEls[i];
-                trEl.classList.remove('fc-limited'); // reset to original state (reveal)
-                if (trEl.getBoundingClientRect().bottom > rowBottom) {
-                    return i;
-                }
-            }
-            return false; // should not limit at all
-        };
-        // Limits the given grid row to the maximum number of levels and injects "more" links if necessary.
-        // `row` is the row number.
-        // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.
-        DayGrid.prototype.limitRow = function (row, levelLimit) {
-            var _this = this;
-            var colCnt = this.colCnt;
-            var isRtl = this.context.isRtl;
-            var rowStruct = this.eventRenderer.rowStructs[row];
-            var moreNodes = []; // array of "more" <a> links and <td> DOM nodes
-            var col = 0; // col #, left-to-right (not chronologically)
-            var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right
-            var cellMatrix; // a matrix (by level, then column) of all <td> elements in the row
-            var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes
-            var i;
-            var seg;
-            var segsBelow; // array of segment objects below `seg` in the current `col`
-            var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies
-            var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)
-            var td;
-            var rowSpan;
-            var segMoreNodes; // array of "more" <td> cells that will stand-in for the current seg's cell
-            var j;
-            var moreTd;
-            var moreWrap;
-            var moreLink;
-            // Iterates through empty level cells and places "more" links inside if need be
-            var emptyCellsUntil = function (endCol) {
-                while (col < endCol) {
-                    segsBelow = _this.getCellSegs(row, col, levelLimit);
-                    if (segsBelow.length) {
-                        td = cellMatrix[levelLimit - 1][col];
-                        moreLink = _this.renderMoreLink(row, col, segsBelow);
-                        moreWrap = core.createElement('div', null, moreLink);
-                        td.appendChild(moreWrap);
-                        moreNodes.push(moreWrap);
-                    }
-                    col++;
-                }
-            };
-            if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?
-                levelSegs = rowStruct.segLevels[levelLimit - 1];
-                cellMatrix = rowStruct.cellMatrix;
-                limitedNodes = core.findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level <tr> elements past the limit
-                limitedNodes.forEach(function (node) {
-                    node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array
-                });
-                // iterate though segments in the last allowable level
-                for (i = 0; i < levelSegs.length; i++) {
-                    seg = levelSegs[i];
-                    var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
-                    var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
-                    emptyCellsUntil(leftCol); // process empty cells before the segment
-                    // determine *all* segments below `seg` that occupy the same columns
-                    colSegsBelow = [];
-                    totalSegsBelow = 0;
-                    while (col <= rightCol) {
-                        segsBelow = this.getCellSegs(row, col, levelLimit);
-                        colSegsBelow.push(segsBelow);
-                        totalSegsBelow += segsBelow.length;
-                        col++;
-                    }
-                    if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
-                        td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell
-                        rowSpan = td.rowSpan || 1;
-                        segMoreNodes = [];
-                        // make a replacement <td> for each column the segment occupies. will be one for each colspan
-                        for (j = 0; j < colSegsBelow.length; j++) {
-                            moreTd = core.createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan });
-                            segsBelow = colSegsBelow[j];
-                            moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too
-                            );
-                            moreWrap = core.createElement('div', null, moreLink);
-                            moreTd.appendChild(moreWrap);
-                            segMoreNodes.push(moreTd);
-                            moreNodes.push(moreTd);
-                        }
-                        td.classList.add('fc-limited');
-                        core.insertAfterElement(td, segMoreNodes);
-                        limitedNodes.push(td);
-                    }
-                }
-                emptyCellsUntil(this.colCnt); // finish off the level
-                rowStruct.moreEls = moreNodes; // for easy undoing later
-                rowStruct.limitedEls = limitedNodes; // for easy undoing later
-            }
-        };
-        // Reveals all levels and removes all "more"-related elements for a grid's row.
-        // `row` is a row number.
-        DayGrid.prototype.unlimitRow = function (row) {
-            var rowStruct = this.eventRenderer.rowStructs[row];
-            if (rowStruct.moreEls) {
-                rowStruct.moreEls.forEach(core.removeElement);
-                rowStruct.moreEls = null;
-            }
-            if (rowStruct.limitedEls) {
-                rowStruct.limitedEls.forEach(function (limitedEl) {
-                    limitedEl.classList.remove('fc-limited');
-                });
-                rowStruct.limitedEls = null;
-            }
-        };
-        // Renders an <a> element that represents hidden event element for a cell.
-        // Responsible for attaching click handler as well.
-        DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {
-            var _this = this;
-            var _a = this.context, calendar = _a.calendar, view = _a.view, dateEnv = _a.dateEnv, options = _a.options, isRtl = _a.isRtl;
-            var a = core.createElement('a', { className: 'fc-more' });
-            a.innerText = this.getMoreLinkText(hiddenSegs.length);
-            a.addEventListener('click', function (ev) {
-                var clickOption = options.eventLimitClick;
-                var _col = isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
-                var date = _this.props.cells[row][_col].date;
-                var moreEl = ev.currentTarget;
-                var dayEl = _this.getCellEl(row, col);
-                var allSegs = _this.getCellSegs(row, col);
-                // rescope the segments to be within the cell's date
-                var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);
-                var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);
-                if (typeof clickOption === 'function') {
-                    // the returned value can be an atomic option
-                    clickOption = calendar.publiclyTrigger('eventLimitClick', [
-                        {
-                            date: dateEnv.toDate(date),
-                            allDay: true,
-                            dayEl: dayEl,
-                            moreEl: moreEl,
-                            segs: reslicedAllSegs,
-                            hiddenSegs: reslicedHiddenSegs,
-                            jsEvent: ev,
-                            view: view
-                        }
-                    ]);
-                }
-                if (clickOption === 'popover') {
-                    _this.showSegPopover(row, col, moreEl, reslicedAllSegs);
-                }
-                else if (typeof clickOption === 'string') { // a view name
-                    calendar.zoomTo(date, clickOption);
-                }
-            });
-            return a;
-        };
-        // Reveals the popover that displays all events within a cell
-        DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {
-            var _this = this;
-            var _a = this.context, calendar = _a.calendar, view = _a.view, theme = _a.theme, isRtl = _a.isRtl;
-            var _col = isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
-            var moreWrap = moreLink.parentNode; // the <div> wrapper around the <a>
-            var topEl; // the element we want to match the top coordinate of
-            var options;
-            if (this.rowCnt === 1) {
-                topEl = view.el; // will cause the popover to cover any sort of header
-            }
-            else {
-                topEl = this.rowEls[row]; // will align with top of row
-            }
-            options = {
-                className: 'fc-more-popover ' + theme.getClass('popover'),
-                parentEl: view.el,
-                top: core.computeRect(topEl).top,
-                autoHide: true,
-                content: function (el) {
-                    _this.segPopoverTile = new DayTile(el);
-                    _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs);
-                },
-                hide: function () {
-                    _this.segPopoverTile.destroy();
-                    _this.segPopoverTile = null;
-                    _this.segPopover.destroy();
-                    _this.segPopover = null;
-                }
-            };
-            // Determine horizontal coordinate.
-            // We use the moreWrap instead of the <td> to avoid border confusion.
-            if (isRtl) {
-                options.right = core.computeRect(moreWrap).right + 1; // +1 to be over cell border
-            }
-            else {
-                options.left = core.computeRect(moreWrap).left - 1; // -1 to be over cell border
-            }
-            this.segPopover = new Popover(options);
-            this.segPopover.show();
-            calendar.releaseAfterSizingTriggers(); // hack for eventPositioned
-        };
-        // Given the events within an array of segment objects, reslice them to be in a single day
-        DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {
-            var dayStart = dayDate;
-            var dayEnd = core.addDays(dayStart, 1);
-            var dayRange = { start: dayStart, end: dayEnd };
-            var newSegs = [];
-            for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
-                var seg = segs_1[_i];
-                var eventRange = seg.eventRange;
-                var origRange = eventRange.range;
-                var slicedRange = core.intersectRanges(origRange, dayRange);
-                if (slicedRange) {
-                    newSegs.push(__assign({}, seg, { eventRange: {
-                            def: eventRange.def,
-                            ui: __assign({}, eventRange.ui, { durationEditable: false }),
-                            instance: eventRange.instance,
-                            range: slicedRange
-                        }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() }));
-                }
-            }
-            return newSegs;
-        };
-        // Generates the text that should be inside a "more" link, given the number of events it represents
-        DayGrid.prototype.getMoreLinkText = function (num) {
-            var opt = this.context.options.eventLimitText;
-            if (typeof opt === 'function') {
-                return opt(num);
-            }
-            else {
-                return '+' + num + ' ' + opt;
-            }
-        };
-        // Returns segments within a given cell.
-        // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.
-        DayGrid.prototype.getCellSegs = function (row, col, startLevel) {
-            var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;
-            var level = startLevel || 0;
-            var segs = [];
-            var seg;
-            while (level < segMatrix.length) {
-                seg = segMatrix[level][col];
-                if (seg) {
-                    segs.push(seg);
-                }
-                level++;
-            }
-            return segs;
-        };
-        return DayGrid;
-    }(core.DateComponent));
-
-    var WEEK_NUM_FORMAT$1 = core.createFormatter({ week: 'numeric' });
-    /* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
-    ----------------------------------------------------------------------------------------------------------------------*/
-    // It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.
-    // It is responsible for managing width/height.
-    var AbstractDayGridView = /** @class */ (function (_super) {
-        __extends(AbstractDayGridView, _super);
-        function AbstractDayGridView() {
-            var _this = _super !== null && _super.apply(this, arguments) || this;
-            _this.processOptions = core.memoize(_this._processOptions);
-            _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
-            /* Header Rendering
-            ------------------------------------------------------------------------------------------------------------------*/
-            // Generates the HTML that will go before the day-of week header cells
-            _this.renderHeadIntroHtml = function () {
-                var _a = _this.context, theme = _a.theme, options = _a.options;
-                if (_this.colWeekNumbersVisible) {
-                    return '' +
-                        '<th class="fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.weekNumberStyleAttr() + '>' +
-                        '<span>' + // needed for matchCellWidths
-                        core.htmlEscape(options.weekLabel) +
-                        '</span>' +
-                        '</th>';
-                }
-                return '';
-            };
-            /* Day Grid Rendering
-            ------------------------------------------------------------------------------------------------------------------*/
-            // Generates the HTML that will go before content-skeleton cells that display the day/week numbers
-            _this.renderDayGridNumberIntroHtml = function (row, dayGrid) {
-                var _a = _this.context, options = _a.options, dateEnv = _a.dateEnv;
-                var weekStart = dayGrid.props.cells[row][0].date;
-                if (_this.colWeekNumbersVisible) {
-                    return '' +
-                        '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '>' +
-                        core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
-                        options, dateEnv, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML
-                        ) +
-                        '</td>';
-                }
-                return '';
-            };
-            // Generates the HTML that goes before the day bg cells for each day-row
-            _this.renderDayGridBgIntroHtml = function () {
-                var theme = _this.context.theme;
-                if (_this.colWeekNumbersVisible) {
-                    return '<td class="fc-week-number ' + theme.getClass('widgetContent') + '" ' + _this.weekNumberStyleAttr() + '></td>';
-                }
-                return '';
-            };
-            // Generates the HTML that goes before every other type of row generated by DayGrid.
-            // Affects mirror-skeleton and highlight-skeleton rows.
-            _this.renderDayGridIntroHtml = function () {
-                if (_this.colWeekNumbersVisible) {
-                    return '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '></td>';
-                }
-                return '';
-            };
-            return _this;
-        }
-        AbstractDayGridView.prototype._processOptions = function (options) {
-            if (options.weekNumbers) {
-                if (options.weekNumbersWithinDays) {
-                    this.cellWeekNumbersVisible = true;
-                    this.colWeekNumbersVisible = false;
-                }
-                else {
-                    this.cellWeekNumbersVisible = false;
-                    this.colWeekNumbersVisible = true;
-                }
-            }
-            else {
-                this.colWeekNumbersVisible = false;
-                this.cellWeekNumbersVisible = false;
-            }
-        };
-        AbstractDayGridView.prototype.render = function (props, context) {
-            _super.prototype.render.call(this, props, context);
-            this.processOptions(context.options);
-            this.renderSkeleton(context);
-        };
-        AbstractDayGridView.prototype.destroy = function () {
-            _super.prototype.destroy.call(this);
-            this.renderSkeleton.unrender();
-        };
-        AbstractDayGridView.prototype._renderSkeleton = function (context) {
-            this.el.classList.add('fc-dayGrid-view');
-            this.el.innerHTML = this.renderSkeletonHtml();
-            this.scroller = new core.ScrollComponent('hidden', // overflow x
-            'auto' // overflow y
-            );
-            var dayGridContainerEl = this.scroller.el;
-            this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl);
-            dayGridContainerEl.classList.add('fc-day-grid-container');
-            var dayGridEl = core.createElement('div', { className: 'fc-day-grid' });
-            dayGridContainerEl.appendChild(dayGridEl);
-            this.dayGrid = new DayGrid(dayGridEl, {
-                renderNumberIntroHtml: this.renderDayGridNumberIntroHtml,
-                renderBgIntroHtml: this.renderDayGridBgIntroHtml,
-                renderIntroHtml: this.renderDayGridIntroHtml,
-                colWeekNumbersVisible: this.colWeekNumbersVisible,
-                cellWeekNumbersVisible: this.cellWeekNumbersVisible
-            });
-        };
-        AbstractDayGridView.prototype._unrenderSkeleton = function () {
-            this.el.classList.remove('fc-dayGrid-view');
-            this.dayGrid.destroy();
-            this.scroller.destroy();
-        };
-        // Builds the HTML skeleton for the view.
-        // The day-grid component will render inside of a container defined by this HTML.
-        AbstractDayGridView.prototype.renderSkeletonHtml = function () {
-            var _a = this.context, theme = _a.theme, options = _a.options;
-            return '' +
-                '<table class="' + theme.getClass('tableGrid') + '">' +
-                (options.columnHeader ?
-                    '<thead class="fc-head">' +
-                        '<tr>' +
-                        '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
-                        '</tr>' +
-                        '</thead>' :
-                    '') +
-                '<tbody class="fc-body">' +
-                '<tr>' +
-                '<td class="' + theme.getClass('widgetContent') + '"></td>' +
-                '</tr>' +
-                '</tbody>' +
-                '</table>';
-        };
-        // Generates an HTML attribute string for setting the width of the week number column, if it is known
-        AbstractDayGridView.prototype.weekNumberStyleAttr = function () {
-            if (this.weekNumberWidth != null) {
-                return 'style="width:' + this.weekNumberWidth + 'px"';
-            }
-            return '';
-        };
-        // Determines whether each row should have a constant height
-        AbstractDayGridView.prototype.hasRigidRows = function () {
-            var eventLimit = this.context.options.eventLimit;
-            return eventLimit && typeof eventLimit !== 'number';
-        };
-        /* Dimensions
-        ------------------------------------------------------------------------------------------------------------------*/
-        AbstractDayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
-            _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
-            this.dayGrid.updateSize(isResize);
-        };
-        // Refreshes the horizontal dimensions of the view
-        AbstractDayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
-            var dayGrid = this.dayGrid;
-            var eventLimit = this.context.options.eventLimit;
-            var headRowEl = this.header ? this.header.el : null; // HACK
-            var scrollerHeight;
-            var scrollbarWidths;
-            // hack to give the view some height prior to dayGrid's columns being rendered
-            // TODO: separate setting height from scroller VS dayGrid.
-            if (!dayGrid.rowEls) {
-                if (!isAuto) {
-                    scrollerHeight = this.computeScrollerHeight(viewHeight);
-                    this.scroller.setHeight(scrollerHeight);
-                }
-                return;
-            }
-            if (this.colWeekNumbersVisible) {
-                // Make sure all week number cells running down the side have the same width.
-                this.weekNumberWidth = core.matchCellWidths(core.findElements(this.el, '.fc-week-number'));
-            }
-            // reset all heights to be natural
-            this.scroller.clear();
-            if (headRowEl) {
-                core.uncompensateScroll(headRowEl);
-            }
-            dayGrid.removeSegPopover(); // kill the "more" popover if displayed
-            // is the event limit a constant level number?
-            if (eventLimit && typeof eventLimit === 'number') {
-                dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after
-            }
-            // distribute the height to the rows
-            // (viewHeight is a "recommended" value if isAuto)
-            scrollerHeight = this.computeScrollerHeight(viewHeight);
-            this.setGridHeight(scrollerHeight, isAuto);
-            // is the event limit dynamically calculated?
-            if (eventLimit && typeof eventLimit !== 'number') {
-                dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set
-            }
-            if (!isAuto) { // should we force dimensions of the scroll container?
-                this.scroller.setHeight(scrollerHeight);
-                scrollbarWidths = this.scroller.getScrollbarWidths();
-                if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
-                    if (headRowEl) {
-                        core.compensateScroll(headRowEl, scrollbarWidths);
-                    }
-                    // doing the scrollbar compensation might have created text overflow which created more height. redo
-                    scrollerHeight = this.computeScrollerHeight(viewHeight);
-                    this.scroller.setHeight(scrollerHeight);
-                }
-                // guarantees the same scrollbar widths
-                this.scroller.lockOverflow(scrollbarWidths);
-            }
-        };
-        // given a desired total height of the view, returns what the height of the scroller should be
-        AbstractDayGridView.prototype.computeScrollerHeight = function (viewHeight) {
-            return viewHeight -
-                core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
-        };
-        // Sets the height of just the DayGrid component in this view
-        AbstractDayGridView.prototype.setGridHeight = function (height, isAuto) {
-            if (this.context.options.monthMode) {
-                // if auto, make the height of each row the height that it would be if there were 6 weeks
-                if (isAuto) {
-                    height *= this.dayGrid.rowCnt / 6;
-                }
-                core.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows
-            }
-            else {
-                if (isAuto) {
-                    core.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding
-                }
-                else {
-                    core.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows
-                }
-            }
-        };
-        /* Scroll
-        ------------------------------------------------------------------------------------------------------------------*/
-        AbstractDayGridView.prototype.computeDateScroll = function (duration) {
-            return { top: 0 };
-        };
-        AbstractDayGridView.prototype.queryDateScroll = function () {
-            return { top: this.scroller.getScrollTop() };
-        };
-        AbstractDayGridView.prototype.applyDateScroll = function (scroll) {
-            if (scroll.top !== undefined) {
-                this.scroller.setScrollTop(scroll.top);
-            }
-        };
-        return AbstractDayGridView;
-    }(core.View));
-    AbstractDayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator;
-
-    var SimpleDayGrid = /** @class */ (function (_super) {
-        __extends(SimpleDayGrid, _super);
-        function SimpleDayGrid(dayGrid) {
-            var _this = _super.call(this, dayGrid.el) || this;
-            _this.slicer = new DayGridSlicer();
-            _this.dayGrid = dayGrid;
-            return _this;
-        }
-        SimpleDayGrid.prototype.firstContext = function (context) {
-            context.calendar.registerInteractiveComponent(this, { el: this.dayGrid.el });
-        };
-        SimpleDayGrid.prototype.destroy = function () {
-            _super.prototype.destroy.call(this);
-            this.context.calendar.unregisterInteractiveComponent(this);
-        };
-        SimpleDayGrid.prototype.render = function (props, context) {
-            var dayGrid = this.dayGrid;
-            var dateProfile = props.dateProfile, dayTable = props.dayTable;
-            dayGrid.receiveContext(context); // hack because context is used in sliceProps
-            dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, context.calendar, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }), context);
-        };
-        SimpleDayGrid.prototype.buildPositionCaches = function () {
-            this.dayGrid.buildPositionCaches();
-        };
-        SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) {
-            var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop);
-            if (rawHit) {
-                return {
-                    component: this.dayGrid,
-                    dateSpan: rawHit.dateSpan,
-                    dayEl: rawHit.dayEl,
-                    rect: {
-                        left: rawHit.relativeRect.left,
-                        right: rawHit.relativeRect.right,
-                        top: rawHit.relativeRect.top,
-                        bottom: rawHit.relativeRect.bottom
-                    },
-                    layer: 0
-                };
-            }
-        };
-        return SimpleDayGrid;
-    }(core.DateComponent));
-    var DayGridSlicer = /** @class */ (function (_super) {
-        __extends(DayGridSlicer, _super);
-        function DayGridSlicer() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) {
-            return dayTable.sliceRange(dateRange);
-        };
-        return DayGridSlicer;
-    }(core.Slicer));
-
-    var DayGridView = /** @class */ (function (_super) {
-        __extends(DayGridView, _super);
-        function DayGridView() {
-            var _this = _super !== null && _super.apply(this, arguments) || this;
-            _this.buildDayTable = core.memoize(buildDayTable);
-            return _this;
-        }
-        DayGridView.prototype.render = function (props, context) {
-            _super.prototype.render.call(this, props, context); // will call _renderSkeleton/_unrenderSkeleton
-            var dateProfile = this.props.dateProfile;
-            var dayTable = this.dayTable =
-                this.buildDayTable(dateProfile, props.dateProfileGenerator);
-            if (this.header) {
-                this.header.receiveProps({
-                    dateProfile: dateProfile,
-                    dates: dayTable.headerDates,
-                    datesRepDistinctDays: dayTable.rowCnt === 1,
-                    renderIntroHtml: this.renderHeadIntroHtml
-                }, context);
-            }
-            this.simpleDayGrid.receiveProps({
-                dateProfile: dateProfile,
-                dayTable: dayTable,
-                businessHours: props.businessHours,
-                dateSelection: props.dateSelection,
-                eventStore: props.eventStore,
-                eventUiBases: props.eventUiBases,
-                eventSelection: props.eventSelection,
-                eventDrag: props.eventDrag,
-                eventResize: props.eventResize,
-                isRigid: this.hasRigidRows(),
-                nextDayThreshold: this.context.nextDayThreshold
-            }, context);
-        };
-        DayGridView.prototype._renderSkeleton = function (context) {
-            _super.prototype._renderSkeleton.call(this, context);
-            if (context.options.columnHeader) {
-                this.header = new core.DayHeader(this.el.querySelector('.fc-head-container'));
-            }
-            this.simpleDayGrid = new SimpleDayGrid(this.dayGrid);
-        };
-        DayGridView.prototype._unrenderSkeleton = function () {
-            _super.prototype._unrenderSkeleton.call(this);
-            if (this.header) {
-                this.header.destroy();
-            }
-            this.simpleDayGrid.destroy();
-        };
-        return DayGridView;
-    }(AbstractDayGridView));
-    function buildDayTable(dateProfile, dateProfileGenerator) {
-        var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator);
-        return new core.DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
-    }
-
-    var main = core.createPlugin({
-        defaultView: 'dayGridMonth',
-        views: {
-            dayGrid: DayGridView,
-            dayGridDay: {
-                type: 'dayGrid',
-                duration: { days: 1 }
-            },
-            dayGridWeek: {
-                type: 'dayGrid',
-                duration: { weeks: 1 }
-            },
-            dayGridMonth: {
-                type: 'dayGrid',
-                duration: { months: 1 },
-                monthMode: true,
-                fixedWeekCount: true
-            }
-        }
-    });
-
-    exports.AbstractDayGridView = AbstractDayGridView;
-    exports.DayBgRow = DayBgRow;
-    exports.DayGrid = DayGrid;
-    exports.DayGridSlicer = DayGridSlicer;
-    exports.DayGridView = DayGridView;
-    exports.SimpleDayGrid = SimpleDayGrid;
-    exports.buildBasicDayTable = buildDayTable;
-    exports.default = main;
-
-    Object.defineProperty(exports, '__esModule', { value: true });
-
-}));

+ 0 - 1
plugins/fullcalendar-daygrid/main.min.css

@@ -1 +0,0 @@
-.fc-dayGridDay-view .fc-content-skeleton,.fc-dayGridWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-dayGrid-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-dayGrid-view .fc-day-number,.fc-dayGrid-view .fc-week-number{padding:2px}.fc-dayGrid-view th.fc-day-number,.fc-dayGrid-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-dayGrid-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-dayGrid-view td.fc-week-number{text-align:center}.fc-dayGrid-view td.fc-week-number>*{display:inline-block;min-width:1.25em}

Plik diff jest za duży
+ 0 - 5
plugins/fullcalendar-daygrid/main.min.js


+ 0 - 20
plugins/fullcalendar-interaction/LICENSE.txt

@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 2141
plugins/fullcalendar-interaction/main.esm.js

@@ -1,2141 +0,0 @@
-/*!
-FullCalendar Interaction Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { config, elementClosest, EmitterMixin, applyStyle, whenTransitionDone, removeElement, ScrollController, ElementScrollController, computeInnerRect, WindowScrollController, preventSelection, preventContextMenu, allowSelection, allowContextMenu, ElementDragging, computeRect, getClippingParents, pointInsideRect, isDateSpansEqual, constrainPoint, intersectRects, getRectCenter, diffPoints, mapHash, rangeContainsRange, interactionSettingsToStore, Interaction, enableCursor, disableCursor, compareNumbers, getElSeg, getRelevantEvents, EventApi, createEmptyEventStore, applyMutationToEventStore, interactionSettingsStore, startOfDay, diffDates, createDuration, eventTupleToStore, isInteractionValid, parseDragMeta, elementMatches, parseEventDef, createEventInstance, globalDefaults, createPlugin } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
-    extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return extendStatics(d, b);
-};
-
-function __extends(d, b) {
-    extendStatics(d, b);
-    function __() { this.constructor = d; }
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
-    __assign = Object.assign || function __assign(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-        }
-        return t;
-    };
-    return __assign.apply(this, arguments);
-};
-
-config.touchMouseIgnoreWait = 500;
-var ignoreMouseDepth = 0;
-var listenerCnt = 0;
-var isWindowTouchMoveCancelled = false;
-/*
-Uses a "pointer" abstraction, which monitors UI events for both mouse and touch.
-Tracks when the pointer "drags" on a certain element, meaning down+move+up.
-
-Also, tracks if there was touch-scrolling.
-Also, can prevent touch-scrolling from happening.
-Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.
-
-emits:
-- pointerdown
-- pointermove
-- pointerup
-*/
-var PointerDragging = /** @class */ (function () {
-    function PointerDragging(containerEl) {
-        var _this = this;
-        this.subjectEl = null;
-        this.downEl = null;
-        // options that can be directly assigned by caller
-        this.selector = ''; // will cause subjectEl in all emitted events to be this element
-        this.handleSelector = '';
-        this.shouldIgnoreMove = false;
-        this.shouldWatchScroll = true; // for simulating pointermove on scroll
-        // internal states
-        this.isDragging = false;
-        this.isTouchDragging = false;
-        this.wasTouchScroll = false;
-        // Mouse
-        // ----------------------------------------------------------------------------------------------------
-        this.handleMouseDown = function (ev) {
-            if (!_this.shouldIgnoreMouse() &&
-                isPrimaryMouseButton(ev) &&
-                _this.tryStart(ev)) {
-                var pev = _this.createEventFromMouse(ev, true);
-                _this.emitter.trigger('pointerdown', pev);
-                _this.initScrollWatch(pev);
-                if (!_this.shouldIgnoreMove) {
-                    document.addEventListener('mousemove', _this.handleMouseMove);
-                }
-                document.addEventListener('mouseup', _this.handleMouseUp);
-            }
-        };
-        this.handleMouseMove = function (ev) {
-            var pev = _this.createEventFromMouse(ev);
-            _this.recordCoords(pev);
-            _this.emitter.trigger('pointermove', pev);
-        };
-        this.handleMouseUp = function (ev) {
-            document.removeEventListener('mousemove', _this.handleMouseMove);
-            document.removeEventListener('mouseup', _this.handleMouseUp);
-            _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev));
-            _this.cleanup(); // call last so that pointerup has access to props
-        };
-        // Touch
-        // ----------------------------------------------------------------------------------------------------
-        this.handleTouchStart = function (ev) {
-            if (_this.tryStart(ev)) {
-                _this.isTouchDragging = true;
-                var pev = _this.createEventFromTouch(ev, true);
-                _this.emitter.trigger('pointerdown', pev);
-                _this.initScrollWatch(pev);
-                // unlike mouse, need to attach to target, not document
-                // https://stackoverflow.com/a/45760014
-                var target = ev.target;
-                if (!_this.shouldIgnoreMove) {
-                    target.addEventListener('touchmove', _this.handleTouchMove);
-                }
-                target.addEventListener('touchend', _this.handleTouchEnd);
-                target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end
-                // attach a handler to get called when ANY scroll action happens on the page.
-                // this was impossible to do with normal on/off because 'scroll' doesn't bubble.
-                // http://stackoverflow.com/a/32954565/96342
-                window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture
-                );
-            }
-        };
-        this.handleTouchMove = function (ev) {
-            var pev = _this.createEventFromTouch(ev);
-            _this.recordCoords(pev);
-            _this.emitter.trigger('pointermove', pev);
-        };
-        this.handleTouchEnd = function (ev) {
-            if (_this.isDragging) { // done to guard against touchend followed by touchcancel
-                var target = ev.target;
-                target.removeEventListener('touchmove', _this.handleTouchMove);
-                target.removeEventListener('touchend', _this.handleTouchEnd);
-                target.removeEventListener('touchcancel', _this.handleTouchEnd);
-                window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true
-                _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev));
-                _this.cleanup(); // call last so that pointerup has access to props
-                _this.isTouchDragging = false;
-                startIgnoringMouse();
-            }
-        };
-        this.handleTouchScroll = function () {
-            _this.wasTouchScroll = true;
-        };
-        this.handleScroll = function (ev) {
-            if (!_this.shouldIgnoreMove) {
-                var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX;
-                var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY;
-                _this.emitter.trigger('pointermove', {
-                    origEvent: ev,
-                    isTouch: _this.isTouchDragging,
-                    subjectEl: _this.subjectEl,
-                    pageX: pageX,
-                    pageY: pageY,
-                    deltaX: pageX - _this.origPageX,
-                    deltaY: pageY - _this.origPageY
-                });
-            }
-        };
-        this.containerEl = containerEl;
-        this.emitter = new EmitterMixin();
-        containerEl.addEventListener('mousedown', this.handleMouseDown);
-        containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });
-        listenerCreated();
-    }
-    PointerDragging.prototype.destroy = function () {
-        this.containerEl.removeEventListener('mousedown', this.handleMouseDown);
-        this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
-        listenerDestroyed();
-    };
-    PointerDragging.prototype.tryStart = function (ev) {
-        var subjectEl = this.querySubjectEl(ev);
-        var downEl = ev.target;
-        if (subjectEl &&
-            (!this.handleSelector || elementClosest(downEl, this.handleSelector))) {
-            this.subjectEl = subjectEl;
-            this.downEl = downEl;
-            this.isDragging = true; // do this first so cancelTouchScroll will work
-            this.wasTouchScroll = false;
-            return true;
-        }
-        return false;
-    };
-    PointerDragging.prototype.cleanup = function () {
-        isWindowTouchMoveCancelled = false;
-        this.isDragging = false;
-        this.subjectEl = null;
-        this.downEl = null;
-        // keep wasTouchScroll around for later access
-        this.destroyScrollWatch();
-    };
-    PointerDragging.prototype.querySubjectEl = function (ev) {
-        if (this.selector) {
-            return elementClosest(ev.target, this.selector);
-        }
-        else {
-            return this.containerEl;
-        }
-    };
-    PointerDragging.prototype.shouldIgnoreMouse = function () {
-        return ignoreMouseDepth || this.isTouchDragging;
-    };
-    // can be called by user of this class, to cancel touch-based scrolling for the current drag
-    PointerDragging.prototype.cancelTouchScroll = function () {
-        if (this.isDragging) {
-            isWindowTouchMoveCancelled = true;
-        }
-    };
-    // Scrolling that simulates pointermoves
-    // ----------------------------------------------------------------------------------------------------
-    PointerDragging.prototype.initScrollWatch = function (ev) {
-        if (this.shouldWatchScroll) {
-            this.recordCoords(ev);
-            window.addEventListener('scroll', this.handleScroll, true); // useCapture=true
-        }
-    };
-    PointerDragging.prototype.recordCoords = function (ev) {
-        if (this.shouldWatchScroll) {
-            this.prevPageX = ev.pageX;
-            this.prevPageY = ev.pageY;
-            this.prevScrollX = window.pageXOffset;
-            this.prevScrollY = window.pageYOffset;
-        }
-    };
-    PointerDragging.prototype.destroyScrollWatch = function () {
-        if (this.shouldWatchScroll) {
-            window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true
-        }
-    };
-    // Event Normalization
-    // ----------------------------------------------------------------------------------------------------
-    PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) {
-        var deltaX = 0;
-        var deltaY = 0;
-        // TODO: repeat code
-        if (isFirst) {
-            this.origPageX = ev.pageX;
-            this.origPageY = ev.pageY;
-        }
-        else {
-            deltaX = ev.pageX - this.origPageX;
-            deltaY = ev.pageY - this.origPageY;
-        }
-        return {
-            origEvent: ev,
-            isTouch: false,
-            subjectEl: this.subjectEl,
-            pageX: ev.pageX,
-            pageY: ev.pageY,
-            deltaX: deltaX,
-            deltaY: deltaY
-        };
-    };
-    PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) {
-        var touches = ev.touches;
-        var pageX;
-        var pageY;
-        var deltaX = 0;
-        var deltaY = 0;
-        // if touch coords available, prefer,
-        // because FF would give bad ev.pageX ev.pageY
-        if (touches && touches.length) {
-            pageX = touches[0].pageX;
-            pageY = touches[0].pageY;
-        }
-        else {
-            pageX = ev.pageX;
-            pageY = ev.pageY;
-        }
-        // TODO: repeat code
-        if (isFirst) {
-            this.origPageX = pageX;
-            this.origPageY = pageY;
-        }
-        else {
-            deltaX = pageX - this.origPageX;
-            deltaY = pageY - this.origPageY;
-        }
-        return {
-            origEvent: ev,
-            isTouch: true,
-            subjectEl: this.subjectEl,
-            pageX: pageX,
-            pageY: pageY,
-            deltaX: deltaX,
-            deltaY: deltaY
-        };
-    };
-    return PointerDragging;
-}());
-// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)
-function isPrimaryMouseButton(ev) {
-    return ev.button === 0 && !ev.ctrlKey;
-}
-// Ignoring fake mouse events generated by touch
-// ----------------------------------------------------------------------------------------------------
-function startIgnoringMouse() {
-    ignoreMouseDepth++;
-    setTimeout(function () {
-        ignoreMouseDepth--;
-    }, config.touchMouseIgnoreWait);
-}
-// We want to attach touchmove as early as possible for Safari
-// ----------------------------------------------------------------------------------------------------
-function listenerCreated() {
-    if (!(listenerCnt++)) {
-        window.addEventListener('touchmove', onWindowTouchMove, { passive: false });
-    }
-}
-function listenerDestroyed() {
-    if (!(--listenerCnt)) {
-        window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });
-    }
-}
-function onWindowTouchMove(ev) {
-    if (isWindowTouchMoveCancelled) {
-        ev.preventDefault();
-    }
-}
-
-/*
-An effect in which an element follows the movement of a pointer across the screen.
-The moving element is a clone of some other element.
-Must call start + handleMove + stop.
-*/
-var ElementMirror = /** @class */ (function () {
-    function ElementMirror() {
-        this.isVisible = false; // must be explicitly enabled
-        this.sourceEl = null;
-        this.mirrorEl = null;
-        this.sourceElRect = null; // screen coords relative to viewport
-        // options that can be set directly by caller
-        this.parentNode = document.body;
-        this.zIndex = 9999;
-        this.revertDuration = 0;
-    }
-    ElementMirror.prototype.start = function (sourceEl, pageX, pageY) {
-        this.sourceEl = sourceEl;
-        this.sourceElRect = this.sourceEl.getBoundingClientRect();
-        this.origScreenX = pageX - window.pageXOffset;
-        this.origScreenY = pageY - window.pageYOffset;
-        this.deltaX = 0;
-        this.deltaY = 0;
-        this.updateElPosition();
-    };
-    ElementMirror.prototype.handleMove = function (pageX, pageY) {
-        this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;
-        this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;
-        this.updateElPosition();
-    };
-    // can be called before start
-    ElementMirror.prototype.setIsVisible = function (bool) {
-        if (bool) {
-            if (!this.isVisible) {
-                if (this.mirrorEl) {
-                    this.mirrorEl.style.display = '';
-                }
-                this.isVisible = bool; // needs to happen before updateElPosition
-                this.updateElPosition(); // because was not updating the position while invisible
-            }
-        }
-        else {
-            if (this.isVisible) {
-                if (this.mirrorEl) {
-                    this.mirrorEl.style.display = 'none';
-                }
-                this.isVisible = bool;
-            }
-        }
-    };
-    // always async
-    ElementMirror.prototype.stop = function (needsRevertAnimation, callback) {
-        var _this = this;
-        var done = function () {
-            _this.cleanup();
-            callback();
-        };
-        if (needsRevertAnimation &&
-            this.mirrorEl &&
-            this.isVisible &&
-            this.revertDuration && // if 0, transition won't work
-            (this.deltaX || this.deltaY) // if same coords, transition won't work
-        ) {
-            this.doRevertAnimation(done, this.revertDuration);
-        }
-        else {
-            setTimeout(done, 0);
-        }
-    };
-    ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) {
-        var mirrorEl = this.mirrorEl;
-        var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened
-        mirrorEl.style.transition =
-            'top ' + revertDuration + 'ms,' +
-                'left ' + revertDuration + 'ms';
-        applyStyle(mirrorEl, {
-            left: finalSourceElRect.left,
-            top: finalSourceElRect.top
-        });
-        whenTransitionDone(mirrorEl, function () {
-            mirrorEl.style.transition = '';
-            callback();
-        });
-    };
-    ElementMirror.prototype.cleanup = function () {
-        if (this.mirrorEl) {
-            removeElement(this.mirrorEl);
-            this.mirrorEl = null;
-        }
-        this.sourceEl = null;
-    };
-    ElementMirror.prototype.updateElPosition = function () {
-        if (this.sourceEl && this.isVisible) {
-            applyStyle(this.getMirrorEl(), {
-                left: this.sourceElRect.left + this.deltaX,
-                top: this.sourceElRect.top + this.deltaY
-            });
-        }
-    };
-    ElementMirror.prototype.getMirrorEl = function () {
-        var sourceElRect = this.sourceElRect;
-        var mirrorEl = this.mirrorEl;
-        if (!mirrorEl) {
-            mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true
-            // we don't want long taps or any mouse interaction causing selection/menus.
-            // would use preventSelection(), but that prevents selectstart, causing problems.
-            mirrorEl.classList.add('fc-unselectable');
-            mirrorEl.classList.add('fc-dragging');
-            applyStyle(mirrorEl, {
-                position: 'fixed',
-                zIndex: this.zIndex,
-                visibility: '',
-                boxSizing: 'border-box',
-                width: sourceElRect.right - sourceElRect.left,
-                height: sourceElRect.bottom - sourceElRect.top,
-                right: 'auto',
-                bottom: 'auto',
-                margin: 0
-            });
-            this.parentNode.appendChild(mirrorEl);
-        }
-        return mirrorEl;
-    };
-    return ElementMirror;
-}());
-
-/*
-Is a cache for a given element's scroll information (all the info that ScrollController stores)
-in addition the "client rectangle" of the element.. the area within the scrollbars.
-
-The cache can be in one of two modes:
-- doesListening:false - ignores when the container is scrolled by someone else
-- doesListening:true - watch for scrolling and update the cache
-*/
-var ScrollGeomCache = /** @class */ (function (_super) {
-    __extends(ScrollGeomCache, _super);
-    function ScrollGeomCache(scrollController, doesListening) {
-        var _this = _super.call(this) || this;
-        _this.handleScroll = function () {
-            _this.scrollTop = _this.scrollController.getScrollTop();
-            _this.scrollLeft = _this.scrollController.getScrollLeft();
-            _this.handleScrollChange();
-        };
-        _this.scrollController = scrollController;
-        _this.doesListening = doesListening;
-        _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop();
-        _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft();
-        _this.scrollWidth = scrollController.getScrollWidth();
-        _this.scrollHeight = scrollController.getScrollHeight();
-        _this.clientWidth = scrollController.getClientWidth();
-        _this.clientHeight = scrollController.getClientHeight();
-        _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values
-        if (_this.doesListening) {
-            _this.getEventTarget().addEventListener('scroll', _this.handleScroll);
-        }
-        return _this;
-    }
-    ScrollGeomCache.prototype.destroy = function () {
-        if (this.doesListening) {
-            this.getEventTarget().removeEventListener('scroll', this.handleScroll);
-        }
-    };
-    ScrollGeomCache.prototype.getScrollTop = function () {
-        return this.scrollTop;
-    };
-    ScrollGeomCache.prototype.getScrollLeft = function () {
-        return this.scrollLeft;
-    };
-    ScrollGeomCache.prototype.setScrollTop = function (top) {
-        this.scrollController.setScrollTop(top);
-        if (!this.doesListening) {
-            // we are not relying on the element to normalize out-of-bounds scroll values
-            // so we need to sanitize ourselves
-            this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);
-            this.handleScrollChange();
-        }
-    };
-    ScrollGeomCache.prototype.setScrollLeft = function (top) {
-        this.scrollController.setScrollLeft(top);
-        if (!this.doesListening) {
-            // we are not relying on the element to normalize out-of-bounds scroll values
-            // so we need to sanitize ourselves
-            this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);
-            this.handleScrollChange();
-        }
-    };
-    ScrollGeomCache.prototype.getClientWidth = function () {
-        return this.clientWidth;
-    };
-    ScrollGeomCache.prototype.getClientHeight = function () {
-        return this.clientHeight;
-    };
-    ScrollGeomCache.prototype.getScrollWidth = function () {
-        return this.scrollWidth;
-    };
-    ScrollGeomCache.prototype.getScrollHeight = function () {
-        return this.scrollHeight;
-    };
-    ScrollGeomCache.prototype.handleScrollChange = function () {
-    };
-    return ScrollGeomCache;
-}(ScrollController));
-var ElementScrollGeomCache = /** @class */ (function (_super) {
-    __extends(ElementScrollGeomCache, _super);
-    function ElementScrollGeomCache(el, doesListening) {
-        return _super.call(this, new ElementScrollController(el), doesListening) || this;
-    }
-    ElementScrollGeomCache.prototype.getEventTarget = function () {
-        return this.scrollController.el;
-    };
-    ElementScrollGeomCache.prototype.computeClientRect = function () {
-        return computeInnerRect(this.scrollController.el);
-    };
-    return ElementScrollGeomCache;
-}(ScrollGeomCache));
-var WindowScrollGeomCache = /** @class */ (function (_super) {
-    __extends(WindowScrollGeomCache, _super);
-    function WindowScrollGeomCache(doesListening) {
-        return _super.call(this, new WindowScrollController(), doesListening) || this;
-    }
-    WindowScrollGeomCache.prototype.getEventTarget = function () {
-        return window;
-    };
-    WindowScrollGeomCache.prototype.computeClientRect = function () {
-        return {
-            left: this.scrollLeft,
-            right: this.scrollLeft + this.clientWidth,
-            top: this.scrollTop,
-            bottom: this.scrollTop + this.clientHeight
-        };
-    };
-    // the window is the only scroll object that changes it's rectangle relative
-    // to the document's topleft as it scrolls
-    WindowScrollGeomCache.prototype.handleScrollChange = function () {
-        this.clientRect = this.computeClientRect();
-    };
-    return WindowScrollGeomCache;
-}(ScrollGeomCache));
-
-// If available we are using native "performance" API instead of "Date"
-// Read more about it on MDN:
-// https://developer.mozilla.org/en-US/docs/Web/API/Performance
-var getTime = typeof performance === 'function' ? performance.now : Date.now;
-/*
-For a pointer interaction, automatically scrolls certain scroll containers when the pointer
-approaches the edge.
-
-The caller must call start + handleMove + stop.
-*/
-var AutoScroller = /** @class */ (function () {
-    function AutoScroller() {
-        var _this = this;
-        // options that can be set by caller
-        this.isEnabled = true;
-        this.scrollQuery = [window, '.fc-scroller'];
-        this.edgeThreshold = 50; // pixels
-        this.maxVelocity = 300; // pixels per second
-        // internal state
-        this.pointerScreenX = null;
-        this.pointerScreenY = null;
-        this.isAnimating = false;
-        this.scrollCaches = null;
-        // protect against the initial pointerdown being too close to an edge and starting the scroll
-        this.everMovedUp = false;
-        this.everMovedDown = false;
-        this.everMovedLeft = false;
-        this.everMovedRight = false;
-        this.animate = function () {
-            if (_this.isAnimating) { // wasn't cancelled between animation calls
-                var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset);
-                if (edge) {
-                    var now = getTime();
-                    _this.handleSide(edge, (now - _this.msSinceRequest) / 1000);
-                    _this.requestAnimation(now);
-                }
-                else {
-                    _this.isAnimating = false; // will stop animation
-                }
-            }
-        };
-    }
-    AutoScroller.prototype.start = function (pageX, pageY) {
-        if (this.isEnabled) {
-            this.scrollCaches = this.buildCaches();
-            this.pointerScreenX = null;
-            this.pointerScreenY = null;
-            this.everMovedUp = false;
-            this.everMovedDown = false;
-            this.everMovedLeft = false;
-            this.everMovedRight = false;
-            this.handleMove(pageX, pageY);
-        }
-    };
-    AutoScroller.prototype.handleMove = function (pageX, pageY) {
-        if (this.isEnabled) {
-            var pointerScreenX = pageX - window.pageXOffset;
-            var pointerScreenY = pageY - window.pageYOffset;
-            var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;
-            var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;
-            if (yDelta < 0) {
-                this.everMovedUp = true;
-            }
-            else if (yDelta > 0) {
-                this.everMovedDown = true;
-            }
-            if (xDelta < 0) {
-                this.everMovedLeft = true;
-            }
-            else if (xDelta > 0) {
-                this.everMovedRight = true;
-            }
-            this.pointerScreenX = pointerScreenX;
-            this.pointerScreenY = pointerScreenY;
-            if (!this.isAnimating) {
-                this.isAnimating = true;
-                this.requestAnimation(getTime());
-            }
-        }
-    };
-    AutoScroller.prototype.stop = function () {
-        if (this.isEnabled) {
-            this.isAnimating = false; // will stop animation
-            for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-                var scrollCache = _a[_i];
-                scrollCache.destroy();
-            }
-            this.scrollCaches = null;
-        }
-    };
-    AutoScroller.prototype.requestAnimation = function (now) {
-        this.msSinceRequest = now;
-        requestAnimationFrame(this.animate);
-    };
-    AutoScroller.prototype.handleSide = function (edge, seconds) {
-        var scrollCache = edge.scrollCache;
-        var edgeThreshold = this.edgeThreshold;
-        var invDistance = edgeThreshold - edge.distance;
-        var velocity = // the closer to the edge, the faster we scroll
-         (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic
-            this.maxVelocity * seconds;
-        var sign = 1;
-        switch (edge.name) {
-            case 'left':
-                sign = -1;
-            // falls through
-            case 'right':
-                scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);
-                break;
-            case 'top':
-                sign = -1;
-            // falls through
-            case 'bottom':
-                scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);
-                break;
-        }
-    };
-    // left/top are relative to document topleft
-    AutoScroller.prototype.computeBestEdge = function (left, top) {
-        var edgeThreshold = this.edgeThreshold;
-        var bestSide = null;
-        for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-            var scrollCache = _a[_i];
-            var rect = scrollCache.clientRect;
-            var leftDist = left - rect.left;
-            var rightDist = rect.right - left;
-            var topDist = top - rect.top;
-            var bottomDist = rect.bottom - top;
-            // completely within the rect?
-            if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {
-                if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&
-                    (!bestSide || bestSide.distance > topDist)) {
-                    bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist };
-                }
-                if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&
-                    (!bestSide || bestSide.distance > bottomDist)) {
-                    bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist };
-                }
-                if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&
-                    (!bestSide || bestSide.distance > leftDist)) {
-                    bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist };
-                }
-                if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&
-                    (!bestSide || bestSide.distance > rightDist)) {
-                    bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist };
-                }
-            }
-        }
-        return bestSide;
-    };
-    AutoScroller.prototype.buildCaches = function () {
-        return this.queryScrollEls().map(function (el) {
-            if (el === window) {
-                return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls
-            }
-            else {
-                return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls
-            }
-        });
-    };
-    AutoScroller.prototype.queryScrollEls = function () {
-        var els = [];
-        for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) {
-            var query = _a[_i];
-            if (typeof query === 'object') {
-                els.push(query);
-            }
-            else {
-                els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query)));
-            }
-        }
-        return els;
-    };
-    return AutoScroller;
-}());
-
-/*
-Monitors dragging on an element. Has a number of high-level features:
-- minimum distance required before dragging
-- minimum wait time ("delay") before dragging
-- a mirror element that follows the pointer
-*/
-var FeaturefulElementDragging = /** @class */ (function (_super) {
-    __extends(FeaturefulElementDragging, _super);
-    function FeaturefulElementDragging(containerEl) {
-        var _this = _super.call(this, containerEl) || this;
-        // options that can be directly set by caller
-        // the caller can also set the PointerDragging's options as well
-        _this.delay = null;
-        _this.minDistance = 0;
-        _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag
-        _this.mirrorNeedsRevert = false;
-        _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup
-        _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation
-        _this.isDelayEnded = false;
-        _this.isDistanceSurpassed = false;
-        _this.delayTimeoutId = null;
-        _this.onPointerDown = function (ev) {
-            if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going
-                _this.isInteracting = true;
-                _this.isDelayEnded = false;
-                _this.isDistanceSurpassed = false;
-                preventSelection(document.body);
-                preventContextMenu(document.body);
-                // prevent links from being visited if there's an eventual drag.
-                // also prevents selection in older browsers (maybe?).
-                // not necessary for touch, besides, browser would complain about passiveness.
-                if (!ev.isTouch) {
-                    ev.origEvent.preventDefault();
-                }
-                _this.emitter.trigger('pointerdown', ev);
-                if (!_this.pointer.shouldIgnoreMove) {
-                    // actions related to initiating dragstart+dragmove+dragend...
-                    _this.mirror.setIsVisible(false); // reset. caller must set-visible
-                    _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down
-                    _this.startDelay(ev);
-                    if (!_this.minDistance) {
-                        _this.handleDistanceSurpassed(ev);
-                    }
-                }
-            }
-        };
-        _this.onPointerMove = function (ev) {
-            if (_this.isInteracting) { // if false, still waiting for previous drag's revert
-                _this.emitter.trigger('pointermove', ev);
-                if (!_this.isDistanceSurpassed) {
-                    var minDistance = _this.minDistance;
-                    var distanceSq = void 0; // current distance from the origin, squared
-                    var deltaX = ev.deltaX, deltaY = ev.deltaY;
-                    distanceSq = deltaX * deltaX + deltaY * deltaY;
-                    if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem
-                        _this.handleDistanceSurpassed(ev);
-                    }
-                }
-                if (_this.isDragging) {
-                    // a real pointer move? (not one simulated by scrolling)
-                    if (ev.origEvent.type !== 'scroll') {
-                        _this.mirror.handleMove(ev.pageX, ev.pageY);
-                        _this.autoScroller.handleMove(ev.pageX, ev.pageY);
-                    }
-                    _this.emitter.trigger('dragmove', ev);
-                }
-            }
-        };
-        _this.onPointerUp = function (ev) {
-            if (_this.isInteracting) { // if false, still waiting for previous drag's revert
-                _this.isInteracting = false;
-                allowSelection(document.body);
-                allowContextMenu(document.body);
-                _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert
-                if (_this.isDragging) {
-                    _this.autoScroller.stop();
-                    _this.tryStopDrag(ev); // which will stop the mirror
-                }
-                if (_this.delayTimeoutId) {
-                    clearTimeout(_this.delayTimeoutId);
-                    _this.delayTimeoutId = null;
-                }
-            }
-        };
-        var pointer = _this.pointer = new PointerDragging(containerEl);
-        pointer.emitter.on('pointerdown', _this.onPointerDown);
-        pointer.emitter.on('pointermove', _this.onPointerMove);
-        pointer.emitter.on('pointerup', _this.onPointerUp);
-        _this.mirror = new ElementMirror();
-        _this.autoScroller = new AutoScroller();
-        return _this;
-    }
-    FeaturefulElementDragging.prototype.destroy = function () {
-        this.pointer.destroy();
-    };
-    FeaturefulElementDragging.prototype.startDelay = function (ev) {
-        var _this = this;
-        if (typeof this.delay === 'number') {
-            this.delayTimeoutId = setTimeout(function () {
-                _this.delayTimeoutId = null;
-                _this.handleDelayEnd(ev);
-            }, this.delay); // not assignable to number!
-        }
-        else {
-            this.handleDelayEnd(ev);
-        }
-    };
-    FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) {
-        this.isDelayEnded = true;
-        this.tryStartDrag(ev);
-    };
-    FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) {
-        this.isDistanceSurpassed = true;
-        this.tryStartDrag(ev);
-    };
-    FeaturefulElementDragging.prototype.tryStartDrag = function (ev) {
-        if (this.isDelayEnded && this.isDistanceSurpassed) {
-            if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {
-                this.isDragging = true;
-                this.mirrorNeedsRevert = false;
-                this.autoScroller.start(ev.pageX, ev.pageY);
-                this.emitter.trigger('dragstart', ev);
-                if (this.touchScrollAllowed === false) {
-                    this.pointer.cancelTouchScroll();
-                }
-            }
-        }
-    };
-    FeaturefulElementDragging.prototype.tryStopDrag = function (ev) {
-        // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events
-        // that come from the document to fire beforehand. much more convenient this way.
-        this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args
-        );
-    };
-    FeaturefulElementDragging.prototype.stopDrag = function (ev) {
-        this.isDragging = false;
-        this.emitter.trigger('dragend', ev);
-    };
-    // fill in the implementations...
-    FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) {
-        this.pointer.shouldIgnoreMove = bool;
-    };
-    FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) {
-        this.mirror.setIsVisible(bool);
-    };
-    FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) {
-        this.mirrorNeedsRevert = bool;
-    };
-    FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) {
-        this.autoScroller.isEnabled = bool;
-    };
-    return FeaturefulElementDragging;
-}(ElementDragging));
-
-/*
-When this class is instantiated, it records the offset of an element (relative to the document topleft),
-and continues to monitor scrolling, updating the cached coordinates if it needs to.
-Does not access the DOM after instantiation, so highly performant.
-
-Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element
-and an determine if a given point is inside the combined clipping rectangle.
-*/
-var OffsetTracker = /** @class */ (function () {
-    function OffsetTracker(el) {
-        this.origRect = computeRect(el);
-        // will work fine for divs that have overflow:hidden
-        this.scrollCaches = getClippingParents(el).map(function (el) {
-            return new ElementScrollGeomCache(el, true); // listen=true
-        });
-    }
-    OffsetTracker.prototype.destroy = function () {
-        for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-            var scrollCache = _a[_i];
-            scrollCache.destroy();
-        }
-    };
-    OffsetTracker.prototype.computeLeft = function () {
-        var left = this.origRect.left;
-        for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-            var scrollCache = _a[_i];
-            left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();
-        }
-        return left;
-    };
-    OffsetTracker.prototype.computeTop = function () {
-        var top = this.origRect.top;
-        for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-            var scrollCache = _a[_i];
-            top += scrollCache.origScrollTop - scrollCache.getScrollTop();
-        }
-        return top;
-    };
-    OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) {
-        var point = { left: pageX, top: pageY };
-        for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-            var scrollCache = _a[_i];
-            if (!isIgnoredClipping(scrollCache.getEventTarget()) &&
-                !pointInsideRect(point, scrollCache.clientRect)) {
-                return false;
-            }
-        }
-        return true;
-    };
-    return OffsetTracker;
-}());
-// certain clipping containers should never constrain interactions, like <html> and <body>
-// https://github.com/fullcalendar/fullcalendar/issues/3615
-function isIgnoredClipping(node) {
-    var tagName = node.tagName;
-    return tagName === 'HTML' || tagName === 'BODY';
-}
-
-/*
-Tracks movement over multiple droppable areas (aka "hits")
-that exist in one or more DateComponents.
-Relies on an existing draggable.
-
-emits:
-- pointerdown
-- dragstart
-- hitchange - fires initially, even if not over a hit
-- pointerup
-- (hitchange - again, to null, if ended over a hit)
-- dragend
-*/
-var HitDragging = /** @class */ (function () {
-    function HitDragging(dragging, droppableStore) {
-        var _this = this;
-        // options that can be set by caller
-        this.useSubjectCenter = false;
-        this.requireInitial = true; // if doesn't start out on a hit, won't emit any events
-        this.initialHit = null;
-        this.movingHit = null;
-        this.finalHit = null; // won't ever be populated if shouldIgnoreMove
-        this.handlePointerDown = function (ev) {
-            var dragging = _this.dragging;
-            _this.initialHit = null;
-            _this.movingHit = null;
-            _this.finalHit = null;
-            _this.prepareHits();
-            _this.processFirstCoord(ev);
-            if (_this.initialHit || !_this.requireInitial) {
-                dragging.setIgnoreMove(false);
-                _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(
-            }
-            else {
-                dragging.setIgnoreMove(true);
-            }
-        };
-        this.handleDragStart = function (ev) {
-            _this.emitter.trigger('dragstart', ev);
-            _this.handleMove(ev, true); // force = fire even if initially null
-        };
-        this.handleDragMove = function (ev) {
-            _this.emitter.trigger('dragmove', ev);
-            _this.handleMove(ev);
-        };
-        this.handlePointerUp = function (ev) {
-            _this.releaseHits();
-            _this.emitter.trigger('pointerup', ev);
-        };
-        this.handleDragEnd = function (ev) {
-            if (_this.movingHit) {
-                _this.emitter.trigger('hitupdate', null, true, ev);
-            }
-            _this.finalHit = _this.movingHit;
-            _this.movingHit = null;
-            _this.emitter.trigger('dragend', ev);
-        };
-        this.droppableStore = droppableStore;
-        dragging.emitter.on('pointerdown', this.handlePointerDown);
-        dragging.emitter.on('dragstart', this.handleDragStart);
-        dragging.emitter.on('dragmove', this.handleDragMove);
-        dragging.emitter.on('pointerup', this.handlePointerUp);
-        dragging.emitter.on('dragend', this.handleDragEnd);
-        this.dragging = dragging;
-        this.emitter = new EmitterMixin();
-    }
-    // sets initialHit
-    // sets coordAdjust
-    HitDragging.prototype.processFirstCoord = function (ev) {
-        var origPoint = { left: ev.pageX, top: ev.pageY };
-        var adjustedPoint = origPoint;
-        var subjectEl = ev.subjectEl;
-        var subjectRect;
-        if (subjectEl !== document) {
-            subjectRect = computeRect(subjectEl);
-            adjustedPoint = constrainPoint(adjustedPoint, subjectRect);
-        }
-        var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);
-        if (initialHit) {
-            if (this.useSubjectCenter && subjectRect) {
-                var slicedSubjectRect = intersectRects(subjectRect, initialHit.rect);
-                if (slicedSubjectRect) {
-                    adjustedPoint = getRectCenter(slicedSubjectRect);
-                }
-            }
-            this.coordAdjust = diffPoints(adjustedPoint, origPoint);
-        }
-        else {
-            this.coordAdjust = { left: 0, top: 0 };
-        }
-    };
-    HitDragging.prototype.handleMove = function (ev, forceHandle) {
-        var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);
-        if (forceHandle || !isHitsEqual(this.movingHit, hit)) {
-            this.movingHit = hit;
-            this.emitter.trigger('hitupdate', hit, false, ev);
-        }
-    };
-    HitDragging.prototype.prepareHits = function () {
-        this.offsetTrackers = mapHash(this.droppableStore, function (interactionSettings) {
-            interactionSettings.component.buildPositionCaches();
-            return new OffsetTracker(interactionSettings.el);
-        });
-    };
-    HitDragging.prototype.releaseHits = function () {
-        var offsetTrackers = this.offsetTrackers;
-        for (var id in offsetTrackers) {
-            offsetTrackers[id].destroy();
-        }
-        this.offsetTrackers = {};
-    };
-    HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) {
-        var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers;
-        var bestHit = null;
-        for (var id in droppableStore) {
-            var component = droppableStore[id].component;
-            var offsetTracker = offsetTrackers[id];
-            if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {
-                var originLeft = offsetTracker.computeLeft();
-                var originTop = offsetTracker.computeTop();
-                var positionLeft = offsetLeft - originLeft;
-                var positionTop = offsetTop - originTop;
-                var origRect = offsetTracker.origRect;
-                var width = origRect.right - origRect.left;
-                var height = origRect.bottom - origRect.top;
-                if (
-                // must be within the element's bounds
-                positionLeft >= 0 && positionLeft < width &&
-                    positionTop >= 0 && positionTop < height) {
-                    var hit = component.queryHit(positionLeft, positionTop, width, height);
-                    if (hit &&
-                        (
-                        // make sure the hit is within activeRange, meaning it's not a deal cell
-                        !component.props.dateProfile || // hack for DayTile
-                            rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) &&
-                        (!bestHit || hit.layer > bestHit.layer)) {
-                        // TODO: better way to re-orient rectangle
-                        hit.rect.left += originLeft;
-                        hit.rect.right += originLeft;
-                        hit.rect.top += originTop;
-                        hit.rect.bottom += originTop;
-                        bestHit = hit;
-                    }
-                }
-            }
-        }
-        return bestHit;
-    };
-    return HitDragging;
-}());
-function isHitsEqual(hit0, hit1) {
-    if (!hit0 && !hit1) {
-        return true;
-    }
-    if (Boolean(hit0) !== Boolean(hit1)) {
-        return false;
-    }
-    return isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);
-}
-
-/*
-Monitors when the user clicks on a specific date/time of a component.
-A pointerdown+pointerup on the same "hit" constitutes a click.
-*/
-var DateClicking = /** @class */ (function (_super) {
-    __extends(DateClicking, _super);
-    function DateClicking(settings) {
-        var _this = _super.call(this, settings) || this;
-        _this.handlePointerDown = function (ev) {
-            var dragging = _this.dragging;
-            // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired
-            dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl));
-        };
-        // won't even fire if moving was ignored
-        _this.handleDragEnd = function (ev) {
-            var component = _this.component;
-            var _a = component.context, calendar = _a.calendar, view = _a.view;
-            var pointer = _this.dragging.pointer;
-            if (!pointer.wasTouchScroll) {
-                var _b = _this.hitDragging, initialHit = _b.initialHit, finalHit = _b.finalHit;
-                if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
-                    calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, view, ev.origEvent);
-                }
-            }
-        };
-        var component = settings.component;
-        // we DO want to watch pointer moves because otherwise finalHit won't get populated
-        _this.dragging = new FeaturefulElementDragging(component.el);
-        _this.dragging.autoScroller.isEnabled = false;
-        var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));
-        hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-        hitDragging.emitter.on('dragend', _this.handleDragEnd);
-        return _this;
-    }
-    DateClicking.prototype.destroy = function () {
-        this.dragging.destroy();
-    };
-    return DateClicking;
-}(Interaction));
-
-/*
-Tracks when the user selects a portion of time of a component,
-constituted by a drag over date cells, with a possible delay at the beginning of the drag.
-*/
-var DateSelecting = /** @class */ (function (_super) {
-    __extends(DateSelecting, _super);
-    function DateSelecting(settings) {
-        var _this = _super.call(this, settings) || this;
-        _this.dragSelection = null;
-        _this.handlePointerDown = function (ev) {
-            var _a = _this, component = _a.component, dragging = _a.dragging;
-            var options = component.context.options;
-            var canSelect = options.selectable &&
-                component.isValidDateDownEl(ev.origEvent.target);
-            // don't bother to watch expensive moves if component won't do selection
-            dragging.setIgnoreMove(!canSelect);
-            // if touch, require user to hold down
-            dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null;
-        };
-        _this.handleDragStart = function (ev) {
-            _this.component.context.calendar.unselect(ev); // unselect previous selections
-        };
-        _this.handleHitUpdate = function (hit, isFinal) {
-            var calendar = _this.component.context.calendar;
-            var dragSelection = null;
-            var isInvalid = false;
-            if (hit) {
-                dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers);
-                if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) {
-                    isInvalid = true;
-                    dragSelection = null;
-                }
-            }
-            if (dragSelection) {
-                calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection });
-            }
-            else if (!isFinal) { // only unselect if moved away while dragging
-                calendar.dispatch({ type: 'UNSELECT_DATES' });
-            }
-            if (!isInvalid) {
-                enableCursor();
-            }
-            else {
-                disableCursor();
-            }
-            if (!isFinal) {
-                _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging
-            }
-        };
-        _this.handlePointerUp = function (pev) {
-            if (_this.dragSelection) {
-                // selection is already rendered, so just need to report selection
-                _this.component.context.calendar.triggerDateSelect(_this.dragSelection, pev);
-                _this.dragSelection = null;
-            }
-        };
-        var component = settings.component;
-        var options = component.context.options;
-        var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
-        dragging.touchScrollAllowed = false;
-        dragging.minDistance = options.selectMinDistance || 0;
-        dragging.autoScroller.isEnabled = options.dragScroll;
-        var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));
-        hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-        hitDragging.emitter.on('dragstart', _this.handleDragStart);
-        hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
-        hitDragging.emitter.on('pointerup', _this.handlePointerUp);
-        return _this;
-    }
-    DateSelecting.prototype.destroy = function () {
-        this.dragging.destroy();
-    };
-    return DateSelecting;
-}(Interaction));
-function getComponentTouchDelay(component) {
-    var options = component.context.options;
-    var delay = options.selectLongPressDelay;
-    if (delay == null) {
-        delay = options.longPressDelay;
-    }
-    return delay;
-}
-function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {
-    var dateSpan0 = hit0.dateSpan;
-    var dateSpan1 = hit1.dateSpan;
-    var ms = [
-        dateSpan0.range.start,
-        dateSpan0.range.end,
-        dateSpan1.range.start,
-        dateSpan1.range.end
-    ];
-    ms.sort(compareNumbers);
-    var props = {};
-    for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) {
-        var transformer = dateSelectionTransformers_1[_i];
-        var res = transformer(hit0, hit1);
-        if (res === false) {
-            return null;
-        }
-        else if (res) {
-            __assign(props, res);
-        }
-    }
-    props.range = { start: ms[0], end: ms[3] };
-    props.allDay = dateSpan0.allDay;
-    return props;
-}
-
-var EventDragging = /** @class */ (function (_super) {
-    __extends(EventDragging, _super);
-    function EventDragging(settings) {
-        var _this = _super.call(this, settings) || this;
-        // internal state
-        _this.subjectSeg = null; // the seg being selected/dragged
-        _this.isDragging = false;
-        _this.eventRange = null;
-        _this.relevantEvents = null; // the events being dragged
-        _this.receivingCalendar = null;
-        _this.validMutation = null;
-        _this.mutatedRelevantEvents = null;
-        _this.handlePointerDown = function (ev) {
-            var origTarget = ev.origEvent.target;
-            var _a = _this, component = _a.component, dragging = _a.dragging;
-            var mirror = dragging.mirror;
-            var options = component.context.options;
-            var initialCalendar = component.context.calendar;
-            var subjectSeg = _this.subjectSeg = getElSeg(ev.subjectEl);
-            var eventRange = _this.eventRange = subjectSeg.eventRange;
-            var eventInstanceId = eventRange.instance.instanceId;
-            _this.relevantEvents = getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId);
-            dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;
-            dragging.delay =
-                // only do a touch delay if touch and this event hasn't been selected yet
-                (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?
-                    getComponentTouchDelay$1(component) :
-                    null;
-            mirror.parentNode = initialCalendar.el;
-            mirror.revertDuration = options.dragRevertDuration;
-            var isValid = component.isValidSegDownEl(origTarget) &&
-                !elementClosest(origTarget, '.fc-resizer'); // NOT on a resizer
-            dragging.setIgnoreMove(!isValid);
-            // disable dragging for elements that are resizable (ie, selectable)
-            // but are not draggable
-            _this.isDragging = isValid &&
-                ev.subjectEl.classList.contains('fc-draggable');
-        };
-        _this.handleDragStart = function (ev) {
-            var context = _this.component.context;
-            var initialCalendar = context.calendar;
-            var eventRange = _this.eventRange;
-            var eventInstanceId = eventRange.instance.instanceId;
-            if (ev.isTouch) {
-                // need to select a different event?
-                if (eventInstanceId !== _this.component.props.eventSelection) {
-                    initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId });
-                }
-            }
-            else {
-                // if now using mouse, but was previous touch interaction, clear selected event
-                initialCalendar.dispatch({ type: 'UNSELECT_EVENT' });
-            }
-            if (_this.isDragging) {
-                initialCalendar.unselect(ev); // unselect *date* selection
-                initialCalendar.publiclyTrigger('eventDragStart', [
-                    {
-                        el: _this.subjectSeg.el,
-                        event: new EventApi(initialCalendar, eventRange.def, eventRange.instance),
-                        jsEvent: ev.origEvent,
-                        view: context.view
-                    }
-                ]);
-            }
-        };
-        _this.handleHitUpdate = function (hit, isFinal) {
-            if (!_this.isDragging) {
-                return;
-            }
-            var relevantEvents = _this.relevantEvents;
-            var initialHit = _this.hitDragging.initialHit;
-            var initialCalendar = _this.component.context.calendar;
-            // states based on new hit
-            var receivingCalendar = null;
-            var mutation = null;
-            var mutatedRelevantEvents = null;
-            var isInvalid = false;
-            var interaction = {
-                affectedEvents: relevantEvents,
-                mutatedEvents: createEmptyEventStore(),
-                isEvent: true,
-                origSeg: _this.subjectSeg
-            };
-            if (hit) {
-                var receivingComponent = hit.component;
-                receivingCalendar = receivingComponent.context.calendar;
-                var receivingOptions = receivingComponent.context.options;
-                if (initialCalendar === receivingCalendar ||
-                    receivingOptions.editable && receivingOptions.droppable) {
-                    mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers);
-                    if (mutation) {
-                        mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar);
-                        interaction.mutatedEvents = mutatedRelevantEvents;
-                        if (!receivingComponent.isInteractionValid(interaction)) {
-                            isInvalid = true;
-                            mutation = null;
-                            mutatedRelevantEvents = null;
-                            interaction.mutatedEvents = createEmptyEventStore();
-                        }
-                    }
-                }
-                else {
-                    receivingCalendar = null;
-                }
-            }
-            _this.displayDrag(receivingCalendar, interaction);
-            if (!isInvalid) {
-                enableCursor();
-            }
-            else {
-                disableCursor();
-            }
-            if (!isFinal) {
-                if (initialCalendar === receivingCalendar && // TODO: write test for this
-                    isHitsEqual(initialHit, hit)) {
-                    mutation = null;
-                }
-                _this.dragging.setMirrorNeedsRevert(!mutation);
-                // render the mirror if no already-rendered mirror
-                // TODO: wish we could somehow wait for dispatch to guarantee render
-                _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror'));
-                // assign states based on new hit
-                _this.receivingCalendar = receivingCalendar;
-                _this.validMutation = mutation;
-                _this.mutatedRelevantEvents = mutatedRelevantEvents;
-            }
-        };
-        _this.handlePointerUp = function () {
-            if (!_this.isDragging) {
-                _this.cleanup(); // because handleDragEnd won't fire
-            }
-        };
-        _this.handleDragEnd = function (ev) {
-            if (_this.isDragging) {
-                var context = _this.component.context;
-                var initialCalendar_1 = context.calendar;
-                var initialView = context.view;
-                var _a = _this, receivingCalendar = _a.receivingCalendar, validMutation = _a.validMutation;
-                var eventDef = _this.eventRange.def;
-                var eventInstance = _this.eventRange.instance;
-                var eventApi = new EventApi(initialCalendar_1, eventDef, eventInstance);
-                var relevantEvents_1 = _this.relevantEvents;
-                var mutatedRelevantEvents = _this.mutatedRelevantEvents;
-                var finalHit = _this.hitDragging.finalHit;
-                _this.clearDrag(); // must happen after revert animation
-                initialCalendar_1.publiclyTrigger('eventDragStop', [
-                    {
-                        el: _this.subjectSeg.el,
-                        event: eventApi,
-                        jsEvent: ev.origEvent,
-                        view: initialView
-                    }
-                ]);
-                if (validMutation) {
-                    // dropped within same calendar
-                    if (receivingCalendar === initialCalendar_1) {
-                        initialCalendar_1.dispatch({
-                            type: 'MERGE_EVENTS',
-                            eventStore: mutatedRelevantEvents
-                        });
-                        var transformed = {};
-                        for (var _i = 0, _b = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _b.length; _i++) {
-                            var transformer = _b[_i];
-                            __assign(transformed, transformer(validMutation, initialCalendar_1));
-                        }
-                        var eventDropArg = __assign({}, transformed, { el: ev.subjectEl, delta: validMutation.datesDelta, oldEvent: eventApi, event: new EventApi(// the data AFTER the mutation
-                            initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), revert: function () {
-                                initialCalendar_1.dispatch({
-                                    type: 'MERGE_EVENTS',
-                                    eventStore: relevantEvents_1
-                                });
-                            }, jsEvent: ev.origEvent, view: initialView });
-                        initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]);
-                        // dropped in different calendar
-                    }
-                    else if (receivingCalendar) {
-                        initialCalendar_1.publiclyTrigger('eventLeave', [
-                            {
-                                draggedEl: ev.subjectEl,
-                                event: eventApi,
-                                view: initialView
-                            }
-                        ]);
-                        initialCalendar_1.dispatch({
-                            type: 'REMOVE_EVENT_INSTANCES',
-                            instances: _this.mutatedRelevantEvents.instances
-                        });
-                        receivingCalendar.dispatch({
-                            type: 'MERGE_EVENTS',
-                            eventStore: _this.mutatedRelevantEvents
-                        });
-                        if (ev.isTouch) {
-                            receivingCalendar.dispatch({
-                                type: 'SELECT_EVENT',
-                                eventInstanceId: eventInstance.instanceId
-                            });
-                        }
-                        var dropArg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.component // should this be finalHit.component.view? See #4644
-                         });
-                        receivingCalendar.publiclyTrigger('drop', [dropArg]);
-                        receivingCalendar.publiclyTrigger('eventReceive', [
-                            {
-                                draggedEl: ev.subjectEl,
-                                event: new EventApi(// the data AFTER the mutation
-                                receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]),
-                                view: finalHit.component // should this be finalHit.component.view? See #4644
-                            }
-                        ]);
-                    }
-                }
-                else {
-                    initialCalendar_1.publiclyTrigger('_noEventDrop');
-                }
-            }
-            _this.cleanup();
-        };
-        var component = _this.component;
-        var options = component.context.options;
-        var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
-        dragging.pointer.selector = EventDragging.SELECTOR;
-        dragging.touchScrollAllowed = false;
-        dragging.autoScroller.isEnabled = options.dragScroll;
-        var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsStore);
-        hitDragging.useSubjectCenter = settings.useEventCenter;
-        hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-        hitDragging.emitter.on('dragstart', _this.handleDragStart);
-        hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
-        hitDragging.emitter.on('pointerup', _this.handlePointerUp);
-        hitDragging.emitter.on('dragend', _this.handleDragEnd);
-        return _this;
-    }
-    EventDragging.prototype.destroy = function () {
-        this.dragging.destroy();
-    };
-    // render a drag state on the next receivingCalendar
-    EventDragging.prototype.displayDrag = function (nextCalendar, state) {
-        var initialCalendar = this.component.context.calendar;
-        var prevCalendar = this.receivingCalendar;
-        // does the previous calendar need to be cleared?
-        if (prevCalendar && prevCalendar !== nextCalendar) {
-            // does the initial calendar need to be cleared?
-            // if so, don't clear all the way. we still need to to hide the affectedEvents
-            if (prevCalendar === initialCalendar) {
-                prevCalendar.dispatch({
-                    type: 'SET_EVENT_DRAG',
-                    state: {
-                        affectedEvents: state.affectedEvents,
-                        mutatedEvents: createEmptyEventStore(),
-                        isEvent: true,
-                        origSeg: state.origSeg
-                    }
-                });
-                // completely clear the old calendar if it wasn't the initial
-            }
-            else {
-                prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-            }
-        }
-        if (nextCalendar) {
-            nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
-        }
-    };
-    EventDragging.prototype.clearDrag = function () {
-        var initialCalendar = this.component.context.calendar;
-        var receivingCalendar = this.receivingCalendar;
-        if (receivingCalendar) {
-            receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-        }
-        // the initial calendar might have an dummy drag state from displayDrag
-        if (initialCalendar !== receivingCalendar) {
-            initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-        }
-    };
-    EventDragging.prototype.cleanup = function () {
-        this.subjectSeg = null;
-        this.isDragging = false;
-        this.eventRange = null;
-        this.relevantEvents = null;
-        this.receivingCalendar = null;
-        this.validMutation = null;
-        this.mutatedRelevantEvents = null;
-    };
-    EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11
-    return EventDragging;
-}(Interaction));
-function computeEventMutation(hit0, hit1, massagers) {
-    var dateSpan0 = hit0.dateSpan;
-    var dateSpan1 = hit1.dateSpan;
-    var date0 = dateSpan0.range.start;
-    var date1 = dateSpan1.range.start;
-    var standardProps = {};
-    if (dateSpan0.allDay !== dateSpan1.allDay) {
-        standardProps.allDay = dateSpan1.allDay;
-        standardProps.hasEnd = hit1.component.context.options.allDayMaintainDuration;
-        if (dateSpan1.allDay) {
-            // means date1 is already start-of-day,
-            // but date0 needs to be converted
-            date0 = startOfDay(date0);
-        }
-    }
-    var delta = diffDates(date0, date1, hit0.component.context.dateEnv, hit0.component === hit1.component ?
-        hit0.component.largeUnit :
-        null);
-    if (delta.milliseconds) { // has hours/minutes/seconds
-        standardProps.allDay = false;
-    }
-    var mutation = {
-        datesDelta: delta,
-        standardProps: standardProps
-    };
-    for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) {
-        var massager = massagers_1[_i];
-        massager(mutation, hit0, hit1);
-    }
-    return mutation;
-}
-function getComponentTouchDelay$1(component) {
-    var options = component.context.options;
-    var delay = options.eventLongPressDelay;
-    if (delay == null) {
-        delay = options.longPressDelay;
-    }
-    return delay;
-}
-
-var EventDragging$1 = /** @class */ (function (_super) {
-    __extends(EventDragging, _super);
-    function EventDragging(settings) {
-        var _this = _super.call(this, settings) || this;
-        // internal state
-        _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?
-        _this.eventRange = null;
-        _this.relevantEvents = null;
-        _this.validMutation = null;
-        _this.mutatedRelevantEvents = null;
-        _this.handlePointerDown = function (ev) {
-            var component = _this.component;
-            var seg = _this.querySeg(ev);
-            var eventRange = _this.eventRange = seg.eventRange;
-            _this.dragging.minDistance = component.context.options.eventDragMinDistance;
-            // if touch, need to be working with a selected event
-            _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) ||
-                (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId));
-        };
-        _this.handleDragStart = function (ev) {
-            var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
-            var eventRange = _this.eventRange;
-            _this.relevantEvents = getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId);
-            _this.draggingSeg = _this.querySeg(ev);
-            calendar.unselect();
-            calendar.publiclyTrigger('eventResizeStart', [
-                {
-                    el: _this.draggingSeg.el,
-                    event: new EventApi(calendar, eventRange.def, eventRange.instance),
-                    jsEvent: ev.origEvent,
-                    view: view
-                }
-            ]);
-        };
-        _this.handleHitUpdate = function (hit, isFinal, ev) {
-            var calendar = _this.component.context.calendar;
-            var relevantEvents = _this.relevantEvents;
-            var initialHit = _this.hitDragging.initialHit;
-            var eventInstance = _this.eventRange.instance;
-            var mutation = null;
-            var mutatedRelevantEvents = null;
-            var isInvalid = false;
-            var interaction = {
-                affectedEvents: relevantEvents,
-                mutatedEvents: createEmptyEventStore(),
-                isEvent: true,
-                origSeg: _this.draggingSeg
-            };
-            if (hit) {
-                mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms);
-            }
-            if (mutation) {
-                mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar);
-                interaction.mutatedEvents = mutatedRelevantEvents;
-                if (!_this.component.isInteractionValid(interaction)) {
-                    isInvalid = true;
-                    mutation = null;
-                    mutatedRelevantEvents = null;
-                    interaction.mutatedEvents = null;
-                }
-            }
-            if (mutatedRelevantEvents) {
-                calendar.dispatch({
-                    type: 'SET_EVENT_RESIZE',
-                    state: interaction
-                });
-            }
-            else {
-                calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' });
-            }
-            if (!isInvalid) {
-                enableCursor();
-            }
-            else {
-                disableCursor();
-            }
-            if (!isFinal) {
-                if (mutation && isHitsEqual(initialHit, hit)) {
-                    mutation = null;
-                }
-                _this.validMutation = mutation;
-                _this.mutatedRelevantEvents = mutatedRelevantEvents;
-            }
-        };
-        _this.handleDragEnd = function (ev) {
-            var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
-            var eventDef = _this.eventRange.def;
-            var eventInstance = _this.eventRange.instance;
-            var eventApi = new EventApi(calendar, eventDef, eventInstance);
-            var relevantEvents = _this.relevantEvents;
-            var mutatedRelevantEvents = _this.mutatedRelevantEvents;
-            calendar.publiclyTrigger('eventResizeStop', [
-                {
-                    el: _this.draggingSeg.el,
-                    event: eventApi,
-                    jsEvent: ev.origEvent,
-                    view: view
-                }
-            ]);
-            if (_this.validMutation) {
-                calendar.dispatch({
-                    type: 'MERGE_EVENTS',
-                    eventStore: mutatedRelevantEvents
-                });
-                calendar.publiclyTrigger('eventResize', [
-                    {
-                        el: _this.draggingSeg.el,
-                        startDelta: _this.validMutation.startDelta || createDuration(0),
-                        endDelta: _this.validMutation.endDelta || createDuration(0),
-                        prevEvent: eventApi,
-                        event: new EventApi(// the data AFTER the mutation
-                        calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null),
-                        revert: function () {
-                            calendar.dispatch({
-                                type: 'MERGE_EVENTS',
-                                eventStore: relevantEvents
-                            });
-                        },
-                        jsEvent: ev.origEvent,
-                        view: view
-                    }
-                ]);
-            }
-            else {
-                calendar.publiclyTrigger('_noEventResize');
-            }
-            // reset all internal state
-            _this.draggingSeg = null;
-            _this.relevantEvents = null;
-            _this.validMutation = null;
-            // okay to keep eventInstance around. useful to set it in handlePointerDown
-        };
-        var component = settings.component;
-        var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
-        dragging.pointer.selector = '.fc-resizer';
-        dragging.touchScrollAllowed = false;
-        dragging.autoScroller.isEnabled = component.context.options.dragScroll;
-        var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));
-        hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-        hitDragging.emitter.on('dragstart', _this.handleDragStart);
-        hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
-        hitDragging.emitter.on('dragend', _this.handleDragEnd);
-        return _this;
-    }
-    EventDragging.prototype.destroy = function () {
-        this.dragging.destroy();
-    };
-    EventDragging.prototype.querySeg = function (ev) {
-        return getElSeg(elementClosest(ev.subjectEl, this.component.fgSegSelector));
-    };
-    return EventDragging;
-}(Interaction));
-function computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) {
-    var dateEnv = hit0.component.context.dateEnv;
-    var date0 = hit0.dateSpan.range.start;
-    var date1 = hit1.dateSpan.range.start;
-    var delta = diffDates(date0, date1, dateEnv, hit0.component.largeUnit);
-    var props = {};
-    for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) {
-        var transform = transforms_1[_i];
-        var res = transform(hit0, hit1);
-        if (res === false) {
-            return null;
-        }
-        else if (res) {
-            __assign(props, res);
-        }
-    }
-    if (isFromStart) {
-        if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {
-            props.startDelta = delta;
-            return props;
-        }
-    }
-    else {
-        if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {
-            props.endDelta = delta;
-            return props;
-        }
-    }
-    return null;
-}
-
-var UnselectAuto = /** @class */ (function () {
-    function UnselectAuto(calendar) {
-        var _this = this;
-        this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system
-        this.onSelect = function (selectInfo) {
-            if (selectInfo.jsEvent) {
-                _this.isRecentPointerDateSelect = true;
-            }
-        };
-        this.onDocumentPointerUp = function (pev) {
-            var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer;
-            var state = calendar.state;
-            // touch-scrolling should never unfocus any type of selection
-            if (!documentPointer.wasTouchScroll) {
-                if (state.dateSelection && // an existing date selection?
-                    !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?
-                ) {
-                    var unselectAuto = calendar.viewOpt('unselectAuto');
-                    var unselectCancel = calendar.viewOpt('unselectCancel');
-                    if (unselectAuto && (!unselectAuto || !elementClosest(documentPointer.downEl, unselectCancel))) {
-                        calendar.unselect(pev);
-                    }
-                }
-                if (state.eventSelection && // an existing event selected?
-                    !elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event
-                ) {
-                    calendar.dispatch({ type: 'UNSELECT_EVENT' });
-                }
-            }
-            _this.isRecentPointerDateSelect = false;
-        };
-        this.calendar = calendar;
-        var documentPointer = this.documentPointer = new PointerDragging(document);
-        documentPointer.shouldIgnoreMove = true;
-        documentPointer.shouldWatchScroll = false;
-        documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);
-        /*
-        TODO: better way to know about whether there was a selection with the pointer
-        */
-        calendar.on('select', this.onSelect);
-    }
-    UnselectAuto.prototype.destroy = function () {
-        this.calendar.off('select', this.onSelect);
-        this.documentPointer.destroy();
-    };
-    return UnselectAuto;
-}());
-
-/*
-Given an already instantiated draggable object for one-or-more elements,
-Interprets any dragging as an attempt to drag an events that lives outside
-of a calendar onto a calendar.
-*/
-var ExternalElementDragging = /** @class */ (function () {
-    function ExternalElementDragging(dragging, suppliedDragMeta) {
-        var _this = this;
-        this.receivingCalendar = null;
-        this.droppableEvent = null; // will exist for all drags, even if create:false
-        this.suppliedDragMeta = null;
-        this.dragMeta = null;
-        this.handleDragStart = function (ev) {
-            _this.dragMeta = _this.buildDragMeta(ev.subjectEl);
-        };
-        this.handleHitUpdate = function (hit, isFinal, ev) {
-            var dragging = _this.hitDragging.dragging;
-            var receivingCalendar = null;
-            var droppableEvent = null;
-            var isInvalid = false;
-            var interaction = {
-                affectedEvents: createEmptyEventStore(),
-                mutatedEvents: createEmptyEventStore(),
-                isEvent: _this.dragMeta.create,
-                origSeg: null
-            };
-            if (hit) {
-                receivingCalendar = hit.component.context.calendar;
-                if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) {
-                    droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar);
-                    interaction.mutatedEvents = eventTupleToStore(droppableEvent);
-                    isInvalid = !isInteractionValid(interaction, receivingCalendar);
-                    if (isInvalid) {
-                        interaction.mutatedEvents = createEmptyEventStore();
-                        droppableEvent = null;
-                    }
-                }
-            }
-            _this.displayDrag(receivingCalendar, interaction);
-            // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)
-            // TODO: wish we could somehow wait for dispatch to guarantee render
-            dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror'));
-            if (!isInvalid) {
-                enableCursor();
-            }
-            else {
-                disableCursor();
-            }
-            if (!isFinal) {
-                dragging.setMirrorNeedsRevert(!droppableEvent);
-                _this.receivingCalendar = receivingCalendar;
-                _this.droppableEvent = droppableEvent;
-            }
-        };
-        this.handleDragEnd = function (pev) {
-            var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent;
-            _this.clearDrag();
-            if (receivingCalendar && droppableEvent) {
-                var finalHit = _this.hitDragging.finalHit;
-                var finalView = finalHit.component.context.view;
-                var dragMeta = _this.dragMeta;
-                var arg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView });
-                receivingCalendar.publiclyTrigger('drop', [arg]);
-                if (dragMeta.create) {
-                    receivingCalendar.dispatch({
-                        type: 'MERGE_EVENTS',
-                        eventStore: eventTupleToStore(droppableEvent)
-                    });
-                    if (pev.isTouch) {
-                        receivingCalendar.dispatch({
-                            type: 'SELECT_EVENT',
-                            eventInstanceId: droppableEvent.instance.instanceId
-                        });
-                    }
-                    // signal that an external event landed
-                    receivingCalendar.publiclyTrigger('eventReceive', [
-                        {
-                            draggedEl: pev.subjectEl,
-                            event: new EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance),
-                            view: finalView
-                        }
-                    ]);
-                }
-            }
-            _this.receivingCalendar = null;
-            _this.droppableEvent = null;
-        };
-        var hitDragging = this.hitDragging = new HitDragging(dragging, interactionSettingsStore);
-        hitDragging.requireInitial = false; // will start outside of a component
-        hitDragging.emitter.on('dragstart', this.handleDragStart);
-        hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
-        hitDragging.emitter.on('dragend', this.handleDragEnd);
-        this.suppliedDragMeta = suppliedDragMeta;
-    }
-    ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) {
-        if (typeof this.suppliedDragMeta === 'object') {
-            return parseDragMeta(this.suppliedDragMeta);
-        }
-        else if (typeof this.suppliedDragMeta === 'function') {
-            return parseDragMeta(this.suppliedDragMeta(subjectEl));
-        }
-        else {
-            return getDragMetaFromEl(subjectEl);
-        }
-    };
-    ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) {
-        var prevCalendar = this.receivingCalendar;
-        if (prevCalendar && prevCalendar !== nextCalendar) {
-            prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-        }
-        if (nextCalendar) {
-            nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
-        }
-    };
-    ExternalElementDragging.prototype.clearDrag = function () {
-        if (this.receivingCalendar) {
-            this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-        }
-    };
-    ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) {
-        var dropAccept = receivingCalendar.opt('dropAccept');
-        if (typeof dropAccept === 'function') {
-            return dropAccept(el);
-        }
-        else if (typeof dropAccept === 'string' && dropAccept) {
-            return Boolean(elementMatches(el, dropAccept));
-        }
-        return true;
-    };
-    return ExternalElementDragging;
-}());
-// Utils for computing event store from the DragMeta
-// ----------------------------------------------------------------------------------------------------
-function computeEventForDateSpan(dateSpan, dragMeta, calendar) {
-    var defProps = __assign({}, dragMeta.leftoverProps);
-    for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) {
-        var transform = _a[_i];
-        __assign(defProps, transform(dateSpan, dragMeta));
-    }
-    var def = parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd
-    calendar);
-    var start = dateSpan.range.start;
-    // only rely on time info if drop zone is all-day,
-    // otherwise, we already know the time
-    if (dateSpan.allDay && dragMeta.startTime) {
-        start = calendar.dateEnv.add(start, dragMeta.startTime);
-    }
-    var end = dragMeta.duration ?
-        calendar.dateEnv.add(start, dragMeta.duration) :
-        calendar.getDefaultEventEnd(dateSpan.allDay, start);
-    var instance = createEventInstance(def.defId, { start: start, end: end });
-    return { def: def, instance: instance };
-}
-// Utils for extracting data from element
-// ----------------------------------------------------------------------------------------------------
-function getDragMetaFromEl(el) {
-    var str = getEmbeddedElData(el, 'event');
-    var obj = str ?
-        JSON.parse(str) :
-        { create: false }; // if no embedded data, assume no event creation
-    return parseDragMeta(obj);
-}
-config.dataAttrPrefix = '';
-function getEmbeddedElData(el, name) {
-    var prefix = config.dataAttrPrefix;
-    var prefixedName = (prefix ? prefix + '-' : '') + name;
-    return el.getAttribute('data-' + prefixedName) || '';
-}
-
-/*
-Makes an element (that is *external* to any calendar) draggable.
-Can pass in data that determines how an event will be created when dropped onto a calendar.
-Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.
-*/
-var ExternalDraggable = /** @class */ (function () {
-    function ExternalDraggable(el, settings) {
-        var _this = this;
-        if (settings === void 0) { settings = {}; }
-        this.handlePointerDown = function (ev) {
-            var dragging = _this.dragging;
-            var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay;
-            dragging.minDistance =
-                minDistance != null ?
-                    minDistance :
-                    (ev.isTouch ? 0 : globalDefaults.eventDragMinDistance);
-            dragging.delay =
-                ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv
-                    (longPressDelay != null ? longPressDelay : globalDefaults.longPressDelay) :
-                    0;
-        };
-        this.handleDragStart = function (ev) {
-            if (ev.isTouch &&
-                _this.dragging.delay &&
-                ev.subjectEl.classList.contains('fc-event')) {
-                _this.dragging.mirror.getMirrorEl().classList.add('fc-selected');
-            }
-        };
-        this.settings = settings;
-        var dragging = this.dragging = new FeaturefulElementDragging(el);
-        dragging.touchScrollAllowed = false;
-        if (settings.itemSelector != null) {
-            dragging.pointer.selector = settings.itemSelector;
-        }
-        if (settings.appendTo != null) {
-            dragging.mirror.parentNode = settings.appendTo; // TODO: write tests
-        }
-        dragging.emitter.on('pointerdown', this.handlePointerDown);
-        dragging.emitter.on('dragstart', this.handleDragStart);
-        new ExternalElementDragging(dragging, settings.eventData);
-    }
-    ExternalDraggable.prototype.destroy = function () {
-        this.dragging.destroy();
-    };
-    return ExternalDraggable;
-}());
-
-/*
-Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements.
-The third-party system is responsible for drawing the visuals effects of the drag.
-This class simply monitors for pointer movements and fires events.
-It also has the ability to hide the moving element (the "mirror") during the drag.
-*/
-var InferredElementDragging = /** @class */ (function (_super) {
-    __extends(InferredElementDragging, _super);
-    function InferredElementDragging(containerEl) {
-        var _this = _super.call(this, containerEl) || this;
-        _this.shouldIgnoreMove = false;
-        _this.mirrorSelector = '';
-        _this.currentMirrorEl = null;
-        _this.handlePointerDown = function (ev) {
-            _this.emitter.trigger('pointerdown', ev);
-            if (!_this.shouldIgnoreMove) {
-                // fire dragstart right away. does not support delay or min-distance
-                _this.emitter.trigger('dragstart', ev);
-            }
-        };
-        _this.handlePointerMove = function (ev) {
-            if (!_this.shouldIgnoreMove) {
-                _this.emitter.trigger('dragmove', ev);
-            }
-        };
-        _this.handlePointerUp = function (ev) {
-            _this.emitter.trigger('pointerup', ev);
-            if (!_this.shouldIgnoreMove) {
-                // fire dragend right away. does not support a revert animation
-                _this.emitter.trigger('dragend', ev);
-            }
-        };
-        var pointer = _this.pointer = new PointerDragging(containerEl);
-        pointer.emitter.on('pointerdown', _this.handlePointerDown);
-        pointer.emitter.on('pointermove', _this.handlePointerMove);
-        pointer.emitter.on('pointerup', _this.handlePointerUp);
-        return _this;
-    }
-    InferredElementDragging.prototype.destroy = function () {
-        this.pointer.destroy();
-    };
-    InferredElementDragging.prototype.setIgnoreMove = function (bool) {
-        this.shouldIgnoreMove = bool;
-    };
-    InferredElementDragging.prototype.setMirrorIsVisible = function (bool) {
-        if (bool) {
-            // restore a previously hidden element.
-            // use the reference in case the selector class has already been removed.
-            if (this.currentMirrorEl) {
-                this.currentMirrorEl.style.visibility = '';
-                this.currentMirrorEl = null;
-            }
-        }
-        else {
-            var mirrorEl = this.mirrorSelector ?
-                document.querySelector(this.mirrorSelector) :
-                null;
-            if (mirrorEl) {
-                this.currentMirrorEl = mirrorEl;
-                mirrorEl.style.visibility = 'hidden';
-            }
-        }
-    };
-    return InferredElementDragging;
-}(ElementDragging));
-
-/*
-Bridges third-party drag-n-drop systems with FullCalendar.
-Must be instantiated and destroyed by caller.
-*/
-var ThirdPartyDraggable = /** @class */ (function () {
-    function ThirdPartyDraggable(containerOrSettings, settings) {
-        var containerEl = document;
-        if (
-        // wish we could just test instanceof EventTarget, but doesn't work in IE11
-        containerOrSettings === document ||
-            containerOrSettings instanceof Element) {
-            containerEl = containerOrSettings;
-            settings = settings || {};
-        }
-        else {
-            settings = (containerOrSettings || {});
-        }
-        var dragging = this.dragging = new InferredElementDragging(containerEl);
-        if (typeof settings.itemSelector === 'string') {
-            dragging.pointer.selector = settings.itemSelector;
-        }
-        else if (containerEl === document) {
-            dragging.pointer.selector = '[data-event]';
-        }
-        if (typeof settings.mirrorSelector === 'string') {
-            dragging.mirrorSelector = settings.mirrorSelector;
-        }
-        new ExternalElementDragging(dragging, settings.eventData);
-    }
-    ThirdPartyDraggable.prototype.destroy = function () {
-        this.dragging.destroy();
-    };
-    return ThirdPartyDraggable;
-}());
-
-var main = createPlugin({
-    componentInteractions: [DateClicking, DateSelecting, EventDragging, EventDragging$1],
-    calendarInteractions: [UnselectAuto],
-    elementDraggingImpl: FeaturefulElementDragging
-});
-
-export default main;
-export { ExternalDraggable as Draggable, FeaturefulElementDragging, PointerDragging, ThirdPartyDraggable };

+ 0 - 2152
plugins/fullcalendar-interaction/main.js

@@ -1,2152 +0,0 @@
-/*!
-FullCalendar Interaction Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
-    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
-    typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
-    (global = global || self, factory(global.FullCalendarInteraction = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
-    /*! *****************************************************************************
-    Copyright (c) Microsoft Corporation.
-
-    Permission to use, copy, modify, and/or distribute this software for any
-    purpose with or without fee is hereby granted.
-
-    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-    PERFORMANCE OF THIS SOFTWARE.
-    ***************************************************************************** */
-    /* global Reflect, Promise */
-
-    var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-
-    function __extends(d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    }
-
-    var __assign = function() {
-        __assign = Object.assign || function __assign(t) {
-            for (var s, i = 1, n = arguments.length; i < n; i++) {
-                s = arguments[i];
-                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-            }
-            return t;
-        };
-        return __assign.apply(this, arguments);
-    };
-
-    core.config.touchMouseIgnoreWait = 500;
-    var ignoreMouseDepth = 0;
-    var listenerCnt = 0;
-    var isWindowTouchMoveCancelled = false;
-    /*
-    Uses a "pointer" abstraction, which monitors UI events for both mouse and touch.
-    Tracks when the pointer "drags" on a certain element, meaning down+move+up.
-
-    Also, tracks if there was touch-scrolling.
-    Also, can prevent touch-scrolling from happening.
-    Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.
-
-    emits:
-    - pointerdown
-    - pointermove
-    - pointerup
-    */
-    var PointerDragging = /** @class */ (function () {
-        function PointerDragging(containerEl) {
-            var _this = this;
-            this.subjectEl = null;
-            this.downEl = null;
-            // options that can be directly assigned by caller
-            this.selector = ''; // will cause subjectEl in all emitted events to be this element
-            this.handleSelector = '';
-            this.shouldIgnoreMove = false;
-            this.shouldWatchScroll = true; // for simulating pointermove on scroll
-            // internal states
-            this.isDragging = false;
-            this.isTouchDragging = false;
-            this.wasTouchScroll = false;
-            // Mouse
-            // ----------------------------------------------------------------------------------------------------
-            this.handleMouseDown = function (ev) {
-                if (!_this.shouldIgnoreMouse() &&
-                    isPrimaryMouseButton(ev) &&
-                    _this.tryStart(ev)) {
-                    var pev = _this.createEventFromMouse(ev, true);
-                    _this.emitter.trigger('pointerdown', pev);
-                    _this.initScrollWatch(pev);
-                    if (!_this.shouldIgnoreMove) {
-                        document.addEventListener('mousemove', _this.handleMouseMove);
-                    }
-                    document.addEventListener('mouseup', _this.handleMouseUp);
-                }
-            };
-            this.handleMouseMove = function (ev) {
-                var pev = _this.createEventFromMouse(ev);
-                _this.recordCoords(pev);
-                _this.emitter.trigger('pointermove', pev);
-            };
-            this.handleMouseUp = function (ev) {
-                document.removeEventListener('mousemove', _this.handleMouseMove);
-                document.removeEventListener('mouseup', _this.handleMouseUp);
-                _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev));
-                _this.cleanup(); // call last so that pointerup has access to props
-            };
-            // Touch
-            // ----------------------------------------------------------------------------------------------------
-            this.handleTouchStart = function (ev) {
-                if (_this.tryStart(ev)) {
-                    _this.isTouchDragging = true;
-                    var pev = _this.createEventFromTouch(ev, true);
-                    _this.emitter.trigger('pointerdown', pev);
-                    _this.initScrollWatch(pev);
-                    // unlike mouse, need to attach to target, not document
-                    // https://stackoverflow.com/a/45760014
-                    var target = ev.target;
-                    if (!_this.shouldIgnoreMove) {
-                        target.addEventListener('touchmove', _this.handleTouchMove);
-                    }
-                    target.addEventListener('touchend', _this.handleTouchEnd);
-                    target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end
-                    // attach a handler to get called when ANY scroll action happens on the page.
-                    // this was impossible to do with normal on/off because 'scroll' doesn't bubble.
-                    // http://stackoverflow.com/a/32954565/96342
-                    window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture
-                    );
-                }
-            };
-            this.handleTouchMove = function (ev) {
-                var pev = _this.createEventFromTouch(ev);
-                _this.recordCoords(pev);
-                _this.emitter.trigger('pointermove', pev);
-            };
-            this.handleTouchEnd = function (ev) {
-                if (_this.isDragging) { // done to guard against touchend followed by touchcancel
-                    var target = ev.target;
-                    target.removeEventListener('touchmove', _this.handleTouchMove);
-                    target.removeEventListener('touchend', _this.handleTouchEnd);
-                    target.removeEventListener('touchcancel', _this.handleTouchEnd);
-                    window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true
-                    _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev));
-                    _this.cleanup(); // call last so that pointerup has access to props
-                    _this.isTouchDragging = false;
-                    startIgnoringMouse();
-                }
-            };
-            this.handleTouchScroll = function () {
-                _this.wasTouchScroll = true;
-            };
-            this.handleScroll = function (ev) {
-                if (!_this.shouldIgnoreMove) {
-                    var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX;
-                    var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY;
-                    _this.emitter.trigger('pointermove', {
-                        origEvent: ev,
-                        isTouch: _this.isTouchDragging,
-                        subjectEl: _this.subjectEl,
-                        pageX: pageX,
-                        pageY: pageY,
-                        deltaX: pageX - _this.origPageX,
-                        deltaY: pageY - _this.origPageY
-                    });
-                }
-            };
-            this.containerEl = containerEl;
-            this.emitter = new core.EmitterMixin();
-            containerEl.addEventListener('mousedown', this.handleMouseDown);
-            containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });
-            listenerCreated();
-        }
-        PointerDragging.prototype.destroy = function () {
-            this.containerEl.removeEventListener('mousedown', this.handleMouseDown);
-            this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
-            listenerDestroyed();
-        };
-        PointerDragging.prototype.tryStart = function (ev) {
-            var subjectEl = this.querySubjectEl(ev);
-            var downEl = ev.target;
-            if (subjectEl &&
-                (!this.handleSelector || core.elementClosest(downEl, this.handleSelector))) {
-                this.subjectEl = subjectEl;
-                this.downEl = downEl;
-                this.isDragging = true; // do this first so cancelTouchScroll will work
-                this.wasTouchScroll = false;
-                return true;
-            }
-            return false;
-        };
-        PointerDragging.prototype.cleanup = function () {
-            isWindowTouchMoveCancelled = false;
-            this.isDragging = false;
-            this.subjectEl = null;
-            this.downEl = null;
-            // keep wasTouchScroll around for later access
-            this.destroyScrollWatch();
-        };
-        PointerDragging.prototype.querySubjectEl = function (ev) {
-            if (this.selector) {
-                return core.elementClosest(ev.target, this.selector);
-            }
-            else {
-                return this.containerEl;
-            }
-        };
-        PointerDragging.prototype.shouldIgnoreMouse = function () {
-            return ignoreMouseDepth || this.isTouchDragging;
-        };
-        // can be called by user of this class, to cancel touch-based scrolling for the current drag
-        PointerDragging.prototype.cancelTouchScroll = function () {
-            if (this.isDragging) {
-                isWindowTouchMoveCancelled = true;
-            }
-        };
-        // Scrolling that simulates pointermoves
-        // ----------------------------------------------------------------------------------------------------
-        PointerDragging.prototype.initScrollWatch = function (ev) {
-            if (this.shouldWatchScroll) {
-                this.recordCoords(ev);
-                window.addEventListener('scroll', this.handleScroll, true); // useCapture=true
-            }
-        };
-        PointerDragging.prototype.recordCoords = function (ev) {
-            if (this.shouldWatchScroll) {
-                this.prevPageX = ev.pageX;
-                this.prevPageY = ev.pageY;
-                this.prevScrollX = window.pageXOffset;
-                this.prevScrollY = window.pageYOffset;
-            }
-        };
-        PointerDragging.prototype.destroyScrollWatch = function () {
-            if (this.shouldWatchScroll) {
-                window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true
-            }
-        };
-        // Event Normalization
-        // ----------------------------------------------------------------------------------------------------
-        PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) {
-            var deltaX = 0;
-            var deltaY = 0;
-            // TODO: repeat code
-            if (isFirst) {
-                this.origPageX = ev.pageX;
-                this.origPageY = ev.pageY;
-            }
-            else {
-                deltaX = ev.pageX - this.origPageX;
-                deltaY = ev.pageY - this.origPageY;
-            }
-            return {
-                origEvent: ev,
-                isTouch: false,
-                subjectEl: this.subjectEl,
-                pageX: ev.pageX,
-                pageY: ev.pageY,
-                deltaX: deltaX,
-                deltaY: deltaY
-            };
-        };
-        PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) {
-            var touches = ev.touches;
-            var pageX;
-            var pageY;
-            var deltaX = 0;
-            var deltaY = 0;
-            // if touch coords available, prefer,
-            // because FF would give bad ev.pageX ev.pageY
-            if (touches && touches.length) {
-                pageX = touches[0].pageX;
-                pageY = touches[0].pageY;
-            }
-            else {
-                pageX = ev.pageX;
-                pageY = ev.pageY;
-            }
-            // TODO: repeat code
-            if (isFirst) {
-                this.origPageX = pageX;
-                this.origPageY = pageY;
-            }
-            else {
-                deltaX = pageX - this.origPageX;
-                deltaY = pageY - this.origPageY;
-            }
-            return {
-                origEvent: ev,
-                isTouch: true,
-                subjectEl: this.subjectEl,
-                pageX: pageX,
-                pageY: pageY,
-                deltaX: deltaX,
-                deltaY: deltaY
-            };
-        };
-        return PointerDragging;
-    }());
-    // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)
-    function isPrimaryMouseButton(ev) {
-        return ev.button === 0 && !ev.ctrlKey;
-    }
-    // Ignoring fake mouse events generated by touch
-    // ----------------------------------------------------------------------------------------------------
-    function startIgnoringMouse() {
-        ignoreMouseDepth++;
-        setTimeout(function () {
-            ignoreMouseDepth--;
-        }, core.config.touchMouseIgnoreWait);
-    }
-    // We want to attach touchmove as early as possible for Safari
-    // ----------------------------------------------------------------------------------------------------
-    function listenerCreated() {
-        if (!(listenerCnt++)) {
-            window.addEventListener('touchmove', onWindowTouchMove, { passive: false });
-        }
-    }
-    function listenerDestroyed() {
-        if (!(--listenerCnt)) {
-            window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });
-        }
-    }
-    function onWindowTouchMove(ev) {
-        if (isWindowTouchMoveCancelled) {
-            ev.preventDefault();
-        }
-    }
-
-    /*
-    An effect in which an element follows the movement of a pointer across the screen.
-    The moving element is a clone of some other element.
-    Must call start + handleMove + stop.
-    */
-    var ElementMirror = /** @class */ (function () {
-        function ElementMirror() {
-            this.isVisible = false; // must be explicitly enabled
-            this.sourceEl = null;
-            this.mirrorEl = null;
-            this.sourceElRect = null; // screen coords relative to viewport
-            // options that can be set directly by caller
-            this.parentNode = document.body;
-            this.zIndex = 9999;
-            this.revertDuration = 0;
-        }
-        ElementMirror.prototype.start = function (sourceEl, pageX, pageY) {
-            this.sourceEl = sourceEl;
-            this.sourceElRect = this.sourceEl.getBoundingClientRect();
-            this.origScreenX = pageX - window.pageXOffset;
-            this.origScreenY = pageY - window.pageYOffset;
-            this.deltaX = 0;
-            this.deltaY = 0;
-            this.updateElPosition();
-        };
-        ElementMirror.prototype.handleMove = function (pageX, pageY) {
-            this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;
-            this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;
-            this.updateElPosition();
-        };
-        // can be called before start
-        ElementMirror.prototype.setIsVisible = function (bool) {
-            if (bool) {
-                if (!this.isVisible) {
-                    if (this.mirrorEl) {
-                        this.mirrorEl.style.display = '';
-                    }
-                    this.isVisible = bool; // needs to happen before updateElPosition
-                    this.updateElPosition(); // because was not updating the position while invisible
-                }
-            }
-            else {
-                if (this.isVisible) {
-                    if (this.mirrorEl) {
-                        this.mirrorEl.style.display = 'none';
-                    }
-                    this.isVisible = bool;
-                }
-            }
-        };
-        // always async
-        ElementMirror.prototype.stop = function (needsRevertAnimation, callback) {
-            var _this = this;
-            var done = function () {
-                _this.cleanup();
-                callback();
-            };
-            if (needsRevertAnimation &&
-                this.mirrorEl &&
-                this.isVisible &&
-                this.revertDuration && // if 0, transition won't work
-                (this.deltaX || this.deltaY) // if same coords, transition won't work
-            ) {
-                this.doRevertAnimation(done, this.revertDuration);
-            }
-            else {
-                setTimeout(done, 0);
-            }
-        };
-        ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) {
-            var mirrorEl = this.mirrorEl;
-            var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened
-            mirrorEl.style.transition =
-                'top ' + revertDuration + 'ms,' +
-                    'left ' + revertDuration + 'ms';
-            core.applyStyle(mirrorEl, {
-                left: finalSourceElRect.left,
-                top: finalSourceElRect.top
-            });
-            core.whenTransitionDone(mirrorEl, function () {
-                mirrorEl.style.transition = '';
-                callback();
-            });
-        };
-        ElementMirror.prototype.cleanup = function () {
-            if (this.mirrorEl) {
-                core.removeElement(this.mirrorEl);
-                this.mirrorEl = null;
-            }
-            this.sourceEl = null;
-        };
-        ElementMirror.prototype.updateElPosition = function () {
-            if (this.sourceEl && this.isVisible) {
-                core.applyStyle(this.getMirrorEl(), {
-                    left: this.sourceElRect.left + this.deltaX,
-                    top: this.sourceElRect.top + this.deltaY
-                });
-            }
-        };
-        ElementMirror.prototype.getMirrorEl = function () {
-            var sourceElRect = this.sourceElRect;
-            var mirrorEl = this.mirrorEl;
-            if (!mirrorEl) {
-                mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true
-                // we don't want long taps or any mouse interaction causing selection/menus.
-                // would use preventSelection(), but that prevents selectstart, causing problems.
-                mirrorEl.classList.add('fc-unselectable');
-                mirrorEl.classList.add('fc-dragging');
-                core.applyStyle(mirrorEl, {
-                    position: 'fixed',
-                    zIndex: this.zIndex,
-                    visibility: '',
-                    boxSizing: 'border-box',
-                    width: sourceElRect.right - sourceElRect.left,
-                    height: sourceElRect.bottom - sourceElRect.top,
-                    right: 'auto',
-                    bottom: 'auto',
-                    margin: 0
-                });
-                this.parentNode.appendChild(mirrorEl);
-            }
-            return mirrorEl;
-        };
-        return ElementMirror;
-    }());
-
-    /*
-    Is a cache for a given element's scroll information (all the info that ScrollController stores)
-    in addition the "client rectangle" of the element.. the area within the scrollbars.
-
-    The cache can be in one of two modes:
-    - doesListening:false - ignores when the container is scrolled by someone else
-    - doesListening:true - watch for scrolling and update the cache
-    */
-    var ScrollGeomCache = /** @class */ (function (_super) {
-        __extends(ScrollGeomCache, _super);
-        function ScrollGeomCache(scrollController, doesListening) {
-            var _this = _super.call(this) || this;
-            _this.handleScroll = function () {
-                _this.scrollTop = _this.scrollController.getScrollTop();
-                _this.scrollLeft = _this.scrollController.getScrollLeft();
-                _this.handleScrollChange();
-            };
-            _this.scrollController = scrollController;
-            _this.doesListening = doesListening;
-            _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop();
-            _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft();
-            _this.scrollWidth = scrollController.getScrollWidth();
-            _this.scrollHeight = scrollController.getScrollHeight();
-            _this.clientWidth = scrollController.getClientWidth();
-            _this.clientHeight = scrollController.getClientHeight();
-            _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values
-            if (_this.doesListening) {
-                _this.getEventTarget().addEventListener('scroll', _this.handleScroll);
-            }
-            return _this;
-        }
-        ScrollGeomCache.prototype.destroy = function () {
-            if (this.doesListening) {
-                this.getEventTarget().removeEventListener('scroll', this.handleScroll);
-            }
-        };
-        ScrollGeomCache.prototype.getScrollTop = function () {
-            return this.scrollTop;
-        };
-        ScrollGeomCache.prototype.getScrollLeft = function () {
-            return this.scrollLeft;
-        };
-        ScrollGeomCache.prototype.setScrollTop = function (top) {
-            this.scrollController.setScrollTop(top);
-            if (!this.doesListening) {
-                // we are not relying on the element to normalize out-of-bounds scroll values
-                // so we need to sanitize ourselves
-                this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);
-                this.handleScrollChange();
-            }
-        };
-        ScrollGeomCache.prototype.setScrollLeft = function (top) {
-            this.scrollController.setScrollLeft(top);
-            if (!this.doesListening) {
-                // we are not relying on the element to normalize out-of-bounds scroll values
-                // so we need to sanitize ourselves
-                this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);
-                this.handleScrollChange();
-            }
-        };
-        ScrollGeomCache.prototype.getClientWidth = function () {
-            return this.clientWidth;
-        };
-        ScrollGeomCache.prototype.getClientHeight = function () {
-            return this.clientHeight;
-        };
-        ScrollGeomCache.prototype.getScrollWidth = function () {
-            return this.scrollWidth;
-        };
-        ScrollGeomCache.prototype.getScrollHeight = function () {
-            return this.scrollHeight;
-        };
-        ScrollGeomCache.prototype.handleScrollChange = function () {
-        };
-        return ScrollGeomCache;
-    }(core.ScrollController));
-    var ElementScrollGeomCache = /** @class */ (function (_super) {
-        __extends(ElementScrollGeomCache, _super);
-        function ElementScrollGeomCache(el, doesListening) {
-            return _super.call(this, new core.ElementScrollController(el), doesListening) || this;
-        }
-        ElementScrollGeomCache.prototype.getEventTarget = function () {
-            return this.scrollController.el;
-        };
-        ElementScrollGeomCache.prototype.computeClientRect = function () {
-            return core.computeInnerRect(this.scrollController.el);
-        };
-        return ElementScrollGeomCache;
-    }(ScrollGeomCache));
-    var WindowScrollGeomCache = /** @class */ (function (_super) {
-        __extends(WindowScrollGeomCache, _super);
-        function WindowScrollGeomCache(doesListening) {
-            return _super.call(this, new core.WindowScrollController(), doesListening) || this;
-        }
-        WindowScrollGeomCache.prototype.getEventTarget = function () {
-            return window;
-        };
-        WindowScrollGeomCache.prototype.computeClientRect = function () {
-            return {
-                left: this.scrollLeft,
-                right: this.scrollLeft + this.clientWidth,
-                top: this.scrollTop,
-                bottom: this.scrollTop + this.clientHeight
-            };
-        };
-        // the window is the only scroll object that changes it's rectangle relative
-        // to the document's topleft as it scrolls
-        WindowScrollGeomCache.prototype.handleScrollChange = function () {
-            this.clientRect = this.computeClientRect();
-        };
-        return WindowScrollGeomCache;
-    }(ScrollGeomCache));
-
-    // If available we are using native "performance" API instead of "Date"
-    // Read more about it on MDN:
-    // https://developer.mozilla.org/en-US/docs/Web/API/Performance
-    var getTime = typeof performance === 'function' ? performance.now : Date.now;
-    /*
-    For a pointer interaction, automatically scrolls certain scroll containers when the pointer
-    approaches the edge.
-
-    The caller must call start + handleMove + stop.
-    */
-    var AutoScroller = /** @class */ (function () {
-        function AutoScroller() {
-            var _this = this;
-            // options that can be set by caller
-            this.isEnabled = true;
-            this.scrollQuery = [window, '.fc-scroller'];
-            this.edgeThreshold = 50; // pixels
-            this.maxVelocity = 300; // pixels per second
-            // internal state
-            this.pointerScreenX = null;
-            this.pointerScreenY = null;
-            this.isAnimating = false;
-            this.scrollCaches = null;
-            // protect against the initial pointerdown being too close to an edge and starting the scroll
-            this.everMovedUp = false;
-            this.everMovedDown = false;
-            this.everMovedLeft = false;
-            this.everMovedRight = false;
-            this.animate = function () {
-                if (_this.isAnimating) { // wasn't cancelled between animation calls
-                    var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset);
-                    if (edge) {
-                        var now = getTime();
-                        _this.handleSide(edge, (now - _this.msSinceRequest) / 1000);
-                        _this.requestAnimation(now);
-                    }
-                    else {
-                        _this.isAnimating = false; // will stop animation
-                    }
-                }
-            };
-        }
-        AutoScroller.prototype.start = function (pageX, pageY) {
-            if (this.isEnabled) {
-                this.scrollCaches = this.buildCaches();
-                this.pointerScreenX = null;
-                this.pointerScreenY = null;
-                this.everMovedUp = false;
-                this.everMovedDown = false;
-                this.everMovedLeft = false;
-                this.everMovedRight = false;
-                this.handleMove(pageX, pageY);
-            }
-        };
-        AutoScroller.prototype.handleMove = function (pageX, pageY) {
-            if (this.isEnabled) {
-                var pointerScreenX = pageX - window.pageXOffset;
-                var pointerScreenY = pageY - window.pageYOffset;
-                var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;
-                var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;
-                if (yDelta < 0) {
-                    this.everMovedUp = true;
-                }
-                else if (yDelta > 0) {
-                    this.everMovedDown = true;
-                }
-                if (xDelta < 0) {
-                    this.everMovedLeft = true;
-                }
-                else if (xDelta > 0) {
-                    this.everMovedRight = true;
-                }
-                this.pointerScreenX = pointerScreenX;
-                this.pointerScreenY = pointerScreenY;
-                if (!this.isAnimating) {
-                    this.isAnimating = true;
-                    this.requestAnimation(getTime());
-                }
-            }
-        };
-        AutoScroller.prototype.stop = function () {
-            if (this.isEnabled) {
-                this.isAnimating = false; // will stop animation
-                for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-                    var scrollCache = _a[_i];
-                    scrollCache.destroy();
-                }
-                this.scrollCaches = null;
-            }
-        };
-        AutoScroller.prototype.requestAnimation = function (now) {
-            this.msSinceRequest = now;
-            requestAnimationFrame(this.animate);
-        };
-        AutoScroller.prototype.handleSide = function (edge, seconds) {
-            var scrollCache = edge.scrollCache;
-            var edgeThreshold = this.edgeThreshold;
-            var invDistance = edgeThreshold - edge.distance;
-            var velocity = // the closer to the edge, the faster we scroll
-             (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic
-                this.maxVelocity * seconds;
-            var sign = 1;
-            switch (edge.name) {
-                case 'left':
-                    sign = -1;
-                // falls through
-                case 'right':
-                    scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);
-                    break;
-                case 'top':
-                    sign = -1;
-                // falls through
-                case 'bottom':
-                    scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);
-                    break;
-            }
-        };
-        // left/top are relative to document topleft
-        AutoScroller.prototype.computeBestEdge = function (left, top) {
-            var edgeThreshold = this.edgeThreshold;
-            var bestSide = null;
-            for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-                var scrollCache = _a[_i];
-                var rect = scrollCache.clientRect;
-                var leftDist = left - rect.left;
-                var rightDist = rect.right - left;
-                var topDist = top - rect.top;
-                var bottomDist = rect.bottom - top;
-                // completely within the rect?
-                if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {
-                    if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&
-                        (!bestSide || bestSide.distance > topDist)) {
-                        bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist };
-                    }
-                    if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&
-                        (!bestSide || bestSide.distance > bottomDist)) {
-                        bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist };
-                    }
-                    if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&
-                        (!bestSide || bestSide.distance > leftDist)) {
-                        bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist };
-                    }
-                    if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&
-                        (!bestSide || bestSide.distance > rightDist)) {
-                        bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist };
-                    }
-                }
-            }
-            return bestSide;
-        };
-        AutoScroller.prototype.buildCaches = function () {
-            return this.queryScrollEls().map(function (el) {
-                if (el === window) {
-                    return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls
-                }
-                else {
-                    return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls
-                }
-            });
-        };
-        AutoScroller.prototype.queryScrollEls = function () {
-            var els = [];
-            for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) {
-                var query = _a[_i];
-                if (typeof query === 'object') {
-                    els.push(query);
-                }
-                else {
-                    els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query)));
-                }
-            }
-            return els;
-        };
-        return AutoScroller;
-    }());
-
-    /*
-    Monitors dragging on an element. Has a number of high-level features:
-    - minimum distance required before dragging
-    - minimum wait time ("delay") before dragging
-    - a mirror element that follows the pointer
-    */
-    var FeaturefulElementDragging = /** @class */ (function (_super) {
-        __extends(FeaturefulElementDragging, _super);
-        function FeaturefulElementDragging(containerEl) {
-            var _this = _super.call(this, containerEl) || this;
-            // options that can be directly set by caller
-            // the caller can also set the PointerDragging's options as well
-            _this.delay = null;
-            _this.minDistance = 0;
-            _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag
-            _this.mirrorNeedsRevert = false;
-            _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup
-            _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation
-            _this.isDelayEnded = false;
-            _this.isDistanceSurpassed = false;
-            _this.delayTimeoutId = null;
-            _this.onPointerDown = function (ev) {
-                if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going
-                    _this.isInteracting = true;
-                    _this.isDelayEnded = false;
-                    _this.isDistanceSurpassed = false;
-                    core.preventSelection(document.body);
-                    core.preventContextMenu(document.body);
-                    // prevent links from being visited if there's an eventual drag.
-                    // also prevents selection in older browsers (maybe?).
-                    // not necessary for touch, besides, browser would complain about passiveness.
-                    if (!ev.isTouch) {
-                        ev.origEvent.preventDefault();
-                    }
-                    _this.emitter.trigger('pointerdown', ev);
-                    if (!_this.pointer.shouldIgnoreMove) {
-                        // actions related to initiating dragstart+dragmove+dragend...
-                        _this.mirror.setIsVisible(false); // reset. caller must set-visible
-                        _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down
-                        _this.startDelay(ev);
-                        if (!_this.minDistance) {
-                            _this.handleDistanceSurpassed(ev);
-                        }
-                    }
-                }
-            };
-            _this.onPointerMove = function (ev) {
-                if (_this.isInteracting) { // if false, still waiting for previous drag's revert
-                    _this.emitter.trigger('pointermove', ev);
-                    if (!_this.isDistanceSurpassed) {
-                        var minDistance = _this.minDistance;
-                        var distanceSq = void 0; // current distance from the origin, squared
-                        var deltaX = ev.deltaX, deltaY = ev.deltaY;
-                        distanceSq = deltaX * deltaX + deltaY * deltaY;
-                        if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem
-                            _this.handleDistanceSurpassed(ev);
-                        }
-                    }
-                    if (_this.isDragging) {
-                        // a real pointer move? (not one simulated by scrolling)
-                        if (ev.origEvent.type !== 'scroll') {
-                            _this.mirror.handleMove(ev.pageX, ev.pageY);
-                            _this.autoScroller.handleMove(ev.pageX, ev.pageY);
-                        }
-                        _this.emitter.trigger('dragmove', ev);
-                    }
-                }
-            };
-            _this.onPointerUp = function (ev) {
-                if (_this.isInteracting) { // if false, still waiting for previous drag's revert
-                    _this.isInteracting = false;
-                    core.allowSelection(document.body);
-                    core.allowContextMenu(document.body);
-                    _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert
-                    if (_this.isDragging) {
-                        _this.autoScroller.stop();
-                        _this.tryStopDrag(ev); // which will stop the mirror
-                    }
-                    if (_this.delayTimeoutId) {
-                        clearTimeout(_this.delayTimeoutId);
-                        _this.delayTimeoutId = null;
-                    }
-                }
-            };
-            var pointer = _this.pointer = new PointerDragging(containerEl);
-            pointer.emitter.on('pointerdown', _this.onPointerDown);
-            pointer.emitter.on('pointermove', _this.onPointerMove);
-            pointer.emitter.on('pointerup', _this.onPointerUp);
-            _this.mirror = new ElementMirror();
-            _this.autoScroller = new AutoScroller();
-            return _this;
-        }
-        FeaturefulElementDragging.prototype.destroy = function () {
-            this.pointer.destroy();
-        };
-        FeaturefulElementDragging.prototype.startDelay = function (ev) {
-            var _this = this;
-            if (typeof this.delay === 'number') {
-                this.delayTimeoutId = setTimeout(function () {
-                    _this.delayTimeoutId = null;
-                    _this.handleDelayEnd(ev);
-                }, this.delay); // not assignable to number!
-            }
-            else {
-                this.handleDelayEnd(ev);
-            }
-        };
-        FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) {
-            this.isDelayEnded = true;
-            this.tryStartDrag(ev);
-        };
-        FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) {
-            this.isDistanceSurpassed = true;
-            this.tryStartDrag(ev);
-        };
-        FeaturefulElementDragging.prototype.tryStartDrag = function (ev) {
-            if (this.isDelayEnded && this.isDistanceSurpassed) {
-                if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {
-                    this.isDragging = true;
-                    this.mirrorNeedsRevert = false;
-                    this.autoScroller.start(ev.pageX, ev.pageY);
-                    this.emitter.trigger('dragstart', ev);
-                    if (this.touchScrollAllowed === false) {
-                        this.pointer.cancelTouchScroll();
-                    }
-                }
-            }
-        };
-        FeaturefulElementDragging.prototype.tryStopDrag = function (ev) {
-            // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events
-            // that come from the document to fire beforehand. much more convenient this way.
-            this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args
-            );
-        };
-        FeaturefulElementDragging.prototype.stopDrag = function (ev) {
-            this.isDragging = false;
-            this.emitter.trigger('dragend', ev);
-        };
-        // fill in the implementations...
-        FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) {
-            this.pointer.shouldIgnoreMove = bool;
-        };
-        FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) {
-            this.mirror.setIsVisible(bool);
-        };
-        FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) {
-            this.mirrorNeedsRevert = bool;
-        };
-        FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) {
-            this.autoScroller.isEnabled = bool;
-        };
-        return FeaturefulElementDragging;
-    }(core.ElementDragging));
-
-    /*
-    When this class is instantiated, it records the offset of an element (relative to the document topleft),
-    and continues to monitor scrolling, updating the cached coordinates if it needs to.
-    Does not access the DOM after instantiation, so highly performant.
-
-    Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element
-    and an determine if a given point is inside the combined clipping rectangle.
-    */
-    var OffsetTracker = /** @class */ (function () {
-        function OffsetTracker(el) {
-            this.origRect = core.computeRect(el);
-            // will work fine for divs that have overflow:hidden
-            this.scrollCaches = core.getClippingParents(el).map(function (el) {
-                return new ElementScrollGeomCache(el, true); // listen=true
-            });
-        }
-        OffsetTracker.prototype.destroy = function () {
-            for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-                var scrollCache = _a[_i];
-                scrollCache.destroy();
-            }
-        };
-        OffsetTracker.prototype.computeLeft = function () {
-            var left = this.origRect.left;
-            for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-                var scrollCache = _a[_i];
-                left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();
-            }
-            return left;
-        };
-        OffsetTracker.prototype.computeTop = function () {
-            var top = this.origRect.top;
-            for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-                var scrollCache = _a[_i];
-                top += scrollCache.origScrollTop - scrollCache.getScrollTop();
-            }
-            return top;
-        };
-        OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) {
-            var point = { left: pageX, top: pageY };
-            for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
-                var scrollCache = _a[_i];
-                if (!isIgnoredClipping(scrollCache.getEventTarget()) &&
-                    !core.pointInsideRect(point, scrollCache.clientRect)) {
-                    return false;
-                }
-            }
-            return true;
-        };
-        return OffsetTracker;
-    }());
-    // certain clipping containers should never constrain interactions, like <html> and <body>
-    // https://github.com/fullcalendar/fullcalendar/issues/3615
-    function isIgnoredClipping(node) {
-        var tagName = node.tagName;
-        return tagName === 'HTML' || tagName === 'BODY';
-    }
-
-    /*
-    Tracks movement over multiple droppable areas (aka "hits")
-    that exist in one or more DateComponents.
-    Relies on an existing draggable.
-
-    emits:
-    - pointerdown
-    - dragstart
-    - hitchange - fires initially, even if not over a hit
-    - pointerup
-    - (hitchange - again, to null, if ended over a hit)
-    - dragend
-    */
-    var HitDragging = /** @class */ (function () {
-        function HitDragging(dragging, droppableStore) {
-            var _this = this;
-            // options that can be set by caller
-            this.useSubjectCenter = false;
-            this.requireInitial = true; // if doesn't start out on a hit, won't emit any events
-            this.initialHit = null;
-            this.movingHit = null;
-            this.finalHit = null; // won't ever be populated if shouldIgnoreMove
-            this.handlePointerDown = function (ev) {
-                var dragging = _this.dragging;
-                _this.initialHit = null;
-                _this.movingHit = null;
-                _this.finalHit = null;
-                _this.prepareHits();
-                _this.processFirstCoord(ev);
-                if (_this.initialHit || !_this.requireInitial) {
-                    dragging.setIgnoreMove(false);
-                    _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(
-                }
-                else {
-                    dragging.setIgnoreMove(true);
-                }
-            };
-            this.handleDragStart = function (ev) {
-                _this.emitter.trigger('dragstart', ev);
-                _this.handleMove(ev, true); // force = fire even if initially null
-            };
-            this.handleDragMove = function (ev) {
-                _this.emitter.trigger('dragmove', ev);
-                _this.handleMove(ev);
-            };
-            this.handlePointerUp = function (ev) {
-                _this.releaseHits();
-                _this.emitter.trigger('pointerup', ev);
-            };
-            this.handleDragEnd = function (ev) {
-                if (_this.movingHit) {
-                    _this.emitter.trigger('hitupdate', null, true, ev);
-                }
-                _this.finalHit = _this.movingHit;
-                _this.movingHit = null;
-                _this.emitter.trigger('dragend', ev);
-            };
-            this.droppableStore = droppableStore;
-            dragging.emitter.on('pointerdown', this.handlePointerDown);
-            dragging.emitter.on('dragstart', this.handleDragStart);
-            dragging.emitter.on('dragmove', this.handleDragMove);
-            dragging.emitter.on('pointerup', this.handlePointerUp);
-            dragging.emitter.on('dragend', this.handleDragEnd);
-            this.dragging = dragging;
-            this.emitter = new core.EmitterMixin();
-        }
-        // sets initialHit
-        // sets coordAdjust
-        HitDragging.prototype.processFirstCoord = function (ev) {
-            var origPoint = { left: ev.pageX, top: ev.pageY };
-            var adjustedPoint = origPoint;
-            var subjectEl = ev.subjectEl;
-            var subjectRect;
-            if (subjectEl !== document) {
-                subjectRect = core.computeRect(subjectEl);
-                adjustedPoint = core.constrainPoint(adjustedPoint, subjectRect);
-            }
-            var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);
-            if (initialHit) {
-                if (this.useSubjectCenter && subjectRect) {
-                    var slicedSubjectRect = core.intersectRects(subjectRect, initialHit.rect);
-                    if (slicedSubjectRect) {
-                        adjustedPoint = core.getRectCenter(slicedSubjectRect);
-                    }
-                }
-                this.coordAdjust = core.diffPoints(adjustedPoint, origPoint);
-            }
-            else {
-                this.coordAdjust = { left: 0, top: 0 };
-            }
-        };
-        HitDragging.prototype.handleMove = function (ev, forceHandle) {
-            var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);
-            if (forceHandle || !isHitsEqual(this.movingHit, hit)) {
-                this.movingHit = hit;
-                this.emitter.trigger('hitupdate', hit, false, ev);
-            }
-        };
-        HitDragging.prototype.prepareHits = function () {
-            this.offsetTrackers = core.mapHash(this.droppableStore, function (interactionSettings) {
-                interactionSettings.component.buildPositionCaches();
-                return new OffsetTracker(interactionSettings.el);
-            });
-        };
-        HitDragging.prototype.releaseHits = function () {
-            var offsetTrackers = this.offsetTrackers;
-            for (var id in offsetTrackers) {
-                offsetTrackers[id].destroy();
-            }
-            this.offsetTrackers = {};
-        };
-        HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) {
-            var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers;
-            var bestHit = null;
-            for (var id in droppableStore) {
-                var component = droppableStore[id].component;
-                var offsetTracker = offsetTrackers[id];
-                if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {
-                    var originLeft = offsetTracker.computeLeft();
-                    var originTop = offsetTracker.computeTop();
-                    var positionLeft = offsetLeft - originLeft;
-                    var positionTop = offsetTop - originTop;
-                    var origRect = offsetTracker.origRect;
-                    var width = origRect.right - origRect.left;
-                    var height = origRect.bottom - origRect.top;
-                    if (
-                    // must be within the element's bounds
-                    positionLeft >= 0 && positionLeft < width &&
-                        positionTop >= 0 && positionTop < height) {
-                        var hit = component.queryHit(positionLeft, positionTop, width, height);
-                        if (hit &&
-                            (
-                            // make sure the hit is within activeRange, meaning it's not a deal cell
-                            !component.props.dateProfile || // hack for DayTile
-                                core.rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) &&
-                            (!bestHit || hit.layer > bestHit.layer)) {
-                            // TODO: better way to re-orient rectangle
-                            hit.rect.left += originLeft;
-                            hit.rect.right += originLeft;
-                            hit.rect.top += originTop;
-                            hit.rect.bottom += originTop;
-                            bestHit = hit;
-                        }
-                    }
-                }
-            }
-            return bestHit;
-        };
-        return HitDragging;
-    }());
-    function isHitsEqual(hit0, hit1) {
-        if (!hit0 && !hit1) {
-            return true;
-        }
-        if (Boolean(hit0) !== Boolean(hit1)) {
-            return false;
-        }
-        return core.isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);
-    }
-
-    /*
-    Monitors when the user clicks on a specific date/time of a component.
-    A pointerdown+pointerup on the same "hit" constitutes a click.
-    */
-    var DateClicking = /** @class */ (function (_super) {
-        __extends(DateClicking, _super);
-        function DateClicking(settings) {
-            var _this = _super.call(this, settings) || this;
-            _this.handlePointerDown = function (ev) {
-                var dragging = _this.dragging;
-                // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired
-                dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl));
-            };
-            // won't even fire if moving was ignored
-            _this.handleDragEnd = function (ev) {
-                var component = _this.component;
-                var _a = component.context, calendar = _a.calendar, view = _a.view;
-                var pointer = _this.dragging.pointer;
-                if (!pointer.wasTouchScroll) {
-                    var _b = _this.hitDragging, initialHit = _b.initialHit, finalHit = _b.finalHit;
-                    if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
-                        calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, view, ev.origEvent);
-                    }
-                }
-            };
-            var component = settings.component;
-            // we DO want to watch pointer moves because otherwise finalHit won't get populated
-            _this.dragging = new FeaturefulElementDragging(component.el);
-            _this.dragging.autoScroller.isEnabled = false;
-            var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));
-            hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-            hitDragging.emitter.on('dragend', _this.handleDragEnd);
-            return _this;
-        }
-        DateClicking.prototype.destroy = function () {
-            this.dragging.destroy();
-        };
-        return DateClicking;
-    }(core.Interaction));
-
-    /*
-    Tracks when the user selects a portion of time of a component,
-    constituted by a drag over date cells, with a possible delay at the beginning of the drag.
-    */
-    var DateSelecting = /** @class */ (function (_super) {
-        __extends(DateSelecting, _super);
-        function DateSelecting(settings) {
-            var _this = _super.call(this, settings) || this;
-            _this.dragSelection = null;
-            _this.handlePointerDown = function (ev) {
-                var _a = _this, component = _a.component, dragging = _a.dragging;
-                var options = component.context.options;
-                var canSelect = options.selectable &&
-                    component.isValidDateDownEl(ev.origEvent.target);
-                // don't bother to watch expensive moves if component won't do selection
-                dragging.setIgnoreMove(!canSelect);
-                // if touch, require user to hold down
-                dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null;
-            };
-            _this.handleDragStart = function (ev) {
-                _this.component.context.calendar.unselect(ev); // unselect previous selections
-            };
-            _this.handleHitUpdate = function (hit, isFinal) {
-                var calendar = _this.component.context.calendar;
-                var dragSelection = null;
-                var isInvalid = false;
-                if (hit) {
-                    dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers);
-                    if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) {
-                        isInvalid = true;
-                        dragSelection = null;
-                    }
-                }
-                if (dragSelection) {
-                    calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection });
-                }
-                else if (!isFinal) { // only unselect if moved away while dragging
-                    calendar.dispatch({ type: 'UNSELECT_DATES' });
-                }
-                if (!isInvalid) {
-                    core.enableCursor();
-                }
-                else {
-                    core.disableCursor();
-                }
-                if (!isFinal) {
-                    _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging
-                }
-            };
-            _this.handlePointerUp = function (pev) {
-                if (_this.dragSelection) {
-                    // selection is already rendered, so just need to report selection
-                    _this.component.context.calendar.triggerDateSelect(_this.dragSelection, pev);
-                    _this.dragSelection = null;
-                }
-            };
-            var component = settings.component;
-            var options = component.context.options;
-            var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
-            dragging.touchScrollAllowed = false;
-            dragging.minDistance = options.selectMinDistance || 0;
-            dragging.autoScroller.isEnabled = options.dragScroll;
-            var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));
-            hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-            hitDragging.emitter.on('dragstart', _this.handleDragStart);
-            hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
-            hitDragging.emitter.on('pointerup', _this.handlePointerUp);
-            return _this;
-        }
-        DateSelecting.prototype.destroy = function () {
-            this.dragging.destroy();
-        };
-        return DateSelecting;
-    }(core.Interaction));
-    function getComponentTouchDelay(component) {
-        var options = component.context.options;
-        var delay = options.selectLongPressDelay;
-        if (delay == null) {
-            delay = options.longPressDelay;
-        }
-        return delay;
-    }
-    function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {
-        var dateSpan0 = hit0.dateSpan;
-        var dateSpan1 = hit1.dateSpan;
-        var ms = [
-            dateSpan0.range.start,
-            dateSpan0.range.end,
-            dateSpan1.range.start,
-            dateSpan1.range.end
-        ];
-        ms.sort(core.compareNumbers);
-        var props = {};
-        for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) {
-            var transformer = dateSelectionTransformers_1[_i];
-            var res = transformer(hit0, hit1);
-            if (res === false) {
-                return null;
-            }
-            else if (res) {
-                __assign(props, res);
-            }
-        }
-        props.range = { start: ms[0], end: ms[3] };
-        props.allDay = dateSpan0.allDay;
-        return props;
-    }
-
-    var EventDragging = /** @class */ (function (_super) {
-        __extends(EventDragging, _super);
-        function EventDragging(settings) {
-            var _this = _super.call(this, settings) || this;
-            // internal state
-            _this.subjectSeg = null; // the seg being selected/dragged
-            _this.isDragging = false;
-            _this.eventRange = null;
-            _this.relevantEvents = null; // the events being dragged
-            _this.receivingCalendar = null;
-            _this.validMutation = null;
-            _this.mutatedRelevantEvents = null;
-            _this.handlePointerDown = function (ev) {
-                var origTarget = ev.origEvent.target;
-                var _a = _this, component = _a.component, dragging = _a.dragging;
-                var mirror = dragging.mirror;
-                var options = component.context.options;
-                var initialCalendar = component.context.calendar;
-                var subjectSeg = _this.subjectSeg = core.getElSeg(ev.subjectEl);
-                var eventRange = _this.eventRange = subjectSeg.eventRange;
-                var eventInstanceId = eventRange.instance.instanceId;
-                _this.relevantEvents = core.getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId);
-                dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;
-                dragging.delay =
-                    // only do a touch delay if touch and this event hasn't been selected yet
-                    (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?
-                        getComponentTouchDelay$1(component) :
-                        null;
-                mirror.parentNode = initialCalendar.el;
-                mirror.revertDuration = options.dragRevertDuration;
-                var isValid = component.isValidSegDownEl(origTarget) &&
-                    !core.elementClosest(origTarget, '.fc-resizer'); // NOT on a resizer
-                dragging.setIgnoreMove(!isValid);
-                // disable dragging for elements that are resizable (ie, selectable)
-                // but are not draggable
-                _this.isDragging = isValid &&
-                    ev.subjectEl.classList.contains('fc-draggable');
-            };
-            _this.handleDragStart = function (ev) {
-                var context = _this.component.context;
-                var initialCalendar = context.calendar;
-                var eventRange = _this.eventRange;
-                var eventInstanceId = eventRange.instance.instanceId;
-                if (ev.isTouch) {
-                    // need to select a different event?
-                    if (eventInstanceId !== _this.component.props.eventSelection) {
-                        initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId });
-                    }
-                }
-                else {
-                    // if now using mouse, but was previous touch interaction, clear selected event
-                    initialCalendar.dispatch({ type: 'UNSELECT_EVENT' });
-                }
-                if (_this.isDragging) {
-                    initialCalendar.unselect(ev); // unselect *date* selection
-                    initialCalendar.publiclyTrigger('eventDragStart', [
-                        {
-                            el: _this.subjectSeg.el,
-                            event: new core.EventApi(initialCalendar, eventRange.def, eventRange.instance),
-                            jsEvent: ev.origEvent,
-                            view: context.view
-                        }
-                    ]);
-                }
-            };
-            _this.handleHitUpdate = function (hit, isFinal) {
-                if (!_this.isDragging) {
-                    return;
-                }
-                var relevantEvents = _this.relevantEvents;
-                var initialHit = _this.hitDragging.initialHit;
-                var initialCalendar = _this.component.context.calendar;
-                // states based on new hit
-                var receivingCalendar = null;
-                var mutation = null;
-                var mutatedRelevantEvents = null;
-                var isInvalid = false;
-                var interaction = {
-                    affectedEvents: relevantEvents,
-                    mutatedEvents: core.createEmptyEventStore(),
-                    isEvent: true,
-                    origSeg: _this.subjectSeg
-                };
-                if (hit) {
-                    var receivingComponent = hit.component;
-                    receivingCalendar = receivingComponent.context.calendar;
-                    var receivingOptions = receivingComponent.context.options;
-                    if (initialCalendar === receivingCalendar ||
-                        receivingOptions.editable && receivingOptions.droppable) {
-                        mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers);
-                        if (mutation) {
-                            mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar);
-                            interaction.mutatedEvents = mutatedRelevantEvents;
-                            if (!receivingComponent.isInteractionValid(interaction)) {
-                                isInvalid = true;
-                                mutation = null;
-                                mutatedRelevantEvents = null;
-                                interaction.mutatedEvents = core.createEmptyEventStore();
-                            }
-                        }
-                    }
-                    else {
-                        receivingCalendar = null;
-                    }
-                }
-                _this.displayDrag(receivingCalendar, interaction);
-                if (!isInvalid) {
-                    core.enableCursor();
-                }
-                else {
-                    core.disableCursor();
-                }
-                if (!isFinal) {
-                    if (initialCalendar === receivingCalendar && // TODO: write test for this
-                        isHitsEqual(initialHit, hit)) {
-                        mutation = null;
-                    }
-                    _this.dragging.setMirrorNeedsRevert(!mutation);
-                    // render the mirror if no already-rendered mirror
-                    // TODO: wish we could somehow wait for dispatch to guarantee render
-                    _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror'));
-                    // assign states based on new hit
-                    _this.receivingCalendar = receivingCalendar;
-                    _this.validMutation = mutation;
-                    _this.mutatedRelevantEvents = mutatedRelevantEvents;
-                }
-            };
-            _this.handlePointerUp = function () {
-                if (!_this.isDragging) {
-                    _this.cleanup(); // because handleDragEnd won't fire
-                }
-            };
-            _this.handleDragEnd = function (ev) {
-                if (_this.isDragging) {
-                    var context = _this.component.context;
-                    var initialCalendar_1 = context.calendar;
-                    var initialView = context.view;
-                    var _a = _this, receivingCalendar = _a.receivingCalendar, validMutation = _a.validMutation;
-                    var eventDef = _this.eventRange.def;
-                    var eventInstance = _this.eventRange.instance;
-                    var eventApi = new core.EventApi(initialCalendar_1, eventDef, eventInstance);
-                    var relevantEvents_1 = _this.relevantEvents;
-                    var mutatedRelevantEvents = _this.mutatedRelevantEvents;
-                    var finalHit = _this.hitDragging.finalHit;
-                    _this.clearDrag(); // must happen after revert animation
-                    initialCalendar_1.publiclyTrigger('eventDragStop', [
-                        {
-                            el: _this.subjectSeg.el,
-                            event: eventApi,
-                            jsEvent: ev.origEvent,
-                            view: initialView
-                        }
-                    ]);
-                    if (validMutation) {
-                        // dropped within same calendar
-                        if (receivingCalendar === initialCalendar_1) {
-                            initialCalendar_1.dispatch({
-                                type: 'MERGE_EVENTS',
-                                eventStore: mutatedRelevantEvents
-                            });
-                            var transformed = {};
-                            for (var _i = 0, _b = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _b.length; _i++) {
-                                var transformer = _b[_i];
-                                __assign(transformed, transformer(validMutation, initialCalendar_1));
-                            }
-                            var eventDropArg = __assign({}, transformed, { el: ev.subjectEl, delta: validMutation.datesDelta, oldEvent: eventApi, event: new core.EventApi(// the data AFTER the mutation
-                                initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), revert: function () {
-                                    initialCalendar_1.dispatch({
-                                        type: 'MERGE_EVENTS',
-                                        eventStore: relevantEvents_1
-                                    });
-                                }, jsEvent: ev.origEvent, view: initialView });
-                            initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]);
-                            // dropped in different calendar
-                        }
-                        else if (receivingCalendar) {
-                            initialCalendar_1.publiclyTrigger('eventLeave', [
-                                {
-                                    draggedEl: ev.subjectEl,
-                                    event: eventApi,
-                                    view: initialView
-                                }
-                            ]);
-                            initialCalendar_1.dispatch({
-                                type: 'REMOVE_EVENT_INSTANCES',
-                                instances: _this.mutatedRelevantEvents.instances
-                            });
-                            receivingCalendar.dispatch({
-                                type: 'MERGE_EVENTS',
-                                eventStore: _this.mutatedRelevantEvents
-                            });
-                            if (ev.isTouch) {
-                                receivingCalendar.dispatch({
-                                    type: 'SELECT_EVENT',
-                                    eventInstanceId: eventInstance.instanceId
-                                });
-                            }
-                            var dropArg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.component // should this be finalHit.component.view? See #4644
-                             });
-                            receivingCalendar.publiclyTrigger('drop', [dropArg]);
-                            receivingCalendar.publiclyTrigger('eventReceive', [
-                                {
-                                    draggedEl: ev.subjectEl,
-                                    event: new core.EventApi(// the data AFTER the mutation
-                                    receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]),
-                                    view: finalHit.component // should this be finalHit.component.view? See #4644
-                                }
-                            ]);
-                        }
-                    }
-                    else {
-                        initialCalendar_1.publiclyTrigger('_noEventDrop');
-                    }
-                }
-                _this.cleanup();
-            };
-            var component = _this.component;
-            var options = component.context.options;
-            var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
-            dragging.pointer.selector = EventDragging.SELECTOR;
-            dragging.touchScrollAllowed = false;
-            dragging.autoScroller.isEnabled = options.dragScroll;
-            var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsStore);
-            hitDragging.useSubjectCenter = settings.useEventCenter;
-            hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-            hitDragging.emitter.on('dragstart', _this.handleDragStart);
-            hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
-            hitDragging.emitter.on('pointerup', _this.handlePointerUp);
-            hitDragging.emitter.on('dragend', _this.handleDragEnd);
-            return _this;
-        }
-        EventDragging.prototype.destroy = function () {
-            this.dragging.destroy();
-        };
-        // render a drag state on the next receivingCalendar
-        EventDragging.prototype.displayDrag = function (nextCalendar, state) {
-            var initialCalendar = this.component.context.calendar;
-            var prevCalendar = this.receivingCalendar;
-            // does the previous calendar need to be cleared?
-            if (prevCalendar && prevCalendar !== nextCalendar) {
-                // does the initial calendar need to be cleared?
-                // if so, don't clear all the way. we still need to to hide the affectedEvents
-                if (prevCalendar === initialCalendar) {
-                    prevCalendar.dispatch({
-                        type: 'SET_EVENT_DRAG',
-                        state: {
-                            affectedEvents: state.affectedEvents,
-                            mutatedEvents: core.createEmptyEventStore(),
-                            isEvent: true,
-                            origSeg: state.origSeg
-                        }
-                    });
-                    // completely clear the old calendar if it wasn't the initial
-                }
-                else {
-                    prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-                }
-            }
-            if (nextCalendar) {
-                nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
-            }
-        };
-        EventDragging.prototype.clearDrag = function () {
-            var initialCalendar = this.component.context.calendar;
-            var receivingCalendar = this.receivingCalendar;
-            if (receivingCalendar) {
-                receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-            }
-            // the initial calendar might have an dummy drag state from displayDrag
-            if (initialCalendar !== receivingCalendar) {
-                initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-            }
-        };
-        EventDragging.prototype.cleanup = function () {
-            this.subjectSeg = null;
-            this.isDragging = false;
-            this.eventRange = null;
-            this.relevantEvents = null;
-            this.receivingCalendar = null;
-            this.validMutation = null;
-            this.mutatedRelevantEvents = null;
-        };
-        EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11
-        return EventDragging;
-    }(core.Interaction));
-    function computeEventMutation(hit0, hit1, massagers) {
-        var dateSpan0 = hit0.dateSpan;
-        var dateSpan1 = hit1.dateSpan;
-        var date0 = dateSpan0.range.start;
-        var date1 = dateSpan1.range.start;
-        var standardProps = {};
-        if (dateSpan0.allDay !== dateSpan1.allDay) {
-            standardProps.allDay = dateSpan1.allDay;
-            standardProps.hasEnd = hit1.component.context.options.allDayMaintainDuration;
-            if (dateSpan1.allDay) {
-                // means date1 is already start-of-day,
-                // but date0 needs to be converted
-                date0 = core.startOfDay(date0);
-            }
-        }
-        var delta = core.diffDates(date0, date1, hit0.component.context.dateEnv, hit0.component === hit1.component ?
-            hit0.component.largeUnit :
-            null);
-        if (delta.milliseconds) { // has hours/minutes/seconds
-            standardProps.allDay = false;
-        }
-        var mutation = {
-            datesDelta: delta,
-            standardProps: standardProps
-        };
-        for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) {
-            var massager = massagers_1[_i];
-            massager(mutation, hit0, hit1);
-        }
-        return mutation;
-    }
-    function getComponentTouchDelay$1(component) {
-        var options = component.context.options;
-        var delay = options.eventLongPressDelay;
-        if (delay == null) {
-            delay = options.longPressDelay;
-        }
-        return delay;
-    }
-
-    var EventDragging$1 = /** @class */ (function (_super) {
-        __extends(EventDragging, _super);
-        function EventDragging(settings) {
-            var _this = _super.call(this, settings) || this;
-            // internal state
-            _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?
-            _this.eventRange = null;
-            _this.relevantEvents = null;
-            _this.validMutation = null;
-            _this.mutatedRelevantEvents = null;
-            _this.handlePointerDown = function (ev) {
-                var component = _this.component;
-                var seg = _this.querySeg(ev);
-                var eventRange = _this.eventRange = seg.eventRange;
-                _this.dragging.minDistance = component.context.options.eventDragMinDistance;
-                // if touch, need to be working with a selected event
-                _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) ||
-                    (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId));
-            };
-            _this.handleDragStart = function (ev) {
-                var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
-                var eventRange = _this.eventRange;
-                _this.relevantEvents = core.getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId);
-                _this.draggingSeg = _this.querySeg(ev);
-                calendar.unselect();
-                calendar.publiclyTrigger('eventResizeStart', [
-                    {
-                        el: _this.draggingSeg.el,
-                        event: new core.EventApi(calendar, eventRange.def, eventRange.instance),
-                        jsEvent: ev.origEvent,
-                        view: view
-                    }
-                ]);
-            };
-            _this.handleHitUpdate = function (hit, isFinal, ev) {
-                var calendar = _this.component.context.calendar;
-                var relevantEvents = _this.relevantEvents;
-                var initialHit = _this.hitDragging.initialHit;
-                var eventInstance = _this.eventRange.instance;
-                var mutation = null;
-                var mutatedRelevantEvents = null;
-                var isInvalid = false;
-                var interaction = {
-                    affectedEvents: relevantEvents,
-                    mutatedEvents: core.createEmptyEventStore(),
-                    isEvent: true,
-                    origSeg: _this.draggingSeg
-                };
-                if (hit) {
-                    mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms);
-                }
-                if (mutation) {
-                    mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar);
-                    interaction.mutatedEvents = mutatedRelevantEvents;
-                    if (!_this.component.isInteractionValid(interaction)) {
-                        isInvalid = true;
-                        mutation = null;
-                        mutatedRelevantEvents = null;
-                        interaction.mutatedEvents = null;
-                    }
-                }
-                if (mutatedRelevantEvents) {
-                    calendar.dispatch({
-                        type: 'SET_EVENT_RESIZE',
-                        state: interaction
-                    });
-                }
-                else {
-                    calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' });
-                }
-                if (!isInvalid) {
-                    core.enableCursor();
-                }
-                else {
-                    core.disableCursor();
-                }
-                if (!isFinal) {
-                    if (mutation && isHitsEqual(initialHit, hit)) {
-                        mutation = null;
-                    }
-                    _this.validMutation = mutation;
-                    _this.mutatedRelevantEvents = mutatedRelevantEvents;
-                }
-            };
-            _this.handleDragEnd = function (ev) {
-                var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
-                var eventDef = _this.eventRange.def;
-                var eventInstance = _this.eventRange.instance;
-                var eventApi = new core.EventApi(calendar, eventDef, eventInstance);
-                var relevantEvents = _this.relevantEvents;
-                var mutatedRelevantEvents = _this.mutatedRelevantEvents;
-                calendar.publiclyTrigger('eventResizeStop', [
-                    {
-                        el: _this.draggingSeg.el,
-                        event: eventApi,
-                        jsEvent: ev.origEvent,
-                        view: view
-                    }
-                ]);
-                if (_this.validMutation) {
-                    calendar.dispatch({
-                        type: 'MERGE_EVENTS',
-                        eventStore: mutatedRelevantEvents
-                    });
-                    calendar.publiclyTrigger('eventResize', [
-                        {
-                            el: _this.draggingSeg.el,
-                            startDelta: _this.validMutation.startDelta || core.createDuration(0),
-                            endDelta: _this.validMutation.endDelta || core.createDuration(0),
-                            prevEvent: eventApi,
-                            event: new core.EventApi(// the data AFTER the mutation
-                            calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null),
-                            revert: function () {
-                                calendar.dispatch({
-                                    type: 'MERGE_EVENTS',
-                                    eventStore: relevantEvents
-                                });
-                            },
-                            jsEvent: ev.origEvent,
-                            view: view
-                        }
-                    ]);
-                }
-                else {
-                    calendar.publiclyTrigger('_noEventResize');
-                }
-                // reset all internal state
-                _this.draggingSeg = null;
-                _this.relevantEvents = null;
-                _this.validMutation = null;
-                // okay to keep eventInstance around. useful to set it in handlePointerDown
-            };
-            var component = settings.component;
-            var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
-            dragging.pointer.selector = '.fc-resizer';
-            dragging.touchScrollAllowed = false;
-            dragging.autoScroller.isEnabled = component.context.options.dragScroll;
-            var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));
-            hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
-            hitDragging.emitter.on('dragstart', _this.handleDragStart);
-            hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
-            hitDragging.emitter.on('dragend', _this.handleDragEnd);
-            return _this;
-        }
-        EventDragging.prototype.destroy = function () {
-            this.dragging.destroy();
-        };
-        EventDragging.prototype.querySeg = function (ev) {
-            return core.getElSeg(core.elementClosest(ev.subjectEl, this.component.fgSegSelector));
-        };
-        return EventDragging;
-    }(core.Interaction));
-    function computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) {
-        var dateEnv = hit0.component.context.dateEnv;
-        var date0 = hit0.dateSpan.range.start;
-        var date1 = hit1.dateSpan.range.start;
-        var delta = core.diffDates(date0, date1, dateEnv, hit0.component.largeUnit);
-        var props = {};
-        for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) {
-            var transform = transforms_1[_i];
-            var res = transform(hit0, hit1);
-            if (res === false) {
-                return null;
-            }
-            else if (res) {
-                __assign(props, res);
-            }
-        }
-        if (isFromStart) {
-            if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {
-                props.startDelta = delta;
-                return props;
-            }
-        }
-        else {
-            if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {
-                props.endDelta = delta;
-                return props;
-            }
-        }
-        return null;
-    }
-
-    var UnselectAuto = /** @class */ (function () {
-        function UnselectAuto(calendar) {
-            var _this = this;
-            this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system
-            this.onSelect = function (selectInfo) {
-                if (selectInfo.jsEvent) {
-                    _this.isRecentPointerDateSelect = true;
-                }
-            };
-            this.onDocumentPointerUp = function (pev) {
-                var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer;
-                var state = calendar.state;
-                // touch-scrolling should never unfocus any type of selection
-                if (!documentPointer.wasTouchScroll) {
-                    if (state.dateSelection && // an existing date selection?
-                        !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?
-                    ) {
-                        var unselectAuto = calendar.viewOpt('unselectAuto');
-                        var unselectCancel = calendar.viewOpt('unselectCancel');
-                        if (unselectAuto && (!unselectAuto || !core.elementClosest(documentPointer.downEl, unselectCancel))) {
-                            calendar.unselect(pev);
-                        }
-                    }
-                    if (state.eventSelection && // an existing event selected?
-                        !core.elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event
-                    ) {
-                        calendar.dispatch({ type: 'UNSELECT_EVENT' });
-                    }
-                }
-                _this.isRecentPointerDateSelect = false;
-            };
-            this.calendar = calendar;
-            var documentPointer = this.documentPointer = new PointerDragging(document);
-            documentPointer.shouldIgnoreMove = true;
-            documentPointer.shouldWatchScroll = false;
-            documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);
-            /*
-            TODO: better way to know about whether there was a selection with the pointer
-            */
-            calendar.on('select', this.onSelect);
-        }
-        UnselectAuto.prototype.destroy = function () {
-            this.calendar.off('select', this.onSelect);
-            this.documentPointer.destroy();
-        };
-        return UnselectAuto;
-    }());
-
-    /*
-    Given an already instantiated draggable object for one-or-more elements,
-    Interprets any dragging as an attempt to drag an events that lives outside
-    of a calendar onto a calendar.
-    */
-    var ExternalElementDragging = /** @class */ (function () {
-        function ExternalElementDragging(dragging, suppliedDragMeta) {
-            var _this = this;
-            this.receivingCalendar = null;
-            this.droppableEvent = null; // will exist for all drags, even if create:false
-            this.suppliedDragMeta = null;
-            this.dragMeta = null;
-            this.handleDragStart = function (ev) {
-                _this.dragMeta = _this.buildDragMeta(ev.subjectEl);
-            };
-            this.handleHitUpdate = function (hit, isFinal, ev) {
-                var dragging = _this.hitDragging.dragging;
-                var receivingCalendar = null;
-                var droppableEvent = null;
-                var isInvalid = false;
-                var interaction = {
-                    affectedEvents: core.createEmptyEventStore(),
-                    mutatedEvents: core.createEmptyEventStore(),
-                    isEvent: _this.dragMeta.create,
-                    origSeg: null
-                };
-                if (hit) {
-                    receivingCalendar = hit.component.context.calendar;
-                    if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) {
-                        droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar);
-                        interaction.mutatedEvents = core.eventTupleToStore(droppableEvent);
-                        isInvalid = !core.isInteractionValid(interaction, receivingCalendar);
-                        if (isInvalid) {
-                            interaction.mutatedEvents = core.createEmptyEventStore();
-                            droppableEvent = null;
-                        }
-                    }
-                }
-                _this.displayDrag(receivingCalendar, interaction);
-                // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)
-                // TODO: wish we could somehow wait for dispatch to guarantee render
-                dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror'));
-                if (!isInvalid) {
-                    core.enableCursor();
-                }
-                else {
-                    core.disableCursor();
-                }
-                if (!isFinal) {
-                    dragging.setMirrorNeedsRevert(!droppableEvent);
-                    _this.receivingCalendar = receivingCalendar;
-                    _this.droppableEvent = droppableEvent;
-                }
-            };
-            this.handleDragEnd = function (pev) {
-                var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent;
-                _this.clearDrag();
-                if (receivingCalendar && droppableEvent) {
-                    var finalHit = _this.hitDragging.finalHit;
-                    var finalView = finalHit.component.context.view;
-                    var dragMeta = _this.dragMeta;
-                    var arg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView });
-                    receivingCalendar.publiclyTrigger('drop', [arg]);
-                    if (dragMeta.create) {
-                        receivingCalendar.dispatch({
-                            type: 'MERGE_EVENTS',
-                            eventStore: core.eventTupleToStore(droppableEvent)
-                        });
-                        if (pev.isTouch) {
-                            receivingCalendar.dispatch({
-                                type: 'SELECT_EVENT',
-                                eventInstanceId: droppableEvent.instance.instanceId
-                            });
-                        }
-                        // signal that an external event landed
-                        receivingCalendar.publiclyTrigger('eventReceive', [
-                            {
-                                draggedEl: pev.subjectEl,
-                                event: new core.EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance),
-                                view: finalView
-                            }
-                        ]);
-                    }
-                }
-                _this.receivingCalendar = null;
-                _this.droppableEvent = null;
-            };
-            var hitDragging = this.hitDragging = new HitDragging(dragging, core.interactionSettingsStore);
-            hitDragging.requireInitial = false; // will start outside of a component
-            hitDragging.emitter.on('dragstart', this.handleDragStart);
-            hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
-            hitDragging.emitter.on('dragend', this.handleDragEnd);
-            this.suppliedDragMeta = suppliedDragMeta;
-        }
-        ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) {
-            if (typeof this.suppliedDragMeta === 'object') {
-                return core.parseDragMeta(this.suppliedDragMeta);
-            }
-            else if (typeof this.suppliedDragMeta === 'function') {
-                return core.parseDragMeta(this.suppliedDragMeta(subjectEl));
-            }
-            else {
-                return getDragMetaFromEl(subjectEl);
-            }
-        };
-        ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) {
-            var prevCalendar = this.receivingCalendar;
-            if (prevCalendar && prevCalendar !== nextCalendar) {
-                prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-            }
-            if (nextCalendar) {
-                nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
-            }
-        };
-        ExternalElementDragging.prototype.clearDrag = function () {
-            if (this.receivingCalendar) {
-                this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
-            }
-        };
-        ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) {
-            var dropAccept = receivingCalendar.opt('dropAccept');
-            if (typeof dropAccept === 'function') {
-                return dropAccept(el);
-            }
-            else if (typeof dropAccept === 'string' && dropAccept) {
-                return Boolean(core.elementMatches(el, dropAccept));
-            }
-            return true;
-        };
-        return ExternalElementDragging;
-    }());
-    // Utils for computing event store from the DragMeta
-    // ----------------------------------------------------------------------------------------------------
-    function computeEventForDateSpan(dateSpan, dragMeta, calendar) {
-        var defProps = __assign({}, dragMeta.leftoverProps);
-        for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) {
-            var transform = _a[_i];
-            __assign(defProps, transform(dateSpan, dragMeta));
-        }
-        var def = core.parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd
-        calendar);
-        var start = dateSpan.range.start;
-        // only rely on time info if drop zone is all-day,
-        // otherwise, we already know the time
-        if (dateSpan.allDay && dragMeta.startTime) {
-            start = calendar.dateEnv.add(start, dragMeta.startTime);
-        }
-        var end = dragMeta.duration ?
-            calendar.dateEnv.add(start, dragMeta.duration) :
-            calendar.getDefaultEventEnd(dateSpan.allDay, start);
-        var instance = core.createEventInstance(def.defId, { start: start, end: end });
-        return { def: def, instance: instance };
-    }
-    // Utils for extracting data from element
-    // ----------------------------------------------------------------------------------------------------
-    function getDragMetaFromEl(el) {
-        var str = getEmbeddedElData(el, 'event');
-        var obj = str ?
-            JSON.parse(str) :
-            { create: false }; // if no embedded data, assume no event creation
-        return core.parseDragMeta(obj);
-    }
-    core.config.dataAttrPrefix = '';
-    function getEmbeddedElData(el, name) {
-        var prefix = core.config.dataAttrPrefix;
-        var prefixedName = (prefix ? prefix + '-' : '') + name;
-        return el.getAttribute('data-' + prefixedName) || '';
-    }
-
-    /*
-    Makes an element (that is *external* to any calendar) draggable.
-    Can pass in data that determines how an event will be created when dropped onto a calendar.
-    Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.
-    */
-    var ExternalDraggable = /** @class */ (function () {
-        function ExternalDraggable(el, settings) {
-            var _this = this;
-            if (settings === void 0) { settings = {}; }
-            this.handlePointerDown = function (ev) {
-                var dragging = _this.dragging;
-                var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay;
-                dragging.minDistance =
-                    minDistance != null ?
-                        minDistance :
-                        (ev.isTouch ? 0 : core.globalDefaults.eventDragMinDistance);
-                dragging.delay =
-                    ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv
-                        (longPressDelay != null ? longPressDelay : core.globalDefaults.longPressDelay) :
-                        0;
-            };
-            this.handleDragStart = function (ev) {
-                if (ev.isTouch &&
-                    _this.dragging.delay &&
-                    ev.subjectEl.classList.contains('fc-event')) {
-                    _this.dragging.mirror.getMirrorEl().classList.add('fc-selected');
-                }
-            };
-            this.settings = settings;
-            var dragging = this.dragging = new FeaturefulElementDragging(el);
-            dragging.touchScrollAllowed = false;
-            if (settings.itemSelector != null) {
-                dragging.pointer.selector = settings.itemSelector;
-            }
-            if (settings.appendTo != null) {
-                dragging.mirror.parentNode = settings.appendTo; // TODO: write tests
-            }
-            dragging.emitter.on('pointerdown', this.handlePointerDown);
-            dragging.emitter.on('dragstart', this.handleDragStart);
-            new ExternalElementDragging(dragging, settings.eventData);
-        }
-        ExternalDraggable.prototype.destroy = function () {
-            this.dragging.destroy();
-        };
-        return ExternalDraggable;
-    }());
-
-    /*
-    Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements.
-    The third-party system is responsible for drawing the visuals effects of the drag.
-    This class simply monitors for pointer movements and fires events.
-    It also has the ability to hide the moving element (the "mirror") during the drag.
-    */
-    var InferredElementDragging = /** @class */ (function (_super) {
-        __extends(InferredElementDragging, _super);
-        function InferredElementDragging(containerEl) {
-            var _this = _super.call(this, containerEl) || this;
-            _this.shouldIgnoreMove = false;
-            _this.mirrorSelector = '';
-            _this.currentMirrorEl = null;
-            _this.handlePointerDown = function (ev) {
-                _this.emitter.trigger('pointerdown', ev);
-                if (!_this.shouldIgnoreMove) {
-                    // fire dragstart right away. does not support delay or min-distance
-                    _this.emitter.trigger('dragstart', ev);
-                }
-            };
-            _this.handlePointerMove = function (ev) {
-                if (!_this.shouldIgnoreMove) {
-                    _this.emitter.trigger('dragmove', ev);
-                }
-            };
-            _this.handlePointerUp = function (ev) {
-                _this.emitter.trigger('pointerup', ev);
-                if (!_this.shouldIgnoreMove) {
-                    // fire dragend right away. does not support a revert animation
-                    _this.emitter.trigger('dragend', ev);
-                }
-            };
-            var pointer = _this.pointer = new PointerDragging(containerEl);
-            pointer.emitter.on('pointerdown', _this.handlePointerDown);
-            pointer.emitter.on('pointermove', _this.handlePointerMove);
-            pointer.emitter.on('pointerup', _this.handlePointerUp);
-            return _this;
-        }
-        InferredElementDragging.prototype.destroy = function () {
-            this.pointer.destroy();
-        };
-        InferredElementDragging.prototype.setIgnoreMove = function (bool) {
-            this.shouldIgnoreMove = bool;
-        };
-        InferredElementDragging.prototype.setMirrorIsVisible = function (bool) {
-            if (bool) {
-                // restore a previously hidden element.
-                // use the reference in case the selector class has already been removed.
-                if (this.currentMirrorEl) {
-                    this.currentMirrorEl.style.visibility = '';
-                    this.currentMirrorEl = null;
-                }
-            }
-            else {
-                var mirrorEl = this.mirrorSelector ?
-                    document.querySelector(this.mirrorSelector) :
-                    null;
-                if (mirrorEl) {
-                    this.currentMirrorEl = mirrorEl;
-                    mirrorEl.style.visibility = 'hidden';
-                }
-            }
-        };
-        return InferredElementDragging;
-    }(core.ElementDragging));
-
-    /*
-    Bridges third-party drag-n-drop systems with FullCalendar.
-    Must be instantiated and destroyed by caller.
-    */
-    var ThirdPartyDraggable = /** @class */ (function () {
-        function ThirdPartyDraggable(containerOrSettings, settings) {
-            var containerEl = document;
-            if (
-            // wish we could just test instanceof EventTarget, but doesn't work in IE11
-            containerOrSettings === document ||
-                containerOrSettings instanceof Element) {
-                containerEl = containerOrSettings;
-                settings = settings || {};
-            }
-            else {
-                settings = (containerOrSettings || {});
-            }
-            var dragging = this.dragging = new InferredElementDragging(containerEl);
-            if (typeof settings.itemSelector === 'string') {
-                dragging.pointer.selector = settings.itemSelector;
-            }
-            else if (containerEl === document) {
-                dragging.pointer.selector = '[data-event]';
-            }
-            if (typeof settings.mirrorSelector === 'string') {
-                dragging.mirrorSelector = settings.mirrorSelector;
-            }
-            new ExternalElementDragging(dragging, settings.eventData);
-        }
-        ThirdPartyDraggable.prototype.destroy = function () {
-            this.dragging.destroy();
-        };
-        return ThirdPartyDraggable;
-    }());
-
-    var main = core.createPlugin({
-        componentInteractions: [DateClicking, DateSelecting, EventDragging, EventDragging$1],
-        calendarInteractions: [UnselectAuto],
-        elementDraggingImpl: FeaturefulElementDragging
-    });
-
-    exports.Draggable = ExternalDraggable;
-    exports.FeaturefulElementDragging = FeaturefulElementDragging;
-    exports.PointerDragging = PointerDragging;
-    exports.ThirdPartyDraggable = ThirdPartyDraggable;
-    exports.default = main;
-
-    Object.defineProperty(exports, '__esModule', { value: true });
-
-}));

Plik diff jest za duży
+ 0 - 5
plugins/fullcalendar-interaction/main.min.js


+ 0 - 20
plugins/fullcalendar-timegrid/LICENSE.txt

@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 0 - 309
plugins/fullcalendar-timegrid/main.css

@@ -1,309 +0,0 @@
-@charset "UTF-8";
-/* TimeGridView all-day area
---------------------------------------------------------------------------------------------------*/
-.fc-timeGrid-view .fc-day-grid {
-  position: relative;
-  z-index: 2;
-  /* so the "more.." popover will be over the time grid */
-}
-
-.fc-timeGrid-view .fc-day-grid .fc-row {
-  min-height: 3em;
-  /* all-day section will never get shorter than this */
-}
-
-.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton {
-  padding-bottom: 1em;
-  /* give space underneath events for clicking/selecting days */
-}
-
-/* TimeGrid axis running down the side (for both the all-day area and the slot area)
---------------------------------------------------------------------------------------------------*/
-.fc .fc-axis {
-  /* .fc to overcome default cell styles */
-  vertical-align: middle;
-  padding: 0 4px;
-  white-space: nowrap;
-}
-
-.fc-ltr .fc-axis {
-  text-align: right;
-}
-
-.fc-rtl .fc-axis {
-  text-align: left;
-}
-
-/* TimeGrid Structure
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid-container,
-.fc-time-grid {
-  /* so slats/bg/content/etc positions get scoped within here */
-  position: relative;
-  z-index: 1;
-}
-
-.fc-time-grid {
-  min-height: 100%;
-  /* so if height setting is 'auto', .fc-bg stretches to fill height */
-}
-
-.fc-time-grid table {
-  /* don't put outer borders on slats/bg/content/etc */
-  border: 0 hidden transparent;
-}
-
-.fc-time-grid > .fc-bg {
-  z-index: 1;
-}
-
-.fc-time-grid .fc-slats,
-.fc-time-grid > hr {
-  /* the <hr> TimeGridView injects when grid is shorter than scroller */
-  position: relative;
-  z-index: 2;
-}
-
-.fc-time-grid .fc-content-col {
-  position: relative;
-  /* because now-indicator lives directly inside */
-}
-
-.fc-time-grid .fc-content-skeleton {
-  position: absolute;
-  z-index: 3;
-  top: 0;
-  left: 0;
-  right: 0;
-}
-
-/* divs within a cell within the fc-content-skeleton */
-.fc-time-grid .fc-business-container {
-  position: relative;
-  z-index: 1;
-}
-
-.fc-time-grid .fc-bgevent-container {
-  position: relative;
-  z-index: 2;
-}
-
-.fc-time-grid .fc-highlight-container {
-  position: relative;
-  z-index: 3;
-}
-
-.fc-time-grid .fc-event-container {
-  position: relative;
-  z-index: 4;
-}
-
-.fc-time-grid .fc-now-indicator-line {
-  z-index: 5;
-}
-
-.fc-time-grid .fc-mirror-container {
-  /* also is fc-event-container */
-  position: relative;
-  z-index: 6;
-}
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-slats td {
-  height: 1.5em;
-  border-bottom: 0;
-  /* each cell is responsible for its top border */
-}
-
-.fc-time-grid .fc-slats .fc-minor td {
-  border-top-style: dotted;
-}
-
-/* TimeGrid Highlighting Slots
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-highlight-container {
-  /* a div within a cell within the fc-highlight-skeleton */
-  position: relative;
-  /* scopes the left/right of the fc-highlight to be in the column */
-}
-
-.fc-time-grid .fc-highlight {
-  position: absolute;
-  left: 0;
-  right: 0;
-  /* top and bottom will be in by JS */
-}
-
-/* TimeGrid Event Containment
---------------------------------------------------------------------------------------------------*/
-.fc-ltr .fc-time-grid .fc-event-container {
-  /* space on the sides of events for LTR (default) */
-  margin: 0 2.5% 0 2px;
-}
-
-.fc-rtl .fc-time-grid .fc-event-container {
-  /* space on the sides of events for RTL */
-  margin: 0 2px 0 2.5%;
-}
-
-.fc-time-grid .fc-event,
-.fc-time-grid .fc-bgevent {
-  position: absolute;
-  z-index: 1;
-  /* scope inner z-index's */
-}
-
-.fc-time-grid .fc-bgevent {
-  /* background events always span full width */
-  left: 0;
-  right: 0;
-}
-
-/* TimeGrid Event Styling
-----------------------------------------------------------------------------------------------------
-We use the full "fc-time-grid-event" class instead of using descendants because the event won't
-be a descendant of the grid when it is being dragged.
-*/
-.fc-time-grid-event {
-  margin-bottom: 1px;
-}
-
-.fc-time-grid-event-inset {
-  -webkit-box-shadow: 0px 0px 0px 1px #fff;
-  box-shadow: 0px 0px 0px 1px #fff;
-}
-
-.fc-time-grid-event.fc-not-start {
-  /* events that are continuing from another day */
-  /* replace space made by the top border with padding */
-  border-top-width: 0;
-  padding-top: 1px;
-  /* remove top rounded corners */
-  border-top-left-radius: 0;
-  border-top-right-radius: 0;
-}
-
-.fc-time-grid-event.fc-not-end {
-  /* replace space made by the top border with padding */
-  border-bottom-width: 0;
-  padding-bottom: 1px;
-  /* remove bottom rounded corners */
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-}
-
-.fc-time-grid-event .fc-content {
-  overflow: hidden;
-  max-height: 100%;
-}
-
-.fc-time-grid-event .fc-time,
-.fc-time-grid-event .fc-title {
-  padding: 0 1px;
-}
-
-.fc-time-grid-event .fc-time {
-  font-size: 0.85em;
-  white-space: nowrap;
-}
-
-/* short mode, where time and title are on the same line */
-.fc-time-grid-event.fc-short .fc-content {
-  /* don't wrap to second line (now that contents will be inline) */
-  white-space: nowrap;
-}
-
-.fc-time-grid-event.fc-short .fc-time,
-.fc-time-grid-event.fc-short .fc-title {
-  /* put the time and title on the same line */
-  display: inline-block;
-  vertical-align: top;
-}
-
-.fc-time-grid-event.fc-short .fc-time span {
-  display: none;
-  /* don't display the full time text... */
-}
-
-.fc-time-grid-event.fc-short .fc-time:before {
-  content: attr(data-start);
-  /* ...instead, display only the start time */
-}
-
-.fc-time-grid-event.fc-short .fc-time:after {
-  content: " - ";
-  /* seperate with a dash, wrapped in nbsp's */
-}
-
-.fc-time-grid-event.fc-short .fc-title {
-  font-size: 0.85em;
-  /* make the title text the same size as the time */
-  padding: 0;
-  /* undo padding from above */
-}
-
-/* resizer (cursor device) */
-.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer {
-  left: 0;
-  right: 0;
-  bottom: 0;
-  height: 8px;
-  overflow: hidden;
-  line-height: 8px;
-  font-size: 11px;
-  font-family: monospace;
-  text-align: center;
-  cursor: s-resize;
-}
-
-.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after {
-  content: "=";
-}
-
-/* resizer (touch device) */
-.fc-time-grid-event.fc-selected .fc-resizer {
-  /* 10x10 dot */
-  border-radius: 5px;
-  border-width: 1px;
-  width: 8px;
-  height: 8px;
-  border-style: solid;
-  border-color: inherit;
-  background: #fff;
-  /* horizontally center */
-  left: 50%;
-  margin-left: -5px;
-  /* center on the bottom edge */
-  bottom: -5px;
-}
-
-/* Now Indicator
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-now-indicator-line {
-  border-top-width: 1px;
-  left: 0;
-  right: 0;
-}
-
-/* arrow on axis */
-.fc-time-grid .fc-now-indicator-arrow {
-  margin-top: -5px;
-  /* vertically center on top coordinate */
-}
-
-.fc-ltr .fc-time-grid .fc-now-indicator-arrow {
-  left: 0;
-  /* triangle pointing right... */
-  border-width: 5px 0 5px 6px;
-  border-top-color: transparent;
-  border-bottom-color: transparent;
-}
-
-.fc-rtl .fc-time-grid .fc-now-indicator-arrow {
-  right: 0;
-  /* triangle pointing left... */
-  border-width: 5px 6px 5px 0;
-  border-top-color: transparent;
-  border-bottom-color: transparent;
-}

+ 0 - 1391
plugins/fullcalendar-timegrid/main.esm.js

@@ -1,1391 +0,0 @@
-/*!
-FullCalendar Time Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { createFormatter, removeElement, computeEventDraggable, computeEventStartResizable, computeEventEndResizable, cssToStr, isMultiDayRange, htmlEscape, compareByFieldSpecs, applyStyle, FgEventRenderer, buildSegCompareObj, FillRenderer, memoize, memoizeRendering, createDuration, wholeDivideDurations, findElements, PositionCache, startOfDay, asRoughMs, formatIsoTimeString, addDurations, htmlToElement, createElement, multiplyDuration, DateComponent, hasBgRendering, Splitter, diffDays, buildGotoAnchorHtml, getAllDayHtml, ScrollComponent, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, View, intersectRanges, Slicer, DayHeader, DaySeries, DayTable, createPlugin } from '@fullcalendar/core';
-import { DayBgRow, DayGrid, SimpleDayGrid } from '@fullcalendar/daygrid';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
-    extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-    return extendStatics(d, b);
-};
-
-function __extends(d, b) {
-    extendStatics(d, b);
-    function __() { this.constructor = d; }
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
-    __assign = Object.assign || function __assign(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-        }
-        return t;
-    };
-    return __assign.apply(this, arguments);
-};
-
-/*
-Only handles foreground segs.
-Does not own rendering. Use for low-level util methods by TimeGrid.
-*/
-var TimeGridEventRenderer = /** @class */ (function (_super) {
-    __extends(TimeGridEventRenderer, _super);
-    function TimeGridEventRenderer(timeGrid) {
-        var _this = _super.call(this) || this;
-        _this.timeGrid = timeGrid;
-        return _this;
-    }
-    TimeGridEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {
-        _super.prototype.renderSegs.call(this, context, segs, mirrorInfo);
-        // TODO: dont do every time. memoize
-        this.fullTimeFormat = createFormatter({
-            hour: 'numeric',
-            minute: '2-digit',
-            separator: this.context.options.defaultRangeSeparator
-        });
-    };
-    // Given an array of foreground segments, render a DOM element for each, computes position,
-    // and attaches to the column inner-container elements.
-    TimeGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-        var segsByCol = this.timeGrid.groupSegsByCol(segs);
-        // order the segs within each column
-        // TODO: have groupSegsByCol do this?
-        for (var col = 0; col < segsByCol.length; col++) {
-            segsByCol[col] = this.sortEventSegs(segsByCol[col]);
-        }
-        this.segsByCol = segsByCol;
-        this.timeGrid.attachSegsByCol(segsByCol, this.timeGrid.fgContainerEls);
-    };
-    TimeGridEventRenderer.prototype.detachSegs = function (segs) {
-        segs.forEach(function (seg) {
-            removeElement(seg.el);
-        });
-        this.segsByCol = null;
-    };
-    TimeGridEventRenderer.prototype.computeSegSizes = function (allSegs) {
-        var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
-        var colCnt = timeGrid.colCnt;
-        timeGrid.computeSegVerticals(allSegs); // horizontals relies on this
-        if (segsByCol) {
-            for (var col = 0; col < colCnt; col++) {
-                this.computeSegHorizontals(segsByCol[col]); // compute horizontal coordinates, z-index's, and reorder the array
-            }
-        }
-    };
-    TimeGridEventRenderer.prototype.assignSegSizes = function (allSegs) {
-        var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
-        var colCnt = timeGrid.colCnt;
-        timeGrid.assignSegVerticals(allSegs); // horizontals relies on this
-        if (segsByCol) {
-            for (var col = 0; col < colCnt; col++) {
-                this.assignSegCss(segsByCol[col]);
-            }
-        }
-    };
-    // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
-    TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {
-        return {
-            hour: 'numeric',
-            minute: '2-digit',
-            meridiem: false
-        };
-    };
-    // Computes a default `displayEventEnd` value if one is not expliclty defined
-    TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {
-        return true;
-    };
-    // Renders the HTML for a single event segment's default rendering
-    TimeGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
-        var eventRange = seg.eventRange;
-        var eventDef = eventRange.def;
-        var eventUi = eventRange.ui;
-        var allDay = eventDef.allDay;
-        var isDraggable = computeEventDraggable(this.context, eventDef, eventUi);
-        var isResizableFromStart = seg.isStart && computeEventStartResizable(this.context, eventDef, eventUi);
-        var isResizableFromEnd = seg.isEnd && computeEventEndResizable(this.context, eventDef, eventUi);
-        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
-        var skinCss = cssToStr(this.getSkinCss(eventUi));
-        var timeText;
-        var fullTimeText; // more verbose time text. for the print stylesheet
-        var startTimeText; // just the start time text
-        classes.unshift('fc-time-grid-event');
-        // if the event appears to span more than one day...
-        if (isMultiDayRange(eventRange.range)) {
-            // Don't display time text on segments that run entirely through a day.
-            // That would appear as midnight-midnight and would look dumb.
-            // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)
-            if (seg.isStart || seg.isEnd) {
-                var unzonedStart = seg.start;
-                var unzonedEnd = seg.end;
-                timeText = this._getTimeText(unzonedStart, unzonedEnd, allDay); // TODO: give the timezones
-                fullTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, this.fullTimeFormat);
-                startTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, null, false); // displayEnd=false
-            }
-        }
-        else {
-            // Display the normal time text for the *event's* times
-            timeText = this.getTimeText(eventRange);
-            fullTimeText = this.getTimeText(eventRange, this.fullTimeFormat);
-            startTimeText = this.getTimeText(eventRange, null, false); // displayEnd=false
-        }
-        return '<a class="' + classes.join(' ') + '"' +
-            (eventDef.url ?
-                ' href="' + htmlEscape(eventDef.url) + '"' :
-                '') +
-            (skinCss ?
-                ' style="' + skinCss + '"' :
-                '') +
-            '>' +
-            '<div class="fc-content">' +
-            (timeText ?
-                '<div class="fc-time"' +
-                    ' data-start="' + htmlEscape(startTimeText) + '"' +
-                    ' data-full="' + htmlEscape(fullTimeText) + '"' +
-                    '>' +
-                    '<span>' + htmlEscape(timeText) + '</span>' +
-                    '</div>' :
-                '') +
-            (eventDef.title ?
-                '<div class="fc-title">' +
-                    htmlEscape(eventDef.title) +
-                    '</div>' :
-                '') +
-            '</div>' +
-            /* TODO: write CSS for this
-            (isResizableFromStart ?
-              '<div class="fc-resizer fc-start-resizer"></div>' :
-              ''
-              ) +
-            */
-            (isResizableFromEnd ?
-                '<div class="fc-resizer fc-end-resizer"></div>' :
-                '') +
-            '</a>';
-    };
-    // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
-    // Assumed the segs are already ordered.
-    // NOTE: Also reorders the given array by date!
-    TimeGridEventRenderer.prototype.computeSegHorizontals = function (segs) {
-        var levels;
-        var level0;
-        var i;
-        levels = buildSlotSegLevels(segs);
-        computeForwardSlotSegs(levels);
-        if ((level0 = levels[0])) {
-            for (i = 0; i < level0.length; i++) {
-                computeSlotSegPressures(level0[i]);
-            }
-            for (i = 0; i < level0.length; i++) {
-                this.computeSegForwardBack(level0[i], 0, 0);
-            }
-        }
-    };
-    // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
-    // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
-    // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
-    //
-    // The segment might be part of a "series", which means consecutive segments with the same pressure
-    // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
-    // segments behind this one in the current series, and `seriesBackwardCoord` is the starting
-    // coordinate of the first segment in the series.
-    TimeGridEventRenderer.prototype.computeSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {
-        var forwardSegs = seg.forwardSegs;
-        var i;
-        if (seg.forwardCoord === undefined) { // not already computed
-            if (!forwardSegs.length) {
-                // if there are no forward segments, this segment should butt up against the edge
-                seg.forwardCoord = 1;
-            }
-            else {
-                // sort highest pressure first
-                this.sortForwardSegs(forwardSegs);
-                // this segment's forwardCoord will be calculated from the backwardCoord of the
-                // highest-pressure forward segment.
-                this.computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);
-                seg.forwardCoord = forwardSegs[0].backwardCoord;
-            }
-            // calculate the backwardCoord from the forwardCoord. consider the series
-            seg.backwardCoord = seg.forwardCoord -
-                (seg.forwardCoord - seriesBackwardCoord) / // available width for series
-                    (seriesBackwardPressure + 1); // # of segments in the series
-            // use this segment's coordinates to computed the coordinates of the less-pressurized
-            // forward segments
-            for (i = 0; i < forwardSegs.length; i++) {
-                this.computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);
-            }
-        }
-    };
-    TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {
-        var objs = forwardSegs.map(buildTimeGridSegCompareObj);
-        var specs = [
-            // put higher-pressure first
-            { field: 'forwardPressure', order: -1 },
-            // put segments that are closer to initial edge first (and favor ones with no coords yet)
-            { field: 'backwardCoord', order: 1 }
-        ].concat(this.context.eventOrderSpecs);
-        objs.sort(function (obj0, obj1) {
-            return compareByFieldSpecs(obj0, obj1, specs);
-        });
-        return objs.map(function (c) {
-            return c._seg;
-        });
-    };
-    // Given foreground event segments that have already had their position coordinates computed,
-    // assigns position-related CSS values to their elements.
-    TimeGridEventRenderer.prototype.assignSegCss = function (segs) {
-        for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
-            var seg = segs_1[_i];
-            applyStyle(seg.el, this.generateSegCss(seg));
-            if (seg.level > 0) {
-                seg.el.classList.add('fc-time-grid-event-inset');
-            }
-            // if the event is short that the title will be cut off,
-            // attach a className that condenses the title into the time area.
-            if (seg.eventRange.def.title && seg.bottom - seg.top < 30) {
-                seg.el.classList.add('fc-short'); // TODO: "condensed" is a better name
-            }
-        }
-    };
-    // Generates an object with CSS properties/values that should be applied to an event segment element.
-    // Contains important positioning-related properties that should be applied to any event element, customized or not.
-    TimeGridEventRenderer.prototype.generateSegCss = function (seg) {
-        var shouldOverlap = this.context.options.slotEventOverlap;
-        var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
-        var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
-        var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first
-        var isRtl = this.context.isRtl;
-        var left; // amount of space from left edge, a fraction of the total width
-        var right; // amount of space from right edge, a fraction of the total width
-        if (shouldOverlap) {
-            // double the width, but don't go beyond the maximum forward coordinate (1.0)
-            forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
-        }
-        if (isRtl) {
-            left = 1 - forwardCoord;
-            right = backwardCoord;
-        }
-        else {
-            left = backwardCoord;
-            right = 1 - forwardCoord;
-        }
-        props.zIndex = seg.level + 1; // convert from 0-base to 1-based
-        props.left = left * 100 + '%';
-        props.right = right * 100 + '%';
-        if (shouldOverlap && seg.forwardPressure) {
-            // add padding to the edge so that forward stacked events don't cover the resizer's icon
-            props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
-        }
-        return props;
-    };
-    return TimeGridEventRenderer;
-}(FgEventRenderer));
-// Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
-// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
-function buildSlotSegLevels(segs) {
-    var levels = [];
-    var i;
-    var seg;
-    var j;
-    for (i = 0; i < segs.length; i++) {
-        seg = segs[i];
-        // go through all the levels and stop on the first level where there are no collisions
-        for (j = 0; j < levels.length; j++) {
-            if (!computeSlotSegCollisions(seg, levels[j]).length) {
-                break;
-            }
-        }
-        seg.level = j;
-        (levels[j] || (levels[j] = [])).push(seg);
-    }
-    return levels;
-}
-// For every segment, figure out the other segments that are in subsequent
-// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
-function computeForwardSlotSegs(levels) {
-    var i;
-    var level;
-    var j;
-    var seg;
-    var k;
-    for (i = 0; i < levels.length; i++) {
-        level = levels[i];
-        for (j = 0; j < level.length; j++) {
-            seg = level[j];
-            seg.forwardSegs = [];
-            for (k = i + 1; k < levels.length; k++) {
-                computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
-            }
-        }
-    }
-}
-// Figure out which path forward (via seg.forwardSegs) results in the longest path until
-// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
-function computeSlotSegPressures(seg) {
-    var forwardSegs = seg.forwardSegs;
-    var forwardPressure = 0;
-    var i;
-    var forwardSeg;
-    if (seg.forwardPressure === undefined) { // not already computed
-        for (i = 0; i < forwardSegs.length; i++) {
-            forwardSeg = forwardSegs[i];
-            // figure out the child's maximum forward path
-            computeSlotSegPressures(forwardSeg);
-            // either use the existing maximum, or use the child's forward pressure
-            // plus one (for the forwardSeg itself)
-            forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
-        }
-        seg.forwardPressure = forwardPressure;
-    }
-}
-// Find all the segments in `otherSegs` that vertically collide with `seg`.
-// Append into an optionally-supplied `results` array and return.
-function computeSlotSegCollisions(seg, otherSegs, results) {
-    if (results === void 0) { results = []; }
-    for (var i = 0; i < otherSegs.length; i++) {
-        if (isSlotSegCollision(seg, otherSegs[i])) {
-            results.push(otherSegs[i]);
-        }
-    }
-    return results;
-}
-// Do these segments occupy the same vertical space?
-function isSlotSegCollision(seg1, seg2) {
-    return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
-}
-function buildTimeGridSegCompareObj(seg) {
-    var obj = buildSegCompareObj(seg);
-    obj.forwardPressure = seg.forwardPressure;
-    obj.backwardCoord = seg.backwardCoord;
-    return obj;
-}
-
-var TimeGridMirrorRenderer = /** @class */ (function (_super) {
-    __extends(TimeGridMirrorRenderer, _super);
-    function TimeGridMirrorRenderer() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    TimeGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-        this.segsByCol = this.timeGrid.groupSegsByCol(segs);
-        this.timeGrid.attachSegsByCol(this.segsByCol, this.timeGrid.mirrorContainerEls);
-        this.sourceSeg = mirrorInfo.sourceSeg;
-    };
-    TimeGridMirrorRenderer.prototype.generateSegCss = function (seg) {
-        var props = _super.prototype.generateSegCss.call(this, seg);
-        var sourceSeg = this.sourceSeg;
-        if (sourceSeg && sourceSeg.col === seg.col) {
-            var sourceSegProps = _super.prototype.generateSegCss.call(this, sourceSeg);
-            props.left = sourceSegProps.left;
-            props.right = sourceSegProps.right;
-            props.marginLeft = sourceSegProps.marginLeft;
-            props.marginRight = sourceSegProps.marginRight;
-        }
-        return props;
-    };
-    return TimeGridMirrorRenderer;
-}(TimeGridEventRenderer));
-
-var TimeGridFillRenderer = /** @class */ (function (_super) {
-    __extends(TimeGridFillRenderer, _super);
-    function TimeGridFillRenderer(timeGrid) {
-        var _this = _super.call(this) || this;
-        _this.timeGrid = timeGrid;
-        return _this;
-    }
-    TimeGridFillRenderer.prototype.attachSegs = function (type, segs) {
-        var timeGrid = this.timeGrid;
-        var containerEls;
-        // TODO: more efficient lookup
-        if (type === 'bgEvent') {
-            containerEls = timeGrid.bgContainerEls;
-        }
-        else if (type === 'businessHours') {
-            containerEls = timeGrid.businessContainerEls;
-        }
-        else if (type === 'highlight') {
-            containerEls = timeGrid.highlightContainerEls;
-        }
-        timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);
-        return segs.map(function (seg) {
-            return seg.el;
-        });
-    };
-    TimeGridFillRenderer.prototype.computeSegSizes = function (segs) {
-        this.timeGrid.computeSegVerticals(segs);
-    };
-    TimeGridFillRenderer.prototype.assignSegSizes = function (segs) {
-        this.timeGrid.assignSegVerticals(segs);
-    };
-    return TimeGridFillRenderer;
-}(FillRenderer));
-
-/* A component that renders one or more columns of vertical time slots
-----------------------------------------------------------------------------------------------------------------------*/
-// potential nice values for the slot-duration and interval-duration
-// from largest to smallest
-var AGENDA_STOCK_SUB_DURATIONS = [
-    { hours: 1 },
-    { minutes: 30 },
-    { minutes: 15 },
-    { seconds: 30 },
-    { seconds: 15 }
-];
-var TimeGrid = /** @class */ (function (_super) {
-    __extends(TimeGrid, _super);
-    function TimeGrid(el, renderProps) {
-        var _this = _super.call(this, el) || this;
-        _this.isSlatSizesDirty = false;
-        _this.isColSizesDirty = false;
-        _this.processOptions = memoize(_this._processOptions);
-        _this.renderSkeleton = memoizeRendering(_this._renderSkeleton);
-        _this.renderSlats = memoizeRendering(_this._renderSlats, null, [_this.renderSkeleton]);
-        _this.renderColumns = memoizeRendering(_this._renderColumns, _this._unrenderColumns, [_this.renderSkeleton]);
-        _this.renderProps = renderProps;
-        var renderColumns = _this.renderColumns;
-        var eventRenderer = _this.eventRenderer = new TimeGridEventRenderer(_this);
-        var fillRenderer = _this.fillRenderer = new TimeGridFillRenderer(_this);
-        _this.mirrorRenderer = new TimeGridMirrorRenderer(_this);
-        _this.renderBusinessHours = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderColumns]);
-        _this.renderDateSelection = memoizeRendering(_this._renderDateSelection, _this._unrenderDateSelection, [renderColumns]);
-        _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderColumns]);
-        _this.renderBgEvents = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderColumns]);
-        _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
-        _this.renderEventDrag = memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderColumns]);
-        _this.renderEventResize = memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderColumns]);
-        return _this;
-    }
-    /* Options
-    ------------------------------------------------------------------------------------------------------------------*/
-    // Parses various options into properties of this object
-    // MUST have context already set
-    TimeGrid.prototype._processOptions = function (options) {
-        var slotDuration = options.slotDuration, snapDuration = options.snapDuration;
-        var snapsPerSlot;
-        var input;
-        slotDuration = createDuration(slotDuration);
-        snapDuration = snapDuration ? createDuration(snapDuration) : slotDuration;
-        snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);
-        if (snapsPerSlot === null) {
-            snapDuration = slotDuration;
-            snapsPerSlot = 1;
-            // TODO: say warning?
-        }
-        this.slotDuration = slotDuration;
-        this.snapDuration = snapDuration;
-        this.snapsPerSlot = snapsPerSlot;
-        // might be an array value (for TimelineView).
-        // if so, getting the most granular entry (the last one probably).
-        input = options.slotLabelFormat;
-        if (Array.isArray(input)) {
-            input = input[input.length - 1];
-        }
-        this.labelFormat = createFormatter(input || {
-            hour: 'numeric',
-            minute: '2-digit',
-            omitZeroMinute: true,
-            meridiem: 'short'
-        });
-        input = options.slotLabelInterval;
-        this.labelInterval = input ?
-            createDuration(input) :
-            this.computeLabelInterval(slotDuration);
-    };
-    // Computes an automatic value for slotLabelInterval
-    TimeGrid.prototype.computeLabelInterval = function (slotDuration) {
-        var i;
-        var labelInterval;
-        var slotsPerLabel;
-        // find the smallest stock label interval that results in more than one slots-per-label
-        for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
-            labelInterval = createDuration(AGENDA_STOCK_SUB_DURATIONS[i]);
-            slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);
-            if (slotsPerLabel !== null && slotsPerLabel > 1) {
-                return labelInterval;
-            }
-        }
-        return slotDuration; // fall back
-    };
-    /* Rendering
-    ------------------------------------------------------------------------------------------------------------------*/
-    TimeGrid.prototype.render = function (props, context) {
-        this.processOptions(context.options);
-        var cells = props.cells;
-        this.colCnt = cells.length;
-        this.renderSkeleton(context.theme);
-        this.renderSlats(props.dateProfile);
-        this.renderColumns(props.cells, props.dateProfile);
-        this.renderBusinessHours(context, props.businessHourSegs);
-        this.renderDateSelection(props.dateSelectionSegs);
-        this.renderFgEvents(context, props.fgEventSegs);
-        this.renderBgEvents(context, props.bgEventSegs);
-        this.renderEventSelection(props.eventSelection);
-        this.renderEventDrag(props.eventDrag);
-        this.renderEventResize(props.eventResize);
-    };
-    TimeGrid.prototype.destroy = function () {
-        _super.prototype.destroy.call(this);
-        // should unrender everything else too
-        this.renderSlats.unrender();
-        this.renderColumns.unrender();
-        this.renderSkeleton.unrender();
-    };
-    TimeGrid.prototype.updateSize = function (isResize) {
-        var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
-        if (isResize || this.isSlatSizesDirty) {
-            this.buildSlatPositions();
-            this.isSlatSizesDirty = false;
-        }
-        if (isResize || this.isColSizesDirty) {
-            this.buildColPositions();
-            this.isColSizesDirty = false;
-        }
-        fillRenderer.computeSizes(isResize);
-        eventRenderer.computeSizes(isResize);
-        mirrorRenderer.computeSizes(isResize);
-        fillRenderer.assignSizes(isResize);
-        eventRenderer.assignSizes(isResize);
-        mirrorRenderer.assignSizes(isResize);
-    };
-    TimeGrid.prototype._renderSkeleton = function (theme) {
-        var el = this.el;
-        el.innerHTML =
-            '<div class="fc-bg"></div>' +
-                '<div class="fc-slats"></div>' +
-                '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" style="display:none" />';
-        this.rootBgContainerEl = el.querySelector('.fc-bg');
-        this.slatContainerEl = el.querySelector('.fc-slats');
-        this.bottomRuleEl = el.querySelector('.fc-divider');
-    };
-    TimeGrid.prototype._renderSlats = function (dateProfile) {
-        var theme = this.context.theme;
-        this.slatContainerEl.innerHTML =
-            '<table class="' + theme.getClass('tableGrid') + '">' +
-                this.renderSlatRowHtml(dateProfile) +
-                '</table>';
-        this.slatEls = findElements(this.slatContainerEl, 'tr');
-        this.slatPositions = new PositionCache(this.el, this.slatEls, false, true // vertical
-        );
-        this.isSlatSizesDirty = true;
-    };
-    // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
-    TimeGrid.prototype.renderSlatRowHtml = function (dateProfile) {
-        var _a = this.context, dateEnv = _a.dateEnv, theme = _a.theme, isRtl = _a.isRtl;
-        var html = '';
-        var dayStart = startOfDay(dateProfile.renderRange.start);
-        var slotTime = dateProfile.minTime;
-        var slotIterator = createDuration(0);
-        var slotDate; // will be on the view's first day, but we only care about its time
-        var isLabeled;
-        var axisHtml;
-        // Calculate the time for each slot
-        while (asRoughMs(slotTime) < asRoughMs(dateProfile.maxTime)) {
-            slotDate = dateEnv.add(dayStart, slotTime);
-            isLabeled = wholeDivideDurations(slotIterator, this.labelInterval) !== null;
-            axisHtml =
-                '<td class="fc-axis fc-time ' + theme.getClass('widgetContent') + '">' +
-                    (isLabeled ?
-                        '<span>' + // for matchCellWidths
-                            htmlEscape(dateEnv.format(slotDate, this.labelFormat)) +
-                            '</span>' :
-                        '') +
-                    '</td>';
-            html +=
-                '<tr data-time="' + formatIsoTimeString(slotDate) + '"' +
-                    (isLabeled ? '' : ' class="fc-minor"') +
-                    '>' +
-                    (!isRtl ? axisHtml : '') +
-                    '<td class="' + theme.getClass('widgetContent') + '"></td>' +
-                    (isRtl ? axisHtml : '') +
-                    '</tr>';
-            slotTime = addDurations(slotTime, this.slotDuration);
-            slotIterator = addDurations(slotIterator, this.slotDuration);
-        }
-        return html;
-    };
-    TimeGrid.prototype._renderColumns = function (cells, dateProfile) {
-        var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, theme = _a.theme, dateEnv = _a.dateEnv;
-        var bgRow = new DayBgRow(this.context);
-        this.rootBgContainerEl.innerHTML =
-            '<table class="' + theme.getClass('tableGrid') + '">' +
-                bgRow.renderHtml({
-                    cells: cells,
-                    dateProfile: dateProfile,
-                    renderIntroHtml: this.renderProps.renderBgIntroHtml
-                }) +
-                '</table>';
-        this.colEls = findElements(this.el, '.fc-day, .fc-disabled-day');
-        for (var col = 0; col < this.colCnt; col++) {
-            calendar.publiclyTrigger('dayRender', [
-                {
-                    date: dateEnv.toDate(cells[col].date),
-                    el: this.colEls[col],
-                    view: view
-                }
-            ]);
-        }
-        if (isRtl) {
-            this.colEls.reverse();
-        }
-        this.colPositions = new PositionCache(this.el, this.colEls, true, // horizontal
-        false);
-        this.renderContentSkeleton();
-        this.isColSizesDirty = true;
-    };
-    TimeGrid.prototype._unrenderColumns = function () {
-        this.unrenderContentSkeleton();
-    };
-    /* Content Skeleton
-    ------------------------------------------------------------------------------------------------------------------*/
-    // Renders the DOM that the view's content will live in
-    TimeGrid.prototype.renderContentSkeleton = function () {
-        var isRtl = this.context.isRtl;
-        var parts = [];
-        var skeletonEl;
-        parts.push(this.renderProps.renderIntroHtml());
-        for (var i = 0; i < this.colCnt; i++) {
-            parts.push('<td>' +
-                '<div class="fc-content-col">' +
-                '<div class="fc-event-container fc-mirror-container"></div>' +
-                '<div class="fc-event-container"></div>' +
-                '<div class="fc-highlight-container"></div>' +
-                '<div class="fc-bgevent-container"></div>' +
-                '<div class="fc-business-container"></div>' +
-                '</div>' +
-                '</td>');
-        }
-        if (isRtl) {
-            parts.reverse();
-        }
-        skeletonEl = this.contentSkeletonEl = htmlToElement('<div class="fc-content-skeleton">' +
-            '<table>' +
-            '<tr>' + parts.join('') + '</tr>' +
-            '</table>' +
-            '</div>');
-        this.colContainerEls = findElements(skeletonEl, '.fc-content-col');
-        this.mirrorContainerEls = findElements(skeletonEl, '.fc-mirror-container');
-        this.fgContainerEls = findElements(skeletonEl, '.fc-event-container:not(.fc-mirror-container)');
-        this.bgContainerEls = findElements(skeletonEl, '.fc-bgevent-container');
-        this.highlightContainerEls = findElements(skeletonEl, '.fc-highlight-container');
-        this.businessContainerEls = findElements(skeletonEl, '.fc-business-container');
-        if (isRtl) {
-            this.colContainerEls.reverse();
-            this.mirrorContainerEls.reverse();
-            this.fgContainerEls.reverse();
-            this.bgContainerEls.reverse();
-            this.highlightContainerEls.reverse();
-            this.businessContainerEls.reverse();
-        }
-        this.el.appendChild(skeletonEl);
-    };
-    TimeGrid.prototype.unrenderContentSkeleton = function () {
-        removeElement(this.contentSkeletonEl);
-    };
-    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col
-    TimeGrid.prototype.groupSegsByCol = function (segs) {
-        var segsByCol = [];
-        var i;
-        for (i = 0; i < this.colCnt; i++) {
-            segsByCol.push([]);
-        }
-        for (i = 0; i < segs.length; i++) {
-            segsByCol[segs[i].col].push(segs[i]);
-        }
-        return segsByCol;
-    };
-    // Given segments grouped by column, insert the segments' elements into a parallel array of container
-    // elements, each living within a column.
-    TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {
-        var col;
-        var segs;
-        var i;
-        for (col = 0; col < this.colCnt; col++) { // iterate each column grouping
-            segs = segsByCol[col];
-            for (i = 0; i < segs.length; i++) {
-                containerEls[col].appendChild(segs[i].el);
-            }
-        }
-    };
-    /* Now Indicator
-    ------------------------------------------------------------------------------------------------------------------*/
-    TimeGrid.prototype.getNowIndicatorUnit = function () {
-        return 'minute'; // will refresh on the minute
-    };
-    TimeGrid.prototype.renderNowIndicator = function (segs, date) {
-        // HACK: if date columns not ready for some reason (scheduler)
-        if (!this.colContainerEls) {
-            return;
-        }
-        var top = this.computeDateTop(date);
-        var nodes = [];
-        var i;
-        // render lines within the columns
-        for (i = 0; i < segs.length; i++) {
-            var lineEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' });
-            lineEl.style.top = top + 'px';
-            this.colContainerEls[segs[i].col].appendChild(lineEl);
-            nodes.push(lineEl);
-        }
-        // render an arrow over the axis
-        if (segs.length > 0) { // is the current time in view?
-            var arrowEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' });
-            arrowEl.style.top = top + 'px';
-            this.contentSkeletonEl.appendChild(arrowEl);
-            nodes.push(arrowEl);
-        }
-        this.nowIndicatorEls = nodes;
-    };
-    TimeGrid.prototype.unrenderNowIndicator = function () {
-        if (this.nowIndicatorEls) {
-            this.nowIndicatorEls.forEach(removeElement);
-            this.nowIndicatorEls = null;
-        }
-    };
-    /* Coordinates
-    ------------------------------------------------------------------------------------------------------------------*/
-    TimeGrid.prototype.getTotalSlatHeight = function () {
-        return this.slatContainerEl.getBoundingClientRect().height;
-    };
-    // Computes the top coordinate, relative to the bounds of the grid, of the given date.
-    // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
-    TimeGrid.prototype.computeDateTop = function (when, startOfDayDate) {
-        if (!startOfDayDate) {
-            startOfDayDate = startOfDay(when);
-        }
-        return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));
-    };
-    // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
-    TimeGrid.prototype.computeTimeTop = function (duration) {
-        var len = this.slatEls.length;
-        var dateProfile = this.props.dateProfile;
-        var slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.minTime)) / asRoughMs(this.slotDuration); // floating-point value of # of slots covered
-        var slatIndex;
-        var slatRemainder;
-        // compute a floating-point number for how many slats should be progressed through.
-        // from 0 to number of slats (inclusive)
-        // constrained because minTime/maxTime might be customized.
-        slatCoverage = Math.max(0, slatCoverage);
-        slatCoverage = Math.min(len, slatCoverage);
-        // an integer index of the furthest whole slat
-        // from 0 to number slats (*exclusive*, so len-1)
-        slatIndex = Math.floor(slatCoverage);
-        slatIndex = Math.min(slatIndex, len - 1);
-        // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
-        // could be 1.0 if slatCoverage is covering *all* the slots
-        slatRemainder = slatCoverage - slatIndex;
-        return this.slatPositions.tops[slatIndex] +
-            this.slatPositions.getHeight(slatIndex) * slatRemainder;
-    };
-    // For each segment in an array, computes and assigns its top and bottom properties
-    TimeGrid.prototype.computeSegVerticals = function (segs) {
-        var options = this.context.options;
-        var eventMinHeight = options.timeGridEventMinHeight;
-        var i;
-        var seg;
-        var dayDate;
-        for (i = 0; i < segs.length; i++) {
-            seg = segs[i];
-            dayDate = this.props.cells[seg.col].date;
-            seg.top = this.computeDateTop(seg.start, dayDate);
-            seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.end, dayDate));
-        }
-    };
-    // Given segments that already have their top/bottom properties computed, applies those values to
-    // the segments' elements.
-    TimeGrid.prototype.assignSegVerticals = function (segs) {
-        var i;
-        var seg;
-        for (i = 0; i < segs.length; i++) {
-            seg = segs[i];
-            applyStyle(seg.el, this.generateSegVerticalCss(seg));
-        }
-    };
-    // Generates an object with CSS properties for the top/bottom coordinates of a segment element
-    TimeGrid.prototype.generateSegVerticalCss = function (seg) {
-        return {
-            top: seg.top,
-            bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container
-        };
-    };
-    /* Sizing
-    ------------------------------------------------------------------------------------------------------------------*/
-    TimeGrid.prototype.buildPositionCaches = function () {
-        this.buildColPositions();
-        this.buildSlatPositions();
-    };
-    TimeGrid.prototype.buildColPositions = function () {
-        this.colPositions.build();
-    };
-    TimeGrid.prototype.buildSlatPositions = function () {
-        this.slatPositions.build();
-    };
-    /* Hit System
-    ------------------------------------------------------------------------------------------------------------------*/
-    TimeGrid.prototype.positionToHit = function (positionLeft, positionTop) {
-        var dateEnv = this.context.dateEnv;
-        var _a = this, snapsPerSlot = _a.snapsPerSlot, slatPositions = _a.slatPositions, colPositions = _a.colPositions;
-        var colIndex = colPositions.leftToIndex(positionLeft);
-        var slatIndex = slatPositions.topToIndex(positionTop);
-        if (colIndex != null && slatIndex != null) {
-            var slatTop = slatPositions.tops[slatIndex];
-            var slatHeight = slatPositions.getHeight(slatIndex);
-            var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
-            var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
-            var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
-            var dayDate = this.props.cells[colIndex].date;
-            var time = addDurations(this.props.dateProfile.minTime, multiplyDuration(this.snapDuration, snapIndex));
-            var start = dateEnv.add(dayDate, time);
-            var end = dateEnv.add(start, this.snapDuration);
-            return {
-                col: colIndex,
-                dateSpan: {
-                    range: { start: start, end: end },
-                    allDay: false
-                },
-                dayEl: this.colEls[colIndex],
-                relativeRect: {
-                    left: colPositions.lefts[colIndex],
-                    right: colPositions.rights[colIndex],
-                    top: slatTop,
-                    bottom: slatTop + slatHeight
-                }
-            };
-        }
-    };
-    /* Event Drag Visualization
-    ------------------------------------------------------------------------------------------------------------------*/
-    TimeGrid.prototype._renderEventDrag = function (state) {
-        if (state) {
-            this.eventRenderer.hideByHash(state.affectedInstances);
-            if (state.isEvent) {
-                this.mirrorRenderer.renderSegs(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
-            }
-            else {
-                this.fillRenderer.renderSegs('highlight', this.context, state.segs);
-            }
-        }
-    };
-    TimeGrid.prototype._unrenderEventDrag = function (state) {
-        if (state) {
-            this.eventRenderer.showByHash(state.affectedInstances);
-            if (state.isEvent) {
-                this.mirrorRenderer.unrender(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
-            }
-            else {
-                this.fillRenderer.unrender('highlight', this.context);
-            }
-        }
-    };
-    /* Event Resize Visualization
-    ------------------------------------------------------------------------------------------------------------------*/
-    TimeGrid.prototype._renderEventResize = function (state) {
-        if (state) {
-            this.eventRenderer.hideByHash(state.affectedInstances);
-            this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-        }
-    };
-    TimeGrid.prototype._unrenderEventResize = function (state) {
-        if (state) {
-            this.eventRenderer.showByHash(state.affectedInstances);
-            this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-        }
-    };
-    /* Selection
-    ------------------------------------------------------------------------------------------------------------------*/
-    // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
-    TimeGrid.prototype._renderDateSelection = function (segs) {
-        if (segs) {
-            if (this.context.options.selectMirror) {
-                this.mirrorRenderer.renderSegs(this.context, segs, { isSelecting: true });
-            }
-            else {
-                this.fillRenderer.renderSegs('highlight', this.context, segs);
-            }
-        }
-    };
-    TimeGrid.prototype._unrenderDateSelection = function (segs) {
-        if (segs) {
-            if (this.context.options.selectMirror) {
-                this.mirrorRenderer.unrender(this.context, segs, { isSelecting: true });
-            }
-            else {
-                this.fillRenderer.unrender('highlight', this.context);
-            }
-        }
-    };
-    return TimeGrid;
-}(DateComponent));
-
-var AllDaySplitter = /** @class */ (function (_super) {
-    __extends(AllDaySplitter, _super);
-    function AllDaySplitter() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    AllDaySplitter.prototype.getKeyInfo = function () {
-        return {
-            allDay: {},
-            timed: {}
-        };
-    };
-    AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {
-        if (dateSpan.allDay) {
-            return ['allDay'];
-        }
-        else {
-            return ['timed'];
-        }
-    };
-    AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {
-        if (!eventDef.allDay) {
-            return ['timed'];
-        }
-        else if (hasBgRendering(eventDef)) {
-            return ['timed', 'allDay'];
-        }
-        else {
-            return ['allDay'];
-        }
-    };
-    return AllDaySplitter;
-}(Splitter));
-
-var TIMEGRID_ALL_DAY_EVENT_LIMIT = 5;
-var WEEK_HEADER_FORMAT = createFormatter({ week: 'short' });
-/* An abstract class for all timegrid-related views. Displays one more columns with time slots running vertically.
-----------------------------------------------------------------------------------------------------------------------*/
-// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
-// Responsible for managing width/height.
-var AbstractTimeGridView = /** @class */ (function (_super) {
-    __extends(AbstractTimeGridView, _super);
-    function AbstractTimeGridView() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.splitter = new AllDaySplitter();
-        _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
-        /* Header Render Methods
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Generates the HTML that will go before the day-of week header cells
-        _this.renderHeadIntroHtml = function () {
-            var _a = _this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
-            var range = _this.props.dateProfile.renderRange;
-            var dayCnt = diffDays(range.start, range.end);
-            var weekText;
-            if (options.weekNumbers) {
-                weekText = dateEnv.format(range.start, WEEK_HEADER_FORMAT);
-                return '' +
-                    '<th class="fc-axis fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '>' +
-                    buildGotoAnchorHtml(// aside from link, important for matchCellWidths
-                    options, dateEnv, { date: range.start, type: 'week', forceOff: dayCnt > 1 }, htmlEscape(weekText) // inner HTML
-                    ) +
-                    '</th>';
-            }
-            else {
-                return '<th class="fc-axis ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '></th>';
-            }
-        };
-        /* Time Grid Render Methods
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.
-        _this.renderTimeGridBgIntroHtml = function () {
-            var theme = _this.context.theme;
-            return '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '></td>';
-        };
-        // Generates the HTML that goes before all other types of cells.
-        // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
-        _this.renderTimeGridIntroHtml = function () {
-            return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
-        };
-        /* Day Grid Render Methods
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Generates the HTML that goes before the all-day cells
-        _this.renderDayGridBgIntroHtml = function () {
-            var _a = _this.context, theme = _a.theme, options = _a.options;
-            return '' +
-                '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '>' +
-                '<span>' + // needed for matchCellWidths
-                getAllDayHtml(options) +
-                '</span>' +
-                '</td>';
-        };
-        // Generates the HTML that goes before all other types of cells.
-        // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
-        _this.renderDayGridIntroHtml = function () {
-            return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
-        };
-        return _this;
-    }
-    AbstractTimeGridView.prototype.render = function (props, context) {
-        _super.prototype.render.call(this, props, context);
-        this.renderSkeleton(context);
-    };
-    AbstractTimeGridView.prototype.destroy = function () {
-        _super.prototype.destroy.call(this);
-        this.renderSkeleton.unrender();
-    };
-    AbstractTimeGridView.prototype._renderSkeleton = function (context) {
-        this.el.classList.add('fc-timeGrid-view');
-        this.el.innerHTML = this.renderSkeletonHtml();
-        this.scroller = new ScrollComponent('hidden', // overflow x
-        'auto' // overflow y
-        );
-        var timeGridWrapEl = this.scroller.el;
-        this.el.querySelector('.fc-body > tr > td').appendChild(timeGridWrapEl);
-        timeGridWrapEl.classList.add('fc-time-grid-container');
-        var timeGridEl = createElement('div', { className: 'fc-time-grid' });
-        timeGridWrapEl.appendChild(timeGridEl);
-        this.timeGrid = new TimeGrid(timeGridEl, {
-            renderBgIntroHtml: this.renderTimeGridBgIntroHtml,
-            renderIntroHtml: this.renderTimeGridIntroHtml
-        });
-        if (context.options.allDaySlot) { // should we display the "all-day" area?
-            this.dayGrid = new DayGrid(// the all-day subcomponent of this view
-            this.el.querySelector('.fc-day-grid'), {
-                renderNumberIntroHtml: this.renderDayGridIntroHtml,
-                renderBgIntroHtml: this.renderDayGridBgIntroHtml,
-                renderIntroHtml: this.renderDayGridIntroHtml,
-                colWeekNumbersVisible: false,
-                cellWeekNumbersVisible: false
-            });
-            // have the day-grid extend it's coordinate area over the <hr> dividing the two grids
-            var dividerEl = this.el.querySelector('.fc-divider');
-            this.dayGrid.bottomCoordPadding = dividerEl.getBoundingClientRect().height;
-        }
-    };
-    AbstractTimeGridView.prototype._unrenderSkeleton = function () {
-        this.el.classList.remove('fc-timeGrid-view');
-        this.timeGrid.destroy();
-        if (this.dayGrid) {
-            this.dayGrid.destroy();
-        }
-        this.scroller.destroy();
-    };
-    /* Rendering
-    ------------------------------------------------------------------------------------------------------------------*/
-    // Builds the HTML skeleton for the view.
-    // The day-grid and time-grid components will render inside containers defined by this HTML.
-    AbstractTimeGridView.prototype.renderSkeletonHtml = function () {
-        var _a = this.context, theme = _a.theme, options = _a.options;
-        return '' +
-            '<table class="' + theme.getClass('tableGrid') + '">' +
-            (options.columnHeader ?
-                '<thead class="fc-head">' +
-                    '<tr>' +
-                    '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
-                    '</tr>' +
-                    '</thead>' :
-                '') +
-            '<tbody class="fc-body">' +
-            '<tr>' +
-            '<td class="' + theme.getClass('widgetContent') + '">' +
-            (options.allDaySlot ?
-                '<div class="fc-day-grid"></div>' +
-                    '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" />' :
-                '') +
-            '</td>' +
-            '</tr>' +
-            '</tbody>' +
-            '</table>';
-    };
-    /* Now Indicator
-    ------------------------------------------------------------------------------------------------------------------*/
-    AbstractTimeGridView.prototype.getNowIndicatorUnit = function () {
-        return this.timeGrid.getNowIndicatorUnit();
-    };
-    // subclasses should implement
-    // renderNowIndicator(date: DateMarker) {
-    // }
-    AbstractTimeGridView.prototype.unrenderNowIndicator = function () {
-        this.timeGrid.unrenderNowIndicator();
-    };
-    /* Dimensions
-    ------------------------------------------------------------------------------------------------------------------*/
-    AbstractTimeGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
-        _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
-        this.timeGrid.updateSize(isResize);
-        if (this.dayGrid) {
-            this.dayGrid.updateSize(isResize);
-        }
-    };
-    // Adjusts the vertical dimensions of the view to the specified values
-    AbstractTimeGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
-        var _this = this;
-        var eventLimit;
-        var scrollerHeight;
-        var scrollbarWidths;
-        // make all axis cells line up
-        this.axisWidth = matchCellWidths(findElements(this.el, '.fc-axis'));
-        // hack to give the view some height prior to timeGrid's columns being rendered
-        // TODO: separate setting height from scroller VS timeGrid.
-        if (!this.timeGrid.colEls) {
-            if (!isAuto) {
-                scrollerHeight = this.computeScrollerHeight(viewHeight);
-                this.scroller.setHeight(scrollerHeight);
-            }
-            return;
-        }
-        // set of fake row elements that must compensate when scroller has scrollbars
-        var noScrollRowEls = findElements(this.el, '.fc-row').filter(function (node) {
-            return !_this.scroller.el.contains(node);
-        });
-        // reset all dimensions back to the original state
-        this.timeGrid.bottomRuleEl.style.display = 'none'; // will be shown later if this <hr> is necessary
-        this.scroller.clear(); // sets height to 'auto' and clears overflow
-        noScrollRowEls.forEach(uncompensateScroll);
-        // limit number of events in the all-day area
-        if (this.dayGrid) {
-            this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
-            eventLimit = this.context.options.eventLimit;
-            if (eventLimit && typeof eventLimit !== 'number') {
-                eventLimit = TIMEGRID_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number
-            }
-            if (eventLimit) {
-                this.dayGrid.limitRows(eventLimit);
-            }
-        }
-        if (!isAuto) { // should we force dimensions of the scroll container?
-            scrollerHeight = this.computeScrollerHeight(viewHeight);
-            this.scroller.setHeight(scrollerHeight);
-            scrollbarWidths = this.scroller.getScrollbarWidths();
-            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
-                // make the all-day and header rows lines up
-                noScrollRowEls.forEach(function (rowEl) {
-                    compensateScroll(rowEl, scrollbarWidths);
-                });
-                // the scrollbar compensation might have changed text flow, which might affect height, so recalculate
-                // and reapply the desired height to the scroller.
-                scrollerHeight = this.computeScrollerHeight(viewHeight);
-                this.scroller.setHeight(scrollerHeight);
-            }
-            // guarantees the same scrollbar widths
-            this.scroller.lockOverflow(scrollbarWidths);
-            // if there's any space below the slats, show the horizontal rule.
-            // this won't cause any new overflow, because lockOverflow already called.
-            if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
-                this.timeGrid.bottomRuleEl.style.display = '';
-            }
-        }
-    };
-    // given a desired total height of the view, returns what the height of the scroller should be
-    AbstractTimeGridView.prototype.computeScrollerHeight = function (viewHeight) {
-        return viewHeight -
-            subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
-    };
-    /* Scroll
-    ------------------------------------------------------------------------------------------------------------------*/
-    // Computes the initial pre-configured scroll state prior to allowing the user to change it
-    AbstractTimeGridView.prototype.computeDateScroll = function (duration) {
-        var top = this.timeGrid.computeTimeTop(duration);
-        // zoom can give weird floating-point values. rather scroll a little bit further
-        top = Math.ceil(top);
-        if (top) {
-            top++; // to overcome top border that slots beyond the first have. looks better
-        }
-        return { top: top };
-    };
-    AbstractTimeGridView.prototype.queryDateScroll = function () {
-        return { top: this.scroller.getScrollTop() };
-    };
-    AbstractTimeGridView.prototype.applyDateScroll = function (scroll) {
-        if (scroll.top !== undefined) {
-            this.scroller.setScrollTop(scroll.top);
-        }
-    };
-    // Generates an HTML attribute string for setting the width of the axis, if it is known
-    AbstractTimeGridView.prototype.axisStyleAttr = function () {
-        if (this.axisWidth != null) {
-            return 'style="width:' + this.axisWidth + 'px"';
-        }
-        return '';
-    };
-    return AbstractTimeGridView;
-}(View));
-AbstractTimeGridView.prototype.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering
-
-var SimpleTimeGrid = /** @class */ (function (_super) {
-    __extends(SimpleTimeGrid, _super);
-    function SimpleTimeGrid(timeGrid) {
-        var _this = _super.call(this, timeGrid.el) || this;
-        _this.buildDayRanges = memoize(buildDayRanges);
-        _this.slicer = new TimeGridSlicer();
-        _this.timeGrid = timeGrid;
-        return _this;
-    }
-    SimpleTimeGrid.prototype.firstContext = function (context) {
-        context.calendar.registerInteractiveComponent(this, {
-            el: this.timeGrid.el
-        });
-    };
-    SimpleTimeGrid.prototype.destroy = function () {
-        _super.prototype.destroy.call(this);
-        this.context.calendar.unregisterInteractiveComponent(this);
-    };
-    SimpleTimeGrid.prototype.render = function (props, context) {
-        var dateEnv = this.context.dateEnv;
-        var dateProfile = props.dateProfile, dayTable = props.dayTable;
-        var dayRanges = this.dayRanges = this.buildDayRanges(dayTable, dateProfile, dateEnv);
-        var timeGrid = this.timeGrid;
-        timeGrid.receiveContext(context); // hack because context is used in sliceProps
-        timeGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, null, context.calendar, timeGrid, dayRanges), { dateProfile: dateProfile, cells: dayTable.cells[0] }), context);
-    };
-    SimpleTimeGrid.prototype.renderNowIndicator = function (date) {
-        this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(date, this.timeGrid, this.dayRanges), date);
-    };
-    SimpleTimeGrid.prototype.buildPositionCaches = function () {
-        this.timeGrid.buildPositionCaches();
-    };
-    SimpleTimeGrid.prototype.queryHit = function (positionLeft, positionTop) {
-        var rawHit = this.timeGrid.positionToHit(positionLeft, positionTop);
-        if (rawHit) {
-            return {
-                component: this.timeGrid,
-                dateSpan: rawHit.dateSpan,
-                dayEl: rawHit.dayEl,
-                rect: {
-                    left: rawHit.relativeRect.left,
-                    right: rawHit.relativeRect.right,
-                    top: rawHit.relativeRect.top,
-                    bottom: rawHit.relativeRect.bottom
-                },
-                layer: 0
-            };
-        }
-    };
-    return SimpleTimeGrid;
-}(DateComponent));
-function buildDayRanges(dayTable, dateProfile, dateEnv) {
-    var ranges = [];
-    for (var _i = 0, _a = dayTable.headerDates; _i < _a.length; _i++) {
-        var date = _a[_i];
-        ranges.push({
-            start: dateEnv.add(date, dateProfile.minTime),
-            end: dateEnv.add(date, dateProfile.maxTime)
-        });
-    }
-    return ranges;
-}
-var TimeGridSlicer = /** @class */ (function (_super) {
-    __extends(TimeGridSlicer, _super);
-    function TimeGridSlicer() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    TimeGridSlicer.prototype.sliceRange = function (range, dayRanges) {
-        var segs = [];
-        for (var col = 0; col < dayRanges.length; col++) {
-            var segRange = intersectRanges(range, dayRanges[col]);
-            if (segRange) {
-                segs.push({
-                    start: segRange.start,
-                    end: segRange.end,
-                    isStart: segRange.start.valueOf() === range.start.valueOf(),
-                    isEnd: segRange.end.valueOf() === range.end.valueOf(),
-                    col: col
-                });
-            }
-        }
-        return segs;
-    };
-    return TimeGridSlicer;
-}(Slicer));
-
-var TimeGridView = /** @class */ (function (_super) {
-    __extends(TimeGridView, _super);
-    function TimeGridView() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.buildDayTable = memoize(buildDayTable);
-        return _this;
-    }
-    TimeGridView.prototype.render = function (props, context) {
-        _super.prototype.render.call(this, props, context); // for flags for updateSize. also _renderSkeleton/_unrenderSkeleton
-        var _a = this.props, dateProfile = _a.dateProfile, dateProfileGenerator = _a.dateProfileGenerator;
-        var nextDayThreshold = context.nextDayThreshold;
-        var dayTable = this.buildDayTable(dateProfile, dateProfileGenerator);
-        var splitProps = this.splitter.splitProps(props);
-        if (this.header) {
-            this.header.receiveProps({
-                dateProfile: dateProfile,
-                dates: dayTable.headerDates,
-                datesRepDistinctDays: true,
-                renderIntroHtml: this.renderHeadIntroHtml
-            }, context);
-        }
-        this.simpleTimeGrid.receiveProps(__assign({}, splitProps['timed'], { dateProfile: dateProfile,
-            dayTable: dayTable }), context);
-        if (this.simpleDayGrid) {
-            this.simpleDayGrid.receiveProps(__assign({}, splitProps['allDay'], { dateProfile: dateProfile,
-                dayTable: dayTable,
-                nextDayThreshold: nextDayThreshold, isRigid: false }), context);
-        }
-        this.startNowIndicator(dateProfile, dateProfileGenerator);
-    };
-    TimeGridView.prototype._renderSkeleton = function (context) {
-        _super.prototype._renderSkeleton.call(this, context);
-        if (context.options.columnHeader) {
-            this.header = new DayHeader(this.el.querySelector('.fc-head-container'));
-        }
-        this.simpleTimeGrid = new SimpleTimeGrid(this.timeGrid);
-        if (this.dayGrid) {
-            this.simpleDayGrid = new SimpleDayGrid(this.dayGrid);
-        }
-    };
-    TimeGridView.prototype._unrenderSkeleton = function () {
-        _super.prototype._unrenderSkeleton.call(this);
-        if (this.header) {
-            this.header.destroy();
-        }
-        this.simpleTimeGrid.destroy();
-        if (this.simpleDayGrid) {
-            this.simpleDayGrid.destroy();
-        }
-    };
-    TimeGridView.prototype.renderNowIndicator = function (date) {
-        this.simpleTimeGrid.renderNowIndicator(date);
-    };
-    return TimeGridView;
-}(AbstractTimeGridView));
-function buildDayTable(dateProfile, dateProfileGenerator) {
-    var daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator);
-    return new DayTable(daySeries, false);
-}
-
-var main = createPlugin({
-    defaultView: 'timeGridWeek',
-    views: {
-        timeGrid: {
-            class: TimeGridView,
-            allDaySlot: true,
-            slotDuration: '00:30:00',
-            slotEventOverlap: true // a bad name. confused with overlap/constraint system
-        },
-        timeGridDay: {
-            type: 'timeGrid',
-            duration: { days: 1 }
-        },
-        timeGridWeek: {
-            type: 'timeGrid',
-            duration: { weeks: 1 }
-        }
-    }
-});
-
-export default main;
-export { AbstractTimeGridView, TimeGrid, TimeGridSlicer, TimeGridView, buildDayRanges, buildDayTable };

+ 0 - 1403
plugins/fullcalendar-timegrid/main.js

@@ -1,1403 +0,0 @@
-/*!
-FullCalendar Time Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
-    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core'), require('@fullcalendar/daygrid')) :
-    typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core', '@fullcalendar/daygrid'], factory) :
-    (global = global || self, factory(global.FullCalendarTimeGrid = {}, global.FullCalendar, global.FullCalendarDayGrid));
-}(this, function (exports, core, daygrid) { 'use strict';
-
-    /*! *****************************************************************************
-    Copyright (c) Microsoft Corporation.
-
-    Permission to use, copy, modify, and/or distribute this software for any
-    purpose with or without fee is hereby granted.
-
-    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-    PERFORMANCE OF THIS SOFTWARE.
-    ***************************************************************************** */
-    /* global Reflect, Promise */
-
-    var extendStatics = function(d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-
-    function __extends(d, b) {
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    }
-
-    var __assign = function() {
-        __assign = Object.assign || function __assign(t) {
-            for (var s, i = 1, n = arguments.length; i < n; i++) {
-                s = arguments[i];
-                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-            }
-            return t;
-        };
-        return __assign.apply(this, arguments);
-    };
-
-    /*
-    Only handles foreground segs.
-    Does not own rendering. Use for low-level util methods by TimeGrid.
-    */
-    var TimeGridEventRenderer = /** @class */ (function (_super) {
-        __extends(TimeGridEventRenderer, _super);
-        function TimeGridEventRenderer(timeGrid) {
-            var _this = _super.call(this) || this;
-            _this.timeGrid = timeGrid;
-            return _this;
-        }
-        TimeGridEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {
-            _super.prototype.renderSegs.call(this, context, segs, mirrorInfo);
-            // TODO: dont do every time. memoize
-            this.fullTimeFormat = core.createFormatter({
-                hour: 'numeric',
-                minute: '2-digit',
-                separator: this.context.options.defaultRangeSeparator
-            });
-        };
-        // Given an array of foreground segments, render a DOM element for each, computes position,
-        // and attaches to the column inner-container elements.
-        TimeGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-            var segsByCol = this.timeGrid.groupSegsByCol(segs);
-            // order the segs within each column
-            // TODO: have groupSegsByCol do this?
-            for (var col = 0; col < segsByCol.length; col++) {
-                segsByCol[col] = this.sortEventSegs(segsByCol[col]);
-            }
-            this.segsByCol = segsByCol;
-            this.timeGrid.attachSegsByCol(segsByCol, this.timeGrid.fgContainerEls);
-        };
-        TimeGridEventRenderer.prototype.detachSegs = function (segs) {
-            segs.forEach(function (seg) {
-                core.removeElement(seg.el);
-            });
-            this.segsByCol = null;
-        };
-        TimeGridEventRenderer.prototype.computeSegSizes = function (allSegs) {
-            var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
-            var colCnt = timeGrid.colCnt;
-            timeGrid.computeSegVerticals(allSegs); // horizontals relies on this
-            if (segsByCol) {
-                for (var col = 0; col < colCnt; col++) {
-                    this.computeSegHorizontals(segsByCol[col]); // compute horizontal coordinates, z-index's, and reorder the array
-                }
-            }
-        };
-        TimeGridEventRenderer.prototype.assignSegSizes = function (allSegs) {
-            var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
-            var colCnt = timeGrid.colCnt;
-            timeGrid.assignSegVerticals(allSegs); // horizontals relies on this
-            if (segsByCol) {
-                for (var col = 0; col < colCnt; col++) {
-                    this.assignSegCss(segsByCol[col]);
-                }
-            }
-        };
-        // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
-        TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {
-            return {
-                hour: 'numeric',
-                minute: '2-digit',
-                meridiem: false
-            };
-        };
-        // Computes a default `displayEventEnd` value if one is not expliclty defined
-        TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {
-            return true;
-        };
-        // Renders the HTML for a single event segment's default rendering
-        TimeGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
-            var eventRange = seg.eventRange;
-            var eventDef = eventRange.def;
-            var eventUi = eventRange.ui;
-            var allDay = eventDef.allDay;
-            var isDraggable = core.computeEventDraggable(this.context, eventDef, eventUi);
-            var isResizableFromStart = seg.isStart && core.computeEventStartResizable(this.context, eventDef, eventUi);
-            var isResizableFromEnd = seg.isEnd && core.computeEventEndResizable(this.context, eventDef, eventUi);
-            var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
-            var skinCss = core.cssToStr(this.getSkinCss(eventUi));
-            var timeText;
-            var fullTimeText; // more verbose time text. for the print stylesheet
-            var startTimeText; // just the start time text
-            classes.unshift('fc-time-grid-event');
-            // if the event appears to span more than one day...
-            if (core.isMultiDayRange(eventRange.range)) {
-                // Don't display time text on segments that run entirely through a day.
-                // That would appear as midnight-midnight and would look dumb.
-                // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)
-                if (seg.isStart || seg.isEnd) {
-                    var unzonedStart = seg.start;
-                    var unzonedEnd = seg.end;
-                    timeText = this._getTimeText(unzonedStart, unzonedEnd, allDay); // TODO: give the timezones
-                    fullTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, this.fullTimeFormat);
-                    startTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, null, false); // displayEnd=false
-                }
-            }
-            else {
-                // Display the normal time text for the *event's* times
-                timeText = this.getTimeText(eventRange);
-                fullTimeText = this.getTimeText(eventRange, this.fullTimeFormat);
-                startTimeText = this.getTimeText(eventRange, null, false); // displayEnd=false
-            }
-            return '<a class="' + classes.join(' ') + '"' +
-                (eventDef.url ?
-                    ' href="' + core.htmlEscape(eventDef.url) + '"' :
-                    '') +
-                (skinCss ?
-                    ' style="' + skinCss + '"' :
-                    '') +
-                '>' +
-                '<div class="fc-content">' +
-                (timeText ?
-                    '<div class="fc-time"' +
-                        ' data-start="' + core.htmlEscape(startTimeText) + '"' +
-                        ' data-full="' + core.htmlEscape(fullTimeText) + '"' +
-                        '>' +
-                        '<span>' + core.htmlEscape(timeText) + '</span>' +
-                        '</div>' :
-                    '') +
-                (eventDef.title ?
-                    '<div class="fc-title">' +
-                        core.htmlEscape(eventDef.title) +
-                        '</div>' :
-                    '') +
-                '</div>' +
-                /* TODO: write CSS for this
-                (isResizableFromStart ?
-                  '<div class="fc-resizer fc-start-resizer"></div>' :
-                  ''
-                  ) +
-                */
-                (isResizableFromEnd ?
-                    '<div class="fc-resizer fc-end-resizer"></div>' :
-                    '') +
-                '</a>';
-        };
-        // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
-        // Assumed the segs are already ordered.
-        // NOTE: Also reorders the given array by date!
-        TimeGridEventRenderer.prototype.computeSegHorizontals = function (segs) {
-            var levels;
-            var level0;
-            var i;
-            levels = buildSlotSegLevels(segs);
-            computeForwardSlotSegs(levels);
-            if ((level0 = levels[0])) {
-                for (i = 0; i < level0.length; i++) {
-                    computeSlotSegPressures(level0[i]);
-                }
-                for (i = 0; i < level0.length; i++) {
-                    this.computeSegForwardBack(level0[i], 0, 0);
-                }
-            }
-        };
-        // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
-        // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
-        // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
-        //
-        // The segment might be part of a "series", which means consecutive segments with the same pressure
-        // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
-        // segments behind this one in the current series, and `seriesBackwardCoord` is the starting
-        // coordinate of the first segment in the series.
-        TimeGridEventRenderer.prototype.computeSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {
-            var forwardSegs = seg.forwardSegs;
-            var i;
-            if (seg.forwardCoord === undefined) { // not already computed
-                if (!forwardSegs.length) {
-                    // if there are no forward segments, this segment should butt up against the edge
-                    seg.forwardCoord = 1;
-                }
-                else {
-                    // sort highest pressure first
-                    this.sortForwardSegs(forwardSegs);
-                    // this segment's forwardCoord will be calculated from the backwardCoord of the
-                    // highest-pressure forward segment.
-                    this.computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);
-                    seg.forwardCoord = forwardSegs[0].backwardCoord;
-                }
-                // calculate the backwardCoord from the forwardCoord. consider the series
-                seg.backwardCoord = seg.forwardCoord -
-                    (seg.forwardCoord - seriesBackwardCoord) / // available width for series
-                        (seriesBackwardPressure + 1); // # of segments in the series
-                // use this segment's coordinates to computed the coordinates of the less-pressurized
-                // forward segments
-                for (i = 0; i < forwardSegs.length; i++) {
-                    this.computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);
-                }
-            }
-        };
-        TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {
-            var objs = forwardSegs.map(buildTimeGridSegCompareObj);
-            var specs = [
-                // put higher-pressure first
-                { field: 'forwardPressure', order: -1 },
-                // put segments that are closer to initial edge first (and favor ones with no coords yet)
-                { field: 'backwardCoord', order: 1 }
-            ].concat(this.context.eventOrderSpecs);
-            objs.sort(function (obj0, obj1) {
-                return core.compareByFieldSpecs(obj0, obj1, specs);
-            });
-            return objs.map(function (c) {
-                return c._seg;
-            });
-        };
-        // Given foreground event segments that have already had their position coordinates computed,
-        // assigns position-related CSS values to their elements.
-        TimeGridEventRenderer.prototype.assignSegCss = function (segs) {
-            for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
-                var seg = segs_1[_i];
-                core.applyStyle(seg.el, this.generateSegCss(seg));
-                if (seg.level > 0) {
-                    seg.el.classList.add('fc-time-grid-event-inset');
-                }
-                // if the event is short that the title will be cut off,
-                // attach a className that condenses the title into the time area.
-                if (seg.eventRange.def.title && seg.bottom - seg.top < 30) {
-                    seg.el.classList.add('fc-short'); // TODO: "condensed" is a better name
-                }
-            }
-        };
-        // Generates an object with CSS properties/values that should be applied to an event segment element.
-        // Contains important positioning-related properties that should be applied to any event element, customized or not.
-        TimeGridEventRenderer.prototype.generateSegCss = function (seg) {
-            var shouldOverlap = this.context.options.slotEventOverlap;
-            var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
-            var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
-            var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first
-            var isRtl = this.context.isRtl;
-            var left; // amount of space from left edge, a fraction of the total width
-            var right; // amount of space from right edge, a fraction of the total width
-            if (shouldOverlap) {
-                // double the width, but don't go beyond the maximum forward coordinate (1.0)
-                forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
-            }
-            if (isRtl) {
-                left = 1 - forwardCoord;
-                right = backwardCoord;
-            }
-            else {
-                left = backwardCoord;
-                right = 1 - forwardCoord;
-            }
-            props.zIndex = seg.level + 1; // convert from 0-base to 1-based
-            props.left = left * 100 + '%';
-            props.right = right * 100 + '%';
-            if (shouldOverlap && seg.forwardPressure) {
-                // add padding to the edge so that forward stacked events don't cover the resizer's icon
-                props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
-            }
-            return props;
-        };
-        return TimeGridEventRenderer;
-    }(core.FgEventRenderer));
-    // Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
-    // left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
-    function buildSlotSegLevels(segs) {
-        var levels = [];
-        var i;
-        var seg;
-        var j;
-        for (i = 0; i < segs.length; i++) {
-            seg = segs[i];
-            // go through all the levels and stop on the first level where there are no collisions
-            for (j = 0; j < levels.length; j++) {
-                if (!computeSlotSegCollisions(seg, levels[j]).length) {
-                    break;
-                }
-            }
-            seg.level = j;
-            (levels[j] || (levels[j] = [])).push(seg);
-        }
-        return levels;
-    }
-    // For every segment, figure out the other segments that are in subsequent
-    // levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
-    function computeForwardSlotSegs(levels) {
-        var i;
-        var level;
-        var j;
-        var seg;
-        var k;
-        for (i = 0; i < levels.length; i++) {
-            level = levels[i];
-            for (j = 0; j < level.length; j++) {
-                seg = level[j];
-                seg.forwardSegs = [];
-                for (k = i + 1; k < levels.length; k++) {
-                    computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
-                }
-            }
-        }
-    }
-    // Figure out which path forward (via seg.forwardSegs) results in the longest path until
-    // the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
-    function computeSlotSegPressures(seg) {
-        var forwardSegs = seg.forwardSegs;
-        var forwardPressure = 0;
-        var i;
-        var forwardSeg;
-        if (seg.forwardPressure === undefined) { // not already computed
-            for (i = 0; i < forwardSegs.length; i++) {
-                forwardSeg = forwardSegs[i];
-                // figure out the child's maximum forward path
-                computeSlotSegPressures(forwardSeg);
-                // either use the existing maximum, or use the child's forward pressure
-                // plus one (for the forwardSeg itself)
-                forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
-            }
-            seg.forwardPressure = forwardPressure;
-        }
-    }
-    // Find all the segments in `otherSegs` that vertically collide with `seg`.
-    // Append into an optionally-supplied `results` array and return.
-    function computeSlotSegCollisions(seg, otherSegs, results) {
-        if (results === void 0) { results = []; }
-        for (var i = 0; i < otherSegs.length; i++) {
-            if (isSlotSegCollision(seg, otherSegs[i])) {
-                results.push(otherSegs[i]);
-            }
-        }
-        return results;
-    }
-    // Do these segments occupy the same vertical space?
-    function isSlotSegCollision(seg1, seg2) {
-        return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
-    }
-    function buildTimeGridSegCompareObj(seg) {
-        var obj = core.buildSegCompareObj(seg);
-        obj.forwardPressure = seg.forwardPressure;
-        obj.backwardCoord = seg.backwardCoord;
-        return obj;
-    }
-
-    var TimeGridMirrorRenderer = /** @class */ (function (_super) {
-        __extends(TimeGridMirrorRenderer, _super);
-        function TimeGridMirrorRenderer() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        TimeGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
-            this.segsByCol = this.timeGrid.groupSegsByCol(segs);
-            this.timeGrid.attachSegsByCol(this.segsByCol, this.timeGrid.mirrorContainerEls);
-            this.sourceSeg = mirrorInfo.sourceSeg;
-        };
-        TimeGridMirrorRenderer.prototype.generateSegCss = function (seg) {
-            var props = _super.prototype.generateSegCss.call(this, seg);
-            var sourceSeg = this.sourceSeg;
-            if (sourceSeg && sourceSeg.col === seg.col) {
-                var sourceSegProps = _super.prototype.generateSegCss.call(this, sourceSeg);
-                props.left = sourceSegProps.left;
-                props.right = sourceSegProps.right;
-                props.marginLeft = sourceSegProps.marginLeft;
-                props.marginRight = sourceSegProps.marginRight;
-            }
-            return props;
-        };
-        return TimeGridMirrorRenderer;
-    }(TimeGridEventRenderer));
-
-    var TimeGridFillRenderer = /** @class */ (function (_super) {
-        __extends(TimeGridFillRenderer, _super);
-        function TimeGridFillRenderer(timeGrid) {
-            var _this = _super.call(this) || this;
-            _this.timeGrid = timeGrid;
-            return _this;
-        }
-        TimeGridFillRenderer.prototype.attachSegs = function (type, segs) {
-            var timeGrid = this.timeGrid;
-            var containerEls;
-            // TODO: more efficient lookup
-            if (type === 'bgEvent') {
-                containerEls = timeGrid.bgContainerEls;
-            }
-            else if (type === 'businessHours') {
-                containerEls = timeGrid.businessContainerEls;
-            }
-            else if (type === 'highlight') {
-                containerEls = timeGrid.highlightContainerEls;
-            }
-            timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);
-            return segs.map(function (seg) {
-                return seg.el;
-            });
-        };
-        TimeGridFillRenderer.prototype.computeSegSizes = function (segs) {
-            this.timeGrid.computeSegVerticals(segs);
-        };
-        TimeGridFillRenderer.prototype.assignSegSizes = function (segs) {
-            this.timeGrid.assignSegVerticals(segs);
-        };
-        return TimeGridFillRenderer;
-    }(core.FillRenderer));
-
-    /* A component that renders one or more columns of vertical time slots
-    ----------------------------------------------------------------------------------------------------------------------*/
-    // potential nice values for the slot-duration and interval-duration
-    // from largest to smallest
-    var AGENDA_STOCK_SUB_DURATIONS = [
-        { hours: 1 },
-        { minutes: 30 },
-        { minutes: 15 },
-        { seconds: 30 },
-        { seconds: 15 }
-    ];
-    var TimeGrid = /** @class */ (function (_super) {
-        __extends(TimeGrid, _super);
-        function TimeGrid(el, renderProps) {
-            var _this = _super.call(this, el) || this;
-            _this.isSlatSizesDirty = false;
-            _this.isColSizesDirty = false;
-            _this.processOptions = core.memoize(_this._processOptions);
-            _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton);
-            _this.renderSlats = core.memoizeRendering(_this._renderSlats, null, [_this.renderSkeleton]);
-            _this.renderColumns = core.memoizeRendering(_this._renderColumns, _this._unrenderColumns, [_this.renderSkeleton]);
-            _this.renderProps = renderProps;
-            var renderColumns = _this.renderColumns;
-            var eventRenderer = _this.eventRenderer = new TimeGridEventRenderer(_this);
-            var fillRenderer = _this.fillRenderer = new TimeGridFillRenderer(_this);
-            _this.mirrorRenderer = new TimeGridMirrorRenderer(_this);
-            _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderColumns]);
-            _this.renderDateSelection = core.memoizeRendering(_this._renderDateSelection, _this._unrenderDateSelection, [renderColumns]);
-            _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderColumns]);
-            _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderColumns]);
-            _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
-            _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderColumns]);
-            _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderColumns]);
-            return _this;
-        }
-        /* Options
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Parses various options into properties of this object
-        // MUST have context already set
-        TimeGrid.prototype._processOptions = function (options) {
-            var slotDuration = options.slotDuration, snapDuration = options.snapDuration;
-            var snapsPerSlot;
-            var input;
-            slotDuration = core.createDuration(slotDuration);
-            snapDuration = snapDuration ? core.createDuration(snapDuration) : slotDuration;
-            snapsPerSlot = core.wholeDivideDurations(slotDuration, snapDuration);
-            if (snapsPerSlot === null) {
-                snapDuration = slotDuration;
-                snapsPerSlot = 1;
-                // TODO: say warning?
-            }
-            this.slotDuration = slotDuration;
-            this.snapDuration = snapDuration;
-            this.snapsPerSlot = snapsPerSlot;
-            // might be an array value (for TimelineView).
-            // if so, getting the most granular entry (the last one probably).
-            input = options.slotLabelFormat;
-            if (Array.isArray(input)) {
-                input = input[input.length - 1];
-            }
-            this.labelFormat = core.createFormatter(input || {
-                hour: 'numeric',
-                minute: '2-digit',
-                omitZeroMinute: true,
-                meridiem: 'short'
-            });
-            input = options.slotLabelInterval;
-            this.labelInterval = input ?
-                core.createDuration(input) :
-                this.computeLabelInterval(slotDuration);
-        };
-        // Computes an automatic value for slotLabelInterval
-        TimeGrid.prototype.computeLabelInterval = function (slotDuration) {
-            var i;
-            var labelInterval;
-            var slotsPerLabel;
-            // find the smallest stock label interval that results in more than one slots-per-label
-            for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
-                labelInterval = core.createDuration(AGENDA_STOCK_SUB_DURATIONS[i]);
-                slotsPerLabel = core.wholeDivideDurations(labelInterval, slotDuration);
-                if (slotsPerLabel !== null && slotsPerLabel > 1) {
-                    return labelInterval;
-                }
-            }
-            return slotDuration; // fall back
-        };
-        /* Rendering
-        ------------------------------------------------------------------------------------------------------------------*/
-        TimeGrid.prototype.render = function (props, context) {
-            this.processOptions(context.options);
-            var cells = props.cells;
-            this.colCnt = cells.length;
-            this.renderSkeleton(context.theme);
-            this.renderSlats(props.dateProfile);
-            this.renderColumns(props.cells, props.dateProfile);
-            this.renderBusinessHours(context, props.businessHourSegs);
-            this.renderDateSelection(props.dateSelectionSegs);
-            this.renderFgEvents(context, props.fgEventSegs);
-            this.renderBgEvents(context, props.bgEventSegs);
-            this.renderEventSelection(props.eventSelection);
-            this.renderEventDrag(props.eventDrag);
-            this.renderEventResize(props.eventResize);
-        };
-        TimeGrid.prototype.destroy = function () {
-            _super.prototype.destroy.call(this);
-            // should unrender everything else too
-            this.renderSlats.unrender();
-            this.renderColumns.unrender();
-            this.renderSkeleton.unrender();
-        };
-        TimeGrid.prototype.updateSize = function (isResize) {
-            var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
-            if (isResize || this.isSlatSizesDirty) {
-                this.buildSlatPositions();
-                this.isSlatSizesDirty = false;
-            }
-            if (isResize || this.isColSizesDirty) {
-                this.buildColPositions();
-                this.isColSizesDirty = false;
-            }
-            fillRenderer.computeSizes(isResize);
-            eventRenderer.computeSizes(isResize);
-            mirrorRenderer.computeSizes(isResize);
-            fillRenderer.assignSizes(isResize);
-            eventRenderer.assignSizes(isResize);
-            mirrorRenderer.assignSizes(isResize);
-        };
-        TimeGrid.prototype._renderSkeleton = function (theme) {
-            var el = this.el;
-            el.innerHTML =
-                '<div class="fc-bg"></div>' +
-                    '<div class="fc-slats"></div>' +
-                    '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" style="display:none" />';
-            this.rootBgContainerEl = el.querySelector('.fc-bg');
-            this.slatContainerEl = el.querySelector('.fc-slats');
-            this.bottomRuleEl = el.querySelector('.fc-divider');
-        };
-        TimeGrid.prototype._renderSlats = function (dateProfile) {
-            var theme = this.context.theme;
-            this.slatContainerEl.innerHTML =
-                '<table class="' + theme.getClass('tableGrid') + '">' +
-                    this.renderSlatRowHtml(dateProfile) +
-                    '</table>';
-            this.slatEls = core.findElements(this.slatContainerEl, 'tr');
-            this.slatPositions = new core.PositionCache(this.el, this.slatEls, false, true // vertical
-            );
-            this.isSlatSizesDirty = true;
-        };
-        // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
-        TimeGrid.prototype.renderSlatRowHtml = function (dateProfile) {
-            var _a = this.context, dateEnv = _a.dateEnv, theme = _a.theme, isRtl = _a.isRtl;
-            var html = '';
-            var dayStart = core.startOfDay(dateProfile.renderRange.start);
-            var slotTime = dateProfile.minTime;
-            var slotIterator = core.createDuration(0);
-            var slotDate; // will be on the view's first day, but we only care about its time
-            var isLabeled;
-            var axisHtml;
-            // Calculate the time for each slot
-            while (core.asRoughMs(slotTime) < core.asRoughMs(dateProfile.maxTime)) {
-                slotDate = dateEnv.add(dayStart, slotTime);
-                isLabeled = core.wholeDivideDurations(slotIterator, this.labelInterval) !== null;
-                axisHtml =
-                    '<td class="fc-axis fc-time ' + theme.getClass('widgetContent') + '">' +
-                        (isLabeled ?
-                            '<span>' + // for matchCellWidths
-                                core.htmlEscape(dateEnv.format(slotDate, this.labelFormat)) +
-                                '</span>' :
-                            '') +
-                        '</td>';
-                html +=
-                    '<tr data-time="' + core.formatIsoTimeString(slotDate) + '"' +
-                        (isLabeled ? '' : ' class="fc-minor"') +
-                        '>' +
-                        (!isRtl ? axisHtml : '') +
-                        '<td class="' + theme.getClass('widgetContent') + '"></td>' +
-                        (isRtl ? axisHtml : '') +
-                        '</tr>';
-                slotTime = core.addDurations(slotTime, this.slotDuration);
-                slotIterator = core.addDurations(slotIterator, this.slotDuration);
-            }
-            return html;
-        };
-        TimeGrid.prototype._renderColumns = function (cells, dateProfile) {
-            var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, theme = _a.theme, dateEnv = _a.dateEnv;
-            var bgRow = new daygrid.DayBgRow(this.context);
-            this.rootBgContainerEl.innerHTML =
-                '<table class="' + theme.getClass('tableGrid') + '">' +
-                    bgRow.renderHtml({
-                        cells: cells,
-                        dateProfile: dateProfile,
-                        renderIntroHtml: this.renderProps.renderBgIntroHtml
-                    }) +
-                    '</table>';
-            this.colEls = core.findElements(this.el, '.fc-day, .fc-disabled-day');
-            for (var col = 0; col < this.colCnt; col++) {
-                calendar.publiclyTrigger('dayRender', [
-                    {
-                        date: dateEnv.toDate(cells[col].date),
-                        el: this.colEls[col],
-                        view: view
-                    }
-                ]);
-            }
-            if (isRtl) {
-                this.colEls.reverse();
-            }
-            this.colPositions = new core.PositionCache(this.el, this.colEls, true, // horizontal
-            false);
-            this.renderContentSkeleton();
-            this.isColSizesDirty = true;
-        };
-        TimeGrid.prototype._unrenderColumns = function () {
-            this.unrenderContentSkeleton();
-        };
-        /* Content Skeleton
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Renders the DOM that the view's content will live in
-        TimeGrid.prototype.renderContentSkeleton = function () {
-            var isRtl = this.context.isRtl;
-            var parts = [];
-            var skeletonEl;
-            parts.push(this.renderProps.renderIntroHtml());
-            for (var i = 0; i < this.colCnt; i++) {
-                parts.push('<td>' +
-                    '<div class="fc-content-col">' +
-                    '<div class="fc-event-container fc-mirror-container"></div>' +
-                    '<div class="fc-event-container"></div>' +
-                    '<div class="fc-highlight-container"></div>' +
-                    '<div class="fc-bgevent-container"></div>' +
-                    '<div class="fc-business-container"></div>' +
-                    '</div>' +
-                    '</td>');
-            }
-            if (isRtl) {
-                parts.reverse();
-            }
-            skeletonEl = this.contentSkeletonEl = core.htmlToElement('<div class="fc-content-skeleton">' +
-                '<table>' +
-                '<tr>' + parts.join('') + '</tr>' +
-                '</table>' +
-                '</div>');
-            this.colContainerEls = core.findElements(skeletonEl, '.fc-content-col');
-            this.mirrorContainerEls = core.findElements(skeletonEl, '.fc-mirror-container');
-            this.fgContainerEls = core.findElements(skeletonEl, '.fc-event-container:not(.fc-mirror-container)');
-            this.bgContainerEls = core.findElements(skeletonEl, '.fc-bgevent-container');
-            this.highlightContainerEls = core.findElements(skeletonEl, '.fc-highlight-container');
-            this.businessContainerEls = core.findElements(skeletonEl, '.fc-business-container');
-            if (isRtl) {
-                this.colContainerEls.reverse();
-                this.mirrorContainerEls.reverse();
-                this.fgContainerEls.reverse();
-                this.bgContainerEls.reverse();
-                this.highlightContainerEls.reverse();
-                this.businessContainerEls.reverse();
-            }
-            this.el.appendChild(skeletonEl);
-        };
-        TimeGrid.prototype.unrenderContentSkeleton = function () {
-            core.removeElement(this.contentSkeletonEl);
-        };
-        // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col
-        TimeGrid.prototype.groupSegsByCol = function (segs) {
-            var segsByCol = [];
-            var i;
-            for (i = 0; i < this.colCnt; i++) {
-                segsByCol.push([]);
-            }
-            for (i = 0; i < segs.length; i++) {
-                segsByCol[segs[i].col].push(segs[i]);
-            }
-            return segsByCol;
-        };
-        // Given segments grouped by column, insert the segments' elements into a parallel array of container
-        // elements, each living within a column.
-        TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {
-            var col;
-            var segs;
-            var i;
-            for (col = 0; col < this.colCnt; col++) { // iterate each column grouping
-                segs = segsByCol[col];
-                for (i = 0; i < segs.length; i++) {
-                    containerEls[col].appendChild(segs[i].el);
-                }
-            }
-        };
-        /* Now Indicator
-        ------------------------------------------------------------------------------------------------------------------*/
-        TimeGrid.prototype.getNowIndicatorUnit = function () {
-            return 'minute'; // will refresh on the minute
-        };
-        TimeGrid.prototype.renderNowIndicator = function (segs, date) {
-            // HACK: if date columns not ready for some reason (scheduler)
-            if (!this.colContainerEls) {
-                return;
-            }
-            var top = this.computeDateTop(date);
-            var nodes = [];
-            var i;
-            // render lines within the columns
-            for (i = 0; i < segs.length; i++) {
-                var lineEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' });
-                lineEl.style.top = top + 'px';
-                this.colContainerEls[segs[i].col].appendChild(lineEl);
-                nodes.push(lineEl);
-            }
-            // render an arrow over the axis
-            if (segs.length > 0) { // is the current time in view?
-                var arrowEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' });
-                arrowEl.style.top = top + 'px';
-                this.contentSkeletonEl.appendChild(arrowEl);
-                nodes.push(arrowEl);
-            }
-            this.nowIndicatorEls = nodes;
-        };
-        TimeGrid.prototype.unrenderNowIndicator = function () {
-            if (this.nowIndicatorEls) {
-                this.nowIndicatorEls.forEach(core.removeElement);
-                this.nowIndicatorEls = null;
-            }
-        };
-        /* Coordinates
-        ------------------------------------------------------------------------------------------------------------------*/
-        TimeGrid.prototype.getTotalSlatHeight = function () {
-            return this.slatContainerEl.getBoundingClientRect().height;
-        };
-        // Computes the top coordinate, relative to the bounds of the grid, of the given date.
-        // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
-        TimeGrid.prototype.computeDateTop = function (when, startOfDayDate) {
-            if (!startOfDayDate) {
-                startOfDayDate = core.startOfDay(when);
-            }
-            return this.computeTimeTop(core.createDuration(when.valueOf() - startOfDayDate.valueOf()));
-        };
-        // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
-        TimeGrid.prototype.computeTimeTop = function (duration) {
-            var len = this.slatEls.length;
-            var dateProfile = this.props.dateProfile;
-            var slatCoverage = (duration.milliseconds - core.asRoughMs(dateProfile.minTime)) / core.asRoughMs(this.slotDuration); // floating-point value of # of slots covered
-            var slatIndex;
-            var slatRemainder;
-            // compute a floating-point number for how many slats should be progressed through.
-            // from 0 to number of slats (inclusive)
-            // constrained because minTime/maxTime might be customized.
-            slatCoverage = Math.max(0, slatCoverage);
-            slatCoverage = Math.min(len, slatCoverage);
-            // an integer index of the furthest whole slat
-            // from 0 to number slats (*exclusive*, so len-1)
-            slatIndex = Math.floor(slatCoverage);
-            slatIndex = Math.min(slatIndex, len - 1);
-            // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
-            // could be 1.0 if slatCoverage is covering *all* the slots
-            slatRemainder = slatCoverage - slatIndex;
-            return this.slatPositions.tops[slatIndex] +
-                this.slatPositions.getHeight(slatIndex) * slatRemainder;
-        };
-        // For each segment in an array, computes and assigns its top and bottom properties
-        TimeGrid.prototype.computeSegVerticals = function (segs) {
-            var options = this.context.options;
-            var eventMinHeight = options.timeGridEventMinHeight;
-            var i;
-            var seg;
-            var dayDate;
-            for (i = 0; i < segs.length; i++) {
-                seg = segs[i];
-                dayDate = this.props.cells[seg.col].date;
-                seg.top = this.computeDateTop(seg.start, dayDate);
-                seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.end, dayDate));
-            }
-        };
-        // Given segments that already have their top/bottom properties computed, applies those values to
-        // the segments' elements.
-        TimeGrid.prototype.assignSegVerticals = function (segs) {
-            var i;
-            var seg;
-            for (i = 0; i < segs.length; i++) {
-                seg = segs[i];
-                core.applyStyle(seg.el, this.generateSegVerticalCss(seg));
-            }
-        };
-        // Generates an object with CSS properties for the top/bottom coordinates of a segment element
-        TimeGrid.prototype.generateSegVerticalCss = function (seg) {
-            return {
-                top: seg.top,
-                bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container
-            };
-        };
-        /* Sizing
-        ------------------------------------------------------------------------------------------------------------------*/
-        TimeGrid.prototype.buildPositionCaches = function () {
-            this.buildColPositions();
-            this.buildSlatPositions();
-        };
-        TimeGrid.prototype.buildColPositions = function () {
-            this.colPositions.build();
-        };
-        TimeGrid.prototype.buildSlatPositions = function () {
-            this.slatPositions.build();
-        };
-        /* Hit System
-        ------------------------------------------------------------------------------------------------------------------*/
-        TimeGrid.prototype.positionToHit = function (positionLeft, positionTop) {
-            var dateEnv = this.context.dateEnv;
-            var _a = this, snapsPerSlot = _a.snapsPerSlot, slatPositions = _a.slatPositions, colPositions = _a.colPositions;
-            var colIndex = colPositions.leftToIndex(positionLeft);
-            var slatIndex = slatPositions.topToIndex(positionTop);
-            if (colIndex != null && slatIndex != null) {
-                var slatTop = slatPositions.tops[slatIndex];
-                var slatHeight = slatPositions.getHeight(slatIndex);
-                var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
-                var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
-                var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
-                var dayDate = this.props.cells[colIndex].date;
-                var time = core.addDurations(this.props.dateProfile.minTime, core.multiplyDuration(this.snapDuration, snapIndex));
-                var start = dateEnv.add(dayDate, time);
-                var end = dateEnv.add(start, this.snapDuration);
-                return {
-                    col: colIndex,
-                    dateSpan: {
-                        range: { start: start, end: end },
-                        allDay: false
-                    },
-                    dayEl: this.colEls[colIndex],
-                    relativeRect: {
-                        left: colPositions.lefts[colIndex],
-                        right: colPositions.rights[colIndex],
-                        top: slatTop,
-                        bottom: slatTop + slatHeight
-                    }
-                };
-            }
-        };
-        /* Event Drag Visualization
-        ------------------------------------------------------------------------------------------------------------------*/
-        TimeGrid.prototype._renderEventDrag = function (state) {
-            if (state) {
-                this.eventRenderer.hideByHash(state.affectedInstances);
-                if (state.isEvent) {
-                    this.mirrorRenderer.renderSegs(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
-                }
-                else {
-                    this.fillRenderer.renderSegs('highlight', this.context, state.segs);
-                }
-            }
-        };
-        TimeGrid.prototype._unrenderEventDrag = function (state) {
-            if (state) {
-                this.eventRenderer.showByHash(state.affectedInstances);
-                if (state.isEvent) {
-                    this.mirrorRenderer.unrender(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
-                }
-                else {
-                    this.fillRenderer.unrender('highlight', this.context);
-                }
-            }
-        };
-        /* Event Resize Visualization
-        ------------------------------------------------------------------------------------------------------------------*/
-        TimeGrid.prototype._renderEventResize = function (state) {
-            if (state) {
-                this.eventRenderer.hideByHash(state.affectedInstances);
-                this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-            }
-        };
-        TimeGrid.prototype._unrenderEventResize = function (state) {
-            if (state) {
-                this.eventRenderer.showByHash(state.affectedInstances);
-                this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
-            }
-        };
-        /* Selection
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
-        TimeGrid.prototype._renderDateSelection = function (segs) {
-            if (segs) {
-                if (this.context.options.selectMirror) {
-                    this.mirrorRenderer.renderSegs(this.context, segs, { isSelecting: true });
-                }
-                else {
-                    this.fillRenderer.renderSegs('highlight', this.context, segs);
-                }
-            }
-        };
-        TimeGrid.prototype._unrenderDateSelection = function (segs) {
-            if (segs) {
-                if (this.context.options.selectMirror) {
-                    this.mirrorRenderer.unrender(this.context, segs, { isSelecting: true });
-                }
-                else {
-                    this.fillRenderer.unrender('highlight', this.context);
-                }
-            }
-        };
-        return TimeGrid;
-    }(core.DateComponent));
-
-    var AllDaySplitter = /** @class */ (function (_super) {
-        __extends(AllDaySplitter, _super);
-        function AllDaySplitter() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        AllDaySplitter.prototype.getKeyInfo = function () {
-            return {
-                allDay: {},
-                timed: {}
-            };
-        };
-        AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {
-            if (dateSpan.allDay) {
-                return ['allDay'];
-            }
-            else {
-                return ['timed'];
-            }
-        };
-        AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {
-            if (!eventDef.allDay) {
-                return ['timed'];
-            }
-            else if (core.hasBgRendering(eventDef)) {
-                return ['timed', 'allDay'];
-            }
-            else {
-                return ['allDay'];
-            }
-        };
-        return AllDaySplitter;
-    }(core.Splitter));
-
-    var TIMEGRID_ALL_DAY_EVENT_LIMIT = 5;
-    var WEEK_HEADER_FORMAT = core.createFormatter({ week: 'short' });
-    /* An abstract class for all timegrid-related views. Displays one more columns with time slots running vertically.
-    ----------------------------------------------------------------------------------------------------------------------*/
-    // Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
-    // Responsible for managing width/height.
-    var AbstractTimeGridView = /** @class */ (function (_super) {
-        __extends(AbstractTimeGridView, _super);
-        function AbstractTimeGridView() {
-            var _this = _super !== null && _super.apply(this, arguments) || this;
-            _this.splitter = new AllDaySplitter();
-            _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
-            /* Header Render Methods
-            ------------------------------------------------------------------------------------------------------------------*/
-            // Generates the HTML that will go before the day-of week header cells
-            _this.renderHeadIntroHtml = function () {
-                var _a = _this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
-                var range = _this.props.dateProfile.renderRange;
-                var dayCnt = core.diffDays(range.start, range.end);
-                var weekText;
-                if (options.weekNumbers) {
-                    weekText = dateEnv.format(range.start, WEEK_HEADER_FORMAT);
-                    return '' +
-                        '<th class="fc-axis fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '>' +
-                        core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
-                        options, dateEnv, { date: range.start, type: 'week', forceOff: dayCnt > 1 }, core.htmlEscape(weekText) // inner HTML
-                        ) +
-                        '</th>';
-                }
-                else {
-                    return '<th class="fc-axis ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '></th>';
-                }
-            };
-            /* Time Grid Render Methods
-            ------------------------------------------------------------------------------------------------------------------*/
-            // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.
-            _this.renderTimeGridBgIntroHtml = function () {
-                var theme = _this.context.theme;
-                return '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '></td>';
-            };
-            // Generates the HTML that goes before all other types of cells.
-            // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
-            _this.renderTimeGridIntroHtml = function () {
-                return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
-            };
-            /* Day Grid Render Methods
-            ------------------------------------------------------------------------------------------------------------------*/
-            // Generates the HTML that goes before the all-day cells
-            _this.renderDayGridBgIntroHtml = function () {
-                var _a = _this.context, theme = _a.theme, options = _a.options;
-                return '' +
-                    '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '>' +
-                    '<span>' + // needed for matchCellWidths
-                    core.getAllDayHtml(options) +
-                    '</span>' +
-                    '</td>';
-            };
-            // Generates the HTML that goes before all other types of cells.
-            // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
-            _this.renderDayGridIntroHtml = function () {
-                return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
-            };
-            return _this;
-        }
-        AbstractTimeGridView.prototype.render = function (props, context) {
-            _super.prototype.render.call(this, props, context);
-            this.renderSkeleton(context);
-        };
-        AbstractTimeGridView.prototype.destroy = function () {
-            _super.prototype.destroy.call(this);
-            this.renderSkeleton.unrender();
-        };
-        AbstractTimeGridView.prototype._renderSkeleton = function (context) {
-            this.el.classList.add('fc-timeGrid-view');
-            this.el.innerHTML = this.renderSkeletonHtml();
-            this.scroller = new core.ScrollComponent('hidden', // overflow x
-            'auto' // overflow y
-            );
-            var timeGridWrapEl = this.scroller.el;
-            this.el.querySelector('.fc-body > tr > td').appendChild(timeGridWrapEl);
-            timeGridWrapEl.classList.add('fc-time-grid-container');
-            var timeGridEl = core.createElement('div', { className: 'fc-time-grid' });
-            timeGridWrapEl.appendChild(timeGridEl);
-            this.timeGrid = new TimeGrid(timeGridEl, {
-                renderBgIntroHtml: this.renderTimeGridBgIntroHtml,
-                renderIntroHtml: this.renderTimeGridIntroHtml
-            });
-            if (context.options.allDaySlot) { // should we display the "all-day" area?
-                this.dayGrid = new daygrid.DayGrid(// the all-day subcomponent of this view
-                this.el.querySelector('.fc-day-grid'), {
-                    renderNumberIntroHtml: this.renderDayGridIntroHtml,
-                    renderBgIntroHtml: this.renderDayGridBgIntroHtml,
-                    renderIntroHtml: this.renderDayGridIntroHtml,
-                    colWeekNumbersVisible: false,
-                    cellWeekNumbersVisible: false
-                });
-                // have the day-grid extend it's coordinate area over the <hr> dividing the two grids
-                var dividerEl = this.el.querySelector('.fc-divider');
-                this.dayGrid.bottomCoordPadding = dividerEl.getBoundingClientRect().height;
-            }
-        };
-        AbstractTimeGridView.prototype._unrenderSkeleton = function () {
-            this.el.classList.remove('fc-timeGrid-view');
-            this.timeGrid.destroy();
-            if (this.dayGrid) {
-                this.dayGrid.destroy();
-            }
-            this.scroller.destroy();
-        };
-        /* Rendering
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Builds the HTML skeleton for the view.
-        // The day-grid and time-grid components will render inside containers defined by this HTML.
-        AbstractTimeGridView.prototype.renderSkeletonHtml = function () {
-            var _a = this.context, theme = _a.theme, options = _a.options;
-            return '' +
-                '<table class="' + theme.getClass('tableGrid') + '">' +
-                (options.columnHeader ?
-                    '<thead class="fc-head">' +
-                        '<tr>' +
-                        '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
-                        '</tr>' +
-                        '</thead>' :
-                    '') +
-                '<tbody class="fc-body">' +
-                '<tr>' +
-                '<td class="' + theme.getClass('widgetContent') + '">' +
-                (options.allDaySlot ?
-                    '<div class="fc-day-grid"></div>' +
-                        '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" />' :
-                    '') +
-                '</td>' +
-                '</tr>' +
-                '</tbody>' +
-                '</table>';
-        };
-        /* Now Indicator
-        ------------------------------------------------------------------------------------------------------------------*/
-        AbstractTimeGridView.prototype.getNowIndicatorUnit = function () {
-            return this.timeGrid.getNowIndicatorUnit();
-        };
-        // subclasses should implement
-        // renderNowIndicator(date: DateMarker) {
-        // }
-        AbstractTimeGridView.prototype.unrenderNowIndicator = function () {
-            this.timeGrid.unrenderNowIndicator();
-        };
-        /* Dimensions
-        ------------------------------------------------------------------------------------------------------------------*/
-        AbstractTimeGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
-            _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
-            this.timeGrid.updateSize(isResize);
-            if (this.dayGrid) {
-                this.dayGrid.updateSize(isResize);
-            }
-        };
-        // Adjusts the vertical dimensions of the view to the specified values
-        AbstractTimeGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
-            var _this = this;
-            var eventLimit;
-            var scrollerHeight;
-            var scrollbarWidths;
-            // make all axis cells line up
-            this.axisWidth = core.matchCellWidths(core.findElements(this.el, '.fc-axis'));
-            // hack to give the view some height prior to timeGrid's columns being rendered
-            // TODO: separate setting height from scroller VS timeGrid.
-            if (!this.timeGrid.colEls) {
-                if (!isAuto) {
-                    scrollerHeight = this.computeScrollerHeight(viewHeight);
-                    this.scroller.setHeight(scrollerHeight);
-                }
-                return;
-            }
-            // set of fake row elements that must compensate when scroller has scrollbars
-            var noScrollRowEls = core.findElements(this.el, '.fc-row').filter(function (node) {
-                return !_this.scroller.el.contains(node);
-            });
-            // reset all dimensions back to the original state
-            this.timeGrid.bottomRuleEl.style.display = 'none'; // will be shown later if this <hr> is necessary
-            this.scroller.clear(); // sets height to 'auto' and clears overflow
-            noScrollRowEls.forEach(core.uncompensateScroll);
-            // limit number of events in the all-day area
-            if (this.dayGrid) {
-                this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
-                eventLimit = this.context.options.eventLimit;
-                if (eventLimit && typeof eventLimit !== 'number') {
-                    eventLimit = TIMEGRID_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number
-                }
-                if (eventLimit) {
-                    this.dayGrid.limitRows(eventLimit);
-                }
-            }
-            if (!isAuto) { // should we force dimensions of the scroll container?
-                scrollerHeight = this.computeScrollerHeight(viewHeight);
-                this.scroller.setHeight(scrollerHeight);
-                scrollbarWidths = this.scroller.getScrollbarWidths();
-                if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
-                    // make the all-day and header rows lines up
-                    noScrollRowEls.forEach(function (rowEl) {
-                        core.compensateScroll(rowEl, scrollbarWidths);
-                    });
-                    // the scrollbar compensation might have changed text flow, which might affect height, so recalculate
-                    // and reapply the desired height to the scroller.
-                    scrollerHeight = this.computeScrollerHeight(viewHeight);
-                    this.scroller.setHeight(scrollerHeight);
-                }
-                // guarantees the same scrollbar widths
-                this.scroller.lockOverflow(scrollbarWidths);
-                // if there's any space below the slats, show the horizontal rule.
-                // this won't cause any new overflow, because lockOverflow already called.
-                if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
-                    this.timeGrid.bottomRuleEl.style.display = '';
-                }
-            }
-        };
-        // given a desired total height of the view, returns what the height of the scroller should be
-        AbstractTimeGridView.prototype.computeScrollerHeight = function (viewHeight) {
-            return viewHeight -
-                core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
-        };
-        /* Scroll
-        ------------------------------------------------------------------------------------------------------------------*/
-        // Computes the initial pre-configured scroll state prior to allowing the user to change it
-        AbstractTimeGridView.prototype.computeDateScroll = function (duration) {
-            var top = this.timeGrid.computeTimeTop(duration);
-            // zoom can give weird floating-point values. rather scroll a little bit further
-            top = Math.ceil(top);
-            if (top) {
-                top++; // to overcome top border that slots beyond the first have. looks better
-            }
-            return { top: top };
-        };
-        AbstractTimeGridView.prototype.queryDateScroll = function () {
-            return { top: this.scroller.getScrollTop() };
-        };
-        AbstractTimeGridView.prototype.applyDateScroll = function (scroll) {
-            if (scroll.top !== undefined) {
-                this.scroller.setScrollTop(scroll.top);
-            }
-        };
-        // Generates an HTML attribute string for setting the width of the axis, if it is known
-        AbstractTimeGridView.prototype.axisStyleAttr = function () {
-            if (this.axisWidth != null) {
-                return 'style="width:' + this.axisWidth + 'px"';
-            }
-            return '';
-        };
-        return AbstractTimeGridView;
-    }(core.View));
-    AbstractTimeGridView.prototype.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering
-
-    var SimpleTimeGrid = /** @class */ (function (_super) {
-        __extends(SimpleTimeGrid, _super);
-        function SimpleTimeGrid(timeGrid) {
-            var _this = _super.call(this, timeGrid.el) || this;
-            _this.buildDayRanges = core.memoize(buildDayRanges);
-            _this.slicer = new TimeGridSlicer();
-            _this.timeGrid = timeGrid;
-            return _this;
-        }
-        SimpleTimeGrid.prototype.firstContext = function (context) {
-            context.calendar.registerInteractiveComponent(this, {
-                el: this.timeGrid.el
-            });
-        };
-        SimpleTimeGrid.prototype.destroy = function () {
-            _super.prototype.destroy.call(this);
-            this.context.calendar.unregisterInteractiveComponent(this);
-        };
-        SimpleTimeGrid.prototype.render = function (props, context) {
-            var dateEnv = this.context.dateEnv;
-            var dateProfile = props.dateProfile, dayTable = props.dayTable;
-            var dayRanges = this.dayRanges = this.buildDayRanges(dayTable, dateProfile, dateEnv);
-            var timeGrid = this.timeGrid;
-            timeGrid.receiveContext(context); // hack because context is used in sliceProps
-            timeGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, null, context.calendar, timeGrid, dayRanges), { dateProfile: dateProfile, cells: dayTable.cells[0] }), context);
-        };
-        SimpleTimeGrid.prototype.renderNowIndicator = function (date) {
-            this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(date, this.timeGrid, this.dayRanges), date);
-        };
-        SimpleTimeGrid.prototype.buildPositionCaches = function () {
-            this.timeGrid.buildPositionCaches();
-        };
-        SimpleTimeGrid.prototype.queryHit = function (positionLeft, positionTop) {
-            var rawHit = this.timeGrid.positionToHit(positionLeft, positionTop);
-            if (rawHit) {
-                return {
-                    component: this.timeGrid,
-                    dateSpan: rawHit.dateSpan,
-                    dayEl: rawHit.dayEl,
-                    rect: {
-                        left: rawHit.relativeRect.left,
-                        right: rawHit.relativeRect.right,
-                        top: rawHit.relativeRect.top,
-                        bottom: rawHit.relativeRect.bottom
-                    },
-                    layer: 0
-                };
-            }
-        };
-        return SimpleTimeGrid;
-    }(core.DateComponent));
-    function buildDayRanges(dayTable, dateProfile, dateEnv) {
-        var ranges = [];
-        for (var _i = 0, _a = dayTable.headerDates; _i < _a.length; _i++) {
-            var date = _a[_i];
-            ranges.push({
-                start: dateEnv.add(date, dateProfile.minTime),
-                end: dateEnv.add(date, dateProfile.maxTime)
-            });
-        }
-        return ranges;
-    }
-    var TimeGridSlicer = /** @class */ (function (_super) {
-        __extends(TimeGridSlicer, _super);
-        function TimeGridSlicer() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        TimeGridSlicer.prototype.sliceRange = function (range, dayRanges) {
-            var segs = [];
-            for (var col = 0; col < dayRanges.length; col++) {
-                var segRange = core.intersectRanges(range, dayRanges[col]);
-                if (segRange) {
-                    segs.push({
-                        start: segRange.start,
-                        end: segRange.end,
-                        isStart: segRange.start.valueOf() === range.start.valueOf(),
-                        isEnd: segRange.end.valueOf() === range.end.valueOf(),
-                        col: col
-                    });
-                }
-            }
-            return segs;
-        };
-        return TimeGridSlicer;
-    }(core.Slicer));
-
-    var TimeGridView = /** @class */ (function (_super) {
-        __extends(TimeGridView, _super);
-        function TimeGridView() {
-            var _this = _super !== null && _super.apply(this, arguments) || this;
-            _this.buildDayTable = core.memoize(buildDayTable);
-            return _this;
-        }
-        TimeGridView.prototype.render = function (props, context) {
-            _super.prototype.render.call(this, props, context); // for flags for updateSize. also _renderSkeleton/_unrenderSkeleton
-            var _a = this.props, dateProfile = _a.dateProfile, dateProfileGenerator = _a.dateProfileGenerator;
-            var nextDayThreshold = context.nextDayThreshold;
-            var dayTable = this.buildDayTable(dateProfile, dateProfileGenerator);
-            var splitProps = this.splitter.splitProps(props);
-            if (this.header) {
-                this.header.receiveProps({
-                    dateProfile: dateProfile,
-                    dates: dayTable.headerDates,
-                    datesRepDistinctDays: true,
-                    renderIntroHtml: this.renderHeadIntroHtml
-                }, context);
-            }
-            this.simpleTimeGrid.receiveProps(__assign({}, splitProps['timed'], { dateProfile: dateProfile,
-                dayTable: dayTable }), context);
-            if (this.simpleDayGrid) {
-                this.simpleDayGrid.receiveProps(__assign({}, splitProps['allDay'], { dateProfile: dateProfile,
-                    dayTable: dayTable,
-                    nextDayThreshold: nextDayThreshold, isRigid: false }), context);
-            }
-            this.startNowIndicator(dateProfile, dateProfileGenerator);
-        };
-        TimeGridView.prototype._renderSkeleton = function (context) {
-            _super.prototype._renderSkeleton.call(this, context);
-            if (context.options.columnHeader) {
-                this.header = new core.DayHeader(this.el.querySelector('.fc-head-container'));
-            }
-            this.simpleTimeGrid = new SimpleTimeGrid(this.timeGrid);
-            if (this.dayGrid) {
-                this.simpleDayGrid = new daygrid.SimpleDayGrid(this.dayGrid);
-            }
-        };
-        TimeGridView.prototype._unrenderSkeleton = function () {
-            _super.prototype._unrenderSkeleton.call(this);
-            if (this.header) {
-                this.header.destroy();
-            }
-            this.simpleTimeGrid.destroy();
-            if (this.simpleDayGrid) {
-                this.simpleDayGrid.destroy();
-            }
-        };
-        TimeGridView.prototype.renderNowIndicator = function (date) {
-            this.simpleTimeGrid.renderNowIndicator(date);
-        };
-        return TimeGridView;
-    }(AbstractTimeGridView));
-    function buildDayTable(dateProfile, dateProfileGenerator) {
-        var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator);
-        return new core.DayTable(daySeries, false);
-    }
-
-    var main = core.createPlugin({
-        defaultView: 'timeGridWeek',
-        views: {
-            timeGrid: {
-                class: TimeGridView,
-                allDaySlot: true,
-                slotDuration: '00:30:00',
-                slotEventOverlap: true // a bad name. confused with overlap/constraint system
-            },
-            timeGridDay: {
-                type: 'timeGrid',
-                duration: { days: 1 }
-            },
-            timeGridWeek: {
-                type: 'timeGrid',
-                duration: { weeks: 1 }
-            }
-        }
-    });
-
-    exports.AbstractTimeGridView = AbstractTimeGridView;
-    exports.TimeGrid = TimeGrid;
-    exports.TimeGridSlicer = TimeGridSlicer;
-    exports.TimeGridView = TimeGridView;
-    exports.buildDayRanges = buildDayRanges;
-    exports.buildDayTable = buildDayTable;
-    exports.default = main;
-
-    Object.defineProperty(exports, '__esModule', { value: true });
-
-}));

Plik diff jest za duży
+ 0 - 0
plugins/fullcalendar-timegrid/main.min.css


Plik diff jest za duży
+ 0 - 5
plugins/fullcalendar-timegrid/main.min.js


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików