Skip to content

Commit 6482a7c

Browse files
author
Allen Manning
authored
Merge pull request #4667 from quarto-dev/feature/conf-proj
Create Project Scaffold quarto create project #4473
2 parents 95918a9 + a49bf2c commit 6482a7c

File tree

4 files changed

+142
-24
lines changed

4 files changed

+142
-24
lines changed

src/command/create/artifacts/project.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,31 @@ import "../../../project/types/register.ts";
2727

2828
const kProjectTypes = projectTypes();
2929
const kProjectTypeAliases = projectTypeAliases();
30-
const kProjectTypesAndAliases = [...kProjectTypes, ...kProjectTypeAliases];
30+
const kProjectTypesAndAliases = [
31+
...kProjectTypes,
32+
...kProjectTypeAliases,
33+
];
3134

3235
const kType = "type";
3336
const kSubdirectory = "subdirectory";
3437

3538
const kBlogTypeAlias = "blog";
39+
const kConfluenceAlias = "confluence";
3640

3741
const kTypeProj = "project";
3842

39-
const kProjectCreateTypes = [...kProjectTypes, kBlogTypeAlias];
40-
const kProjectTypeOrder = ["default", "website", kBlogTypeAlias, "book"];
43+
const kProjectCreateTypes = [
44+
...kProjectTypes,
45+
kBlogTypeAlias,
46+
kConfluenceAlias,
47+
];
48+
const kProjectTypeOrder = [
49+
"default",
50+
"website",
51+
kBlogTypeAlias,
52+
"book",
53+
kConfluenceAlias,
54+
];
4155

