diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index 3290952b..cc423eea 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -243,7 +243,7 @@ class AuthService extends taiga.Service user = @.getUser() if not user or user.read_new_terms return - @termsAnnouncementService.show('GDPR', 'General Data Protection Regulation - Read more!') + @termsAnnouncementService.show() module.service("$tgAuth", AuthService) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 6680bf55..e2957092 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -1611,7 +1611,10 @@ "NEW_USER": "{{username}} has joined Taiga" }, "LEGAL": { - "TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD": "When creating a new account, you agree to our
terms of service and privacy policy." + "TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD": "When creating a new account, you agree to our terms of service and privacy policy.", + "GDPR_ANNOUNCEMENT_TITLE": "General Data Protection Regulation (GDPR)", + "GDPR_ANNOUNCEMENT_DESCRIPTION": "Your saw this comming, right?. Updates to our Terms of Service", + "GDPR_ANNOUNCEMENT_INFOLINK": "Please read our announcement here" }, "EXTERNAL_APP": { "PAGE_TITLE": "An external app requires authentication", diff --git a/app/modules/components/terms-announcement/terms-announcement.directive.coffee b/app/modules/components/terms-announcement/terms-announcement.directive.coffee index 6d3db730..23532d36 100644 --- a/app/modules/components/terms-announcement/terms-announcement.directive.coffee +++ b/app/modules/components/terms-announcement/terms-announcement.directive.coffee @@ -23,8 +23,11 @@ ### -TermsAnnouncementDirective = (TermsAnnouncementService, $repo, $auth) -> +TermsAnnouncementDirective = (TermsAnnouncementService, $repo, $auth, $config) -> link = (scope, el, attrs) -> + scope.privacyPolicyUrl = $config.get("privacyPolicyUrl") + scope.termsOfServiceUrl = $config.get("termsOfServiceUrl") + scope.GDPRUrl = $config.get("GDPRUrl") return { restrict: "AE", @@ -35,7 +38,7 @@ TermsAnnouncementDirective = (TermsAnnouncementService, $repo, $auth) -> TermsAnnouncementService.open = false user = $auth.getUser() - onSuccess = (data) => + onSuccess = (data) -> $auth.setUser(data) user.read_new_terms = true @@ -44,12 +47,6 @@ TermsAnnouncementDirective = (TermsAnnouncementService, $repo, $auth) -> Object.defineProperties(this, { open: { get: () -> return TermsAnnouncementService.open - }, - title: { - get: () -> return TermsAnnouncementService.title - }, - desc: { - get: () -> return TermsAnnouncementService.desc } }) link: link, @@ -59,7 +56,8 @@ TermsAnnouncementDirective = (TermsAnnouncementService, $repo, $auth) -> TermsAnnouncementDirective.$inject = [ "tgTermsAnnouncementService", "$tgRepo", - "$tgAuth" + "$tgAuth", + "$tgConfig" ] angular.module("taigaComponents") diff --git a/app/modules/components/terms-announcement/terms-announcement.jade b/app/modules/components/terms-announcement/terms-announcement.jade index 6736dc43..326ec314 100644 --- a/app/modules/components/terms-announcement/terms-announcement.jade +++ b/app/modules/components/terms-announcement/terms-announcement.jade @@ -1,9 +1,14 @@ -.terms-announcement(ng-class="{visible: vm.open}") +.terms-announcement(ng-class="{visible: vm.open && privacyPolicyUrl && termsOfServiceUrl && GDPRUrl}") .terms-announcement-inner - img.anouncement-decoration(src="/#{v}/images/notification-decoration.png", alt="Loading...") + img.announcement-decoration(src="/#{v}/images/notification-decoration.png", alt="Loading...") .text - h2.title {{vm.title}} - p.warning(ng-bind-html="vm.desc") + h2.title {{'LEGAL.GDPR_ANNOUNCEMENT_TITLE' | translate}} + p.warning {{ 'LEGAL.GDPR_ANNOUNCEMENT_DESCRIPTION' | translate }} + a.gig-title( + href="{{ GDPRUrl }}" + target="_blank" + rel="nofollow" + ) {{'LEGAL.GDPR_ANNOUNCEMENT_INFOLINK' | translate}} a.close( ng-click="vm.close()" href="" diff --git a/app/modules/components/terms-announcement/terms-announcement.scss b/app/modules/components/terms-announcement/terms-announcement.scss index ce76d3db..c76b48e8 100644 --- a/app/modules/components/terms-announcement/terms-announcement.scss +++ b/app/modules/components/terms-announcement/terms-announcement.scss @@ -3,7 +3,6 @@ align-content: center; background: $tribe-primary; display: flex; - height: 0; justify-content: center; overflow: hidden; pointer-events: none; @@ -19,7 +18,7 @@ width: 100%; } &.visible { - height: 146px; + min-height: 146px; pointer-events: auto; transition-delay: 0s; width: 100%; @@ -35,6 +34,7 @@ max-width: 1200px; .announcement-decoration { align-self: flex-end; + height: auto; margin-right: 1rem; } .text { @@ -58,11 +58,11 @@ .close { display: block; position: absolute; - right: 0; + right: .5rem; top: 1rem; svg { @include svg-size(2rem); - fill: lighten($tribe-secondary, 15%); + fill: $mass-white; pointer-events: none; transition: fill .2s; &:hover { @@ -70,4 +70,7 @@ } } } + a { + color: $mass-white; + } } diff --git a/app/modules/components/terms-announcement/terms-announcement.service.coffee b/app/modules/components/terms-announcement/terms-announcement.service.coffee index 55cf87f6..e4438d36 100644 --- a/app/modules/components/terms-announcement/terms-announcement.service.coffee +++ b/app/modules/components/terms-announcement/terms-announcement.service.coffee @@ -14,18 +14,14 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# File: notification.service.coffee +# File: terms-announcement.service.coffee ### class TermsAnnouncementService extends taiga.Service constructor: () -> @.open = false - @.title = "" - @.desc = "" - show: (title, desc) -> + show: () -> @.open = true - @.title = title - @.desc = desc angular.module("taigaComponents").service("tgTermsAnnouncementService", TermsAnnouncementService) diff --git a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee index f7236786..96ff3388 100644 --- a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee +++ b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee @@ -27,11 +27,19 @@ TermsOfServiceAndPrivacyPolicyNoticeDirective = ($config) -> link = (scope, el, attrs) -> scope.privacyPolicyUrl = $config.get("privacyPolicyUrl") scope.termsOfServiceUrl = $config.get("termsOfServiceUrl") + scope.target = false + + el.on "change", "input[name='accepted_terms']", (event) -> + target = angular.element(event.currentTarget) + scope.target = target.is(":checked") + scope.$apply() return { restrict: "AE", - scope: {}, link: link, + scope: { + target: "=" + } templateUrl: "components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html" } diff --git a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.jade b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.jade index c609f5dd..4b2170ac 100644 --- a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.jade +++ b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.jade @@ -1,5 +1,10 @@ -p.register-text( - ng-if="privacyPolicyUrl && termsOfServiceUrl" - translate="LEGAL.TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD" - translate-values="{termsOfServiceUrl: termsOfServiceUrl, privacyPolicyUrl: privacyPolicyUrl}" -) +p.register-terms(ng-if="privacyPolicyUrl && termsOfServiceUrl") + input.accepted_terms( + type="checkbox" + data-required="true" + name="accepted_terms" + ) + span.register-text( + translate="LEGAL.TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD" + translate-values="{termsOfServiceUrl: termsOfServiceUrl, privacyPolicyUrl: privacyPolicyUrl}" + ) diff --git a/app/partials/includes/modules/invitation-register-form.jade b/app/partials/includes/modules/invitation-register-form.jade index 00b7611e..8b381dde 100644 --- a/app/partials/includes/modules/invitation-register-form.jade +++ b/app/partials/includes/modules/invitation-register-form.jade @@ -43,12 +43,13 @@ form.register-form placeholder="{{'REGISTER_FORM.PLACEHOLDER_PASSWORD' | translate}}" ) + //- Only displays terms notice when terms plugin is loaded. + tg-terms-of-service-and-privacy-policy-notice(target="dataRegister.accepted_terms") + fieldset button.button-register.button-green.submit-button( type="submit" + ng-disabled="dataRegister.accepted_terms == false" title="{{'REGISTER_FORM.ACTION_SIGN_UP' | translate}}" translate="REGISTER_FORM.ACTION_SIGN_UP" ) - - //- Only displays terms notice when terms plugin is loaded. - tg-terms-of-service-and-privacy-policy-notice diff --git a/app/partials/includes/modules/register-form.jade b/app/partials/includes/modules/register-form.jade index 2c58fdff..54c74219 100644 --- a/app/partials/includes/modules/register-form.jade +++ b/app/partials/includes/modules/register-form.jade @@ -45,13 +45,17 @@ div.register-form-container(tg-register) placeholder="{{'REGISTER_FORM.PLACEHOLDER_PASSWORD' | translate}}" ) + //- Only displays terms notice when terms plugin is loaded. + tg-terms-of-service-and-privacy-policy-notice(target="data.accepted_terms") + fieldset button.button-register.button-green.submit-button( type="submit" + ng-disabled="data.accepted_terms == false" title="{{'REGISTER_FORM.ACTION_SIGN_UP' | translate}}" translate="REGISTER_FORM.ACTION_SIGN_UP" ) - + .contrib-plugins-wrapper(ng-if="contribPlugins.length") label(translate="LOGIN_COMMON.ALT_LOGIN") @@ -60,9 +64,6 @@ div.register-form-container(tg-register) ng-include="plugin.template" ) - //- Only displays terms notice when terms plugin is loaded. - tg-terms-of-service-and-privacy-policy-notice - a.register-text-top( href="" title="{{'REGISTER_FORM.TITLE_LINK_LOGIN' | translate}}" diff --git a/app/styles/layout/auth.scss b/app/styles/layout/auth.scss index aa2a972a..b8a6886c 100644 --- a/app/styles/layout/auth.scss +++ b/app/styles/layout/auth.scss @@ -6,6 +6,7 @@ flex-direction: row; justify-content: center; left: 0; + overflow-y: auto; position: fixed; right: 0; top: 0; @@ -45,11 +46,18 @@ } .login-text, .register-text { - text-align: center; - a:hover { - color: $primary-light; + margin-left: .5rem; + padding-bottom: 1rem; + a { + text-decoration: underline; + &:hover { + color: $primary-light; + } } } + .register-terms { + margin: .5rem 0 .75rem; + } .button { color: $white; display: block; diff --git a/app/styles/layout/invitation.scss b/app/styles/layout/invitation.scss index f2d23cdb..75548dcf 100644 --- a/app/styles/layout/invitation.scss +++ b/app/styles/layout/invitation.scss @@ -87,6 +87,10 @@ } .register-text { color: $white; + font-size: .9rem; + margin-left: .5rem; + padding-bottom: 1rem; + text-align: left; a { color: $primary; } diff --git a/app/styles/modules/auth/register-form.scss b/app/styles/modules/auth/register-form.scss index 971018eb..948eadf1 100644 --- a/app/styles/modules/auth/register-form.scss +++ b/app/styles/modules/auth/register-form.scss @@ -2,7 +2,7 @@ display: block; .register-text-top { display: block; - margin-bottom: 1rem; + margin: 1rem 0; text-align: center; } .register-text {