datatable.directory codebase
https://datatable.directory/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.2 KiB
111 lines
3.2 KiB
/**
|
|
* First we will load all of this project's JavaScript dependencies which
|
|
* includes Vue and other libraries. It is a great starting point when
|
|
* building robust, powerful web applications using Vue and Laravel.
|
|
*/
|
|
|
|
require('./bootstrap')
|
|
|
|
let url_slug = require('./url-slug')
|
|
|
|
$(function () {
|
|
// Remove all noscript from forms etc
|
|
$('noscript').remove();
|
|
|
|
$('[data-toggle="tooltip"]').tooltip({
|
|
container: 'body'
|
|
})
|
|
|
|
// auto hide flash alerts
|
|
let $notifs = $('div.alert').not('.alert-important').addClass('fadeout')
|
|
setTimeout(() => {
|
|
$notifs.addClass('fade')
|
|
setTimeout(() => {
|
|
$notifs.addClass('hidden')
|
|
}, 500)
|
|
}, 2500)
|
|
|
|
// toggle collapse when clicked outside link, without drag
|
|
$('.block-collapse')
|
|
.on('mousedown', (e) => {
|
|
let $bc = $(e.target).closest('.block-collapse')
|
|
$bc.data('mx', e.screenX);
|
|
$bc.data('my', e.screenY);
|
|
})
|
|
.on('mouseup', (e) => {
|
|
if (e.target.nodeName === 'A') return
|
|
let $bc = $(e.target).closest('.block-collapse')
|
|
if (typeof $bc.data('mx') !== 'undefined') {
|
|
let x0 = +$bc.data('mx');
|
|
let y0 = +$bc.data('my');
|
|
if (Math.abs(x0 - e.screenX) > 5 || Math.abs(y0 - e.screenY) > 5) {
|
|
// drag
|
|
} else {
|
|
$(e.target).closest('.block-collapse').toggleClass('reveal')
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
// auto-alias
|
|
$(document).on('input keypress paste keyup', 'input[data-autoalias]', function () {
|
|
const $this = $(this)
|
|
const target_name = $this.data('autoalias')
|
|
const delimiter = $this.data('aa-delimiter') || '_'
|
|
|
|
const new_alias = url_slug($this.val(), {'delimiter': delimiter})
|
|
|
|
const $target = $(`input[name="${target_name}"]`)
|
|
const lastset = $target.data('aa-last-set-val')
|
|
|
|
// 1. pick up, or 2. continue
|
|
if (new_alias === $target.val() || lastset === $target.val()) {
|
|
$target.val(new_alias)
|
|
$target.data('aa-last-set-val', new_alias)
|
|
}
|
|
})
|
|
|
|
$(function () {
|
|
// theme switcher without reloading
|
|
|
|
let themeStyle = $('#theme-style');
|
|
const lightURL = themeStyle.data('light-url');
|
|
const darkURL = themeStyle.data('dark-url');
|
|
const navbar = $('.page-navbar');
|
|
const logo = $('#navbar-logo');
|
|
|
|
window.toggleDarkMode = function () {
|
|
let newStyle = document.createElement('link');
|
|
newStyle.rel = 'stylesheet';
|
|
if (themeStyle.attr('href') === lightURL) {
|
|
newStyle.href = darkURL;
|
|
navbar.removeClass('navbar-light');
|
|
navbar.addClass('navbar-dark');
|
|
logo.attr('src', logo.data('src-dark'));
|
|
|
|
document.cookie = "dark_mode=1";
|
|
} else {
|
|
newStyle.href = lightURL;
|
|
navbar.removeClass('navbar-dark');
|
|
navbar.addClass('navbar-light');
|
|
logo.attr('src', logo.data('src-light'));
|
|
|
|
document.cookie = "dark_mode=0;expires=" + new Date().toUTCString();
|
|
}
|
|
|
|
// remove old css after new css has loaded to prevent FOUC
|
|
let oldThemeStyle = themeStyle;
|
|
themeStyle = $(newStyle);
|
|
themeStyle.on('load', () => oldThemeStyle.remove());
|
|
$(document.head).append(themeStyle);
|
|
};
|
|
});
|
|
|
|
window.Vue = require('vue');
|
|
|
|
Vue.component('column-editor', require('./components/ColumnEditor.vue'));
|
|
Vue.component('v-icon', require('./components/Icon.vue'));
|
|
|
|
const app = new Vue({
|
|
el: '#app'
|
|
});
|
|
|