Skip to content
This repository was archived by the owner on Apr 19, 2023. It is now read-only.

Commit 9e2faa1

Browse files
✨ Add support for markdown policies
1 parent a3874e6 commit 9e2faa1

File tree

10 files changed

+296
-8
lines changed

10 files changed

+296
-8
lines changed

components/Footer.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
<nuxt-link to="/">Blog</nuxt-link>
4343
<nuxt-link to="/">Developer API</nuxt-link>
4444
<nuxt-link to="/">Help Center</nuxt-link>
45+
<nuxt-link to="/policies/privacy">Terms &amp; privacy</nuxt-link>
4546
<nuxt-link to="/">Partners</nuxt-link>
4647
</nav>
4748
</div>

components/Layout.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
<Manage v-else-if="activeRoute === 'organization-settings'">
77
<nuxt />
88
</Manage>
9+
<Policies v-else-if="activeRoute === 'policies'">
10+
<nuxt />
11+
</Policies>
912
<nuxt v-else />
1013
</div>
1114
</template>
@@ -14,10 +17,12 @@
1417
import { Component, Vue, Watch } from "vue-property-decorator";
1518
import Settings from "@/components/Settings.vue";
1619
import Manage from "@/components/Manage.vue";
20+
import Policies from "@/components/Policies.vue";
1721
1822
@Component({
1923
components: {
2024
Settings,
25+
Policies,
2126
Manage
2227
}
2328
})
@@ -31,6 +36,8 @@ export default class Layout extends Vue {
3136
this.activeRoute = "user-settings";
3237
} else if (this.$route.path.startsWith("/manage")) {
3338
this.activeRoute = "organization-settings";
39+
} else if (this.$route.path.startsWith("/policies")) {
40+
this.activeRoute = "policies";
3441
} else {
3542
this.activeRoute = "default";
3643
}

components/Policies.vue

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<template>
2+
<div class="container">
3+
<aside>
4+
<div class="nav-heading">Policies</div>
5+
<nav>
6+
<nuxt-link class="item" to="/policies/privacy">
7+
<font-awesome-icon class="nav-icon" icon="lock" fixed-width />
8+
<span>Privacy Policy</span>
9+
</nuxt-link>
10+
<nuxt-link class="item" to="/policies/terms">
11+
<font-awesome-icon class="nav-icon" icon="user" fixed-width />
12+
<span>Terms of Use</span>
13+
</nuxt-link>
14+
<nuxt-link class="item" to="/policies/cookies">
15+
<font-awesome-icon class="nav-icon" icon="cookie-bite" fixed-width />
16+
<span>Cookie Policy</span>
17+
</nuxt-link>
18+
<nuxt-link class="item" to="/policies/sla">
19+
<font-awesome-icon class="nav-icon" icon="building" fixed-width />
20+
<span>Enterprise SLA</span>
21+
</nuxt-link>
22+
<nuxt-link class="item" to="/policies/licenses">
23+
<font-awesome-icon
24+
class="nav-icon"
25+
:icon="['fab', 'git-alt']"
26+
fixed-width
27+
/>
28+
<span>FOSS Licenses</span>
29+
</nuxt-link>
30+
</nav>
31+
</aside>
32+
<div class="card">
33+
<div class="inside">
34+
<slot />
35+
</div>
36+
</div>
37+
</div>
38+
</template>
39+
40+
<script lang="ts">
41+
import { Component, Vue } from "vue-property-decorator";
42+
import { mapGetters } from "vuex";
43+
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
44+
import { library } from "@fortawesome/fontawesome-svg-core";
45+
import {
46+
faUser,
47+
faCookieBite,
48+
faBuilding,
49+
faLock
50+
} from "@fortawesome/free-solid-svg-icons";
51+
import { faGitAlt } from "@fortawesome/free-brands-svg-icons";
52+
library.add(faUser, faCookieBite, faBuilding, faGitAlt, faLock);
53+
54+
@Component({
55+
components: {
56+
FontAwesomeIcon
57+
}
58+
})
59+
export default class Settings extends Vue {}
60+
</script>
61+
62+
<style lang="scss" scoped>
63+
.container {
64+
display: flex;
65+
}
66+
aside {
67+
width: 300px;
68+
}
69+
aside nav {
70+
position: sticky;
71+
top: 1rem;
72+
}
73+
.card {
74+
flex-grow: 1;
75+
padding: 2rem;
76+
}
77+
.nav-heading {
78+
font-weight: bold;
79+
margin: 1rem 0;
80+
font-size: 110%;
81+
}
82+
.nav-icon {
83+
margin-right: 0.5rem;
84+
opacity: 0.3;
85+
transition: 0.3s;
86+
}
87+
.inside {
88+
max-width: 720px;
89+
margin: 2rem auto;
90+
}
91+
.item {
92+
transition: 0.3s;
93+
display: block;
94+
text-decoration: none;
95+
padding: 0.7rem 0;
96+
color: inherit;
97+
&:hover {
98+
.nav-icon {
99+
opacity: 0.75;
100+
}
101+
}
102+
&.nuxt-link-exact-active {
103+
font-weight: bold;
104+
padding-left: 1rem;
105+
margin-left: -1rem;
106+
color: #492257;
107+
background-color: #fff;
108+
border-radius: 0.2rem 0 0 0.2rem;
109+
box-shadow: -7px 10px 10px rgba(60, 66, 87, 0.075), 2px 0 0 #fff;
110+
&:hover {
111+
opacity: 1;
112+
}
113+
.nav-icon {
114+
opacity: 0.75;
115+
}
116+
}
117+
}
118+
</style>

