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; |
| 8 | el.classList.add('cursor-pointer'); |
| 9 | el.addEventListener('click', () => frappe.set_route(route)); |
| 10 | }, |
| 11 | unbind(el) { |
| 12 | el.classList.remove('cursor-pointer'); |
| 13 | } |
| 14 | }); |
| 15 | |
| 16 | const handleImage = (el, src) => { |
| 17 | let img = new Image(); |
| 18 | // add loading class |
| 19 | el.src = ''; |
| 20 | el.classList.add('img-loading'); |
| 21 | |
| 22 | img.onload = () => { |
| 23 | // image loaded, remove loading class |
| 24 | el.classList.remove('img-loading'); |
| 25 | // set src |
| 26 | el.src = src; |
| 27 | } |
| 28 | img.onerror = () => { |
| 29 | el.classList.remove('img-loading'); |
| 30 | el.classList.add('no-image'); |
| 31 | el.src = null; |
| 32 | } |
| 33 | img.src = src; |
| 34 | } |
| 35 | |
| 36 | Vue.directive('img-src', { |
| 37 | bind(el, binding) { |
| 38 | handleImage(el, binding.value); |
| 39 | }, |
| 40 | update(el, binding) { |
| 41 | if (binding.value === binding.oldValue) return; |
| 42 | handleImage(el, binding.value); |
| 43 | } |
| 44 | }); |