From 74a93290aa2ca5c9916e5c105d8dcd0c1ace6f10 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 13 Jun 2016 11:37:36 +0200 Subject: [PATCH 1/4] Use proper PhantomJS library and run the tests as separate step * add dependency for phantomjs --- .drone.yml | 6 +++++- build/package.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index bf993b99a70b8..bfd173c134754 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,5 +1,9 @@ build: - backend: + jsunit: + image: morrisjobke/nextcloud-ci-jsunit:1.0.2 + commands: + - ./autotest-js.sh + sqlite: image: morrisjobke/nextcloud-ci-php7:1.0 commands: - git submodule update --init diff --git a/build/package.json b/build/package.json index f5a637171edff..df26ba977850e 100644 --- a/build/package.json +++ b/build/package.json @@ -16,7 +16,7 @@ "karma-junit-reporter": "*", "karma-coverage": "*", "karma-phantomjs-launcher": "*", - "phantomjs": "*", + "phantomjs-prebuilt": "*", "jasmine-core": "~2.3.4" }, "engine": "node >= 0.8" From 12df3eb71d63ca9dac61f8b353aa9d590c5f8f63 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 13 Jun 2016 16:28:52 +0200 Subject: [PATCH 2/4] fix unit tests --- core/js/sharedialoglinkshareview.js | 77 +++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 3 deletions(-) diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index dfc0b02081827..f3500cee0a369 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -42,13 +42,19 @@ '' + '' + ' {{/if}}' + + ' {{#if mailPublicNotificationEnabled}}' + + '' + + ' {{/if}}' + '
' + ' ' + ' ' + ' ' + '
' + '{{else}}' + - // FIXME: this doesn't belong in this view + // FIXME: this doesn't belong in this view '{{#if noSharingPlaceholder}}{{/if}}' + '{{/if}}' ; @@ -77,6 +83,7 @@ showLink: true, events: { + 'submit .emailPrivateLinkForm': '_onEmailPrivateLink', 'focusout input.linkPassText': 'onPasswordEntered', 'keyup input.linkPassText': 'onPasswordKeyUp', 'click .linkCheckbox': 'onLinkCheckBoxChange', @@ -117,6 +124,7 @@ _.bindAll( this, + '_onEmailPrivateLink', 'onLinkCheckBoxChange', 'onPasswordEntered', 'onPasswordKeyUp', @@ -237,9 +245,38 @@ }); }, + _onEmailPrivateLink: function(event) { + event.preventDefault(); + + var $emailField = this.$el.find('.emailField'); + var $emailButton = this.$el.find('.emailButton'); + var email = $emailField.val(); + if (email !== '') { + $emailField.prop('disabled', true); + $emailButton.prop('disabled', true); + $emailField.val(t('core', 'Sending ...')); + this.model.sendEmailPrivateLink(email).done(function() { + $emailField.css('font-weight', 'bold').val(t('core','Email sent')); + setTimeout(function() { + $emailField.val(''); + $emailField.css('font-weight', 'normal'); + $emailField.prop('disabled', false); + $emailButton.prop('disabled', false); + }, 2000); + }).fail(function() { + $emailField.val(email); + $emailField.css('font-weight', 'normal'); + $emailField.prop('disabled', false); + $emailButton.prop('disabled', false); + }); + } + return false; + }, + render: function() { var linkShareTemplate = this.template(); var resharingAllowed = this.model.sharePermissionPossible(); + var email = this.$el.find('.emailField').val(); if(!resharingAllowed || !this.showLink @@ -297,9 +334,43 @@ hideFileListLabel: t('core', 'Hide file listing'), mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(), mailPrivatePlaceholder: t('core', 'Email link to person'), - mailButtonText: t('core', 'Send') + mailButtonText: t('core', 'Send'), + email: email })); + var $emailField = this.$el.find('.emailField'); + if (isLinkShare && $emailField.length !== 0) { + $emailField.autocomplete({ + minLength: 1, + source: function (search, response) { + $.get( + OC.generateUrl('core/ajax/share.php'), { + fetch: 'getShareWithEmail', + search: search.term + }, function(result) { + if (result.status == 'success' && result.data.length > 0) { + response(result.data); + } + }); + }, + select: function( event, item ) { + $emailField.val(item.item.email); + return false; + } + }) + .data("ui-autocomplete")._renderItem = function( ul, item ) { + return $('
  • ') + .append('' + escapeHTML(item.displayname) + "
    " + escapeHTML(item.email) + '
    ' ) + .appendTo( ul ); + }; + } + + // TODO drop with IE8 drop + if($('html').hasClass('ie8')) { + this.$el.find('#linkPassText').removeAttr('placeholder'); + this.$el.find('#linkPassText').val(''); + } + this.delegateEvents(); return this; @@ -320,4 +391,4 @@ OC.Share.ShareDialogLinkShareView = ShareDialogLinkShareView; -})(); \ No newline at end of file +})(); From 0cbfdf7d8b1a186daa0435b40abc29b3546f46c6 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 13 Jun 2016 16:30:20 +0200 Subject: [PATCH 3/4] revert suspicious change - please check this @schiessle & @LukasReschke --- core/js/shareitemmodel.js | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index a3accb4f5dc60..30def474401d4 100644 --- a/core/js/shareitemmodel.js +++ b/core/js/shareitemmodel.js @@ -154,17 +154,21 @@ // Default permissions are Edit (CRUD) and Share // Check if these permissions are possible var permissions = OC.PERMISSION_READ; - if (this.updatePermissionPossible()) { - permissions = permissions | OC.PERMISSION_UPDATE; - } - if (this.createPermissionPossible()) { - permissions = permissions | OC.PERMISSION_CREATE; - } - if (this.deletePermissionPossible()) { - permissions = permissions | OC.PERMISSION_DELETE; - } - if (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) { - permissions = permissions | OC.PERMISSION_SHARE; + if (shareType === OC.Share.SHARE_TYPE_REMOTE) { + permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_READ; + } else { + if (this.updatePermissionPossible()) { + permissions = permissions | OC.PERMISSION_UPDATE; + } + if (this.createPermissionPossible()) { + permissions = permissions | OC.PERMISSION_CREATE; + } + if (this.deletePermissionPossible()) { + permissions = permissions | OC.PERMISSION_DELETE; + } + if (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) { + permissions = permissions | OC.PERMISSION_SHARE; + } } attributes.permissions = permissions; @@ -414,6 +418,12 @@ if(!_.isObject(share)) { throw "Unknown Share"; } + if( share.share_type === OC.Share.SHARE_TYPE_REMOTE + && ( permission === OC.PERMISSION_SHARE + || permission === OC.PERMISSION_DELETE)) + { + return false; + } return (share.permissions & permission) === permission; }, @@ -801,4 +811,4 @@ }); OC.Share.ShareItemModel = ShareItemModel; -})(); \ No newline at end of file +})(); From b6e102d3da777528435e1355a012b8441f42f77a Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 13 Jun 2016 16:39:24 +0200 Subject: [PATCH 4/4] place password input directly below label --- core/js/sharedialoglinkshareview.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index f3500cee0a369..369d9675ddfa5 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -42,17 +42,17 @@ '' + '' + ' {{/if}}' + + '
    ' + + ' ' + + ' ' + + ' ' + + '
    ' + ' {{#if mailPublicNotificationEnabled}}' + '' + ' {{/if}}' + - '
    ' + - ' ' + - ' ' + - ' ' + - '
    ' + '{{else}}' + // FIXME: this doesn't belong in this view '{{#if noSharingPlaceholder}}{{/if}}' +