layouts/default.vue

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,22 @@ a {
7979
.container--size-small {
8080
max-width: 400px;
8181
}
82+
.container--size-medium {
83+
max-width: 720px;
84+
}
8285
.container--top-20height {
8386
margin-top: 15vh;
8487
}
8588
.container--bottom-20height {
8689
margin-bottom: 15vh;
8790
}
91+
.container--type-padded {
92+
padding: 4rem 0 3rem 0;
93+
}
94+
95+
svg {
96+
height: 1rem;
97+
}
8898
8999
.vue-notification.notification {
90100
font-size: inherit;
@@ -242,6 +252,9 @@ a {
242252
.text--lh-1 {
243253
line-height: 1.25;
244254
}
255+
.text--lh-16 {
256+
line-height: 1.6;
257+
}
245258
.text--color-light {
246259
color: #555;
247260
}

nuxt.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const config: NuxtConfiguration = {
3737
"~/plugins/vue-timeago",
3838
{ src: "~/plugins/vuex-persist", ssr: false }
3939
],
40-
modules: ["@nuxtjs/axios", "@nuxtjs/pwa"],
40+
modules: ["@nuxtjs/axios", "@nuxtjs/pwa", "@nuxtjs/markdownit"],
4141
axios: {
4242
host: process.env.NODE_ENV === "production" ? "example.com" : "localhost",
4343
https: process.env.NODE_ENV === "production",

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"devDependencies": {
3535
"@nuxt/typescript": "^2.7.1",
3636
"@nuxtjs/eslint-config": "^0.0.1",
37+
"@nuxtjs/markdownit": "^1.2.4",
3738
"@types/downloadjs": "^1.4.1",
3839
"@types/hashids": "^1.0.30",
3940
"@typescript-eslint/eslint-plugin": "^1.9.0",

pages/auth/register.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
</button>
4343
</form>
4444
</Card>
45-
<p>
45+
<p v-if="!completedRegistration">
4646
Already have an account?
4747
<nuxt-link to="/auth/login">Login to your account</nuxt-link>
4848
</p>

pages/policies/privacy.vue

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<template lang="md">
2+
# Privacy Policy
3+
4+
Your privacy is very important to us. It is our policy to respect your privacy regarding any information we may collect from you across our website, { Product }, and any other sites or applications we own and operate.
5+
6+
## Information we collect
7+
8+
**When you visit our website:** Our servers automatically log your computer's Internet Protocol (IP) address, your browser type and version, the pages you visit, the time and date of your visit, the time spent on each page, and other standard data provided by your web browser.
9+
10+
**When you use our application:** We ask for your website address, company name, location, policy effective date, and whether you agree to our disclaimer. This information is mandatory, as we use it to { Product Usage }.
11+
12+
**When you choose a paid subscription:** We ask for your email address and payment details, as well as what information you wish to include in your subscription. This information is mandatory, as we use it to { Product Usage }.
13+
14+
**When you leave a review:** We ask for your name, email address and review of our website. This information is not needed to purchase a subscription. We will never publish your email address, but may choose to publish your name and review (in whole or in part) to help promote our site and product. By supplying this information, you consent to us using your details in this manner.
15+
16+
## Our legal bases for processing
17+
18+
We process information lawfully, fairly and transparently. We only collect and process information about you only where:
19+
20+
- it's necessary for us to provide you with your product subscription;
21+
- it satisfies a legitimate interest, such as for research and development, to market and promote our services, and to protect our legal rights and interests;
22+
- you give us consent to do so for a specific purpose (e.g., entering your email address so we can contact you regarding your subscription); or
23+
- we need to process your data to comply with a legal obligation.
24+
25+
When you consent to our use of information about you for a specific purpose, you have the right to change your mind at any time, but this won't affect any processing we've already done.
26+
27+
We retain information for our sales records and to facilitate additional support after your order is complete. If necessary, we may retain your personal information for our compliance with a legal obligation or in order to protect your vital interests or the vital interests of another natural person.
28+
29+
While we retain this information, we'll protect it within commercially acceptable means to prevent loss and theft, as well as unauthorised access, disclosure, copying, use or modification. That said, we advise that no method of electronic transmission or storage is 100% secure and cannot guarantee absolute data security.
30+
31+
## Collecting and using information
32+
33+
We collect, hold, use and disclose information for the following purposes:
34+
35+
- to give access to your product subscription;
36+
- to process your one-off payments and recurring subscriptions;
37+
- to enable you to access and use our website, associated applications and associated social media platforms;
38+
- to contact and communicate with you about your subscription or email enquiries;
39+
- for internal record keeping and administrative purposes;
40+
- for analytics, market research and business development, including to operate and improve our website, associated applications and - associated social media platforms; and
41+
- to comply with our legal obligations and resolve any disputes that we may have.
42+
43+
## Disclosure of personal information to third parties
44+
45+
{ Product } is supported by third-party providers to facilitate the provision of a transactional website. These include DNS management, web hosting, payment processing (Stripe and Chargebee) and web analytics (Google Analytics and Oswald Labs).
46+
47+
We will comply with government and law enforcement requests for data, as required by law, in connection with any actual or prospective legal proceedings, or in order to establish, exercise or defend our legal rights.
48+
49+
We do not sell or rent your personal information to marketers or third parties.
50+
51+
## International transfers of personal information
52+
53+
The data we retain is stored and processed in the European Union (Frankfurt, Germany and Paris, France), and/or where we and our third-party providers maintain facilities. By providing us with your personal information, you consent to the disclosure to these overseas third parties.
54+
55+
## Your rights as our user
56+
57+
**Choice and consent:** By providing your information to us, you consent to us collecting, holding, using and disclosing it in accordance with this privacy policy. You are free to refuse our request for information, with the understanding that we may be unable to provide you with generated Terms of Service and Privacy Policy statements without it. If you’re under 18 years of age, you must supply evidence of your parent or legal guardian’s knowledge and permission of you providing us with information. If you're under the age of 13, you may not use { Product }.
58+
59+
**Information from third parties:** If we receive information about you from a third party, we’ll protect it as set out in this privacy policy. If you are a third party providing information about somebody else (eg. an agency operating on behalf of a client), you represent and warrant that you have that person’s consent to provide their information to us.
60+
61+
**Restrict:** You may choose to restrict the collection or use of your personal information by contacting us using the details on our website. If you ask us to restrict or limit how we process your personal information, we will let you know how the restriction affects your use of our website or products and services.
62+
63+
**Access and data portability:** You may request details of the personal information that we hold about you. You may request a copy of the personal information we hold about you. You may request that we erase the personal information we hold about you at any time. You may also request that we transfer this personal information to another third party.
64+
65+
**Correction:** If you believe that any information we hold about you is inaccurate, out of date, incomplete, irrelevant or misleading, please contact us using the details below, and we will take reasonable steps to rectify the issue.
66+
67+
**Notification of data breaches:** We will comply with laws applicable to us in respect of any data breach.
68+
69+
**Complaints:** If you believe that we have breached a relevant data protection law and wish to make a complaint, please contact us using the details below and provide us with full details of the alleged breach. We will promptly investigate your complaint and respond to you, in writing, setting out the outcome of our investigation and the steps we will take to deal with your complaint. You also have the right to contact a regulatory body or data protection authority in relation to your complaint.
70+
71+
## Cookies
72+
73+
Visit our [Cookie Policy](/policies/cookies) for more information.
74+
75+
## Business transfers
76+
77+
If we or our assets are acquired, or in the unlikely event that we go out of business or enter bankruptcy, we would include data among the assets transferred to any parties who acquire us. You acknowledge that such transfers may occur, and that any parties who acquire us may continue to use your personal information according to this policy.
78+
79+
## About this policy
80+
81+
This privacy policy only covers { Product }'s own collecting and handling of data. We only work with partners and third-party providers whose privacy policies align with ours, however we cannot accept responsibility or liability for their respective privacy practices.
82+
83+
Our website may link to external sites that are not operated by us. Please be aware that we have no control over the content and policies of those sites, and cannot accept responsibility or liability for their respective privacy practices.
84+
85+
At our discretion, we may update this policy to reflect current acceptable practices. We will take reasonable steps to let users know about significant changes via our website. Your continued use of this site after any changes to this policy will be regarded as acceptance of our practices around data and personal information.
86+
87+
If you have any concerns or questions about how we handle your data and personal information, feel free to contact us at { Email }.
88+
89+
This policy is effective as of January 1, 2019.
90+
</template>

pages/pricing.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<main itemscope itemtype="http://schema.org/Product">
2+
<main itemscope itemtype="https://schema.org/Product">
33
<div class="hero hero--align-center">
44
<h1>Simple, transparent pricing.</h1>
55
<p>
@@ -12,7 +12,7 @@
1212
class="container"
1313
itemprop="offers"
1414
itemscope
15-
itemtype="http://schema.org/Offer"
15+
itemtype="https://schema.org/Offer"
1616
>
1717
<div class="row row--padding-large">
1818
<div>1</div>
@@ -22,7 +22,7 @@
2222
<div class="price">
2323
<span itemprop="priceCurrency" content="USD">$</span>
2424
<span itemprop="price" content="0.00">0</span>
25-
<link itemprop="availability" href="http://schema.org/InStock" />
25+
<link itemprop="availability" href="https://schema.org/InStock" />
2626
</div>
2727
<div class="text text--size-small text--color-light">&nbsp;</div>
2828
<div class="text text--size-small text--color-light">&nbsp;</div>
@@ -34,7 +34,7 @@
3434
<div class="price">
3535
<span itemprop="priceCurrency" content="USD">$</span>
3636
<span itemprop="price" content="39.00">39</span>
37-
<link itemprop="availability" href="http://schema.org/InStock" />
37+
<link itemprop="availability" href="https://schema.org/InStock" />
3838
</div>
3939
<div class="text text--size-small text--color-light">per month</div>
4040
<div class="text text--size-small text--color-light">
@@ -48,7 +48,7 @@
4848
<div class="price">
4949
<span itemprop="priceCurrency" content="USD">$</span>
5050
<span itemprop="price" content="99.00">99</span>
51-
<link itemprop="availability" href="http://schema.org/InStock" />
51+
<link itemprop="availability" href="https://schema.org/InStock" />
5252
</div>
5353
<div class="text text--size-small text--color-light">per month</div>
5454
<div class="text text--size-small text--color-light">

0 commit comments

Comments
 (0)