aboutsummaryrefslogtreecommitdiffstats
path: root/core/js/sharedialogview.js
diff options
context:
space:
mode:
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2019-10-30 15:39:31 +0100
committerJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2019-11-05 19:03:44 +0100
commiteebcf890917ca17f9e3bd00a792b89f841c824da (patch)
tree46d2767efaa1554629ef3fffce7e13f22675ce49 /core/js/sharedialogview.js
parent5c0ad24a6830189a36b5538ee02738a57e067637 (diff)
downloadnextcloud-server-eebcf890917ca17f9e3bd00a792b89f841c824da.tar.gz
nextcloud-server-eebcf890917ca17f9e3bd00a792b89f841c824da.zip
Cleanup sharing leftovers
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'core/js/sharedialogview.js')
-rw-r--r--core/js/sharedialogview.js1137
1 files changed, 0 insertions, 1137 deletions
diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js
deleted file mode 100644
index 9bc87a69463..00000000000
--- a/core/js/sharedialogview.js
+++ /dev/null
@@ -1,1137 +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 Handlebars */
-
-(function() {
- if (!OC.Share) {
- OC.Share = {}
- }
-
- /**
- * @class OCA.Share.ShareDialogView
- * @member {OC.Share.ShareItemModel} model
- * @member {jQuery} $el
- * @memberof OCA.Sharing
- * @classdesc
- *
- * Represents the GUI of the share dialogue
- *
- */
- var ShareDialogView = OC.Backbone.View.extend({
- /** @type {Object} **/
- _templates: {},
-
- /** @type {boolean} **/
- _showLink: true,
-
- _lookup: false,
-
- _lookupAllowed: false,
-
- /** @type {string} **/
- tagName: 'div',
-
- /** @type {OC.Share.ShareConfigModel} **/
- configModel: undefined,
-
- /** @type {object} **/
- resharerInfoView: undefined,
-
- /** @type {object} **/
- linkShareView: undefined,
-
- /** @type {object} **/
- shareeListView: undefined,
-
- /** @type {object} **/
- _lastSuggestions: undefined,
-
- /** @type {object} **/
- _lastRecommendations: undefined,
-
- /** @type {int} **/
- _pendingOperationsCount: 0,
-
- events: {
- 'focus .shareWithField': 'onShareWithFieldFocus',
- 'input .shareWithField': 'onShareWithFieldChanged',
- 'click .shareWithConfirm': '_confirmShare'
- },
-
- initialize: function(options) {
- var view = this
-
- this.model.on('fetchError', function() {
- OC.Notification.showTemporary(t('core', 'Share details could not be loaded for this item.'))
- })
-
- if (!_.isUndefined(options.configModel)) {
- this.configModel = options.configModel
- } else {
- throw 'missing OC.Share.ShareConfigModel'
- }
-
- this.configModel.on('change:isRemoteShareAllowed', function() {
- view.render()
- })
- this.configModel.on('change:isRemoteGroupShareAllowed', function() {
- view.render()
- })
- this.model.on('change:permissions', function() {
- view.render()
- })
-
- this.model.on('request', this._onRequest, this)
- this.model.on('sync', this._onEndRequest, this)
-
- var subViewOptions = {
- model: this.model,
- configModel: this.configModel
- }
-
- var subViews = {
- resharerInfoView: 'ShareDialogResharerInfoView',
- linkShareView: 'ShareDialogLinkShareView',
- shareeListView: 'ShareDialogShareeListView'
- }
-
- for (var name in subViews) {
- var className = subViews[name]
- this[name] = _.isUndefined(options[name])
- ? new OC.Share[className](subViewOptions)
- : options[name]
- }
-
- _.bindAll(this,
- 'autocompleteHandler',
- '_onSelectRecipient',
- 'onShareWithFieldChanged',
- 'onShareWithFieldFocus'
- )
-
- OC.Plugins.attach('OC.Share.ShareDialogView', this)
- },
-
- onShareWithFieldChanged: function() {
- var $el = this.$el.find('.shareWithField')
- if ($el.val().length < 2) {
- $el.removeClass('error').tooltip('hide')
- }
- },
-
- /* trigger search after the field was re-selected */
- onShareWithFieldFocus: function() {
- var $shareWithField = this.$el.find('.shareWithField')
- $shareWithField.autocomplete('search', $shareWithField.val())
- },
-
- _getSuggestions: function(searchTerm, perPage, model, lookup) {
- if (this._lastSuggestions
- && this._lastSuggestions.searchTerm === searchTerm
- && this._lastSuggestions.lookup === lookup
- && this._lastSuggestions.perPage === perPage
- && this._lastSuggestions.model === model) {
- return this._lastSuggestions.promise
- }
-
- var deferred = $.Deferred()
- var view = this
-
- $.get(
- OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees',
- {
- format: 'json',
- search: searchTerm,
- lookup: lookup,
- perPage: perPage,
- itemType: model.get('itemType')
- },
- function(result) {
- if (result.ocs.meta.statuscode === 100) {
- var filter = function(users, groups, remotes, remote_groups, emails, circles, rooms) {
- if (typeof (emails) === 'undefined') {
- emails = []
- }
- if (typeof (circles) === 'undefined') {
- circles = []
- }
- if (typeof (rooms) === 'undefined') {
- rooms = []
- }
-
- var usersLength
- var groupsLength
- var remotesLength
- var remoteGroupsLength
- var emailsLength
- var circlesLength
- var roomsLength
-
- var i, j
-
- // Filter out the current user
- usersLength = users.length
- for (i = 0; i < usersLength; i++) {
- if (users[i].value.shareWith === OC.currentUser) {
- users.splice(i, 1)
- break
- }
- }
-
- // Filter out the owner of the share
- if (model.hasReshare()) {
- usersLength = users.length
- for (i = 0; i < usersLength; i++) {
- if (users[i].value.shareWith === model.getReshareOwner()) {
- users.splice(i, 1)
- break
- }
- }
- }
-
- var shares = model.get('shares')
- var sharesLength = shares.length
-
- // Now filter out all sharees that are already shared with
- for (i = 0; i < sharesLength; i++) {
- var share = shares[i]
-
- if (share.share_type === OC.Share.SHARE_TYPE_USER) {
- usersLength = users.length
- for (j = 0; j < usersLength; j++) {
- if (users[j].value.shareWith === share.share_with) {
- users.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_GROUP) {
- groupsLength = groups.length
- for (j = 0; j < groupsLength; j++) {
- if (groups[j].value.shareWith === share.share_with) {
- groups.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {
- remotesLength = remotes.length
- for (j = 0; j < remotesLength; j++) {
- if (remotes[j].value.shareWith === share.share_with) {
- remotes.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE_GROUP) {
- remoteGroupsLength = remote_groups.length
- for (j = 0; j < remoteGroupsLength; j++) {
- if (remote_groups[j].value.shareWith === share.share_with) {
- remote_groups.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {
- emailsLength = emails.length
- for (j = 0; j < emailsLength; j++) {
- if (emails[j].value.shareWith === share.share_with) {
- emails.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_CIRCLE) {
- circlesLength = circles.length
- for (j = 0; j < circlesLength; j++) {
- if (circles[j].value.shareWith === share.share_with) {
- circles.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_ROOM) {
- roomsLength = rooms.length
- for (j = 0; j < roomsLength; j++) {
- if (rooms[j].value.shareWith === share.share_with) {
- rooms.splice(j, 1)
- break
- }
- }
- }
- }
- }
-
- filter(
- result.ocs.data.exact.users,
- result.ocs.data.exact.groups,
- result.ocs.data.exact.remotes,
- result.ocs.data.exact.remote_groups,
- result.ocs.data.exact.emails,
- result.ocs.data.exact.circles,
- result.ocs.data.exact.rooms
- )
-
- var exactUsers = result.ocs.data.exact.users
- var exactGroups = result.ocs.data.exact.groups
- var exactRemotes = result.ocs.data.exact.remotes
- var exactRemoteGroups = result.ocs.data.exact.remote_groups
- var exactEmails = []
- if (typeof (result.ocs.data.emails) !== 'undefined') {
- exactEmails = result.ocs.data.exact.emails
- }
- var exactCircles = []
- if (typeof (result.ocs.data.circles) !== 'undefined') {
- exactCircles = result.ocs.data.exact.circles
- }
- var exactRooms = []
- if (typeof (result.ocs.data.rooms) !== 'undefined') {
- exactRooms = result.ocs.data.exact.rooms
- }
-
- var exactMatches = exactUsers.concat(exactGroups).concat(exactRemotes).concat(exactRemoteGroups).concat(exactEmails).concat(exactCircles).concat(exactRooms)
-
- filter(
- result.ocs.data.users,
- result.ocs.data.groups,
- result.ocs.data.remotes,
- result.ocs.data.remote_groups,
- result.ocs.data.emails,
- result.ocs.data.circles,
- result.ocs.data.rooms
- )
-
- var users = result.ocs.data.users
- var groups = result.ocs.data.groups
- var remotes = result.ocs.data.remotes
- var remoteGroups = result.ocs.data.remote_groups
- var lookup = result.ocs.data.lookup
- var lookupEnabled = result.ocs.data.lookupEnabled
- var emails = []
- if (typeof (result.ocs.data.emails) !== 'undefined') {
- emails = result.ocs.data.emails
- }
- var circles = []
- if (typeof (result.ocs.data.circles) !== 'undefined') {
- circles = result.ocs.data.circles
- }
- var rooms = []
- if (typeof (result.ocs.data.rooms) !== 'undefined') {
- rooms = result.ocs.data.rooms
- }
-
- var suggestions = exactMatches.concat(users).concat(groups).concat(remotes).concat(remoteGroups).concat(emails).concat(circles).concat(rooms).concat(lookup)
-
- function dynamicSort(property) {
- return function(a, b) {
- var aProperty = ''
- var bProperty = ''
- if (typeof a[property] !== 'undefined') {
- aProperty = a[property]
- }
- if (typeof b[property] !== 'undefined') {
- bProperty = b[property]
- }
- return (aProperty < bProperty) ? -1 : (aProperty > bProperty) ? 1 : 0
- }
- }
-
- /**
- * Sort share entries by uuid to properly group them
- */
- var grouped = suggestions.sort(dynamicSort('uuid'))
-
- var previousUuid = null
- var groupedLength = grouped.length
- var result = []
- /**
- * build the result array that only contains all contact entries from
- * merged contacts, if the search term matches its contact name
- */
- for (var i = 0; i < groupedLength; i++) {
- if (typeof grouped[i].uuid !== 'undefined' && grouped[i].uuid === previousUuid) {
- grouped[i].merged = true
- }
- if (searchTerm === grouped[i].name || typeof grouped[i].merged === 'undefined') {
- result.push(grouped[i])
- }
- previousUuid = grouped[i].uuid
- }
- var moreResultsAvailable
- = (
- OC.config['sharing.maxAutocompleteResults'] > 0
- && Math.min(perPage, OC.config['sharing.maxAutocompleteResults'])
- <= Math.max(
- users.length + exactUsers.length,
- groups.length + exactGroups.length,
- remoteGroups.length + exactRemoteGroups.length,
- remotes.length + exactRemotes.length,
- emails.length + exactEmails.length,
- circles.length + exactCircles.length,
- rooms.length + exactRooms.length,
- lookup.length
- )
- )
- if (!view._lookup && lookupEnabled) {
- result.push(
- {
- label: t('core', 'Search globally'),
- value: {},
- lookup: true
- }
- )
- }
-
- deferred.resolve(result, exactMatches, moreResultsAvailable, lookupEnabled)
- } else {
- deferred.reject(result.ocs.meta.message)
- }
- }
- ).fail(function() {
- deferred.reject()
- })
-
- this._lastSuggestions = {
- searchTerm: searchTerm,
- lookup: lookup,
- perPage: perPage,
- model: model,
- promise: deferred.promise()
- }
-
- return this._lastSuggestions.promise
- },
-
- _getRecommendations: function(model) {
- if (this._lastRecommendations
- && this._lastRecommendations.model === model) {
- return this._lastRecommendations.promise
- }
-
- var deferred = $.Deferred()
-
- $.get(
- OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees_recommended',
- {
- format: 'json',
- itemType: model.get('itemType')
- },
- function(result) {
- if (result.ocs.meta.statuscode === 100) {
- var filter = function(users, groups, remotes, remote_groups, emails, circles, rooms) {
- if (typeof (emails) === 'undefined') {
- emails = []
- }
- if (typeof (circles) === 'undefined') {
- circles = []
- }
- if (typeof (rooms) === 'undefined') {
- rooms = []
- }
-
- var usersLength
- var groupsLength
- var remotesLength
- var remoteGroupsLength
- var emailsLength
- var circlesLength
- var roomsLength
-
- var i, j
-
- // Filter out the current user
- usersLength = users.length
- for (i = 0; i < usersLength; i++) {
- if (users[i].value.shareWith === OC.currentUser) {
- users.splice(i, 1)
- break
- }
- }
-
- // Filter out the owner of the share
- if (model.hasReshare()) {
- usersLength = users.length
- for (i = 0; i < usersLength; i++) {
- if (users[i].value.shareWith === model.getReshareOwner()) {
- users.splice(i, 1)
- break
- }
- }
- }
-
- var shares = model.get('shares')
- var sharesLength = shares.length
-
- // Now filter out all sharees that are already shared with
- for (i = 0; i < sharesLength; i++) {
- var share = shares[i]
-
- if (share.share_type === OC.Share.SHARE_TYPE_USER) {
- usersLength = users.length
- for (j = 0; j < usersLength; j++) {
- if (users[j].value.shareWith === share.share_with) {
- users.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_GROUP) {
- groupsLength = groups.length
- for (j = 0; j < groupsLength; j++) {
- if (groups[j].value.shareWith === share.share_with) {
- groups.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {
- remotesLength = remotes.length
- for (j = 0; j < remotesLength; j++) {
- if (remotes[j].value.shareWith === share.share_with) {
- remotes.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE_GROUP) {
- remoteGroupsLength = remote_groups.length
- for (j = 0; j < remoteGroupsLength; j++) {
- if (remote_groups[j].value.shareWith === share.share_with) {
- remote_groups.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_EMAIL) {
- emailsLength = emails.length
- for (j = 0; j < emailsLength; j++) {
- if (emails[j].value.shareWith === share.share_with) {
- emails.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_CIRCLE) {
- circlesLength = circles.length
- for (j = 0; j < circlesLength; j++) {
- if (circles[j].value.shareWith === share.share_with) {
- circles.splice(j, 1)
- break
- }
- }
- } else if (share.share_type === OC.Share.SHARE_TYPE_ROOM) {
- roomsLength = rooms.length
- for (j = 0; j < roomsLength; j++) {
- if (rooms[j].value.shareWith === share.share_with) {
- rooms.splice(j, 1)
- break
- }
- }
- }
- }
- }
-
- filter(
- result.ocs.data.exact.users,
- result.ocs.data.exact.groups,
- result.ocs.data.exact.remotes,
- result.ocs.data.exact.remote_groups,
- result.ocs.data.exact.emails,
- result.ocs.data.exact.circles,
- result.ocs.data.exact.rooms
- )
-
- var exactUsers = result.ocs.data.exact.users
- var exactGroups = result.ocs.data.exact.groups
- var exactRemotes = result.ocs.data.exact.remotes || []
- var exactRemoteGroups = result.ocs.data.exact.remote_groups || []
- var exactEmails = []
- if (typeof (result.ocs.data.emails) !== 'undefined') {
- exactEmails = result.ocs.data.exact.emails
- }
- var exactCircles = []
- if (typeof (result.ocs.data.circles) !== 'undefined') {
- exactCircles = result.ocs.data.exact.circles
- }
- var exactRooms = []
- if (typeof (result.ocs.data.rooms) !== 'undefined') {
- exactRooms = result.ocs.data.exact.rooms
- }
-
- var exactMatches = exactUsers.concat(exactGroups).concat(exactRemotes).concat(exactRemoteGroups).concat(exactEmails).concat(exactCircles).concat(exactRooms)
-
- filter(
- result.ocs.data.users,
- result.ocs.data.groups,
- result.ocs.data.remotes,
- result.ocs.data.remote_groups,
- result.ocs.data.emails,
- result.ocs.data.circles,
- result.ocs.data.rooms
- )
-
- var users = result.ocs.data.users
- var groups = result.ocs.data.groups
- var remotes = result.ocs.data.remotes || []
- var remoteGroups = result.ocs.data.remote_groups || []
- var lookup = result.ocs.data.lookup || []
- var emails = []
- if (typeof (result.ocs.data.emails) !== 'undefined') {
- emails = result.ocs.data.emails
- }
- var circles = []
- if (typeof (result.ocs.data.circles) !== 'undefined') {
- circles = result.ocs.data.circles
- }
- var rooms = []
- if (typeof (result.ocs.data.rooms) !== 'undefined') {
- rooms = result.ocs.data.rooms
- }
-
- var suggestions = exactMatches.concat(users).concat(groups).concat(remotes).concat(remoteGroups).concat(emails).concat(circles).concat(rooms).concat(lookup)
-
- function dynamicSort(property) {
- return function(a, b) {
- var aProperty = ''
- var bProperty = ''
- if (typeof a[property] !== 'undefined') {
- aProperty = a[property]
- }
- if (typeof b[property] !== 'undefined') {
- bProperty = b[property]
- }
- return (aProperty < bProperty) ? -1 : (aProperty > bProperty) ? 1 : 0
- }
- }
-
- /**
- * Sort share entries by uuid to properly group them
- */
- var grouped = suggestions.sort(dynamicSort('uuid'))
-
- var previousUuid = null
- var groupedLength = grouped.length
- var result = []
- /**
- * build the result array that only contains all contact entries from
- * merged contacts, if the search term matches its contact name
- */
- for (var i = 0; i < groupedLength; i++) {
- if (typeof grouped[i].uuid !== 'undefined' && grouped[i].uuid === previousUuid) {
- grouped[i].merged = true
- }
- if (typeof grouped[i].merged === 'undefined') {
- result.push(grouped[i])
- }
- previousUuid = grouped[i].uuid
- }
-
- deferred.resolve(result, exactMatches, false)
- } else {
- deferred.reject(result.ocs.meta.message)
- }
- }
- ).fail(function() {
- deferred.reject()
- })
-
- this._lastRecommendations = {
- model: model,
- promise: deferred.promise()
- }
-
- return this._lastRecommendations.promise
- },
-
- recommendationHandler: function(response) {
- var view = this
- var $shareWithField = $('.shareWithField')
- this._getRecommendations(
- view.model
- ).done(function(suggestions) {
- console.info('recommendations', suggestions)
- if (suggestions.length > 0) {
- $shareWithField
- .autocomplete('option', 'autoFocus', true)
-
- response(suggestions)
- } else {
- console.info('no sharing recommendations found')
- response()
- }
- }).fail(function(message) {
- console.error('could not load recommendations', message)
- })
- },
-
- autocompleteHandler: function(search, response) {
- // If nothing is entered we show recommendations instead of search
- // results
- if (search.term.length === 0) {
- console.info(search.term, 'empty search term -> using recommendations')
- this.recommendationHandler(response)
- return
- }
-
- var $shareWithField = $('.shareWithField')
- var view = this
- var $loading = this.$el.find('.shareWithLoading')
- var $confirm = this.$el.find('.shareWithConfirm')
-
- var count = OC.config['sharing.minSearchStringLength']
- if (search.term.trim().length < count) {
- var title = n('core',
- 'At least {count} character is needed for autocompletion',
- 'At least {count} characters are needed for autocompletion',
- count,
- { count: count }
- )
- $shareWithField.addClass('error')
- .attr('data-original-title', title)
- .tooltip('hide')
- .tooltip({
- placement: 'bottom',
- trigger: 'manual'
- })
- .tooltip('fixTitle')
- .tooltip('show')
- response()
- return
- }
-
- $loading.removeClass('hidden')
- $loading.addClass('inlineblock')
- $confirm.addClass('hidden')
- this._pendingOperationsCount++
-
- $shareWithField.removeClass('error')
- .tooltip('hide')
-
- var perPage = parseInt(OC.config['sharing.maxAutocompleteResults'], 10) || 200
- this._getSuggestions(
- search.term.trim(),
- perPage,
- view.model,
- view._lookup
- ).done(function(suggestions, exactMatches, moreResultsAvailable) {
- view._pendingOperationsCount--
- if (view._pendingOperationsCount === 0) {
- $loading.addClass('hidden')
- $loading.removeClass('inlineblock')
- $confirm.removeClass('hidden')
- }
-
- if (suggestions.length > 0) {
- $shareWithField
- .autocomplete('option', 'autoFocus', true)
-
- response(suggestions)
-
- // show a notice that the list is truncated
- // this is the case if one of the search results is at least as long as the max result config option
- if (moreResultsAvailable) {
- var message = t('core', 'This list is maybe truncated - please refine your search term to see more results.')
- $('.ui-autocomplete').append('<li class="autocomplete-note">' + message + '</li>')
- }
-
- } else {
- var title = t('core', 'No users or groups found for {search}', { search: $shareWithField.val() })
- if (!view.configModel.get('allowGroupSharing')) {
- title = t('core', 'No users found for {search}', { search: $('.shareWithField').val() })
- }
- $shareWithField.addClass('error')
- .attr('data-original-title', title)
- .tooltip('hide')
- .tooltip({
- placement: 'top',
- trigger: 'manual'
- })
- .tooltip('fixTitle')
- .tooltip('show')
- response()
- }
- }).fail(function(message) {
- view._pendingOperationsCount--
- if (view._pendingOperationsCount === 0) {
- $loading.addClass('hidden')
- $loading.removeClass('inlineblock')
- $confirm.removeClass('hidden')
- }
-
- if (message) {
- OC.Notification.showTemporary(t('core', 'An error occurred ("{message}"). Please try again', { message: message }))
- } else {
- OC.Notification.showTemporary(t('core', 'An error occurred. Please try again'))
- }
- })
- },
-
- autocompleteRenderItem: function(ul, item) {
- var icon = 'icon-user'
- var text = escapeHTML(item.label)
- var description = ''
- var type = ''
- var getTranslatedType = function(type) {
- switch (type) {
- case 'HOME':
- return t('core', 'Home')
- case 'WORK':
- return t('core', 'Work')
- case 'OTHER':
- return t('core', 'Other')
- default:
- return '' + type
- }
- }
- if (typeof item.type !== 'undefined' && item.type !== null) {
- type = getTranslatedType(item.type) + ' '
- }
-
- if (typeof item.name !== 'undefined') {
- text = escapeHTML(item.name)
- }
- if (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) {
- icon = 'icon-contacts-dark'
- } else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) {
- icon = 'icon-shared'
- description += item.value.shareWith
- } else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE_GROUP) {
- text = t('core', '{sharee} (remote group)', { sharee: text }, undefined, { escape: false })
- icon = 'icon-shared'
- description += item.value.shareWith
- } else if (item.value.shareType === OC.Share.SHARE_TYPE_EMAIL) {
- icon = 'icon-mail'
- description += item.value.shareWith
- } else if (item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) {
- text = t('core', '{sharee} ({type}, {owner})', { sharee: text, type: item.value.circleInfo, owner: item.value.circleOwner }, undefined, { escape: false })
- icon = 'icon-circle'
- } else if (item.value.shareType === OC.Share.SHARE_TYPE_ROOM) {
- icon = 'icon-talk'
- }
-
- var insert = $("<div class='share-autocomplete-item'/>")
- if (item.merged) {
- insert.addClass('merged')
- text = item.value.shareWith
- description = type
- } else if (item.lookup) {
- text = item.label
- icon = false
- insert.append('<span class="icon icon-search search-globally"></span>')
- } else {
- var avatar = $("<div class='avatardiv'></div>").appendTo(insert)
- if (item.value.shareType === OC.Share.SHARE_TYPE_USER || item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) {
- avatar.avatar(item.value.shareWith, 32, undefined, undefined, undefined, item.label)
- } else {
- if (typeof item.uuid === 'undefined') {
- item.uuid = text
- }
- avatar.imageplaceholder(item.uuid, text, 32)
- }
- description = type + description
- }
- if (description !== '') {
- insert.addClass('with-description')
- }
-
- $("<div class='autocomplete-item-text'></div>")
- .html(
- text.replace(
- new RegExp(this.term, 'gi'),
- "<span class='ui-state-highlight'>$&</span>")
- + '<span class="autocomplete-item-details">' + description + '</span>'
- )
- .appendTo(insert)
- insert.attr('title', item.value.shareWith)
- if (icon) {
- insert.append('<span class="icon ' + icon + '" title="' + text + '"></span>')
- }
- insert = $('<a>')
- .append(insert)
- return $('<li>')
- .addClass((item.value.shareType === OC.Share.SHARE_TYPE_GROUP) ? 'group' : 'user')
- .append(insert)
- .appendTo(ul)
- },
-
- _onSelectRecipient: function(e, s) {
- var self = this
-
- if (e.keyCode == 9) {
- e.preventDefault()
- if (typeof s.item.name !== 'undefined') {
- e.target.value = s.item.name
- } else {
- e.target.value = s.item.label
- }
- setTimeout(function() {
- $(e.target).attr('disabled', false)
- .autocomplete('search', $(e.target).val())
- }, 0)
- return false
- }
-
- if (s.item.lookup) {
- // Retrigger search but with global lookup this time
- this._lookup = true
- var $shareWithField = this.$el.find('.shareWithField')
- var val = $shareWithField.val()
- setTimeout(function() {
- console.debug('searching again, but globally. search term: ' + val)
- $shareWithField.autocomplete('search', val)
- }, 0)
- return false
- }
-
- e.preventDefault()
- // Ensure that the keydown handler for the input field is not
- // called; otherwise it would try to add the recipient again, which
- // would fail.
- e.stopImmediatePropagation()
- $(e.target).attr('disabled', true)
- .val(s.item.label)
-
- var $loading = this.$el.find('.shareWithLoading')
- var $confirm = this.$el.find('.shareWithConfirm')
-
- $loading.removeClass('hidden')
- $loading.addClass('inlineblock')
- $confirm.addClass('hidden')
- this._pendingOperationsCount++
-
- this.model.addShare(s.item.value, { success: function() {
- // Adding a share changes the suggestions.
- self._lastSuggestions = undefined
-
- $(e.target).val('')
- .attr('disabled', false)
-
- self._pendingOperationsCount--
- if (self._pendingOperationsCount === 0) {
- $loading.addClass('hidden')
- $loading.removeClass('inlineblock')
- $confirm.removeClass('hidden')
- }
- },
- error: function(obj, msg) {
- OC.Notification.showTemporary(msg)
- $(e.target).attr('disabled', false)
- .autocomplete('search', $(e.target).val())
-
- self._pendingOperationsCount--
- if (self._pendingOperationsCount === 0) {
- $loading.addClass('hidden')
- $loading.removeClass('inlineblock')
- $confirm.removeClass('hidden')
- }
- } })
- },
-
- _confirmShare: function() {
- var self = this
- var $shareWithField = $('.shareWithField')
- var $loading = this.$el.find('.shareWithLoading')
- var $confirm = this.$el.find('.shareWithConfirm')
-
- $loading.removeClass('hidden')
- $loading.addClass('inlineblock')
- $confirm.addClass('hidden')
- this._pendingOperationsCount++
-
- $shareWithField.prop('disabled', true)
-
- // Disabling the autocompletion does not clear its search timeout;
- // removing the focus from the input field does, but only if the
- // autocompletion is not disabled when the field loses the focus.
- // Thus, the field has to be disabled before disabling the
- // autocompletion to prevent an old pending search result from
- // appearing once the field is enabled again.
- $shareWithField.autocomplete('close')
- $shareWithField.autocomplete('disable')
-
- var restoreUI = function() {
- self._pendingOperationsCount--
- if (self._pendingOperationsCount === 0) {
- $loading.addClass('hidden')
- $loading.removeClass('inlineblock')
- $confirm.removeClass('hidden')
- }
-
- $shareWithField.prop('disabled', false)
- $shareWithField.focus()
- }
-
- var perPage = parseInt(OC.config['sharing.maxAutocompleteResults'], 10) || 200
- this._getSuggestions(
- $shareWithField.val(),
- perPage,
- this.model,
- this._lookup
- ).done(function(suggestions, exactMatches) {
- if (suggestions.length === 0) {
- restoreUI()
-
- $shareWithField.autocomplete('enable')
-
- // There is no need to show an error message here; it will
- // be automatically shown when the autocomplete is activated
- // again (due to the focus on the field) and it finds no
- // matches.
-
- return
- }
-
- if (exactMatches.length !== 1) {
- restoreUI()
-
- $shareWithField.autocomplete('enable')
-
- return
- }
-
- var actionSuccess = function() {
- // Adding a share changes the suggestions.
- self._lastSuggestions = undefined
-
- $shareWithField.val('')
-
- restoreUI()
-
- $shareWithField.autocomplete('enable')
- }
-
- var actionError = function(obj, msg) {
- restoreUI()
-
- $shareWithField.autocomplete('enable')
-
- OC.Notification.showTemporary(msg)
- }
-
- self.model.addShare(exactMatches[0].value, {
- success: actionSuccess,
- error: actionError
- })
- }).fail(function(message) {
- restoreUI()
-
- $shareWithField.autocomplete('enable')
-
- // There is no need to show an error message here; it will be
- // automatically shown when the autocomplete is activated again
- // (due to the focus on the field) and getting the suggestions
- // fail.
- })
- },
-
- _toggleLoading: function(state) {
- this._loading = state
- this.$el.find('.subView').toggleClass('hidden', state)
- this.$el.find('.loading').toggleClass('hidden', !state)
- },
-
- _onRequest: function() {
- // only show the loading spinner for the first request (for now)
- if (!this._loadingOnce) {
- this._toggleLoading(true)
- }
- },
-
- _onEndRequest: function() {
- var self = this
- this._toggleLoading(false)
- if (!this._loadingOnce) {
- this._loadingOnce = true
- }
- },
-
- render: function() {
- var self = this
- var baseTemplate = OC.Share.Templates['sharedialogview']
-
- this.$el.html(baseTemplate({
- cid: this.cid,
- shareLabel: t('core', 'Share'),
- sharePlaceholder: this._renderSharePlaceholderPart(),
- isSharingAllowed: this.model.sharePermissionPossible()
- }))
-
- var $shareField = this.$el.find('.shareWithField')
- if ($shareField.length) {
- var shareFieldKeydownHandler = function(event) {
- if (event.keyCode !== 13) {
- return true
- }
-
- self._confirmShare()
-
- return false
- }
-
- $shareField.autocomplete({
- minLength: 0,
- delay: 750,
- focus: function(event) {
- event.preventDefault()
- },
- source: this.autocompleteHandler,
- select: this._onSelectRecipient,
- open: function() {
- var autocomplete = $(this).autocomplete('widget')
- var numberOfItems = autocomplete.find('li').size()
- autocomplete.removeClass('item-count-1')
- autocomplete.removeClass('item-count-2')
- if (numberOfItems <= 2) {
- autocomplete.addClass('item-count-' + numberOfItems)
- }
- }
- }).data('ui-autocomplete')._renderItem = this.autocompleteRenderItem
-
- $shareField.on('keydown', null, shareFieldKeydownHandler)
- }
-
- this.resharerInfoView.$el = this.$el.find('.resharerInfoView')
- this.resharerInfoView.render()
-
- this.linkShareView.$el = this.$el.find('.linkShareView')
- this.linkShareView.render()
-
- this.shareeListView.$el = this.$el.find('.shareeListView')
- this.shareeListView.render()
-
- this.$el.find('.hasTooltip').tooltip()
-
- return this
- },
-
- /**
- * sets whether share by link should be displayed or not. Default is
- * true.
- *
- * @param {bool} showLink
- */
- setShowLink: function(showLink) {
- this._showLink = (typeof showLink === 'boolean') ? showLink : true
- this.linkShareView.showLink = this._showLink
- },
-
- _renderSharePlaceholderPart: function() {
- var allowRemoteSharing = this.configModel.get('isRemoteShareAllowed')
- var allowMailSharing = this.configModel.get('isMailShareAllowed')
-
- if (!allowRemoteSharing && allowMailSharing) {
- return t('core', 'Name or email address...')
- }
- if (allowRemoteSharing && !allowMailSharing) {
- return t('core', 'Name or federated cloud ID...')
- }
- if (allowRemoteSharing && allowMailSharing) {
- return t('core', 'Name, federated cloud ID or email address...')
- }
-
- return t('core', 'Name...')
- }
-
- })
-
- OC.Share.ShareDialogView = ShareDialogView
-
-})()