Faris Ansari | 019bfd39 | 2018-08-26 20:08:40 +0530 | [diff] [blame] | 1 | import Vue from 'vue/dist/vue.js'; |
| 2 | Vue.prototype.__ = window.__; |
| 3 | Vue.prototype.frappe = window.frappe; |
| 4 | |
| 5 | Vue.directive('route', { |
| 6 | bind(el, binding) { |
| 7 | const route = binding.value; |
Faris Ansari | f089dad | 2018-08-26 22:20:16 +0530 | [diff] [blame] | 8 | if (!route) return; |
Faris Ansari | 019bfd39 | 2018-08-26 20:08:40 +0530 | [diff] [blame] | 9 | el.classList.add('cursor-pointer'); |
Faris Ansari | f089dad | 2018-08-26 22:20:16 +0530 | [diff] [blame] | 10 | el.dataset.route = route; |
Faris Ansari | 019bfd39 | 2018-08-26 20:08:40 +0530 | [diff] [blame] | 11 | el.addEventListener('click', () => frappe.set_route(route)); |
| 12 | }, |
| 13 | unbind(el) { |
| 14 | el.classList.remove('cursor-pointer'); |
| 15 | } |
| 16 | }); |
| 17 | |
| 18 | const handleImage = (el, src) => { |
| 19 | let img = new Image(); |
| 20 | // add loading class |
| 21 | el.src = ''; |
| 22 | el.classList.add('img-loading'); |
| 23 | |
| 24 | img.onload = () => { |
| 25 | // image loaded, remove loading class |
| 26 | el.classList.remove('img-loading'); |
| 27 | // set src |
| 28 | el.src = src; |
| 29 | } |
| 30 | img.onerror = () => { |
| 31 | el.classList.remove('img-loading'); |
| 32 | el.classList.add('no-image'); |
| 33 | el.src = null; |
| 34 | } |
| 35 | img.src = src; |
| 36 | } |
| 37 | |
| 38 | Vue.directive('img-src', { |
| 39 | bind(el, binding) { |
| 40 | handleImage(el, binding.value); |
| 41 | }, |
| 42 | update(el, binding) { |
| 43 | if (binding.value === binding.oldValue) return; |
| 44 | handleImage(el, binding.value); |
| 45 | } |
| 46 | }); |