mirror of
https://github.com/nextcloud/server.git
synced 2026-03-04 06:21:07 -05:00
chore(files_sharing): Remove now unused legacy scripts
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
parent
80033bde88
commit
11fdf4e2a7
8 changed files with 0 additions and 1161 deletions
|
|
@ -1,162 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
var Drop = {
|
||||
/** @type {Function} **/
|
||||
_template: undefined,
|
||||
|
||||
/** @type {boolean} */
|
||||
_uploading: false,
|
||||
|
||||
addFileToUpload: function(e, data) {
|
||||
var errors = [];
|
||||
var output = this.template();
|
||||
|
||||
var filesClient = new OC.Files.Client({
|
||||
host: OC.getHost(),
|
||||
port: OC.getPort(),
|
||||
// note: password not be required, the endpoint
|
||||
// will recognize previous validation from the session
|
||||
root: OC.getRootPath() + '/public.php/dav/files/' + $('#sharingToken').val() + '/',
|
||||
useHTTPS: OC.getProtocol() === 'https',
|
||||
});
|
||||
|
||||
// We only process one file at a time 🤷♀️
|
||||
var name = data.files[0].name;
|
||||
// removing unwanted characters
|
||||
name = name.replace(/["'#%`]/gm, '');
|
||||
|
||||
try {
|
||||
// FIXME: not so elegant... need to refactor that method to return a value
|
||||
Files.isFileNameValid(name);
|
||||
}
|
||||
catch (errorMessage) {
|
||||
OC.Notification.show(errorMessage, {type: 'error'});
|
||||
return false;
|
||||
}
|
||||
var base = OC.getProtocol() + '://' + OC.getHost();
|
||||
data.url = base + OC.getRootPath() + '/public.php/dav/files/' + $('#sharingToken').val() + '/' + encodeURI(name);
|
||||
|
||||
data.multipart = false;
|
||||
|
||||
if (!data.headers) {
|
||||
data.headers = {};
|
||||
}
|
||||
|
||||
if (localStorage.getItem('nick') !== null) {
|
||||
data.headers['X-NC-Nickname'] = localStorage.getItem('nick')
|
||||
}
|
||||
|
||||
$('#drop-upload-done-indicator').addClass('hidden');
|
||||
$('#drop-upload-progress-indicator').removeClass('hidden');
|
||||
|
||||
$('#drop-uploaded-files').append(output({isUploading: true, name: data.files[0].name}));
|
||||
data.submit();
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
updateFileItem: function (fileName, fileItem) {
|
||||
$('#drop-uploaded-files li[data-name="' + fileName + '"]').replaceWith(fileItem);
|
||||
},
|
||||
|
||||
initialize: function () {
|
||||
$(document).bind('drop dragover', function (e) {
|
||||
// Prevent the default browser drop action:
|
||||
e.preventDefault();
|
||||
});
|
||||
var output = this.template();
|
||||
var self = this;
|
||||
$('#public-upload').fileupload({
|
||||
type: 'PUT',
|
||||
dropZone: $('#public-upload'),
|
||||
sequentialUploads: true,
|
||||
start: function(e) {
|
||||
self._uploading = true;
|
||||
},
|
||||
stop: function(e) {
|
||||
self._uploading = false;
|
||||
},
|
||||
add: function(e, data) {
|
||||
Drop.addFileToUpload(e, data);
|
||||
$('#drop-upload-status').text(t('files_sharing', 'Waiting…'));
|
||||
//we return true to keep trying to upload next file even
|
||||
//if addFileToUpload did not like the previous one
|
||||
return true;
|
||||
},
|
||||
done: function(e, data) {
|
||||
// Created
|
||||
var mimeTypeUrl = OC.MimeType.getIconUrl(data.files[0].type);
|
||||
var fileItem = output({isUploading: false, iconSrc: mimeTypeUrl, name: data.files[0].name});
|
||||
Drop.updateFileItem(data.files[0].name, fileItem);
|
||||
},
|
||||
fail: function(e, data) {
|
||||
OC.Notification.showTemporary(OC.L10N.translate(
|
||||
'files_sharing',
|
||||
'Could not upload "{filename}"',
|
||||
{filename: data.files[0].name}
|
||||
));
|
||||
$('#drop-upload-status').text(t('files_sharing', 'error'));
|
||||
var errorIconSrc = OC.imagePath('core', 'actions/error.svg');
|
||||
var fileItem = output({isUploading: false, iconSrc: errorIconSrc, name: data.files[0].name});
|
||||
Drop.updateFileItem(data.files[0].name, fileItem);
|
||||
},
|
||||
progressall: function (e, data) {
|
||||
var progress = parseInt(data.loaded / data.total * 100, 10);
|
||||
if(progress === 100) {
|
||||
$('#drop-upload-done-indicator').removeClass('hidden');
|
||||
$('#drop-upload-progress-indicator').addClass('hidden');
|
||||
} else {
|
||||
$('#drop-upload-done-indicator').addClass('hidden');
|
||||
$('#drop-upload-progress-indicator').removeClass('hidden');
|
||||
}
|
||||
},
|
||||
progress: function (e, data) {
|
||||
var progress = parseInt(data.loaded / data.total * 100, 10);
|
||||
if(progress === 100) {
|
||||
$('#drop-upload-progress-bar').val(100);
|
||||
$('#drop-upload-status').text(t('files_sharing', 'finished'));
|
||||
} else {
|
||||
$('#drop-upload-progress-bar').val(progress);
|
||||
$('#drop-upload-status').text(progress + '%');
|
||||
}
|
||||
},
|
||||
});
|
||||
$('#public-upload .button.icon-upload').click(function(e) {
|
||||
e.preventDefault();
|
||||
$('#public-upload .emptycontent input').focus().trigger('click');
|
||||
});
|
||||
window.onbeforeunload = function() {
|
||||
return self.confirmBeforeUnload();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {Function} from Handlebars
|
||||
* @private
|
||||
*/
|
||||
template: function () {
|
||||
return OCA.Sharing.Templates['files_drop'];
|
||||
},
|
||||
|
||||
confirmBeforeUnload: function() {
|
||||
if (this._uploading) {
|
||||
return t('files', 'This will stop your current uploads.')
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
OCA.FilesSharingDrop = Drop;
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
if($('#upload-only-interface').val() === "1") {
|
||||
$('.avatardiv').avatar($('#sharingUserId').val(), 128, true);
|
||||
}
|
||||
|
||||
OCA.FilesSharingDrop.initialize();
|
||||
});
|
||||
})(jQuery);
|
||||
|
|
@ -1,392 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2012-2016 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/* global FileActions, Files, FileList */
|
||||
/* global dragOptions, folderDropOptions */
|
||||
if (!OCA.Sharing) {
|
||||
OCA.Sharing = {};
|
||||
}
|
||||
if (!OCA.Files) {
|
||||
OCA.Files = {};
|
||||
}
|
||||
/**
|
||||
* @namespace
|
||||
*/
|
||||
OCA.Sharing.PublicApp = {
|
||||
_initialized: false,
|
||||
|
||||
/**
|
||||
* Initializes the public share app.
|
||||
*
|
||||
* @param $el container
|
||||
*/
|
||||
initialize: function ($el) {
|
||||
var self = this;
|
||||
var fileActions;
|
||||
if (this._initialized) {
|
||||
return;
|
||||
}
|
||||
fileActions = new OCA.Files.FileActions();
|
||||
// default actions
|
||||
fileActions.registerDefaultActions();
|
||||
// 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;
|
||||
|
||||
this._initialized = true;
|
||||
var urlParams = OC.Util.History.parseUrlQuery();
|
||||
this.initialDir = urlParams.path || '/';
|
||||
|
||||
var token = $('#sharingToken').val();
|
||||
var hideDownload = $('#hideDownload').val();
|
||||
|
||||
// Prevent all right-click options if hideDownload is enabled
|
||||
if (hideDownload === 'true') {
|
||||
window.oncontextmenu = function(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
// file list mode ?
|
||||
if ($el.find('.files-filestable').length) {
|
||||
// Toggle for grid view
|
||||
this.$showGridView = $('input#showgridview');
|
||||
this.$showGridView.on('change', _.bind(this._onGridviewChange, this));
|
||||
|
||||
var filesClient = new OC.Files.Client({
|
||||
host: OC.getHost(),
|
||||
port: OC.getPort(),
|
||||
// note: password not be required, the endpoint
|
||||
// will recognize previous validation from the session
|
||||
root: OC.getRootPath() + '/public.php/dav/files/' + token + '/',
|
||||
useHTTPS: OC.getProtocol() === 'https'
|
||||
});
|
||||
|
||||
this.fileList = new OCA.Files.FileList(
|
||||
$el,
|
||||
{
|
||||
id: 'files.public',
|
||||
dragOptions: dragOptions,
|
||||
folderDropOptions: folderDropOptions,
|
||||
fileActions: fileActions,
|
||||
detailsViewEnabled: false,
|
||||
filesClient: filesClient,
|
||||
enableUpload: true,
|
||||
multiSelectMenu: [
|
||||
{
|
||||
name: 'copyMove',
|
||||
displayName: t('files', 'Move or copy'),
|
||||
iconClass: 'icon-external',
|
||||
},
|
||||
{
|
||||
name: 'download',
|
||||
displayName: t('files', 'Download'),
|
||||
iconClass: 'icon-download',
|
||||
},
|
||||
{
|
||||
name: 'delete',
|
||||
displayName: t('files', 'Delete'),
|
||||
iconClass: 'icon-delete',
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
if (hideDownload === 'true') {
|
||||
this.fileList._allowSelection = false;
|
||||
}
|
||||
this.files = OCA.Files.Files;
|
||||
this.files.initialize();
|
||||
// TODO: move to PublicFileList.initialize() once
|
||||
// the code was split into a separate class
|
||||
OC.Plugins.attach('OCA.Sharing.PublicFileList', this.fileList);
|
||||
}
|
||||
|
||||
var mimetype = $('#mimetype').val();
|
||||
var mimetypeIcon = $('#mimetypeIcon').val();
|
||||
mimetypeIcon = mimetypeIcon.substring(0, mimetypeIcon.length - 3);
|
||||
mimetypeIcon = mimetypeIcon + 'svg';
|
||||
|
||||
var previewSupported = $('#previewSupported').val();
|
||||
|
||||
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 spec = FileActions.getDefaultFileAction(mimetype, 'file', OC.PERMISSION_READ);
|
||||
if (spec && spec.action) {
|
||||
spec.action($('#filename').val());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// dynamically load image previews
|
||||
var bottomMargin = 350;
|
||||
var previewWidth = $(window).width();
|
||||
var previewHeight = $(window).height() - bottomMargin;
|
||||
previewHeight = Math.max(200, previewHeight);
|
||||
var params = {
|
||||
x: Math.ceil(previewWidth * window.devicePixelRatio),
|
||||
y: Math.ceil(previewHeight * window.devicePixelRatio),
|
||||
a: 'true',
|
||||
file: encodeURIComponent(this.initialDir + $('#filename').val()),
|
||||
scalingup: 0
|
||||
};
|
||||
|
||||
var imgcontainer = $('<img class="publicpreview" alt="">');
|
||||
if (hideDownload === 'false') {
|
||||
imgcontainer = $('<a href="' + $('#previewURL').val() + '" target="_blank"></a>').append(imgcontainer);
|
||||
}
|
||||
var img = imgcontainer.hasClass('publicpreview')? imgcontainer: imgcontainer.find('.publicpreview');
|
||||
img.css({
|
||||
'max-width': previewWidth,
|
||||
'max-height': previewHeight
|
||||
});
|
||||
|
||||
if (OCA.Viewer && OCA.Viewer.mimetypes.includes(mimetype)
|
||||
&& (mimetype.startsWith('image/') || mimetype.startsWith('video/') || mimetype.startsWith('audio'))) {
|
||||
OCA.Viewer.setRootElement('#imgframe')
|
||||
OCA.Viewer.open({ path: '/' })
|
||||
} else if (mimetype.substr(0, mimetype.indexOf('/')) === 'text' && window.btoa) {
|
||||
if (OC.appswebroots['files_texteditor'] !== undefined ||
|
||||
OC.appswebroots['text'] !== undefined) {
|
||||
// the text editor handles the previewing
|
||||
return;
|
||||
}
|
||||
// Undocumented Url to public WebDAV endpoint
|
||||
var url = parent.location.protocol + '//' + location.host + OC.linkTo('', 'public.php/dav/files/'+ token);
|
||||
$.ajax({
|
||||
url: url,
|
||||
headers: {
|
||||
Range: 'bytes=0-10000'
|
||||
}
|
||||
}).then(function (data) {
|
||||
self._showTextPreview(data, previewHeight);
|
||||
});
|
||||
} else if ((previewSupported === 'true' && mimetype.substr(0, mimetype.indexOf('/')) !== 'video') ||
|
||||
mimetype.substr(0, mimetype.indexOf('/')) === 'image' &&
|
||||
mimetype !== 'image/svg+xml') {
|
||||
img.attr('src', OC.generateUrl('/apps/files_sharing/publicpreview/' + token + '?' + OC.buildQueryString(params)));
|
||||
imgcontainer.appendTo('#imgframe');
|
||||
} else if (mimetype.substr(0, mimetype.indexOf('/')) !== 'video') {
|
||||
img.attr('src', mimetypeIcon);
|
||||
img.attr('width', 128);
|
||||
// "#imgframe" is either empty or it contains an audio preview that
|
||||
// the icon should appear before, so the container should be
|
||||
// prepended to the frame.
|
||||
imgcontainer.prependTo('#imgframe');
|
||||
} else if (previewSupported === 'true') {
|
||||
$('#imgframe > video').attr('poster', OC.generateUrl('/apps/files_sharing/publicpreview/' + token + '?' + OC.buildQueryString(params)));
|
||||
}
|
||||
|
||||
if (this.fileList) {
|
||||
// TODO: move this to a separate PublicFileList class that extends OCA.Files.FileList (+ unit tests)
|
||||
this.fileList.getDownloadUrl = function (filename, dir, isDir) {
|
||||
var path = dir || this.getCurrentDirectory();
|
||||
if (_.isArray(filename)) {
|
||||
filename = JSON.stringify(filename);
|
||||
}
|
||||
var params = {
|
||||
path: path
|
||||
};
|
||||
if (filename) {
|
||||
params.files = filename;
|
||||
}
|
||||
return OC.generateUrl('/s/' + token + '/download') + '?' + OC.buildQueryString(params);
|
||||
};
|
||||
|
||||
this.fileList._createRow = function(fileData) {
|
||||
var $tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments);
|
||||
if (hideDownload === 'true') {
|
||||
this.fileActions.currentFile = $tr.find('td');
|
||||
|
||||
// Remove the link. This means that files without a default action fail hard
|
||||
$tr.find('a.name').attr('href', '#');
|
||||
|
||||
delete this.fileActions.actions.all.Download;
|
||||
}
|
||||
return $tr;
|
||||
};
|
||||
|
||||
this.fileList.isSelectedDownloadable = function () {
|
||||
return hideDownload !== 'true';
|
||||
};
|
||||
|
||||
this.fileList.getUploadUrl = function(fileName, dir) {
|
||||
if (_.isUndefined(dir)) {
|
||||
dir = this.getCurrentDirectory();
|
||||
}
|
||||
|
||||
var pathSections = dir.split('/');
|
||||
if (!_.isUndefined(fileName)) {
|
||||
pathSections.push(fileName);
|
||||
}
|
||||
var encodedPath = '';
|
||||
_.each(pathSections, function(section) {
|
||||
if (section !== '') {
|
||||
encodedPath += '/' + encodeURIComponent(section);
|
||||
}
|
||||
});
|
||||
var base = '';
|
||||
|
||||
if (!this._uploader.isXHRUpload()) {
|
||||
// also add auth in URL due to POST workaround
|
||||
base = OC.getProtocol() + '://' + token + '@' + OC.getHost() + (OC.getPort() ? ':' + OC.getPort() : '');
|
||||
}
|
||||
|
||||
// encodedPath starts with a leading slash
|
||||
return base + OC.getRootPath() + '/public.php/dav/files/' + token + encodedPath;
|
||||
};
|
||||
|
||||
this.fileList.getAjaxUrl = function (action, params) {
|
||||
params = params || {};
|
||||
params.t = token;
|
||||
return OC.filePath('files_sharing', 'ajax', action + '.php') + '?' + OC.buildQueryString(params);
|
||||
};
|
||||
|
||||
this.fileList.linkTo = function (dir) {
|
||||
return OC.generateUrl('/s/' + token + '') + '?' + OC.buildQueryString({path: dir});
|
||||
};
|
||||
|
||||
this.fileList.generatePreviewUrl = function (urlSpec) {
|
||||
urlSpec = urlSpec || {};
|
||||
if (!urlSpec.x) {
|
||||
urlSpec.x = this.$table.data('preview-x') || 250;
|
||||
}
|
||||
if (!urlSpec.y) {
|
||||
urlSpec.y = this.$table.data('preview-y') || 250;
|
||||
}
|
||||
urlSpec.x *= window.devicePixelRatio;
|
||||
urlSpec.y *= window.devicePixelRatio;
|
||||
urlSpec.x = Math.ceil(urlSpec.x);
|
||||
urlSpec.y = Math.ceil(urlSpec.y);
|
||||
var token = $('#dirToken').val();
|
||||
return OC.generateUrl('/apps/files_sharing/publicpreview/' + token + '?' + OC.buildQueryString(urlSpec));
|
||||
};
|
||||
|
||||
this.fileList.updateEmptyContent = function() {
|
||||
this.$el.find('.emptycontent .uploadmessage').text(
|
||||
t('files_sharing', 'You can upload into this folder')
|
||||
);
|
||||
OCA.Files.FileList.prototype.updateEmptyContent.apply(this, arguments);
|
||||
};
|
||||
|
||||
this.fileList._uploader.on('fileuploadadd', function(e, data) {
|
||||
if (!data.headers) {
|
||||
data.headers = {};
|
||||
}
|
||||
|
||||
data.headers.Authorization = 'Basic ' + btoa(token + ':');
|
||||
});
|
||||
|
||||
// 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));
|
||||
|
||||
$('#download').click(function (e) {
|
||||
e.preventDefault();
|
||||
OC.redirect(FileList.getDownloadUrl());
|
||||
});
|
||||
|
||||
if (hideDownload === 'true') {
|
||||
this.fileList.$el.find('.summary').find('td:first-child').remove();
|
||||
}
|
||||
}
|
||||
|
||||
self._bindShowTermsAction();
|
||||
|
||||
// legacy
|
||||
window.FileList = this.fileList;
|
||||
},
|
||||
|
||||
/**
|
||||
* Binds the click action for the "terms of service" action.
|
||||
* Shows an OC info dialog on click.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
_bindShowTermsAction: function() {
|
||||
$('#show-terms-dialog').on('click', function() {
|
||||
OC.dialogs.info($('#disclaimerText').val(), t('files_sharing', 'Terms of service'));
|
||||
});
|
||||
},
|
||||
|
||||
_showTextPreview: function (data, previewHeight) {
|
||||
var textDiv = $('<div></div>').addClass('text-preview');
|
||||
textDiv.text(data);
|
||||
textDiv.appendTo('#imgframe');
|
||||
var divHeight = textDiv.height();
|
||||
if (data.length > 999) {
|
||||
var ellipsis = $('<div></div>').addClass('ellipsis');
|
||||
ellipsis.html('(…)');
|
||||
ellipsis.appendTo('#imgframe');
|
||||
}
|
||||
if (divHeight > previewHeight) {
|
||||
textDiv.height(previewHeight);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggle showing gridview by default or not
|
||||
*
|
||||
* @returns {undefined}
|
||||
*/
|
||||
_onGridviewChange: function() {
|
||||
const isGridView = this.$showGridView.is(':checked');
|
||||
this.$showGridView.next('#view-toggle')
|
||||
.removeClass('icon-toggle-filelist icon-toggle-pictures')
|
||||
.addClass(isGridView ? 'icon-toggle-filelist' : 'icon-toggle-pictures')
|
||||
this.$showGridView.next('#view-toggle').attr(
|
||||
'title',
|
||||
isGridView ? t('files', 'Show list view') : t('files', 'Show grid view'),
|
||||
)
|
||||
|
||||
if (this.fileList) {
|
||||
this.fileList.setGridView(isGridView);
|
||||
}
|
||||
},
|
||||
|
||||
_onDirectoryChanged: function (e) {
|
||||
OC.Util.History.pushState({
|
||||
// arghhhh, why is this not called "dir" !?
|
||||
path: e.dir
|
||||
});
|
||||
},
|
||||
|
||||
_onUrlChanged: function (params) {
|
||||
this.fileList.changeDirectory(params.path || params.dir, false, true);
|
||||
},
|
||||
};
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function () {
|
||||
// FIXME: replace with OC.Plugins.register()
|
||||
if (window.TESTING) {
|
||||
return;
|
||||
}
|
||||
|
||||
var App = OCA.Sharing.PublicApp;
|
||||
// defer app init, to give a chance to plugins to register file actions
|
||||
_.defer(function () {
|
||||
App.initialize($('#preview'));
|
||||
});
|
||||
|
||||
if (window.Files) {
|
||||
// HACK: for oc-dialogs previews that depends on Files:
|
||||
Files.generatePreviewUrl = function (urlSpec) {
|
||||
return App.fileList.generatePreviewUrl(urlSpec);
|
||||
};
|
||||
}
|
||||
|
||||
});
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function() {
|
||||
var noteElmt = document.getElementById('notemenu')
|
||||
if (noteElmt) {
|
||||
var noteHtml = noteElmt.outerHTML
|
||||
$(noteHtml).insertBefore('#header-primary-action');
|
||||
$('#notemenu').removeClass('hidden');
|
||||
OC.registerMenu($('#notemenu .menutoggle'), $('#notemenu .menu'))
|
||||
}
|
||||
})
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
(function() {
|
||||
var template = Handlebars.template, templates = OCA.Sharing.Templates = OCA.Sharing.Templates || {};
|
||||
templates['files_drop'] = template({"1":function(container,depth0,helpers,partials,data) {
|
||||
var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
|
||||
if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
|
||||
return parent[propertyName];
|
||||
}
|
||||
return undefined
|
||||
};
|
||||
|
||||
return " <div id=\"drop-upload-name\">"
|
||||
+ container.escapeExpression(((helper = (helper = lookupProperty(helpers,"name") || (depth0 != null ? lookupProperty(depth0,"name") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"name","hash":{},"data":data,"loc":{"start":{"line":3,"column":29},"end":{"line":3,"column":37}}}) : helper)))
|
||||
+ "</div><div id=\"drop-upload-status\"></div>\n <progress id=\"drop-upload-progress-bar\" value=\"0\" max=\"100\"></progress>\n";
|
||||
},"3":function(container,depth0,helpers,partials,data) {
|
||||
var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
|
||||
if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
|
||||
return parent[propertyName];
|
||||
}
|
||||
return undefined
|
||||
};
|
||||
|
||||
return " <img src=\""
|
||||
+ alias4(((helper = (helper = lookupProperty(helpers,"iconSrc") || (depth0 != null ? lookupProperty(depth0,"iconSrc") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"iconSrc","hash":{},"data":data,"loc":{"start":{"line":6,"column":12},"end":{"line":6,"column":23}}}) : helper)))
|
||||
+ "\"/> "
|
||||
+ alias4(((helper = (helper = lookupProperty(helpers,"name") || (depth0 != null ? lookupProperty(depth0,"name") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data,"loc":{"start":{"line":6,"column":27},"end":{"line":6,"column":35}}}) : helper)))
|
||||
+ "\n";
|
||||
},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
|
||||
var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
|
||||
if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
|
||||
return parent[propertyName];
|
||||
}
|
||||
return undefined
|
||||
};
|
||||
|
||||
return "<li title=\""
|
||||
+ alias4(((helper = (helper = lookupProperty(helpers,"name") || (depth0 != null ? lookupProperty(depth0,"name") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data,"loc":{"start":{"line":1,"column":11},"end":{"line":1,"column":19}}}) : helper)))
|
||||
+ "\" data-name=\""
|
||||
+ alias4(((helper = (helper = lookupProperty(helpers,"name") || (depth0 != null ? lookupProperty(depth0,"name") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data,"loc":{"start":{"line":1,"column":32},"end":{"line":1,"column":40}}}) : helper)))
|
||||
+ "\">\n"
|
||||
+ ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isUploading") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":2,"column":1},"end":{"line":7,"column":8}}})) != null ? stack1 : "")
|
||||
+ "</li>\n";
|
||||
},"useData":true});
|
||||
})();
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
<li title="{{name}}" data-name="{{name}}">
|
||||
{{#if isUploading}}
|
||||
<div id="drop-upload-name">{{name}}</div><div id="drop-upload-status"></div>
|
||||
<progress id="drop-upload-progress-bar" value="0" max="100"></progress>
|
||||
{{else}}
|
||||
<img src="{{iconSrc}}"/> {{name}}
|
||||
{{/if}}
|
||||
</li>
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
describe("files Drop tests", function() {
|
||||
//some testing data
|
||||
var sharingToken = "fVCiSMhScgWfiuv";
|
||||
var testFiles = [
|
||||
{ name: 'test.txt', expectedValidationResult: true },
|
||||
{ name: 'testनेपाल.txt', expectedValidationResult: true },
|
||||
{ name: 'test.part', expectedValidationResult: false },
|
||||
{ name: 'test.filepart', expectedValidationResult: false },
|
||||
{ name: '.', expectedValidationResult: false },
|
||||
{ name: '..', expectedValidationResult: false },
|
||||
];
|
||||
|
||||
//this pre/post positions should not change the result of the file name validation
|
||||
var prePostPositions = [""," "," "," "];
|
||||
|
||||
//use the testFiles and the pre/post positions to generate more testing data
|
||||
var replicatedTestFiles = [];
|
||||
prePostPositions.map(function (prePostPosition) {
|
||||
testFiles.map(function (testFile) {
|
||||
replicatedTestFiles.push(
|
||||
{
|
||||
name: testFile.name + prePostPosition,
|
||||
expectedValidationResult: testFile.expectedValidationResult
|
||||
}
|
||||
);
|
||||
replicatedTestFiles.push(
|
||||
{
|
||||
name: prePostPosition + testFile.name,
|
||||
expectedValidationResult: testFile.expectedValidationResult
|
||||
}
|
||||
);
|
||||
replicatedTestFiles.push(
|
||||
{
|
||||
name: prePostPosition + testFile.name + prePostPosition,
|
||||
expectedValidationResult: testFile.expectedValidationResult
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
beforeEach (function () {
|
||||
//fake input for the sharing token
|
||||
$('#testArea').append(
|
||||
'<input name="sharingToken" value="" id="sharingToken" type="hidden">'
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
replicatedTestFiles.map(function (testFile) {
|
||||
it("validates the filenames correctly", function() {
|
||||
data = {
|
||||
'submit': function() {},
|
||||
'files': [testFile]
|
||||
}
|
||||
expect(OCA.FilesSharingDrop.addFileToUpload('',data)).
|
||||
toBe(
|
||||
testFile.expectedValidationResult,
|
||||
'wrongly validated file named "'+testFile.name+'"'
|
||||
);
|
||||
});
|
||||
|
||||
if (testFile.expectedValidationResult === true) {
|
||||
it("should set correct PUT URL, Auth header and submit", function () {
|
||||
data = {
|
||||
'submit': sinon.stub(),
|
||||
'files': [testFile]
|
||||
}
|
||||
$('#sharingToken').val(sharingToken);
|
||||
|
||||
OCA.FilesSharingDrop.addFileToUpload('',data);
|
||||
expect(data.submit.calledOnce).toEqual(true);
|
||||
expect(data.url).toContain("/public.php/dav/files/" + sharingToken + '/' + encodeURI(testFile.name));
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -1,140 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
describe('OCA.Sharing.PublicApp tests', function() {
|
||||
var App = OCA.Sharing.PublicApp;
|
||||
var hostStub, protocolStub;
|
||||
var originalWebroot;
|
||||
var $preview;
|
||||
|
||||
beforeEach(function() {
|
||||
originalWebroot = window._oc_webroot;
|
||||
window._oc_webroot = '/owncloud';
|
||||
protocolStub = sinon.stub(OC, 'getProtocol').returns('https');
|
||||
hostStub = sinon.stub(OC, 'getHost').returns('example.com:9876');
|
||||
|
||||
$preview = $('<div id="preview"></div>');
|
||||
$('#testArea').append($preview);
|
||||
$preview.append(
|
||||
'<div id="mimetype"></div>' +
|
||||
'<div id="mimetypeIcon"></div>' +
|
||||
'<input type="hidden" id="sharingToken" value="sh4tok"></input>'
|
||||
);
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
window._oc_webroot = originalWebroot;
|
||||
protocolStub.restore();
|
||||
hostStub.restore();
|
||||
});
|
||||
|
||||
describe('File list', function() {
|
||||
var parseUrlQueryStub
|
||||
// TODO: this should be moved to a separate file once the PublicFileList is extracted from public.js
|
||||
beforeEach(function() {
|
||||
$preview.append(
|
||||
'<div id="app-content-files">' +
|
||||
// init horrible parameters
|
||||
'<input type="hidden" id="permissions" value="31"/>' +
|
||||
// dummy controls
|
||||
'<div class="files-controls">' +
|
||||
' <div class="actions creatable"></div>' +
|
||||
' <div class="notCreatable"></div>' +
|
||||
'</div>' +
|
||||
// uploader
|
||||
'<input type="file" id="file_upload_start" name="files[]" multiple="multiple">' +
|
||||
// dummy table
|
||||
// TODO: at some point this will be rendered by the fileList class itself!
|
||||
'<table class="files-filestable list-container view-grid">' +
|
||||
'<thead><tr>' +
|
||||
'<th class="hidden column-name">' +
|
||||
'<input type="checkbox" id="select_all_files" class="select-all">' +
|
||||
'<a class="name columntitle" data-sort="name"><span>Name</span><span class="sort-indicator"></span></a>' +
|
||||
'<span class="selectedActions hidden">' +
|
||||
'<a href class="download">Download</a>' +
|
||||
'</span>' +
|
||||
'</th>' +
|
||||
'<th class="hidden column-size"><a class="columntitle" data-sort="size"><span class="sort-indicator"></span></a></th>' +
|
||||
'<th class="hidden column-mtime"><a class="columntitle" data-sort="mtime"><span class="sort-indicator"></span></a></th>' +
|
||||
'</tr></thead>' +
|
||||
'<tbody class="files-fileList"></tbody>' +
|
||||
'<tfoot></tfoot>' +
|
||||
'</table>' +
|
||||
// TODO: move to handlebars template
|
||||
'<div class="emptyfilelist emptycontent"><h2>Empty content message</h2><p class="uploadmessage">Upload message</p></div>' +
|
||||
'<div class="nofilterresults hidden"></div>' +
|
||||
'</div>'
|
||||
);
|
||||
|
||||
parseUrlQueryStub = sinon.stub(OC.Util.History, 'parseUrlQuery');
|
||||
parseUrlQueryStub.returns({path: '/subdir'});
|
||||
App.initialize($('#preview'));
|
||||
});
|
||||
afterEach(function() {
|
||||
App._initialized = false;
|
||||
parseUrlQueryStub.restore();
|
||||
});
|
||||
|
||||
it('Uses public webdav endpoint', function() {
|
||||
App._initialized = false;
|
||||
fakeServer.restore();
|
||||
window.fakeServer = sinon.fakeServer.create();
|
||||
|
||||
// uploader function messes up with fakeServer
|
||||
var uploaderDetectStub = sinon.stub(OC.Uploader.prototype, '_supportAjaxUploadWithProgress');
|
||||
App.initialize($('#preview'));
|
||||
expect(fakeServer.requests.length).toEqual(1);
|
||||
expect(fakeServer.requests[0].method).toEqual('PROPFIND');
|
||||
expect(fakeServer.requests[0].url).toEqual('https://example.com:9876/owncloud/public.php/dav/files/sh4tok/subdir');
|
||||
uploaderDetectStub.restore();
|
||||
});
|
||||
|
||||
describe('Download Url', function() {
|
||||
var fileList;
|
||||
|
||||
beforeEach(function() {
|
||||
fileList = App.fileList;
|
||||
});
|
||||
|
||||
it('returns correct download URL for single files', function() {
|
||||
expect(fileList.getDownloadUrl('some file.txt'))
|
||||
.toEqual(OC.getRootPath() + '/index.php/s/sh4tok/download?path=%2Fsubdir&files=some%20file.txt');
|
||||
expect(fileList.getDownloadUrl('some file.txt', '/anotherpath/abc'))
|
||||
.toEqual(OC.getRootPath() + '/index.php/s/sh4tok/download?path=%2Fanotherpath%2Fabc&files=some%20file.txt');
|
||||
fileList.changeDirectory('/');
|
||||
expect(fileList.getDownloadUrl('some file.txt'))
|
||||
.toEqual(OC.getRootPath() + '/index.php/s/sh4tok/download?path=%2F&files=some%20file.txt');
|
||||
});
|
||||
it('returns correct download URL for multiple files', function() {
|
||||
expect(fileList.getDownloadUrl(['a b c.txt', 'd e f.txt']))
|
||||
.toEqual(OC.getRootPath() + '/index.php/s/sh4tok/download?path=%2Fsubdir&files=%5B%22a%20b%20c.txt%22%2C%22d%20e%20f.txt%22%5D');
|
||||
});
|
||||
it('returns the correct ajax URL', function() {
|
||||
expect(fileList.getAjaxUrl('test', {a:1, b:'x y'}))
|
||||
.toEqual(OC.getRootPath() + '/index.php/apps/files_sharing/ajax/test.php?a=1&b=x%20y&t=sh4tok');
|
||||
});
|
||||
it('returns correct download URL for downloading everything', function() {
|
||||
expect(fileList.getDownloadUrl())
|
||||
.toEqual(OC.getRootPath() + '/index.php/s/sh4tok/download?path=%2Fsubdir');
|
||||
});
|
||||
});
|
||||
describe('Upload Url', function() {
|
||||
var fileList;
|
||||
|
||||
beforeEach(function() {
|
||||
fileList = App.fileList;
|
||||
});
|
||||
it('returns correct upload URL', function() {
|
||||
expect(fileList.getUploadUrl('some file.txt'))
|
||||
.toEqual('/owncloud/public.php/dav/files/sh4tok/subdir/some%20file.txt');
|
||||
});
|
||||
it('returns correct upload URL with specified dir', function() {
|
||||
expect(fileList.getUploadUrl('some file.txt', 'sub'))
|
||||
.toEqual('/owncloud/public.php/dav/files/sh4tok/sub/some%20file.txt');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
@ -1,321 +0,0 @@
|
|||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2014-2016 ownCloud, Inc.
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
describe('OCA.Sharing.Util tests', function() {
|
||||
var fileList;
|
||||
var testFiles;
|
||||
|
||||
function getImageUrl($el) {
|
||||
// might be slightly different cross-browser
|
||||
var url = $el.css('background-image');
|
||||
var r = url.match(/url\(['"]?([^'")]*)['"]?\)/);
|
||||
if (!r) {
|
||||
return url;
|
||||
}
|
||||
return r[1];
|
||||
}
|
||||
|
||||
beforeEach(function() {
|
||||
var $content = $('<div id="app-content"></div>');
|
||||
$('#testArea').append($content);
|
||||
// dummy file list
|
||||
var $div = $(
|
||||
'<div id="listContainer">' +
|
||||
'<table class="files-filestable list-container view-grid">' +
|
||||
'<thead></thead>' +
|
||||
'<tbody class="files-fileList"></tbody>' +
|
||||
'</table>' +
|
||||
'</div>');
|
||||
$('#app-content').append($div);
|
||||
|
||||
var fileActions = new OCA.Files.FileActions();
|
||||
fileList = new OCA.Files.FileList(
|
||||
$div, {
|
||||
fileActions : fileActions
|
||||
}
|
||||
);
|
||||
OCA.Sharing.Util.attach(fileList);
|
||||
|
||||
testFiles = [{
|
||||
id: 1,
|
||||
type: 'file',
|
||||
name: 'One.txt',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
etag: 'abc',
|
||||
shareOwner: 'User One',
|
||||
isShareMountPoint: false,
|
||||
shareTypes: [OC.Share.SHARE_TYPE_USER]
|
||||
}];
|
||||
});
|
||||
afterEach(function() {
|
||||
delete OCA.Sharing.sharesLoaded;
|
||||
delete OC.Share.droppedDown;
|
||||
fileList.destroy();
|
||||
fileList = null;
|
||||
});
|
||||
|
||||
describe('Sharing data in table row', function() {
|
||||
// TODO: test data-permissions, data-share-owner, etc
|
||||
});
|
||||
describe('Share action icon', function() {
|
||||
it('do not shows share text when not shared', function() {
|
||||
var $action, $tr;
|
||||
OC.Share.statuses = {};
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One',
|
||||
path: '/subdir',
|
||||
mimetype: 'httpd/unix-directory',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
etag: 'abc',
|
||||
shareTypes: []
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
$action = $tr.find('.action-share');
|
||||
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
|
||||
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
|
||||
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder.svg');
|
||||
});
|
||||
it('shows simple share text with share icon', function() {
|
||||
var $action, $tr;
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
etag: 'abc',
|
||||
shareTypes: [OC.Share.SHARE_TYPE_USER]
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
$action = $tr.find('.action-share');
|
||||
expect($action.find('>span').text().trim()).toEqual('Shared');
|
||||
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
|
||||
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
|
||||
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
|
||||
});
|
||||
it('shows simple share text with share icon when shared to a room', function() {
|
||||
var $action, $tr;
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
etag: 'abc',
|
||||
shareTypes: [OC.Share.SHARE_TYPE_ROOM]
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
$action = $tr.find('.action-share');
|
||||
expect($action.find('>span').text().trim()).toEqual('Shared');
|
||||
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
|
||||
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
|
||||
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
|
||||
});
|
||||
it('shows simple share text with public icon when shared with link', function() {
|
||||
var $action, $tr;
|
||||
OC.Share.statuses = {1: {link: true, path: '/subdir'}};
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
etag: 'abc',
|
||||
shareTypes: [OC.Share.SHARE_TYPE_LINK]
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
$action = $tr.find('.action-share');
|
||||
expect($action.find('>span').text().trim()).toEqual('Shared');
|
||||
expect($action.find('.icon').hasClass('icon-shared')).toEqual(false);
|
||||
expect($action.find('.icon').hasClass('icon-public')).toEqual(true);
|
||||
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-public.svg');
|
||||
});
|
||||
it('shows owner name when owner is available but no icons', function() {
|
||||
var $action, $tr;
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One.txt',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
shareOwner: 'User One',
|
||||
shareOwnerId: 'User One',
|
||||
etag: 'abc',
|
||||
shareTypes: []
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
$action = $tr.find('.action-share');
|
||||
expect($action.find('>span').text().trim()).toEqual('Shared by User One');
|
||||
expect($action.find('.icon').hasClass('icon-shared')).toEqual(false);
|
||||
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
|
||||
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
|
||||
});
|
||||
it('shows recipients when recipients are available', function() {
|
||||
var $action, $tr;
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One.txt',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_ALL,
|
||||
recipientsDisplayName: 'User One, User Two',
|
||||
recipientData: {
|
||||
0: {
|
||||
shareWith: 'User One',
|
||||
shareWithDisplayName: 'User One'
|
||||
},
|
||||
1: {
|
||||
shareWith: 'User Two',
|
||||
shareWithDisplayName: 'User Two'
|
||||
}
|
||||
},
|
||||
etag: 'abc',
|
||||
shareTypes: [OC.Share.SHARE_TYPE_USER]
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
$action = $tr.find('.action-share');
|
||||
expect($action.text().trim()).toEqual('Shared with User One Shared with User Two');
|
||||
expect($action.find('.icon').hasClass('icon-shared')).toEqual(true);
|
||||
expect($action.find('.icon').hasClass('icon-public')).toEqual(false);
|
||||
expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg');
|
||||
});
|
||||
it('shows share action when shared with user who has no share permission', function() {
|
||||
var $action, $tr;
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_CREATE,
|
||||
etag: 'abc',
|
||||
shareOwner: 'User One'
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
expect($tr.find('.action-share').length).toEqual(1);
|
||||
});
|
||||
it('do not show share action when share exists but neither permission nor owner is available', function() {
|
||||
var $action, $tr;
|
||||
fileList.setFiles([{
|
||||
id: 1,
|
||||
type: 'dir',
|
||||
name: 'One',
|
||||
path: '/subdir',
|
||||
mimetype: 'text/plain',
|
||||
size: 12,
|
||||
permissions: OC.PERMISSION_CREATE,
|
||||
etag: 'abc'
|
||||
}]);
|
||||
$tr = fileList.$el.find('tbody tr:first');
|
||||
expect($tr.find('.action-share').length).toEqual(0);
|
||||
});
|
||||
});
|
||||
describe('Excluded lists', function() {
|
||||
function createListThenAttach(listId) {
|
||||
var fileActions = new OCA.Files.FileActions();
|
||||
fileList.destroy();
|
||||
fileList = new OCA.Files.FileList(
|
||||
$('#listContainer'), {
|
||||
id: listId,
|
||||
fileActions: fileActions
|
||||
}
|
||||
);
|
||||
OCA.Sharing.Util.attach(fileList);
|
||||
fileList.setFiles(testFiles);
|
||||
return fileList;
|
||||
}
|
||||
|
||||
it('does not attach to trashbin or public file lists', function() {
|
||||
createListThenAttach('trashbin');
|
||||
expect($('.action-share').length).toEqual(0);
|
||||
expect($('[data-share-recipient]').length).toEqual(0);
|
||||
createListThenAttach('files.public');
|
||||
expect($('.action-share').length).toEqual(0);
|
||||
expect($('[data-share-recipient]').length).toEqual(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('ShareTabView interaction', function() {
|
||||
var shareTabSpy;
|
||||
var fileInfoModel;
|
||||
var configModel;
|
||||
var shareModel;
|
||||
|
||||
beforeEach(function() {
|
||||
shareTabSpy = sinon.spy(OCA.Sharing, 'ShareTabView');
|
||||
|
||||
var attributes = {
|
||||
itemType: 'file',
|
||||
itemSource: 123,
|
||||
possiblePermissions: 31,
|
||||
permissions: 31
|
||||
};
|
||||
fileInfoModel = new OCA.Files.FileInfoModel(testFiles[0]);
|
||||
configModel = new OC.Share.ShareConfigModel({
|
||||
enforcePasswordForPublicLink: false,
|
||||
isResharingAllowed: true,
|
||||
isDefaultExpireDateEnabled: false,
|
||||
isDefaultExpireDateEnforced: false,
|
||||
defaultExpireDate: 7
|
||||
});
|
||||
shareModel = new OC.Share.ShareItemModel(attributes, {
|
||||
configModel: configModel,
|
||||
fileInfoModel: fileInfoModel
|
||||
});
|
||||
|
||||
/* jshint camelcase: false */
|
||||
shareModel.set({
|
||||
reshare: {},
|
||||
shares: [{
|
||||
id: 100,
|
||||
item_source: 1,
|
||||
permissions: 31,
|
||||
share_type: OC.Share.SHARE_TYPE_USER,
|
||||
share_with: 'user1',
|
||||
share_with_displayname: 'User One'
|
||||
}, {
|
||||
id: 102,
|
||||
item_source: 1,
|
||||
permissions: 31,
|
||||
share_type: OC.Share.SHARE_TYPE_REMOTE,
|
||||
share_with: 'foo@bar.com/baz',
|
||||
share_with_displayname: 'foo@bar.com/baz'
|
||||
|
||||
}]
|
||||
}, {parse: true});
|
||||
|
||||
fileList.destroy();
|
||||
fileList = new OCA.Files.FileList(
|
||||
$('#listContainer'), {
|
||||
id: 'files',
|
||||
fileActions: new OCA.Files.FileActions()
|
||||
}
|
||||
);
|
||||
OCA.Sharing.Util.attach(fileList);
|
||||
fileList.setFiles(testFiles);
|
||||
});
|
||||
afterEach(function() {
|
||||
shareTabSpy.restore();
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue