Compare commits

..

10 Commits

Author SHA1 Message Date
8fc3f3086d Embed microdata to some pages
Only to some, where it is not invasive and can be useful. If the microdata will be successful in SE rankings, it can be expanded more.

Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-23 16:04:31 +08:00
c92e4c5488 Fix links and nested p tags
Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-23 16:04:31 +08:00
feda1c2942 Add alternate links to target different regions and make .hk site canonical
Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-23 16:04:31 +08:00
c9190565a0 Remove dead SW code
Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-23 16:04:31 +08:00
3ccbd41ef2 Fix and optimize shop styles and remove jquery
Reduce bootstrap bundle, replace jquery dependant code and remove jquery. Optimize style loading.
Overall the lighthouse metrics are far better now.

Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-23 16:04:31 +08:00
037cadbe6d Replace deferred styles with standard linking
This alone improves CLS from 0.9 down to 0.005, and overall score in lighthouse to green values

Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-23 16:04:31 +08:00
68828c65d3 Fix robots.txt
Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-23 16:04:31 +08:00
a083a4f3ab update MCX prices 2025-01-21 14:58:03 +08:00
4af4e4c055 faq: raise APC threshold 2025-01-20 10:03:41 +08:00
573fd4a848 Add switch for requesting manufacturing outside HK
Signed-off-by: Egor Savkin <es@m-labs.hk>
2025-01-10 13:03:31 +08:00
21 changed files with 888 additions and 363 deletions

View File

@ -1,4 +1,4 @@
base_url = "/" base_url = "https://m-labs.hk"
title = "M-Labs" title = "M-Labs"
description = "Open tools for open physics." description = "Open tools for open physics."

View File

@ -44,7 +44,7 @@ M-Labs ships with UPS by default, and we also offer FedEx or DHL shipping for an
##### Can I have a discount? ##### Can I have a discount?
M-Labs offers discounts in the following cases: M-Labs offers discounts in the following cases:
* 10% discount plus free DAP shipping if the research supported by our equipment is made public and exclusively published in a non-predatory scientific journal. A non-predatory journal is defined as an open access journal with an article processing fee of USD 500.00 or less. * 10% discount plus free DAP shipping if the research supported by our equipment is made public and exclusively published in a non-predatory scientific journal. A non-predatory journal is defined as an open access journal with an article processing fee of USD 650.00 or less.
* Volume discounts (applies to new orders and not retroactively, volume is determined over the 365 days prior to the new order, the new order is included in the amount compared against the threshold): * Volume discounts (applies to new orders and not retroactively, volume is determined over the 365 days prior to the new order, the new order is included in the amount compared against the threshold):
- 2% discount with an order volume exceeding USD 100,000.00. - 2% discount with an order volume exceeding USD 100,000.00.
- 4% discount with an order volume exceeding USD 250,000.00. - 4% discount with an order volume exceeding USD 250,000.00.

View File

