Public share

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
John Molakvoæ (skjnldsv) 2018-07-19 10:04:37 +02:00
parent e951ad5034
commit c71d3dc9bf
No known key found for this signature in database
GPG Key ID: 60C25B8C072916CF
7 changed files with 326 additions and 387 deletions

View File

@ -33,9 +33,6 @@
padding: 14px;
}
.popovermenu {
&.socialSharingMenu {
right: -7px;
}
.clipboardButton {
position: relative;
top: initial;
@ -80,10 +77,22 @@
}
}
}
// fix for popover link share
&.share-note-link {
margin-bottom: 10px;
}
}
}
label {
white-space: nowrap;
.linkPass .icon-loading-small {
margin-right: 0px;
}
.icon {
background-size: 16px 16px;
}
.shareWithList .icon-loading-small:not(.hidden) + span,
.linkShareView .icon-loading-small:not(.hidden) + input + label:before {
/* Hide if loader is visible */
display: none !important;
}
input {
&[type='checkbox'] {
@ -92,19 +101,16 @@
}
&[type='text'] {
&.shareWithField,
&.emailField,
&.linkText {
&.emailField {
width: 100%;
box-sizing: border-box;
padding-right: 32px;
text-overflow: ellipsis;
}
}
&[type='password'] {
width: 100%;
box-sizing: border-box;
padding-right: 32px;
text-overflow: ellipsis;
&[type='text'].linkText
&[type='password'].linkPassText {
width: 180px !important;
}
}
form {
@ -114,71 +120,58 @@
}
}
/* fix the popup menu because the button is shifted and then the menu is not aligned */
// Sharing tab users list
#shareWithList {
list-style-type: none;
padding: 0 0 16px;
display: flex;
flex-direction: column;
> li {
padding-top: 5px;
padding-bottom: 5px;
height: 44px;
white-space: normal;
display: inline-flex;
align-items: center;
.avatar {
width: 32px;
height: 32px;
background-color: var(--color-background-darker);
}
}
.unshare img {
vertical-align: text-bottom;
/* properly align icons */
}
.sharingOptionsGroup {
> a .icon {
padding: 7px;
vertical-align: middle;
opacity: 0.5;
margin-left: auto;
display: flex;
align-items: center;
// can edit label
> .shareOption > label {
padding: 13px;
padding-right: 0;
}
.popovermenu:after {
right: 3px;
// more menu
> .share-menu {
position: relative;
display: block;
.icon-more {
padding: 14px;
height: 16px;
width: 16px;
opacity: .5;
display: block;
cursor: pointer;
}
&:hover,
&:focus,
&:active {
.icon-more {
opacity: .7;;
}
}
}
}
label input[type='checkbox'] {
margin-left: 0;
position: relative;
}
.username {
padding-right: 8px;
white-space: nowrap;
text-overflow: ellipsis;
display: inline-block;
overflow: hidden;
vertical-align: middle;
}
li .sharingOptionsGroup > .shareOption > label {
padding: 6px;
margin-right: 8px;
vertical-align: text-top;
}
}
.linkShareView {
margin-top: 16px;
}
.shareTabView {
.linkPass .icon-loading-small {
margin-right: 0px;
}
.icon {
background-size: 16px 16px;
}
.icon-loading-small {
display: inline-block;
z-index: 1;
vertical-align: text-top;
}
.shareWithList .icon-loading-small:not(.hidden) + span,
.linkShareView .icon-loading-small:not(.hidden) + input + label:before {
/* Hide if loader is visible */
display: none !important;
padding: 0 8px;
}
}

View File

@ -963,6 +963,7 @@ $popovericon-size: 16px;
> input.checkbox + label {
padding: 0 !important;
width: 100%;
white-space: nowrap;
}
> input.checkbox + label::before {
margin: -2px 13px 0;

View File

@ -1,204 +0,0 @@
/**
* @copyright Copyright (c) 2016, John Molakvoæ <skjnldsv@protonmail.com>
* @copyright Copyright (c) 2016, Morris Jobke <hey@morrisjobke.de>
* @copyright Copyright (c) 2016, Julia Bode <julia.bode@lulisaur.us>
* @copyright Copyright (c) 2016, Christoph Wurst <christoph@winzerhof-wurst.at>
* @copyright Copyright (c) 2015, Hendrik Leppelsack <hendrik@leppelsack.de>
* @copyright Copyright (c) 2015, Jan-Christoph Borchardt <hey@jancborchardt.net>
* @copyright Copyright (c) 2015, Vincent Petry <pvince81@owncloud.com>
* @copyright Copyright (c) 2015, Arthur Schiwon <blizzz@owncloud.com>
* @copyright Copyright (c) 2015, Roeland Jago Douma <roeland@famdouma.nl>
* @copyright Copyright (c) 2015, Morris Jobke <hey@morrisjobke.de>
*
* @license GNU AGPL version 3 or any later version
*
*/
/* SHARE TAB STYLING -------------------------------------------------------- */
.shareTabView {
.unshare.icon-loading-small {
margin-top: 1px;
}
.shareWithLoading, .linkShare .icon-loading-small {
display: inline-block !important;
padding-left: 10px;
}
.shareWithLoading {
position: relative;
right: 70px;
top: 2px;
}
.icon-loading-small.hidden {
display: none !important;
}
.avatar {
margin-right: 8px;
display: inline-block;
overflow: hidden;
vertical-align: middle;
width: 32px;
height: 32px;
}
label {
font-weight: 400;
white-space: nowrap;
}
input[type='radio'].radio + label {
margin-left: -1px;
}
input[type='checkbox'] {
margin: 0 3px 0 8px;
vertical-align: middle;
}
input[type='submit'] {
margin-left: 7px;
}
form {
font-size: 100%;
margin-left: 0;
margin-right: 0;
}
.error {
color: var(--color-error);
border-color: var(--color-error);
}
.mailView .icon-mail {
opacity: 0.5;
}
}
.share-autocomplete-item {
display: flex;
.autocomplete-item-text {
margin-left: 10px;
margin-right: 10px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
line-height: 32px;
vertical-align: middle;
}
}
.ui-autocomplete .autocomplete-note {
padding: 5px 10px;
color: rgba(0, 0, 0, .3);
}
#shareWithList {
list-style-type: none;
padding: 8px;
> li {
position: relative;
padding-top: 10px;
padding-bottom: 10px;
font-weight: bold;
line-height: 21px;
white-space: normal;
width: 100%;
}
.sharingOptionsGroup {
flex-shrink: 0;
position: relative;
.popovermenu {
right: -11px;
top: 35px;
}
}
.shareOption {
white-space: nowrap;
display: inline-block;
}
.unshare img {
vertical-align: text-bottom;
/* properly align icons */
}
label input[type=checkbox] {
margin-left: 0;
position: relative;
}
.username {
padding-right: 8px;
white-space: nowrap;
text-overflow: ellipsis;
display: inline-block;
overflow: hidden;
vertical-align: middle;
flex-grow: 5;
}
}
#link {
border-top: 1px solid var(--color-border);
padding-top: 8px;
#showPassword img {
padding-left: 5px;
width: 12px;
}
}
.reshare,
#link label,
#expiration label {
display: inline-block;
padding: 6px 4px;
}
.resharerInfoView.subView {
position: relative;
}
#defaultExpireMessage, .reshare {
/* fix shared by text going out of box */
white-space: normal;
}
#defaultExpireMessage {
/* show message on new line */
display: block;
padding-left: 4px;
/* TODO: style the dropdown in a proper way - border-box, etc. */
width: 90%;
}
.ui-autocomplete {
/* limit dropdown height to 4 1/2 entries */
max-height: 200px;
overflow-y: auto;
overflow-x: hidden;
}
.notCreatable {
padding-left: 12px;
padding-top: 12px;
color: var(--color-text-lighter);
}
.contactsmenu-popover {
left: -6px;
right: auto;
padding: 3px 6px;
top: 100%;
margin-top: 0;
li.hidden {
display: none !important;
}
&:after {
left: 8px;
right: auto;
}
}
.popovermenu .datepicker {
margin-left: 35px;
}
.popovermenu .passwordField {
margin-left: 35px;
width: inherit !important;
}
.ui-datepicker {
z-index: 1111 !important;
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 16 16" height="16" width="16"><path fill="#fff" d="m9.2363 2.166-3.1816 3.1836c-0.7071 0.7072-1.0378 1.6182-0.9883 2.457 0.05 0.8389 0.4333 1.5841 0.9883 2.1387l1.4121-1.416c-0.5672-0.5672-0.5444-1.2192 0.002-1.7656l3.1812-3.1817c0.52536-0.52536 1.2507-0.52318 1.772-0.002 0.48245 0.5556 0.52732 1.2382-0.004 1.7695l-0.82 0.8203c0.555 0.785 0.645 1.3663 0.593 2.2344l1.641-1.6406c1.2374-1.2374 1.2371-3.3645 0-4.6016-1.236-1.2361-3.342-1.2113-4.5957 0.004zm0.7071 3.8848-1.4141 1.418c0 0 0.003-00 0.004 0 0.55 0.55 0.50736 1.2582-0.004 1.7695l-3.1816 3.1817c-0.696 0.59192-1.2985 0.47105-1.7696 0-0.62636-0.62636-0.5-1.2681 0-1.768l0.85-0.8473c-0.556-0.7835-0.6484-1.365-0.5976-2.2324l-1.666 1.666c-1.2393 1.2393-1.2357 3.36 0 4.5957 1.2353 1.2353 3.362 1.2356 4.5976 0l3.1817-3.182c0.7086-0.7083 1.0396-1.6184 0.9906-2.4586-0.048-0.8401-0.432-1.5864-0.9887-2.1407z"/></svg>

After

Width:  |  Height:  |  Size: 942 B

View File

@ -21,76 +21,106 @@
var TEMPLATE =
'{{#if shareAllowed}}' +
'<span class="icon-loading-small hidden"></span>' +
'<input type="checkbox" name="linkCheckbox" id="linkCheckbox-{{cid}}" class="checkbox linkCheckbox" value="1" {{#if isLinkShare}}checked="checked"{{/if}} />' +
'<label for="linkCheckbox-{{cid}}">{{linkShareLabel}}</label>' +
'<br />' +
'<div class="oneline">' +
'<label for="linkText-{{cid}}" class="hidden-visually">{{urlLabel}}</label>' +
'<input id="linkText-{{cid}}" class="linkText {{#unless isLinkShare}}hidden{{/unless}}" type="text" readonly="readonly" value="{{shareLinkURL}}" />' +
'{{#if singleAction}}' +
'<a class="{{#unless isLinkShare}}hidden-visually{{/unless}} clipboardButton icon icon-clippy" data-clipboard-target="#linkText-{{cid}}"></a>' +
'{{else}}' +
'<a class="{{#unless isLinkShare}}hidden-visually{{/unless}}" href="#"><span class="linkMore icon icon-more"></span></a>' +
'{{{popoverMenu}}}' +
'{{/if}}' +
'</div>' +
'{{#if publicUpload}}' +
'<div>' +
'<span class="icon-loading-small hidden"></span>' +
'<input type="radio" name="publicUpload" value="{{publicUploadRValue}}" id="sharingDialogAllowPublicUpload-r-{{cid}}" class="radio publicUploadRadio" {{{publicUploadRChecked}}} />' +
'<label for="sharingDialogAllowPublicUpload-r-{{cid}}">{{publicUploadRLabel}}</label>' +
'</div>' +
'<div>' +
'<span class="icon-loading-small hidden"></span>' +
'<input type="radio" name="publicUpload" value="{{publicUploadRWValue}}" id="sharingDialogAllowPublicUpload-rw-{{cid}}" class="radio publicUploadRadio" {{{publicUploadRWChecked}}} />' +
'<label for="sharingDialogAllowPublicUpload-rw-{{cid}}">{{publicUploadRWLabel}}</label>' +
'</div>' +
'<div>' +
'<span class="icon-loading-small hidden"></span>' +
'<input type="radio" name="publicUpload" value="{{publicUploadWValue}}" id="sharingDialogAllowPublicUpload-w-{{cid}}" class="radio publicUploadRadio" {{{publicUploadWChecked}}} />' +
'<label for="sharingDialogAllowPublicUpload-w-{{cid}}">{{publicUploadWLabel}}</label>' +
'</div>' +
'{{/if}}' +
' {{#if publicEditing}}' +
'<div id="allowPublicEditingWrapper">' +
' <span class="icon-loading-small hidden"></span>' +
' <input type="checkbox" value="1" name="allowPublicEditing" id="sharingDialogAllowPublicEditing-{{cid}}" class="checkbox publicEditingCheckbox" {{{publicEditingChecked}}} />' +
'<label for="sharingDialogAllowPublicEditing-{{cid}}">{{publicEditingLabel}}</label>' +
'</div>' +
' {{/if}}' +
' {{#if showPasswordCheckBox}}' +
'<input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' +
'<label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' +
' {{/if}}' +
'<div id="linkPass" class="oneline linkPass {{#unless isPasswordSet}}hidden{{/unless}}">' +
' <label for="linkPassText-{{cid}}" class="hidden-visually">{{passwordLabel}}</label>' +
' {{#if showPasswordCheckBox}}' +
' <input id="linkPassText-{{cid}}" class="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" autocomplete="new-password" />' +
' {{else}}' +
' <input id="linkPassText-{{cid}}" class="linkPassText" type="password" placeholder="{{passwordPlaceholderInitial}}" autocomplete="new-password" />' +
' {{/if}}' +
' <span class="icon icon-loading-small hidden"></span>' +
'</div>' +
'<ul id="shareWithList" class="shareWithList">' +
' <li data-share-id="{{cid}}">' +
' <div class="avatar icon-public-white"></div><span class="username" title="{{linkShareLabel}}">{{linkShareLabel}}</span>' +
' <span class="sharingOptionsGroup">' +
' <span class="shareOption"> ' +
' <span class="icon-loading-small hidden"></span>' +
' <input id="linkCheckbox-{{cid}}" {{#if isLinkShare}}checked="checked"{{/if}} type="checkbox" name="linkCheckbox" class="linkCheckbox permissions checkbox">' +
' <label for="linkCheckbox-{{cid}}">{{linkShareEnableLabel}}</label>' +
' </span>' +
' {{#if isLinkShare}}' +
' <div class="share-menu" tabindex="0"><span class="icon icon-more"></span>' +
' {{{popoverMenu}}}' +
' </div>' +
' {{/if}}' +
' </span>' +
' </li>' +
'</ul>' +
'{{else}}' +
// FIXME: this doesn't belong in this view
'{{#if noSharingPlaceholder}}<input id="shareWith-{{cid}}" class="shareWithField" type="text" placeholder="{{noSharingPlaceholder}}" disabled="disabled"/>{{/if}}' +
'{{/if}}'
;
var TEMPLATE_POPOVER_MENU =
'<div class="popovermenu bubble hidden menu socialSharingMenu">' +
'<div class="popovermenu menu">' +
'<ul>' +
'<li>' +
'<a href="#" class="shareOption menuitem clipboardButton" data-clipboard-target="#linkText-{{cid}}">' +
'<a href="#" class="menuitem clipboardButton" data-clipboard-text="{{shareLinkURL}}">' +
'<span class="icon icon-clippy" ></span>' +
'<span>{{copyLabel}}</span>' +
'</a>' +
'</li>' +
'<li class="hidden linkTextMenu">' +
'<span class="menuitem icon-link-text">' +
'<input id="linkText-{{cid}}" class="linkText" type="text" readonly="readonly" value="{{shareLinkURL}}" />' +
'</span>' +
'</li>' +
'{{#if publicUpload}}' +
'<li><span class="shareOption menuitem">' +
'<span class="icon-loading-small hidden"></span>' +
'<input type="radio" name="publicUpload" value="{{publicUploadRValue}}" id="sharingDialogAllowPublicUpload-r-{{cid}}" class="radio publicUploadRadio" {{{publicUploadRChecked}}} />' +
'<label for="sharingDialogAllowPublicUpload-r-{{cid}}">{{publicUploadRLabel}}</label>' +
'</span></li>' +
'<li><span class="shareOption menuitem">' +
'<span class="icon-loading-small hidden"></span>' +
'<input type="radio" name="publicUpload" value="{{publicUploadRWValue}}" id="sharingDialogAllowPublicUpload-rw-{{cid}}" class="radio publicUploadRadio" {{{publicUploadRWChecked}}} />' +
'<label for="sharingDialogAllowPublicUpload-rw-{{cid}}">{{publicUploadRWLabel}}</label>' +
'</span></li>' +
'<li><span class="shareOption menuitem">' +
'<span class="icon-loading-small hidden"></span>' +
'<input type="radio" name="publicUpload" value="{{publicUploadWValue}}" id="sharingDialogAllowPublicUpload-w-{{cid}}" class="radio publicUploadRadio" {{{publicUploadWChecked}}} />' +
'<label for="sharingDialogAllowPublicUpload-w-{{cid}}">{{publicUploadWLabel}}</label>' +
'</span></li>' +
'{{/if}}' +
'{{#if publicEditing}}' +
' <li id="allowPublicEditingWrapper"><span class="shareOption menuitem">' +
' <span class="icon-loading-small hidden"></span>' +
' <input type="checkbox" name="allowPublicEditing" id="sharingDialogAllowPublicEditing-{{cid}}" class="checkbox publicEditingCheckbox" {{{publicEditingChecked}}} />' +
' <label for="sharingDialogAllowPublicEditing-{{cid}}">{{publicEditingLabel}}</label>' +
' </span></li>' +
'{{/if}}' +
'{{#if showPasswordCheckBox}}' +
' <li><span class="shareOption menuitem">' +
' <input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' +
' <label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' +
' </span></li>' +
' <li class="{{#unless isPasswordSet}}hidden{{/unless}} linkPassMenu"><span class="shareOption menuitem icon-share-pass">' +
' <input id="linkPassText-{{cid}}" class="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" autocomplete="new-password" />' +
' <span class="icon icon-loading-small hidden"></span>' +
' </span></li>' +
'{{/if}}' +
'<li>' +
'<span class="shareOption menuitem">' +
'<input id="expireDate-{{cid}}" type="checkbox" name="expirationDate" class="expireDate checkbox" {{#if hasExpireDate}}checked="checked"{{/if}}" />' +
'<label for="expireDate-{{cid}}">{{expireDateLabel}}</label>' +
'</li>' +
'<li class="{{#unless hasExpireDate}}hidden{{/unless}}">' +
'<span class="menuitem icon-expiredate expirationDateContainer-{{cid}}">' +
' <label for="expirationDatePicker-{{cid}}" class="hidden-visually" value="{{expirationDate}}">{{expirationLabel}}</label>' +
' <input id="expirationDatePicker-{{cid}}" class="datepicker" type="text" placeholder="{{expirationDatePlaceholder}}" value="{{#if hasExpireDate}}{{expireDate}}{{else}}{{defaultExpireDate}}{{/if}}" />' +
'</span>' +
'</span>' +
'</li>' +
'<li>' +
'<a href="#" class="share-add"><span class="icon-loading-small hidden"></span>' +
' <span class="icon icon-edit"></span>' +
' <span>{{addNoteLabel}}</span>' +
' <input type="button" class="share-note-delete icon-delete">' +
'</a>' +
'</li>' +
'<li class="share-note-form share-note-link hidden">' +
'<span class="menuitem icon-note">' +
' <textarea class="share-note">{{shareNote}}</textarea>' +
' <input type="submit" class="icon-confirm share-note-submit" value="" id="add-note-{{shareId}}" />' +
'</span>' +
'</li>' +
'{{#each social}}' +
'<li>' +
'<a href="#" class="shareOption menuitem pop-up" data-url="{{url}}" data-window="{{newWindow}}">' +
'<span class="icon {{iconClass}}"' +
'></span><span>{{label}}' +
'></inpu><span>{{label}}' +
'</span>' +
'</a>' +
'</li>' +
@ -131,9 +161,15 @@
'click .linkText': 'onLinkTextClick',
'change .publicEditingCheckbox': 'onAllowPublicEditingChange',
'click .showPasswordCheckbox': 'onShowPasswordClick',
'click .icon-more': 'onToggleMenu',
'click .share-menu .icon-more': 'onToggleMenu',
'click .pop-up': 'onPopUpClick',
'change .publicUploadRadio': 'onPublicUploadChange'
'change .publicUploadRadio': 'onPublicUploadChange',
'click .expireDate' : 'onExpireDateChange',
'change .datepicker': 'onChangeExpirationDate',
'click .datepicker' : 'showDatePicker',
'click .share-add': 'showNoteForm',
'click .share-note-delete': 'deleteNote',
'click .share-note-submit': 'updateNote'
},
initialize: function(options) {
@ -165,37 +201,26 @@
throw 'missing OC.Share.ShareConfigModel';
}
_.bindAll(
this,
'onLinkCheckBoxChange',
'onPasswordEntered',
'onPasswordKeyUp',
'onLinkTextClick',
'onShowPasswordClick',
'onAllowPublicEditingChange',
'onPublicUploadChange'
);
var clipboard = new Clipboard('.clipboardButton');
clipboard.on('success', function(e) {
var $input = $(e.trigger);
$input.tooltip('hide')
var $menu = $(e.trigger);
var $linkTextMenu = $menu.parent().next('li.linkTextMenu')
$menu.tooltip('hide')
.attr('data-original-title', t('core', 'Copied!'))
.tooltip('fixTitle')
.tooltip({placement: 'bottom', trigger: 'manual'})
.tooltip('show');
_.delay(function() {
$input.tooltip('hide');
if (OC.Share.Social.Collection.size() == 0) {
$input.attr('data-original-title', t('core', 'Copy'))
.tooltip('fixTitle');
} else {
$input.tooltip("destroy");
}
$menu.tooltip('hide');
$menu.tooltip('destroy');
}, 3000);
});
clipboard.on('error', function (e) {
var $input = $(e.trigger);
var $menu = $(e.trigger);
var $linkTextMenu = $menu.parent().next('li.linkTextMenu')
var $input = $linkTextMenu.find('.linkText');
var actionMsg = '';
if (/iPhone|iPad/i.test(navigator.userAgent)) {
actionMsg = t('core', 'Not supported!');
@ -205,6 +230,8 @@
actionMsg = t('core', 'Press Ctrl-C to copy.');
}
$linkTextMenu.removeClass('hidden');
$input.select();
$input.tooltip('hide')
.attr('data-original-title', actionMsg)
.tooltip('fixTitle')
@ -212,15 +239,10 @@
.tooltip('show');
_.delay(function () {
$input.tooltip('hide');
if (OC.Share.Social.Collection.size() == 0) {
$input.attr('data-original-title', t('core', 'Copy'))
.tooltip('fixTitle');
} else {
$input.tooltip("destroy");
}
$input.attr('data-original-title', t('core', 'Copy'))
.tooltip('fixTitle');
}, 3000);
});
},
onLinkCheckBoxChange: function() {
@ -257,6 +279,7 @@
onShowPasswordClick: function() {
this.$el.find('.linkPass').slideToggle(OC.menuSpeed);
this.$el.find('.linkPassMenu').toggleClass('hidden');
if(!this.$el.find('.showPasswordCheckbox').is(':checked')) {
this.model.saveLinkShare({
password: ''
@ -275,7 +298,7 @@
},
onPasswordEntered: function() {
var $loading = this.$el.find('.linkPass .icon-loading-small');
var $loading = this.$el.find('.linkPassMenu .icon-loading-small');
if (!$loading.hasClass('hidden')) {
// still in process
return;
@ -334,12 +357,94 @@
},
onPublicUploadChange: function(e) {
onPublicUploadChange: function(e) {
var permissions = e.currentTarget.value;
this.model.saveLinkShare({
permissions: permissions
});
},
showNoteForm(event) {
event.preventDefault();
event.stopPropagation();
var self = this;
var $element = $(event.target);
var $li = $element.closest('li[data-share-id]');
var $menu = $element.closest('li');
var $form = $menu.next('li.share-note-form');
// show elements
$menu.find('.share-note-delete').toggle();
$form.toggleClass('hidden');
},
deleteNote(event) {
event.preventDefault();
event.stopPropagation();
var self = this;
var $element = $(event.target);
var $li = $element.closest('li[data-share-id]');
var shareId = $li.data('share-id');
var $menu = $element.closest('li');
var $form = $menu.next('li.share-note-form');
console.log($form.find('.share-note'));
$form.find('.share-note').val('');
$form.addClass('hidden');
$menu.find('.share-note-delete').hide();
self.sendNote('', shareId, $menu);
},
updateNote(event) {
event.preventDefault();
event.stopPropagation();
var self = this;
var $element = $(event.target);
var $li = $element.closest('li[data-share-id]');
var shareId = $li.data('share-id');
var $form = $element.closest('li.share-note-form');
var $menu = $form.prev('li');
var message = $form.find('.share-note').val().trim();
if (message.length < 1) {
return;
}
self.sendNote(message, shareId, $menu);
},
sendNote(note, shareId, $menu) {
var $form = $menu.next('li.share-note-form');
var $submit = $form.find('input.share-note-submit');
var $error = $form.find('input.share-note-error');
$submit.prop('disabled', true);
$menu.find('.icon-loading-small').removeClass('hidden');
$menu.find('.icon-edit').hide();
var complete = function() {
$submit.prop('disabled', false);
$menu.find('.icon-loading-small').addClass('hidden');
$menu.find('.icon-edit').show();
};
var error = function() {
$error.show();
setTimeout(function() {
$error.hide();
}, 3000);
};
// send data
$.ajax({
method: 'PUT',
url: OC.linkToOCS('apps/files_sharing/api/v1/shares',2) + shareId + '?' + OC.buildQueryString({format: 'json'}),
data: { note: note },
complete : complete,
error: error
});
},
render: function() {
var linkShareTemplate = this.template();
@ -412,18 +517,20 @@
});
});
var popover = this.popoverMenuTemplate({
cid: this.cid,
copyLabel: t('core', 'Copy'),
social: social
});
var isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced');
var hasExpireDate = !!this.model.get('linkShare').expiration || isExpirationEnforced;
var expireDate;
if (hasExpireDate) {
expireDate = moment(this.model.get('linkShare').expiration, 'YYYY-MM-DD').format('DD-MM-YYYY');
}
var popover = this.popoverMenuTemplate({
cid: this.model.get('linkShare').id,
copyLabel: t('core', 'Copy URL'),
social: social,
this.$el.html(linkShareTemplate({
cid: this.cid,
shareAllowed: true,
isLinkShare: isLinkShare,
shareLinkURL: this.model.get('linkShare').link,
linkShareLabel: t('core', 'Share link'),
urlLabel: t('core', 'Link'),
enablePasswordLabel: t('core', 'Password protect'),
passwordLabel: t('core', 'Password'),
@ -437,8 +544,6 @@
publicEditingLabel: t('core', 'Allow editing'),
mailPrivatePlaceholder: t('core', 'Email link to person'),
mailButtonText: t('core', 'Send'),
singleAction: OC.Share.Social.Collection.size() == 0,
popoverMenu: popover,
publicUploadRWLabel: t('core', 'Allow upload and editing'),
publicUploadRLabel: t('core', 'Read only'),
publicUploadWLabel: t('core', 'File drop (upload only)'),
@ -447,16 +552,26 @@
publicUploadWValue: OC.PERMISSION_CREATE,
publicUploadRWChecked: publicUploadRWChecked,
publicUploadRChecked: publicUploadRChecked,
publicUploadWChecked: publicUploadWChecked
}));
publicUploadWChecked: publicUploadWChecked,
expireDateLabel: t('core', 'Set expiration date'),
expirationLabel: t('core', 'Expiration'),
expirationDatePlaceholder: t('core', 'Expiration date'),
hasExpireDate: hasExpireDate,
isExpirationEnforced: isExpirationEnforced,
expireDate: expireDate,
defaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today
shareNote: this.model.get('linkShare').note,
addNoteLabel: t('core', 'Set share note'),
});
if (OC.Share.Social.Collection.size() == 0) {
this.$el.find('.clipboardButton').tooltip({
placement: 'bottom',
title: t('core', 'Copy'),
trigger: 'hover'
});
}
this.$el.html(linkShareTemplate({
cid: this.model.get('linkShare').id,
shareAllowed: true,
isLinkShare: isLinkShare,
linkShareLabel: t('core', 'Share link'),
linkShareEnableLabel: t('core', 'Enable'),
popoverMenu: popover,
}));
this.delegateEvents();
@ -467,8 +582,8 @@
event.preventDefault();
event.stopPropagation();
var $element = $(event.target);
var $li = $element.closest('.oneline');
var $menu = $li.find('.popovermenu');
var $li = $element.closest('li[data-share-id]');
var $menu = $li.find('.sharingOptionsGroup .popovermenu');
OC.showMenu(null, $menu);
this._menuOpen = $li.data('share-id');
@ -517,7 +632,45 @@
window.location.href = url;
}
}
}
},
onExpireDateChange: function(event) {
var $element = $(event.target);
var datePickerClass = '.expirationDateContainer-' + this.cid;
var datePicker = $(datePickerClass);
var state = $element.prop('checked');
datePicker.toggleClass('hidden', !state);
if (!state) {
// disabled, let's hide the input and
// set the expireDate to nothing
$element.closest('li').next('li').addClass('hidden');
this.setExpirationDate('');
} else {
// enabled, show the input and the datepicker
$element.closest('li').next('li').removeClass('hidden');
this.showDatePicker(event);
}
},
showDatePicker: function(event) {
var expirationDatePicker = '#expirationDatePicker-' + this.cid;
var self = this;
$(expirationDatePicker).datepicker({
dateFormat : 'dd-mm-yy',
onSelect: function (expireDate) {
self.setExpirationDate(expireDate);
}
});
$(expirationDatePicker).focus();
},
setExpirationDate: function(expireDate) {
this.model.saveLinkShare({expireDate: expireDate});
},
});

