summaryrefslogtreecommitdiff
path: root/public/assets/js/DataTables/Buttons-2.3.6
diff options
context:
space:
mode:
authorGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-18 01:11:37 +0300
committerGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-18 01:11:37 +0300
commit2b6970d33afd75be5bfef951dc3691d492004d43 (patch)
tree39eba4206ca0c4cd3fecd5ead95580a74e50f3f9 /public/assets/js/DataTables/Buttons-2.3.6
parent68fc9e55e538e03f94509731ab41a0c8cf96710f (diff)
downloadclassroom-2b6970d33afd75be5bfef951dc3691d492004d43.tar.gz
classroom-2b6970d33afd75be5bfef951dc3691d492004d43.tar.bz2
classroom-2b6970d33afd75be5bfef951dc3691d492004d43.zip
admin back-office environment (skeleton); admin categories
Diffstat (limited to 'public/assets/js/DataTables/Buttons-2.3.6')
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.css386
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.css430
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.css432
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.css429
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.css560
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.css371
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.css387
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.css409
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.min.css1
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/common.scss106
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/css/mixins.scss228
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.js106
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.js106
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.js106
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.js117
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.js250
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.min.js5
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.js92
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.js134
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.js1494
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.min.js8
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.js92
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.js238
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.min.js5
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.js104
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.min.js4
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.js2538
-rw-r--r--public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.min.js4
42 files changed, 9177 insertions, 0 deletions
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.css
new file mode 100644
index 0000000..c1445d4
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.css
@@ -0,0 +1,386 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ z-index: 2001;
+ background-color: white;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 4px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ padding: 0.5rem;
+ min-width: 200px;
+}
+div.dt-button-collection div.dropdown-menu,
+div.dt-button-collection ul.dropdown-menu {
+ position: relative;
+ display: block;
+ z-index: 2002;
+ min-width: 100%;
+ background-color: transparent;
+ border: none;
+ box-shadow: none;
+ margin: 2px 0;
+ padding: 0;
+ border-radius: 0;
+}
+div.dt-button-collection div.dt-btn-split-wrapper {
+ width: 100%;
+ display: inline-flex;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+div.dt-button-collection button.dt-btn-split-drop-button {
+ width: 100%;
+ border: none;
+ border-radius: 0px;
+ margin-left: 0px !important;
+}
+div.dt-button-collection button.dt-btn-split-drop-button:focus {
+ border: none;
+ border-radius: 0px;
+ outline: none;
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+div.dt-button-collection .dt-button {
+ min-width: 200px;
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 2001;
+}
+
+@media screen and (max-width: 767px) {
+ div.dt-buttons {
+ float: none;
+ width: 100%;
+ text-align: center;
+ margin-bottom: 0.5em;
+ }
+ div.dt-buttons a.btn {
+ float: none;
+ }
+}
+div.dt-buttons button.btn.processing,
+div.dt-buttons div.btn.processing,
+div.dt-buttons a.btn.processing {
+ color: rgba(0, 0, 0, 0.2);
+}
+div.dt-buttons button.btn.processing:after,
+div.dt-buttons div.btn.processing:after,
+div.dt-buttons a.btn.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+
+div.dt-btn-split-wrapper button.dt-btn-split-drop {
+ border-top-right-radius: 4px !important;
+ border-bottom-right-radius: 4px !important;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button, div.dt-btn-split-wrapper.active:not(.disabled) button {
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop, div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop {
+ box-shadow: none;
+ background-color: #fff;
+ border-color: rgb(173, 173, 173);
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button:hover, div.dt-btn-split-wrapper.active:not(.disabled) button:hover {
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+
+span.dt-down-arrow {
+ color: rgba(70, 70, 70, 0.9);
+ font-size: 10px;
+ padding-left: 10px;
+}
+
+div.dataTables_wrapper div.dt-buttons.btn-group button.btn:last-of-type:first-of-type {
+ border-radius: 4px !important;
+}
+
+span.dt-down-arrow {
+ display: none;
+}
+
+span.dt-button-spacer {
+ float: left;
+}
+span.dt-button-spacer.bar:empty {
+ height: inherit;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ padding-left: 1rem !important;
+ text-align: left;
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.min.css
new file mode 100644
index 0000000..54e96b6
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}div.dt-button-collection{position:absolute;z-index:2001;background-color:white;border:1px solid rgba(0, 0, 0, 0.15);border-radius:4px;box-shadow:0 6px 12px rgba(0, 0, 0, 0.175);padding:.5rem;min-width:200px}div.dt-button-collection div.dropdown-menu,div.dt-button-collection ul.dropdown-menu{position:relative;display:block;z-index:2002;min-width:100%;background-color:transparent;border:none;box-shadow:none;margin:2px 0;padding:0;border-radius:0}div.dt-button-collection div.dt-btn-split-wrapper{width:100%;display:inline-flex;padding-left:5px;padding-right:5px}div.dt-button-collection button.dt-btn-split-drop-button{width:100%;border:none;border-radius:0px;margin-left:0px !important}div.dt-button-collection button.dt-btn-split-drop-button:focus{border:none;border-radius:0px;outline:none}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-collection .dt-button{min-width:200px}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2001}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0, 0, 0, 0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}div.dt-btn-split-wrapper button.dt-btn-split-drop{border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}div.dt-btn-split-wrapper:active:not(.disabled) button,div.dt-btn-split-wrapper.active:not(.disabled) button{background-color:#e6e6e6;border-color:#adadad}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop{box-shadow:none;background-color:#fff;border-color:rgb(173, 173, 173)}div.dt-btn-split-wrapper:active:not(.disabled) button:hover,div.dt-btn-split-wrapper.active:not(.disabled) button:hover{background-color:#e6e6e6;border-color:#adadad}span.dt-down-arrow{color:rgba(70, 70, 70, 0.9);font-size:10px;padding-left:10px}div.dataTables_wrapper div.dt-buttons.btn-group button.btn:last-of-type:first-of-type{border-radius:4px !important}span.dt-down-arrow{display:none}span.dt-button-spacer{float:left}span.dt-button-spacer.bar:empty{height:inherit}div.dt-button-collection span.dt-button-spacer{padding-left:1rem !important;text-align:left}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.css
new file mode 100644
index 0000000..b5d9244
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.css
@@ -0,0 +1,430 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ z-index: 2001;
+ background-color: white;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 4px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ padding: 0.5rem;
+ width: 218px;
+}
+div.dt-button-collection div.dropdown-menu {
+ position: relative;
+ display: block;
+ z-index: 2002;
+ min-width: 100%;
+ background-color: transparent;
+ border: none;
+ box-shadow: none;
+ padding: 0;
+ border-radius: 0;
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after {
+ display: none;
+}
+div.dt-button-collection .btn-group {
+ flex: 1 1 auto;
+}
+div.dt-button-collection .dt-button {
+ min-width: 200px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper {
+ width: 100%;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+div.dt-button-collection button.dt-btn-split-drop-button {
+ width: 100%;
+ color: #212529;
+ border: none;
+ background-color: white;
+ border-radius: 0px;
+ margin-left: 0px !important;
+}
+div.dt-button-collection button.dt-btn-split-drop-button:focus {
+ border: none;
+ border-radius: 0px;
+ outline: none;
+}
+div.dt-button-collection button.dt-btn-split-drop-button:hover {
+ background-color: #e9ecef;
+}
+div.dt-button-collection button.dt-btn-split-drop-button:active {
+ background-color: #007bff !important;
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 999;
+}
+
+@media screen and (max-width: 767px) {
+ div.dt-buttons {
+ float: none;
+ width: 100%;
+ text-align: center;
+ margin-bottom: 0.5em;
+ }
+ div.dt-buttons a.btn {
+ float: none;
+ }
+}
+div.dt-buttons button.btn.processing,
+div.dt-buttons div.btn.processing,
+div.dt-buttons a.btn.processing {
+ color: rgba(0, 0, 0, 0.2);
+}
+div.dt-buttons button.btn.processing:after,
+div.dt-buttons div.btn.processing:after,
+div.dt-buttons a.btn.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+div.dt-buttons div.btn-group {
+ position: initial;
+}
+
+div.dt-btn-split-wrapper:active:not(.disabled) button, div.dt-btn-split-wrapper.active:not(.disabled) button {
+ background-color: #5a6268;
+ border-color: #545b62;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop, div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop {
+ box-shadow: none;
+ background-color: #6c757d;
+ border-color: #6c757d;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button:hover, div.dt-btn-split-wrapper.active:not(.disabled) button:hover {
+ background-color: #5a6268;
+ border-color: #545b62;
+}
+
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group {
+ border-radius: 4px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child {
+ border-top-left-radius: 0px !important;
+ border-bottom-left-radius: 0px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:first-child {
+ border-top-right-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child:first-child {
+ border-top-left-radius: 4px !important;
+ border-bottom-left-radius: 4px !important;
+ border-top-right-radius: 4px !important;
+ border-bottom-right-radius: 4px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group button.dt-btn-split-drop:last-child {
+ border: 1px solid rgb(108, 117, 125);
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group div.dt-btn-split-wrapper {
+ border: none;
+}
+
+div.dt-button-collection div.btn-group {
+ border-radius: 4px !important;
+}
+div.dt-button-collection div.btn-group button {
+ border-radius: 4px;
+}
+div.dt-button-collection div.btn-group button:last-child {
+ border-top-left-radius: 0px !important;
+ border-bottom-left-radius: 0px !important;
+}
+div.dt-button-collection div.btn-group button:first-child {
+ border-top-right-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+}
+div.dt-button-collection div.btn-group button:last-child:first-child {
+ border-top-left-radius: 4px !important;
+ border-bottom-left-radius: 4px !important;
+ border-top-right-radius: 4px !important;
+ border-bottom-right-radius: 4px !important;
+}
+div.dt-button-collection div.btn-group button.dt-btn-split-drop:last-child {
+ border: 1px solid rgb(108, 117, 125);
+}
+div.dt-button-collection div.btn-group div.dt-btn-split-wrapper {
+ border: none;
+}
+
+span.dt-button-spacer.bar:empty {
+ height: inherit;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ padding-left: 1rem !important;
+ text-align: left;
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.min.css
new file mode 100644
index 0000000..1d97a24
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap4.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}div.dt-button-collection{position:absolute;z-index:2001;background-color:white;border:1px solid rgba(0, 0, 0, 0.15);border-radius:4px;box-shadow:0 6px 12px rgba(0, 0, 0, 0.175);padding:.5rem;width:218px}div.dt-button-collection div.dropdown-menu{position:relative;display:block;z-index:2002;min-width:100%;background-color:transparent;border:none;box-shadow:none;padding:0;border-radius:0}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-collection.fixed:before,div.dt-button-collection.fixed:after{display:none}div.dt-button-collection .btn-group{flex:1 1 auto}div.dt-button-collection .dt-button{min-width:200px}div.dt-button-collection div.dt-btn-split-wrapper{width:100%;padding-left:5px;padding-right:5px}div.dt-button-collection button.dt-btn-split-drop-button{width:100%;color:#212529;border:none;background-color:white;border-radius:0px;margin-left:0px !important}div.dt-button-collection button.dt-btn-split-drop-button:focus{border:none;border-radius:0px;outline:none}div.dt-button-collection button.dt-btn-split-drop-button:hover{background-color:#e9ecef}div.dt-button-collection button.dt-btn-split-drop-button:active{background-color:#007bff !important}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0, 0, 0, 0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}div.dt-buttons div.btn-group{position:initial}div.dt-btn-split-wrapper:active:not(.disabled) button,div.dt-btn-split-wrapper.active:not(.disabled) button{background-color:#5a6268;border-color:#545b62}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop{box-shadow:none;background-color:#6c757d;border-color:#6c757d}div.dt-btn-split-wrapper:active:not(.disabled) button:hover,div.dt-btn-split-wrapper.active:not(.disabled) button:hover{background-color:#5a6268;border-color:#545b62}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group{border-radius:4px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child{border-top-left-radius:0px !important;border-bottom-left-radius:0px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:first-child{border-top-right-radius:0px !important;border-bottom-right-radius:0px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child:first-child{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important;border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group button.dt-btn-split-drop:last-child{border:1px solid rgb(108, 117, 125)}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group div.dt-btn-split-wrapper{border:none}div.dt-button-collection div.btn-group{border-radius:4px !important}div.dt-button-collection div.btn-group button{border-radius:4px}div.dt-button-collection div.btn-group button:last-child{border-top-left-radius:0px !important;border-bottom-left-radius:0px !important}div.dt-button-collection div.btn-group button:first-child{border-top-right-radius:0px !important;border-bottom-right-radius:0px !important}div.dt-button-collection div.btn-group button:last-child:first-child{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important;border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}div.dt-button-collection div.btn-group button.dt-btn-split-drop:last-child{border:1px solid rgb(108, 117, 125)}div.dt-button-collection div.btn-group div.dt-btn-split-wrapper{border:none}span.dt-button-spacer.bar:empty{height:inherit}div.dt-button-collection span.dt-button-spacer{padding-left:1rem !important;text-align:left}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.css
new file mode 100644
index 0000000..7e26228
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.css
@@ -0,0 +1,432 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ z-index: 2001;
+ background-color: white;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 4px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ padding: 0.5rem;
+ width: 218px;
+}
+div.dt-button-collection div.dropdown-menu {
+ position: relative;
+ display: block;
+ background-color: transparent;
+ border: none;
+ box-shadow: none;
+ padding: 0;
+ border-radius: 0;
+ z-index: 2002;
+ min-width: 100%;
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after {
+ display: none;
+}
+div.dt-button-collection .btn-group {
+ flex: 1 1 auto;
+}
+div.dt-button-collection .dt-button:not(.dt-btn-split-drop) {
+ min-width: 200px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper {
+ width: 100%;
+}
+div.dt-button-collection button.dt-btn-split-drop-button {
+ width: 100%;
+ color: #212529;
+ border: none;
+ background-color: white;
+ border-radius: 0px;
+ margin-left: 0px !important;
+}
+div.dt-button-collection button.dt-btn-split-drop-button:focus {
+ border: none;
+ border-radius: 0px;
+ outline: none;
+}
+div.dt-button-collection button.dt-btn-split-drop-button:hover {
+ background-color: #e9ecef;
+}
+div.dt-button-collection button.dt-btn-split-drop-button:active {
+ background-color: #007bff !important;
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 999;
+}
+
+@media screen and (max-width: 767px) {
+ div.dt-buttons {
+ float: none;
+ width: 100%;
+ text-align: center;
+ margin-bottom: 0.5em;
+ }
+ div.dt-buttons a.btn {
+ float: none;
+ }
+}
+div.dt-buttons button.btn.processing,
+div.dt-buttons div.btn.processing,
+div.dt-buttons a.btn.processing {
+ color: rgba(0, 0, 0, 0.2);
+}
+div.dt-buttons button.btn.processing:after,
+div.dt-buttons div.btn.processing:after,
+div.dt-buttons a.btn.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+div.dt-buttons div.btn-group {
+ position: initial;
+}
+
+div.dt-btn-split-wrapper button.dt-btn-split-drop {
+ border-top-right-radius: 0.25rem !important;
+ border-bottom-right-radius: 0.25rem !important;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button, div.dt-btn-split-wrapper.active:not(.disabled) button {
+ background-color: #5a6268;
+ border-color: #545b62;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop, div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop {
+ box-shadow: none;
+ background-color: #6c757d;
+ border-color: #6c757d;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button:hover, div.dt-btn-split-wrapper.active:not(.disabled) button:hover {
+ background-color: #5a6268;
+ border-color: #545b62;
+}
+
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group {
+ border-radius: 4px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child {
+ border-top-left-radius: 0px !important;
+ border-bottom-left-radius: 0px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:first-child {
+ border-top-right-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child:first-child {
+ border-top-left-radius: 4px !important;
+ border-bottom-left-radius: 4px !important;
+ border-top-right-radius: 4px !important;
+ border-bottom-right-radius: 4px !important;
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group button.dt-btn-split-drop:last-child {
+ border: 1px solid rgb(108, 117, 125);
+}
+div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group div.dt-btn-split-wrapper {
+ border: none;
+}
+
+div.dt-button-collection div.btn-group {
+ border-radius: 4px !important;
+}
+div.dt-button-collection div.btn-group button {
+ border-radius: 4px;
+}
+div.dt-button-collection div.btn-group button:last-child {
+ border-top-left-radius: 0px !important;
+ border-bottom-left-radius: 0px !important;
+}
+div.dt-button-collection div.btn-group button:first-child {
+ border-top-right-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+}
+div.dt-button-collection div.btn-group button:last-child:first-child {
+ border-top-left-radius: 4px !important;
+ border-bottom-left-radius: 4px !important;
+ border-top-right-radius: 4px !important;
+ border-bottom-right-radius: 4px !important;
+}
+div.dt-button-collection div.btn-group button.dt-btn-split-drop:last-child {
+ border: 1px solid rgb(108, 117, 125);
+}
+div.dt-button-collection div.btn-group div.dt-btn-split-wrapper {
+ border: none;
+}
+
+span.dt-button-spacer.bar:empty {
+ height: inherit;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ padding-left: 1rem !important;
+ text-align: left;
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.min.css
new file mode 100644
index 0000000..3103eef
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bootstrap5.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}div.dt-button-collection{position:absolute;z-index:2001;background-color:white;border:1px solid rgba(0, 0, 0, 0.15);border-radius:4px;box-shadow:0 6px 12px rgba(0, 0, 0, 0.175);padding:.5rem;width:218px}div.dt-button-collection div.dropdown-menu{position:relative;display:block;background-color:transparent;border:none;box-shadow:none;padding:0;border-radius:0;z-index:2002;min-width:100%}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-collection.fixed:before,div.dt-button-collection.fixed:after{display:none}div.dt-button-collection .btn-group{flex:1 1 auto}div.dt-button-collection .dt-button:not(.dt-btn-split-drop){min-width:200px}div.dt-button-collection div.dt-btn-split-wrapper{width:100%}div.dt-button-collection button.dt-btn-split-drop-button{width:100%;color:#212529;border:none;background-color:white;border-radius:0px;margin-left:0px !important}div.dt-button-collection button.dt-btn-split-drop-button:focus{border:none;border-radius:0px;outline:none}div.dt-button-collection button.dt-btn-split-drop-button:hover{background-color:#e9ecef}div.dt-button-collection button.dt-btn-split-drop-button:active{background-color:#007bff !important}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0, 0, 0, 0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}div.dt-buttons div.btn-group{position:initial}div.dt-btn-split-wrapper button.dt-btn-split-drop{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}div.dt-btn-split-wrapper:active:not(.disabled) button,div.dt-btn-split-wrapper.active:not(.disabled) button{background-color:#5a6268;border-color:#545b62}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop{box-shadow:none;background-color:#6c757d;border-color:#6c757d}div.dt-btn-split-wrapper:active:not(.disabled) button:hover,div.dt-btn-split-wrapper.active:not(.disabled) button:hover{background-color:#5a6268;border-color:#545b62}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group{border-radius:4px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child{border-top-left-radius:0px !important;border-bottom-left-radius:0px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:first-child{border-top-right-radius:0px !important;border-bottom-right-radius:0px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group:last-child:first-child{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important;border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group button.dt-btn-split-drop:last-child{border:1px solid rgb(108, 117, 125)}div.dataTables_wrapper div.dt-buttons.btn-group div.btn-group div.dt-btn-split-wrapper{border:none}div.dt-button-collection div.btn-group{border-radius:4px !important}div.dt-button-collection div.btn-group button{border-radius:4px}div.dt-button-collection div.btn-group button:last-child{border-top-left-radius:0px !important;border-bottom-left-radius:0px !important}div.dt-button-collection div.btn-group button:first-child{border-top-right-radius:0px !important;border-bottom-right-radius:0px !important}div.dt-button-collection div.btn-group button:last-child:first-child{border-top-left-radius:4px !important;border-bottom-left-radius:4px !important;border-top-right-radius:4px !important;border-bottom-right-radius:4px !important}div.dt-button-collection div.btn-group button.dt-btn-split-drop:last-child{border:1px solid rgb(108, 117, 125)}div.dt-button-collection div.btn-group div.dt-btn-split-wrapper{border:none}span.dt-button-spacer.bar:empty{height:inherit}div.dt-button-collection span.dt-button-spacer{padding-left:1rem !important;text-align:left}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.css
new file mode 100644
index 0000000..9d711c5
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.css
@@ -0,0 +1,429 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ z-index: 2001;
+ min-width: 200px;
+ background: white;
+ max-width: none;
+ display: block;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.02);
+ border-radius: 4;
+ padding: 0.5rem;
+}
+div.dt-button-collection div.dropdown-menu {
+ display: block;
+ z-index: 2002;
+ min-width: 100%;
+}
+div.dt-button-collection div.dt-btn-split-wrapper {
+ width: 100%;
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-bottom: 0px;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-content: flex-start;
+ align-items: stretch;
+}
+div.dt-button-collection div.dt-btn-split-wrapper button {
+ margin-right: 0px;
+ display: inline-block;
+ width: 0;
+ flex-grow: 1;
+ flex-shrink: 0;
+ flex-basis: 50px;
+ margin-top: 0px;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 0px;
+ border-bottom-right-radius: 0px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+div.dt-button-collection div.dt-btn-split-wrapper button.dt-button {
+ min-width: 30px;
+ margin-left: -1px;
+ flex-grow: 0;
+ flex-shrink: 0;
+ flex-basis: 0;
+ border-bottom-left-radius: 0px;
+ border-top-left-radius: 0px;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ padding: 0px;
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+div.dt-button-collection .dropdown-content {
+ box-shadow: none;
+ padding-top: 0;
+ border-radius: 0;
+}
+div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after {
+ display: none;
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 999;
+}
+
+@media screen and (max-width: 767px) {
+ div.dt-buttons {
+ float: none;
+ width: 100%;
+ text-align: center;
+ margin-bottom: 0.5em;
+ }
+ div.dt-buttons a.btn {
+ float: none;
+ }
+}
+div.dt-buttons button.btn.processing,
+div.dt-buttons div.btn.processing,
+div.dt-buttons a.btn.processing {
+ color: rgba(0, 0, 0, 0.2);
+}
+div.dt-buttons button.btn.processing:after,
+div.dt-buttons div.btn.processing:after,
+div.dt-buttons a.btn.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+div.dt-buttons button.button {
+ margin-left: 5px;
+}
+div.dt-buttons button.button:first-child {
+ margin-left: 0px;
+}
+
+span.dt-down-arrow {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-flex;
+ margin: 0.5em;
+ white-space: nowrap;
+ align-items: center;
+ font-size: 1rem;
+}
+span.dt-button-spacer.bar:empty {
+ height: inherit;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ text-align: left;
+ font-size: 0.875rem;
+ padding-left: 1rem !important;
+}
+
+div.dt-btn-split-wrapper {
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-bottom: 0px;
+ margin-bottom: 0px !important;
+}
+div.dt-btn-split-wrapper button {
+ margin-right: 0px;
+ display: inline-block;
+ margin-top: 0px;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 0px;
+ border-bottom-right-radius: 0px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+div.dt-btn-split-wrapper button.dt-button {
+ min-width: 30px;
+ margin-left: -1px;
+ border-bottom-left-radius: 0px;
+ border-top-left-radius: 0px;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ padding: 0px;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button, div.dt-btn-split-wrapper.active:not(.disabled) button, div.dt-btn-split-wrapper.is-active:not(.disabled) button {
+ background-color: #eee;
+ border-color: transparent;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-button, div.dt-btn-split-wrapper.active:not(.disabled) button.dt-button, div.dt-btn-split-wrapper.is-active:not(.disabled) button.dt-button {
+ box-shadow: none;
+ background-color: rgb(245, 245, 245);
+ border-color: transparent;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button:hover, div.dt-btn-split-wrapper.active:not(.disabled) button:hover, div.dt-btn-split-wrapper.is-active:not(.disabled) button:hover {
+ background-color: #eee;
+ border-color: transparent;
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.min.css
new file mode 100644
index 0000000..c4a08cd
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.bulma.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}div.dt-button-collection{position:absolute;z-index:2001;min-width:200px;background:white;max-width:none;display:block;box-shadow:0 .5em 1em -0.125em rgba(10, 10, 10, 0.1),0 0 0 1px rgba(10, 10, 10, 0.02);border-radius:4;padding:.5rem}div.dt-button-collection div.dropdown-menu{display:block;z-index:2002;min-width:100%}div.dt-button-collection div.dt-btn-split-wrapper{width:100%;padding-left:5px;padding-right:5px;margin-bottom:0px;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:stretch}div.dt-button-collection div.dt-btn-split-wrapper button{margin-right:0px;display:inline-block;width:0;flex-grow:1;flex-shrink:0;flex-basis:50px;margin-top:0px;border-bottom-left-radius:3px;border-top-left-radius:3px;border-top-right-radius:0px;border-bottom-right-radius:0px;overflow:hidden;text-overflow:ellipsis}div.dt-button-collection div.dt-btn-split-wrapper button.dt-button{min-width:30px;margin-left:-1px;flex-grow:0;flex-shrink:0;flex-basis:0;border-bottom-left-radius:0px;border-top-left-radius:0px;border-top-right-radius:3px;border-bottom-right-radius:3px;padding:0px}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-collection .dropdown-content{box-shadow:none;padding-top:0;border-radius:0}div.dt-button-collection.fixed:before,div.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0, 0, 0, 0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}div.dt-buttons button.button{margin-left:5px}div.dt-buttons button.button:first-child{margin-left:0px}span.dt-down-arrow{display:none}span.dt-button-spacer{display:inline-flex;margin:.5em;white-space:nowrap;align-items:center;font-size:1rem}span.dt-button-spacer.bar:empty{height:inherit}div.dt-button-collection span.dt-button-spacer{text-align:left;font-size:.875rem;padding-left:1rem !important}div.dt-btn-split-wrapper{padding-left:5px;padding-right:5px;margin-bottom:0px;margin-bottom:0px !important}div.dt-btn-split-wrapper button{margin-right:0px;display:inline-block;margin-top:0px;border-bottom-left-radius:3px;border-top-left-radius:3px;border-top-right-radius:0px;border-bottom-right-radius:0px;overflow:hidden;text-overflow:ellipsis}div.dt-btn-split-wrapper button.dt-button{min-width:30px;margin-left:-1px;border-bottom-left-radius:0px;border-top-left-radius:0px;border-top-right-radius:3px;border-bottom-right-radius:3px;padding:0px}div.dt-btn-split-wrapper:active:not(.disabled) button,div.dt-btn-split-wrapper.active:not(.disabled) button,div.dt-btn-split-wrapper.is-active:not(.disabled) button{background-color:#eee;border-color:transparent}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-button,div.dt-btn-split-wrapper.active:not(.disabled) button.dt-button,div.dt-btn-split-wrapper.is-active:not(.disabled) button.dt-button{box-shadow:none;background-color:rgb(245, 245, 245);border-color:transparent}div.dt-btn-split-wrapper:active:not(.disabled) button:hover,div.dt-btn-split-wrapper.active:not(.disabled) button:hover,div.dt-btn-split-wrapper.is-active:not(.disabled) button:hover{background-color:#eee;border-color:transparent}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.css
new file mode 100644
index 0000000..adf98f2
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.css
@@ -0,0 +1,560 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+button.dt-button,
+div.dt-button,
+a.dt-button,
+input.dt-button {
+ position: relative;
+ display: inline-block;
+ box-sizing: border-box;
+ margin-left: 0.167em;
+ margin-right: 0.167em;
+ margin-bottom: 0.333em;
+ padding: 0.5em 1em;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ border-radius: 2px;
+ cursor: pointer;
+ font-size: 0.88em;
+ line-height: 1.6em;
+ color: black;
+ white-space: nowrap;
+ overflow: hidden;
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(230, 230, 230, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ text-decoration: none;
+ outline: none;
+ text-overflow: ellipsis;
+}
+button.dt-button:first-child,
+div.dt-button:first-child,
+a.dt-button:first-child,
+input.dt-button:first-child {
+ margin-left: 0;
+}
+button.dt-button.disabled,
+div.dt-button.disabled,
+a.dt-button.disabled,
+input.dt-button.disabled {
+ cursor: default;
+ opacity: 0.4;
+}
+button.dt-button.active:not(.disabled),
+div.dt-button.active:not(.disabled),
+a.dt-button.active:not(.disabled),
+input.dt-button.active:not(.disabled) {
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(179, 179, 179, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(179, 179, 179, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+ box-shadow: inset 1px 1px 3px #999999;
+}
+button.dt-button.active:not(.disabled):hover:not(.disabled),
+div.dt-button.active:not(.disabled):hover:not(.disabled),
+a.dt-button.active:not(.disabled):hover:not(.disabled),
+input.dt-button.active:not(.disabled):hover:not(.disabled) {
+ box-shadow: inset 1px 1px 3px #999999;
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(128, 128, 128, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(128, 128, 128, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+}
+button.dt-button:hover,
+div.dt-button:hover,
+a.dt-button:hover,
+input.dt-button:hover {
+ text-decoration: none;
+}
+button.dt-button:hover:not(.disabled),
+div.dt-button:hover:not(.disabled),
+a.dt-button:hover:not(.disabled),
+input.dt-button:hover:not(.disabled) {
+ border: 1px solid #666;
+ background-color: rgba(0, 0, 0, 0.1); /* Fallback */
+ background: linear-gradient(to bottom, rgba(153, 153, 153, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(153, 153, 153, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");
+}
+button.dt-button:focus:not(.disabled),
+div.dt-button:focus:not(.disabled),
+a.dt-button:focus:not(.disabled),
+input.dt-button:focus:not(.disabled) {
+ border: 1px solid #426c9e;
+ text-shadow: 0 1px 0 #c4def1;
+ outline: none;
+ background-color: rgb(121, 172, 233); /* Fallback */
+ background: linear-gradient(to bottom, #d1e2f7 0%, rgb(121, 172, 233) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#d1e2f7", EndColorStr="rgb(121, 172, 233)");
+}
+button.dt-button.active:focus:not(.disabled),
+div.dt-button.active:focus:not(.disabled),
+a.dt-button.active:focus:not(.disabled),
+input.dt-button.active:focus:not(.disabled) {
+ background: linear-gradient(to bottom, #d1e2f7 0%, rgb(121, 172, 233) 100%) !important;
+}
+button.dt-button span.dt-down-arrow,
+div.dt-button span.dt-down-arrow,
+a.dt-button span.dt-down-arrow,
+input.dt-button span.dt-down-arrow {
+ position: relative;
+ top: -2px;
+ color: rgba(70, 70, 70, 0.75);
+ font-size: 8px;
+ padding-left: 10px;
+ line-height: 1em;
+}
+
+.dt-button embed {
+ outline: none;
+}
+
+div.dt-buttons {
+ float: left;
+}
+div.dt-buttons.buttons-right {
+ float: right;
+}
+
+div.dataTables_layout_cell div.dt-buttons {
+ float: none;
+}
+div.dataTables_layout_cell div.dt-buttons.buttons-right {
+ float: none;
+}
+
+div.dt-btn-split-wrapper {
+ display: inline-block;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 200px;
+ margin-top: 3px;
+ margin-bottom: 3px;
+ padding: 4px 4px 2px 4px;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.4);
+ background-color: white;
+ overflow: hidden;
+ z-index: 2002;
+ border-radius: 5px;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ box-sizing: border-box;
+}
+div.dt-button-collection button.dt-button,
+div.dt-button-collection div.dt-button,
+div.dt-button-collection a.dt-button {
+ position: relative;
+ left: 0;
+ right: 0;
+ width: 100%;
+ display: block;
+ float: none;
+ margin: 4px 0 2px 0;
+}
+div.dt-button-collection button.dt-button:active:not(.disabled), div.dt-button-collection button.dt-button.active:not(.disabled),
+div.dt-button-collection div.dt-button:active:not(.disabled),
+div.dt-button-collection div.dt-button.active:not(.disabled),
+div.dt-button-collection a.dt-button:active:not(.disabled),
+div.dt-button-collection a.dt-button.active:not(.disabled) {
+ background-color: #dadada; /* Fallback */
+ background: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada");
+ box-shadow: inset 1px 1px 3px #666;
+}
+div.dt-button-collection button.dt-button:first-child,
+div.dt-button-collection div.dt-button:first-child,
+div.dt-button-collection a.dt-button:first-child {
+ margin-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+div.dt-button-collection button.dt-button:last-child,
+div.dt-button-collection div.dt-button:last-child,
+div.dt-button-collection a.dt-button:last-child {
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-content: flex-start;
+ align-items: stretch;
+ margin: 4px 0 2px 0;
+}
+div.dt-button-collection div.dt-btn-split-wrapper button.dt-button {
+ margin: 0;
+ display: inline-block;
+ width: 0;
+ flex-grow: 1;
+ flex-shrink: 0;
+ flex-basis: 50px;
+ border-radius: 0;
+}
+div.dt-button-collection div.dt-btn-split-wrapper button.dt-btn-split-drop {
+ min-width: 20px;
+ flex-grow: 0;
+ flex-shrink: 0;
+ flex-basis: 0;
+}
+div.dt-button-collection div.dt-btn-split-wrapper:first-child {
+ margin-top: 0;
+}
+div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-button {
+ border-top-left-radius: 3px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-btn-split-drop {
+ border-top-right-radius: 3px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-button {
+ border-bottom-left-radius: 3px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-btn-split-drop {
+ border-bottom-right-radius: 3px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper:active:not(.disabled) button.dt-button, div.dt-button-collection div.dt-btn-split-wrapper.active:not(.disabled) button.dt-button {
+ background-color: #dadada; /* Fallback */
+ background: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada");
+ box-shadow: inset 0px 0px 4px #666;
+}
+div.dt-button-collection div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop, div.dt-button-collection div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop {
+ box-shadow: none;
+}
+div.dt-button-collection.fixed .dt-button:first-child {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+div.dt-button-collection.fixed .dt-button:last-child {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.7); /* Fallback */
+ background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */
+ z-index: 2001;
+}
+
+@media screen and (max-width: 640px) {
+ div.dt-buttons {
+ float: none !important;
+ text-align: center;
+ }
+}
+button.dt-button.processing,
+div.dt-button.processing,
+a.dt-button.processing {
+ color: rgba(0, 0, 0, 0.2);
+}
+button.dt-button.processing:after,
+div.dt-button.processing:after,
+a.dt-button.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+
+button.dt-btn-split-drop {
+ margin-left: calc(-1px - 0.333em);
+ padding-bottom: calc(0.5em - 1px);
+ border-radius: 0px 1px 1px 0px;
+ color: rgba(70, 70, 70, 0.9);
+ border-left: none;
+}
+button.dt-btn-split-drop span.dt-btn-split-drop-arrow {
+ position: relative;
+ top: -1px;
+ left: -2px;
+ font-size: 8px;
+}
+button.dt-btn-split-drop:hover {
+ z-index: 2;
+}
+
+button.buttons-split {
+ border-right: 1px solid rgba(70, 70, 70, 0);
+ border-radius: 1px 0px 0px 1px;
+}
+
+button.dt-btn-split-drop-button {
+ background-color: rgb(255, 255, 255);
+}
+button.dt-btn-split-drop-button:hover {
+ background-color: rgb(255, 255, 255);
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.min.css
new file mode 100644
index 0000000..02094ef
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.dataTables.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}button.dt-button,div.dt-button,a.dt-button,input.dt-button{position:relative;display:inline-block;box-sizing:border-box;margin-left:.167em;margin-right:.167em;margin-bottom:.333em;padding:.5em 1em;border:1px solid rgba(0, 0, 0, 0.3);border-radius:2px;cursor:pointer;font-size:.88em;line-height:1.6em;color:black;white-space:nowrap;overflow:hidden;background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(230, 230, 230, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(230, 230, 230, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;outline:none;text-overflow:ellipsis}button.dt-button:first-child,div.dt-button:first-child,a.dt-button:first-child,input.dt-button:first-child{margin-left:0}button.dt-button.disabled,div.dt-button.disabled,a.dt-button.disabled,input.dt-button.disabled{cursor:default;opacity:.4}button.dt-button.active:not(.disabled),div.dt-button.active:not(.disabled),a.dt-button.active:not(.disabled),input.dt-button.active:not(.disabled){background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(179, 179, 179, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(179, 179, 179, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)");box-shadow:inset 1px 1px 3px #999}button.dt-button.active:not(.disabled):hover:not(.disabled),div.dt-button.active:not(.disabled):hover:not(.disabled),a.dt-button.active:not(.disabled):hover:not(.disabled),input.dt-button.active:not(.disabled):hover:not(.disabled){box-shadow:inset 1px 1px 3px #999;background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(128, 128, 128, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(128, 128, 128, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)")}button.dt-button:hover,div.dt-button:hover,a.dt-button:hover,input.dt-button:hover{text-decoration:none}button.dt-button:hover:not(.disabled),div.dt-button:hover:not(.disabled),a.dt-button:hover:not(.disabled),input.dt-button:hover:not(.disabled){border:1px solid #666;background-color:rgba(0, 0, 0, 0.1);background:linear-gradient(to bottom, rgba(153, 153, 153, 0.1) 0%, rgba(0, 0, 0, 0.1) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="rgba(153, 153, 153, 0.1)", EndColorStr="rgba(0, 0, 0, 0.1)")}button.dt-button:focus:not(.disabled),div.dt-button:focus:not(.disabled),a.dt-button:focus:not(.disabled),input.dt-button:focus:not(.disabled){border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;outline:none;background-color:rgb(121, 172, 233);background:linear-gradient(to bottom, #d1e2f7 0%, rgb(121, 172, 233) 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#d1e2f7", EndColorStr="rgb(121, 172, 233)")}button.dt-button.active:focus:not(.disabled),div.dt-button.active:focus:not(.disabled),a.dt-button.active:focus:not(.disabled),input.dt-button.active:focus:not(.disabled){background:linear-gradient(to bottom, #d1e2f7 0%, rgb(121, 172, 233) 100%) !important}button.dt-button span.dt-down-arrow,div.dt-button span.dt-down-arrow,a.dt-button span.dt-down-arrow,input.dt-button span.dt-down-arrow{position:relative;top:-2px;color:rgba(70, 70, 70, 0.75);font-size:8px;padding-left:10px;line-height:1em}.dt-button embed{outline:none}div.dt-buttons{float:left}div.dt-buttons.buttons-right{float:right}div.dataTables_layout_cell div.dt-buttons{float:none}div.dataTables_layout_cell div.dt-buttons.buttons-right{float:none}div.dt-btn-split-wrapper{display:inline-block}div.dt-button-collection{position:absolute;top:0;left:0;width:200px;margin-top:3px;margin-bottom:3px;padding:4px 4px 2px 4px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.4);background-color:white;overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);box-sizing:border-box}div.dt-button-collection button.dt-button,div.dt-button-collection div.dt-button,div.dt-button-collection a.dt-button{position:relative;left:0;right:0;width:100%;display:block;float:none;margin:4px 0 2px 0}div.dt-button-collection button.dt-button:active:not(.disabled),div.dt-button-collection button.dt-button.active:not(.disabled),div.dt-button-collection div.dt-button:active:not(.disabled),div.dt-button-collection div.dt-button.active:not(.disabled),div.dt-button-collection a.dt-button:active:not(.disabled),div.dt-button-collection a.dt-button.active:not(.disabled){background-color:#dadada;background:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada");box-shadow:inset 1px 1px 3px #666}div.dt-button-collection button.dt-button:first-child,div.dt-button-collection div.dt-button:first-child,div.dt-button-collection a.dt-button:first-child{margin-top:0;border-top-left-radius:3px;border-top-right-radius:3px}div.dt-button-collection button.dt-button:last-child,div.dt-button-collection div.dt-button:last-child,div.dt-button-collection a.dt-button:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:stretch;margin:4px 0 2px 0}div.dt-button-collection div.dt-btn-split-wrapper button.dt-button{margin:0;display:inline-block;width:0;flex-grow:1;flex-shrink:0;flex-basis:50px;border-radius:0}div.dt-button-collection div.dt-btn-split-wrapper button.dt-btn-split-drop{min-width:20px;flex-grow:0;flex-shrink:0;flex-basis:0}div.dt-button-collection div.dt-btn-split-wrapper:first-child{margin-top:0}div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-button{border-top-left-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:first-child button.dt-btn-split-drop{border-top-right-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-button{border-bottom-left-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:last-child button.dt-btn-split-drop{border-bottom-right-radius:3px}div.dt-button-collection div.dt-btn-split-wrapper:active:not(.disabled) button.dt-button,div.dt-button-collection div.dt-btn-split-wrapper.active:not(.disabled) button.dt-button{background-color:#dadada;background:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr="#f0f0f0", EndColorStr="#dadada");box-shadow:inset 0px 0px 4px #666}div.dt-button-collection div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-button-collection div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop{box-shadow:none}div.dt-button-collection.fixed .dt-button:first-child{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}div.dt-button-collection.fixed .dt-button:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0, 0, 0, 0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}button.dt-btn-split-drop{margin-left:calc(-1px - .333em);padding-bottom:calc(.5em - 1px);border-radius:0px 1px 1px 0px;color:rgba(70, 70, 70, 0.9);border-left:none}button.dt-btn-split-drop span.dt-btn-split-drop-arrow{position:relative;top:-1px;left:-2px;font-size:8px}button.dt-btn-split-drop:hover{z-index:2}button.buttons-split{border-right:1px solid rgba(70, 70, 70, 0);border-radius:1px 0px 0px 1px}button.dt-btn-split-drop-button{background-color:rgb(255, 255, 255)}button.dt-btn-split-drop-button:hover{background-color:rgb(255, 255, 255)}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.css
new file mode 100644
index 0000000..d68021c
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.css
@@ -0,0 +1,371 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+ul.dt-buttons li {
+ margin: 0;
+}
+ul.dt-buttons li.active a {
+ box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.6);
+}
+
+ul.dt-buttons.button-group a {
+ margin-bottom: 0;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ z-index: 2002;
+ max-width: none;
+ border: 1px solid #cacaca;
+ padding: 0.5rem;
+ background-color: white;
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+div.dt-button-collection .button-group.stacked {
+ position: relative;
+ border: none;
+ padding: 0;
+ margin: 0;
+}
+div.dt-button-collection.columns .button-group.stacked {
+ flex-direction: row;
+ padding: 0;
+}
+div.dt-button-collection.columns .dt-button {
+ flex-basis: 200px;
+}
+div.dt-button-collection div.dt-btn-split-wrapper a.button {
+ flex-grow: 1;
+}
+div.dt-button-collection div.dt-btn-split-wrapper a.button,
+div.dt-button-collection div.dt-btn-split-wrapper button.button {
+ display: inline-block !important;
+ white-space: nowrap;
+ height: 40px;
+ flex-basis: auto;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 88;
+}
+
+@media screen and (max-width: 767px) {
+ ul.dt-buttons {
+ float: none;
+ width: 100%;
+ text-align: center;
+ margin-bottom: 0.5rem;
+ }
+ ul.dt-buttons li {
+ float: none;
+ }
+}
+div.button-group.stacked.dropdown-pane {
+ margin-top: 2px;
+ padding: 1px;
+ z-index: 89;
+}
+div.button-group.stacked.dropdown-pane a.button {
+ display: block;
+ margin-bottom: 1px;
+ border-right: none;
+}
+div.button-group.stacked.dropdown-pane a.button:last-child {
+ margin-bottom: 0;
+ margin-right: 1px;
+}
+
+div.dt-buttons button.button.processing,
+div.dt-buttons div.button.processing,
+div.dt-buttons a.button.processing {
+ color: rgba(0, 0, 0, 0.2);
+ color: rgba(255, 255, 255, 0.2);
+ border-top-color: white;
+ border-bottom-color: white;
+}
+div.dt-buttons button.button.processing:after,
+div.dt-buttons div.button.processing:after,
+div.dt-buttons a.button.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop, div.dt-btn-split-wrapper.secondary:not(.disabled) button.dt-btn-split-drop {
+ box-shadow: none;
+ background-color: #1779ba;
+ border-color: transparent;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop:hover, div.dt-btn-split-wrapper.secondary:not(.disabled) button.dt-btn-split-drop:hover {
+ background-color: #14679e;
+ border-color: transparent;
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.min.css
new file mode 100644
index 0000000..19a0bd0
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.foundation.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}ul.dt-buttons li{margin:0}ul.dt-buttons li.active a{box-shadow:inset 0 0 10px rgba(0, 0, 0, 0.6)}ul.dt-buttons.button-group a{margin-bottom:0}div.dt-button-collection{position:absolute;z-index:2002;max-width:none;border:1px solid #cacaca;padding:.5rem;background-color:white}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-collection .button-group.stacked{position:relative;border:none;padding:0;margin:0}div.dt-button-collection.columns .button-group.stacked{flex-direction:row;padding:0}div.dt-button-collection.columns .dt-button{flex-basis:200px}div.dt-button-collection div.dt-btn-split-wrapper a.button{flex-grow:1}div.dt-button-collection div.dt-btn-split-wrapper a.button,div.dt-button-collection div.dt-btn-split-wrapper button.button{display:inline-block !important;white-space:nowrap;height:40px;flex-basis:auto;overflow:hidden;text-overflow:ellipsis}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:88}@media screen and (max-width: 767px){ul.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5rem}ul.dt-buttons li{float:none}}div.button-group.stacked.dropdown-pane{margin-top:2px;padding:1px;z-index:89}div.button-group.stacked.dropdown-pane a.button{display:block;margin-bottom:1px;border-right:none}div.button-group.stacked.dropdown-pane a.button:last-child{margin-bottom:0;margin-right:1px}div.dt-buttons button.button.processing,div.dt-buttons div.button.processing,div.dt-buttons a.button.processing{color:rgba(0, 0, 0, 0.2);color:rgba(255, 255, 255, 0.2);border-top-color:white;border-bottom-color:white}div.dt-buttons button.button.processing:after,div.dt-buttons div.button.processing:after,div.dt-buttons a.button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-btn-split-wrapper.secondary:not(.disabled) button.dt-btn-split-drop{box-shadow:none;background-color:#1779ba;border-color:transparent}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop:hover,div.dt-btn-split-wrapper.secondary:not(.disabled) button.dt-btn-split-drop:hover{background-color:#14679e;border-color:transparent}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.css
new file mode 100644
index 0000000..70e1734
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.css
@@ -0,0 +1,387 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+div.dt-buttons {
+ position: relative;
+ float: left;
+}
+div.dt-buttons .dt-button {
+ margin-right: 0;
+}
+div.dt-buttons .dt-button span.ui-icon {
+ display: inline-block;
+ vertical-align: middle;
+ margin-top: -2px;
+}
+div.dt-buttons .dt-button:active {
+ outline: none;
+}
+div.dt-buttons .dt-button:hover > span {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+div.dt-button-collection {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 150px;
+ margin-top: 3px;
+ padding: 8px 8px 4px 8px;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.4);
+ background-color: #f3f3f3;
+ overflow: hidden;
+ z-index: 2002;
+ border-radius: 5px;
+ box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
+ z-index: 2002;
+ -webkit-column-gap: 0;
+ -moz-column-gap: 0;
+ -ms-column-gap: 0;
+ -o-column-gap: 0;
+ column-gap: 0;
+}
+div.dt-button-collection .dt-button {
+ position: relative;
+ left: 0;
+ right: 0;
+ width: 100%;
+ box-sizing: border-box;
+ display: block;
+ float: none;
+ margin-right: 0;
+ margin-bottom: 4px;
+}
+div.dt-button-collection .dt-button:hover > span {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+
+div.dt-btn-split-wrapper {
+ padding: 0px !important;
+ background-color: transparent !important;
+ display: flex;
+ border: none !important;
+ margin: 0px;
+}
+div.dt-btn-split-wrapper:hover {
+ border: none;
+}
+div.dt-btn-split-wrapper button.dt-btn-split-drop {
+ width: 24px;
+ padding-left: 6px;
+ padding-right: 6px;
+ font-size: 10px;
+ height: 29.5px;
+ border-radius: 0px;
+ margin-left: -1px;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-button, div.dt-btn-split-wrapper.ui-state-active:not(.disabled) button.dt-button, div.dt-btn-split-wrapper.is-active:not(.disabled) button.dt-button {
+ background-color: #007fff;
+ border-color: #003eff;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop, div.dt-btn-split-wrapper.ui-state-active:not(.disabled) button.dt-btn-split-drop, div.dt-btn-split-wrapper.is-active:not(.disabled) button.dt-btn-split-drop {
+ box-shadow: none;
+ background-color: #f6f6f6;
+ border-color: #c5c5c5;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button:hover, div.dt-btn-split-wrapper.ui-state-active:not(.disabled) button:hover, div.dt-btn-split-wrapper.is-active:not(.disabled) button:hover {
+ background-color: #ededed;
+ border-color: #cccccc;
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.7); /* Fallback */
+ background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); /* W3C Markup, IE10 Release Preview */
+ z-index: 2001;
+}
+
+@media screen and (max-width: 640px) {
+ div.dt-buttons {
+ float: none !important;
+ text-align: center;
+ }
+}
+button.dt-button.processing,
+div.dt-button.processing,
+a.dt-button.processing {
+ color: rgba(0, 0, 0, 0.2);
+}
+button.dt-button.processing:after,
+div.dt-button.processing:after,
+a.dt-button.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+
+span.dt-down-arrow {
+ display: none;
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.min.css
new file mode 100644
index 0000000..42ab77e
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.jqueryui.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}div.dt-buttons{position:relative;float:left}div.dt-buttons .dt-button{margin-right:0}div.dt-buttons .dt-button span.ui-icon{display:inline-block;vertical-align:middle;margin-top:-2px}div.dt-buttons .dt-button:active{outline:none}div.dt-buttons .dt-button:hover>span{background-color:rgba(0, 0, 0, 0.05)}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.4);background-color:#f3f3f3;overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 3px 5px rgba(0, 0, 0, 0.3);z-index:2002;-webkit-column-gap:0;-moz-column-gap:0;-ms-column-gap:0;-o-column-gap:0;column-gap:0}div.dt-button-collection .dt-button{position:relative;left:0;right:0;width:100%;box-sizing:border-box;display:block;float:none;margin-right:0;margin-bottom:4px}div.dt-button-collection .dt-button:hover>span{background-color:rgba(0, 0, 0, 0.05)}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-btn-split-wrapper{padding:0px !important;background-color:transparent !important;display:flex;border:none !important;margin:0px}div.dt-btn-split-wrapper:hover{border:none}div.dt-btn-split-wrapper button.dt-btn-split-drop{width:24px;padding-left:6px;padding-right:6px;font-size:10px;height:29.5px;border-radius:0px;margin-left:-1px}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-button,div.dt-btn-split-wrapper.ui-state-active:not(.disabled) button.dt-button,div.dt-btn-split-wrapper.is-active:not(.disabled) button.dt-button{background-color:#007fff;border-color:#003eff}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-btn-split-wrapper.ui-state-active:not(.disabled) button.dt-btn-split-drop,div.dt-btn-split-wrapper.is-active:not(.disabled) button.dt-btn-split-drop{box-shadow:none;background-color:#f6f6f6;border-color:#c5c5c5}div.dt-btn-split-wrapper:active:not(.disabled) button:hover,div.dt-btn-split-wrapper.ui-state-active:not(.disabled) button:hover,div.dt-btn-split-wrapper.is-active:not(.disabled) button:hover{background-color:#ededed;border-color:#ccc}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0, 0, 0, 0.7);background:radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0, 0, 0, 0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}span.dt-down-arrow{display:none}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.css
new file mode 100644
index 0000000..7549ea2
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.css
@@ -0,0 +1,409 @@
+@keyframes dtb-spinner {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-o-keyframes dtb-spinner {
+ 100% {
+ -o-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-ms-keyframes dtb-spinner {
+ 100% {
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes dtb-spinner {
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+@-moz-keyframes dtb-spinner {
+ 100% {
+ -moz-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+}
+div.dt-buttons .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+}
+div.dt-button-info h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+}
+div.dt-button-info > div {
+ padding: 1em;
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+}
+span.dt-button-spacer.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+}
+div.dt-button-collection span.dt-button-spacer:empty {
+ height: 0;
+ width: 100%;
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+}
+
+div.dt-button-collection {
+ position: absolute;
+ top: 0;
+ left: 0;
+ min-width: 200px;
+ margin-top: 3px !important;
+ margin-bottom: 3px !important;
+ z-index: 2002;
+ background: white;
+ border: 1px solid rgba(34, 36, 38, 0.15);
+ font-size: 1em;
+ padding: 0.5rem;
+}
+div.dt-button-collection.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+}
+div.dt-button-collection.fixed.two-column {
+ margin-left: -200px;
+}
+div.dt-button-collection.fixed.three-column {
+ margin-left: -225px;
+}
+div.dt-button-collection.fixed.four-column {
+ margin-left: -300px;
+}
+div.dt-button-collection.fixed.columns {
+ margin-left: -409px;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -308px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -203px;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.fixed.columns {
+ margin-left: -100px;
+ }
+}
+div.dt-button-collection.fixed > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+}
+div.dt-button-collection.two-column > :last-child, div.dt-button-collection.three-column > :last-child, div.dt-button-collection.four-column > :last-child {
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+}
+div.dt-button-collection.two-column > :last-child > *, div.dt-button-collection.three-column > :last-child > *, div.dt-button-collection.four-column > :last-child > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+}
+div.dt-button-collection.two-column {
+ width: 400px;
+}
+div.dt-button-collection.two-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+}
+div.dt-button-collection.three-column {
+ width: 450px;
+}
+div.dt-button-collection.three-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+}
+div.dt-button-collection.four-column {
+ width: 600px;
+}
+div.dt-button-collection.four-column > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+}
+div.dt-button-collection .dt-button {
+ border-radius: 0;
+}
+div.dt-button-collection.columns {
+ width: auto;
+}
+div.dt-button-collection.columns > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+ width: 818px;
+ padding-bottom: 1px;
+}
+div.dt-button-collection.columns > :last-child .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+}
+div.dt-button-collection.columns.dtb-b3 > :last-child, div.dt-button-collection.columns.dtb-b2 > :last-child, div.dt-button-collection.columns.dtb-b1 > :last-child {
+ justify-content: space-between;
+}
+div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+}
+div.dt-button-collection.columns.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+}
+div.dt-button-collection.columns.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+}
+@media screen and (max-width: 1024px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 612px;
+ }
+}
+@media screen and (max-width: 640px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 406px;
+ }
+ div.dt-button-collection.columns.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+}
+@media screen and (max-width: 460px) {
+ div.dt-button-collection.columns > :last-child {
+ width: 200px;
+ }
+}
+div.dt-button-collection div.dt-button-collection-title {
+ font-size: 1rem;
+}
+div.dt-button-collection.columns div.ui.basic.buttons span.dt-button-spacer {
+ background: transparent !important;
+ border: none;
+ flex: 1 1 100%;
+}
+div.dt-button-collection.columns div.ui.basic.buttons span.dt-button-spacer:hover {
+ background: transparent !important;
+}
+div.dt-button-collection:not(.columns) .ui.vertical.buttons {
+ width: 100%;
+ border: none;
+}
+div.dt-button-collection.columns .ui.vertical.buttons {
+ flex-direction: row;
+ border: none;
+}
+div.dt-button-collection button.dt-button {
+ border: 1px solid rgba(34, 36, 38, 0.15) !important;
+}
+div.dt-button-collection div.dt-btn-split-wrapper {
+ display: flex;
+}
+div.dt-button-collection div.dt-btn-split-wrapper button {
+ flex-grow: 1 !important;
+ flex-basis: auto !important;
+ width: auto !important;
+ border-top-right-radius: 0px !important;
+}
+div.dt-button-collection div.dt-btn-split-wrapper button.dt-btn-split-drop {
+ flex-grow: 0 !important;
+ flex-basis: auto !important;
+ border-bottom-left-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+ border-top-right-radius: 4px !important;
+}
+
+button.buttons-collection.ui.button span:after {
+ display: inline-block;
+ content: "▾";
+ padding-left: 0.5em;
+}
+
+div.dt-button-background {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 2001;
+}
+
+@media screen and (max-width: 767px) {
+ div.dt-buttons {
+ float: none;
+ width: 100%;
+ text-align: center;
+ margin-bottom: 0.5em;
+ }
+ div.dt-buttons a.btn {
+ float: none;
+ }
+}
+div.dt-buttons button.button.processing,
+div.dt-buttons div.button.processing,
+div.dt-buttons a.button.processing {
+ position: relative;
+ color: rgba(0, 0, 0, 0.2);
+}
+div.dt-buttons button.button.processing:after,
+div.dt-buttons div.button.processing:after,
+div.dt-buttons a.button.processing:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+ display: block;
+ content: " ";
+ border: 2px solid rgb(40, 40, 40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+}
+div.dt-buttons.ui.buttons {
+ flex-wrap: wrap;
+}
+div.dt-buttons.ui.basic.buttons .ui.button {
+ border-bottom: 1px solid rgba(34, 36, 38, 0.15);
+ margin-bottom: -1px;
+}
+div.dt-buttons.ui.basic.buttons .ui.button:hover {
+ background: transparent !important;
+}
+
+span.dt-down-arrow {
+ display: none;
+}
+
+span.dt-button-spacer {
+ cursor: inherit;
+}
+span.dt-button-spacer.bar {
+ padding-left: 1.5em;
+}
+span.dt-button-spacer.bar:empty {
+ height: inherit;
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ border-top: 1px solid rgba(34, 36, 38, 0.15);
+}
+div.dt-button-collection span.dt-button-spacer.bar {
+ border-bottom: none;
+ padding-left: 1.5em;
+}
+
+div.dt-buttons.ui.basic.buttons .button.dt-button-spacer {
+ background: rgba(34, 36, 38, 0.05) !important;
+ box-shadow: none;
+ cursor: initial;
+}
+div.dt-buttons.ui.basic.buttons .button.dt-button-spacer:hover {
+ background-color: rgba(34, 36, 38, 0.05) !important;
+}
+
+div.dt-btn-split-wrapper:active:not(.disabled) button.button, div.dt-btn-split-wrapper.active:not(.disabled) button.button {
+ background-color: #f8f8f8 !important;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop, div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop {
+ box-shadow: none;
+ background-color: transparent !important;
+}
+div.dt-btn-split-wrapper:active:not(.disabled) button.button:hover, div.dt-btn-split-wrapper.active:not(.disabled) button.button:hover {
+ background-color: transparent !important;
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.min.css b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.min.css
new file mode 100644
index 0000000..093e7a9
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/buttons.semanticui.min.css
@@ -0,0 +1 @@
+@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dataTables_wrapper{position:relative}div.dt-buttons{position:initial}div.dt-buttons .dt-button{overflow:hidden;text-overflow:ellipsis}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 4px 10px 1px rgba(0, 0, 0, 0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dtb-popover-close{position:absolute;top:10px;right:10px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:2003}button.dtb-hide-drop{display:none !important}div.dt-button-collection-title{text-align:center;padding:.3em 0 .5em;margin-left:.5em;margin-right:.5em;font-size:.9em}div.dt-button-collection-title:empty{display:none}span.dt-button-spacer{display:inline-block;margin:.5em;white-space:nowrap}span.dt-button-spacer.bar{border-left:1px solid rgba(0, 0, 0, 0.3);vertical-align:middle;padding-left:.5em}span.dt-button-spacer.bar:empty{height:1em;width:1px;padding-left:0}div.dt-button-collection span.dt-button-spacer{width:100%;font-size:.9em;text-align:center;margin:.5em 0}div.dt-button-collection span.dt-button-spacer:empty{height:0;width:100%}div.dt-button-collection span.dt-button-spacer.bar{border-left:none;border-bottom:1px solid rgba(0, 0, 0, 0.3);padding-left:0}div.dt-button-collection{position:absolute;top:0;left:0;min-width:200px;margin-top:3px !important;margin-bottom:3px !important;z-index:2002;background:white;border:1px solid rgba(34, 36, 38, 0.15);font-size:1em;padding:.5rem}div.dt-button-collection.fixed{position:fixed;display:block;top:50%;left:50%;margin-left:-75px;border-radius:5px;background-color:white}div.dt-button-collection.fixed.two-column{margin-left:-200px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection.fixed.columns{margin-left:-409px}@media screen and (max-width: 1024px){div.dt-button-collection.fixed.columns{margin-left:-308px}}@media screen and (max-width: 640px){div.dt-button-collection.fixed.columns{margin-left:-203px}}@media screen and (max-width: 460px){div.dt-button-collection.fixed.columns{margin-left:-100px}}div.dt-button-collection.fixed>:last-child{max-height:100vh;overflow:auto}div.dt-button-collection.two-column>:last-child,div.dt-button-collection.three-column>:last-child,div.dt-button-collection.four-column>:last-child{display:block !important;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.two-column>:last-child>*,div.dt-button-collection.three-column>:last-child>*,div.dt-button-collection.four-column>:last-child>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:400px}div.dt-button-collection.two-column>:last-child{padding-bottom:1px;column-count:2}div.dt-button-collection.three-column{width:450px}div.dt-button-collection.three-column>:last-child{padding-bottom:1px;column-count:3}div.dt-button-collection.four-column{width:600px}div.dt-button-collection.four-column>:last-child{padding-bottom:1px;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-collection.columns{width:auto}div.dt-button-collection.columns>:last-child{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;width:818px;padding-bottom:1px}div.dt-button-collection.columns>:last-child .dt-button{min-width:200px;flex:0 1;margin:0}div.dt-button-collection.columns.dtb-b3>:last-child,div.dt-button-collection.columns.dtb-b2>:last-child,div.dt-button-collection.columns.dtb-b1>:last-child{justify-content:space-between}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:1 1 32%}div.dt-button-collection.columns.dtb-b2 .dt-button{flex:1 1 48%}div.dt-button-collection.columns.dtb-b1 .dt-button{flex:1 1 100%}@media screen and (max-width: 1024px){div.dt-button-collection.columns>:last-child{width:612px}}@media screen and (max-width: 640px){div.dt-button-collection.columns>:last-child{width:406px}div.dt-button-collection.columns.dtb-b3 .dt-button{flex:0 1 32%}}@media screen and (max-width: 460px){div.dt-button-collection.columns>:last-child{width:200px}}div.dt-button-collection div.dt-button-collection-title{font-size:1rem}div.dt-button-collection.columns div.ui.basic.buttons span.dt-button-spacer{background:transparent !important;border:none;flex:1 1 100%}div.dt-button-collection.columns div.ui.basic.buttons span.dt-button-spacer:hover{background:transparent !important}div.dt-button-collection:not(.columns) .ui.vertical.buttons{width:100%;border:none}div.dt-button-collection.columns .ui.vertical.buttons{flex-direction:row;border:none}div.dt-button-collection button.dt-button{border:1px solid rgba(34, 36, 38, 0.15) !important}div.dt-button-collection div.dt-btn-split-wrapper{display:flex}div.dt-button-collection div.dt-btn-split-wrapper button{flex-grow:1 !important;flex-basis:auto !important;width:auto !important;border-top-right-radius:0px !important}div.dt-button-collection div.dt-btn-split-wrapper button.dt-btn-split-drop{flex-grow:0 !important;flex-basis:auto !important;border-bottom-left-radius:0px !important;border-bottom-right-radius:0px !important;border-top-right-radius:4px !important}button.buttons-collection.ui.button span:after{display:inline-block;content:"▾";padding-left:.5em}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2001}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.button.processing,div.dt-buttons div.button.processing,div.dt-buttons a.button.processing{position:relative;color:rgba(0, 0, 0, 0.2)}div.dt-buttons button.button.processing:after,div.dt-buttons div.button.processing:after,div.dt-buttons a.button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:" ";border:2px solid rgb(40, 40, 40);border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear}div.dt-buttons.ui.buttons{flex-wrap:wrap}div.dt-buttons.ui.basic.buttons .ui.button{border-bottom:1px solid rgba(34, 36, 38, 0.15);margin-bottom:-1px}div.dt-buttons.ui.basic.buttons .ui.button:hover{background:transparent !important}span.dt-down-arrow{display:none}span.dt-button-spacer{cursor:inherit}span.dt-button-spacer.bar{padding-left:1.5em}span.dt-button-spacer.bar:empty{height:inherit}div.dt-button-collection span.dt-button-spacer{border-top:1px solid rgba(34, 36, 38, 0.15)}div.dt-button-collection span.dt-button-spacer.bar{border-bottom:none;padding-left:1.5em}div.dt-buttons.ui.basic.buttons .button.dt-button-spacer{background:rgba(34, 36, 38, 0.05) !important;box-shadow:none;cursor:initial}div.dt-buttons.ui.basic.buttons .button.dt-button-spacer:hover{background-color:rgba(34, 36, 38, 0.05) !important}div.dt-btn-split-wrapper:active:not(.disabled) button.button,div.dt-btn-split-wrapper.active:not(.disabled) button.button{background-color:#f8f8f8 !important}div.dt-btn-split-wrapper:active:not(.disabled) button.dt-btn-split-drop,div.dt-btn-split-wrapper.active:not(.disabled) button.dt-btn-split-drop{box-shadow:none;background-color:transparent !important}div.dt-btn-split-wrapper:active:not(.disabled) button.button:hover,div.dt-btn-split-wrapper.active:not(.disabled) button.button:hover{background-color:transparent !important}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/common.scss b/public/assets/js/DataTables/Buttons-2.3.6/css/common.scss
new file mode 100644
index 0000000..1c2cb17
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/common.scss
@@ -0,0 +1,106 @@
+
+div.dataTables_wrapper {
+ position: relative;
+}
+
+div.dt-buttons {
+ position: initial;
+
+ .dt-button {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+}
+
+div.dt-button-info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ margin-top: -100px;
+ margin-left: -200px;
+ background-color: white;
+ border: 2px solid #111;
+ box-shadow: 3px 4px 10px 1px rgba(0, 0, 0, 0.3);
+ border-radius: 3px;
+ text-align: center;
+ z-index: 21;
+
+ h2 {
+ padding: 0.5em;
+ margin: 0;
+ font-weight: normal;
+ border-bottom: 1px solid #ddd;
+ background-color: #f3f3f3;
+ }
+
+ > div {
+ padding: 1em;
+ }
+}
+
+div.dtb-popover-close {
+ position: absolute;
+ top: 10px;
+ right: 10px;
+ width: 22px;
+ height: 22px;
+ border: 1px solid #eaeaea;
+ background-color: #f9f9f9;
+ text-align: center;
+ border-radius: 3px;
+ cursor: pointer;
+ z-index: 2003;
+}
+
+button.dtb-hide-drop {
+ display: none !important;
+}
+
+div.dt-button-collection-title {
+ text-align: center;
+ padding: 0.3em 0 0.5em;
+ margin-left: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.9em;
+}
+
+div.dt-button-collection-title:empty {
+ display: none;
+}
+
+span.dt-button-spacer {
+ display: inline-block;
+ margin: 0.5em;
+ white-space: nowrap;
+
+ &.bar {
+ border-left: 1px solid rgba(0, 0, 0, 0.3);
+ vertical-align: middle;
+ padding-left: 0.5em;
+
+ &:empty {
+ height: 1em;
+ width: 1px;
+ padding-left: 0;
+ }
+ }
+}
+
+div.dt-button-collection span.dt-button-spacer {
+ width: 100%;
+ font-size: 0.9em;
+ text-align: center;
+ margin: 0.5em 0;
+
+ &:empty {
+ height: 0;
+ width: 100%;
+ }
+
+ &.bar {
+ border-left: none;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.3);
+ padding-left: 0;
+ }
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/css/mixins.scss b/public/assets/js/DataTables/Buttons-2.3.6/css/mixins.scss
new file mode 100644
index 0000000..3fee4ec
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/css/mixins.scss
@@ -0,0 +1,228 @@
+
+@function dtb-tint( $color, $percent ) {
+ @return mix(white, $color, $percent);
+}
+
+@function dtb-shade( $color, $percent ) {
+ @return mix(black, $color, $percent);
+}
+
+@mixin dtb-two-stop-gradient($fromColor, $toColor) {
+ background-color: $toColor; /* Fallback */
+ background: linear-gradient(to bottom, $fromColor 0%, $toColor 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}');
+}
+
+@mixin dtb-radial-gradient ($fromColor, $toColor ) {
+ background: $toColor; /* Fallback */
+ background: radial-gradient(ellipse farthest-corner at center, $fromColor 0%, $toColor 100%); /* W3C Markup, IE10 Release Preview */
+}
+
+
+@mixin dtb-fixed-collection {
+ // Fixed positioning feature
+ &.fixed {
+ position: fixed;
+ display: block;
+ top: 50%;
+ left: 50%;
+ margin-left: -75px;
+ border-radius: 5px;
+ background-color: white;
+
+ &.two-column {
+ margin-left: -200px;
+ }
+
+ &.three-column {
+ margin-left: -225px;
+ }
+
+ &.four-column {
+ margin-left: -300px;
+ }
+
+ &.columns {
+ // Four column
+ margin-left: -409px;
+
+ @media screen and (max-width: 1024px) {
+ margin-left: -308px;
+ }
+
+ @media screen and (max-width: 640px) {
+ margin-left: -203px;
+ }
+
+ @media screen and (max-width: 460px) {
+ margin-left: -100px;
+ }
+ }
+
+ > :last-child {
+ max-height: 100vh;
+ overflow: auto;
+ }
+ }
+
+ &.two-column > :last-child,
+ &.three-column > :last-child,
+ &.four-column > :last-child {
+ > * {
+ -webkit-column-break-inside: avoid;
+ break-inside: avoid;
+ }
+
+ // Multi-column layout feature
+ display: block !important;
+ -webkit-column-gap: 8px;
+ -moz-column-gap: 8px;
+ -ms-column-gap: 8px;
+ -o-column-gap: 8px;
+ column-gap: 8px;
+ }
+
+ &.two-column {
+ width: 400px;
+
+ > :last-child {
+ padding-bottom: 1px;
+ column-count: 2;
+ }
+ }
+
+ &.three-column {
+ width: 450px;
+
+ > :last-child {
+ padding-bottom: 1px;
+ column-count: 3;
+ }
+ }
+
+ &.four-column {
+ width: 600px;
+
+ > :last-child {
+ padding-bottom: 1px;
+ column-count: 4;
+ }
+ }
+
+ // Chrome fix - 531528
+ .dt-button {
+ border-radius: 0;
+ }
+
+ &.columns {
+ // Four column layout
+ width: auto;
+
+ > :last-child {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+ align-items: center;
+ gap: 6px;
+
+ width: 818px;
+ padding-bottom: 1px;
+
+ .dt-button {
+ min-width: 200px;
+ flex: 0 1;
+ margin: 0;
+ }
+ }
+
+ &.dtb-b3,
+ &.dtb-b2,
+ &.dtb-b1 {
+ > :last-child {
+ justify-content: space-between;
+ }
+ }
+
+ &.dtb-b3 .dt-button {
+ flex: 1 1 32%;
+ }
+ &.dtb-b2 .dt-button {
+ flex: 1 1 48%;
+ }
+ &.dtb-b1 .dt-button {
+ flex: 1 1 100%;
+ }
+
+ @media screen and (max-width: 1024px) {
+ // Three column layout
+ > :last-child {
+ width: 612px;
+ }
+ }
+
+ @media screen and (max-width: 640px) {
+ // Two column layout
+ > :last-child {
+ width: 406px;
+ }
+
+ &.dtb-b3 .dt-button {
+ flex: 0 1 32%;
+ }
+ }
+
+ @media screen and (max-width: 460px) {
+ // Single column
+ > :last-child {
+ width: 200px;
+ }
+ }
+ }
+}
+
+
+@mixin dtb-processing {
+ color: rgba(0, 0, 0, 0.2);
+
+ &:after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 16px;
+ height: 16px;
+ margin: -8px 0 0 -8px;
+ box-sizing: border-box;
+
+ display: block;
+ content: ' ';
+ border: 2px solid rgb(40,40,40);
+ border-radius: 50%;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ animation: dtb-spinner 1500ms infinite linear;
+ -o-animation: dtb-spinner 1500ms infinite linear;
+ -ms-animation: dtb-spinner 1500ms infinite linear;
+ -webkit-animation: dtb-spinner 1500ms infinite linear;
+ -moz-animation: dtb-spinner 1500ms infinite linear;
+ }
+}
+
+@keyframes dtb-spinner {
+ 100%{ transform: rotate(360deg); }
+}
+
+@-o-keyframes dtb-spinner {
+ 100%{ -o-transform: rotate(360deg); transform: rotate(360deg); }
+}
+
+@-ms-keyframes dtb-spinner {
+ 100%{ -ms-transform: rotate(360deg); transform: rotate(360deg); }
+}
+
+@-webkit-keyframes dtb-spinner {
+ 100%{ -webkit-transform: rotate(360deg); transform: rotate(360deg); }
+}
+
+@-moz-keyframes dtb-spinner {
+ 100%{ -moz-transform: rotate(360deg); transform: rotate(360deg); }
+}
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.js
new file mode 100644
index 0000000..3edd363
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.js
@@ -0,0 +1,106 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-bs', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-bs')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+$.extend( true, DataTable.Buttons.defaults, {
+ dom: {
+ container: {
+ className: 'dt-buttons btn-group'
+ },
+ button: {
+ className: 'btn btn-default'
+ },
+ collection: {
+ tag: 'ul',
+ className: 'dropdown-menu',
+ closeButton: false,
+ button: {
+ tag: 'li',
+ className: 'dt-button',
+ active: 'active',
+ disabled: 'disabled'
+ },
+ buttonLiner: {
+ tag: 'a',
+ className: ''
+ }
+ },
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper btn-group',
+ closeButton: false,
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '&#x25BC;',
+ className: 'btn btn-default dt-btn-split-drop dropdown-toggle',
+ closeButton: false,
+ align: 'split-left',
+ splitAlignClass: 'dt-button-split-left'
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button btn btn-default',
+ closeButton: false
+ }
+ }
+} );
+
+DataTable.ext.buttons.collection.text = function ( dt ) {
+ return dt.i18n('buttons.collection', 'Collection <span class="caret"/>');
+};
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.min.js
new file mode 100644
index 0000000..d581ce8
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap.min.js
@@ -0,0 +1,4 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(e){var o,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-buttons"],function(t){return e(t,window,document)}):"object"==typeof exports?(o=require("jquery"),a=function(t,n){n.fn.dataTable||require("datatables.net-bs")(t,n),n.fn.dataTable.Buttons||require("datatables.net-buttons")(t,n)},"undefined"!=typeof window?module.exports=function(t,n){return t=t||window,n=n||o(t),a(t,n),e(n,0,t.document)}:(a(window,o),module.exports=e(o,window,window.document))):e(jQuery,window,document)}(function(t,n,e,o){"use strict";var a=t.fn.dataTable;return t.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group"},button:{className:"btn btn-default"},collection:{tag:"ul",className:"dropdown-menu",closeButton:!1,button:{tag:"li",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"a",className:""}},splitWrapper:{tag:"div",className:"dt-btn-split-wrapper btn-group",closeButton:!1},splitDropdown:{tag:"button",text:"&#x25BC;",className:"btn btn-default dt-btn-split-drop dropdown-toggle",closeButton:!1,align:"split-left",splitAlignClass:"dt-button-split-left"},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button btn btn-default",closeButton:!1}}}),a.ext.buttons.collection.text=function(t){return t.i18n("buttons.collection",'Collection <span class="caret"/>')},a}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.js
new file mode 100644
index 0000000..8277853
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.js
@@ -0,0 +1,106 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-bs4', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-bs4')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+$.extend( true, DataTable.Buttons.defaults, {
+ dom: {
+ container: {
+ className: 'dt-buttons btn-group flex-wrap'
+ },
+ button: {
+ className: 'btn btn-secondary'
+ },
+ collection: {
+ tag: 'div',
+ className: 'dropdown-menu',
+ closeButton: false,
+ button: {
+ tag: 'a',
+ className: 'dt-button dropdown-item',
+ active: 'active',
+ disabled: 'disabled'
+ }
+ },
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper btn-group',
+ closeButton: false,
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '',
+ className: 'btn btn-secondary dt-btn-split-drop dropdown-toggle dropdown-toggle-split',
+ closeButton: false,
+ align: 'split-left',
+ splitAlignClass: 'dt-button-split-left'
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button btn btn-secondary',
+ closeButton: false
+ }
+ },
+ buttonCreated: function ( config, button ) {
+ return config.buttons ?
+ $('<div class="btn-group"/>').append(button) :
+ button;
+ }
+} );
+
+DataTable.ext.buttons.collection.className += ' dropdown-toggle';
+DataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right';
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.min.js
new file mode 100644
index 0000000..4685697
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap4.min.js
@@ -0,0 +1,4 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(e){var o,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-buttons"],function(t){return e(t,window,document)}):"object"==typeof exports?(o=require("jquery"),a=function(t,n){n.fn.dataTable||require("datatables.net-bs4")(t,n),n.fn.dataTable.Buttons||require("datatables.net-buttons")(t,n)},"undefined"!=typeof window?module.exports=function(t,n){return t=t||window,n=n||o(t),a(t,n),e(n,0,t.document)}:(a(window,o),module.exports=e(o,window,window.document))):e(jQuery,window,document)}(function(e,t,n,o){"use strict";var a=e.fn.dataTable;return e.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group flex-wrap"},button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dropdown-menu",closeButton:!1,button:{tag:"a",className:"dt-button dropdown-item",active:"active",disabled:"disabled"}},splitWrapper:{tag:"div",className:"dt-btn-split-wrapper btn-group",closeButton:!1},splitDropdown:{tag:"button",text:"",className:"btn btn-secondary dt-btn-split-drop dropdown-toggle dropdown-toggle-split",closeButton:!1,align:"split-left",splitAlignClass:"dt-button-split-left"},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button btn btn-secondary",closeButton:!1}},buttonCreated:function(t,n){return t.buttons?e('<div class="btn-group"/>').append(n):n}}),a.ext.buttons.collection.className+=" dropdown-toggle",a.ext.buttons.collection.rightAlignClassName="dropdown-menu-right",a}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.js
new file mode 100644
index 0000000..6730cc4
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.js
@@ -0,0 +1,106 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-bs5', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-bs5')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+$.extend( true, DataTable.Buttons.defaults, {
+ dom: {
+ container: {
+ className: 'dt-buttons btn-group flex-wrap'
+ },
+ button: {
+ className: 'btn btn-secondary'
+ },
+ collection: {
+ tag: 'div',
+ className: 'dropdown-menu',
+ closeButton: false,
+ button: {
+ tag: 'a',
+ className: 'dt-button dropdown-item',
+ active: 'active',
+ disabled: 'disabled'
+ }
+ },
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper btn-group',
+ closeButton: false,
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '',
+ className: 'btn btn-secondary dt-btn-split-drop dropdown-toggle dropdown-toggle-split',
+ closeButton: false,
+ align: 'split-left',
+ splitAlignClass: 'dt-button-split-left'
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button btn btn-secondary',
+ closeButton: false
+ }
+ },
+ buttonCreated: function ( config, button ) {
+ return config.buttons ?
+ $('<div class="btn-group"/>').append(button) :
+ button;
+ }
+} );
+
+DataTable.ext.buttons.collection.className += ' dropdown-toggle';
+DataTable.ext.buttons.collection.rightAlignClassName = 'dropdown-menu-right';
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.min.js
new file mode 100644
index 0000000..a641a61
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bootstrap5.min.js
@@ -0,0 +1,4 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(e){var o,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bs5","datatables.net-buttons"],function(t){return e(t,window,document)}):"object"==typeof exports?(o=require("jquery"),a=function(t,n){n.fn.dataTable||require("datatables.net-bs5")(t,n),n.fn.dataTable.Buttons||require("datatables.net-buttons")(t,n)},"undefined"!=typeof window?module.exports=function(t,n){return t=t||window,n=n||o(t),a(t,n),e(n,0,t.document)}:(a(window,o),module.exports=e(o,window,window.document))):e(jQuery,window,document)}(function(e,t,n,o){"use strict";var a=e.fn.dataTable;return e.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group flex-wrap"},button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dropdown-menu",closeButton:!1,button:{tag:"a",className:"dt-button dropdown-item",active:"active",disabled:"disabled"}},splitWrapper:{tag:"div",className:"dt-btn-split-wrapper btn-group",closeButton:!1},splitDropdown:{tag:"button",text:"",className:"btn btn-secondary dt-btn-split-drop dropdown-toggle dropdown-toggle-split",closeButton:!1,align:"split-left",splitAlignClass:"dt-button-split-left"},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button btn btn-secondary",closeButton:!1}},buttonCreated:function(t,n){return t.buttons?e('<div class="btn-group"/>').append(n):n}}),a.ext.buttons.collection.className+=" dropdown-toggle",a.ext.buttons.collection.rightAlignClassName="dropdown-menu-right",a}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.js
new file mode 100644
index 0000000..2197c58
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.js
@@ -0,0 +1,117 @@
+/*! Bulma integration for DataTables' Buttons
+ * ©2021 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-bm', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-bm')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+$.extend( true, DataTable.Buttons.defaults, {
+ dom: {
+ container: {
+ className: 'dt-buttons field is-grouped'
+ },
+ button: {
+ className: 'button is-light',
+ active: 'is-active',
+ disabled: 'is-disabled'
+ },
+ collection: {
+ tag: 'div',
+ closeButton: false,
+ className: 'dropdown-content',
+ button: {
+ tag: 'a',
+ className: 'dt-button dropdown-item',
+ active: 'is-active',
+ disabled: 'is-disabled'
+ }
+ },
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper dropdown-trigger buttons has-addons',
+ closeButton: false
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button button is-light',
+ closeButton: false
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '&#x25BC;',
+ className: 'button is-light',
+ closeButton: false,
+ align: 'split-left',
+ splitAlignClass: 'dt-button-split-left'
+ }
+ },
+ buttonCreated: function ( config, button ) {
+ // For collections
+ if (config.buttons) {
+ // Wrap the dropdown content in a menu element
+ config._collection = $('<div class="dropdown-menu"/>')
+ .append(config._collection);
+
+ // And add the collection dropdown icon
+ $(button).append(
+ '<span class="icon is-small">' +
+ '<i class="fa fa-angle-down" aria-hidden="true"></i>' +
+ '</span>'
+ );
+ }
+
+ return button;
+ }
+} );
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.min.js
new file mode 100644
index 0000000..251a850
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.bulma.min.js
@@ -0,0 +1,4 @@
+/*! Bulma integration for DataTables' Buttons
+ * ©2021 SpryMedia Ltd - datatables.net/license
+ */
+!function(e){var o,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net-bm","datatables.net-buttons"],function(t){return e(t,window,document)}):"object"==typeof exports?(o=require("jquery"),a=function(t,n){n.fn.dataTable||require("datatables.net-bm")(t,n),n.fn.dataTable.Buttons||require("datatables.net-buttons")(t,n)},"undefined"!=typeof window?module.exports=function(t,n){return t=t||window,n=n||o(t),a(t,n),e(n,0,t.document)}:(a(window,o),module.exports=e(o,window,window.document))):e(jQuery,window,document)}(function(e,t,n,o){"use strict";var a=e.fn.dataTable;return e.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons field is-grouped"},button:{className:"button is-light",active:"is-active",disabled:"is-disabled"},collection:{tag:"div",closeButton:!1,className:"dropdown-content",button:{tag:"a",className:"dt-button dropdown-item",active:"is-active",disabled:"is-disabled"}},splitWrapper:{tag:"div",className:"dt-btn-split-wrapper dropdown-trigger buttons has-addons",closeButton:!1},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button button is-light",closeButton:!1},splitDropdown:{tag:"button",text:"&#x25BC;",className:"button is-light",closeButton:!1,align:"split-left",splitAlignClass:"dt-button-split-left"}},buttonCreated:function(t,n){return t.buttons&&(t._collection=e('<div class="dropdown-menu"/>').append(t._collection),e(n).append('<span class="icon is-small"><i class="fa fa-angle-down" aria-hidden="true"></i></span>')),n}}),a}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.js
new file mode 100644
index 0000000..86ce506
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.js
@@ -0,0 +1,250 @@
+/*!
+ * Column visibility buttons for Buttons and DataTables.
+ * 2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+$.extend( DataTable.ext.buttons, {
+ // A collection of column visibility buttons
+ colvis: function ( dt, conf ) {
+ var node = null;
+ var buttonConf = {
+ extend: 'collection',
+ init: function ( dt, n ) {
+ node = n;
+ },
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.colvis', 'Column visibility' );
+ },
+ className: 'buttons-colvis',
+ closeButton: false,
+ buttons: [ {
+ extend: 'columnsToggle',
+ columns: conf.columns,
+ columnText: conf.columnText
+ } ]
+ };
+
+ // Rebuild the collection with the new column structure if columns are reordered
+ dt.on( 'column-reorder.dt'+conf.namespace, function (e, settings, details) {
+ dt.button(null, dt.button(null, node).node()).collectionRebuild([{
+ extend: 'columnsToggle',
+ columns: conf.columns,
+ columnText: conf.columnText
+ }]);
+ });
+
+ return buttonConf;
+ },
+
+ // Selected columns with individual buttons - toggle column visibility
+ columnsToggle: function ( dt, conf ) {
+ var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) {
+ return {
+ extend: 'columnToggle',
+ columns: idx,
+ columnText: conf.columnText
+ };
+ } ).toArray();
+
+ return columns;
+ },
+
+ // Single button to toggle column visibility
+ columnToggle: function ( dt, conf ) {
+ return {
+ extend: 'columnVisibility',
+ columns: conf.columns,
+ columnText: conf.columnText
+ };
+ },
+
+ // Selected columns with individual buttons - set column visibility
+ columnsVisibility: function ( dt, conf ) {
+ var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) {
+ return {
+ extend: 'columnVisibility',
+ columns: idx,
+ visibility: conf.visibility,
+ columnText: conf.columnText
+ };
+ } ).toArray();
+
+ return columns;
+ },
+
+ // Single button to set column visibility
+ columnVisibility: {
+ columns: undefined, // column selector
+ text: function ( dt, button, conf ) {
+ return conf._columnText( dt, conf );
+ },
+ className: 'buttons-columnVisibility',
+ action: function ( e, dt, button, conf ) {
+ var col = dt.columns( conf.columns );
+ var curr = col.visible();
+
+ col.visible( conf.visibility !== undefined ?
+ conf.visibility :
+ ! (curr.length ? curr[0] : false )
+ );
+ },
+ init: function ( dt, button, conf ) {
+ var that = this;
+ button.attr( 'data-cv-idx', conf.columns );
+
+ dt
+ .on( 'column-visibility.dt'+conf.namespace, function (e, settings) {
+ if ( ! settings.bDestroying && settings.nTable == dt.settings()[0].nTable ) {
+ that.active( dt.column( conf.columns ).visible() );
+ }
+ } )
+ .on( 'column-reorder.dt'+conf.namespace, function (e, settings, details) {
+ // Button has been removed from the DOM
+ if ( conf.destroying ) {
+ return;
+ }
+
+ if ( dt.columns( conf.columns ).count() !== 1 ) {
+ return;
+ }
+
+ // This button controls the same column index but the text for the column has
+ // changed
+ that.text( conf._columnText( dt, conf ) );
+
+ // Since its a different column, we need to check its visibility
+ that.active( dt.column( conf.columns ).visible() );
+ } );
+
+ this.active( dt.column( conf.columns ).visible() );
+ },
+ destroy: function ( dt, button, conf ) {
+ dt
+ .off( 'column-visibility.dt'+conf.namespace )
+ .off( 'column-reorder.dt'+conf.namespace );
+ },
+
+ _columnText: function ( dt, conf ) {
+ // Use DataTables' internal data structure until this is presented
+ // is a public API. The other option is to use
+ // `$( 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;
+
+ 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
+ .replace(/<!\-\-.*?\-\->/g, "") // strip HTML comments
+ .replace(/<.*?>/g, "") // strip HTML
+ .replace(/^\s+|\s+$/g,""); // trim
+
+ return conf.columnText ?
+ conf.columnText( dt, idx, title ) :
+ title;
+ }
+ },
+
+
+ colvisRestore: {
+ className: 'buttons-colvisRestore',
+
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.colvisRestore', 'Restore visibility' );
+ },
+
+ init: function ( dt, button, conf ) {
+ conf._visOriginal = dt.columns().indexes().map( function ( idx ) {
+ return dt.column( idx ).visible();
+ } ).toArray();
+ },
+
+ action: function ( e, dt, button, conf ) {
+ dt.columns().every( function ( i ) {
+ // Take into account that ColReorder might have disrupted our
+ // indexes
+ var idx = dt.colReorder && dt.colReorder.transpose ?
+ dt.colReorder.transpose( i, 'toOriginal' ) :
+ i;
+
+ this.visible( conf._visOriginal[ idx ] );
+ } );
+ }
+ },
+
+
+ colvisGroup: {
+ className: 'buttons-colvisGroup',
+
+ action: function ( e, dt, button, conf ) {
+ dt.columns( conf.show ).visible( true, false );
+ dt.columns( conf.hide ).visible( false, false );
+
+ dt.columns.adjust();
+ },
+
+ show: [],
+
+ hide: []
+ }
+} );
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.min.js
new file mode 100644
index 0000000..f81084b
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.colVis.min.js
@@ -0,0 +1,5 @@
+/*!
+ * Column visibility buttons for Buttons and DataTables.
+ * 2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(t){var o,i;"function"==typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(n){return t(n,window,document)}):"object"==typeof exports?(o=require("jquery"),i=function(n,e){e.fn.dataTable||require("datatables.net")(n,e),e.fn.dataTable.Buttons||require("datatables.net-buttons")(n,e)},"undefined"!=typeof window?module.exports=function(n,e){return n=n||window,e=e||o(n),i(n,e),t(e,0,n.document)}:(i(window,o),module.exports=t(o,window,window.document))):t(jQuery,window,document)}(function(n,e,t,l){"use strict";var o=n.fn.dataTable;return n.extend(o.ext.buttons,{colvis:function(o,i){var l=null,n={extend:"collection",init:function(n,e){l=e},text:function(n){return n.i18n("buttons.colvis","Column visibility")},className:"buttons-colvis",closeButton:!1,buttons:[{extend:"columnsToggle",columns:i.columns,columnText:i.columnText}]};return o.on("column-reorder.dt"+i.namespace,function(n,e,t){o.button(null,o.button(null,l).node()).collectionRebuild([{extend:"columnsToggle",columns:i.columns,columnText:i.columnText}])}),n},columnsToggle:function(n,e){return n.columns(e.columns).indexes().map(function(n){return{extend:"columnToggle",columns:n,columnText:e.columnText}}).toArray()},columnToggle:function(n,e){return{extend:"columnVisibility",columns:e.columns,columnText:e.columnText}},columnsVisibility:function(n,e){return n.columns(e.columns).indexes().map(function(n){return{extend:"columnVisibility",columns:n,visibility:e.visibility,columnText:e.columnText}}).toArray()},columnVisibility:{columns:l,text:function(n,e,t){return t._columnText(n,t)},className:"buttons-columnVisibility",action:function(n,e,t,o){var e=e.columns(o.columns),i=e.visible();e.visible(o.visibility!==l?o.visibility:!(i.length&&i[0]))},init:function(o,n,i){var l=this;n.attr("data-cv-idx",i.columns),o.on("column-visibility.dt"+i.namespace,function(n,e){e.bDestroying||e.nTable!=o.settings()[0].nTable||l.active(o.column(i.columns).visible())}).on("column-reorder.dt"+i.namespace,function(n,e,t){i.destroying||1===o.columns(i.columns).count()&&(l.text(i._columnText(o,i)),l.active(o.column(i.columns).visible()))}),this.active(o.column(i.columns).visible())},destroy:function(n,e,t){n.off("column-visibility.dt"+t.namespace).off("column-reorder.dt"+t.namespace)},_columnText:function(n,e){var t=n.column(e.columns).index(),o=n.settings()[0].aoColumns[t].sTitle;return o=(o=o||n.column(t).header().innerHTML).replace(/\n/g," ").replace(/<br\s*\/?>/gi," ").replace(/<select(.*?)<\/select>/g,"").replace(/<!\-\-.*?\-\->/g,"").replace(/<.*?>/g,"").replace(/^\s+|\s+$/g,""),e.columnText?e.columnText(n,t,o):o}},colvisRestore:{className:"buttons-colvisRestore",text:function(n){return n.i18n("buttons.colvisRestore","Restore visibility")},init:function(e,n,t){t._visOriginal=e.columns().indexes().map(function(n){return e.column(n).visible()}).toArray()},action:function(n,e,t,o){e.columns().every(function(n){n=e.colReorder&&e.colReorder.transpose?e.colReorder.transpose(n,"toOriginal"):n;this.visible(o._visOriginal[n])})}},colvisGroup:{className:"buttons-colvisGroup",action:function(n,e,t,o){e.columns(o.show).visible(!0,!1),e.columns(o.hide).visible(!1,!1),e.columns.adjust()},show:[],hide:[]}}),o}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.js
new file mode 100644
index 0000000..ff13eb1
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.js
@@ -0,0 +1,92 @@
+/*! DataTables styling wrapper for Buttons
+ * ©2018 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-dt', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-dt')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-dt', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net-dt')(root, $).$;
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+
+return $.fn.dataTable;
+
+}));
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.min.js
new file mode 100644
index 0000000..9ba6ea1
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.dataTables.min.js
@@ -0,0 +1,4 @@
+/*! DataTables styling wrapper for Buttons
+ * ©2018 SpryMedia Ltd - datatables.net/license
+ */
+!function(n){var a,d;"function"==typeof define&&define.amd?define(["jquery","datatables.net-dt","datatables.net-buttons"],function(t){return n(t,window,document)}):"object"==typeof exports?(a=require("jquery"),d=function(t,e){e.fn.dataTable||require("datatables.net-dt")(t,e),e.fn.dataTable.Buttons||require("datatables.net-buttons")(t,e)},"undefined"!=typeof window?module.exports=function(t,e){return t=t||window,e=e||a(t),d(t,e),n(e,t,t.document)}:(d(window,a),module.exports=n(a,window,window.document))):n(jQuery,window,document)}(function(t,n,e,a){"use strict";var d,t=t.fn.dataTable;return d=function(t,e,n,a){return t.fn.dataTable},"function"==typeof define&&define.amd?define(["jquery","datatables.net-dt","datatables.net-buttons"],function(t){return d(t)}):"object"==typeof exports?module.exports=function(t,e){return t=t||n,(e=e&&e.fn.dataTable?e:require("datatables.net-dt")(t,e).$).fn.dataTable.Buttons||require("datatables.net-buttons")(t,e),d(e,0,t.document)}:d(jQuery),t}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.js
new file mode 100644
index 0000000..66bca3f
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.js
@@ -0,0 +1,134 @@
+/*! Foundation integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-zf', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-zf')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+// F6 has different requirements for the dropdown button set. We can use the
+// Foundation version found by DataTables in order to support both F5 and F6 in
+// the same file, but not that this requires DataTables 1.10.11+ for F6 support.
+var collection = DataTable.ext.foundationVersion === 6 ?
+ {
+ tag: 'div',
+ className: 'dropdown-pane is-open button-group stacked'
+ } :
+ {
+ tag: 'ul',
+ className: 'f-dropdown open dropdown-pane is-open',
+ closeButton: false,
+ button: {
+ tag: 'li',
+ className: 'small',
+ active: 'active',
+ disabled: 'disabled'
+ },
+ buttonLiner: {
+ tag: 'a'
+ }
+ };
+
+$.extend( true, DataTable.Buttons.defaults, {
+ dom: {
+ container: {
+ tag: 'div',
+ className: 'dt-buttons button-group'
+ },
+ buttonContainer: {
+ tag: null,
+ className: ''
+ },
+ button: {
+ tag: 'a',
+ className: 'dt-button button small',
+ active: 'secondary'
+ },
+ buttonLiner: {
+ tag: null
+ },
+ collection: collection,
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper button-group',
+ closeButton: false,
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '',
+ className: 'button dt-btn-split-drop dropdown arrow-only',
+ closeButton: false,
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button button small',
+ closeButton: false
+ }
+ }
+} );
+
+
+DataTable.ext.buttons.collection.className = 'dropdown';
+
+$(document).on('buttons-popover.dt', function () {
+ var notButton = false;
+ $('.dtsp-panesContainer').each(function() {
+ if(!$(this).is('button')){
+ notButton = true;
+ }
+ });
+ if(notButton){
+ $('.dtsp-panesContainer').removeClass('button-group stacked')
+ }
+});
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.min.js
new file mode 100644
index 0000000..7ea07eb
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.foundation.min.js
@@ -0,0 +1,4 @@
+/*! Foundation integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(o){var e,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net-zf","datatables.net-buttons"],function(t){return o(t,window,document)}):"object"==typeof exports?(e=require("jquery"),a=function(t,n){n.fn.dataTable||require("datatables.net-zf")(t,n),n.fn.dataTable.Buttons||require("datatables.net-buttons")(t,n)},"undefined"!=typeof window?module.exports=function(t,n){return t=t||window,n=n||e(t),a(t,n),o(n,0,t.document)}:(a(window,e),module.exports=o(e,window,window.document))):o(jQuery,window,document)}(function(n,t,o,e){"use strict";var a=n.fn.dataTable,s=6===a.ext.foundationVersion?{tag:"div",className:"dropdown-pane is-open button-group stacked"}:{tag:"ul",className:"f-dropdown open dropdown-pane is-open",closeButton:!1,button:{tag:"li",className:"small",active:"active",disabled:"disabled"},buttonLiner:{tag:"a"}};return n.extend(!0,a.Buttons.defaults,{dom:{container:{tag:"div",className:"dt-buttons button-group"},buttonContainer:{tag:null,className:""},button:{tag:"a",className:"dt-button button small",active:"secondary"},buttonLiner:{tag:null},collection:s,splitWrapper:{tag:"div",className:"dt-btn-split-wrapper button-group",closeButton:!1},splitDropdown:{tag:"button",text:"",className:"button dt-btn-split-drop dropdown arrow-only",closeButton:!1},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button button small",closeButton:!1}}}),a.ext.buttons.collection.className="dropdown",n(o).on("buttons-popover.dt",function(){var t=!1;n(".dtsp-panesContainer").each(function(){n(this).is("button")||(t=!0)}),t&&n(".dtsp-panesContainer").removeClass("button-group stacked")}),a}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.js
new file mode 100644
index 0000000..c7de35a
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.js
@@ -0,0 +1,1494 @@
+/*!
+ * HTML5 export buttons for Buttons and DataTables.
+ * 2016 SpryMedia Ltd - datatables.net/license
+ *
+ * FileSaver.js (1.3.3) - MIT license
+ * Copyright © 2016 Eli Grey - http://eligrey.com
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $, jszip, pdfmake) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document, jszip, pdfmake );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, jszip, pdfmake, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+// Allow the constructor to pass in JSZip and PDFMake from external requires.
+// Otherwise, use globally defined variables, if they are available.
+var useJszip;
+var usePdfmake;
+
+function _jsZip () {
+ return useJszip || window.JSZip;
+}
+function _pdfMake () {
+ return usePdfmake || window.pdfMake;
+}
+
+DataTable.Buttons.pdfMake = function (_) {
+ if ( ! _ ) {
+ return _pdfMake();
+ }
+ usePdfmake = _;
+}
+
+DataTable.Buttons.jszip = function (_) {
+ if ( ! _ ) {
+ return _jsZip();
+ }
+ useJszip = _;
+}
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * FileSaver.js dependency
+ */
+
+/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
+
+var _saveAs = (function(view) {
+ "use strict";
+ // IE <10 is explicitly unsupported
+ if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
+ return;
+ }
+ var
+ doc = view.document
+ // only get URL when necessary in case Blob.js hasn't overridden it yet
+ , get_URL = function() {
+ return view.URL || view.webkitURL || view;
+ }
+ , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
+ , can_use_save_link = "download" in save_link
+ , click = function(node) {
+ var event = new MouseEvent("click");
+ node.dispatchEvent(event);
+ }
+ , is_safari = /constructor/i.test(view.HTMLElement) || view.safari
+ , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
+ , throw_outside = function(ex) {
+ (view.setImmediate || view.setTimeout)(function() {
+ throw ex;
+ }, 0);
+ }
+ , force_saveable_type = "application/octet-stream"
+ // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
+ , arbitrary_revoke_timeout = 1000 * 40 // in ms
+ , revoke = function(file) {
+ var revoker = function() {
+ if (typeof file === "string") { // file is an object URL
+ get_URL().revokeObjectURL(file);
+ } else { // file is a File
+ file.remove();
+ }
+ };
+ setTimeout(revoker, arbitrary_revoke_timeout);
+ }
+ , dispatch = function(filesaver, event_types, event) {
+ event_types = [].concat(event_types);
+ var i = event_types.length;
+ while (i--) {
+ var listener = filesaver["on" + event_types[i]];
+ if (typeof listener === "function") {
+ try {
+ listener.call(filesaver, event || filesaver);
+ } catch (ex) {
+ throw_outside(ex);
+ }
+ }
+ }
+ }
+ , auto_bom = function(blob) {
+ // prepend BOM for UTF-8 XML and text/* types (including HTML)
+ // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
+ if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
+ return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
+ }
+ return blob;
+ }
+ , FileSaver = function(blob, name, no_auto_bom) {
+ if (!no_auto_bom) {
+ blob = auto_bom(blob);
+ }
+ // First try a.download, then web filesystem, then object URLs
+ var
+ filesaver = this
+ , type = blob.type
+ , force = type === force_saveable_type
+ , object_url
+ , dispatch_all = function() {
+ dispatch(filesaver, "writestart progress write writeend".split(" "));
+ }
+ // on any filesys errors revert to saving with object URLs
+ , fs_error = function() {
+ if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
+ // Safari doesn't allow downloading of blob urls
+ var reader = new FileReader();
+ reader.onloadend = function() {
+ var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
+ var popup = view.open(url, '_blank');
+ if(!popup) view.location.href = url;
+ url=undefined; // release reference before dispatching
+ filesaver.readyState = filesaver.DONE;
+ dispatch_all();
+ };
+ reader.readAsDataURL(blob);
+ filesaver.readyState = filesaver.INIT;
+ return;
+ }
+ // don't create more object URLs than needed
+ if (!object_url) {
+ object_url = get_URL().createObjectURL(blob);
+ }
+ if (force) {
+ view.location.href = object_url;
+ } else {
+ var opened = view.open(object_url, "_blank");
+ if (!opened) {
+ // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
+ view.location.href = object_url;
+ }
+ }
+ filesaver.readyState = filesaver.DONE;
+ dispatch_all();
+ revoke(object_url);
+ }
+ ;
+ filesaver.readyState = filesaver.INIT;
+
+ if (can_use_save_link) {
+ object_url = get_URL().createObjectURL(blob);
+ setTimeout(function() {
+ save_link.href = object_url;
+ save_link.download = name;
+ click(save_link);
+ dispatch_all();
+ revoke(object_url);
+ filesaver.readyState = filesaver.DONE;
+ });
+ return;
+ }
+
+ fs_error();
+ }
+ , FS_proto = FileSaver.prototype
+ , saveAs = function(blob, name, no_auto_bom) {
+ return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
+ }
+ ;
+ // IE 10+ (native saveAs)
+ if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
+ return function(blob, name, no_auto_bom) {
+ name = name || blob.name || "download";
+
+ if (!no_auto_bom) {
+ blob = auto_bom(blob);
+ }
+ return navigator.msSaveOrOpenBlob(blob, name);
+ };
+ }
+
+ FS_proto.abort = function(){};
+ FS_proto.readyState = FS_proto.INIT = 0;
+ FS_proto.WRITING = 1;
+ FS_proto.DONE = 2;
+
+ FS_proto.error =
+ FS_proto.onwritestart =
+ FS_proto.onprogress =
+ FS_proto.onwrite =
+ FS_proto.onabort =
+ FS_proto.onerror =
+ FS_proto.onwriteend =
+ null;
+
+ return saveAs;
+}(
+ typeof self !== "undefined" && self
+ || typeof window !== "undefined" && window
+ || this.content
+));
+
+
+// Expose file saver on the DataTables API. Can't attach to `DataTables.Buttons`
+// since this file can be loaded before Button's core!
+DataTable.fileSave = _saveAs;
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Local (private) functions
+ */
+
+/**
+ * Get the sheet name for Excel exports.
+ *
+ * @param {object} config Button configuration
+ */
+var _sheetname = function ( config )
+{
+ var sheetName = 'Sheet1';
+
+ if ( config.sheetName ) {
+ sheetName = config.sheetName.replace(/[\[\]\*\/\\\?\:]/g, '');
+ }
+
+ return sheetName;
+};
+
+/**
+ * Get the newline character(s)
+ *
+ * @param {object} config Button configuration
+ * @return {string} Newline character
+ */
+var _newLine = function ( config )
+{
+ return config.newline ?
+ config.newline :
+ navigator.userAgent.match(/Windows/) ?
+ '\r\n' :
+ '\n';
+};
+
+/**
+ * Combine the data from the `buttons.exportData` method into a string that
+ * will be used in the export file.
+ *
+ * @param {DataTable.Api} dt DataTables API instance
+ * @param {object} config Button configuration
+ * @return {object} The data to export
+ */
+var _exportData = function ( dt, config )
+{
+ var newLine = _newLine( config );
+ var data = dt.buttons.exportData( config.exportOptions );
+ var boundary = config.fieldBoundary;
+ var separator = config.fieldSeparator;
+ var reBoundary = new RegExp( boundary, 'g' );
+ var escapeChar = config.escapeChar !== undefined ?
+ config.escapeChar :
+ '\\';
+ var join = function ( a ) {
+ var s = '';
+
+ // If there is a field boundary, then we might need to escape it in
+ // the source data
+ for ( var i=0, ien=a.length ; i<ien ; i++ ) {
+ if ( i > 0 ) {
+ s += separator;
+ }
+
+ s += boundary ?
+ boundary + ('' + a[i]).replace( reBoundary, escapeChar+boundary ) + boundary :
+ a[i];
+ }
+
+ return s;
+ };
+
+ var header = config.header ? join( data.header )+newLine : '';
+ var footer = config.footer && data.footer ? newLine+join( data.footer ) : '';
+ var body = [];
+
+ for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
+ body.push( join( data.body[i] ) );
+ }
+
+ return {
+ str: header + body.join( newLine ) + footer,
+ rows: body.length
+ };
+};
+
+/**
+ * Older versions of Safari (prior to tech preview 18) don't support the
+ * download option required.
+ *
+ * @return {Boolean} `true` if old Safari
+ */
+var _isDuffSafari = function ()
+{
+ var safari = navigator.userAgent.indexOf('Safari') !== -1 &&
+ navigator.userAgent.indexOf('Chrome') === -1 &&
+ navigator.userAgent.indexOf('Opera') === -1;
+
+ if ( ! safari ) {
+ return false;
+ }
+
+ var version = navigator.userAgent.match( /AppleWebKit\/(\d+\.\d+)/ );
+ if ( version && version.length > 1 && version[1]*1 < 603.1 ) {
+ return true;
+ }
+
+ return false;
+};
+
+/**
+ * Convert from numeric position to letter for column names in Excel
+ * @param {int} n Column number
+ * @return {string} Column letter(s) name
+ */
+function createCellPos( n ){
+ var ordA = 'A'.charCodeAt(0);
+ var ordZ = 'Z'.charCodeAt(0);
+ var len = ordZ - ordA + 1;
+ var s = "";
+
+ while( n >= 0 ) {
+ s = String.fromCharCode(n % len + ordA) + s;
+ n = Math.floor(n / len) - 1;
+ }
+
+ return s;
+}
+
+try {
+ var _serialiser = new XMLSerializer();
+ var _ieExcel;
+}
+catch (t) {}
+
+/**
+ * Recursively add XML files from an object's structure to a ZIP file. This
+ * allows the XSLX file to be easily defined with an object's structure matching
+ * the files structure.
+ *
+ * @param {JSZip} zip ZIP package
+ * @param {object} obj Object to add (recursive)
+ */
+function _addToZip( zip, obj ) {
+ if ( _ieExcel === undefined ) {
+ // Detect if we are dealing with IE's _awful_ serialiser by seeing if it
+ // drop attributes
+ _ieExcel = _serialiser
+ .serializeToString(
+ ( new window.DOMParser() ).parseFromString( excelStrings['xl/worksheets/sheet1.xml'], 'text/xml' )
+ )
+ .indexOf( 'xmlns:r' ) === -1;
+ }
+
+ $.each( obj, function ( name, val ) {
+ if ( $.isPlainObject( val ) ) {
+ var newDir = zip.folder( name );
+ _addToZip( newDir, val );
+ }
+ else {
+ if ( _ieExcel ) {
+ // IE's XML serialiser will drop some name space attributes from
+ // from the root node, so we need to save them. Do this by
+ // replacing the namespace nodes with a regular attribute that
+ // we convert back when serialised. Edge does not have this
+ // issue
+ var worksheet = val.childNodes[0];
+ var i, ien;
+ var attrs = [];
+
+ for ( i=worksheet.attributes.length-1 ; i>=0 ; i-- ) {
+ var attrName = worksheet.attributes[i].nodeName;
+ var attrValue = worksheet.attributes[i].nodeValue;
+
+ if ( attrName.indexOf( ':' ) !== -1 ) {
+ attrs.push( { name: attrName, value: attrValue } );
+
+ worksheet.removeAttribute( attrName );
+ }
+ }
+
+ for ( i=0, ien=attrs.length ; i<ien ; i++ ) {
+ var attr = val.createAttribute( attrs[i].name.replace( ':', '_dt_b_namespace_token_' ) );
+ attr.value = attrs[i].value;
+ worksheet.setAttributeNode( attr );
+ }
+ }
+
+ var str = _serialiser.serializeToString(val);
+
+ // Fix IE's XML
+ if ( _ieExcel ) {
+ // IE doesn't include the XML declaration
+ if ( str.indexOf( '<?xml' ) === -1 ) {
+ str = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+str;
+ }
+
+ // Return namespace attributes to being as such
+ str = str.replace( /_dt_b_namespace_token_/g, ':' );
+
+ // Remove testing name space that IE puts into the space preserve attr
+ str = str.replace( /xmlns:NS[\d]+="" NS[\d]+:/g, '' );
+ }
+
+ // Safari, IE and Edge will put empty name space attributes onto
+ // various elements making them useless. This strips them out
+ str = str.replace( /<([^<>]*?) xmlns=""([^<>]*?)>/g, '<$1 $2>' );
+
+ zip.file( name, str );
+ }
+ } );
+}
+
+/**
+ * Create an XML node and add any children, attributes, etc without needing to
+ * be verbose in the DOM.
+ *
+ * @param {object} doc XML document
+ * @param {string} nodeName Node name
+ * @param {object} opts Options - can be `attr` (attributes), `children`
+ * (child nodes) and `text` (text content)
+ * @return {node} Created node
+ */
+function _createNode( doc, nodeName, opts ) {
+ var tempNode = doc.createElement( nodeName );
+
+ if ( opts ) {
+ if ( opts.attr ) {
+ $(tempNode).attr( opts.attr );
+ }
+
+ if ( opts.children ) {
+ $.each( opts.children, function ( key, value ) {
+ tempNode.appendChild( value );
+ } );
+ }
+
+ if ( opts.text !== null && opts.text !== undefined ) {
+ tempNode.appendChild( doc.createTextNode( opts.text ) );
+ }
+ }
+
+ return tempNode;
+}
+
+/**
+ * Get the width for an Excel column based on the contents of that column
+ * @param {object} data Data for export
+ * @param {int} col Column index
+ * @return {int} Column width
+ */
+function _excelColWidth( data, col ) {
+ var max = data.header[col].length;
+ var len, lineSplit, str;
+
+ if ( data.footer && data.footer[col].length > max ) {
+ max = data.footer[col].length;
+ }
+
+ for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
+ var point = data.body[i][col];
+ str = point !== null && point !== undefined ?
+ point.toString() :
+ '';
+
+ // If there is a newline character, workout the width of the column
+ // based on the longest line in the string
+ if ( str.indexOf('\n') !== -1 ) {
+ lineSplit = str.split('\n');
+ lineSplit.sort( function (a, b) {
+ return b.length - a.length;
+ } );
+
+ len = lineSplit[0].length;
+ }
+ else {
+ len = str.length;
+ }
+
+ if ( len > max ) {
+ max = len;
+ }
+
+ // Max width rather than having potentially massive column widths
+ if ( max > 40 ) {
+ return 54; // 40 * 1.35
+ }
+ }
+
+ max *= 1.35;
+
+ // And a min width
+ return max > 6 ? max : 6;
+}
+
+// Excel - Pre-defined strings to build a basic XLSX file
+var excelStrings = {
+ "_rels/.rels":
+ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
+ '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'+
+ '<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>'+
+ '</Relationships>',
+
+ "xl/_rels/workbook.xml.rels":
+ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
+ '<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">'+
+ '<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>'+
+ '<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>'+
+ '</Relationships>',
+
+ "[Content_Types].xml":
+ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
+ '<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">'+
+ '<Default Extension="xml" ContentType="application/xml" />'+
+ '<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />'+
+ '<Default Extension="jpeg" ContentType="image/jpeg" />'+
+ '<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" />'+
+ '<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" />'+
+ '<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" />'+
+ '</Types>',
+
+ "xl/workbook.xml":
+ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
+ '<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">'+
+ '<fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="24816"/>'+
+ '<workbookPr showInkAnnotation="0" autoCompressPictures="0"/>'+
+ '<bookViews>'+
+ '<workbookView xWindow="0" yWindow="0" windowWidth="25600" windowHeight="19020" tabRatio="500"/>'+
+ '</bookViews>'+
+ '<sheets>'+
+ '<sheet name="Sheet1" sheetId="1" r:id="rId1"/>'+
+ '</sheets>'+
+ '<definedNames/>'+
+ '</workbook>',
+
+ "xl/worksheets/sheet1.xml":
+ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
+ '<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">'+
+ '<sheetData/>'+
+ '<mergeCells count="0"/>'+
+ '</worksheet>',
+
+ "xl/styles.xml":
+ '<?xml version="1.0" encoding="UTF-8"?>'+
+ '<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">'+
+ '<numFmts count="6">'+
+ '<numFmt numFmtId="164" formatCode="#,##0.00_-\ [$$-45C]"/>'+
+ '<numFmt numFmtId="165" formatCode="&quot;£&quot;#,##0.00"/>'+
+ '<numFmt numFmtId="166" formatCode="[$€-2]\ #,##0.00"/>'+
+ '<numFmt numFmtId="167" formatCode="0.0%"/>'+
+ '<numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/>'+
+ '<numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/>'+
+ '</numFmts>'+
+ '<fonts count="5" x14ac:knownFonts="1">'+
+ '<font>'+
+ '<sz val="11" />'+
+ '<name val="Calibri" />'+
+ '</font>'+
+ '<font>'+
+ '<sz val="11" />'+
+ '<name val="Calibri" />'+
+ '<color rgb="FFFFFFFF" />'+
+ '</font>'+
+ '<font>'+
+ '<sz val="11" />'+
+ '<name val="Calibri" />'+
+ '<b />'+
+ '</font>'+
+ '<font>'+
+ '<sz val="11" />'+
+ '<name val="Calibri" />'+
+ '<i />'+
+ '</font>'+
+ '<font>'+
+ '<sz val="11" />'+
+ '<name val="Calibri" />'+
+ '<u />'+
+ '</font>'+
+ '</fonts>'+
+ '<fills count="6">'+
+ '<fill>'+
+ '<patternFill patternType="none" />'+
+ '</fill>'+
+ '<fill>'+ // Excel appears to use this as a dotted background regardless of values but
+ '<patternFill patternType="none" />'+ // to be valid to the schema, use a patternFill
+ '</fill>'+
+ '<fill>'+
+ '<patternFill patternType="solid">'+
+ '<fgColor rgb="FFD9D9D9" />'+
+ '<bgColor indexed="64" />'+
+ '</patternFill>'+
+ '</fill>'+
+ '<fill>'+
+ '<patternFill patternType="solid">'+
+ '<fgColor rgb="FFD99795" />'+
+ '<bgColor indexed="64" />'+
+ '</patternFill>'+
+ '</fill>'+
+ '<fill>'+
+ '<patternFill patternType="solid">'+
+ '<fgColor rgb="ffc6efce" />'+
+ '<bgColor indexed="64" />'+
+ '</patternFill>'+
+ '</fill>'+
+ '<fill>'+
+ '<patternFill patternType="solid">'+
+ '<fgColor rgb="ffc6cfef" />'+
+ '<bgColor indexed="64" />'+
+ '</patternFill>'+
+ '</fill>'+
+ '</fills>'+
+ '<borders count="2">'+
+ '<border>'+
+ '<left />'+
+ '<right />'+
+ '<top />'+
+ '<bottom />'+
+ '<diagonal />'+
+ '</border>'+
+ '<border diagonalUp="false" diagonalDown="false">'+
+ '<left style="thin">'+
+ '<color auto="1" />'+
+ '</left>'+
+ '<right style="thin">'+
+ '<color auto="1" />'+
+ '</right>'+
+ '<top style="thin">'+
+ '<color auto="1" />'+
+ '</top>'+
+ '<bottom style="thin">'+
+ '<color auto="1" />'+
+ '</bottom>'+
+ '<diagonal />'+
+ '</border>'+
+ '</borders>'+
+ '<cellStyleXfs count="1">'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" />'+
+ '</cellStyleXfs>'+
+ '<cellXfs count="68">'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="1" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/>'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
+ '<alignment horizontal="left"/>'+
+ '</xf>'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
+ '<alignment horizontal="center"/>'+
+ '</xf>'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
+ '<alignment horizontal="right"/>'+
+ '</xf>'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
+ '<alignment horizontal="fill"/>'+
+ '</xf>'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
+ '<alignment textRotation="90"/>'+
+ '</xf>'+
+ '<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1">'+
+ '<alignment wrapText="1"/>'+
+ '</xf>'+
+ '<xf numFmtId="9" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="1" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="2" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '<xf numFmtId="14" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
+ '</cellXfs>'+
+ '<cellStyles count="1">'+
+ '<cellStyle name="Normal" xfId="0" builtinId="0" />'+
+ '</cellStyles>'+
+ '<dxfs count="0" />'+
+ '<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4" />'+
+ '</styleSheet>'
+};
+// Note we could use 3 `for` loops for the styles, but when gzipped there is
+// virtually no difference in size, since the above can be easily compressed
+
+// Pattern matching for special number formats. Perhaps this should be exposed
+// via an API in future?
+// Ref: section 3.8.30 - built in formatters in open spreadsheet
+// https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf
+var _excelSpecials = [
+ { match: /^\-?\d+\.\d%$/, style: 60, fmt: function (d) { return d/100; } }, // Percent with d.p.
+ { match: /^\-?\d+\.?\d*%$/, style: 56, fmt: function (d) { return d/100; } }, // Percent
+ { match: /^\-?\$[\d,]+.?\d*$/, style: 57 }, // Dollars
+ { match: /^\-?£[\d,]+.?\d*$/, style: 58 }, // Pounds
+ { match: /^\-?€[\d,]+.?\d*$/, style: 59 }, // Euros
+ { match: /^\-?\d+$/, style: 65 }, // Numbers without thousand separators
+ { match: /^\-?\d+\.\d{2}$/, style: 66 }, // Numbers 2 d.p. without thousands separators
+ { match: /^\([\d,]+\)$/, style: 61, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets
+ { match: /^\([\d,]+\.\d{2}\)$/, style: 62, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets - 2d.p.
+ { match: /^\-?[\d,]+$/, style: 63 }, // Numbers with thousand separators
+ { match: /^\-?[\d,]+\.\d{2}$/, style: 64 },
+ { match: /^[\d]{4}\-[01][\d]\-[0123][\d]$/, style: 67, fmt: function (d) {return Math.round(25569 + (Date.parse(d) / (86400 * 1000)));}} //Date yyyy-mm-dd
+];
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Buttons
+ */
+
+//
+// Copy to clipboard
+//
+DataTable.ext.buttons.copyHtml5 = {
+ className: 'buttons-copy buttons-html5',
+
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.copy', 'Copy' );
+ },
+
+ action: function ( e, dt, button, config ) {
+ this.processing( true );
+
+ var that = this;
+ var exportData = _exportData( dt, config );
+ var info = dt.buttons.exportInfo( config );
+ var newline = _newLine(config);
+ var output = exportData.str;
+ var hiddenDiv = $('<div/>')
+ .css( {
+ height: 1,
+ width: 1,
+ overflow: 'hidden',
+ position: 'fixed',
+ top: 0,
+ left: 0
+ } );
+
+ if ( info.title ) {
+ output = info.title + newline + newline + output;
+ }
+
+ if ( info.messageTop ) {
+ output = info.messageTop + newline + newline + output;
+ }
+
+ if ( info.messageBottom ) {
+ output = output + newline + newline + info.messageBottom;
+ }
+
+ if ( config.customize ) {
+ output = config.customize( output, config, dt );
+ }
+
+ var textarea = $('<textarea readonly/>')
+ .val( output )
+ .appendTo( hiddenDiv );
+
+ // For browsers that support the copy execCommand, try to use it
+ if ( document.queryCommandSupported('copy') ) {
+ hiddenDiv.appendTo( dt.table().container() );
+ textarea[0].focus();
+ textarea[0].select();
+
+ try {
+ var successful = document.execCommand( 'copy' );
+ hiddenDiv.remove();
+
+ if (successful) {
+ dt.buttons.info(
+ dt.i18n( 'buttons.copyTitle', 'Copy to clipboard' ),
+ dt.i18n( 'buttons.copySuccess', {
+ 1: 'Copied one row to clipboard',
+ _: 'Copied %d rows to clipboard'
+ }, exportData.rows ),
+ 2000
+ );
+
+ this.processing( false );
+ return;
+ }
+ }
+ catch (t) {}
+ }
+
+ // Otherwise we show the text box and instruct the user to use it
+ var message = $('<span>'+dt.i18n( 'buttons.copyKeys',
+ 'Press <i>ctrl</i> or <i>\u2318</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>'+
+ 'To cancel, click this message or press escape.' )+'</span>'
+ )
+ .append( hiddenDiv );
+
+ dt.buttons.info( dt.i18n( 'buttons.copyTitle', 'Copy to clipboard' ), message, 0 );
+
+ // Select the text so when the user activates their system clipboard
+ // it will copy that text
+ textarea[0].focus();
+ textarea[0].select();
+
+ // Event to hide the message when the user is done
+ var container = $(message).closest('.dt-button-info');
+ var close = function () {
+ container.off( 'click.buttons-copy' );
+ $(document).off( '.buttons-copy' );
+ dt.buttons.info( false );
+ };
+
+ container.on( 'click.buttons-copy', close );
+ $(document)
+ .on( 'keydown.buttons-copy', function (e) {
+ if ( e.keyCode === 27 ) { // esc
+ close();
+ that.processing( false );
+ }
+ } )
+ .on( 'copy.buttons-copy cut.buttons-copy', function () {
+ close();
+ that.processing( false );
+ } );
+ },
+
+ exportOptions: {},
+
+ fieldSeparator: '\t',
+
+ fieldBoundary: '',
+
+ header: true,
+
+ footer: false,
+
+ title: '*',
+
+ messageTop: '*',
+
+ messageBottom: '*'
+};
+
+//
+// CSV export
+//
+DataTable.ext.buttons.csvHtml5 = {
+ bom: false,
+
+ className: 'buttons-csv buttons-html5',
+
+ available: function () {
+ return window.FileReader !== undefined && window.Blob;
+ },
+
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.csv', 'CSV' );
+ },
+
+ action: function ( e, dt, button, config ) {
+ this.processing( true );
+
+ // Set the text
+ var output = _exportData( dt, config ).str;
+ var info = dt.buttons.exportInfo(config);
+ var charset = config.charset;
+
+ if ( config.customize ) {
+ output = config.customize( output, config, dt );
+ }
+
+ if ( charset !== false ) {
+ if ( ! charset ) {
+ charset = document.characterSet || document.charset;
+ }
+
+ if ( charset ) {
+ charset = ';charset='+charset;
+ }
+ }
+ else {
+ charset = '';
+ }
+
+ if ( config.bom ) {
+ output = String.fromCharCode(0xFEFF) + output;
+ }
+
+ _saveAs(
+ new Blob( [output], {type: 'text/csv'+charset} ),
+ info.filename,
+ true
+ );
+
+ this.processing( false );
+ },
+
+ filename: '*',
+
+ extension: '.csv',
+
+ exportOptions: {},
+
+ fieldSeparator: ',',
+
+ fieldBoundary: '"',
+
+ escapeChar: '"',
+
+ charset: null,
+
+ header: true,
+
+ footer: false
+};
+
+//
+// Excel (xlsx) export
+//
+DataTable.ext.buttons.excelHtml5 = {
+ className: 'buttons-excel buttons-html5',
+
+ available: function () {
+ return window.FileReader !== undefined && _jsZip() !== undefined && ! _isDuffSafari() && _serialiser;
+ },
+
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.excel', 'Excel' );
+ },
+
+ action: function ( e, dt, button, config ) {
+ this.processing( true );
+
+ var that = this;
+ var rowPos = 0;
+ var dataStartRow, dataEndRow;
+ var getXml = function ( type ) {
+ var str = excelStrings[ type ];
+
+ //str = str.replace( /xmlns:/g, 'xmlns_' ).replace( /mc:/g, 'mc_' );
+
+ return $.parseXML( str );
+ };
+ var rels = getXml('xl/worksheets/sheet1.xml');
+ var relsGet = rels.getElementsByTagName( "sheetData" )[0];
+
+ var xlsx = {
+ _rels: {
+ ".rels": getXml('_rels/.rels')
+ },
+ xl: {
+ _rels: {
+ "workbook.xml.rels": getXml('xl/_rels/workbook.xml.rels')
+ },
+ "workbook.xml": getXml('xl/workbook.xml'),
+ "styles.xml": getXml('xl/styles.xml'),
+ "worksheets": {
+ "sheet1.xml": rels
+ }
+
+ },
+ "[Content_Types].xml": getXml('[Content_Types].xml')
+ };
+
+ var data = dt.buttons.exportData( config.exportOptions );
+ var currentRow, rowNode;
+ var addRow = function ( row ) {
+ currentRow = rowPos+1;
+ rowNode = _createNode( rels, "row", { attr: {r:currentRow} } );
+
+ for ( var i=0, ien=row.length ; i<ien ; i++ ) {
+ // Concat both the Cell Columns as a letter and the Row of the cell.
+ var cellId = createCellPos(i) + '' + currentRow;
+ var cell = null;
+
+ // For null, undefined of blank cell, continue so it doesn't create the _createNode
+ if ( row[i] === null || row[i] === undefined || row[i] === '' ) {
+ if ( config.createEmptyCells === true ) {
+ row[i] = '';
+ }
+ else {
+ continue;
+ }
+ }
+
+ var originalContent = row[i];
+ row[i] = typeof row[i].trim === 'function'
+ ? row[i].trim()
+ : row[i];
+
+ // Special number formatting options
+ for ( var j=0, jen=_excelSpecials.length ; j<jen ; j++ ) {
+ var special = _excelSpecials[j];
+
+ // TODO Need to provide the ability for the specials to say
+ // if they are returning a string, since at the moment it is
+ // assumed to be a number
+ if ( row[i].match && ! row[i].match(/^0\d+/) && row[i].match( special.match ) ) {
+ var val = row[i].replace(/[^\d\.\-]/g, '');
+
+ if ( special.fmt ) {
+ val = special.fmt( val );
+ }
+
+ cell = _createNode( rels, 'c', {
+ attr: {
+ r: cellId,
+ s: special.style
+ },
+ children: [
+ _createNode( rels, 'v', { text: val } )
+ ]
+ } );
+
+ break;
+ }
+ }
+
+ if ( ! cell ) {
+ if ( typeof row[i] === 'number' || (
+ row[i].match &&
+ row[i].match(/^-?\d+(\.\d+)?([eE]\-?\d+)?$/) && // Includes exponential format
+ ! row[i].match(/^0\d+/) )
+ ) {
+ // Detect numbers - don't match numbers with leading zeros
+ // or a negative anywhere but the start
+ cell = _createNode( rels, 'c', {
+ attr: {
+ t: 'n',
+ r: cellId
+ },
+ children: [
+ _createNode( rels, 'v', { text: row[i] } )
+ ]
+ } );
+ }
+ else {
+ // String output - replace non standard characters for text output
+ var text = ! originalContent.replace ?
+ originalContent :
+ originalContent.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');
+
+ cell = _createNode( rels, 'c', {
+ attr: {
+ t: 'inlineStr',
+ r: cellId
+ },
+ children:{
+ row: _createNode( rels, 'is', {
+ children: {
+ row: _createNode( rels, 't', {
+ text: text,
+ attr: {
+ 'xml:space': 'preserve'
+ }
+ } )
+ }
+ } )
+ }
+ } );
+ }
+ }
+
+ rowNode.appendChild( cell );
+ }
+
+ relsGet.appendChild(rowNode);
+ rowPos++;
+ };
+
+ if ( config.customizeData ) {
+ config.customizeData( data );
+ }
+
+ var mergeCells = function ( row, colspan ) {
+ var mergeCells = $('mergeCells', rels);
+
+ mergeCells[0].appendChild( _createNode( rels, 'mergeCell', {
+ attr: {
+ ref: 'A'+row+':'+createCellPos(colspan)+row
+ }
+ } ) );
+ mergeCells.attr( 'count', parseFloat(mergeCells.attr( 'count' ))+1 );
+ $('row:eq('+(row-1)+') c', rels).attr( 's', '51' ); // centre
+ };
+
+ // Title and top messages
+ var exportInfo = dt.buttons.exportInfo( config );
+ if ( exportInfo.title ) {
+ addRow( [exportInfo.title], rowPos );
+ mergeCells( rowPos, data.header.length-1 );
+ }
+
+ if ( exportInfo.messageTop ) {
+ addRow( [exportInfo.messageTop], rowPos );
+ mergeCells( rowPos, data.header.length-1 );
+ }
+
+
+ // Table itself
+ if ( config.header ) {
+ addRow( data.header, rowPos );
+ $('row:last c', rels).attr( 's', '2' ); // bold
+ }
+
+ dataStartRow = rowPos;
+
+ for ( var n=0, ie=data.body.length ; n<ie ; n++ ) {
+ addRow( data.body[n], rowPos );
+ }
+
+ dataEndRow = rowPos;
+
+ if ( config.footer && data.footer ) {
+ addRow( data.footer, rowPos);
+ $('row:last c', rels).attr( 's', '2' ); // bold
+ }
+
+ // Below the table
+ if ( exportInfo.messageBottom ) {
+ addRow( [exportInfo.messageBottom], rowPos );
+ mergeCells( rowPos, data.header.length-1 );
+ }
+
+ // Set column widths
+ var cols = _createNode( rels, 'cols' );
+ $('worksheet', rels).prepend( cols );
+
+ for ( var i=0, ien=data.header.length ; i<ien ; i++ ) {
+ cols.appendChild( _createNode( rels, 'col', {
+ attr: {
+ min: i+1,
+ max: i+1,
+ width: _excelColWidth( data, i ),
+ customWidth: 1
+ }
+ } ) );
+ }
+
+ // Workbook modifications
+ var workbook = xlsx.xl['workbook.xml'];
+
+ $( 'sheets sheet', workbook ).attr( 'name', _sheetname( config ) );
+
+ // Auto filter for columns
+ if ( config.autoFilter ) {
+ $('mergeCells', rels).before( _createNode( rels, 'autoFilter', {
+ attr: {
+ ref: 'A'+dataStartRow+':'+createCellPos(data.header.length-1)+dataEndRow
+ }
+ } ) );
+
+ $('definedNames', workbook).append( _createNode( workbook, 'definedName', {
+ attr: {
+ name: '_xlnm._FilterDatabase',
+ localSheetId: '0',
+ hidden: 1
+ },
+ text: _sheetname(config)+'!$A$'+dataStartRow+':'+createCellPos(data.header.length-1)+dataEndRow
+ } ) );
+ }
+
+ // Let the developer customise the document if they want to
+ if ( config.customize ) {
+ config.customize( xlsx, config, dt );
+ }
+
+ // Excel doesn't like an empty mergeCells tag
+ if ( $('mergeCells', rels).children().length === 0 ) {
+ $('mergeCells', rels).remove();
+ }
+
+ var jszip = _jsZip();
+ var zip = new jszip();
+ var zipConfig = {
+ compression: "DEFLATE",
+ type: 'blob',
+ mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ };
+
+ _addToZip( zip, xlsx );
+
+ // Modern Excel has a 218 character limit on the file name + path of the file (why!?)
+ // https://support.microsoft.com/en-us/office/excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3
+ // So we truncate to allow for this.
+ var filename = exportInfo.filename;
+
+ if (filename > 175) {
+ filename = filename.substr(0, 175);
+ }
+
+ if ( zip.generateAsync ) {
+ // JSZip 3+
+ zip
+ .generateAsync( zipConfig )
+ .then( function ( blob ) {
+ _saveAs( blob, filename );
+ that.processing( false );
+ } );
+ }
+ else {
+ // JSZip 2.5
+ _saveAs(
+ zip.generate( zipConfig ),
+ filename
+ );
+ this.processing( false );
+ }
+ },
+
+ filename: '*',
+
+ extension: '.xlsx',
+
+ exportOptions: {},
+
+ header: true,
+
+ footer: false,
+
+ title: '*',
+
+ messageTop: '*',
+
+ messageBottom: '*',
+
+ createEmptyCells: false,
+
+ autoFilter: false,
+
+ sheetName: ''
+};
+
+//
+// PDF export - using pdfMake - http://pdfmake.org
+//
+DataTable.ext.buttons.pdfHtml5 = {
+ className: 'buttons-pdf buttons-html5',
+
+ available: function () {
+ return window.FileReader !== undefined && _pdfMake();
+ },
+
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.pdf', 'PDF' );
+ },
+
+ action: function ( e, dt, button, config ) {
+ this.processing( true );
+
+ var that = this;
+ var data = dt.buttons.exportData( config.exportOptions );
+ var info = dt.buttons.exportInfo( config );
+ var rows = [];
+
+ if ( config.header ) {
+ rows.push( $.map( data.header, function ( d ) {
+ return {
+ text: typeof d === 'string' ? d : d+'',
+ style: 'tableHeader'
+ };
+ } ) );
+ }
+
+ for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
+ rows.push( $.map( data.body[i], function ( d ) {
+ if ( d === null || d === undefined ) {
+ d = '';
+ }
+ return {
+ text: typeof d === 'string' ? d : d+'',
+ style: i % 2 ? 'tableBodyEven' : 'tableBodyOdd'
+ };
+ } ) );
+ }
+
+ if ( config.footer && data.footer) {
+ rows.push( $.map( data.footer, function ( d ) {
+ return {
+ text: typeof d === 'string' ? d : d+'',
+ style: 'tableFooter'
+ };
+ } ) );
+ }
+
+ var doc = {
+ pageSize: config.pageSize,
+ pageOrientation: config.orientation,
+ content: [
+ {
+ table: {
+ headerRows: 1,
+ body: rows
+ },
+ layout: 'noBorders'
+ }
+ ],
+ styles: {
+ tableHeader: {
+ bold: true,
+ fontSize: 11,
+ color: 'white',
+ fillColor: '#2d4154',
+ alignment: 'center'
+ },
+ tableBodyEven: {},
+ tableBodyOdd: {
+ fillColor: '#f3f3f3'
+ },
+ tableFooter: {
+ bold: true,
+ fontSize: 11,
+ color: 'white',
+ fillColor: '#2d4154'
+ },
+ title: {
+ alignment: 'center',
+ fontSize: 15
+ },
+ message: {}
+ },
+ defaultStyle: {
+ fontSize: 10
+ }
+ };
+
+ if ( info.messageTop ) {
+ doc.content.unshift( {
+ text: info.messageTop,
+ style: 'message',
+ margin: [ 0, 0, 0, 12 ]
+ } );
+ }
+
+ if ( info.messageBottom ) {
+ doc.content.push( {
+ text: info.messageBottom,
+ style: 'message',
+ margin: [ 0, 0, 0, 12 ]
+ } );
+ }
+
+ if ( info.title ) {
+ doc.content.unshift( {
+ text: info.title,
+ style: 'title',
+ margin: [ 0, 0, 0, 12 ]
+ } );
+ }
+
+ if ( config.customize ) {
+ config.customize( doc, config, dt );
+ }
+
+ var pdf = _pdfMake().createPdf( doc );
+
+ if ( config.download === 'open' && ! _isDuffSafari() ) {
+ pdf.open();
+ }
+ else {
+ pdf.download( info.filename );
+ }
+
+ this.processing( false );
+ },
+
+ title: '*',
+
+ filename: '*',
+
+ extension: '.pdf',
+
+ exportOptions: {},
+
+ orientation: 'portrait',
+
+ pageSize: 'A4',
+
+ header: true,
+
+ footer: false,
+
+ messageTop: '*',
+
+ messageBottom: '*',
+
+ customize: null,
+
+ download: 'download'
+};
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.min.js
new file mode 100644
index 0000000..28d5b8c
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.html5.min.js
@@ -0,0 +1,8 @@
+/*!
+ * HTML5 export buttons for Buttons and DataTables.
+ * 2016 SpryMedia Ltd - datatables.net/license
+ *
+ * FileSaver.js (1.3.3) - MIT license
+ * Copyright © 2016 Eli Grey - http://eligrey.com
+ */
+!function(n){var r,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(t){return n(t,window,document)}):"object"==typeof exports?(r=require("jquery"),a=function(t,e){e.fn.dataTable||require("datatables.net")(t,e),e.fn.dataTable.Buttons||require("datatables.net-buttons")(t,e)},"undefined"!=typeof window?module.exports=function(t,e,o,l){return t=t||window,e=e||r(t),a(t,e),n(e,t,t.document)}:(a(window,r),module.exports=n(r,window,window.document))):n(jQuery,window,document)}(function(C,T,y,t,e,k){"use strict";var o,l,n=C.fn.dataTable;function S(){return o||T.JSZip}function s(){return l||T.pdfMake}n.Buttons.pdfMake=function(t){if(!t)return s();l=t},n.Buttons.jszip=function(t){if(!t)return S();o=t};function N(t){var e="Sheet1";return e=t.sheetName?t.sheetName.replace(/[\[\]\*\/\\\?\:]/g,""):e}function u(t,e){for(var o=c(e),l=t.buttons.exportData(e.exportOptions),n=e.fieldBoundary,r=e.fieldSeparator,a=new RegExp(n,"g"),d=e.escapeChar!==k?e.escapeChar:"\\",p=function(t){for(var e="",o=0,l=t.length;o<l;o++)0<o&&(e+=r),e+=n?n+(""+t[o]).replace(a,d+n)+n:t[o];return e},t=e.header?p(l.header)+o:"",e=e.footer&&l.footer?o+p(l.footer):"",i=[],s=0,f=l.body.length;s<f;s++)i.push(p(l.body[s]));return{str:t+i.join(o)+e,rows:i.length}}function f(){var t;return-1!==navigator.userAgent.indexOf("Safari")&&-1===navigator.userAgent.indexOf("Chrome")&&-1===navigator.userAgent.indexOf("Opera")&&!!((t=navigator.userAgent.match(/AppleWebKit\/(\d+\.\d+)/))&&1<t.length&&+t[1]<603.1)}var O=function(d){var p,i,s,f,m,y,e,u,c,l,t;if(!(void 0===d||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent)))return t=d.document,p=function(){return d.URL||d.webkitURL||d},i=t.createElementNS("http://www.w3.org/1999/xhtml","a"),s="download"in i,f=/constructor/i.test(d.HTMLElement)||d.safari,m=/CriOS\/[\d]+/.test(navigator.userAgent),y=function(t){(d.setImmediate||d.setTimeout)(function(){throw t},0)},e=4e4,u=function(t){setTimeout(function(){"string"==typeof t?p().revokeObjectURL(t):t.remove()},e)},c=function(t){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t},t=(l=function(t,o,e){e||(t=c(t));var l,n,r=this,e="application/octet-stream"===t.type,a=function(){for(var t=r,e="writestart progress write writeend".split(" "),o=void 0,l=(e=[].concat(e)).length;l--;){var n=t["on"+e[l]];if("function"==typeof n)try{n.call(t,o||t)}catch(t){y(t)}}};r.readyState=r.INIT,s?(l=p().createObjectURL(t),setTimeout(function(){var t,e;i.href=l,i.download=o,t=i,e=new MouseEvent("click"),t.dispatchEvent(e),a(),u(l),r.readyState=r.DONE})):(m||e&&f)&&d.FileReader?((n=new FileReader).onloadend=function(){var t=m?n.result:n.result.replace(/^data:[^;]*;/,"data:attachment/file;");d.open(t,"_blank")||(d.location.href=t),r.readyState=r.DONE,a()},n.readAsDataURL(t),r.readyState=r.INIT):(l=l||p().createObjectURL(t),!e&&d.open(l,"_blank")||(d.location.href=l),r.readyState=r.DONE,a(),u(l))}).prototype,"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(t,e,o){return e=e||t.name||"download",o||(t=c(t)),navigator.msSaveOrOpenBlob(t,e)}:(t.abort=function(){},t.readyState=t.INIT=0,t.WRITING=1,t.DONE=2,t.error=t.onwritestart=t.onprogress=t.onwrite=t.onabort=t.onerror=t.onwriteend=null,function(t,e,o){return new l(t,e||t.name||"download",o)})}("undefined"!=typeof self&&self||void 0!==T&&T||this.content),c=(n.fileSave=O,function(t){return t.newline||(navigator.userAgent.match(/Windows/)?"\r\n":"\n")});function z(t){for(var e="A".charCodeAt(0),o="Z".charCodeAt(0)-e+1,l="";0<=t;)l=String.fromCharCode(t%o+e)+l,t=Math.floor(t/o)-1;return l}try{var D,A=new XMLSerializer}catch(t){}function E(t,e,o){var l=t.createElement(e);return o&&(o.attr&&C(l).attr(o.attr),o.children&&C.each(o.children,function(t,e){l.appendChild(e)}),null!==o.text)&&o.text!==k&&l.appendChild(t.createTextNode(o.text)),l}var _={"_rels/.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',"xl/_rels/workbook.xml.rels":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>',"[Content_Types].xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="xml" ContentType="application/xml" /><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /><Default Extension="jpeg" ContentType="image/jpeg" /><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" /><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" /><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" /></Types>',"xl/workbook.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="5" lowestEdited="5" rupBuild="24816"/><workbookPr showInkAnnotation="0" autoCompressPictures="0"/><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="25600" windowHeight="19020" tabRatio="500"/></bookViews><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets><definedNames/></workbook>',"xl/worksheets/sheet1.xml":'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><sheetData/><mergeCells count="0"/></worksheet>',"xl/styles.xml":'<?xml version="1.0" encoding="UTF-8"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><numFmts count="6"><numFmt numFmtId="164" formatCode="#,##0.00_- [$$-45C]"/><numFmt numFmtId="165" formatCode="&quot;£&quot;#,##0.00"/><numFmt numFmtId="166" formatCode="[$€-2] #,##0.00"/><numFmt numFmtId="167" formatCode="0.0%"/><numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/><numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/></numFmts><fonts count="5" x14ac:knownFonts="1"><font><sz val="11" /><name val="Calibri" /></font><font><sz val="11" /><name val="Calibri" /><color rgb="FFFFFFFF" /></font><font><sz val="11" /><name val="Calibri" /><b /></font><font><sz val="11" /><name val="Calibri" /><i /></font><font><sz val="11" /><name val="Calibri" /><u /></font></fonts><fills count="6"><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="none" /></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD9D9D9" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFD99795" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6efce" /><bgColor indexed="64" /></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="ffc6cfef" /><bgColor indexed="64" /></patternFill></fill></fills><borders count="2"><border><left /><right /><top /><bottom /><diagonal /></border><border diagonalUp="false" diagonalDown="false"><left style="thin"><color auto="1" /></left><right style="thin"><color auto="1" /></right><top style="thin"><color auto="1" /></top><bottom style="thin"><color auto="1" /></bottom><diagonal /></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" /></cellStyleXfs><cellXfs count="68"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="0" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="0" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="2" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="3" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="4" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="1" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="2" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="3" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="4" fillId="5" borderId="1" applyFont="1" applyFill="1" applyBorder="1"/><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="left"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="center"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="right"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment horizontal="fill"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment textRotation="90"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyAlignment="1"><alignment wrapText="1"/></xf><xf numFmtId="9" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="165" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="166" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="167" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="168" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="169" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="3" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="4" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="1" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="2" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/><xf numFmtId="14" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0" /></cellStyles><dxfs count="0" /><tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4" /></styleSheet>'},R=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(t){return t/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(t){return t/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\-?\d+$/,style:65},{match:/^\-?\d+\.\d{2}$/,style:66},{match:/^\([\d,]+\)$/,style:61,fmt:function(t){return-1*t.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(t){return-1*t.replace(/[\(\)]/g,"")}},{match:/^\-?[\d,]+$/,style:63},{match:/^\-?[\d,]+\.\d{2}$/,style:64},{match:/^[\d]{4}\-[01][\d]\-[0123][\d]$/,style:67,fmt:function(t){return Math.round(25569+Date.parse(t)/864e5)}}];return n.ext.buttons.copyHtml5={className:"buttons-copy buttons-html5",text:function(t){return t.i18n("buttons.copy","Copy")},action:function(t,e,o,l){this.processing(!0);var n=this,r=u(e,l),a=e.buttons.exportInfo(l),d=c(l),p=r.str,i=C("<div/>").css({height:1,width:1,overflow:"hidden",position:"fixed",top:0,left:0}),d=(a.title&&(p=a.title+d+d+p),a.messageTop&&(p=a.messageTop+d+d+p),a.messageBottom&&(p=p+d+d+a.messageBottom),l.customize&&(p=l.customize(p,l,e)),C("<textarea readonly/>").val(p).appendTo(i));if(y.queryCommandSupported("copy")){i.appendTo(e.table().container()),d[0].focus(),d[0].select();try{var s=y.execCommand("copy");if(i.remove(),s)return e.buttons.info(e.i18n("buttons.copyTitle","Copy to clipboard"),e.i18n("buttons.copySuccess",{1:"Copied one row to clipboard",_:"Copied %d rows to clipboard"},r.rows),2e3),void this.processing(!1)}catch(t){}}function f(){m.off("click.buttons-copy"),C(y).off(".buttons-copy"),e.buttons.info(!1)}var a=C("<span>"+e.i18n("buttons.copyKeys","Press <i>ctrl</i> or <i>⌘</i> + <i>C</i> to copy the table data<br>to your system clipboard.<br><br>To cancel, click this message or press escape.")+"</span>").append(i),m=(e.buttons.info(e.i18n("buttons.copyTitle","Copy to clipboard"),a,0),d[0].focus(),d[0].select(),C(a).closest(".dt-button-info"));m.on("click.buttons-copy",f),C(y).on("keydown.buttons-copy",function(t){27===t.keyCode&&(f(),n.processing(!1))}).on("copy.buttons-copy cut.buttons-copy",function(){f(),n.processing(!1)})},exportOptions:{},fieldSeparator:"\t",fieldBoundary:"",header:!0,footer:!1,title:"*",messageTop:"*",messageBottom:"*"},n.ext.buttons.csvHtml5={bom:!1,className:"buttons-csv buttons-html5",available:function(){return T.FileReader!==k&&T.Blob},text:function(t){return t.i18n("buttons.csv","CSV")},action:function(t,e,o,l){this.processing(!0);var n=u(e,l).str,r=e.buttons.exportInfo(l),a=l.charset;l.customize&&(n=l.customize(n,l,e)),a=!1!==a?(a=a||y.characterSet||y.charset)&&";charset="+a:"",l.bom&&(n=String.fromCharCode(65279)+n),O(new Blob([n],{type:"text/csv"+a}),r.filename,!0),this.processing(!1)},filename:"*",extension:".csv",exportOptions:{},fieldSeparator:",",fieldBoundary:'"',escapeChar:'"',charset:null,header:!0,footer:!1},n.ext.buttons.excelHtml5={className:"buttons-excel buttons-html5",available:function(){return T.FileReader!==k&&S()!==k&&!f()&&A},text:function(t){return t.i18n("buttons.excel","Excel")},action:function(t,e,o,s){this.processing(!0);function l(t){return t=_[t],C.parseXML(t)}function n(t){m=E(u,"row",{attr:{r:f=y+1}});for(var e=0,o=t.length;e<o;e++){var l=z(e)+""+f,n=null;if(null===t[e]||t[e]===k||""===t[e]){if(!0!==s.createEmptyCells)continue;t[e]=""}var r=t[e];t[e]="function"==typeof t[e].trim?t[e].trim():t[e];for(var a=0,d=R.length;a<d;a++){var p=R[a];if(t[e].match&&!t[e].match(/^0\d+/)&&t[e].match(p.match)){var i=t[e].replace(/[^\d\.\-]/g,"");p.fmt&&(i=p.fmt(i)),n=E(u,"c",{attr:{r:l,s:p.style},children:[E(u,"v",{text:i})]});break}}n=n||("number"==typeof t[e]||t[e].match&&t[e].match(/^-?\d+(\.\d+)?([eE]\-?\d+)?$/)&&!t[e].match(/^0\d+/)?E(u,"c",{attr:{t:"n",r:l},children:[E(u,"v",{text:t[e]})]}):(r=r.replace?r.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g,""):r,E(u,"c",{attr:{t:"inlineStr",r:l},children:{row:E(u,"is",{children:{row:E(u,"t",{text:r,attr:{"xml:space":"preserve"}})}})}}))),m.appendChild(n)}c.appendChild(m),y++}function r(t,e){var o=C("mergeCells",u);o[0].appendChild(E(u,"mergeCell",{attr:{ref:"A"+t+":"+z(e)+t}})),o.attr("count",parseFloat(o.attr("count"))+1),C("row:eq("+(t-1)+") c",u).attr("s","51")}var a,f,m,d=this,y=0,u=l("xl/worksheets/sheet1.xml"),c=u.getElementsByTagName("sheetData")[0],p={_rels:{".rels":l("_rels/.rels")},xl:{_rels:{"workbook.xml.rels":l("xl/_rels/workbook.xml.rels")},"workbook.xml":l("xl/workbook.xml"),"styles.xml":l("xl/styles.xml"),worksheets:{"sheet1.xml":u}},"[Content_Types].xml":l("[Content_Types].xml")},i=e.buttons.exportData(s.exportOptions),I=(s.customizeData&&s.customizeData(i),e.buttons.exportInfo(s));I.title&&(n([I.title]),r(y,i.header.length-1)),I.messageTop&&(n([I.messageTop]),r(y,i.header.length-1)),s.header&&(n(i.header),C("row:last c",u).attr("s","2"));for(var F=y,x=0,h=i.body.length;x<h;x++)n(i.body[x]);a=y,s.footer&&i.footer&&(n(i.footer),C("row:last c",u).attr("s","2")),I.messageBottom&&(n([I.messageBottom]),r(y,i.header.length-1));var b=E(u,"cols");C("worksheet",u).prepend(b);for(var g=0,v=i.header.length;g<v;g++)b.appendChild(E(u,"col",{attr:{min:g+1,max:g+1,width:function(t,e){var o=t.header[e].length;t.footer&&t.footer[e].length>o&&(o=t.footer[e].length);for(var l=0,n=t.body.length;l<n;l++){var r,a=t.body[l][e];if(40<(o=o<(r=(-1!==(a=null!==a&&a!==k?a.toString():"").indexOf("\n")?((r=a.split("\n")).sort(function(t,e){return e.length-t.length}),r[0]):a).length)?r:o))return 54}return 6<(o*=1.35)?o:6}(i,g),customWidth:1}}));var w=p.xl["workbook.xml"];C("sheets sheet",w).attr("name",N(s)),s.autoFilter&&(C("mergeCells",u).before(E(u,"autoFilter",{attr:{ref:"A"+F+":"+z(i.header.length-1)+a}})),C("definedNames",w).append(E(w,"definedName",{attr:{name:"_xlnm._FilterDatabase",localSheetId:"0",hidden:1},text:N(s)+"!$A$"+F+":"+z(i.header.length-1)+a}))),s.customize&&s.customize(p,s,e),0===C("mergeCells",u).children().length&&C("mergeCells",u).remove();var w=new(S()),F={compression:"DEFLATE",type:"blob",mimeType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},B=(!function s(f,t){D===k&&(D=-1===A.serializeToString((new T.DOMParser).parseFromString(_["xl/worksheets/sheet1.xml"],"text/xml")).indexOf("xmlns:r")),C.each(t,function(t,e){if(C.isPlainObject(e))s(f.folder(t),e);else{if(D){for(var o,l=e.childNodes[0],n=[],r=l.attributes.length-1;0<=r;r--){var a=l.attributes[r].nodeName,d=l.attributes[r].nodeValue;-1!==a.indexOf(":")&&(n.push({name:a,value:d}),l.removeAttribute(a))}for(r=0,o=n.length;r<o;r++){var p=e.createAttribute(n[r].name.replace(":","_dt_b_namespace_token_"));p.value=n[r].value,l.setAttributeNode(p)}}var i=A.serializeToString(e),i=(i=D?(i=(i=-1===i.indexOf("<?xml")?'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+i:i).replace(/_dt_b_namespace_token_/g,":")).replace(/xmlns:NS[\d]+="" NS[\d]+:/g,""):i).replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g,"<$1 $2>");f.file(t,i)}})}(w,p),I.filename);175<B&&(B=B.substr(0,175)),w.generateAsync?w.generateAsync(F).then(function(t){O(t,B),d.processing(!1)}):(O(w.generate(F),B),this.processing(!1))},filename:"*",extension:".xlsx",exportOptions:{},header:!0,footer:!1,title:"*",messageTop:"*",messageBottom:"*",createEmptyCells:!1,autoFilter:!1,sheetName:""},n.ext.buttons.pdfHtml5={className:"buttons-pdf buttons-html5",available:function(){return T.FileReader!==k&&s()},text:function(t){return t.i18n("buttons.pdf","PDF")},action:function(t,e,o,l){this.processing(!0);var n=e.buttons.exportData(l.exportOptions),r=e.buttons.exportInfo(l),a=[];l.header&&a.push(C.map(n.header,function(t){return{text:"string"==typeof t?t:t+"",style:"tableHeader"}}));for(var d=0,p=n.body.length;d<p;d++)a.push(C.map(n.body[d],function(t){return{text:"string"==typeof(t=null!==t&&t!==k?t:"")?t:t+"",style:d%2?"tableBodyEven":"tableBodyOdd"}}));l.footer&&n.footer&&a.push(C.map(n.footer,function(t){return{text:"string"==typeof t?t:t+"",style:"tableFooter"}}));var i={pageSize:l.pageSize,pageOrientation:l.orientation,content:[{table:{headerRows:1,body:a},layout:"noBorders"}],styles:{tableHeader:{bold:!0,fontSize:11,color:"white",fillColor:"#2d4154",alignment:"center"},tableBodyEven:{},tableBodyOdd:{fillColor:"#f3f3f3"},tableFooter:{bold:!0,fontSize:11,color:"white",fillColor:"#2d4154"},title:{alignment:"center",fontSize:15},message:{}},defaultStyle:{fontSize:10}},e=(r.messageTop&&i.content.unshift({text:r.messageTop,style:"message",margin:[0,0,0,12]}),r.messageBottom&&i.content.push({text:r.messageBottom,style:"message",margin:[0,0,0,12]}),r.title&&i.content.unshift({text:r.title,style:"title",margin:[0,0,0,12]}),l.customize&&l.customize(i,l,e),s().createPdf(i));"open"!==l.download||f()?e.download(r.filename):e.open(),this.processing(!1)},title:"*",filename:"*",extension:".pdf",exportOptions:{},orientation:"portrait",pageSize:"A4",header:!0,footer:!1,messageTop:"*",messageBottom:"*",customize:null,download:"download"},n}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.js
new file mode 100644
index 0000000..2f00a13
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.js
@@ -0,0 +1,92 @@
+/*! jQuery UI integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-jqui', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-jqui')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+$.extend( true, DataTable.Buttons.defaults, {
+ dom: {
+ container: {
+ className: 'dt-buttons ui-buttonset'
+ },
+ button: {
+ className: 'dt-button ui-button ui-state-default ui-button-text-only',
+ disabled: 'ui-state-disabled',
+ active: 'ui-state-active'
+ },
+ buttonLiner: {
+ tag: 'span',
+ className: 'ui-button-text'
+ },
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper dt-btn-split-wrapper ui-widget ui-controlgroup-item ui-corner-left',
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '&#x25BC;',
+ className: 'dt-btn-split-drop ui-selectmenu-button demo-splitbutton-select ui-button ui-widget ui-controlgroup-item ui-selectmenu-button-closed ui-corner-right',
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button ui-button'
+ }
+ }
+} );
+
+DataTable.ext.buttons.collection.text = function ( dt ) {
+ return dt.i18n('buttons.collection', 'Collection <span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"/>');
+};
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.min.js
new file mode 100644
index 0000000..41fb866
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.jqueryui.min.js
@@ -0,0 +1,4 @@
+/*! jQuery UI integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(n){var o,u;"function"==typeof define&&define.amd?define(["jquery","datatables.net-jqui","datatables.net-buttons"],function(t){return n(t,window,document)}):"object"==typeof exports?(o=require("jquery"),u=function(t,e){e.fn.dataTable||require("datatables.net-jqui")(t,e),e.fn.dataTable.Buttons||require("datatables.net-buttons")(t,e)},"undefined"!=typeof window?module.exports=function(t,e){return t=t||window,e=e||o(t),u(t,e),n(e,0,t.document)}:(u(window,o),module.exports=n(o,window,window.document))):n(jQuery,window,document)}(function(t,e,n,o){"use strict";var u=t.fn.dataTable;return t.extend(!0,u.Buttons.defaults,{dom:{container:{className:"dt-buttons ui-buttonset"},button:{className:"dt-button ui-button ui-state-default ui-button-text-only",disabled:"ui-state-disabled",active:"ui-state-active"},buttonLiner:{tag:"span",className:"ui-button-text"},splitWrapper:{tag:"div",className:"dt-btn-split-wrapper dt-btn-split-wrapper ui-widget ui-controlgroup-item ui-corner-left"},splitDropdown:{tag:"button",text:"&#x25BC;",className:"dt-btn-split-drop ui-selectmenu-button demo-splitbutton-select ui-button ui-widget ui-controlgroup-item ui-selectmenu-button-closed ui-corner-right"},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button ui-button"}}}),u.ext.buttons.collection.text=function(t){return t.i18n("buttons.collection",'Collection <span class="ui-button-icon-primary ui-icon ui-icon-triangle-1-s"/>')},u}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.js
new file mode 100644
index 0000000..73b3ecd
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.js
@@ -0,0 +1,238 @@
+/*!
+ * Print button for Buttons and DataTables.
+ * 2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+var _link = document.createElement( 'a' );
+
+/**
+ * Clone link and style tags, taking into account the need to change the source
+ * path.
+ *
+ * @param {node} el Element to convert
+ */
+var _styleToAbs = function( el ) {
+ var url;
+ var clone = $(el).clone()[0];
+ var linkHost;
+
+ if ( clone.nodeName.toLowerCase() === 'link' ) {
+ clone.href = _relToAbs( clone.href );
+ }
+
+ return clone.outerHTML;
+};
+
+/**
+ * Convert a URL from a relative to an absolute address so it will work
+ * correctly in the popup window which has no base URL.
+ *
+ * @param {string} href URL
+ */
+var _relToAbs = function( href ) {
+ // Assign to a link on the original page so the browser will do all the
+ // hard work of figuring out where the file actually is
+ _link.href = href;
+ var linkHost = _link.host;
+
+ // IE doesn't have a trailing slash on the host
+ // Chrome has it on the pathname
+ if ( linkHost.indexOf('/') === -1 && _link.pathname.indexOf('/') !== 0) {
+ linkHost += '/';
+ }
+
+ return _link.protocol+"//"+linkHost+_link.pathname+_link.search;
+};
+
+
+DataTable.ext.buttons.print = {
+ className: 'buttons-print',
+
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.print', 'Print' );
+ },
+
+ action: function ( e, dt, button, config ) {
+ var data = dt.buttons.exportData(
+ $.extend( {decodeEntities: false}, config.exportOptions ) // XSS protection
+ );
+ var exportInfo = dt.buttons.exportInfo( config );
+ var columnClasses = dt
+ .columns( config.exportOptions.columns )
+ .flatten()
+ .map( function (idx) {
+ return dt.settings()[0].aoColumns[dt.column(idx).index()].sClass;
+ } )
+ .toArray();
+
+ var addRow = function ( d, tag ) {
+ var str = '<tr>';
+
+ for ( var i=0, ien=d.length ; i<ien ; i++ ) {
+ // null and undefined aren't useful in the print output
+ var dataOut = d[i] === null || d[i] === undefined ?
+ '' :
+ d[i];
+ var classAttr = columnClasses[i] ?
+ 'class="'+columnClasses[i]+'"' :
+ '';
+
+ str += '<'+tag+' '+classAttr+'>'+dataOut+'</'+tag+'>';
+ }
+
+ return str + '</tr>';
+ };
+
+ // Construct a table for printing
+ var html = '<table class="'+dt.table().node().className+'">';
+
+ if ( config.header ) {
+ html += '<thead>'+ addRow( data.header, 'th' ) +'</thead>';
+ }
+
+ html += '<tbody>';
+ for ( var i=0, ien=data.body.length ; i<ien ; i++ ) {
+ html += addRow( data.body[i], 'td' );
+ }
+ html += '</tbody>';
+
+ if ( config.footer && data.footer ) {
+ html += '<tfoot>'+ addRow( data.footer, 'th' ) +'</tfoot>';
+ }
+ html += '</table>';
+
+ // Open a new window for the printable table
+ var win = window.open( '', '' );
+
+ if (! win) {
+ dt.buttons.info(
+ dt.i18n( 'buttons.printErrorTitle', 'Unable to open print view' ),
+ dt.i18n( 'buttons.printErrorMsg', 'Please allow popups in your browser for this site to be able to view the print view.' ),
+ 5000
+ );
+
+ return;
+ }
+
+ win.document.close();
+
+ // Inject the title and also a copy of the style and link tags from this
+ // document so the table can retain its base styling. Note that we have
+ // to use string manipulation as IE won't allow elements to be created
+ // in the host document and then appended to the new window.
+ var head = '<title>'+exportInfo.title+'</title>';
+ $('style, link').each( function () {
+ head += _styleToAbs( this );
+ } );
+
+ try {
+ win.document.head.innerHTML = head; // Work around for Edge
+ }
+ catch (e) {
+ $(win.document.head).html( head ); // Old IE
+ }
+
+ // Inject the table and other surrounding information
+ win.document.body.innerHTML =
+ '<h1>'+exportInfo.title+'</h1>'+
+ '<div>'+(exportInfo.messageTop || '')+'</div>'+
+ html+
+ '<div>'+(exportInfo.messageBottom || '')+'</div>';
+
+ $(win.document.body).addClass('dt-print-view');
+
+ $('img', win.document.body).each( function ( i, img ) {
+ img.setAttribute( 'src', _relToAbs( img.getAttribute('src') ) );
+ } );
+
+ if ( config.customize ) {
+ config.customize( win, config, dt );
+ }
+
+ // Allow stylesheets time to load
+ var autoPrint = function () {
+ if ( config.autoPrint ) {
+ win.print(); // blocking - so close will not
+ win.close(); // execute until this is done
+ }
+ };
+
+ if ( navigator.userAgent.match(/Trident\/\d.\d/) ) { // IE needs to call this without a setTimeout
+ autoPrint();
+ }
+ else {
+ win.setTimeout( autoPrint, 1000 );
+ }
+ },
+
+ title: '*',
+
+ messageTop: '*',
+
+ messageBottom: '*',
+
+ exportOptions: {},
+
+ header: true,
+
+ footer: false,
+
+ autoPrint: true,
+
+ customize: null
+};
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.min.js
new file mode 100644
index 0000000..7777da6
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.print.min.js
@@ -0,0 +1,5 @@
+/*!
+ * Print button for Buttons and DataTables.
+ * 2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(n){var o,r;"function"==typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(t){return n(t,window,document)}):"object"==typeof exports?(o=require("jquery"),r=function(t,e){e.fn.dataTable||require("datatables.net")(t,e),e.fn.dataTable.Buttons||require("datatables.net-buttons")(t,e)},"undefined"!=typeof window?module.exports=function(t,e){return t=t||window,e=e||o(t),r(t,e),n(e,t,t.document)}:(r(window,o),module.exports=n(o,window,window.document))):n(jQuery,window,document)}(function(m,b,t,p){"use strict";function h(t){return n.href=t,-1===(t=n.host).indexOf("/")&&0!==n.pathname.indexOf("/")&&(t+="/"),n.protocol+"//"+t+n.pathname+n.search}var e=m.fn.dataTable,n=t.createElement("a");return e.ext.buttons.print={className:"buttons-print",text:function(t){return t.i18n("buttons.print","Print")},action:function(t,e,n,o){function r(t,e){for(var n="<tr>",o=0,r=t.length;o<r;o++){var i=null===t[o]||t[o]===p?"":t[o];n+="<"+e+" "+(s[o]?'class="'+s[o]+'"':"")+">"+i+"</"+e+">"}return n+"</tr>"}var i=e.buttons.exportData(m.extend({decodeEntities:!1},o.exportOptions)),a=e.buttons.exportInfo(o),s=e.columns(o.exportOptions.columns).flatten().map(function(t){return e.settings()[0].aoColumns[e.column(t).index()].sClass}).toArray(),u='<table class="'+e.table().node().className+'">';o.header&&(u+="<thead>"+r(i.header,"th")+"</thead>"),u+="<tbody>";for(var d=0,c=i.body.length;d<c;d++)u+=r(i.body[d],"td");u+="</tbody>",o.footer&&i.footer&&(u+="<tfoot>"+r(i.footer,"th")+"</tfoot>"),u+="</table>";var l=b.open("","");if(l){l.document.close();var f="<title>"+a.title+"</title>";m("style, link").each(function(){f+=function(t){t=m(t).clone()[0];return"link"===t.nodeName.toLowerCase()&&(t.href=h(t.href)),t.outerHTML}(this)});try{l.document.head.innerHTML=f}catch(t){m(l.document.head).html(f)}l.document.body.innerHTML="<h1>"+a.title+"</h1><div>"+(a.messageTop||"")+"</div>"+u+"<div>"+(a.messageBottom||"")+"</div>",m(l.document.body).addClass("dt-print-view"),m("img",l.document.body).each(function(t,e){e.setAttribute("src",h(e.getAttribute("src")))}),o.customize&&o.customize(l,o,e);a=function(){o.autoPrint&&(l.print(),l.close())};navigator.userAgent.match(/Trident\/\d.\d/)?a():l.setTimeout(a,1e3)}else e.buttons.info(e.i18n("buttons.printErrorTitle","Unable to open print view"),e.i18n("buttons.printErrorMsg","Please allow popups in your browser for this site to be able to view the print view."),5e3)},title:"*",messageTop:"*",messageBottom:"*",exportOptions:{},header:!0,footer:!1,autoPrint:!0,customize:null},e}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.js
new file mode 100644
index 0000000..dc0503f
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.js
@@ -0,0 +1,104 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net-se', 'datatables.net-buttons'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net-se')(root, $);
+ }
+
+ if ( ! $.fn.dataTable.Buttons ) {
+ require('datatables.net-buttons')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+$.extend( true, DataTable.Buttons.defaults, {
+ dom: {
+ container: {
+ className: 'dt-buttons ui basic buttons'
+ },
+ button: {
+ tag: 'button',
+ className: 'dt-button ui button',
+ spacerClass: 'dt-button ui button'
+ },
+ collection: {
+ tag: 'div',
+ className: 'ui basic vertical buttons',
+ closeButton: false
+ },
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper buttons',
+ closeButton: false
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '&#x25BC;',
+ className: 'ui floating button dt-btn-split-drop dropdown icon',
+ closeButton: false
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button ui button',
+ closeButton: false
+ }
+ }
+} );
+
+$(document).on('buttons-popover.dt', function () {
+ var notButton = false;
+ $('.dtsp-panesContainer').each(function() {
+ if(!$(this).is('button')){
+ notButton = true;
+ }
+ });
+ if(notButton){
+ $('.dtsp-panesContainer').removeClass('vertical buttons')
+ }
+});
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.min.js
new file mode 100644
index 0000000..94ba298
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/buttons.semanticui.min.js
@@ -0,0 +1,4 @@
+/*! Bootstrap integration for DataTables' Buttons
+ * ©2016 SpryMedia Ltd - datatables.net/license
+ */
+!function(o){var e,a;"function"==typeof define&&define.amd?define(["jquery","datatables.net-se","datatables.net-buttons"],function(t){return o(t,window,document)}):"object"==typeof exports?(e=require("jquery"),a=function(t,n){n.fn.dataTable||require("datatables.net-se")(t,n),n.fn.dataTable.Buttons||require("datatables.net-buttons")(t,n)},"undefined"!=typeof window?module.exports=function(t,n){return t=t||window,n=n||e(t),a(t,n),o(n,0,t.document)}:(a(window,e),module.exports=o(e,window,window.document))):o(jQuery,window,document)}(function(n,t,o,e){"use strict";var a=n.fn.dataTable;return n.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons ui basic buttons"},button:{tag:"button",className:"dt-button ui button",spacerClass:"dt-button ui button"},collection:{tag:"div",className:"ui basic vertical buttons",closeButton:!1},splitWrapper:{tag:"div",className:"dt-btn-split-wrapper buttons",closeButton:!1},splitDropdown:{tag:"button",text:"&#x25BC;",className:"ui floating button dt-btn-split-drop dropdown icon",closeButton:!1},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button ui button",closeButton:!1}}}),n(o).on("buttons-popover.dt",function(){var t=!1;n(".dtsp-panesContainer").each(function(){n(this).is("button")||(t=!0)}),t&&n(".dtsp-panesContainer").removeClass("vertical buttons")}),a}); \ No newline at end of file
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.js b/public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.js
new file mode 100644
index 0000000..4c864f2
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.js
@@ -0,0 +1,2538 @@
+/*! Buttons for DataTables 2.3.6
+ * ©2016-2023 SpryMedia Ltd - datatables.net/license
+ */
+
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ var jq = require('jquery');
+ var cjsRequires = function (root, $) {
+ if ( ! $.fn.dataTable ) {
+ require('datatables.net')(root, $);
+ }
+ };
+
+ if (typeof window !== 'undefined') {
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ // CommonJS environments without a window global must pass a
+ // root. This will give an error otherwise
+ root = window;
+ }
+
+ if ( ! $ ) {
+ $ = jq( root );
+ }
+
+ cjsRequires( root, $ );
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ cjsRequires( window, jq );
+ module.exports = factory( jq, window, window.document );
+ }
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+
+// Used for namespacing events added to the document by each instance, so they
+// can be removed on destroy
+var _instCounter = 0;
+
+// Button namespacing counter for namespacing events on individual buttons
+var _buttonCounter = 0;
+
+var _dtButtons = DataTable.ext.buttons;
+
+// Allow for jQuery slim
+function _fadeIn(el, duration, fn) {
+ if ($.fn.animate) {
+ el
+ .stop()
+ .fadeIn( duration, fn );
+
+ }
+ else {
+ el.css('display', 'block');
+
+ if (fn) {
+ fn.call(el);
+ }
+ }
+}
+
+function _fadeOut(el, duration, fn) {
+ if ($.fn.animate) {
+ el
+ .stop()
+ .fadeOut( duration, fn );
+ }
+ else {
+ el.css('display', 'none');
+
+ if (fn) {
+ fn.call(el);
+ }
+ }
+}
+
+/**
+ * [Buttons description]
+ * @param {[type]}
+ * @param {[type]}
+ */
+var Buttons = function( dt, config )
+{
+ // If not created with a `new` keyword then we return a wrapper function that
+ // will take the settings object for a DT. This allows easy use of new instances
+ // with the `layout` option - e.g. `topLeft: $.fn.dataTable.Buttons( ... )`.
+ if ( !(this instanceof Buttons) ) {
+ return function (settings) {
+ return new Buttons( settings, dt ).container();
+ };
+ }
+
+ // If there is no config set it to an empty object
+ if ( typeof( config ) === 'undefined' ) {
+ config = {};
+ }
+
+ // Allow a boolean true for defaults
+ if ( config === true ) {
+ config = {};
+ }
+
+ // For easy configuration of buttons an array can be given
+ if ( Array.isArray( config ) ) {
+ config = { buttons: config };
+ }
+
+ this.c = $.extend( true, {}, Buttons.defaults, config );
+
+ // Don't want a deep copy for the buttons
+ if ( config.buttons ) {
+ this.c.buttons = config.buttons;
+ }
+
+ this.s = {
+ dt: new DataTable.Api( dt ),
+ buttons: [],
+ listenKeys: '',
+ namespace: 'dtb'+(_instCounter++)
+ };
+
+ this.dom = {
+ container: $('<'+this.c.dom.container.tag+'/>')
+ .addClass( this.c.dom.container.className )
+ };
+
+ this._constructor();
+};
+
+
+$.extend( Buttons.prototype, {
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Public methods
+ */
+
+ /**
+ * Get the action of a button
+ * @param {int|string} Button index
+ * @return {function}
+ *//**
+ * Set the action of a button
+ * @param {node} node Button element
+ * @param {function} action Function to set
+ * @return {Buttons} Self for chaining
+ */
+ action: function ( node, action )
+ {
+ var button = this._nodeToButton( node );
+
+ if ( action === undefined ) {
+ return button.conf.action;
+ }
+
+ button.conf.action = action;
+
+ return this;
+ },
+
+ /**
+ * Add an active class to the button to make to look active or get current
+ * active state.
+ * @param {node} node Button element
+ * @param {boolean} [flag] Enable / disable flag
+ * @return {Buttons} Self for chaining or boolean for getter
+ */
+ active: function ( node, flag ) {
+ var button = this._nodeToButton( node );
+ var klass = this.c.dom.button.active;
+ var jqNode = $(button.node);
+
+ if ( flag === undefined ) {
+ return jqNode.hasClass( klass );
+ }
+
+ jqNode.toggleClass( klass, flag === undefined ? true : flag );
+
+ return this;
+ },
+
+ /**
+ * Add a new button
+ * @param {object} config Button configuration object, base string name or function
+ * @param {int|string} [idx] Button index for where to insert the button
+ * @param {boolean} [draw=true] Trigger a draw. Set a false when adding
+ * lots of buttons, until the last button.
+ * @return {Buttons} Self for chaining
+ */
+ add: function ( config, idx, draw )
+ {
+ var buttons = this.s.buttons;
+
+ if ( typeof idx === 'string' ) {
+ var split = idx.split('-');
+ var base = this.s;
+
+ for ( var i=0, ien=split.length-1 ; i<ien ; i++ ) {
+ base = base.buttons[ split[i]*1 ];
+ }
+
+ buttons = base.buttons;
+ idx = split[ split.length-1 ]*1;
+ }
+
+ this._expandButton(
+ buttons,
+ config,
+ config !== undefined ? config.split : undefined,
+ (config === undefined || config.split === undefined || config.split.length === 0) && base !== undefined,
+ false,
+ idx
+ );
+
+ if (draw === undefined || draw === true) {
+ this._draw();
+ }
+
+ return this;
+ },
+
+ /**
+ * Clear buttons from a collection and then insert new buttons
+ */
+ collectionRebuild: function ( node, newButtons )
+ {
+ var button = this._nodeToButton( node );
+
+ if(newButtons !== undefined) {
+ var i;
+ // Need to reverse the array
+ for (i=button.buttons.length-1; i>=0; i--) {
+ this.remove(button.buttons[i].node);
+ }
+
+ // If the collection has prefix and / or postfix buttons we need to add them in
+ if (button.conf.prefixButtons) {
+ newButtons.unshift.apply(newButtons, button.conf.prefixButtons);
+ }
+
+ if (button.conf.postfixButtons) {
+ newButtons.push.apply(newButtons, button.conf.postfixButtons);
+ }
+
+ for (i=0; i<newButtons.length; i++) {
+ var newBtn = newButtons[i];
+
+ this._expandButton(
+ button.buttons,
+ newBtn,
+ newBtn !== undefined && newBtn.config !== undefined && newBtn.config.split !== undefined,
+ true,
+ newBtn.parentConf !== undefined && newBtn.parentConf.split !== undefined,
+ null,
+ newBtn.parentConf
+ );
+ }
+ }
+
+ this._draw(button.collection, button.buttons);
+ },
+
+ /**
+ * Get the container node for the buttons
+ * @return {jQuery} Buttons node
+ */
+ container: function ()
+ {
+ return this.dom.container;
+ },
+
+ /**
+ * Disable a button
+ * @param {node} node Button node
+ * @return {Buttons} Self for chaining
+ */
+ disable: function ( node ) {
+ var button = this._nodeToButton( node );
+
+ $(button.node)
+ .addClass( this.c.dom.button.disabled )
+ .prop('disabled', true);
+
+ return this;
+ },
+
+ /**
+ * Destroy the instance, cleaning up event handlers and removing DOM
+ * elements
+ * @return {Buttons} Self for chaining
+ */
+ destroy: function ()
+ {
+ // Key event listener
+ $('body').off( 'keyup.'+this.s.namespace );
+
+ // Individual button destroy (so they can remove their own events if
+ // needed). Take a copy as the array is modified by `remove`
+ var buttons = this.s.buttons.slice();
+ var i, ien;
+
+ for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
+ this.remove( buttons[i].node );
+ }
+
+ // Container
+ this.dom.container.remove();
+
+ // Remove from the settings object collection
+ var buttonInsts = this.s.dt.settings()[0];
+
+ for ( i=0, ien=buttonInsts.length ; i<ien ; i++ ) {
+ if ( buttonInsts.inst === this ) {
+ buttonInsts.splice( i, 1 );
+ break;
+ }
+ }
+
+ return this;
+ },
+
+ /**
+ * Enable / disable a button
+ * @param {node} node Button node
+ * @param {boolean} [flag=true] Enable / disable flag
+ * @return {Buttons} Self for chaining
+ */
+ enable: function ( node, flag )
+ {
+ if ( flag === false ) {
+ return this.disable( node );
+ }
+
+ var button = this._nodeToButton( node );
+ $(button.node)
+ .removeClass( this.c.dom.button.disabled )
+ .prop('disabled', false);
+
+ return this;
+ },
+
+ /**
+ * Get a button's index
+ *
+ * This is internally recursive
+ * @param {element} node Button to get the index of
+ * @return {string} Button index
+ */
+ index: function ( node, nested, buttons )
+ {
+ if ( ! nested ) {
+ nested = '';
+ buttons = this.s.buttons;
+ }
+
+ for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
+ var inner = buttons[i].buttons;
+
+ if (buttons[i].node === node) {
+ return nested + i;
+ }
+
+ if ( inner && inner.length ) {
+ var match = this.index(node, i + '-', inner);
+
+ if (match !== null) {
+ return match;
+ }
+ }
+ }
+
+ return null;
+ },
+
+
+ /**
+ * Get the instance name for the button set selector
+ * @return {string} Instance name
+ */
+ name: function ()
+ {
+ return this.c.name;
+ },
+
+ /**
+ * Get a button's node of the buttons container if no button is given
+ * @param {node} [node] Button node
+ * @return {jQuery} Button element, or container
+ */
+ node: function ( node )
+ {
+ if ( ! node ) {
+ return this.dom.container;
+ }
+
+ var button = this._nodeToButton( node );
+ return $(button.node);
+ },
+
+ /**
+ * Set / get a processing class on the selected button
+ * @param {element} node Triggering button node
+ * @param {boolean} flag true to add, false to remove, undefined to get
+ * @return {boolean|Buttons} Getter value or this if a setter.
+ */
+ processing: function ( node, flag )
+ {
+ var dt = this.s.dt;
+ var button = this._nodeToButton( node );
+
+ if ( flag === undefined ) {
+ return $(button.node).hasClass( 'processing' );
+ }
+
+ $(button.node).toggleClass( 'processing', flag );
+
+ $(dt.table().node()).triggerHandler( 'buttons-processing.dt', [
+ flag, dt.button( node ), dt, $(node), button.conf
+ ] );
+
+ return this;
+ },
+
+ /**
+ * Remove a button.
+ * @param {node} node Button node
+ * @return {Buttons} Self for chaining
+ */
+ remove: function ( node )
+ {
+ var button = this._nodeToButton( node );
+ var host = this._nodeToHost( node );
+ var dt = this.s.dt;
+
+ // Remove any child buttons first
+ if ( button.buttons.length ) {
+ for ( var i=button.buttons.length-1 ; i>=0 ; i-- ) {
+ this.remove( button.buttons[i].node );
+ }
+ }
+
+ button.conf.destroying = true;
+
+ // Allow the button to remove event handlers, etc
+ if ( button.conf.destroy ) {
+ button.conf.destroy.call( dt.button(node), dt, $(node), button.conf );
+ }
+
+ this._removeKey( button.conf );
+
+ $(button.node).remove();
+
+ var idx = $.inArray( button, host );
+ host.splice( idx, 1 );
+
+ return this;
+ },
+
+ /**
+ * Get the text for a button
+ * @param {int|string} node Button index
+ * @return {string} Button text
+ *//**
+ * Set the text for a button
+ * @param {int|string|function} node Button index
+ * @param {string} label Text
+ * @return {Buttons} Self for chaining
+ */
+ text: function ( node, label )
+ {
+ var button = this._nodeToButton( node );
+ var buttonLiner = this.c.dom.collection.buttonLiner;
+ var linerTag = button.inCollection && buttonLiner && buttonLiner.tag ?
+ buttonLiner.tag :
+ this.c.dom.buttonLiner.tag;
+ var dt = this.s.dt;
+ var jqNode = $(button.node);
+ var text = function ( opt ) {
+ return typeof opt === 'function' ?
+ opt( dt, jqNode, button.conf ) :
+ opt;
+ };
+
+ if ( label === undefined ) {
+ return text( button.conf.text );
+ }
+
+ button.conf.text = label;
+
+ if ( linerTag ) {
+ jqNode
+ .children( linerTag )
+ .eq(0)
+ .filter(':not(.dt-down-arrow)')
+ .html( text(label) );
+ }
+ else {
+ jqNode.html( text(label) );
+ }
+
+ return this;
+ },
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Constructor
+ */
+
+ /**
+ * Buttons constructor
+ * @private
+ */
+ _constructor: function ()
+ {
+ var that = this;
+ var dt = this.s.dt;
+ var dtSettings = dt.settings()[0];
+ var buttons = this.c.buttons;
+
+ if ( ! dtSettings._buttons ) {
+ dtSettings._buttons = [];
+ }
+
+ dtSettings._buttons.push( {
+ inst: this,
+ name: this.c.name
+ } );
+
+ for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
+ this.add( buttons[i] );
+ }
+
+ dt.on( 'destroy', function ( e, settings ) {
+ if ( settings === dtSettings ) {
+ that.destroy();
+ }
+ } );
+
+ // Global key event binding to listen for button keys
+ $('body').on( 'keyup.'+this.s.namespace, function ( e ) {
+ if ( ! document.activeElement || document.activeElement === document.body ) {
+ // SUse a string of characters for fast lookup of if we need to
+ // handle this
+ var character = String.fromCharCode(e.keyCode).toLowerCase();
+
+ if ( that.s.listenKeys.toLowerCase().indexOf( character ) !== -1 ) {
+ that._keypress( character, e );
+ }
+ }
+ } );
+ },
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Private methods
+ */
+
+ /**
+ * Add a new button to the key press listener
+ * @param {object} conf Resolved button configuration object
+ * @private
+ */
+ _addKey: function ( conf )
+ {
+ if ( conf.key ) {
+ this.s.listenKeys += $.isPlainObject( conf.key ) ?
+ conf.key.key :
+ conf.key;
+ }
+ },
+
+ /**
+ * Insert the buttons into the container. Call without parameters!
+ * @param {node} [container] Recursive only - Insert point
+ * @param {array} [buttons] Recursive only - Buttons array
+ * @private
+ */
+ _draw: function ( container, buttons )
+ {
+ if ( ! container ) {
+ container = this.dom.container;
+ buttons = this.s.buttons;
+ }
+
+ container.children().detach();
+
+ for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
+ container.append( buttons[i].inserter );
+ container.append( ' ' );
+
+ if ( buttons[i].buttons && buttons[i].buttons.length ) {
+ this._draw( buttons[i].collection, buttons[i].buttons );
+ }
+ }
+ },
+
+ /**
+ * Create buttons from an array of buttons
+ * @param {array} attachTo Buttons array to attach to
+ * @param {object} button Button definition
+ * @param {boolean} inCollection true if the button is in a collection
+ * @private
+ */
+ _expandButton: function ( attachTo, button, split, inCollection, inSplit, attachPoint, parentConf )
+ {
+ var dt = this.s.dt;
+ var buttonCounter = 0;
+ var isSplit = false;
+ var buttons = ! Array.isArray( button ) ?
+ [ button ] :
+ button;
+
+ if(button === undefined ) {
+ buttons = !Array.isArray(split) ?
+ [ split ] :
+ split;
+ }
+
+ if (button !== undefined && button.split !== undefined) {
+ isSplit = true;
+ }
+
+ for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
+ var conf = this._resolveExtends( buttons[i] );
+
+ if ( ! conf ) {
+ continue;
+ }
+
+ if( conf.config !== undefined && conf.config.split) {
+ isSplit = true;
+ }
+ else {
+ isSplit = false;
+ }
+
+ // If the configuration is an array, then expand the buttons at this
+ // point
+ if ( Array.isArray( conf ) ) {
+ this._expandButton( attachTo, conf, built !== undefined && built.conf !== undefined ? built.conf.split : undefined, inCollection, parentConf !== undefined && parentConf.split !== undefined, attachPoint, parentConf );
+ continue;
+ }
+
+ var built = this._buildButton( conf, inCollection, conf.split !== undefined || (conf.config !== undefined && conf.config.split !== undefined), inSplit );
+ if ( ! built ) {
+ continue;
+ }
+
+ if ( attachPoint !== undefined && attachPoint !== null ) {
+ attachTo.splice( attachPoint, 0, built );
+ attachPoint++;
+ }
+ else {
+ attachTo.push( built );
+ }
+
+
+ if ( built.conf.buttons || built.conf.split ) {
+ built.collection = $('<'+(isSplit ? this.c.dom.splitCollection.tag : this.c.dom.collection.tag)+'/>');
+
+ built.conf._collection = built.collection;
+
+ if(built.conf.split) {
+ for(var j = 0; j < built.conf.split.length; j++) {
+ if(typeof built.conf.split[j] === "object") {
+ built.conf.split[j].parent = parentConf;
+ if(built.conf.split[j].collectionLayout === undefined) {
+ built.conf.split[j].collectionLayout = built.conf.collectionLayout;
+ }
+ if(built.conf.split[j].dropup === undefined) {
+ built.conf.split[j].dropup = built.conf.dropup;
+ }
+ if(built.conf.split[j].fade === undefined) {
+ built.conf.split[j].fade = built.conf.fade;
+ }
+ }
+ }
+ }
+ else {
+ $(built.node).append($('<span class="dt-down-arrow">'+this.c.dom.splitDropdown.text+'</span>'))
+ }
+
+ this._expandButton( built.buttons, built.conf.buttons, built.conf.split, !isSplit, isSplit, attachPoint, built.conf );
+ }
+ built.conf.parent = parentConf;
+
+ // init call is made here, rather than buildButton as it needs to
+ // be selectable, and for that it needs to be in the buttons array
+ if ( conf.init ) {
+ conf.init.call( dt.button( built.node ), dt, $(built.node), conf );
+ }
+
+ buttonCounter++;
+ }
+ },
+
+ /**
+ * Create an individual button
+ * @param {object} config Resolved button configuration
+ * @param {boolean} inCollection `true` if a collection button
+ * @return {jQuery} Created button node (jQuery)
+ * @private
+ */
+ _buildButton: function ( config, inCollection, isSplit, inSplit )
+ {
+ var buttonDom = this.c.dom.button;
+ var linerDom = this.c.dom.buttonLiner;
+ var collectionDom = this.c.dom.collection;
+ var splitDom = this.c.dom.split;
+ var splitCollectionDom = this.c.dom.splitCollection;
+ var splitDropdownButton = this.c.dom.splitDropdownButton;
+ var dt = this.s.dt;
+ var text = function ( opt ) {
+ return typeof opt === 'function' ?
+ opt( dt, button, config ) :
+ opt;
+ };
+
+ // Spacers don't do much other than insert an element into the DOM
+ if (config.spacer) {
+ var spacer = $('<span></span>')
+ .addClass('dt-button-spacer ' + config.style + ' ' + buttonDom.spacerClass)
+ .html(text(config.text));
+
+ return {
+ conf: config,
+ node: spacer,
+ inserter: spacer,
+ buttons: [],
+ inCollection: inCollection,
+ isSplit: isSplit,
+ inSplit: inSplit,
+ collection: null
+ };
+ }
+
+ if ( !isSplit && inSplit && splitCollectionDom ) {
+ buttonDom = splitDropdownButton;
+ }
+ else if ( !isSplit && inCollection && collectionDom.button ) {
+ buttonDom = collectionDom.button;
+ }
+
+ if ( !isSplit && inSplit && splitCollectionDom.buttonLiner ) {
+ linerDom = splitCollectionDom.buttonLiner
+ }
+ else if ( !isSplit && inCollection && collectionDom.buttonLiner ) {
+ linerDom = collectionDom.buttonLiner;
+ }
+
+ // Make sure that the button is available based on whatever requirements
+ // it has. For example, PDF button require pdfmake
+ if ( config.available && ! config.available( dt, config ) && !config.hasOwnProperty('html') ) {
+ return false;
+ }
+
+ var button;
+ if(!config.hasOwnProperty('html')) {
+ var action = function ( e, dt, button, config ) {
+ config.action.call( dt.button( button ), e, dt, button, config );
+
+ $(dt.table().node()).triggerHandler( 'buttons-action.dt', [
+ dt.button( button ), dt, button, config
+ ] );
+ };
+
+ var tag = config.tag || buttonDom.tag;
+ var clickBlurs = config.clickBlurs === undefined
+ ? true :
+ config.clickBlurs;
+
+ button = $('<'+tag+'/>')
+ .addClass( buttonDom.className )
+ .addClass( inSplit ? this.c.dom.splitDropdownButton.className : '')
+ .attr( 'tabindex', this.s.dt.settings()[0].iTabIndex )
+ .attr( 'aria-controls', this.s.dt.table().node().id )
+ .on( 'click.dtb', function (e) {
+ e.preventDefault();
+
+ if ( ! button.hasClass( buttonDom.disabled ) && config.action ) {
+ action( e, dt, button, config );
+ }
+ if( clickBlurs ) {
+ button.trigger('blur');
+ }
+ } )
+ .on( 'keypress.dtb', function (e) {
+ if ( e.keyCode === 13 ) {
+ e.preventDefault();
+
+ if ( ! button.hasClass( buttonDom.disabled ) && config.action ) {
+ action( e, dt, button, config );
+ }
+ }
+ } );
+
+ // Make `a` tags act like a link
+ if ( tag.toLowerCase() === 'a' ) {
+ button.attr( 'href', '#' );
+ }
+
+ // Button tags should have `type=button` so they don't have any default behaviour
+ if ( tag.toLowerCase() === 'button' ) {
+ button.attr( 'type', 'button' );
+ }
+
+ if ( linerDom.tag ) {
+ var liner = $('<'+linerDom.tag+'/>')
+ .html( text( config.text ) )
+ .addClass( linerDom.className );
+
+ if ( linerDom.tag.toLowerCase() === 'a' ) {
+ liner.attr( 'href', '#' );
+ }
+
+ button.append( liner );
+ }
+ else {
+ button.html( text( config.text ) );
+ }
+
+ if ( config.enabled === false ) {
+ button.addClass( buttonDom.disabled );
+ }
+
+ if ( config.className ) {
+ button.addClass( config.className );
+ }
+
+ if ( config.titleAttr ) {
+ button.attr( 'title', text( config.titleAttr ) );
+ }
+
+ if ( config.attr ) {
+ button.attr( config.attr );
+ }
+
+ if ( ! config.namespace ) {
+ config.namespace = '.dt-button-'+(_buttonCounter++);
+ }
+
+ if ( config.config !== undefined && config.config.split ) {
+ config.split = config.config.split;
+ }
+ }
+ else {
+ button = $(config.html)
+ }
+
+ var buttonContainer = this.c.dom.buttonContainer;
+ var inserter;
+ if ( buttonContainer && buttonContainer.tag ) {
+ inserter = $('<'+buttonContainer.tag+'/>')
+ .addClass( buttonContainer.className )
+ .append( button );
+ }
+ else {
+ inserter = button;
+ }
+
+ this._addKey( config );
+
+ // Style integration callback for DOM manipulation
+ // Note that this is _not_ documented. It is currently
+ // for style integration only
+ if( this.c.buttonCreated ) {
+ inserter = this.c.buttonCreated( config, inserter );
+ }
+
+ var splitDiv;
+ if(isSplit) {
+ splitDiv = $('<div/>').addClass(this.c.dom.splitWrapper.className)
+ splitDiv.append(button);
+ var dropButtonConfig = $.extend(config, {
+ text: this.c.dom.splitDropdown.text,
+ className: this.c.dom.splitDropdown.className,
+ closeButton: false,
+ attr: {
+ 'aria-haspopup': 'dialog',
+ 'aria-expanded': false
+ },
+ align: this.c.dom.splitDropdown.align,
+ splitAlignClass: this.c.dom.splitDropdown.splitAlignClass
+
+ })
+
+ this._addKey(dropButtonConfig);
+
+ var splitAction = function ( e, dt, button, config ) {
+ _dtButtons.split.action.call( dt.button(splitDiv), e, dt, button, config );
+
+ $(dt.table().node()).triggerHandler( 'buttons-action.dt', [
+ dt.button( button ), dt, button, config
+ ] );
+ button.attr('aria-expanded', true)
+ };
+
+ var dropButton = $('<button class="' + this.c.dom.splitDropdown.className + ' dt-button"><span class="dt-btn-split-drop-arrow">'+this.c.dom.splitDropdown.text+'</span></button>')
+ .on( 'click.dtb', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ if ( ! dropButton.hasClass( buttonDom.disabled )) {
+ splitAction( e, dt, dropButton, dropButtonConfig );
+ }
+ if ( clickBlurs ) {
+ dropButton.trigger('blur');
+ }
+ } )
+ .on( 'keypress.dtb', function (e) {
+ if ( e.keyCode === 13 ) {
+ e.preventDefault();
+
+ if ( ! dropButton.hasClass( buttonDom.disabled ) ) {
+ splitAction( e, dt, dropButton, dropButtonConfig );
+ }
+ }
+ } );
+
+ if(config.split.length === 0) {
+ dropButton.addClass('dtb-hide-drop');
+ }
+
+ splitDiv.append(dropButton).attr(dropButtonConfig.attr);
+ }
+
+ return {
+ conf: config,
+ node: isSplit ? splitDiv.get(0) : button.get(0),
+ inserter: isSplit ? splitDiv : inserter,
+ buttons: [],
+ inCollection: inCollection,
+ isSplit: isSplit,
+ inSplit: inSplit,
+ collection: null
+ };
+ },
+
+ /**
+ * Get the button object from a node (recursive)
+ * @param {node} node Button node
+ * @param {array} [buttons] Button array, uses base if not defined
+ * @return {object} Button object
+ * @private
+ */
+ _nodeToButton: function ( node, buttons )
+ {
+ if ( ! buttons ) {
+ buttons = this.s.buttons;
+ }
+
+ for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
+ if ( buttons[i].node === node ) {
+ return buttons[i];
+ }
+
+ if ( buttons[i].buttons.length ) {
+ var ret = this._nodeToButton( node, buttons[i].buttons );
+
+ if ( ret ) {
+ return ret;
+ }
+ }
+ }
+ },
+
+ /**
+ * Get container array for a button from a button node (recursive)
+ * @param {node} node Button node
+ * @param {array} [buttons] Button array, uses base if not defined
+ * @return {array} Button's host array
+ * @private
+ */
+ _nodeToHost: function ( node, buttons )
+ {
+ if ( ! buttons ) {
+ buttons = this.s.buttons;
+ }
+
+ for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
+ if ( buttons[i].node === node ) {
+ return buttons;
+ }
+
+ if ( buttons[i].buttons.length ) {
+ var ret = this._nodeToHost( node, buttons[i].buttons );
+
+ if ( ret ) {
+ return ret;
+ }
+ }
+ }
+ },
+
+ /**
+ * Handle a key press - determine if any button's key configured matches
+ * what was typed and trigger the action if so.
+ * @param {string} character The character pressed
+ * @param {object} e Key event that triggered this call
+ * @private
+ */
+ _keypress: function ( character, e )
+ {
+ // Check if this button press already activated on another instance of Buttons
+ if ( e._buttonsHandled ) {
+ return;
+ }
+
+ var run = function ( conf, node ) {
+ if ( ! conf.key ) {
+ return;
+ }
+
+ if ( conf.key === character ) {
+ e._buttonsHandled = true;
+ $(node).click();
+ }
+ else if ( $.isPlainObject( conf.key ) ) {
+ if ( conf.key.key !== character ) {
+ return;
+ }
+
+ if ( conf.key.shiftKey && ! e.shiftKey ) {
+ return;
+ }
+
+ if ( conf.key.altKey && ! e.altKey ) {
+ return;
+ }
+
+ if ( conf.key.ctrlKey && ! e.ctrlKey ) {
+ return;
+ }
+
+ if ( conf.key.metaKey && ! e.metaKey ) {
+ return;
+ }
+
+ // Made it this far - it is good
+ e._buttonsHandled = true;
+ $(node).click();
+ }
+ };
+
+ var recurse = function ( a ) {
+ for ( var i=0, ien=a.length ; i<ien ; i++ ) {
+ run( a[i].conf, a[i].node );
+
+ if ( a[i].buttons.length ) {
+ recurse( a[i].buttons );
+ }
+ }
+ };
+
+ recurse( this.s.buttons );
+ },
+
+ /**
+ * Remove a key from the key listener for this instance (to be used when a
+ * button is removed)
+ * @param {object} conf Button configuration
+ * @private
+ */
+ _removeKey: function ( conf )
+ {
+ if ( conf.key ) {
+ var character = $.isPlainObject( conf.key ) ?
+ conf.key.key :
+ conf.key;
+
+ // Remove only one character, as multiple buttons could have the
+ // same listening key
+ var a = this.s.listenKeys.split('');
+ var idx = $.inArray( character, a );
+ a.splice( idx, 1 );
+ this.s.listenKeys = a.join('');
+ }
+ },
+
+ /**
+ * Resolve a button configuration
+ * @param {string|function|object} conf Button config to resolve
+ * @return {object} Button configuration
+ * @private
+ */
+ _resolveExtends: function ( conf )
+ {
+ var that = this;
+ var dt = this.s.dt;
+ var i, ien;
+ var toConfObject = function ( base ) {
+ var loop = 0;
+
+ // Loop until we have resolved to a button configuration, or an
+ // array of button configurations (which will be iterated
+ // separately)
+ while ( ! $.isPlainObject(base) && ! Array.isArray(base) ) {
+ if ( base === undefined ) {
+ return;
+ }
+
+ if ( typeof base === 'function' ) {
+ base = base.call( that, dt, conf );
+
+ if ( ! base ) {
+ return false;
+ }
+ }
+ else if ( typeof base === 'string' ) {
+ if ( ! _dtButtons[ base ] ) {
+ return {html: base}
+ }
+
+ base = _dtButtons[ base ];
+ }
+
+ loop++;
+ if ( loop > 30 ) {
+ // Protect against misconfiguration killing the browser
+ throw 'Buttons: Too many iterations';
+ }
+ }
+
+ return Array.isArray( base ) ?
+ base :
+ $.extend( {}, base );
+ };
+
+ conf = toConfObject( conf );
+
+ while ( conf && conf.extend ) {
+ // Use `toConfObject` in case the button definition being extended
+ // is itself a string or a function
+ if ( ! _dtButtons[ conf.extend ] ) {
+ throw 'Cannot extend unknown button type: '+conf.extend;
+ }
+
+ var objArray = toConfObject( _dtButtons[ conf.extend ] );
+ if ( Array.isArray( objArray ) ) {
+ return objArray;
+ }
+ else if ( ! objArray ) {
+ // This is a little brutal as it might be possible to have a
+ // valid button without the extend, but if there is no extend
+ // then the host button would be acting in an undefined state
+ return false;
+ }
+
+ // Stash the current class name
+ var originalClassName = objArray.className;
+
+ if (conf.config !== undefined && objArray.config !== undefined) {
+ conf.config = $.extend({}, objArray.config, conf.config)
+ }
+
+ conf = $.extend( {}, objArray, conf );
+
+ // The extend will have overwritten the original class name if the
+ // `conf` object also assigned a class, but we want to concatenate
+ // them so they are list that is combined from all extended buttons
+ if ( originalClassName && conf.className !== originalClassName ) {
+ conf.className = originalClassName+' '+conf.className;
+ }
+
+ // Although we want the `conf` object to overwrite almost all of
+ // the properties of the object being extended, the `extend`
+ // property should come from the object being extended
+ conf.extend = objArray.extend;
+ }
+
+ // Buttons to be added to a collection -gives the ability to define
+ // if buttons should be added to the start or end of a collection
+ var postfixButtons = conf.postfixButtons;
+ if ( postfixButtons ) {
+ if ( ! conf.buttons ) {
+ conf.buttons = [];
+ }
+
+ for ( i=0, ien=postfixButtons.length ; i<ien ; i++ ) {
+ conf.buttons.push( postfixButtons[i] );
+ }
+ }
+
+ var prefixButtons = conf.prefixButtons;
+ if ( prefixButtons ) {
+ if ( ! conf.buttons ) {
+ conf.buttons = [];
+ }
+
+ for ( i=0, ien=prefixButtons.length ; i<ien ; i++ ) {
+ conf.buttons.splice( i, 0, prefixButtons[i] );
+ }
+ }
+
+ return conf;
+ },
+
+ /**
+ * Display (and replace if there is an existing one) a popover attached to a button
+ * @param {string|node} content Content to show
+ * @param {DataTable.Api} hostButton DT API instance of the button
+ * @param {object} inOpts Options (see object below for all options)
+ */
+ _popover: function ( content, hostButton, inOpts, e ) {
+ var dt = hostButton;
+ var buttonsSettings = this.c;
+ var closed = false;
+ var options = $.extend( {
+ align: 'button-left', // button-right, dt-container, split-left, split-right
+ autoClose: false,
+ background: true,
+ backgroundClassName: 'dt-button-background',
+ closeButton: true,
+ contentClassName: buttonsSettings.dom.collection.className,
+ collectionLayout: '',
+ collectionTitle: '',
+ dropup: false,
+ fade: 400,
+ popoverTitle: '',
+ rightAlignClassName: 'dt-button-right',
+ tag: buttonsSettings.dom.collection.tag
+ }, inOpts );
+
+ var hostNode = hostButton.node();
+
+ var close = function () {
+ closed = true;
+
+ _fadeOut(
+ $('.dt-button-collection'),
+ options.fade,
+ function () {
+ $(this).detach();
+ }
+ );
+
+ $(dt.buttons( '[aria-haspopup="dialog"][aria-expanded="true"]' ).nodes())
+ .attr('aria-expanded', 'false');
+
+ $('div.dt-button-background').off( 'click.dtb-collection' );
+ Buttons.background( false, options.backgroundClassName, options.fade, hostNode );
+
+ $(window).off('resize.resize.dtb-collection');
+ $('body').off( '.dtb-collection' );
+ dt.off( 'buttons-action.b-internal' );
+ dt.off( 'destroy' );
+ };
+
+ if (content === false) {
+ close();
+ return;
+ }
+
+ var existingExpanded = $(dt.buttons( '[aria-haspopup="dialog"][aria-expanded="true"]' ).nodes());
+ if ( existingExpanded.length ) {
+ // Reuse the current position if the button that was triggered is inside an existing collection
+ if (hostNode.closest('div.dt-button-collection').length) {
+ hostNode = existingExpanded.eq(0);
+ }
+
+ close();
+ }
+
+ // Try to be smart about the layout
+ var cnt = $('.dt-button', content).length;
+ var mod = '';
+
+ if (cnt === 3) {
+ mod = 'dtb-b3';
+ }
+ else if (cnt === 2) {
+ mod = 'dtb-b2';
+ }
+ else if (cnt === 1) {
+ mod = 'dtb-b1';
+ }
+
+ var display = $('<div/>')
+ .addClass('dt-button-collection')
+ .addClass(options.collectionLayout)
+ .addClass(options.splitAlignClass)
+ .addClass(mod)
+ .css('display', 'none')
+ .attr({
+ 'aria-modal': true,
+ role: 'dialog'
+ });
+
+ content = $(content)
+ .addClass(options.contentClassName)
+ .attr('role', 'menu')
+ .appendTo(display);
+
+ hostNode.attr( 'aria-expanded', 'true' );
+
+ if ( hostNode.parents('body')[0] !== document.body ) {
+ hostNode = document.body.lastChild;
+ }
+
+ if ( options.popoverTitle ) {
+ display.prepend('<div class="dt-button-collection-title">'+options.popoverTitle+'</div>');
+ }
+ else if ( options.collectionTitle ) {
+ display.prepend('<div class="dt-button-collection-title">'+options.collectionTitle+'</div>');
+ }
+
+ if (options.closeButton) {
+ display.prepend('<div class="dtb-popover-close">x</div>').addClass('dtb-collection-closeable')
+ }
+
+ _fadeIn( display.insertAfter( hostNode ), options.fade );
+
+ var tableContainer = $( hostButton.table().container() );
+ var position = display.css( 'position' );
+
+ if ( options.span === 'container' || options.align === 'dt-container' ) {
+ hostNode = hostNode.parent();
+ display.css('width', tableContainer.width());
+ }
+
+ // Align the popover relative to the DataTables container
+ // Useful for wide popovers such as SearchPanes
+ if (position === 'absolute') {
+ // Align relative to the host button
+ var offsetParent = $(hostNode[0].offsetParent);
+ var buttonPosition = hostNode.position();
+ var buttonOffset = hostNode.offset();
+ var tableSizes = offsetParent.offset();
+ var containerPosition = offsetParent.position();
+ var computed = window.getComputedStyle(offsetParent[0]);
+
+ tableSizes.height = offsetParent.outerHeight();
+ tableSizes.width = offsetParent.width() + parseFloat(computed.paddingLeft);
+ tableSizes.right = tableSizes.left + tableSizes.width;
+ tableSizes.bottom = tableSizes.top + tableSizes.height;
+
+ // Set the initial position so we can read height / width
+ var top = buttonPosition.top + hostNode.outerHeight();
+ var left = buttonPosition.left;
+
+ display.css( {
+ top: top,
+ left: left
+ } );
+
+ // Get the popover position
+ computed = window.getComputedStyle(display[0]);
+ var popoverSizes = display.offset();
+
+ popoverSizes.height = display.outerHeight();
+ popoverSizes.width = display.outerWidth();
+ popoverSizes.right = popoverSizes.left + popoverSizes.width;
+ popoverSizes.bottom = popoverSizes.top + popoverSizes.height;
+ popoverSizes.marginTop = parseFloat(computed.marginTop);
+ popoverSizes.marginBottom = parseFloat(computed.marginBottom);
+
+ // First position per the class requirements - pop up and right align
+ if (options.dropup) {
+ top = buttonPosition.top - popoverSizes.height - popoverSizes.marginTop - popoverSizes.marginBottom;
+ }
+
+ if (options.align === 'button-right' || display.hasClass( options.rightAlignClassName )) {
+ left = buttonPosition.left - popoverSizes.width + hostNode.outerWidth();
+ }
+
+ // Container alignment - make sure it doesn't overflow the table container
+ if (options.align === 'dt-container' || options.align === 'container') {
+ if (left < buttonPosition.left) {
+ left = -buttonPosition.left;
+ }
+
+ if (left + popoverSizes.width > tableSizes.width) {
+ left = tableSizes.width - popoverSizes.width;
+ }
+ }
+
+ // Window adjustment
+ if (containerPosition.left + left + popoverSizes.width > $(window).width()) {
+ // Overflowing the document to the right
+ left = $(window).width() - popoverSizes.width - containerPosition.left;
+ }
+
+ if (buttonOffset.left + left < 0) {
+ // Off to the left of the document
+ left = -buttonOffset.left;
+ }
+
+ if (containerPosition.top + top + popoverSizes.height > $(window).height() + $(window).scrollTop()) {
+ // Pop up if otherwise we'd need the user to scroll down
+ top = buttonPosition.top - popoverSizes.height - popoverSizes.marginTop - popoverSizes.marginBottom;
+ }
+
+ if (containerPosition.top + top < $(window).scrollTop()) {
+ // Correction for when the top is beyond the top of the page
+ top = buttonPosition.top + hostNode.outerHeight();
+ }
+
+ // Calculations all done - now set it
+ display.css( {
+ top: top,
+ left: left
+ } );
+ }
+ else {
+ // Fix position - centre on screen
+ var position = function () {
+ var half = $(window).height() / 2;
+
+ var top = display.height() / 2;
+ if ( top > half ) {
+ top = half;
+ }
+
+ display.css( 'marginTop', top*-1 );
+ };
+
+ position();
+
+ $(window).on('resize.dtb-collection', function () {
+ position();
+ });
+ }
+
+ if ( options.background ) {
+ Buttons.background(
+ true,
+ options.backgroundClassName,
+ options.fade,
+ options.backgroundHost || hostNode
+ );
+ }
+
+ // This is bonkers, but if we don't have a click listener on the
+ // background element, iOS Safari will ignore the body click
+ // listener below. An empty function here is all that is
+ // required to make it work...
+ $('div.dt-button-background').on( 'click.dtb-collection', function () {} );
+
+ if ( options.autoClose ) {
+ setTimeout( function () {
+ dt.on( 'buttons-action.b-internal', function (e, btn, dt, node) {
+ if ( node[0] === hostNode[0] ) {
+ return;
+ }
+ close();
+ } );
+ }, 0);
+ }
+
+ $(display).trigger('buttons-popover.dt');
+
+
+ dt.on('destroy', close);
+
+ setTimeout(function() {
+ closed = false;
+ $('body')
+ .on( 'click.dtb-collection', function (e) {
+ if (closed) {
+ return;
+ }
+
+ // 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 && !$(parent).hasClass('dt-buttons')) || $(e.target).hasClass('dt-button-background')) {
+ close();
+ }
+ } )
+ .on( 'keyup.dtb-collection', function (e) {
+ if ( e.keyCode === 27 ) {
+ close();
+ }
+ } )
+ .on( 'keydown.dtb-collection', function (e) {
+ // Focus trap for tab key
+ var elements = $('a, button', content);
+ var active = document.activeElement;
+
+ if (e.keyCode !== 9) { // tab
+ return;
+ }
+
+ if (elements.index(active) === -1) {
+ // If current focus is not inside the popover
+ elements.first().focus();
+ e.preventDefault();
+ }
+ else if (e.shiftKey) {
+ // Reverse tabbing order when shift key is pressed
+ if (active === elements[0]) {
+ elements.last().focus();
+ e.preventDefault();
+ }
+ }
+ else {
+ if (active === elements.last()[0]) {
+ elements.first().focus();
+ e.preventDefault();
+ }
+ }
+ } );
+ }, 0);
+ }
+} );
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Statics
+ */
+
+/**
+ * Show / hide a background layer behind a collection
+ * @param {boolean} Flag to indicate if the background should be shown or
+ * hidden
+ * @param {string} Class to assign to the background
+ * @static
+ */
+Buttons.background = function ( show, className, fade, insertPoint ) {
+ if ( fade === undefined ) {
+ fade = 400;
+ }
+ if ( ! insertPoint ) {
+ insertPoint = document.body;
+ }
+
+ if ( show ) {
+ _fadeIn(
+ $('<div/>')
+ .addClass( className )
+ .css( 'display', 'none' )
+ .insertAfter( insertPoint ),
+ fade
+ );
+ }
+ else {
+ _fadeOut(
+ $('div.'+className),
+ fade,
+ function () {
+ $(this)
+ .removeClass( className )
+ .remove();
+ }
+ );
+ }
+};
+
+/**
+ * Instance selector - select Buttons instances based on an instance selector
+ * value from the buttons assigned to a DataTable. This is only useful if
+ * multiple instances are attached to a DataTable.
+ * @param {string|int|array} Instance selector - see `instance-selector`
+ * documentation on the DataTables site
+ * @param {array} Button instance array that was attached to the DataTables
+ * settings object
+ * @return {array} Buttons instances
+ * @static
+ */
+Buttons.instanceSelector = function ( group, buttons )
+{
+ if ( group === undefined || group === null ) {
+ return $.map( buttons, function ( v ) {
+ return v.inst;
+ } );
+ }
+
+ var ret = [];
+ var names = $.map( buttons, function ( v ) {
+ return v.name;
+ } );
+
+ // Flatten the group selector into an array of single options
+ var process = function ( input ) {
+ if ( Array.isArray( input ) ) {
+ for ( var i=0, ien=input.length ; i<ien ; i++ ) {
+ process( input[i] );
+ }
+ return;
+ }
+
+ if ( typeof input === 'string' ) {
+ if ( input.indexOf( ',' ) !== -1 ) {
+ // String selector, list of names
+ process( input.split(',') );
+ }
+ else {
+ // String selector individual name
+ var idx = $.inArray( input.trim(), names );
+
+ if ( idx !== -1 ) {
+ ret.push( buttons[ idx ].inst );
+ }
+ }
+ }
+ else if ( typeof input === 'number' ) {
+ // Index selector
+ ret.push( buttons[ input ].inst );
+ }
+ else if ( typeof input === 'object' ) {
+ // Actual instance selector
+ ret.push( input );
+ }
+ };
+
+ process( group );
+
+ return ret;
+};
+
+/**
+ * Button selector - select one or more buttons from a selector input so some
+ * operation can be performed on them.
+ * @param {array} Button instances array that the selector should operate on
+ * @param {string|int|node|jQuery|array} Button selector - see
+ * `button-selector` documentation on the DataTables site
+ * @return {array} Array of objects containing `inst` and `idx` properties of
+ * the selected buttons so you know which instance each button belongs to.
+ * @static
+ */
+Buttons.buttonSelector = function ( insts, selector )
+{
+ var ret = [];
+ var nodeBuilder = function ( a, buttons, baseIdx ) {
+ var button;
+ var idx;
+
+ for ( var i=0, ien=buttons.length ; i<ien ; i++ ) {
+ button = buttons[i];
+
+ if ( button ) {
+ idx = baseIdx !== undefined ?
+ baseIdx+i :
+ i+'';
+
+ a.push( {
+ node: button.node,
+ name: button.conf.name,
+ idx: idx
+ } );
+
+ if ( button.buttons ) {
+ nodeBuilder( a, button.buttons, idx+'-' );
+ }
+ }
+ }
+ };
+
+ var run = function ( selector, inst ) {
+ var i, ien;
+ var buttons = [];
+ nodeBuilder( buttons, inst.s.buttons );
+
+ var nodes = $.map( buttons, function (v) {
+ return v.node;
+ } );
+
+ if ( Array.isArray( selector ) || selector instanceof $ ) {
+ for ( i=0, ien=selector.length ; i<ien ; i++ ) {
+ run( selector[i], inst );
+ }
+ return;
+ }
+
+ if ( selector === null || selector === undefined || selector === '*' ) {
+ // Select all
+ for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
+ ret.push( {
+ inst: inst,
+ node: buttons[i].node
+ } );
+ }
+ }
+ else if ( typeof selector === 'number' ) {
+ // Main button index selector
+ if (inst.s.buttons[ selector ]) {
+ ret.push( {
+ inst: inst,
+ node: inst.s.buttons[ selector ].node
+ } );
+ }
+ }
+ else if ( typeof selector === 'string' ) {
+ if ( selector.indexOf( ',' ) !== -1 ) {
+ // Split
+ var a = selector.split(',');
+
+ for ( i=0, ien=a.length ; i<ien ; i++ ) {
+ run( a[i].trim(), inst );
+ }
+ }
+ else if ( selector.match( /^\d+(\-\d+)*$/ ) ) {
+ // Sub-button index selector
+ var indexes = $.map( buttons, function (v) {
+ return v.idx;
+ } );
+
+ ret.push( {
+ inst: inst,
+ node: buttons[ $.inArray( selector, indexes ) ].node
+ } );
+ }
+ else if ( selector.indexOf( ':name' ) !== -1 ) {
+ // Button name selector
+ var name = selector.replace( ':name', '' );
+
+ for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
+ if ( buttons[i].name === name ) {
+ ret.push( {
+ inst: inst,
+ node: buttons[i].node
+ } );
+ }
+ }
+ }
+ else {
+ // jQuery selector on the nodes
+ $( nodes ).filter( selector ).each( function () {
+ ret.push( {
+ inst: inst,
+ node: this
+ } );
+ } );
+ }
+ }
+ else if ( typeof selector === 'object' && selector.nodeName ) {
+ // Node selector
+ var idx = $.inArray( selector, nodes );
+
+ if ( idx !== -1 ) {
+ ret.push( {
+ inst: inst,
+ node: nodes[ idx ]
+ } );
+ }
+ }
+ };
+
+
+ for ( var i=0, ien=insts.length ; i<ien ; i++ ) {
+ var inst = insts[i];
+
+ run( selector, inst );
+ }
+
+ return ret;
+};
+
+/**
+ * Default function used for formatting output data.
+ * @param {*} str Data to strip
+ */
+Buttons.stripData = function ( str, config ) {
+ if ( typeof str !== 'string' ) {
+ return str;
+ }
+
+ // Always remove script tags
+ str = str.replace( /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '' );
+
+ // Always remove comments
+ str = str.replace( /<!\-\-.*?\-\->/g, '' );
+
+ if ( ! config || config.stripHtml ) {
+ str = str.replace( /<[^>]*>/g, '' );
+ }
+
+ if ( ! config || config.trim ) {
+ str = str.replace( /^\s+|\s+$/g, '' );
+ }
+
+ if ( ! config || config.stripNewlines ) {
+ str = str.replace( /\n/g, ' ' );
+ }
+
+ if ( ! config || config.decodeEntities ) {
+ _exportTextarea.innerHTML = str;
+ str = _exportTextarea.value;
+ }
+
+ return str;
+};
+
+
+/**
+ * Buttons defaults. For full documentation, please refer to the docs/option
+ * directory or the DataTables site.
+ * @type {Object}
+ * @static
+ */
+Buttons.defaults = {
+ buttons: [ 'copy', 'excel', 'csv', 'pdf', 'print' ],
+ name: 'main',
+ tabIndex: 0,
+ dom: {
+ container: {
+ tag: 'div',
+ className: 'dt-buttons'
+ },
+ collection: {
+ tag: 'div',
+ className: ''
+ },
+ button: {
+ tag: 'button',
+ className: 'dt-button',
+ active: 'active',
+ disabled: 'disabled',
+ spacerClass: ''
+ },
+ buttonLiner: {
+ tag: 'span',
+ className: ''
+ },
+ split: {
+ tag: 'div',
+ className: 'dt-button-split',
+ },
+ splitWrapper: {
+ tag: 'div',
+ className: 'dt-btn-split-wrapper',
+ },
+ splitDropdown: {
+ tag: 'button',
+ text: '&#x25BC;',
+ className: 'dt-btn-split-drop',
+ align: 'split-right',
+ splitAlignClass: 'dt-button-split-left'
+ },
+ splitDropdownButton: {
+ tag: 'button',
+ className: 'dt-btn-split-drop-button dt-button',
+ },
+ splitCollection: {
+ tag: 'div',
+ className: 'dt-button-split-collection',
+ }
+ }
+};
+
+/**
+ * Version information
+ * @type {string}
+ * @static
+ */
+Buttons.version = '2.3.6';
+
+
+$.extend( _dtButtons, {
+ collection: {
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.collection', 'Collection' );
+ },
+ className: 'buttons-collection',
+ closeButton: false,
+ init: function ( dt, button, config ) {
+ button.attr( 'aria-expanded', false );
+ },
+ action: function ( e, dt, button, config ) {
+ if ( config._collection.parents('body').length ) {
+ this.popover(false, config);
+ }
+ else {
+ this.popover(config._collection, config);
+ }
+
+ // When activated using a key - auto focus on the
+ // first item in the popover
+ if (e.type === 'keypress') {
+ $('a, button', config._collection).eq(0).focus();
+ }
+ },
+ attr: {
+ 'aria-haspopup': 'dialog'
+ }
+ // Also the popover options, defined in Buttons.popover
+ },
+ split: {
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.split', 'Split' );
+ },
+ className: 'buttons-split',
+ closeButton: false,
+ init: function ( dt, button, config ) {
+ return button.attr( 'aria-expanded', false );
+ },
+ action: function ( e, dt, button, config ) {
+ this.popover(config._collection, config);
+ },
+ attr: {
+ 'aria-haspopup': 'dialog'
+ }
+ // Also the popover options, defined in Buttons.popover
+ },
+ copy: function ( dt, conf ) {
+ if ( _dtButtons.copyHtml5 ) {
+ return 'copyHtml5';
+ }
+ },
+ csv: function ( dt, conf ) {
+ if ( _dtButtons.csvHtml5 && _dtButtons.csvHtml5.available( dt, conf ) ) {
+ return 'csvHtml5';
+ }
+ },
+ excel: function ( dt, conf ) {
+ if ( _dtButtons.excelHtml5 && _dtButtons.excelHtml5.available( dt, conf ) ) {
+ return 'excelHtml5';
+ }
+ },
+ pdf: function ( dt, conf ) {
+ if ( _dtButtons.pdfHtml5 && _dtButtons.pdfHtml5.available( dt, conf ) ) {
+ return 'pdfHtml5';
+ }
+ },
+ pageLength: function ( dt ) {
+ var lengthMenu = dt.settings()[0].aLengthMenu;
+ var vals = [];
+ var lang = [];
+ var text = function ( dt ) {
+ return dt.i18n( 'buttons.pageLength', {
+ "-1": 'Show all rows',
+ _: 'Show %d rows'
+ }, dt.page.len() );
+ };
+
+ // Support for DataTables 1.x 2D array
+ if (Array.isArray( lengthMenu[0] )) {
+ vals = lengthMenu[0];
+ lang = lengthMenu[1];
+ }
+ else {
+ for (var i=0 ; i<lengthMenu.length ; i++) {
+ var option = lengthMenu[i];
+
+ // Support for DataTables 2 object in the array
+ if ($.isPlainObject(option)) {
+ vals.push(option.value);
+ lang.push(option.label);
+ }
+ else {
+ vals.push(option);
+ lang.push(option);
+ }
+ }
+ }
+
+ return {
+ extend: 'collection',
+ text: text,
+ className: 'buttons-page-length',
+ autoClose: true,
+ buttons: $.map( vals, function ( val, i ) {
+ return {
+ text: lang[i],
+ className: 'button-page-length',
+ action: function ( e, dt ) {
+ dt.page.len( val ).draw();
+ },
+ init: function ( dt, node, conf ) {
+ var that = this;
+ var fn = function () {
+ that.active( dt.page.len() === val );
+ };
+
+ dt.on( 'length.dt'+conf.namespace, fn );
+ fn();
+ },
+ destroy: function ( dt, node, conf ) {
+ dt.off( 'length.dt'+conf.namespace );
+ }
+ };
+ } ),
+ init: function ( dt, node, conf ) {
+ var that = this;
+ dt.on( 'length.dt'+conf.namespace, function () {
+ that.text( conf.text );
+ } );
+ },
+ destroy: function ( dt, node, conf ) {
+ dt.off( 'length.dt'+conf.namespace );
+ }
+ };
+ },
+ spacer: {
+ style: 'empty',
+ spacer: true,
+ text: function ( dt ) {
+ return dt.i18n( 'buttons.spacer', '' );
+ }
+ }
+} );
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables API
+ *
+ * For complete documentation, please refer to the docs/api directory or the
+ * DataTables site
+ */
+
+// Buttons group and individual button selector
+DataTable.Api.register( 'buttons()', function ( group, selector ) {
+ // Argument shifting
+ if ( selector === undefined ) {
+ selector = group;
+ group = undefined;
+ }
+
+ this.selector.buttonGroup = group;
+
+ var res = this.iterator( true, 'table', function ( ctx ) {
+ if ( ctx._buttons ) {
+ return Buttons.buttonSelector(
+ Buttons.instanceSelector( group, ctx._buttons ),
+ selector
+ );
+ }
+ }, true );
+
+ res._groupSelector = group;
+ return res;
+} );
+
+// Individual button selector
+DataTable.Api.register( 'button()', function ( group, selector ) {
+ // just run buttons() and truncate
+ var buttons = this.buttons( group, selector );
+
+ if ( buttons.length > 1 ) {
+ buttons.splice( 1, buttons.length );
+ }
+
+ return buttons;
+} );
+
+// Active buttons
+DataTable.Api.registerPlural( 'buttons().active()', 'button().active()', function ( flag ) {
+ if ( flag === undefined ) {
+ return this.map( function ( set ) {
+ return set.inst.active( set.node );
+ } );
+ }
+
+ return this.each( function ( set ) {
+ set.inst.active( set.node, flag );
+ } );
+} );
+
+// Get / set button action
+DataTable.Api.registerPlural( 'buttons().action()', 'button().action()', function ( action ) {
+ if ( action === undefined ) {
+ return this.map( function ( set ) {
+ return set.inst.action( set.node );
+ } );
+ }
+
+ return this.each( function ( set ) {
+ set.inst.action( set.node, action );
+ } );
+} );
+
+// Collection control
+DataTable.Api.registerPlural( 'buttons().collectionRebuild()', 'button().collectionRebuild()', function ( buttons ) {
+ return this.each( function ( set ) {
+ for(var i = 0; i < buttons.length; i++) {
+ if(typeof buttons[i] === 'object') {
+ buttons[i].parentConf = set;
+ }
+ }
+ set.inst.collectionRebuild( set.node, buttons );
+ } );
+} );
+
+// Enable / disable buttons
+DataTable.Api.register( ['buttons().enable()', 'button().enable()'], function ( flag ) {
+ return this.each( function ( set ) {
+ set.inst.enable( set.node, flag );
+ } );
+} );
+
+// Disable buttons
+DataTable.Api.register( ['buttons().disable()', 'button().disable()'], function () {
+ return this.each( function ( set ) {
+ set.inst.disable( set.node );
+ } );
+} );
+
+// Button index
+DataTable.Api.register( 'button().index()', function () {
+ var idx = null;
+
+ this.each( function ( set ) {
+ var res = set.inst.index( set.node );
+
+ if (res !== null) {
+ idx = res;
+ }
+ } );
+
+ return idx;
+} );
+
+// Get button nodes
+DataTable.Api.registerPlural( 'buttons().nodes()', 'button().node()', function () {
+ var jq = $();
+
+ // jQuery will automatically reduce duplicates to a single entry
+ $( this.each( function ( set ) {
+ jq = jq.add( set.inst.node( set.node ) );
+ } ) );
+
+ return jq;
+} );
+
+// Get / set button processing state
+DataTable.Api.registerPlural( 'buttons().processing()', 'button().processing()', function ( flag ) {
+ if ( flag === undefined ) {
+ return this.map( function ( set ) {
+ return set.inst.processing( set.node );
+ } );
+ }
+
+ return this.each( function ( set ) {
+ set.inst.processing( set.node, flag );
+ } );
+} );
+
+// Get / set button text (i.e. the button labels)
+DataTable.Api.registerPlural( 'buttons().text()', 'button().text()', function ( label ) {
+ if ( label === undefined ) {
+ return this.map( function ( set ) {
+ return set.inst.text( set.node );
+ } );
+ }
+
+ return this.each( function ( set ) {
+ set.inst.text( set.node, label );
+ } );
+} );
+
+// Trigger a button's action
+DataTable.Api.registerPlural( 'buttons().trigger()', 'button().trigger()', function () {
+ return this.each( function ( set ) {
+ set.inst.node( set.node ).trigger( 'click' );
+ } );
+} );
+
+// Button resolver to the popover
+DataTable.Api.register( 'button().popover()', function (content, options) {
+ return this.map( function ( set ) {
+ return set.inst._popover( content, this.button(this[0].node), options );
+ } );
+} );
+
+// Get the container elements
+DataTable.Api.register( 'buttons().containers()', function () {
+ var jq = $();
+ var groupSelector = this._groupSelector;
+
+ // We need to use the group selector directly, since if there are no buttons
+ // the result set will be empty
+ this.iterator( true, 'table', function ( ctx ) {
+ if ( ctx._buttons ) {
+ var insts = Buttons.instanceSelector( groupSelector, ctx._buttons );
+
+ for ( var i=0, ien=insts.length ; i<ien ; i++ ) {
+ jq = jq.add( insts[i].container() );
+ }
+ }
+ } );
+
+ return jq;
+} );
+
+DataTable.Api.register( 'buttons().container()', function () {
+ // API level of nesting is `buttons()` so we can zip into the containers method
+ return this.containers().eq(0);
+} );
+
+// Add a new button
+DataTable.Api.register( 'button().add()', function ( idx, conf, draw ) {
+ var ctx = this.context;
+
+ // Don't use `this` as it could be empty - select the instances directly
+ if ( ctx.length ) {
+ var inst = Buttons.instanceSelector( this._groupSelector, ctx[0]._buttons );
+
+ if ( inst.length ) {
+ inst[0].add( conf, idx , draw);
+ }
+ }
+
+ return this.button( this._groupSelector, idx );
+} );
+
+// Destroy the button sets selected
+DataTable.Api.register( 'buttons().destroy()', function () {
+ this.pluck( 'inst' ).unique().each( function ( inst ) {
+ inst.destroy();
+ } );
+
+ return this;
+} );
+
+// Remove a button
+DataTable.Api.registerPlural( 'buttons().remove()', 'buttons().remove()', function () {
+ this.each( function ( set ) {
+ set.inst.remove( set.node );
+ } );
+
+ return this;
+} );
+
+// Information box that can be used by buttons
+var _infoTimer;
+DataTable.Api.register( 'buttons.info()', function ( title, message, time ) {
+ var that = this;
+
+ if ( title === false ) {
+ this.off('destroy.btn-info');
+ _fadeOut(
+ $('#datatables_buttons_info'),
+ 400,
+ function () {
+ $(this).remove();
+ }
+ );
+ clearTimeout( _infoTimer );
+ _infoTimer = null;
+
+ return this;
+ }
+
+ if ( _infoTimer ) {
+ clearTimeout( _infoTimer );
+ }
+
+ if ( $('#datatables_buttons_info').length ) {
+ $('#datatables_buttons_info').remove();
+ }
+
+ title = title ? '<h2>'+title+'</h2>' : '';
+
+ _fadeIn(
+ $('<div id="datatables_buttons_info" class="dt-button-info"/>')
+ .html( title )
+ .append( $('<div/>')[ typeof message === 'string' ? 'html' : 'append' ]( message ) )
+ .css( 'display', 'none' )
+ .appendTo( 'body' )
+ );
+
+ if ( time !== undefined && time !== 0 ) {
+ _infoTimer = setTimeout( function () {
+ that.buttons.info( false );
+ }, time );
+ }
+
+ this.on('destroy.btn-info', function () {
+ that.buttons.info(false);
+ });
+
+ return this;
+} );
+
+// Get data from the table for export - this is common to a number of plug-in
+// buttons so it is included in the Buttons core library
+DataTable.Api.register( 'buttons.exportData()', function ( options ) {
+ if ( this.context.length ) {
+ return _exportData( new DataTable.Api( this.context[0] ), options );
+ }
+} );
+
+// Get information about the export that is common to many of the export data
+// types (DRY)
+DataTable.Api.register( 'buttons.exportInfo()', function ( conf ) {
+ if ( ! conf ) {
+ conf = {};
+ }
+
+ return {
+ filename: _filename( conf ),
+ title: _title( conf ),
+ messageTop: _message(this, conf.message || conf.messageTop, 'top'),
+ messageBottom: _message(this, conf.messageBottom, 'bottom')
+ };
+} );
+
+
+
+/**
+ * Get the file name for an exported file.
+ *
+ * @param {object} config Button configuration
+ * @param {boolean} incExtension Include the file name extension
+ */
+var _filename = function ( config )
+{
+ // Backwards compatibility
+ var filename = config.filename === '*' && config.title !== '*' && config.title !== undefined && config.title !== null && config.title !== '' ?
+ config.title :
+ config.filename;
+
+ if ( typeof filename === 'function' ) {
+ filename = filename();
+ }
+
+ if ( filename === undefined || filename === null ) {
+ return null;
+ }
+
+ if ( filename.indexOf( '*' ) !== -1 ) {
+ filename = filename.replace( '*', $('head > title').text() ).trim();
+ }
+
+ // Strip characters which the OS will object to
+ filename = filename.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, "");
+
+ var extension = _stringOrFunction( config.extension );
+ if ( ! extension ) {
+ extension = '';
+ }
+
+ return filename + extension;
+};
+
+/**
+ * Simply utility method to allow parameters to be given as a function
+ *
+ * @param {undefined|string|function} option Option
+ * @return {null|string} Resolved value
+ */
+var _stringOrFunction = function ( option )
+{
+ if ( option === null || option === undefined ) {
+ return null;
+ }
+ else if ( typeof option === 'function' ) {
+ return option();
+ }
+ return option;
+};
+
+/**
+ * Get the title for an exported file.
+ *
+ * @param {object} config Button configuration
+ */
+var _title = function ( config )
+{
+ var title = _stringOrFunction( config.title );
+
+ return title === null ?
+ null : title.indexOf( '*' ) !== -1 ?
+ title.replace( '*', $('head > title').text() || 'Exported data' ) :
+ title;
+};
+
+var _message = function ( dt, option, position )
+{
+ var message = _stringOrFunction( option );
+ if ( message === null ) {
+ return null;
+ }
+
+ var caption = $('caption', dt.table().container()).eq(0);
+ if ( message === '*' ) {
+ var side = caption.css( 'caption-side' );
+ if ( side !== position ) {
+ return null;
+ }
+
+ return caption.length ?
+ caption.text() :
+ '';
+ }
+
+ return message;
+};
+
+
+
+
+var _exportTextarea = $('<textarea/>')[0];
+var _exportData = function ( dt, inOpts )
+{
+ var config = $.extend( true, {}, {
+ rows: null,
+ columns: '',
+ modifier: {
+ search: 'applied',
+ order: 'applied'
+ },
+ orthogonal: 'display',
+ stripHtml: true,
+ stripNewlines: true,
+ decodeEntities: true,
+ trim: true,
+ format: {
+ header: function ( d ) {
+ return Buttons.stripData( d, config );
+ },
+ footer: function ( d ) {
+ return Buttons.stripData( d, config );
+ },
+ body: function ( d ) {
+ return Buttons.stripData( d, config );
+ }
+ },
+ customizeData: null
+ }, inOpts );
+
+ var header = dt.columns( config.columns ).indexes().map( function (idx) {
+ var el = dt.column( idx ).header();
+ return config.format.header( el.innerHTML, idx, el );
+ } ).toArray();
+
+ var footer = dt.table().footer() ?
+ dt.columns( config.columns ).indexes().map( function (idx) {
+ var el = dt.column( idx ).footer();
+ return config.format.footer( el ? el.innerHTML : '', idx, el );
+ } ).toArray() :
+ null;
+
+ // If Select is available on this table, and any rows are selected, limit the export
+ // to the selected rows. If no rows are selected, all rows will be exported. Specify
+ // a `selected` modifier to control directly.
+ var modifier = $.extend( {}, config.modifier );
+ if ( dt.select && typeof dt.select.info === 'function' && modifier.selected === undefined ) {
+ if ( dt.rows( config.rows, $.extend( { selected: true }, modifier ) ).any() ) {
+ $.extend( modifier, { selected: true } )
+ }
+ }
+
+ var rowIndexes = dt.rows( config.rows, modifier ).indexes().toArray();
+ var selectedCells = dt.cells( rowIndexes, config.columns );
+ var cells = selectedCells
+ .render( config.orthogonal )
+ .toArray();
+ var cellNodes = selectedCells
+ .nodes()
+ .toArray();
+
+ var columns = header.length;
+ var rows = columns > 0 ? cells.length / columns : 0;
+ var body = [];
+ var cellCounter = 0;
+
+ for ( var i=0, ien=rows ; i<ien ; i++ ) {
+ var row = [ columns ];
+
+ for ( var j=0 ; j<columns ; j++ ) {
+ row[j] = config.format.body( cells[ cellCounter ], i, j, cellNodes[ cellCounter ] );
+ cellCounter++;
+ }
+
+ body[i] = row;
+ }
+
+ var data = {
+ header: header,
+ footer: footer,
+ body: body
+ };
+
+ if ( config.customizeData ) {
+ config.customizeData( data );
+ }
+
+ return data;
+};
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * DataTables interface
+ */
+
+// Attach to DataTables objects for global access
+$.fn.dataTable.Buttons = Buttons;
+$.fn.DataTable.Buttons = Buttons;
+
+
+
+// DataTables creation - check if the buttons have been defined for this table,
+// they will have been if the `B` option was used in `dom`, otherwise we should
+// create the buttons instance here so they can be inserted into the document
+// using the API. Listen for `init` for compatibility with pre 1.10.10, but to
+// be removed in future.
+$(document).on( 'init.dt plugin-init.dt', function (e, settings) {
+ if ( e.namespace !== 'dt' ) {
+ return;
+ }
+
+ var opts = settings.oInit.buttons || DataTable.defaults.buttons;
+
+ if ( opts && ! settings._buttons ) {
+ new Buttons( settings, opts ).container();
+ }
+} );
+
+function _init ( settings, options ) {
+ var api = new DataTable.Api( settings );
+ var opts = options
+ ? options
+ : api.init().buttons || DataTable.defaults.buttons;
+
+ return new Buttons( api, opts ).container();
+}
+
+// DataTables `dom` feature option
+DataTable.ext.feature.push( {
+ fnInit: _init,
+ cFeature: "B"
+} );
+
+// DataTables 2 layout feature
+if ( DataTable.ext.features ) {
+ DataTable.ext.features.register( 'buttons', _init );
+}
+
+
+return DataTable;
+}));
diff --git a/public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.min.js b/public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.min.js
new file mode 100644
index 0000000..9cfdde4
--- /dev/null
+++ b/public/assets/js/DataTables/Buttons-2.3.6/js/dataTables.buttons.min.js
@@ -0,0 +1,4 @@
+/*! Buttons for DataTables 2.3.6
+ * ©2016-2023 SpryMedia Ltd - datatables.net/license
+ */
+!function(e){var o,i;"function"==typeof define&&define.amd?define(["jquery","datatables.net"],function(t){return e(t,window,document)}):"object"==typeof exports?(o=require("jquery"),i=function(t,n){n.fn.dataTable||require("datatables.net")(t,n)},"undefined"!=typeof window?module.exports=function(t,n){return t=t||window,n=n||o(t),i(t,n),e(n,t,t.document)}:(i(window,o),module.exports=e(o,window,window.document))):e(jQuery,window,document)}(function(v,m,y,x){"use strict";var e=v.fn.dataTable,o=0,w=0,C=e.ext.buttons;function _(t,n,e){v.fn.animate?t.stop().fadeIn(n,e):(t.css("display","block"),e&&e.call(t))}function A(t,n,e){v.fn.animate?t.stop().fadeOut(n,e):(t.css("display","none"),e&&e.call(t))}function k(n,t){if(!(this instanceof k))return function(t){return new k(t,n).container()};!0===(t=void 0===t?{}:t)&&(t={}),Array.isArray(t)&&(t={buttons:t}),this.c=v.extend(!0,{},k.defaults,t),t.buttons&&(this.c.buttons=t.buttons),this.s={dt:new e.Api(n),buttons:[],listenKeys:"",namespace:"dtb"+o++},this.dom={container:v("<"+this.c.dom.container.tag+"/>").addClass(this.c.dom.container.className)},this._constructor()}v.extend(k.prototype,{action:function(t,n){t=this._nodeToButton(t);return n===x?t.conf.action:(t.conf.action=n,this)},active:function(t,n){var t=this._nodeToButton(t),e=this.c.dom.button.active,t=v(t.node);return n===x?t.hasClass(e):(t.toggleClass(e,n===x||n),this)},add:function(t,n,e){var o=this.s.buttons;if("string"==typeof n){for(var i=n.split("-"),s=this.s,r=0,a=i.length-1;r<a;r++)s=s.buttons[+i[r]];o=s.buttons,n=+i[i.length-1]}return this._expandButton(o,t,t!==x?t.split:x,(t===x||t.split===x||0===t.split.length)&&s!==x,!1,n),e!==x&&!0!==e||this._draw(),this},collectionRebuild:function(t,n){var e=this._nodeToButton(t);if(n!==x){for(var o=e.buttons.length-1;0<=o;o--)this.remove(e.buttons[o].node);for(e.conf.prefixButtons&&n.unshift.apply(n,e.conf.prefixButtons),e.conf.postfixButtons&&n.push.apply(n,e.conf.postfixButtons),o=0;o<n.length;o++){var i=n[o];this._expandButton(e.buttons,i,i!==x&&i.config!==x&&i.config.split!==x,!0,i.parentConf!==x&&i.parentConf.split!==x,null,i.parentConf)}}this._draw(e.collection,e.buttons)},container:function(){return this.dom.container},disable:function(t){t=this._nodeToButton(t);return v(t.node).addClass(this.c.dom.button.disabled).prop("disabled",!0),this},destroy:function(){v("body").off("keyup."+this.s.namespace);for(var t=this.s.buttons.slice(),n=0,e=t.length;n<e;n++)this.remove(t[n].node);this.dom.container.remove();var o=this.s.dt.settings()[0];for(n=0,e=o.length;n<e;n++)if(o.inst===this){o.splice(n,1);break}return this},enable:function(t,n){return!1===n?this.disable(t):(n=this._nodeToButton(t),v(n.node).removeClass(this.c.dom.button.disabled).prop("disabled",!1),this)},index:function(t,n,e){n||(n="",e=this.s.buttons);for(var o=0,i=e.length;o<i;o++){var s=e[o].buttons;if(e[o].node===t)return n+o;if(s&&s.length){s=this.index(t,o+"-",s);if(null!==s)return s}}return null},name:function(){return this.c.name},node:function(t){return t?(t=this._nodeToButton(t),v(t.node)):this.dom.container},processing:function(t,n){var e=this.s.dt,o=this._nodeToButton(t);return n===x?v(o.node).hasClass("processing"):(v(o.node).toggleClass("processing",n),v(e.table().node()).triggerHandler("buttons-processing.dt",[n,e.button(t),e,v(t),o.conf]),this)},remove:function(t){var n=this._nodeToButton(t),e=this._nodeToHost(t),o=this.s.dt;if(n.buttons.length)for(var i=n.buttons.length-1;0<=i;i--)this.remove(n.buttons[i].node);n.conf.destroying=!0,n.conf.destroy&&n.conf.destroy.call(o.button(t),o,v(t),n.conf),this._removeKey(n.conf),v(n.node).remove();o=v.inArray(n,e);return e.splice(o,1),this},text:function(t,n){function e(t){return"function"==typeof t?t(i,s,o.conf):t}var o=this._nodeToButton(t),t=this.c.dom.collection.buttonLiner,t=(o.inCollection&&t&&t.tag?t:this.c.dom.buttonLiner).tag,i=this.s.dt,s=v(o.node);return n===x?e(o.conf.text):(o.conf.text=n,(t?s.children(t).eq(0).filter(":not(.dt-down-arrow)"):s).html(e(n)),this)},_constructor:function(){var e=this,t=this.s.dt,o=t.settings()[0],n=this.c.buttons;o._buttons||(o._buttons=[]),o._buttons.push({inst:this,name:this.c.name});for(var i=0,s=n.length;i<s;i++)this.add(n[i]);t.on("destroy",function(t,n){n===o&&e.destroy()}),v("body").on("keyup."+this.s.namespace,function(t){var n;y.activeElement&&y.activeElement!==y.body||(n=String.fromCharCode(t.keyCode).toLowerCase(),-1!==e.s.listenKeys.toLowerCase().indexOf(n)&&e._keypress(n,t))})},_addKey:function(t){t.key&&(this.s.listenKeys+=(v.isPlainObject(t.key)?t.key:t).key)},_draw:function(t,n){t||(t=this.dom.container,n=this.s.buttons),t.children().detach();for(var e=0,o=n.length;e<o;e++)t.append(n[e].inserter),t.append(" "),n[e].buttons&&n[e].buttons.length&&this._draw(n[e].collection,n[e].buttons)},_expandButton:function(t,n,e,o,i,s,r){var a=this.s.dt,l=!1,c=Array.isArray(n)?n:[n];n===x&&(c=Array.isArray(e)?e:[e]),n!==x&&n.split!==x&&(l=!0);for(var u=0,d=c.length;u<d;u++){var f=this._resolveExtends(c[u]);if(f)if(l=!(f.config===x||!f.config.split),Array.isArray(f))this._expandButton(t,f,p!==x&&p.conf!==x?p.conf.split:x,o,r!==x&&r.split!==x,s,r);else{var p=this._buildButton(f,o,f.split!==x||f.config!==x&&f.config.split!==x,i);if(p){if(s!==x&&null!==s?(t.splice(s,0,p),s++):t.push(p),p.conf.buttons||p.conf.split){if(p.collection=v("<"+(l?this.c.dom.splitCollection:this.c.dom.collection).tag+"/>"),p.conf._collection=p.collection,p.conf.split)for(var h=0;h<p.conf.split.length;h++)"object"==typeof p.conf.split[h]&&(p.conf.split[h].parent=r,p.conf.split[h].collectionLayout===x&&(p.conf.split[h].collectionLayout=p.conf.collectionLayout),p.conf.split[h].dropup===x&&(p.conf.split[h].dropup=p.conf.dropup),p.conf.split[h].fade===x)&&(p.conf.split[h].fade=p.conf.fade);else v(p.node).append(v('<span class="dt-down-arrow">'+this.c.dom.splitDropdown.text+"</span>"));this._expandButton(p.buttons,p.conf.buttons,p.conf.split,!l,l,s,p.conf)}p.conf.parent=r,f.init&&f.init.call(a.button(p.node),a,v(p.node),f),0}}}},_buildButton:function(n,t,e,o){function i(t){return"function"==typeof t?t(h,l,n):t}var s,r,a,l,c=this.c.dom.button,u=this.c.dom.buttonLiner,d=this.c.dom.collection,f=(this.c.dom.split,this.c.dom.splitCollection),p=this.c.dom.splitDropdownButton,h=this.s.dt;if(n.spacer)return r=v("<span></span>").addClass("dt-button-spacer "+n.style+" "+c.spacerClass).html(i(n.text)),{conf:n,node:r,inserter:r,buttons:[],inCollection:t,isSplit:e,inSplit:o,collection:null};if(!e&&o&&f?c=p:!e&&t&&d.button&&(c=d.button),!e&&o&&f.buttonLiner?u=f.buttonLiner:!e&&t&&d.buttonLiner&&(u=d.buttonLiner),n.available&&!n.available(h,n)&&!n.hasOwnProperty("html"))return!1;n.hasOwnProperty("html")?l=v(n.html):(s=function(t,n,e,o){o.action.call(n.button(e),t,n,e,o),v(n.table().node()).triggerHandler("buttons-action.dt",[n.button(e),n,e,o])},r=n.tag||c.tag,a=n.clickBlurs===x||n.clickBlurs,l=v("<"+r+"/>").addClass(c.className).addClass(o?this.c.dom.splitDropdownButton.className:"").attr("tabindex",this.s.dt.settings()[0].iTabIndex).attr("aria-controls",this.s.dt.table().node().id).on("click.dtb",function(t){t.preventDefault(),!l.hasClass(c.disabled)&&n.action&&s(t,h,l,n),a&&l.trigger("blur")}).on("keypress.dtb",function(t){13===t.keyCode&&(t.preventDefault(),!l.hasClass(c.disabled))&&n.action&&s(t,h,l,n)}),"a"===r.toLowerCase()&&l.attr("href","#"),"button"===r.toLowerCase()&&l.attr("type","button"),u.tag?(p=v("<"+u.tag+"/>").html(i(n.text)).addClass(u.className),"a"===u.tag.toLowerCase()&&p.attr("href","#"),l.append(p)):l.html(i(n.text)),!1===n.enabled&&l.addClass(c.disabled),n.className&&l.addClass(n.className),n.titleAttr&&l.attr("title",i(n.titleAttr)),n.attr&&l.attr(n.attr),n.namespace||(n.namespace=".dt-button-"+w++),n.config!==x&&n.config.split&&(n.split=n.config.split));var b,g,m,y,f=this.c.dom.buttonContainer,d=f&&f.tag?v("<"+f.tag+"/>").addClass(f.className).append(l):l;return this._addKey(n),this.c.buttonCreated&&(d=this.c.buttonCreated(n,d)),e&&((b=v("<div/>").addClass(this.c.dom.splitWrapper.className)).append(l),g=v.extend(n,{text:this.c.dom.splitDropdown.text,className:this.c.dom.splitDropdown.className,closeButton:!1,attr:{"aria-haspopup":"dialog","aria-expanded":!1},align:this.c.dom.splitDropdown.align,splitAlignClass:this.c.dom.splitDropdown.splitAlignClass}),this._addKey(g),m=function(t,n,e,o){C.split.action.call(n.button(b),t,n,e,o),v(n.table().node()).triggerHandler("buttons-action.dt",[n.button(e),n,e,o]),e.attr("aria-expanded",!0)},y=v('<button class="'+this.c.dom.splitDropdown.className+' dt-button"><span class="dt-btn-split-drop-arrow">'+this.c.dom.splitDropdown.text+"</span></button>").on("click.dtb",function(t){t.preventDefault(),t.stopPropagation(),y.hasClass(c.disabled)||m(t,h,y,g),a&&y.trigger("blur")}).on("keypress.dtb",function(t){13===t.keyCode&&(t.preventDefault(),y.hasClass(c.disabled)||m(t,h,y,g))}),0===n.split.length&&y.addClass("dtb-hide-drop"),b.append(y).attr(g.attr)),{conf:n,node:(e?b:l).get(0),inserter:e?b:d,buttons:[],inCollection:t,isSplit:e,inSplit:o,collection:null}},_nodeToButton:function(t,n){for(var e=0,o=(n=n||this.s.buttons).length;e<o;e++){if(n[e].node===t)return n[e];if(n[e].buttons.length){var i=this._nodeToButton(t,n[e].buttons);if(i)return i}}},_nodeToHost:function(t,n){for(var e=0,o=(n=n||this.s.buttons).length;e<o;e++){if(n[e].node===t)return n;if(n[e].buttons.length){var i=this._nodeToHost(t,n[e].buttons);if(i)return i}}},_keypress:function(s,r){var a;r._buttonsHandled||(a=function(t){for(var n,e,o=0,i=t.length;o<i;o++)n=t[o].conf,e=t[o].node,!n.key||n.key!==s&&(!v.isPlainObject(n.key)||n.key.key!==s||n.key.shiftKey&&!r.shiftKey||n.key.altKey&&!r.altKey||n.key.ctrlKey&&!r.ctrlKey||n.key.metaKey&&!r.metaKey)||(r._buttonsHandled=!0,v(e).click()),t[o].buttons.length&&a(t[o].buttons)})(this.s.buttons)},_removeKey:function(t){var n;t.key&&(t=(v.isPlainObject(t.key)?t.key:t).key,n=this.s.listenKeys.split(""),t=v.inArray(t,n),n.splice(t,1),this.s.listenKeys=n.join(""))},_resolveExtends:function(e){function t(t){for(var n=0;!v.isPlainObject(t)&&!Array.isArray(t);){if(t===x)return;if("function"==typeof t){if(!(t=t.call(i,s,e)))return!1}else if("string"==typeof t){if(!C[t])return{html:t};t=C[t]}if(30<++n)throw"Buttons: Too many iterations"}return Array.isArray(t)?t:v.extend({},t)}var n,o,i=this,s=this.s.dt;for(e=t(e);e&&e.extend;){if(!C[e.extend])throw"Cannot extend unknown button type: "+e.extend;var r=t(C[e.extend]);if(Array.isArray(r))return r;if(!r)return!1;var a=r.className;e.config!==x&&r.config!==x&&(e.config=v.extend({},r.config,e.config)),e=v.extend({},r,e),a&&e.className!==a&&(e.className=a+" "+e.className),e.extend=r.extend}var l=e.postfixButtons;if(l)for(e.buttons||(e.buttons=[]),n=0,o=l.length;n<o;n++)e.buttons.push(l[n]);var c=e.prefixButtons;if(c)for(e.buttons||(e.buttons=[]),n=0,o=c.length;n<o;n++)e.buttons.splice(n,0,c[n]);return e},_popover:function(o,t,n,e){function i(){h=!0,A(v(".dt-button-collection"),b.fade,function(){v(this).detach()}),v(f.buttons('[aria-haspopup="dialog"][aria-expanded="true"]').nodes()).attr("aria-expanded","false"),v("div.dt-button-background").off("click.dtb-collection"),k.background(!1,b.backgroundClassName,b.fade,g),v(m).off("resize.resize.dtb-collection"),v("body").off(".dtb-collection"),f.off("buttons-action.b-internal"),f.off("destroy")}var s,r,a,l,c,u,d,f=t,p=this.c,h=!1,b=v.extend({align:"button-left",autoClose:!1,background:!0,backgroundClassName:"dt-button-background",closeButton:!0,contentClassName:p.dom.collection.className,collectionLayout:"",collectionTitle:"",dropup:!1,fade:400,popoverTitle:"",rightAlignClassName:"dt-button-right",tag:p.dom.collection.tag},n),g=t.node();!1===o?i():((p=v(f.buttons('[aria-haspopup="dialog"][aria-expanded="true"]').nodes())).length&&(g.closest("div.dt-button-collection").length&&(g=p.eq(0)),i()),n=v(".dt-button",o).length,p="",3===n?p="dtb-b3":2===n?p="dtb-b2":1===n&&(p="dtb-b1"),s=v("<div/>").addClass("dt-button-collection").addClass(b.collectionLayout).addClass(b.splitAlignClass).addClass(p).css("display","none").attr({"aria-modal":!0,role:"dialog"}),o=v(o).addClass(b.contentClassName).attr("role","menu").appendTo(s),g.attr("aria-expanded","true"),g.parents("body")[0]!==y.body&&(g=y.body.lastChild),b.popoverTitle?s.prepend('<div class="dt-button-collection-title">'+b.popoverTitle+"</div>"):b.collectionTitle&&s.prepend('<div class="dt-button-collection-title">'+b.collectionTitle+"</div>"),b.closeButton&&s.prepend('<div class="dtb-popover-close">x</div>').addClass("dtb-collection-closeable"),_(s.insertAfter(g),b.fade),n=v(t.table().container()),d=s.css("position"),"container"!==b.span&&"dt-container"!==b.align||(g=g.parent(),s.css("width",n.width())),"absolute"===d?(p=v(g[0].offsetParent),t=g.position(),n=g.offset(),r=p.offset(),a=p.position(),l=m.getComputedStyle(p[0]),r.height=p.outerHeight(),r.width=p.width()+parseFloat(l.paddingLeft),r.right=r.left+r.width,r.bottom=r.top+r.height,p=t.top+g.outerHeight(),c=t.left,s.css({top:p,left:c}),l=m.getComputedStyle(s[0]),(u=s.offset()).height=s.outerHeight(),u.width=s.outerWidth(),u.right=u.left+u.width,u.bottom=u.top+u.height,u.marginTop=parseFloat(l.marginTop),u.marginBottom=parseFloat(l.marginBottom),b.dropup&&(p=t.top-u.height-u.marginTop-u.marginBottom),"button-right"!==b.align&&!s.hasClass(b.rightAlignClassName)||(c=t.left-u.width+g.outerWidth()),"dt-container"!==b.align&&"container"!==b.align||(c=c<t.left?-t.left:c)+u.width>r.width&&(c=r.width-u.width),a.left+c+u.width>v(m).width()&&(c=v(m).width()-u.width-a.left),n.left+c<0&&(c=-n.left),a.top+p+u.height>v(m).height()+v(m).scrollTop()&&(p=t.top-u.height-u.marginTop-u.marginBottom),a.top+p<v(m).scrollTop()&&(p=t.top+g.outerHeight()),s.css({top:p,left:c})):((d=function(){var t=v(m).height()/2,n=s.height()/2;s.css("marginTop",-1*(n=t<n?t:n))})(),v(m).on("resize.dtb-collection",function(){d()})),b.background&&k.background(!0,b.backgroundClassName,b.fade,b.backgroundHost||g),v("div.dt-button-background").on("click.dtb-collection",function(){}),b.autoClose&&setTimeout(function(){f.on("buttons-action.b-internal",function(t,n,e,o){o[0]!==g[0]&&i()})},0),v(s).trigger("buttons-popover.dt"),f.on("destroy",i),setTimeout(function(){h=!1,v("body").on("click.dtb-collection",function(t){var n,e;!h&&(n=v.fn.addBack?"addBack":"andSelf",e=v(t.target).parent()[0],!v(t.target).parents()[n]().filter(o).length&&!v(e).hasClass("dt-buttons")||v(t.target).hasClass("dt-button-background"))&&i()}).on("keyup.dtb-collection",function(t){27===t.keyCode&&i()}).on("keydown.dtb-collection",function(t){var n=v("a, button",o),e=y.activeElement;9===t.keyCode&&(-1===n.index(e)?(n.first().focus(),t.preventDefault()):t.shiftKey?e===n[0]&&(n.last().focus(),t.preventDefault()):e===n.last()[0]&&(n.first().focus(),t.preventDefault()))})},0))}}),k.background=function(t,n,e,o){e===x&&(e=400),o=o||y.body,t?_(v("<div/>").addClass(n).css("display","none").insertAfter(o),e):A(v("div."+n),e,function(){v(this).removeClass(n).remove()})},k.instanceSelector=function(t,i){var s,r,a;return t===x||null===t?v.map(i,function(t){return t.inst}):(s=[],r=v.map(i,function(t){return t.name}),(a=function(t){var n;if(Array.isArray(t))for(var e=0,o=t.length;e<o;e++)a(t[e]);else"string"==typeof t?-1!==t.indexOf(",")?a(t.split(",")):-1!==(n=v.inArray(t.trim(),r))&&s.push(i[n].inst):"number"==typeof t?s.push(i[t].inst):"object"==typeof t&&s.push(t)})(t),s)},k.buttonSelector=function(t,n){for(var c=[],u=function(t,n,e){for(var o,i,s=0,r=n.length;s<r;s++)(o=n[s])&&(t.push({node:o.node,name:o.conf.name,idx:i=e!==x?e+s:s+""}),o.buttons)&&u(t,o.buttons,i+"-")},d=function(t,n){var e=[],o=(u(e,n.s.buttons),v.map(e,function(t){return t.node}));if(Array.isArray(t)||t instanceof v)for(s=0,r=t.length;s<r;s++)d(t[s],n);else if(null===t||t===x||"*"===t)for(s=0,r=e.length;s<r;s++)c.push({inst:n,node:e[s].node});else if("number"==typeof t)n.s.buttons[t]&&c.push({inst:n,node:n.s.buttons[t].node});else if("string"==typeof t)if(-1!==t.indexOf(","))for(var i=t.split(","),s=0,r=i.length;s<r;s++)d(i[s].trim(),n);else if(t.match(/^\d+(\-\d+)*$/)){var a=v.map(e,function(t){return t.idx});c.push({inst:n,node:e[v.inArray(t,a)].node})}else if(-1!==t.indexOf(":name")){var l=t.replace(":name","");for(s=0,r=e.length;s<r;s++)e[s].name===l&&c.push({inst:n,node:e[s].node})}else v(o).filter(t).each(function(){c.push({inst:n,node:this})});else"object"==typeof t&&t.nodeName&&-1!==(a=v.inArray(t,o))&&c.push({inst:n,node:o[a]})},e=0,o=t.length;e<o;e++){var i=t[e];d(n,i)}return c},k.stripData=function(t,n){return"string"==typeof t&&(t=(t=t.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"")).replace(/<!\-\-.*?\-\->/g,""),n&&!n.stripHtml||(t=t.replace(/<[^>]*>/g,"")),n&&!n.trim||(t=t.replace(/^\s+|\s+$/g,"")),n&&!n.stripNewlines||(t=t.replace(/\n/g," ")),!n||n.decodeEntities)&&(l.innerHTML=t,t=l.value),t},k.defaults={buttons:["copy","excel","csv","pdf","print"],name:"main",tabIndex:0,dom:{container:{tag:"div",className:"dt-buttons"},collection:{tag:"div",className:""},button:{tag:"button",className:"dt-button",active:"active",disabled:"disabled",spacerClass:""},buttonLiner:{tag:"span",className:""},split:{tag:"div",className:"dt-button-split"},splitWrapper:{tag:"div",className:"dt-btn-split-wrapper"},splitDropdown:{tag:"button",text:"&#x25BC;",className:"dt-btn-split-drop",align:"split-right",splitAlignClass:"dt-button-split-left"},splitDropdownButton:{tag:"button",className:"dt-btn-split-drop-button dt-button"},splitCollection:{tag:"div",className:"dt-button-split-collection"}}},v.extend(C,{collection:{text:function(t){return t.i18n("buttons.collection","Collection")},className:"buttons-collection",closeButton:!(k.version="2.3.6"),init:function(t,n,e){n.attr("aria-expanded",!1)},action:function(t,n,e,o){o._collection.parents("body").length?this.popover(!1,o):this.popover(o._collection,o),"keypress"===t.type&&v("a, button",o._collection).eq(0).focus()},attr:{"aria-haspopup":"dialog"}},split:{text:function(t){return t.i18n("buttons.split","Split")},className:"buttons-split",closeButton:!1,init:function(t,n,e){return n.attr("aria-expanded",!1)},action:function(t,n,e,o){this.popover(o._collection,o)},attr:{"aria-haspopup":"dialog"}},copy:function(t,n){if(C.copyHtml5)return"copyHtml5"},csv:function(t,n){if(C.csvHtml5&&C.csvHtml5.available(t,n))return"csvHtml5"},excel:function(t,n){if(C.excelHtml5&&C.excelHtml5.available(t,n))return"excelHtml5"},pdf:function(t,n){if(C.pdfHtml5&&C.pdfHtml5.available(t,n))return"pdfHtml5"},pageLength:function(t){var n=t.settings()[0].aLengthMenu,e=[],o=[];if(Array.isArray(n[0]))e=n[0],o=n[1];else for(var i=0;i<n.length;i++){var s=n[i];v.isPlainObject(s)?(e.push(s.value),o.push(s.label)):(e.push(s),o.push(s))}return{extend:"collection",text:function(t){return t.i18n("buttons.pageLength",{"-1":"Show all rows",_:"Show %d rows"},t.page.len())},className:"buttons-page-length",autoClose:!0,buttons:v.map(e,function(s,t){return{text:o[t],className:"button-page-length",action:function(t,n){n.page.len(s).draw()},init:function(t,n,e){function o(){i.active(t.page.len()===s)}var i=this;t.on("length.dt"+e.namespace,o),o()},destroy:function(t,n,e){t.off("length.dt"+e.namespace)}}}),init:function(t,n,e){var o=this;t.on("length.dt"+e.namespace,function(){o.text(e.text)})},destroy:function(t,n,e){t.off("length.dt"+e.namespace)}}},spacer:{style:"empty",spacer:!0,text:function(t){return t.i18n("buttons.spacer","")}}}),e.Api.register("buttons()",function(n,e){e===x&&(e=n,n=x),this.selector.buttonGroup=n;var t=this.iterator(!0,"table",function(t){if(t._buttons)return k.buttonSelector(k.instanceSelector(n,t._buttons),e)},!0);return t._groupSelector=n,t}),e.Api.register("button()",function(t,n){t=this.buttons(t,n);return 1<t.length&&t.splice(1,t.length),t}),e.Api.registerPlural("buttons().active()","button().active()",function(n){return n===x?this.map(function(t){return t.inst.active(t.node)}):this.each(function(t){t.inst.active(t.node,n)})}),e.Api.registerPlural("buttons().action()","button().action()",function(n){return n===x?this.map(function(t){return t.inst.action(t.node)}):this.each(function(t){t.inst.action(t.node,n)})}),e.Api.registerPlural("buttons().collectionRebuild()","button().collectionRebuild()",function(e){return this.each(function(t){for(var n=0;n<e.length;n++)"object"==typeof e[n]&&(e[n].parentConf=t);t.inst.collectionRebuild(t.node,e)})}),e.Api.register(["buttons().enable()","button().enable()"],function(n){return this.each(function(t){t.inst.enable(t.node,n)})}),e.Api.register(["buttons().disable()","button().disable()"],function(){return this.each(function(t){t.inst.disable(t.node)})}),e.Api.register("button().index()",function(){var n=null;return this.each(function(t){t=t.inst.index(t.node);null!==t&&(n=t)}),n}),e.Api.registerPlural("buttons().nodes()","button().node()",function(){var n=v();return v(this.each(function(t){n=n.add(t.inst.node(t.node))})),n}),e.Api.registerPlural("buttons().processing()","button().processing()",function(n){return n===x?this.map(function(t){return t.inst.processing(t.node)}):this.each(function(t){t.inst.processing(t.node,n)})}),e.Api.registerPlural("buttons().text()","button().text()",function(n){return n===x?this.map(function(t){return t.inst.text(t.node)}):this.each(function(t){t.inst.text(t.node,n)})}),e.Api.registerPlural("buttons().trigger()","button().trigger()",function(){return this.each(function(t){t.inst.node(t.node).trigger("click")})}),e.Api.register("button().popover()",function(n,e){return this.map(function(t){return t.inst._popover(n,this.button(this[0].node),e)})}),e.Api.register("buttons().containers()",function(){var i=v(),s=this._groupSelector;return this.iterator(!0,"table",function(t){if(t._buttons)for(var n=k.instanceSelector(s,t._buttons),e=0,o=n.length;e<o;e++)i=i.add(n[e].container())}),i}),e.Api.register("buttons().container()",function(){return this.containers().eq(0)}),e.Api.register("button().add()",function(t,n,e){var o=this.context;return o.length&&(o=k.instanceSelector(this._groupSelector,o[0]._buttons)).length&&o[0].add(n,t,e),this.button(this._groupSelector,t)}),e.Api.register("buttons().destroy()",function(){return this.pluck("inst").unique().each(function(t){t.destroy()}),this}),e.Api.registerPlural("buttons().remove()","buttons().remove()",function(){return this.each(function(t){t.inst.remove(t.node)}),this}),e.Api.register("buttons.info()",function(t,n,e){var o=this;return!1===t?(this.off("destroy.btn-info"),A(v("#datatables_buttons_info"),400,function(){v(this).remove()}),clearTimeout(i),i=null):(i&&clearTimeout(i),v("#datatables_buttons_info").length&&v("#datatables_buttons_info").remove(),t=t?"<h2>"+t+"</h2>":"",_(v('<div id="datatables_buttons_info" class="dt-button-info"/>').html(t).append(v("<div/>")["string"==typeof n?"html":"append"](n)).css("display","none").appendTo("body")),e!==x&&0!==e&&(i=setTimeout(function(){o.buttons.info(!1)},e)),this.on("destroy.btn-info",function(){o.buttons.info(!1)})),this}),e.Api.register("buttons.exportData()",function(t){if(this.context.length)return c(new e.Api(this.context[0]),t)}),e.Api.register("buttons.exportInfo()",function(t){return{filename:n(t=t||{}),title:r(t),messageTop:a(this,t.message||t.messageTop,"top"),messageBottom:a(this,t.messageBottom,"bottom")}});var i,n=function(t){var n;return(n="function"==typeof(n="*"===t.filename&&"*"!==t.title&&t.title!==x&&null!==t.title&&""!==t.title?t.title:t.filename)?n():n)===x||null===n?null:(n=(n=-1!==n.indexOf("*")?n.replace("*",v("head > title").text()).trim():n).replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""))+(s(t.extension)||"")},s=function(t){return null===t||t===x?null:"function"==typeof t?t():t},r=function(t){t=s(t.title);return null===t?null:-1!==t.indexOf("*")?t.replace("*",v("head > title").text()||"Exported data"):t},a=function(t,n,e){n=s(n);return null===n?null:(t=v("caption",t.table().container()).eq(0),"*"===n?t.css("caption-side")!==e?null:t.length?t.text():"":n)},l=v("<textarea/>")[0],c=function(e,t){for(var o=v.extend(!0,{},{rows:null,columns:"",modifier:{search:"applied",order:"applied"},orthogonal:"display",stripHtml:!0,stripNewlines:!0,decodeEntities:!0,trim:!0,format:{header:function(t){return k.stripData(t,o)},footer:function(t){return k.stripData(t,o)},body:function(t){return k.stripData(t,o)}},customizeData:null},t),t=e.columns(o.columns).indexes().map(function(t){var n=e.column(t).header();return o.format.header(n.innerHTML,t,n)}).toArray(),n=e.table().footer()?e.columns(o.columns).indexes().map(function(t){var n=e.column(t).footer();return o.format.footer(n?n.innerHTML:"",t,n)}).toArray():null,i=v.extend({},o.modifier),i=(e.select&&"function"==typeof e.select.info&&i.selected===x&&e.rows(o.rows,v.extend({selected:!0},i)).any()&&v.extend(i,{selected:!0}),e.rows(o.rows,i).indexes().toArray()),i=e.cells(i,o.columns),s=i.render(o.orthogonal).toArray(),r=i.nodes().toArray(),a=t.length,l=[],c=0,u=0,d=0<a?s.length/a:0;u<d;u++){for(var f=[a],p=0;p<a;p++)f[p]=o.format.body(s[c],u,p,r[c]),c++;l[u]=f}i={header:t,footer:n,body:l};return o.customizeData&&o.customizeData(i),i};function t(t,n){t=new e.Api(t),n=n||t.init().buttons||e.defaults.buttons;return new k(t,n).container()}return v.fn.dataTable.Buttons=k,v.fn.DataTable.Buttons=k,v(y).on("init.dt plugin-init.dt",function(t,n){"dt"===t.namespace&&(t=n.oInit.buttons||e.defaults.buttons)&&!n._buttons&&new k(n,t).container()}),e.ext.feature.push({fnInit:t,cFeature:"B"}),e.ext.features&&e.ext.features.register("buttons",t),e}); \ No newline at end of file