diff options
author | Lukas Reschke <lukas@statuscode.ch> | 2016-06-13 18:20:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-13 18:20:48 +0200 |
commit | ea0e443b881309825209f55b297f00c7d6a978e1 (patch) | |
tree | 3511e87fbe3fe55f88abf4fda133cc1eef189bbf | |
parent | 577cf920097d275eeab062e3364a75bb2a41901e (diff) | |
parent | b6e102d3da777528435e1355a012b8441f42f77a (diff) | |
download | nextcloud-server-ea0e443b881309825209f55b297f00c7d6a978e1.tar.gz nextcloud-server-ea0e443b881309825209f55b297f00c7d6a978e1.zip |
Merge pull request #72 from nextcloud/stable9-backport-33
[stable9] Add JS Unit tests
-rw-r--r-- | .drone.yml | 6 | ||||
-rw-r--r-- | build/package.json | 2 | ||||
-rw-r--r-- | core/js/sharedialoglinkshareview.js | 77 | ||||
-rw-r--r-- | core/js/shareitemmodel.js | 34 |
4 files changed, 102 insertions, 17 deletions
diff --git a/.drone.yml b/.drone.yml index bf993b99a70..bfd173c1347 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 f5a637171ed..df26ba97785 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" diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index dfc0b020818..369d9675ddf 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -47,8 +47,14 @@ ' <input id="linkPassText-{{cid}}" class="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" />' + ' <span class="icon-loading-small hidden"></span>' + '</div>' + + ' {{#if mailPublicNotificationEnabled}}' + + '<form id="emailPrivateLink" class="emailPrivateLinkForm">' + + ' <input id="email" class="emailField" value="{{email}}" placeholder="{{mailPrivatePlaceholder}}" type="text" />' + + ' <input id="emailButton" class="emailButton" type="submit" value="{{mailButtonText}}" />' + + '</form>' + + ' {{/if}}' + '{{else}}' + - // FIXME: this doesn't belong in this view + // FIXME: this doesn't belong in this view '{{#if noSharingPlaceholder}}<input id="shareWith-{{cid}}" class="shareWithField" type="text" placeholder="{{noSharingPlaceholder}}" disabled="disabled"/>{{/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 $('<li>') + .append('<a>' + escapeHTML(item.displayname) + "<br>" + escapeHTML(item.email) + '</a>' ) + .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 +})(); diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js index a3accb4f5dc..30def474401 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 +})(); |