View File

@ -34,8 +34,9 @@
'<label for="canEdit-{{cid}}-{{shareId}}">{{canEditLabel}}</label>' +
'</span>' +
'{{/if}}' +
'<a href="#"><span class="icon icon-more"></span></a>' +
'{{{popoverMenu}}}' +
'<div tabindex="0" class="share-menu"><span class="icon icon-more"></span>' +
'{{{popoverMenu}}}' +
'</div>' +
'</span>' +
'</li>' +
'{{/each}}' +
@ -167,14 +168,12 @@
/** @type {boolean|number} **/
_renderPermissionChange: false,
_noteView: undefined,
events: {
'click .unshare': 'onUnshare',
'click .share-add': 'showNoteForm',
'click .share-note-delete': 'deleteNote',
'click .share-note-submit': 'updateNote',
'click .icon-more': 'onToggleMenu',
'click .share-menu .icon-more': 'onToggleMenu',
'click .permissions': 'onPermissionChange',
'click .expireDate' : 'onExpireDateChange',
'click .password' : 'onMailSharePasswordProtectChange',
@ -196,8 +195,6 @@
this.model.on('change:shares', function() {
view.render();
});
this._noteView = options.parent.noteView;
},
/**
@ -498,10 +495,8 @@
showNoteForm(event) {
event.preventDefault();
event.stopPropagation();
var self = this;
var $element = $(event.target);
var $li = $element.closest('li[data-share-id]');
var shareId = $li.data('share-id');
var $menu = $element.closest('li');
var $form = $menu.next('li.share-note-form');
@ -522,6 +517,9 @@
console.log($form.find('.share-note'));
$form.find('.share-note').val('');
$form.addClass('hidden');
$menu.find('.share-note-delete').hide();
self.sendNote('', shareId, $menu);
},
@ -599,8 +597,6 @@
self.model.removeShare(shareId)
.done(function() {
$li.remove();
// remove note field on sucess
self._noteView.hide();
})
.fail(function() {
$loading.addClass('hidden');

View File

@ -27,7 +27,6 @@
'{{/if}}' +
'<div class="shareeListView subView"></div>' +
'<div class="linkShareView subView"></div>' +
'<div class="expirationView subView"></div>' +
'<div class="loading hidden" style="height: 50px"></div>';
/**