@ -13,25 +13,25 @@ template = "page.html"
{% layout_card(title="ARTIQ manual", sameheight=100) %} {% layout_card(title="ARTIQ manual", sameheight=100) %}
<small>Stable version</small> <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 %} {% end %}
{% layout_card(title="SiPyCo manual", sameheight=100) %} {% layout_card(title="SiPyCo manual", sameheight=100) %}
<small>Starting with ARTIQ-5, this library replaces <tt>artiq.protocols</tt>.</small> <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 %} {% end %}
{% layout_card(title="ARTIQ manual", sameheight=100) %} {% layout_card(title="ARTIQ manual", sameheight=100) %}
<small>Beta (development) version</small> <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 %} {% end %}
{% layout_card(title="ARTIQ manual", sameheight=100) %} {% layout_card(title="ARTIQ manual", sameheight=100) %}
<small>Legacy version</small> <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 %} {% end %}
@ -39,14 +39,14 @@ template = "page.html"
{% layout_card(title="Slideshow", sameheight=100) %} {% layout_card(title="Slideshow", sameheight=100) %}
<small>The ARTIQ experiment control system</small> <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 %} {% end %}
{% layout_card(title="Slideshow", sameheight=100) %} {% layout_card(title="Slideshow", sameheight=100) %}
<small>Timing control in ARTIQ</small> <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 %} {% end %}
</div> </div>
@ -64,40 +64,40 @@ template = "page.html"
<div class="row mt-5"> <div class="row mt-5">
{% layout_card(src="images/mattermost@2x.png", css="col-12 col-md-4 text-center") %} {% 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> <small>(bridged to IRC)</small>
{% end %} {% end %}
{% layout_card(src="images/forum@2x.png", css="col-12 col-md-4 text-center") %} {% 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> <small>&nbsp;</small>
{% end %} {% end %}
{% layout_card(src="images/irc@2x.png", css="col-12 col-md-4 text-center") %} {% 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> <small>on OFTC</small>
{% end %} {% end %}
{% layout_card(src="images/press@2x.png", css="col-12 col-md-4 text-center") %} {% 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> <small>&nbsp;</small>
{% end %} {% end %}
{% layout_card(src="images/git@2x.png", css="col-12 col-md-4 text-center") %} {% 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> <small>on GitHub</small>
{% end %} {% end %}
{% layout_card(src="images/git@2x.png", css="col-12 col-md-4 text-center") %} {% 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> <small>&nbsp;</small>
{% end %} {% 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) %} {% 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> <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 %} {% end %}
{% layout_card(title="ndscan", sameheight=120) %} {% layout_card(title="ndscan", sameheight=120) %}
<small>N-dimensional scans for ARTIQ</small> <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 %} {% end %}
{% layout_card(title="Oxford routines", sameheight=120) %} {% layout_card(title="Oxford routines", sameheight=120) %}
<small>Oxford Ion-Trap Group routines</small> <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 %} {% end %}
{% layout_card(title="UCLA routines", sameheight=120) %} {% layout_card(title="UCLA routines", sameheight=120) %}
<small>ARTIQ experiments in use at UCLA AMO</small> <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 %} {% end %}
{% layout_card(title="nvOS", sameheight=120) %} {% layout_card(title="nvOS", sameheight=120) %}
<small>A quantum operating system built around ARTIQ and NV centers in diamond.</small> <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 %} {% end %}
{% layout_card(title="Haeffner Lab routines", sameheight=120) %} {% layout_card(title="Haeffner Lab routines", sameheight=120) %}
<small>Haeffner Lab (Berkeley) routines</small> <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 %} {% end %}
{% layout_card(title="Birmingham examples", sameheight=120) %} {% layout_card(title="Birmingham examples", sameheight=120) %}
<small>A repository of simple examples of ARTIQ code</small> <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 %} {% end %}
{% layout_card(title="DAX - Duke ARTIQ extensions", sameheight=120) %} {% 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> <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 %} {% end %}
{% layout_card(title="Argent", sameheight=120) %} {% layout_card(title="Argent", sameheight=120) %}
<small>High-level sequence control interface for ARTIQ.</small> <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 %} {% end %}
{% layout_card(title="flake8-artiq", sameheight=120) %} {% layout_card(title="flake8-artiq", sameheight=120) %}
<small>A Flake8 plugin for checking ARTIQ code</small> <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 %} {% end %}
{% layout_card(title="GenericSCPIDriver", sameheight=120) %} {% layout_card(title="GenericSCPIDriver", sameheight=120) %}
<small>A generic Python driver for SCPI devices driven over serial connections. Compatible with ARTIQ.</small> <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 %} {% end %}
{% layout_card(title="artiq_influx_generic", sameheight=120) %} {% layout_card(title="artiq_influx_generic", sameheight=120) %}
<small>RPC interface to InfluxDB with support for generic data logging.</small> <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 %} {% end %}
{% layout_card(title="DP700", sameheight=120) %} {% layout_card(title="DP700", sameheight=120) %}
<small>ARTIQ NDSP for RIGOL DP700 Series power supplies.</small> <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 %} {% end %}
{% layout_card(title="AGUC8", sameheight=120) %} {% layout_card(title="AGUC8", sameheight=120) %}
<small>ARTIQ NDSP for Newport AG-UC8 piezo motor controller.</small> <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 %} {% end %}
{% layout_card(title="TSICam", sameheight=120) %} {% layout_card(title="TSICam", sameheight=120) %}
<small>ARTIQ NDSP for Thorlabs Scientific Imaging cameras.</small> <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 %} {% end %}
{% layout_card(title="U Toronto examples", sameheight=120) %} {% layout_card(title="U Toronto examples", sameheight=120) %}
<small>A repository of examples of ARTIQ code and instructions</small> <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 %} {% end %}
{% layout_card(title="OffsetStabilizer", sameheight=120) %} {% layout_card(title="OffsetStabilizer", sameheight=120) %}
<small>Stabilizer firmware for laser frequency offset stabilization</small> <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 %} {% end %}
</div> </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", "start": "npx webpack --watch",
"build": "npx webpack", "build": "npx webpack",
"start-dev": "npx webpack --watch --mode=development --devtool=inline-source-map", "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": { "repository": {
"type": "git", "type": "git",
@ -33,7 +34,8 @@
"babel-preset-minify": "^0.5.2", "babel-preset-minify": "^0.5.2",
"webpack": "^5.93.0", "webpack": "^5.93.0",
"webpack-cli": "^5.1.4", "webpack-cli": "^5.1.4",
"webpack-preprocessor-loader": "^1.3.0" "webpack-preprocessor-loader": "^1.3.0",
"purgecss": "^7.0.2"
}, },
"babel": { "babel": {
"presets": [ "presets": [

View File

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

@ -129,6 +129,12 @@ const shop_data = {
{type: "Line", args: {title: "Please provide delivery address", {type: "Line", args: {title: "Please provide delivery address",
outvar: "shipping_instructions", fallback: "",}}], outvar: "shipping_instructions", fallback: "",}}],
]}, ]},
{type: "Switch", args: {
title: "I would like this order made outside Hong Kong (see FAQ)",
outvar: "outside_hk",
tip: "For the convenience of our customers who may be discouraged from doing business with companies registered in Hong Kong, M-Labs can manufacture Sinara hardware orders upon request in Manila, Philippines. Additional fees and terms may apply.",
fallback: false,
}},
]} ]}
], ],
@ -470,7 +476,7 @@ const shop_data = {
name: 'MCX-TTL', name: 'MCX-TTL',
name_number: '2238', name_number: '2238',
name_codename: '', name_codename: '',
price: 600, price: 700,
image: '/images/shop/graphic-03_MCX-TTL.svg', image: '/images/shop/graphic-03_MCX-TTL.svg',
specs: [ specs: [
'16 single-ended digital signals on MCX connectors.', '16 single-ended digital signals on MCX connectors.',
@ -931,7 +937,7 @@ const shop_data = {
name: 'MCX-IDC', name: 'MCX-IDC',
name_number: '5538', name_number: '5538',
name_codename: '', name_codename: '',
price: 320, price: 900,
image: '/images/shop/graphic-03_MCX-IDC32.svg', image: '/images/shop/graphic-03_MCX-IDC32.svg',
specs: [ specs: [
'Breaks out analog signals from Zotino or HD68-IDC to MCX connectors.', 'Breaks out analog signals from Zotino or HD68-IDC to MCX connectors.',

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

View File

@ -17,8 +17,8 @@
<meta property="og:description" content="{% block og_description%}{{ config.description }}{% endblock %}"> <meta property="og:description" content="{% block og_description%}{{ config.description }}{% endblock %}">
{% endblock %} {% endblock %}
<meta property="og:site_name" content="{{ config.extra.author }}"> <meta property="og:site_name" content="{{ config.extra.author }}">
<meta property="og:url" content="{{ config.base_url }}"> <meta property="og:url" content="{{ config.base_url | safe }}">
<meta property="og:image" content={{ get_url(path='images/logo@2x.png', cachebust=true) }}> <meta property="og:image" content="{{ get_url(path='images/logo@2x.png', cachebust=true) }}">
{% block meta %}{% endblock meta %} {% block meta %}{% endblock meta %}
<meta name="theme-color" content="#715ec7"> <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="shortcut icon" type="image/x-icon">
<link href="{{ get_url(path='favicon.ico', cachebust=true) }}" rel="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> </head>
<body> <body itemscope itemtype="https://schema.org/WebPage">
<!-- HEADER --> <!-- HEADER -->
@ -54,7 +64,7 @@
<header class="container"> <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="/"> <a class="navbar-brand logo me-0" href="/">
<img src="{{ get_url(path='images/logo@2x.png') }}" height="40" alt="logo"> <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"> <div class="dropdown-menu shadow-none shadow-lg text-start text-lg-start" aria-labelledby="navbarDropdown">
{% for tmp_page in subsection.pages %} {% for tmp_page in subsection.pages %}
{% if tmp_page.extra.menu_item and tmp_page.extra.menu_item == "th1" %} {% 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> <center>{{ tmp_page.title }}</center>
</a> </a>
{% else %} {% 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 %} {% endif %}
{% endfor %} {% endfor %}
</div> </div>
@ -97,7 +107,7 @@
{% elif subsection.title != 'Other' %} {% elif subsection.title != 'Other' %}
<li class="nav-item ms-0 ms-md-4 {% if current_path == subsection.path %}active{% endif %}"> <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> </li>
{% endif %} {% endif %}
@ -126,25 +136,6 @@
{% endblock %} {% endblock %}
<!-- ./MAIN CONTENT --> <!-- ./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 --> <!-- FOOTER -->
{% block footer %} {% block footer %}
@ -156,8 +147,8 @@
{% endblock %} {% endblock %}
<p class="pt-4 pb-2 text-center"> <p class="pt-4 pb-2 text-center" itemprop="copyrightNotice">
<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> <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> </p>
{% block fcopyright %} {% block fcopyright %}
@ -182,11 +173,7 @@
</div> </div>
</div> </div>
<script src="{{ get_url(path='js/bootstrap-5.3.0.bundle.min.js', cachebust=true) }}" defer></script>
<!-- <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> <script>
@ -200,16 +187,20 @@
</script> </script>
<script> <script>
$(function () { document.addEventListener('DOMContentLoaded', function() {
$('#modalEnlarged').on('hidden.bs.modal', function (e) { const modal = document.getElementById('modalEnlarged');
$('#enlarged').attr('src', ''); const enlargedImg = document.getElementById('enlarged');
});
$('[data-popup]').click(function (evt) { modal.addEventListener('hidden.bs.modal', function() {
var _self = $(this); enlargedImg.src = '';
var _img_enlarged = _self.data('nsrc'); });
$('#enlarged').attr('src', _img_enlarged); document.querySelectorAll('[data-popup]').forEach(function(element) {
$('#modalEnlarged').modal('show'); element.addEventListener('click', function() {
const imgSrc = this.dataset.nsrc;
enlargedImg.src = imgSrc;
const bsModal = new bootstrap.Modal(modal);
bsModal.show();
});
}); });
}); });
</script> </script>

View File

@ -1,28 +1,32 @@
<div class="row pt-5 pb-5"> <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> <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")}}">sales@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}</a>. 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> </p>
</div> </div>
<div class="col-12 col-md-6 pb-5 pb-md-0"> <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> <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> </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> <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">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>. 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> </p>
</div>
</div> </div>

View File

@ -1,5 +1,8 @@
{% extends '_base.html' %} {% extends '_base.html' %}
{% block links %}
<link rel="preload" href="images/hero@2x.png" as="image" >
{% endblock %}
{% block hero %} {% block hero %}
@ -11,7 +14,7 @@
<div class="col-12 text-center"> <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"> <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="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="card-body p-3 p-md-5 card-artiq">
<div class="col-12 col-md-6 ps-0 pe-0"> <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"> <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. 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> </p>
@ -49,11 +53,12 @@
<p class="card-text pt-3 pb-3"> <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. 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> </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="{{ 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">Manual</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">Forum</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">More...</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" > <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"> <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"> <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> <span>stable</span>
</button> </button>
<ul class="dropdown-menu shadow dropdown-menu-end"> <ul class="dropdown-menu shadow dropdown-menu-end">
<li> <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"> <a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra/msys2-offline-installer/latest/download/1" itemprop="downloadUrl">
ARTIQ-8 (stable) for Windows <span itemprop="softwareVersion"><span itemprop="name">ARTIQ</span>-8 (stable) for <span itemprop="operatingSystem">Windows</span></span>
</a> </a>
<div hidden itemprop="offers" itemtype="https://schema.org/Offer" itemscope>
<div itemprop="price">
0
</div>
</div>
</li> </li>
<li> <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"> <a class="dropdown-item" href="https://nixbld.m-labs.hk/job/artiq/extra-beta/msys2-offline-installer/latest/download/1" itemprop="downloadUrl">
ARTIQ-9 (beta) for Windows <span itemprop="softwareVersion"><span itemprop="name">ARTIQ</span>-9 (beta) for <span itemprop="operatingSystem">Windows</span></span>
</a> </a>
<div hidden itemprop="offers" itemtype="https://schema.org/Offer" itemscope>
<div itemprop="price">
0
</div>
</div>
</li> </li>
</ul> </ul>
</div> </div>
@ -90,22 +105,24 @@
<div class="col-12"> <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="card-body p-3 p-md-5 card-jobs">
<div class="col-12 col-md-6 ps-0 pe-0"> <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"> <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. 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>
<p class="card-text pt-3"> <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. 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> </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> </div>
@ -121,14 +138,15 @@
<div class="col-12"> <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="card-body p-3 p-md-5 card-gateware">
<div class="col-12 col-md-6 ps-0 pe-0"> <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"> <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. 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> </p>
@ -136,8 +154,9 @@
<p class="card-text pt-3 pb-3"> <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. Built on Migen, MiSoC provides a high performance, flexible and lightweight solution to build system-on-chips for various applications.
</p> </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> </div>

View File

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

View File

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

View File

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

View File

@ -1,23 +1,23 @@
<div class="{% if css %}{{ css }}{% else %}col-12 col-md-4{% endif %} mb-4"> <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 not imgbottom %}
{% if src %} {% if src %}
<div class="px-auto pt-4"> <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> </div>
{% endif %} {% endif %}
<div class="card-body"> <div class="card-body">
{% if title %} {% if title %}
<div class="card-title"> <div class="card-title" itemprop="name">
<h5 class="mb-0">{{ title }}</h5> <h5 class="mb-0">{{ title }}</h5>
</div> </div>
{% endif %} {% endif %}
<div {% if sameheight %}style="min-height: {{ sameheight }}px"{% endif%}> <div {% if sameheight %}style="min-height: {{ sameheight }}px"{% endif%} itemprop="description">
{{ body | markdown | safe }} {{ body | markdown | safe }}
</div> </div>
@ -27,18 +27,18 @@
<div class="card-body"> <div class="card-body">
{% if title %} {% if title %}
<div class="card-title"> <div class="card-title" itemprop="name">
<h5 class="mb-0">{{ title }}</h5> <h5 class="mb-0">{{ title }}</h5>
</div> </div>
{% endif %} {% endif %}
{{ body | markdown | safe }} <span itemprop="description">{{ body | markdown | safe }}</span>
</div> </div>
{% if src %} {% if src %}
<div class=""> <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> </div>
{% endif %} {% endif %}

View File

@ -1,24 +1,24 @@
{% if position == "left" %} {% 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="row g-0">
<div class="col-md-4 funding-logo-start d-flex p-1 justify-content-center"> <div class="col-md-4 funding-logo-start d-flex p-1 justify-content-center">
{% if logo %} {% if logo %}
{% if logo_link %}<a href="{{ logo_link }}" class="align-self-center">{% endif %} {% if logo_link %}<a href="{{ logo_link | safe }}" class="align-self-center" itemprop="url">{% endif %}
<img src="{{ logo }}" class="img-fluid rounded" alt="{{ logo_alt }}"/> <img src="{{ logo | safe }}" class="img-fluid rounded" alt="{{ logo_alt }}" itemprop="image"/>
{% if logo_link %}</a>{% endif %} {% if logo_link %}</a>{% endif %}
{% endif %} {% endif %}
</div> </div>
<div class="col-md-8"> <div class="col-md-8">
<div class="card-body"> <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 %} {% if icon %}
<span class="badge bg-transparent position-absolute top-0 start-100 translate-middle-x"> <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;"/> style="height: 2rem;"/>
</span> </span>
{% endif %} {% endif %}
<p class="card-text">{{ body | markdown | safe }}</p> <div class="card-text" itemprop="description">{{ body | markdown | safe }}</div>
</div> </div>
</div> </div>
</div> </div>
@ -26,24 +26,24 @@
{% elif position == "right" %} {% 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="row g-0">
<div class="col-md-8"> <div class="col-md-8">
<div class="card-body"> <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 %} {% if icon %}
<span class="badge bg-transparent position-absolute top-0 start-0 translate-middle-x"> <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;"/> style="height: 2rem;"/>
</span> </span>
{% endif %} {% endif %}
<p class="card-text">{{ body | markdown | safe }}</p> <div class="card-text" itemprop="description">{{ body | markdown | safe }}</div>
</div> </div>
</div> </div>
<div class="col-md-4 funding-logo-end d-flex p-1 justify-content-center"> <div class="col-md-4 funding-logo-end d-flex p-1 justify-content-center">
{% if logo %} {% if logo %}
{% if logo_link %}<a href="{{ logo_link }}" class="align-self-center">{% endif %} {% if logo_link %}<a href="{{ logo_link | safe }}" class="align-self-center" itemprop="url">{% endif %}
<img src="{{ logo }}" class="img-fluid rounded" alt="{{ logo_alt }}"/> <img src="{{ logo | safe }}" class="img-fluid rounded" alt="{{ logo_alt }}" itemprop="image" />
{% if logo_link %}</a>{% endif %} {% if logo_link %}</a>{% endif %}
{% endif %} {% endif %}
</div> </div>
@ -52,12 +52,12 @@
{% else %} {% 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="row g-0">
<div class="col-md-12"> <div class="col-md-12">
<div class="card-body"> <div class="card-body">
{% if title %}<h4 class="card-title text-center">{{ title | markdown | safe }}</h4>{% endif %} {% if title %}<h4 class="card-title text-center" itemprop="headline">{{ title | markdown | safe }}</h4>{% endif %}
<p class="card-text">{{ body | markdown | safe }}</p> <div class="card-text" itemprop="description">{{ body | markdown | safe }}</div>
</div> </div>
</div> </div>
</div> </div>