Browse Source
Merge pull request #55467 from nextcloud/carl/remove-old-federation-settings
Merge pull request #55467 from nextcloud/carl/remove-old-federation-settings
refactor: Remove old unused js files for federation settingspull/55475/head
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 0 additions and 531 deletions
-
143apps/settings/js/federationscopemenu.js
-
278apps/settings/js/federationsettingsview.js
-
107apps/settings/js/settings/personalInfo.js
-
3apps/settings/templates/settings/personal/personal.info.php
@ -1,143 +0,0 @@ |
|||
/** |
|||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc. |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
/* global OC, Handlebars */ |
|||
(function() { |
|||
|
|||
/** |
|||
* Construct a new FederationScopeMenu instance |
|||
* @constructs FederationScopeMenu |
|||
* @memberof OC.Settings |
|||
* @param {object} options |
|||
* @param {array.<string>} [options.excludedScopes] array of excluded scopes |
|||
*/ |
|||
var FederationScopeMenu = OC.Backbone.View.extend({ |
|||
tagName: 'div', |
|||
className: 'federationScopeMenu popovermenu bubble menu menu-center', |
|||
field: undefined, |
|||
_scopes: undefined, |
|||
_excludedScopes: [], |
|||
|
|||
initialize: function(options) { |
|||
this.field = options.field; |
|||
this._scopes = [ |
|||
{ |
|||
name: 'v2-private', |
|||
displayName: t('settings', 'Private'), |
|||
tooltip: t('settings', 'Only visible to people matched via phone number integration through Talk on mobile'), |
|||
iconClass: 'icon-phone', |
|||
active: false |
|||
}, |
|||
{ |
|||
name: 'v2-local', |
|||
displayName: t('settings', 'Local'), |
|||
tooltip: t('settings', 'Only visible to people on this instance and guests'), |
|||
iconClass: 'icon-password', |
|||
active: false |
|||
}, |
|||
{ |
|||
name: 'v2-federated', |
|||
displayName: t('settings', 'Federated'), |
|||
tooltip: t('settings', 'Only synchronize to trusted servers'), |
|||
iconClass: 'icon-contacts-dark', |
|||
active: false |
|||
}, |
|||
{ |
|||
name: 'v2-published', |
|||
displayName: t('settings', 'Published'), |
|||
tooltip: t('settings', 'Synchronize to trusted servers and the global and public address book'), |
|||
iconClass: 'icon-link', |
|||
active: false |
|||
} |
|||
]; |
|||
|
|||
if (options.excludedScopes && options.excludedScopes.length) { |
|||
this._excludedScopes = options.excludedScopes |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Current context |
|||
* |
|||
* @type OCA.Files.FileActionContext |
|||
*/ |
|||
_context: null, |
|||
|
|||
events: { |
|||
'click a.action': '_onSelectScope', |
|||
'keydown a.action': '_onSelectScopeKeyboard' |
|||
}, |
|||
|
|||
/** |
|||
* Event handler whenever an action has been clicked within the menu |
|||
* |
|||
* @param {Object} event event object |
|||
*/ |
|||
_onSelectScope: function(event) { |
|||
var $target = $(event.currentTarget); |
|||
if (!$target.hasClass('menuitem')) { |
|||
$target = $target.closest('.menuitem'); |
|||
} |
|||
|
|||
this.trigger('select:scope', $target.data('action')); |
|||
|
|||
OC.hideMenus(); |
|||
}, |
|||
|
|||
_onSelectScopeKeyboard: function(event) { |
|||
if (event.keyCode === 13 || event.keyCode === 32) { |
|||
// Enter and space can be used to select a scope
|
|||
event.preventDefault(); |
|||
this._onSelectScope(event); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Renders the menu with the currently set items |
|||
*/ |
|||
render: function() { |
|||
this.$el.html(OC.Settings.Templates['federationscopemenu']({ |
|||
items: this._scopes |
|||
})); |
|||
}, |
|||
|
|||
/** |
|||
* Displays the menu |
|||
*/ |
|||
show: function(context) { |
|||
this._context = context; |
|||
var currentlyActiveValue = $('#'+context.target.closest('form').id).find('input[type="hidden"]')[0].value; |
|||
|
|||
for(var i in this._scopes) { |
|||
if (this._scopes[i].name === currentlyActiveValue) { |
|||
this._scopes[i].active = true; |
|||
} else { |
|||
this._scopes[i].active = false; |
|||
} |
|||
|
|||
var isExcludedScope = this._excludedScopes.includes(this._scopes[i].name) |
|||
if (isExcludedScope && !this._scopes[i].active) { |
|||
this._scopes[i].hidden = true |
|||
} else if (isExcludedScope && this._scopes[i].active) { |
|||
this._scopes[i].hidden = false |
|||
this._scopes[i].disabled = true |
|||
} else { |
|||
this._scopes[i].hidden = false |
|||
this._scopes[i].disabled = false |
|||
} |
|||
} |
|||
|
|||
this.render(); |
|||
this.$el.removeClass('hidden'); |
|||
|
|||
OC.showMenu(null, this.$el); |
|||
} |
|||
}); |
|||
|
|||
OC.Settings = OC.Settings || {}; |
|||
OC.Settings.FederationScopeMenu = FederationScopeMenu; |
|||
|
|||
})(); |
@ -1,278 +0,0 @@ |
|||
/* global OC, result, _ */ |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc. |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
(function(_, $, OC) { |
|||
'use strict'; |
|||
|
|||
/** |
|||
* Construct a new FederationScopeMenu instance |
|||
* @constructs FederationScopeMenu |
|||
* @memberof OC.Settings |
|||
* @param {object} options |
|||
* @param {boolean} [options.showFederatedScope=false] whether show the |
|||
* "v2-federated" scope or not |
|||
* @param {boolean} [options.showPublishedScope=false] whether show the |
|||
* "v2-published" scope or not |
|||
*/ |
|||
var FederationSettingsView = OC.Backbone.View.extend({ |
|||
_inputFields: undefined, |
|||
|
|||
/** @var Backbone.Model */ |
|||
_config: undefined, |
|||
|
|||
initialize: function(options) { |
|||
options = options || {}; |
|||
|
|||
if (options.config) { |
|||
this._config = options.config; |
|||
} else { |
|||
this._config = new OC.Settings.UserSettings(); |
|||
} |
|||
this.showFederatedScope = !!options.showFederatedScope; |
|||
this.showPublishedScope = !!options.showPublishedScope; |
|||
|
|||
this._inputFields = [ |
|||
'displayname', |
|||
'phone', |
|||
'email', |
|||
'website', |
|||
'twitter', |
|||
'address', |
|||
'avatar' |
|||
]; |
|||
|
|||
var self = this; |
|||
_.each(this._inputFields, function(field) { |
|||
var scopeOnly = field === 'avatar'; |
|||
|
|||
// Initialize config model
|
|||
if (!scopeOnly) { |
|||
self._config.set(field, $('#' + field).val()); |
|||
} |
|||
self._config.set(field + 'Scope', $('#' + field + 'scope').val()); |
|||
|
|||
// Set inputs whenever model values change
|
|||
if (!scopeOnly) { |
|||
self.listenTo(self._config, 'change:' + field, function() { |
|||
self.$('#' + field).val(self._config.get(field)); |
|||
}); |
|||
} |
|||
self.listenTo(self._config, 'change:' + field + 'Scope', function() { |
|||
self._setFieldScopeIcon(field, self._config.get(field + 'Scope')); |
|||
}); |
|||
}); |
|||
|
|||
this._registerEvents(); |
|||
}, |
|||
|
|||
render: function() { |
|||
var self = this; |
|||
var fieldsWithV2Private = [ |
|||
'avatar', |
|||
'phone', |
|||
'twitter', |
|||
'website', |
|||
'address', |
|||
]; |
|||
|
|||
_.each(this._inputFields, function(field) { |
|||
var $icon = self.$('#' + field + 'form .headerbar-label > .federation-menu'); |
|||
var excludedScopes = [] |
|||
|
|||
if (fieldsWithV2Private.indexOf(field) === -1) { |
|||
excludedScopes.push('v2-private'); |
|||
} |
|||
|
|||
if (!self.showFederatedScope) { |
|||
excludedScopes.push('v2-federated'); |
|||
} |
|||
|
|||
if (!self.showPublishedScope) { |
|||
excludedScopes.push('v2-published'); |
|||
} |
|||
|
|||
var scopeMenu = new OC.Settings.FederationScopeMenu({ |
|||
field: field, |
|||
excludedScopes: excludedScopes, |
|||
}); |
|||
|
|||
self.listenTo(scopeMenu, 'select:scope', function(scope) { |
|||
self._onScopeChanged(field, scope); |
|||
}); |
|||
$icon.append(scopeMenu.$el); |
|||
$icon.attr('aria-expanded', 'false'); |
|||
$icon.on('click', _.bind(scopeMenu.show, scopeMenu)); |
|||
$icon.on('keydown', function(e) { |
|||
if (e.keyCode === 32) { |
|||
// Open the menu when the user presses the space bar
|
|||
e.preventDefault(); |
|||
scopeMenu.show(e); |
|||
} else if (e.keyCode === 27) { |
|||
// Close the menu again if opened
|
|||
OC.hideMenus(); |
|||
} |
|||
}.bind(this)); |
|||
|
|||
// Restore initial state
|
|||
self._setFieldScopeIcon(field, self._config.get(field + 'Scope')); |
|||
}); |
|||
}, |
|||
|
|||
_registerEvents: function() { |
|||
var self = this; |
|||
_.each(this._inputFields, function(field) { |
|||
if ( |
|||
field === 'avatar' || |
|||
field === 'email' || |
|||
field === 'displayname' || |
|||
field === 'twitter' || |
|||
field === 'address' || |
|||
field === 'website' || |
|||
field === 'phone' |
|||
) { |
|||
return; |
|||
} |
|||
self.$('#' + field).keyUpDelayedOrEnter(_.bind(self._onInputChanged, self), true); |
|||
}); |
|||
}, |
|||
|
|||
_onInputChanged: function(e) { |
|||
var self = this; |
|||
|
|||
var $dialog = $('.oc-dialog:visible'); |
|||
if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { |
|||
if($dialog.length === 0) { |
|||
OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this._onInputChanged, this, e)); |
|||
} |
|||
return; |
|||
} |
|||
var $target = $(e.target); |
|||
var value = $target.val(); |
|||
var field = $target.attr('id'); |
|||
this._config.set(field, value); |
|||
|
|||
var savingData = this._config.save({ |
|||
error: function(jqXHR) { |
|||
OC.msg.finishedSaving('#personal-settings-container .msg', jqXHR); |
|||
} |
|||
}); |
|||
|
|||
$.when(savingData).done(function(data) { |
|||
if (data.status === "success") { |
|||
self._showInputChangeSuccess(field); |
|||
} else { |
|||
self._showInputChangeFail(field); |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
_onScopeChanged: function(field, scope) { |
|||
var $dialog = $('.oc-dialog:visible'); |
|||
if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { |
|||
if($dialog.length === 0) { |
|||
OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this._onScopeChanged, this, field, scope)); |
|||
} |
|||
return; |
|||
} |
|||
|
|||
this._config.set(field + 'Scope', scope); |
|||
|
|||
$('#' + field + 'scope').val(scope); |
|||
|
|||
// TODO: user loading/success feedback
|
|||
this._config.save(); |
|||
this._setFieldScopeIcon(field, scope); |
|||
this._updateVerifyButton(field, scope); |
|||
}, |
|||
|
|||
_updateVerifyButton: function(field, scope) { |
|||
// show verification button if the value is set and the scope is 'public'
|
|||
if (field === 'twitter' || field === 'website'|| field === 'email') { |
|||
var verify = this.$('#' + field + 'form > .verify'); |
|||
var scope = this.$('#' + field + 'scope').val(); |
|||
var value = this.$('#' + field).val(); |
|||
|
|||
if (scope === 'public' && value !== '') { |
|||
verify.removeClass('hidden'); |
|||
return true; |
|||
} else { |
|||
verify.addClass('hidden'); |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
}, |
|||
|
|||
_showInputChangeSuccess: function(field) { |
|||
var $icon = this.$('#' + field + 'form > .icon-checkmark'); |
|||
$icon.fadeIn(200); |
|||
setTimeout(function() { |
|||
$icon.fadeOut(300); |
|||
}, 2000); |
|||
|
|||
var scope = this.$('#' + field + 'scope').val(); |
|||
var verifyAvailable = this._updateVerifyButton(field, scope); |
|||
|
|||
// change verification buttons from 'verify' to 'verifying...' on value change
|
|||
if (verifyAvailable) { |
|||
if (field === 'twitter' || field === 'website') { |
|||
var verifyStatus = this.$('#' + field + 'form > .verify > #verify-' + field); |
|||
verifyStatus.attr('data-origin-title', t('settings', 'Verify')); |
|||
verifyStatus.attr('src', OC.imagePath('core', 'actions/verify.svg')); |
|||
verifyStatus.data('status', '0'); |
|||
verifyStatus.addClass('verify-action'); |
|||
} else if (field === 'email') { |
|||
var verifyStatus = this.$('#' + field + 'form > .verify > #verify-' + field); |
|||
verifyStatus.attr('data-origin-title', t('settings', 'Verifying …')); |
|||
verifyStatus.data('status', '1'); |
|||
verifyStatus.attr('src', OC.imagePath('core', 'actions/verifying.svg')); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
_showInputChangeFail: function(field) { |
|||
var $icon = this.$('#' + field + 'form > .icon-error'); |
|||
$icon.fadeIn(200); |
|||
setTimeout(function() { |
|||
$icon.fadeOut(300); |
|||
}, 2000); |
|||
}, |
|||
|
|||
_setFieldScopeIcon: function(field, scope) { |
|||
var $icon = this.$('#' + field + 'form > .headerbar-label .icon-federation-menu'); |
|||
|
|||
$icon.removeClass('icon-phone'); |
|||
$icon.removeClass('icon-password'); |
|||
$icon.removeClass('icon-contacts-dark'); |
|||
$icon.removeClass('icon-link'); |
|||
$icon.addClass('hidden'); |
|||
|
|||
switch (scope) { |
|||
case 'v2-private': |
|||
$icon.addClass('icon-phone'); |
|||
$icon.removeClass('hidden'); |
|||
break; |
|||
case 'v2-local': |
|||
$icon.addClass('icon-password'); |
|||
$icon.removeClass('hidden'); |
|||
break; |
|||
case 'v2-federated': |
|||
$icon.addClass('icon-contacts-dark'); |
|||
$icon.removeClass('hidden'); |
|||
break; |
|||
case 'v2-published': |
|||
$icon.addClass('icon-link'); |
|||
$icon.removeClass('hidden'); |
|||
break; |
|||
} |
|||
} |
|||
}); |
|||
|
|||
OC.Settings = OC.Settings || {}; |
|||
OC.Settings.FederationSettingsView = FederationSettingsView; |
|||
})(_, $, OC); |
@ -1,107 +0,0 @@ |
|||
/* global OC */ |
|||
|
|||
/** |
|||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors |
|||
* SPDX-FileCopyrightText: 2011-2016 ownCloud, Inc. |
|||
* SPDX-License-Identifier: AGPL-3.0-or-later |
|||
*/ |
|||
|
|||
OC.Settings = OC.Settings || {}; |
|||
|
|||
/** |
|||
* The callback will be fired as soon as enter is pressed by the |
|||
* user or 1 second after the last data entry |
|||
* |
|||
* @param {any} callback - |
|||
* @param allowEmptyValue if this is set to true the callback is also called when the value is empty |
|||
*/ |
|||
jQuery.fn.keyUpDelayedOrEnter = function (callback, allowEmptyValue) { |
|||
var cb = callback; |
|||
var that = this; |
|||
|
|||
this.on('input', _.debounce(function (event) { |
|||
// enter is already handled in keypress
|
|||
if (event.keyCode === 13) { |
|||
return; |
|||
} |
|||
if (allowEmptyValue || that.val() !== '') { |
|||
cb(event); |
|||
} |
|||
}, 1000)); |
|||
|
|||
this.keypress(function (event) { |
|||
if (event.keyCode === 13 && (allowEmptyValue || that.val() !== '')) { |
|||
event.preventDefault(); |
|||
cb(event); |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
window.addEventListener('DOMContentLoaded', function () { |
|||
if($('#pass2').length) { |
|||
$('#pass2').showPassword().keyup(); |
|||
} |
|||
|
|||
var showVerifyDialog = function(dialog, howToVerify, verificationCode) { |
|||
var dialogContent = dialog.children('.verification-dialog-content'); |
|||
dialogContent.children(".explainVerification").text(howToVerify); |
|||
dialogContent.children(".verificationCode").text(verificationCode); |
|||
dialog.css('display', 'block'); |
|||
}; |
|||
|
|||
$(".verify").click(function (event) { |
|||
|
|||
event.stopPropagation(); |
|||
|
|||
var verify = $(this); |
|||
var indicator = $(this).children('img'); |
|||
var accountId = indicator.attr('id'); |
|||
var status = indicator.data('status'); |
|||
|
|||
var onlyVerificationCode = false; |
|||
if (parseInt(status) === 1) { |
|||
onlyVerificationCode = true; |
|||
} |
|||
|
|||
if (indicator.hasClass('verify-action')) { |
|||
$.ajax( |
|||
OC.generateUrl('/settings/users/{account}/verify', {account: accountId}), |
|||
{ |
|||
method: 'GET', |
|||
data: {onlyVerificationCode: onlyVerificationCode} |
|||
} |
|||
).done(function (data) { |
|||
var dialog = verify.children('.verification-dialog'); |
|||
showVerifyDialog($(dialog), data.msg, data.code); |
|||
indicator.attr('data-origin-title', t('settings', 'Verifying …')); |
|||
indicator.attr('src', OC.imagePath('core', 'actions/verifying.svg')); |
|||
indicator.data('status', '1'); |
|||
}); |
|||
} |
|||
|
|||
}); |
|||
|
|||
// When the user clicks anywhere outside of the verification dialog we close it
|
|||
$(document).click(function(event){ |
|||
var element = event.target; |
|||
var isDialog = $(element).hasClass('verificationCode') |
|||
|| $(element).hasClass('explainVerification') |
|||
|| $(element).hasClass('verification-dialog-content') |
|||
|| $(element).hasClass('verification-dialog'); |
|||
if (!isDialog) { |
|||
$(document).find('.verification-dialog').css('display', 'none'); |
|||
} |
|||
}); |
|||
|
|||
|
|||
var settingsEl = $('#personal-settings') |
|||
var userSettings = new OC.Settings.UserSettings(); |
|||
var federationSettingsView = new OC.Settings.FederationSettingsView({ |
|||
el: settingsEl, |
|||
config: userSettings, |
|||
showFederatedScope: !!settingsEl.data('federation-enabled'), |
|||
showPublishedScope: !!settingsEl.data('lookup-server-upload-enabled'), |
|||
}); |
|||
|
|||
federationSettingsView.render(); |
|||
}); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue