Synchronized build

This commit is contained in:
Lektor Bot 2022-02-23 15:10:06 -08:00
parent 70f8234fbc
commit 4d0e964a1d
177 changed files with 623 additions and 1083 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Transcript</title><link href="https://www.getlektor.com/blog/" rel="alternate"></link><link href="https://www.getlektor.com/blog/feed.xml" rel="self"></link><id>urn:uuid:5bbc5195-cb84-35a2-830d-a7b199f60b13</id><updated>2020-08-20T00:00:00Z</updated><author><name></name></author><subtitle>Lektor's blog</subtitle><entry><title>Lektor 3.2 Released</title><link href="https://www.getlektor.com/blog/2020/8/lektor-32-released/" rel="alternate"></link><updated>2020-08-20T00:00:00Z</updated><author><name>Andreas Runfalk</name></author><id>urn:uuid:63bde824-43e5-3848-a5f4-eb664cd3336e</id><content type="html">
<feed xmlns="http://www.w3.org/2005/Atom"><title>The Transcript</title><link href="https://www.getlektor.com/blog/" rel="alternate"></link><link href="https://www.getlektor.com/blog/feed.xml" rel="self"></link><id>urn:uuid:518bb905-3b5d-3e7f-a077-0fe42e244643</id><updated>2020-08-20T00:00:00Z</updated><author><name></name></author><subtitle>Lektor's blog</subtitle><entry><title>Lektor 3.2 Released</title><link href="https://www.getlektor.com/blog/2020/8/lektor-32-released/" rel="alternate"></link><updated>2020-08-20T00:00:00Z</updated><author><name>Andreas Runfalk</name></author><id>urn:uuid:bda34097-438e-31f2-89cb-ced8bbb15d42</id><content type="html">
&lt;div class="page-banner page-banner-500" style="background-image: url(coffee-ground-1171092-1599x1066.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;
@ -43,7 +43,7 @@
&lt;li&gt;Changed default slug creation to use &lt;a href="https://github.com/un33k/python-slugify"&gt;python-slugify&lt;/a&gt;. This should mean greater language support, but this may produce slightly different results than before for some users (thank you &lt;a href="https://github.com/nixjdm"&gt;Joseph Nix&lt;/a&gt; and &lt;a href="https://github.com/xlotlu"&gt;Ionuț Ciocîrlan&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</content></entry><entry><title>Plugin Play</title><link href="https://www.getlektor.com/blog/2018/5/plugin-play/" rel="alternate"></link><updated>2018-05-15T00:00:00Z</updated><author><name>Joseph Nix</name></author><id>urn:uuid:2fd54836-a434-3fcf-9ea2-172841724e99</id><content type="html">
&lt;/div&gt;</content></entry><entry><title>Plugin Play</title><link href="https://www.getlektor.com/blog/2018/5/plugin-play/" rel="alternate"></link><updated>2018-05-15T00:00:00Z</updated><author><name>Joseph Nix</name></author><id>urn:uuid:8d30b004-241d-316f-ac13-f8b883a9c127</id><content type="html">
&lt;div class="page-banner page-banner-300" style="background-image: url(spices.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;
@ -54,7 +54,7 @@
&lt;p&gt;I think this is especially useful for plugin development when the tag is an event that the plugin hooks. This allows you to quickly find the source code of plugins that depend on the same Lektor plugin events, so that you can see many quick examples to help you write your own plugin. For instance, you can find all of the plugins that hook the &lt;code&gt;before-build-all&lt;/code&gt; event by looking at it's tag page &lt;a href="/plugins/tag/before-build-all/"&gt;here&lt;/a&gt;. Tag pages for events also have links back to the plugin documentation pages, including the page for that specific event.&lt;/p&gt;
&lt;p&gt;Now go check out some &lt;a href="/plugins"&gt;plugins&lt;/a&gt;!&lt;/p&gt;
&lt;/div&gt;</content></entry><entry><title>Lektor 3.1 Released</title><link href="https://www.getlektor.com/blog/2018/1/lektor-31-released/" rel="alternate"></link><updated>2018-01-29T00:00:00Z</updated><author><name>Joseph Nix</name></author><id>urn:uuid:9fdb673f-5a8c-3eab-90df-cd6d57657cbc</id><content type="html">
&lt;/div&gt;</content></entry><entry><title>Lektor 3.1 Released</title><link href="https://www.getlektor.com/blog/2018/1/lektor-31-released/" rel="alternate"></link><updated>2018-01-29T00:00:00Z</updated><author><name>Joseph Nix</name></author><id>urn:uuid:69465c44-ef86-3fd7-8939-ba9870ae5d0e</id><content type="html">
&lt;div class="page-banner page-banner-500-tall" style="background-image: url(pancakes-2020863.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;
@ -76,7 +76,7 @@
&lt;h2 id="want-to-contribute"&gt;Want to Contribute?&lt;/h2&gt;&lt;p&gt;Open Source Software lives and dies by the communities that use them, love them, and support them. If you're a developer looking to get your feet wet in OSS, we'd love to review your pull request. &amp;lt;3&lt;/p&gt;
&lt;p&gt;A larger task, if you're someone with React (and Python) knowledge, is our admin interface. It has served us pretty well so far, but it also has &lt;a href="https://github.com/lektor/lektor/issues/458"&gt;some issues&lt;/a&gt;. It could use some TLC.&lt;/p&gt;
&lt;/div&gt;</content></entry><entry><title>Lektor 2.0 Released</title><link href="https://www.getlektor.com/blog/2016/4/lektor-2-released/" rel="alternate"></link><updated>2016-04-11T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:a460c855-a897-3465-a8a7-212394a23eb8</id><content type="html">
&lt;/div&gt;</content></entry><entry><title>Lektor 2.0 Released</title><link href="https://www.getlektor.com/blog/2016/4/lektor-2-released/" rel="alternate"></link><updated>2016-04-11T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:3f52ad2e-4cac-3199-a947-33ea8e54c28e</id><content type="html">
&lt;div class="page-banner page-banner-500" style="background-image: url(banner.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;
@ -142,7 +142,7 @@ If you had a previous version of Lektor the install process should auto
upgrade. If you use the OS X desktop build, just drag the new application over
the already existing one.&lt;/p&gt;
&lt;/div&gt;</content></entry><entry><title>Lektor at Rails Girls Summer of Code 2016</title><link href="https://www.getlektor.com/blog/2016/3/lektor-at-rails-girls-summer-of-code/" rel="alternate"></link><updated>2016-03-17T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:f1aec1d5-2464-3f3b-ac3a-181dac9fda2f</id><content type="html">
&lt;/div&gt;</content></entry><entry><title>Lektor at Rails Girls Summer of Code 2016</title><link href="https://www.getlektor.com/blog/2016/3/lektor-at-rails-girls-summer-of-code/" rel="alternate"></link><updated>2016-03-17T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:66064267-4071-3a00-9ca3-afbb0ce6d809</id><content type="html">
&lt;div class="page-banner page-banner-500" style="background-image: url(banner.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;
@ -168,7 +168,7 @@ Twitter at &lt;a href="https://twitter.com/getlektor"&gt;@getlektor&lt;/a&gt; or
&lt;a href="https://gitter.im/lektor/lektor"
class="js-gitter-toggle-chat-button"&gt;Gitter&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;</content></entry><entry><title>Road to Lektor 2.0</title><link href="https://www.getlektor.com/blog/2016/3/road-to-lektor-2/" rel="alternate"></link><updated>2016-03-10T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:657883df-54db-392e-8eb8-64572e8febcb</id><content type="html">
&lt;/div&gt;</content></entry><entry><title>Road to Lektor 2.0</title><link href="https://www.getlektor.com/blog/2016/3/road-to-lektor-2/" rel="alternate"></link><updated>2016-03-10T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:743bf9a7-c69a-3dd8-b929-efe3459717a8</id><content type="html">
&lt;div class="page-banner page-banner-500" style="background-image: url(header.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;
@ -213,7 +213,7 @@ now build custom build programs that build things that do not exist in the
source tree. For instance you can build feeds, blog archives etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</content></entry><entry><title>Lektor Loves Travis-CI and GitHub Pages</title><link href="https://www.getlektor.com/blog/2015/12/travis-and-ghpages/" rel="alternate"></link><updated>2015-12-23T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:29328c66-b90f-3afc-9a37-6cbbbf7de829</id><content type="html">
&lt;/div&gt;</content></entry><entry><title>Lektor Loves Travis-CI and GitHub Pages</title><link href="https://www.getlektor.com/blog/2015/12/travis-and-ghpages/" rel="alternate"></link><updated>2015-12-23T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:39db4502-8f95-316b-b168-c46e804f08bd</id><content type="html">
&lt;div class="page-banner page-banner-500" style="background-image: url(header.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;
@ -230,7 +230,7 @@ a screencast that goes with it:&lt;/p&gt;
&lt;iframe width="100%" height=410 frameborder="0" allowfullscreen="allowfullscreen"
src="https://www.youtube.com/embed/3pj_EyZIL5A?autoplay=0&amp;fs=1"&gt;
&lt;/iframe&gt;
&lt;/div&gt;</content></entry><entry><title>Hello Lektor!</title><link href="https://www.getlektor.com/blog/2015/12/hello-lektor/" rel="alternate"></link><updated>2015-12-21T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:16dbb267-fb7c-3988-aae1-07106bd5bfb7</id><content type="html">
&lt;/div&gt;</content></entry><entry><title>Hello Lektor!</title><link href="https://www.getlektor.com/blog/2015/12/hello-lektor/" rel="alternate"></link><updated>2015-12-21T00:00:00Z</updated><author><name>Armin Ronacher</name></author><id>urn:uuid:a546fbfc-f76c-370c-8cde-6e378c9b0683</id><content type="html">
&lt;div class="page-banner page-banner-500" style="background-image: url(banner.jpg)"&gt;&lt;/div&gt;
&lt;div class="text-block text-block-default"&gt;

View File

@ -125,6 +125,8 @@
<li><a href="#configuration">Configuration</a></li>
<li><a href="#cache-directory">Cache directory</a></li>
<li><a href="#cname-support">CNAME Support</a></li>
<li><a href="#ssl/tls-support">SSL/TLS Support</a></li>
@ -183,6 +185,34 @@ will be served up. In case you want to use a different branch than <code>master
just name the branch differently and adjust the <code>only</code> entry.</p>
<p>Whenever you commit to the repository now, GitLab will automatically start
a job on the public infrastructure and deploy your website.</p>
<h2 id="cache-directory">Cache directory</h2><p>You can enable caching to reuse build results between compilation.
To do so, you have to:</p>
<ul>
<li>set the cache directory using the environment variable <code>XDG_CACHE_HOME</code>;</li>
<li>configure Gitlab to cache this directory.</li>
</ul>
<p>See the example below.</p>
<div class="highlight"><pre><span></span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">python:latest</span><span class="w"></span>
<span class="nt">default</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">cache</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">paths</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">.cache/lektor</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">.cache/pip</span><span class="w"></span>
<span class="nt">variables</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">XDG_CACHE_HOME</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;$CI_PROJECT_DIR/.cache&quot;</span><span class="w"></span>
<span class="nt">pages</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">script</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install lektor</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">lektor build --output-path public</span><span class="w"></span>
<span class="w"> </span><span class="nt">artifacts</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="nt">paths</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">public</span><span class="w"></span>
<span class="w"> </span><span class="nt">only</span><span class="p">:</span><span class="w"></span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">master</span><span class="w"></span>
</pre></div>
<h2 id="cname-support">CNAME Support</h2><p>If you want to use a <a href="https://en.wikipedia.org/wiki/CNAME" class="ext">CNAME</a> with
GitLab pages you can configure it in the GitLab settings:</p>
<ul>

View File

@ -239,6 +239,9 @@ caching. Adjust your <code>.travis.yml</code> file to look like this:</p>
<span class="w"> </span><span class="nt">provider</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">script</span><span class="w"></span>
<span class="w"> </span><span class="nt">script</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;lektor</span><span class="nv"> </span><span class="s">deploy</span><span class="nv"> </span><span class="s">ghpages&quot;</span><span class="w"></span>
</pre></div>
<p>Note that it is also possible to set the cache directory of Lektor using the
environment variable <code>XDG_CACHE_HOME</code>, and cache this directory instead,
as done with <a href="../glpages/">Gitlab pages</a>.</p>
<h2 id="restricting-branches">Restricting Branches</h2><p>If you plan on having different branches and contributors you should disable
the deployment to the master branch only. You can do this with the following
config:</p>

View File

@ -104,9 +104,11 @@
<h4>This Page</h4>
<ul class="toc">
<li><a href="#desktop-application">Desktop Application</a></li>
<li><a href="#requirements">Requirements</a></li>
<li><a href="#command-line-application">Command Line Application</a></li>
<li><a href="#install-pipx">Install pipx</a><ul>
<li><a href="#finally-install-lektor">Finally Install Lektor</a></li>
</ul></li>
<li><a href="#pip">pip</a></li>
@ -130,65 +132,77 @@
</ul>
<p>Lektor comes in two flavors: as a command line executable and as a
desktop application. The desktop version also contains the command
line executable, but it also bundles together all dependencies of Lektor
in an easy to use package which heavily simplifies installation.</p>
<h2 id="desktop-application">Desktop Application</h2><div class="admonition admonition-info"><p>Info: Support for the Mac Desktop Application is paused as of version 3.1. See <a href="/blog/2018/1/lektor-31-released/#support-for-mac-installer-paused">note</a>.</p></div><p>Currently the desktop application is only available for OS X and can be
<a href="../../downloads/">downloaded from the Lektor website</a>. It comes as a downloadable
disk image that you can mount which contains one application by the name of
<code>Lektor.app</code>. Just drag it into your <code>Applications</code> folder and you are good to
go.</p>
<p>If you also want access to the command line tools just launch <code>Lektor.app</code>
and then click in the menu bar on <em>Lektor ➤ Install Shell Command</em>.</p>
<h2 id="command-line-application">Command Line Application</h2><p>If you do not want to install the desktop app then you can just install the command
line executable. This runs on most operating systems (OSX, Linux and Windows) but
the installation is a bit more involved.</p>
<p>You need to make sure you have the following software installed on your computer:</p>
<p>Lektor is a command line utility, and requires some terminal or command line work
to install. If you can read and follow instructions, you will most likely have no
issues.</p>
<h2 id="requirements">Requirements</h2><p>Although <code>lektor</code> would work without Imagemagick or FFmpeg, you would be missing on
significant parts of its capabilities. Therefore, you need to make sure you have the
following software installed on your computer:</p>
<ul>
<li>Python 3 is recommended (but 2.7 is also supported)
On Ubuntu <code>python3-dev</code>, <code>libssl-dev</code> and <code>libffi-dev</code> are also required
<code>sudo apt-get install python3-dev libssl-dev libffi-dev</code></li>
<li>ImageMagick (<code>brew install imagemagick</code> can get you this on OS X and <code>sudo apt-get install imagemagick</code>
on Ubuntu the <code>imagemagick</code> package needs to be installed.
On Windows do <code>choco install imagemagick</code>, which requires <a href="https://chocolatey.org/" class="ext">chocolatey</a>,
<li>Python 3.6+ is required. If you got an older version, look at
{Python 3 Installation &amp; Setup Guide}(<a href="https://realpython.com/installing-python/">https://realpython.com/installing-python/</a>).<ul>
<li>On Ubuntu you basically don't need anything new.</li>
<li>On macOS you're done as well.</li>
<li>On Windows, make sure that Python is in your <code>PATH</code>.</li>
</ul>
</li>
<li>ImageMagick. <ul>
<li>On macOS <code>brew install imagemagick</code> can get you this.</li>
<li>On Ubuntu <code>sudo apt install imagemagick</code> will solve it.</li>
<li>On Windows do <code>choco install imagemagick</code>, which requires <a href="https://chocolatey.org/" class="ext">chocolatey</a>,
or <a href="http://www.imagemagick.org" class="ext">download from here</a>).</li>
</ul>
<p>Once you have those installed and have made sure that they are on your <code>PATH</code>, you can
get Lektor installed with our installation script:</p>
<pre><code># curl -sf https://www.getlektor.com/installer.py | python3
</li>
<li>FFmpeg (mostly for video thumbnailing).<ul>
<li>On Ubuntu you get it through <code>sudo apt install ffmpeg.</code></li>
<li>On macOS <code>brew install ffmpeg</code> will do the trick.</li>
<li>On Windows you'll have to put a little <a href="https://www.wikihow.com/Install-FFmpeg-on-Windows">work</a> in.</li>
</ul>
</li>
</ul>
<h2 id="install-pipx">Install pipx</h2><p>Once you have those installed and have made sure that they are on your <code>PATH</code>, you can
get Lektor installed with <code>pipx</code>. Selcet the <code>pipx</code> install method of your preference:</p>
<p><strong>On Ubuntu through <code>apt</code>.</strong></p>
<pre><code>apt update
sudo apt install python3-venv pipx
pipx ensurepath
</code></pre>
<p>This will attempt to install lektor in your user's <code>HOME</code>. If you want a system-wide installation, try this instead:</p>
<pre><code>$ curl -sf https://www.getlektor.com/installer.py | sudo python3
<p><strong>On Ubuntu through <code>pip</code>.</strong></p>
<pre><code>sudo apt install python3-pip python3-venv
python3 -m pip install --user pipx
python3 -m pipx ensurepath
</code></pre>
<p>If you would like to install Lektor without being prompted, set LEKTOR_SILENT before running the prior command.</p>
<p>For Windows, make sure that Python is in your <code>PATH</code> and run in <code>Powershell</code>:</p>
<pre><code>PS C:\&gt; (new-object net.webclient).DownloadString('https://www.getlektor.com/installer.py') | python
<p><strong>On macOS</strong></p>
<pre><code>brew install pipx
pipx ensurepath
</code></pre>
<p>or you can use the <code>command prompt</code> instead:</p>
<pre><code>C:\&gt; @powershell -NoProfile -Command "(new-object net.webclient).DownloadString('https://www.getlektor.com/installer.py') | python"
<p><strong>On Windows</strong></p>
<pre><code>python -m pip install --user pipx
python -m pipx ensurepath
</code></pre>
<p>For more information on <code>pipx</code> installation go to <a href="https://pypa.github.io/pipx/installation/">pypa.github.io/pipx/installation/</a></p>
<h3 id="finally-install-lektor">Finally Install Lektor</h3><p>Once installed, close terminal (or <code>Powershell</code> or <code>command prompt</code>) for those
changes to take effect. Then proceed to reopen and install Lektor with pipx:</p>
<pre><code>pipx install lektor
</code></pre>
<h2 id="pip">pip</h2><p>Alternatively you can manually install the command line version with
<code>virtualenv</code> if you know how that works. Note that this method is <em>heavily
discouraged</em> for anything other than advanced use cases such as build servers.</p>
<pre><code>$ virtualenv venv
$ . venv/bin/activate
$ pip install Lektor
<code>pip</code> after creating a virtual environment, if you know how that works. <code>pipx</code> technically does this for you,
then if you need something particular and you know this will make it easier,
go for it.</p>
<pre><code>virtualenv venv
. venv/bin/activate
pip install Lektor
</code></pre>
<div class="admonition admonition-warning"><p>When we say this installation type is discouraged we mean it. The reason
is that it encourages uses of Lektor which are entirely unsupported by us.
Lektor actively manages virtualenvs for plugin installations in very specific
ways and this might or might not work in your setup. We support pip
installations for deployment environments and local development only.</p></div><h2 id="development-version">Development Version</h2><p>If you want to install the development version of Lektor you can do so. It's
<h2 id="development-version">Development Version</h2><p>If you want to install the development version of Lektor you can do so. It's
the same as with installing the command line application but instead of
using PyPI you install directly from git and you need to have <code>npm</code> installed
to build the admin UI:</p>
<pre><code>$ git clone https://github.com/lektor/lektor
$ cd lektor
$ make build-js
$ virtualenv venv
$ . venv/bin/activate
$ pip install --editable .
<pre><code>git clone https://github.com/lektor/lektor
cd lektor
make build-js
virtualenv venv
. venv/bin/activate
pip install --editable .
</code></pre>

View File

@ -72,24 +72,31 @@
<div class="text-block text-block-default">
<p>Lektor is an <a href="../license/">Open Source Project</a> and freely available to
download. It's currently still under heavy development and not all platforms
are equally well supported.</p>
<h2 id="command-line-interface">Command Line Interface</h2><p>If you are on Linux or Mac you can install the command line version of
are equally well supported, although closer to it.</p>
<h2 id="command-line-interface">Command Line Interface</h2><p>You can install the command line version of
Lektor by copy/pasting a command into your terminal.</p>
<div class="admonition admonition-tip"><p>Scared about copy/pasting this into a terminal? We will not do anything
before asking you for confirmation and you can download <a href="https://www.getlektor.com/installer.py">the script</a>
upfront to see what it's doing.</p></div><h3 id="mac/linux">Mac/Linux</h3><p>This will install Lektor in your <code>HOME</code>. Running it with <code>sudo</code> will result in
a system installation instead.</p>
<pre><code>curl -sf https://www.getlektor.com/installer.py | python3
<div class="admonition admonition-tip"><p>Scared about copy/pasting this into a terminal? We now use standard tools
to install lektor. <code>pipx</code> is the recommended method to install standalone
command line interface python packages as recommended by <a href="https://packaging.python.org/guides/installing-stand-alone-command-line-tools/">PyPA</a>.</p></div><h3 id="first-install-pipx">First Install PipX</h3><p>Let's first install <code>pipx</code>.</p>
<p><strong>Ubuntu</strong></p>
<pre><code>sudo apt install python3-pip python3-venv
python3 -m pip install --user pipx
python3 -m pipx ensurepath
</code></pre>
<p><strong>macOS</strong></p>
<pre><code>bew install pipx
pipx ensurepath
</code></pre>
<p><strong>Windows</strong></p>
<pre><code>python -m pip install --user pipx
python -m pipx ensurepath
</code></pre>
<p>For more information on <code>pipx</code> installation go to <a href="https://pypa.github.io/pipx/installation/">pypa.github.io/pipx/installation/</a></p>
<h3 id="let-s-install-lektor-now">Let's install Lektor now</h3><p>Close and reopen terminal (<code>Powershell</code> or <code>cmd</code> on Windows), then install <code>lektor</code>:</p>
<pre><code>pipx install lektor
</code></pre>
<p>You might need additional dependencies for this installation. For more
information see <a href="../docs/installation/">Installation</a>.</p>
<h3 id="windows">Windows</h3><p>If you are on Windows copy/paste this command into <code>Powershell</code>:</p>
<pre><code>(new-object net.webclient).DownloadString('https://www.getlektor.com/installer.py') | python
</code></pre>
<p>or alternatively use this in <code>command prompt</code>:</p>
<pre><code>@powershell -NoProfile -Command "(new-object net.webclient).DownloadString('https://www.getlektor.com/installer.py') | python"
</code></pre>
<h2 id="desktop-application">Desktop Application</h2><p>Lektor supported an installable version of Lektor on OSX. The current build process for these installers is <a href="https://github.com/lektor/lektor/issues/420">old and in need of refactoring</a>. Temporarily until this is resolved, as of version 3.1, this installer is no longer supported.</p>
</div>
</div>

View File

@ -67,9 +67,6 @@
><i class="glyphicon glyphicon-download-alt"></i> Download</a></div>
</div>
</div>
<div class="install-row hide-for-windows">
<pre>curl -sf https://www.getlektor.com/installer.py | sudo python3</pre>
</div>
</div>
</div>
@ -154,7 +151,7 @@ speak multiple languages and allow you to easily create localized websites.</li>
<div class="slideshow-wrapper">
<div class="slideshow">
<div class="slideshow-inner">
<div class="carousel slide" data-ride="carousel" data-interval="8500" id="carousel-729db5a0abf24b1b8d370a981ea85561">
<div class="carousel slide" data-ride="carousel" data-interval="8500" id="carousel-e27eb33956034bdb98471ba6f44f5003">
<div class="carousel-inner" role="listbox">
@ -213,11 +210,11 @@ be completely customized.</p>
</div>
</div>
<a class="left carousel-control" href="#carousel-729db5a0abf24b1b8d370a981ea85561" role="button" data-slide="prev">
<a class="left carousel-control" href="#carousel-e27eb33956034bdb98471ba6f44f5003" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#carousel-729db5a0abf24b1b8d370a981ea85561" role="button" data-slide="next">
<a class="right carousel-control" href="#carousel-e27eb33956034bdb98471ba6f44f5003" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>

View File

@ -1,393 +0,0 @@
#!/usr/bin/env python
from __future__ import print_function
import math
import os
import shutil
import sys
import tempfile
from subprocess import call
try:
from shutil import which
except ImportError:
from distutils.spawn import find_executable as which
try:
from urllib.request import urlretrieve
except ImportError:
from urllib import urlretrieve
IS_WIN = sys.platform == "win32"
if IS_WIN:
try:
import winreg
except ImportError:
import _winreg as winreg
from ctypes import windll, wintypes
VIRTUALENV_URL = "https://bootstrap.pypa.io/virtualenv.pyz"
# this difference is for backwards-compatibility with the previous installer
APP_NAME = "lektor" if not IS_WIN else "lektor-cli"
# where to search for a writable bin directory on *nix.
# this order makes sure we try a system install first.
POSIX_BIN_DIRS = [
"/usr/local/bin", "/opt/local/bin",
"{home}/.bin", "{home}/.local/bin",
]
SILENT = (
os.environ.get("LEKTOR_SILENT", "").lower()
not in ("", "0", "off", "false")
)
if not os.isatty(sys.stdin.fileno()):
# the script is being piped, we need to reset stdin
sys.stdin = open("CON:" if IS_WIN else "/dev/tty")
if sys.version_info.major == 2:
input = raw_input
def get_confirmation():
if SILENT:
return
while True:
user_input = input("Continue? [Yn] ").lower().strip()
if user_input in ("", "y"):
print()
return
if user_input == "n":
print()
print("Aborted!")
sys.exit()
def fail(message):
print("Error: %s" % message, file=sys.stderr)
sys.exit(1)
def multiprint(*lines, **kwargs):
for line in lines:
print(line, **kwargs)
def rm_recursive(*paths):
def _error(path):
multiprint(
"Problem deleting {}".format(path),
"Please try and delete {} manually".format(path),
"Aborted!",
file=sys.stderr,
)
sys.exit(1)
def _rm(path):
if os.path.isdir(path):
shutil.rmtree(path)
else:
os.remove(path)
for path in paths:
if not os.path.lexists(path):
continue
try:
_rm(path)
except:
_error(path)
class Progress(object):
"A context manager to be used as a urlretrieve reporthook."
def __init__(self):
self.started = False
def progress(self, count, bsize, total):
size = count * bsize
if size > total:
progress = 100
else:
progress = math.floor(100 * size / total)
out = sys.stdout
if self.started:
out.write("\b" * 4)
out.write("{:3d}%".format(progress))
out.flush()
self.started = True
def finish(self):
sys.stdout.write("\n")
def __enter__(self):
return self.progress
def __exit__(self, exc_type, exc_value, traceback):
self.finish()
class FetchTemp(object):
"""
Fetches the given URL into a temporary file.
To be used as a context manager.
"""
def __init__(self, url):
self.url = url
fname = os.path.basename(url)
root, ext = os.path.splitext(fname)
self.filename = tempfile.mktemp(prefix=root + "-", suffix=ext)
def fetch(self):
with self.Progress() as hook:
urlretrieve(self.url, self.filename, reporthook=hook)
def cleanup(self):
os.remove(self.filename)
def __enter__(self):
self.fetch()
return self.filename
def __exit__(self, exc_type, exc_value, traceback):
self.cleanup()
def create_virtualenv(target_dir):
"""
Tries to create a virtualenv by using the built-in `venv` module,
or using the `virtualenv` executable if present, or falling back
to downloading the official zipapp.
"""
def use_venv():
try:
import venv
except ImportError:
return
# on Debian and Ubuntu systems Python is missing `ensurepip`,
# prompting the user to install `python3-venv` instead.
#
# we could handle this, but we'll just let the command fail
# and have the users install the package themselves.
return call([sys.executable, "-m", "venv", target_dir])
def use_virtualenv():
venv_exec = which("virtualenv")
if not venv_exec:
return
return call([venv_exec, "-p", sys.executable, target_dir])
def use_zipapp():
print("Downloading virtualenv: ", end="")
with FetchTemp(VIRTUALENV_URL) as zipapp:
return call([sys.executable, zipapp, target_dir])
print("Installing virtual environment...")
for func in use_venv, use_virtualenv, use_zipapp:
retval = func()
if retval is None:
# command did not run
continue
if retval == 0:
# command successful
return
# else...
sys.exit(1)
def get_pip(lib_dir):
return (
os.path.join(lib_dir, "Scripts", "pip.exe") if IS_WIN
else os.path.join(lib_dir, "bin", "pip")
)
def install_lektor(lib_dir):
create_virtualenv(lib_dir)
pip = get_pip(lib_dir)
args = [pip, "install"]
if IS_WIN:
# avoid fail due to PEP 517 on windows
args.append("--prefer-binary")
args.extend(["--upgrade", "Lektor"])
return call(args)
def posix_find_bin_dir():
home = os.environ["HOME"]
preferred = [d.format(home=home) for d in POSIX_BIN_DIRS]
# look for writable directories in the user's $PATH
# (that are not sbin)
dirs = [
item
for item in os.environ["PATH"].split(":")
if not item.endswith("/sbin") and os.access(item, os.W_OK)
]
if not dirs:
fail(
"None of the items in $PATH are writable. Run with "
"sudo or add a $PATH item that you have access to."
)
# ... and prioritize them according to our preferences
def _sorter(path):
try:
return preferred.index(path)
except ValueError:
return float("inf")
dirs.sort(key=_sorter)
return dirs[0]
def posix_find_lib_dir(bin_dir):
# the chosen lib_dir depends on the bin_dir found:
home = os.environ["HOME"]
if bin_dir.startswith(home):
# this is a local install
return os.path.join(home, ".local", "lib", APP_NAME)
# else, it's a system install
parent = os.path.dirname(bin_dir)
return os.path.join(parent, "lib", APP_NAME)
def windows_create_link(lib_dir, target_dir):
exe = os.path.join(lib_dir, "Scripts", "lektor.exe")
link = os.path.join(target_dir, "lektor.cmd")
with open(link, "w") as link_file:
link_file.write("@echo off\n")
link_file.write('"{}" %*'.format(exe))
def windows_add_to_path(location):
HWND_BROADCAST = 0xFFFF
WM_SETTINGCHANGE = 0x1A
key = winreg.OpenKey(
winreg.HKEY_CURRENT_USER, "Environment", 0, winreg.KEY_ALL_ACCESS
)
try:
value, _ = winreg.QueryValueEx(key, "Path")
except WindowsError:
value = ""
paths = [path for path in value.split(";") if path != ""]
if location not in paths:
paths.append(location)
value = ";".join(paths)
winreg.SetValueEx(
key, "Path", 0, winreg.REG_EXPAND_SZ, value
)
SendMessage = windll.user32.SendMessageW
SendMessage.argtypes = (
wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPVOID
)
SendMessage.restype = wintypes.LPARAM
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, "Environment")
# also add the path to the environment,
# so it's available in the current console
os.environ['Path'] += ";%s" % location
key.Close()
def posix_install():
bin_dir = posix_find_bin_dir()
lib_dir = posix_find_lib_dir(bin_dir)
symlink_path = os.path.join(bin_dir, APP_NAME)
multiprint(
"Installing at:",
" bin: %s" % bin_dir,
" app: %s" % lib_dir,
"",
)
if os.path.exists(lib_dir) or os.path.lexists(symlink_path):
multiprint(
"An existing installation was detected. This will be removed!",
"",
)
get_confirmation()
rm_recursive(lib_dir, symlink_path)
install_lektor(lib_dir)
os.symlink(os.path.join(lib_dir, "bin", "lektor"), symlink_path)
def windows_install():
install_dir = os.path.join(os.environ["LocalAppData"], APP_NAME)
lib_dir = os.path.join(install_dir, "lib")
multiprint(
"Installing at:",
" %s" % install_dir,
"",
)
if os.path.exists(install_dir):
multiprint(
"An existing installation was detected. This will be removed!",
"",
)
get_confirmation()
rm_recursive(install_dir)
install_lektor(lib_dir)
windows_create_link(lib_dir, install_dir)
windows_add_to_path(install_dir)
def install():
multiprint(
"",
"Welcome to Lektor",
"This script will install Lektor on your computer.",
"",
)
if IS_WIN:
windows_install()
else:
posix_install()
multiprint(
"",
"All done!",
)
if __name__ == "__main__":
install()

View File

@ -89,7 +89,7 @@
</h3></li>
<li><h3>
<a href="templates/">Templates</a>
<a href="content/">Content</a>
</h3></li>
<li><h3>
@ -97,7 +97,7 @@
</h3></li>
<li><h3>
<a href="content/">Content</a>
<a href="templates/">Templates</a>
</h3></li>
</ul>

View File

@ -589,8 +589,7 @@
<p>
Plugins are also tagged with keywords and topics.
Their tags are listed on their page and are navigable.
You can view a list of all of the tags
<a href="tags/" class="ref">here</a>.
You can view a list of all of the tags <a href="/plugins/tags" class="ref">here</a>.
</p>
</div>

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/virtual-paths/">virtual paths</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -125,9 +125,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -125,9 +125,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -116,9 +116,7 @@
<a href="../tag/process-template-context/">process-template-context</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -128,9 +128,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -131,9 +131,7 @@
<a href="../tag/server-stop/">server-stop</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/minify/">minify</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -137,9 +137,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/webp/">webp</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -128,9 +128,7 @@
<a href="../tag/templates/">templates</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -107,9 +107,7 @@
<a href="../tag/make/">make</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/official/">official</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -134,9 +134,7 @@
<a href="../tag/table-of-contents/">table of contents</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -128,9 +128,7 @@
<a href="../tag/syntax-highlighting/">syntax highlighting</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -128,9 +128,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/nofollow-links/">nofollow links</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -143,9 +143,7 @@
<a href="../tag/Yarn/">Yarn</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -116,9 +116,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -113,9 +113,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -125,9 +125,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -128,9 +128,7 @@
<a href="../tag/server-stop/">server-stop</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -131,9 +131,7 @@
<a href="../tag/server-stop/">server-stop</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -125,9 +125,7 @@
<a href="../tag/shortcodes/">shortcodes</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/slugify/">slugify</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/setup-env/">setup-env</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -119,9 +119,7 @@
<a href="../tag/Surge/">Surge</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/virtual-paths/">virtual paths</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/website/">website</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -116,9 +116,7 @@
<a href="../tag/thumbnails/">thumbnails</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -128,9 +128,7 @@
<a href="../tag/WebDAV/">WebDAV</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -125,9 +125,7 @@
<a href="../tag/webpack/">webpack</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -137,9 +137,7 @@
<a href="../tag/Yarn/">Yarn</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -122,9 +122,7 @@
<a href="../tag/Yandex-Metrica/">Yandex Metrica</a>
<p>
View <a href="../tags/" class="ref">all tags</a>.
</p>
<p>View <a href="/plugins/tags" class="ref">all tags</a>.</p>
</div>
<div class="col-sm-9 doc-styling">

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -112,9 +112,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -112,9 +112,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -112,9 +112,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -104,9 +104,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -139,9 +139,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -112,9 +112,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -166,9 +166,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -157,9 +157,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -112,9 +112,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -112,9 +112,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -186,9 +186,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -117,9 +117,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -104,9 +104,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -126,9 +126,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -121,9 +121,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -117,9 +117,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -104,9 +104,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -127,9 +127,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -127,9 +127,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -103,9 +103,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -112,9 +112,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -104,9 +104,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

View File

@ -177,9 +177,7 @@
</div>
<p>View a list of all Lektor plugin tags
<a href="../../tags/" class="ref">here</a>.
</p>
<p>View a list of all Lektor plugin tags <a href="/plugins/tags" class="ref">here</a>.</p>
</div>

Some files were not shown because too many files have changed in this diff Show More