update site with new design

This commit is contained in:
hossnys
2021-09-28 15:16:21 +00:00
parent e8fe0dc41d
commit b4d5cf3e24
441 changed files with 1619 additions and 11722 deletions

View File

@@ -1,8 +1,7 @@
<template>
<Layout :hideHeader="true" :disableScroll="true">
<div class="container sm:pxi-0 mx-auto overflow-x-hidden pt-20 px-4">
<div class="container sm:pxi-0 mx-auto overflow-x-hidden pt-20">
<div class="pt-8">
<Alert v-if="showAlert" @clicked="linkCopied" />
<section class="post-header container mx-auto px-0 mb-4 border-b">
<h1 class="text-5xl font-medium leading-none mt-0">
{{ $page.blog.title }}
@@ -25,15 +24,7 @@
<g-image
:src="author.image"
:alt="author.name"
class="
h-8
w-8
sm:h-10
sm:w-10
rounded-full
bg-gray-200
border-2 border-white
"
class="h-8 w-8 sm:h-10 sm:w-10 rounded-full bg-gray-200 border-2 border-white"
/>
</g-link>
</li>
@@ -70,18 +61,6 @@
</g-link>
</p>
</div>
<share-it
icons
:targets="['twitter', 'linkedin', 'facebook']"
class="ml-auto"
/>
<font-awesome
:icon="['fas', 'link']"
class="cursor-pointer"
@click="copyLink"
/>
</div>
</section>
</div>
@@ -91,17 +70,10 @@
<div class="py-12">
<section
class="
post-content
container
mx-auto
relative
font-serif
text-gray-700
"
class="post-content container mx-auto relative font-serif text-gray-700"
>
<div
class="post-content-text text-lg"
class="post-content-text text-xl"
v-html="$page.blog.content"
></div>
</section>
@@ -111,19 +83,7 @@
v-for="tag in $page.blog.tags"
:key="tag.id"
:to="tag.path"
class="
text-xs
bg-transparent
hover:text-blue-700
py-2
px-4
mr-2
border
hover:border-blue-500
border-gray-600
text-gray-700
rounded-full
"
class="text-xs bg-transparent hover:text-blue-700 py-2 px-4 mr-2 border hover:border-blue-500 border-gray-600 text-gray-700 rounded-full"
>{{ tag.title }}</g-link
>
</section>
@@ -207,104 +167,34 @@
path
}
}
metadata {
siteUrl
}
}
</page-query>
<script>
import PostListItem from "~/components/custom/Cards/PostListItem.vue";
import Alert from "~/components/custom/Alert.vue";
export default {
components: {
PostListItem,
Alert,
},
data() {
return {
showAlert: false,
};
},
methods: {
copyLink() {
const el = document.createElement("input");
el.value = window.location.href;
document.body.appendChild(el);
el.select();
document.execCommand("copy");
document.body.removeChild(el);
this.showAlert = true;
},
linkCopied(val) {
this.showAlert = val;
},
img(image) {
if (!image) return "";
if (image.src) return image.src;
return image;
},
},
computed: {
getCoverImage() {
let coverImage = "";
const cover = this.$page.blog.image;
if (cover != null) {
coverImage = `${this.getBaseUrl}${this.$page.blog.image.src}`;
}
return coverImage;
},
getBaseUrl() {
return this.$page.metadata.siteUrl;
},
},
metaInfo() {
return {
title: "",
titleTemplate: `ThreeFold | ${this.$page.blog.title}`,
meta: [
{
key: "description",
name: "description",
content: this.$page.blog.excerpt,
},
{
key: "og:title",
property: "og:title",
content: this.$page.blog.title,
},
{
key: "og:description",
property: "og:description",
content: this.$page.blog.excerpt,
},
{
key: "og:image",
property: "og:image",
content: this.getCoverImage,
},
{
name: "twitter:description",
property: "twitter:description",
content: this.$page.blog.excerpt,
},
{
name: "twitter:image",
property: "twitter:image",
content: this.getCoverImage,
},
{
name: "twitter:title",
property: "twitter:title",
content: this.$page.blog.title,
},
{
name: "twitter:card",
property: "twitter:card",
content: "summary_large_image",
},
],
title: this.$page.blog.title,
};
},
};
</script>
<style scoped>
@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");
.post-card-excerpt,
.post-content-text {
font-family: "Roboto", sans-serif !important;
line-height: 1.2;
}
</style>

View File

@@ -1,112 +0,0 @@
<template>
<Layout :hideHeader="true" :disableScroll="true">
<div class="container sm:pxi-0 mx-auto min-h-screen pt-24">
<div class="flex flex-row flex-wrap items-center mx-4 sm:mx-0">
<div class="w-full md:w-5/6 md:pl-8 lg:pl-0">
<h1
class="
uppercase
leading-none
text-4xl text-gray-800
font-black font-heading
"
>
{{ $page.job.title }}
</h1>
</div>
</div>
<section class="post-content mx-auto relative font-serif text-gray-700">
<div class="mt-6 mb-8 text-gray-900" v-html="$page.job.content"></div>
<a
:href="$page.job.link"
target="_blank"
aria-current="page"
class="
inline-block
bg-green-500
text-sm
learn-button
hover:bg-green-600
px-8
py-2
mr-2
my-0
rounded
shadow
rounded-full
active--exact active
"
type="button"
>
{{ $page.job.button }}
</a>
</section>
</div>
<div
class="container-fluid mx-auto pt-24"
v-for="edge in $page.allCustomCta.edges"
:key="edge.node.id"
>
<CustomCTA
v-if="edge.node.id == 'careers'"
:title="edge.node.title"
:link="edge.node.link"
:image="edge.node.image"
/>
</div>
</Layout>
</template>
<page-query>
query($id: ID!) {
job(id: $id) {
id
title
content
button
link
}
allCustomCta {
edges {
node {
id
title
link
image
}
}
}
}
</page-query>
<script>
import CustomCTA from "~/components/custom/sections/CustomCTA.vue";
export default {
components: {
CustomCTA,
},
metaInfo() {
return {
title: this.$page.job.title,
};
},
};
</script>
<style scoped>
.post-content {
font-family: "Roboto", sans-serif !important;
}
h3 {
color: black !important;
}
ul li {
list-style-type: disc !important;
}
.learn-button {
color: white;
}
</style>

