summaryrefslogtreecommitdiffstats
path: root/core/js/sharedialogshareelistview.js
diff options
context:
space:
mode:
Diffstat (limited to 'core/js/sharedialogshareelistview.js')
-rw-r--r--core/js/sharedialogshareelistview.js777
1 files changed, 0 insertions, 777 deletions
diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
deleted file mode 100644
index 5fdb352fd50..00000000000
--- a/core/js/sharedialogshareelistview.js
+++ /dev/null
@@ -1,777 +0,0 @@
-/* eslint-disable */
-/* global OC, Handlebars */
-
-/*
- * Copyright (c) 2015
- *
- * This file is licensed under the Affero General Public License version 3
- * or later.
- *
- * See the COPYING-README file.
- *
- */
-
-/* globals Handlebars */
-
-(function() {
-
- var PASSWORD_PLACEHOLDER = '**********'
- var PASSWORD_PLACEHOLDER_MESSAGE = t('core', 'Choose a password for the mail share')
-
- if (!OC.Share) {
- OC.Share = {}
- }
-
- /**
- * @class OCA.Share.ShareDialogShareeListView
- * @member {OC.Share.ShareItemModel} model
- * @member {jQuery} $el
- * @memberof OCA.Sharing
- * @classdesc
- *
- * Represents the sharee list part in the GUI of the share dialogue
- *
- */
- var ShareDialogShareeListView = OC.Backbone.View.extend({
- /** @type {string} **/
- id: 'shareDialogLinkShare',
-
- /** @type {OC.Share.ShareConfigModel} **/
- configModel: undefined,
-
- _menuOpen: false,
-
- /** @type {boolean|number} **/
- _renderPermissionChange: false,
-
- events: {
- 'click .unshare': 'onUnshare',
- 'click .share-add': 'showNoteForm',
- 'click .share-note-delete': 'deleteNote',
- 'click .share-note-submit': 'updateNote',
- 'click .share-menu .icon-more': 'onToggleMenu',
- 'click .permissions': 'onPermissionChange',
- 'click .expireDate': 'onExpireDateChange',
- 'click .password': 'onMailSharePasswordProtectChange',
- 'click .passwordByTalk': 'onMailSharePasswordProtectByTalkChange',
- 'click .secureDrop': 'onSecureDropChange',
- 'keyup input.passwordField': 'onMailSharePasswordKeyUp',
- 'focusout input.passwordField': 'onMailSharePasswordEntered',
- 'change .datepicker': 'onChangeExpirationDate',
- 'click .datepicker': 'showDatePicker'
- },
-
- initialize: function(options) {
- if (!_.isUndefined(options.configModel)) {
- this.configModel = options.configModel
- } else {
- throw 'missing OC.Share.ShareConfigModel'
- }
-
- var view = this
- this.model.on('change:shares', function() {
- view.render()
- })
- },
-
- /**
- *
- * @param {OC.Share.Types.ShareInfo} shareInfo
- * @returns {object}
- */
- getShareeObject: function(shareIndex) {
- var shareWith = this.model.getShareWith(shareIndex)
- var shareWithDisplayName = this.model.getShareWithDisplayName(shareIndex)
- var shareWithAvatar = this.model.getShareWithAvatar(shareIndex)
- var shareWithTitle = ''
- var shareType = this.model.getShareType(shareIndex)
- var sharedBy = this.model.getSharedBy(shareIndex)
- var sharedByDisplayName = this.model.getSharedByDisplayName(shareIndex)
- var fileOwnerUid = this.model.getFileOwnerUid(shareIndex)
-
- var hasPermissionOverride = {}
- if (shareType === OC.Share.SHARE_TYPE_GROUP) {
- shareWithDisplayName = shareWithDisplayName + ' (' + t('core', 'group') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {
- shareWithDisplayName = shareWithDisplayName + ' (' + t('core', 'remote') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {
- shareWithDisplayName = shareWithDisplayName + ' (' + t('core', 'remote group') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {
- shareWithDisplayName = shareWithDisplayName + ' (' + t('core', 'email') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {
- } else if (shareType === OC.Share.SHARE_TYPE_ROOM) {
- shareWithDisplayName = shareWithDisplayName + ' (' + t('core', 'conversation') + ')'
- }
-
- if (shareType === OC.Share.SHARE_TYPE_GROUP) {
- shareWithTitle = shareWith + ' (' + t('core', 'group') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_REMOTE) {
- shareWithTitle = shareWith + ' (' + t('core', 'remote') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {
- shareWithTitle = shareWith + ' (' + t('core', 'remote group') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_EMAIL) {
- shareWithTitle = shareWith + ' (' + t('core', 'email') + ')'
- } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) {
- shareWithTitle = shareWith
- // Force "shareWith" in the template to a safe value, as the
- // original "shareWith" returned by the model may contain
- // problematic characters like "'".
- shareWith = 'circle-' + shareIndex
- }
-
- if (sharedBy !== OC.getCurrentUser().uid) {
- var empty = shareWithTitle === ''
- if (!empty) {
- shareWithTitle += ' ('
- }
- shareWithTitle += t('core', 'shared by {sharer}', { sharer: sharedByDisplayName })
- if (!empty) {
- shareWithTitle += ')'
- }
- }
-
- var share = this.model.get('shares')[shareIndex]
- var password = share.password
- var hasPassword = password !== null && password !== ''
- var sendPasswordByTalk = share.send_password_by_talk
-
- var shareNote = this.model.getNote(shareIndex)
-
- return _.extend(hasPermissionOverride, {
- cid: this.cid,
- hasSharePermission: this.model.hasSharePermission(shareIndex),
- editPermissionState: this.model.editPermissionState(shareIndex),
- hasCreatePermission: this.model.hasCreatePermission(shareIndex),
- hasUpdatePermission: this.model.hasUpdatePermission(shareIndex),
- hasDeletePermission: this.model.hasDeletePermission(shareIndex),
- sharedBy: sharedBy,
- sharedByDisplayName: sharedByDisplayName,
- shareWith: shareWith,
- shareWithDisplayName: shareWithDisplayName,
- shareWithAvatar: shareWithAvatar,
- shareWithTitle: shareWithTitle,
- shareType: shareType,
- shareId: this.model.get('shares')[shareIndex].id,
- modSeed: shareWithAvatar || (shareType !== OC.Share.SHARE_TYPE_USER && shareType !== OC.Share.SHARE_TYPE_CIRCLE && shareType !== OC.Share.SHARE_TYPE_ROOM),
- owner: fileOwnerUid,
- isShareWithCurrentUser: (shareType === OC.Share.SHARE_TYPE_USER && shareWith === OC.getCurrentUser().uid),
- canUpdateShareSettings: (sharedBy === OC.getCurrentUser().uid || fileOwnerUid === OC.getCurrentUser().uid),
- isRemoteShare: shareType === OC.Share.SHARE_TYPE_REMOTE,
- isRemoteGroupShare: shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP,
- isNoteAvailable: shareType !== OC.Share.SHARE_TYPE_REMOTE && shareType !== OC.Share.SHARE_TYPE_REMOTE_GROUP,
- isMailShare: shareType === OC.Share.SHARE_TYPE_EMAIL,
- isCircleShare: shareType === OC.Share.SHARE_TYPE_CIRCLE,
- isFileSharedByMail: shareType === OC.Share.SHARE_TYPE_EMAIL && !this.model.isFolder(),
- isPasswordSet: hasPassword && !sendPasswordByTalk,
- isPasswordByTalkSet: hasPassword && sendPasswordByTalk,
- isTalkEnabled: OC.appswebroots['spreed'] !== undefined,
- secureDropMode: !this.model.hasReadPermission(shareIndex),
- hasExpireDate: this.model.getExpireDate(shareIndex) !== null,
- shareNote: shareNote,
- hasNote: shareNote !== '',
- expireDate: moment(this.model.getExpireDate(shareIndex), 'YYYY-MM-DD').format('DD-MM-YYYY'),
- // The password placeholder does not take into account if
- // sending the password by Talk is enabled or not; when
- // switching from sending the password by Talk to sending the
- // password by email the password is reused and the share
- // updated, so the placeholder already shows the password in the
- // brief time between disabling sending the password by email
- // and receiving the updated share.
- passwordPlaceholder: hasPassword ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE,
- passwordByTalkPlaceholder: (hasPassword && sendPasswordByTalk) ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE
- })
- },
-
- getShareProperties: function() {
- return {
- unshareLabel: t('core', 'Unshare'),
- addNoteLabel: t('core', 'Note to recipient'),
- canShareLabel: t('core', 'Can reshare'),
- canEditLabel: t('core', 'Can edit'),
- createPermissionLabel: t('core', 'Can create'),
- updatePermissionLabel: t('core', 'Can change'),
- deletePermissionLabel: t('core', 'Can delete'),
- secureDropLabel: t('core', 'File drop (upload only)'),
- expireDateLabel: t('core', 'Set expiration date'),
- passwordLabel: t('core', 'Password protect'),
- passwordByTalkLabel: t('core', 'Password protect by Talk'),
- crudsLabel: t('core', 'Access control'),
- expirationDatePlaceholder: t('core', 'Expiration date'),
- defaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today
- triangleSImage: OC.imagePath('core', 'actions/triangle-s'),
- isResharingAllowed: this.configModel.get('isResharingAllowed'),
- isPasswordForMailSharesRequired: this.configModel.get('isPasswordForMailSharesRequired'),
- sharePermissionPossible: this.model.sharePermissionPossible(),
- editPermissionPossible: this.model.editPermissionPossible(),
- createPermissionPossible: this.model.createPermissionPossible(),
- updatePermissionPossible: this.model.updatePermissionPossible(),
- deletePermissionPossible: this.model.deletePermissionPossible(),
- sharePermission: OC.PERMISSION_SHARE,
- createPermission: OC.PERMISSION_CREATE,
- updatePermission: OC.PERMISSION_UPDATE,
- deletePermission: OC.PERMISSION_DELETE,
- readPermission: OC.PERMISSION_READ,
- isFolder: this.model.isFolder()
- }
- },
-
- /**
- * get an array of sharees' share properties
- *
- * @returns {Array}
- */
- getShareeList: function() {
- var universal = this.getShareProperties()
-
- if (!this.model.hasUserShares()) {
- return []
- }
-
- var shares = this.model.get('shares')
- var list = []
- for (var index = 0; index < shares.length; index++) {
- var share = this.getShareeObject(index)
-
- if (share.shareType === OC.Share.SHARE_TYPE_LINK) {
- continue
- }
- // first empty {} is necessary, otherwise we get in trouble
- // with references
- list.push(_.extend({}, universal, share))
- }
-
- return list
- },
-
- getLinkReshares: function() {
- var universal = {
- unshareLabel: t('core', 'Unshare')
- }
-
- if (!this.model.hasUserShares()) {
- return []
- }
-
- var shares = this.model.get('shares')
- var list = []
- for (var index = 0; index < shares.length; index++) {
- var share = this.getShareeObject(index)
-
- if (share.shareType !== OC.Share.SHARE_TYPE_LINK) {
- continue
- }
- // first empty {} is necessary, otherwise we get in trouble
- // with references
- list.push(_.extend({}, universal, share, {
- shareInitiator: shares[index].uid_owner,
- shareInitiatorText: t('core', '{shareInitiatorDisplayName} shared via link', { shareInitiatorDisplayName: shares[index].displayname_owner })
- }))
- }
-
- return list
- },
-
- render: function() {
- if (!this._renderPermissionChange) {
- this.$el.html(this.template({
- cid: this.cid,
- sharees: this.getShareeList(),
- linkReshares: this.getLinkReshares()
- }))
-
- this.$('.avatar').each(function() {
- var $this = $(this)
-
- if ($this.hasClass('imageplaceholderseed')) {
- $this.css({ width: 32, height: 32 })
- if ($this.data('avatar')) {
- $this.css('border-radius', '0%')
- $this.css('background', 'url(' + $this.data('avatar') + ') no-repeat')
- $this.css('background-size', '31px')
- } else {
- $this.imageplaceholder($this.data('seed'))
- }
- } else {
- // user, size, ie8fix, hidedefault, callback, displayname
- $this.avatar($this.data('username'), 32, undefined, undefined, undefined, $this.data('displayname'))
- }
- })
-
- this.$('.has-tooltip').tooltip({
- placement: 'bottom'
- })
-
- this.$('ul.shareWithList > li').each(function() {
- var $this = $(this)
-
- var shareWith = $this.data('share-with')
- var shareType = $this.data('share-type')
-
- $this.find('div.avatar, span.username').contactsMenu(shareWith, shareType, $this)
- })
- } else {
- var permissionChangeShareId = parseInt(this._renderPermissionChange, 10)
- var shareWithIndex = this.model.findShareWithIndex(permissionChangeShareId)
- var sharee = this.getShareeObject(shareWithIndex)
- $.extend(sharee, this.getShareProperties())
- var $li = this.$('li[data-share-id=' + permissionChangeShareId + ']')
- $li.find('.sharingOptionsGroup .popovermenu').replaceWith(this.popoverMenuTemplate(sharee))
- }
-
- var _this = this
- this.getShareeList().forEach(function(sharee) {
- var $edit = _this.$('#canEdit-' + _this.cid + '-' + sharee.shareId)
- if ($edit.length === 1) {
- $edit.prop('checked', sharee.editPermissionState === 'checked')
- if (sharee.isFolder) {
- $edit.prop('indeterminate', sharee.editPermissionState === 'indeterminate')
- }
- }
- })
- this.$('.popovermenu').on('afterHide', function() {
- _this._menuOpen = false
- })
- this.$('.popovermenu').on('beforeHide', function() {
- var shareId = parseInt(_this._menuOpen, 10)
- if (!_.isNaN(shareId)) {
- var datePickerClass = '.expirationDateContainer-' + _this.cid + '-' + shareId
- var datePickerInput = '#expirationDatePicker-' + _this.cid + '-' + shareId
- var expireDateCheckbox = '#expireDate-' + _this.cid + '-' + shareId
- if ($(expireDateCheckbox).prop('checked')) {
- $(datePickerInput).removeClass('hidden-visually')
- $(datePickerClass).removeClass('hasDatepicker')
- $(datePickerClass + ' .ui-datepicker').hide()
- }
- }
- })
- if (this._menuOpen !== false) {
- // Open menu again if it was opened before
- var shareId = parseInt(this._menuOpen, 10)
- if (!_.isNaN(shareId)) {
- var liSelector = 'li[data-share-id=' + shareId + ']'
- OC.showMenu(null, this.$(liSelector + ' .sharingOptionsGroup .popovermenu'))
- }
- }
-
- this._renderPermissionChange = false
-
- // new note autosize
- autosize(this.$el.find('.share-note-form .share-note'))
-
- this.delegateEvents()
-
- return this
- },
-
- /**
- * @returns {Function} from Handlebars
- * @private
- */
- template: function(data) {
- var sharees = data.sharees
- if (_.isArray(sharees)) {
- for (var i = 0; i < sharees.length; i++) {
- data.sharees[i].popoverMenu = this.popoverMenuTemplate(sharees[i])
- }
- }
- return OC.Share.Templates['sharedialogshareelistview'](data)
- },
-
- /**
- * renders the popover template and returns the resulting HTML
- *
- * @param {Object} data
- * @returns {string}
- */
- popoverMenuTemplate: function(data) {
- return OC.Share.Templates['sharedialogshareelistview_popover_menu'](data)
- },
-
- showNoteForm: function(event) {
- event.preventDefault()
- event.stopPropagation()
- var $element = $(event.target)
- var $menu = $element.closest('li')
- var $form = $menu.next('li.share-note-form')
-
- // show elements
- $menu.find('.share-note-delete').toggleClass('hidden')
- $form.toggleClass('hidden')
- $form.find('textarea').focus()
- },
-
- deleteNote: function(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').addClass('hidden')
-
- self.sendNote('', shareId, $menu)
- },
-
- updateNote: function(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: function(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
- })
- },
-
- onUnshare: function(event) {
- event.preventDefault()
- event.stopPropagation()
- var self = this
- var $element = $(event.target)
- if (!$element.is('a')) {
- $element = $element.closest('a')
- }
-
- var $loading = $element.find('.icon-loading-small').eq(0)
- if (!$loading.hasClass('hidden')) {
- // in process
- return false
- }
- $loading.removeClass('hidden')
-
- var $li = $element.closest('li[data-share-id]')
-
- var shareId = $li.data('share-id')
-
- self.model.removeShare(shareId)
- .done(function() {
- $li.remove()
- })
- .fail(function() {
- $loading.addClass('hidden')
- OC.Notification.showTemporary(t('core', 'Could not unshare'))
- })
- return false
- },
-
- onToggleMenu: function(event) {
- event.preventDefault()
- event.stopPropagation()
- var $element = $(event.target)
- var $li = $element.closest('li[data-share-id]')
- var $menu = $li.find('.sharingOptionsGroup .popovermenu')
-
- OC.showMenu(null, $menu)
- this._menuOpen = $li.data('share-id')
- },
-
- onExpireDateChange: function(event) {
- var $element = $(event.target)
- var li = $element.closest('li[data-share-id]')
- var shareId = li.data('share-id')
- var datePickerClass = '.expirationDateContainer-' + this.cid + '-' + shareId
- 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(shareId, '')
- } else {
- // enabled, show the input and the datepicker
- $element.closest('li').next('li').removeClass('hidden')
- this.showDatePicker(event)
-
- }
- },
-
- showDatePicker: function(event) {
- var element = $(event.target)
- var li = element.closest('li[data-share-id]')
- var shareId = li.data('share-id')
- var expirationDatePicker = '#expirationDatePicker-' + this.cid + '-' + shareId
- var view = this
- $(expirationDatePicker).datepicker({
- dateFormat: 'dd-mm-yy',
- onSelect: function(expireDate) {
- view.setExpirationDate(shareId, expireDate)
- }
- })
- $(expirationDatePicker).focus()
-
- },
-
- setExpirationDate: function(shareId, expireDate) {
- this.model.updateShare(shareId, { expireDate: expireDate }, {})
- },
-
- onMailSharePasswordProtectChange: function(event) {
- var element = $(event.target)
- var li = element.closest('li[data-share-id]')
- var shareId = li.data('share-id')
- var passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId
- var passwordContainer = $(passwordContainerClass)
- var loading = this.$el.find(passwordContainerClass + ' .icon-loading-small')
- var inputClass = '#passwordField-' + this.cid + '-' + shareId
- var passwordField = $(inputClass)
- var state = element.prop('checked')
- var passwordByTalkElement = $('#passwordByTalk-' + this.cid + '-' + shareId)
- var passwordByTalkState = passwordByTalkElement.prop('checked')
- if (!state && !passwordByTalkState) {
- this.model.updateShare(shareId, { password: '', sendPasswordByTalk: false })
- passwordField.attr('value', '')
- passwordField.removeClass('error')
- passwordField.tooltip('hide')
- loading.addClass('hidden')
- passwordField.attr('placeholder', PASSWORD_PLACEHOLDER_MESSAGE)
- // We first need to reset the password field before we hide it
- passwordContainer.toggleClass('hidden', !state)
- } else if (state) {
- if (passwordByTalkState) {
- // Switching from sending the password by Talk to sending
- // the password by mail can be done keeping the previous
- // password sent by Talk.
- this.model.updateShare(shareId, { sendPasswordByTalk: false })
-
- var passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId
- var passwordByTalkContainer = $(passwordByTalkContainerClass)
- passwordByTalkContainer.addClass('hidden')
- passwordByTalkElement.prop('checked', false)
- }
-
- passwordContainer.toggleClass('hidden', !state)
- passwordField = '#passwordField-' + this.cid + '-' + shareId
- this.$(passwordField).focus()
- }
- },
-
- onMailSharePasswordProtectByTalkChange: function(event) {
- var element = $(event.target)
- var li = element.closest('li[data-share-id]')
- var shareId = li.data('share-id')
- var passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId
- var passwordByTalkContainer = $(passwordByTalkContainerClass)
- var loading = this.$el.find(passwordByTalkContainerClass + ' .icon-loading-small')
- var inputClass = '#passwordByTalkField-' + this.cid + '-' + shareId
- var passwordByTalkField = $(inputClass)
- var state = element.prop('checked')
- var passwordElement = $('#password-' + this.cid + '-' + shareId)
- var passwordState = passwordElement.prop('checked')
- if (!state) {
- this.model.updateShare(shareId, { password: '', sendPasswordByTalk: false })
- passwordByTalkField.attr('value', '')
- passwordByTalkField.removeClass('error')
- passwordByTalkField.tooltip('hide')
- loading.addClass('hidden')
- passwordByTalkField.attr('placeholder', PASSWORD_PLACEHOLDER_MESSAGE)
- // We first need to reset the password field before we hide it
- passwordByTalkContainer.toggleClass('hidden', !state)
- } else if (state) {
- if (passwordState) {
- // Enabling sending the password by Talk requires a new
- // password to be given (the one sent by mail is not reused,
- // as it would defeat the purpose of checking the identity
- // of the sharee by Talk if it was already sent by mail), so
- // the share is not updated until the user explicitly gives
- // the new password.
-
- var passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId
- var passwordContainer = $(passwordContainerClass)
- passwordContainer.addClass('hidden')
- passwordElement.prop('checked', false)
- }
-
- passwordByTalkContainer.toggleClass('hidden', !state)
- passwordByTalkField = '#passwordByTalkField-' + this.cid + '-' + shareId
- this.$(passwordByTalkField).focus()
- }
- },
-
- onMailSharePasswordKeyUp: function(event) {
- if (event.keyCode === 13) {
- this.onMailSharePasswordEntered(event)
- }
- },
-
- onMailSharePasswordEntered: function(event) {
- var passwordField = $(event.target)
- var li = passwordField.closest('li[data-share-id]')
- var shareId = li.data('share-id')
- var passwordContainerClass = '.passwordMenu-' + this.cid + '-' + shareId
- var passwordByTalkContainerClass = '.passwordByTalkMenu-' + this.cid + '-' + shareId
- var sendPasswordByTalk = passwordField.attr('id').startsWith('passwordByTalk')
- var loading
- if (sendPasswordByTalk) {
- loading = this.$el.find(passwordByTalkContainerClass + ' .icon-loading-small')
- } else {
- loading = this.$el.find(passwordContainerClass + ' .icon-loading-small')
- }
- if (!loading.hasClass('hidden')) {
- // still in process
- return
- }
-
- passwordField.removeClass('error')
- var password = passwordField.val()
- // in IE9 the password might be the placeholder due to bugs in the placeholders polyfill
- if (password === '' || password === PASSWORD_PLACEHOLDER || password === PASSWORD_PLACEHOLDER_MESSAGE) {
- return
- }
-
- loading
- .removeClass('hidden')
- .addClass('inlineblock')
-
- this.model.updateShare(shareId, {
- password: password,
- sendPasswordByTalk: sendPasswordByTalk
- }, {
- error: function(model, msg) {
- // destroy old tooltips
- passwordField.tooltip('destroy')
- loading.removeClass('inlineblock').addClass('hidden')
- passwordField.addClass('error')
- passwordField.attr('title', msg)
- passwordField.tooltip({ placement: 'bottom', trigger: 'manual' })
- passwordField.tooltip('show')
- },
- success: function(model, msg) {
- passwordField.blur()
- passwordField.attr('value', '')
- passwordField.attr('placeholder', PASSWORD_PLACEHOLDER)
- loading.removeClass('inlineblock').addClass('hidden')
- }
- })
- },
-
- onPermissionChange: function(event) {
- event.preventDefault()
- event.stopPropagation()
- var $element = $(event.target)
- var $li = $element.closest('li[data-share-id]')
- var shareId = $li.data('share-id')
-
- var permissions = OC.PERMISSION_READ
-
- if (this.model.isFolder()) {
- // adjust checkbox states
- var $checkboxes = $('.permissions', $li).not('input[name="edit"]').not('input[name="share"]')
- var checked
- if ($element.attr('name') === 'edit') {
- checked = $element.is(':checked')
- // Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck
- $($checkboxes).prop('checked', checked)
- if (checked) {
- permissions |= OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE
- }
- } else {
- var numberChecked = $checkboxes.filter(':checked').length
- checked = numberChecked === $checkboxes.length
- var $editCb = $('input[name="edit"]', $li)
- $editCb.prop('checked', checked)
- $editCb.prop('indeterminate', !checked && numberChecked > 0)
- }
- } else {
- if ($element.attr('name') === 'edit' && $element.is(':checked')) {
- permissions |= OC.PERMISSION_UPDATE
- }
- }
-
- $('.permissions', $li).not('input[name="edit"]').filter(':checked').each(function(index, checkbox) {
- permissions |= $(checkbox).data('permissions')
- })
-
- /** disable checkboxes during save operation to avoid race conditions **/
- $li.find('input[type=checkbox]').prop('disabled', true)
- var enableCb = function() {
- $li.find('input[type=checkbox]').prop('disabled', false)
- }
- var errorCb = function(elem, msg) {
- OC.dialogs.alert(msg, t('core', 'Error while sharing'))
- enableCb()
- }
-
- this.model.updateShare(shareId, { permissions: permissions }, { error: errorCb, success: enableCb })
-
- this._renderPermissionChange = shareId
- },
-
- onSecureDropChange: function(event) {
- event.preventDefault()
- event.stopPropagation()
- var $element = $(event.target)
- var $li = $element.closest('li[data-share-id]')
- var shareId = $li.data('share-id')
-
- var permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE | OC.PERMISSION_READ
- if ($element.is(':checked')) {
- permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE
- }
-
- /** disable checkboxes during save operation to avoid race conditions **/
- $li.find('input[type=checkbox]').prop('disabled', true)
- var enableCb = function() {
- $li.find('input[type=checkbox]').prop('disabled', false)
- }
- var errorCb = function(elem, msg) {
- OC.dialogs.alert(msg, t('core', 'Error while sharing'))
- enableCb()
- }
-
- this.model.updateShare(shareId, { permissions: permissions }, { error: errorCb, success: enableCb })
-
- this._renderPermissionChange = shareId
- }
-
- })
-
- OC.Share.ShareDialogShareeListView = ShareDialogShareeListView
-
-})()