ab-test
<tosi-ab> provides a simple method for implementing A|B-testing.
import { AbTest } from 'tosijs-ui'
function randomize() {
const conditions = {
testA: Math.random() < 0.5,
testB: Math.random() < 0.5,
testC: Math.random() < 0.5
}
AbTest.conditions = conditions
preview.querySelector('pre').innerText = JSON.stringify(conditions, null, 2)
}
preview.querySelector('.randomize-conditions').addEventListener('click', randomize)
randomize()
<div style="display: flex; gap: 10px; align-items: center;">
<div style="display: flex; flex-direction: column; gap: 10px;">
<tosi-ab class="a" condition="testA">
<p>testA</p>
</tosi-ab>
<tosi-ab class="not-a" not condition="testA">
<p>not testA</p>
</tosi-ab>
<tosi-ab class="b" condition="testB">
<p>testB</p>
</tosi-ab>
<tosi-ab class="not-b" not condition="testB">
<p>not testB</p>
</tosi-ab>
<tosi-ab class="c" condition="testC">
<p>testC</p>
</tosi-ab>
<tosi-ab class="not-c" not condition="testC">
<p>not testC</p>
</tosi-ab>
</div>
<pre>
</pre>
</div>
<button class="randomize-conditions">Randomize</button>
.preview {
display: flex;
flex-direction: column;
gap: 4px;
align-items: flex-start;
}
.preview p {
background: #44c;
color: white;
display: block;
border-radius: 99px;
padding: 4px 10px;
margin: 0;
}
.preview tosi-ab[not] p {
background: red;
}
- Set
AbTest.conditionsto anything you like. - Use
<tosi-ab>elements to display conditional content. conditionattribute determines which value inAbTest.conditionscontrols the elementnotreverses the condition (so<tosi-ab not condition="foo">will be visible ifconditions.fooisfalse)