diff --git a/apps/settings/css/settings.css b/apps/settings/css/settings.css index dc148a4c543ea..08784e6c28c4b 100644 --- a/apps/settings/css/settings.css +++ b/apps/settings/css/settings.css @@ -8,4 +8,4 @@ *//*! * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later - */input#openid,input#webdav{width:20em}.clear{clear:both}#personal-settings-avatar-container{display:inline-grid;grid-template-columns:1fr;grid-template-rows:2fr 1fr 2fr;vertical-align:top}.profile-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-show-container{width:100%}.personal-settings-setting-box .section{padding:10px 30px}.personal-settings-setting-box .section .headerbar-label{margin-bottom:0}.personal-settings-setting-box .section input[type=text],.personal-settings-setting-box .section input[type=email],.personal-settings-setting-box .section input[type=tel],.personal-settings-setting-box .section input[type=url]{width:100%}.personal-settings-setting-box-profile{grid-row:3/5}.personal-settings-setting-box-detail{grid-row:5}.personal-settings-setting-box-detail--without-profile{grid-row:3}select#timezone{width:100%}#personal-settings{display:grid;padding:20px;max-width:1700px;grid-template-columns:repeat(auto-fill, minmax(min(100%, 300px), 1fr));column-gap:10px}#personal-settings .section{padding:10px 10px;border:0}#personal-settings .section h2{margin-bottom:12px}#personal-settings .section h3>label{font-weight:bold}#personal-settings .personal-info{margin-inline-end:10%;margin-bottom:12px;margin-top:12px}#personal-settings .personal-info[class^=icon-],#personal-settings .personal-info[class*=" icon-"]{background-position:0px 2px;padding-inline-start:30px;opacity:.7}.development-notice{text-align:center}.development-notice a:not(.link-button){text-decoration:underline}.link-button{display:inline-flex;margin:calc(2*var(--default-grid-baseline));padding:calc(2*var(--default-grid-baseline)) calc(4*var(--default-grid-baseline));background-color:var(--color-primary-element);color:var(--color-primary-element-text);border-radius:var(--border-radius-element);border:1px solid var(--color-primary-element);box-shadow:0 2px 9px var(--color-box-shadow);align-items:center;gap:calc(var(--default-grid-baseline)*2)}.link-button:hover,.link-button:focus{background-color:var(--color-primary-element-hover)}.link-button:active,.link-button:focus-visible{box-shadow:0 0 0 4px var(--color-main-background) !important;outline:2px solid var(--color-main-text) !important}.link-button .icon-file-text{filter:var(--primary-invert-if-dark);width:20px;height:20px}.personal-settings-container{display:inline-grid;grid-template-columns:1fr 1fr 1fr}.personal-settings-container:after{clear:both}.personal-settings-container>div h3{position:relative;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start;width:100%;align-items:center;gap:8px}.personal-settings-container>div h3>label{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-settings-container>div>form span[class^=icon-checkmark],.personal-settings-container>div>form span[class^=icon-error]{position:relative;inset-inline-end:8px;top:-28px;pointer-events:none;float:right}.personal-settings-container .verify{position:relative;inset-inline-start:100%;top:0;height:0}.personal-settings-container .verify img{padding:12px 7px 6px}.personal-settings-container .verify-action{cursor:pointer}.personal-settings-container input:disabled{background-color:#fff;color:#000;border:none;opacity:100}.verification-dialog{display:none;inset-inline-end:-9px;top:40px;width:275px}.verification-dialog p{padding:10px}.verification-dialog .verificationCode{font-family:monospace;display:block;overflow-wrap:break-word}.clientsbox img{height:60px}#sslCertificate tr.expired{background-color:rgba(255,0,0,.5)}#sslCertificate td{padding:5px}#displaynameerror,#displaynamechanged{display:none}input#identity{width:20em}#showWizard{display:inline-block}.msg.success{color:#fff;background-color:#47a447;padding:3px}.msg.error{color:#fff;background-color:#d2322d;padding:3px}table.nostyle label{margin-inline-end:2em}table.nostyle td{padding:.2em 0}#two-factor-auth h3{margin-top:24px}#two-factor-auth li>div{margin-inline-start:20px}#two-factor-auth .two-factor-provider-settings-icon{width:16px;height:16px;filter:var(--background-invert-if-dark)}.isgroup .groupname{width:85%;display:block;overflow:hidden;text-overflow:ellipsis}.isgroup.active .groupname{width:65%}#usersearchform{position:absolute;top:2px;inset-inline-end:0}#usersearchform input{width:150px}#usersearchform label{font-weight:bold}table.grid{width:100%}table.grid th{height:2em;padding:0;padding-inline-end:1em;border-bottom:1px solid var(--color-border);text-align:start;font-weight:normal}table.grid td{border-bottom:1px solid var(--color-border);padding:0;padding-inline-end:1em;text-align:start;font-weight:normal}td.name,th.name{padding-inline-start:.8em;min-width:5em;max-width:12em;text-overflow:ellipsis;overflow:hidden}td.password,th.password{padding-inline-start:.8em}td.password>img,th.password>img{visibility:hidden}td.displayName>img,th.displayName>img{visibility:hidden}td.password,td.mailAddress,th.password,th.mailAddress{min-width:5em;max-width:12em;cursor:pointer}td.password span,td.mailAddress span,th.password span,th.mailAddress span{width:90%;display:inline-block;text-overflow:ellipsis;overflow:hidden}td.mailAddress,th.mailAddress{cursor:pointer}td.password>span,th.password>span{margin-inline-end:1.2em;color:#c7c7c7}span.usersLastLoginTooltip{white-space:nowrap}.section{margin-bottom:0}.section:not(:last-child){border-bottom:1px solid var(--color-border)}.section h2{display:inline-flex;align-items:center;justify-content:center;font-size:20px;font-weight:bold;max-width:900px;margin-top:0}.section h2 .icon-info{display:flex;align-items:center;justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);margin:calc((var(--default-clickable-area) - 16px)/2*-1);margin-inline-start:0;color:var(--color-text-maxcontrast)}.section p{margin-top:-0.2em;margin-bottom:1em;color:var(--color-text-maxcontrast);max-width:900px}#log{white-space:normal;margin-bottom:14px}#lessLog{display:none}table.grid td.date{white-space:nowrap}#log-section p{margin-top:20px}#shareAPI.loading>div{display:none}#shareAPI p{padding-bottom:.8em}#shareAPI .indent{padding-inline-start:28px}#shareAPI .double-indent{padding-inline-start:56px}#shareAPI .nocheckbox{padding-inline-start:20px}#shareAPI #s2id_linksExcludedGroups{width:200px !important}#shareApiDefaultPermissionsSection label{margin-inline-end:20px}#fileSharingSettings h3{display:inline-block}#publicShareDisclaimerText{width:calc(100% - 23px);max-width:600px;height:150px;margin-inline-start:20px;box-sizing:border-box}.icon-info{padding:11px 20px;vertical-align:text-bottom;opacity:.5}#two-factor-auth h2,#shareAPI h2,#mail_general_settings h2{display:inline-block}.mail_settings p label:first-child{display:inline-block;width:300px;text-align:end}.mail_settings p select:nth-child(2),.mail_settings p input:not([type=button]){width:143px}@media(max-width: 768px){.mail_settings p label:first-child{width:unset;text-align:start;display:block;margin-top:calc(var(--default-grid-baseline)*2)}}#mail_smtpport{width:60px}.cronlog{margin-inline-start:10px}.status{display:inline-block;height:16px;width:16px;vertical-align:text-bottom}.status.success{border-radius:50%}#selectGroups select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}#log .log-message{word-break:break-all;min-width:180px}span.success{background-color:var(--color-success);border-radius:var(--border-radius)}span.error{background-color:var(--color-error)}span.indeterminate{background-color:var(--color-warning);border-radius:40% 0}doesnotexist:-o-prefocus,.strengthify-wrapper{inset-inline-start:185px;width:129px}.trusted-domain-warning{color:#fff;padding:5px;background:#ce3702;border-radius:5px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#warning{color:red}.settings-hint{color:var(--color-text-maxcontrast);margin-block:-12px 12px}.animated{animation:blink-animation 1s steps(5, start) 4}@keyframes blink-animation{to{opacity:.6}}@-webkit-keyframes blink-animation{to{opacity:1}}#sendtestmail_msg.error{display:inline-block;margin-top:5px;border-radius:var(--border-radius);padding:5px 10px}/*# sourceMappingURL=settings.css.map */ + */input#openid,input#webdav{width:20em}.clear{clear:both}.development-notice{text-align:center}.development-notice a:not(.link-button){text-decoration:underline}.link-button{display:inline-flex;margin:calc(2*var(--default-grid-baseline));padding:calc(2*var(--default-grid-baseline)) calc(4*var(--default-grid-baseline));background-color:var(--color-primary-element);color:var(--color-primary-element-text);border-radius:var(--border-radius-element);border:1px solid var(--color-primary-element);box-shadow:0 2px 9px var(--color-box-shadow);align-items:center;gap:calc(var(--default-grid-baseline)*2)}.link-button:hover,.link-button:focus{background-color:var(--color-primary-element-hover)}.link-button:active,.link-button:focus-visible{box-shadow:0 0 0 4px var(--color-main-background) !important;outline:2px solid var(--color-main-text) !important}.link-button .icon-file-text{filter:var(--primary-invert-if-dark);width:20px;height:20px}.verification-dialog{display:none;inset-inline-end:-9px;top:40px;width:275px}.verification-dialog p{padding:10px}.verification-dialog .verificationCode{font-family:monospace;display:block;overflow-wrap:break-word}.clientsbox img{height:60px}#sslCertificate tr.expired{background-color:rgba(255,0,0,.5)}#sslCertificate td{padding:5px}#displaynameerror,#displaynamechanged{display:none}input#identity{width:20em}#showWizard{display:inline-block}.msg.success{color:#fff;background-color:#47a447;padding:3px}.msg.error{color:#fff;background-color:#d2322d;padding:3px}table.nostyle label{margin-inline-end:2em}table.nostyle td{padding:.2em 0}#two-factor-auth h3{margin-top:24px}#two-factor-auth li>div{margin-inline-start:20px}#two-factor-auth .two-factor-provider-settings-icon{width:16px;height:16px;filter:var(--background-invert-if-dark)}.isgroup .groupname{width:85%;display:block;overflow:hidden;text-overflow:ellipsis}.isgroup.active .groupname{width:65%}#usersearchform{position:absolute;top:2px;inset-inline-end:0}#usersearchform input{width:150px}#usersearchform label{font-weight:bold}table.grid{width:100%}table.grid th{height:2em;padding:0;padding-inline-end:1em;border-bottom:1px solid var(--color-border);text-align:start;font-weight:normal}table.grid td{border-bottom:1px solid var(--color-border);padding:0;padding-inline-end:1em;text-align:start;font-weight:normal}td.name,th.name{padding-inline-start:.8em;min-width:5em;max-width:12em;text-overflow:ellipsis;overflow:hidden}td.password,th.password{padding-inline-start:.8em}td.password>img,th.password>img{visibility:hidden}td.displayName>img,th.displayName>img{visibility:hidden}td.password,td.mailAddress,th.password,th.mailAddress{min-width:5em;max-width:12em;cursor:pointer}td.password span,td.mailAddress span,th.password span,th.mailAddress span{width:90%;display:inline-block;text-overflow:ellipsis;overflow:hidden}td.mailAddress,th.mailAddress{cursor:pointer}td.password>span,th.password>span{margin-inline-end:1.2em;color:#c7c7c7}span.usersLastLoginTooltip{white-space:nowrap}.section{margin-bottom:0}.section:not(:last-child){border-bottom:1px solid var(--color-border)}.section h2{display:inline-flex;align-items:center;justify-content:center;font-size:20px;font-weight:bold;max-width:900px;margin-top:0}.section h2 .icon-info{display:flex;align-items:center;justify-content:center;width:var(--default-clickable-area);height:var(--default-clickable-area);margin:calc((var(--default-clickable-area) - 16px)/2*-1);margin-inline-start:0;color:var(--color-text-maxcontrast)}.section p{margin-top:-0.2em;margin-bottom:1em;color:var(--color-text-maxcontrast);max-width:900px}#log{white-space:normal;margin-bottom:14px}#lessLog{display:none}table.grid td.date{white-space:nowrap}#log-section p{margin-top:20px}#shareAPI.loading>div{display:none}#shareAPI p{padding-bottom:.8em}#shareAPI .indent{padding-inline-start:28px}#shareAPI .double-indent{padding-inline-start:56px}#shareAPI .nocheckbox{padding-inline-start:20px}#shareAPI #s2id_linksExcludedGroups{width:200px !important}#shareApiDefaultPermissionsSection label{margin-inline-end:20px}#fileSharingSettings h3{display:inline-block}#publicShareDisclaimerText{width:calc(100% - 23px);max-width:600px;height:150px;margin-inline-start:20px;box-sizing:border-box}.icon-info{padding:11px 20px;vertical-align:text-bottom;opacity:.5}#two-factor-auth h2,#shareAPI h2,#mail_general_settings h2{display:inline-block}.mail_settings p label:first-child{display:inline-block;width:300px;text-align:end}.mail_settings p select:nth-child(2),.mail_settings p input:not([type=button]){width:143px}@media(max-width: 768px){.mail_settings p label:first-child{width:unset;text-align:start;display:block;margin-top:calc(var(--default-grid-baseline)*2)}}#mail_smtpport{width:60px}.cronlog{margin-inline-start:10px}.status{display:inline-block;height:16px;width:16px;vertical-align:text-bottom}.status.success{border-radius:50%}#selectGroups select{box-sizing:border-box;display:inline-block;height:36px;padding:7px 10px}#log .log-message{word-break:break-all;min-width:180px}span.success{background-color:var(--color-success);border-radius:var(--border-radius)}span.error{background-color:var(--color-error)}span.indeterminate{background-color:var(--color-warning);border-radius:40% 0}doesnotexist:-o-prefocus,.strengthify-wrapper{inset-inline-start:185px;width:129px}.trusted-domain-warning{color:#fff;padding:5px;background:#ce3702;border-radius:5px;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace}#warning{color:red}.settings-hint{color:var(--color-text-maxcontrast);margin-block:-12px 12px}.animated{animation:blink-animation 1s steps(5, start) 4}@keyframes blink-animation{to{opacity:.6}}@-webkit-keyframes blink-animation{to{opacity:1}}#sendtestmail_msg.error{display:inline-block;margin-top:5px;border-radius:var(--border-radius);padding:5px 10px}/*# sourceMappingURL=settings.css.map */ diff --git a/apps/settings/css/settings.css.map b/apps/settings/css/settings.css.map index af06e466995e3..be47736234cba 100644 --- a/apps/settings/css/settings.css.map +++ b/apps/settings/css/settings.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["settings.scss","../../../core/css/variables.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA,GCEA;AAAA;AAAA;AAAA,GCFA;AAAA;AAAA;AAAA,GFWC,0BACC,WAKF,OACC,WAGD,oCACC,oBACA,0BACA,+BACA,mBAGD,4BACC,oBACA,kCAGD,yBACC,WAIA,wCACC,kBACA,yDACC,gBAIA,mOACC,WAKH,uCACC,aAGD,sCACC,WAED,uDACC,WAKD,gBACC,WAIF,mBACC,aACA,aACA,iBACA,uEACA,gBAEA,4BACC,kBACA,SAEA,+BACC,mBAIA,qCACC,iBAKH,kCACC,sBACA,mBACA,gBAGD,mGACC,4BACA,0BACA,WAMF,oBACC,kBACA,wCACC,0BAIF,aACC,oBACA,4CACA,kFACA,8CACA,wCACA,2CACA,8CACA,6CACA,mBACA,yCAEA,sCAEC,oDAGD,+CAEC,6DACA,oDAGD,6BACC,qCACA,WACA,YAIF,6BACC,oBACA,kCAEA,mCACC,WAIA,oCACC,kBACA,oBACA,iBACA,2BACA,WACA,mBACA,QAEA,0CACC,mBACA,uBACA,gBAKD,gIACC,kBACA,qBACA,UACA,oBACA,YAKH,qCACC,kBACA,wBACA,MACA,SAEA,yCACC,qBAIF,4CACC,eAGD,4CACC,sBACA,WACA,YACA,YAMF,qBACC,aACA,sBACA,SACA,YAEA,uBACC,aAGD,uCACC,sBACA,cACA,yBAIF,gBACC,YAIA,2BACC,kCAGD,mBACC,YAIF,sCAEC,aAGD,eACC,WAGD,YACC,qBAIA,aACC,WACA,yBACA,YAGD,WACC,WACA,yBACA,YAMD,oBACC,sBAGD,iBACC,eAOD,oBACC,gBAGD,wBACC,yBAGD,oDACC,WACA,YACA,wCAOD,oBACC,UACA,cACA,gBACA,uBAGD,2BACC,UAIF,gBACC,kBACA,QACA,mBAEA,sBACC,YAGD,sBACC,iBAKF,WACC,WAEA,cACC,WACA,UACA,uBACA,4CACA,iBACA,mBAGD,cACC,4CACA,UACA,uBACA,iBACA,mBAKD,gBACC,0BACA,cACA,eACA,uBACA,gBAGD,wBACC,0BAEA,gCACC,kBAIF,sCACC,kBAGD,sDAEC,cACA,eACA,eAEA,0EACC,UACA,qBACA,uBACA,gBAIF,8BACC,eAGD,kCACC,wBACA,cAIF,2BACC,mBAKD,SACC,gBAEA,0BACC,4CAID,YACC,oBACA,mBACA,uBACA,eACA,iBACA,gBACA,aAEA,uBACC,aACA,mBACA,uBACA,oCACA,qCACA,yDACA,sBACA,oCAKF,WACC,kBACA,kBACA,oCACA,gBAKF,KACC,mBACA,mBAGD,SACC,aAGD,mBACC,mBAGD,eACC,gBAIA,sBACC,aAGD,YACC,oBAGD,kBACC,0BAGD,yBACC,0BAGD,sBACC,0BAGD,oCACC,uBAIF,yCACC,uBAGD,wBACC,qBAGD,2BACC,wBAEA,gBACA,aACA,yBACA,sBAKD,WACC,kBACA,2BACA,WAGD,2DAGC,qBAIA,mCACC,qBACA,YACA,eAGD,+EAEC,YAIF,yBACC,mCACC,YACA,iBACA,cACA,iDAIF,eACC,WAGD,SACC,yBAGD,QACC,qBACA,YACA,WACA,2BAEA,gBACC,kBAIF,qBACC,sBACA,qBACA,YACA,iBAGD,kBACC,qBACA,gBAIA,aACC,sCACA,mCAGD,WACC,oCAGD,mBACC,sCACA,oBAMF,8CACC,yBACA,YAGD,wBACC,WACA,YACA,mBACA,kBACA,+DAGD,SACC,UAGD,eACC,oCACA,wBAGD,UACI,+CAGJ,2BACE,GACE,YAGJ,mCACE,GACE,WAKH,wBACC,qBACA,eACA,mCACA","file":"settings.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["settings.scss","../../../core/css/variables.scss","../../../core/css/functions.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA,GCEA;AAAA;AAAA;AAAA,GCFA;AAAA;AAAA;AAAA,GFWC,0BACC,WAKF,OACC,WAID,oBACC,kBACA,wCACC,0BAIF,aACC,oBACA,4CACA,kFACA,8CACA,wCACA,2CACA,8CACA,6CACA,mBACA,yCAEA,sCAEC,oDAGD,+CAEC,6DACA,oDAGD,6BACC,qCACA,WACA,YAMF,qBACC,aACA,sBACA,SACA,YAEA,uBACC,aAGD,uCACC,sBACA,cACA,yBAIF,gBACC,YAIA,2BACC,kCAGD,mBACC,YAIF,sCAEC,aAGD,eACC,WAGD,YACC,qBAIA,aACC,WACA,yBACA,YAGD,WACC,WACA,yBACA,YAMD,oBACC,sBAGD,iBACC,eAOD,oBACC,gBAGD,wBACC,yBAGD,oDACC,WACA,YACA,wCAOD,oBACC,UACA,cACA,gBACA,uBAGD,2BACC,UAIF,gBACC,kBACA,QACA,mBAEA,sBACC,YAGD,sBACC,iBAKF,WACC,WAEA,cACC,WACA,UACA,uBACA,4CACA,iBACA,mBAGD,cACC,4CACA,UACA,uBACA,iBACA,mBAKD,gBACC,0BACA,cACA,eACA,uBACA,gBAGD,wBACC,0BAEA,gCACC,kBAIF,sCACC,kBAGD,sDAEC,cACA,eACA,eAEA,0EACC,UACA,qBACA,uBACA,gBAIF,8BACC,eAGD,kCACC,wBACA,cAIF,2BACC,mBAKD,SACC,gBAEA,0BACC,4CAID,YACC,oBACA,mBACA,uBACA,eACA,iBACA,gBACA,aAEA,uBACC,aACA,mBACA,uBACA,oCACA,qCACA,yDACA,sBACA,oCAKF,WACC,kBACA,kBACA,oCACA,gBAKF,KACC,mBACA,mBAGD,SACC,aAGD,mBACC,mBAGD,eACC,gBAIA,sBACC,aAGD,YACC,oBAGD,kBACC,0BAGD,yBACC,0BAGD,sBACC,0BAGD,oCACC,uBAIF,yCACC,uBAGD,wBACC,qBAGD,2BACC,wBAEA,gBACA,aACA,yBACA,sBAKD,WACC,kBACA,2BACA,WAGD,2DAGC,qBAIA,mCACC,qBACA,YACA,eAGD,+EAEC,YAIF,yBACC,mCACC,YACA,iBACA,cACA,iDAIF,eACC,WAGD,SACC,yBAGD,QACC,qBACA,YACA,WACA,2BAEA,gBACC,kBAIF,qBACC,sBACA,qBACA,YACA,iBAGD,kBACC,qBACA,gBAIA,aACC,sCACA,mCAGD,WACC,oCAGD,mBACC,sCACA,oBAMF,8CACC,yBACA,YAGD,wBACC,WACA,YACA,mBACA,kBACA,+DAGD,SACC,UAGD,eACC,oCACA,wBAGD,UACI,+CAGJ,2BACE,GACE,YAGJ,mCACE,GACE,WAKH,wBACC,qBACA,eACA,mCACA","file":"settings.css"} \ No newline at end of file diff --git a/apps/settings/css/settings.scss b/apps/settings/css/settings.scss index e3d03150fbef9..f0134edeefac0 100644 --- a/apps/settings/css/settings.scss +++ b/apps/settings/css/settings.scss @@ -19,90 +19,6 @@ input { clear: both; } -#personal-settings-avatar-container { - display: inline-grid; - grid-template-columns: 1fr; - grid-template-rows: 2fr 1fr 2fr; - vertical-align: top; -} - -.profile-settings-container { - display: inline-grid; - grid-template-columns: 1fr 1fr 1fr; -} - -.personal-show-container { - width: 100%; -} - -.personal-settings-setting-box { - .section { - padding: 10px 30px; - .headerbar-label { - margin-bottom: 0; - } - - input { - &[type='text'], &[type='email'], &[type='tel'], &[type='url'] { - width: 100%; - } - } - } - - &-profile { - grid-row: 3/5; - } - - &-detail { - grid-row: 5; - } - &-detail--without-profile { - grid-row: 3; - } -} - -select { - &#timezone { - width: 100%; - } -} - -#personal-settings { - display: grid; - padding: 20px; - max-width: 1700px; - grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); - column-gap: 10px; - - .section { - padding: 10px 10px; - border: 0; - - h2 { - margin-bottom: 12px; - } - - h3 { - > label { - font-weight: bold; - } - } - } - - .personal-info { - margin-inline-end: 10%; - margin-bottom: 12px; - margin-top: 12px; - } - - .personal-info[class^='icon-'], .personal-info[class*=' icon-'] { - background-position: 0px 2px; - padding-inline-start: 30px; - opacity: 0.7; - } -} - - // Button for 'Reasons to use Nextcloud in your organization' .development-notice { text-align: center; @@ -141,65 +57,6 @@ select { } } -.personal-settings-container { - display: inline-grid; - grid-template-columns: 1fr 1fr 1fr; - - &:after { - clear: both; - } - - > div { - h3 { - position: relative; - display: inline-flex; - flex-wrap: nowrap; - justify-content: flex-start; - width: 100%; - align-items: center; - gap: 8px; - - > label { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - } - } - - > form span { - &[class^='icon-checkmark'], &[class^='icon-error'] { - position: relative; - inset-inline-end: 8px; - top: -28px; - pointer-events: none; - float: right; - } - } - } - - .verify { - position: relative; - inset-inline-start: 100%; - top: 0; - height: 0; - - img { - padding: 12px 7px 6px; - } - } - - .verify-action { - cursor: pointer; - } - - input:disabled { - background-color: white; - color: black; - border: none; - opacity: 100; - } -} - /* verify accounts */ /* only show pointer cursor when popup will be there */ .verification-dialog { diff --git a/apps/settings/lib/Settings/Personal/PersonalInfo.php b/apps/settings/lib/Settings/Personal/PersonalInfo.php index 0aa70be16ab4b..7e4044ef0b177 100644 --- a/apps/settings/lib/Settings/Personal/PersonalInfo.php +++ b/apps/settings/lib/Settings/Personal/PersonalInfo.php @@ -31,6 +31,7 @@ use OCP\Settings\ISettings; use OCP\Teams\ITeamManager; use OCP\Teams\Team; +use OCP\UserStatus\IManager as IUserStatusManager; use OCP\Util; class PersonalInfo implements ISettings { @@ -47,6 +48,7 @@ public function __construct( private IL10N $l, private IInitialState $initialStateService, private IManager $manager, + private IUserStatusManager $userStatusManager, ) { } @@ -77,6 +79,12 @@ public function getForm(): TemplateResponse { $messageParameters = $this->getMessageParameters($account); + $statusMessage = ''; + if ($this->appManager->isEnabledForUser('user_status')) { + $statuses = $this->userStatusManager->getUserStatuses([$uid]); + $statusMessage = ($statuses[$uid] ?? null)?->getMessage() ?? ''; + } + $parameters = [ 'lookupServerUploadEnabled' => $lookupServerUploadEnabled, 'isFairUseOfFreePushService' => $this->isFairUseOfFreePushService(), @@ -93,6 +101,7 @@ public function getForm(): TemplateResponse { 'usage' => Util::humanFileSize($storageInfo['used']), 'usageRelative' => round($storageInfo['relative']), 'displayName' => $this->getProperty($account, IAccountManager::PROPERTY_DISPLAYNAME), + 'statusMessage' => $statusMessage, 'emailMap' => $this->getEmailMap($account), 'phone' => $this->getProperty($account, IAccountManager::PROPERTY_PHONE), 'defaultPhoneRegion' => $this->config->getSystemValueString('default_phone_region'), @@ -196,15 +205,19 @@ static function (IGroup $group) { } /** - * returns a list of the user's team memberships, sorted alphabetically - * @return list team names + * returns a list of the user's team memberships, sorted alphabetically by display name + * @return list */ private function getTeamMemberships(IUser $user): array { $teams = array_map( - static fn (Team $team): string => $team->getDisplayName(), + static fn (Team $team): array => [ + 'id' => $team->getId(), + 'displayName' => $team->getDisplayName(), + 'link' => $team->getLink(), + ], $this->teamManager->getTeamsForUser($user->getUID()) ); - sort($teams); + usort($teams, static fn (array $a, array $b): int => strcasecmp($a['displayName'], $b['displayName'])); return $teams; } diff --git a/apps/settings/src/components/PersonalInfo/AvatarSection.vue b/apps/settings/src/components/PersonalInfo/AvatarSection.vue index 7953614ae40b4..b304cf9dc8f47 100644 --- a/apps/settings/src/components/PersonalInfo/AvatarSection.vue +++ b/apps/settings/src/components/PersonalInfo/AvatarSection.vue @@ -4,14 +4,27 @@ --> @@ -90,16 +93,19 @@ import { generateUrl } from '@nextcloud/router' import VueCropper from 'vue-cropperjs' import NcAvatar from '@nextcloud/vue/components/NcAvatar' import NcButton from '@nextcloud/vue/components/NcButton' +import NcFormBox from '@nextcloud/vue/components/NcFormBox' +import NcFormBoxButton from '@nextcloud/vue/components/NcFormBoxButton' import Folder from 'vue-material-design-icons/Folder.vue' import Delete from 'vue-material-design-icons/TrashCanOutline.vue' import Upload from 'vue-material-design-icons/TrayArrowUp.vue' -import HeaderBar from './shared/HeaderBar.vue' +import VisibilityScopeControl from './shared/VisibilityScopeControl.vue' import { NAME_READABLE_ENUM } from '../../constants/AccountPropertyConstants.js' import 'cropperjs/dist/cropper.css' const { avatar } = loadState('settings', 'personalInfoParameters', {}) const { avatarChangeSupported } = loadState('settings', 'accountParameters', {}) +const profileEnabledGlobally = loadState('settings', 'profileEnabledGlobally', true) const VALID_MIME_TYPES = ['image/png', 'image/jpeg'] @@ -116,10 +122,12 @@ export default { components: { Delete, Folder, - HeaderBar, NcAvatar, NcButton, + NcFormBox, + NcFormBoxButton, Upload, + VisibilityScopeControl, VueCropper, }, @@ -127,6 +135,7 @@ export default { return { avatar: { ...avatar, readable: NAME_READABLE_ENUM[avatar.name] }, avatarChangeSupported, + profileEnabledGlobally, showCropper: false, loading: false, userId: getCurrentUser().uid, @@ -156,6 +165,10 @@ export default { }, methods: { + onScopeChange(scope) { + this.avatar.scope = scope + }, + activateLocalFilePicker() { // Set to null so that selecting the same file will trigger the change event this.$refs.input.value = null @@ -257,53 +270,64 @@ export default { diff --git a/apps/settings/src/components/PersonalInfo/DetailsSection.vue b/apps/settings/src/components/PersonalInfo/DetailsSection.vue index 1e59936a14de1..80a245fa8f827 100644 --- a/apps/settings/src/components/PersonalInfo/DetailsSection.vue +++ b/apps/settings/src/components/PersonalInfo/DetailsSection.vue @@ -4,30 +4,35 @@ --> @@ -35,10 +40,10 @@ diff --git a/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue b/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue index 69236b6fde32a..c42940c99929e 100644 --- a/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue +++ b/apps/settings/src/components/PersonalInfo/EmailSection/EmailSection.vue @@ -5,15 +5,6 @@ diff --git a/apps/settings/src/components/PersonalInfo/FirstDayOfWeekSection.vue b/apps/settings/src/components/PersonalInfo/FirstDayOfWeekSection.vue index 0c8dc8dcf57c9..bfdea0c6a1f7d 100644 --- a/apps/settings/src/components/PersonalInfo/FirstDayOfWeekSection.vue +++ b/apps/settings/src/components/PersonalInfo/FirstDayOfWeekSection.vue @@ -5,17 +5,13 @@ diff --git a/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSectionEntry.vue b/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSectionEntry.vue index f1a1c607426bb..00a6cdec23e2f 100644 --- a/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSectionEntry.vue +++ b/apps/settings/src/components/PersonalInfo/LocaleSection/LocaleSectionEntry.vue @@ -5,6 +5,10 @@ diff --git a/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue b/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue deleted file mode 100644 index 79472f0adc03e..0000000000000 --- a/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - diff --git a/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue b/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue deleted file mode 100644 index 96ca680bba1ce..0000000000000 --- a/apps/settings/src/components/PersonalInfo/ProfileVisibilitySection/VisibilityDropdown.vue +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - diff --git a/apps/settings/src/components/PersonalInfo/TimezoneSection.vue b/apps/settings/src/components/PersonalInfo/TimezoneSection.vue index a7430ae40502e..ed1c85dcd3d17 100644 --- a/apps/settings/src/components/PersonalInfo/TimezoneSection.vue +++ b/apps/settings/src/components/PersonalInfo/TimezoneSection.vue @@ -8,7 +8,6 @@ import { loadState } from '@nextcloud/initial-state' import { t } from '@nextcloud/l10n' import { ref, watch } from 'vue' import NcTimezonePicker from '@nextcloud/vue/components/NcTimezonePicker' -import HeaderBar from './shared/HeaderBar.vue' import { savePrimaryAccountProperty } from '../../service/PersonalInfo/PersonalInfoService.js' const { timezone: currentTimezone } = loadState<{ timezone: string }>('settings', 'personalInfoParameters') @@ -22,23 +21,19 @@ watch(timezone, () => { diff --git a/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue b/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue index 4bf562498e494..34f1ac09b1b5d 100644 --- a/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue +++ b/apps/settings/src/components/PersonalInfo/shared/FederationControl.vue @@ -28,6 +28,8 @@ {{ supportedScopes.includes(federationScope.name) ? federationScope.tooltip : federationScope.tooltipDisabled }} + + diff --git a/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue b/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue deleted file mode 100644 index 9888de0402583..0000000000000 --- a/apps/settings/src/components/PersonalInfo/shared/HeaderBar.vue +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - diff --git a/apps/settings/src/components/PersonalInfo/shared/VisibilityScopeControl.vue b/apps/settings/src/components/PersonalInfo/shared/VisibilityScopeControl.vue new file mode 100644 index 0000000000000..232eb9325005d --- /dev/null +++ b/apps/settings/src/components/PersonalInfo/shared/VisibilityScopeControl.vue @@ -0,0 +1,334 @@ + + + + + + + diff --git a/apps/settings/src/constants/ProfileConstants.js b/apps/settings/src/constants/ProfileConstants.js index 896adce8708a9..1ed60cb3a3778 100644 --- a/apps/settings/src/constants/ProfileConstants.js +++ b/apps/settings/src/constants/ProfileConstants.js @@ -7,6 +7,8 @@ * SYNC to be kept in sync with `core/Db/ProfileConfig.php` */ +import { mdiEyeOffOutline, mdiEyeOutline, mdiLoginVariant } from '@mdi/js' + /** Enum of profile visibility constants */ export const VISIBILITY_ENUM = Object.freeze({ SHOW: 'show', @@ -21,13 +23,16 @@ export const VISIBILITY_PROPERTY_ENUM = Object.freeze({ [VISIBILITY_ENUM.SHOW]: { name: VISIBILITY_ENUM.SHOW, label: t('settings', 'Show to everyone'), + icon: mdiEyeOutline, }, [VISIBILITY_ENUM.SHOW_USERS_ONLY]: { name: VISIBILITY_ENUM.SHOW_USERS_ONLY, label: t('settings', 'Show to logged in accounts only'), + icon: mdiLoginVariant, }, [VISIBILITY_ENUM.HIDE]: { name: VISIBILITY_ENUM.HIDE, label: t('settings', 'Hide'), + icon: mdiEyeOffOutline, }, }) diff --git a/apps/settings/src/main-personal-info.js b/apps/settings/src/main-personal-info.js index 8407d9dcc100c..e87db2851ca00 100644 --- a/apps/settings/src/main-personal-info.js +++ b/apps/settings/src/main-personal-info.js @@ -4,88 +4,17 @@ */ import { getCSPNonce } from '@nextcloud/auth' -import { loadState } from '@nextcloud/initial-state' import { translate as t } from '@nextcloud/l10n' import Vue from 'vue' -import AvatarSection from './components/PersonalInfo/AvatarSection.vue' -import BiographySection from './components/PersonalInfo/BiographySection.vue' -import BirthdaySection from './components/PersonalInfo/BirthdaySection.vue' -import BlueskySection from './components/PersonalInfo/BlueskySection.vue' -import DetailsSection from './components/PersonalInfo/DetailsSection.vue' -import DisplayNameSection from './components/PersonalInfo/DisplayNameSection.vue' -import EmailSection from './components/PersonalInfo/EmailSection/EmailSection.vue' -import FediverseSection from './components/PersonalInfo/FediverseSection.vue' -import FirstDayOfWeekSection from './components/PersonalInfo/FirstDayOfWeekSection.vue' -import HeadlineSection from './components/PersonalInfo/HeadlineSection.vue' -import LanguageSection from './components/PersonalInfo/LanguageSection/LanguageSection.vue' -import LocaleSection from './components/PersonalInfo/LocaleSection/LocaleSection.vue' -import LocationSection from './components/PersonalInfo/LocationSection.vue' -import OrganisationSection from './components/PersonalInfo/OrganisationSection.vue' -import PhoneSection from './components/PersonalInfo/PhoneSection.vue' -import ProfileSection from './components/PersonalInfo/ProfileSection/ProfileSection.vue' -import ProfileVisibilitySection from './components/PersonalInfo/ProfileVisibilitySection/ProfileVisibilitySection.vue' -import PronounsSection from './components/PersonalInfo/PronounsSection.vue' -import RoleSection from './components/PersonalInfo/RoleSection.vue' -import TimezoneSection from './components/PersonalInfo/TimezoneSection.vue' -import TwitterSection from './components/PersonalInfo/TwitterSection.vue' -import WebsiteSection from './components/PersonalInfo/WebsiteSection.vue' +import PersonalInfoSettings from './views/PersonalInfoSettings.vue' __webpack_nonce__ = getCSPNonce() -const profileEnabledGlobally = loadState('settings', 'profileEnabledGlobally', true) - Vue.mixin({ methods: { t, }, }) -const AvatarView = Vue.extend(AvatarSection) -const BirthdayView = Vue.extend(BirthdaySection) -const DetailsView = Vue.extend(DetailsSection) -const DisplayNameView = Vue.extend(DisplayNameSection) -const EmailView = Vue.extend(EmailSection) -const FediverseView = Vue.extend(FediverseSection) -const FirstDayOfWeekView = Vue.extend(FirstDayOfWeekSection) -const TimezoneView = Vue.extend(TimezoneSection) -const LanguageView = Vue.extend(LanguageSection) -const LocaleView = Vue.extend(LocaleSection) -const LocationView = Vue.extend(LocationSection) -const PhoneView = Vue.extend(PhoneSection) -const PronounsView = Vue.extend(PronounsSection) -const TwitterView = Vue.extend(TwitterSection) -const BlueskyView = Vue.extend(BlueskySection) -const WebsiteView = Vue.extend(WebsiteSection) - -new AvatarView().$mount('#vue-avatar-section') -new DetailsView().$mount('#vue-details-section') -new DisplayNameView().$mount('#vue-displayname-section') -new EmailView().$mount('#vue-email-section') -new PhoneView().$mount('#vue-phone-section') -new LocationView().$mount('#vue-location-section') -new WebsiteView().$mount('#vue-website-section') -new TwitterView().$mount('#vue-twitter-section') -new BlueskyView().$mount('#vue-bluesky-section') -new FediverseView().$mount('#vue-fediverse-section') -new LanguageView().$mount('#vue-language-section') -new LocaleView().$mount('#vue-locale-section') -new FirstDayOfWeekView().$mount('#vue-fdow-section') -new TimezoneView().$mount('#vue-timezone-section') -new BirthdayView().$mount('#vue-birthday-section') -new PronounsView().$mount('#vue-pronouns-section') - -if (profileEnabledGlobally) { - const ProfileView = Vue.extend(ProfileSection) - const OrganisationView = Vue.extend(OrganisationSection) - const RoleView = Vue.extend(RoleSection) - const HeadlineView = Vue.extend(HeadlineSection) - const BiographyView = Vue.extend(BiographySection) - const ProfileVisibilityView = Vue.extend(ProfileVisibilitySection) - - new ProfileView().$mount('#vue-profile-section') - new OrganisationView().$mount('#vue-organisation-section') - new RoleView().$mount('#vue-role-section') - new HeadlineView().$mount('#vue-headline-section') - new BiographyView().$mount('#vue-biography-section') - new ProfileVisibilityView().$mount('#vue-profile-visibility-section') -} +const app = new Vue(PersonalInfoSettings) +app.$mount('#personal-settings') diff --git a/apps/settings/src/views/PersonalInfoSettings.vue b/apps/settings/src/views/PersonalInfoSettings.vue new file mode 100644 index 0000000000000..174ce2ed5c5d3 --- /dev/null +++ b/apps/settings/src/views/PersonalInfoSettings.vue @@ -0,0 +1,88 @@ + + + + + + + diff --git a/apps/settings/templates/settings/personal/personal.info.php b/apps/settings/templates/settings/personal/personal.info.php index 9dc789245be29..9de7e6dd7e133 100644 --- a/apps/settings/templates/settings/personal/personal.info.php +++ b/apps/settings/templates/settings/personal/personal.info.php @@ -18,83 +18,4 @@ -
-

t('Personal info')); ?>

-
- -
-
-
-
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
- - - -
-
- -
-
-
- +