diff options
Diffstat (limited to 'core/js/sharedialoglinkshareview.js')
-rw-r--r-- | core/js/sharedialoglinkshareview.js | 954 |
1 files changed, 0 insertions, 954 deletions
diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js deleted file mode 100644 index 96ebd8ebbac..00000000000 --- a/core/js/sharedialoglinkshareview.js +++ /dev/null @@ -1,954 +0,0 @@ -/* eslint-disable */ -/* - * Copyright (c) 2015 - * - * This file is licensed under the Affero General Public License version 3 - * or later. - * - * See the COPYING-README file. - * - */ - -/* globals Clipboard, Handlebars */ - -(function() { - if (!OC.Share) { - OC.Share = {} - } - - var PASSWORD_PLACEHOLDER = '**********' - var PASSWORD_PLACEHOLDER_MESSAGE = t('core', 'Choose a password for the public link') - var PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL = t('core', 'Choose a password for the public link or press the "Enter" key') - - /** - * @class OCA.Share.ShareDialogLinkShareView - * @member {OC.Share.ShareItemModel} model - * @member {jQuery} $el - * @memberof OCA.Sharing - * @classdesc - * - * Represents the GUI of the share dialogue - * - */ - var ShareDialogLinkShareView = OC.Backbone.View.extend({ - /** @type {string} **/ - id: 'shareDialogLinkShare', - - /** @type {OC.Share.ShareConfigModel} **/ - configModel: undefined, - - /** @type {boolean} **/ - showLink: true, - - /** @type {boolean} **/ - showPending: false, - - /** @type {string} **/ - password: '', - - /** @type {string} **/ - newShareId: 'new-share', - - events: { - // open menu - 'click .share-menu .icon-more': 'onToggleMenu', - // hide download - 'change .hideDownloadCheckbox': 'onHideDownloadChange', - // password - 'click input.share-pass-submit': 'onPasswordEntered', - 'keyup input.linkPassText': 'onPasswordKeyUp', // check for the enter key - 'change .showPasswordCheckbox': 'onShowPasswordClick', - 'change .passwordByTalkCheckbox': 'onPasswordByTalkChange', - 'change .publicEditingCheckbox': 'onAllowPublicEditingChange', - // copy link url - 'click .linkText': 'onLinkTextClick', - // social - 'click .pop-up': 'onPopUpClick', - // permission change - 'change .publicUploadRadio': 'onPublicUploadChange', - // expire date - 'click .expireDate': 'onExpireDateChange', - 'change .datepicker': 'onChangeExpirationDate', - 'click .datepicker': 'showDatePicker', - // note - 'click .share-add': 'showNoteForm', - 'click .share-note-delete': 'deleteNote', - 'click .share-note-submit': 'updateNote', - // remove - 'click .unshare': 'onUnshare', - // new share - 'click .new-share': 'newShare', - // enforced pass set - 'submit .enforcedPassForm': 'enforcedPasswordSet' - }, - - initialize: function(options) { - var view = this - - this.model.on('change:permissions', function() { - view.render() - }) - - this.model.on('change:itemType', function() { - view.render() - }) - - this.model.on('change:allowPublicUploadStatus', function() { - view.render() - }) - - this.model.on('change:hideFileListStatus', function() { - view.render() - }) - - this.model.on('change:linkShares', function(model, linkShares) { - // The "Password protect by Talk" item is shown only when there - // is a password. Unfortunately there is no fine grained - // rendering of items in the link shares, so the whole view - // needs to be rendered again when the password of a share - // changes. - // Note that this event handler is concerned only about password - // changes; other changes in the link shares does not trigger - // a rendering, so the view must be rendered again as needed in - // those cases (for example, when a link share is removed). - - var previousLinkShares = model.previous('linkShares') - if (previousLinkShares.length !== linkShares.length) { - return - } - - var i - for (i = 0; i < linkShares.length; i++) { - if (linkShares[i].id !== previousLinkShares[i].id) { - // A resorting should never happen, but just in case. - return - } - - if (linkShares[i].password !== previousLinkShares[i].password) { - view.render() - - return - } - } - }) - - if (!_.isUndefined(options.configModel)) { - this.configModel = options.configModel - } else { - throw 'missing OC.Share.ShareConfigModel' - } - - var clipboard = new Clipboard('.clipboard-button') - clipboard.on('success', function(e) { - var $trigger = $(e.trigger) - - $trigger.tooltip('hide') - .attr('data-original-title', t('core', 'Copied!')) - .tooltip('fixTitle') - .tooltip({ placement: 'bottom', trigger: 'manual' }) - .tooltip('show') - _.delay(function() { - $trigger.tooltip('hide') - .attr('data-original-title', t('core', 'Copy link')) - .tooltip('fixTitle') - }, 3000) - }) - clipboard.on('error', function(e) { - var $trigger = $(e.trigger) - var $menu = $trigger.next('.share-menu').find('.popovermenu') - var $linkTextMenu = $menu.find('li.linkTextMenu') - var $input = $linkTextMenu.find('.linkText') - - var $li = $trigger.closest('li[data-share-id]') - var shareId = $li.data('share-id') - - // show menu - OC.showMenu(null, $menu) - - var actionMsg = '' - if (/iPhone|iPad/i.test(navigator.userAgent)) { - actionMsg = t('core', 'Not supported!') - } else if (/Mac/i.test(navigator.userAgent)) { - actionMsg = t('core', 'Press ⌘-C to copy.') - } else { - actionMsg = t('core', 'Press Ctrl-C to copy.') - } - - $linkTextMenu.removeClass('hidden') - $input.select() - $input.tooltip('hide') - .attr('data-original-title', actionMsg) - .tooltip('fixTitle') - .tooltip({ placement: 'bottom', trigger: 'manual' }) - .tooltip('show') - _.delay(function() { - $input.tooltip('hide') - $input.attr('data-original-title', t('core', 'Copy')) - .tooltip('fixTitle') - }, 3000) - }) - }, - - newShare: function(event) { - var self = this - var $target = $(event.target) - var $li = $target.closest('li[data-share-id]') - var shareId = $li.data('share-id') - var $loading = $li.find('.share-menu > .icon-loading-small') - - if (!$loading.hasClass('hidden') && this.password === '') { - // in process - return false - } - - // hide all icons and show loading - $li.find('.icon').addClass('hidden') - $loading.removeClass('hidden') - - // hide menu - OC.hideMenus() - - var shareData = {} - - var isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink') - var isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced') - - // set default expire date - if (isExpirationEnforced) { - var defaultExpireDays = this.configModel.get('defaultExpireDate') - var expireDate = moment().add(defaultExpireDays, 'day').format('DD-MM-YYYY') - shareData.expireDate = expireDate - } - - // if password is set, add to data - if (isPasswordEnforced && this.password !== '') { - shareData.password = this.password - } - - var newShareId = false - - // We need a password before the share creation - if (isPasswordEnforced && !this.showPending && this.password === '') { - this.showPending = shareId - var self = this.render() - self.$el.find('.pending #enforcedPassText').focus() - } else { - // else, we have a password or it is not enforced - $.when(this.model.saveLinkShare(shareData, { - success: function() { - $loading.addClass('hidden') - $li.find('.icon').removeClass('hidden') - self.render() - // open the menu by default - // we can only do that after the render - if (newShareId) { - var shares = self.$el.find('li[data-share-id]') - var $newShare = self.$el.find('li[data-share-id="' + newShareId + '"]') - } - }, - error: function() { - // empty function to override the default Dialog warning - } - })).fail(function(response) { - // password failure? Show error - self.password = '' - if (isPasswordEnforced && response && response.responseJSON && response.responseJSON.ocs.meta && response.responseJSON.ocs.meta.message) { - var $input = self.$el.find('.pending #enforcedPassText') - $input.tooltip('destroy') - $input.attr('title', response.responseJSON.ocs.meta.message) - $input.tooltip({ placement: 'bottom', trigger: 'manual' }) - $input.tooltip('show') - } else { - OC.Notification.showTemporary(t('core', 'Unable to create a link share')) - $loading.addClass('hidden') - $li.find('.icon').removeClass('hidden') - } - }).then(function(response) { - // resolve before success - newShareId = response.ocs.data.id - }) - } - }, - - enforcedPasswordSet: function(event) { - event.preventDefault() - var $form = $(event.target) - var $input = $form.find('input.enforcedPassText') - this.password = $input.val() - this.showPending = false - this.newShare(event) - }, - - onLinkTextClick: function(event) { - var $element = $(event.target) - var $li = $element.closest('li[data-share-id]') - var $el = $li.find('.linkText') - $el.focus() - $el.select() - }, - - onHideDownloadChange: function(event) { - var $element = $(event.target) - var $li = $element.closest('li[data-share-id]') - var shareId = $li.data('share-id') - var $checkbox = $li.find('.hideDownloadCheckbox') - $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock') - - var hideDownload = false - if ($checkbox.is(':checked')) { - hideDownload = true - } - - this.model.saveLinkShare({ - hideDownload: hideDownload, - cid: shareId - }, { - success: function() { - $checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock') - }, - error: function(obj, msg) { - OC.Notification.showTemporary(t('core', 'Unable to toggle this option')) - $checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock') - } - }) - }, - - onShowPasswordClick: function(event) { - var $element = $(event.target) - var $li = $element.closest('li[data-share-id]') - var shareId = $li.data('share-id') - $li.find('.linkPass').slideToggle(OC.menuSpeed) - $li.find('.linkPassMenu').toggleClass('hidden') - if (!$li.find('.showPasswordCheckbox').is(':checked')) { - this.model.saveLinkShare({ - password: '', - cid: shareId - }) - } else { - if (!OC.Util.isIE()) { - $li.find('.linkPassText').focus() - } - } - }, - - onPasswordKeyUp: function(event) { - if (event.keyCode === 13) { - this.onPasswordEntered(event) - } - }, - - onPasswordEntered: function(event) { - var $element = $(event.target) - var $li = $element.closest('li[data-share-id]') - var shareId = $li.data('share-id') - var $loading = $li.find('.linkPassMenu .icon-loading-small') - if (!$loading.hasClass('hidden')) { - // still in process - return - } - var $input = $li.find('.linkPassText') - $input.removeClass('error') - $input.parent().find('input').removeClass('error') - var password = $input.val() - - if ($li.find('.linkPassText').attr('placeholder') === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) { - - // in IE9 the password might be the placeholder due to bugs in the placeholders polyfill - if (password === PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL) { - password = '' - } - } else { - - // 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.saveLinkShare({ - password: password, - cid: shareId - }, { - complete: function(model) { - $loading.removeClass('inlineblock').addClass('hidden') - }, - error: function(model, msg) { - // Add visual feedback to both the input and the submit button - $input.parent().find('input').addClass('error') - - // destroy old tooltips - var $container = $input.parent() - $container.tooltip('destroy') - $input.addClass('error') - $container.attr('title', msg) - $container.tooltip({ placement: 'bottom', trigger: 'manual' }) - $container.tooltip('show') - } - }) - }, - - onPasswordByTalkChange: function(event) { - var $element = $(event.target) - var $li = $element.closest('li[data-share-id]') - var shareId = $li.data('share-id') - var $checkbox = $li.find('.passwordByTalkCheckbox') - $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock') - - var sendPasswordByTalk = false - if ($checkbox.is(':checked')) { - sendPasswordByTalk = true - } - - this.model.saveLinkShare({ - sendPasswordByTalk: sendPasswordByTalk, - cid: shareId - }, { - success: function() { - $checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock') - }, - error: function(obj, msg) { - OC.Notification.showTemporary(t('core', 'Unable to toggle this option')) - $checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock') - } - }) - }, - - onAllowPublicEditingChange: function(event) { - var $element = $(event.target) - var $li = $element.closest('li[data-share-id]') - var shareId = $li.data('share-id') - var $checkbox = $li.find('.publicEditingCheckbox') - $checkbox.siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock') - - var permissions = OC.PERMISSION_READ - if ($checkbox.is(':checked')) { - permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_READ - } - - this.model.saveLinkShare({ - permissions: permissions, - cid: shareId - }, { - success: function() { - $checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock') - }, - error: function(obj, msg) { - OC.Notification.showTemporary(t('core', 'Unable to toggle this option')) - $checkbox.siblings('.icon-loading-small').addClass('hidden').removeClass('inlineblock') - } - }) - }, - - onPublicUploadChange: function(event) { - var $element = $(event.target) - var $li = $element.closest('li[data-share-id]') - var shareId = $li.data('share-id') - var permissions = event.currentTarget.value - this.model.saveLinkShare({ - permissions: permissions, - cid: shareId - }) - }, - - showNoteForm: function(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').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') - - $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 - }) - }, - - render: function() { - this.$el.find('.has-tooltip').tooltip() - - // reset previously set passwords - this.password = '' - - var linkShareTemplate = this.template() - var resharingAllowed = this.model.sharePermissionPossible() - - if (!resharingAllowed - || !this.showLink - || !this.configModel.isShareWithLinkAllowed()) { - var templateData = { shareAllowed: false } - if (!resharingAllowed) { - // add message - templateData.noSharingPlaceholder = t('core', 'Resharing is not allowed') - } - this.$el.html(linkShareTemplate(templateData)) - return this - } - - var publicUpload - = this.model.isFolder() - && this.model.createPermissionPossible() - && this.configModel.isPublicUploadEnabled() - - var publicEditingChecked = '' - if (this.model.isPublicEditingAllowed()) { - publicEditingChecked = 'checked="checked"' - } - - var isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink') - var isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true - var passwordPlaceholderInitial = this.configModel.get('enforcePasswordForPublicLink') - ? PASSWORD_PLACEHOLDER_MESSAGE : PASSWORD_PLACEHOLDER_MESSAGE_OPTIONAL - - var publicEditable - = !this.model.isFolder() - && this.model.updatePermissionPossible() - - var isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced') - - // what if there is another date picker on that page? - var minDate = new Date() - // min date should always be the next day - minDate.setDate(minDate.getDate() + 1) - - $.datepicker.setDefaults({ - minDate: minDate - }) - - this.$el.find('.datepicker').datepicker({ dateFormat: 'dd-mm-yy' }) - - var minPasswordLength = 4 - // password policy? - if (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) { - minPasswordLength = OC.getCapabilities().password_policy.minLength - } - - var popoverBase = { - urlLabel: t('core', 'Link'), - hideDownloadLabel: t('core', 'Hide download'), - enablePasswordLabel: isPasswordEnforced ? t('core', 'Password protection enforced') : t('core', 'Password protect'), - passwordLabel: t('core', 'Password'), - passwordPlaceholderInitial: passwordPlaceholderInitial, - publicUpload: publicUpload, - publicEditing: publicEditable, - publicEditingChecked: publicEditingChecked, - publicEditingLabel: t('core', 'Allow editing'), - mailPrivatePlaceholder: t('core', 'Email link to person'), - mailButtonText: t('core', 'Send'), - publicUploadRWLabel: t('core', 'Allow upload and editing'), - publicUploadRLabel: t('core', 'Read only'), - publicUploadWLabel: t('core', 'File drop (upload only)'), - publicUploadRWValue: OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE, - publicUploadRValue: OC.PERMISSION_READ, - publicUploadWValue: OC.PERMISSION_CREATE, - expireDateLabel: isExpirationEnforced ? t('core', 'Expiration date enforced') : t('core', 'Set expiration date'), - expirationLabel: t('core', 'Expiration'), - expirationDatePlaceholder: t('core', 'Expiration date'), - isExpirationEnforced: isExpirationEnforced, - isPasswordEnforced: isPasswordEnforced, - defaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today - addNoteLabel: t('core', 'Note to recipient'), - unshareLabel: t('core', 'Unshare'), - unshareLinkLabel: t('core', 'Delete share link'), - newShareLabel: t('core', 'Add another link') - } - - var pendingPopover = { - isPasswordEnforced: isPasswordEnforced, - enforcedPasswordLabel: t('core', 'Password protection for links is mandatory'), - passwordPlaceholder: passwordPlaceholderInitial, - minPasswordLength: minPasswordLength - } - var pendingPopoverMenu = this.pendingPopoverMenuTemplate(_.extend({}, pendingPopover)) - - var linkShares = this.getShareeList() - if (_.isArray(linkShares)) { - for (var i = 0; i < linkShares.length; i++) { - var social = [] - OC.Share.Social.Collection.each(function(model) { - var url = model.get('url') - url = url.replace('{{reference}}', linkShares[i].shareLinkURL) - social.push({ - url: url, - label: t('core', 'Share to {name}', { name: model.get('name') }), - name: model.get('name'), - iconClass: model.get('iconClass'), - newWindow: model.get('newWindow') - }) - }) - var popover = this.getPopoverObject(linkShares[i]) - linkShares[i].popoverMenu = this.popoverMenuTemplate(_.extend({}, popoverBase, popover, { social: social })) - linkShares[i].pendingPopoverMenu = pendingPopoverMenu - } - } - - this.$el.html(linkShareTemplate({ - linkShares: linkShares, - shareAllowed: true, - nolinkShares: linkShares.length === 0, - newShareLabel: t('core', 'Share link'), - newShareTitle: t('core', 'New share link'), - pendingPopoverMenu: pendingPopoverMenu, - showPending: this.showPending === this.newShareId, - newShareId: this.newShareId - })) - - this.delegateEvents() - - // new note autosize - autosize(this.$el.find('.share-note-form .share-note')) - - return this - }, - - 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') - var shareId = $li.data('share-id') - - OC.showMenu(null, $menu) - - // focus the password if not set and enforced - var isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true - var haspassword = $menu.find('.linkPassText').val() !== '' - - if (!haspassword && isPasswordEnabledByDefault) { - $menu.find('.linkPassText').focus() - } - }, - - /** - * @returns {Function} from Handlebars - * @private - */ - template: function() { - return OC.Share.Templates['sharedialoglinkshareview'] - }, - - /** - * renders the popover template and returns the resulting HTML - * - * @param {Object} data - * @returns {string} - */ - popoverMenuTemplate: function(data) { - return OC.Share.Templates['sharedialoglinkshareview_popover_menu'](data) - }, - - /** - * renders the pending popover template and returns the resulting HTML - * - * @param {Object} data - * @returns {string} - */ - pendingPopoverMenuTemplate: function(data) { - return OC.Share.Templates['sharedialoglinkshareview_popover_menu_pending'](data) - }, - - onPopUpClick: function(event) { - event.preventDefault() - event.stopPropagation() - - var url = $(event.currentTarget).data('url') - var newWindow = $(event.currentTarget).data('window') - $(event.currentTarget).tooltip('hide') - if (url) { - if (newWindow === true) { - var width = 600 - var height = 400 - var left = (screen.width / 2) - (width / 2) - var top = (screen.height / 2) - (height / 2) - - window.open(url, 'name', 'width=' + width + ', height=' + height + ', top=' + top + ', left=' + left) - } else { - window.location.href = url - } - } - }, - - onExpireDateChange: function(event) { - var $element = $(event.target) - var li = $element.closest('li[data-share-id]') - var shareId = li.data('share-id') - var expirationDatePicker = '#expirationDateContainer-' + shareId - var datePicker = $(expirationDatePicker) - 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 maxDate = $element.data('max-date') - var expirationDatePicker = '#expirationDatePicker-' + shareId - var self = this - - $(expirationDatePicker).datepicker({ - dateFormat: 'dd-mm-yy', - onSelect: function(expireDate) { - self.setExpirationDate(expireDate, shareId) - }, - maxDate: maxDate - }) - $(expirationDatePicker).datepicker('show') - $(expirationDatePicker).focus() - - }, - - setExpirationDate: function(expireDate, shareId) { - this.model.saveLinkShare({ expireDate: expireDate, cid: shareId }) - }, - - onChangeExpirationDate: function(event) { - var $element = $(event.target) - var expireDate = $element.val() - var li = $element.closest('li[data-share-id]') - var shareId = li.data('share-id') - var expirationDatePicker = '#expirationDatePicker-' + shareId - - this.setExpirationDate(expireDate, shareId) - $(expirationDatePicker).datepicker('hide') - }, - - /** - * get an array of sharees' share properties - * - * @returns {Array} - */ - getShareeList: function() { - var shares = this.model.get('linkShares') - - if (!this.model.hasLinkShares()) { - return [] - } - - var list = [] - for (var index = 0; index < shares.length; index++) { - var share = this.getShareeObject(index) - // first empty {} is necessary, otherwise we get in trouble - // with references - list.push(_.extend({}, share)) - } - - return list - }, - - /** - * - * @param {OC.Share.Types.ShareInfo} shareInfo - * @returns {object} - */ - getShareeObject: function(shareIndex) { - var share = this.model.get('linkShares')[shareIndex] - - return _.extend({}, share, { - cid: share.id, - shareAllowed: true, - linkShareLabel: share.label ? share.label : t('core', 'Share link'), - popoverMenu: {}, - shareLinkURL: share.url, - newShareTitle: t('core', 'New share link'), - copyLabel: t('core', 'Copy link'), - showPending: this.showPending === share.id, - linkShareCreationDate: t('core', 'Created on {time}', { time: moment(share.stime * 1000).format('LLLL') }) - }) - }, - - getPopoverObject: function(share) { - var publicUploadRWChecked = '' - var publicUploadRChecked = '' - var publicUploadWChecked = '' - - switch (this.model.linkSharePermissions(share.id)) { - case OC.PERMISSION_READ: - publicUploadRChecked = 'checked' - break - case OC.PERMISSION_CREATE: - publicUploadWChecked = 'checked' - break - case OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ | OC.PERMISSION_DELETE: - publicUploadRWChecked = 'checked' - break - } - - var isPasswordSet = !!share.password - var isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true - var isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink') - var isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced') - var defaultExpireDays = this.configModel.get('defaultExpireDate') - var hasExpireDate = !!share.expiration || isExpirationEnforced - - var expireDate - if (hasExpireDate) { - expireDate = moment(share.expiration, 'YYYY-MM-DD').format('DD-MM-YYYY') - } - - var isTalkEnabled = OC.appswebroots['spreed'] !== undefined - var sendPasswordByTalk = share.sendPasswordByTalk - - var hideDownload = share.hideDownload - - var maxDate = null - - if (hasExpireDate) { - if (isExpirationEnforced) { - // TODO: hack: backend returns string instead of integer - var shareTime = share.stime - if (_.isNumber(shareTime)) { - shareTime = new Date(shareTime * 1000) - } - if (!shareTime) { - shareTime = new Date() // now - } - shareTime = OC.Util.stripTime(shareTime).getTime() - maxDate = new Date(shareTime + defaultExpireDays * 24 * 3600 * 1000) - } - } - - return { - cid: share.id, - shareLinkURL: share.url, - passwordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE, - isPasswordSet: isPasswordSet || isPasswordEnabledByDefault || isPasswordEnforced, - showPasswordByTalkCheckBox: isTalkEnabled && isPasswordSet, - passwordByTalkLabel: t('core', 'Password protect by Talk'), - isPasswordByTalkSet: sendPasswordByTalk, - publicUploadRWChecked: publicUploadRWChecked, - publicUploadRChecked: publicUploadRChecked, - publicUploadWChecked: publicUploadWChecked, - hasExpireDate: hasExpireDate, - expireDate: expireDate, - shareNote: share.note, - hasNote: share.note !== '', - maxDate: maxDate, - hideDownload: hideDownload, - isExpirationEnforced: isExpirationEnforced - } - }, - - 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, { - success: function() { - $li.remove() - self.render() - }, - error: function() { - $loading.addClass('hidden') - OC.Notification.showTemporary(t('core', 'Could not unshare')) - } - }) - return false - } - - }) - - OC.Share.ShareDialogLinkShareView = ShareDialogLinkShareView - -})() |