blob: 00b29b010b8e60e7ee9f0b9386a2a35af4f4ea5e [file] [log] [blame]
Faris Ansari019bfd392018-08-26 20:08:40 +05301import Vue from 'vue/dist/vue.js';
2Vue.prototype.__ = window.__;
3Vue.prototype.frappe = window.frappe;
4
5Vue.directive('route', {
6 bind(el, binding) {
7 const route = binding.value;
Faris Ansarif089dad2018-08-26 22:20:16 +05308 if (!route) return;
Faris Ansari019bfd392018-08-26 20:08:40 +05309 el.classList.add('cursor-pointer');
Faris Ansarif089dad2018-08-26 22:20:16 +053010 el.dataset.route = route;
Faris Ansari019bfd392018-08-26 20:08:40 +053011 el.addEventListener('click', () => frappe.set_route(route));
12 },
13 unbind(el) {
14 el.classList.remove('cursor-pointer');
15 }
16});
17
18const 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
38Vue.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});