| 
									
										
										
										
											2016-02-07 18:14:11 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2017-08-07 01:01:49 +08:00
										 |  |  | require("babel-polyfill"); | 
					
						
							| 
									
										
										
										
											2017-08-27 21:31:34 +08:00
										 |  |  | require('./dom-polyfills'); | 
					
						
							| 
									
										
										
										
											2015-10-09 06:49:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-14 19:29:35 +08:00
										 |  |  | // Url retrieval function
 | 
					
						
							|  |  |  | window.baseUrl = function(path) { | 
					
						
							|  |  |  |     let basePath = document.querySelector('meta[name="base-url"]').getAttribute('content'); | 
					
						
							|  |  |  |     if (basePath[basePath.length-1] === '/') basePath = basePath.slice(0, basePath.length-1); | 
					
						
							|  |  |  |     if (path[0] === '/') path = path.slice(1); | 
					
						
							|  |  |  |     return basePath + '/' + path; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  | // Global Event System
 | 
					
						
							|  |  |  | class EventManager { | 
					
						
							|  |  |  |     constructor() { | 
					
						
							|  |  |  |         this.listeners = {}; | 
					
						
							| 
									
										
										
										
											2017-08-27 21:31:34 +08:00
										 |  |  |         this.stack = []; | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     emit(eventName, eventData) { | 
					
						
							| 
									
										
										
										
											2017-08-27 21:31:34 +08:00
										 |  |  |         this.stack.push({name: eventName, data: eventData}); | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  |         if (typeof this.listeners[eventName] === 'undefined') return this; | 
					
						
							|  |  |  |         let eventsToStart = this.listeners[eventName]; | 
					
						
							|  |  |  |         for (let i = 0; i < eventsToStart.length; i++) { | 
					
						
							|  |  |  |             let event = eventsToStart[i]; | 
					
						
							|  |  |  |             event(eventData); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         return this; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     listen(eventName, callback) { | 
					
						
							|  |  |  |         if (typeof this.listeners[eventName] === 'undefined') this.listeners[eventName] = []; | 
					
						
							|  |  |  |         this.listeners[eventName].push(callback); | 
					
						
							|  |  |  |         return this; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-27 21:31:34 +08:00
										 |  |  | window.$events = new EventManager(); | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-15 01:47:33 +08:00
										 |  |  | const Vue = require("vue"); | 
					
						
							|  |  |  | const axios = require("axios"); | 
					
						
							| 
									
										
										
										
											2017-04-10 03:59:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | let axiosInstance = axios.create({ | 
					
						
							|  |  |  |     headers: { | 
					
						
							|  |  |  |         'X-CSRF-TOKEN': document.querySelector('meta[name=token]').getAttribute('content'), | 
					
						
							| 
									
										
										
										
											2017-04-15 01:47:33 +08:00
										 |  |  |         'baseURL': window.baseUrl('') | 
					
						
							| 
									
										
										
										
											2017-04-10 03:59:57 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  | axiosInstance.interceptors.request.use(resp => { | 
					
						
							|  |  |  |     return resp; | 
					
						
							|  |  |  | }, err => { | 
					
						
							|  |  |  |     if (typeof err.response === "undefined" || typeof err.response.data === "undefined") return Promise.reject(err); | 
					
						
							| 
									
										
										
										
											2017-08-27 21:31:34 +08:00
										 |  |  |     if (typeof err.response.data.error !== "undefined") window.$events.emit('error', err.response.data.error); | 
					
						
							|  |  |  |     if (typeof err.response.data.message !== "undefined") window.$events.emit('error', err.response.data.message); | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2017-07-03 02:35:13 +08:00
										 |  |  | window.$http = axiosInstance; | 
					
						
							| 
									
										
										
										
											2017-08-19 20:55:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-10 03:59:57 +08:00
										 |  |  | Vue.prototype.$http = axiosInstance; | 
					
						
							| 
									
										
										
										
											2017-08-27 21:31:34 +08:00
										 |  |  | Vue.prototype.$events = window.$events; | 
					
						
							| 
									
										
										
										
											2017-04-10 03:59:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  | // Translation setup
 | 
					
						
							|  |  |  | // Creates a global function with name 'trans' to be used in the same way as Laravel's translation system
 | 
					
						
							| 
									
										
										
										
											2017-04-15 01:47:33 +08:00
										 |  |  | const Translations = require("./translations"); | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  | let translator = new Translations(window.translations); | 
					
						
							|  |  |  | window.trans = translator.get.bind(translator); | 
					
						
							| 
									
										
										
										
											2017-09-03 23:37:51 +08:00
										 |  |  | window.trans_choice = translator.getPlural.bind(translator); | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-14 19:29:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-07 04:08:03 +08:00
										 |  |  | require("./vues/vues"); | 
					
						
							|  |  |  | require("./components"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-31 02:38:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | //Global jQuery Config & Extensions
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-09 22:56:24 +08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Scroll the view to a specific element. | 
					
						
							|  |  |  |  * @param {HTMLElement} element | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | window.scrollToElement = function(element) { | 
					
						
							|  |  |  |     if (!element) return; | 
					
						
							| 
									
										
										
										
											2017-09-10 20:29:48 +08:00
										 |  |  |     let offset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; | 
					
						
							|  |  |  |     let top = element.getBoundingClientRect().top + offset; | 
					
						
							| 
									
										
										
										
											2017-09-09 22:56:24 +08:00
										 |  |  |     $('html, body').animate({ | 
					
						
							|  |  |  |         scrollTop: top - 60 // Adjust to change final scroll position top margin
 | 
					
						
							|  |  |  |     }, 300); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Scroll and highlight an element. | 
					
						
							|  |  |  |  * @param {HTMLElement} element | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | window.scrollAndHighlight = function(element) { | 
					
						
							|  |  |  |     if (!element) return; | 
					
						
							|  |  |  |     window.scrollToElement(element); | 
					
						
							|  |  |  |     let color = document.getElementById('custom-styles').getAttribute('data-color-light'); | 
					
						
							|  |  |  |     let initColor = window.getComputedStyle(element).getPropertyValue('background-color'); | 
					
						
							|  |  |  |     element.style.backgroundColor = color; | 
					
						
							|  |  |  |     setTimeout(() => { | 
					
						
							|  |  |  |         element.classList.add('selectFade'); | 
					
						
							|  |  |  |         element.style.backgroundColor = initColor; | 
					
						
							|  |  |  |     }, 10); | 
					
						
							|  |  |  |     setTimeout(() => { | 
					
						
							|  |  |  |         element.classList.remove('selectFade'); | 
					
						
							|  |  |  |         element.style.backgroundColor = ''; | 
					
						
							|  |  |  |     }, 3000); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-31 02:38:18 +08:00
										 |  |  | // Smooth scrolling
 | 
					
						
							| 
									
										
										
										
											2015-12-31 03:57:17 +08:00
										 |  |  | jQuery.fn.smoothScrollTo = function () { | 
					
						
							|  |  |  |     if (this.length === 0) return; | 
					
						
							| 
									
										
										
										
											2017-09-09 22:56:24 +08:00
										 |  |  |     window.scrollToElement(this[0]); | 
					
						
							| 
									
										
										
										
											2015-12-31 02:38:18 +08:00
										 |  |  |     return this; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Making contains text expression not worry about casing
 | 
					
						
							| 
									
										
										
										
											2016-07-27 01:03:10 +08:00
										 |  |  | jQuery.expr[":"].contains = $.expr.createPseudo(function (arg) { | 
					
						
							| 
									
										
										
										
											2015-12-31 03:57:17 +08:00
										 |  |  |     return function (elem) { | 
					
						
							| 
									
										
										
										
											2015-12-31 02:38:18 +08:00
										 |  |  |         return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2015-12-30 00:39:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  | // Detect IE for css
 | 
					
						
							|  |  |  | if(navigator.userAgent.indexOf('MSIE')!==-1 | 
					
						
							|  |  |  |     || navigator.appVersion.indexOf('Trident/') > 0 | 
					
						
							|  |  |  |     || navigator.userAgent.indexOf('Safari') !== -1){ | 
					
						
							| 
									
										
										
										
											2017-08-07 04:08:03 +08:00
										 |  |  |     document.body.classList.add('flexbox-support'); | 
					
						
							| 
									
										
										
										
											2016-12-31 22:27:40 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-31 04:48:57 +08:00
										 |  |  | // Page specific items
 | 
					
						
							| 
									
										
										
										
											2017-04-15 01:47:33 +08:00
										 |  |  | require("./pages/page-show"); |