Welcome to mirror list, hosted at ThFree Co, Russian Federation.

galleryfileaction.js « js - github.com/nextcloud/gallery.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1b0d6762b91137379dc9f9346a0360dc97fd08d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/* global OC ,OCA, $, oc_requesttoken, SlideShow */
var galleryFileAction = {
	config: null,
	mediaTypes: {},

	/**
	 * Builds a URL pointing to one of the app's controllers
	 *
	 * @param {string} endPoint
	 * @param {undefined|string} path
	 * @param params
	 *
	 * @returns {string}
	 */
	buildGalleryUrl: function (endPoint, path, params) {
		var extension = '';
		var tokenElement = $('#sharingToken');
		var token = (tokenElement.val()) ? tokenElement.val() : false;
		if (token) {
			params.token = token;
			extension = '.public';
		}
		var query = OC.buildQueryString(params);
		return OC.generateUrl('apps/galleryplus/' + endPoint + extension + path, null) + '?' +
			query;
	},

	/**
	 * Registers a file action for each media type
	 *
	 * @param mediaTypes
	 */
	register: function (mediaTypes) {
		//console.log("enabledPreviewProviders: ", mediaTypes);
		if (mediaTypes) {
			galleryFileAction.mediaTypes = mediaTypes;
		}

		// We only want to create slideshows for supported media types
		for (var i = 0, keys = Object.keys(galleryFileAction.mediaTypes); i < keys.length; i++) {
			// Each click handler gets the same function and images array and
			// is responsible to load the slideshow
			OCA.Files.fileActions.register(keys[i], 'View', OC.PERMISSION_READ, '',
				galleryFileAction.onView);
			OCA.Files.fileActions.setDefault(keys[i], 'View');
		}
	},

	/**
	 * Builds an array containing all the images we can show in the slideshow
	 *
	 * @param {string} filename
	 * @param context
	 */
	onView: function (filename, context) {
		var imageUrl, downloadUrl;
		var fileList = context.fileList;
		var files = fileList.files;
		var start = 0;
		var images = [];
		var dir = context.dir + '/';
		var width = Math.floor($(window).width() * window.devicePixelRatio);
		var height = Math.floor($(window).height() * window.devicePixelRatio);

		for (var i = 0; i < files.length; i++) {
			var file = files[i];
			// We only add images to the slideshow if we think we'll be able
			// to generate previews for this media type
			if (galleryFileAction.mediaTypes[file.mimetype]) {
				/* jshint camelcase: false */
				var params = {
					file: dir + file.name,
					x: width,
					y: height,
					requesttoken: oc_requesttoken
				};
				imageUrl = galleryFileAction.buildGalleryUrl('preview', '', params);
				downloadUrl = galleryFileAction.buildGalleryUrl('download', '', params);

				images.push({
					name: file.name,
					path: dir + file.name,
					mimeType: file.mimetype,
					url: imageUrl,
					downloadUrl: downloadUrl
				});
			}
		}
		for (i = 0; i < images.length; i++) {
			//console.log("Images in the slideshow : ", images[i]);
			if (images[i].name === filename) {
				start = i;
			}
		}
		var slideShow = new SlideShow($('#slideshow'), images);
		slideShow.onStop = function () {
			history.replaceState('', document.title,
				window.location.pathname + window.location.search);
		};
		slideShow.init();
		slideShow.show(start);
	}

};

$(document).ready(function () {
	// Deactivates fileaction on public preview page
	if ($('#imgframe').length > 0) {
		return true;
	}

	var url = galleryFileAction.buildGalleryUrl('config', '', {});
	$.getJSON(url).then(function (config) {
		if (config) {
			galleryFileAction.config = config;
		}
		url = galleryFileAction.buildGalleryUrl('mediatypes', '', {slideshow: 1});
		// We're asking for a list of supported media types.
		// Media files are retrieved through the Files context
		$.getJSON(url, {}, galleryFileAction.register);
	});
});