From c63127cc1ed4124ea6061dddb0120aeea72737a8 Mon Sep 17 00:00:00 2001 From: kazk Date: Mon, 6 Jul 2020 14:54:06 -0700 Subject: [PATCH 1/4] Decouple NextPrevLinks --- src/components/NextPrevLinks.vue | 39 +++++--------------------------- src/templates/MarkdownPage.vue | 26 ++++++++++++++++++++- 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/src/components/NextPrevLinks.vue b/src/components/NextPrevLinks.vue index 7c94fc2c..60971a4d 100644 --- a/src/components/NextPrevLinks.vue +++ b/src/components/NextPrevLinks.vue @@ -22,29 +22,18 @@ - -query { - allMarkdownPage { - edges { - node { - path - title - } - } - } -} - - diff --git a/src/templates/MarkdownPage.vue b/src/templates/MarkdownPage.vue index ab1997b5..8d6e70eb 100644 --- a/src/templates/MarkdownPage.vue +++ b/src/templates/MarkdownPage.vue @@ -12,7 +12,7 @@
- +
@@ -37,6 +37,15 @@ query($id: ID!) { anchor } } + + allPages: allMarkdownPage { + edges { + node { + path + title + } + } + } } @@ -57,6 +66,21 @@ export default { headings() { return this.page.headings.filter((h) => h.depth > 1); }, + + pages() { + return this.$page.allPages.edges.map((edge) => edge.node); + }, + + next() { + if (!this.page.next) return null; + + return this.pages.find((page) => page.path === this.page.next); + }, + prev() { + if (!this.page.prev) return null; + + return this.pages.find((page) => page.path === this.page.prev); + }, }, metaInfo() { From 8ce06f46f0375add098e749697d7a1495cf4b6e2 Mon Sep 17 00:00:00 2001 From: kazk Date: Mon, 6 Jul 2020 15:20:54 -0700 Subject: [PATCH 2/4] Rewrite Sidebar to take list of sections --- src/components/Sidebar.vue | 59 ++++---------------------------------- src/layouts/Default.vue | 38 +++++++++++++++++++++++- 2 files changed, 43 insertions(+), 54 deletions(-) diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue index 3a3a136a..20367fba 100644 --- a/src/components/Sidebar.vue +++ b/src/components/Sidebar.vue @@ -1,10 +1,10 @@ - -query Sidebar { - metadata { - settings { - sidebar { - name - sections { - title - items - } - } - } - } - - allMarkdownPage { - edges { - node { - path - title - } - } - } -} - - diff --git a/src/layouts/Default.vue b/src/layouts/Default.vue index af0ad8a0..66dcf9d0 100644 --- a/src/layouts/Default.vue +++ b/src/layouts/Default.vue @@ -21,7 +21,7 @@
@@ -52,6 +52,24 @@ query { metadata { siteName + settings { + sidebar { + name + sections { + title + items + } + } + } + } + + allMarkdownPage { + edges { + node { + path + title + } + } } } @@ -95,6 +113,9 @@ export default { }, }, computed: { + pages() { + return this.$static.allMarkdownPage.edges.map((edge) => edge.node); + }, sidebarStyle() { return { top: this.headerHeight + "px", @@ -108,6 +129,21 @@ export default { this.headerHeight > 0 ); }, + sidebarSections() { + const def = this.$static.metadata.settings.sidebar.find( + (sidebar) => sidebar.name === this.sidebarName + ); + if (!def) return null; + + return def.sections.map((section) => { + return { + title: section.title, + items: section.items.map((link) => + this.pages.find((page) => page.path === link) + ), + }; + }); + }, }, mounted() { this.setHeaderHeight(); From 3d18ba839a7731539c3d1775f93fe04c1f353374 Mon Sep 17 00:00:00 2001 From: kazk Date: Mon, 6 Jul 2020 15:22:26 -0700 Subject: [PATCH 3/4] Fix code block style --- src/assets/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/styles.css b/src/assets/styles.css index 344593b2..e6287e64 100644 --- a/src/assets/styles.css +++ b/src/assets/styles.css @@ -149,7 +149,7 @@ pre[class*="language-"] { } & > code[class*="language-"] { - @apply border-none leading-relaxed; + @apply border-none leading-relaxed px-0; } } From eac80d178090168aefa195a0d7099c6502cee4d7 Mon Sep 17 00:00:00 2001 From: kazk Date: Mon, 6 Jul 2020 18:19:18 -0700 Subject: [PATCH 4/4] Add reference to languages Sidebar on `/languages/:language` lists pages referencing the language grouped by category. --- content/languages/javascript/testing.md | 9 +++++ content/refs/javascript-ref.md | 10 +++++ data/categories.yml | 6 +++ data/tags.yml | 3 ++ gridsome.config.js | 6 +-- src/layouts/Default.vue | 11 +++-- src/pages/Languages.vue | 2 +- src/templates/Language.vue | 54 ++++++++++++++++++++++++- src/templates/MarkdownPage.vue | 2 +- 9 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 content/languages/javascript/testing.md create mode 100644 content/refs/javascript-ref.md diff --git a/content/languages/javascript/testing.md b/content/languages/javascript/testing.md new file mode 100644 index 00000000..597c9316 --- /dev/null +++ b/content/languages/javascript/testing.md @@ -0,0 +1,9 @@ +--- +category: guides +tags: + - testing +languages: + - javascript +--- + +# Testing JavaScript diff --git a/content/refs/javascript-ref.md b/content/refs/javascript-ref.md new file mode 100644 index 00000000..205ad015 --- /dev/null +++ b/content/refs/javascript-ref.md @@ -0,0 +1,10 @@ +--- +category: references +languages: [javascript] +--- + +# Sample JavaScript Reference + +> TODO Remove this file + +This file exists to show how the sidebar on language pages are automatically populated and grouped by `category`. diff --git a/data/categories.yml b/data/categories.yml index 9463c380..bf7978b2 100644 --- a/data/categories.yml +++ b/data/categories.yml @@ -2,3 +2,9 @@ - id: docs name: Docs description: Docs + +- id: guides + name: Guides +- id: references + name: References + description: Reference Manuals diff --git a/data/tags.yml b/data/tags.yml index 26cae916..b5e70879 100644 --- a/data/tags.yml +++ b/data/tags.yml @@ -9,3 +9,6 @@ name: Content - id: codewars name: Codewars + +- id: testing + name: Testing diff --git a/gridsome.config.js b/gridsome.config.js index 75aa1b1c..292f5c2e 100644 --- a/gridsome.config.js +++ b/gridsome.config.js @@ -61,9 +61,9 @@ module.exports = { typeName: "Tag", }, // Can reference multiple languages to be listed on the language page. - // languages: { - // typeName: "Language", - // }, + languages: { + typeName: "Language", + }, }, }, }, diff --git a/src/layouts/Default.vue b/src/layouts/Default.vue index 66dcf9d0..a2aacaf7 100644 --- a/src/layouts/Default.vue +++ b/src/layouts/Default.vue @@ -84,8 +84,9 @@ export default { currentPath: { type: String, }, - sidebarName: { - type: String, + sidebar: { + // Name of the sidebar defined in settings or array of sections. + type: [String, Array], }, }, components: { @@ -125,13 +126,15 @@ export default { hasSidebar() { return ( this.$page && - (this.$page.markdownPage || this.sidebarName) && + (this.$page.markdownPage || this.sidebar) && this.headerHeight > 0 ); }, sidebarSections() { + if (Array.isArray(this.sidebar)) return this.sidebar; + const def = this.$static.metadata.settings.sidebar.find( - (sidebar) => sidebar.name === this.sidebarName + (sidebar) => sidebar.name === this.sidebar ); if (!def) return null; diff --git a/src/pages/Languages.vue b/src/pages/Languages.vue index 73ececcf..0a9d1955 100644 --- a/src/pages/Languages.vue +++ b/src/pages/Languages.vue @@ -1,5 +1,5 @@ @@ -111,6 +113,29 @@ query($id: ID!) { url } } + + belongsTo(sortBy: "title", order: ASC) { + totalCount + + edges { + node { + ... on MarkdownPage { + title + excerpt + path + category { + id + name + } + tags { + id + name + path + } + } + } + } + } } allLanguage { @@ -124,7 +149,12 @@ query($id: ID!) {