Merge branch 'sentry' of github.com:brkcvn/akaunting into sentry

This commit is contained in:
Cüneyt Şentürk
2022-11-21 16:26:22 +03:00
39 changed files with 804 additions and 360 deletions

View File

@ -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>

View File

@ -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);

View File

@ -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>

View File

@ -53,6 +53,8 @@ if (typeof exception_tracker != 'undefined') {
}
}
var BreakException = {};
export default {
components: {
AkauntingDropzoneFileUpload,
@ -174,6 +176,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: {

View File

@ -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,