Merge branch 'master' of https://github.com/brkcvn/akaunting into sentry
This commit is contained in:
@@ -20,7 +20,7 @@
|
||||
|
||||
<div class="gap-x-1 relative">
|
||||
<button data-dz-remove="true" class="absolute group right-0">
|
||||
<span class="material-icons text-base text-red px-1.5 py-1 rounded-lg group-hover:bg-gray-100">delete</span>
|
||||
<span class="material-icons-outlined text-base text-gray-300 px-1.5 py-1 rounded-lg group-hover:bg-gray-100">delete</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -45,12 +45,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="gap-x-1">
|
||||
<div class="flex flex-col gap-x-1">
|
||||
<button data-dz-remove="true" class="group">
|
||||
<span class="material-icons text-base text-red px-1.5 py-1 rounded-lg group-hover:bg-gray-100">delete</span>
|
||||
<span class="material-icons-outlined text-base text-gray-300 px-1.5 py-1 rounded-lg group-hover:bg-gray-100">delete</span>
|
||||
</button>
|
||||
<a href="#" type="button" class="group hidden" data-dz-download>
|
||||
<span class="material-icons-round text-base text-red px-1.5 py-1 rounded-lg group-hover:bg-gray-100">download</span>
|
||||
<span class="material-icons text-base text-gray-300 px-1.5 py-1 rounded-lg group-hover:bg-gray-100">download</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
:label="option.value"
|
||||
:value="option.key">
|
||||
<span class="float-left" :style="'padding-left: ' + (10 * option.level).toString() + 'px;'"><i v-if="option.level != 0" class="material-icons align-middle text-lg ltr:mr-2 rtl:ml-2">subdirectory_arrow_right</i>{{ option.value }}</span>
|
||||
<span class="badge badge-pill badge-success float-right mt-2" v-if="new_options[option.key]">{{ addNew.new_text }}</span>
|
||||
<span class="new-badge absolute right-2 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[option.key] || (option.mark_new)">{{ addNew.new_text }}</span>
|
||||
</el-option>
|
||||
|
||||
<el-option-group
|
||||
@@ -88,7 +88,7 @@
|
||||
:label="option.value"
|
||||
:value="option.key">
|
||||
<span class="float-left">{{ option.value }}</span>
|
||||
<span class="badge badge-pill badge-success float-right mt-2" v-if="new_options[option.key]">{{ addNew.new_text }}</span>
|
||||
<span class="new-badge absolute right-2 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[option.key] || (option.mark_new)">{{ addNew.new_text }}</span>
|
||||
</el-option>
|
||||
</el-option-group>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
<component v-bind:is="add_new_html" @submit="onSubmit" @cancel="onCancel"></component>
|
||||
|
||||
<span slot="infoBlock" class="absolute right-8 top-3 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[selected]">{{ addNew.new_text }}</span>
|
||||
<span slot="infoBlock" class="absolute right-8 top-3 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[selected] || (sorted_options[sorted_options.length - 1].mark_new && sorted_options[sorted_options.length - 1].key == selected)">{{ addNew.new_text }}</span>
|
||||
|
||||
<select :name="name" :id="name" class="hidden">
|
||||
<option v-for="option in sortedOptions" :key="option.key" :value="option.key">{{ option.value }}</option>
|
||||
@@ -421,7 +421,8 @@ export default {
|
||||
values.push({
|
||||
key: key.toString(),
|
||||
value: value,
|
||||
level: 0
|
||||
level: 0,
|
||||
mark_new: false,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -437,14 +438,16 @@ export default {
|
||||
index: index,
|
||||
key: index.toString(),
|
||||
value: option,
|
||||
level: 0
|
||||
level: 0,
|
||||
mark_new: false,
|
||||
});
|
||||
} else {
|
||||
this.sorted_options.push({
|
||||
index: index,
|
||||
key: option.id.toString(),
|
||||
value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name,
|
||||
level: (option.level) ? option.level : 0
|
||||
level: (option.level) ? option.level : 0,
|
||||
mark_new: (option.mark_new) ? option.mark_new : false,
|
||||
});
|
||||
}
|
||||
}, this);
|
||||
@@ -456,7 +459,8 @@ export default {
|
||||
this.sorted_options.push({
|
||||
key: key.toString(),
|
||||
value: value,
|
||||
level: 0
|
||||
level: 0,
|
||||
mark_new: false,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
@@ -466,14 +470,16 @@ export default {
|
||||
index: index,
|
||||
key: index.toString(),
|
||||
value: option,
|
||||
level: 0
|
||||
level: 0,
|
||||
mark_new: false,
|
||||
});
|
||||
} else {
|
||||
this.sorted_options.push({
|
||||
index: index,
|
||||
key: option.id.toString(),
|
||||
value: (option.title) ? option.title : (option.display_name) ? option.display_name : option.name,
|
||||
level: (option.level) ? option.level : 0
|
||||
level: (option.level) ? option.level : 0,
|
||||
mark_new: (option.mark_new) ? option.mark_new : false,
|
||||
});
|
||||
}
|
||||
}, this);
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
:label="option.value"
|
||||
:value="option.key">
|
||||
<span class="float-left" :style="'padding-left: ' + (10 * option.level).toString() + 'px;'"><i v-if="option.level != 0" class="material-icons align-middle text-lg ltr:mr-2 rtl:ml-2">subdirectory_arrow_right</i>{{ option.value }}</span>
|
||||
<span class="badge badge-pill badge-success float-right mt-2" v-if="new_options[option.key]">{{ addNew.new_text }}</span>
|
||||
<span class="new-badge absolute right-2 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[option.key] || (option.mark_new)">{{ addNew.new_text }}</span>
|
||||
</el-option>
|
||||
|
||||
<el-option-group
|
||||
@@ -85,7 +85,7 @@
|
||||
:label="option.value"
|
||||
:value="option.key">
|
||||
<span class="float-left" :style="'padding-left: ' + (10 * option.level).toString() + 'px;'"><i v-if="option.level != 0" class="material-icons align-middle text-lg ltr:mr-2 rtl:ml-2">subdirectory_arrow_right</i>{{ option.value }}</span>
|
||||
<span class="badge badge-pill badge-success float-right mt-2" v-if="new_options[option.key]">{{ addNew.new_text }}</span>
|
||||
<span class="new-badge absolute right-2 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[option.key] || (option.mark_new)">{{ addNew.new_text }}</span>
|
||||
</el-option>
|
||||
</el-option-group>
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
<component v-bind:is="add_new_html" @submit="onSubmit" @cancel="onCancel"></component>
|
||||
|
||||
<span slot="infoBlock" class="absolute right-8 top-3 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[selected]">{{ addNew.new_text }}</span>
|
||||
<span slot="infoBlock" class="absolute right-8 top-3 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[selected] || (sorted_options[sorted_options.length - 1].mark_new && sorted_options[sorted_options.length - 1].key == selected)">{{ addNew.new_text }}</span>
|
||||
|
||||
<select :name="name" :id="name" class="hidden">
|
||||
<option v-for="option in sortedOptions" :key="option.key" :value="option.key">{{ option.value }}</option>
|
||||
@@ -170,7 +170,7 @@
|
||||
:label="option.value"
|
||||
:value="option.key">
|
||||
<span class="float-left" :style="'padding-left: ' + (10 * option.level).toString() + 'px;'"><i v-if="option.level != 0" class="material-icons align-middle text-lg ltr:mr-2 rtl:ml-2">subdirectory_arrow_right</i>{{ option.value }}</span>
|
||||
<span class="badge badge-pill badge-success float-right mt-2" v-if="new_options[option.key]">{{ addNew.new_text }}</span>
|
||||
<span class="new-badge absolute right-2 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[option.key] || (option.mark_new)">{{ addNew.new_text }}</span>
|
||||
</el-option>
|
||||
|
||||
<el-option-group
|
||||
@@ -185,7 +185,7 @@
|
||||
:label="option.value"
|
||||
:value="option.key">
|
||||
<span class="float-left" :style="'padding-left: ' + (10 * option.level).toString() + 'px;'"><i v-if="option.level != 0" class="material-icons align-middle text-lg ltr:mr-2 rtl:ml-2">subdirectory_arrow_right</i>{{ option.value }}</span>
|
||||
<span class="badge badge-pill badge-success float-right mt-2" v-if="new_options[option.key]">{{ addNew.new_text }}</span>
|
||||
<span class="new-badge absolute right-2 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[option.key] || (option.mark_new)">{{ addNew.new_text }}</span>
|
||||
</el-option>
|
||||
</el-option-group>
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
|
||||
<component v-bind:is="add_new_html" @submit="onSubmit" @cancel="onCancel"></component>
|
||||
|
||||
<span slot="infoBlock" class="absolute right-8 top-3 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[selected]">{{ addNew.new_text }}</span>
|
||||
<span slot="infoBlock" class="absolute right-8 top-3 bg-green text-white px-2 py-1 rounded-md text-xs" v-if="new_options[selected] || (sorted_options[sorted_options.length - 1].mark_new && sorted_options[sorted_options.length - 1].key == selected)">{{ addNew.new_text }}</span>
|
||||
|
||||
<select :name="name" :id="name" v-model="selected" class="d-none">
|
||||
<option v-for="option in sortedOptions" :key="option.key" :value="option.key">{{ option.value }}</option>
|
||||
|
||||
74
resources/assets/js/mixins/global.js
vendored
74
resources/assets/js/mixins/global.js
vendored
@@ -63,6 +63,8 @@ if (sentry_dsn && sentry_dsn != '' && sentry_dsn != undefined) {
|
||||
}
|
||||
//sentry integration
|
||||
|
||||
var BreakException = {};
|
||||
|
||||
export default {
|
||||
components: {
|
||||
AkauntingDropzoneFileUpload,
|
||||
@@ -184,6 +186,78 @@ export default {
|
||||
prevEl: ".swiper-button-prev",
|
||||
},
|
||||
});
|
||||
|
||||
//swiper slider for long tabs items
|
||||
for (let [index, item] of document.querySelectorAll('[data-swiper]').entries()) {
|
||||
if (item.clientWidth < item.querySelector('[data-tabs-swiper-wrapper]').clientWidth) {
|
||||
let initial_slide = 0;
|
||||
let hash_split = window.location.hash.split('#')[1];
|
||||
let loop = 0;
|
||||
let slides_view;
|
||||
|
||||
try {
|
||||
item.querySelectorAll('[data-tabs-slide]').forEach((slide, index, arr) => {
|
||||
loop += slide.clientWidth;
|
||||
|
||||
slide.classList.add('swiper-slide');
|
||||
|
||||
if (slide.getAttribute('data-tabs') == hash_split) {
|
||||
initial_slide = index;
|
||||
}
|
||||
|
||||
if (loop > item.clientWidth) {
|
||||
slides_view = index;
|
||||
throw BreakException;
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
if (e !== BreakException) throw e;
|
||||
}
|
||||
|
||||
item.querySelector('[data-tabs-swiper]').classList.add('swiper', 'swiper-links');
|
||||
item.querySelector('[data-tabs-swiper-wrapper]').classList.add('swiper-wrapper');
|
||||
|
||||
let html = `
|
||||
<div class="swiper-tabs-container">
|
||||
${item.querySelector('[data-tabs-swiper]').innerHTML}
|
||||
</div>
|
||||
|
||||
<div class="swiper-button-next bg-body text-white flex items-center justify-center right-0">
|
||||
<span class="material-icons text-purple text-4xl">chevron_right</span>
|
||||
</div>
|
||||
<div class="swiper-button-prev bg-body text-white flex items-center justify-center left-0">
|
||||
<span class="material-icons text-purple text-4xl">chevron_left</span>
|
||||
</div>
|
||||
`;
|
||||
|
||||
item.querySelector('[data-tabs-swiper]').innerHTML = html;
|
||||
slides_view = Number(item.getAttribute('data-swiper')) != 0 ? Number(item.getAttribute('data-swiper')) : slides_view;
|
||||
item.setAttribute('data-swiper', slides_view);
|
||||
|
||||
new Swiper(item.querySelector('.swiper-tabs-container'), {
|
||||
loop: true,
|
||||
slidesPerView: slides_view,
|
||||
pagination: {
|
||||
el: '.swiper-pagination',
|
||||
clickable: true
|
||||
},
|
||||
navigation: {
|
||||
nextEl: '.swiper-button-next',
|
||||
prevEl: '.swiper-button-prev',
|
||||
},
|
||||
initialSlide: initial_slide,
|
||||
});
|
||||
} else {
|
||||
item.removeAttribute('data-swiper');
|
||||
item.querySelector('[data-tabs-swiper]').removeAttribute('data-tabs-swiper');
|
||||
item.querySelector('[data-tabs-swiper-wrapper]').removeAttribute('data-tabs-swiper-wrapper');
|
||||
|
||||
item.querySelectorAll('[data-tabs-slide]').forEach((slide) => {
|
||||
slide.removeAttribute('data-tabs-slide');
|
||||
});
|
||||
}
|
||||
}
|
||||
//swiper slider for long tabs items
|
||||
},
|
||||
|
||||
methods: {
|
||||
|
||||
27
resources/assets/js/views/portal/apps.js
vendored
27
resources/assets/js/views/portal/apps.js
vendored
@@ -66,33 +66,6 @@ const app = new Vue({
|
||||
if (typeof this.form.password !== 'undefined') {
|
||||
this.form.password = '';
|
||||
}
|
||||
|
||||
|
||||
if (document.querySelector('[data-tabs-swiper]').childElementCount > 2) {
|
||||
|
||||
document.querySelectorAll('[data-tabs-slide]').forEach((item) => {
|
||||
item.classList.add('swiper-slide');
|
||||
});
|
||||
|
||||
document.querySelector('[data-tabs-swiper]').classList.add('swiper', 'swiper-links');
|
||||
|
||||
let html = `
|
||||
<div class="swiper-wrapper">
|
||||
${document.querySelector('[data-tabs-swiper]').innerHTML}
|
||||
</div>
|
||||
|
||||
<div class="swiper-button-next top-3 right-0">
|
||||
<span class="material-icons">chevron_right</span>
|
||||
</div>
|
||||
|
||||
<div class="swiper-button-prev top-3 left-0">
|
||||
<span class="material-icons">chevron_left</span>
|
||||
</div>
|
||||
`;
|
||||
|
||||
document.querySelector('[data-tabs-swiper]').innerHTML = html;
|
||||
}
|
||||
|
||||
|
||||
new Swiper(".swiper-links", {
|
||||
loop: false,
|
||||
|
||||
39
resources/assets/sass/app.css
vendored
39
resources/assets/sass/app.css
vendored
@@ -21,6 +21,11 @@
|
||||
.index-actions {
|
||||
@apply ltr:[&:nth-child(2)]:border-l ltr:[&:nth-child(3)]:border-l-0 rtl:[&:nth-child(2)]:border-r rtl:[&:nth-child(3)]:border-r-0 ltr:[&:first-child]:rounded-tl-lg ltr:[&:first-child]:rounded-bl-lg ltr:[&:first-child]:border-r-0 rtl:[&:first-child]:rounded-tr-lg rtl:[&:first-child]:rounded-br-lg rtl:[&:first-child]:border-l-0 ltr:[&:last-child]:rounded-tr-lg ltr:[&:last-child]:rounded-br-lg ltr:[&:last-child]:border-l-0 rtl:[&:last-child]:rounded-tl-lg rtl:[&:last-child]:rounded-bl-lg rtl:[&:last-child]:border-r-0;
|
||||
}
|
||||
|
||||
.suggestion-buttons > a:first-child, .suggestion-buttons > button:first-child {
|
||||
@apply mt-2;
|
||||
}
|
||||
|
||||
[data-dropdown-actions] {
|
||||
transform: unset !important;
|
||||
}
|
||||
@@ -41,6 +46,19 @@
|
||||
.tabs-link:hover::before {
|
||||
@apply opacity-100 visible;
|
||||
}
|
||||
|
||||
.notifications-menu ul li a {
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
|
||||
.avatar-attachment {
|
||||
@apply text-white inline-flex items-center justify-center;
|
||||
background-color: #adb5bd;
|
||||
border-radius: .375rem;
|
||||
font-size: 1rem;
|
||||
height: 45px;
|
||||
width: 45px;
|
||||
}
|
||||
/* index */
|
||||
}
|
||||
|
||||
@@ -93,7 +111,7 @@
|
||||
background-color: #DCE2F9;
|
||||
}
|
||||
|
||||
.menu-list a svg {
|
||||
.menu-list ul svg {
|
||||
width: 22px;
|
||||
height: 24px;
|
||||
fill: none;
|
||||
@@ -572,6 +590,14 @@ html[dir="rtl"] .lines-radius-border thead td:last-child {
|
||||
}
|
||||
/* responsive for role mobile */
|
||||
|
||||
/* full-width for mobile. Some component use inline styling for width */
|
||||
@media only screen and (max-width: 991px) {
|
||||
.full-width-mobile {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
/* full-width for mobile. Some component use inline styling for width */
|
||||
|
||||
[dir="ltr"] .ltr\:-right-57 {
|
||||
right: -14.5rem;
|
||||
}
|
||||
@@ -592,6 +618,17 @@ html[dir="rtl"] .lines-radius-border thead td:last-child {
|
||||
}
|
||||
/* plans page accordion */
|
||||
|
||||
/* hidden scroll-bar */
|
||||
.hide-scroll-bar::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.hide-scroll-bar {
|
||||
-ms-overflow-style: none; /* IE and Edge */
|
||||
scrollbar-width: none; /* Firefox */
|
||||
}
|
||||
/* hidden scroll-bar */
|
||||
|
||||
@media only screen and (max-width: 480px) {
|
||||
.small-table-width {
|
||||
width: 550px;
|
||||
|
||||
Reference in New Issue
Block a user