restore composer.json, add mysqli extension
This commit is contained in:
6
public/vendor/pay-uz/css/bootstrap.min.css
vendored
Executable file
6
public/vendor/pay-uz/css/bootstrap.min.css
vendored
Executable file
File diff suppressed because one or more lines are too long
194
public/vendor/pay-uz/css/dataTables.bootstrap4.css
vendored
Executable file
194
public/vendor/pay-uz/css/dataTables.bootstrap4.css
vendored
Executable file
@@ -0,0 +1,194 @@
|
||||
table.dataTable {
|
||||
clear: both;
|
||||
margin-top: 6px !important;
|
||||
margin-bottom: 6px !important;
|
||||
max-width: none !important;
|
||||
border-collapse: separate !important;
|
||||
}
|
||||
table.dataTable td,
|
||||
table.dataTable th {
|
||||
-webkit-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
table.dataTable td.dataTables_empty,
|
||||
table.dataTable th.dataTables_empty {
|
||||
text-align: center;
|
||||
}
|
||||
table.dataTable.nowrap th,
|
||||
table.dataTable.nowrap td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div.dataTables_wrapper div.dataTables_length label {
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_length select {
|
||||
width: 75px;
|
||||
display: inline-block;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_filter {
|
||||
text-align: right;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_filter label {
|
||||
font-weight: normal;
|
||||
white-space: nowrap;
|
||||
text-align: left;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_filter input {
|
||||
margin-left: 0.5em;
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_info {
|
||||
padding-top: 0.85em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_paginate {
|
||||
margin: 0;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
|
||||
margin: 10px 0;
|
||||
white-space: nowrap;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
div.dataTables_wrapper div.dataTables_processing {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 200px;
|
||||
margin-left: -100px;
|
||||
margin-top: -26px;
|
||||
text-align: center;
|
||||
padding: 1em 0;
|
||||
}
|
||||
|
||||
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
|
||||
table.dataTable thead > tr > td.sorting_asc,
|
||||
table.dataTable thead > tr > td.sorting_desc,
|
||||
table.dataTable thead > tr > td.sorting {
|
||||
padding-right: 30px;
|
||||
}
|
||||
table.dataTable thead > tr > th:active,
|
||||
table.dataTable thead > tr > td:active {
|
||||
outline: none;
|
||||
}
|
||||
table.dataTable thead .sorting,
|
||||
table.dataTable thead .sorting_asc,
|
||||
table.dataTable thead .sorting_desc,
|
||||
table.dataTable thead .sorting_asc_disabled,
|
||||
table.dataTable thead .sorting_desc_disabled {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
}
|
||||
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
|
||||
table.dataTable thead .sorting_asc:before,
|
||||
table.dataTable thead .sorting_asc:after,
|
||||
table.dataTable thead .sorting_desc:before,
|
||||
table.dataTable thead .sorting_desc:after,
|
||||
table.dataTable thead .sorting_asc_disabled:before,
|
||||
table.dataTable thead .sorting_asc_disabled:after,
|
||||
table.dataTable thead .sorting_desc_disabled:before,
|
||||
table.dataTable thead .sorting_desc_disabled:after {
|
||||
position: absolute;
|
||||
bottom: 0.9em;
|
||||
display: block;
|
||||
opacity: 0.3;
|
||||
}
|
||||
table.dataTable thead .sorting:before,
|
||||
table.dataTable thead .sorting_asc:before,
|
||||
table.dataTable thead .sorting_desc:before,
|
||||
table.dataTable thead .sorting_asc_disabled:before,
|
||||
table.dataTable thead .sorting_desc_disabled:before {
|
||||
right: 1em;
|
||||
content: "\2191";
|
||||
}
|
||||
table.dataTable thead .sorting:after,
|
||||
table.dataTable thead .sorting_asc:after,
|
||||
table.dataTable thead .sorting_desc:after,
|
||||
table.dataTable thead .sorting_asc_disabled:after,
|
||||
table.dataTable thead .sorting_desc_disabled:after {
|
||||
right: 0.5em;
|
||||
content: "\2193";
|
||||
}
|
||||
table.dataTable thead .sorting_asc:before,
|
||||
table.dataTable thead .sorting_desc:after {
|
||||
opacity: 1;
|
||||
}
|
||||
table.dataTable thead .sorting_asc_disabled:before,
|
||||
table.dataTable thead .sorting_desc_disabled:after {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
div.dataTables_scrollHead table.dataTable {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
div.dataTables_scrollBody table {
|
||||
border-top: none;
|
||||
margin-top: 0 !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
div.dataTables_scrollBody table thead .sorting:after,
|
||||
div.dataTables_scrollBody table thead .sorting_asc:after,
|
||||
div.dataTables_scrollBody table thead .sorting_desc:after {
|
||||
display: none;
|
||||
}
|
||||
div.dataTables_scrollBody table tbody tr:first-child th,
|
||||
div.dataTables_scrollBody table tbody tr:first-child td {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
div.dataTables_scrollFoot table {
|
||||
margin-top: 0 !important;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767px) {
|
||||
div.dataTables_wrapper div.dataTables_length,
|
||||
div.dataTables_wrapper div.dataTables_filter,
|
||||
div.dataTables_wrapper div.dataTables_info,
|
||||
div.dataTables_wrapper div.dataTables_paginate {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
table.dataTable.table-condensed > thead > tr > th {
|
||||
padding-right: 20px;
|
||||
}
|
||||
table.dataTable.table-condensed .sorting:after,
|
||||
table.dataTable.table-condensed .sorting_asc:after,
|
||||
table.dataTable.table-condensed .sorting_desc:after {
|
||||
top: 6px;
|
||||
right: 6px;
|
||||
}
|
||||
|
||||
table.table-bordered.dataTable th,
|
||||
table.table-bordered.dataTable td {
|
||||
border-left-width: 0;
|
||||
}
|
||||
table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
|
||||
table.table-bordered.dataTable td:last-child,
|
||||
table.table-bordered.dataTable td:last-child {
|
||||
border-right-width: 0;
|
||||
}
|
||||
table.table-bordered.dataTable tbody th,
|
||||
table.table-bordered.dataTable tbody td {
|
||||
border-bottom-width: 0;
|
||||
}
|
||||
|
||||
div.dataTables_scrollHead table.table-bordered {
|
||||
border-bottom-width: 0;
|
||||
}
|
||||
|
||||
div.table-responsive > div.dataTables_wrapper > div.row {
|
||||
margin: 0;
|
||||
}
|
||||
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
4
public/vendor/pay-uz/css/font-awesome.min.css
vendored
Executable file
4
public/vendor/pay-uz/css/font-awesome.min.css
vendored
Executable file
File diff suppressed because one or more lines are too long
6
public/vendor/pay-uz/css/pay.css
vendored
Executable file
6
public/vendor/pay-uz/css/pay.css
vendored
Executable file
@@ -0,0 +1,6 @@
|
||||
.remove_payment_system_btn_sb {
|
||||
margin-top: 2rem !important;
|
||||
}
|
||||
a.remove_payment_system_btn_sb:hover {
|
||||
color: white !important;
|
||||
}
|
||||
353
public/vendor/pay-uz/css/sb-admin.css
vendored
Executable file
353
public/vendor/pay-uz/css/sb-admin.css
vendored
Executable file
@@ -0,0 +1,353 @@
|
||||
/*!
|
||||
* Start Bootstrap - SB Admin v4.0.0-beta (https://startbootstrap.com/template-overviews/sb-admin)
|
||||
* Copyright 2013-2017 Start Bootstrap
|
||||
* Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-sb-admin/blob/master/LICENSE)
|
||||
*/
|
||||
html {
|
||||
background-color: #eeeeee !important;
|
||||
position: relative;
|
||||
min-height: 100%; }
|
||||
|
||||
body.sticky-footer {
|
||||
margin-bottom: 56px; }
|
||||
body.sticky-footer .content-wrapper {
|
||||
min-height: calc(100vh - 56px - 56px); }
|
||||
|
||||
body.fixed-nav {
|
||||
padding-top: 56px; }
|
||||
|
||||
.content-wrapper {
|
||||
background-color: #eeeeee !important;
|
||||
min-height: calc(100vh - 56px);
|
||||
padding-top: 1rem; }
|
||||
|
||||
.scroll-to-top {
|
||||
position: fixed;
|
||||
right: 15px;
|
||||
bottom: 3px;
|
||||
display: none;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background: rgba(52, 58, 64, 0.5);
|
||||
line-height: 45px; }
|
||||
.scroll-to-top:focus, .scroll-to-top:hover {
|
||||
color: white; }
|
||||
.scroll-to-top:hover {
|
||||
background: #343a40; }
|
||||
.scroll-to-top i {
|
||||
font-weight: 800; }
|
||||
|
||||
.smaller {
|
||||
font-size: 0.7rem; }
|
||||
|
||||
.o-hidden {
|
||||
overflow: hidden !important; }
|
||||
|
||||
.z-0 {
|
||||
z-index: 0; }
|
||||
|
||||
.z-1 {
|
||||
z-index: 1; }
|
||||
|
||||
.card-body-icon {
|
||||
position: absolute;
|
||||
z-index: 0;
|
||||
top: -25px;
|
||||
right: -25px;
|
||||
font-size: 5rem;
|
||||
-webkit-transform: rotate(15deg);
|
||||
-ms-transform: rotate(15deg);
|
||||
transform: rotate(15deg); }
|
||||
|
||||
@media (min-width: 576px) {
|
||||
.card-columns {
|
||||
column-count: 1; } }
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.card-columns {
|
||||
column-count: 2; } }
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.card-columns {
|
||||
column-count: 2; } }
|
||||
|
||||
#mainNav .navbar-collapse {
|
||||
overflow: auto;
|
||||
max-height: 75vh; }
|
||||
#mainNav .navbar-collapse .navbar-nav .nav-item .nav-link {
|
||||
cursor: pointer; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse:after {
|
||||
float: right;
|
||||
content: '\f107';
|
||||
font-family: 'FontAwesome'; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav .nav-link-collapse.collapsed:after {
|
||||
content: '\f105'; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level,
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level {
|
||||
padding-left: 0; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level > li > a,
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level > li > a {
|
||||
display: block;
|
||||
padding: 0.5em 0; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level > li > a:focus, #mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level > li > a:hover,
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level > li > a:focus,
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level > li > a:hover {
|
||||
text-decoration: none; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-second-level > li > a {
|
||||
padding-left: 1em; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav .sidenav-third-level > li > a {
|
||||
padding-left: 2em; }
|
||||
#mainNav .navbar-collapse .sidenav-toggler {
|
||||
display: none; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link {
|
||||
position: relative;
|
||||
min-width: 45px; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link:after {
|
||||
float: right;
|
||||
width: auto;
|
||||
content: '\f105';
|
||||
border: none;
|
||||
font-family: 'FontAwesome'; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link .new-indicator {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 25px;
|
||||
font-size: 1.1rem; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link .new-indicator .number {
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
left: 0;
|
||||
width: 22.625px;
|
||||
text-align: center;
|
||||
color: white;
|
||||
font-size: 0.5rem; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown.show > .nav-link:after {
|
||||
content: '\f107'; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown .dropdown-menu > .dropdown-item > .dropdown-message {
|
||||
overflow: hidden;
|
||||
max-width: none;
|
||||
text-overflow: ellipsis; }
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#mainNav .navbar-brand {
|
||||
width: 250px; }
|
||||
#mainNav .navbar-collapse {
|
||||
overflow: visible;
|
||||
max-height: none; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
margin-top: 56px; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item {
|
||||
width: 250px;
|
||||
padding: 0; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item > .nav-link {
|
||||
padding: 1em; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level,
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level {
|
||||
padding-left: 0;
|
||||
list-style: none; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li,
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li {
|
||||
width: 250px; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a,
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a {
|
||||
padding: 1em; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a {
|
||||
padding-left: 2em; }
|
||||
#mainNav .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a {
|
||||
padding-left: 3em; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link {
|
||||
min-width: 0; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link:after {
|
||||
width: 24px;
|
||||
text-align: center; }
|
||||
#mainNav .navbar-collapse .navbar-nav > .nav-item.dropdown .dropdown-menu > .dropdown-item > .dropdown-message {
|
||||
max-width: 300px; } }
|
||||
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav .nav-link-collapse:after {
|
||||
color: #868e96; }
|
||||
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item > .nav-link {
|
||||
color: #868e96; }
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item > .nav-link:hover {
|
||||
color: #adb5bd; }
|
||||
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a,
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a {
|
||||
color: #868e96; }
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a:focus, #mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a:hover,
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a:focus,
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a:hover {
|
||||
color: #adb5bd; }
|
||||
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link:after {
|
||||
color: #adb5bd; }
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav {
|
||||
background: #343a40; }
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav li.active a {
|
||||
color: white !important;
|
||||
background-color: #495057; }
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav li.active a:focus, #mainNav.navbar-dark .navbar-collapse .navbar-sidenav li.active a:hover {
|
||||
color: white; }
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level,
|
||||
#mainNav.navbar-dark .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level {
|
||||
background: #343a40; } }
|
||||
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav .nav-link-collapse:after {
|
||||
color: rgba(0, 0, 0, 0.5); }
|
||||
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item > .nav-link {
|
||||
color: rgba(0, 0, 0, 0.5); }
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item > .nav-link:hover {
|
||||
color: rgba(0, 0, 0, 0.7); }
|
||||
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a,
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a {
|
||||
color: rgba(0, 0, 0, 0.5); }
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a:focus, #mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level > li > a:hover,
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a:focus,
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level > li > a:hover {
|
||||
color: rgba(0, 0, 0, 0.7); }
|
||||
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-nav > .nav-item.dropdown > .nav-link:after {
|
||||
color: rgba(0, 0, 0, 0.5); }
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav {
|
||||
background: #f8f9fa; }
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav li.active a {
|
||||
color: #000 !important;
|
||||
background-color: #e9ecef; }
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav li.active a:focus, #mainNav.navbar-light .navbar-collapse .navbar-sidenav li.active a:hover {
|
||||
color: #000; }
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-second-level,
|
||||
#mainNav.navbar-light .navbar-collapse .navbar-sidenav > .nav-item .sidenav-third-level {
|
||||
background: #f8f9fa; } }
|
||||
|
||||
#mainNav.fixed-top .sidenav-toggler {
|
||||
display: none; }
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#mainNav.fixed-top .navbar-sidenav {
|
||||
height: calc(100vh - 112px); }
|
||||
#mainNav.fixed-top .sidenav-toggler {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
margin-top: calc(100vh - 56px); }
|
||||
#mainNav.fixed-top .sidenav-toggler > .nav-item {
|
||||
width: 250px;
|
||||
padding: 0; }
|
||||
#mainNav.fixed-top .sidenav-toggler > .nav-item > .nav-link {
|
||||
padding: 1em; } }
|
||||
|
||||
#mainNav.fixed-top.navbar-dark .sidenav-toggler {
|
||||
background-color: #212529; }
|
||||
#mainNav.fixed-top.navbar-dark .sidenav-toggler a i {
|
||||
color: #adb5bd; }
|
||||
|
||||
#mainNav.fixed-top.navbar-light .sidenav-toggler {
|
||||
background-color: #dee2e6; }
|
||||
#mainNav.fixed-top.navbar-light .sidenav-toggler a i {
|
||||
color: rgba(0, 0, 0, 0.5); }
|
||||
|
||||
body.sidenav-toggled #mainNav.fixed-top .sidenav-toggler {
|
||||
overflow-x: hidden;
|
||||
width: 55px; }
|
||||
body.sidenav-toggled #mainNav.fixed-top .sidenav-toggler .nav-item,
|
||||
body.sidenav-toggled #mainNav.fixed-top .sidenav-toggler .nav-link {
|
||||
width: 55px !important; }
|
||||
|
||||
body.sidenav-toggled #mainNav.fixed-top #sidenavToggler i {
|
||||
-webkit-transform: scaleX(-1);
|
||||
-moz-transform: scaleX(-1);
|
||||
-o-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
filter: FlipH;
|
||||
-ms-filter: 'FlipH'; }
|
||||
|
||||
#mainNav.static-top .sidenav-toggler {
|
||||
display: none; }
|
||||
|
||||
@media (min-width: 992px) {
|
||||
#mainNav.static-top .sidenav-toggler {
|
||||
display: flex; } }
|
||||
|
||||
body.sidenav-toggled #mainNav.static-top #sidenavToggler i {
|
||||
-webkit-transform: scaleX(-1);
|
||||
-moz-transform: scaleX(-1);
|
||||
-o-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
filter: FlipH;
|
||||
-ms-filter: 'FlipH'; }
|
||||
|
||||
.content-wrapper {
|
||||
overflow-x: hidden;
|
||||
background: white; }
|
||||
@media (min-width: 992px) {
|
||||
.content-wrapper {
|
||||
margin-left: 250px; } }
|
||||
|
||||
#sidenavToggler i {
|
||||
font-weight: 800; }
|
||||
|
||||
.navbar-sidenav-tooltip.show {
|
||||
display: none; }
|
||||
|
||||
@media (min-width: 992px) {
|
||||
body.sidenav-toggled .content-wrapper {
|
||||
margin-left: 55px; } }
|
||||
|
||||
body.sidenav-toggled .navbar-sidenav {
|
||||
overflow-x: hidden;
|
||||
width: 55px; }
|
||||
body.sidenav-toggled .navbar-sidenav .nav-link-text {
|
||||
display: none; }
|
||||
body.sidenav-toggled .navbar-sidenav .nav-item,
|
||||
body.sidenav-toggled .navbar-sidenav .nav-link {
|
||||
width: 55px !important; }
|
||||
body.sidenav-toggled .navbar-sidenav .nav-item:after,
|
||||
body.sidenav-toggled .navbar-sidenav .nav-link:after {
|
||||
display: none; }
|
||||
|
||||
body.sidenav-toggled .navbar-sidenav-tooltip.show {
|
||||
display: flex; }
|
||||
|
||||
.card-login {
|
||||
max-width: 25rem; }
|
||||
|
||||
.card-register {
|
||||
max-width: 40rem; }
|
||||
|
||||
footer.sticky-footer {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 56px;
|
||||
background-color: #e9ecef;
|
||||
line-height: 55px; }
|
||||
@media (min-width: 992px) {
|
||||
footer.sticky-footer {
|
||||
width: calc(100% - 250px); } }
|
||||
|
||||
@media (min-width: 992px) {
|
||||
body.sidenav-toggled footer.sticky-footer {
|
||||
width: calc(100% - 55px); } }
|
||||
482
public/vendor/pay-uz/css/style.css
vendored
Executable file
482
public/vendor/pay-uz/css/style.css
vendored
Executable file
@@ -0,0 +1,482 @@
|
||||
body {
|
||||
font-size:0.875rem !important;
|
||||
}
|
||||
|
||||
/*Custom Scrollbar*/
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
border-radius: 7px;
|
||||
background-color: lightgray;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: 7px;
|
||||
background-color: gray;
|
||||
}
|
||||
|
||||
/*Buttons*/
|
||||
|
||||
.btn-circle {
|
||||
border-radius: 20px !important;
|
||||
}
|
||||
|
||||
/*Fonts*/
|
||||
|
||||
.ft-14 {
|
||||
font-size: 0.875rem !important;
|
||||
}
|
||||
|
||||
.ft-sc {
|
||||
font-size: 0.8rem !important;
|
||||
}
|
||||
|
||||
.ft-th {
|
||||
font-size: 0.75rem !important;
|
||||
}
|
||||
|
||||
.text-topics {
|
||||
color: #555555 !important;
|
||||
}
|
||||
|
||||
/*sticky-footer*/
|
||||
$height-footer: 60px;
|
||||
|
||||
html {
|
||||
min-height: 100%;
|
||||
position: relative;
|
||||
body {
|
||||
margin-bottom: $height-footer;
|
||||
}
|
||||
#footer {
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
height: $height-footer;
|
||||
background-color: #f5f5f5;
|
||||
.footer-block {
|
||||
margin: 20px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*Admin*/
|
||||
.box-admin {
|
||||
background-color: white;
|
||||
border-radius: 5px;
|
||||
border-top: solid 3px;
|
||||
border-color: #dddddd;
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
/*Forum*/
|
||||
.box-shadow {
|
||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
.bg-topics {
|
||||
background-color: #dddddd;
|
||||
}
|
||||
|
||||
.topics {
|
||||
border-bottom: solid 1px;
|
||||
border-color: #e9e9e9;
|
||||
}
|
||||
|
||||
.reply {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.carma {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.topics:hover .carma {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.topics:hover .reply {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.replied {
|
||||
border-left: solid 5px;
|
||||
border-color: #dddddd;
|
||||
padding: 5px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.javob {
|
||||
background-color: #eeeeee;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.javob .form-control {
|
||||
background-color: #eeeeee;
|
||||
border: 0px;
|
||||
font-size: 0.875rem;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
/*user*/
|
||||
|
||||
.nav-tabs {
|
||||
border-bottom: 0px solid #ddd;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-item {
|
||||
padding: 0px 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-link {
|
||||
border: 0px solid transparent;
|
||||
border-top-left-radius: 0rem;
|
||||
border-top-right-radius: 0rem;
|
||||
border-bottom: solid 3px;
|
||||
border-color: #ffffff;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {
|
||||
border-color: #007BFF;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-link.disabled {
|
||||
color: #868e96;
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-link.active,
|
||||
.nav-tabs .nav-item.show .nav-link {
|
||||
color: #495057;
|
||||
background-color: #fff;
|
||||
border-color: #ddd #ddd #fff;
|
||||
border-bottom: solid 3px;
|
||||
border-color: #007BFF;
|
||||
}
|
||||
|
||||
/*Styles*/
|
||||
|
||||
.bg-white {
|
||||
background-color: #ffffff !important;
|
||||
}
|
||||
|
||||
.list-item {
|
||||
margin-bottom: 0.3rem
|
||||
}
|
||||
|
||||
.bg-primary {
|
||||
background-color: #007bff;
|
||||
}
|
||||
|
||||
.top-panel {
|
||||
background-color: #fafafa !important;
|
||||
border-bottom: solid 1px;
|
||||
border-color: #eeeeee;
|
||||
}
|
||||
|
||||
.dropdown-index {
|
||||
z-index: 1100 !important;
|
||||
}
|
||||
|
||||
.responsible-dropdown {
|
||||
width: auto;
|
||||
min-width: 5rem;
|
||||
}
|
||||
|
||||
.top-link {
|
||||
color: #909090;
|
||||
padding: 0.5rem 0.5rem;
|
||||
}
|
||||
|
||||
.top-nav-divider {
|
||||
margin: 0.5rem 0.3rem;
|
||||
border-right: solid 1px;
|
||||
border-color: #eeeeee;
|
||||
height: 60%;
|
||||
}
|
||||
|
||||
.main-nav {
|
||||
background-color: #ffffff !important;
|
||||
padding-top: 1.5rem;
|
||||
padding-bottom: 1.5rem;
|
||||
border-bottom: solid 1px;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.second-nav {
|
||||
background-color: #007bff !important;
|
||||
}
|
||||
|
||||
.savat {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.sidenav {
|
||||
opacity: 0;
|
||||
width: 0px;
|
||||
display: block;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
z-index: 2110 !important;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: #007bff;
|
||||
padding-top: 2rem;
|
||||
padding-bottom: 1rem;
|
||||
border-left: solid 1px;
|
||||
border-color: #0060c7;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
transition: 0.3s;
|
||||
|
||||
}
|
||||
|
||||
.sidenav-link {
|
||||
display: block;
|
||||
color: #ffffff;
|
||||
padding: 0.5rem 1rem;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.sidenav-link:hover {
|
||||
background-color: #3094ff;
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.sidenav-link:active, .sidenav-link:visited, .sidenav-link:focus {
|
||||
background-color: #1084ff;
|
||||
}
|
||||
|
||||
.side-close {
|
||||
color: #ffffff;
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0.5rem;
|
||||
padding: 0.5rem;
|
||||
}
|
||||
|
||||
.back {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: #000000;
|
||||
opacity: 0;
|
||||
z-index: 2100 !important;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
transition: opacity 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
.kinds {
|
||||
display: none;
|
||||
background-color: #238dff;
|
||||
}
|
||||
|
||||
.ins-card {
|
||||
border: solid 4px;
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
.ins-card:hover {
|
||||
border: solid 4px;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.ins-card:hover figure img{
|
||||
opacity: 0.8;
|
||||
-webkit-transform: scale3d(1.2, 1.2, 1);
|
||||
transform: scale3d(1.2, 1.2, 1);
|
||||
}
|
||||
|
||||
.ins-card:hover figure .knop{
|
||||
opacity: 1;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
figure{
|
||||
background-color: black;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
figure img{
|
||||
opacity: 0.6;
|
||||
-webkit-transition: all 0.15s linear;
|
||||
transition: all 0.15s linear;
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
|
||||
figure .knop{
|
||||
position: absolute;
|
||||
top: 1;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background-color: #007BFF;
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.12s linear;
|
||||
transition: all 0.12s linear;
|
||||
-webkit-transform: translate3d(0, 55px, 0);
|
||||
transform: translate3d(0, 55px, 0);
|
||||
}
|
||||
|
||||
figure:hover .knop{
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
figure:hover img{
|
||||
opacity: 0.8;
|
||||
-webkit-transform: scale3d(1.2, 1.2, 1);
|
||||
transform: scale3d(1.2, 1.2, 1);
|
||||
}
|
||||
|
||||
.row.is-flex {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.row.is-flex > [class*='col-'] {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.row.is-flex {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-flex-wrap: wrap;
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.row.is-flex > [class*='col-'] {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.subscribe {
|
||||
background-color: #007BFF;
|
||||
}
|
||||
|
||||
.subs-input {
|
||||
border-radius: 25px 0px 0px 25px;
|
||||
border: 0px !important;
|
||||
}
|
||||
|
||||
.subs-btn {
|
||||
border-radius: 25px;
|
||||
border: 0px;
|
||||
background-color: #d7d7d7;
|
||||
color: #7a7a7a;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background-color: #ffffff;
|
||||
border-top: solid 1px;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.ads {
|
||||
background-color: #e9ecef;
|
||||
}
|
||||
|
||||
.ads-img {
|
||||
opacity: 1;
|
||||
-webkit-transition: .2s ease-in-out;
|
||||
transition: .2s ease-in-out;
|
||||
}
|
||||
.ads-img:hover {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.shop_cart {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.shop_cart:hover {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
/*Chat*/
|
||||
|
||||
.chat-panel {
|
||||
height: 512px;
|
||||
overflow-y: scroll;
|
||||
border: solid 1px;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.chat_self_f {
|
||||
border-radius: 0px 15px 15px 15px;
|
||||
background-color: #C3F6D1;
|
||||
}
|
||||
|
||||
.chat_self {
|
||||
border-radius: 15px 15px 15px 15px;
|
||||
background-color: #C3F6D1;
|
||||
}
|
||||
|
||||
.chat_u_f {
|
||||
border-radius: 15px 0px 15px 15px;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.chat_u {
|
||||
border-radius: 15px 15px 15px 15px;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.chat_t {
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px;
|
||||
border-bottom: 0px;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.chat_b {
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px;
|
||||
border-top: 0px;
|
||||
border-color: #dddddd;
|
||||
}
|
||||
|
||||
.dropdown-cart {
|
||||
width: 300px;
|
||||
margin-top: 15px;
|
||||
left: unset !important;
|
||||
right: -40px !important;
|
||||
}
|
||||
|
||||
.cart-item:hover {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.pay:hover {
|
||||
opacity: 0.7;
|
||||
}
|
||||
67
public/vendor/pay-uz/css/tagsinput.css
vendored
Executable file
67
public/vendor/pay-uz/css/tagsinput.css
vendored
Executable file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* bootstrap-tagsinput v0.8.0
|
||||
*
|
||||
*/
|
||||
|
||||
.bootstrap-tagsinput {
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
/*box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);*/
|
||||
display: inline-block;
|
||||
padding: 8px 6px;
|
||||
color: #555;
|
||||
vertical-align: middle;
|
||||
border-radius: 4px;
|
||||
width: 100%;
|
||||
line-height: 22px;
|
||||
cursor: text;
|
||||
}
|
||||
.bootstrap-tagsinput input {
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
background-color: transparent;
|
||||
padding: 0 6px;
|
||||
margin: 0;
|
||||
width: auto;
|
||||
max-width: inherit;
|
||||
}
|
||||
.bootstrap-tagsinput.form-control input::-moz-placeholder {
|
||||
color: #777;
|
||||
opacity: 1;
|
||||
}
|
||||
.bootstrap-tagsinput.form-control input:-ms-input-placeholder {
|
||||
color: #777;
|
||||
}
|
||||
.bootstrap-tagsinput.form-control input::-webkit-input-placeholder {
|
||||
color: #777;
|
||||
}
|
||||
.bootstrap-tagsinput input:focus {
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.bootstrap-tagsinput .badge {
|
||||
margin-right: 2px;
|
||||
color: #555555;
|
||||
background-color:#dddddd;
|
||||
padding:5px 8px;
|
||||
border-radius:5px;
|
||||
border:0px solid #01649e
|
||||
}
|
||||
.bootstrap-tagsinput .badge [data-role="remove"] {
|
||||
margin-left: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.bootstrap-tagsinput .badge [data-role="remove"]:after {
|
||||
content: "×";
|
||||
padding: 0px 4px;
|
||||
background-color:rgba(0, 0, 0, 0.2);
|
||||
border-radius:50%;
|
||||
font-size:12px
|
||||
}
|
||||
.bootstrap-tagsinput .badge [data-role="remove"]:hover:after {
|
||||
background-color:rgba(0, 0, 0, 0.3);}
|
||||
|
||||
.bootstrap-tagsinput .badge [data-role="remove"]:hover:active {
|
||||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||
}
|
||||
BIN
public/vendor/pay-uz/fonts/FontAwesome.otf
vendored
Executable file
BIN
public/vendor/pay-uz/fonts/FontAwesome.otf
vendored
Executable file
Binary file not shown.
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.eot
vendored
Executable file
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.eot
vendored
Executable file
Binary file not shown.
2671
public/vendor/pay-uz/fonts/fontawesome-webfont.svg
vendored
Executable file
2671
public/vendor/pay-uz/fonts/fontawesome-webfont.svg
vendored
Executable file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 434 KiB |
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.ttf
vendored
Executable file
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.ttf
vendored
Executable file
Binary file not shown.
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.woff
vendored
Executable file
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.woff
vendored
Executable file
Binary file not shown.
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.woff2
vendored
Executable file
BIN
public/vendor/pay-uz/fonts/fontawesome-webfont.woff2
vendored
Executable file
Binary file not shown.
BIN
public/vendor/pay-uz/img/pay/click.jpg
vendored
Executable file
BIN
public/vendor/pay-uz/img/pay/click.jpg
vendored
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
public/vendor/pay-uz/img/pay/payme.jpg
vendored
Executable file
BIN
public/vendor/pay-uz/img/pay/payme.jpg
vendored
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
BIN
public/vendor/pay-uz/img/pay/upay.jpg
vendored
Executable file
BIN
public/vendor/pay-uz/img/pay/upay.jpg
vendored
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
BIN
public/vendor/pay-uz/img/pay/visa.jpg
vendored
Executable file
BIN
public/vendor/pay-uz/img/pay/visa.jpg
vendored
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
14
public/vendor/pay-uz/js/Chart.min.js
vendored
Executable file
14
public/vendor/pay-uz/js/Chart.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
6
public/vendor/pay-uz/js/bootstrap.min.js
vendored
Executable file
6
public/vendor/pay-uz/js/bootstrap.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
184
public/vendor/pay-uz/js/dataTables.bootstrap4.js
vendored
Executable file
184
public/vendor/pay-uz/js/dataTables.bootstrap4.js
vendored
Executable file
@@ -0,0 +1,184 @@
|
||||
/*! DataTables Bootstrap 3 integration
|
||||
* ©2011-2015 SpryMedia Ltd - datatables.net/license
|
||||
*/
|
||||
|
||||
/**
|
||||
* DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
|
||||
* DataTables 1.10 or newer.
|
||||
*
|
||||
* This file sets the defaults and adds options to DataTables to style its
|
||||
* controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
|
||||
* for further information.
|
||||
*/
|
||||
(function( factory ){
|
||||
if ( typeof define === 'function' && define.amd ) {
|
||||
// AMD
|
||||
define( ['jquery', 'datatables.net'], function ( $ ) {
|
||||
return factory( $, window, document );
|
||||
} );
|
||||
}
|
||||
else if ( typeof exports === 'object' ) {
|
||||
// CommonJS
|
||||
module.exports = function (root, $) {
|
||||
if ( ! root ) {
|
||||
root = window;
|
||||
}
|
||||
|
||||
if ( ! $ || ! $.fn.dataTable ) {
|
||||
// Require DataTables, which attaches to jQuery, including
|
||||
// jQuery if needed and have a $ property so we can access the
|
||||
// jQuery object that is used
|
||||
$ = require('datatables.net')(root, $).$;
|
||||
}
|
||||
|
||||
return factory( $, root, root.document );
|
||||
};
|
||||
}
|
||||
else {
|
||||
// Browser
|
||||
factory( jQuery, window, document );
|
||||
}
|
||||
}(function( $, window, document, undefined ) {
|
||||
'use strict';
|
||||
var DataTable = $.fn.dataTable;
|
||||
|
||||
|
||||
/* Set the defaults for DataTables initialisation */
|
||||
$.extend( true, DataTable.defaults, {
|
||||
dom:
|
||||
"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
|
||||
"<'row'<'col-sm-12'tr>>" +
|
||||
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
|
||||
renderer: 'bootstrap'
|
||||
} );
|
||||
|
||||
|
||||
/* Default class modification */
|
||||
$.extend( DataTable.ext.classes, {
|
||||
sWrapper: "dataTables_wrapper container-fluid dt-bootstrap4",
|
||||
sFilterInput: "form-control form-control-sm",
|
||||
sLengthSelect: "form-control form-control-sm",
|
||||
sProcessing: "dataTables_processing card",
|
||||
sPageButton: "paginate_button page-item"
|
||||
} );
|
||||
|
||||
|
||||
/* Bootstrap paging button renderer */
|
||||
DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
|
||||
var api = new DataTable.Api( settings );
|
||||
var classes = settings.oClasses;
|
||||
var lang = settings.oLanguage.oPaginate;
|
||||
var aria = settings.oLanguage.oAria.paginate || {};
|
||||
var btnDisplay, btnClass, counter=0;
|
||||
|
||||
var attach = function( container, buttons ) {
|
||||
var i, ien, node, button;
|
||||
var clickHandler = function ( e ) {
|
||||
e.preventDefault();
|
||||
if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
|
||||
api.page( e.data.action ).draw( 'page' );
|
||||
}
|
||||
};
|
||||
|
||||
for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
|
||||
button = buttons[i];
|
||||
|
||||
if ( $.isArray( button ) ) {
|
||||
attach( container, button );
|
||||
}
|
||||
else {
|
||||
btnDisplay = '';
|
||||
btnClass = '';
|
||||
|
||||
switch ( button ) {
|
||||
case 'ellipsis':
|
||||
btnDisplay = '…';
|
||||
btnClass = 'disabled';
|
||||
break;
|
||||
|
||||
case 'first':
|
||||
btnDisplay = lang.sFirst;
|
||||
btnClass = button + (page > 0 ?
|
||||
'' : ' disabled');
|
||||
break;
|
||||
|
||||
case 'previous':
|
||||
btnDisplay = lang.sPrevious;
|
||||
btnClass = button + (page > 0 ?
|
||||
'' : ' disabled');
|
||||
break;
|
||||
|
||||
case 'next':
|
||||
btnDisplay = lang.sNext;
|
||||
btnClass = button + (page < pages-1 ?
|
||||
'' : ' disabled');
|
||||
break;
|
||||
|
||||
case 'last':
|
||||
btnDisplay = lang.sLast;
|
||||
btnClass = button + (page < pages-1 ?
|
||||
'' : ' disabled');
|
||||
break;
|
||||
|
||||
default:
|
||||
btnDisplay = button + 1;
|
||||
btnClass = page === button ?
|
||||
'active' : '';
|
||||
break;
|
||||
}
|
||||
|
||||
if ( btnDisplay ) {
|
||||
node = $('<li>', {
|
||||
'class': classes.sPageButton+' '+btnClass,
|
||||
'id': idx === 0 && typeof button === 'string' ?
|
||||
settings.sTableId +'_'+ button :
|
||||
null
|
||||
} )
|
||||
.append( $('<a>', {
|
||||
'href': '#',
|
||||
'aria-controls': settings.sTableId,
|
||||
'aria-label': aria[ button ],
|
||||
'data-dt-idx': counter,
|
||||
'tabindex': settings.iTabIndex,
|
||||
'class': 'page-link'
|
||||
} )
|
||||
.html( btnDisplay )
|
||||
)
|
||||
.appendTo( container );
|
||||
|
||||
settings.oApi._fnBindAction(
|
||||
node, {action: button}, clickHandler
|
||||
);
|
||||
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// IE9 throws an 'unknown error' if document.activeElement is used
|
||||
// inside an iframe or frame.
|
||||
var activeEl;
|
||||
|
||||
try {
|
||||
// Because this approach is destroying and recreating the paging
|
||||
// elements, focus is lost on the select button which is bad for
|
||||
// accessibility. So we want to restore focus once the draw has
|
||||
// completed
|
||||
activeEl = $(host).find(document.activeElement).data('dt-idx');
|
||||
}
|
||||
catch (e) {}
|
||||
|
||||
attach(
|
||||
$(host).empty().html('<ul class="pagination"/>').children('ul'),
|
||||
buttons
|
||||
);
|
||||
|
||||
if ( activeEl !== undefined ) {
|
||||
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return DataTable;
|
||||
}));
|
||||
4
public/vendor/pay-uz/js/jquery-3.2.1.min.js
vendored
Executable file
4
public/vendor/pay-uz/js/jquery-3.2.1.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
15344
public/vendor/pay-uz/js/jquery.dataTables.js
vendored
Executable file
15344
public/vendor/pay-uz/js/jquery.dataTables.js
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1
public/vendor/pay-uz/js/jquery.easing.min.js
vendored
Executable file
1
public/vendor/pay-uz/js/jquery.easing.min.js
vendored
Executable file
@@ -0,0 +1 @@
|
||||
(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("jquery"))}else{factory(jQuery)}})(function($){$.easing.jswing=$.easing.swing;var pow=Math.pow,sqrt=Math.sqrt,sin=Math.sin,cos=Math.cos,PI=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI/3,c5=2*PI/4.5;function bounceOut(x){var n1=7.5625,d1=2.75;if(x<1/d1){return n1*x*x}else if(x<2/d1){return n1*(x-=1.5/d1)*x+.75}else if(x<2.5/d1){return n1*(x-=2.25/d1)*x+.9375}else{return n1*(x-=2.625/d1)*x+.984375}}$.extend($.easing,{def:"easeOutQuad",swing:function(x){return $.easing[$.easing.def](x)},easeInQuad:function(x){return x*x},easeOutQuad:function(x){return 1-(1-x)*(1-x)},easeInOutQuad:function(x){return x<.5?2*x*x:1-pow(-2*x+2,2)/2},easeInCubic:function(x){return x*x*x},easeOutCubic:function(x){return 1-pow(1-x,3)},easeInOutCubic:function(x){return x<.5?4*x*x*x:1-pow(-2*x+2,3)/2},easeInQuart:function(x){return x*x*x*x},easeOutQuart:function(x){return 1-pow(1-x,4)},easeInOutQuart:function(x){return x<.5?8*x*x*x*x:1-pow(-2*x+2,4)/2},easeInQuint:function(x){return x*x*x*x*x},easeOutQuint:function(x){return 1-pow(1-x,5)},easeInOutQuint:function(x){return x<.5?16*x*x*x*x*x:1-pow(-2*x+2,5)/2},easeInSine:function(x){return 1-cos(x*PI/2)},easeOutSine:function(x){return sin(x*PI/2)},easeInOutSine:function(x){return-(cos(PI*x)-1)/2},easeInExpo:function(x){return x===0?0:pow(2,10*x-10)},easeOutExpo:function(x){return x===1?1:1-pow(2,-10*x)},easeInOutExpo:function(x){return x===0?0:x===1?1:x<.5?pow(2,20*x-10)/2:(2-pow(2,-20*x+10))/2},easeInCirc:function(x){return 1-sqrt(1-pow(x,2))},easeOutCirc:function(x){return sqrt(1-pow(x-1,2))},easeInOutCirc:function(x){return x<.5?(1-sqrt(1-pow(2*x,2)))/2:(sqrt(1-pow(-2*x+2,2))+1)/2},easeInElastic:function(x){return x===0?0:x===1?1:-pow(2,10*x-10)*sin((x*10-10.75)*c4)},easeOutElastic:function(x){return x===0?0:x===1?1:pow(2,-10*x)*sin((x*10-.75)*c4)+1},easeInOutElastic:function(x){return x===0?0:x===1?1:x<.5?-(pow(2,20*x-10)*sin((20*x-11.125)*c5))/2:pow(2,-20*x+10)*sin((20*x-11.125)*c5)/2+1},easeInBack:function(x){return c3*x*x*x-c1*x*x},easeOutBack:function(x){return 1+c3*pow(x-1,3)+c1*pow(x-1,2)},easeInOutBack:function(x){return x<.5?pow(2*x,2)*((c2+1)*2*x-c2)/2:(pow(2*x-2,2)*((c2+1)*(x*2-2)+c2)+2)/2},easeInBounce:function(x){return 1-bounceOut(1-x)},easeOutBounce:bounceOut,easeInOutBounce:function(x){return x<.5?(1-bounceOut(1-2*x))/2:(1+bounceOut(2*x-1))/2}})});
|
||||
57
public/vendor/pay-uz/js/pay.js
vendored
Executable file
57
public/vendor/pay-uz/js/pay.js
vendored
Executable file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
Created by: Azizbek Eshonaliyev
|
||||
date: 2/26/2019 13:41
|
||||
*/
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
/*
|
||||
Create Payment system.
|
||||
*/
|
||||
|
||||
let counter_fields = 0;
|
||||
let add_param_btn = document.getElementById("addPaymentSystemParamBtn");
|
||||
let fields_list = $('#fieldsList');
|
||||
|
||||
function create_payment_system_field() {
|
||||
counter_fields++;
|
||||
return `
|
||||
<div class="row">
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="recipient-label-${counter_fields}" class="col-form-label">Label name:</label>
|
||||
<input name="params[new-${counter_fields}][label]" type="text" class="form-control" id="recipient-label-${counter_fields}" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="recipient-name-${counter_fields}" class="col-form-label">Key:</label>
|
||||
<input name="params[new-${counter_fields}][name]" type="text" class="form-control" id="recipient-name-${counter_fields}" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<label for="recipient-value-${counter_fields}" class="col-form-label">Value:</label>
|
||||
<input name="params[new-${counter_fields}][value]" type="text" class="form-control" id="recipient-value-${counter_fields}" value="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="form-group">
|
||||
<button class="btn btn-outline-danger remove_param_btn_create_page remove_payment_system_btn_sb"> <span class="fa fa-trash"></span> Delete</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
if (add_param_btn)
|
||||
add_param_btn.addEventListener('click',function (event) {
|
||||
event.preventDefault();
|
||||
fields_list.append(create_payment_system_field());
|
||||
});
|
||||
|
||||
fields_list.on('click','.remove_param_btn_create_page',function (event) {
|
||||
event.preventDefault();
|
||||
$(this).parent().parent().parent().remove();
|
||||
});
|
||||
});
|
||||
4
public/vendor/pay-uz/js/popper.min.js
vendored
Executable file
4
public/vendor/pay-uz/js/popper.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
261
public/vendor/pay-uz/js/sb-admin.js
vendored
Executable file
261
public/vendor/pay-uz/js/sb-admin.js
vendored
Executable file
@@ -0,0 +1,261 @@
|
||||
(function($) {
|
||||
"use strict"; // Start of use strict
|
||||
|
||||
// Configure tooltips for collapsed side navigation
|
||||
$('.navbar-sidenav [data-toggle="tooltip"]').tooltip({
|
||||
template: '<div class="tooltip navbar-sidenav-tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'
|
||||
})
|
||||
|
||||
// Toggle the side navigation
|
||||
$("#sidenavToggler").click(function(e) {
|
||||
e.preventDefault();
|
||||
$("body").toggleClass("sidenav-toggled");
|
||||
$(".navbar-sidenav .nav-link-collapse").addClass("collapsed");
|
||||
$(".navbar-sidenav .sidenav-second-level, .navbar-sidenav .sidenav-third-level").removeClass("show");
|
||||
});
|
||||
|
||||
// Force the toggled class to be removed when a collapsible nav link is clicked
|
||||
$(".navbar-sidenav .nav-link-collapse").click(function(e) {
|
||||
e.preventDefault();
|
||||
$("body").removeClass("sidenav-toggled");
|
||||
});
|
||||
|
||||
// Prevent the content wrapper from scrolling when the fixed side navigation hovered over
|
||||
$('body.fixed-nav .navbar-sidenav, body.fixed-nav .sidenav-toggler, body.fixed-nav .navbar-collapse').on('mousewheel DOMMouseScroll', function(e) {
|
||||
var e0 = e.originalEvent,
|
||||
delta = e0.wheelDelta || -e0.detail;
|
||||
this.scrollTop += (delta < 0 ? 1 : -1) * 30;
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
// Scroll to top button appear
|
||||
$(document).scroll(function() {
|
||||
var scrollDistance = $(this).scrollTop();
|
||||
if (scrollDistance > 100) {
|
||||
$('.scroll-to-top').fadeIn();
|
||||
} else {
|
||||
$('.scroll-to-top').fadeOut();
|
||||
}
|
||||
});
|
||||
|
||||
// Configure tooltips globally
|
||||
$('[data-toggle="tooltip"]').tooltip()
|
||||
|
||||
// Smooth scrolling using jQuery easing
|
||||
$(document).on('click', 'a.scroll-to-top', function(event) {
|
||||
var $anchor = $(this);
|
||||
$('html, body').stop().animate({
|
||||
scrollTop: ($($anchor.attr('href')).offset().top)
|
||||
}, 1000, 'easeInOutExpo');
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
// Call the dataTables jQuery plugin
|
||||
$(document).ready(function() {
|
||||
$('#dataTable').DataTable();
|
||||
});
|
||||
|
||||
})(jQuery); // End of use strict
|
||||
|
||||
// Chart.js scripts
|
||||
// -- Set new default font family and font color to mimic Bootstrap's default styling
|
||||
Chart.defaults.global.defaultFontFamily = '-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif';
|
||||
Chart.defaults.global.defaultFontColor = '#292b2c';
|
||||
|
||||
var sana = [];
|
||||
|
||||
for (i = 0; i < 7; i++) {
|
||||
var d=new Date();
|
||||
d.setDate(d.getDate() - i);
|
||||
var day=d.getDate();
|
||||
var month=d.getMonth() + 1;
|
||||
var year=d.getFullYear();
|
||||
|
||||
sana[i] = year + "/" + month + "/" + day;
|
||||
}
|
||||
|
||||
// -- Area Chart Example
|
||||
var ctx = document.getElementById("hisob");
|
||||
var myLineChart1 = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: [
|
||||
sana[6],
|
||||
sana[5],
|
||||
sana[4],
|
||||
sana[3],
|
||||
sana[2],
|
||||
sana[1],
|
||||
sana[0]],
|
||||
datasets: [{
|
||||
label: "Hisob",
|
||||
lineTension: 0.5,
|
||||
backgroundColor: "rgba(2,117,216,0.2)",
|
||||
borderColor: "rgba(2,117,216,1)",
|
||||
pointRadius: 5,
|
||||
pointBackgroundColor: "rgba(2,117,216,1)",
|
||||
pointBorderColor: "rgba(255,255,255,0.8)",
|
||||
pointHoverRadius: 7,
|
||||
pointHoverBackgroundColor: "rgba(2,117,216,1)",
|
||||
pointHitRadius: 20,
|
||||
pointBorderWidth: 1,
|
||||
data: [1500, 1693, 1523, 1782, 1900, 1364, 1874],
|
||||
}],
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
time: {
|
||||
unit: 'date'
|
||||
},
|
||||
gridLines: {
|
||||
display: true
|
||||
},
|
||||
ticks: {
|
||||
maxTicksLimit: 7
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
min: 0,
|
||||
max: 3000,
|
||||
maxTicksLimit: 10
|
||||
},
|
||||
gridLines: {
|
||||
color: "rgba(0, 0, 0, .125)",
|
||||
}
|
||||
}],
|
||||
},
|
||||
legend: {
|
||||
display: false
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Weekly users
|
||||
var ctx = document.getElementById("users");
|
||||
var myLineChart2 = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: [
|
||||
sana[6],
|
||||
sana[5],
|
||||
sana[4],
|
||||
sana[3],
|
||||
sana[2],
|
||||
sana[1],
|
||||
sana[0]],
|
||||
datasets: [{
|
||||
label: "Userlar",
|
||||
lineTension: 0.5,
|
||||
backgroundColor: "rgba(2,117,216,0.2)",
|
||||
borderColor: "rgba(2,117,216,1)",
|
||||
pointRadius: 5,
|
||||
pointBackgroundColor: "rgba(2,117,216,1)",
|
||||
pointBorderColor: "rgba(255,255,255,0.8)",
|
||||
pointHoverRadius: 7,
|
||||
pointHoverBackgroundColor: "rgba(2,117,216,1)",
|
||||
pointHitRadius: 20,
|
||||
pointBorderWidth: 1,
|
||||
data: [1500, 1693, 1523, 1782, 1900, 1364, 1874],
|
||||
},
|
||||
{
|
||||
label: "Mehmonlar",
|
||||
lineTension: 0.5,
|
||||
backgroundColor: "rgba(255,30,5,0.2)",
|
||||
borderColor: "rgba(255,30,5,1)",
|
||||
pointRadius: 5,
|
||||
pointBackgroundColor: "rgba(255,30,5,1)",
|
||||
pointBorderColor: "rgba(255,255,255,0.8)",
|
||||
pointHoverRadius: 7,
|
||||
pointHoverBackgroundColor: "rgba(255,30,5,1)",
|
||||
pointHitRadius: 20,
|
||||
pointBorderWidth: 1,
|
||||
data: [1400, 1893, 1623, 2082, 1500, 1764, 1374],
|
||||
}],
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
time: {
|
||||
unit: 'date'
|
||||
},
|
||||
gridLines: {
|
||||
display: true
|
||||
},
|
||||
ticks: {
|
||||
maxTicksLimit: 7
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
min: 0,
|
||||
max: 3000,
|
||||
maxTicksLimit: 10
|
||||
},
|
||||
gridLines: {
|
||||
color: "rgba(0, 0, 0, .125)",
|
||||
}
|
||||
}],
|
||||
},
|
||||
legend: {
|
||||
display: true
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// -- Bar Chart Example
|
||||
var ctx = document.getElementById("myBarChart");
|
||||
var myLineChart = new Chart(ctx, {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: ["January", "February", "March", "April", "May", "June"],
|
||||
datasets: [{
|
||||
label: "Revenue",
|
||||
backgroundColor: "rgba(2,117,216,1)",
|
||||
borderColor: "rgba(2,117,216,1)",
|
||||
data: [4215, 5312, 6251, 7841, 9821, 14984],
|
||||
}],
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
xAxes: [{
|
||||
time: {
|
||||
unit: 'month'
|
||||
},
|
||||
gridLines: {
|
||||
display: false
|
||||
},
|
||||
ticks: {
|
||||
maxTicksLimit: 6
|
||||
}
|
||||
}],
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
min: 0,
|
||||
max: 15000,
|
||||
maxTicksLimit: 5
|
||||
},
|
||||
gridLines: {
|
||||
display: true
|
||||
}
|
||||
}],
|
||||
},
|
||||
legend: {
|
||||
display: false
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// -- Pie Chart Example
|
||||
var ctx = document.getElementById("myPieChart");
|
||||
var myPieChart = new Chart(ctx, {
|
||||
type: 'pie',
|
||||
data: {
|
||||
labels: ["Blue", "Red", "Yellow", "Green"],
|
||||
datasets: [{
|
||||
data: [12.21, 15.58, 11.25, 8.32],
|
||||
backgroundColor: ['#007bff', '#dc3545', '#ffc107', '#28a745'],
|
||||
}],
|
||||
},
|
||||
});
|
||||
688
public/vendor/pay-uz/js/tagsinput.js
vendored
Executable file
688
public/vendor/pay-uz/js/tagsinput.js
vendored
Executable file
@@ -0,0 +1,688 @@
|
||||
/*
|
||||
* bootstrap-tagsinput v0.8.0
|
||||
*
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
var defaultOptions = {
|
||||
tagClass: function(item) {
|
||||
return 'badge badge-info';
|
||||
},
|
||||
focusClass: 'focus',
|
||||
itemValue: function(item) {
|
||||
return item ? item.toString() : item;
|
||||
},
|
||||
itemText: function(item) {
|
||||
return this.itemValue(item);
|
||||
},
|
||||
itemTitle: function(item) {
|
||||
return null;
|
||||
},
|
||||
freeInput: true,
|
||||
addOnBlur: true,
|
||||
maxTags: undefined,
|
||||
maxChars: undefined,
|
||||
confirmKeys: [13, 44],
|
||||
delimiter: ',',
|
||||
delimiterRegex: null,
|
||||
cancelConfirmKeysOnEmpty: false,
|
||||
onTagExists: function(item, $tag) {
|
||||
$tag.hide().fadeIn();
|
||||
},
|
||||
trimValue: false,
|
||||
allowDuplicates: false,
|
||||
triggerChange: true
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructor function
|
||||
*/
|
||||
function TagsInput(element, options) {
|
||||
this.isInit = true;
|
||||
this.itemsArray = [];
|
||||
|
||||
this.$element = $(element);
|
||||
this.$element.hide();
|
||||
|
||||
this.isSelect = (element.tagName === 'SELECT');
|
||||
this.multiple = (this.isSelect && element.hasAttribute('multiple'));
|
||||
this.objectItems = options && options.itemValue;
|
||||
this.placeholderText = element.hasAttribute('placeholder') ? this.$element.attr('placeholder') : '';
|
||||
this.inputSize = Math.max(1, this.placeholderText.length);
|
||||
|
||||
this.$container = $('<div class="bootstrap-tagsinput"></div>');
|
||||
this.$input = $('<input type="text" placeholder="' + this.placeholderText + '"/>').appendTo(this.$container);
|
||||
|
||||
this.$element.before(this.$container);
|
||||
|
||||
this.build(options);
|
||||
this.isInit = false;
|
||||
}
|
||||
|
||||
TagsInput.prototype = {
|
||||
constructor: TagsInput,
|
||||
|
||||
/**
|
||||
* Adds the given item as a new tag. Pass true to dontPushVal to prevent
|
||||
* updating the elements val()
|
||||
*/
|
||||
add: function(item, dontPushVal, options) {
|
||||
var self = this;
|
||||
|
||||
if (self.options.maxTags && self.itemsArray.length >= self.options.maxTags)
|
||||
return;
|
||||
|
||||
// Ignore falsey values, except false
|
||||
if (item !== false && !item)
|
||||
return;
|
||||
|
||||
// Trim value
|
||||
if (typeof item === "string" && self.options.trimValue) {
|
||||
item = $.trim(item);
|
||||
}
|
||||
|
||||
// Throw an error when trying to add an object while the itemValue option was not set
|
||||
if (typeof item === "object" && !self.objectItems)
|
||||
throw("Can't add objects when itemValue option is not set");
|
||||
|
||||
// Ignore strings only containg whitespace
|
||||
if (item.toString().match(/^\s*$/))
|
||||
return;
|
||||
|
||||
// If SELECT but not multiple, remove current tag
|
||||
if (self.isSelect && !self.multiple && self.itemsArray.length > 0)
|
||||
self.remove(self.itemsArray[0]);
|
||||
|
||||
if (typeof item === "string" && this.$element[0].tagName === 'INPUT') {
|
||||
var delimiter = (self.options.delimiterRegex) ? self.options.delimiterRegex : self.options.delimiter;
|
||||
var items = item.split(delimiter);
|
||||
if (items.length > 1) {
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
this.add(items[i], true);
|
||||
}
|
||||
|
||||
if (!dontPushVal)
|
||||
self.pushVal(self.options.triggerChange);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var itemValue = self.options.itemValue(item),
|
||||
itemText = self.options.itemText(item),
|
||||
tagClass = self.options.tagClass(item),
|
||||
itemTitle = self.options.itemTitle(item);
|
||||
|
||||
// Ignore items allready added
|
||||
var existing = $.grep(self.itemsArray, function(item) { return self.options.itemValue(item) === itemValue; } )[0];
|
||||
if (existing && !self.options.allowDuplicates) {
|
||||
// Invoke onTagExists
|
||||
if (self.options.onTagExists) {
|
||||
var $existingTag = $(".badge", self.$container).filter(function() { return $(this).data("item") === existing; });
|
||||
self.options.onTagExists(item, $existingTag);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// if length greater than limit
|
||||
if (self.items().toString().length + item.length + 1 > self.options.maxInputLength)
|
||||
return;
|
||||
|
||||
// raise beforeItemAdd arg
|
||||
var beforeItemAddEvent = $.Event('beforeItemAdd', { item: item, cancel: false, options: options});
|
||||
self.$element.trigger(beforeItemAddEvent);
|
||||
if (beforeItemAddEvent.cancel)
|
||||
return;
|
||||
|
||||
// register item in internal array and map
|
||||
self.itemsArray.push(item);
|
||||
|
||||
// add a tag element
|
||||
|
||||
var $tag = $('<span class="badge ' + htmlEncode(tagClass) + (itemTitle !== null ? ('" title="' + itemTitle) : '') + '">' + htmlEncode(itemText) + '<span data-role="remove"></span></span>');
|
||||
$tag.data('item', item);
|
||||
self.findInputWrapper().before($tag);
|
||||
$tag.after(' ');
|
||||
|
||||
// Check to see if the tag exists in its raw or uri-encoded form
|
||||
var optionExists = (
|
||||
$('option[value="' + encodeURIComponent(itemValue) + '"]', self.$element).length ||
|
||||
$('option[value="' + htmlEncode(itemValue) + '"]', self.$element).length
|
||||
);
|
||||
|
||||
// add <option /> if item represents a value not present in one of the <select />'s options
|
||||
if (self.isSelect && !optionExists) {
|
||||
var $option = $('<option selected>' + htmlEncode(itemText) + '</option>');
|
||||
$option.data('item', item);
|
||||
$option.attr('value', itemValue);
|
||||
self.$element.append($option);
|
||||
}
|
||||
|
||||
if (!dontPushVal)
|
||||
self.pushVal(self.options.triggerChange);
|
||||
|
||||
// Add class when reached maxTags
|
||||
if (self.options.maxTags === self.itemsArray.length || self.items().toString().length === self.options.maxInputLength)
|
||||
self.$container.addClass('bootstrap-tagsinput-max');
|
||||
|
||||
// If using typeahead, once the tag has been added, clear the typeahead value so it does not stick around in the input.
|
||||
if ($('.typeahead, .twitter-typeahead', self.$container).length) {
|
||||
self.$input.typeahead('val', '');
|
||||
}
|
||||
|
||||
if (this.isInit) {
|
||||
self.$element.trigger($.Event('itemAddedOnInit', { item: item, options: options }));
|
||||
} else {
|
||||
self.$element.trigger($.Event('itemAdded', { item: item, options: options }));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes the given item. Pass true to dontPushVal to prevent updating the
|
||||
* elements val()
|
||||
*/
|
||||
remove: function(item, dontPushVal, options) {
|
||||
var self = this;
|
||||
|
||||
if (self.objectItems) {
|
||||
if (typeof item === "object")
|
||||
item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) == self.options.itemValue(item); } );
|
||||
else
|
||||
item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) == item; } );
|
||||
|
||||
item = item[item.length-1];
|
||||
}
|
||||
|
||||
if (item) {
|
||||
var beforeItemRemoveEvent = $.Event('beforeItemRemove', { item: item, cancel: false, options: options });
|
||||
self.$element.trigger(beforeItemRemoveEvent);
|
||||
if (beforeItemRemoveEvent.cancel)
|
||||
return;
|
||||
|
||||
$('.badge', self.$container).filter(function() { return $(this).data('item') === item; }).remove();
|
||||
$('option', self.$element).filter(function() { return $(this).data('item') === item; }).remove();
|
||||
if($.inArray(item, self.itemsArray) !== -1)
|
||||
self.itemsArray.splice($.inArray(item, self.itemsArray), 1);
|
||||
}
|
||||
|
||||
if (!dontPushVal)
|
||||
self.pushVal(self.options.triggerChange);
|
||||
|
||||
// Remove class when reached maxTags
|
||||
if (self.options.maxTags > self.itemsArray.length)
|
||||
self.$container.removeClass('bootstrap-tagsinput-max');
|
||||
|
||||
self.$element.trigger($.Event('itemRemoved', { item: item, options: options }));
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes all items
|
||||
*/
|
||||
removeAll: function() {
|
||||
var self = this;
|
||||
|
||||
$('.badge', self.$container).remove();
|
||||
$('option', self.$element).remove();
|
||||
|
||||
while(self.itemsArray.length > 0)
|
||||
self.itemsArray.pop();
|
||||
|
||||
self.pushVal(self.options.triggerChange);
|
||||
},
|
||||
|
||||
/**
|
||||
* Refreshes the tags so they match the text/value of their corresponding
|
||||
* item.
|
||||
*/
|
||||
refresh: function() {
|
||||
var self = this;
|
||||
$('.badge', self.$container).each(function() {
|
||||
var $tag = $(this),
|
||||
item = $tag.data('item'),
|
||||
itemValue = self.options.itemValue(item),
|
||||
itemText = self.options.itemText(item),
|
||||
tagClass = self.options.tagClass(item);
|
||||
|
||||
// Update tag's class and inner text
|
||||
$tag.attr('class', null);
|
||||
$tag.addClass('badge ' + htmlEncode(tagClass));
|
||||
$tag.contents().filter(function() {
|
||||
return this.nodeType == 3;
|
||||
})[0].nodeValue = htmlEncode(itemText);
|
||||
|
||||
if (self.isSelect) {
|
||||
var option = $('option', self.$element).filter(function() { return $(this).data('item') === item; });
|
||||
option.attr('value', itemValue);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the items added as tags
|
||||
*/
|
||||
items: function() {
|
||||
return this.itemsArray;
|
||||
},
|
||||
|
||||
/**
|
||||
* Assembly value by retrieving the value of each item, and set it on the
|
||||
* element.
|
||||
*/
|
||||
pushVal: function() {
|
||||
var self = this,
|
||||
val = $.map(self.items(), function(item) {
|
||||
return self.options.itemValue(item).toString();
|
||||
});
|
||||
|
||||
self.$element.val(val, true);
|
||||
|
||||
if (self.options.triggerChange)
|
||||
self.$element.trigger('change');
|
||||
},
|
||||
|
||||
/**
|
||||
* Initializes the tags input behaviour on the element
|
||||
*/
|
||||
build: function(options) {
|
||||
var self = this;
|
||||
|
||||
self.options = $.extend({}, defaultOptions, options);
|
||||
// When itemValue is set, freeInput should always be false
|
||||
if (self.objectItems)
|
||||
self.options.freeInput = false;
|
||||
|
||||
makeOptionItemFunction(self.options, 'itemValue');
|
||||
makeOptionItemFunction(self.options, 'itemText');
|
||||
makeOptionFunction(self.options, 'tagClass');
|
||||
|
||||
// Typeahead Bootstrap version 2.3.2
|
||||
if (self.options.typeahead) {
|
||||
var typeahead = self.options.typeahead || {};
|
||||
|
||||
makeOptionFunction(typeahead, 'source');
|
||||
|
||||
self.$input.typeahead($.extend({}, typeahead, {
|
||||
source: function (query, process) {
|
||||
function processItems(items) {
|
||||
var texts = [];
|
||||
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
var text = self.options.itemText(items[i]);
|
||||
map[text] = items[i];
|
||||
texts.push(text);
|
||||
}
|
||||
process(texts);
|
||||
}
|
||||
|
||||
this.map = {};
|
||||
var map = this.map,
|
||||
data = typeahead.source(query);
|
||||
|
||||
if ($.isFunction(data.success)) {
|
||||
// support for Angular callbacks
|
||||
data.success(processItems);
|
||||
} else if ($.isFunction(data.then)) {
|
||||
// support for Angular promises
|
||||
data.then(processItems);
|
||||
} else {
|
||||
// support for functions and jquery promises
|
||||
$.when(data)
|
||||
.then(processItems);
|
||||
}
|
||||
},
|
||||
updater: function (text) {
|
||||
self.add(this.map[text]);
|
||||
return this.map[text];
|
||||
},
|
||||
matcher: function (text) {
|
||||
return (text.toLowerCase().indexOf(this.query.trim().toLowerCase()) !== -1);
|
||||
},
|
||||
sorter: function (texts) {
|
||||
return texts.sort();
|
||||
},
|
||||
highlighter: function (text) {
|
||||
var regex = new RegExp( '(' + this.query + ')', 'gi' );
|
||||
return text.replace( regex, "<strong>$1</strong>" );
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
// typeahead.js
|
||||
if (self.options.typeaheadjs) {
|
||||
// Determine if main configurations were passed or simply a dataset
|
||||
var typeaheadjs = self.options.typeaheadjs;
|
||||
if (!$.isArray(typeaheadjs)) {
|
||||
typeaheadjs = [null, typeaheadjs];
|
||||
}
|
||||
|
||||
$.fn.typeahead.apply(self.$input, typeaheadjs).on('typeahead:selected', $.proxy(function (obj, datum, name) {
|
||||
var index = 0;
|
||||
typeaheadjs.some(function(dataset, _index) {
|
||||
if (dataset.name === name) {
|
||||
index = _index;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// @TODO Dep: https://github.com/corejavascript/typeahead.js/issues/89
|
||||
if (typeaheadjs[index].valueKey) {
|
||||
self.add(datum[typeaheadjs[index].valueKey]);
|
||||
} else {
|
||||
self.add(datum);
|
||||
}
|
||||
|
||||
self.$input.typeahead('val', '');
|
||||
}, self));
|
||||
}
|
||||
|
||||
self.$container.on('click', $.proxy(function(event) {
|
||||
if (! self.$element.attr('disabled')) {
|
||||
self.$input.removeAttr('disabled');
|
||||
}
|
||||
self.$input.focus();
|
||||
}, self));
|
||||
|
||||
if (self.options.addOnBlur && self.options.freeInput) {
|
||||
self.$input.on('focusout', $.proxy(function(event) {
|
||||
// HACK: only process on focusout when no typeahead opened, to
|
||||
// avoid adding the typeahead text as tag
|
||||
if ($('.typeahead, .twitter-typeahead', self.$container).length === 0) {
|
||||
self.add(self.$input.val());
|
||||
self.$input.val('');
|
||||
}
|
||||
}, self));
|
||||
}
|
||||
|
||||
// Toggle the 'focus' css class on the container when it has focus
|
||||
self.$container.on({
|
||||
focusin: function() {
|
||||
self.$container.addClass(self.options.focusClass);
|
||||
},
|
||||
focusout: function() {
|
||||
self.$container.removeClass(self.options.focusClass);
|
||||
},
|
||||
});
|
||||
|
||||
self.$container.on('keydown', 'input', $.proxy(function(event) {
|
||||
var $input = $(event.target),
|
||||
$inputWrapper = self.findInputWrapper();
|
||||
|
||||
if (self.$element.attr('disabled')) {
|
||||
self.$input.attr('disabled', 'disabled');
|
||||
return;
|
||||
}
|
||||
|
||||
switch (event.which) {
|
||||
// BACKSPACE
|
||||
case 8:
|
||||
if (doGetCaretPosition($input[0]) === 0) {
|
||||
var prev = $inputWrapper.prev();
|
||||
if (prev.length) {
|
||||
self.remove(prev.data('item'));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
// DELETE
|
||||
case 46:
|
||||
if (doGetCaretPosition($input[0]) === 0) {
|
||||
var next = $inputWrapper.next();
|
||||
if (next.length) {
|
||||
self.remove(next.data('item'));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
// LEFT ARROW
|
||||
case 37:
|
||||
// Try to move the input before the previous tag
|
||||
var $prevTag = $inputWrapper.prev();
|
||||
if ($input.val().length === 0 && $prevTag[0]) {
|
||||
$prevTag.before($inputWrapper);
|
||||
$input.focus();
|
||||
}
|
||||
break;
|
||||
// RIGHT ARROW
|
||||
case 39:
|
||||
// Try to move the input after the next tag
|
||||
var $nextTag = $inputWrapper.next();
|
||||
if ($input.val().length === 0 && $nextTag[0]) {
|
||||
$nextTag.after($inputWrapper);
|
||||
$input.focus();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// ignore
|
||||
}
|
||||
|
||||
// Reset internal input's size
|
||||
var textLength = $input.val().length,
|
||||
wordSpace = Math.ceil(textLength / 5),
|
||||
size = textLength + wordSpace + 1;
|
||||
$input.attr('size', Math.max(this.inputSize, size));
|
||||
}, self));
|
||||
|
||||
self.$container.on('keypress', 'input', $.proxy(function(event) {
|
||||
var $input = $(event.target);
|
||||
|
||||
if (self.$element.attr('disabled')) {
|
||||
self.$input.attr('disabled', 'disabled');
|
||||
return;
|
||||
}
|
||||
|
||||
var text = $input.val(),
|
||||
maxLengthReached = self.options.maxChars && text.length >= self.options.maxChars;
|
||||
if (self.options.freeInput && (keyCombinationInList(event, self.options.confirmKeys) || maxLengthReached)) {
|
||||
// Only attempt to add a tag if there is data in the field
|
||||
if (text.length !== 0) {
|
||||
self.add(maxLengthReached ? text.substr(0, self.options.maxChars) : text);
|
||||
$input.val('');
|
||||
}
|
||||
|
||||
// If the field is empty, let the event triggered fire as usual
|
||||
if (self.options.cancelConfirmKeysOnEmpty === false) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
// Reset internal input's size
|
||||
var textLength = $input.val().length,
|
||||
wordSpace = Math.ceil(textLength / 5),
|
||||
size = textLength + wordSpace + 1;
|
||||
$input.attr('size', Math.max(this.inputSize, size));
|
||||
}, self));
|
||||
|
||||
// Remove icon clicked
|
||||
self.$container.on('click', '[data-role=remove]', $.proxy(function(event) {
|
||||
if (self.$element.attr('disabled')) {
|
||||
return;
|
||||
}
|
||||
self.remove($(event.target).closest('.badge').data('item'));
|
||||
}, self));
|
||||
|
||||
// Only add existing value as tags when using strings as tags
|
||||
if (self.options.itemValue === defaultOptions.itemValue) {
|
||||
if (self.$element[0].tagName === 'INPUT') {
|
||||
self.add(self.$element.val());
|
||||
} else {
|
||||
$('option', self.$element).each(function() {
|
||||
self.add($(this).attr('value'), true);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Removes all tagsinput behaviour and unregsiter all event handlers
|
||||
*/
|
||||
destroy: function() {
|
||||
var self = this;
|
||||
|
||||
// Unbind events
|
||||
self.$container.off('keypress', 'input');
|
||||
self.$container.off('click', '[role=remove]');
|
||||
|
||||
self.$container.remove();
|
||||
self.$element.removeData('tagsinput');
|
||||
self.$element.show();
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets focus on the tagsinput
|
||||
*/
|
||||
focus: function() {
|
||||
this.$input.focus();
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the internal input element
|
||||
*/
|
||||
input: function() {
|
||||
return this.$input;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the element which is wrapped around the internal input. This
|
||||
* is normally the $container, but typeahead.js moves the $input element.
|
||||
*/
|
||||
findInputWrapper: function() {
|
||||
var elt = this.$input[0],
|
||||
container = this.$container[0];
|
||||
while(elt && elt.parentNode !== container)
|
||||
elt = elt.parentNode;
|
||||
|
||||
return $(elt);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Register JQuery plugin
|
||||
*/
|
||||
$.fn.tagsinput = function(arg1, arg2, arg3) {
|
||||
var results = [];
|
||||
|
||||
this.each(function() {
|
||||
var tagsinput = $(this).data('tagsinput');
|
||||
// Initialize a new tags input
|
||||
if (!tagsinput) {
|
||||
tagsinput = new TagsInput(this, arg1);
|
||||
$(this).data('tagsinput', tagsinput);
|
||||
results.push(tagsinput);
|
||||
|
||||
if (this.tagName === 'SELECT') {
|
||||
$('option', $(this)).attr('selected', 'selected');
|
||||
}
|
||||
|
||||
// Init tags from $(this).val()
|
||||
$(this).val($(this).val());
|
||||
} else if (!arg1 && !arg2) {
|
||||
// tagsinput already exists
|
||||
// no function, trying to init
|
||||
results.push(tagsinput);
|
||||
} else if(tagsinput[arg1] !== undefined) {
|
||||
// Invoke function on existing tags input
|
||||
if(tagsinput[arg1].length === 3 && arg3 !== undefined){
|
||||
var retVal = tagsinput[arg1](arg2, null, arg3);
|
||||
}else{
|
||||
var retVal = tagsinput[arg1](arg2);
|
||||
}
|
||||
if (retVal !== undefined)
|
||||
results.push(retVal);
|
||||
}
|
||||
});
|
||||
|
||||
if ( typeof arg1 == 'string') {
|
||||
// Return the results from the invoked function calls
|
||||
return results.length > 1 ? results : results[0];
|
||||
} else {
|
||||
return results;
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.tagsinput.Constructor = TagsInput;
|
||||
|
||||
/**
|
||||
* Most options support both a string or number as well as a function as
|
||||
* option value. This function makes sure that the option with the given
|
||||
* key in the given options is wrapped in a function
|
||||
*/
|
||||
function makeOptionItemFunction(options, key) {
|
||||
if (typeof options[key] !== 'function') {
|
||||
var propertyName = options[key];
|
||||
options[key] = function(item) { return item[propertyName]; };
|
||||
}
|
||||
}
|
||||
function makeOptionFunction(options, key) {
|
||||
if (typeof options[key] !== 'function') {
|
||||
var value = options[key];
|
||||
options[key] = function() { return value; };
|
||||
}
|
||||
}
|
||||
/**
|
||||
* HtmlEncodes the given value
|
||||
*/
|
||||
var htmlEncodeContainer = $('<div />');
|
||||
function htmlEncode(value) {
|
||||
if (value) {
|
||||
return htmlEncodeContainer.text(value).html();
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the position of the caret in the given input field
|
||||
* http://flightschool.acylt.com/devnotes/caret-position-woes/
|
||||
*/
|
||||
function doGetCaretPosition(oField) {
|
||||
var iCaretPos = 0;
|
||||
if (document.selection) {
|
||||
oField.focus ();
|
||||
var oSel = document.selection.createRange();
|
||||
oSel.moveStart ('character', -oField.value.length);
|
||||
iCaretPos = oSel.text.length;
|
||||
} else if (oField.selectionStart || oField.selectionStart == '0') {
|
||||
iCaretPos = oField.selectionStart;
|
||||
}
|
||||
return (iCaretPos);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns boolean indicates whether user has pressed an expected key combination.
|
||||
* @param object keyPressEvent: JavaScript event object, refer
|
||||
* http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
|
||||
* @param object lookupList: expected key combinations, as in:
|
||||
* [13, {which: 188, shiftKey: true}]
|
||||
*/
|
||||
function keyCombinationInList(keyPressEvent, lookupList) {
|
||||
var found = false;
|
||||
$.each(lookupList, function (index, keyCombination) {
|
||||
if (typeof (keyCombination) === 'number' && keyPressEvent.which === keyCombination) {
|
||||
found = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (keyPressEvent.which === keyCombination.which) {
|
||||
var alt = !keyCombination.hasOwnProperty('altKey') || keyPressEvent.altKey === keyCombination.altKey,
|
||||
shift = !keyCombination.hasOwnProperty('shiftKey') || keyPressEvent.shiftKey === keyCombination.shiftKey,
|
||||
ctrl = !keyCombination.hasOwnProperty('ctrlKey') || keyPressEvent.ctrlKey === keyCombination.ctrlKey;
|
||||
if (alt && shift && ctrl) {
|
||||
found = true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize tagsinput behaviour on inputs and selects which have
|
||||
* data-role=tagsinput
|
||||
*/
|
||||
$(function() {
|
||||
$("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput();
|
||||
});
|
||||
})(window.jQuery);
|
||||
Reference in New Issue
Block a user