View File

@@ -1,300 +1,40 @@
<template>
<Layout :hideHeader="true" :disableScroll="true">
<div
class="container-fluid sm:pxi-0 mx-auto overflow-x-hidden py-5"
v-if="
$page.markdownPage.id == 'careers' ||
$page.markdownPage.id == 'community'
"
>
<CustomCTA
:header="true"
:image="$page.markdownPage.pageHeader.image"
:title="$page.markdownPage.pageHeader.title"
/>
<!-- <div class="singlePic">
<g-image
class="w-100 mx-auto"
v-if="$page.markdownPage.solution_image"
:src="$page.markdownPage.solution_image.src"
/>
</div> -->
</div>
<div
class="container sm:pxi-0 mx-auto overflow-x-hidden py-5"
v-if="
$page.markdownPage.id !== 'careers' &&
$page.markdownPage.id !== 'community' &&
$page.markdownPage.id !== 'tft'
"
>
<div class="container sm:pxi-0 mx-auto overflow-x-hidden py-5">
<Header
v-if="
$page.markdownPage.id !== 'contact' &&
$page.markdownPage.header_title &&
$page.markdownPage.header_title != ''
"
:id="$page.markdownPage.id"
:title="$page.markdownPage.header_title"
:slogan="$page.markdownPage.header_slogan"
:image="$page.markdownPage.header_image"
:altImg="$page.markdownPage.header_altImg"
:excerpt="$page.markdownPage.header_excerpt"
:button="$page.markdownPage.button"
:link="$page.markdownPage.link"
/>
<!-- <SignUp
v-if="$page.markdownPage.signup"
:signup="$page.markdownPage.signup"
/> -->
<!-- <Comparison
v-if="
$page.markdownPage.comparisonSecs &&
$page.markdownPage.comparisonSecs.length > 0
"
:main="$page.markdownPage.comparisonMain"
:sections="$page.markdownPage.comparisonSecs"
/> -->
<TFTFuel
v-if="
$page.markdownPage.comparisonSecs &&
$page.markdownPage.comparisonSecs.length > 0
"
:main="$page.markdownPage.comparisonMain"
:sections="$page.markdownPage.comparisonSecs"
/>
</div>
<!-- <g-image
v-if="
$page.markdownPage.id !== 'careers' && $page.markdownPage.solution_image
"
class="mx-auto mt-10"
:src="$page.markdownPage.solution_image.src"
/> -->
<!-- tft page -->
<div
class="container_tft sm:pxi-0 mx-auto overflow-x-hidden py-5"
v-if="$page.markdownPage.id == 'tft'"
>
<Header
v-if="
$page.markdownPage.header_title &&
$page.markdownPage.header_title != ''
"
:id="$page.markdownPage.id"
:title="$page.markdownPage.header_title"
:slogan="$page.markdownPage.header_slogan"
:image="$page.markdownPage.header_image"
:altImg="$page.markdownPage.header_altImg"
:excerpt="$page.markdownPage.header_excerpt"
:button="$page.markdownPage.button"
:link="$page.markdownPage.link"
/>
<CallToAction
:id="$page.markdownPage.id"
v-if="$page.markdownPage.id == 'tft'"
:cta="$page.markdownPage.cta"
/>
<BrandPanel
:id="$page.markdownPage.id"
:brand="$page.markdownPage.brandPanel"
v-if="$page.markdownPage.brandPanel"
:diveInto="false"
/>
<NewCard
v-if="$page.markdownPage.card"
:id="$page.markdownPage.id"
:card="$page.markdownPage.card"
/>
<Slider
v-if="$page.markdownPage.carousel"
:slides="$page.markdownPage.carousel"
:main="$page.markdownPage.sliderMain"
/>
<TFTFuel
v-if="$page.markdownPage.tftUses.length > 0"
:id="$page.markdownPage.id"
:main="$page.markdownPage.useTftMain"
:sections="$page.markdownPage.tftUses"
:farmingProcess="false"
/>
<TFTFuel
v-if="$page.markdownPage.farmingProcess.length > 0"
:id="$page.markdownPage.id"
:main="$page.markdownPage.farmingMain"
:sections="$page.markdownPage.farmingProcess"
:farmingProcess="true"
/>
<TFTFuel
v-if="$page.markdownPage.cultivationProcess.length > 0"
:id="$page.markdownPage.id"
:main="$page.markdownPage.cultivationMain"
:sections="$page.markdownPage.cultivationProcess"
:cultivationProcess="true"
/>
<g-image class ="lg:py-10"
v-if="$page.markdownPage.solution_image"
:src="$page.markdownPage.solution_image"
/>
<BrandPanel
:id="$page.markdownPage.id"
:brand="$page.markdownPage.brandPanel2"
v-if="$page.markdownPage.brandPanel2"
:diveInto="true"
/>
<CallToActionbg1
v-if="$page.markdownPage.cta4"
:cta="$page.markdownPage.cta4"
:id="$page.markdownPage.id"
/>
</div>
<div class="container sm:pxi-0 mx-auto py-5 overflow-visible">
<CallToAction
:id="$page.markdownPage.id"
v-if="
$page.markdownPage.cta && $page.markdownPage.id == 'why'
"
:cta="$page.markdownPage.cta"
/>
<AppListItem
v-if="
$page.markdownPage.appData && $page.markdownPage.appData.length > 0
"
:products="$page.markdownPage.appData"
:main="$page.markdownPage.appsMain"
/>
<ShowcaseProducts
v-if="
$page.markdownPage.productData &&
$page.markdownPage.productData.length > 0
"
:id="$page.markdownPage.id"
:main="$page.markdownPage.productsMain"
:products="$page.markdownPage.productData"
/>
<Partenerships
v-if="
$page.markdownPage.partnerships &&
$page.markdownPage.partnerships.length > 0
"
:id="$page.markdownPage.id"
:main="$page.markdownPage.partenershipsMain"
:partnerships="$page.markdownPage.partnerships"
/>
<CenteredAccordion
v-if="$page.markdownPage.faqContent && $page.markdownPage.id == 'faq'"
:main="$page.markdownPage.faqMain"
:faqs="$page.markdownPage.faqContent"
/>
<CallToAction
class="mt-20"
:id="$page.markdownPage.id"
v-if="$page.markdownPage.cta3"
:cta="$page.markdownPage.cta3"
/>
<CallToAction
:id="$page.markdownPage.id"
v-if="$page.markdownPage.cta2"
:cta="$page.markdownPage.cta2"
/>
<!-- <ShowcaseProducts
class="my-20"
v-if="
$page.markdownPage.productData &&
$page.markdownPage.productData.length > 0
"
:id="$page.markdownPage.id"
:main="$page.markdownPage.productsMain"
:products="$page.markdownPage.productData"
/> -->
<SolutionsHeader
class="mt-0"
v-if="$page.markdownPage.header"
:header="$page.markdownPage.header"
/>
<g-image
v-if="$page.markdownPage.solution_image2"
:src="$page.markdownPage.solution_image2.src"
/>
<SolutionsHeader
v-if="$page.markdownPage.header2"
:header="$page.markdownPage.header2"
/>
<!-- <SolutionsHeader
v-if="$page.markdownPage.header3"
:header="$page.markdownPage.header3"
/> -->
<logoShowcase
v-if="$page.markdownPage.logos.length > 0"
:id="$page.markdownPage.id"
:logos="$page.markdownPage.logos"
:main="$page.markdownPage.logosMain"
/>
<FourTiersWithToggle
v-if="$page.markdownPage.jobs.length > 0"
:pricingPlans="$page.markdownPage.jobs"
:main="$page.markdownPage.jobsMain"
/>
<SolutionsHeader
class="mt-0"
v-if="$page.markdownPage.header4"
:header="$page.markdownPage.header4"
/>
<GetInTouch
v-if="
$page.markdownPage.contactData &&
$page.markdownPage.contactData.length > 0
"
:contacts="$page.markdownPage.contactData"
/>
<SignUp
v-if="$page.markdownPage.signup"
:signup="$page.markdownPage.signup"
/>
</div>
<div
class="container-fluid mx-auto"
v-for="edge in $page.allCustomCta.edges"
:key="edge.node.id"
>
<CustomCTA
v-if="edge.node.id == $page.markdownPage.id"
:title="edge.node.title"
:link="edge.node.link"
:image="edge.node.image"
<Comparison
v-if="
$page.markdownPage.comparisonSecs &&
$page.markdownPage.comparisonSecs.length > 0
"
:main="$page.markdownPage.comparisonMain"
:sections="$page.markdownPage.comparisonSecs"
/>
<CallToAction
v-if="$page.markdownPage.cta"
:cta="$page.markdownPage.cta"
/>
<g-image
v-if="$page.markdownPage.solution_image"
:src="$page.markdownPage.solution_image.src"
/>
</div>
</Layout>
@@ -306,61 +46,15 @@
id
path
excerpt
metaTitle
metaDesc
metaImg
header_excerpt
header_altImg
header_title
header_image
header_slogan
button
link
solution_image
solution_image2
header{
title
subtitle
content
btn1
link1
btn2
link2
}
header2{
title
subtitle
content
btn1
link1
btn2
link2
}
header4{
title
subtitle
content
btn1
link1
btn2
link2
}
productsMain{
id
title
subtitle
content
button
link
# image
}
productData{
id
title
content
image
button
link
}
comparisonMain{
id
@@ -368,8 +62,6 @@
description
button
link
button2
link2
}
comparisonSecs{
id
@@ -377,44 +69,17 @@
title
content
}
logosMain {
id
title
}
logos{
id
image
url
}
cta{
title
slogan
content
button
link
}
cta2{
title
slogan
content
button
link
}
cta3{
id
title
content
button
link
}
cta4{
title1
title2
slogan
content
button
link
}
brandPanel{
id
title
@@ -424,130 +89,6 @@
btnTxt
image
}
brandPanel2{
id
title
subtitle
content
sourceUrl
btnTxt
image
}
partenershipsMain{
id
title
slogan
content
link
link2
button
button2
}
partnerships {
id
title
img
content
}
faqMain{
id
title
}
faqContent{
id
question
content
}
jobsMain{
id
# title
# button1
# button2
excerpt
}
jobs{
id
title
excerpt
price
duration
button
link
includeTitle
options
}
contactData{
id
title
mail
phone
}
pageHeader {
id
title
image
}
carousel {
id
img
}
sliderMain {
id
title
subtitle
content
}
card{
id
img
title
content
button
link
}
useTftMain {
id
image
}
tftUses{
id
title
content
}
farmingMain {
id
title
subtitle
}
farmingProcess{
id
image
content
}
cultivationMain {
id
title
subtitle
}
cultivationProcess{
id
image
content
}
}
allCustomCta {
edges {
node {
id
title
link
image
}
}
}
}
@@ -558,25 +99,17 @@ import NewCard from "~/components/marketing/sections/cta-sections/NewCard.vue";
import Header from "~/components/marketing/sections/cta-sections/Header.vue";
import VerticalNav from "~/components/custom/Navbar/VerticalNav.vue";
import GetInTouch from "~/components/custom/Navbar/Getintouch.vue";
import ShowcaseProducts from "~/components/marketing/sections/cta-sections/ShowcaseProducts.vue";
import SolutionsHeader from "~/components/custom/sections/header/HeaderSection.vue";
import HowItWorks from "~/components/custom/sections/HowItWorks.vue";
import Features from "~/components/custom/sections/Features.vue";
import logoShowcase from "~/components/marketing/sections/cta-sections/logoShowcase.vue";
import CallToAction from "~/components/custom/sections/CallToAction.vue";
import CallToActionbg1 from "~/components/custom/sections/CallToActionbg1.vue";
import SignUp from "~/components/custom/sections/SignUp.vue";
import Comparison from "~/components/custom/sections/Comparison.vue";
import TFTFuel from "~/components/marketing/sections/team-sections/with_large_images.vue";
import Roadmap from "~/components/custom/sections/Roadmap.vue";
import FourTiersWithToggle from "~/components/marketing/sections/pricing/four_tiers_with_toggle.vue";
import WithComparisonTable from "~/components/marketing/sections/pricing/with_comparison_table.vue";
import BrandPanel from "~/components/marketing/sections/cta-sections/BrandPanel.vue";
import AppListItem from "~/components/AppListItem.vue";
import Partenerships from "~/components/marketing/sections/team-sections/grid_with_large_round_images.vue";
import CenteredAccordion from "~/components/marketing/sections/faq-sections/CenteredAccordion.vue";
import CustomCTA from "~/components/custom/sections/CustomCTA.vue";
import Slider from "~/components/custom/Slider.vue";
export default {
components: {
@@ -585,82 +118,30 @@ export default {
VerticalNav,
GetInTouch,
SolutionsHeader,
ShowcaseProducts,
HowItWorks,
Features,
logoShowcase,
CallToAction,
CallToActionbg1,
SignUp,
Comparison,
TFTFuel,
Roadmap,
FourTiersWithToggle,
WithComparisonTable,
BrandPanel,
AppListItem,
Partenerships,
CenteredAccordion,
CustomCTA,
Slider,
},
metaInfo() {
return {
title: this.pageName,
};
},
computed: {
getImg() {
let img = "";
if (process.isClient) {
img = `${window.location.origin}${this.$page.markdownPage.metaImg.src}`;
}
return img;
},
pageName() {
let path = this.$route.path.substring(1);
let name = path[0].toUpperCase() + path.slice(1);
return name;
},
},
metaInfo() {
return {
title: "",
titleTemplate: this.$page.markdownPage.metaTitle,
meta: [
{
key: "description",
name: "description",
content: this.$page.markdownPage.metaDesc,
},
{
key: "og:title",
property: "og:title",
content: this.$page.markdownPage.metaTitle,
},
{
key: "og:description",
property: "og:description",
content: this.$page.markdownPage.metaDesc,
},
{
key: "og:image",
property: "og:image",
content: this.getImg,
},
{
key: "twitter:description",
name: "twitter:description",
content: this.$page.markdownPage.metaDesc,
},
{
key: "twitter:image",
property: "twitter:image",
content: this.getImg,
},
{
key: "twitter:title",
property: "twitter:title",
content: this.$page.markdownPage.metaTitle,
},
],
};
},
};
</script>
<style scoped>
@@ -706,4 +187,4 @@ export default {
.gridsome-highlight pre[class*="language-"].line-numbers {
padding-left: 2.8em;
}
</style>
</style> >

View File

@@ -1,17 +1,15 @@
<template>
<Layout :hideHeader="true" :disableScroll="true">
<TagFilterHeader
:tags="memberships"
:selected="$page.membership.title"
v-if="$page.allMembership.edges.length > 1"
/>
<TagFilterHeader :tags="memberships" :selected="$page.membership.title" v-if="$page.allMembership.edges.length > 1"/>
<div class="container sm:pxi-0 mx-auto mt-8 overflow-x-hidden">
<div class="mx-4 sm:mx-0">
<h1 class="pb-0 mb-0 text-5xl font-medium capitalize">
{{ $page.membership.title.replace("_", " ") }}
{{ $page.membership.title }}
</h1>
<p class="text-gray-700 text-xl">
<span class="self-center">{{ items.length }} People</span>
<span class="self-center"
>{{ $page.membership.belongsTo.totalCount }} People</span
>
</p>
</div>
@@ -19,10 +17,9 @@
<div class="flex flex-wrap with-large pt-8 pb-8 mx-4 sm:-mx-4">
<PostListItem
:showtags="true"
v-for="item in items"
:key="item.id"
:record="item"
v-for="edge in $page.membership.belongsTo.edges"
:key="edge.node.id"
:record="edge.node"
/>
</div>
</div>
@@ -56,14 +53,13 @@
cities
private
image
category
}
}
}
}
}
allMembership(filter: {title: {in: ["cofounders", "tech", "foundation", "ambassadors", "matchmakers", "farmers", "aci_members", "partners", "wisdom_council", "technology_council", "grid_guardians"]}}){
allMembership(filter: {title: {in: ["foundation", "tech"]}}){
edges{
node{
id
@@ -88,20 +84,12 @@ export default {
computed: {
memberships() {
var res = [{ title: "All", path: "/people" }];
var res = [{ title: "All", path: "/team" }];
this.$page.allMembership.edges.forEach((edge) =>
res.push({ title: edge.node.title, path: edge.node.path })
);
return res;
},
items() {
let foundationItems = [];
this.$page.membership.belongsTo.edges.map((edge) => {
if (edge.node.category.includes("foundation"))
foundationItems.push(edge.node);
});
return foundationItems;
},
},
metaInfo() {

View File

@@ -1,9 +1,7 @@
<template>
<Layout :hideHeader="true" :disableScroll="true">
<div class="container sm:pxi-0 mx-auto overflow-x-hidden pt-20 px-4">
<div class="container sm:pxi-0 mx-auto overflow-x-hidden pt-20">
<div class="pt-8">
<Alert v-if="showAlert" @clicked="linkCopied" />
<section class="post-header container mx-auto px-0 mb-4 border-b">
<h1 class="text-5xl font-medium leading-none mt-0">
{{ $page.news.title }}
@@ -26,15 +24,7 @@
<g-image
:src="author.image"
:alt="author.name"
class="
h-8
w-8
sm:h-10
sm:w-10
rounded-full
bg-gray-200
border-2 border-white
"
class="h-8 w-8 sm:h-10 sm:w-10 rounded-full bg-gray-200 border-2 border-white"
/>
</g-link>
</li>
@@ -71,16 +61,6 @@
</g-link>
</p>
</div>
<share-it
icons
:targets="['twitter', 'linkedin', 'facebook']"
class="ml-auto"
/>
<font-awesome
:icon="['fas', 'link']"
class="cursor-pointer"
@click="copyLink"
/>
</div>
</section>
</div>
@@ -90,14 +70,7 @@
<div class="py-12">
<section
class="
post-content
container
mx-auto
relative
font-serif
text-gray-700
"
class="post-content container mx-auto relative font-serif text-gray-700"
>
<div
class="post-content-text text-xl"
@@ -110,19 +83,7 @@
v-for="tag in $page.news.tags"
:key="tag.id"
:to="tag.path"
class="
text-xs
bg-transparent
hover:text-blue-700
py-2
px-4
mr-2
border
hover:border-blue-500
border-gray-600
text-gray-700
rounded-full
"
class="text-xs bg-transparent hover:text-blue-700 py-2 px-4 mr-2 border hover:border-blue-500 border-gray-600 text-gray-700 rounded-full"
>{{ tag.title }}</g-link
>
</section>
@@ -202,97 +163,33 @@
path
}
}
metadata {
siteUrl
}
}
</page-query>
<script>
import PostListItem from "~/components/custom/Cards/PostListItem.vue";
import Alert from "~/components/custom/Alert.vue";
export default {
components: {
PostListItem,
Alert,
},
data() {
return {
showAlert: false,
};
},
metaInfo() {
return {
title: "",
titleTemplate: `ThreeFold | ${this.$page.news.title}`,
meta: [
{
key: "description",
name: "description",
content: this.$page.news.excerpt,
},
{
key: "og:title",
property: "og:title",
content: this.$page.news.title,
},
{
key: "og:description",
property: "og:description",
content: this.$page.news.excerpt,
},
{
key: "og:image",
property: "og:image",
content: this.getCoverImage,
},
{
key: "twitter:description",
name: "twitter:description",
content: this.$page.news.excerpt,
},
{
key: "twitter:image",
property: "twitter:image",
content: this.getCoverImage,
},
{
key: "twitter:title",
property: "twitter:title",
content: this.$page.news.title,
},
],
title: this.$page.news.title,
};
},
methods: {
copyLink() {
const el = document.createElement("input");
el.value = window.location.href;
document.body.appendChild(el);
el.select();
document.execCommand("copy");
document.body.removeChild(el);
this.showAlert = true;
},
linkCopied(val) {
this.showAlert = val;
},
},
computed: {
getCoverImage() {
let coverImage = "";
const cover = this.$page.news.image;
if (cover != null) {
coverImage = `${this.getBaseUrl}${this.$page.news.image.src}`;
}
return coverImage;
},
getBaseUrl() {
return this.$page.metadata.siteUrl;
},
},
};
</script>
</script>
<style scoped>
@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");
.post-card-excerpt,
.post-content-text {
font-family: "Roboto", sans-serif !important;
line-height: 1.2;
}
</style>

View File

@@ -1,14 +1,9 @@
<template>
<Layout>
<TagFilterHeader
:tags="tags"
selected="all"
v-if="$page.tags.edges.length > 1"
/>
<TagFilterHeader :tags="tags" selected="all" v-if="$page.tags.edges.length > 1"/>
<div class="container mt-8 sm:pxi-0 mx-auto overflow-x-hidden">
<div class="flex flex-wrap with-large pt-8 pb-8 mx-4 sm:-mx-4">
<PostListItem
:showtags="true"
v-for="partner in $page.entries.edges"
:key="partner.id"
:record="partner.node"
@@ -21,7 +16,7 @@
<page-query>
query ($private: Int){
entries: allProject (sortBy: "rank", order: ASC, filter: { private: { ne: $private }, category: { contains: ["foundation"]}}){
entries: allProject (sortBy: "rank", order: DESC, filter: { private: { ne: $private }, tags: { id: {in: ["tech", "foundation"]}}}){
totalCount
edges {
node {
@@ -40,31 +35,21 @@ query ($private: Int){
image(width:800)
timeToRead
logo
category
tags{
id
path
title
}
}
}
}
markdownPage(id: "home") {
id
metaImg
}
tags: allProjectTag (filter: { title: {in: ["blockchain", "experience", "technology", "farming", "community", "infrastructure", "impact"]}}) {
tags: allProjectTag (filter: { title: {in: ["tech", "foundation"]}}) {
edges{
node{
id
title
path
}
}
}
}
}
</page-query>
<script>
@@ -84,65 +69,9 @@ export default {
);
return res;
},
getImg() {
let image = "";
if (process.isClient) {
image = `${window.location.origin}${this.img}`;
}
return image;
},
img() {
if (!this.$page.markdownPage.metaImg) return "";
if (this.$page.markdownPage.metaImg.src)
return this.$page.markdownPage.metaImg.src;
return this.$page.markdownPage.metaImg;
},
},
metaInfo() {
return {
title: "",
titleTemplate: "ThreeFold | Partners",
meta: [
{
key: "description",
name: "description",
content:
"Meet the incredible organizations co-creating the peer-to-peer alongside the ThreeFold Foundation.",
},
{
key: "og:title",
property: "og:title",
content: "ThreeFold | Partners",
},
{
key: "og:description",
property: "og:description",
content:
"Meet the incredible organizations co-creating the peer-to-peer alongside the ThreeFold Foundation.",
},
{
key: "og:image",
property: "og:image",
content: this.getImg,
},
{
key: "twitter:description",
name: "twitter:description",
content:
"Meet the incredible organizations co-creating the peer-to-peer alongside the ThreeFold Foundation.",
},
{
key: "twitter:image",
property: "twitter:image",
content: this.getImg,
},
{
key: "twitter:title",
property: "twitter:title",
content: "ThreeFold | Partners",
},
],
};
},
mounted(){
console.log(this.$page)
}
};
</script>

View File

@@ -1,48 +1,28 @@
<template>
<Layout>
<TagFilterHeader
:tags="memberships"
selected="all"
v-if="$page.memberships.edges.length > 1"
/>
<div class="container sm:pxi-0 mx-auto mt-8 overflow-x-hidden">
<div
class="container sm:pxi-0 mx-auto overflow-x-hidden"
:style="{ 'min-height': contentHeight + 'px' }"
>
<div class="flex flex-wrap with-large pt-8 pb-8 mx-4 sm:-mx-4">
<PostListItem
:showtags="true"
v-for="person in $page.entries.edges"
:key="person.id"
:record="person.node"
v-for="edge in $page.entries.edges"
:key="edge.node.id"
:record="edge.node"
/>
</div>
<div class="text-center" v-if="$page.entries.edges.length == 0">
<h2 class="inlibe-flex mx-auto text-gray-700 w-3/4">No results</h2>
</div>
</div>
<div class="pagination flex justify-center mb-8">
<Pagination
:baseUrl="baseurl"
:currentPage="$page.entries.pageInfo.currentPage"
:totalPages="$page.entries.pageInfo.totalPages"
:maxVisibleButtons="5"
v-if="$page.entries.pageInfo.totalPages > 1 && $page.entries.edges.length > 0"
/>
</div>
</Layout>
</template>
<page-query>
query($page: Int){
entries: allPerson (perPage: 25, page: $page, sortBy: "rank", order: ASC, filter: {category: { contains: ["foundation"]}}) @paginate{
query ($private: Int){
entries: allPerson (sortBy: "rank", order: DESC, filter: { private: { ne: $private }}){
totalCount
pageInfo {
totalPages
currentPage
}
edges {
node {
path
content
excerpt
content
name
rank
bio
@@ -52,21 +32,11 @@ query($page: Int){
cities
image(width:800)
private
memberships {
id
path
title
}
}
}
}
markdownPage(id: "home") {
id
metaImg
}
memberships: allMembership(filter: {title: {in: ["cofounders", "tech", "foundation", "ambassadors", "matchmakers", "farmers", "aci_members", "partners", "wisdom_council", "technology_council", "grid_guardians"]}}){
memberships: allMembership{
edges{
node{
id
@@ -76,80 +46,30 @@ query($page: Int){
}
}
}
</page-query>
<script>
import PostListItem from "~/components/custom/Cards/PostListItem.vue";
import TagFilterHeader from "~/components/custom/TagFilterHeader.vue";
import Pagination from "~/components/custom/Pagination.vue";
import Pagination from "~/components/Pagination.vue";
import PostListItem from "~/components/PostListItem.vue";
export default {
metaInfo: {
title: "People",
},
components: {
PostListItem,
TagFilterHeader,
Pagination
},
metaInfo() {
return {
title: "",
titleTemplate: "ThreeFold | People",
meta: [
{
key: "description",
name: "description",
content: "Meet the wide range of passionate and dedicated individuals involved in the ThreeFold movement.",
},
{
key: "og:title",
property: "og:title",
content: "ThreeFold | People",
},
{
key: "og:description",
property: "og:description",
content: "Meet the wide range of passionate and dedicated individuals involved in the ThreeFold movement.",
},
{
key: "og:image",
property: "og:image",
content: this.getImg,
},
{
key: "twitter:description",
name: "twitter:description",
content: "Meet the wide range of passionate and dedicated individuals involved in the ThreeFold movement.",
},
{
key: "twitter:image",
property: "twitter:image",
content: this.getImg,
},
{
key: "twitter:title",
property: "twitter:title",
content: "ThreeFold | People",
},
],
};
Pagination,
},
computed: {
memberships() {
var res = [{ title: "All", path: "/people" }];
this.$page.memberships.edges.forEach((edge) =>
res.push({ title: edge.node.title, path: edge.node.path })
);
return res;
},
getImg() {
let img = "";
if (process.isClient) {
img = `${window.location.origin}${this.$page.markdownPage.metaImg.src}`;
}
return img;
},
baseurl: function () {
return "/people/";
},
contentHeight() {
if (process.isClient) {
return window.innerHeight - 100;
}
},
},
};
</script>

View File

@@ -1,28 +1,17 @@
<template>
<Layout :hideHeader="true" :disableScroll="true">
<div
class="container sm:pxi-0 mx-auto min-h-screen overflow-x-hidden pt-24"
>
<div class="container sm:pxi-0 mx-auto min-h-screen overflow-x-hidden pt-24">
<div class="flex flex-row flex-wrap items-center mx-4 sm:mx-0">
<div class="w-full md:w-1/6 mx-auto sm:mx-0">
<g-image
:src="$page.person.image"
class="
rounded-full
bg-gray-200
w-32
h-32
border-4 border-gray-400
mx-auto
md:mx-0
"
class="rounded-full bg-gray-200 w-32 h-32 border-4 border-gray-400 mx-auto md:mx-0"
></g-image>
</div>
<div class="w-full md:w-5/6 text-center md:text-left md:pl-8 lg:pl-0">
<h1 class="pb-0 mb-0 mt-0 text-4xl font-medium">
{{ $page.person.name }}
<a
v-if="$page.person.linkedin"
:href="$page.person.linkedin"
target="_blank"
rel="noopener noreferrer"
@@ -35,55 +24,33 @@
<p class="text-gray-700 text-xl" v-if="$page.person.bio">
{{ $page.person.bio }}
</p>
<div class="author-social"></div>
<section>
<div class="avatars">
<div class="flex items-center">
<div class="flex justify-between items-center">
<ul class="list-none flex author-list m-0 py-2">
<li
v-for="project in $page.person.projects"
:key="project.id"
class="author-list-item"
>
<g-link :to="project.path" v-tooltip="project.title">
<g-image
:src="project.logo"
:alt="project.title"
class="
w-20
h-20
rounded-full
bg-gray-200
border-2 border-white
"
/>
</g-link>
</li>
</ul>
</div>
</div>
<div class="author-social">
</div>
<section>
<div class="avatars">
<div class="flex items-center">
<div class="flex justify-between items-center">
<ul class="list-none flex author-list m-0 py-2">
<li
v-for="project in $page.person.projects"
:key="project.id"
class="author-list-item"
>
<g-link :to="project.path" v-tooltip="project.title">
<g-image
:src="project.logo"
:alt="project.title"
class="w-20 h-20 rounded-full bg-gray-200 border-2 border-white"
/>
</g-link>
</li>
</ul>
</div>
<g-link
v-for="membership in $page.person.memberships"
:key="membership.id"
:to="membership.path"
class="
text-xs
bg-transparent
hover:text-blue-700
py-2
px-4
mr-2
border
hover:border-blue-500
border-gray-600
text-gray-700
rounded-full
"
>{{ membership.title }}</g-link
>
</section>
</div>
</div>
</section>
</div>
</div>
@@ -99,14 +66,16 @@
</section>
<div class="pt-8 border-b mx-4 sm:-mx-4"></div>
<!--
<div class="flex flex-wrap pt-8 pb-8 mx-4 sm:-mx-4">
<PostListItem
v-for="edge in $page.person.belongsTo.edges"
:key="edge.node.id"
:record="edge.node"
/>
</div> -->
</div>
</div>
</Layout>
</template>
@@ -175,7 +144,7 @@
}
}
memberships: allMembership{
memberships: allMembership(filter: {title: {in: ["foundation", "tech"]}}){
edges{
node{
id
@@ -202,60 +171,22 @@ export default {
return pluralize("post", this.$page.person.belongsTo.totalCount);
},
memberships() {
var all = [];
this.$page.memberships.edges.forEach((edgs) => all.push(edge.node.title));
var res = [];
this.$page.person.memberships.forEach(function (membership) {
if (all.includes(membership.title)) {
res.push(membership);
memberships(){
var all = []
this.$page.memberships.edges.forEach((edgs) => all.push(edge.node.title))
var res = []
this.$page.person.memberships.forEach(function(membership){
if (all.includes(membership.title)){
res.push(membership)
}
});
return res;
},
return res
}
},
metaInfo() {
return {
title: "",
titleTemplate: `ThreeFold | ${this.$page.person.name}`,
meta: [
{
key: "description",
name: "description",
content: this.$page.person.excerpt,
},
{
key: "og:title",
property: "og:title",
content: this.$page.person.name,
},
{
key: "og:description",
property: "og:description",
content: this.$page.person.excerpt,
},
{
key: "og:image",
property: "og:image",
content: this.$page.person.image.src,
},
{
key: "twitter:description",
name: "twitter:description",
content: this.$page.person.excerpt,
},
{
key: "twitter:image",
property: "twitter:image",
content: this.$page.person.image.src,
},
{
key: "twitter:title",
property: "twitter:title",
content: this.$page.person.name,
},
],
title: this.$page.person.name,
};
},
};
</script>
</script>

View File

@@ -5,28 +5,20 @@
<div class="w-full md:w-1/6 mx-auto sm:mx-0">
<g-image
:src="$page.project.logo"
class="
rounded-full
bg-gray-200
w-32
h-32
border-4 border-gray-400
mx-auto
md:mx-0
"
class="rounded-full bg-gray-200 w-32 h-32 border-4 border-gray-400 mx-auto md:mx-0"
></g-image>
</div>
<div class="w-full md:w-5/6 text-center md:text-left md:pl-8 lg:pl-0">
<h1 class="pb-0 mb-0 mt-0 text-4xl font-medium">
{{ $page.project.title }}
<!-- <a
<a
:href="$page.project.linkedin"
target="_blank"
rel="noopener noreferrer"
class="text-gray-400 hover:text-black"
>
<font-awesome :icon="['fab', 'linkedin']" />
</a> -->
</a>
</h1>
<p class="text-gray-700 text-xl" v-if="$page.project.bio">
@@ -43,17 +35,11 @@
:key="member.id"
class="author-list-item"
>
<g-link :to="member.path">
<g-link :to="member.path" v-tooltip="member.name">
<g-image
:src="member.image"
:alt="member.name"
class="
w-8
h-8
rounded-full
bg-gray-200
border-2 border-white
"
class="w-8 h-8 rounded-full bg-gray-200 border-2 border-white"
/>
</g-link>
</li>
@@ -62,54 +48,13 @@
</div>
</div>
</section>
<section class="container mx-auto py-2">
<ul class="list-none flex author-list m-0">
<!-- <li class="mx-2">
<g-image
:src="$page.project.logo"
class="rounded-full bg-gray-200 w-8 h-8 border-2 border-gray-400 mx-auto md:mx-0"
></g-image>
</li> -->
<li v-if="$page.project.websites">
<a
:href="$page.project.websites"
target="_blank"
rel="noopener noreferrer"
class="text-gray-400 hover:text-black linkedin_size mx-1"
>
<font-awesome :icon="['fas', 'globe']" />
</a>
</li>
<li v-if="$page.project.linkedin">
<a
:href="$page.project.linkedin"
target="_blank"
rel="noopener noreferrer"
class="text-gray-400 hover:text-black linkedin_size mx-1"
>
<font-awesome :icon="['fab', 'linkedin']" />
</a>
</li>
</ul>
<section class="post-tags container mx-auto relative py-5">
<g-link
v-for="tag in $page.project.tags"
:key="tag.id"
:to="tag.path"
class="
text-xs
bg-transparent
hover:text-blue-700
py-2
px-4
mr-2
border
hover:border-blue-500
border-gray-600
text-gray-700
rounded-full
"
>{{ tag.title }}</g-link
v-for="edge in $page.tags.edges"
:key="edge.node.id"
:to="edge.node.path"
class="text-xs bg-transparent hover:text-blue-700 py-2 px-4 mr-2 border hover:border-blue-500 border-gray-600 text-gray-700 rounded-full"
>{{ edge.node.title }}</g-link
>
</section>
</div>
@@ -182,11 +127,6 @@
path
logo
image
tags {
id
title
path
}
}
}
}
@@ -194,15 +134,17 @@
}
}
tags: allProjectTag (filter: { title: {in: ["foundation"]}}) {
tags: allProjectTag (filter: { title: {in: ["tech", "foundation"]}}) {
edges{
node{
id
title
path
}
}
}
}
}
</page-query>
@@ -211,6 +153,7 @@
import PostListItem from "~/components/custom/Cards/PostListItem.vue";
import Pagination from "~/components/custom/Pagination.vue";
export default {
components: {
Pagination,
@@ -222,70 +165,17 @@ export default {
return pluralize("post", this.$page.project.belongsTo.totalCount);
},
},
methods: {
img(image) {
if (!image) return "";
if (image.src) return image.src;
return image;
},
},
metaInfo() {
return {
title: "",
titleTemplate: `ThreeFold | ${this.$page.project.title}`,
meta: [
{
key: "description",
name: "description",
content: this.$page.project.excerpt,
},
{
key: "og:title",
property: "og:title",
content: this.$page.project.title,
},
{
key: "og:description",
property: "og:description",
content: this.$page.project.excerpt,
},
{
key: "og:image",
property: "og:image",
content: this.img(this.$page.project.image),
},
{
key: "twitter:description",
name: "twitter:description",
content: this.$page.project.excerpt,
},
{
key: "twitter:image",
property: "twitter:image",
content: this.img(this.$page.project.image),
},
{
key: "twitter:title",
property: "twitter:title",
content: this.$page.project.title,
},
{
key: "twitter:card",
name: "twitter:card",
content: this.$page.project.excerpt,
},
],
title: this.$page.project.title,
};
},
};
</script>
<style scoped>
@import url("https://fonts.googleapis.com/css2?family=Roboto&display=swap");
.post-content-text {
font-family: "Roboto", sans-serif;
font-weight: 300;
}
.linkedin_size {
font-size: 2rem !important;
}
</style>

View File

@@ -0,0 +1,80 @@
<template>
<Layout>
<div
class="container sm:pxi-0 mx-auto overflow-x-hidden"
:style="{ 'min-height': contentHeight + 'px' }"
>
<div class="flex flex-wrap with-large projects pt-8 pb-8 mx-4 sm:-mx-4">
<PostListItem
v-for="edge in $page.entries.edges"
:key="edge.node.id"
:record="edge.node"
/>
</div>
</div>
</Layout>
</template>
<page-query>
query ($private: Int){
entries: allProject (sortBy: "rank", order: DESC, filter: { private: { ne: $private }}, tags: { id: {in: ["tech", "foundation"]}}){
totalCount
edges {
node {
title
path
members {
id
name
image(width:64, height:64, fit:inside)
path
},
rank
linkedin
excerpt
image(width:800)
path
timeToRead
logo
}
}
}
memberships: allProjectTag{
edges{
node{
id
title
path
}
}
}
}
</page-query>
<script>
import PostListItem from "~/components/PostListItem.vue";
import Pagination from "~/components/Pagination.vue";
export default {
metaInfo: {
title: "Projects",
},
components: {
PostListItem,
Pagination,
},
computed: {
baseurl: function () {
return "/projects/";
},
contentHeight() {
if (process.isClient) {
return window.innerHeight - 100;
}
},
},
};
</script>

View File

@@ -60,7 +60,7 @@ query ($private: Int){
}
}
people: allPerson(filter: { private: { ne: $private }}) {
people: allPerson(filter: { private: { ne: $private }, memberships: { id: {in: ["foundation", "tech"]}}}) {
edges {
node {
id
@@ -69,11 +69,11 @@ query ($private: Int){
content
name
rank
# memberships{
# id
# title
# path
# }
memberships{
id
title
path
}
bio
linkedin
websites

View File

@@ -12,7 +12,9 @@
{{ tags.title }}
</h1>
<p class="text-gray-700 text-xl">
<span class="self-center">{{ items.length }} {{ item }}</span>
<span class="self-center"
>{{ tags.belongsTo.totalCount }} {{ item }}</span
>
</p>
</div>
@@ -20,7 +22,6 @@
<div class="flex flex-wrap pt-8 pb-8 mx-4 sm:-mx-4">
<PostListItem
:showtags="true"
v-for="edge in tags.belongsTo.edges"
:key="edge.node.id"
:record="edge.node"
@@ -59,11 +60,7 @@
image(width:800)
path
datetime : created
tags{
id
path
title
}
}
}
}
@@ -132,7 +129,7 @@
}
}
allProjectTag(filter: { title: {in: ["blockchain", "experience", "technology", "farming", "community", "infrastructure", "impact"]}}){
allProjectTag(filter: { title: {in: ["tech", "foundation"]}}){
edges{
node{
id
@@ -222,18 +219,6 @@ export default {
return "post";
}
},
items() {
let foundationItems = [];
this.tags.belongsTo.edges.map((edge) => {
if (Array.isArray(edge.node.category)) {
if (edge.node.category.includes("foundation"))
foundationItems.push(edge.node);
} else {
foundationItems.push(edge.node);
}
});
return foundationItems;
},
},
methods: {

69
src/templates/Team.vue Normal file
View File

@@ -0,0 +1,69 @@
<template>
<Layout>
<!-- <TagFilterHeader :tags="memberships" selected="all" v-if="$page.memberships.edges.length > 1"/> -->
<div class="container sm:pxi-0 mx-auto mt-8 overflow-x-hidden">
<div class="flex flex-wrap with-large pt-8 pb-8 mx-4 sm:-mx-4">
<PostListItem
v-for="person in $page.entries.edges"
:key="person.id"
:record="person.node"
/>
</div>
</div>
</Layout>
</template>
<page-query>
query ($private: Int){
entries: allPerson (sortBy: "rank", order: DESC, filter: { private: { ne: $private }, memberships: { id: {in: ["foundation", "tech"]}}}){
totalCount
edges {
node {
path
content
excerpt
name
rank
bio
linkedin
websites
countries
cities
image(width:800)
private
}
}
}
memberships: allMembership(filter: {title: {in: ["foundation", "tech"]}}){
edges{
node{
id
title
path
}
}
}
}
</page-query>
<script>
import PostListItem from "~/components/custom/Cards/PostListItem.vue";
import TagFilterHeader from "~/components/custom/TagFilterHeader.vue";
export default {
components: {
PostListItem,
TagFilterHeader,
},
computed: {
memberships() {
var res = [{ title: "All", path: "/team" }];
this.$page.memberships.edges.forEach((edge) =>
res.push({ title: edge.node.title, path: edge.node.path })
);
return res;
},
},
};
</script>