mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-06-22 00:49:10 +02:00
Add: More menu on book card #173, Fix: Download worker ffmpeg logs
This commit is contained in:
parent
7141f70aa5
commit
54570a3b27
10 changed files with 295 additions and 54 deletions
|
@ -1,6 +1,9 @@
|
|||
import Vue from 'vue'
|
||||
import vClickOutside from 'v-click-outside'
|
||||
import { formatDistance, format } from 'date-fns'
|
||||
|
||||
Vue.directive('click-outside', vClickOutside.directive)
|
||||
|
||||
Vue.prototype.$eventBus = new Vue()
|
||||
|
||||
Vue.prototype.$isDev = process.env.NODE_ENV !== 'production'
|
||||
|
@ -73,42 +76,41 @@ Vue.prototype.$calculateTextSize = (text, styles = {}) => {
|
|||
}
|
||||
}
|
||||
|
||||
function isClickedOutsideEl(clickEvent, elToCheckOutside, ignoreSelectors = [], ignoreElems = []) {
|
||||
const isDOMElement = (element) => {
|
||||
return element instanceof Element || element instanceof HTMLDocument
|
||||
}
|
||||
// function isClickedOutsideEl(clickEvent, elToCheckOutside, ignoreSelectors = [], ignoreElems = []) {
|
||||
// const isDOMElement = (element) => {
|
||||
// return element instanceof Element || element instanceof HTMLDocument
|
||||
// }
|
||||
|
||||
const clickedEl = clickEvent.srcElement
|
||||
const didClickOnIgnoredEl = ignoreElems.filter((el) => el).some((element) => element.contains(clickedEl) || element.isEqualNode(clickedEl))
|
||||
const didClickOnIgnoredSelector = ignoreSelectors.length ? ignoreSelectors.map((selector) => clickedEl.closest(selector)).reduce((curr, accumulator) => curr && accumulator, true) : false
|
||||
// const clickedEl = clickEvent.srcElement
|
||||
// const didClickOnIgnoredEl = ignoreElems.filter((el) => el).some((element) => element.contains(clickedEl) || element.isEqualNode(clickedEl))
|
||||
// const didClickOnIgnoredSelector = ignoreSelectors.length ? ignoreSelectors.map((selector) => clickedEl.closest(selector)).reduce((curr, accumulator) => curr && accumulator, true) : false
|
||||
|
||||
if (isDOMElement(elToCheckOutside) && !elToCheckOutside.contains(clickedEl) && !didClickOnIgnoredEl && !didClickOnIgnoredSelector) {
|
||||
return true
|
||||
}
|
||||
// if (isDOMElement(elToCheckOutside) && !elToCheckOutside.contains(clickedEl) && !didClickOnIgnoredEl && !didClickOnIgnoredSelector) {
|
||||
// return true
|
||||
// }
|
||||
// return false
|
||||
// }
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Vue.directive('click-outside', {
|
||||
bind: function (el, binding, vnode) {
|
||||
let vm = vnode.context;
|
||||
let callback = binding.value;
|
||||
if (typeof callback !== 'function') {
|
||||
console.error('Invalid callback', binding)
|
||||
return
|
||||
}
|
||||
el['__click_outside__'] = (ev) => {
|
||||
if (isClickedOutsideEl(ev, el)) {
|
||||
callback.call(vm, ev)
|
||||
}
|
||||
}
|
||||
document.addEventListener('click', el['__click_outside__'], false)
|
||||
},
|
||||
unbind: function (el, binding, vnode) {
|
||||
document.removeEventListener('click', el['__click_outside__'], false)
|
||||
delete el['__click_outside__']
|
||||
}
|
||||
})
|
||||
// Vue.directive('click-outside', {
|
||||
// bind: function (el, binding, vnode) {
|
||||
// let vm = vnode.context;
|
||||
// let callback = binding.value;
|
||||
// if (typeof callback !== 'function') {
|
||||
// console.error('Invalid callback', binding)
|
||||
// return
|
||||
// }
|
||||
// el['__click_outside__'] = (ev) => {
|
||||
// if (isClickedOutsideEl(ev, el)) {
|
||||
// callback.call(vm, ev)
|
||||
// }
|
||||
// }
|
||||
// document.addEventListener('click', el['__click_outside__'], false)
|
||||
// },
|
||||
// unbind: function (el, binding, vnode) {
|
||||
// document.removeEventListener('click', el['__click_outside__'], false)
|
||||
// delete el['__click_outside__']
|
||||
// }
|
||||
// })
|
||||
|
||||
Vue.prototype.$sanitizeFilename = (input, replacement = '') => {
|
||||
if (typeof input !== 'string') {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue