Compare commits

..

No commits in common. "master" and "fix-tec-counter" have entirely different histories.

36 changed files with 370 additions and 929 deletions

View File

@ -1,4 +1,4 @@
base_url = "https://m-labs.hk"
base_url = "/"
title = "M-Labs"
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?
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 650.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 500.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):
- 2% discount with an order volume exceeding USD 100,000.00.
- 4% discount with an order volume exceeding USD 250,000.00.

View File

@ -37,7 +37,7 @@ The <a href="https://github.com/quartiq/stabilizer" target="_blank" rel="noopene
<div class="row d-flex align-items-top mt-5 mb-5">
{% layout_html(css='row d-flex align-items-top mt-5 mb-5') %}
<div class="col-12 col-md-3">
<ul>
@ -66,7 +66,7 @@ The <a href="https://github.com/quartiq/stabilizer" target="_blank" rel="noopene
</p>
</div>
</div>
{% end %}

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" itemprop="url">PDF</a> | <a href="https://m-labs.hk/artiq/manual/" target="_blank" rel="noopener noreferrer" itemprop="url">HTML</a>
<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>
{% 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" itemprop="url">PDF</a> | <a href="https://m-labs.hk/artiq/sipyco-manual/" target="_blank" rel="noopener noreferrer" itemprop="url">HTML</a>
<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>
{% 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" itemprop="url">PDF</a> | <a href="https://m-labs.hk/artiq/manual-beta/" target="_blank" rel="noopener noreferrer" itemprop="url">HTML</a>
<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>
{% end %}
{% layout_card(title="ARTIQ manual", sameheight=100) %}
<small>Legacy version</small>
<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>
<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>
{% 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" itemprop="url">View slides</a>
<a href="/docs/artiq/artiq_overview.pdf" target="_blank" rel="noopener noreferrer">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" itemprop="url">View slides</a>
<a href="/docs/artiq/slides_timing.pdf" target="_blank" rel="noopener noreferrer">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" itemprop="url">Mattermost live chat</a>
<a href="http://chat.m-labs.hk/" target="_blank" rel="noopener noreferrer">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" itemprop="url">Forum</a>
<a href="https://forum.m-labs.hk/" target="_blank" rel="noopener noreferrer">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" itemprop="url">IRC: #m-labs</a>
<a href="https://webchat.oftc.net/" target="_blank" rel="noopener noreferrer">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" itemprop="url">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">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" itemprop="url">ARTIQ source code repository</a>
<a href="https://github.com/m-labs/artiq" target="_blank" rel="noopener noreferrer">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" itemprop="url">Gitea</a>
<a href="https://git.m-labs.hk" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a> | <a href="https://arxiv.org/abs/1911.10841" target="_blank" rel="noopener noreferrer" itemprop="url">Paper</a>
<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>
{% 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" itemprop="url">Repository</a>
<a href="https://github.com/OxfordIonTrapGroup/ndscan" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/OxfordIonTrapGroup/oitg" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/EGGS-Experiment/LAX_exp" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/vontell/nvOS" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/HaeffnerLab/artiq-work-lattice" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/cnourshargh/Bham-ARTIQ-examples" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repositories</a>
<a href="https://gitlab.com/duke-artiq" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/robertfasano/argent" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://gitlab.com/duke-artiq/flake8-artiq" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/charlesbaynham/GenericSCPIDriver" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://gitlab.com/charlesbaynham/artiq_influx_generic" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/OregonIons/DP700" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/OregonIons/AGUC8" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/OregonIons/TSICam" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/vuthalab/artiq" target="_blank" rel="noopener noreferrer">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" itemprop="url">Repository</a>
<a href="https://github.com/PhBrb/OffsetStabilizer" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
</div>

View File

@ -28,10 +28,6 @@ One of the main devices in the Sinara family is the 1124 Carrier (codenamed Kasl
<a href="https://github.com/sinara-hw/Kasli/wiki" target="_blank" rel="noopener noreferrer">More information</a>
<p style="padding-top: 8px">
<span class='doc-icon'></span> <a href="/docs/sinara-datasheets/1124.pdf" target="_blank" rel="noopener noreferrer">1124 Carrier Kasli 2.0 datasheet</a>
</p>
{% end %}
{% layout_text_img(src="images/kasli-soc@2x.png", popup="images/origin/kasli-soc.jpg", alt="", textleft=true, shadow=false) %}
@ -44,10 +40,6 @@ See our paper <a href="https://arxiv.org/abs/2111.15290" target="_blank" rel="no
<a href="https://github.com/sinara-hw/Kasli-SoC/wiki" target="_blank" rel="noopener noreferrer">More information</a>
<p style="padding-top: 8px">
<span class='doc-icon'></span> <a href="/docs/sinara-datasheets/1125.pdf" target="_blank" rel="noopener noreferrer">1125 Carrier Kasli SoC datasheet</a>
</p>
{% end %}
{% layout_text_img(src="images/isolated-ttl@2x.png", popup="images/origin/dio.jpg", alt="", shadow=false) %}
@ -175,11 +167,6 @@ Comparing Mirny to Urukul:
<a href="https://github.com/sinara-hw/mirny/wiki" target="_blank" rel="noopener noreferrer">More information</a>
<p style="padding-top: 8px">
<span class='doc-icon'></span> <a href="/docs/sinara-datasheets/4456.pdf" target="_blank" rel="noopener noreferrer">4456 Synthesizer Mirny datasheet</a>
</p>
{% end %}
@ -246,11 +233,6 @@ In SU-Servo mode, the 5108 Sampler can be used in combination with the 4410 DDS
Note that update rate specification on this page is for the hardware only; ARTIQ kernel and RTIO overhead make the effective sample rate lower. Typically, only with gateware (e.g. SU-Servo) can the maximum bandwidth be achieved. SU-Servo is part of the regular ARTIQ firmware; development of other gateware can be purchased separately.
<p style="padding-top: 8px">
<span class='doc-icon'></span> <a href="/docs/sinara-datasheets/5108.pdf" target="_blank" rel="noopener noreferrer">5108 ADC Sampler datasheet</a>
</p>
{% end %}
@ -277,11 +259,6 @@ The Sinara 7210 is a low-noise clock distribution module that can be used to dis
<a href="https://github.com/sinara-hw/Clocker/wiki" target="_blank" rel="noopener noreferrer">More information</a>
<p style="padding-top: 8px">
<span class='doc-icon'></span> <a href="/docs/sinara-datasheets/7210.pdf" target="_blank" rel="noopener noreferrer">7210 Clocker datasheet</a>
</p>
{% end %}

859
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -8,8 +8,7 @@
"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",
"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"
"build-dev": "npx webpack --mode=development --devtool=inline-source-map"
},
"repository": {
"type": "git",
@ -34,8 +33,7 @@
"babel-preset-minify": "^0.5.2",
"webpack": "^5.93.0",
"webpack-cli": "^5.1.4",
"webpack-preprocessor-loader": "^1.3.0",
"purgecss": "^7.0.2"
"webpack-preprocessor-loader": "^1.3.0"
},
"babel": {
"presets": [

View File

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

File diff suppressed because one or more lines are too long

32
static/js/as.js Normal file
View File

@ -0,0 +1,32 @@
(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);
});
});
}
})();

