import "@babel/polyfill"; import "@fortawesome/fontawesome-free/css/all.css"; import "typeface-roboto/index.css"; import Vue from "vue"; import "./plugins/vuetify"; import App from "./App.vue"; import router from "./router"; import store from "./store"; import "./registerServiceWorker"; import errorHandler from "./api/errorhandler"; import NProgress from "nprogress"; import "nprogress/nprogress.css"; import dayjs from "dayjs"; import UTC from "dayjs/plugin/utc"; // load on demand dayjs.extend(UTC); // use plugin import lodash from "./libs/lodash.min.js"; import VuetifyDialog from "vuetify-dialog"; //my libs import gzeventbus from "./api/eventbus"; import gzmenu from "./api/gzmenu"; import gzdialog from "./api/gzdialog"; import gzutil from "./api/gzutil"; import locale from "./api/locale"; import gzapi from "./api/gzapi"; import gzform from "./api/gzform"; import roles from "./api/authorizationroles"; import gztype from "./api/ayatype"; import "@/assets/css/main.css"; import gzdateandtimepicker from "./components/gzdateandtimepicker.vue"; ///////////////////////////////////////////////////////////////// // LIBS AND GLOBAL ITEMS // (https://medium.com/js-dojo/use-any-javascript-library-with-vue-js-3f7e2a4974a8) // Object.defineProperty(Vue.prototype, "$gztype", { value: gztype }); Object.defineProperty(Vue.prototype, "$gzrole", { value: roles }); Object.defineProperty(Vue.prototype, "$gzevent", { value: gzeventbus }); Object.defineProperty(Vue.prototype, "$gzmenu", { value: gzmenu }); Object.defineProperty(Vue.prototype, "$gzdialog", { value: gzdialog }); Object.defineProperty(Vue.prototype, "$gzutil", { value: gzutil }); Object.defineProperty(Vue.prototype, "$dayjs", { value: dayjs }); Object.defineProperty(Vue.prototype, "$_", { value: lodash }); Object.defineProperty(Vue.prototype, "$gzlocale", { value: locale }); Object.defineProperty(Vue.prototype, "$gzapi", { value: gzapi }); Object.defineProperty(Vue.prototype, "$gzform", { value: gzform }); Object.defineProperty(Vue.prototype, "$gzHandleFormError", { value: errorHandler.handleFormError }); Object.defineProperty(Vue.prototype, "$gzdevmode", { value: errorHandler.devMode }); ///////////////////////////////////////////////////////////////// // ERROR HANDLING // //************************************************************** //************************************************************** //************************************************************** //DEVELOPMENT MODE HANDLER //THIS SHOULD BE FALSE IN RELEASE errorHandler.developmentModeShowErrorsImmediately(true); //************************************************************** //************************************************************** //************************************************************** Vue.config.errorHandler = errorHandler.handleVueError; window.onerror = errorHandler.handleGeneralError; //warnings, only occur by default in debug mode not production Vue.config.warnHandler = errorHandler.handleVueWarning; ///////////////////////////////////////////////////////////////// // AJAX LOADER INDICATOR // // Store a copy of the fetch function var _oldFetch = fetch; // Create our new version of the fetch function window.fetch = function() { // Create hooks var fetchStart = new Event("fetchStart", { view: document, bubbles: true, cancelable: false }); var fetchEnd = new Event("fetchEnd", { view: document, bubbles: true, cancelable: false }); // Pass the supplied arguments to the real fetch function var fetchCall = _oldFetch.apply(this, arguments); // Trigger the fetchStart event document.dispatchEvent(fetchStart); fetchCall .then(function() { // Trigger the fetchEnd event document.dispatchEvent(fetchEnd); }) .catch(function() { // Trigger the fetchEnd event document.dispatchEvent(fetchEnd); }); return fetchCall; }; document.addEventListener("fetchStart", function() { NProgress.start(); }); document.addEventListener("fetchEnd", function() { NProgress.done(); }); ///////////////////////////////////////////////////////////////// // FILTERS // Vue.filter("capitalize", function vueFilterCapitalize(value) { if (!value) return ""; value = value.toString(); return value.charAt(0).toUpperCase() + value.slice(1); }); Vue.filter("shortdate", function vueFilterShortDate(value) { if (!value) return ""; var dj = dayjs(value); return dj.format("YYYY-MM-DD hh:mm:ss A"); }); Vue.filter("currency", function vueFilterCurrency(value) { if (!value) return ""; return "$" + value; }); Vue.filter("boolastext", function vueFilterBoolAsText(value) { if (!value) return ""; return value ? "Yes" : "Nope"; }); ///////////////////////////////////////////////////////////// //GZ COMPONENTS // Vue.component("gz-date-time-picker", gzdateandtimepicker); //////////////////////////////////////////////////////// //3rd party ui components // Vue.use(VuetifyDialog); ///////////////////////////////////////////////////////////// //DIRECTIVES // //Auto focus on forms Vue.directive("focus", { // When the bound element is inserted into the DOM... inserted: function(el) { // Focus the element el.focus(); } }); ///////////////////////////////////////////////////////////////// // INSTANTIATE // new Vue({ router, store, render: h => h(App) }).$mount("#app");