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 {