14 Commits

Author SHA1 Message Date
Matteo Cominetti 39ba329c34 feat: adds discourse comments script 2022-02-24 11:49:42 +00:00
Dimitrie Stefanescu 99285c63b2 feat(tags): adds teklastructures 2022-02-23 20:13:47 +00:00
Dimitrie Stefanescu f418908684 fix: closes https://github.com/specklesystems/admin/issues/211 2022-01-21 20:25:12 +00:00
Dimitrie Stefanescu 0291bec539 feat: closes #25 2022-01-21 19:39:27 +00:00
Matteo Cominetti 160680bf7b Merge branch 'main' of github.com:specklesystems/ghost-theme 2021-11-30 13:49:22 +00:00
Matteo Cominetti 7953d72caf feat: updates readme 2021-11-30 13:38:51 +00:00
Dimitrie Stefanescu 185621b4c1 feat: local updates 2021-11-30 12:17:09 +00:00
Matteo Cominetti c65e376410 Create close-issue.yml 2021-10-02 17:07:27 +01:00
Matteo Cominetti 423c734e3b Create open-issue.yml 2021-10-02 17:07:09 +01:00
Dimitrie Stefanescu 313812f2ac closes #23 and #24 2021-08-04 16:28:04 +03:00
Dimitrie Stefanescu de7b9898d6 fix: layout bugs fix 2021-07-26 07:30:07 +01:00
Dimitrie Stefanescu 87625979f1 fix: mobile display connectors page 2021-07-25 12:38:32 +01:00
Dimitrie Stefanescu 02d06fc3bc feat: banner smol bugfix 2021-07-25 11:31:49 +01:00
Dimitrie Stefanescu 092baa0501 Merge pull request #21 from specklesystems/interop
CSS ++
2021-07-24 20:29:58 +01:00
15 changed files with 281 additions and 150 deletions
+78
View File
@@ -0,0 +1,78 @@
name: Update issue Status
on:
issues:
types: [closed]
jobs:
update_issue:
runs-on: ubuntu-latest
steps:
- name: Get project data
env:
GITHUB_TOKEN: ${{secrets.GHPROJECT_TOKEN}}
ORGANIZATION: specklesystems
PROJECT_NUMBER: 9
run: |
gh api graphql --header 'GraphQL-Features: projects_next_graphql' -f query='
query($org: String!, $number: Int!) {
organization(login: $org){
projectNext(number: $number) {
id
fields(first:20) {
nodes {
id
name
settings
}
}
}
}
}' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json
echo 'PROJECT_ID='$(jq '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_FIELD_ID='$(jq '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV
echo "$PROJECT_ID"
echo "$STATUS_FIELD_ID"
echo 'DONE_ID='$(jq '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") | .settings | fromjson | .options[] | select(.name== "Done") | .id' project_data.json) >> $GITHUB_ENV
echo "$DONE_ID"
- name: Add Issue to project #it's already in the project, but we do this to get its node id!
env:
GITHUB_TOKEN: ${{secrets.GHPROJECT_TOKEN}}
ISSUE_ID: ${{ github.event.issue.node_id }}
run: |
item_id="$( gh api graphql --header 'GraphQL-Features: projects_next_graphql' -f query='
mutation($project:ID!, $id:ID!) {
addProjectNextItem(input: {projectId: $project, contentId: $id}) {
projectNextItem {
id
}
}
}' -f project=$PROJECT_ID -f id=$ISSUE_ID --jq '.data.addProjectNextItem.projectNextItem.id')"
echo 'ITEM_ID='$item_id >> $GITHUB_ENV
- name: Update Status
env:
GITHUB_TOKEN: ${{secrets.GHPROJECT_TOKEN}}
ISSUE_ID: ${{ github.event.issue.node_id }}
run: |
gh api graphql --header 'GraphQL-Features: projects_next_graphql' -f query='
mutation($project:ID!, $status:ID!, $id:ID!, $value:String!) {
set_status: updateProjectNextItemField(
input: {
projectId: $project
itemId: $id
fieldId: $status
value: $value
}
) {
projectNextItem {
id
}
}
}' -f project=$PROJECT_ID -f status=$STATUS_FIELD_ID -f id=$ITEM_ID -f value=${{ env.DONE_ID }}
+50
View File
@@ -0,0 +1,50 @@
name: Move new issues into Project
on:
issues:
types: [opened]
jobs:
track_issue:
runs-on: ubuntu-latest
steps:
- name: Get project data
env:
GITHUB_TOKEN: ${{secrets.GHPROJECT_TOKEN}}
ORGANIZATION: specklesystems
PROJECT_NUMBER: 9
run: |
gh api graphql --header 'GraphQL-Features: projects_next_graphql' -f query='
query($org: String!, $number: Int!) {
organization(login: $org){
projectNext(number: $number) {
id
fields(first:20) {
nodes {
id
name
settings
}
}
}
}
}' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json
echo 'PROJECT_ID='$(jq '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV
echo 'STATUS_FIELD_ID='$(jq '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV
- name: Add Issue to project
env:
GITHUB_TOKEN: ${{secrets.GHPROJECT_TOKEN}}
ISSUE_ID: ${{ github.event.issue.node_id }}
run: |
item_id="$( gh api graphql --header 'GraphQL-Features: projects_next_graphql' -f query='
mutation($project:ID!, $id:ID!) {
addProjectNextItem(input: {projectId: $project, contentId: $id}) {
projectNextItem {
id
}
}
}' -f project=$PROJECT_ID -f id=$ISSUE_ID --jq '.data.addProjectNextItem.projectNextItem.id')"
echo 'ITEM_ID='$item_id >> $GITHUB_ENV
+23 -52
View File
@@ -1,61 +1,32 @@
# Ghost Starter Theme
# Speckle Website Theme
A starter framework for Ghost themes! Fork this repository and start your development here with all the main things you need to develop a custom Ghost theme.
## Local development
 
### Installing ghost
# First time using a Ghost theme?
We first need to install ghost locally to then work on our custom theme.
Use Node 16.13.0.
Ghost uses a simple templating language called [Handlebars](http://handlebarsjs.com/) for its themes.
- `npm install ghost-cli@latest -g`
- `ghost install local`
- Set up you Ghost site
- You can import stuff from our live website from `https://speckle.systems/ghost/#/settings/labs` > Export your content and import into your local site
- Note: images are not exported automatically unforch
- `ghost stop`
- On windows: `npm install -g win-node-env`
We've documented our default theme pretty heavily so that it should be fairly easy to work out what's going on just by reading the code and the comments. Once you feel comfortable with how everything works, we also have full [theme API documentation](https://themes.ghost.org) which explains every possible Handlebars helper and template.
### Theme setup
**The main files are:**
- Clone this repo somewhere on you machine
- `default.hbs` - The main template file
- `index.hbs` - Used for the home page
- `post.hbs` - Used for individual posts
- `page.hbs` - Used for individual pages
- `tag.hbs` - Used for tag archives
- `author.hbs` - Used for author archives
- `npm install`
- `npm run zip`
One neat trick is that you can also create custom one-off templates just by adding the slug of a page to a template file. For example:
Now, in order to trigger Ghost load our theme and use it live as we're editing it, we need to first upload it as a zip.
- `page-about.hbs` - Custom template for the `/about/` page
- `tag-news.hbs` - Custom template for `/tag/news/` archive
- `author-ali.hbs` - Custom template for `/author/ali/` archive
 
# Development
Styles are compiled using Gulp/PostCSS to polyfill future CSS spec. You'll need [Node](https://nodejs.org/), [Yarn](https://yarnpkg.com/) and [Gulp](https://gulpjs.com) installed globally. After that, from the theme's root directory:
```bash
# Install
yarn
# Run build & watch for changes
yarn dev
```
Now you can edit `/assets/css/` files, which will be compiled to `/assets/built/` automatically.
The `zip` Gulp task packages the theme files into `dist/<theme-name>.zip`, which you can then upload to your site.
```bash
yarn zip
```
&nbsp;
# PostCSS Features Used
- Autoprefixer - Don't worry about writing browser prefixes of any kind, it's all done automatically with support for the latest 2 major versions of every browser.
- [Color Mod](https://github.com/jonathantneal/postcss-color-mod-function)
&nbsp;
# Copyright & License
Copyright (c) 2013-2020 Ghost Foundation - Released under the [MIT license](LICENSE).
- in the ghost admin setting upload the zip file just generated inside your `ghost-theme\dist` folder
- set it as active theme
- got to `YOUR-LOCAL-GHOST-INSTALLATION-FOLDER\ghost-local\content\themes`
- replace the newly created `speckle-starter-theme` folder with your actual ghost theme repo folder (I had to rename it to `speckle-starter-theme`)
- `npm run dev` inside you theme folder
- now it should be up and running
+41 -26
View File
@@ -1,6 +1,6 @@
/* Tailwind */
/* ! tailwindcss v2.2.2 | MIT License | https://tailwindcss.com */
/* ! tailwindcss v2.2.7 | MIT License | https://tailwindcss.com */
/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
@@ -303,16 +303,6 @@ button {
background-image: none;
}
/**
* Work around a Firefox/IE bug where the transparent `button` background
* results in a loss of the default `button` focus styles.
*/
button:focus {
outline: 1px dotted;
outline: 5px auto -webkit-focus-ring-color;
}
fieldset {
margin: 0;
padding: 0;
@@ -521,6 +511,14 @@ video {
height: auto;
}
/**
* Ensure the default browser behavior of the `hidden` attribute.
*/
[hidden] {
display: none;
}
*, ::before, ::after {
--tw-border-opacity: 1;
border-color: rgba(229, 231, 235, var(--tw-border-opacity));
@@ -1878,10 +1876,6 @@ select {
z-index: 40;
}
.z-50 {
z-index: 50;
}
.col-span-1 {
grid-column: span 1 / span 1;
}
@@ -2280,6 +2274,10 @@ select {
width: 3.5rem;
}
.w-16 {
width: 4rem;
}
.w-20 {
width: 5rem;
}
@@ -2376,6 +2374,14 @@ select {
border-collapse: collapse;
}
.origin-top {
transform-origin: top;
}
.origin-top-right {
transform-origin: top right;
}
.transform {
--tw-translate-x: 0;
--tw-translate-y: 0;
@@ -2387,14 +2393,6 @@ select {
transform: translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.origin-top {
transform-origin: top;
}
.origin-top-right {
transform-origin: top right;
}
.-translate-x-3 {
--tw-translate-x: -0.75rem;
}
@@ -2474,7 +2472,6 @@ select {
--tw-scale-y: 1;
}
@keyframes spin {
to {
transform: rotate(360deg);
@@ -2636,6 +2633,12 @@ select {
margin-left: calc(0px * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-1 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(0.25rem * var(--tw-space-x-reverse));
margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
--tw-space-x-reverse: 0;
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
@@ -3826,7 +3829,7 @@ select {
}
/**
* Swiper 6.7.0
* Swiper 6.8.1
* Most modern mobile touch slider and framework with hardware accelerated transitions
* https://swiperjs.com
*
@@ -3834,7 +3837,7 @@ select {
*
* Released under the MIT License
*
* Released on: May 31, 2021
* Released on: August 3, 2021
*/
@font-face {
@@ -4160,6 +4163,10 @@ button.swiper-pagination-bullet {
cursor: pointer;
}
.swiper-pagination-bullet:only-child {
display: none !important;
}
.swiper-pagination-bullet-active {
opacity: 1;
background: var(--swiper-pagination-color, var(--swiper-theme-color));
@@ -4861,10 +4868,18 @@ figcaption {
height: 3rem;
}
.sm\:h-32 {
height: 8rem;
}
.sm\:w-12 {
width: 3rem;
}
.sm\:w-32 {
width: 8rem;
}
.sm\:w-auto {
width: auto;
}
+4
View File
@@ -1,3 +1,5 @@
/* purgecss start ignore */
/* Variables
/* ---------------------------------------------------------- */
@@ -28,3 +30,5 @@
--margin: 2rem;
--radius: 0.5rem;
}
/* purgecss end ignore */
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 510 KiB

+3 -3
View File
@@ -37,7 +37,7 @@
<div class="relative text-lg text-gray-600 dark:text-gray-400 md:flex-grow">
<p class="relative">
Send your CV and tell us why you think you'd be a great fit for the role! We'd also
Send your CV and tell us why you think you'd be a great fit for the role! We'd also like
you to include a small example of how you would improve Speckle, whether it's an idea, a sketch or a Pull Request.
</p>
</div>
@@ -128,8 +128,8 @@
<div class="flex flex-col rounded-lg transition shadow hover:shadow-2xl overflow-hidden col-span-1 md:col-span-2">
<div class="flex-shrink-0 ">
<img class="w-full h-72 object-cover" src="https://speckle.systems/content/images/2021/06/standups.png"
alt="izzys bunnies going to the vet">
<img class="w-full h-72 object-cover" src="{{asset 'images/bonkers.png'}}"
alt="standups">
</div>
<div class="flex-1 bg-white dark:bg-gray-900 dark:text-gray-200 p-6 flex flex-col justify-between">
<div class="flex-1">
+13
View File
@@ -46,6 +46,19 @@
</div>
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://speckle.community/',
discourseEmbedUrl: '{{url absolute="true"}}' };
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
{{!-- Read more --}}
<div class="mt-8 grid gap-5 md:grid-cols-2 mb-10">
+5 -56
View File
@@ -7,7 +7,7 @@
{{!-- Header --}}
<figure class="col-span-7 md:col-span-2 flex items-center justify-center rounded-xl overflow-hidden mt-10">
{{#if feature_image}}
<img srcset="{{img_url feature_image size=" s"}} 300w, {{img_url feature_image size="m" }} 600w, {{img_url
<img class="object-cover" srcset="{{img_url feature_image size=" s"}} 300w, {{img_url feature_image size="m" }} 600w, {{img_url
feature_image size="l" }} 1000w, {{img_url feature_image size="xl" }} 2000w" sizes="(max-width: 800px) 400px,
(max-width: 1170px) 1170px,
2000px" src="{{img_url feature_image size=" xl"}}" alt="{{title}}" />
@@ -23,9 +23,9 @@
</span>
<h1 class="gh-title">{{title}}</h1>
</div>
<div class="max-w-prose mx-auto my-4">
<div class="max-w-prose mx-auto my-4 space-y-1 space-x-1">
{{#foreach tags}}
<a class="rounded-full py-1 px-3 bg-blue-500 text-white mr-2 inline-block hover:ring-4 transition"
<a class="rounded-full py-1 px-3 bg-blue-500 text-white inline-block hover:ring-4 transition"
href="{{url}}">
{{name}}
</a>
@@ -91,9 +91,9 @@
Top
</a>
<p class="border-t dark:border-gray-800 mt-2 pt-2"></p>
<div>
<div class="space-y-1 space-x-1">
{{#foreach tags}}
<a class="rounded-full py-1 px-3 bg-blue-500 text-white mr-2 inline-block hover:ring-4 transition"
<a class="rounded-full py-1 px-3 bg-blue-500 text-white inline-block hover:ring-4 transition"
href="{{url}}">
{{name}}
</a>
@@ -160,54 +160,3 @@
{{/post}}
<script>
let postContent = Array.from(document.getElementsByClassName('post-content'))[0].innerHTML
let tips = postContent.match(/<p>::: tip(.*?):::<\/\p>/g)
let warnings = postContent.match(/<p>::: warning(.*?):::<\/\p>/g)
let dangers = postContent.match(/<p>::: danger(.*?):::<\/\p>/g)
let details = postContent.match(/<p>::: details([\s\S]+?):::<\/\p>/g)
if (tips)
tips.forEach(tip => {
let result = tip.match(/::: tip(.*?)</)
let tipTitle = result[1] && result[1] !== "" ? result[1] : 'Tip'
let newTip = `<div class="mb-4 border-l-4 border-blue-500 bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + tip.replace(`::: tip${result[1]}`, `<div class="font-bold text-blue-500 mb-2">${tipTitle}</div>`) + `</div>`
newTip = newTip.replace(":::", "")
newTip = newTip.replace("<br>", "")
postContent = postContent.replace(tip, newTip)
})
if (warnings)
warnings.forEach(tip => {
let result = tip.match(/::: warning(.*?)</)
let tipTitle = result[1] && result[1] !== "" ? result[1] : 'Warning'
let newTip = `<div class="mb-4 border-l-4 border-yellow-500 bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + tip.replace(`::: warning${result[1]}`, `<div class="font-bold text-yellow-500 mb-2">${tipTitle}</div>`) + `</div>`
newTip = newTip.replace(":::", "")
newTip = newTip.replace("<br>", "")
postContent = postContent.replace(tip, newTip)
})
if (dangers)
dangers.forEach(tip => {
let result = tip.match(/::: danger(.*?)</)
let tipTitle = result[1] && result[1] !== "" ? result[1] : 'Danger'
let newTip = `<div class="mb-4 border-l-4 border-red-500 bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + tip.replace(`::: danger${result[1]}`, `<div class="font-bold text-red-500 mb-2">${tipTitle}</div>`) + `</div>`
newTip = newTip.replace(":::", "")
newTip = newTip.replace("<br>", "")
postContent = postContent.replace(tip, newTip)
})
if (details)
details.forEach(detail => {
let result = detail.match(/::: details(.*?)</)
let detailTitle = result[1] && result[1] !== "" ? result[1] : 'Details'
let newDetails = `<details class="mb-4 w-full max-w-full bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + detail.replace(`::: details${result[1]}`, `<summary class="font-bold text-blue-500 my-2">${detailTitle}</summary>`) + `</details>`
newDetails = newDetails.replace(":::", "")
postContent = postContent.replace(detail, newDetails)
})
Array.from(document.getElementsByClassName('post-content'))[0].innerHTML = postContent
</script>
+49
View File
@@ -69,7 +69,56 @@
</script>
{{/is}}
{{ghost_foot}}
<script>
let postContent = Array.from(document.getElementsByClassName('post-content'))[0].innerHTML
let tips = postContent.match(/<p>::: tip(.*?):::<\/\p>/g)
let warnings = postContent.match(/<p>::: warning(.*?):::<\/\p>/g)
let dangers = postContent.match(/<p>::: danger(.*?):::<\/\p>/g)
let details = postContent.match(/<p>::: details([\s\S]+?):::<\/\p>/g)
if (tips)
tips.forEach(tip => {
let result = tip.match(/::: tip(.*?)</)
let tipTitle = result[1] && result[1] !== "" ? result[1] : 'Tip'
let newTip = `<div class="mb-4 border-l-4 border-blue-500 bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + tip.replace(`::: tip${result[1]}`, `<div class="font-bold text-blue-500 mb-2">${tipTitle}</div>`) + `</div>`
newTip = newTip.replace(":::", "")
newTip = newTip.replace("<br>", "")
postContent = postContent.replace(tip, newTip)
})
if (warnings)
warnings.forEach(tip => {
let result = tip.match(/::: warning(.*?)</)
let tipTitle = result[1] && result[1] !== "" ? result[1] : 'Warning'
let newTip = `<div class="mb-4 border-l-4 border-yellow-500 bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + tip.replace(`::: warning${result[1]}`, `<div class="font-bold text-yellow-500 mb-2">${tipTitle}</div>`) + `</div>`
newTip = newTip.replace(":::", "")
newTip = newTip.replace("<br>", "")
postContent = postContent.replace(tip, newTip)
})
if (dangers)
dangers.forEach(tip => {
let result = tip.match(/::: danger(.*?)</)
let tipTitle = result[1] && result[1] !== "" ? result[1] : 'Danger'
let newTip = `<div class="mb-4 border-l-4 border-red-500 bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + tip.replace(`::: danger${result[1]}`, `<div class="font-bold text-red-500 mb-2">${tipTitle}</div>`) + `</div>`
newTip = newTip.replace(":::", "")
newTip = newTip.replace("<br>", "")
postContent = postContent.replace(tip, newTip)
})
if (details)
details.forEach(detail => {
let result = detail.match(/::: details(.*?)</)
let detailTitle = result[1] && result[1] !== "" ? result[1] : 'Details'
let newDetails = `<details class="mb-4 w-full max-w-full bg-white dark:bg-gray-900 px-4 py-2 rounded-lg transition-shadow shadow-sm hover:shadow-xl">` + detail.replace(`::: details${result[1]}`, `<summary class="font-bold text-blue-500 my-2">${detailTitle}</summary>`) + `</details>`
newDetails = newDetails.replace(":::", "")
postContent = postContent.replace(detail, newDetails)
})
Array.from(document.getElementsByClassName('post-content'))[0].innerHTML = postContent
</script>
</body>
</html>
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "speckle-starter-theme",
"description": "A custom theme for speckle",
"demo": "https://starter.ghost.io",
"version": "2.4.2",
"version": "2.4.3",
"engines": {
"ghost": ">=3.0.0",
"ghost-api": "v3"
+9 -9
View File
@@ -6,7 +6,7 @@
us:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm rounded-md">
<option value="Select a connector">From</option>
{{#get "tags" limit="all" include='count.posts' order='count.posts desc'
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal]"}}
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal,etabs,qgis,topsolid,powerbi,sketchup,openroads,microstation,openbuildings,teklastructures]"}}
{{#foreach tags }}
<option value="{{name}}">{{name}}</option>
{{/foreach}}
@@ -14,10 +14,10 @@
</select>
to
<select id="to" name="to"
class="block inline-block sm:w-auto mt-1 pl-3 mx-3 pr-10 py-2 text-base font-extrabold shadow-lg text-white bg-blue-500 dark:bg-blue-900 border-gray-300 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm rounded-md">
class="inline-block sm:w-auto mt-1 pl-3 mx-3 pr-10 py-2 text-base font-extrabold shadow-lg text-white bg-blue-500 dark:bg-blue-900 border-gray-300 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm rounded-md">
<option value="Select a connector">To </option>
{{#get "tags" limit="all" include='count.posts' order='count.posts desc'
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal]"}}
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal,etabs,qgis,topsolid,powerbi,sketchup,openroads,microstation,openbuildings,teklastructures]"}}
{{#foreach tags }}
<option value="{{name}}">{{name}}</option>
{{/foreach}}
@@ -32,15 +32,15 @@
</div>
<div class="relative flex items-center w-default mt-4 text-white"></div>
<div class="w-default pt-10 grid grid-cols-1 md:grid-cols-2 gap-0 gap-y-2 md:gap-6">
<div class="w-default pt-10 grid grid-cols-2 gap-0 gap-y-2 md:gap-6">
{{#get "tags" limit="all" include='count.posts' order='count.posts desc'
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal]"}}
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal,etabs,qgis,topsolid,powerbi,sketchup,openroads,microstation,openbuildings,teklastructures]"}}
{{#foreach tags }}
<a href="{{url}}" class="group p-2 py-5 flex flex-row
shadow-sm hover:shadow-xl transition-shadow hover:ring dark:bg-gray-900 bg-white rounded-xl col-span-1 connector-card connector-{{name}}
<a href="{{url}}" class="group p-2 py-5 col-span-2 md:col-span-1 flex flex-row
shadow-sm hover:shadow-xl transition-shadow hover:ring dark:bg-gray-900 bg-white rounded-xl connector-card connector-{{name}}
">
<div class="flex flex-shrink-0 items-center justify-center mx-6">
<img class="mx-auto h-32 w-32 transition-transform transform group-hover:scale-110 object-contain"
<img class="mx-auto h-16 w-16 sm:h-32 sm:w-32 transition-transform transform group-hover:scale-110 object-contain"
src="{{feature_image}}">
</div>
<div class="flex flex-grow flex-col justify-center">
@@ -52,7 +52,7 @@
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 8l4 4m0 0l-4 4m4-4H3" />
</svg>
</h2>
<p class="text-sm dark:text-gray-400 text-gray-600 line-clamp-3">{{description}}</p>
<p class="text-sm dark:text-gray-400 text-gray-600 line-clamp-2 md:line-clamp-3">{{description}}</p>
</div>
</a>
{{/foreach}}
+1 -1
View File
@@ -24,7 +24,7 @@
<div class="swiper-container connector-swiper">
<div class="swiper-wrapper mb-10">
{{#get "tags" limit="all" include='count.posts' order='count.posts desc'
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal]"}}
filter="slug:[rhino,grasshopper,revit,dynamo,excel,blender,autocad,civil3d,unity,unreal,etabs,qgis,topsolid,powerbi,sketchup,openroads,microstation,openbuildings,teklastructures]"}}
{{#foreach tags }}
<a href="{{url}}"
class="swiper-slide group dark:text-gray-200 text-gray-600 p-2 text-center content-center flex flex-wrap justify-center">
+3 -1
View File
@@ -5,11 +5,13 @@
<div
x-data="{ mobileMenuOpen: false, usecasesMenu: false, developersMenu: false, resourcesMenu: false, flyoutMenuOpen: false, topBanner: null }"
x-init="topBanner = window.topBanner"
class="fixed top-0 shadow mt-0 w-full bg-white dark:bg-gray-900 dark:text-white z-20">
class="fixed top-0 shadow mt-0 w-full bg-white dark:bg-gray-900 dark:text-white" style="z-index: 1000;">
{{!-- Hiring notice --}}
{{#is "home"}}
<div x-cloak x-show="topBanner" x-html="topBanner" @mouseenter="usecasesMenu = false; resourcesMenu = false; developersMenu = false; flyoutMenuOpen = false;" class=" transition transform origin-top hover:scale-105">
</div>
{{/is}}
<div class="relative">
+1 -1
View File
@@ -32,7 +32,7 @@
{{!-- Content --}}
<div class="prose prose-blue dark:prose-dark max-w-none mt-10">
<div class="prose prose-blue dark:prose-dark max-w-none mt-10 post-content">
{{content}}