aboutsummaryrefslogtreecommitdiffstats
path: root/core/js/share.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/js/share.js')
-rw-r--r--core/js/share.js245
1 files changed, 172 insertions, 73 deletions
diff --git a/core/js/share.js b/core/js/share.js
index 7968edebb7a..8e767663f12 100644
--- a/core/js/share.js
+++ b/core/js/share.js
@@ -10,30 +10,53 @@ OC.Share={
// Load all share icons
$.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getItemsSharedStatuses', itemType: itemType }, function(result) {
if (result && result.status === 'success') {
- $.each(result.data, function(item, hasPrivateLink) {
- // Private links override shared in terms of icon display
+ $.each(result.data, function(item, data) {
+ OC.Share.statuses[item] = data;
+ var hasLink = data['link'];
+ // Links override shared in terms of icon display
+ if (hasLink) {
+ var image = OC.imagePath('core', 'actions/public');
+ } else {
+ var image = OC.imagePath('core', 'actions/shared');
+ }
if (itemType != 'file' && itemType != 'folder') {
- if (hasPrivateLink) {
- var image = OC.imagePath('core', 'actions/public');
+ $('a.share[data-item="'+item+'"]').css('background', 'url('+image+') no-repeat center');
+ } else {
+ var file = $('tr').filterAttr('data-id', item);
+ if (file.length > 0) {
+ var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share');
+ var img = action.find('img').attr('src', image);
+ action.addClass('permanent');
+ action.html(' '+t('core', 'Shared')).prepend(img);
} else {
- var image = OC.imagePath('core', 'actions/shared');
+ var dir = $('#dir').val();
+ if (dir.length > 1) {
+ var last = '';
+ var path = dir;
+ // Search for possible parent folders that are shared
+ while (path != last) {
+ if (path == data['path']) {
+ var actions = $('.fileactions .action').filterAttr('data-action', 'Share');
+ $.each(actions, function(index, action) {
+ var img = $(action).find('img');
+ if (img.attr('src') != OC.imagePath('core', 'actions/public')) {
+ img.attr('src', image);
+ $(action).addClass('permanent');
+ $(action).html(' '+t('core', 'Shared')).prepend(img);
+ }
+ });
+ }
+ last = path;
+ path = OC.Share.dirname(path);
+ }
+ }
}
- $('a.share[data-item="'+item+'"]').css('background', 'url('+image+') no-repeat center');
}
- OC.Share.statuses[item] = hasPrivateLink;
});
}
});
},
updateIcon:function(itemType, itemSource) {
- if (itemType == 'file' || itemType == 'folder') {
- var filename = $('tr').filterAttr('data-id', String(itemSource)).data('file');
- if ($('#dir').val() == '/') {
- itemSource = $('#dir').val() + filename;
- } else {
- itemSource = $('#dir').val() + '/' + filename;
- }
- }
var shares = false;
var link = false;
var image = OC.imagePath('core', 'actions/share');
@@ -54,9 +77,22 @@ OC.Share={
});
if (itemType != 'file' && itemType != 'folder') {
$('a.share[data-item="'+itemSource+'"]').css('background', 'url('+image+') no-repeat center');
+ } else {
+ var file = $('tr').filterAttr('data-id', String(itemSource));
+ if (file.length > 0) {
+ var action = $(file).find('.fileactions .action').filterAttr('data-action', 'Share');
+ var img = action.find('img').attr('src', image);
+ if (shares) {
+ action.addClass('permanent');
+ action.html(' '+ escapeHTML(t('core', 'Shared'))).prepend(img);
+ } else {
+ action.removeClass('permanent');
+ action.html(' '+ escapeHTML(t('core', 'Share'))).prepend(img);
+ }
+ }
}
if (shares) {
- OC.Share.statuses[itemSource] = link;
+ OC.Share.statuses[itemSource]['link'] = link;
} else {
delete OC.Share.statuses[itemSource];
}
@@ -64,21 +100,7 @@ OC.Share={
loadItem:function(itemType, itemSource) {
var data = '';
var checkReshare = true;
- // Switch file sources to path to check if status is set
- if (itemType == 'file' || itemType == 'folder') {
- var filename = $('tr').filterAttr('data-id', String(itemSource)).data('file');
- if ($('#dir').val() == '/') {
- var item = $('#dir').val() + filename;
- } else {
- var item = $('#dir').val() + '/' + filename;
- }
- if (item.substring(0, 8) != '/Shared/') {
- checkReshare = false;
- }
- } else {
- var item = itemSource;
- }
- if (typeof OC.Share.statuses[item] === 'undefined') {
+ if (typeof OC.Share.statuses[itemSource] === 'undefined') {
// NOTE: Check does not always work and misses some shares, fix later
checkShares = true;
} else {
@@ -125,11 +147,11 @@ OC.Share={
showDropDown:function(itemType, itemSource, appendTo, link, possiblePermissions) {
var data = OC.Share.loadItem(itemType, itemSource);
var html = '<div id="dropdown" class="drop" data-item-type="'+itemType+'" data-item-source="'+itemSource+'">';
- if (data.reshare) {
+ if (data !== false && data.reshare !== false && data.reshare.uid_owner !== undefined) {
if (data.reshare.share_type == OC.Share.SHARE_TYPE_GROUP) {
- html += '<span class="reshare">'+t('core', 'Shared with you and the group')+' '+data.reshare.share_with+' '+t('core', 'by')+' '+data.reshare.uid_owner+'</span>';
+ html += '<span class="reshare">'+t('core', 'Shared with you and the group {group} by {owner}', {group: data.reshare.share_with, owner: data.reshare.displayname_owner})+'</span>';
} else {
- html += '<span class="reshare">'+t('core', 'Shared with you by')+' '+data.reshare.uid_owner+'</span>';
+ html += '<span class="reshare">'+t('core', 'Shared with you by {owner}', {owner: data.reshare.displayname_owner})+'</span>';
}
html += '<br />';
}
@@ -140,13 +162,17 @@ OC.Share={
if (link) {
html += '<div id="link">';
html += '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" /><label for="linkCheckbox">'+t('core', 'Share with link')+'</label>';
- html += '<a href="#" id="showPassword" style="display:none;"><img class="svg" alt="'+t('core', 'Password protect')+'" src="'+OC.imagePath('core', 'actions/lock')+'"/></a>';
html += '<br />';
html += '<input id="linkText" type="text" readonly="readonly" />';
+ html += '<input type="checkbox" name="showPassword" id="showPassword" value="1" style="display:none;" /><label for="showPassword" style="display:none;">'+t('core', 'Password protect')+'</label>';
html += '<div id="linkPass">';
html += '<input id="linkPassText" type="password" placeholder="'+t('core', 'Password')+'" />';
html += '</div>';
html += '</div>';
+ html += '<form id="emailPrivateLink" >';
+ html += '<input id="email" style="display:none; width:62%;" value="" placeholder="'+t('core', 'Email link to person')+'" type="text" />';
+ html += '<input id="emailButton" style="display:none;" type="submit" value="'+t('core', 'Send')+'" />';
+ html += '</form>';
}
html += '<div id="expiration">';
html += '<input type="checkbox" name="expirationCheckbox" id="expirationCheckbox" value="1" /><label for="expirationCheckbox">'+t('core', 'Set expiration date')+'</label>';
@@ -158,12 +184,12 @@ OC.Share={
if (data.shares) {
$.each(data.shares, function(index, share) {
if (share.share_type == OC.Share.SHARE_TYPE_LINK) {
- OC.Share.showLink(itemSource, share.share_with);
+ OC.Share.showLink(share.token, share.share_with, itemSource);
} else {
if (share.collection) {
- OC.Share.addShareWith(share.share_type, share.share_with, share.permissions, possiblePermissions, share.collection);
+ OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, share.collection);
} else {
- OC.Share.addShareWith(share.share_type, share.share_with, share.permissions, possiblePermissions, false);
+ OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, false);
}
}
if (share.expiration != null) {
@@ -171,7 +197,7 @@ OC.Share={
}
});
}
- $('#shareWith').autocomplete({minLength: 2, source: function(search, response) {
+ $('#shareWith').autocomplete({minLength: 1, source: function(search, response) {
// if (cache[search.term]) {
// response(cache[search.term]);
// } else {
@@ -203,7 +229,7 @@ OC.Share={
// Default permissions are Read and Share
var permissions = OC.PERMISSION_READ | OC.PERMISSION_SHARE;
OC.Share.share(itemType, itemSource, shareType, shareWith, permissions, function() {
- OC.Share.addShareWith(shareType, shareWith, permissions, possiblePermissions);
+ OC.Share.addShareWith(shareType, shareWith, selected.item.label, permissions, possiblePermissions);
$('#shareWith').val('');
OC.Share.updateIcon(itemType, itemSource);
});
@@ -232,7 +258,7 @@ OC.Share={
}
});
},
- addShareWith:function(shareType, shareWith, permissions, possiblePermissions, collection) {
+ addShareWith:function(shareType, shareWith, shareWithDisplayName, permissions, possiblePermissions, collection) {
if (!OC.Share.itemShares[shareType]) {
OC.Share.itemShares[shareType] = [];
}
@@ -247,7 +273,7 @@ OC.Share={
if (collectionList.length > 0) {
$(collectionList).append(', '+shareWith);
} else {
- var html = '<li style="clear: both;" data-collection="'+item+'">'+t('core', 'Shared in')+' '+item+' '+t('core', 'with')+' '+shareWith+'</li>';
+ var html = '<li style="clear: both;" data-collection="'+item+'">'+t('core', 'Shared in {item} with {user}', {'item': item, user: shareWithDisplayName})+'</li>';
$('#shareWithList').prepend(html);
}
} else {
@@ -267,12 +293,12 @@ OC.Share={
if (permissions & OC.PERMISSION_SHARE) {
shareChecked = 'checked="checked"';
}
- var html = '<li style="clear: both;" data-share-type="'+shareType+'" data-share-with="'+shareWith+'" title="' + shareWith + '">';
+ var html = '<li style="clear: both;" data-share-type="'+escapeHTML(shareType)+'" data-share-with="'+escapeHTML(shareWith)+'" title="' + escapeHTML(shareWith) + '">';
html += '<a href="#" class="unshare" style="display:none;"><img class="svg" alt="'+t('core', 'Unshare')+'" src="'+OC.imagePath('core', 'actions/delete')+'"/></a>';
if(shareWith.length > 14){
- html += shareWith.substr(0,11) + '...';
+ html += escapeHTML(shareWithDisplayName.substr(0,11) + '...');
}else{
- html += shareWith;
+ html += escapeHTML(shareWithDisplayName);
}
if (possiblePermissions & OC.PERMISSION_CREATE || possiblePermissions & OC.PERMISSION_UPDATE || possiblePermissions & OC.PERMISSION_DELETE) {
if (editChecked == '') {
@@ -302,31 +328,45 @@ OC.Share={
$('#expiration').show();
}
},
- showLink:function(itemSource, password) {
+ showLink:function(token, password, itemSource) {
OC.Share.itemShares[OC.Share.SHARE_TYPE_LINK] = true;
$('#linkCheckbox').attr('checked', true);
- var filename = $('tr').filterAttr('data-id', String(itemSource)).data('file');
- var type = $('tr').filterAttr('data-id', String(itemSource)).data('type');
- if ($('#dir').val() == '/') {
- var file = $('#dir').val() + filename;
+ if (! token) {
+ //fallback to pre token link
+ var filename = $('tr').filterAttr('data-id', String(itemSource)).data('file');
+ var type = $('tr').filterAttr('data-id', String(itemSource)).data('type');
+ if ($('#dir').val() == '/') {
+ var file = $('#dir').val() + filename;
+ } else {
+ var file = $('#dir').val() + '/' + filename;
+ }
+ file = '/'+OC.currentUser+'/files'+file;
+ var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&'+type+'='+encodeURIComponent(file);
} else {
- var file = $('#dir').val() + '/' + filename;
+ //TODO add path param when showing a link to file in a subfolder of a public link share
+ var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&t='+token;
}
- file = '/'+OC.currentUser+'/files'+file;
- var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&'+type+'='+file;
$('#linkText').val(link);
$('#linkText').show('blind');
+ $('#linkText').css('display','block');
$('#showPassword').show();
+ $('#showPassword+label').show();
if (password != null) {
$('#linkPass').show('blind');
+ $('#showPassword').attr('checked', true);
$('#linkPassText').attr('placeholder', t('core', 'Password protected'));
}
$('#expiration').show();
+ $('#emailPrivateLink #email').show();
+ $('#emailPrivateLink #emailButton').show();
},
hideLink:function() {
$('#linkText').hide('blind');
$('#showPassword').hide();
+ $('#showPassword+label').hide();
$('#linkPass').hide();
+ $('#emailPrivateLink #email').hide();
+ $('#emailPrivateLink #emailButton').hide();
},
dirname:function(path) {
return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, '');
@@ -343,8 +383,18 @@ OC.Share={
}
$(document).ready(function() {
-
- $('a.share').live('click', function(event) {
+
+ if(typeof monthNames != 'undefined'){
+ $.datepicker.setDefaults({
+ monthNames: monthNames,
+ monthNamesShort: $.map(monthNames, function(v) { return v.slice(0,3)+'.'; }),
+ dayNames: dayNames,
+ dayNamesMin: $.map(dayNames, function(v) { return v.slice(0,2); }),
+ dayNamesShort: $.map(dayNames, function(v) { return v.slice(0,3)+'.'; }),
+ firstDay: firstDay
+ });
+ }
+ $(document).on('click', 'a.share', function(event) {
event.stopPropagation();
if ($(this).data('item-type') !== undefined && $(this).data('item') !== undefined) {
var itemType = $(this).data('item-type');
@@ -378,12 +428,12 @@ $(document).ready(function() {
}
});
- $('#shareWithList li').live('mouseenter', function(event) {
+ $(document).on('mouseenter', '#dropdown #shareWithList li', function(event) {
// Show permissions and unshare button
$(':hidden', this).filter(':not(.cruds)').show();
});
- $('#shareWithList li').live('mouseleave', function(event) {
+ $(document).on('mouseleave', '#dropdown #shareWithList li', function(event) {
// Hide permissions and unshare button
if (!$('.cruds', this).is(':visible')) {
$('a', this).hide();
@@ -396,11 +446,11 @@ $(document).ready(function() {
}
});
- $('.showCruds').live('click', function() {
+ $(document).on('click', '#dropdown .showCruds', function() {
$(this).parent().find('.cruds').toggle();
});
- $('.unshare').live('click', function() {
+ $(document).on('click', '#dropdown .unshare', function() {
var li = $(this).parent();
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
@@ -417,7 +467,7 @@ $(document).ready(function() {
});
});
- $('.permissions').live('change', function() {
+ $(document).on('change', '#dropdown .permissions', function() {
if ($(this).attr('name') == 'edit') {
var li = $(this).parent().parent()
var checkboxes = $('.permissions', li);
@@ -430,10 +480,17 @@ $(document).ready(function() {
var li = $(this).parent().parent().parent();
var checkboxes = $('.permissions', li);
// Uncheck Edit if Create, Update, and Delete are not checked
- if (!$(this).is(':checked') && !$(checkboxes).filter('input[name="create"]').is(':checked') && !$(checkboxes).filter('input[name="update"]').is(':checked') && !$(checkboxes).filter('input[name="delete"]').is(':checked')) {
+ if (!$(this).is(':checked')
+ && !$(checkboxes).filter('input[name="create"]').is(':checked')
+ && !$(checkboxes).filter('input[name="update"]').is(':checked')
+ && !$(checkboxes).filter('input[name="delete"]').is(':checked'))
+ {
$(checkboxes).filter('input[name="edit"]').attr('checked', false);
// Check Edit if Create, Update, or Delete is checked
- } else if (($(this).attr('name') == 'create' || $(this).attr('name') == 'update' || $(this).attr('name') == 'delete')) {
+ } else if (($(this).attr('name') == 'create'
+ || $(this).attr('name') == 'update'
+ || $(this).attr('name') == 'delete'))
+ {
$(checkboxes).filter('input[name="edit"]').attr('checked', true);
}
}
@@ -441,16 +498,20 @@ $(document).ready(function() {
$(checkboxes).filter(':not(input[name="edit"])').filter(':checked').each(function(index, checkbox) {
permissions |= $(checkbox).data('permissions');
});
- OC.Share.setPermissions($('#dropdown').data('item-type'), $('#dropdown').data('item-source'), $(li).data('share-type'), $(li).data('share-with'), permissions);
+ OC.Share.setPermissions($('#dropdown').data('item-type'),
+ $('#dropdown').data('item-source'),
+ $(li).data('share-type'),
+ $(li).data('share-with'),
+ permissions);
});
- $('#linkCheckbox').live('change', function() {
+ $(document).on('change', '#dropdown #linkCheckbox', function() {
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
if (this.checked) {
// Create a link
- OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', OC.PERMISSION_READ, function() {
- OC.Share.showLink(itemSource);
+ OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', OC.PERMISSION_READ, function(data) {
+ OC.Share.showLink(data.token, null, itemSource);
OC.Share.updateIcon(itemType, itemSource);
});
} else {
@@ -466,27 +527,35 @@ $(document).ready(function() {
}
});
- $('#linkText').live('click', function() {
+ $(document).on('click', '#dropdown #linkText', function() {
$(this).focus();
$(this).select();
});
- $('#showPassword').live('click', function() {
+ $(document).on('click', '#dropdown #showPassword', function() {
$('#linkPass').toggle('blind');
+ if (!$('#showPassword').is(':checked') ) {
+ var itemType = $('#dropdown').data('item-type');
+ var itemSource = $('#dropdown').data('item-source');
+ OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', OC.PERMISSION_READ);
+ } else {
+ $('#linkPassText').focus();
+ }
});
- $('#linkPassText').live('keyup', function(event) {
- if (event.keyCode == 13) {
+ $(document).on('focusout keyup', '#dropdown #linkPassText', function(event) {
+ if ( $('#linkPassText').val() != '' && (event.type == 'focusout' || event.keyCode == 13) ) {
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
- OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, $(this).val(), OC.PERMISSION_READ, function() {
+ OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, $('#linkPassText').val(), OC.PERMISSION_READ, function() {
+ console.log("password set to: '" + $('#linkPassText').val() +"' by event: " + event.type);
$('#linkPassText').val('');
$('#linkPassText').attr('placeholder', t('core', 'Password protected'));
});
}
});
- $('#expirationCheckbox').live('click', function() {
+ $(document).on('click', '#dropdown #expirationCheckbox', function() {
if (this.checked) {
OC.Share.showExpirationDate('');
} else {
@@ -501,7 +570,7 @@ $(document).ready(function() {
}
});
- $('#expirationDate').live('change', function() {
+ $(document).on('change', '#dropdown #expirationDate', function() {
var itemType = $('#dropdown').data('item-type');
var itemSource = $('#dropdown').data('item-source');
$.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'setExpirationDate', itemType: itemType, itemSource: itemSource, date: $(this).val() }, function(result) {
@@ -511,4 +580,34 @@ $(document).ready(function() {
});
});
+
+ $(document).on('submit', '#dropdown #emailPrivateLink', function(event) {
+ event.preventDefault();
+ var link = $('#linkText').val();
+ var itemType = $('#dropdown').data('item-type');
+ var itemSource = $('#dropdown').data('item-source');
+ var file = $('tr').filterAttr('data-id', String(itemSource)).data('file');
+ var email = $('#email').val();
+ if (email != '') {
+ $('#email').attr('disabled', "disabled");
+ $('#email').val(t('core', 'Sending ...'));
+ $('#emailButton').attr('disabled', "disabled");
+
+ $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'email', toaddress: email, link: link, itemType: itemType, itemSource: itemSource, file: file},
+ function(result) {
+ $('#email').attr('disabled', "false");
+ $('#emailButton').attr('disabled', "false");
+ if (result && result.status == 'success') {
+ $('#email').css('font-weight', 'bold');
+ $('#email').animate({ fontWeight: 'normal' }, 2000, function() {
+ $(this).val('');
+ }).val(t('core','Email sent'));
+ } else {
+ OC.dialogs.alert(result.data.message, t('core', 'Error while sharing'));
+ }
+ });
+ }
+ });
+
+
});