-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ref #4: install NiceAdmin & move existing data to it
- Loading branch information
Showing
9 changed files
with
1,902 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,342 @@ | ||
// const bootstrap = require('bootstrap'); // bootstrap 5 needed for tooltips activation | ||
|
||
/** | ||
* Template Name: NiceAdmin | ||
* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ | ||
* Updated: Mar 17 2024 with Bootstrap v5.3.3 | ||
* Author: BootstrapMade.com | ||
* License: https://bootstrapmade.com/license/ | ||
*/ | ||
|
||
(function () { | ||
"use strict"; | ||
|
||
/** | ||
* Easy selector helper function | ||
*/ | ||
const select = (el, all = false) => { | ||
el = el.trim() | ||
if (all) { | ||
return [...document.querySelectorAll(el)] | ||
} else { | ||
return document.querySelector(el) | ||
} | ||
} | ||
|
||
/** | ||
* Easy event listener function | ||
*/ | ||
const on = (type, el, listener, all = false) => { | ||
if (all) { | ||
select(el, all).forEach(e => e.addEventListener(type, listener)) | ||
} else { | ||
select(el, all).addEventListener(type, listener) | ||
} | ||
} | ||
|
||
/** | ||
* Easy on scroll event listener | ||
*/ | ||
const onscroll = (el, listener) => { | ||
el.addEventListener('scroll', listener) | ||
} | ||
|
||
/** | ||
* Sidebar toggle | ||
*/ | ||
if (select('.toggle-sidebar-btn')) { | ||
on('click', '.toggle-sidebar-btn', function (e) { | ||
select('body').classList.toggle('toggle-sidebar') | ||
}) | ||
} | ||
|
||
/** | ||
* Search bar toggle | ||
*/ | ||
if (select('.search-bar-toggle')) { | ||
on('click', '.search-bar-toggle', function (e) { | ||
select('.search-bar').classList.toggle('search-bar-show') | ||
}) | ||
} | ||
|
||
/** | ||
* Navbar links active state on scroll | ||
*/ | ||
let navbarLinks = select('#navbar .scrollto', true) | ||
const navbarLinksActive = () => { | ||
let position = window.scrollY + 200 | ||
navbarLinks.forEach(navbarLink => { | ||
if (!navbarLink.hash) return | ||
let section = select(navbarLink.hash) | ||
if (!section) return | ||
if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { | ||
navbarLink.classList.add('active') | ||
} else { | ||
navbarLink.classList.remove('active') | ||
} | ||
}) | ||
} | ||
window.addEventListener('load', navbarLinksActive) | ||
onscroll(document, navbarLinksActive) | ||
|
||
/** | ||
* Toggle .header-scrolled class to #header when page is scrolled | ||
*/ | ||
let selectHeader = select('#header') | ||
if (selectHeader) { | ||
const headerScrolled = () => { | ||
if (window.scrollY > 100) { | ||
selectHeader.classList.add('header-scrolled') | ||
} else { | ||
selectHeader.classList.remove('header-scrolled') | ||
} | ||
} | ||
window.addEventListener('load', headerScrolled) | ||
onscroll(document, headerScrolled) | ||
} | ||
|
||
/** | ||
* Back to top button | ||
*/ | ||
let backToTop = select('.back-to-top') | ||
if (backToTop) { | ||
const toggleBackToTop = () => { | ||
if (window.scrollY > 100) { | ||
backToTop.classList.add('active') | ||
} else { | ||
backToTop.classList.remove('active') | ||
} | ||
} | ||
window.addEventListener('load', toggleBackToTop) | ||
onscroll(document, toggleBackToTop) | ||
} | ||
|
||
/** | ||
* Initiate tooltips - already enabled in assets/app.js | ||
*/ | ||
// let tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) | ||
// let tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { | ||
// return new bootstrap.Tooltip(tooltipTriggerEl) | ||
// }) | ||
|
||
/** | ||
* Initiate quill editors (WYSIWYG text editor) | ||
* Uncomment, install the library and require it to enable | ||
*/ | ||
// if (select('.quill-editor-default')) { | ||
// new Quill('.quill-editor-default', { | ||
// theme: 'snow' | ||
// }); | ||
// } | ||
// | ||
// if (select('.quill-editor-bubble')) { | ||
// new Quill('.quill-editor-bubble', { | ||
// theme: 'bubble' | ||
// }); | ||
// } | ||
// | ||
// if (select('.quill-editor-full')) { | ||
// new Quill(".quill-editor-full", { | ||
// modules: { | ||
// toolbar: [ | ||
// [{ | ||
// font: [] | ||
// }, { | ||
// size: [] | ||
// }], | ||
// ["bold", "italic", "underline", "strike"], | ||
// [{ | ||
// color: [] | ||
// }, | ||
// { | ||
// background: [] | ||
// } | ||
// ], | ||
// [{ | ||
// script: "super" | ||
// }, | ||
// { | ||
// script: "sub" | ||
// } | ||
// ], | ||
// [{ | ||
// list: "ordered" | ||
// }, | ||
// { | ||
// list: "bullet" | ||
// }, | ||
// { | ||
// indent: "-1" | ||
// }, | ||
// { | ||
// indent: "+1" | ||
// } | ||
// ], | ||
// ["direction", { | ||
// align: [] | ||
// }], | ||
// ["link", "image", "video"], | ||
// ["clean"] | ||
// ] | ||
// }, | ||
// theme: "snow" | ||
// }); | ||
// } | ||
|
||
/** | ||
* Initiate TinyMCE Editor (WYSIWYG text editor) | ||
* Uncomment, install the library and require it to enable | ||
*/ | ||
// const useDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches; | ||
// const isSmallScreen = window.matchMedia('(max-width: 1023.5px)').matches; | ||
// | ||
// tinymce.init({ | ||
// selector: 'textarea.tinymce-editor', | ||
// plugins: 'preview importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons', | ||
// editimage_cors_hosts: ['picsum.photos'], | ||
// menubar: 'file edit view insert format tools table help', | ||
// toolbar: 'undo redo | bold italic underline strikethrough | fontfamily fontsize blocks | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist | forecolor backcolor removeformat | pagebreak | charmap emoticons | fullscreen preview save print | insertfile image media template link anchor codesample | ltr rtl', | ||
// toolbar_sticky: true, | ||
// toolbar_sticky_offset: isSmallScreen ? 102 : 108, | ||
// autosave_ask_before_unload: true, | ||
// autosave_interval: '30s', | ||
// autosave_prefix: '{path}{query}-{id}-', | ||
// autosave_restore_when_empty: false, | ||
// autosave_retention: '2m', | ||
// image_advtab: true, | ||
// link_list: [{ | ||
// title: 'My page 1', | ||
// value: 'https://www.tiny.cloud' | ||
// }, | ||
// { | ||
// title: 'My page 2', | ||
// value: 'http://www.moxiecode.com' | ||
// } | ||
// ], | ||
// image_list: [{ | ||
// title: 'My page 1', | ||
// value: 'https://www.tiny.cloud' | ||
// }, | ||
// { | ||
// title: 'My page 2', | ||
// value: 'http://www.moxiecode.com' | ||
// } | ||
// ], | ||
// image_class_list: [{ | ||
// title: 'None', | ||
// value: '' | ||
// }, | ||
// { | ||
// title: 'Some class', | ||
// value: 'class-name' | ||
// } | ||
// ], | ||
// importcss_append: true, | ||
// file_picker_callback: (callback, value, meta) => { | ||
// /* Provide file and text for the link dialog */ | ||
// if (meta.filetype === 'file') { | ||
// callback('https://www.google.com/logos/google.jpg', { | ||
// text: 'My text' | ||
// }); | ||
// } | ||
// | ||
// /* Provide image and alt text for the image dialog */ | ||
// if (meta.filetype === 'image') { | ||
// callback('https://www.google.com/logos/google.jpg', { | ||
// alt: 'My alt text' | ||
// }); | ||
// } | ||
// | ||
// /* Provide alternative source and posted for the media dialog */ | ||
// if (meta.filetype === 'media') { | ||
// callback('movie.mp4', { | ||
// source2: 'alt.ogg', | ||
// poster: 'https://www.google.com/logos/google.jpg' | ||
// }); | ||
// } | ||
// }, | ||
// templates: [{ | ||
// title: 'New Table', | ||
// description: 'creates a new table', | ||
// content: '<div class="mceTmpl"><table width="98%%" border="0" cellspacing="0" cellpadding="0"><tr><th scope="col"> </th><th scope="col"> </th></tr><tr><td> </td><td> </td></tr></table></div>' | ||
// }, | ||
// { | ||
// title: 'Starting my story', | ||
// description: 'A cure for writers block', | ||
// content: 'Once upon a time...' | ||
// }, | ||
// { | ||
// title: 'New list with dates', | ||
// description: 'New List with dates', | ||
// content: '<div class="mceTmpl"><span class="cdate">cdate</span><br><span class="mdate">mdate</span><h2>My List</h2><ul><li></li><li></li></ul></div>' | ||
// } | ||
// ], | ||
// template_cdate_format: '[Date Created (CDATE): %m/%d/%Y : %H:%M:%S]', | ||
// template_mdate_format: '[Date Modified (MDATE): %m/%d/%Y : %H:%M:%S]', | ||
// height: 600, | ||
// image_caption: true, | ||
// quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable', | ||
// noneditable_class: 'mceNonEditable', | ||
// toolbar_mode: 'sliding', | ||
// contextmenu: 'link image table', | ||
// skin: useDarkMode ? 'oxide-dark' : 'oxide', | ||
// content_css: useDarkMode ? 'dark' : 'default', | ||
// content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }' | ||
// }); | ||
|
||
/** | ||
* Initiate Bootstrap validation check | ||
*/ | ||
const needsValidation = document.querySelectorAll('.needs-validation'); | ||
Array.prototype.slice.call(needsValidation) | ||
.forEach(function (form) { | ||
form.addEventListener('submit', function (event) { | ||
if (!form.checkValidity()) { | ||
event.preventDefault() | ||
event.stopPropagation() | ||
} | ||
|
||
form.classList.add('was-validated') | ||
}, false) | ||
}); | ||
|
||
/** | ||
* Initiate SimpleDatatables | ||
* Uncomment, install the library and require it to enable | ||
*/ | ||
// const datatables = select('.datatable', true) | ||
// datatables.forEach(datatable => { | ||
// new simpleDatatables.DataTable(datatable, { | ||
// perPageSelect: [5, 10, 15, ["All", -1]], | ||
// columns: [{ | ||
// select: 2, | ||
// sortSequence: ["desc", "asc"] | ||
// }, | ||
// { | ||
// select: 3, | ||
// sortSequence: ["desc"] | ||
// }, | ||
// { | ||
// select: 4, | ||
// cellClass: "green", | ||
// headerClass: "red" | ||
// } | ||
// ] | ||
// }); | ||
// }) | ||
|
||
/** | ||
* Autoresize echart charts | ||
* Uncomment, install the library and require it to enable | ||
*/ | ||
// const mainContainer = select('#main'); | ||
// if (mainContainer) { | ||
// setTimeout(() => { | ||
// new ResizeObserver(function () { | ||
// select('.echart', true).forEach(getEchart => { | ||
// echarts.getInstanceByDom(getEchart).resize(); | ||
// }) | ||
// }).observe(mainContainer); | ||
// }, 200); | ||
// } | ||
})(); |
Oops, something went wrong.