diff --git a/frappe/public/js/frappe/views/image/image_view.js b/frappe/public/js/frappe/views/image/image_view.js
index 2df9b81a31..4521383848 100644
--- a/frappe/public/js/frappe/views/image/image_view.js
+++ b/frappe/public/js/frappe/views/image/image_view.js
@@ -40,14 +40,16 @@ frappe.views.ImageView = class ImageView extends frappe.views.ListView {
}
render() {
- this.get_attached_images().then(() => {
- this.render_image_view();
+ this.load_lib.then(() => {
+ this.get_attached_images().then(() => {
+ this.render_image_view();
- if (!this.gallery) {
- this.setup_gallery();
- } else {
- this.gallery.prepare_pswp_items(this.items, this.images_map);
- }
+ if (!this.gallery) {
+ this.setup_gallery();
+ } else {
+ this.gallery.prepare_pswp_items(this.items, this.images_map);
+ }
+ });
});
}
@@ -155,24 +157,6 @@ frappe.views.ImageView = class ImageView extends frappe.views.ListView {
});
}
- get_header_html() {
- // return this.get_header_html_skeleton(`
- //
- // `);
- }
-
setup_gallery() {
var me = this;
this.gallery = new frappe.views.GalleryView({
@@ -190,17 +174,20 @@ frappe.views.ImageView = class ImageView extends frappe.views.ListView {
return false;
});
}
+
+ get required_libs() {
+ return [
+ "assets/frappe/node_modules/photoswipe/src/photoswipe.css",
+ "photoswipe.bundle.js",
+ ];
+ }
};
frappe.views.GalleryView = class GalleryView {
constructor(opts) {
$.extend(this, opts);
var me = this;
-
- this.lib_ready = this.load_lib();
- this.lib_ready.then(function () {
- me.prepare();
- });
+ me.prepare();
}
prepare() {
// keep only one pswp dom element
@@ -238,11 +225,9 @@ frappe.views.GalleryView = class GalleryView {
return {
src: i._image_url,
- msrc: i._image_url,
name: i.name,
- w: width,
- h: height,
- el: el,
+ width: width,
+ height: height,
};
});
this.pswp_items = items;
@@ -250,116 +235,21 @@ frappe.views.GalleryView = class GalleryView {
});
}
show(docname) {
- this.lib_ready.then(() => this.prepare_pswp_items()).then(() => this._show(docname));
+ this.prepare_pswp_items().then(() => this._show(docname));
}
_show(docname) {
- const me = this;
const items = this.pswp_items;
const item_index = items.findIndex((item) => item.name === docname);
var options = {
index: item_index,
- getThumbBoundsFn: function (index) {
- const query = 'img[data-name="' + items[index]._name + '"]';
- let thumbnail = me.wrapper.find(query).get(0);
-
- if (!thumbnail) {
- return;
- }
-
- var pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
- rect = thumbnail.getBoundingClientRect();
-
- return {
- x: rect.left,
- y: rect.top + pageYScroll,
- w: rect.width,
- };
- },
history: false,
shareEl: false,
- showHideOpacity: true,
+ dataSource: items,
};
// init
- this.pswp = new PhotoSwipe(this.pswp_root.get(0), PhotoSwipeUI_Default, items, options);
- this.browse_images();
+ this.pswp = new frappe.PhotoSwipe(options);
this.pswp.init();
}
- browse_images() {
- const $more_items = this.pswp_root.find(".pswp__more-items");
- const images_map = this.images_map;
- let last_hide_timeout = null;
-
- this.pswp.listen("afterChange", function () {
- const images = images_map[this.currItem.name];
- if (!images || images.length === 1) {
- $more_items.html("");
- return;
- }
-
- hide_more_items_after_2s();
- const html = images.map(img_html).join("");
- $more_items.html(html);
- });
-
- this.pswp.listen("beforeChange", hide_more_items);
- this.pswp.listen("initialZoomOut", hide_more_items);
- this.pswp.listen("destroy", () => {
- $(document).off("mousemove", hide_more_items_after_2s);
- });
-
- // Replace current image on click
- $more_items.on("click", ".pswp__more-item", (e) => {
- const img_el = e.target;
- const index = this.pswp.items.findIndex((i) => i.name === this.pswp.currItem.name);
-
- this.pswp.goTo(index);
- this.pswp.items.splice(index, 1, {
- src: img_el.src,
- w: img_el.naturalWidth,
- h: img_el.naturalHeight,
- name: this.pswp.currItem.name,
- });
- this.pswp.invalidateCurrItems();
- this.pswp.updateSize(true);
- });
-
- // hide more-images 2s after mousemove
- $(document).on("mousemove", hide_more_items_after_2s);
-
- function hide_more_items_after_2s() {
- clearTimeout(last_hide_timeout);
- show_more_items();
- last_hide_timeout = setTimeout(hide_more_items, 2000);
- }
-
- function show_more_items() {
- $more_items.show();
- }
-
- function hide_more_items() {
- $more_items.hide();
- }
-
- function img_html(src) {
- return `
-

-
`;
- }
- }
- load_lib() {
- return new Promise((resolve) => {
- var asset_dir = "assets/frappe/js/lib/photoswipe/";
- frappe.require(
- [
- asset_dir + "photoswipe.css",
- asset_dir + "default-skin.css",
- asset_dir + "photoswipe.js",
- asset_dir + "photoswipe-ui-default.js",
- ],
- resolve
- );
- });
- }
};