summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Reschke <lukas@statuscode.ch>2016-06-13 18:20:48 +0200
committerGitHub <noreply@github.com>2016-06-13 18:20:48 +0200
commitea0e443b881309825209f55b297f00c7d6a978e1 (patch)
tree3511e87fbe3fe55f88abf4fda133cc1eef189bbf
parent577cf920097d275eeab062e3364a75bb2a41901e (diff)
parentb6e102d3da777528435e1355a012b8441f42f77a (diff)
downloadnextcloud-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.yml6
-rw-r--r--build/package.json2
-rw-r--r--core/js/sharedialoglinkshareview.js77
-rw-r--r--core/js/shareitemmodel.js34
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
+})();