4256
export const projectArtifactCreator: ArtifactCreator = {
4357
displayName: "Project",
@@ -83,6 +97,11 @@ function resolveTemplate(type: string) {
8397
type: "website",
8498
template: "blog",
8599
};
100+
} else if (type === "confluence") {
101+
return {
102+
type: "default",
103+
template: kConfluenceAlias,
104+
};
86105
} else {
87106
return {
88107
type,
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { ProjectScaffoldFile } from "../types.ts";
2+
3+
export const buildConfluenceFiles = (): ProjectScaffoldFile[] => {
4+
const file: ProjectScaffoldFile[] = [
5+
{
6+
name: "index",
7+
content: `This project provides provides a simple scaffold for creating a Quarto Confluence Project. You'll almost certainly want to remove the sample files, they are just here as examples. When you add you own documents (including ones in subfolders) they will be automatically added to the site navigation sidebar.`,
8+
title: "Example",
9+
},
10+
{
11+
name: "project-roadmap",
12+
content: `## Overview
13+
14+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla id accumsan justo. Nulla ut lectus efficitur, aliquet tellus elementum, hendrerit mi. Aenean risus purus, finibus eu consectetur sit amet, maximus ut tortor. Vivamus congue mollis ante in interdum. In at semper turpis, sed faucibus arcu. Nullam ultrices, neque nec mattis dictum, risus ante mattis diam, sit amet sagittis arcu ante ut urna.
15+
16+
Quisque cursus eros dictum justo varius condimentum a ac risus. Vestibulum sodales, quam quis dignissim scelerisque, tellus turpis mollis sapien, tempor lacinia quam elit at urna. Etiam pharetra sapien at tristique tincidunt. Duis vitae lectus nisl. Proin pharetra, ante a iaculis interdum, lectus massa tempor leo, eu luctus lorem sapien vel sem. Morbi vitae tincidunt libero, eget tincidunt quam.
17+
18+
## Key Milestones
19+
20+
Donec elementum a neque a rutrum. Nulla a quam in eros ornare fringilla at eget mi. Sed dui dolor, porta mollis auctor in, finibus vel tellus. Nunc quis ipsum sit amet magna vulputate tincidunt. Vivamus eget ornare dolor, eget rhoncus purus.
21+
22+
Praesent ac mauris quis magna placerat hendrerit. Fusce viverra nulla nec urna pulvinar semper.
23+
24+
Nunc sit amet libero ut ligula venenatis volutpat. Integer scelerisque iaculis lacus, et ornare velit placerat nec.
25+
26+
Phasellus nisi ante, dignissim quis metus nec, consequat bibendum lacus.`,
27+
title: "Project Roadmap",
28+
},
29+
{
30+
name: "2022-01",
31+
subdirectory: "reports",
32+
title: "January 2022",
33+
content:
34+
"## Project Status\n" +
35+
"Fusce tristique, elit vel tincidunt vehicula, est tortor laoreet sem, nec sagittis ipsum nisl eget ipsum. Ut fringilla facilisis tincidunt:\n" +
36+
"\n" +
37+
"1. Cras fermentum sagittis tincidunt. Vestibulum nunc nisi, consequat sed nunc vitae, mollis sodales urna.\n" +
38+
"2. Curabitur venenatis, sem sed sodales fermentum, ante mauris posuere nisl, eu pretium velit magna a ex. Duis malesuada vitae nisl sit amet aliquam.\n" +
39+
"3. Nullam scelerisque condimentum leo in convallis. Phasellus eu mauris enim.\n" +
40+
"\n" +
41+
"Sed volutpat orci eu ligula gravida, et congue lacus efficitur. Vivamus eget mi nisl. Nam tristique eros nec elit commodo, at vehicula purus venenatis. Donec imperdiet interdum erat at dignissim. Nullam odio ante, pellentesque id commodo et, sodales eget diam.\n" +
42+
"\n" +
43+
"## Challenges and Opportunities\n" +
44+
"In scelerisque non dolor at congue. Donec neque lorem, consectetur sed consectetur ut, pulvinar sit amet justo. Donec at mi erat. Maecenas luctus sem orci, eu ullamcorper arcu porta sed. Nam dapibus risus ligula, non tempor leo convallis vel. Mauris pretium, arcu ut bibendum egestas, nisi tellus cursus tortor, vel interdum turpis ipsum in nisi.\n" +
45+
"\n" +
46+
"Aliquam ac egestas mi. Nulla ut porttitor justo. Proin id fermentum nunc:\n" +
47+
"\n" +
48+
"1. In odio justo, scelerisque at augue at, blandit rhoncus nibh.\n" +
49+
"2. Mauris ut tristique elit. Suspendisse pretium tempor mauris non luctus.\n" +
50+
"3. Mauris posuere nulla purus, quis dapibus urna suscipit ac.\n" +
51+
"\n" +
52+
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam at risus blandit, aliquet leo sed, pretium lectus. Vivamus in tortor in velit consequat sodales. Integer eleifend dictum vestibulum. Nullam ac augue ultrices, consectetur velit pretium, tincidunt elit. Aliquam mollis nulla erat, vitae scelerisque ante ultrices eu. Fusce maximus libero eget viverra ornare. Proin eu augue placerat, sodales nibh et, laoreet ex.",
53+
},
54+
{
55+
name: "2022-03",
56+
subdirectory: "reports",
57+
title: "March 2023",
58+
content:
59+
"## Project Status\n" +
60+
"Sed at auctor lacus, ut porta tellus. Curabitur luctus sem nec ipsum elementum, non congue erat ultrices. Vivamus fringilla nulla lacus, sit amet tincidunt quam cursus vel. Nunc ligula lacus, sollicitudin vitae imperdiet vel, aliquet nec elit.\n" +
61+
"\n" +
62+
"Quisque non magna sodales, pellentesque neque quis, varius orci. Aliquam pharetra velit accumsan libero mattis, vitae aliquet justo facilisis. Fusce feugiat tincidunt ante vel lacinia. Curabitur imperdiet cursus iaculis. Nulla posuere neque ac sem euismod pharetra. Morbi massa augue, consectetur sed luctus sagittis, sagittis ac sapien. Sed tempor nisl urna, a sollicitudin tellus rutrum a.\n" +
63+
"\n" +
64+
"Challenges and Opportunities\n" +
65+
"Aenean imperdiet tellus non neque placerat pellentesque. Morbi ac pulvinar arcu. In eget eleifend justo. Pellentesque porttitor consectetur consectetur:\n" +
66+
"\n" +
67+
"1. Sed et velit erat.\n" +
68+
"2. Nunc ullamcorper hendrerit convallis.\n" +
69+
"3. Curabitur sagittis ex purus.\n" +
70+
"4. Nulla porta sem sem, vel rutrum tortor.\n" +
71+
"\n" +
72+
"Fusce semper est sit amet finibus dictum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Praesent vehicula, augue eu posuere imperdiet, magna ipsum tristique nisl, ut mollis ipsum ligula sed orci. Sed vitae auctor urna. Fusce pellentesque odio vel enim posuere, sollicitudin viverra quam dictum. Ut eget laoreet eros. Integer vitae imperdiet velit, a cursus lorem.\n" +
73+
"\n" +
74+
"Phasellus varius, libero et viverra eleifend, sem orci condimentum turpis, in condimentum sapien est vitae urna. Sed auctor condimentum tortor in egestas. Pellentesque turpis urna, commodo ut ipsum nec, fermentum venenatis risus. Quisque at dictum tortor. Curabitur gravida suscipit nisl, rutrum sagittis mauris ultricies sed.\n" +
75+
"\n" +
76+
"Phasellus commodo id nisl sit amet dignissim. Mauris facilisis nunc ut nibh faucibus sagittis. Integer at molestie odio, nec fermentum lectus. Donec quis purus id nisi viverra dapibus vitae eget turpis. Maecenas ut lorem malesuada nunc commodo vulputate. Nunc vulputate quam sapien, eget finibus nunc lobortis vitae. Ut gravida hendrerit lorem vitae consectetur. Quisque eget massa risus. Maecenas fringilla augue congue, lobortis neque sed, consectetur neque. Vivamus auctor nisl et placerat feugiat.",
77+
},
78+
];
79+
return file;
80+
};

src/project/types/project-default.ts

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,58 @@
11
/*
2-
* proejct-default.ts
3-
*
4-
* Copyright (C) 2020-2022 Posit Software, PBC
5-
*
6-
*/
2+
* proejct-default.ts
3+
*
4+
* Copyright (C) 2020-2022 Posit Software, PBC
5+
*
6+
*/
77

88
import { join } from "path/mod.ts";
99

1010
import { resourcePath } from "../../core/resources.ts";
1111
import { kJupyterEngine } from "../../execute/types.ts";
1212

1313
import { ProjectCreate, ProjectScaffoldFile, ProjectType } from "./types.ts";
14+
import { buildConfluenceFiles } from "./confluence/confluence.ts";
1415

1516
export const kDefaultProjectFileContents = "{ project: { type: 'default' } }";
17+
export const kConfluence = "confluence";
1618

1719
export const defaultProjectType: ProjectType = {
1820
type: "default",
21+
templates: [kConfluence],
22+
23+
formatLibDirs: () => [
24+
"bootstrap",
25+
"quarto-html",
26+
"quarto-ojs",
27+
"quarto-diagram",
28+
"quarto-contrib",
29+
],
30+
31+
create: (title: string, template?: string): ProjectCreate => {
32+
let resourceDirectory = "default";
33+
if (template === kConfluence) {
34+
resourceDirectory = "confluence";
35+
}
36+
37+
const resourceDir = resourcePath(join("projects", resourceDirectory));
1938

20-
formatLibDirs:
21-
() => [
22-
"bootstrap",
23-
"quarto-html",
24-
"quarto-ojs",
25-
"quarto-diagram",
26-
"quarto-contrib",
27-
],
28-
29-
create: (title: string): ProjectCreate => {
30-
const resourceDir = resourcePath(join("projects", "default"));
3139
return {
3240
configTemplate: join(resourceDir, "templates", "_quarto.ejs.yml"),
3341
resourceDir,
3442
scaffold: (engine: string, kernel?: string, packages?: string[]) => {
35-
const file: ProjectScaffoldFile[] = [{
36-
name: title,
37-
content: `## Quarto
43+
if (template === kConfluence) {
44+
return buildConfluenceFiles();
45+
}
46+
47+
const file: ProjectScaffoldFile[] = [
48+
{
49+
name: title,
50+
content: `## Quarto
3851
3952
Quarto enables you to weave together content and executable code into a finished document. To learn more about Quarto see <https://quarto.org>.`,
40-
title,
41-
}];
53+
title,
54+
},
55+
];
4256
// add some additional content if we were a jupyter engine document created w/
4357
// matplotlib and/or pandas
4458
if (
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
project:
2+
type: confluence
3+
title: "<%= title %>"
4+
5+
<% if(editor){ %>editor: <%= editor %><% } %>

0 commit comments

Comments
 (0)