Blame view

sources/apps/files_sharing/js/public.js 6.9 KB
6d9380f96   Cédric Dupont   Update sources OC...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  /*
   * Copyright (c) 2014
   *
   * This file is licensed under the Affero General Public License version 3
   * or later.
   *
   * See the COPYING-README file.
   *
   */
  
  /* global FileActions, Files */
  /* global dragOptions, folderDropOptions */
  if (!OCA.Sharing) {
  	OCA.Sharing = {};
  }
  if (!OCA.Files) {
  	OCA.Files = {};
03e52840d   Kload   Init
18
  }
6d9380f96   Cédric Dupont   Update sources OC...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  OCA.Sharing.PublicApp = {
  	_initialized: false,
  
  	initialize: function ($el) {
  		var self = this;
  		var fileActions;
  		if (this._initialized) {
  			return;
  		}
  		fileActions = new OCA.Files.FileActions();
  		// default actions
  		fileActions.registerDefaultActions();
  		// legacy actions
  		fileActions.merge(window.FileActions);
  		// regular actions
  		fileActions.merge(OCA.Files.fileActions);
  
  		// in case apps would decide to register file actions later,
  		// replace the global object with this one
  		OCA.Files.fileActions = fileActions;
03e52840d   Kload   Init
39

6d9380f96   Cédric Dupont   Update sources OC...
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  		this._initialized = true;
  		this.initialDir = $('#dir').val();
  
  		// file list mode ?
  		if ($el.find('#filestable').length) {
  			this.fileList = new OCA.Files.FileList(
  				$el,
  				{
  					scrollContainer: $(window),
  					dragOptions: dragOptions,
  					folderDropOptions: folderDropOptions,
  					fileActions: fileActions
  				}
  			);
  			this.files = OCA.Files.Files;
  			this.files.initialize();
  		}
03e52840d   Kload   Init
57

03e52840d   Kload   Init
58
  		var mimetype = $('#mimetype').val();
6d9380f96   Cédric Dupont   Update sources OC...
59
60
61
62
63
64
65
66
67
  
  		if (typeof FileActions !== 'undefined') {
  			// Show file preview if previewer is available, images are already handled by the template
  			if (mimetype.substr(0, mimetype.indexOf('/')) !== 'image' && $('.publicpreview').length === 0) {
  				// Trigger default action if not download TODO
  				var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ);
  				if (typeof action !== 'undefined') {
  					action($('#filename').val());
  				}
03e52840d   Kload   Init
68
69
  			}
  		}
6d9380f96   Cédric Dupont   Update sources OC...
70
71
72
73
74
75
  
  		// dynamically load image previews
  		if (mimetype.substr(0, mimetype.indexOf('/')) === 'image') {
  
  			var params = {
  				x: $(document).width() * window.devicePixelRatio,
f7d878ff1   kload   [enh] Update to 7...
76
  				y: $(document).height() * window.devicePixelRatio,
6d9380f96   Cédric Dupont   Update sources OC...
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
  				a: 'true',
  				file: encodeURIComponent(this.initialDir + $('#filename').val()),
  				t: $('#sharingToken').val(),
  				scalingup: 0
  			};
  
  			var img = $('<img class="publicpreview">');
  			img.attr('src', OC.filePath('files_sharing', 'ajax', 'publicpreview.php') + '?' + OC.buildQueryString(params));
  			img.appendTo('#imgframe');
  		}
  
  		if (this.fileList) {
  			// TODO: move this to a separate PublicFileList class that extends OCA.Files.FileList (+ unit tests)
  			this.fileList.getDownloadUrl = function (filename, dir) {
  				if ($.isArray(filename)) {
  					filename = JSON.stringify(filename);
  				}
  				var path = dir || FileList.getCurrentDirectory();
  				var params = {
  					service: 'files',
  					t: $('#sharingToken').val(),
  					path: path,
  					files: filename,
  					download: null
  				};
  				return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
  			};
  
  			this.fileList.getAjaxUrl = function (action, params) {
  				params = params || {};
  				params.t = $('#sharingToken').val();
  				return OC.filePath('files_sharing', 'ajax', action + '.php') + '?' + OC.buildQueryString(params);
  			};
  
  			this.fileList.linkTo = function (dir) {
  				var params = {
  					service: 'files',
  					t: $('#sharingToken').val(),
  					dir: dir
  				};
  				return OC.filePath('', '', 'public.php') + '?' + OC.buildQueryString(params);
  			};
  
  			this.fileList.generatePreviewUrl = function (urlSpec) {
  				urlSpec.t = $('#dirToken').val();
  				return OC.generateUrl('/apps/files_sharing/ajax/publicpreview.php?') + $.param(urlSpec);
  			};
  
  			var file_upload_start = $('#file_upload_start');
  			file_upload_start.on('fileuploadadd', function (e, data) {
  				var fileDirectory = '';
  				if (typeof data.files[0].relativePath !== 'undefined') {
  					fileDirectory = data.files[0].relativePath;
  				}
  
  				// Add custom data to the upload handler
  				data.formData = {
  					requesttoken: $('#publicUploadRequestToken').val(),
  					dirToken: $('#dirToken').val(),
  					subdir: data.targetDir || self.fileList.getCurrentDirectory(),
  					file_directory: fileDirectory
  				};
  			});
  
  			// do not allow sharing from the public page
  			delete this.fileList.fileActions.actions.all.Share;
  
  			this.fileList.changeDirectory(this.initialDir || '/', false, true);
  
  			// URL history handling
  			this.fileList.$el.on('changeDirectory', _.bind(this._onDirectoryChanged, this));
  			OC.Util.History.addOnPopStateHandler(_.bind(this._onUrlChanged, this));
  		}
  
  		$(document).on('click', '#directLink', function () {
  			$(this).focus();
  			$(this).select();
03e52840d   Kload   Init
154
  		});
6d9380f96   Cédric Dupont   Update sources OC...
155
156
157
158
159
160
161
162
163
164
  
  		$('.save-form').submit(function (event) {
  			event.preventDefault();
  
  			var remote = $(this).find('input[type="text"]').val();
  			var token = $('#sharingToken').val();
  			var owner = $('#save').data('owner');
  			var name = $('#save').data('name');
  			var isProtected = $('#save').data('protected') ? 1 : 0;
  			OCA.Sharing.PublicApp._saveToOwnCloud(remote, token, owner, name, isProtected);
03e52840d   Kload   Init
165
  		});
6d9380f96   Cédric Dupont   Update sources OC...
166
167
168
169
170
  
  		$('#save #save-button').click(function () {
  			$(this).hide();
  			$('.save-form').css('display', 'inline');
  			$('#remote_address').focus();
03e52840d   Kload   Init
171
  		});
03e52840d   Kload   Init
172

6d9380f96   Cédric Dupont   Update sources OC...
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
  		// legacy
  		window.FileList = this.fileList;
  	},
  
  	_onDirectoryChanged: function (e) {
  		OC.Util.History.pushState({
  			service: 'files',
  			t: $('#sharingToken').val(),
  			// arghhhh, why is this not called "dir" !?
  			path: e.dir
  		});
  	},
  
  	_onUrlChanged: function (params) {
  		this.fileList.changeDirectory(params.path || params.dir, false, true);
  	},
  
  	_saveToOwnCloud: function(remote, token, owner, name, isProtected) {
  		var location = window.location.protocol + '//' + window.location.host + OC.webroot;
31b7f2792   Kload   Upgrade to ownclo...
192

6d9380f96   Cédric Dupont   Update sources OC...
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
  		var url = remote + '/index.php/apps/files#' + 'remote=' + encodeURIComponent(location) // our location is the remote for the other server
  			+ "&token=" + encodeURIComponent(token) + "&owner=" + encodeURIComponent(owner) + "&name=" + encodeURIComponent(name) + "&protected=" + isProtected;
  
  
  		if (remote.indexOf('://') > 0) {
  			OC.redirect(url);
  		} else {
  			// if no protocol is specified, we automatically detect it by testing https and http
  			// this check needs to happen on the server due to the Content Security Policy directive
  			$.get(OC.generateUrl('apps/files_sharing/testremote'), {remote: remote}).then(function (protocol) {
  				if (protocol !== 'http' && protocol !== 'https') {
  					OC.dialogs.alert(t('files_sharing', 'No ownCloud installation found at {remote}', {remote: remote}),
  						t('files_sharing', 'Invalid ownCloud url'));
  				} else {
  					OC.redirect(protocol + '://' + url);
  				}
  			});
  		}
  	}
  };
  
  $(document).ready(function () {
  	var App = OCA.Sharing.PublicApp;
  	// defer app init, to give a chance to plugins to register file actions
  	_.defer(function () {
  		App.initialize($('#preview'));
31b7f2792   Kload   Upgrade to ownclo...
219
  	});
03e52840d   Kload   Init
220

6d9380f96   Cédric Dupont   Update sources OC...
221
222
223
224
225
226
227
228
229
230
231
232
233
  	if (window.Files) {
  		// HACK: for oc-dialogs previews that depends on Files:
  		Files.lazyLoadPreview = function (path, mime, ready, width, height, etag) {
  			return App.fileList.lazyLoadPreview({
  				path: path,
  				mime: mime,
  				callback: ready,
  				width: width,
  				height: height,
  				etag: etag
  			});
  		};
  	}
03e52840d   Kload   Init
234
  });
6d9380f96   Cédric Dupont   Update sources OC...
235