Author: Matti Picus <[email protected]>
Branch: nikola
Changeset: r972:2a10a45f9acf
Date: 2020-01-09 08:51 +0800
http://bitbucket.org/pypy/pypy.org/changeset/2a10a45f9acf/
Log: adjust theme, css for header, footer alignment
diff --git a/conf.py b/conf.py
--- a/conf.py
+++ b/conf.py
@@ -137,9 +137,11 @@
# with a ``/``, otherwise end them with ``/index.html`` — or
# else they won’t be highlighted when active.
+# PyPy templates out the logo into a div, so it is not here
+
NAVIGATION_LINKS = {
DEFAULT_LANG: (
- ('/index.html', '<image src="images/pypy-logo.svg" width=75
alt=PyPy>'),
+
(
(
('/features.html', 'What is PyPy?'),
@@ -955,9 +957,15 @@
# A small copyright notice for the page footer (in HTML).
# (translatable)
CONTENT_FOOTER = """
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo" /> Contents ©
-{date} <a href="mailto:{email}">{author}</a> Powered by <a
-href="https://getnikola.com" rel="nofollow">Nikola</a> {license}
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo" />
+ </div>
+ <div class=logotext>
+ Contents © {date} <a href="mailto:{email}">{author}</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
{license}
+ </div>
+</div>
"""
# Things that will be passed to CONTENT_FOOTER.format(). This is done
diff --git a/public/archive.html b/public/archive.html
--- a/public/archive.html
+++ b/public/archive.html
@@ -26,10 +26,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="index.html" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -60,9 +63,17 @@
</header><main id="content"><article
class="listpage"><header><h1>Archive</h1>
</header><p>No posts found.</p>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/assets/css/styles.css b/public/assets/css/styles.css
--- a/public/assets/css/styles.css
+++ b/public/assets/css/styles.css
@@ -11,19 +11,35 @@
background-color: #d0dad5;
}
-/* Add a black background color to the top navigation */
-.topnav {
+.myTopNav {
/* background-color: #333; */
- overflow: hidden;
+ display: flex;
+ flex-direction: row;
+ margin-bottom: 5px;
+ height: 47px;
}
/* Style the links inside the navigation bar */
+.myTopNav a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ font-size: 17px;
+}
+
+.topnav {
+ height: 32px;
+}
+
.topnav a {
float: left;
display: block;
color: #383939;
text-align: center;
- padding: 14px 16px;
+ padding-top: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ padding-bottom: 12px;
text-decoration: none;
font-size: 17px;
}
@@ -35,7 +51,7 @@
}
/* Hide the link that should open and close the topnav on small screens */
-.topnav .icon {
+.myTopNav .icon {
display: none;
}
@@ -51,7 +67,10 @@
border: none;
outline: none;
color: #383939;
- padding: 14px 16px;
+ padding-top: 10px;
+ padding-left: 16px;
+ padding-right: 16px;
+ padding-bottom: 12px;
background-color: inherit;
font-family: inherit;
margin: 0;
@@ -78,7 +97,7 @@
}
/* Add a dark background on topnav links and the dropdown button on hover */
-.topnav a:hover, .dropdown:hover .dropbtn {
+.myTopNav a:hover, .dropdown:hover .dropbtn {
background-color: #555;
color: white;
}
@@ -96,10 +115,10 @@
/* When the screen is less than 600 pixels wide, hide all links, except for
the first one ("Home"). Show the link that contains should open and close the
topnav (.icon) */
@media screen and (max-width: 600px) {
- .topnav a:not(:first-child), .dropdown .dropbtn {
+ .myTopNav a:not(:first-child), .dropdown .dropbtn {
display: none;
}
- .topnav a.icon {
+ .myTopNav a.icon {
float: right;
display: block;
}
@@ -107,20 +126,20 @@
/* The "responsive" class is added to the topnav with JavaScript when the user
clicks on the icon. This class makes the topnav look good on small screens
(display the links vertically instead of horizontally) */
@media screen and (max-width: 600px) {
- .topnav.responsive {position: relative;}
- .topnav.responsive a.icon {
+ .myTopNav.responsive {position: relative;}
+ .myTopNav.responsive a.icon {
position: absolute;
right: 0;
top: 0;
}
- .topnav.responsive a {
+ .myTopNav.responsive a {
float: none;
display: block;
text-align: left;
}
- .topnav.responsive .dropdown {float: none;}
- .topnav.responsive .dropdown-content {position: relative;}
- .topnav.responsive .dropdown .dropbtn {
+ .myTopNav.responsive .dropdown {float: none;}
+ .myTopNav.responsive .dropdown-content {position: relative;}
+ .myTopNav.responsive .dropdown .dropbtn {
display: block;
width: 100%;
text-align: left;
@@ -198,4 +217,15 @@
margin-bottom: 0;
}
+.myfooter {
+ overflow: auto;
+ display: flex;
+ flex-direction: row;
+}
+.myfooter div {
+ height: 32px;
+}
+
+.logotext {
+ padding-top: 4px;
diff --git a/public/blog/index.html b/public/blog/index.html
--- a/public/blog/index.html
+++ b/public/blog/index.html
@@ -26,10 +26,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="../index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="#" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -63,9 +66,17 @@
</main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/categories/index.html b/public/categories/index.html
--- a/public/categories/index.html
+++ b/public/categories/index.html
@@ -26,10 +26,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="../index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="#" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -62,9 +65,17 @@
</div>
</header></article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/compat.html b/public/compat.html
--- a/public/compat.html
+++ b/public/compat.html
@@ -34,10 +34,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="index.html" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -109,11 +112,11 @@
not support refcounting semantics. The following code won't fill the
file immediately, but only after a certain period of time, when the GC
does a collection:</p>
-<pre class="code python"><a
name="rest_code_70036feadffb497296ad8b0a7e6a5477-1"></a><span
class="nb">open</span><span class="p">(</span><span
class="s2">"filename"</span><span class="p">,</span> <span
class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span
class="n">write</span><span class="p">(</span><span
class="s2">"stuff"</span><span class="p">)</span>
+<pre class="code python"><a
name="rest_code_171ff66a5a8940aea74fd4c766cc746e-1"></a><span
class="nb">open</span><span class="p">(</span><span
class="s2">"filename"</span><span class="p">,</span> <span
class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span
class="n">write</span><span class="p">(</span><span
class="s2">"stuff"</span><span class="p">)</span>
</pre>
<p>The proper fix is</p>
-<pre class="code python"><a
name="rest_code_fa080b8497dc418fa273f6f2e9cc4984-1"></a><span
class="k">with</span> <span class="nb">open</span><span class="p">(</span><span
class="s2">"filename"</span><span class="p">,</span> <span
class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span
class="n">f</span><span class="p">:</span>
-<a name="rest_code_fa080b8497dc418fa273f6f2e9cc4984-2"></a> <span
class="n">f</span><span class="o">.</span><span class="n">write</span><span
class="p">(</span><span class="s2">"stuff"</span><span class="p">)</span>
+<pre class="code python"><a
name="rest_code_6d970e24940243f390d3e2518dab1da7-1"></a><span
class="k">with</span> <span class="nb">open</span><span class="p">(</span><span
class="s2">"filename"</span><span class="p">,</span> <span
class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span
class="n">f</span><span class="p">:</span>
+<a name="rest_code_6d970e24940243f390d3e2518dab1da7-2"></a> <span
class="n">f</span><span class="o">.</span><span class="n">write</span><span
class="p">(</span><span class="s2">"stuff"</span><span class="p">)</span>
</pre>
<p>The same problem---not closing your files---can also show up if your
program opens a large number of files without closing them explicitly.
@@ -127,22 +130,22 @@
<p>Similarly, remember that you must <code class="docutils
literal">close()</code> a non-exhausted
generator in order to have its pending <code class="docutils
literal">finally</code> or <code class="docutils literal">with</code>
clauses executed immediately:</p>
-<pre class="code python"><a
name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-1"></a><span
class="k">def</span> <span class="nf">mygen</span><span class="p">():</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-2"></a> <span
class="k">with</span> <span class="n">foo</span><span class="p">:</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-3"></a> <span
class="k">yield</span> <span class="mi">42</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-4"></a>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-5"></a><span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">mygen</span><span class="p">():</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-6"></a> <span
class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span
class="mi">42</span><span class="p">:</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-7"></a> <span
class="k">break</span> <span class="c1"># foo.__exit__ is not run
immediately!</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-8"></a>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-9"></a><span class="c1">#
fixed version:</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-10"></a><span
class="n">gen</span> <span class="o">=</span> <span class="n">mygen</span><span
class="p">()</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-11"></a><span
class="k">try</span><span class="p">:</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-12"></a> <span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">gen</span><span class="p">:</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-13"></a> <span
class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span
class="mi">42</span><span class="p">:</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-14"></a> <span
class="k">break</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-15"></a><span
class="k">finally</span><span class="p">:</span>
-<a name="rest_code_a1b6cbdc4e004d87a13d05c47ad77398-16"></a> <span
class="n">gen</span><span class="o">.</span><span class="n">close</span><span
class="p">()</span>
+<pre class="code python"><a
name="rest_code_35bd84f66c384000a4efa36835f2f48f-1"></a><span
class="k">def</span> <span class="nf">mygen</span><span class="p">():</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-2"></a> <span
class="k">with</span> <span class="n">foo</span><span class="p">:</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-3"></a> <span
class="k">yield</span> <span class="mi">42</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-4"></a>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-5"></a><span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">mygen</span><span class="p">():</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-6"></a> <span
class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span
class="mi">42</span><span class="p">:</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-7"></a> <span
class="k">break</span> <span class="c1"># foo.__exit__ is not run
immediately!</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-8"></a>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-9"></a><span class="c1">#
fixed version:</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-10"></a><span
class="n">gen</span> <span class="o">=</span> <span class="n">mygen</span><span
class="p">()</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-11"></a><span
class="k">try</span><span class="p">:</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-12"></a> <span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">gen</span><span class="p">:</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-13"></a> <span
class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span
class="mi">42</span><span class="p">:</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-14"></a> <span
class="k">break</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-15"></a><span
class="k">finally</span><span class="p">:</span>
+<a name="rest_code_35bd84f66c384000a4efa36835f2f48f-16"></a> <span
class="n">gen</span><span class="o">.</span><span class="n">close</span><span
class="p">()</span>
</pre>
<p>More generally, <code class="docutils literal">__del__()</code> methods are
not executed as predictively
as on CPython: they run "some time later" in PyPy (or not at all if
@@ -162,9 +165,17 @@
</div>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/contact.html b/public/contact.html
--- a/public/contact.html
+++ b/public/contact.html
@@ -35,10 +35,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="index.html" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -81,9 +84,17 @@
</div>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/download.html b/public/download.html
--- a/public/download.html
+++ b/public/download.html
@@ -41,10 +41,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="index.html" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -257,11 +260,11 @@
trunk using <a class="reference external"
href="https://www.mercurial-scm.org/">Mercurial</a>. The trunk usually works
and is of course
more up-to-date. The following command should run in about 7 minutes
nowadays if you have hg >= 3.7 (it is much slower with older versions):</p>
-<pre class="code bash"><a
name="rest_code_c1f6a57f6dc145cf9d0be6cc55504407-1"></a>hg clone
https://bitbucket.org/pypy/pypy
+<pre class="code bash"><a
name="rest_code_eb222efdcc57450f9c01afcce48233ec-1"></a>hg clone
https://bitbucket.org/pypy/pypy
</pre>
<p>The trunk contains PyPy 2. For PyPy 3, switch to the correct branch:</p>
-<pre class="code bash"><a
name="rest_code_db060d4350a7428cbd3ae2ce693c5595-1"></a><span class="c1">#
switch to the branch that implements Python 3.6</span>
-<a name="rest_code_db060d4350a7428cbd3ae2ce693c5595-2"></a>hg update py3.6
+<pre class="code bash"><a
name="rest_code_85d4249d66294887b619ae00370a5a1a-1"></a><span class="c1">#
switch to the branch that implements Python 3.6</span>
+<a name="rest_code_85d4249d66294887b619ae00370a5a1a-2"></a>hg update py3.6
</pre>
<p>Alternatively, get one of the following smaller packages for the source at
the same revision as the above binaries:</p>
@@ -275,19 +278,19 @@
</li>
<li>
<p>Enter the <code class="docutils literal">goal</code> directory:</p>
-<pre class="code bash"><a
name="rest_code_cbfc2282773844319735dc5bd20ffd1a-1"></a><span
class="nb">cd</span> pypy/pypy/goal
+<pre class="code bash"><a
name="rest_code_5322dcf80b114303b4e460f5a48867ff-1"></a><span
class="nb">cd</span> pypy/pypy/goal
</pre>
</li>
<li>
<p>Run the <code class="docutils literal">rpython</code> script. Here are the
common combinations
of options (works also with <code class="docutils literal">python</code>
instead of <code class="docutils literal">pypy</code>;
requires CPython 2.7 or PyPy 2, even to build PyPy 3):</p>
-<pre class="code bash"><a
name="rest_code_7f73c5eee7ec4910a08037efbd3341cf-1"></a><span class="c1"># get
the JIT version</span>
-<a name="rest_code_7f73c5eee7ec4910a08037efbd3341cf-2"></a>pypy
../../rpython/bin/rpython -Ojit targetpypystandalone
-<a name="rest_code_7f73c5eee7ec4910a08037efbd3341cf-3"></a><span class="c1">#
get the no-jit version</span>
-<a name="rest_code_7f73c5eee7ec4910a08037efbd3341cf-4"></a>pypy
../../rpython/bin/rpython -O2 targetpypystandalone
-<a name="rest_code_7f73c5eee7ec4910a08037efbd3341cf-5"></a><span class="c1">#
get the sandbox version</span>
-<a name="rest_code_7f73c5eee7ec4910a08037efbd3341cf-6"></a>pypy
../../rpython/bin/rpython -O2 --sandbox targetpypystandalone
+<pre class="code bash"><a
name="rest_code_ad08c81eebce4adda7a757d2b555e51b-1"></a><span class="c1"># get
the JIT version</span>
+<a name="rest_code_ad08c81eebce4adda7a757d2b555e51b-2"></a>pypy
../../rpython/bin/rpython -Ojit targetpypystandalone
+<a name="rest_code_ad08c81eebce4adda7a757d2b555e51b-3"></a><span class="c1">#
get the no-jit version</span>
+<a name="rest_code_ad08c81eebce4adda7a757d2b555e51b-4"></a>pypy
../../rpython/bin/rpython -O2 targetpypystandalone
+<a name="rest_code_ad08c81eebce4adda7a757d2b555e51b-5"></a><span class="c1">#
get the sandbox version</span>
+<a name="rest_code_ad08c81eebce4adda7a757d2b555e51b-6"></a>pypy
../../rpython/bin/rpython -O2 --sandbox targetpypystandalone
</pre>
</li>
<li><p>Enjoy Mandelbrot <code class="docutils literal"><span
class="pre">:-)</span></code> It takes on the order of half an hour to
@@ -320,9 +323,9 @@
call it with <code class="docutils literal"><span class="pre">...pypy-c</span>
<span class="pre">../../rpython/bin/rpython</span> <span
class="pre">-Ojit</span></code>.</p>
<p>2. if even using PyPy instead of CPython is not enough, try to tweak
some internal parameters. Example (slower but saves around 400MB):</p>
-<pre class="code bash"><a
name="rest_code_1d541122efac4444b614f7d18e9d1fe5-1"></a><span
class="nv">PYPY_DONT_RUN_SUBPROCESS</span><span class="o">=</span><span
class="m">1</span> <span class="nv">PYPY_GC_MAX_DELTA</span><span
class="o">=</span>200MB <span class="se">\</span>
-<a name="rest_code_1d541122efac4444b614f7d18e9d1fe5-2"></a>pypy --jit <span
class="nv">loop_longevity</span><span class="o">=</span><span
class="m">300</span> ../../rpython/bin/rpython -Ojit --source
-<a name="rest_code_1d541122efac4444b614f7d18e9d1fe5-3"></a><span class="c1">#
then read the next point about --source</span>
+<pre class="code bash"><a
name="rest_code_77ce200d788b4103830bd644a28a8433-1"></a><span
class="nv">PYPY_DONT_RUN_SUBPROCESS</span><span class="o">=</span><span
class="m">1</span> <span class="nv">PYPY_GC_MAX_DELTA</span><span
class="o">=</span>200MB <span class="se">\</span>
+<a name="rest_code_77ce200d788b4103830bd644a28a8433-2"></a>pypy --jit <span
class="nv">loop_longevity</span><span class="o">=</span><span
class="m">300</span> ../../rpython/bin/rpython -Ojit --source
+<a name="rest_code_77ce200d788b4103830bd644a28a8433-3"></a><span class="c1">#
then read the next point about --source</span>
</pre>
</li>
<li><p>You can run translations with <code class="docutils literal"><span
class="pre">--source</span></code>, which only builds the C
@@ -343,9 +346,9 @@
<p>Once PyPy is translated from source the binary package similar to those
provided in the section <a class="reference internal"
href="download.html#default-with-a-jit-compiler">Default (with a JIT
Compiler)</a> above could be
easily created with <code class="docutils literal">package.py</code>
script:</p>
-<pre class="code bash"><a
name="rest_code_8bbac17aef5e4c6583369269ff7919bd-1"></a><span
class="nb">cd</span> ./pypy/pypy/tool/release/
-<a name="rest_code_8bbac17aef5e4c6583369269ff7919bd-2"></a>python package.py
--help <span class="c1">#for information</span>
-<a name="rest_code_8bbac17aef5e4c6583369269ff7919bd-3"></a>python package.py
--archive-name pypy-my-own-package-name
+<pre class="code bash"><a
name="rest_code_a0dd03f8836b440982e9ed4bcd9d5999-1"></a><span
class="nb">cd</span> ./pypy/pypy/tool/release/
+<a name="rest_code_a0dd03f8836b440982e9ed4bcd9d5999-2"></a>python package.py
--help <span class="c1">#for information</span>
+<a name="rest_code_a0dd03f8836b440982e9ed4bcd9d5999-3"></a>python package.py
--archive-name pypy-my-own-package-name
</pre>
<p>It is recommended to use package.py because custom scripts will
invariably become out-of-date. If you want to write custom scripts
@@ -454,9 +457,17 @@
</div>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/features.html b/public/features.html
--- a/public/features.html
+++ b/public/features.html
@@ -33,10 +33,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="index.html" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -157,16 +160,16 @@
build <code class="docutils literal"><span
class="pre">pypy-sandbox</span></code> from it (see <a class="reference
external" href="download.html#building-from-source">Building from source</a>).
These
instructions give you a <code class="docutils literal"><span
class="pre">pypy-c</span></code> that you should rename to
<code class="docutils literal"><span class="pre">pypy-sandbox</span></code> to
avoid future confusion. Then run:</p>
-<pre class="code bash"><a
name="rest_code_d8a8660498ac4e2f88a5b8fcf70faaa8-1"></a><span
class="nb">cd</span> pypy/sandbox
-<a name="rest_code_d8a8660498ac4e2f88a5b8fcf70faaa8-2"></a>pypy_interact.py
path/to/pypy-sandbox
-<a name="rest_code_d8a8660498ac4e2f88a5b8fcf70faaa8-3"></a><span class="c1">#
don't confuse it with pypy/goal/pyinteractive.py!</span>
+<pre class="code bash"><a
name="rest_code_8e62c9019a8d4f5285cd3e9e15afe580-1"></a><span
class="nb">cd</span> pypy/sandbox
+<a name="rest_code_8e62c9019a8d4f5285cd3e9e15afe580-2"></a>pypy_interact.py
path/to/pypy-sandbox
+<a name="rest_code_8e62c9019a8d4f5285cd3e9e15afe580-3"></a><span class="c1">#
don't confuse it with pypy/goal/pyinteractive.py!</span>
</pre>
<p>You get a fully sandboxed interpreter, in its own filesystem hierarchy
(try <code class="docutils literal"><span
class="pre">os.listdir('/')</span></code>). For example, you would run an
untrusted
script as follows:</p>
-<pre class="code bash"><a
name="rest_code_c0777f208eeb440cb2a30c4791d5446d-1"></a>mkdir virtualtmp
-<a name="rest_code_c0777f208eeb440cb2a30c4791d5446d-2"></a>cp untrusted.py
virtualtmp/
-<a name="rest_code_c0777f208eeb440cb2a30c4791d5446d-3"></a>pypy_interact.py
--tmp<span class="o">=</span>virtualtmp pypy-sandbox /tmp/untrusted.py
+<pre class="code bash"><a
name="rest_code_d48bb7a9ea1d499c9f2cb67b35ca403f-1"></a>mkdir virtualtmp
+<a name="rest_code_d48bb7a9ea1d499c9f2cb67b35ca403f-2"></a>cp untrusted.py
virtualtmp/
+<a name="rest_code_d48bb7a9ea1d499c9f2cb67b35ca403f-3"></a>pypy_interact.py
--tmp<span class="o">=</span>virtualtmp pypy-sandbox /tmp/untrusted.py
</pre>
<p>Note that the path <code class="docutils literal">/tmp/untrusted.py</code>
is a path inside the sandboxed
filesystem. You don't have to put <code class="docutils
literal">untrusted.py</code> in the real <code class="docutils
literal">/tmp</code>
@@ -179,9 +182,17 @@
</div>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/index.html b/public/index.html
--- a/public/index.html
+++ b/public/index.html
@@ -20,12 +20,15 @@
<meta property="og:site_name" content="PyPy">
<meta property="og:title" content="Welcome to PyPy">
<meta property="og:url" content="https://www.pypy.org/">
-<meta property="og:description" content='A fast, compliant alternative
implementation of Python
+<meta property="og:description" content="A fast, compliant alternative
implementation of Python
Get Started : Download and install
What is PyPy : Features
Documentation (external link)
-"If you want your code to run faster,
-you should probabl'>
+
+On average, PyPy is 4.4 times faster than CPython
+
+
+PyP">
<meta property="og:type" content="article">
<meta property="article:published_time" content="2019-12-28T16:14:02Z">
</head>
@@ -37,10 +40,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="#"><image src="images/pypy-logo.svg" width="75"
alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="#" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -72,20 +78,25 @@
</header><div class="e-content entry-content" itemprop="articleBody text">
- <div class="row">
+ <div>
+<div class="row">
<div class="column pb-4">
<img alt="PyPy logo" src="images/pypy-logo.svg" style="width: 350px;"><p>A <a
class="reference external" href="http://speed.pypy.org/">fast</a>, <a
class="reference external" href="compat.html">compliant</a> alternative
implementation of <a class="reference external"
href="http://python.org/">Python</a></p>
<p class="button"><a class="reference external" href="download.html">Get
Started</a> : Download and install</p>
<p class="button"><a class="reference external" href="features.html">What is
PyPy</a> : Features</p>
<p class="button"><a class="reference external"
href="https://doc.pypy.org">Documentation</a> (external link)</p>
-<pre class="literal-block">"If you want your code to run faster,
-you should probably just use PyPy."
--- Guido van Rossum (creator of Python)</pre>
-<p>On average, PyPy is <strong>4.4 times faster</strong> than CPython</p>
+</div>
+<div class="column pb-4">
+<p class="small">On average, PyPy is <strong>4.4 times faster</strong> than
CPython</p>
<div class="text-sm figure">
<img alt='PyPy vs. Python speed comparison graph"'
src="images/pypy_speed_graph.png"><p class="caption">PyPy trunk (with JIT)
benchmark times normalized to CPython. Smaller is
better. Based on the geometric average of all benchmarks</p>
</div>
+</div>
+</div>
+<pre class="literal-block">"If you want your code to run faster,
+you should probably just use PyPy."
+-- Guido van Rossum (creator of Python)</pre>
<p><strong>Advantages and distinct Features</strong></p>
<ul class="simple">
<li><p><strong>Speed:</strong> thanks to its Just-in-Time compiler, Python
programs
@@ -100,13 +111,20 @@
<li><p>As well as other <a class="reference external"
href="features.html">features</a>.</p></li>
</ul>
</div>
-</div>
</div>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/index.rst b/public/index.rst
deleted file mode 100644
--- a/public/index.rst
+++ /dev/null
@@ -1,87 +0,0 @@
-.. title: Welcome to PyPy
-.. slug: index
-.. date: 2019-12-28 16:14:02 UTC
-.. tags:
-.. category:
-.. link:
-.. description:
-.. type: text
-
-.. raw:: html
-
- <div class="row">
- <div class="column pb-4">
-
-.. image:: images/pypy-logo.svg
- :alt: PyPy logo
- :width: 350px
-
-A `fast`_, `compliant`_ alternative implementation of `Python`_
-
-.. class:: button
-
- `Get Started`_ : Download and install
-
-.. class:: button
-
- `What is PyPy`_ : Features
-
-.. class:: button
-
- `Documentation`_ (external link)
-
-.. _`Get Started`: download.html
-.. _`What is PyPy`: features.html
-.. _`Documentation`: https://doc.pypy.org
-
-
-::
-
- "If you want your code to run faster,
- you should probably just use PyPy."
- -- Guido van Rossum (creator of Python)
-
-On average, PyPy is **4.4 times faster** than CPython
-
-.. figure:: images/pypy_speed_graph.png
- :alt: PyPy vs. Python speed comparison graph"
- :figclass: text-sm
-
- PyPy trunk (with JIT) benchmark times normalized to CPython. Smaller is
- better. Based on the geometric average of all benchmarks
-
-
-**Advantages and distinct Features**
-
-* **Speed:** thanks to its Just-in-Time compiler, Python programs
- often run `faster`_ on PyPy. `(What is a JIT compiler?)`_
-
-* **Memory usage:** memory-hungry Python programs (several hundreds of
- MBs or more) might end up taking `less space`_ than they do in CPython.
-
-* **Compatibility:** PyPy is `highly compatible`_ with existing python code.
- It supports `cffi`_, `cppyy`_, and can run popular python libraries like
- `twisted`_ and `django`_.
-
-* **Stackless:** PyPy comes by default with support for `stackless mode`_,
- providing micro-threads for massive concurrency.
-
-* As well as other `features`_.
-
-.. _`stackless mode`: features.html#stackless
-.. _`Python`: http://python.org/
-.. _`fast`: http://speed.pypy.org/
-.. _`faster`: http://speed.pypy.org/
-.. _`(What is a JIT compiler?)`:
http://en.wikipedia.org/wiki/Just-in-time_compilation
-.. _`run untrusted code`: features.html#sandboxing
-.. _`compliant`: compat.html
-.. _`Python docs`: http://docs.python.org/2.7
-.. _`twisted`: https://twistedmatrix.com/
-.. _`django`: https://www.djangoproject.com/
-.. _`cffi`: https://cffi.readthedocs.org
-.. _`cppyy`: https://cppyy.readthedocs.org
-.. _`features`: features.html
-.. _`less space`: http://morepypy.blogspot.com/2009/10/gc-improvements.html
-.. _`highly compatible`: compat.html
-.. _`speed`: http://speed.pypy.org/
-.. _`compatibility`: compat.html
diff --git a/public/people.html b/public/people.html
--- a/public/people.html
+++ b/public/people.html
@@ -36,10 +36,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="index.html" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -187,9 +190,17 @@
</div>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/performance.html b/public/performance.html
--- a/public/performance.html
+++ b/public/performance.html
@@ -40,10 +40,13 @@
</a></h1>
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
- <a href="index.html"><image src="images/pypy-logo.svg"
width="75" alt="PyPy"></image></a>
- <div class="dropdown"> <button class="dropbtn">Features
+ <a href="index.html" height="40px;">
+ <image src="images/pypy-logo.svg" width="75px;"
alt="PyPy/"></image></a>
+ </div>
+ <div class="topnav">
+ <div class="dropdown"> <button class="dropbtn">Features
<i class="fa fa-caret-down"></i>
</button>
<div class="dropdown-content">
@@ -235,13 +238,13 @@
<div class="section" id="string-concatenation-is-expensive">
<h3>String concatenation is expensive</h3>
<p>In CPython, you may want to replace:</p>
-<pre class="code python"><a
name="rest_code_932017a3c2d84bb982ab371c27785e79-1"></a><span
class="n">s</span> <span class="o">=</span> <span class="n">head</span> <span
class="o">+</span> <span class="n">body</span> <span class="o">+</span> <span
class="n">maybe</span> <span class="o">+</span> <span class="n">tail</span>
+<pre class="code python"><a
name="rest_code_ce6361ac82b941c2baf7683e62801171-1"></a><span
class="n">s</span> <span class="o">=</span> <span class="n">head</span> <span
class="o">+</span> <span class="n">body</span> <span class="o">+</span> <span
class="n">maybe</span> <span class="o">+</span> <span class="n">tail</span>
</pre>
<p>with the admittedly less readable:</p>
-<pre class="code python"><a
name="rest_code_69e68d1d51ff463ebd512343ae0ab687-1"></a><span
class="n">s</span> <span class="o">=</span> <span class="s2">"</span><span
class="si">%(head)s%(body)s%(maybe)s%(tail)s</span><span class="s2">"</span>
<span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
+<pre class="code python"><a
name="rest_code_c50435e403854b8eac9c35780c72b6d8-1"></a><span
class="n">s</span> <span class="o">=</span> <span class="s2">"</span><span
class="si">%(head)s%(body)s%(maybe)s%(tail)s</span><span class="s2">"</span>
<span class="o">%</span> <span class="nb">locals</span><span class="p">()</span>
</pre>
<p>or even:</p>
-<pre class="code python"><a
name="rest_code_173ee5bb4c34441bb6e1ea4a45e617ca-1"></a><span
class="n">s</span> <span class="o">=</span> <span class="s2">"</span><span
class="si">{head}{body}{maybe}{tail}</span><span class="s2">"</span><span
class="o">.</span><span class="n">format</span><span class="p">(</span><span
class="o">**</span><span class="nb">locals</span><span class="p">())</span>
+<pre class="code python"><a
name="rest_code_45df624352d84e12a607edff5600123f-1"></a><span
class="n">s</span> <span class="o">=</span> <span class="s2">"</span><span
class="si">{head}{body}{maybe}{tail}</span><span class="s2">"</span><span
class="o">.</span><span class="n">format</span><span class="p">(</span><span
class="o">**</span><span class="nb">locals</span><span class="p">())</span>
</pre>
<p>Both of the latter forms avoid multiple-allocation overhead.
But PyPy's JIT makes the overhead of intermediate concatenations
@@ -249,8 +252,8 @@
small, bound and constant. (And <code class="docutils
literal">locals()</code> is rather slow
with PyPy's JIT.)</p>
<p>On the other hand, in code like this with a string-valued foo()
function:</p>
-<pre class="code python"><a
name="rest_code_18614ba6a1144dd39058438e85bdf56d-1"></a><span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">mylist</span><span class="p">:</span>
-<a name="rest_code_18614ba6a1144dd39058438e85bdf56d-2"></a> <span
class="n">s</span> <span class="o">+=</span> <span class="n">foo</span><span
class="p">(</span><span class="n">x</span><span class="p">)</span>
+<pre class="code python"><a
name="rest_code_98503b81c63d4dbe8a95eb4b488622a2-1"></a><span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">mylist</span><span class="p">:</span>
+<a name="rest_code_98503b81c63d4dbe8a95eb4b488622a2-2"></a> <span
class="n">s</span> <span class="o">+=</span> <span class="n">foo</span><span
class="p">(</span><span class="n">x</span><span class="p">)</span>
</pre>
<p>the JIT cannot optimize out intermediate copies. This code is
actually quadratic in the total size of the mylist strings due to
@@ -258,10 +261,10 @@
is always fine for bytearrays, because in this case <code class="docutils
literal">+=</code> is an
in-place operation.)</p>
<p>This:</p>
-<pre class="code python"><a
name="rest_code_ac7860eb3b5340cbb49fa7f1f237b9b9-1"></a><span
class="n">parts</span> <span class="o">=</span> <span class="p">[]</span>
-<a name="rest_code_ac7860eb3b5340cbb49fa7f1f237b9b9-2"></a><span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">mylist</span><span class="p">:</span>
-<a name="rest_code_ac7860eb3b5340cbb49fa7f1f237b9b9-3"></a> <span
class="n">parts</span><span class="o">.</span><span
class="n">append</span><span class="p">(</span><span class="n">foo</span><span
class="p">(</span><span class="n">x</span><span class="p">))</span>
-<a name="rest_code_ac7860eb3b5340cbb49fa7f1f237b9b9-4"></a><span
class="n">s</span> <span class="o">=</span> <span class="s2">""</span><span
class="o">.</span><span class="n">join</span><span class="p">(</span><span
class="n">parts</span><span class="p">)</span>
+<pre class="code python"><a
name="rest_code_577f1ce781034a32aa3369ac2ae4572b-1"></a><span
class="n">parts</span> <span class="o">=</span> <span class="p">[]</span>
+<a name="rest_code_577f1ce781034a32aa3369ac2ae4572b-2"></a><span
class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span
class="n">mylist</span><span class="p">:</span>
+<a name="rest_code_577f1ce781034a32aa3369ac2ae4572b-3"></a> <span
class="n">parts</span><span class="o">.</span><span
class="n">append</span><span class="p">(</span><span class="n">foo</span><span
class="p">(</span><span class="n">x</span><span class="p">))</span>
+<a name="rest_code_577f1ce781034a32aa3369ac2ae4572b-4"></a><span
class="n">s</span> <span class="o">=</span> <span class="s2">""</span><span
class="o">.</span><span class="n">join</span><span class="p">(</span><span
class="n">parts</span><span class="p">)</span>
</pre>
<p>can be much faster because all the string concatenation in the last
line creates exactly one new string object with one C-level copy
@@ -372,9 +375,17 @@
</div>
</article></main><footer id="footer"><p>
-<img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo"> Contents ©
-2020 <a href="mailto:[email protected]">The PyPy Team</a> Powered by <a
href="https://getnikola.com" rel="nofollow">Nikola</a>
</p>
+<div class="myfooter">
+ <div>
+ <img src="images/pypy-logo-nav-grey.png" alt="PyPy Logo">
+</div>
+ <div class="logotext">
+  Contents © 2020 <a href="mailto:[email protected]">The PyPy
Team</a>
+ Powered by <a href="https://getnikola.com" rel="nofollow">Nikola</a>
+ </div>
+</div>
+
</footer>
</div>
diff --git a/public/sitemap.xml b/public/sitemap.xml
--- a/public/sitemap.xml
+++ b/public/sitemap.xml
@@ -7,42 +7,42 @@
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>https://www.pypy.org/</loc>
- <lastmod>2020-01-08T08:35:00Z</lastmod>
+ <lastmod>2020-01-08T11:00:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/archive.html</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/blog/</loc>
- <lastmod>2020-01-08T05:16:00Z</lastmod>
+ <lastmod>2020-01-08T11:00:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/categories/</loc>
- <lastmod>2020-01-08T05:16:00Z</lastmod>
+ <lastmod>2020-01-08T11:00:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/compat.html</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/contact.html</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/download.html</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/features.html</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/people.html</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</url>
<url>
<loc>https://www.pypy.org/performance.html</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</url>
</urlset>
\ No newline at end of file
diff --git a/public/sitemapindex.xml b/public/sitemapindex.xml
--- a/public/sitemapindex.xml
+++ b/public/sitemapindex.xml
@@ -7,10 +7,10 @@
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<sitemap>
<loc>https://www.pypy.org/rss.xml</loc>
- <lastmod>2020-01-08T08:33:00Z</lastmod>
+ <lastmod>2020-01-08T11:00:00Z</lastmod>
</sitemap>
<sitemap>
<loc>https://www.pypy.org/sitemap.xml</loc>
- <lastmod>2020-01-08T08:35:00Z</lastmod>
+ <lastmod>2020-01-09T00:45:00Z</lastmod>
</sitemap>
</sitemapindex>
\ No newline at end of file
diff --git a/themes/pypy/assets/css/styles.css
b/themes/pypy/assets/css/styles.css
--- a/themes/pypy/assets/css/styles.css
+++ b/themes/pypy/assets/css/styles.css
@@ -11,19 +11,35 @@
background-color: #d0dad5;
}
-/* Add a black background color to the top navigation */
-.topnav {
+.myTopNav {
/* background-color: #333; */
- overflow: hidden;
+ display: flex;
+ flex-direction: row;
+ margin-bottom: 5px;
+ height: 47px;
}
/* Style the links inside the navigation bar */
+.myTopNav a {
+ float: left;
+ display: block;
+ text-decoration: none;
+ font-size: 17px;
+}
+
+.topnav {
+ height: 32px;
+}
+
.topnav a {
float: left;
display: block;
color: #383939;
text-align: center;
- padding: 14px 16px;
+ padding-top: 8px;
+ padding-left: 16px;
+ padding-right: 16px;
+ padding-bottom: 12px;
text-decoration: none;
font-size: 17px;
}
@@ -35,7 +51,7 @@
}
/* Hide the link that should open and close the topnav on small screens */
-.topnav .icon {
+.myTopNav .icon {
display: none;
}
@@ -51,7 +67,10 @@
border: none;
outline: none;
color: #383939;
- padding: 14px 16px;
+ padding-top: 10px;
+ padding-left: 16px;
+ padding-right: 16px;
+ padding-bottom: 12px;
background-color: inherit;
font-family: inherit;
margin: 0;
@@ -78,7 +97,7 @@
}
/* Add a dark background on topnav links and the dropdown button on hover */
-.topnav a:hover, .dropdown:hover .dropbtn {
+.myTopNav a:hover, .dropdown:hover .dropbtn {
background-color: #555;
color: white;
}
@@ -96,10 +115,10 @@
/* When the screen is less than 600 pixels wide, hide all links, except for
the first one ("Home"). Show the link that contains should open and close the
topnav (.icon) */
@media screen and (max-width: 600px) {
- .topnav a:not(:first-child), .dropdown .dropbtn {
+ .myTopNav a:not(:first-child), .dropdown .dropbtn {
display: none;
}
- .topnav a.icon {
+ .myTopNav a.icon {
float: right;
display: block;
}
@@ -107,20 +126,20 @@
/* The "responsive" class is added to the topnav with JavaScript when the user
clicks on the icon. This class makes the topnav look good on small screens
(display the links vertically instead of horizontally) */
@media screen and (max-width: 600px) {
- .topnav.responsive {position: relative;}
- .topnav.responsive a.icon {
+ .myTopNav.responsive {position: relative;}
+ .myTopNav.responsive a.icon {
position: absolute;
right: 0;
top: 0;
}
- .topnav.responsive a {
+ .myTopNav.responsive a {
float: none;
display: block;
text-align: left;
}
- .topnav.responsive .dropdown {float: none;}
- .topnav.responsive .dropdown-content {position: relative;}
- .topnav.responsive .dropdown .dropbtn {
+ .myTopNav.responsive .dropdown {float: none;}
+ .myTopNav.responsive .dropdown-content {position: relative;}
+ .myTopNav.responsive .dropdown .dropbtn {
display: block;
width: 100%;
text-align: left;
@@ -198,4 +217,15 @@
margin-bottom: 0;
}
+.myfooter {
+ overflow: auto;
+ display: flex;
+ flex-direction: row;
+}
+.myfooter div {
+ height: 32px;
+}
+
+.logotext {
+ padding-top: 4px;
diff --git a/themes/pypy/templates/base_header.tmpl
b/themes/pypy/templates/base_header.tmpl
--- a/themes/pypy/templates/base_header.tmpl
+++ b/themes/pypy/templates/base_header.tmpl
@@ -29,8 +29,13 @@
{% endmacro %}
{% macro html_navigation_links() %}
- <div class="topnav" id="myTopNav">
+ <div class="myTopNav">
<div>
+ <a href="index.html" height=40px;>
+ <image src="images/pypy-logo.svg" width=75px; alt=PyPy/>
+ </a>
+ </div>
+ <div class="topnav">
{{ html_navigation_links_entries(navigation_links) }}
{{ html_navigation_links_entries(navigation_alt_links) }}
{{ template_hooks['menu']() }}
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit