WEBVTT captioned by sachac, checked by sachac
NOTE Introduction
00:00:00.000 --> 00:00:04.159
Hi, everybody. Welcome to the EmacsConf 2023.
00:00:04.160 --> 00:00:06.399
I hope you're doing well and you're having fun.
00:00:06.400 --> 00:00:08.359
I'm Tony Aldon, and in this talk,
00:00:08.360 --> 00:00:11.159
we are going to see how to build a static website
00:00:11.160 --> 00:00:14.519
with the package one.el that I wrote.
00:00:14.520 --> 00:00:17.599
But before we start, I'd like to thank
00:00:17.600 --> 00:00:20.559
all the people who organized that conference,
00:00:20.560 --> 00:00:23.999
so thank you all for the great work.
NOTE Documentation
00:00:24.000 --> 00:00:27.719
Now let's jump into the documentation of one.el,
00:00:27.720 --> 00:00:31.679
which is built with one.el. In the install page,
00:00:31.680 --> 00:00:33.079
we can see that we have a sidebar
00:00:33.080 --> 00:00:35.559
with all of the pages in the documentation,
00:00:35.560 --> 00:00:39.039
some buttons to switch between pages,
00:00:39.040 --> 00:00:41.959
and we also have a table of contents
00:00:41.960 --> 00:00:45.119
for some of the pages if we need it.
00:00:45.120 --> 00:00:49.439
Now let's jump into one.el repository
00:00:49.440 --> 00:00:52.559
and see why I like how it is implemented,
00:00:52.560 --> 00:00:53.839
because the website that we've seen,
00:00:53.840 --> 00:00:55.959
the documentation, is just one file.
00:00:55.960 --> 00:01:00.719
So this is that file, with the headline of level 1
00:01:00.720 --> 00:01:03.279
being the web pages.
00:01:03.280 --> 00:01:06.079
There needs to be a web page to have the property,
00:01:06.080 --> 00:01:09.239
the Org property `:ONE:`, set to a render function.
00:01:09.240 --> 00:01:11.799
We are going to see how they work after.
00:01:11.800 --> 00:01:14.639
And the `:CUSTOM_ID:`, the value of the `:CUSTOM_ID:`,
00:01:14.640 --> 00:01:17.519
is the path of the page. So really,
00:01:17.520 --> 00:01:20.079
the website that we have on the left
00:01:20.080 --> 00:01:24.639
is this file. So to me, this is something simple like that
00:01:24.640 --> 00:01:25.919
that I wanted.
00:01:25.920 --> 00:01:29.839
And another thing is that when we want to
00:01:29.840 --> 00:01:33.559
change something with one.el,
00:01:33.560 --> 00:01:36.679
we don't change configuration
00:01:36.680 --> 00:01:38.879
or write JavaScript or anything else.
00:01:38.880 --> 00:01:43.479
We just write Emacs Lisp code or a bit of CSS.
00:01:43.480 --> 00:01:45.919
So this is what we have with a minibuffer website
00:01:45.920 --> 00:01:47.959
that is built with one.el,
00:01:47.960 --> 00:01:50.279
and the only thing that I had to do
00:01:50.280 --> 00:01:51.919
is to write Emacs Lisp code.
00:01:51.920 --> 00:01:55.119
So those are two things: the content in one file,
00:01:55.120 --> 00:01:58.679
and if we want to change the layout, CSS and Emacs Lisp.
00:01:58.680 --> 00:02:02.199
This is one.el.
NOTE Starting a new project
00:02:02.200 --> 00:02:03.879
Now let's go to our node,
00:02:03.880 --> 00:02:07.159
and we are going to start a new project.
00:02:07.160 --> 00:02:09.599
How do we do that?
00:02:09.600 --> 00:02:11.359
In a new empty directory,
00:02:11.360 --> 00:02:15.159
so new project directory,
00:02:15.160 --> 00:02:19.559
we call the function `one-default-new-project`.
00:02:19.560 --> 00:02:22.319
We have that project, which is one file with the
00:02:22.320 --> 00:02:25.759
five default type of pages that we have,
00:02:25.760 --> 00:02:27.399
and one CSS file.
NOTE Building
00:02:27.400 --> 00:02:29.439
How to build that website?
00:02:29.440 --> 00:02:32.839
Okay, so we call the function `one-build`.
00:02:32.840 --> 00:02:33.959
This builds the website.
00:02:33.960 --> 00:02:36.799
We jump into a terminal, and now if we run tree,
00:02:36.800 --> 00:02:39.799
we can see that the website
00:02:39.800 --> 00:02:42.679
has been built in the public directory
00:02:42.680 --> 00:02:45.559
with the information in the Org properties
00:02:45.560 --> 00:02:50.159
and the content of one.org files. Okay, cool.
00:02:50.160 --> 00:02:53.919
Now we are going to render that in the browser
00:02:53.920 --> 00:02:58.079
to serve that, and to do that
00:02:58.080 --> 00:03:01.159
we can use browser-sync utility,
00:03:01.160 --> 00:03:02.559
which is cool with that,
00:03:02.560 --> 00:03:06.419
in that each time we are going to...
00:03:06.420 --> 00:03:07.860
So we go into public...
00:03:07.861 --> 00:03:11.759
Each time we are going to change and rebuild the website,
00:03:11.760 --> 00:03:14.319
this will be reloaded in the browser.
00:03:14.320 --> 00:03:19.759
So one, this is that website, is now this one.
NOTE Side by side
00:03:19.760 --> 00:03:22.559
So let's put them side by side.
00:03:22.560 --> 00:03:26.319
We go there, and we may do something like that.
00:03:26.320 --> 00:03:30.239
So one.el, the home page, so our custom ID
00:03:30.240 --> 00:03:31.999
with the value just a /,
00:03:32.000 --> 00:03:36.079
is rendered with that function `one-default-home`,
00:03:36.080 --> 00:03:37.239
which is a render function,
00:03:37.240 --> 00:03:41.559
and the first argument of that function is the headline,
00:03:41.560 --> 00:03:45.599
this current headline. So, parsed with the Org parser,
00:03:45.600 --> 00:03:48.359
and then we do the thing that we want to do,
00:03:48.360 --> 00:03:52.079
and the render function returns an HTML string
00:03:52.080 --> 00:03:57.199
that is used to build the pages at the custom ID.
00:03:57.200 --> 00:04:03.279
Now we can go to another web page, the second web page,
00:04:03.280 --> 00:04:05.799
and we see that there is a different value
00:04:05.800 --> 00:04:10.119
for the `:ONE:` property, so another render function,
00:04:10.120 --> 00:04:13.999
and the custom ID at the path of that page.
00:04:14.000 --> 00:04:16.399
So we can see that in the browser.
00:04:16.400 --> 00:04:19.599
So this is `/blog/default-home-list-pages`.
00:04:19.600 --> 00:04:23.479
So this is that. Now there are three other pages,
00:04:23.480 --> 00:04:25.679
but we can list that like that.
00:04:25.680 --> 00:04:28.359
We do a grep in that files,
00:04:28.360 --> 00:04:32.159
and we see the different default render function.
NOTE Writing a render function
00:04:32.160 --> 00:04:34.839
In the second part of that talk,
00:04:34.840 --> 00:04:38.399
we are going to write a render function.
00:04:38.400 --> 00:04:41.079
So we are going to see that after.
00:04:41.080 --> 00:04:47.079
Now maybe we can go to the default page,
00:04:47.080 --> 00:04:50.959
and let's modify that default page.
00:04:50.960 --> 00:04:54.639
We see that this uses `one-default` render function,
00:04:54.640 --> 00:04:56.999
and now let's write "foo bar baz".
00:04:57.000 --> 00:05:00.599
We want to modify the content. We save.
00:05:00.600 --> 00:05:10.439
We call again one-build distribute,
00:05:10.440 --> 00:05:16.199
and we see here we have it: foo bar baz in the default page.
00:05:16.200 --> 00:05:19.759
Now we can use... When we use one-build,
00:05:19.760 --> 00:05:23.799
this also copies the files in the asset directory
00:05:23.800 --> 00:05:25.919
into the public directory.
00:05:25.920 --> 00:05:28.039
This is not always what we want to do.
00:05:28.040 --> 00:05:29.879
Sometimes we just change the content,
00:05:29.880 --> 00:05:34.079
and for that we can use `one-render-page-at-point`.
00:05:34.080 --> 00:05:39.479
If we use that one, this just renders the current page.
00:05:39.480 --> 00:05:44.679
So we see that we have again "foo bar baz" in the page.
NOTE New page
00:05:44.680 --> 00:05:47.919
Now let's add a new page. To add a new page,
00:05:47.920 --> 00:05:52.199
we just have to copy one of them, maybe the default page.
00:05:52.200 --> 00:05:58.319
We are going to call it maybe emacsconf-2023.
00:05:58.320 --> 00:06:01.839
We still use one default render function to render it,
00:06:01.840 --> 00:06:04.519
but we want to change the path.
00:06:04.520 --> 00:06:08.519
So the custom ID, we are going to give it /blog
00:06:08.520 --> 00:06:12.639
and emacsconf-2023 with a slash at the end,
00:06:12.640 --> 00:06:18.359
and the content... We no longer want this one,
00:06:18.360 --> 00:06:22.039
but maybe "We're having a lot of fun".
00:06:22.040 --> 00:06:28.599
So we save that, we rebuild with `one-build` this,
00:06:28.600 --> 00:06:33.599
and now we can look at the top
00:06:33.600 --> 00:06:39.279
and pass it the path `/blog/emacsconf-2023/.
00:06:39.280 --> 00:06:41.719
So we have that new page.
NOTE Linking between pages
00:06:41.720 --> 00:06:44.159
Now, how to link between pages?
00:06:44.160 --> 00:06:46.079
So we are going to write a link
00:06:46.080 --> 00:06:47.999
that links to the last page,
00:06:48.000 --> 00:06:50.519
so a page with the table of contents.
00:06:50.520 --> 00:06:54.399
To do that, we just have to use the value of the custom ID,
00:06:54.400 --> 00:06:58.479
and to link to a custom ID inside Org mode,
00:06:58.480 --> 00:07:03.079
we use the hashtag. We pass it here,
00:07:03.080 --> 00:07:07.279
then we pass it in the description,
00:07:07.280 --> 00:07:09.799
so TOC and sidebar,
00:07:09.800 --> 00:07:12.799
and now if we press RET inside Emacs,
00:07:12.800 --> 00:07:15.839
we jump to that page. So this is cool.
00:07:15.840 --> 00:07:17.719
Now we build again,
00:07:17.720 --> 00:07:19.919
and we see that we are going to have
00:07:19.920 --> 00:07:22.279
the link to the page in the browser.
00:07:22.280 --> 00:07:26.999
So this link to the default page with a table of contents,
00:07:27.000 --> 00:07:29.879
fine, but maybe what we want to do
00:07:29.880 --> 00:07:32.999
is to link to the "Headline foo" in that page.
00:07:33.000 --> 00:07:34.679
How do we do that?
00:07:34.680 --> 00:07:36.919
We do that by adding a custom id.
00:07:36.920 --> 00:07:41.639
We keep the first part,
00:07:41.640 --> 00:07:43.759
which is the page where we are,
00:07:43.760 --> 00:07:46.359
and we added hash with foo,
00:07:46.360 --> 00:07:50.799
so that Headline foo will have the ID "foo"
00:07:50.800 --> 00:07:57.599
in its H2 tag, HTML tag,
00:07:57.600 --> 00:08:05.080
and now we can link it here with still custom ID, so "foo",
00:08:05.081 --> 00:08:10.539
and now it's headline... headline with what?
00:08:10.540 --> 00:08:14.799
Headline foo in TOC page. So we have that.
00:08:14.800 --> 00:08:19.159
If we press RET, we jump to that headline in Emacs.
00:08:19.160 --> 00:08:20.919
So this is super cool.
00:08:20.920 --> 00:08:23.559
And now, if we call `one-build`,
00:08:23.560 --> 00:08:25.799
we see in the browser
00:08:25.800 --> 00:08:26.799
that we have a new link,
00:08:26.800 --> 00:08:30.319
and this link linked to that specific headline.
00:08:30.320 --> 00:08:34.439
So this is cool. So we have the link between pages
00:08:34.440 --> 00:08:36.319
that works inside Emacs
00:08:36.320 --> 00:08:39.999
and that works well also in the browser.
NOTE CSS
00:08:40.000 --> 00:08:44.519
Now let's say that we want to change the CSS.
00:08:44.520 --> 00:08:50.719
So we've added a page with specific content,
00:08:50.720 --> 00:08:51.719
and we've done some links.
00:08:51.720 --> 00:08:55.599
Now we want to modify the CSS file
00:08:55.600 --> 00:09:00.279
which is in the asset directory, the one.css.
00:09:00.280 --> 00:09:02.959
Each time we change it,
00:09:02.960 --> 00:09:05.199
we want to have live reload
00:09:05.200 --> 00:09:10.799
that copy that file into the public directory,
00:09:10.800 --> 00:09:14.659
so the same. We go back here,
00:09:14.660 --> 00:09:18.879
and there is a utility called `entr`, e-n-t-r.
00:09:18.880 --> 00:09:26.559
Yes, this one, and using that, so a new terminal,
00:09:26.560 --> 00:09:28.679
we are at the beginning.
00:09:28.680 --> 00:09:32.359
This will watch the changing in what.css,
00:09:32.360 --> 00:09:35.519
and `entr` will copy it into the public directory
00:09:35.520 --> 00:09:38.519
each time this changes. Let's go back to Org mode,
00:09:38.520 --> 00:09:43.319
because I chose some color that is cool,
00:09:43.320 --> 00:09:47.799
and now we go back to the CSS files.
00:09:47.800 --> 00:09:53.639
We put them side by side, and maybe we go to the new page
00:09:53.640 --> 00:09:55.639
that we were changing,
00:09:55.640 --> 00:10:00.999
and we are going to change the body,
00:10:01.000 --> 00:10:03.959
the background color, and maybe we can change
00:10:03.960 --> 00:10:06.119
with the color that we've just taken.
00:10:06.120 --> 00:10:10.219
So we save, and we see the changing happening.
00:10:10.220 --> 00:10:14.679
We can do it again with the color
00:10:14.680 --> 00:10:16.119
that we have at the beginning,
00:10:16.120 --> 00:10:18.879
and this is the user experience
00:10:18.880 --> 00:10:23.159
that we have with one.el and the default function.
NOTE How to write a render function
00:10:23.160 --> 00:10:26.279
Now that we've seen that,
00:10:26.280 --> 00:10:30.460
we've done all of that part,
00:10:30.461 --> 00:10:31.919
and now we are going to see
00:10:31.920 --> 00:10:34.279
how to write a render function.
00:10:34.280 --> 00:10:36.759
So let's go. The render function,
00:10:36.760 --> 00:10:41.479
so one.org, we remember these are the functions
00:10:41.480 --> 00:10:43.399
that are in the `:ONE:` Org property.
00:10:43.400 --> 00:10:45.599
So we are going to remove that part.
00:10:45.600 --> 00:10:49.439
We no longer want that one. We don't want this.
00:10:49.440 --> 00:10:52.439
We just keep that. `one-default`,
00:10:52.440 --> 00:10:55.839
we want this to be the home of our website.
00:10:55.840 --> 00:10:57.659
We have that. We rebuild,
00:10:57.660 --> 00:11:05.079
and now we just have one page, and we have that page.
00:11:05.080 --> 00:11:10.679
We are going to add another page that we call "foo",
00:11:10.680 --> 00:11:15.519
and here we pass it the render function foo
00:11:15.520 --> 00:11:20.319
that doesn't exist yet, and we are going to write it.
00:11:20.320 --> 00:11:27.159
So maybe with some content, and we copy, copy.
00:11:27.160 --> 00:11:33.159
We have that. We call it "bar" to have something to show.
00:11:33.160 --> 00:11:39.959
So here we are. If we build that, so we build it,
00:11:39.960 --> 00:11:42.599
and we see in the echo area at the bottom
00:11:42.600 --> 00:11:43.719
that we have an error "void",
00:11:43.720 --> 00:11:46.799
which is because the function foo doesn't exist.
00:11:46.800 --> 00:11:48.799
So now we are going to write that function,
00:11:48.800 --> 00:11:53.359
and we write it in the onerc.el
00:11:53.360 --> 00:11:57.199
where we put any Elisp code
00:11:57.200 --> 00:11:58.359
that we want to be run
00:11:58.360 --> 00:12:03.479
each time we build the website or render the pages.
00:12:03.480 --> 00:12:06.519
So we want a render function called foo.
00:12:06.520 --> 00:12:09.999
So that takes three arguments: page-tree, pages, and global.
00:12:10.000 --> 00:12:16.639
We are going to look at the page-tree in our case,
00:12:16.640 --> 00:12:19.759
and the render function return an HTML string.
00:12:19.760 --> 00:12:22.319
This is the thing that we want from them.
00:12:22.320 --> 00:12:25.159
So maybe foo, bar, and baz.
00:12:25.160 --> 00:12:28.159
Now this is something well-defined,
00:12:28.160 --> 00:12:34.199
and with one.org here, the file, we rebuild this,
00:12:34.200 --> 00:12:39.619
and we can see now in the browser,
00:12:39.620 --> 00:12:42.959
if we go to the page foo, that we have "foo bar baz".
00:12:42.960 --> 00:12:45.459
So this is exactly what we have rendered
00:12:45.460 --> 00:12:47.879
by the render function that is set,
00:12:47.880 --> 00:12:51.599
we see at the bottom in the one.org file,
00:12:51.600 --> 00:12:56.119
in the `:ONE:` property. Now this is HTML, so we can pass it,
00:12:56.120 --> 00:13:00.879
for instance, h1, the tag h1.
00:13:00.880 --> 00:13:06.039
We save that file. We go in the one.org file,
00:13:06.040 --> 00:13:10.399
we build again, and now we see that we have an h1.
00:13:10.400 --> 00:13:14.839
Okay, this is interesting, but if we would have to
00:13:14.840 --> 00:13:18.119
build this function with a string like that,
00:13:18.120 --> 00:13:22.319
this is boring and not the best way.
00:13:22.320 --> 00:13:24.639
So we can use the library Jack,
00:13:24.640 --> 00:13:27.588
which offers function `jack-html`
00:13:27.589 --> 00:13:31.580
that takes some data structure,
00:13:31.581 --> 00:13:34.179
for instance, an h1, a nested list
00:13:34.180 --> 00:13:38.479
that represents the HTML that we want to render,
00:13:38.480 --> 00:13:41.039
and transform it into an HTML string.
00:13:41.040 --> 00:13:43.959
So we have that, we saved,
00:13:43.960 --> 00:13:48.279
we rebuild in the one.org file with `one-build`,
00:13:48.280 --> 00:13:55.399
and we see now that this has been built using `jack-html`.
00:13:55.400 --> 00:13:59.159
Now what do we want to do?
00:13:59.160 --> 00:14:01.999
Okay, see, the thing that we want to do
00:14:02.000 --> 00:14:04.999
is to understand page-tree. So what is page-tree?
00:14:05.000 --> 00:14:07.599
page-tree is when we go to one.org,
00:14:07.600 --> 00:14:09.479
this is really for foo,
00:14:09.480 --> 00:14:17.919
this is the parsed data of that headline, that page.
00:14:17.920 --> 00:14:23.119
So this is done with, no, not this one, we use,
00:14:23.120 --> 00:14:27.879
so in the mini-buffer, we use `one-parse-buffer`,
00:14:27.880 --> 00:14:29.999
and we see this is the data
00:14:30.000 --> 00:14:33.359
that we have with that function, first headline,
00:14:33.360 --> 00:14:34.439
and the second headline,
00:14:34.440 --> 00:14:38.199
this is the parse tree that we have there.
00:14:38.200 --> 00:14:40.719
This is that data that is passed to
00:14:40.720 --> 00:14:45.279
the `foo` render function. One thing that is cool,
00:14:45.280 --> 00:14:51.599
so I see here, is that as we are dealing with data,
00:14:51.600 --> 00:14:53.359
we have all the data of the website,
00:14:53.360 --> 00:14:57.360
we can show them in the web page. Now, why not?
00:14:57.361 --> 00:15:00.079
It's great to write the website
00:15:00.080 --> 00:15:02.839
and also to debug if we need to debug at some point.
00:15:02.840 --> 00:15:10.279
So let's render page-tree directly in the page, one.org,
00:15:10.280 --> 00:15:15.679
and we rebuild, we reload, and we see this is what we have,
00:15:15.680 --> 00:15:17.159
this is the data that we have, okay?
00:15:17.160 --> 00:15:20.599
And we have, for instance, the `:raw-value` with this "foo",
00:15:20.600 --> 00:15:22.519
which is the headline,
00:15:22.520 --> 00:15:27.039
the content of the headline in a raw format,
00:15:27.040 --> 00:15:29.719
and we also have custom,
00:15:29.720 --> 00:15:33.839
so here we have the `:CUSTOM_ID: foo` and `:ONE: foo`,
00:15:33.840 --> 00:15:34.999
which are the properties,
00:15:35.000 --> 00:15:40.359
and when we are inside those render functions,
00:15:40.360 --> 00:15:43.240
we have access to this.
00:15:43.241 --> 00:15:46.799
So let's, what can we do now, is to,
00:15:46.800 --> 00:15:48.639
let's get the row value.
00:15:48.640 --> 00:15:51.759
So we no longer need that.
00:15:51.760 --> 00:15:54.839
Maybe we can do something like that.
00:15:54.840 --> 00:16:03.999
We create now HTML. In HTML, we want the body,
00:16:04.000 --> 00:16:08.039
we want an h1 tag, and we are going to pass it
00:16:08.040 --> 00:16:10.559
a title, and in the title,
00:16:10.560 --> 00:16:13.839
this is something that we let-bind here,
00:16:13.840 --> 00:16:15.599
so the value of the title,
00:16:15.600 --> 00:16:24.719
we get it with `org-element-property`,
00:16:24.720 --> 00:16:29.759
and the `:raw-value`, so this is the property that we want,
00:16:29.760 --> 00:16:34.039
so `raw-value`, and from which data we want that,
00:16:34.040 --> 00:16:40.599
to page-tree. So now, let's have one.org at the bottom,
00:16:40.600 --> 00:16:46.039
we build again, and now we reload,
00:16:46.040 --> 00:16:50.839
and we see that we get a foo. This is that title,
00:16:50.840 --> 00:16:56.559
the value of that variable in that data structure.
00:16:56.560 --> 00:17:00.319
Now, let's get those two properties.
00:17:00.320 --> 00:17:03.039
How do we get those two properties?
00:17:03.040 --> 00:17:07.199
The same way, `:ONE:` that we call one, so raw-value,
00:17:07.200 --> 00:17:11.639
we change that for `:ONE`, the other raw-value
00:17:11.640 --> 00:17:19.359
for `:CUSTOM_ID`, we change the title for `custom-id`,
00:17:19.360 --> 00:17:23.559
and what we want now is for instance,
00:17:23.560 --> 00:17:30.159
yes, h1 again, and org properties.
00:17:30.160 --> 00:17:34.799
We add the org properties, and let's do a list,
00:17:34.800 --> 00:17:39.799
another list, with li element, one,
00:17:39.800 --> 00:17:43.159
we want that value, and that value will be
00:17:43.160 --> 00:17:45.759
the value of the variable one.
00:17:45.760 --> 00:17:52.479
We can do that with also custom-id,
00:17:52.480 --> 00:17:56.119
and now, in the one that we have to save,
00:17:56.120 --> 00:17:59.439
and in one of our files, not like that,
00:17:59.440 --> 00:18:03.199
we rebuild that, and we see
00:18:03.200 --> 00:18:05.799
that we can get those properties.
00:18:05.800 --> 00:18:06.999
This is super cool.
00:18:07.000 --> 00:18:09.159
As we are dealing with data,
00:18:09.160 --> 00:18:11.719
and we have the information of the whole website,
00:18:11.720 --> 00:18:14.039
we can do whatever we want,
00:18:14.040 --> 00:18:16.599
because we have access to that data.
00:18:16.600 --> 00:18:23.839
Let's, for instance, add a date, the date of 2023,
00:18:23.840 --> 00:18:28.319
so I think this is 02, when there is the conference, see,
00:18:28.320 --> 00:18:32.759
and we can get access to that `one` again,
00:18:32.760 --> 00:18:37.954
here, so `date`, and we go,
00:18:37.955 --> 00:18:42.359
we change the `:CUSTOM_ID` with the `:DATE`,
00:18:42.360 --> 00:18:46.639
and in the list here,
00:18:46.640 --> 00:18:53.359
so we want in the list, this to be the date,
00:18:53.360 --> 00:18:56.559
and we build again that,
00:18:56.560 --> 00:18:58.799
and we have access to the date.
00:18:58.800 --> 00:19:03.199
Really, we can do whatever we want.
NOTE Rendering content
00:19:03.200 --> 00:19:06.759
Now, we want the content. So far,
00:19:06.760 --> 00:19:11.599
we get the property, but what about the content,
00:19:11.600 --> 00:19:17.039
so h1, and now we put "Org content",
00:19:17.040 --> 00:19:21.359
and this is going to be something in the variable content,
00:19:21.360 --> 00:19:25.079
and we have to add that variable,
00:19:25.080 --> 00:19:27.999
so in the let binding, we write our content,
00:19:28.000 --> 00:19:30.639
we are going to have that content from the page-tree.
00:19:30.640 --> 00:19:33.679
To do that, we use `org-export`,
00:19:33.680 --> 00:19:36.119
so we need to export something into HTML,
00:19:36.120 --> 00:19:37.599
we export the data with the backend.
00:19:37.600 --> 00:19:40.239
So the data that we want is page-tree,
00:19:40.240 --> 00:19:42.239
but we don't want the first headline,
00:19:42.240 --> 00:19:46.759
so we use `org-element-contents`,
00:19:46.760 --> 00:19:50.519
and we pass it `page-tree`, so this is that.
00:19:50.520 --> 00:19:53.119
But for the exported, we need to pass it,
00:19:53.120 --> 00:20:00.599
and also, how do we call that, we call that an Org backend.
00:20:00.600 --> 00:20:06.759
So `one-ox` is our backend provided by one.el,
00:20:06.760 --> 00:20:09.519
and the last argument is nil.
00:20:09.520 --> 00:20:14.079
We are almost done. Now with one.org,
00:20:14.080 --> 00:20:18.879
we build the website, and we see that we have an error,
00:20:18.880 --> 00:20:22.079
it's because this is not a content,
00:20:22.080 --> 00:20:27.039
so there.. No, okay,
00:20:27.040 --> 00:20:32.839
there was this `org-element-contents`, I think,
00:20:32.840 --> 00:20:37.159
and now we build it, and we must see it here.
NOTE Rendering CSS
00:20:37.160 --> 00:20:39.959
So we have the content,
00:20:39.960 --> 00:20:43.319
we have the Org values,
00:20:43.320 --> 00:20:48.399
and last thing that we can do maybe is to put some CSS.
00:20:48.400 --> 00:20:51.919
Let's have a look to `one-default` function.
00:20:51.920 --> 00:20:56.399
We can see in one.el file that we have a lot of
00:20:56.400 --> 00:21:01.919
default functions that we can use to take inspiration.
00:21:01.920 --> 00:21:05.599
The last thing that we need
00:21:05.600 --> 00:21:07.999
is to link to the one.css file,
00:21:08.000 --> 00:21:14.919
so we are going to do that `onerc` file.
00:21:14.920 --> 00:21:20.319
This is here, so `html` we don't need,
00:21:20.320 --> 00:21:26.479
we have that one, we want the head to be here,
00:21:26.480 --> 00:21:37.319
and we pass it a class, which is a title,
00:21:37.320 --> 00:21:42.239
a div with the class content. We have that.
00:21:42.240 --> 00:21:46.159
Now with one.org, we build it again,
00:21:46.160 --> 00:21:50.599
and we should see the website render with the CSS,
00:21:50.600 --> 00:21:56.759
the property, and all the content,
00:21:56.760 --> 00:22:01.519
and we've done that just with that Emacs Lisp file,
00:22:01.520 --> 00:22:08.959
so this is all I wanted to show you today with one.el,
00:22:08.960 --> 00:22:14.879
I hope you enjoyed the talk, and have a nice day,
00:22:14.880 --> 00:22:17.840
and a nice conference.