/** * 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' });