SEO optimizations and fixes #163

Merged
sb10q merged 7 commits from esavkin/web2019:161-seo into master 2025-01-23 22:23:32 +08:00
19 changed files with 879 additions and 360 deletions

View File

@ -1,4 +1,4 @@
base_url = "/"
base_url = "https://m-labs.hk"
Outdated
Review

What happens on intl and .ph?

What happens on intl and .ph?

The -u option in zola build/serve overrides it, so I updated nix-scripts to build a website for .ph as well (intl already has it)

The `-u` option in zola build/serve overrides it, so I updated nix-scripts to build a website for .ph as well (intl already has it)
title = "M-Labs"
description = "Open tools for open physics."

View File

@ -13,25 +13,25 @@ template = "page.html"
{% layout_card(title="ARTIQ manual", sameheight=100) %}
<small>Stable version</small>
<a href="https://m-labs.hk/artiq/manual.pdf" target="_blank">PDF</a> | <a href="https://m-labs.hk/artiq/manual/" target="_blank" rel="noopener noreferrer">HTML</a>
<a href="https://m-labs.hk/artiq/manual.pdf" target="_blank" itemprop="url">PDF</a> | <a href="https://m-labs.hk/artiq/manual/" target="_blank" rel="noopener noreferrer" itemprop="url">HTML</a>
{% end %}
{% layout_card(title="SiPyCo manual", sameheight=100) %}
<small>Starting with ARTIQ-5, this library replaces <tt>artiq.protocols</tt>.</small>
<a href="https://m-labs.hk/artiq/sipyco-manual.pdf" target="_blank">PDF</a> | <a href="https://m-labs.hk/artiq/sipyco-manual/" target="_blank" rel="noopener noreferrer">HTML</a>
<a href="https://m-labs.hk/artiq/sipyco-manual.pdf" target="_blank" itemprop="url">PDF</a> | <a href="https://m-labs.hk/artiq/sipyco-manual/" target="_blank" rel="noopener noreferrer" itemprop="url">HTML</a>
{% end %}
{% layout_card(title="ARTIQ manual", sameheight=100) %}
<small>Beta (development) version</small>
<a href="https://m-labs.hk/artiq/manual-beta.pdf" target="_blank">PDF</a> | <a href="https://m-labs.hk/artiq/manual-beta/" target="_blank" rel="noopener noreferrer">HTML</a>
<a href="https://m-labs.hk/artiq/manual-beta.pdf" target="_blank" itemprop="url">PDF</a> | <a href="https://m-labs.hk/artiq/manual-beta/" target="_blank" rel="noopener noreferrer" itemprop="url">HTML</a>
{% end %}
{% layout_card(title="ARTIQ manual", sameheight=100) %}
<small>Legacy version</small>
<a href="https://m-labs.hk/artiq/manual-legacy.pdf" target="_blank">PDF</a> | <a href="https://m-labs.hk/artiq/manual-legacy/" target="_blank" rel="noopener noreferrer">HTML</a>
<a href="https://m-labs.hk/artiq/manual-legacy.pdf" target="_blank" itemprop="url">PDF</a> | <a href="https://m-labs.hk/artiq/manual-legacy/" target="_blank" rel="noopener noreferrer" itemprop="url">HTML</a>
{% end %}
@ -39,14 +39,14 @@ template = "page.html"
{% layout_card(title="Slideshow", sameheight=100) %}
<small>The ARTIQ experiment control system</small>
<a href="/docs/artiq/artiq_overview.pdf" target="_blank" rel="noopener noreferrer">View slides</a>
<a href="/docs/artiq/artiq_overview.pdf" target="_blank" rel="noopener noreferrer" itemprop="url">View slides</a>
{% end %}
{% layout_card(title="Slideshow", sameheight=100) %}
<small>Timing control in ARTIQ</small>
<a href="/docs/artiq/slides_timing.pdf" target="_blank" rel="noopener noreferrer">View slides</a>
<a href="/docs/artiq/slides_timing.pdf" target="_blank" rel="noopener noreferrer" itemprop="url">View slides</a>
{% end %}
</div>
@ -64,40 +64,40 @@ template = "page.html"
<div class="row mt-5">
{% layout_card(src="images/mattermost@2x.png", css="col-12 col-md-4 text-center") %}
<a href="http://chat.m-labs.hk/" target="_blank" rel="noopener noreferrer">Mattermost live chat</a>
<a href="http://chat.m-labs.hk/" target="_blank" rel="noopener noreferrer" itemprop="url">Mattermost live chat</a>
<small>(bridged to IRC)</small>
{% end %}
{% layout_card(src="images/forum@2x.png", css="col-12 col-md-4 text-center") %}
<a href="https://forum.m-labs.hk/" target="_blank" rel="noopener noreferrer">Forum</a>
<a href="https://forum.m-labs.hk/" target="_blank" rel="noopener noreferrer" itemprop="url">Forum</a>
<small>&nbsp;</small>
{% end %}
{% layout_card(src="images/irc@2x.png", css="col-12 col-md-4 text-center") %}
<a href="https://webchat.oftc.net/" target="_blank" rel="noopener noreferrer">IRC: #m-labs</a>
<a href="https://webchat.oftc.net/" target="_blank" rel="noopener noreferrer" itemprop="url">IRC: #m-labs</a>
<small>on OFTC</small>
{% end %}
{% layout_card(src="images/press@2x.png", css="col-12 col-md-4 text-center") %}
<a href="https://www.nist.gov/news-events/news/2015/01/open-source-software-quantum-information" target="_blank" rel="noopener noreferrer">NIST ARTIQ press release</a>
<a href="https://www.nist.gov/news-events/news/2015/01/open-source-software-quantum-information" target="_blank" rel="noopener noreferrer" itemprop="url">NIST ARTIQ press release</a>
<small>&nbsp;</small>
{% end %}
{% layout_card(src="images/git@2x.png", css="col-12 col-md-4 text-center") %}
<a href="https://github.com/m-labs/artiq" target="_blank" rel="noopener noreferrer">ARTIQ source code repository</a>
<a href="https://github.com/m-labs/artiq" target="_blank" rel="noopener noreferrer" itemprop="url">ARTIQ source code repository</a>
<small>on GitHub</small>
{% end %}
{% layout_card(src="images/git@2x.png", css="col-12 col-md-4 text-center") %}
<a href="https://git.m-labs.hk" target="_blank" rel="noopener noreferrer">Gitea</a>
<a href="https://git.m-labs.hk" target="_blank" rel="noopener noreferrer" itemprop="url">Gitea</a>
<small>&nbsp;</small>
{% end %}
@ -129,108 +129,108 @@ We welcome inquiries from research groups of all sizes.<br>[See what has been fu
{% layout_card(title="Entangler core", sameheight=120) %}
<small>A FPGA core written in Migen with ARTIQ interface, for controlling remote quantum entanglement of trapped ions.</small>
<a href="https://github.com/OxfordIonTrapGroup/entangler-core" target="_blank" rel="noopener noreferrer">Repository</a> | <a href="https://arxiv.org/abs/1911.10841" target="_blank" rel="noopener noreferrer">Paper</a>
<a href="https://github.com/OxfordIonTrapGroup/entangler-core" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a> | <a href="https://arxiv.org/abs/1911.10841" target="_blank" rel="noopener noreferrer" itemprop="url">Paper</a>
{% end %}
{% layout_card(title="ndscan", sameheight=120) %}
<small>N-dimensional scans for ARTIQ</small>
<a href="https://github.com/OxfordIonTrapGroup/ndscan" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/OxfordIonTrapGroup/ndscan" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="Oxford routines", sameheight=120) %}
<small>Oxford Ion-Trap Group routines</small>
<a href="https://github.com/OxfordIonTrapGroup/oitg" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/OxfordIonTrapGroup/oitg" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="UCLA routines", sameheight=120) %}
<small>ARTIQ experiments in use at UCLA AMO</small>
<a href="https://github.com/EGGS-Experiment/LAX_exp" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/EGGS-Experiment/LAX_exp" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="nvOS", sameheight=120) %}
<small>A quantum operating system built around ARTIQ and NV centers in diamond.</small>
<a href="https://github.com/vontell/nvOS" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/vontell/nvOS" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="Haeffner Lab routines", sameheight=120) %}
<small>Haeffner Lab (Berkeley) routines</small>
<a href="https://github.com/HaeffnerLab/artiq-work-lattice" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/HaeffnerLab/artiq-work-lattice" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="Birmingham examples", sameheight=120) %}
<small>A repository of simple examples of ARTIQ code</small>
<a href="https://github.com/cnourshargh/Bham-ARTIQ-examples" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/cnourshargh/Bham-ARTIQ-examples" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="DAX - Duke ARTIQ extensions", sameheight=120) %}
<small>A library to provide tools for system organization/abstraction and to improve usability by automating common functionality.</small>
<a href="https://gitlab.com/duke-artiq" target="_blank" rel="noopener noreferrer">Repositories</a>
<a href="https://gitlab.com/duke-artiq" target="_blank" rel="noopener noreferrer" itemprop="url">Repositories</a>
{% end %}
{% layout_card(title="Argent", sameheight=120) %}
<small>High-level sequence control interface for ARTIQ.</small>
<a href="https://github.com/robertfasano/argent" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/robertfasano/argent" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="flake8-artiq", sameheight=120) %}
<small>A Flake8 plugin for checking ARTIQ code</small>
<a href="https://gitlab.com/duke-artiq/flake8-artiq" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://gitlab.com/duke-artiq/flake8-artiq" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="GenericSCPIDriver", sameheight=120) %}
<small>A generic Python driver for SCPI devices driven over serial connections. Compatible with ARTIQ.</small>
<a href="https://github.com/charlesbaynham/GenericSCPIDriver" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/charlesbaynham/GenericSCPIDriver" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="artiq_influx_generic", sameheight=120) %}
<small>RPC interface to InfluxDB with support for generic data logging.</small>
<a href="https://gitlab.com/charlesbaynham/artiq_influx_generic" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://gitlab.com/charlesbaynham/artiq_influx_generic" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="DP700", sameheight=120) %}
<small>ARTIQ NDSP for RIGOL DP700 Series power supplies.</small>
<a href="https://github.com/OregonIons/DP700" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/OregonIons/DP700" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="AGUC8", sameheight=120) %}
<small>ARTIQ NDSP for Newport AG-UC8 piezo motor controller.</small>
<a href="https://github.com/OregonIons/AGUC8" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/OregonIons/AGUC8" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="TSICam", sameheight=120) %}
<small>ARTIQ NDSP for Thorlabs Scientific Imaging cameras.</small>
<a href="https://github.com/OregonIons/TSICam" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/OregonIons/TSICam" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="U Toronto examples", sameheight=120) %}
<small>A repository of examples of ARTIQ code and instructions</small>
<a href="https://github.com/vuthalab/artiq" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/vuthalab/artiq" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
{% layout_card(title="OffsetStabilizer", sameheight=120) %}
<small>Stabilizer firmware for laser frequency offset stabilization</small>
<a href="https://github.com/PhBrb/OffsetStabilizer" target="_blank" rel="noopener noreferrer">Repository</a>
<a href="https://github.com/PhBrb/OffsetStabilizer" target="_blank" rel="noopener noreferrer" itemprop="url">Repository</a>
{% end %}
</div>

859
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,8 @@
"start": "npx webpack --watch",
"build": "npx webpack",
"start-dev": "npx webpack --watch --mode=development --devtool=inline-source-map",
"build-dev": "npx webpack --mode=development --devtool=inline-source-map"
"build-dev": "npx webpack --mode=development --devtool=inline-source-map",
"optimize-bootstrap": "zola build -o tmp_out && npx purgecss --css static/css/bootstrap-5.3.0.min.css --content 'tmp_out/**/*.html' -o static/css/bootstrap-5.3.0.opt.css --safelist modal-backdrop && rm -rf tmp_out"
},
"repository": {
"type": "git",
@ -33,7 +34,8 @@
"babel-preset-minify": "^0.5.2",
"webpack": "^5.93.0",
"webpack-cli": "^5.1.4",
"webpack-preprocessor-loader": "^1.3.0"
"webpack-preprocessor-loader": "^1.3.0",
"purgecss": "^7.0.2"
},
"babel": {
"presets": [

View File

@ -107,10 +107,14 @@ h3, h2, h1 {
padding: .4rem; }
p ~ h5 {
p ~ h5, div.desc-wrapper ~ h5 {
margin-top: 3rem;
}
div.desc-wrapper {
margin-bottom: 1rem;
}
img.kf25 {
width: 310px;
}

5
static/css/bootstrap-5.3.0.opt.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,32 +0,0 @@
(function () {
var swRegistration;
var newWorker;
var isRefreshing = false;
var pathname = window.location.pathname;
var deferredPrompt;
if ('serviceWorker' in navigator) {
console.info('Service Worker is supported');
window.addEventListener('load', function () {
navigator.serviceWorker.register('/sw.js', {
updateViaCache: 'all',
}).then(function (registration) {
swRegistration = registration;
console.log('[SW] registration successful with scope: ', swRegistration.scope);
console.log('[SW] is waiting: ', swRegistration.waiting);
navigator.serviceWorker.addEventListener('controllerchange', function () {
if (isRefreshing) {
return;
}
window.location.reload();
isRefreshing = true;
});
}, function (err) {
console.log('[SW] registration failed: ', err);
});
});
}
})();

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,40 +0,0 @@
var CACHE_NAME = 'ml-03';
var urlsToCache = [
'/css/bootstrap-5.3.0.min.css',
'/css/styles.css',
'/js/jquery-3.7.0.slim.min.js',
'/js/jquery-3.7.0.min.js',
'/js/bootstrap-5.3.0.min.js',
'/js/react.production.min.js',
'/js/react-dom.production.min.js',
'/js/prop-types.min.js',
'/js/react-beautiful-dnd.min.js',
'/js/uuid_v4@latest.js',
];
self.addEventListener('install', function(event) {
console.log('[SW] Install');
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('[SW] add to cache');
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function (event) {
console.log('[SW] Fetch');
event.respondWith(
caches.match(event.request).then(function (response) {
return response || fetch(event.request);
})
);
});
self.addEventListener('message', function (event) {
if (event.data.action === 'skipWaiting') {
self.skipWaiting();
caches.delete(CACHE_NAME);
}
});

View File

@ -43,7 +43,7 @@
<link href="{{ get_url(path='favicon.ico', cachebust=true) }}" rel="shortcut icon" type="image/x-icon">
<link href="{{ get_url(path='favicon.ico', cachebust=true) }}" rel="icon" type="image/x-icon">
<link rel="stylesheet" href="{{ get_url(path='css/bootstrap-5.3.0.min.css', cachebust=true) }}">
<link rel="stylesheet" href="{{ get_url(path='css/bootstrap-5.3.0.opt.css', cachebust=true) }}">
<link rel="stylesheet" href="{{ get_url(path='css/styles.css', cachebust=true) }}">
{% block styles %}{% endblock %}
</head>
@ -85,7 +85,7 @@
</a>
<div class="dropdown-menu shadow-none shadow-lg text-end text-lg-start" aria-labelledby="navbarDropdown">
{% for page in subsection.pages %}
<a class="dropdown-item pt-2 pb-2 pt-sm-3 pb-sm-3" href="{{ page.permalink }}">{{ page.title }}</a>
<a class="dropdown-item pt-2 pb-2 pt-sm-3 pb-sm-3" href="{{ page.permalink | safe }}">{{ page.title }}</a>
{% endfor %}
</div>
</li>
@ -93,7 +93,7 @@
{% elif subsection.title != 'Other' %}
<li class="nav-item ms-0 ms-md-4">
<a class="nav-link" href="{{ subsection.permalink }}">{{ subsection.title }}</a>
<a class="nav-link" href="{{ subsection.permalink | safe }}">{{ subsection.title }}</a>
</li>
{% endif %}
@ -155,7 +155,6 @@
<!-- ./FOOTER -->
<script src="{{ get_url(path='js/jquery-3.7.0.slim.min.js', cachebust=true) }}"></script>
<script src="{{ get_url(path='js/bootstrap-5.3.0.bundle.min.js', cachebust=true) }}"></script>
<script>

View File

@ -17,8 +17,8 @@
<meta property="og:description" content="{% block og_description%}{{ config.description }}{% endblock %}">
{% endblock %}
<meta property="og:site_name" content="{{ config.extra.author }}">
<meta property="og:url" content="{{ config.base_url }}">
<meta property="og:image" content={{ get_url(path='images/logo@2x.png', cachebust=true) }}>
<meta property="og:url" content="{{ config.base_url | safe }}">
<meta property="og:image" content="{{ get_url(path='images/logo@2x.png', cachebust=true) }}">
{% block meta %}{% endblock meta %}
<meta name="theme-color" content="#715ec7">
@ -42,11 +42,21 @@
<link href="{{ get_url(path='favicon.ico', cachebust=true) }}" rel="shortcut icon" type="image/x-icon">
<link href="{{ get_url(path='favicon.ico', cachebust=true) }}" rel="icon" type="image/x-icon">
{% block styles %}{% endblock %}
<link href="https://m-labs.hk{{ current_path | safe }}" rel="canonical" >
<link href="https://m-labs.hk{{ current_path | safe }}" rel="alternate" hreflang="x-default" >
<link href="https://m-labs.ph{{ current_path | safe }}" rel="alternate" hreflang="en-ph" >
<link href="https://m-labs-intl.com{{ current_path | safe }}" rel="alternate" hreflang="en-us" >
{% block links %}{% endblock %}
{% block styles %}
<link rel="stylesheet" href="{{ get_url(path='css/bootstrap-5.3.0.opt.css', cachebust=true) }}">
<link rel="stylesheet" href="{{ get_url(path='css/styles.css', cachebust=true) }}">
{% endblock %}
</head>
<body>
<body itemscope itemtype="https://schema.org/WebPage">
<!-- HEADER -->
@ -54,7 +64,7 @@
<header class="container">
<nav class="navbar navbar-expand-lg navbar-light bg-th-1 justify-content-center justify-content-between pt-md-3 pb-md-3" role="navigation">
<nav class="navbar navbar-expand-lg navbar-light bg-th-1 justify-content-center justify-content-between pt-md-3 pb-md-3" role="navigation" itemscope itemtype="http://schema.org/SiteNavigationElement">
<a class="navbar-brand logo me-0" href="/">
<img src="{{ get_url(path='images/logo@2x.png') }}" height="40" alt="logo">
@ -84,11 +94,11 @@
<div class="dropdown-menu shadow-none shadow-lg text-start text-lg-start" aria-labelledby="navbarDropdown">
{% for tmp_page in subsection.pages %}
{% if tmp_page.extra.menu_item and tmp_page.extra.menu_item == "th1" %}
<a class="dropdown-item pt-2 pb-2 mx-4 mt-2 mb-2 mt-sm-3 mb-sm-3 w-auto btn btn-primary btn-inversed {% if current_path == tmp_page.path %}active{% endif %} rounded-1" href="{{ tmp_page.permalink }}">
<a class="dropdown-item pt-2 pb-2 mx-4 mt-2 mb-2 mt-sm-3 mb-sm-3 w-auto btn btn-primary btn-inversed {% if current_path == tmp_page.path %}active{% endif %} rounded-1" href="{{ tmp_page.permalink | safe }}" itemprop="url">
<center>{{ tmp_page.title }}</center>
</a>
{% else %}
<a class="dropdown-item pt-2 pb-2 {% if current_path == tmp_page.path %}active{% endif %}" href="{{ tmp_page.permalink }}">{{ tmp_page.title }}</a>
<a class="dropdown-item pt-2 pb-2 {% if current_path == tmp_page.path %}active{% endif %}" href="{{ tmp_page.permalink | safe }}" itemprop="url">{{ tmp_page.title }}</a>
{% endif %}
{% endfor %}
</div>
@ -97,7 +107,7 @@
{% elif subsection.title != 'Other' %}
<li class="nav-item ms-0 ms-md-4 {% if current_path == subsection.path %}active{% endif %}">
<a class="nav-link" href="{{ subsection.permalink }}">{{ subsection.title }}</a>
<a class="nav-link" href="{{ subsection.permalink | safe }}">{{ subsection.title }}</a>
</li>
{% endif %}
@ -126,25 +136,6 @@
{% endblock %}
<!-- ./MAIN CONTENT -->
<noscript id="deferred-main-styles">
<link rel="stylesheet" href="{{ get_url(path='css/bootstrap-5.3.0.min.css', cachebust=true) }}">
<link rel="stylesheet" href="{{ get_url(path='css/styles.css', cachebust=true) }}">
{% block deferred_styles %}{% endblock %}
</noscript>
<script>
var loadDeferredMainStyles = function() {
var addStylesNode = document.getElementById("deferred-main-styles");
var replacement = document.createElement("div");
replacement.innerHTML = addStylesNode.textContent;
document.body.appendChild(replacement)
addStylesNode.parentElement.removeChild(addStylesNode);
};
var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
if (raf) raf(function() { window.setTimeout(loadDeferredMainStyles, 0); });
else window.addEventListener('load', loadDeferredMainStyles);
</script>
<!-- FOOTER -->
{% block footer %}
@ -156,8 +147,8 @@
{% endblock %}
<p class="pt-4 pb-2 text-center">
<small>Copyright &copy; <span id="copyright_year"></span>, M-Labs. All rights reserved. ARTIQ, the ARTIQ logo, Migen and nMigen are registered or unregistered trademarks.</small>
<p class="pt-4 pb-2 text-center" itemprop="copyrightNotice">
<small>Copyright &copy; <span id="copyright_year" itemprop="copyrightYear">{{ now() | date(format="%Y") }}</span>, <span itemprop="copyrightHolder">M-Labs</span>. All rights reserved. ARTIQ, the ARTIQ logo, Migen and nMigen are registered or unregistered trademarks.</small>
</p>
{% block fcopyright %}
@ -182,11 +173,7 @@
</div>
</div>
<!-- <script src="{{ get_url(path='js/as.js', cachebust=true) }}"></script> -->
<script src="{{ get_url(path='js/jquery-3.7.0.min.js', cachebust=true) }}"></script>
<script src="{{ get_url(path='js/bootstrap-5.3.0.bundle.min.js', cachebust=true) }}"></script>
<script src="{{ get_url(path='js/bootstrap-5.3.0.bundle.min.js', cachebust=true) }}" defer></script>
<script>
@ -200,16 +187,20 @@
</script>
<script>
$(function () {
$('#modalEnlarged').on('hidden.bs.modal', function (e) {
$('#enlarged').attr('src', '');
});
document.addEventListener('DOMContentLoaded', function() {
const modal = document.getElementById('modalEnlarged');
const enlargedImg = document.getElementById('enlarged');
$('[data-popup]').click(function (evt) {
var _self = $(this);
var _img_enlarged = _self.data('nsrc');
$('#enlarged').attr('src', _img_enlarged);
$('#modalEnlarged').modal('show');
modal.addEventListener('hidden.bs.modal', function() {
enlargedImg.src = '';
});
document.querySelectorAll('[data-popup]').forEach(function(element) {
element.addEventListener('click', function() {
const imgSrc = this.dataset.nsrc;
enlargedImg.src = imgSrc;
const bsModal = new bootstrap.Modal(modal);
bsModal.show();
});
});
});
</script>

View File

@ -1,28 +1,32 @@
<div class="row pt-5 pb-5">
<div class="col-12 col-md-6 pb-5 pb-md-0">
<div class="col-12 col-md-6 pb-5 pb-md-0" itemscope itemtype="https://schema.org/ContactPoint">
<h5 class="pb-3">Sales inquiries</h5>
<h5 class="pb-3" itemprop="contactType">Sales inquiries</h5>
<p>
To purchase ARTIQ Sinara hardware, software and gateware development services, or to enter a technical support agreement, write to <a href="mailto:sales@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}">sales@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}</a>.
<p itemprop="description">
To purchase ARTIQ Sinara hardware, software and gateware development services, or to enter a technical support agreement, write to <a href="mailto:sales@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}" itemprop="email">sales@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}</a>.
</p>
</div>
<div class="col-12 col-md-6 pb-5 pb-md-0">
<h5 class="pb-3">Commercial technical support</h5>
<div class="pb-3" itemscope itemtype="https://schema.org/ContactPoint">
<h5 class="pb-3" itemprop="contactType">Commercial technical support</h5>
<p>
If you need help setting up ARTIQ hardware purchased from us, or if you have a commercial technical support agreement with us, email us anytime at <a href="mailto:helpdesk@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}">helpdesk@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}</a>.
If you need help setting up ARTIQ hardware purchased from us, or if you have a commercial technical support agreement with us, email us anytime at <a href="mailto:helpdesk@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}" itemprop="email">helpdesk@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}</a>.
</p>
</div>
<h5 class="pb-3">Community support</h5>
<div class="mt-3" itemscope itemtype="https://schema.org/ContactPoint">
<h5 class="pb-3" itemprop="contactType">Community support</h5>
<p>
Our open source projects such as ARTIQ have an active user community. Get and offer help on the <a href="https://chat.m-labs.hk/" target="_blank" rel="noopener noreferrer">Mattermost chat</a>, on IRC #m-labs on OFTC, or on <a href="https://forum.m-labs.hk/" rel="noopener noreferrer" target="_blank">the forum</a>.
<p itemprop="description">
Our open source projects such as ARTIQ have an active user community. Get and offer help on the <a href="https://chat.m-labs.hk/" target="_blank" rel="noopener noreferrer" itemprop="url">Mattermost chat</a>, on IRC #m-labs on OFTC, or on <a href="https://forum.m-labs.hk/" rel="noopener noreferrer" target="_blank" itemprop="url">the forum</a>.
</p>
</div>
</div>

View File

@ -1,5 +1,8 @@
{% extends '_base.html' %}
{% block links %}
<link rel="preload" href="images/hero@2x.png" as="image" >
{% endblock %}
{% block hero %}
@ -11,7 +14,7 @@
<div class="col-12 text-center">
<h1>Open tools for open physics.</h1>
<h1 itemprop="headline">Open tools for open physics.</h1>
<img src="{{ get_url(path='images/ion@2x.png', cachebust=true) }}" height="12" alt="ion">
@ -34,14 +37,15 @@
<div class="col-12">
<div class="card shadow mt-3 mb-3">
<div class="card shadow mt-3 mb-3" itemscope itemtype="https://schema.org/Poster">
<div class="card-body p-3 p-md-5 card-artiq">
<div class="col-12 col-md-6 ps-0 pe-0">
<h5 class="card-title">ARTIQ</h5>
<h5 class="card-title" itemprop="headline">ARTIQ</h5>
<div class="desc-wrapper" itemprop="description">
<p class="card-text pt-3">
ARTIQ (Advanced Real-Time Infrastructure for Quantum physics) is a leading-edge control system for quantum information experiments, developed in partnership with a growing number of research institutions worldwide.
</p>
@ -49,11 +53,12 @@
<p class="card-text pt-3 pb-3">
The system features a high-level programming language that helps describe complex experiments, which is compiled and executed on dedicated hardware with nanosecond timing resolution and sub-microsecond latency.
</p>
</div>
<a href="{{ get_url(path='@/experiment-control/place-order.md') }}" class="btn btn-primary btn-inversed btn-lg">Order hardware</a>
<a href="https://m-labs.hk/artiq/manual/" class="btn btn-primary btn-lg">Manual</a>
<a href="https://forum.m-labs.hk" class="btn btn-primary btn-lg">Forum</a>
<a href="{{ get_url(path='@/experiment-control/artiq.md') }}" class="btn btn-primary btn-lg">More...</a>
<a href="{{ get_url(path='@/experiment-control/place-order.md') }}" class="btn btn-primary btn-inversed btn-lg" itemprop="url">Order hardware</a>
<a href="https://m-labs.hk/artiq/manual/" class="btn btn-primary btn-lg" itemprop="url">Manual</a>
<a href="https://forum.m-labs.hk" class="btn btn-primary btn-lg" itemprop="url">Forum</a>
<a href="{{ get_url(path='@/experiment-control/artiq.md') }}" class="btn btn-primary btn-lg" itemprop="url">More...</a>
<div class="btn-group download-selector" >
<a class="btn btn-primary btn-lg d-inline-flex" href="https://nixbld.m-labs.hk/job/artiq/extra/msys2-offline-installer/latest/download/1">
<img src="/images/icons/icon-windows.svg" class="d-inline-block align-self-center mx-1" style="height: 1rem" alt="windows">
@ -64,15 +69,25 @@
<span>stable</span>
</button>
<ul class="dropdown-menu shadow dropdown-menu-end">
<li>
<a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra/msys2-offline-installer/latest/download/1">
ARTIQ-8 (stable) for Windows
<li itemscope itemtype="https://schema.org/SoftwareApplication">
<a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra/msys2-offline-installer/latest/download/1" itemprop="downloadUrl">
<span itemprop="softwareVersion"><span itemprop="name">ARTIQ</span>-8 (stable) for <span itemprop="operatingSystem">Windows</span></span>
</a>
<div hidden itemprop="offers" itemtype="https://schema.org/Offer" itemscope>
<div itemprop="price">
0
</div>
</div>
</li>
<li>
<a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra-beta/msys2-offline-installer/latest/download/1">
ARTIQ-9 (beta) for Windows
<li itemscope itemtype="https://schema.org/SoftwareApplication">
<a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra-beta/msys2-offline-installer/latest/download/1" itemprop="downloadUrl">
<span itemprop="softwareVersion"><span itemprop="name">ARTIQ</span>-9 (beta) for <span itemprop="operatingSystem">Windows</span></span>
</a>
<div hidden itemprop="offers" itemtype="https://schema.org/Offer" itemscope>
<div itemprop="price">
0
</div>
</div>
</li>
</ul>
</div>
@ -90,22 +105,24 @@
<div class="col-12">
<div class="card shadow mt-3 mb-3">
<div class="card shadow mt-3 mb-3" itemscope itemtype="https://schema.org/Poster">
<div class="card-body p-3 p-md-5 card-jobs">
<div class="col-12 col-md-6 ps-0 pe-0">
<h5 class="card-title">Jobs</h5>
<h5 class="card-title" itemprop="headline">Jobs</h5>
<div class="desc-wrapper" itemprop="description">
<p class="card-text pt-3">
We are always looking for talented people to join our team and help us deliver the systems that enable the experimental quantum research of tomorrow.
</p>
<p class="card-text pt-3">
If you are good at software, electronics or photonics, and physics makes you tick, then you should get in touch. Locations in Hong Kong and Manila available.
</p>
</div>
<a href="{{ get_url(path='@/about-us/jobs.md') }}" class="btn btn-primary btn-lg">Find out more...</a>
<a href="{{ get_url(path='@/about-us/jobs.md') }}" class="btn btn-primary btn-lg" itemprop="url">Find out more...</a>
</div>
@ -121,14 +138,15 @@
<div class="col-12">
<div class="card shadow mt-3 mb-3">
<div class="card shadow mt-3 mb-3" itemscope itemtype="https://schema.org/Poster">
<div class="card-body p-3 p-md-5 card-gateware">
<div class="col-12 col-md-6 ps-0 pe-0">
<h5 class="card-title">Gateware and system-on-chip design</h5>
<h5 class="card-title" itemprop="headline">Gateware and system-on-chip design</h5>
<div class="desc-wrapper" itemprop="description">
<p class="card-text pt-3">
Traditional gateware design with Verilog and VHDL is well known to be tedious and inefficient. M-Labs have developed Migen, a Python-based HDL and toolbox that addresses many of their issues and makes gateware design more productive.
</p>
@ -136,8 +154,9 @@
<p class="card-text pt-3 pb-3">
Built on Migen, MiSoC provides a high performance, flexible and lightweight solution to build system-on-chips for various applications.
</p>
</div>
<a href="{{ get_url(path='@/gateware/migen.md') }}" class="btn btn-primary btn-lg">Read more...</a>
<a href="{{ get_url(path='@/gateware/migen.md') }}" class="btn btn-primary btn-lg" itemprop="url">Read more...</a>
</div>

View File

@ -1,8 +1,9 @@
{% extends 'section.html' %}
{% block deferred_styles %}
{{ super() }}
{% block styles %}
<link rel="stylesheet" href="{{ get_url(path='css/bootstrap-5.3.0.min.css', cachebust=true) }}">
<link rel="stylesheet" href="{{ get_url(path='css/styles.css', cachebust=true) }}">
<link rel="stylesheet" href="{{ get_url(path='css/order-hardware.css', cachebust=true) }}">
{% endblock %}

View File

@ -1,6 +1,7 @@
{% extends 'section.html' %}
{% block styles %}
{{ super() }}
<style>
h5 {
margin-bottom: 2rem!important;

View File

@ -2,7 +2,7 @@
{% block main %}
<main class="container {% block maincss %}{% endblock %}">
<main class="container {% block maincss %}{% endblock %}" xmlns="http://www.w3.org/1999/html">
<div class="row">
{% block main_content %}
@ -14,26 +14,28 @@
{% set publications = load_data(path=page.extra.data, format="yaml") -%}
{% for publication in publications %}
<div class="col">
<div class="card shadow h-100" >
<div class="card shadow h-100" itemscope itemtype="https://schema.org/ScholarlyArticle">
<div class="card-body">
<strong class="card-title">{{ publication.title | safe }}</strong>
<strong class="card-title" itemprop="headline">{{ publication.title | safe }}</strong>
{% if publication.authors.short or publication.authors.full %}
<p class="card-text">
<span itemprop="author">
{{ publication.authors.short | safe }}
<span class="collapse" id="viewdetails{{ publication.title | slugify | truncate(length=20, end="")}}">
{{ publication.authors.full }}
</span>
</span>
<a data-bs-toggle="collapse" class="hide-expanded" data-bs-target="#viewdetails{{ publication.title | slugify | truncate(length=20, end="") }}"> ...more</a>
<a data-bs-toggle="collapse" class="show-expanded" data-bs-target="#viewdetails{{ publication.title | slugify | truncate(length=20, end="") }}"><br>less</a>
</p>
{% else %}
<p class="card-text">{{ publication.authors }}</p>
<p class="card-text" itemprop="author">{{ publication.authors }}</p>
{% endif %}
</div>
<div class="card-footer border-light-subtle">
{% for link in publication.links %}
{% if link.path %}
<a href="{{link.path}}" class="card-link">{{link.name}}</a>
<a href="{{link.path | safe}}" class="card-link" itemprop="archivedAt">{{link.name}}</a>
{% else %}
<div class="card-link d-inline">{{link.name}}</div>
{% endif %}

View File

@ -1,23 +1,23 @@
<div class="{% if css %}{{ css }}{% else %}col-12 col-md-4{% endif %} mb-4">
<div class="{% if not rmcard %}card shadow{% endif %} h-100">
<div class="{% if not rmcard %}card shadow{% endif %} h-100" itemscope itemtype="https://schema.org/Thing">
{% if not imgbottom %}
{% if src %}
<div class="px-auto pt-4">
<img src="{{ get_url(path=src, cachebust=true) }}" width="40px">
<img src="{{ get_url(path=src, cachebust=true) }}" width="40px" itemprop="image">
</div>
{% endif %}
<div class="card-body">
{% if title %}
<div class="card-title">
<div class="card-title" itemprop="name">
<h5 class="mb-0">{{ title }}</h5>
</div>
{% endif %}
<div {% if sameheight %}style="min-height: {{ sameheight }}px"{% endif%}>
<div {% if sameheight %}style="min-height: {{ sameheight }}px"{% endif%} itemprop="description">
{{ body | markdown | safe }}
</div>
@ -27,18 +27,18 @@
<div class="card-body">
{% if title %}
<div class="card-title">
<div class="card-title" itemprop="name">
<h5 class="mb-0">{{ title }}</h5>
</div>
{% endif %}
{{ body | markdown | safe }}
<span itemprop="description">{{ body | markdown | safe }}</span>
</div>
{% if src %}
<div class="">
<img src="{{ get_url(path=src, cachebust=true) }}" class="card-img img-fluid">
<img src="{{ get_url(path=src, cachebust=true) }}" class="card-img img-fluid" itemprop="image">
</div>
{% endif %}

View File

@ -1,24 +1,24 @@
{% if position == "left" %}
<div class="card mb-3 shadow" style="max-width: 80%;margin-right: 20%;">
<div class="card mb-3 shadow" style="max-width: 80%;margin-right: 20%;" itemscope itemtype="https://schema.org/Grant">
<div class="row g-0">
<div class="col-md-4 funding-logo-start d-flex p-1 justify-content-center">
{% if logo %}
{% if logo_link %}<a href="{{ logo_link }}" class="align-self-center">{% endif %}
<img src="{{ logo }}" class="img-fluid rounded" alt="{{ logo_alt }}"/>
{% if logo_link %}<a href="{{ logo_link | safe }}" class="align-self-center" itemprop="url">{% endif %}
<img src="{{ logo | safe }}" class="img-fluid rounded" alt="{{ logo_alt }}" itemprop="image"/>
{% if logo_link %}</a>{% endif %}
{% endif %}
</div>
<div class="col-md-8">
<div class="card-body">
{% if title %}<h5 class="card-title">{{ title | markdown | safe }}</h5>{% endif %}
{% if title %}<h5 class="card-title" itemprop="sponsor">{{ title | markdown | safe }}</h5>{% endif %}
{% if icon %}
<span class="badge bg-transparent position-absolute top-0 start-100 translate-middle-x">
<img src="{{ icon }}" alt="{{ icon }}" class="rounded"
<img src="{{ icon | safe }}" alt="{{ icon }}" class="rounded"
style="height: 2rem;"/>
</span>
{% endif %}
<p class="card-text">{{ body | markdown | safe }}</p>
<div class="card-text" itemprop="description">{{ body | markdown | safe }}</div>
</div>
</div>
</div>
@ -26,24 +26,24 @@
{% elif position == "right" %}
<div class="card mb-3 shadow" style="max-width: 80%;margin-left: 20%;">
<div class="card mb-3 shadow" style="max-width: 80%;margin-left: 20%;" itemscope itemtype="https://schema.org/Grant">
<div class="row g-0">
<div class="col-md-8">
<div class="card-body">
{% if title %}<h5 class="card-title text-end">{{ title | markdown | safe }}</h5>{% endif %}
{% if title %}<h5 class="card-title text-end" itemprop="sponsor">{{ title | markdown | safe }}</h5>{% endif %}
{% if icon %}
<span class="badge bg-transparent position-absolute top-0 start-0 translate-middle-x">
<img src="{{ icon }}" alt="{{ icon }}" class="rounded"
<img src="{{ icon | safe }}" alt="{{ icon }}" class="rounded"
style="height: 2rem;"/>
</span>
{% endif %}
<p class="card-text">{{ body | markdown | safe }}</p>
<div class="card-text" itemprop="description">{{ body | markdown | safe }}</div>
</div>
</div>
<div class="col-md-4 funding-logo-end d-flex p-1 justify-content-center">
{% if logo %}
{% if logo_link %}<a href="{{ logo_link }}" class="align-self-center">{% endif %}
<img src="{{ logo }}" class="img-fluid rounded" alt="{{ logo_alt }}"/>
{% if logo_link %}<a href="{{ logo_link | safe }}" class="align-self-center" itemprop="url">{% endif %}
<img src="{{ logo | safe }}" class="img-fluid rounded" alt="{{ logo_alt }}" itemprop="image" />
{% if logo_link %}</a>{% endif %}
{% endif %}
</div>
@ -52,12 +52,12 @@
{% else %}
<div class="card mb-3 shadow-sm" style="max-width: 100%;">
<div class="card mb-3 shadow-sm" style="max-width: 100%;" itemscope itemtype="https://schema.org/Poster">
<div class="row g-0">
<div class="col-md-12">
<div class="card-body">
{% if title %}<h4 class="card-title text-center">{{ title | markdown | safe }}</h4>{% endif %}
<p class="card-text">{{ body | markdown | safe }}</p>
{% if title %}<h4 class="card-title text-center" itemprop="headline">{{ title | markdown | safe }}</h4>{% endif %}
<div class="card-text" itemprop="description">{{ body | markdown | safe }}</div>
</div>
</div>
</div>