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
123
|
/* 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,
c: file.etag,
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);
});
});
|