aboutsummaryrefslogtreecommitdiffstats
path: root/docs/internals.txt
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-02-03 19:17:00 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-02-03 19:17:00 -0500
commit3a0d66f07b112b6d2bdc2b57bbf717a89a351ce6 (patch)
treea7cf56282e54f05785243bc1e903d6594f2c06ba /docs/internals.txt
parent787b97a4cb24330b36f11297c6d3a7a473a907d0 (diff)
New upstream version 8.1.2.upstream/8.1.2
Diffstat (limited to 'docs/internals.txt')
-rw-r--r--docs/internals.txt144
1 files changed, 0 insertions, 144 deletions
diff --git a/docs/internals.txt b/docs/internals.txt
deleted file mode 100644
index 448a6f7..0000000
--- a/docs/internals.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-.. title: Nikola Internals
-.. slug: internals
-.. date: 2012-03-30 23:00:00 UTC-03:00
-.. tags:
-.. link:
-.. description:
-
-Nikola Internals
-================
-
-.. class:: lead
-
-When trying to guide someone into adding a feature in Nikola, it hit me that
-while the way it's structured makes sense **to me** it is far from obvious.
-
-So, this is a short document explaining what each piece of Nikola does and
-how it all fits together.
-
-Nikola is a Pile of Plugins
- Most of Nikola is implemented as plugins using `Yapsy <http://yapsy.sourceforge.net/>`_.
- You can ignore that they are plugins and just think of them as regular python
- modules and packages with a funny little ``.plugin`` file next to them.
-
- So, 90% of the time, what you want to do is either write a new plugin or extend
- an existing one.
-
- There are several kinds of plugins, all implementing interfaces defined in
- ``nikola/plugin_categories.py`` and documented in
- `Extending Nikola <https://getnikola.com/extending.html>`_
-
- If your plugin has a dependency, please make sure it doesn't make Nikola
- throw an exception when the dependency is missing. Try to fail gracefully
- with an informative message.
-
-Commands are plugins
- When you use ``nikola foo`` you are using the plugin ``command/foo``. Those are
- used to extend Nikola's command line. Their interface is defined in the ``Command``
- class. They take options and arguments and do whatever you want, so go wild.
-
-The ``build`` command is special
- The ``build`` command triggers a whole lot of things, and is the core of Nikola
- because it's the one that you use to build sites. So it deserves its own section.
-
-The Build Command
------------------
-
-Nikola's goal is similar, deep at heart, to a Makefile. Take sources, compile them
-into something, in this case a website. Instead of a Makefile, Nikola uses
-`doit <http://pydoit.org>`_
-
-Doit has the concept of "tasks". The 1 minute summary of tasks is that they have:
-
-actions
- What the task **does**. For example, convert a markdown document into HTML.
-
-dependencies
- If this file changes, then we need to redo the actions. If this configuration
- option changes, redo it, etc.
-
-targets
- Files that the action generates. No two actions can have the same targets.
-
-basename:name
- Each task is identified by either a name or a basename:name pair.
-
-.. sidebar:: More about tasks
-
- If you ever want to do your own tasks, you really should read the doit
- `documentation on tasks <http://pydoit.org/tasks.html>`_
-
-So, what Nikola does, when you use the build command, is to read the
-configuration ``conf.py`` from the current folder, instantiate
-the ``Nikola`` class, and have it generate a whole list of tasks for doit
-to process. Then doit will decide which tasks need doing, and do them, in
-the right order.
-
-The place where the tasks are generated is in ``Nikola.gen_tasks``, which collects tasks
-from all the plugins inheriting ``BaseTask``, massages them a bit, then passes them
-to doit.
-
-So, if you want things to happen on ``build`` you want to create a Task plugin, or extend
-one of the existing ones.
-
-.. sidebar:: Tests
-
- While Nikola is not a hardcore TDD project, we like tests. So, please add them if you can.
- You can do doctests, you can do unit tests, you can do integration tests. There is support
- for all of them.
-
-Posts and Stories
------------------
-
-Nikola has a concept of posts and stories. Both are more or less the same thing, except
-posts are added into RSS feeds and stories are not. All of them are in a list called
-"the timeline" formed by objects of class ``Post``.
-
-When you are creating a task that needs the list of posts and/or stories (for example,
-the RSS creation plugin) on task execution time, your plugin should call ``self.site.scan_posts()``
-in ``gen_tasks`` to ensure the timeline is created and available in
-``self.site.timeline``. You should not modify the timeline, because it will cause consistency issues.
-
-.. sidebar:: scan_posts
-
- The ``Nikola.scan_posts`` function can be used in plugins to force the
- timeline creation, for example, while creating the tasks.
-
-Your plugin can use the timeline to generate "stuff" (technical term). For example,
-Nikola comes with plugins that use the timeline to create a website (surprised?).
-
-The workflow included with nikola is as follows (incomplete!):
-
-#. The post is assigned a compiler based on its extension and the ``COMPILERS`` option.
-#. The compiler is applied to the post data and a "HTML fragment" is produced. That
- fragment is stored in a cache (the ``posts`` plugin).
-#. The configured theme has templates (and a template engine), which are applied to the post's
- HTML fragment and metadata (the ``pages`` plugin).
-#. The original sources for the post are copied to some accessible place (the ``sources`` plugin).
-#. If the post is tagged, some pages and RSS feeds for each tag are updated (the ``tags`` plugin).
-#. If the post is new, it's included in the blog's RSS feed (the ``rss`` plugin).
-#. The post is added in the right place in the index pages for the blog (the ``indexes`` plugin).
-#. CSS/JS/Images for the theme are put in the right places (the ``copy_assets`` and ``bundles`` plugins).
-#. A File describing the whole site is created (the ``sitemap`` plugin).
-
-You can add whatever you want to that list: just create a plugin for it.
-
-You can also expand Nikola's capabilities at several points:
-
-compilers
- Nikola supports a variety of markups. If you want to add another one, you need to create
- a ``Compiler`` plugin.
-
-templates
- Nikola's themes can use Jinja2 or Mako templates. If you prefer another template system,
- you have to create a ``TemplateSystem`` plugin.
-
-themes
- To change how the generated site looks, you can create custom themes.
-
-And of course, you can also replace or extend each of the existing plugins.
-
-Nikola Architecture
-===================
-
-.. thumbnail:: https://getnikola.com/images/architecture.png