2
static/js/jquery-3.7.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
static/js/jquery-3.7.0.slim.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -129,12 +129,6 @@ const shop_data = {
{type: "Line", args: {title: "Please provide delivery address",
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,
}},
]}
],
@ -184,8 +178,6 @@ const shop_data = {
'4 MMCX clock outputs.',
'Price includes bitstream generation, flashing, testing, and firmware updates for 1 year (USD 1,400.00).',
],
datasheet_file: '/docs/sinara-datasheets/1124.pdf',
datasheet_name: '1124 Carrier Kasli 2.0 datasheet',
size: 'big',
options: [
{type: "Radio", args: {title: "DRTIO role", outvar: "drtio_role", variants: ["standalone", "master", "satellite"], tip: "Distributed Real Time Input/Output allows ARTIQ RTIO channels to be distributed among several satellite devices synchronized and controlled by a central core(master) device. Standalone option disables this feature."}},
@ -250,8 +242,6 @@ const shop_data = {
'12 EEM connectors.',
'4 MMCX clock outputs.',
],
datasheet_file: '/docs/sinara-datasheets/1125.pdf',
datasheet_name: '1124 Carrier Kasli SoC datasheet',
size: 'big',
hp: 8,
nbrSlotMin: 0,
@ -476,7 +466,7 @@ const shop_data = {
name: 'MCX-TTL',
name_number: '2238',
name_codename: '',
price: 700,
price: 600,
image: '/images/shop/graphic-03_MCX-TTL.svg',
specs: [
'16 single-ended digital signals on MCX connectors.',
@ -870,8 +860,6 @@ const shop_data = {
'Each card provides 8 channels.',
'Breaking out all 32 channels from a Zotino requires 4 IDC-BNC cards.'
],
datasheet_file: '/docs/sinara-datasheets/5518-5528.pdf',
datasheet_name: '5518 BNC-IDC / 5528 SMA-IDC datasheet',
size: 'big',
warnings: [
"no_idc_source"
@ -921,8 +909,6 @@ const shop_data = {
'Each card provides 8 channels.',
'Breaking out all 32 channels from a Zotino requires 4 SMA-IDC cards.'
],
datasheet_file: '/docs/sinara-datasheets/5518-5528.pdf',
datasheet_name: '5518 BNC-IDC / 5528 SMA-IDC datasheet',
size: 'small',
warnings: [
"no_idc_source"
@ -937,7 +923,7 @@ const shop_data = {
name: 'MCX-IDC',
name_number: '5538',
name_codename: '',
price: 900,
price: 320,
image: '/images/shop/graphic-03_MCX-IDC32.svg',
specs: [
'Breaks out analog signals from Zotino or HD68-IDC to MCX connectors.',
@ -963,8 +949,6 @@ const shop_data = {
specs: [
'Connects an external HD68 cable to IDC-BNC, IDC-SMA or IDC-MCX cards.',
],
datasheet_file: '/docs/sinara-datasheets/5568.pdf',
datasheet_name: '5568 HD68-IDC datasheet',
size: 'small',
options: [
{type: "Radio", args: {title: "Cable length", outvar: "hd68_cable_len", variants: ["1 M", "2 M", "3 M"], tip: "The desired length of the HD68 cable", fallback: 1}},
@ -996,8 +980,6 @@ const shop_data = {
'Full-scale input ranges between +-10mV and +-10V.',
'Supports SU-Servo laser intensity stabilization servo in conjunction with Urukul.'
],
datasheet_file: '/docs/sinara-datasheets/5108.pdf',
datasheet_name: '5108 ADC Sampler datasheet',
options: [
{type: "Switch", args: {title: "1 EEM mode", outvar: "mono_eem"}},
{
@ -1072,8 +1054,6 @@ const shop_data = {
'Frequency up to 1GHz.',
'Low jitter <100fs RMS.'
],
datasheet_file: '/docs/sinara-datasheets/7210.pdf',
datasheet_name: '7210 Clocker datasheet',
options: [
{type: "Switch", args: {title: "Ext CLK", outvar: "ext_clk"}},
{type: "Switch", args: {title: "Ext power", outvar: "ext_pwr", "tip": "Use external power supply in order to reduce number of used EEM connectors"}}
@ -1177,8 +1157,6 @@ const shop_data = {
'Lower jitter and phase noise.',
'Large frequency changes take several milliseconds.',
],
datasheet_file: '/docs/sinara-datasheets/4456.pdf',
datasheet_name: '4456 Synthesizer Mirny datasheet',
options: [
{type: "SwitchLine", args: {title: "Ext CLK", outvar: "ext_clk",
validator: {name: "frequency", params: {min: 10e6, max: 600e6}},

40
static/sw.js Normal file
View File

@ -0,0 +1,40 @@
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.opt.css', cachebust=true) }}">
<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 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 | safe }}">{{ page.title }}</a>
<a class="dropdown-item pt-2 pb-2 pt-sm-3 pb-sm-3" href="{{ page.permalink }}">{{ 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 | safe }}">{{ subsection.title }}</a>
<a class="nav-link" href="{{ subsection.permalink }}">{{ subsection.title }}</a>
</li>
{% endif %}
@ -155,6 +155,7 @@
<!-- ./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 | safe }}">
<meta property="og:image" content="{{ get_url(path='images/logo@2x.png', cachebust=true) }}">
<meta property="og:url" content="{{ config.base_url }}">
<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,21 +42,11 @@
<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="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 %}
{% block styles %}{% endblock %}
</head>
<body itemscope itemtype="https://schema.org/WebPage">
<body>
<!-- HEADER -->
@ -64,7 +54,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" itemscope itemtype="http://schema.org/SiteNavigationElement">
<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">
<a class="navbar-brand logo me-0" href="/">
<img src="{{ get_url(path='images/logo@2x.png') }}" height="40" alt="logo">
@ -94,11 +84,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 | safe }}" itemprop="url">
<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 }}">
<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 | safe }}" itemprop="url">{{ tmp_page.title }}</a>
<a class="dropdown-item pt-2 pb-2 {% if current_path == tmp_page.path %}active{% endif %}" href="{{ tmp_page.permalink }}">{{ tmp_page.title }}</a>
{% endif %}
{% endfor %}
</div>
@ -107,7 +97,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 | safe }}">{{ subsection.title }}</a>
<a class="nav-link" href="{{ subsection.permalink }}">{{ subsection.title }}</a>
</li>
{% endif %}
@ -136,6 +126,25 @@
{% 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 %}
@ -147,8 +156,8 @@
{% endblock %}
<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 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>
{% block fcopyright %}
@ -173,7 +182,11 @@
</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>
@ -187,20 +200,16 @@
</script>
<script>
document.addEventListener('DOMContentLoaded', function() {
const modal = document.getElementById('modalEnlarged');
const enlargedImg = document.getElementById('enlarged');
modal.addEventListener('hidden.bs.modal', function() {
enlargedImg.src = '';
$(function () {
$('#modalEnlarged').on('hidden.bs.modal', function (e) {
$('#enlarged').attr('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();
});
$('[data-popup]').click(function (evt) {
var _self = $(this);
var _img_enlarged = _self.data('nsrc');
$('#enlarged').attr('src', _img_enlarged);
$('#modalEnlarged').modal('show');
});
});
</script>

View File

@ -1,32 +1,28 @@
<div class="row pt-5 pb-5">
<div class="col-12 col-md-6 pb-5 pb-md-0" itemscope itemtype="https://schema.org/ContactPoint">
<div class="col-12 col-md-6 pb-5 pb-md-0">
<h5 class="pb-3" itemprop="contactType">Sales inquiries</h5>
<h5 class="pb-3">Sales inquiries</h5>
<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>
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>
</div>
<div class="col-12 col-md-6 pb-5 pb-md-0">
<div class="pb-3" itemscope itemtype="https://schema.org/ContactPoint">
<h5 class="pb-3" itemprop="contactType">Commercial technical support</h5>
<h5 class="pb-3">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")}}" itemprop="email">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")}}">helpdesk@{{get_env(name="DOMAINNAME", default="m-labs.hk")}}</a>.
</p>
</div>
<div class="mt-3" itemscope itemtype="https://schema.org/ContactPoint">
<h5 class="pb-3" itemprop="contactType">Community support</h5>
<h5 class="pb-3">Community support</h5>
<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>
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>
</div>
</div>

View File

@ -1,8 +1,5 @@
{% extends '_base.html' %}
{% block links %}
<link rel="preload" href="images/hero@2x.png" as="image" >
{% endblock %}
{% block hero %}
@ -14,7 +11,7 @@
<div class="col-12 text-center">
<h1 itemprop="headline">Open tools for open physics.</h1>
<h1>Open tools for open physics.</h1>
<img src="{{ get_url(path='images/ion@2x.png', cachebust=true) }}" height="12" alt="ion">
@ -37,15 +34,14 @@
<div class="col-12">
<div class="card shadow mt-3 mb-3" itemscope itemtype="https://schema.org/Poster">
<div class="card shadow mt-3 mb-3">
<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" itemprop="headline">ARTIQ</h5>
<h5 class="card-title">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>
@ -53,13 +49,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" 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 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>
<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">
<span class="d-inline-block">Download <sup>.exe</sup></span>
@ -69,25 +64,15 @@
<span>stable</span>
</button>
<ul class="dropdown-menu shadow dropdown-menu-end">
<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>
<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
</a>
<div hidden itemprop="offers" itemtype="https://schema.org/Offer" itemscope>
<div itemprop="price">
0
</div>
</div>
</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" itemprop="downloadUrl">
<span itemprop="softwareVersion"><span itemprop="name">ARTIQ</span>-9 (beta) for <span itemprop="operatingSystem">Windows</span></span>
<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
</a>
<div hidden itemprop="offers" itemtype="https://schema.org/Offer" itemscope>
<div itemprop="price">
0
</div>
</div>
</li>
</ul>
</div>
@ -105,24 +90,22 @@
<div class="col-12">
<div class="card shadow mt-3 mb-3" itemscope itemtype="https://schema.org/Poster">
<div class="card shadow mt-3 mb-3">
<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" itemprop="headline">Jobs</h5>
<h5 class="card-title">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" itemprop="url">Find out more...</a>
<a href="{{ get_url(path='@/about-us/jobs.md') }}" class="btn btn-primary btn-lg">Find out more...</a>
</div>
@ -138,15 +121,14 @@
<div class="col-12">
<div class="card shadow mt-3 mb-3" itemscope itemtype="https://schema.org/Poster">
<div class="card shadow mt-3 mb-3">
<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" itemprop="headline">Gateware and system-on-chip design</h5>
<h5 class="card-title">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>
@ -154,9 +136,8 @@
<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" itemprop="url">Read more...</a>
<a href="{{ get_url(path='@/gateware/migen.md') }}" class="btn btn-primary btn-lg">Read more...</a>
</div>

View File

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

View File

@ -1,7 +1,6 @@
{% 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 %}" xmlns="http://www.w3.org/1999/html">
<main class="container {% block maincss %}{% endblock %}">
<div class="row">
{% block main_content %}
@ -14,28 +14,26 @@
{% set publications = load_data(path=page.extra.data, format="yaml") -%}
{% for publication in publications %}
<div class="col">
<div class="card shadow h-100" itemscope itemtype="https://schema.org/ScholarlyArticle">
<div class="card shadow h-100" >
<div class="card-body">
<strong class="card-title" itemprop="headline">{{ publication.title | safe }}</strong>
<strong class="card-title">{{ 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" itemprop="author">{{ publication.authors }}</p>
<p class="card-text">{{ publication.authors }}</p>
{% endif %}
</div>
<div class="card-footer border-light-subtle">
{% for link in publication.links %}
{% if link.path %}
<a href="{{link.path | safe}}" class="card-link" itemprop="archivedAt">{{link.name}}</a>
<a href="{{link.path}}" class="card-link">{{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" itemscope itemtype="https://schema.org/Thing">
<div class="{% if not rmcard %}card shadow{% endif %} h-100">
{% if not imgbottom %}
{% if src %}
<div class="px-auto pt-4">
<img src="{{ get_url(path=src, cachebust=true) }}" width="40px" itemprop="image">
<img src="{{ get_url(path=src, cachebust=true) }}" width="40px">
</div>
{% endif %}
<div class="card-body">
{% if title %}
<div class="card-title" itemprop="name">
<div class="card-title">
<h5 class="mb-0">{{ title }}</h5>
</div>
{% endif %}
<div {% if sameheight %}style="min-height: {{ sameheight }}px"{% endif%} itemprop="description">
<div {% if sameheight %}style="min-height: {{ sameheight }}px"{% endif%}>
{{ body | markdown | safe }}
</div>
@ -27,18 +27,18 @@
<div class="card-body">
{% if title %}
<div class="card-title" itemprop="name">
<div class="card-title">
<h5 class="mb-0">{{ title }}</h5>
</div>
{% endif %}
<span itemprop="description">{{ body | markdown | safe }}</span>
{{ body | markdown | safe }}
</div>
{% if src %}
<div class="">
<img src="{{ get_url(path=src, cachebust=true) }}" class="card-img img-fluid" itemprop="image">
<img src="{{ get_url(path=src, cachebust=true) }}" class="card-img img-fluid">
</div>
{% endif %}

View File

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

View File

@ -0,0 +1,5 @@
<div class="{% if css %}{{ css }}{% else %}row d-flex align-items-center mt-5 mb-5{% endif %}">
{{ body | safe }}
</div>